通信工程应用技术综合训练与实习课设报告.docx
- 文档编号:18604336
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:27
- 大小:122.67KB
通信工程应用技术综合训练与实习课设报告.docx
《通信工程应用技术综合训练与实习课设报告.docx》由会员分享,可在线阅读,更多相关《通信工程应用技术综合训练与实习课设报告.docx(27页珍藏版)》请在冰点文库上搜索。
通信工程应用技术综合训练与实习课设报告
课程设计任务书
学生姓名:
王博弈专业班级:
通信gj1001
指导教师:
黄铮工作单位:
武汉理工大学
题目:
初始条件:
要求学生已完成通信专业各主干课程的学习,通过本课设进一步掌握专业课程群的综合原理、操作技能,形成基本的解决实践问题的知识体系,提高学生对现代通信系统的全面认识。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.阅读verilog语言相关数据
2.完成数字钟功能分析
3.编写各个模块verilog代码
4.综合、编译
5.通过仿真波形和RTL验证功能
6.完成说明书撰写
时间安排:
2014年1月6日布置任务;
2014年1月7日-10日查阅资料,确定设计方案;
2014年1月11日-16日完成仿真、制作实物等;
2014年1月17日完成答辩。
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本设计运用所学的verilog语言设计一个数字钟,实现基本计时、校时功能。
Verilog语言是用来进行FPGA项目开发的标准程序语言,不同于c语言的是,verilog语言是一种硬件编程语言。
语句通过综合器综合出来的器件之间的连接关系来实现功能。
运用FPGA进行项目开发,相比于运用传统的数字电子技术开发具有速度快、效率高、容易修改和调试等优点。
故本设计采用了硬件编程语言进行数字钟的设计,通过设计实现了数字钟的基本功能,碍于硬件条件限制无法获取FPGA芯片或开发板,本设计在quartus2开发环境下进行仿真验证功能。
Abstract
Theuseofdesignveriloglanguagelearnedtodesignadigitalclock,basictime,schoolfunctions.
VeriloglanguageisastandardprogramminglanguageusedforFPGAdevelopmentprojects,unliketheclanguageis,veriloglanguageisahardwareprogramminglanguage.Statementtoimplementthefunctionsbyconnectingthesynthesizerintegratedrelationshipbetweendevicesout.UsingFPGAprojectdevelopment,comparedtotheuseoftraditionaldigitalelectronictechnologydevelopmentwithhighspeed,highefficiency,easytomodifyanddebugadvantages.
Therefore,thedesignusesadigitalclockhardwareprogramminglanguagedesign,bydesigningthebasicfunctionsofdigitalclock,duetohardwareconstraintscannotobtainFPGAchiporboard,thedesigninquartus2developmentenvironmentforsimulationfunctions.
1综述
一个完整的时钟应该由五部分组成:
秒脉冲发生电路、计数处理模块、显示模块、校时模块和报时模块。
由于本设计并没有硬件实现条件(无FPGA芯片或开发板),故省略报时模块的设计。
故本设计将围绕分频模块、校时模块、计时处理模块、显示模块和顶层设计模块来讲述,其中显示模块以DE2开发板的数码管为硬件连接进行设计,在实际应用中可根据相应电路进行数码管显示参数微调即可。
一个时钟的准确与否主要取决于秒脉冲的精确度,为了保证设计准确,本设计以常用的24MHz晶振作为时钟源进行分频从而得打1Hz的秒脉冲。
分频获得正常即使信号sec_1(1Hz)、校秒信号sec_s、校分信号sec_m和校时信号sec_h。
色丁四个键:
正常/校时模式选择键keysel、校秒键key_s、校分键key_m、校时键key_h,通过这四个键可用于控制时钟的正常计时、校时。
除了校时电路以外,还要完成暂停和清零功能。
2分频模块设计
2.1分频模块verilog代码
moduledivclk(clk,sec_1,sec_s,sec_m,sec_h);
inputclk;
outputsec_1,sec_s,sec_m,sec_h;
reg[23:
0]count1;
reg[22:
0]count2;
reg[19:
0]count3;
reg[12:
0]count4;
regsec_1,sec_s,sec_m,sec_h;
always@(negedgeclk)
begin
count1=count1+1;
if(count1==24'd1*******)
begin
count1=25'h0;
sec_1=~sec_1;
end
end
always@(negedgeclk)
begin
count2=count2+1;
if(count2==23'd6291456)
begin
count2=24'h0;
sec_s=~sec_s;
end
end
always@(negedgeclk)
begin
count3=count3+1;
if(count3==20'd629146)
begin
count3=21'h0;
sec_m=~sec_m;
end
end
always@(negedgeclk)
begin
count4=count4+1;
if(count4==13'd6292)
begin
count4=16'h0;
sec_h=~sec_h;
end
end
endmodule
2.2代码分析
2.2.1信号定义
Clk:
基准时钟信号输入
Sec_1:
周期为1秒的信号输出
Sec_s:
周期为0.5秒的信号输出
Sec_m:
周期为0.01秒的信号输出
Sec_h:
周期为0.0005秒的信号输出
2.2.2功能分析
分频的关键在于设置不同进位规则的计数器。
模块开始定义了count1、count2、count3、count4位宽不同的寄存器,分别用于四种输出信号的计数。
以1s信号输出为例,在always引导的过程语句中设置了negedgeclk条件,即当时钟下降沿到来时执行always块中的语句,即count1计数器加1,然后通过if语句判断count1是否到达24’d1*******,即是否达到0.5s。
若达到则清零计数器并将sec_1取反。
通过上述过程便实现了将24Mz信号分频成1Hz秒信号的目的。
另外三种信号的产生机制与秒信号一样,只是改变了计数器的范围。
2.3仿真
由于verilog硬件编程语言的特性,需要综合出多个计数器和计数过程,对24MHz分频成1Hz的仿真耗时太久,故本设计采用RTL图方式来分析结果。
图2-1模块RTL图
可以看到模块RTL图中的clk作为所有器件的时钟信号,四个计数器分别与1送入加法器实现加1操作,结果送入一个等号判断器,当判断结果为真时使能寄存器,输出结果。
通过RTL图分析设计符合功能要求。
3校时模块设计
3.1校时模块代码
modulemodify(clk,keysel,key_s,key_m,key_h,sec_1,sec_s,sec_m,sec_h,sec);
inputclk,keysel,key_s,key_m,key_h;
inputsec_1,sec_s,sec_m,sec_h;
outputsec;
regsec;
always@(negedgeclk)
begin
if(!
keysel)
begin
if(!
key_s)
sec=sec_s;
if(!
key_m)
sec=sec_m;
if(!
key_h)
sec=sec_h;
end
else
sec=sec_1;
end
endmodule
3.2代码分析
3.2.1信号定义
Clk:
基准时钟信号输入
Keysel:
校时状态/正常计时状态选择键输入
Key_s:
校秒信号选择键输入
Key_m:
校分信号选择键输入
Sec_1:
周期为1s的信号输入
Sec_s:
周期为0.5秒的信号输入
Sec_m:
周期为0.01秒的信号输入
Sec_h:
周期为0.0005秒的信号输入
Sec:
计时信号输出
3.2.2功能分析
校时模块有always引导的过程块构成,在时钟下降沿到来时执行操作。
通过if语句判断按键keysel状态,低电平则进入其内,继续判断是否为key_s,、key_m、key_h中的任何一个,若是则将相应的校时信号赋值给sec计时信号输出。
若keysel为高电平则不进行校时。
通过上述语句块便可以实现校时/正常计时状态切换以及校时输入功能。
3.3仿真
图3-1仿真结果
上图为方正结果图,可以看出sec信号在对应的各个功能按键按下的过程中均进行了对应的变化。
以16us左右key_h被置为低电平,此时sec_h信号被幅值给sec,可以看到sec在这个时间段内的频率和相位与sec_h一致,说明校时成功。
为了保证设计的严谨性,本设计在时序分析成功的条件下给出RTL图。
图3-2RTL图
4计时处理模块设计
4.1计时处理模块代码
modulecounttime(sec,keyclr,keyen,min);
inputsec;
inputkeyclr,keyen;
output[23:
0]min;
reg[23:
0]min;
always@(posedgesec)
begin
if(!
keyclr)
begin
if(!
keyclr)
begin
min=24'h0;
end
else
if(!
keyen)
begin
min=min+1;
if(min[3:
0]==4'h6)
begin
min[7:
4]=4'h0;
min[11:
8]=min[11:
8]+1;
if(min[11:
8]==4'ha)
begin
min[11:
8]=4'h0;
min[15:
12]=min[15:
12]+1;
if(min[15:
12]==4'h6)
begin
min[15:
12]=4'h0;
min[19:
16]=min[19:
16]+1;
if(min[19:
16]==4'ha)
begin
min[19:
16]=4'h0;
min[23:
20]=min[23:
20]+1;
end
if(min[23:
16]==8'h24)
min[23:
16]=0;
end
end
end
end
end
end
endmodule
4.2代码分析
4.2.1信号定义
Sec:
计时信号输入
Keyclr:
计时清零键
Keyen:
计时开始键
Min:
计时结果输出
4.2.2功能分析
计时处理模块属于本设计中比较复杂和重要的部分。
通过if判断清零和计时开始按键的状态,计时开始后执行min信号加1,然后判断min信号的低四位是否取到10,若取到则需要向秒十位进位,即在min信号4~7位做加1处理。
当秒信号十位满6时则想分信号进位,以此实现逐级的秒、分、时计时功能。
在最后需要判断min信号的16~23位是否为24,若为24则说明24小时计时已满,需要对计数器清零。
至此可实现计数处理的功能。
4.3仿真
本模块RTL图如下所示。
图4-1RTL图
5显示模块设计
5.1显示模块代码
moduledisplay(clk,sec,min,sled_reg,sl_reg,seg_reg);
inputclk,sec;
input[23:
0]min;
output[7:
0]sled_reg;
output[3:
0]sl_reg;
output[7:
0]seg_reg;
reg[7:
0]sled_reg;
reg[3:
0]sl_reg;
reg[7:
0]seg_reg;
reg[15:
0]count;
reg[3:
0]ledbuf;
always@(negedgeclk)
begin
count=count+1;
end
always@(count[11:
10])
begin
case(count[11:
10])
2'h0:
ledbuf=min[3:
0];
2'h1:
ledbuf=min[7:
4];
2'h2:
ledbuf=min[11:
8];
2'h3:
ledbuf=min[15:
12];
endcase
case(count[11:
10])
2'h0:
sl_reg=4'b0111;
2'h1:
sl_reg=4'b1011;
2'h2:
sl_reg=4'b1101;
2'h3:
sl_reg=4'b1110;
endcase
end
always@(ledbuf)
begin
case(ledbuf)
4'h0:
sled_reg=8'hc0;
4'h1:
sled_reg=8'hf9;
4'h2:
sled_reg=8'ha4;
4'h3:
sled_reg=8'hb0;
4'h4:
sled_reg=8'h99;
4'h5:
sled_reg=8'h92;
4'h6:
sled_reg=8'h82;
4'h7:
sled_reg=8'h8;
4'h8:
sled_reg=8'hc80;
4'h9:
sled_reg=8'hc90;
4'ha:
sled_reg=8'hc88;
4'hb:
sled_reg=8'hc83;
4'hc:
sled_reg=8'hcc6;
4'hd:
sled_reg=8'hca1;
4'he:
sled_reg=8'hc86;
4'hf:
sled_reg=8'hc8e;
endcase
if((count[11:
10]==2'b10)&sec)sled_reg=sled_reg&8'h7f;
end
always@(min[23:
16])
begin
case(min[23:
16])
8'h0:
seg_reg=8'h3f;
8'h1:
seg_reg=8'h06;
8'h2:
seg_reg=8'h5b;
8'h3:
seg_reg=8'h4f;
8'h4:
seg_reg=8'h66;
8'h5:
seg_reg=8'h6d;
8'h6:
seg_reg=8'h7d;
8'h7:
seg_reg=8'h07;
8'h8:
seg_reg=8'h7f;
8'h9:
seg_reg=8'h6f;
8'h10:
seg_reg=8'h77;
8'h11:
seg_reg=8'h7c;
8'h12:
seg_reg=8'hbf;
8'h13:
seg_reg=8'h86;
8'h14:
seg_reg=8'hdb;
8'h15:
seg_reg=8'hcf;
8'h16:
seg_reg=8'he6;
8'h17:
seg_reg=8'hed;
8'h18:
seg_reg=8'hfd;
8'h19:
seg_reg=8'h87;
8'h20:
seg_reg=8'hff;
8'h21:
seg_reg=8'hef;
8'h22:
seg_reg=8'hf7;
8'h23:
seg_reg=8'hfc;
endcase
end
endmodule
5.2代码分析
5.2.1信号定义
Clk:
基准时钟信号输入
Min:
当前计时结果输入
Sec:
计时的秒信号输入
Sled_reg:
数码管段码输出
Sl_reg:
数码管位码输出
Seg_reg:
单个数码管输出
5.2.2功能分析
实现显示功能的代码虽然比较多,但是基本思路比较简单,通过case语句块将对应的数据幅值给数码管,从而完成显示功能。
数码管的赋值编码根据不同的硬件电路连接有不同形式,本设计仅针对DE2开发板的数码管形式进行编码。
5.3仿真
图5显示模块RTL鸟瞰图
由于无法获取FPGA芯片或开发板,显示功能无法通过下载到硬件进行验证,故本设计生成了显示模块的RTL图。
因显示模块的RTL图较长,排版的限制故只截取鸟瞰图。
6顶层模块设计
6.1顶层模块代码
moduledigitalclocktop(clk,keysel,key_s,key_m,key_h,keyen,keyclr,sled,sl,seg);
output[7:
0]sled;
output[3:
0]sl;
output[7:
0]seg;
inputclk;
inputkeysel,key_s,key_m,key_h,keyen,keyclr;
reg[24:
0]count;
wire[23:
0]min;
wiresec;
wiresec_s,sec_m,sec_h,sec_1;
divclkQ1(clk,sec_1,sec_s,sec_m,sec_h);
modifyQ2(clk,keysel,key_s,key_m,key_h,sec,sec_1,sec_s,sec_m,sec_h);
counttimeQ3(sec,keyclr,keyen,min);
diaplayQ4(clk,sec,min,sled,sl,seg);
endmodule
6.2代码分析
6.2.1信号定义
Clk:
基准时钟信号输入
Keysel:
校时状态/正常计时状态选择键输入
Key_s:
校秒信号选择键输入
Key_m:
校分信号选择键输入
Key_h:
校时信号选择键输入
Keyclr:
计时清零建
Keyen:
计时开始键
Sled:
四位数码管段码输出
Sl:
四位数码管位码输出
seg:
单个数码管输出
7总结
通过这次设计,我发现自身在verilog语言运用上还有很多不足。
虽然在大三的时候学过verilog的课程,但是当时并没有做太多的编程练习,这次设计中发现自己对于硬件编程语言的特性和语法并没有完全掌握,比如各个模块之间的例化、verilog语法等等都不是很熟。
设计中查阅了相关书籍,巩固了自己的verilog知识,这是在设计层面的收获。
通过体会FPGA的开发方法,让我意识到数字电子系统的快速开发流程是怎么样的,数字电子技术早已不是上个世纪的那种门电路组合的游戏,而是通过EDA工具在PC上进行大规模设计和应用的一门专业。
运用EDA软件可以大大缩短项目的时间成本,改进后的开发方式更加人性化和个性需求化。
今后在工作和学习中还是应该更多地将理论与实践相结合,多动手操作各种软件和CPU,才能真正提高自身的综合研究与开发能力。
参考文献
[1]陈明义.电工电子实验教程.中南大学出版,2010年
[2]康华光.电子技术基础模拟部分(第四版).高等教育出版社,1999年
[3]康华光.电子技术基础数字部分(第四版).高等教育出版社,2000年
[4]李振声.实验电子技术.国防工业出版社,2001年
[5]任为民.电子技术基础课程设计.中央广播电视大学出版社,1997年
附录verilog代码清单
(一)分频模块
moduledivclk(clk,sec_1,sec_s,sec_m,sec_h);
inputclk;
outputsec_1,sec_s,sec_m,sec_h;
reg[23:
0]count1;
reg[22:
0]count2;
reg[19:
0]count3;
reg[12:
0]count4;
regsec_1,sec_s,sec_m,sec_h;
always@(negedgeclk)
begin
count1=count1+1;
if(count1==24'd1*******)
begin
count1=25'h0;
sec_1=~sec_1;
end
end
always@(negedgeclk)
begin
count2=count2+1;
if(count2==23'd6291456)
begin
count2=24'h0;
sec_s=~sec_s;
end
end
always@(negedgeclk)
begin
count3=count3+1;
if(count3==20'd629146)
begin
count3=21'h0;
sec_m=~sec_m;
end
end
always@(negedgeclk)
begin
count4=count4+1;
if(count4==13'd6292)
begin
count4=16'h0;
sec_h=~sec_h;
end
end
endmodule
(二)校时模块
modulemodify(clk,keysel,key_s,key_m,key_h,sec_1,sec_s,sec_m,sec_h,sec);
inputclk,keysel,key_s,key_m,key_h;
inputsec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 通信工程 应用技术 综合 训练 实习 报告