【问题标题】:How to write string values in Verilog testbench?如何在 Verilog 测试台中写入字符串值?
【发布时间】:2019-09-09 12:23:30
【问题描述】:

我正在尝试编写一个 Verilog 测试平台,我必须在其中编写一些寄存器的输出。我想写L而不是0,和H而不是1,例如'100101'作为g'HLLHLH'。我知道写二进制、十六进制或十进制值,但不确定是否可以在 Verilog 中完成?

【问题讨论】:

    标签: verilog test-bench


    【解决方案1】:

    假设您没有使用 SystemVerilog,您可以编写一个任务,例如:

    task LHwrite (input integer bin, input integer length);
      integer i;
      for (i=length-1; i>=0; i=i-1)
        $write("%s", "L"-(bin[i]*8'h4));
    endtask 
    

    bin 是您要显示的值(最多 32 位); length 是要显示的位数。任务遍历输入:

    for (i=length-1; i>=0; i=i-1)
    

    然后使用$write 系统任务(类似于$display 但没有换行符)来显示您想要的字符串。这是根据“H”的 ASCII 码是 8'h48 而“L”的 ASCII 码是 8'h4C 的知识计算得出的。

    https://www.edaplayground.com/x/4Ewk

    module M;
    
      task LHwrite (input integer bin, input integer length);
        integer i;
        for (i=length-1; i>=0; i=i-1)
          $write("%s", "L"-(bin[i]*8'h4));
      endtask 
    
      initial
        begin : test
          reg [5:0] bin = 6'b100101;
          LHwrite(bin, 6);
          $write("\n");
        end
    
    endmodule
    

    【讨论】:

      【解决方案2】:

      System verilog 测试平台是一种编程语言。您可以在其中进行正常的编程操作。但是,在这种情况下,您需要像以下示例中那样一点一点地创建结果字符串:

      program a;
        bit [3:0] data  = 4'b1100;
        initial begin
          string out;
          $display("%b ==> ", data);
          for (int i = 0; i < $bits(data); i++) begin
            if ((data & ($bits(data)) == 0)
              out = {"L", out};
            else 
              out = {"H", out};
            data >>= 1;
          end
          $display(" ==> %s", out);
        end
      endprogram
      

      结果:

      1100 ==> 
        ==> HHLL
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多