2014-03-05 49 views
1

我正在使用verilog的assign语句在我的驱动程序模块中指定`define如下所示。使用assign语句定义语句

`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 

当我编译我面对错误的“靠近‘分配’:语法错误,意想不到的分配,预计功能或任务”

什么是做这个作业的正确方法?

回答

4

您无法使用assign语句定义宏。你想要的这里是ifdef:在1800-2012 standard

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

见22.6节。

+0

可以将其分配给一个定义:http://pastebin.com/5EdqX4Fa – toolic

+0

@toolictouché。不要以为这是他要去的。我会重新回答我的答案。 – nguthrie

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节(类语法)。

+1

你是正确的,'assign'不能用在'class'中。 – Greg

+0

如果是在运行时选择时钟块做某些事情,或许最好使用fork ... join,并在每个进程中使用if([!] if_posedge)来运行或不运行。 –

+0

感谢它工作正常,当我使用'定义如上 – user3383729