实用多功能数字时钟设计verilog.docx
- 文档编号:10155917
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:18
- 大小:377.16KB
实用多功能数字时钟设计verilog.docx
《实用多功能数字时钟设计verilog.docx》由会员分享,可在线阅读,更多相关《实用多功能数字时钟设计verilog.docx(18页珍藏版)》请在冰豆网上搜索。
实用多功能数字时钟设计verilog
题
目
EDA课程设计
学生姓名:
梅泽霖
学号:
1211002015
专业:
电子科学与技术
完成日期:
2014年1月15日
实用多功能数字时钟设计
1、设计要求
数字钟具有整点报时和校时功能。
(1)以4位LERD数码管显示时、分,时为24进制。
(2)时、分显示数字之间以小数点间隔,小数点以1Hz频率、50%占空比的亮、灭规律表示秒计时。
(3)整点报时采用蜂鸣器实现。
每当整点前控制蜂鸣器以低频鸣响4次,响1s、停1s,直到整点前一秒以高频响1s,整点时结束。
(4)采用两个按键分别控制“校时”或“校分”。
按下“校时”键时,时显示值以0~23循环变化;按下“校分”键时,分显示值以0~59循环变化,但时显示值不能变化。
2、背景知识介绍
(1)VerilogHDL简介
VerilogHDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。
数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
VerilogHDL语言具有下述描述能力:
设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,VerilogHDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
VerilogHDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
VerilogHDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,VerilogHDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
(2)Quartus工程说明
创建工程时,路径中不允许有中文。
选择芯片系列:
CycloneII
选择芯片型号:
EP2C8Q208C8
其余直接下一步。
(创建的工程文件名为:
*.qpf文件)
与工程设置:
Assignments->Settings
弹窗右上角:
Device…
DeviceandPinOptions->Configuration->
Useconfigurationdevice:
EPCS1
DeviceandPinOptions->Dual-PurposePins->
nCEO:
UseasregularI/O
创建Verilog文件,和BlockDiagram文件。
完成编译后,下载。
编译:
Processing->StartCompilation
引脚分配:
Assignments->PinPlanner
下载程序:
Tools->Programmer->
HardwareSetup…:
选择对应的下载方式
Mode:
JATG
注意文件名后缀为:
*.sof
并勾选:
Program/Configure
连接下载器线,和USB电源线,点击“Start”下载。
Progress:
绿色100%,完成。
该下载方式:
掉电后消失,须重新下载。
3、硬件设计
硬件配置
硬件搭建图
引脚配置图
4、软件设计
(1)Modelsim仿真
1.主程序
moduleled(clk,clr,miao,fen1,fen2,shi1,shi2,a,jiaos,jiaof,Ring,
sel,seg);
inputclk,clr;
inputjiaos,jiaof,sel;
outputmiao,fen1,fen2,shi1,shi2,seg;
reg[3:
0]fen1,fen2,shi1,shi2;
regmiao;
reg[3:
0]sfbz;
outputreg[7:
0]a;
outputregRing;
outputreg[1:
0]sel;
outputreg[6:
0]seg;
always@(posedgeclk)
begin
if(clr)
miao<=0;
else
miao=~miao;
end
always@(posedgemiaoorclr)
begin
if(clr)
a<=0;
elseif(a==8'd59)
a<=0;
else
a<=a+1;
end
always@(posedgemiaoorclr)
begin
if(clr)
fen1<=0;
elseif(jiaof&&fen1<4'd9)
fen1<=fen1+1;
elseif(jiaof&&fen1==4'd9)
fen1<=0;
elseif(fen1==4'd9&&a==8'd59)
fen1<=0;
elseif(a==8'd59&&(a+1)==8'd60)
fen1<=fen1+1;
elsefen1<=fen1;
end
always@(posedgemiaoorclr)
begin
if(clr)
fen2<=0;
elseif(jiaof&&fen1==4'd9&&fen2<5)
fen2<=fen2+1;
elseif(fen2==5&&fen1==9&&a==8'd59)
fen2<=0;
elseif(fen1==9&&a==8'd59)
fen2<=fen2+1;
else
fen2<=fen2;
end
always@(posedgemiaoorclr)
begin
if(clr)
shi1<=0;
elseif(jiaos&&shi1<4'd9)
shi1=shi1+1;
elseif(jiaos&&shi1==4'd9)
shi1<=0;
elseif(shi1==8'd3&&fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi2==4'd2)
begin
shi1<=0;
shi2<=0;
end
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi1==8'd9)
shi1<=0;
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59)
shi1<=shi1+1;
elseshi1<=shi1;
end
always@(posedgemiaoorclr)
begin
if(clr)
shi2<=0;
elseif(jiaos&&shi2<4'd2)
shi2=shi2+1;
elseif(shi1==8'd3&&fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi2==2)
shi2<=0;
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi1==8'd9)
shi2<=shi2+1;
elseshi2<=shi2;
end
always@(fen1orfen2ormiao)
if(fen1==8'd9&&fen2==8'd5)
case(a)
8'd51:
Ring=1;
8'd53:
Ring=1;
8'd55:
Ring=1;
8'd57:
Ring=1;
8'd59:
Ring=1;
default:
Ring=1'b0;
endcase
else
Ring=1'b0;
endmodule
2.测试程序
moduleledtest1;
regclk,clr;
wire[3:
0]fen1,fen2,shi1,shi2;
wiremiao;
wireRing;
wire[7:
0]a;
regjiaos,jiaof;
ledu1(clk,clr,miao,fen1,fen2,shi1,shi2,a,jiaos,jiaof,Ring);
initial
begin
#10clk=1;
#10clr=1;
#10clr=1;
#10clr=0;
#100jiaof=0;
#100jiaos=0;
#100000jiaof=1;
#100000jiaos=1;
#100jiaof=0;
#100jiaos=0;
clr=0;
end
always#10clk=~clk;
endmodule
3.Modelsm程序仿真
4
(2)Quartus
仿真
1.主程序
moduleled(clk,clr,miao,jiaos,jiaof,Ring,sel,seg);
inputclk,clr;
inputjiaos,jiaof;
outputmiao,seg,sel;
reg[3:
0]fen1,fen2,shi1,shi2;
reg[21:
0]div;
regmiao,clkd;
reg[7:
0]seg;
reg[3:
0]sel,nsel;
reg[3:
0]sfbz;
reg[7:
0]a;
outputregRing;
always@(posedgeclk)
begin
if(~clr)
div<=0;
elseif(div==21'b111111111111111111111)
div<=0;
else
div<=div+1;
end
always@(posedgeclk)
begin
if(~clr)
clkd<=0;
elseif(div==21'b111111111111111111111)
clkd<=~clkd;
elseclkd<=clkd;
end
always@(posedgeclkd)
begin
if(~clr)
miao<=0;
else
miao=~miao;
end
always@(posedgemiaoornegedgeclr)
begin
if(~clr)
a<=0;
elseif(a==8'd59)
a<=0;
else
a<=a+1;
end
always@(posedgemiaoornegedgeclr)
begin
if(~clr)
fen1<=0;
elseif(!
jiaof&&fen1<4'd9)
fen1<=fen1+1;
elseif(!
jiaof&&fen1==4'd9)
fen1<=0;
elseif(fen1==4'd9&&a==8'd59)
fen1<=0;
elseif(a==8'd59&&(a+1)==8'd60)
fen1<=fen1+1;
elsefen1<=fen1;
end
always@(posedgemiaoornegedgeclr)
begin
if(~clr)
fen2<=0;
elseif(!
jiaof&&fen1==4'd9&&fen2<5)
fen2<=fen2+1;
elseif(!
jiaof&&fen1==4'd9&&fen2==5)
fen2<=0;
elseif(fen2==5&&fen1==9&&a==8'd59)
fen2<=0;
elseif(fen1==9&&a==8'd59)
fen2<=fen2+1;
else
fen2<=fen2;
end
always@(posedgemiaoornegedgeclr)
begin
if(~clr)
shi1<=0;
elseif(!
jiaos&&shi2<=1&&shi1<4'd9)
shi1<=shi1+1;
elseif(!
jiaos&&shi2==2&&shi1<4'd3)
shi1<=shi1+1;
elseif(!
jiaos&&shi1==4'd9)
shi1<=0;
elseif(!
jiaos&&shi2==2&&shi1==4'd3)
shi1<=0;
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi1==8'd9)
shi1<=0;
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59)
shi1<=shi1+1;
elseshi1<=shi1;
end
always@(posedgemiaoornegedgeclr)
begin
if(~clr)
shi2<=0;
elseif(!
jiaos&&shi2<4'd2&&shi1==9)
shi2<=shi2+1;
elseif(!
jiaos&&shi2==4'd2&&shi1==3)
shi2<=0;
elseif(shi1==8'd3&&fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi2==2)
shi2<=0;
elseif(fen1==8'd9&&fen2==8'd5&&a==8'd59&&shi1==8'd9)
shi2<=shi2+1;
elseshi2<=shi2;
end
always@(fen1orfen2ormiao)
begin
if(fen1==8'd9&&fen2==8'd5)
case(a)
8'd51:
Ring=1;
8'd53:
Ring=1;
8'd55:
Ring=1;
8'd57:
Ring=1;
8'd59:
Ring=1;
default:
Ring=1'b0;
endcase
else
Ring=1'b0;
end
always@(posedgeclkornegedgeclr)
begin
if(~clr)
sel<=4'b0000;
else
sel<=nsel;
end
/*always@(posedgeclk)
begin
if(~clr)
seg=7'b11000000;
end*/
always@(sel)
begin
case(sel)
4'b0000:
nsel=4'b1000;
4'b1000:
nsel=4'b0100;
4'b0100:
nsel=4'b0010;
4'b0010:
nsel=4'b0001;
4'b0001:
nsel=4'b0000;
default:
nsel=4'b0000;
endcase
end
always@(sel)
begin
case(sel)
4'b0010:
sfbz=fen2;
4'b0001:
sfbz=fen1;
4'b1000:
sfbz=shi2;
4'b0100:
sfbz=shi1;
default:
sfbz=4'b0000;
endcase
end
always@(sfbz)
begin
case(sfbz)
4'b0000:
seg=8'b11000000;
4'b0001:
seg=8'b11111001;
4'b0010:
seg=8'b10100100;
4'b0011:
seg=8'b10110000;
4'b0100:
seg=8'b10011001;
4'b0101:
seg=8'b10010010;
4'b0110:
seg=8'b10000010;
4'b0111:
seg=8'b11111000;
4'b1000:
seg=8'b10000000;
4'b1001:
seg=8'b10010000;
default:
seg=7'b11000000;
endcase
end
endmodule
5、课程设计心得体会
xx:
课程设计是我们专业课程知识综合应用的实践训练,着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。
通过这次课程设计,本人在多方面都有所提高。
通过这次课程设计,综合运用本专业所学课程的理论和生产实际知识进行一次汽车尾灯设计工作的实际训练从而培养和提高学生独立工作能力,巩固与扩充了Verilog等课程所学的内容,掌握设计的方法和步骤,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用 多功能 数字 时钟 设计 verilog