我有一个大型的verilog项目,我正在将其合成到xilinx fpga上,并在modelsim中进行模拟。有几个模块,我想在其中模拟一个版本的模块,并合成另一个版本。例如,我有一个参数化的重置去保释器,它只有几毫秒。显然,对于模拟来说,这很烦人,所以在模拟之前,我将去抖动计数更改为大约10个时钟周期。目前我有一个标志(`定义模拟),我将其注释掉以进行合成。然后,在我的模块中,我使用像'ifdef‘这样的编译器指令来编译不同版本的断言,这取决于合成/模拟:
`ifdef SIMULATION
button_debouncer #(1,5, 24)
`else
button_debouncer #(1,12000000,24)
`endif
resetdebounce(/**/
// Outputs
.debounced (reset),
// Inputs
.clk (clk),
.button (~reset_button));虽然这是可行的,但它要求我在每次从modlesim切换到ISE时注释入/出‘定义模拟’。我经常忘记,浪费时间,等等。
有没有一种自动的方法来确定正在使用的工具?例如,我可以说像ifdef XILINX orifdef MODELSIM这样的东西来代替我的‘ifdef模拟hack?非常感谢!
发布于 2013-05-26 17:08:05
根据XILINX_ISIM用户指南(UG660,v14.3,第44页),ISIm预定义了宏XILINX_ISIM(值为1)。因此,只需使用XILINX_ISIM而不是模拟。
发布于 2013-05-25 08:20:03
Mentor图形模拟器(ModelSim和Questa)将定义MODEL_TECH预处理器宏。
所以你可以这样做:
`ifdef MODEL_TECH
// code for simulation with modelsim
`else
// code for synthesis
`endif发布于 2013-05-25 08:42:03
尝试将+define+SIMULATION作为命令行参数传递给vlog。
https://stackoverflow.com/questions/16744740
复制相似问题