2014-09-26 3 views
1

간단한 Addr/Data 인터페이스를 가진 모듈을 시뮬레이트하고 싶습니다. 이 모듈의 트랜잭션 역할을하는 별도의 모듈을 만들고 싶습니다. 예를 들어, 나는 단순히 addr과 데이터의 쓰기를 수행 할 transactor 모듈에서 작업을 호출 할 수 있습니다. 예 :시뮬레이션을위한 모듈

Transactor.Write_Task(0, 123); //Writes 123 to Addr 0. 

내 질문은 내가 테스트 벤치의 맨 위에있는 분석 업무 모듈을 포함하는 include을해야한다? 아니면 트랜잭션을 별도로 컴파일하고 인스턴스화하고 테스트중인 다른 유닛처럼 와이어 링하는 것이 더 나은 방법일까요? 예컨대 :

\lib_Local_Bus.Local_Bus_Transactor Transactor 
    (
    .i_LB_Clk(w_LB_Clk), 
    .o_LB_CS(w_LB_CS), 
    .o_LB_Wr_Rd_n(w_LB_Wr_Rd_n), 
    .o_LB_Addr8(w_LB_Addr8), 
    .o_LB_Wr_Data(w_LB_Wr_Data), 
    .i_LB_Rd_Data(w_LB_Rd_Data), 
    .i_LB_Rd_DV(w_LB_Rd_DV) 
    ); 

나는 그것이 쉽게 같은 느낌이에 단순히 include으로 포함되어 있지만 그때는 문제가 될 수있는, 제대로 가리 키도록해야합니다. 미리 컴파일하여 UUT처럼 인스턴스화하고 배선하면 더 많은 코드가 있지만 진행 상황은 더 직관적입니다.

+0

왜 두 파일을 서로 다른 두 개의 파일로 컴파일하지 않습니까? – Ari

+0

@Ari, 나는 이것이 내가'include'를 사용하는 곳에서하고있는 것임을 믿습니다. 각각의 거래자와 테스트 벤치는 자신의 파일에 있습니다. TB에 거래자를 포함 시키면 함께 작성됩니다. – Russell

+0

테스트 벤치 상단과 관련하여 이러한 태스크를 호출 할 테스트는 어디에 있습니까? SystemVerilog에 액세스 할 수 있습니까? 그것은 당신이 테스트 벤치를 구성하고 더 재사용 할 수 있도록 많은 기능을 가지고 있습니다. –

답변

0

일반적인 접근법은 모듈을 다른 파일로 취급합니다. 즉, 자체 파일로 존재하며 최상위 테스트 벤치에서 트랜잭션 및 인스턴스를 함께 인스턴스화합니다. 이것이 제가 작업 한 바닐라 Verilog 환경이 코딩 된 방법입니다.

모듈은 트랜잭션을 대기열에 넣기위한 대기열 기반 인터페이스 나 테스트에서 호출 할 수있는 작업 기반 인터페이스를 제공 할 수 있습니다.

initial 
    begin : test_block 
     Transactor.Send(data1); 
     ->stimulus_complete; 
    end 
관련 문제