1. 程式人生 > 其它 >vivado中關閉程式碼直譯器的特殊註釋(pragma translate_off、pragma translate_on)

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的程式直譯器。