Есть ли альтернативный способ для следующего кода, так что он должен сократить время, необходимое для компиляции и моделирования

Определяет:

       `define AIF_MSB(AIF_i) (AIF_i == 0)?0 :\
                       (AIF_i == 1)?1 :\
                       (AIF_i == 2)?2 :\
                       (AIF_i == 3)?3 :\
                       (AIF_i == 4)?4 :\
                       (AIF_i == 5)?5 :\
                       (AIF_i == 6)?6 :\
                       (AIF_i == 7)?7 :\
                       (AIF_i == 8)?8 :\
                       (AIF_i == 9)?9 :\
                       (AIF_i == 10)?10 :\
                       (AIF_i == 11)?11 :\
                       (AIF_i == 12)?12 :\
                       (AIF_i == 13)?13 :\
                       (AIF_i == 14)?14 :\
                       (AIF_i == 15)?15 :\
                       (AIF_i == 16)?16 :\
                       (AIF_i == 17)?17 :\
                       (AIF_i == 18)?18 :\
                       (AIF_i == 19)?19 :0

    genvar AIF_i;
    generate
    for(AIF_i = 0; AIF_i < 16; AIF_i++)
    begin

CHECKER_71 :   assert 
    property(p_GGIS_invalid_chk(GGIS_ADDR,`AIF_MSB(AIF_i),`AIF_LSB(AIF_i),dut_if.lo_GGIS_AIF[AIF_i],
             event_if.fab_rd_res_txed, INTR_WR_REQ, AIF_i))else
              begin
               `uvm_error(log,$psprintf("CHECKER_71 :GGIS.AIF[%0d] is failed for 68 | 69 | 70",AIF_i));
             end

end
endgenerate

property p_GGIS_invalid_chk(addr,msb,lsb,field, req_type, pkt_type,AIF_i);
@(posedge clk_apb)
  $changed(field)
  |-> ((seq_reset_chk_RC(field,0,10).triggered)                                                                             
or
       (seq_GGIS_wr_set_trig_RC(addr,msb,lsb,field).triggered)                                               
or
       (seq_GGIS_set_chk_RC(addr,msb,lsb,req_type, pkt_type, 
field,AIF_i).triggered));
endproperty

sequence seq_reset_chk_RC(field,lower,upper);
 @(posedge clk_apb)
   (seq_reset_trig_FC.triggered
    ##[lower:upper] (seq_clr_chk_FC(field)));
endsequence

sequence seq_GGIS_wr_set_trig_RC(addr,msb,lsb,field);
  @(posedge clk_apb)
  (seq_GGIS_wr_set_trig_FC(addr,msb,lsb,field).triggered)
  ##[0:10] (field == 0);
endsequence

sequence seq_GGIS_AIF17_set_RC(addr,msb,lsb,field);
@(posedge clk_apb)
    (seq_GGIS_AIF17_trig_FC.triggered)
    ##[0:10] ((seq_wr_set_chk_FC(field))                                                                           
or
              (seq_reset_trig_FC.triggered)                                         
or
              (seq_GGIS_wr_set_trig_FC(addr,msb,lsb,field).triggered));
Endsequence

sequence seq_wr_set_chk_FC(field);
 @(posedge clk_apb)
   (field == 1'b1);
endsequence

sequence seq_reset_trig_FC;
 @(posedge clk_apb)
   ($changed(dut_if.lo_GSWR_GR)         &&
   (dut_if.lo_GSWR_GR == 1'b1));
endsequence


sequence seq_GGIS_wr_set_trig_FC(addr,msb,lsb,field);
 @(posedge clk_apb)
  (seq_is_field_write(addr, msb, lsb)     and
  (apb_master_if.pwdata[msb:lsb] == 1)    and
  (seq_wr_set_chk_FC(field)));
endsequence
  1. Код написан в вышеуказанном формате (используемые свойства и последовательности определены следующим образом)
  2. оператор define используется для разных значений AIF (может быть от 0 до 50)
  3. всякий раз, когда он вызывается, значение AIF оценивается и принимается. Я хотел бы сократить время, затрачиваемое на эту операцию при использовании в блоке генерации.
  4. В настоящее время я сталкиваюсь с проблемами производительности.
  5. Я хотел бы знать альтернативный способ написания вышеуказанного кода, который сократит время на компиляцию и моделирование

0 ответов

Другие вопросы по тегам