一小段代码的仿真出现问题求解
时间:10-02
整理:3721RD
点击:
请问为啥vpoyy的结果始终是vpoy
【活跃】!… 2016-6-20 11:36:18
无论sec的值是多少,,始终是vpoyy的值为vpoy,这是什么原因
【活跃】!… 2016-6-20 11:36:18
无论sec的值是多少,,始终是vpoyy的值为vpoy,这是什么原因


reg [1:0]sec;
always@(posedge clk15625 or posedge reset)
if(reset)
sec<=0;
else if(vref==1)
sec<=sec+1;
else
sec<=0;
reg [7:0]vpoyy;
always@(posedge clk13_5M or posedge reset)
if(reset)
vpoyy<=0;
else if(sec==0)
vpoyy<=vpoy;
else if(sec==1)
vpoyy<=vpoy1;
else if(sec==2)
vpoyy<=vpoy2;
else if(sec==3)
vpoyy<=vpoy3;
else
vpoyy<=0;
这是对应的相关代码
首选,把你所有的赋值和比较语句中,全部带上位宽,特别是else if(sec==0)这些,sec==2'd0,2’d1,2‘d2,2'd3。不管是赋值还是比较,不带上位宽的写法是很不好的风格,甚至发生错误,比如你这里就导致了错误。
另外你的RTL还存在两处改进地方。
1、sec是clk15625时钟下的信号,直接在clk13_5M下使用是否安全?
2、第二段RTL中,使用case逻辑显然比if else更好,原因自己去琢磨你考虑跨时钟域的问题了吗
