首页 > 解决方案 > 如何在 Verilog 测试台中写入字符串值?

问题描述

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

标签: verilogtest-bench

解决方案


假设您没有使用 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

推荐阅读