如何在 Verilog 测试台中写入字符串值?
How to write string values in Verilog testbench?
我正在尝试编写一个 Verilog 测试台,我必须在其中写入一些寄存器的输出。我想写 L
而不是 0
, H
而不是 1
例如 '100101'
as g 'HLLHLH'
。我知道写二进制、十六进制或十进制值,但我不确定是否可以在 Verilog 中完成?
System 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
假设您没有使用 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' 是 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 测试台,我必须在其中写入一些寄存器的输出。我想写 L
而不是 0
, H
而不是 1
例如 '100101'
as g 'HLLHLH'
。我知道写二进制、十六进制或十进制值,但我不确定是否可以在 Verilog 中完成?
System 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
假设您没有使用 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' 是 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