Я хотел бы создать экземпляр массива регистров и объявить их все в соответствии с определенной функцией. Это для блока множителей, который я надеюсь построить.Синтаксис двумерного массива Verilog
Код я работаю с ниже, но это линия, что компилятор не оценит:
q[i][7:0] = {8{a[i]}} & b[7:0];
Так как код написан, я надеюсь сделать регистры д [0] , q [1], .... q [7] все сохраняют 8-битное значение, определяемое RHS выше. Может ли кто-нибудь сказать мне, что было бы правильным способом сделать это?
Весь код:
`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
EDIT: этот код также не работает: сообщение
`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
Ошибка:
«Line 16: процедурное назначение к не-регистр i не разрешен, левая сторона должна быть reg/integer/time/genvar "
'q [0] [7: 0] = {8 {a [0]}} & b [7: 0];' не будет действительным verilog. Ему нужен «присваивать» для типа провода или внутри 'always' для типа reg. – Morgan
Если я положил его внутри «initial», он все равно не принимает его. То же самое происходит всегда. Редактирование на моем операторе также имеет код, который не работает. – triplebig
Может ли кто-нибудь дать представление о том, почему я был заблокирован, поэтому я могу улучшить в будущем? – triplebig