实验四四位十进制频率计.docx
- 文档编号:30049444
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:11
- 大小:285.77KB
实验四四位十进制频率计.docx
《实验四四位十进制频率计.docx》由会员分享,可在线阅读,更多相关《实验四四位十进制频率计.docx(11页珍藏版)》请在冰豆网上搜索。
实验四四位十进制频率计
姓名:
守军
4位十进制频率计的设计
一、主要指标和要求
1.设计4位十进制频率计,学习较复杂的数字系统设计方法;
2.深入学习数字系统设计的方法与步骤;
3.用元件例化语句写出频率计的顶层文件;
4.用VHDL硬件描述语言进行模块电路的设计;
5.设计硬件要求:
PC机,操作系统为Windows2000/XP,本课程所用系统均为max+plusII5.1设计平台,GW48系列SOPC/EDA实验开发系统。
二、工作原理以及方案选择
原理工作说明:
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即图(a)中的TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
其工作时序波形如图(a)。
图(a)频率计测频控制器TESTCTL测控时序图
图(b)4位十进制频率计顶层文件原理图
选择的设计方案:
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)。
三、各模块及顶层文件的设计
(1)、十进制计数
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycnt10is
port(rst,clk,ena:
instd_logic;
cout:
outstd_logic;
outy:
outstd_logic_vector(3downto0));
endcnt10;
architecturebehvofcnt10is
begin
process(rst,ena,clk)
variablecqi:
std_logic_vector(3downto0);
begin
ifrst='1'thencqi:
=(others=>'0');
elsifclk'eventandclk='1'then
ifena='1'then
ifcqi<9thencqi:
=cqi+1;cout<='0';
elsifcqi=9then
cqi:
=(others=>'0');
cout<='1';
endif;
elsifena='0'thencqi:
=(others=>'0');
endif;
endif;
outy<=cqi;
endprocess;
endbehv;
(2)、4位10进计数器
libraryieee;
useieee.std_logic_1164.all;
entitycnt10_4is
port(clk,rst,ena:
instd_logic;
d:
outstd_logic_vector(15downto0));
endentity;
architectureoneofcnt10_4is
componentcnt10
port(rst,clk,ena:
instd_logic;
cout:
outstd_logic;
outy:
outstd_logic_vector(3downto0));
endcomponent;
signale:
std_logic_vector(3downto0);
begin
u1:
cnt10portmap(clk=>clk,rst=>rst,ena=>ena,cout=>e(0),outy=>d(3downto0));
u2:
cnt10portmap(clk=>e(0),rst=>rst,ena=>ena,cout=>e
(1),outy=>d(7downto4));
u3:
cnt10portmap(clk=>e
(1),rst=>rst,ena=>ena,cout=>e
(2),outy=>d(11downto8));
u4:
cnt10portmap(clk=>e
(2),rst=>rst,ena=>ena,cout=>e(3),outy=>d(15downto12));
endarchitectureone;
(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;(3)
(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)、七段数码显示
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityled_controlleris
port(d:
instd_logic_vector(3downto0);
a:
outstd_logic_vector(6downto0));
endled_controller;
architectureoneofled_controlleris
begin
process(d)
begin
casedis
when"0000"=>a<="0111111";when"0001"=>a<="0000110";
when"0010"=>a<="1011011";when"0011"=>a<="1001111";
when"0100"=>a<="1100110";when"0101"=>a<="1101101";
when"0110"=>a<="1111101";when"0111"=>a<="0000111";
when"1000"=>a<="1111111";when"1001"=>a<="1101111";
when"1010"=>a<="1110111";when"1011"=>a<="1111100";
when"1100"=>a<="0111001";when"1101"=>a<="1011110";
when"1110"=>a<="1111001";when"1111"=>a<="1110001";
whenothers=>null;
endcase;
endprocess;
end;
总体例化
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith;
useieee.std_logic_signed;
entitycntfis
port(clk1:
instd_logic;
clk2:
instd_logic;
ledout:
outstd_logic_vector(27downto0));
endentity;
architectureoneofcntfis
componenttestctl
port(clkk:
instd_logic;
rst_cnt,cnt_en,load:
outstd_logic);
endcomponent;
componentcnt10_4
port(fx,rst,ena:
instd_logic;
d:
outstd_logic_vector(15downto0));
endcomponent;
componentreg4b
port(load:
instd_logic;
din:
instd_logic_vector(3downto0);
dout:
outstd_logic_vector(3downto0));
endcomponent;
componentled_controller
port(d:
instd_logic_vector(3downto0);
a:
outstd_logic_vector(6downto0));
endcomponent;
signalx,y,z:
std_logic;
signalb,h:
std_logic_vector(15downto0);
signalleds:
std_logic_vector(27downto0);
begin
u1:
testctlportmap(clkk=>clk1,cnt_en=>x,rst_cnt=>y,load=>z);
u2:
cnt10_4portmap(fx=>clk2,rst=>y,ena=>x,d=>b);
u3:
reg4bportmap(load=>z,din=>b(3downto0),dout=>h(3downto0));
u4:
reg4bportmap(load=>z,din=>b(7downto4),dout=>h(7downto4));
u5:
reg4bportmap(load=>z,din=>b(11downto8),dout=>h(11downto8));
u6:
reg4bportmap(load=>z,din=>b(15downto12),dout=>h(15downto12));
u7:
led_controllerportmap(d=>h(3downto0),a=>leds(6downto0));
u8:
led_controllerportmap(d=>h(7downto4),a=>leds(13downto7));
u9:
led_controllerportmap(d=>h(11downto8),a=>leds(20downto14));
u10:
led_controllerportmap(d=>h(15downto12),a=>leds(27downto21));
ledout<=leds;
end;
各个模块的仿真图:
十进制计数的仿真
四位十进制计数仿真
四位锁存器仿真
七段译码仿真
测频控制信号仿真
总体例化的仿真
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 四四位 十进制 频率计