[求助] 一个简单的小程序,求助

lelemao   2011-9-7 09:11 楼主
下面是小弟编的一个加减计数器的程序, 
module count4(clk,pwm_pro,count); 
input clk; 
input pwm_pro; 
output [7:0]count; 
reg[7:0]count; 
reg flag; 
initial  
begin 
flag=1'b0; 
count=8'b00000000; 
end 

always @ (posedge clk) 
begin 
 if(count==8'b11111111)     
  flag <=1'b1; 
 if(count==8'b00000000) 
  flag <=1'b0; 
end 

always @ (negedge clk) 
if(pwm_pro) 
begin 
 if(flag==1) 
  count <= count-1'b1; 
 else if(flag==0) 
  count <= count+1'b1; 
end 
endmodule 
功能仿真的时候好像没什么问题 
 
 (原文件名:未命名.jpg) 
引用图片


但是时序仿真时候就会出面下面的情况 
 
 (原文件名:2.jpg) 
引用图片



这是为什么呢?要则么才能解决呢,小弟谢谢各位了~ 

回复评论 (3)

你的意思是说时序仿真时出现很多毛刺?是吗?那是因为在出现毛刺的地方信号跳变的位数比较多,比如从7变到8时,“00000111”变到“00001000”,有4位信号跳变,所以有较多毛刺,跳变位数越多越明显,建议在输出时加上一到两级寄存器延时以消除毛刺,希望我的理解正确!
点赞  2011-9-7 10:43
不建议使用这样的代码 。
initial语句貌似不可综合吧 所以在代码(testbench除外)中最好不要使用
要对cnt进行初始化的话 可以考虑使用复位信号 。。。
学习的乐趣在于分享。
点赞  2011-9-7 22:12

在同一个程序段,最好不要用上升沿和下降沿同时触发电路,这样造成编译器时钟信号添加反相器,对时钟信号的布局布线有影响,降低可靠性。同时,由于对时钟信号进行处理,所以时序仿真可能出问题!

一个为理想不懈前进的人,一个永不言败人! http://shop57496282.taobao.com/ 欢迎光临网上店铺!
点赞  2011-9-20 20:24
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复