您的位置:技术中心首页 > 逻辑验证 >> Modelsim >> Modelsim仿真中的 vsim-3601错误

Modelsim仿真中的 vsim-3601错误

作者:风的海洋   时间:2007-10-20 08:20:58  来自:MSN博客  浏览次数:0  文字大小:【】【】【
这几天一直为这个问题头疼,几天终于解决了!可能快熬到头了或者是中午belinda给我带来的好运!反正是解决了~
出现问题是在所有的demux模块combination的过程中,原来每个模块的testbench验证表明ok;但通过的demux的testbench发现在功能仿真中,出现问题。
情况如下:
仿真开始后
# ** Fatal: (vsim-3603) Zero-delay oscillation loop detected at time 11175 ns.
通过查询verror 3603指令
verror 3603
#
# Message # 3603:
# The simulator detected a connectivity loop in the design that is
# oscillating due to the delays being zero, and the loop not settling
# out to a stable state. The pathnames to each instance in the
# connectivity loop should be displayed along with this message.
# The simulation cannot be continued after this error occurs.
 
这个解释说明,代码中出现了“死锁“现象,最主要是the loop not settling out to a stable state。说明存在0延时的震荡,是由于不能建立一个稳定的状态。但是如何查找呢?首先对testbench进行测查,修改之后发现只能改变出现问题的时间;看来和这个无关,再分析memory interface和datamux的部分,发现启动这两个模块就有问题。怀疑memory的FIFO,因为内部的双端口RAM是采用xilinx的
core generator生成的,因为潜意识里好像有人在论坛上说过类似PLL引起的问题。结果被误导,一无所获。今天仔细分析code和中断时的wave graph,终于发现问题所在。
这是memory 内部的状态:
该状态机的敏感量
always @(fifoRd_fsm or reset or DemuxReq  )
 
 fifoGrant:                                        // complete one time cycle  FIFO read of demux
                    begin
                    if( DemuxReq == 1'b0)
                       begin
                       DemuxGrant = 1'b0;
                       fifoRd_next_fsm = RdCounterAdd ;
                       end
                    else
                      DemuxGrant = 1'b1;
                    end
 
 
同时ES slice模块的一个状态:
该状态敏感量
always @(  reset or ES_fsm  or ESRDGrant or ESValid or ESRDValid or ESWRGrant or ESsliceValid )
 
CodeStartReq:                           // request
             begin
                 if(ESRDGrant == 1'b1)
                      begin
                      ESRDReq =1'b0;
                      ES_next_fsm = prefixCodeDo;
                      end
                  else
                      ESRDReq = 1'b1;
             end
 
这两个通过wire连接即ESRDgrant = demuxgrant;ESRDReq = DemuxReq。
同时跃迁的clk一样。
问题因此而产生,本来采用握手协议,保证数据可靠传输。
但由于潜意识减少状态变迁次数,采用了不成熟的代码风格。
导致
 
step1: DemuxReq =1;
         则
          Demuxgrant =1;  // A fsm
 
step2:ESRDGrant = 1: // B fsm ,敏感量 ESRDGrant
        则
         ESRDReq =0;
 
step3: DemuxReq =0;  // A fsm,敏感量 DemuxReq
         则
         Demuxgrant =0; 
step4:ESRDGrant = 0: // B fsm ,敏感量 ESRDGrant
        则
         ESRDReq =1;
重新返回step1,构成loop;从而clk无法形成稳定的状态。
通过synplify分析发现,REQ和Grant信号都是有一个多路选择和锁存器构成,哦累了,下次再用RTL来分析
责任编辑:5life

更多相关 modelsim 的文章

利用ModelSim SE6.0C实现时序仿真 [2007-09-28]
如何仿真IP核(建立modelsim仿真库完整解析) [2007-09-28]
Modelsim 包会教程 [2007-09-28]
ModelSim仿真库问题 [2007-09-28]
Modelsim 的验证实例 [2007-09-28]
ModelSim SE操作指南 [2007-09-28]
ModelSim下用SystemC做设计验证方法与示例 [2007-09-28]
如何在ModelSim里仿真Altera的lpm_rom文件 [2007-09-28]
ModelSim,synplify,ISE后仿真流程 [2007-09-28]
Debussy和Modelsim协同仿真(VHDL) [2007-09-28]
本文共有0条评论,现在显示最新的5条。

栏目导航

电路基础
硬件语言
逻辑验证
电路综合
后端设计
可测设计
基本逻辑
制造封装
总线协议
说文解字
工具学习
数字滤波
闲话漫谈
数字锁相
设计杂项
低耗设计

站点最新

更多相关链接

  Modelsim仿真中的 vsim-...
  利用ModelSim SE6.0C实现...
  如何仿真IP核(建立mode...
  Modelsim 包会教程
  ModelSim仿真库问题
  Modelsim 的验证实例
  ModelSim SE操作指南
  ModelSim下用SystemC做设...
  如何在ModelSim里仿真Al...
  ModelSim,synplify,ISE后...

栏目最新

更多相关链接

  Modelsim仿真中的 vsim-...
  利用ModelSim SE6.0C实现...
  如何仿真IP核(建立mode...
  Modelsim 包会教程
  ModelSim仿真库问题
  Modelsim 的验证实例
  ModelSim SE操作指南
  ModelSim下用SystemC做设...
  如何在ModelSim里仿真Al...
  ModelSim,synplify,ISE后...

热点文章

更多相关链接

  Modelsim 教程
  仿真工作流程(Verilog/Model...
  ModelSim SE操作指南
  Modelsim 包会教程
  ModelSim SE 十分钟入门
  Modelsim 的验证实例
  利用ModelSim SE6.0C实现时序...
  ModelSim仿真库问题
  ModelSim下用SystemC做设计验...
  如何仿真IP核(建立modelsim...