簡體   English   中英

如何在Verilog測試平台中寫入字符串值?

[英]How to write string values in Verilog testbench?

我試圖編寫一個Verilog測試平台,我必須在其中編寫一些寄存器的輸出。 我想寫L而不是0 ,寫H而不是1例如'100101'作為'HLLHLH' 我知道寫二進制,十六進制或十進制值的方法,但是我不確定是否可以在Verilog中完成?

假設您沒有使用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

系統Verilog Testbench是一種編程語言。 您可以在其中進行常規編程。 但是,在這種情況下,您需要像下面的示例一樣一點一點地創建結果字符串:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM