实验六数字频率计的设计文档格式.docx

上传人:b****2 文档编号:4495211 上传时间:2023-05-03 格式:DOCX 页数:16 大小:79.03KB
下载 相关 举报
实验六数字频率计的设计文档格式.docx_第1页
第1页 / 共16页
实验六数字频率计的设计文档格式.docx_第2页
第2页 / 共16页
实验六数字频率计的设计文档格式.docx_第3页
第3页 / 共16页
实验六数字频率计的设计文档格式.docx_第4页
第4页 / 共16页
实验六数字频率计的设计文档格式.docx_第5页
第5页 / 共16页
实验六数字频率计的设计文档格式.docx_第6页
第6页 / 共16页
实验六数字频率计的设计文档格式.docx_第7页
第7页 / 共16页
实验六数字频率计的设计文档格式.docx_第8页
第8页 / 共16页
实验六数字频率计的设计文档格式.docx_第9页
第9页 / 共16页
实验六数字频率计的设计文档格式.docx_第10页
第10页 / 共16页
实验六数字频率计的设计文档格式.docx_第11页
第11页 / 共16页
实验六数字频率计的设计文档格式.docx_第12页
第12页 / 共16页
实验六数字频率计的设计文档格式.docx_第13页
第13页 / 共16页
实验六数字频率计的设计文档格式.docx_第14页
第14页 / 共16页
实验六数字频率计的设计文档格式.docx_第15页
第15页 / 共16页
实验六数字频率计的设计文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

实验六数字频率计的设计文档格式.docx

《实验六数字频率计的设计文档格式.docx》由会员分享,可在线阅读,更多相关《实验六数字频率计的设计文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

实验六数字频率计的设计文档格式.docx

在设计频率计的时候,八个七段码管最多可以显示99,999,999Hz,因此在设计时候用八个4位二进制码(BCD码)来表示,另外还必须有同样的八个4位二进制码来对输入的频率进行计数,在闸门下降沿的时候,将后者的值锁存到寄存器中。

其信号的时序关系如下图17-2所示:

图17-3控制信号时序关系

三、实验内容

本实验要完成的任务就是设计一个频率计,系统时钟选择核心板上的50M的时钟,闸门时间为1s(通过对系统时钟进行分频得到),在闸门为高电平期间,对输入的频率进行计数,当闸门变低的时候,记录当前的频率值,并将频率计数器清零,频率的显示每过2秒刷新一次。

外部CLR清零信号可以使当前寄存值清零。

其实现框图如下图17-3所示:

在本实验中,用到的模块有数字信号源模块、按钮开关模块、50M系统时钟源模块、数码管显示模块等。

其中数码管、数字信号源、按钮开关与FPGA的连接电路和管脚连接这里不在赘述。

50M系统时钟源的模块位于EP2C35核心板的中上方通过一个贴片的50M有源晶体来产生50MHZ的时钟信号,其与FPGA的管脚连接如表17-1所示。

表17-150M系统时钟与FPGA的管脚连接表

信号名称

对应FPGA管脚名

说明

系统时钟源

A13(GCLK9)

50MHZ系统时钟

四、实验步骤

1、打开QUARTUSII软件,新建一个工程。

2、建完工程之后,再新建一个VHDLFile,打开VHDL编辑器对话框。

3、按照实验原理和自己的想法,在VHDL编辑窗口编写VHDL程序,本实验共分为5个模块,每一个模块源程序完成一定的功能。

其具体的功能如下表17-2:

表17-2示例程序功能表

文件名称

完成功能

P1

产生1HZ的闸门信号和1KHZ的显示扫描信号

P2

在时钟的作用下生成测频的控制信号

P3

十进制计数器,用32位来显示8个4位BCD数

P4

32位的锁存器,在锁存控制信号的作用下,将计数的值锁存

P5

显示译码,将锁存的数据显示出来

实验程序如下所示:

-------------------------------------

--Title:

源程序p1

--Author:

参考自网上

--Data:

2012-12-8

-----------------------------------------------------------------------------------------------------------

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYp1IS

PORT(clk50m:

INSTD_LOGIC;

--50M系统时钟输入

clk1kHZ:

OUTSTD_LOGIC;

--1KHZ显示扫描时钟输出

clk1HZ:

OUTSTD_LOGIC);

