我也来问个后仿出现x态的问题
做的是个视频编码器,目前功能仿真都没问题了,后仿的时候发现很多x态,并且x态扩散严重,编码器根本没法正常工作。看了一下后仿的波形,感觉是和分布式ram有关的,ram输入的数据都正常,但是输出来却有好多x态。
比如定义一个分布式ram
- reg [WIDTH-1:0] mem [DEPTH-1:0];
输出是这样用的
- assign dout = mem[addr];
1. mem有无初始化?
2. addr是不是出现了x?如果是,要跟踪 addr为啥会变x
1.mem没有初始化(难道是因为这个原因?) 2.addr没有出现x
块ram有异步的么?
试着换下同步ram试试看
没有异步复位,没有用到复位端,只有使能端
初始化问题....mem都没给值.....
可是我是先写数据再读数据,并且保证读的地址是已经写过数据的
你这种直接assign过去,那dout肯定会出现一些不定态吧。但是只要后面在正确的用应该功能没问题才对。
mem 初始化,后者控制addr值,或者使用en控制dout
加了一个no_notifier选项,好像好了
是用vcs仿的?先加选项+delay_mode_distributed +notimingcheck,看看能不能过。
你的后仿是layout后的?还是综合后的?
两种可能吧,我以前在FIFO中遇到过这种情况,数据取出以后就是X了,貌似你说的不属于这种,还有一种就是,dout输出的时候是异步的,这样导致毛刺很多,在ncverilog下面仿真就是X,在VCS下是毛刺。你这个问题太抽象了,没波形没代码,不好debug。
我用的是modelsim,是布局布线后仿真,综合工具用的ISE,place & route后生成一个.v仿真模型和一个.sdf延时文件,我就是用这两个文件来进行仿真的。你所说的layout,我现在还没什么概念,不太懂
应该是时序问题,写RAM的时候没有满足时序要求,寄存器没有锁住数据,造成寄存器亚稳态。所以读出来的数据都是x。
建议看看写操作时候的波形,数据是否正确写入RAM。
reg [WIDTH-1:0] mem [DEPTH-1:0];
在代码中使用这样的语句是不太好的做法,你应该例化一个ram,然后根据ram的端口时序进行读写。
这样可能会被综合成寄存器,当你的ram比较大时,会导致面积大,timing差等问题。
如果没有初始化,初始化一下,再看看是不是有timing的问题;
功能没问题,应该time问题吧
