Определение другого значения параметра для моделирования и синтеза - PullRequest
2 голосов
/ 31 марта 2020

Я использую systemVerilog, и у меня есть пакет, содержащий некоторые значения параметров моих модулей (например, parameter SPI_RATE = 2_000_000;). Есть ли способ, которым я могу установить одно значение для моделирования и другое для синтеза? (Я использую ModelSim). Например, я хотел бы что-то вроде:

if(IN_SIM) begin
parameter SPI_RATE = 2_000_000;
end
else begin
parameter SPI_RATE = 1_000_000;
end

Спасибо!

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Да, это возможно. SystemVerilog поддерживает условные директивы компилятора , такие как `ifdef, `ifndef, `else, `elsif и `endif. Обратите внимание, что в этих директивах используется серьезный акцент (ASCII 0x60), а не обычный апостроф (ASCII 0x27).

Более того, большинство инструментов синтеза поддерживают макроидентификатор SYNTHESIS. Итак, вы можете сделать следующее:

`ifdef SYNTHESIS
  parameter SPI_RATE = 1_000_000;
`else
  parameter SPI_RATE = 2_000_000;    
`endif 
0 голосов
/ 01 апреля 2020

С Synplify Pro вы можете использовать / * синтез translate_off * / / * синтез translate_off * / для выполнения sh этого, аналогичная конструкция может использоваться в VHDL с соответствующими изменениями синтаксиса / комментариев. Xilinx Vivado использует // синтез translate_off и // синтез translate_on

const logic IN_SIM = 1'b0
/*synthesis translate_off */
    || 1'b1
/*synthesis translate_on */
    ;

Преимущество этой конструкции в том, что она не требует каких-либо внешних изменений сценариев.

0 голосов
/ 31 марта 2020

Да. Вы можете установить макрос из командной строки в любой симуляции, используя +define plusarg, например:

+define+SPI_RATE=2_000_000

Тогда где-то в вашем коде вы можете сказать

parameter SPI_RATE = `SPI_RATE;

И в В вашем синтезаторе появится механизм для установки значения макроса: прочитайте инструкцию к вашему синтезатору.

...