[SV]SystemVerilog小技巧

                      SystemVerilog bit流操作方法

 

一、在循環體中,取出變量的某幾個bit,此時MSB與LSB不能同時含有變量。

  • 舉一個例子:
bit [3:0]        i, j;
bit [31:0]       wdata[4];

for(int i = 0; i < 3; i++) begin
  for(int j = 0; j < 3; j++) begin
    frame_data[i*4+j] = wdata[i][j*8+7 -:8];
  end
end
  • 使用macro定義如下:

[MSB-:STEP] = [MSB:MSB-STEP]

[LSB+:STEP] = [LSB+STEP:LSB]

  • 例一:从低位往上取数据
bit [7:0]            total_length;
bit [3:0]            send_data_q[$];
bit [3:0]            crc_data_q[$];

for(int i = 0; i < 4; i++) bein
  send_data_q.push_front({2'b00, total_length[0+2*i+:2]});
  crc_data_q.push_front({2'b00, total_length[0+2*i+:2]});
end
  • 例二:从高位往下取数据 
bit [31:0]           data_tmp;
bit [3:0]            inst_data_q[$];

for(int i = 0; i < 8; i++) bein
  data_tmp[31-i*4-:4] = inst_data_q.pop_front();
end

 

二、在sequence中,如何拿到global config?

       1、在top_sequencer的build_phase中get資源,在l0_base_vseq的body() task中,利用p_sequencer從top_sequencer中拿回資源,就可以使用了。

 

三、Covergroup的另類寫法

covergroup araddr_ptk_cov with function sample(apb_vip_tr pkts);
  option.per_instance = 1;
  option.auto_bin_max = 256;

  coverpoint pkts.data[23:2]; //共256個bins
  coverpoint pkts.data[2];
  coverpoint pkts.data[3];
  coverpoint pkts.data[4];
endgroup

       1、在uvm_subscriber的build_phase中,將上述covergroup new出來:

            araddr_pkt_cov = new();

       2、在run_phase中採樣:

            if(...) begin

                  frame.sample();

            end

 

四、通過testlist向TB中傳遞參數$value$plusargs()

       例如在testlist中有如下語句:+UVM_VERBOSITY=UVM_LOW +SLOWESTMODE=1

       在uvm_axi_cfg.sv中就可以通過$value$plusargs()來獲取這個參數,代碼如下:

class uvm_axi_cfg extends svt_axi_system_configuration;

  bit axi_slave_slowest_mode;
  bit slowest;

  function new(string name = "uvm_axi_cfg");
    super.new(name);

    $value$plusargs("SLOWESTMODE=%b", slowest);
    axi_slave_slowest_mose = (slowest == 0) ? 0 : 1;
    
    this.num_masters = 2;
    this.num_slaves  = 2;

  endfunction


endclass

 

 

 

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元直数字电路验证

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值