四位十进制频率计.docx
《四位十进制频率计.docx》由会员分享,可在线阅读,更多相关《四位十进制频率计.docx(13页珍藏版)》请在冰豆网上搜索。
四位十进制频率计
一、设计任务与要求
1.设计4位十六进制频率计,学习较复杂的数字系统设计方法;
2.深入学习数字系统设计的方法与步骤;
3.用元件例化语句写出频率计的顶层文件;
4.用VHDL硬件描述语言进行模块电路的设计;
5.设计硬件要求:
PC机,操作系统为Windows2000/XP,本课程所用系统均为max+plusII5.1设计平台,GW48系列SOPC/EDA实验开发系统。
二、总体框图
2.1工作原理以及方案
原理工作说明:
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即图(a)中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT4B的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
其工作时序波形如图(a)。
图(a)频率计测频控制器TESTCTL测控时序图
2.2选择的设计方案:
1.根据频率计的工作原理,将电路划分成控制器、计数器、锁存器和LED显示几个模块,
控制器——产生1秒脉宽的计数允许信号、锁存信号和计数器清零信号
计数器——对输入信号的脉冲数进行累计
锁存器——锁存测得的频率值
LED显示——将频率值显示在数码管上
2.根据图(a)、(b)及
(1)
(2)描述的4位十进制频率计的工作原理,利用max+plusII5.1对以上三者的程序进行文本编辑输入和仿真测试并根据图(b),写出频率计的顶层文件,并给出其测频时序波形,及其分析。
3.频率计设计硬件验证。
编译、综合和适配频率计顶层设计文件,并编程下载进入目标器件中。
本实验目标器件是EP1K30TC144-3,实验电路选择模式0,4个数码管(数码4-1:
PIO31-PIO16)显示测频输出;待测频率输入FIN由clock0输入,频率
可选4Hz、256HZ...或更高;1HZ测频控制信号F1HZ可由clock2输入(用电路帽选选1Hz)。
2.3、总体框图
三、选择器件
1.装有QuartusII软件的微型计算机。
计算机的硬件尽可能高,至少可以实现QuartusII软件的使用。
2.硬件实现的芯片为PFGA/CPLD,芯片管脚的数量要保证足够设计的程序所要使用的数量,并且使其所有管脚都有可分配的管脚,可以实现QuartusII上综合、适配的程序下载后可以顺利实现。
四、功能模块
(1)、十六进制计数
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCNT4BIS
PORT(CLK:
INSTD_LOGIC;
RST:
INSTD_LOGIC;
ENA:
INSTD_LOGIC;
OUTY:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
COUT:
OUTSTD_LOGIC);
ENDCNT4B;
ARCHITECTUREbehavOFCNT4BIS
SIGNALCQI:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
P_REG:
PROCESS(CLK,RST,ENA)
BEGIN
IFRST='1'THENCQI<="0000";
ELSIFCLK'EVENTANDCLK='1'THEN
IFENA='1'THENCQI<=CQI+1;
ENDIF;
ENDIF;
OUTY<=CQI;
ENDPROCESSP_REG;--进位输出
COUT<=CQI(0)ANDCQI
(1)ANDCQI
(2)ANDCQI(3);
ENDbehav;
仿真图
(2)扫描仪模块
--seltime
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityseltimeis
port(
clk1,reset:
instd_logic;
D1,D2,D3,D4:
instd_logic_vector(3downto0);
daout:
outstd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
endseltime;
architecturefunofseltimeis
signalcount:
std_logic_vector(2downto0);
begin
sel<=count;
process(clk1,reset)
begin
if(reset='0')then
count<="000";
elsif(clk1'eventandclk1='1')then
if(count>="011")then
count<="000";
else
count<=count+1;
endif;
endif;
casecountis
when"000"=>daout<=D1;
when"001"=>daout<=D2;
when"010"=>daout<=D3;
when"011"=>daout<=D4;
whenothers=>NULL;
endcase;
endprocess;
endfun;
仿真图
(3)、四位锁存
libraryieee;
useieee.std_logic_1164.all;
entityreg4bis
port(load:
instd_logic;
din:
instd_logic_vector(3downto0);
dout:
outstd_logic_vector(3downto0));
endreg4b;
architecturebehavofreg4bis
begin
process(load,din)
begin
ifload'eventandload='1'thendout<=din;
endif;
endprocess;
endbehav;
仿真图
(4)、测频控制器
libraryieee;-
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytestctlis
port(clkk:
instd_logic;
cnt_en,rst_cnt,load:
outstd_logic);
endtestctl;
architecturebehavoftestctlis
signaldiv2clk:
std_logic;
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;
仿真图
(5)、七段数码显示
--deled模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydeledis
port(num:
instd_logic_vector(3downto0);
led:
outstd_logic_vector(6downto0));
enddeled;
architecturefunofdeledis
begin
led<="1111110"whennum="0000"else
"0110000"whennum="0001"else
"1101101"whennum="0010"else
"1111001"whennum="0011"else
"0110011"whennum="0100"else
"1011011"whennum="0101"else
"1011111"whennum="0110"else
"1110000"whennum="0111"else
"1111111"whennum="1000"else
"1111011"whennum="1001"else
"1110111"whennum="1010"else
"0011111"whennum="1011"else
"1001110"whennum="1100"else
"0111101"whennum="1101"else
"1001111"whennum="1110"else
"1000111"whennum="1111";
endfun;
仿真图
(6)、3_8译码器模块
--decode3-8
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydecode3_8is
port(sel:
instd_logic_vector(2downto0);
q:
outstd_logic_vector(7downto0)
);
enddecode3_8;
architectureaofdecode3_8is
begin
q<="11111110"whensel=0else
"11111101"whensel=1else
"11111011"whensel=2else
"11110111"whensel=3else
--"11101111"whensel=4else
--"11011111"whensel=5else
"11111111";
enda;
仿真图
(7)、分频器模块
--div_clk1
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiv_clk1is
port(clk_in:
instd_logic;
div_out:
outstd_logic;
div_clk2:
outstd_logic
);
enddiv_clk1;
architectureaofdiv_clk1is
signalfre_n:
integerrange0to100000;
signalclk_tmp:
std_logic;
signalfre_n1:
integerrange0to125;
signalclk_tmp1:
std_logic;
begin
div_out<=clk_tmp;
process(clk_in)
begin
iffalling_edge(clk_in)then
iffre_n>=99999then
fre_n<=0;
clk_tmp<=notclk_tmp;
else
fre_n<=fre_n+1;
endif;
endif;
endprocess;
div_clk2<=clk_tmp1;
process(clk_tmp)
begin
iffalling_edge(clk_tmp)then
iffre_n1>=124then
fre_n1<=0;
clk_tmp1<=notclk_tmp1;
else
fre_n1<=fre_n1+1;
endif;
endif;
endprocess;
enda;
仿真图
五、总体设计电路图
5.1顶层电路原理图
5.2总体模块仿真图
5.3管脚分配图
六、参考文献
1.曹昕燕,周凤臣,聂春燕。
EDA技术实验和课程设计。
北京:
清华大学出版社,2006。
2.潘松,黄继业。
EDA技术实用教程(第三版)。
北京:
科学出版社,2006。
3.谭会生。
EDA技术综合应用实例和分析。
西安:
西安电子科技大学出版社,2004。