我需要在 Verilog 模拟中对字符串执行基本操作,例如连接、替换和比较。怎么可能?有内置支持吗?
提前致谢。
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 代码。
如果您需要搜索等操作,则必须编写一些任务或功能。
如果您可以访问支持 SystemVerilog 语法的现代模拟器,则有一种string
数据类型。可以连接和比较字符串。请参阅 IEEE 标准 (1800-2009)。
sjtaheri,
恢复一个死线程,但我看到这个问题出现了,并且有一个更新的解决方案。
svlib 是一个免费的、开源的 SystemVerilog 实用函数库。它包括文件和字符串操作功能、完整的正则表达式搜索/替换、轻松读写配置文件、访问环境变量和挂钟时间等等。该项目在 DVCon 2014 上展示。