八位十进制频率计.docx
- 文档编号:3756881
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:12
- 大小:169.26KB
八位十进制频率计.docx
《八位十进制频率计.docx》由会员分享,可在线阅读,更多相关《八位十进制频率计.docx(12页珍藏版)》请在冰豆网上搜索。
八位十进制频率计
EDA技术
课程设计报告
课题8位十进制频率计
学院物理与电子信息学院
专业电子与信息工程
姓名xxx
学号xxxxxxxxx
指导教师吴朝晖
日期2013.6.17
目录
一、实验目的·································3
二、实验内容···································3
三、实验原理·································3
四、实验设计·································5
1、信号发生器………………………………………6
2、锁存器部分………………………………………7
3、数码管部分………………………………………8
4、译码器部分………………………………………9
5、计数器部分………………………………………10
五、实验现象·································12
六、实验心得·································13
一、实验目的
1、巩固和加深对EDA技术基本知识和概念的理解,提高自己对专业知识的利用能力
2、频率测量的基本目的是计算每秒钟内待测信号的脉冲个数。
二、实验内容
设计并调试好一个8位十进制频率计并使用MAX+plusII10.2软件进行系统仿真、硬件是使用ZY11EDA13BE型实验箱。
并由外接试验箱实时显示。
根据8位十进制频率计的设计原则以及电路的基本原理,本实验所设计的频率计由三个模块组成:
测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10和一个32位锁存器REG32B。
三、实验原理
总框图如下:
测频控制信号发生器的设计要求:
频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。
这就要求测频控制信号发生器TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的使能端ENA进行同步控制。
当TSTEN为高电平时,允许计数;为低电平时停止计数,并保持其计数结果。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出,并稳定显示。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一个清零信号CLR_CNT对计数器进行清零,为下1秒钟的计数操作做准备。
测频控制信号发生器的工作时序如下图27-1所示。
为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上升沿到来时其值翻转。
图27-1测频控制信号发生器的工作时序
图中控制信号时钟CLK的频率取1HZ,那么信号TSTEN的脉宽恰好为1S,可以用作计数闸门信号。
然后根据测频的时序要求,可得出信号LOAD和CLR_CNT的逻辑描述。
由图27-1可见,在计数完成后,即计数使能信号TSTEN在1S的高电平后,利用其反相值的上跳沿产生一个锁存信号LOAD,0.5S后CLR_CNT产生一个清零信号上跳沿。
高质量的测频控制信号发生器的设计十分重要,设计中要对其进行仔细的实时仿真,防止可能产生的毛刺。
寄存器REG32B设计要求是:
若已有32位BCD码存在于此模块的输入口,在信号LOAD的上升沿后即被锁存到寄存器REG32B的内部,并由REG32B的输出端输出,然后由7段译码器译成能在数码管上显示输出的相应数值。
计数器CNT10设计要求:
有一时钟使能输入端,用于锁定计数值。
当高电平时计数允许,低电平时禁止计数。
四、实验设计
模拟电路图如下:
各模块仿真如下
1、测频信号发生器TESTCTL
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitytestctlis
port(
clk:
instd_logic;
tsten:
outstd_logic;
clr_cnt:
outstd_logic;
load:
outstd_logic);
endtestctl;
architecturebehavoftestctlis
signaldiv2clk:
std_logic;
begin
process(clk)
begin
if(clk'eventandclk='1')then
div2clk<=notdiv2clk;
endif;
endprocess;
process(clk,div2clk)
begin
if(clk='0'anddiv2clk='0')then
clr_cnt<='1';else
clr_cnt<='0';
endif;
endprocess;
load<=notdiv2clk;
tsten<=div2clk;
endbehav;
2、锁存器REG32B部分
libraryieee;
useieee.std_logic_1164.all;
entityreg32bis
port(load:
instd_logic;
rst:
instd_logic;
din:
instd_logic_vector(31downto0);
dout:
outstd_logic_vector(31downto0));
endreg32b;
architecturebehavofreg32bis
signaldata:
std_logic_vector(31downto0);
begin
process(rst,load)
begin
ifrst='1'then
data<=(others=>'0');
elsif(load'eventandload='1')then
data<=din;
endif;
dout<=data;
endprocess;
endbehav;
3、数码管扫描显示电路Seltime
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityseltimeis
port(
clk:
instd_logic;
din:
instd_logic_vector(31downto0);
daout:
outstd_logic_vector(3downto0);
sel:
outstd_logic_vector(2downto0));
endseltime;
architecturebehavofseltimeis
signalsec:
std_logic_vector(2downto0);
begin
process(clk)
begin
if(clk'eventandclk='1')then
if(sec="111")then
sec<="000";
else
sec<=sec+1;
endif;
endif;
endprocess;
process(sec,din(31downto0))
begin
casesecis
when"000"=>daout<=din(3downto0);
when"001"=>daout<=din(7downto4);
when"010"=>daout<=din(11downto8);
when"011"=>daout<=din(15downto12);
when"100"=>daout<=din(19downto16);
when"101"=>daout<=din(23downto20);
when"110"=>daout<=din(27downto24);
when"111"=>daout<=din(31downto28);
whenothers=>null;
endcase;
endprocess;
sel<=sec;
endbehav;
锁存信号输出给DIN[31…0],然后由seltime进行扫描输出,当sel为“000”时,选通第一个从cnt10,输出到deled进行译码。
4、七段数码显示译码器
libraryieee;
useieee.std_logic_1164.all;
entitydeledis
port(
s:
instd_logic_vector(3downto0);
a,b,c,d,e,f,g,h:
outstd_logic);
enddeled;
architecturebehavofdeledis
signaldata:
std_logic_vector(3downto0);
signaldout:
std_logic_vector(7downto0);
begin
data<=s;
process(data)
begin
casedatais
when"0000"=>dout<="00111111";
when"0001"=>dout<="00000110";
when"0010"=>dout<="01011011";
when"0011"=>dout<="01001111";
when"0100"=>dout<="01100110";
when"0101"=>dout<="01101101";
when"0110"=>dout<="01111101";
when"0111"=>dout<="00000111";
when"1000"=>dout<="01111111";
when"1001"=>dout<="01101111";
when"1010"=>dout<="01110111";
when"1011"=>dout<="01111100";
when"1100"=>dout<="00111001";
when"1101"=>dout<="01011110";
when"1110"=>dout<="01111001";
when"1111"=>dout<="01110001";
whenothers=>dout<="00000000";
endcase;
endprocess;
h<=dout(7);
g<=dout(6);
f<=dout(5);
e<=dout(4);
d<=dout(3);
c<=dout
(2);
b<=dout
(1);
a<=dout(0);
endbehav;
5、计数器部分
libraryieee;
useieee.std_logic_1164.all;
entitycnt10is
port(clk:
instd_logic;
clr:
instd_logic;
ena:
instd_logic;
cq:
outintegerrange0to9;
carry_out:
outstd_logic);
endcnt10;
architecturebehavofcnt10is
signalcqi:
integerrange0to9;
begin
process(clr,clk,ena)
begin
if(clr='1')then
cqi<=0;
elsif(clk'eventandclk='1')then
if(ena='1')then
if(cqi=9)then
cqi<=0;
carry_out<='1';
else
cqi<=cqi+1;
carry_out<='0';
endif;
endif;
endif;
endprocess;
cq<=cqi;
endbehav;
实现十进制计数功能,当第一个CNT10计数输出CQ时,下一秒时钟上升沿到来时,将产生一个CARRY-OUT信号作为下一个CNT10的时钟信号,同时CQ信号清零。
五、实验现象
从时钟源TJ4~TJ6输入一方波信号,数码管则将显示该信号的频率值。
如下所示:
六、实验心得
通过该设计课程,提高自己对硬件设计、软件设计以及系统调试的基本思路与方法,并熟练的掌握MAX+plusII等软件的使用。
同时学会了电路的仿真、检查和纠正。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八位 十进制 频率计