module ff(fv,a,b,c);
output [9:0]fv;
input [4 : 0] a,b,c;
reg [4 : 0] x[9 : 0];
reg [9 : 0] np[9 : 0];
reg [4:0] newpop;
reg [4 : 0] y;
genvar i;
initial
begin
x = { 4, 7, 2, 5, 4, 5, 9, 3, 0, 2 };
end
//assign fv = ((a*x*x)-(b*x)+c);
for (i=0; i<10; i=i+1)
begin
y = x[i];
always @ (y)
newpop <= fitf(y,a,b,c);
assign np[i] = newpop;
end
function automatic integer fitf;
input [4:0] Y,A,B,C;
begin
fitf = ((A*Y*Y)-(B*Y)-C);
end
endfunction
endmodule
我正在尝试评估函数并将值存储在数组中。这是我写的代码,但我在第19行收到错误。请帮帮我
答案 0 :(得分:2)
生成for循环在编译时被解开。赋值必须在程序块或赋值语句中;生成语句的begin
- end
不算作过程块。因此y = x[i];
是非法语法。 reg
类型只能在一个始终块中进行更新以进行综合,不能在Verilog中使用assign
语句进行分配(在SystemVerilog中可以)。
尝试将所有内容放在一个总是块上。
integer i;
always @* begin
for (i=0; i<10; i=i+1) begin
np[i] = fitf(x[i],a,b,c);
end
end
答案 1 :(得分:1)
y = x[i];
是一个程序性陈述。它属于内部 initial
或always
块。你在外面。还有,y
是reg
;您无法从reg
或initial
块外部分配到always
。