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

便捷登录,只需一步

找回密码

  登录   注册  

快捷导航
搜帖子
NI​高​性​价​比​数据​采集​设备
查看: 1605|回复: 3

[求助] UVM connect 出错?

[复制链接]
发表于 2016-10-24 12:19:53 | 显示全部楼层 |阅读模式

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

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

x
Fatal error in Function uvm_pkg/uvm_port_base::connect at C:/questasim64_10.2c/verilog_src/uvm-1.1d/src/base/uvm_port_base.svh line 431
没查到这个错误出在哪,代码参考了张强的代码

uvm_fatal.png


程序:
class SPI_env extends uvm_env;



`uvm_component_utils(SPI_env);



SPI_agent
i_agt, o_agt;

SPI_model
mdl;

SPI_scoreboard scb;



uvm_tlm_analysis_fifo #(SPI_transaction) agt_scb_fifo;

uvm_tlm_analysis_fifo #(SPI_transaction) agt_mdl_fifo;

uvm_tlm_analysis_fifo #(SPI_transaction) mdl_scb_fifo;



function new(string name = "SPI_env", uvm_component parent);

super.new(name, parent);

endfunction



function void build_phase(uvm_phase phase);

super.build_phase(phase);

i_agt = SPI_agent::type_id::create("i_agt", this);

o_agt = SPI_agent::type_id::create("o_agt", this);

i_agt.is_active = UVM_ACTIVE;

o_agt.is_active = UVM_PASSIVE;



mdl = SPI_model::type_id::create("mdl",this);

scb = SPI_scoreboard::type_id::create("scb", this);

agt_mdl_fifo = new("agt_mdl_fifo", this);

agt_scb_fifo = new("agt_scb_fifo", this);

mdl_scb_fifo = new("mdl_scb_fifo", this);

endfunction



function void connect_phase(uvm_phase phase);

super.connect_phase(phase);

i_agt.ap.connect(agt_mdl_fifo.analysis_export);               //报错在这行

mdl.port.connect(agt_mdl_fifo.blocking_get_export);

mdl.ap.connect(mdl_scb_fifo.analysis_export);

scb.exp_port.connect(mdl_scb_fifo.blocking_get_export);

scb.act_port.connect(agt_scb_fifo.blocking_get_export);

o_agt.ap.connect(agt_scb_fifo.analysis_export);

endfunction
endclass
发表于 2016-10-24 18:27:50 | 显示全部楼层
回复 1# fgg1991


   你 i_agt o_agt 里的ap 应该跟monitor连的吧 两个montior 采集的trans类型一样么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-25 03:46:04 | 显示全部楼层
回复 2# DS_LOGIC


   一句话点醒梦中人!我突然意识到bug可能出在哪了!谢谢!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-10-25 03:53:53 | 显示全部楼层
回复 2# DS_LOGIC


   修复成功!谢谢回复!果然自己看自己的代码会有盲区。在i_agt里我省略了mon,应该直接在drv里把trans驱动到ap上,但是在drv里忘记初始化一个ap导致i_agt的ap是悬空的了。
agent的connect改成



  1.         function void connect_phase(uvm_phase phase);
  2.                 super.connect_phase(phase);
  3.                 if(is_active == UVM_ACTIVE)begin
  4.                         drv.seq_item_port.connect(sqr.seq_item_export);
  5.                         ap = drv.ap;
  6.                 end else
  7.                         ap = mon.ap;
  8.         endfunction


复制代码

就对了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2021-1-24 10:08 , Processed in 0.083088 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表