while循环中的for循环

时间:2016-03-09 07:01:53

标签: verilog modelsim

大家好我在for循环中写了一个while循环,但它不起作用我的编码有问题吗?

always@ (posedge clk) begin
  if (delay) 
    D = 1;
  else
    D = 0;

  if (a) begin
    for (g=0;g<10;g=g+1) begin
      high <= high_in;
      low <= low_in;
      delay = 0;
      while (count == 0) begin // when i simulate the waveform cant come 
                                     out and it stuck at here
        ws = 1;
        count <= D;
        delay = 1;
      end
      delay = 0;
    end
  end
  else begin
    //other coding
  end
end

2 个答案:

答案 0 :(得分:0)

如果在count为零时进入while循环,则会出现无限循环。您在count上进行了非阻止分配,因此不会更新。查找阻止与非阻止分配。

答案 1 :(得分:0)

我发现此代码存在一些基本问题: - 1.在同一块块中混合并匹配阻塞和非阻塞。 2.在always块中使用blocking语句是一个问题创建者 3.没有复位/默认值计数,循环外延迟。虽然决策是基于此。

很少有建议: -

  1. 尝试在always语句外使用for和while循环。
  2. 尝试为循环使用分配默认值。
  3. 根据EML的建议,请尝试重新编写。尽量不要将不同的任务组合起来。