求助各位大佬,先附上我的程序
另解释下我的程序: 可驱动 5 个 LED 闪烁,通过改变 K1 选择闪烁方式,K1 悬空时 LED 顺闪,K1 接 VDD 时 LED 上电来回闪烁,闪烁频率为 2.4HZ。K2 为 ON/OFF 开关。在 LED 灯熄灭的时候,按下 K2 的时刻,芯片的内部电路开始工作,5 个 LED 灯开始闪烁。在 LED灯闪 烁的时候, 按下 K2(未松开按键)的时候,芯片 继续工作,直到松开按键,5 个 LED 才会熄灭。程序第一个状态机是利用K1实现顺闪和来回闪两种模式的转化,第二个状态机是实现K2的松手检测;以及很多的输出端口是为了观测哪部分程序出了问题,K2关闭时输出端的高阻态是为了跟全灭时区分开,因为全灭用来实现了K1的模式转化。
程序用quartusII进行了分析和综合,没有警告和错误。
附上程序RTL级前仿波形
程序综合出来的网表文件,用NC仿真时出现
ncelab: *W,CUNGL1 (./verilog.v,4758|62):Negative timing check limit not allowed in a 1 limit timing check, setting to 0in instance (led5ic_tb.led.key_tmp1_reg).
$recovery(posedge RN, posedge CK &&& D == 1'b1, trec$RN$CK,NOTIFIER);
|
这种警告,报错的触发器有很多:key_tmp0,key_tmp1,key_s0,key_s1,cnt_clk,cnt_full,cnt,podge,state,key_state,cnt_clk,en_cnt
网表文件的仿真波形中还出现了不定态 (见图片-网表文件的仿真波形)
。
综合用的约束文件也附上(见图片-约束文件1和约束文件2)
另外,进行前仿真的hold也为负数,(见图片-前仿hold为负)
希望有大佬可以回答下我的问题,那一部分出问题了导致了这些警告和错误
|