--1HZ闸门信号产生

ENDp1;

ARCHITECTUREbehaveOFp1IS

BEGIN

PROCESS(clk50m)--产生显示扫描时钟1KHZ

variablecnttemp:

INTEGERRANGE0TO99999;

IFclk50m='

1'

ANDclk50m'

eventTHEN

IFcnttemp=99999THENcnttemp:

=0;

ELSE

IFcnttemp<

50000THENclk1khz<

='

;

ELSEclk1khz<

0'

ENDIF;

cnttemp:

=cnttemp+1;

ENDPROCESS;

variablecnt:

INTEGERRANGE0TO49999999;

IFcnt=49999999THENcnt:

IFcnt<

25000000THENclk1hz<

ELSEclk1hz<

cnt:

=cnt+1;

ENDbehave;

-------------------------------------------------

p2源程序

-----------------------------------------------------------------------------------------------------------

LIBRARYIEEE;

ENTITYp2IS

PORT(CLK1hz:

--1Hz测频控制时钟

EN:

--计数器时钟使能

CLR1:

--计数器清零

LOAD:

--输出锁存信号

ENDp2;

ARCHITECTUREbehaveOFp2IS

SIGNALDIV2CLK:

STD_LOGIC;

SIGNALCLR:

BEGIN

PROCESS(CLK1hz)IS

BEGIN

IFCLK1hz'

EVENTANDCLK1hz='

--1HZ时钟二分频

THENDIV2CLK<

=NOTDIV2CLK;

ENDIF;

ENDPROCESS;

PROCESS(CLK1hz,DIV2CLK)

BEGIN

IFCLK1hz='

ANDDIV2CLK='

THEN--产生计数器清零信号

CLR<

='

ELSECLR<

;

LOAD<

=notdiv2clk;

EN<

=DIV2CLK;

CLR1<

=CLR;

------------------------------------

p3

wanjianwei

2012-12-8------------------------------------------------------------------------------------------------------------------

useieee.std_logic_unsigned.all;

ENTITYp3IS

PORT(

CLK:

INSTD_LOGIC;

--待测输入信号

--计数器清零

DIN:

OUTSTD_LOGIC_VECTOR(31DOWNTO0)--输出32位十进制BCD数

);

ENDP3;

ARCHITECTUREBEHAVEOFP3IS

PROCESS(CLK,EN)

VARIABLEDIN1:

STD_LOGIC_VECTOR(31DOWNTO0);

--32位计数中间变量

IF(CLR1='

)THEN--若内部清零信号为1,则中间变量清零。

DIN1:

=(OTHERS=>

'

);

elsIF(CLK'

EVENTANDCLK='

)THEN--实现32位十进制BCD计数

IF(EN='

)THEN

IF(DIN1(3DOWNTO0)="

1001"

DIN1(3DOWNTO0):

="

0000"

IF(DIN1(7DOWNTO4)="

DIN1(7DOWNTO4):

IF(DIN1(11DOWNTO8)="

DIN1(11DOWNTO8):

IF(DIN1(15DOWNTO12)="

DIN1(15DOWNTO12):

IF(DIN1(19DOWNTO16)="

DIN1(19DOWNTO16):

IF(DIN1(23DOWNTO20)="

DIN1(23DOWNTO20):

IF(DIN1(27DOWNTO24)="

DIN1(27DOWNTO24):

DIN1(31DOWNTO28):

=DIN1(31DOWNTO28)+1;

ELSIF(DIN1(31DOWNTO24)="

10011001"

DIN1(31DOWNTO24):

ELSE

=DIN1(27DOWNTO24)+1;

=DIN1(23DOWNTO20)+1;

=DIN1(19DOWNTO16)+1;

=DIN1(15DOWNTO12)+1;

=DIN1(11DOWNTO8)+1;

=DIN1(7DOWNTO4)+1;

=DIN1(3DOWNTO0)+1;

ENDIF;

DIN<

=DIN1;

--将中间变量值赋给输出结果变量DIN

ENDBEHAVE;

------------------------------------------

P4

------------------------------------------------------------------------------------------------------------

ENTITYp4IS

CLR:

--外部清零信号

DIN:

INSTD_LOGIC_VECTOR(31DOWNTO0);

--输入32位十进制BCD数

--输出锁存信号

DOUT:

OUTSTD_LOGIC_VECTOR(31DOWNTO0));

--输出32位十进制BCD结果

ENDENTITYp4;

ARCHITECTUREbehaveOFP4IS

PROCESS(LOAD,DIN)IS

IFLOAD'

EVENTANDLOAD='

THENDOUT<

=DIN;

IF(CLR='

)THEN

DOUT<

--------------------------------------------

P5

---------------------------------------------------------------------------------------------------------------------

ENTITYP5IS

PORT(CLK1KHZ:

--输入1KHZ扫描频率

INSTD_LOGIC_VECTOR(31DOWNTO0);

--输入待显示32位十进制BCD数

LOUT7:

OUTSTD_LOGIC_VECTOR(6DOWNTO0);

--七段显示译码管

SEL:

OUTSTD_LOGIC_VECTOR(2DOWNTO0)--数码管选通信号

ENDP5;

ARCHITECTUREBEHAVEOFP5IS

SIGNALS:

STD_LOGIC_VECTOR(2DOWNTO0);

SIGNALLOUT4:

STD_LOGIC_VECTOR(3DOWNTO0);

PROCESS(CLK1KHZ)

IF(CLK1KHZ'

EVENTANDCLK1KHZ='

)THEN--实现数码管动态选通

IF(S="

111"

)THEN

S<

000"

ELSES<

=S+1;

SEL<

=S;

PROCESS(S)

CASESIS

WHEN"

=>

LOUT4<

=DOUT(31DOWNTO28);

001"

=DOUT(27DOWNTO24);

010"

=DOUT(23DOWNTO20);

011"

=DOUT(19DOWNTO16);

100"

=DOUT(15DOWNTO12);

101"

=DOUT(11DOWNTO8);

110"

=DOUT(7DOWNTO4);

=DOUT(3DOWNTO0);

WHENOTHERS=>

XXXX"

ENDCASE;

CASELOUT4IS--七段译码显示

LOUT7<

0111111"

0001"

0000110"

0010"

1011011"

0011"

1001111"

0100"

1100110"

0101"

1101101"

0110"

1111101"

0111"

0000111"

1000"

1111111"

1101111"

0000000"

4、编写完VHDL程序后,保存在wanexp17文件夹下。

5、将自己编写的VHDL程序进行编译并生成模块符号文件,并对程序的错误进行修改,最终所有程序通过编译并生成模块符号文件,5个模块如下所示:

6、新建一个图形编辑文件,将已生成的模块符号文件放入其中,并根据要求如下所示接起来。

7、将自己编辑好的的程序进行编译仿真,最终通过编译,接好管脚。

9、用下载电缆通过JTAG口将对应的sof文件加载到FPGA中。

观察实验结果是否与自己的编程思想一致。

五、实验结果与现象

当设计文件加载到目标器件后,从输入数字时钟源模块的输入端输入一个频率大于1Hz的时钟信号,这时在数码管上显示这个时钟信号的频率值。

如果使按下按钮开关s1,数码管上显示的值便被清零,改变数字信号源的时钟,数码管上显示的值与标值相差不大如输入10Khz,显示的是10.012Khz。

六、仿真结果分析

1、当从50Mhz的系统时钟分出1Hz频率的信号clk1hz时,在clk1hz时钟的作用下生成测频的控制信号计数使能信号EN、内部清零信号CLR1及锁存信号LOAD波形如下所示:

真值表如下所示:

Clk1hz

1

en

load

Clr1

与设计之初所设想的控制信号时序关系一致

2、验证频率测评控制信号是否有效,波形如下所示:

图中黑带与蓝带部分均为信号频率太高而无法在有限界面上显示

由图中可知,当EN=1时,计数中间变量din开始计数,而当EN=0时,计数停止,当clr1=1时,计数中间值清零。

与实验预期一样。

七、实验心得体会。

本实验采用直接测频法进行频率测量。

这种直接测频法的测量准确度与被测信号的频率有关,当待测信号频率较高时,测量准确度也较高,反之测量准确度较低。

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2