微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Verilog代码仿真时一直运行下去不动了是怎么回事

Verilog代码仿真时一直运行下去不动了是怎么回事

时间:10-02 整理:3721RD 点击:
在ModelSim中运行仿真代码 结果点完run后就一直运行下去 也不出结果 其中testbench里面我写了$finish 语句了
我手动点完Break后停止run  但出现
# Break in Module iicslave at IIC_wr2/IICslave2.v line 238
一直停留在这行不能仿真运行下去 是为什么

没人知道你的.v的line 238写的什么东西,怎么帮你?

always @(cs or byte_done or addr_match or operation_dir)
这是238行,写的是一个状态机里面的组合逻辑块

估计是你的code出现问题了,能不能把这个always的全部贴出来看看

以前遇到过这样的情况,原因是代码里用了非常复杂的循环语句,算不过来了

always @(cs or byte_done or addr_match or operation_dir)
        case(cs)
        start:
                ns <= slave_addr;
       
        slave_addr:               
                if(byte_done && addr_match)
                        ns <= slave_addr_ack;
                else
                        ns <= slave_addr;
               
        slave_addr_ack:
                        ns <= data;
        data:
                begin
                        if(byte_done)
                                   ns <= data_ack;
                           else
                              ns <=data;
                end
        data_ack:
                begin
                        if(operation_dir)
                                if(master_nack)
                                        ns<=start;
                                else
                                        ns<=data;
                        else
                                ns<=data;
                end
        endcase
这是这个always块

你case分支不全的吧,组合逻辑为什么不加default分支?
另外,cs的复位值是哪个状态?

case分支我用的独热码编码,很全啊,cs的复位值是起始状态start,加上default后结果还是那样,可能还是我的代码有问题吧

状态机一直在某个状态下,检查你的激励,是否满足跳转条件吧。

不要使用 run -all
使用run -2us这样的,就能在时间结束后停止了

分析可能原因:状态机处于某个状态中出不来了,请检查(1)激励是否存在问题;(2)设计本身是否存在缺陷导致

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top