模4递增计数器Word文件下载.docx
- 文档编号:18311052
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:11
- 大小:611.23KB
模4递增计数器Word文件下载.docx
《模4递增计数器Word文件下载.docx》由会员分享,可在线阅读,更多相关《模4递增计数器Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
3.代码分析
1)我们使用了2个D触发器作为模块单元,利用D触发器两次翻转为一个周期从而让周期翻倍使周期由1变为4,同时利用一个将内部50MHz的时钟变为1Hz的代码使其能够以4秒为一个周期,以实现模4计数器的功能。
代码将分为4个模块:
主模块、D触发器模块、时钟转换模块、输出控制模块。
2)主模块中首先定义了本次实验的所有输入输出接口及其中的一些连线。
//counter
moduleexp5(clk,o);
inputclk;
output[7:
0]o;
wirem,n,mnot,nnot;
3)然后程序直接调用所需的模块以实现其功能。
freqDivFA2(clk,cp);
//usedtochangetheclockrate
exp4FA0(mnot,cp,m,mnot);
//usedasaDflip-flop
exp4FA1(nnot,m,n,nnot);
numFA3(m,n,o);
//usedtocontroltheoutput
endmodule
4)在D触发器模块单元中,同样首先定义好其输入输出,其中变量d为触发器中的data,clk为触发器中的时钟信号,q为输出Q,p为输出~Q。
定义p,q为寄存器变量。
//ThismoduleisusedasaDflip-flop
moduleexp4(d,clk,q,p);
inputd,clk;
outputp,q;
regp,q;
5)然后根据D触发器的功能要求在接收到时钟传来的上升沿信号时,输出Q与data相同,输出~Q与data相反。
always@(posedgeclk)
begin
q=d;
//data=>
Q;
p=~d;
//~data=>
~Q
end
6)在时钟控制模块中,通过cnt计数使得50MHz的时钟输入变为1Hz的时钟输出。
modulefreqDiv(in_50MHz,out_1Hz);
inputin_50MHz;
outputout_1Hz;
regout_1Hz;
reg[31:
0]cnt;
//usecnttocount
always@(posedgein_50MHz)
begin
if(cnt<
32'
d24999999)
cnt<
=cnt+1'
B1;
else
=32'
b0;
out_1Hz<
=~out_1Hz;
end
7)在输出控制模块中,首先定义输入m,n和输出o,其中输入m,n用于判断现在处于模4计数中的第几个阶段,以便于输出相应的输出,输出o的o[0]-o[7]用于控制相应的数码管以显示出正确的数字,而o[8]则用于控制一个LED的亮,每一次模4计数完毕后LED都会亮一下。
将o设置为寄存器变量。
modulenum(m,n,o);
inputm,n;
reg[7:
always@(m|n)
case({m,n})
2'
b11:
o=8'
b11000000;
//outputnumber“0”andlighttheLED
b01:
b01111001;
//outputnumber“1”
b10:
b00100100;
//outputnumber“2”
b00:
b00110000;
//outputnumber“3”
endcase
PS:
本段程序是用DE0板内自带的时钟驱动模4自动计数的,若要改为手动计数只需将时钟模块删掉后将clk的引角设为所需按钮即可。
4.实验步骤
1)新建一个工程,选择相应实验板的型号CycloneⅢEP3C16F484C6后创建一个新的VerilogHDL文件,输入程序,保存后点击图中的紫红色的箭头编译文件。
编译通过后可以查看生成的Report。
2)选择“Assignment=>
Pins”开始分配引脚。
将本实验需要用到的接口一一分配其在DE0板上相对应的引脚号,包括有所有的输出o和时钟clk。
3)新建一个VWF(VectorWaveformFile)文件,添加变量。
点击NodeFinder
在filter中选择Pins:
all,然后点击list,并添加所需的变量。
添加完毕后,点击图中的按钮,再拖动一段波形来改变输入波形。
最后点击图中的蓝色箭头开始仿真。
4)点击图中的按钮,选择相应的硬件后点Start烧入程序。
5.实验结果的测试和分析
在Quartus中仿真后得到的波形如下,因为时钟的50MHz到1Hz的转换在仿真中难以体现,在仿真中改为由50MHz转换到25MHz。
将程序烧入DE0板,在实验板上运行成功,数码管以0,1,2,3的周期循环显示,并且在显示“0”时点亮LED等,如下图所示:
6.实验总结
通过这个实验让我熟悉了D触发器与JK触发器的实际应用,同时也对Quartus软件的使用和仿真有了更为深入的了解。
7.参考文献
1)源代码:
刘毅冰提供的freqDiv.v
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 递增 计数器
![提示](https://static.bdocx.com/images/bang_tan.gif)