在verilog中使用文件变量作为模块参数
use file variable as module parameter in verilog
我正在处理一个出现问题的片上网络 (NOC) 项目。在 NOC 中有许多路由器,它们都有相似的规格。此规范包含在 .txt
文件中,我必须阅读该文件并根据该规范实例化路由器。
问题是 defparam
右侧必须保持不变,我无法根据 .txt
文件设置任何子模块参数。
这是代码,我从文件中读取了一个变量,但我无法将其分配给子模块参数。
integer fd, fh, router_delay;
initial
begin
fd = $fopen("spec.txt", "r");
if (fd == 0) begin
$display("error reading file");
end
else begin
fh = $fscanf(fd, "router_delay=%d\n", router_delay);
$fclose(fd);
end
end
defparam noc.router_delay = router_delay;
NOC noc();
我只是想模拟一下代码,综合在这里不重要。顺便说一下,我不想让每个路由器都读取一次该文件。我想读一次规范文件。
知道如何将 router_delay
变量传递给 noc
子模块吗?
提前致谢。
如果您根本不需要代码可综合,您可以只使用普通变量而不是参数。然后,您可以从任何程序块中使用 noc.router_delay = whatever
。
如果您需要将延迟保留为参数,您可以编写一些脚本来解析 txt 文件并生成一个 Verilog 文件,其中包含所有必要的 defparam
语句和编译时常量值。
我正在处理一个出现问题的片上网络 (NOC) 项目。在 NOC 中有许多路由器,它们都有相似的规格。此规范包含在 .txt
文件中,我必须阅读该文件并根据该规范实例化路由器。
问题是 defparam
右侧必须保持不变,我无法根据 .txt
文件设置任何子模块参数。
这是代码,我从文件中读取了一个变量,但我无法将其分配给子模块参数。
integer fd, fh, router_delay;
initial
begin
fd = $fopen("spec.txt", "r");
if (fd == 0) begin
$display("error reading file");
end
else begin
fh = $fscanf(fd, "router_delay=%d\n", router_delay);
$fclose(fd);
end
end
defparam noc.router_delay = router_delay;
NOC noc();
我只是想模拟一下代码,综合在这里不重要。顺便说一下,我不想让每个路由器都读取一次该文件。我想读一次规范文件。
知道如何将 router_delay
变量传递给 noc
子模块吗?
提前致谢。
如果您根本不需要代码可综合,您可以只使用普通变量而不是参数。然后,您可以从任何程序块中使用 noc.router_delay = whatever
。
如果您需要将延迟保留为参数,您可以编写一些脚本来解析 txt 文件并生成一个 Verilog 文件,其中包含所有必要的 defparam
语句和编译时常量值。