vivado中关闭代码解释器的特殊注释(pragma translate_off、pragma translate_on)
记录一个奇怪的现象:
Xilinx的一些IP核例程总会使用这种写法来添加是否添加ila的参数, 以Aurora 64B66B IP核的例程为例:
module aurora_64b66b_0_exdes #
(
parameter USE_CORE_TRAFFIC = 1,
parameter USR_CLK_PCOUNT = 9'd255,
parameter EXAMPLE_SIMULATION = 0
//pragma translate_off
| 1
//pragma translate_on
,
parameter USE_LABTOOLS = 1
//pragma translate_off
& 0
//pragma translate_on
)
(
RESET,
// Error Detection Interface
HARD_ERR,
SOFT_ERR,
DATA_ERR_COUNT,
// Status
LANE_UP,
CHANNEL_UP,
// System Interface
INIT_CLK_P,
INIT_CLK_N,
PMA_INIT,
//70MHz DRP clk for Virtex-6 GTH
DRP_CLK_IN,
// GTX Reference Clock Interface
GTHQ3_P,
GTHQ3_N,
GTHQ5_P,
GTHQ5_N,
// GTX Serial I/O
RXP,
RXN,
TXP,
TXN
);
module aurora_64b66b_0_exdes #
(
parameter USE_CORE_TRAFFIC = 1,
parameter USR_CLK_PCOUNT = 9'd255,
parameter EXAMPLE_SIMULATION = 0
//pragma translate_off
| 1
//pragma translate_on
,
parameter USE_LABTOOLS = 1
//pragma translate_off
& 0
//pragma translate_on
)
(
RESET,
// Error Detection Interface
HARD_ERR,
SOFT_ERR,
DATA_ERR_COUNT,
// Status
LANE_UP,
CHANNEL_UP,
// System Interface
INIT_CLK_P,
INIT_CLK_N,
PMA_INIT,
//70MHz DRP clk for Virtex-6 GTH
DRP_CLK_IN,
// GTX Reference Clock Interface
GTHQ3_P,
GTHQ3_N,
GTHQ5_P,
GTHQ5_N,
// GTX Serial I/O
RXP,
RXN,
TXP,
TXN
);
其中,参数 EXAMPLE_SIMULATION 表示是否为仿真模式,USE_LABTOOLS 表示是否添加vio ila以进行测试。
经过实验测试,这种写法可以实现的功能:
在vivado中,识别到的是 EXAMPLE_SIMULATION = 0 和 USE_LABTOOLS = 1,这样工程就处于非仿真模式,以及synthesis时就会添加测试模块vio和ila。
在modelsim等仿真工具中,结果是 EXAMPLE_SIMULATION = 0 | 1 = 1 和 USE_LABTOOLS = 1 & 0 = 0, 仿真时工程就处于仿真模式,而且会省略掉一些ila和vio模块。
按注释的字面意思猜测为pragma translate_off关闭vivado的程序解释器。
Xilinx的一些IP核例程总会使用这种写法来添加是否添加ila的参数, 以Aurora 64B66B IP核的例程为例:
module aurora_64b66b_0_exdes #
(
parameter USE_CORE_TRAFFIC = 1,
parameter USR_CLK_PCOUNT = 9'd255,
parameter EXAMPLE_SIMULATION = 0
//pragma translate_off
| 1
//pragma translate_on
,
parameter USE_LABTOOLS = 1
//pragma translate_off
& 0
//pragma translate_on
)
(
RESET,
// Error Detection Interface
HARD_ERR,
SOFT_ERR,
DATA_ERR_COUNT,
// Status
LANE_UP,
CHANNEL_UP,
// System Interface
INIT_CLK_P,
INIT_CLK_N,
PMA_INIT,
//70MHz DRP clk for Virtex-6 GTH
DRP_CLK_IN,
// GTX Reference Clock Interface
GTHQ3_P,
GTHQ3_N,
GTHQ5_P,
GTHQ5_N,
// GTX Serial I/O
RXP,
RXN,
TXP,
TXN
);
module aurora_64b66b_0_exdes #
(
parameter USE_CORE_TRAFFIC = 1,
parameter USR_CLK_PCOUNT = 9'd255,
parameter EXAMPLE_SIMULATION = 0
//pragma translate_off
| 1
//pragma translate_on
,
parameter USE_LABTOOLS = 1
//pragma translate_off
& 0
//pragma translate_on
)
(
RESET,
// Error Detection Interface
HARD_ERR,
SOFT_ERR,
DATA_ERR_COUNT,
// Status
LANE_UP,
CHANNEL_UP,
// System Interface
INIT_CLK_P,
INIT_CLK_N,
PMA_INIT,
//70MHz DRP clk for Virtex-6 GTH
DRP_CLK_IN,
// GTX Reference Clock Interface
GTHQ3_P,
GTHQ3_N,
GTHQ5_P,
GTHQ5_N,
// GTX Serial I/O
RXP,
RXN,
TXP,
TXN
);
其中,参数 EXAMPLE_SIMULATION 表示是否为仿真模式,USE_LABTOOLS 表示是否添加vio ila以进行测试。
经过实验测试,这种写法可以实现的功能:

在vivado中,识别到的是 EXAMPLE_SIMULATION = 0 和 USE_LABTOOLS = 1,这样工程就处于非仿真模式,以及synthesis时就会添加测试模块vio和ila。
在modelsim等仿真工具中,结果是 EXAMPLE_SIMULATION = 0 | 1 = 1 和 USE_LABTOOLS = 1 & 0 = 0, 仿真时工程就处于仿真模式,而且会省略掉一些ila和vio模块。
按注释的字面意思猜测为pragma translate_off关闭vivado的程序解释器。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】