基于Verilog 的任意模长可加减计数器设计

基于Verilog 的任意模长可加减计数器设计

ID:46808157

大小:115.90 KB

页数:10页

时间:2019-11-28

基于Verilog 的任意模长可加减计数器设计_第1页
基于Verilog 的任意模长可加减计数器设计_第2页
基于Verilog 的任意模长可加减计数器设计_第3页
基于Verilog 的任意模长可加减计数器设计_第4页
基于Verilog 的任意模长可加减计数器设计_第5页
资源描述:

《基于Verilog 的任意模长可加减计数器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于Verilog的任意模长可加减计数器设计一、设计要求计数器是一种在时钟的触发下,完成计数功能的时序逻辑电路,输出结果由输入时钟和计数器上一状态的计数共同决定。本设计要求实现的计数器,具有以下功能:(1)要求实现计数器工作状态的控制;(2)要求实现计数器的异步清零功能;(3)要求实现计数器递增和递减的功能;(4)要求实现计数器的计数范围(模长)任意改变;二、设计思路计数器工作状态的控制,可以设计一个使能端,在外部时钟的触发下,只有当使能端信号有效(高电平),才启动计数器的计数功能(递增或递减),否则计数

2、器输出结果不变。计数器的异步清零功能,可以设计一个外部输入的清零端,在外部输入信号有效(低电平)的情况下,直接清零计数器,不用等待下一个外部时钟的触发,即计数器的清零是异步的。计数器计数方向的控制,设计一个加减可控的信号端口,在时钟的触发、异步清零无效以及计数器使能端有效的情况下,该输入端为高电平则计数器完成递增功能,低电平则完成递减功能。实现计数器的任意模长,即进入下一个计数周期,其计数的最大值可以发生变化。设计一个4位(最大模长为16)的输入端口,可以在当前计数周期结束,即计数器产生一个溢出信号的同时

3、,判断该端口输入的信号是否发生变化,通过相邻两个计数周期的端口数据作异或运算,结果为高电平则代表模长发生变化,即进入的下一个计数周期,其计数最大值要发生变化。三、程序设计本次设计使用的是Quartus11.0开发环境,该软件没有自带仿真功能(9.0版本以后都没自带),需要使用第三方的Modelsim软件,故本设计的程序包括计数器的Verilog设计以及仿真测试需要的testbench激励文件两部分。计数器的Verilog设计:modulePrj(clk,rst_input,en,add_sub,data_

4、input,full,data_output);inputclk;//外部时钟inputrst_input;//外部清零(异步)inputen;//计数使能inputadd_sub;//计数方向input[3:0]data_input;//计数器模长输入outputregfull;//计完当前模长output[3:0]data_output;//计数器输出reg[3:0]current_counter;//当前计数值(输出)regupdate_length_en;//改变模长的使能信号//当前计数周期与上

5、个计数周期的模长输入reg[3:0]current_clk_data_input,last_clk_data_input;reg[3:0]counter_length;//下个计数周期的模长reg[1:0]k;always@(posedgeclk,negedgerst_input)beginif(!rst_input)//异步清零beginfull=0;current_counter=0;endelseif(en)//计数使能beginif(add_sub)//加法器beginif(current_cou

6、nter<(counter_length-1))begincurrent_counter=current_counter+1;full=0;endelse//加法器计数完产生full脉冲以触发//判断下个计数周期的模长是否变化begincurrent_counter=0;full=1;//full输出endendelse//减法器beginif(current_counter>0)begincurrent_counter=current_counter-1;full=0;endelse//减法器计数完be

7、gincurrent_counter=counter_length-1;full=1;endendendend//驱动当前计数输出assigndata_output=current_counter;initialbegink=1;//k=1表示启动计数器的第一个计数周期endalways@(posedgefull)//加法器/减法器完成当前周期计数//计完当前周期(即full有效)才更新beginlast_clk_data_input<=data_input;//上个周期的模长current_clk_da

8、ta_input=data_input;//当前周期的模长update_length_en<=last_clk_data_input^current_clk_data_input;//update_length_en为更新计数器模长的使能端,//异或运算使能端为0代表模长变化1不变k=k+1;//k的初值为1,k变化说明计数模长更改过了if(k==2'd3)k=2;endalways@(posedgeclk)beginif(u

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。