微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 后仿真的问题

后仿真的问题

时间:10-02 整理:3721RD 点击:
# ** Error: d:/Xilinx/13.4/ISE_DS/ISE/verilog/src/simprims/X_RAMB18SDP.v(401): $hold( posedge WRCLK:300130 ps, posedge DI[0] &&& di0_enable:300410 ps, 286 ps );
#    Time: 300410 ps  Iteration: 1  Instance: /tb_prachframedeinterleave/uut/\frame1de_ram300/U0/xst_blk_mem_generator/gnativebmg.native_blk_mem_gen/valid.cstr/ramloop[0].ram.r/v5_noinit.ram/SDP.WIDE_PRIM18.TDP
这是我后仿真时候modelsim提示出现的错误,明显是保持时间不够,frame1de_ram300是我例化的深度300 进出1bit的 block ram,那么WRCLK是block ram的写时钟  使用的就是系统时钟  di0_enable可能是block ram的使能信号 ena  DI[0]可能是block RAM输入数据;
我怀疑是输入block ram的数据保持时间不够,就使用了buff缓冲,进行延时,但是还是出现这个错误啊!
buff缓冲使用的是
module buffer(a,
                     b);
input a;
output b;
wire b1/*synopsys keep=1*/;
assign b1=a;
assign b = b1;
endmodule
从错误上看 是我的输入数据有错误吗? 还是哪个信号啊? 多谢大虾们指点一下啊 多谢啊

你的buffer怎么没有时钟啊,如果没有时钟,buffer就没有作用了

你看看发生hold violation的时间,300ns左右,这时候设计应该还没有开始工作,很可能是clock或data上发生了从x到0/1的跳变,这个hold应该不用管,除非影响到了整个仿真,如果影响到了,可以分析以下是否可以不在意这个时刻的状态,如果可以就force一下。
还有,你在设计里面例化了一个buf,这个buf会在综合之后被优化掉的,除非你用什么命令让他keep住

一般来说,对于单时钟域,用altera\Xilinx\CME等的FPGA综合出来的网表做后仿,不会出现hold的violation。
hold一般会出现在多时钟域设计中跨时钟域的地方。

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

网站地图

Top