在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1350|回复: 4

[求助] uvm前门访问发送seq仿真运行不停止

[复制链接]
发表于 2023-1-29 12:08:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
发送reg seq的时候, 使用正常的发送reg seq仿真是正常的。但是, 使用reg model发送seq仿真一直不停止(rgm当作seq发激励就只发了第一个, 然后就卡住了, 仿真时间一直跑的)。

reg driver:   
task tdm_encoder_reg_driver::do_drive();

        reg_trans req,rsp;
        while(1)begin
            seq_item_port.get_next_item(req);
            drive_one_config(req);
            void'($cast(rsp,req.clone()));
            rsp.rsp = 1;   
            rsp.set_sequence_id(req.get_sequence_id);
            seq_item_port.item_done(rsp);
        end
endtask

rgm adapter:
class rgm_adapter extends uvm_reg_adapter;
    `uvm_object_utils(rgm_adapter)
    function new(string name = "rgm_adapter");
        super.new(name);
        provides_responses = 1;
    endfunction
    function uvm_sequence_item reg2bus(const ref uvm_reg_bus_op rw);
        reg_trans tr = reg_trans::type_id::create("tr");
        tr.cmd  = (rw.kind == UVM_WRITE)? `WRITE:`READ;
        tr.addr = rw.addr;
        tr.data = rw.data;
        return tr;
    endfunction
    function void bus2reg(uvm_sequence_item bus_item, ref uvm_reg_bus_op rw);
        reg_trans tr;
        if(!$cast(tr, bus_item))begin
            `uvm_fatal("CASTFAIL", "Provided bus_item is not the correct type")
            return;
        end
        rw.kind   = (tr.cmd == `WRITE)? UVM_WRITE:UVM_READ;
        rw.addr   = tr.addr;
        rw.data   = tr.data;
        rw.status = UVM_IS_OK;
    endfunction
endclass


我怀疑是 bus2reg 的时候哪里出问题了导致没有握手成功, 可能我写的不全。有知道怎么解决的吗?感谢

发表于 2023-1-29 12:31:07 来自手机 | 显示全部楼层
不要贴下seq吗
 楼主| 发表于 2023-1-29 14:25:34 | 显示全部楼层

ss

本帖最后由 zhizhengzhaoxi 于 2023-1-29 15:56 编辑

顶顶顶顶
 楼主| 发表于 2023-1-29 14:29:32 | 显示全部楼层
rgm发seq   
    task tdm_encoder_case1_sequence::do_reg();
        wr_val = 32'h0014;
        rgm.rw1_reg_inst.write(status, wr_val);
        rgm.rw1_reg_inst.read(status, rd_val);
        void'(this.diff_value(wr_val, rd_val, "RW1_REG"));
    endtask

reg发seq(可随机化cmd addr data)
    task tdm_encoder_case4_sequence::do_reg();
        repeat(100)begin
            `uvm_do_on_with(reg_seq, p_sequencer.te_reg_sqr,
                            {cmd == `WRITE;})
        end
        repeat(100)begin
            `uvm_do_on_with(reg_seq, p_sequencer.te_reg_sqr,
                            {cmd == `READ;})
        end
        repeat(100)begin
            `uvm_do_on(reg_seq, p_sequencer.te_reg_sqr)
        end
    endtask

发表于 2023-1-30 12:04:03 | 显示全部楼层
加这个试试
rsp.set_transaction_id(req.get_transaction_id());
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 23:01 , Processed in 0.018402 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表