如何使用从文件中读取的字符串值
How use value of string read from file
我声明我是 verilog 新手。
我正在尝试制作一个测试平台来测试设计。
在文件中,我的每一行都有一组 值。
文件中的值如下所示:
| 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A | 64'h2A2A2A2A2A2A2A2A | 64'hC30D63F15BA8B687 |
到目前为止我所做的(可能是错误的)是打开文件并像读取字符串一样读取它:
while (! $ feof (outfile0)) begin // read until an "end of file" is reached.
@ (posedge clk);
$ fgets (A, outfile0);
ctxt = A[184:16];
key= A[688:392];
我想实现的是作业
key = 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A
但如果我这样做
key = A [688: 392];
打印key无法得到期望值
我认为问题是我为密钥分配了一个字符串,而不是从文件中读取的十六进制值,但是我不知道如何解决这个问题。
谢谢大家!
编辑 - 示例代码:
reg [63:0] ctxt;
reg [127:0] key;
wire [63:0] ptxt;
integer outfile0;
reg [728:0] A;
begin: READ_FILE
outfile0=$fopen("test.txt","r");
while (! $feof(outfile0)) begin
@(posedge clk);
$fgets(A, outfile0);
#10;
ctxt = A[184:16];
key=A[688:392];
end
$fclose(outfile0);
结束
Test.txt 示例:
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
.
.
.
etc
使用 $fscanf
代替 $fgets
读取格式化数据。格式化数据不理解 SystemVerilog 数字语法,因此您可以将其删除,或者确保在您的格式字符串中跳过它
code = $fscanf(outfile0, "| 128'h%h | 64'h%h | 64'h%h |", key, ctxt, ptxt);
我声明我是 verilog 新手。
我正在尝试制作一个测试平台来测试设计。
在文件中,我的每一行都有一组
文件中的值如下所示:
| 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A | 64'h2A2A2A2A2A2A2A2A | 64'hC30D63F15BA8B687 |
到目前为止我所做的(可能是错误的)是打开文件并像读取字符串一样读取它:
while (! $ feof (outfile0)) begin // read until an "end of file" is reached.
@ (posedge clk);
$ fgets (A, outfile0);
ctxt = A[184:16];
key= A[688:392];
我想实现的是作业
key = 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A
但如果我这样做
key = A [688: 392];
打印key无法得到期望值
我认为问题是我为密钥分配了一个字符串,而不是从文件中读取的十六进制值,但是我不知道如何解决这个问题。
谢谢大家!
编辑 - 示例代码:
reg [63:0] ctxt;
reg [127:0] key;
wire [63:0] ptxt;
integer outfile0;
reg [728:0] A;
begin: READ_FILE
outfile0=$fopen("test.txt","r");
while (! $feof(outfile0)) begin
@(posedge clk);
$fgets(A, outfile0);
#10;
ctxt = A[184:16];
key=A[688:392];
end
$fclose(outfile0);
结束
Test.txt 示例:
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
.
.
.
etc
使用 $fscanf
代替 $fgets
读取格式化数据。格式化数据不理解 SystemVerilog 数字语法,因此您可以将其删除,或者确保在您的格式字符串中跳过它
code = $fscanf(outfile0, "| 128'h%h | 64'h%h | 64'h%h |", key, ctxt, ptxt);