我正在使用verilog的assign语句在我的驱动程序模块中指定`define as。
`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
当我编译时,我面临错误“近”分配“:语法错误,意外分配,期待功能或任务”
执行此任务的正确方法是什么?
答案 0 :(得分:4)
您无法使用assign
语句定义宏。你想要的是ifdef
:
`ifdef IF_POSEDGE
`define SPI_MASTER_IF SPI_MASTER_P_IF
`else
`define SPI_MASTER_IF SPI_MASTER_N_IF
`endif
见1800-2012 standard第22.6节。
答案 1 :(得分:3)
定义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节(类语法)。