2014-03-05 3 views
1

저는 드라이버 모듈에 아래 정의를 할당하기 위해 verilog의 assign 문을 사용하고 있습니다.define 문에 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 

내가 "근처"지정과 같은 에러에 직면하고 컴파일 :

이 할당을 할 수있는 적절한 방법은 무엇입니까 ", 구문 오류, 예기치 할당을 기능이나 작업을 기대를?"

답변

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

@toolic touché. 그것이 그가 무엇을 위해 가고 있는지 생각하지 마십시오. 나는 내 대답을 다시 말할 것이다. – 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도 사용할 수 없으므로 섹션의 830 (클래스 구문)에있는 IEEE Std 1800-2012 섹션을 확인하십시오.

+1

'assign'이'class'에서 사용될 수 없다는 것이 맞습니다. – Greg

+0

런타임에서 클럭킹 블록을 선택하려면,'fork ... join'을 사용하고 각 프로세스에서'if ([!] if_posedge)'를 사용하여 실행하거나 실행하지 않는 것이 더 나을 것입니다. –

+0

위와 같이'define '을 사용할 때 감사합니다. – user3383729