【问题标题】:Verilog test bench for loop(priority, problem with value)Verilog 循环测试台(优先级,值问题)
【发布时间】:2018-12-03 01:43:46
【问题描述】:

对于i=0j=0,此代码使我的a,b,cin and s 信号变为xxxxxxxx

对于i=0j=1,我的a,b,cin and s 都是00000000。对于i=0 j=0 cin =0,这应该是我的加法器的结果。怎么了?我确定我的加法器模块是正确的。

http://prntscr.com/lpngel

http://prntscr.com/lpngih(……等等)

大多数问题首先出现在 for 循环中,并在一些值未打印时开始,然后在我在每个循环中添加 begin end 后,我看到了带有上述问题的完整循环结果^^^ ^^.仍然不知道它是如何工作的,但它确实做到了

module test_cla4_n;

    reg [7:0] a,b;
    reg cin;

    wire [7:0] s;
    wire cout;

    integer i;
    integer j;
    integer cv;

    cla4_n#(.n(8)) UUT
        (.a(a), .b(b),
              .cin(cin),
             .s(s), .cout(cout));

    initial 
     begin
    for(cv=0;cv<=1;cv=cv+1)
     begin
        for (i=0;i<6;i=i+1) 
         begin
            for (j=0;j<6;j=j+1)
             begin
                #100 a = j; b = i; cin = cv;

             end
         end
     end

     end

    initial
     begin
    $monitor($time,   ,"a=%9b, b=%9b, cin=%b, sum=%9b", a, b, cin, s); 
     end
    endmodule

【问题讨论】:

  • 你先有一个延迟,然后设置值。测试台通常更喜欢反过来:a = j; b = i; cin = cv; #100;
  • 马上回来查看
  • 谢谢!!不会意识到即使我在那里再坐 10 个小时也可能更多。 prntscr.com/lpni7f.
  • @Oldfart btw 对for 循环上的begin end 的任何评论。另请阅读我在帖子中的最后一段

标签: verilog


【解决方案1】:

只要您了解延迟是如何工作的,您是否在分配之前或之后放置 #100 延迟并不重要。循环。

您显示的代码中唯一需要begin/end 的地方任何地方是最里面的for(j=0;`循环。

【讨论】:

    【解决方案2】:

    verilog 中的所有 4 状态变量和网络均使用“x”进行初始化。因此,在您在模拟中驱动某些东西之前,所有信号都将保持“x”。

    在您的测试台中,您在循环中使用 #100 延迟。在您的表达中,这意味着#100之后的所有分配将仅在100个verilog模拟周期(或您使用'timescale'设置的任何内容)之后发生。但在此之前,您的所有值都将保持为“x”。

    现在当 #100 触发时,您将拥有以下内容:

        #100 
        a = j; <-- 0
        b = i; <-- 0
        cin = cv; <-- 0
        j = j + 1; <-- 1 << from the loop
    

    你最终得到 a = 0、b = 0、c = 0,而 j 将变为 '1'。

    现在您的模拟将启动并计算上述结果。您可以在接下来的模拟中继续这一思路。

    为了让所有这些语句在 #100 之后的循环中发生,是的,您需要在它们周围放置 begin/end。否则,只有第一条语句将在最内层循环中进行评估。这类似于任何编程语言。

    for (j=0;j<6;j=j+1)
    begin
      #100 // wait here for 100 simulation ticks
        a = j; 
        b = i; 
        cin = cv;
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      相关资源
      最近更新 更多