功能评估错误

时间:2016-03-23 19:43:17

标签: verilog

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行收到错误。请帮帮我

2 个答案:

答案 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];是一个程序性陈述。它属于内部 initialalways块。你在外面。还有,yreg;您无法从reginitial块外部分配到always