EDA课程设计报告书.docx
- 文档编号:28961745
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:17
- 大小:172.40KB
EDA课程设计报告书.docx
《EDA课程设计报告书.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告书.docx(17页珍藏版)》请在冰豆网上搜索。
EDA课程设计报告书
《电子设计自动化(EDA)技术》
课程设计报告书
题目:
数字频率计的VHDL设计
姓名:
院系:
专 业:
学号:
指导教师:
课程设计题目、内容、要求
设计题目
数字频率计的VHDL设计
设计要求
用PLD器件EP1K10TC100-3及7段动态显示数码管(一只用于量程显示)设计一只数字频率计,要求:
(1)测频范围0~999999MHz;
(2)能测量方波信号;
(3)结果用十进制显示;
设计过程
设计方案:
借用实验板上标准时钟发生电路,为计数闸门控制电路提供一个标准4MHz信号。
计数器闸门控制电路fen就是产生两个控制信号,即4位十进制计数器允许计数信号、锁存信号。
锁存电路可以让LED数码管在信号来临之前保持计数值不变。
计数器复位电路可以让频率计恢复到计数初始态。
LED数码管驱动电路为LED数码管提供驱动电压。
在程序设计中我们采用了自顶向下(top_down)的设计方法,使得程序设计的过程更为简单,在设计出各模块后,我们用了各顶层模块将各个底层模块合在一起,我们用的是原件例化来实现的,在例化完成后只需要调用顶层模块就可以让数字频率计可用了,设计完成后用波形仿真来验证程序设计的正确性。
成绩评定
指导教师评语
设计等级
目录
1课程设计题目、内容与要求……………………………………
1.1设计内容……………………………………………………
1.2具体要求……………………………………………………
2系统设计…………………………………………………………
2.1设计思路……………………………………………………
2.2系统原理与设计说明
3系统实现…………………………………………………………
4系统仿真…………………………………………………………
5硬件验证(操作)说明…………………………………………
6总结……………………………………………………………
7参考书目………………………………………………………
1课程设计题目、内容与要求
1.1课程设计的题目:
数字频率计设计
1.2课程设计内容:
(1)设计一个能测量方波信号的频率计;
(2)测量范围是0-999999Hz;
(3)结果用十进制数显示。
2系统设计
2.1设计思路:
2.1.1数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器.它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。
本数字频率计采用自顶向下的设计思想,通过闸门提供的1s闸门时间对被测信号进行计数及测出的被测信号的频率,测出的频率再通过译码器译码后输出给显示器显示。
根据系统设计的要求,数字频率计的电路原理框图如下:
待测输入信号
4MHZ时钟
4MHZ时钟
图1数字频率计电路原理框图
2.2系统原理与设计说明
系统各个模块的功能如下:
2.2.1标准时钟发生电路模块
借用实验板上标准时钟发生电路,为计数闸门控制电路提供一个标准8Hz信号。
2.2.2计数器闸门控制电路模块
计数器闸门控制电路就是产生三个控制信号,即计数器复位信号、4位十进制计数器允许计数信号、锁存信号。
2.2.3锁存电路模块
锁存电路就是为了让LED数码管在信号来临之前保持计数值不变。
2.2.4计数器复位电路模块
计数器复位电路是让频率计恢复到计数初始态。
2.2.5LED数码管驱动电路模块
LED数码管驱动电路就是为LED数码管提供驱动电压。
3系统实现
此部分先讲各个模块再讲模块联调的实现。
3.1各部分模块的源程序
⑴模块FEN见图1.1,通过对4MHz时钟进行分频以获得0.5Hz时钟,为核心模块CORNA提供1s的闸门时间。
libraryieee;useieee.std_logic_1164.all;
entityfenis
port(clk:
instd_logic;
q:
outstd_logic);
endfen;
architecturefen_arcoffenis
begin
process(clk)
variablecnt:
integerrange0to3999999;
variablex:
std_logic;
begin
ifclk'eventandclk='1'then
ifcnt<3999999then
cnt:
=cnt+1;
else
cnt:
=0;
x:
=notx;
endif;
endif;
q<=x;
endprocess;
endfen_arc;
⑵模块SEL见图1.2,该模块产生数码管的片选信号。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityselxis
port(clk:
instd_logic;
sel:
inoutstd_logic_vector(2downto0));
endselx;
architecturesel_arcofsexlis
begin
process(clk)
variablecnt:
std_logic_vector(2downto0);
begin
ifclk'eventandclk='1'then
cnt:
=cnt+1;
endif;
sel<=cnt;
endprocess;
endsel_arc;
⑶核心模块CORNA见图1.3,该模块是整个程序的核心,它能在1s的闸门时间里完成对被测信号频率计数的功能,并通过选择输出数据实现自动换档的功能。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycornais
port(clr,sig,door:
instd_logic;
alm:
outstd_logic;
q3,q2,q1,q0,dang:
outstd_logic_vector(3downto0));
endcorna;
architecturecorn_arcofcornais
begin
process(door,sig)
variablec0,c1,c2,c3,c4,c5,c6:
std_logic_vector(3downto0);
variablex:
std_logic;
begin
ifsig'eventandsig='1'then
ifdoor='1'then
ifc0<"1001"then
c0:
=c0+1;
else
c0:
="0000";
ifc1<"1001"then
c1:
=c1+1;
else
c1:
="0000";
ifc2<"1001"then
c2:
=c2+1;
else
c2:
="0000";
ifc3<"1001"then
c3:
=c3+1;
else
c3:
="0000";
ifc4<"1001"then
c4:
=c4+1;
else
c4:
="0000";
ifc5<"1001"then
c5:
=c5+1;
else
c5:
="0000";
ifc6<"1001"then
c6:
=c6+1;
else
c6:
="0000";
alm<='1';
endif;
endif;
endif;
endif;
endif;
endif;
endif;
else
ifclr='0'then
alm<='0';
endif;
c6:
="0000";
c5:
="0000";
c4:
="0000";
c3:
="0000";
c2:
="0000";
c1:
="0000";
c0:
="0000";
endif;
ifc6/="0000"then
q3<=c6;
q2<=c5;
q1<=c4;
q0<=c3;
dang<="0100";
elsifc5/="0000"then
q3<=c5;
q2<=c4;
q1<=c3;
q0<=c2;
dang<="0011";
elsifc4/="0000"then
q3<=c4;
q2<=c3;
q1<=c2;
q0<=c1;
dang<="0010";
elsifc3/="0000"then
q3<=c3;
q2<=c2;
q1<=c1;
q0<=c0;
dang<="0001";
endif;
endif;
endprocess;
endcorn_arc;
⑷模块LOCK见图1.4,该模块实现锁存器的功能,在信号L的下降沿到来时将信号A4、A3、A2、A1锁存。
libraryieee;
useieee.std_logic_1164.all;
entitylockis
port(l:
instd_logic;
a4,a3,a2,a1,a0:
instd_logic_vector(3downto0);
q4,q3,q2,q1,q0:
outstd_logic_vector(3downto0));
endlock;
architecturelock_arcoflockis
begin
process(l)
variablet4,t3,t2,t1,t0:
std_logic_vector(3downto0);
begin
ifl'eventandl='0'then
t4:
=a4;
t3:
=a3;
t2:
=a2;
t1:
=a1;
t0:
=a0;
endif;
q4<=t4;
q3<=t3;
q2<=t2;
q1<=t1;
q0<=t0;
endprocess;
endlock_arc;
⑸模块CH见图1.5,该模块对应于数码管片选信号,将相应通道的数据输出,其中档位也通过显示。
libraryieee;
useieee.std_logic_1164.all;
entitychis
port(sel:
instd_logic_vector(2downto0);
a3,a2,a1,a0,dang:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endch;
architecturech_arcofchis
begin
process(sel)
begin
caseselis
when"000"=>q<=a0;
when"001"=>q<=a1;
when"010"=>q<=a2;
when"011"=>q<=a3;
when"111"=>q<=dang;
whenothers=>q<="1111";
endcase;
endprocess;
endch_arc;
[6]模块DISP见图1.6,该模块为4线—七段译码器。
libraryieee;
useieee.std_logic_1164.all;
entitydispis
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
enddisp;
architecturedisp_arcofdispis
begin
process(d)
begin
casedis
when"0000"=>q<="0111111";
when"0001"=>q<="0000110";
when"0010"=>q<="1011011";
when"0011"=>q<="1001111";
when"0100"=>q<="1100110";
when"0101"=>q<="1101101";
when"0110"=>q<="1111101";
when"0111"=>q<="0100111";
when"1000"=>q<="1111111";
when"1001"=>q<="1101111";
whenothers=>q<="0000000";
endcase;
endprocess;
enddisp_arc;
3.17整个系统的顶层设计模块
该部分讲述用元件例化的方法来实现模块联调
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYhqlIS
PORT(clr,sig,clk:
INSTD_LOGIC;
alm:
OUTSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
sel:
INOUTSTD_LOGIC_VECTOR(2DOWNTO0));
ENDhql;
ARCHITECTUREsdOFhqlIS
COMPONENTfen
port(clk:
instd_logic;
q:
outstd_logic);
endCOMPONENT;
COMPONENTselx
port(clk:
instd_logic;
sel:
inoutstd_logic_vector(2downto0));
endCOMPONENT;
COMPONENTcorna
port(clr,sig,door:
instd_logic;
alm:
outstd_logic;
q3,q2,q1,q0,dang:
outstd_logic_vector(3downto0));
endCOMPONENT;
COMPONENTlock
port(l:
instd_logic;
a4,a3,a2,a1,a0:
instd_logic_vector(3downto0);
q4,q3,q2,q1,q0:
outstd_logic_vector(3downto0));
endCOMPONENT;
COMPONENTch
port(sel:
instd_logic_vector(2downto0);
a3,a2,a1,a0,dang:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(3downto0));
endCOMPONENT;
COMPONENTdisp
port(d:
instd_logic_vector(3downto0);
q:
outstd_logic_vector(6downto0));
endCOMPONENT;
SIGNALqq:
STD_LOGIC;
SIGNALqq3,qq2,qq1,qq0,qqdang:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALtt4,tt3,tt2,tt1,tt0:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALww:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
u1:
fenPORTMAP(clk=>clk,q=>qq);
u2:
selxPORTMAP(clk=>clk,sel=>sel);
u3:
cornaPORTMAP(clr=>clr,sig=>sig,door=>qq,alm=>alm,q3=>qq3,q2=>qq2,q1=>qq1,q0=>qq0,dang=>qqdang);
u4:
lockPORTMAP(l=>qq,a4=>qq3,a3=>qq3,a2=>qq2,a1=>qq1,a0=>qqdang,q4=>tt4,q3=>tt3,q2=>tt2,q1=>tt1,q0=>tt0);
u5:
chPORTMAP(sel=>sel,a3=>tt4,a2=>tt3,a1=>tt2,a0=>tt1,dang=>tt0,q=>ww);
u6:
dispPORTMAP(d=>ww,q=>q);
ENDsd;
本部分讲述的是用图形的方法来实现模块联调,在Muxplus
中现将编译好的各模块生成为图形(File→creatDefaultSymbol),再打开新建一个图形编辑器(File→New→GraphicEditorfile)进行图形拼凑编译就可以了,最后的图形如下图:
4系统仿真
整个系统的仿真波形如下:
测试信号是频率为5kHz脉冲时的仿真波形图
第一次仿真中的换档情况
测试信号是频率为25kHz脉冲时的仿真波形图
测试信号是频率为250kHz脉冲时的仿真波形
测试信号是周期为6ms脉冲时的仿真波形图
5硬件验证说明
本设计可采用EDA2000实验箱(主芯片为EP1K10TC100-3)进行硬件下载验证.将下载好程序的主芯片根据事先定义好的管脚连好线,clk端口用实验箱的输出为4MHz的标准时基信号,sig端口接入被测的信号,clr端口连接一个电平开关,将电平开关-置高电平,输出端接好LED显示器就可以观察被测信号的频率了。
6总结
通过本次EDA数字频率计的设计,让我对数字系统的整个设计流程有了更清楚的认识,更加熟悉了系统编译、仿真、程序下载等,也让我认识到任何一个系统的设计都不是我所想象的那么容易,记得在这次数字频率计的设计过程中,本来所的程序都可以借鉴,甚至可以照抄,可是事实上,但我们把程序拿去编译、仿真时,发现所有的程序都或多或少的错误,同时,它还我发现了平时学习中的问题,如在进行顶层设计时,要用到元件例化语句,但平时学习时却只是一晃而过,这时才发现它的重要……总之,这次课程设计让我受益匪浅。
7参考书目
[1]《PLD与数字系统设计》李辉西安电子科技大学出版社2005
[2]《集成电路设计VHDL教程》赵俊超等著北京:
希望电子出版社2002
[3]《VHDL数字系统设计与高层次综合》林敏方颖立著北京:
电子工业出版社2002
[4]《VHDL程序设计》曾繁泰陈美金著北京:
清华大学出版社2001
[5]《VHDL实用教程》潘松王国栋著成都:
电子科技大学出版社2001
[6]《数字电路逻辑设计》王毓银著北京:
高等教育出版社2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)