首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助,关于频率计设计的部分程序中出现的问题

求助,关于频率计设计的部分程序中出现的问题

//由6个十进制计数器。形成一个6位10进制计数器。email:awei112625@163.com module cnt999999(testclk,clr,en,q1,q2,q3,q4,q5,q6); input testclk,clr,en; output[3:0]q1,q2,q3,q4,q5,q6; reg [3:0]q1,q2,q3,q4,q5,q6;//定义6个寄存器 wire clk1,clk2,clk3,clk4,clk5,clk6;//定义6根时钟导线 cnt10 c1(testclk,clr,q1,clk1,en);//元件例化调用10进制计数器; cnt10 c2(clk1,clr,q2,clk2,en);//调用10进制计数器 cnt10 c3(clk2,clr,q3,clk3,en);//调用10进制计数器 cnt10 c4(clk3,clr,q4,clk4,en);//调用10进制计数器 cnt10 c5(clk4,clr,q5,clk5,en);//调用10进制计数器 cnt10 c6(clk5,clr,q6,clk6,en);//调用10进制计数器 endmodule module cnt10(clk,reset,q,cout,e);//带使能端的10进制计数器,e是使能端,e==1时计数,==0时清零。 input clk,reset,e; output[3:0]q;//q为计数结果 output cout; reg cout; reg[3:0]out,q;//out为内部计数器,用来计数,后将结果给q。 always@(posedge clk or negedge reset) begin if(!reset) begin q<=0; out<=0; end else if (e==0)//out 清零,q值不变 begin out<=0; q<=q; end else if(e==1)//可以计数的状态 begin if(out==9) begin//形成进位脉冲 out<=0; cout<=~cout; end else begin out<=out+1;//计数 q<=out;//为q赋值 end end end endmodule /*e的高电平时间是1秒,同时它也是使能端,在这一秒的时间内允许计数,当变为零的时候就停止计数。 并输出结果锁存并显示,1秒后自动刷新。同步清零比较好,但这个程序只能用异步清零。同步的话就不会及时的清零。 但是这个程序输出显示后,出现频率累加的情况。可以清零,不知道是为什么。有哪位高手能帮我解释一下么? 我又仔细看了一下,当e为零的时候,计数高位不能及时的清零。所以累加了。有办法解决么?(不换算法的情况下)
返回列表