Quatus II数字钟Word下载.docx
- 文档编号:872080
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:17
- 大小:90.38KB
Quatus II数字钟Word下载.docx
《Quatus II数字钟Word下载.docx》由会员分享,可在线阅读,更多相关《Quatus II数字钟Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
<
1'
b1;
dout[0]<
=din;
end
cout<
=|dout;
endmodule
500Hz分频模块如下:
moduleint_div500hz(clk,div_out);
inputclk;
outputregdiv_out;
reg[31:
0]clk_div;
parameterCLK_FREQ='
D50_000_000;
//系统时钟50MHz
parameterDCLK_FREQ='
D1000;
//输出频率1000/2Hz
if(clk_div<
(CLK_FREQ/DCLK_FREQ))
clk_div<
=clk_div+1;
=0;
div_out<
=~div_out;
跑表功能需要用到D触发器配合一个sed模块,这里用到的是上升沿触发,当上升沿来到时,输出等于输入。
D触发器:
moduledchufa(d,q,nq,clk);
inputclk,d;
outputnq,q;
regq,nq;
always@(posedgeclk)
q<
=d;
nq<
=~d;
sed模块代码如下:
modulesed(clk100hz,ti,count,stop,rst);
inputclk100hz;
inputstop;
//配合D触发器的特性实现暂停跑表的功能
input[1:
0]count;
inputrst;
output[31:
0]ti;
reg[31:
always@(posedgeclk100hz)
if(count==2'
b11)
ti[31:
24]<
=8'
d4;
if(stop)
ti<
=ti;
if(rst)
ti[23:
0]<
if(ti[3:
0]==4'
d9)
ti[3:
=4'
d0;
if(ti[7:
4]==4'
ti[7:
4]<
if(ti[11:
8]==4'
ti[11:
8]<
if(ti[15:
12]==4'
d5)
ti[15:
12]<
if(ti[19:
16]==4'
ti[19:
16]<
if(ti[23:
20]==4'
20]<
if(ti[27:
24]==4'
ti[27:
28]<
=ti[31:
28]+4'
d1;
elseif(ti[31:
28]==4'
d2&
&
d3)
elseti[27:
=ti[27:
24]+4'
elseti[23:
=ti[23:
20]+4'
elseti[19:
=ti[19:
16]+4'
elseti[15:
=ti[15:
12]+4'
elseti[11:
=ti[11:
8]+4'
elseti[7:
=ti[7:
4]+4'
elseti[3:
=ti[3:
0]+4'
=24'
b0;
需要一个main_control模块来协调整个程序的实现,它负责产生蜂鸣器,key1,key2,key3的响应,同时配合1hz输入(1hz用于产生秒的计时,同时,时和分的转换都在这个模块中)
Main_control:
modulemain_control(count,clk1hz,key1,key2,key3,q,beep,t);
0]count;
inputclk1hz;
inputkey1;
inputkey2;
inputkey3;
outputbeep;
0]q;
0]t;
0]tempq;
regbeep;
always@(posedgeclk1hz)
b00)
q[31:
//
if(q[3:
q[3:
if(q[7:
q[7:
if(q[11:
q[11:
if(q[15:
q[15:
if(q[19:
q[19:
q[23:
=q[23:
elseif(q[23:
elseq[19:
=q[19:
elseq[15:
=q[15:
elseq[11:
=q[11:
elseq[7:
=q[7:
elseq[3:
=q[3:
//xiamianshinaolingfunction
if(t[23:
8]==q[23:
8])
beep<
=1'
elsebeep<
elseif(count==2'
b01)
d2;
d9&
key1==1'
b1)
8]+key1;
key2==1'
d3&
16]+key2;
b10)
t[31:
d3;
if(t[11:
b1)//
t[11:
if(t[15:
t[15:
elset[15:
=t[15:
elset[11:
=t[11:
if(t[19:
t[19:
t[23:
=t[23:
elseif(t[23:
elset[19:
=t[19:
//qcontinue
将要实现的4种功能设置为4种模式,用一个mode模块来选择模式
Mode:
modulemode(key0,count,rst);
inputkey0;
output[1:
reg[1:
always@(posedgekey0)//用key0的上升沿来判断
if(!
rst)
count<
b11)//用count变量来计数,显示的数据即为显示的模式
=count+2'
out模块配合segmain模块来控制数码管的显示,这在之前的实验中已经实现
out模块:
moduleout(count,q,ti,clk100hz,qout,t);
input[31:
0]qout;
qout<
=t;
=q;
segmain模块不在赘述。
Pulse模块用于产生脉冲来控制蜂鸣器
Pulse:
modulepulse(clk,d,spk);
input[12:
0]d;
outputspk;
regspk;
if(clk_div<
d)
spk<
=~spk;
最后需要产生乐曲,选择的乐曲为梁祝乐曲,需要一个tonetable模块来产生所发音符所需的分频预置数并且notetable模块中的计数器按照4Hz的时钟速率递增并依次输出分频预置数,并且控制好每个音符的持续时间。
依据课本上前几次实验的经验,对每个模块进行设定,编译,设置顶层等等步骤,最后下载到实验版上实现数字钟。
四、实验小结
通过本次的综合实验我回顾并掌握了之前几次实验的各种方法,对编程语言有了一个非常清楚的认识,并且进一步掌握了FPGA的开发流程,调试方法以及QuatusII软件的使用,QuartusII的涉及输入、仿真方法以及步骤,熟识QuatusII软件基本功能的使用,这对于本次实验的成功十分重要。
本学期的实验虽然只用到了开发板的硬件功能,但为我们今后的进一步学习打下了坚实的基础,而且我们还可以进行进一步的利用verilogHDL语言进行开发,而不仅仅停留在硬件功能上
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Quatus II数字钟 II 数字