используя оператор assign для оператора `define

Я использую оператор assign Verilog для назначения `define, как показано ниже, в моем модуле драйвера.

`define  SPI_MASTER_P_IF spi_vif.spi_master_p.spi_master_p_cb

`define SPI_MASTER_N_IF spi_vif.spi_master_n.spi_master_n_cb

`define SPI_MASTER_IF

class my_driver extends uvm_driver;

  assign `SPI_MASTER_IF = (if_posedge)?`SPI_MASTER_P_IF: `SPI_MASTER_N_IF;

endclass

Когда я компилирую, я сталкиваюсь с ошибкой «почти «назначить»: синтаксическая ошибка, неожиданное назначение, ожидание функции или задачи»

Как правильно выполнить это задание?


person user3383729    schedule 05.03.2014    source источник


Ответы (2)


Вы не можете определить макрос с помощью оператора assign. Здесь вам нужно ifdef:

`ifdef IF_POSEDGE
  `define SPI_MASTER_IF SPI_MASTER_P_IF
`else
  `define SPI_MASTER_IF SPI_MASTER_N_IF
`endif

См. раздел 22.6 стандарта 1800-2012.

person nguthrie    schedule 05.03.2014

Определение SPI_MASTER_IF пусто. Код становится:

assign = (if_posedge)?spi_vif.spi_master_p.spi_master_p_cb:spi_vif.spi_master_n.spi_master_n_cb

что незаконно.

Также там нельзя использовать assign, пожалуйста, проверьте IEEE Std 1800-2012. раздел 8.3 (синтаксис класса) в спецификации.

person Sung-Yu Chen    schedule 05.03.2014
comment
вы правы, что assign нельзя использовать в class. - person Greg; 05.03.2014
comment
Если нужно выбрать блок синхронизации, чтобы что-то делать во время выполнения, возможно, лучше использовать fork...join и использовать if([!]if_posedge) в каждом процессе для запуска или не запуска. - person Sung-Yu Chen; 07.03.2014