2017-01-22 3 views
0

Может ли кто-нибудь дать мне подсказку, почему этот интерфейс с модами и блоками синхронизации может не работать?Использование тактовых блоков и модификаций внутри интерфейсов

interface axis (input logic aclk); 
logic [15:0] tdata_s; 
logic  tvalid_s; 
logic  tready_s; 

logic [15:0] tdata_m; 
logic  tvalid_m; 
logic  tready_m; 


// clocking block for AXI Stream master 
clocking cb_axis_mst @(posedge aclk); 
    default input #1step output #3ns; 
    output tdata_m; 
    output tvalid_m; 
    input tready_m; 
endclocking 



// clocking block for AXI Stream slave 
    clocking cb_axis_slv @(posedge aclk); 
    default input #1step output #1ns; 
    input tdata_s; 
    input tvalid_s; 
    output tready_s; 
    endclocking 


    // AXI stream master modport for testbench only 
    modport tb_axis_mst_mp(clocking cb_axis_mst); 

    // AXI stream slave modport for testbench only 
    modport tb_axis_slv_mp(clocking cb_axis_slv); 

endinterface 

QuestaSIM 10.5c дает мне ряд ошибок, как это:

** Ошибка: (VSIM-3773) ../../../../ РТЛ/test_driver.sv (37): Элемент интерфейса 'tvalid_m' не находится в modport 'tb_axis_mst_mp'.

Проблема уходит, если я добавляю порты в modport, но я понял, что достаточно просто использовать блок синхронизации.

Полный код здесь: https://www.edaplayground.com/x/5FzC

ответ

1

Ваше понимание не является правильным. Добавление блока синхронизации в modport дает вам доступ к сигналам, созданным блоком синхронизации, а не к сигналам, которые он ссылается.

При использовании сигналов блока синхронизации вам необходимо ссылаться на область блока синхронизации, то есть AXIS_MST.cb_axis_mst.tvalid_m. И вместо @posedge AXIS_MST.aclk, просто используйте @AXIS_MST.cb_axis_mst.

Еще один комментарий к вашему тестовому банку: удалить вложенные операторы program/endprogram; они не имеют никакой цели. Do not use program blocks.