首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用从文件中读取的字符串值

如何使用从文件中读取的字符串值
EN

Stack Overflow用户
提问于 2021-10-08 17:04:32
回答 1查看 40关注 0票数 1

我声明我是第一次接触verilog。

我正在试着做一个测试平台来测试一个设计。

在这个文件中,每一行都有一组< plaintext>,密文,密钥的值。

文件中的值如下所示:

代码语言:javascript
运行
复制
| 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A | 64'h2A2A2A2A2A2A2A2A | 64'hC30D63F15BA8B687 |

到目前为止,我所做的(可能是错误的)是打开文件并读取它,就像它是一个字符串:

代码语言:javascript
运行
复制
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];

我想要完成的任务是

代码语言:javascript
运行
复制
key = 128'h2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A

但如果我这么做了

代码语言:javascript
运行
复制
key = A [688: 392];

我无法通过打印密钥获得期望值

我认为问题是我给键分配了一个字符串,而不是从文件中读取的十六进制值,但是我不知道如何解决这个问题。

谢谢大家!

编辑-示例代码:

代码语言:javascript
运行
复制
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示例:

代码语言:javascript
运行
复制
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
| 128'h00000000000000000000000000000000 | 64'h0000000000000008 | 64'h2FFCE6557D7DC86C |
.
.
.
etc
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-08 18:09:09

使用$fscanf而不是$fgets读取格式化数据。格式化数据不理解SystemVerilog number语法,因此您可以将其移除,或者确保在格式化字符串中跳过它

代码语言:javascript
运行
复制
code = $fscanf(outfile0, "| 128'h%h | 64'h%h | 64'h%h |", key, ctxt, ptxt);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69499443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档