3

我需要在 Verilog 模拟中对字符串执行基本操作,例如连接、替换和比较。怎么可能?有内置支持吗?

提前致谢。

4

3 回答 3

4

Verilog 中没有字符串数据类型,但是 verilog 确实支持字符串文字并将它们用作字节向量。这是规范中的示例:

module string_test;
reg [8*14:1] stringvar;
initial begin
  stringvar = "Hello world";
  $display ("%s is stored as %h", stringvar,stringvar);
  stringvar = {stringvar,"!!!"};
  $display ("%s is stored as %h", stringvar,stringvar);
  end
endmodule

由于字符串使用 reg 数据类型,您可以使用普通运算符来操作它们,记住每个字符使用 8 位。

5.2.3.1 字符串操作

Verilog HDL 运算符支持常见的字符串操作复制、连接和比较。副本是通过简单的分配提供的。连接由连接运算符提供。比较由相等运算符提供。在向量 reg 中处理字符串值时,reg 应至少为 8*n 位(其中 n 是 ASCII 字符的数量),以保留 8 位 ASCII 代码。

如果您需要搜索等操作,则必须编写一些任务或功能。

于 2012-09-12T01:17:34.423 回答
4

如果您可以访问支持 SystemVerilog 语法的现代模拟器,则有一种string数据类型。可以连接和比较字符串。请参阅 IEEE 标准 (1800-2009)。

于 2012-09-12T02:13:21.783 回答
1

sjtaheri,

恢复一个死线程,但我看到这个问题出现了,并且有一个更新的解决方案。

svlib 是一个免费的、开源的 SystemVerilog 实用函数库。它包括文件和字符串操作功能、完整的正则表达式搜索/替换、轻松读写配置文件、访问环境变量和挂钟时间等等。该项目在 DVCon 2014 上展示。

http://www.verilab.com/resources/svlib/

于 2017-03-10T15:01:35.277 回答