如何在Verilog测试平台中写入字符串值?

时间:2019-09-09 12:23:30

标签: verilog test-bench

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

系统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
相关问题