我想實例化一個寄存器數組,並根據某個函數聲明它們全部。這是我希望構建的乘法器塊。Verilog二維數組語法
我正在使用的代碼如下,但是這是編譯器並不領情行:
q[i][7:0] = {8{a[i]}} & b[7:0];
由於代碼編寫出來,我希望能寄存器Q [0] ,q [1],... q [7]都存儲由上面的RHS定義的8位值。誰能告訴我什麼是正確的方法來做到這一點?
整個代碼:
`timescale 1ns/1ps
module multiplier_2(
input [7:0] A,
input [7:0] B,
output reg [15:0] P,
input start,
output stop
);
reg [7:0] q[7:0];
reg P = 0;
//create 8 bit vectors q[i]
genvar i;
generate
for (i = 0; i < 8;i = i+1)
begin: loop
q[i][7:0] = {8{a[i]}} & b[7:0];
end
endgenerate
always @ (*)
begin
if (start == 1'b1)
begin
for (i = 0; i < 8; i = i+1)
begin
P = P + (q[i] << i);
end
end
end
endmodule
編輯:此代碼也不起作用:
`timescale 1ns/1ps
module multiplier_2(
input [7:0] a,
input [7:0] b,
output reg [15:0] P = 16'd0,
input start,
output stop
);
reg [7:0] q[7:0];
//create 8 bit vectors q[i]
genvar i;
generate
always begin
for (i = 0; i < 8;i = i+1)
begin: loop
q[i] = {8{a[i]}} & b[7:0];
end
end
endgenerate
always @ (*)
begin
stop = 1'b0;
if (start == 1'b1)
begin
for (i = 0; i < 8; i = i+1)
begin
P = P + (q[i] << i);
end
end
stop = 1'b1;
end
endmodule
錯誤消息:
「第16行:程序分配到非註冊我是不允許的,左側應該是reg/integer/time/genvar「
'q [0] [7:0] = {8 {a [0]}}&b [7:0];'不是有效的verilog。它需要一個「分配」用於導線類型,或者在一個reg類型的「always」內。 – Morgan
如果我把它放在「初始」裏面,它仍然不接受它。一如既往。在我的op上編輯也有一個不起作用的代碼。 – triplebig
任何人都可以提供洞察力,爲什麼我是downvoted,所以我可以改善未來? – triplebig