首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为仿真和综合定义不同的参数值

为仿真和综合定义不同的参数值
EN

Stack Overflow用户
提问于 2020-03-31 08:50:50
回答 4查看 1.1K关注 0票数 3

我使用的是systemVerilog,我有一个包,它保存了一些模块参数值(例如parameter SPI_RATE = 2_000_000;)。有什么方法可以为仿真设定一个值,为综合设置一个不同的值吗?(我正在使用ModelSim)。例如,我想要这样的东西:

代码语言:javascript
复制
if(IN_SIM) begin
parameter SPI_RATE = 2_000_000;
end
else begin
parameter SPI_RATE = 1_000_000;
end

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-03-31 09:24:32

是的,这是可能的。SystemVerilog支持条件编译器指令,如`ifdef`ifndef`else`elsif`endif。注意,这些指令使用的是严重重音(ASCII 0x60),而不是普通的撇号(ASCII 0x27)。

此外,大多数合成工具都支持宏标识符SYNTHESIS。因此,您可以执行以下操作:

代码语言:javascript
复制
`ifdef SYNTHESIS
  parameter SPI_RATE = 1_000_000;
`else
  parameter SPI_RATE = 2_000_000;    
`endif 
票数 3
EN

Stack Overflow用户

发布于 2020-03-31 09:26:02

是。您可以在任何模拟中使用+define plusarg从命令行设置宏,例如:

代码语言:javascript
复制
+define+SPI_RATE=2_000_000

然后在你的代码中,你可以说

代码语言:javascript
复制
parameter SPI_RATE = `SPI_RATE;

在合成器中,将有一种设置宏值的机制:读取合成器的指令。

票数 0
EN

Stack Overflow用户

发布于 2022-08-08 21:29:22

国际水文学组织

使用第一个答案

` `ifdef合成

比第三个答案更可取

/*合成translate_off */

最后一种形式是/* synopsys translate_off */的变体,这对于一个合成工具来说是独一无二的。

宏合成已经被普遍使用了十多年,并且应该由任何合成工具来定义,没有任何额外的命令行选项。

如果您想要运行等效检查(rtl与门级netlist),您可能需要通过推荐的方法定义合成宏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60946670

复制
相关文章

相似问题

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