如何在verilog中使用if语句

时间:2015-03-11 20:49:22

标签: if-statement verilog

我在使用verilog实施时遇到了一个彻底的灾难,但是这个问题在一个小时左右让我感到紧张,我无法修复它!

这是我的代码

genvar i;
assign eq=1; 
assign gr=0;
generate for(i=7 ; i>=0 ; i=i-1)
        initial begin
        if(eq&&~gr)
            if (a[i]&~b[i])
              initial begin
               assign gr=1;
               assign eq=0;
              end
            else if (~a[i]|b[i])
            initial begin
              assign gr=0;

    assign eq=0;
    end
    end
endgenerate

这个想法是创建一些if语句,所以如果gr为0且eq为1,我可以比较[i]和b [i]。 算法无法改变因为它是一个任务,我必须以这种方式工作,但我真的很想找到问题所在(verilog的错误描述根本没有帮助)

1 个答案:

答案 0 :(得分:0)

  • generate块用于在编译/精化时复制硬件
  • initial块仅在时间0运行一个。对ab的更改将不起作用。嵌套initial块是非法的。
  • 不应在assign块中使用
  • initial语句(这是合法的,但非常不鼓励,并考虑折旧)。通常,非三态assign到网络应该只进行一次。
  • 要进行持续评估,您需要使用always

最好的猜测,这是你想要的功能:

integer i;
reg eq,gr; 

always @* begin
  for (i=7 ; i>=0 ; i=i-1) begin
    if (eq&&~gr) begin
      if (a[i]&~b[i]) begin
        gr=1;
        eq=0;
      end
      else if (~a[i]|b[i]) begin
        gr=0;
      end
    end
    eq=0;
  end
end