基于VHDL语言的频率计设计.docx
- 文档编号:13586662
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:21
- 大小:202.13KB
基于VHDL语言的频率计设计.docx
《基于VHDL语言的频率计设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的频率计设计.docx(21页珍藏版)》请在冰点文库上搜索。
基于VHDL语言的频率计设计
一、课程设计任务:
2
二、课程设计原理:
2
三、课程设计所需仪器:
2
四、课程设计使用的硬件资源及原理框图:
2
五、设计过程及操作:
3
1、FTCTRL测频控制模块:
3
2、计数器模块:
3
3、REG32B锁存器模块3
4、DECL7S译码器模块4
5、分频器模块4
6、MUX多路选择器模块。
4
7、器件连接:
4
8、操作过程:
4
六、设计各个模块代码:
5
1:
FTCTRL模块5
2:
CNT_10计数器模块5
3:
REG32B锁存器模块6
4:
DECL7S译码器模块6
5:
any_1010分频器模块7
6:
any_55分频器模块7
7:
any_1616分频模块8
8:
MUX多路选择器模块9
9:
顶层例化代码9
七、总电路:
12
八、管脚配置:
13
九、设计结果:
14
1、课程设计任务:
设计8位十进制频率计
2、课程设计原理:
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输
入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频
计数周期作准备的计数器清0信号。
这清0个信号可以由一个测频控制信号发生器TESTCTL
产生,它的设计要,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
3、课程设计所需仪器:
AltreaDE2-115实验箱;quartusII12.1;modelsim仿真软件。
4、课程设计使用的硬件资源及原理框图:
1、50MHz时钟源两个
2、拨动开关
3、7段数码管/液晶显示屏
5、设计过程及操作:
1、FTCTRL测频控制模块:
频率计的核心控制部分为FTCTRL,该模块的技术是能信号CNT_EN能产生一个1s脉宽的周期信号(由于实验箱提供的是50MHz的高频信号,所以需要通过分频器获得1s脉宽信号),并对频率计中的计数器的EN使能端进行同步测控。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所设计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器在前一秒钟的计数器的计数值锁存进锁存器REG32B中,并由外部的十六进制7段译码器译出,显示计数值。
锁存信号后,必须有一清零信号RST_CNT对计数器清零,为下一秒的计数操作做准备。
2、计数器模块:
由于设计要求为8位十进制输出,所以采用的是十进制加法带进位的计数器级联的形式完成计数功能,每个单独的计数器有4位的十进制DOUT(3DOWNTO0)输出和一个进位COUT输出,输入的RST复位端、EN使能端和计数信号CLK端。
级联时,将被测信号接入第一个各位的CNT_10计数器的CLK端,并且将每上一个的进位端与下一个的计数器CNT_10的计数CLK相连。
3、REG32B锁存器模块
锁存器为32位,包括一个锁存信号LK,32位的输入和输出。
4、DECL7S译码器模块
因为每个计数器输出的是二进制数,所以转化到七段数码管上需要通过4-7译码器译码。
实验箱的数码管为共阳极。
需要8个数码管同时显示,所以需要8个译码器。
5、分频器模块
由于实验箱只提供50MHz的信号,所以需要分频得到1Hz的信号以及不同的频率进行测试,所以需要分频器。
本设计分频器采用的是5分频器any_5、10分频器any_10和16分频器any_16。
6、MUX多路选择器模块。
由于实验箱提供的信号源有限,所以要进行测试,必须使用多路选择器来进行对不同的分频信号进行测试来验证频率计的功能是否完成。
本次设计采用的是4选1多路选择器。
7、器件连接:
以上各部份器件已经完善。
需要将这些器件连接起来完成最终的设计,所以本次设计采取了元件例化,用例化语句将各个器件连接起来。
顶层文件见代码段。
8、操作过程:
A建立项目
B选择器件:
器件系列(DeviceFamily)CycloneIVE
器件型号(AvailableDevices)EP4CE115F29C7
C建立设计文档,newvhdlfile,并编辑保存。
D点击按键栏(或Processing菜单中)的Startcompilation进行编译
E编译正确完成后,点击按键栏(或Assignments菜单中)的PinPlanner进行引脚锁定
F双击Location栏,在下拉菜单中选择需要锁定的引脚(EP4C115F芯片引脚分布详见附录)
G再次编译项目
H连接实验箱
I程序下载
点击按键栏(或Tools菜单)的Programmer,此时没有添加硬件,点击HardwareSetup选择硬件。
在Currentlyselectedhardware下拉菜单中选择USB-Blaster后,点击Close,回到Programmer页面。
在HardwareSetup栏中可看到USB-Blaster。
注意Mode为缺省的JTAG接口硬件选择完毕。
点击Start开始下载。
Progress进度完成后下载完毕。
6、设计各个模块代码:
1:
FTCTRL模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYFTCTRLIS
PORT(CLKK:
INSTD_LOGIC;
CNT_EN,RST_CNT:
OUTSTD_LOGIC;
LOAD:
OUTSTD_LOGIC);
ENDFTCTRL;
ARCHITECTUREbehavofFTCTRLIS
SIGNALDIV2CLK:
STD_LOGIC:
='0';
BEGIN
PROCESS(CLKK)BEGIN
IFCLKK'EVENTANDCLKK='1'THENDIV2CLK<=NOTDIV2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLKK,DIV2CLK)BEGIN
IFCLKK='0'ANDDIV2CLK='0'THENRST_CNT<='1';
ELSERST_CNT<='0';ENDIF;
ENDPROCESS;
LOAD<=NOTDIV2CLK;
CNT_EN<=DIV2CLK;
ENDbehav;
2:
CNT_10计数器模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT10IS
PORT(RST,EN,CLK:
INSTD_LOGIC;
COUT:
OUTSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCNT10;
ARCHITECTUREBHVOFCNT10IS
BEGIN
PROCESS(CLK,RST,EN)
VARIABLEQ1:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRST='1'THENQ1:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFQ1<9THENQ1:
=Q1+1;
ELSEQ1:
=(OTHERS=>'0');
ENDIF;
ENDIF;
ENDIF;
IFQ1="1001"THENCOUT<='0';
ELSECOUT<='1';ENDIF;
DOUT<=Q1;
ENDPROCESS;
ENDBHV;
3:
REG32B锁存器模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYREG32BIS
PORT(LK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
END;
ARCHITECTUREBHVOFREG32BIS
BEGIN
PROCESS(LK,DIN)BEGIN
IFLK'EVENTANDLK='1'THENQ<=DIN;ENDIF;
ENDPROCESS;
ENDBHV;
4:
DECL7S译码器模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECL7SIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREONEOFDECL7SIS
BEGIN
PROCESS(A)BEGIN
CASEAIS
WHEN"0000"=>LED7S<="1000000";
WHEN"0001"=>LED7S<="1111001";
WHEN"0010"=>LED7S<="0100100";
WHEN"0011"=>LED7S<="0110000";
WHEN"0100"=>LED7S<="0011001";
WHEN"0101"=>LED7S<="0010010";
WHEN"0110"=>LED7S<="0000010";
WHEN"0111"=>LED7S<="1111000";
WHEN"1000"=>LED7S<="0000000";
WHEN"1001"=>LED7S<="0010000";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
5:
any_1010分频器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityany_10is
port(clk10:
instd_logic;
k:
outstd_logic);
end;
architecturebhvofany_10is
signals:
std_logic;
signalc:
std_logic_vector(3downto0);
begin
process(clk10,c)begin
ifrising_edge(clk10)then
if(c="1001")thenc<="0000";
elsec<=c+1;endif;
if(c="0101")thens<=nots;
elsif(c="0000")thens<=nots;endif;
endif;
endprocess;
k<=s;
endbhv;
6:
any_55分频器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityANY_5is
port(clk5:
instd_logic;
kf:
outstd_logic);
end;
architecturebhvofANY_5is
signalc1,c2:
std_logic_vector(2downto0);
signalm1,m2:
std_logic;
begin
process(clk5,c1)
begin
ifrising_edge(clk5)then
if(c1="100")thenc1<="000";
elsec1<=c1+1;endif;
if(c1="001")thenm1<=notm1;
elsif(c1="011")thenm1<=notm1;endif;endif;
endprocess;
process(clk5,c2)begin
iffalling_edge(clk5)then
if(c2="100")thenc2<="000";
elsec2<=c2+1;endif;
if(c2="001")thenm2<=notm2;
elsif(c2="011")thenm2<=notm2;endif;endif;
endprocess;
kf<=m1orm2;
endbhv;
7:
any_1616分频模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityany_16is
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
endentityany_16;
architecturediv1ofany_16is
signalclk_outQ:
std_logic;
signalcoutQ:
std_logic_vector(15downto0);
begin
process(clk_in)begin
ifclk_in'eventandclk_in='1'then
ifcoutQ<15
thencoutQ<=coutQ+1;
elsecoutQ<=(others=>'0');endif;endif;
endprocess;
process(coutQ)begin
ifcoutQ<16/2
thenclk_outQ<='0';
elseclk_outQ<='1';endif;
endprocess;
clk_out<=clk_outQ;
endarchitecturediv1;
8:
MUX多路选择器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityMUXis
port(AIN,BIN,CIN,DIN,S0,S1:
instd_logic;Y:
outstd_logic);
endentityMUX;
architectureAofMUXis
signalS:
std_logic_vector(1downto0);
begin
S<=S1&S0;
process(S1,S0)begin
CASE(S)IS
WHEN"00"=>Y<=AIN;
WHEN"01"=>Y<=BIN;
WHEN"10"=>Y<=CIN;
WHEN"11"=>Y<=DIN;
ENDCASE;
endprocess;
endarchitectureA;
9:
顶层例化代码
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYpinlvjiIS
PORT(CLK,FFIN,S0,S1:
INSTD_LOGIC;
QOUT:
OUTSTD_LOGIC_VECTOR(55DOWNTO0));
ENDENTITYpinlvji;
ARCHITECTUREBHVOFpinlvjiIS
COMPONENTFTCTRL
PORT(CLKK:
INSTD_LOGIC;
CNT_EN,RST_CNT:
OUTSTD_LOGIC;
LOAD:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTREG32B
PORT(LK:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(31DOWNTO0);
Q:
OUTSTD_LOGIC_VECTOR(31DOWNTO0));
ENDCOMPONENT;
COMPONENTCNT10
PORT(RST,EN,CLK:
INSTD_LOGIC;
COUT:
OUTSTD_LOGIC;
DOUT:
OUTSTD_LOGIC_VECTOR(3DOWNTO0));
ENDCOMPONENT;
COMPONENTDECL7S
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDCOMPONENT;
COMPONENTany_16
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
ENDCOMPONENT;
COMPONENTany_5
port(clk5:
instd_logic;
kf:
outstd_logic);
ENDCOMPONENT;
COMPONENTany_10
port(clk10:
instd_logic;
k:
outstd_logic);
ENDCOMPONENT;
COMPONENTMUX
port(AIN,BIN,CIN,DIN,S0,S1:
instd_logic;Y:
outstd_logic);
ENDCOMPONENT;
SIGNALNR,NE,NL,M1,M2,M3,M4,M5,M6,M7,M8:
STD_LOGIC;
SIGNALN1,N2,N3,N4,N5,N6,N7,N8:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALL1,L2,L3,L4,L5,L6,L7,L8:
STD_LOGIC_VECTOR(3DOWNTO0);
SIGNALC1,C2,C3,C4,C5,C6,C7,C8:
STD_LOGIC;
SIGNALY1,Y2,Y3,YY:
STD_LOGIC;
BEGIN
U1:
FTCTRLPORTMAP(CLKK=>C8,CNT_EN=>NE,RST_CNT=>NR,LOAD=>NL);
U2:
REG32BPORTMAP(LK=>NL,
DIN(3DOWNTO0)=>N1,DIN(7DOWNTO4)=>N2,
DIN(11DOWNTO8)=>N3,DIN(15DOWNTO12)=>N4,
DIN(19DOWNTO16)=>N5,DIN(23DOWNTO20)=>N6,
DIN(27DOWNTO24)=>N7,DIN(31DOWNTO28)=>N8,
Q(3DOWNTO0)=>L1,Q(7DOWNTO4)=>L2,
Q(11DOWNTO8)=>L3,Q(15DOWNTO12)=>L4,
Q(19DOWNTO16)=>L5,Q(23DOWNTO20)=>L6,
Q(27DOWNTO24)=>L7,Q(31DOWNTO28)=>L8);
U3:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>YY,DOUT=>N1,COUT=>M1);-
U4:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M1,DOUT=>N2,COUT=>M2);
U5:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M2,DOUT=>N3,COUT=>M3);
U6:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M3,DOUT=>N4,COUT=>M4);
U7:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M4,DOUT=>N5,COUT=>M5);
U8:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M5,DOUT=>N6,COUT=>M6);
U9:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M6,DOUT=>N7,COUT=>M7);
U10:
CNT10PORTMAP(RST=>NR,EN=>NE,CLK=>M7,DOUT=>N8);
U11:
DECL7SPORTMAP(A=>L1,LED7S=>QOUT(6DOWNTO0));
U12:
DECL7SPORTMAP(A=>L2,LED7S=>QOUT(13DOWNTO7));
U13:
DECL7SPORTMAP(A=>L3,LED7S=>QOUT(20DOWNTO14));
U14:
DECL7SPORTMAP(A=>L4,LED7S=>QOUT(27DOWNTO21));
U15:
DECL7SPORTMAP(A=>L5,LED7S=>QOUT(34DOWNTO28));
U16:
DECL7SPORTMAP(A=>L6,LED7S=>QOUT(41DOWNTO35));
U17:
DECL7SPORTMAP(A=>L7,LED7S=>QOUT(48DOWNTO42));
U18:
DECL7SPORTMAP(A=>L8,LED7S=>QOUT(55DOWNTO49));
U19:
any_10PORTMAP(CLK,C1);
U20:
any_10PORTMAP(C1,C2);
U21:
any_10PORTMAP(C2,C3);
U22:
any_10PORTMAP(C3,C4);
U23:
any_10PORTMAP(C4,C5);
U24:
any_10PORTMAP(C5,C6);
U25:
any_10PORTMAP(C6,C7);
U26:
any_5PORTMAP(C7,C8);
U27:
MUXPORTMAP(Y1,Y2,Y3,FFIN,S0,S1,YY);
U28:
any_5PORTMAP(FFI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 频率计 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)