我想实例化一个寄存器数组,并根据某个函数声明它们全部。这是我希望构建的乘法器块。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