합성 가능 Verilog 모듈을 구현하려고합니다.이 모듈은 2 개의 벡터/배열로 구성된 벡터 제품을 생성합니다. 각 제품에는 8 개의 16 비트 부호없는 정수가 들어 있습니다. 디자인 컴파일러가 symbol i must be a constant or parameter
오류를보고했습니다. 나는 그것을 고치는 법을 모른다. 여기 내 코드가있다.Verilog 벡터 내부 제품
module VecMul16bit (a, b, c, clk, rst);
// Two vector inner product, each has 8 elements
// Each element is 16 bits
// So the Output should be at least 2^32*2^3 = 2^35 in order to
// prevent overflow
// Output is 35 bits
input clk;
input rst;
input [127:0] a,b;
output [35:0] c;
reg [15:0] a_cp [0:7];
reg [15:0] b_cp [0:7];
reg [35:0] c_reg;
reg k,c_done;
integer i;
always @ (a)
begin
for (i=0; i<=7; i=i+1) begin
a_cp[i] = a[i*15:i*15+15];
end
end
always @ (b)
begin
for (i=0; i<=7; i=i+1) begin
b_cp[i] = b[i*15:i*15+15];
end
end
assign c = c_reg;
always @(posedge clk or posedge rst)
begin
if (rst) begin
c_reg <= 0;
k <= 0;
c_done <= 0;
end else begin
c_reg <= c_done ? c_reg : (c_reg + a_cp[k]*b_cp[k]);
k <= c_done ? k : k + 1;
c_done <= c_done ? 1 : (k == 7);
end
end
endmodule
당신이 볼 수 있듯이, 나는 루프를 통해 a_cp
-a
을 복사하기 위해 노력하고있어,이 할 수있는 올바른 방법인가?
그렇다면 어떻게 정의해야합니까? i
및 for 루프에서 스테퍼로 사용할 수 있습니까?
색인은 아마도 'i * 16'만큼 이동해야합니다. 그렇지 않으면 슬라이스 사이에 겹침이 있습니다. '+ :'의 앞뒤에 공백을 추가하여 두드러지게 만듭니다.'a [i * 15 + : 16]; – Greg