基于VHDL语言的频率计设计.docx

上传人:b****7 文档编号:25820509 上传时间:2023-06-15 格式:DOCX 页数:21 大小:202.13KB
下载 相关 举报
基于VHDL语言的频率计设计.docx_第1页
第1页 / 共21页
基于VHDL语言的频率计设计.docx_第2页
第2页 / 共21页
基于VHDL语言的频率计设计.docx_第3页
第3页 / 共21页
基于VHDL语言的频率计设计.docx_第4页
第4页 / 共21页
基于VHDL语言的频率计设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于VHDL语言的频率计设计.docx

《基于VHDL语言的频率计设计.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的频率计设计.docx(21页珍藏版)》请在冰豆网上搜索。

基于VHDL语言的频率计设计.docx

基于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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1