2014-03-05 44 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