vivado中關閉程式碼直譯器的特殊註釋(pragma translate_off、pragma translate_on)
阿新 • • 發佈:2022-05-18
記錄一個奇怪的現象:
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的程式直譯器。