电子课程设四位十进制计数器.docx

上传人:b****5 文档编号:11774570 上传时间:2023-04-01 格式:DOCX 页数:18 大小:361.07KB
下载 相关 举报
电子课程设四位十进制计数器.docx_第1页
第1页 / 共18页
电子课程设四位十进制计数器.docx_第2页
第2页 / 共18页
电子课程设四位十进制计数器.docx_第3页
第3页 / 共18页
电子课程设四位十进制计数器.docx_第4页
第4页 / 共18页
电子课程设四位十进制计数器.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

电子课程设四位十进制计数器.docx

《电子课程设四位十进制计数器.docx》由会员分享,可在线阅读,更多相关《电子课程设四位十进制计数器.docx(18页珍藏版)》请在冰豆网上搜索。

电子课程设四位十进制计数器.docx

电子课程设四位十进制计数器

目录

一、设计任务与要求································2

二、总体框图·······································2

三、选择器件·······································3

四、功能模块·······································3

五、总体设计电路··································12

 

四位十进制频率计

一、设计任务与要求

1、用大规模可编程器件设计一个数字频率计,主要技术指标如下:

1)频率测量范围:

1Hz~10kHz。

2)数字显示位数:

4位数字显示。

3)测量时间:

t<=1.5s。

2、利用设计软件对EP1C12Q240C8器件进行设计输入设计仿真及器件编程,使其具备要求的逻辑功能。

3、计算参数,安装、调试电路。

4、画出完整电路图,写出设计总结报告。

5、选作内容:

用数字频率计测量信号周期。

二、总体框图

计数器

锁存器

译码驱动电路

数码管显示

待测信号

测频信号控制发生器

模块功能

1)计数器:

实现十进制计数功能。

2)锁存器:

锁存信号。

3)频率信号控制发生器:

输入端clk收到1Hz信号后,其输出端testen控制各个计数器的使能,clr_cnt控制各个计数器的清零,load控制锁存器内数据的输出。

4)译码驱动电路:

将锁存器输出的BCD码译码,译码后输送到译码显示器件。

5)数码管显示:

显示待测信号的频率值。

设计思路

频率测量的基本原理是计算每秒钟内待测信号的脉冲个数。

这就要求testpl的计数使能信号tsten能产生一个1秒脉宽的周期信号,并对频率计的每一计数器cnt10的使能端ena进行同步控制。

当tsten为高电平"1"时,允许计数;为低电平"0"时停止计数,并保持其计数结果。

在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前1秒种的计数值锁存进16位锁存器reg16b中。

锁存信号之后,必须有一个清零信号clr_cnt对计数器进行清零,为下1秒的计数操作做准备,然后由数码管显示出来。

三、选择器件

电路中的所有器件都是VHDL语言设计生成的,所以无通用常规器件。

四、功能模块

分频器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydivis

port(clk_in:

INstd_logic;

div_outb,div_outc:

outstd_logic);

enddiv;

ARCHITECTUREaofdivis

signalfre_nb:

integerrange0to25000000;

signalfre_nc:

integerrange0to100000;

signalclk_tmpb:

std_logic;

signalclk_tmpc:

std_logic;

begin

div_outb<=clk_tmpb;

div_outc<=clk_tmpc;

process(clk_in)

begin

iffalling_edge(clk_in)then

iffre_nb>24999999then

fre_nb<=0;

clk_tmpb<=notclk_tmpb;

else

fre_nb<=fre_nb+1;

endif;

iffre_nc>99999then

fre_nc<=0;

clk_tmpc<=notclk_tmpc;

else

fre_nc<=fre_nc+1;

endif;

endif;

endprocess;

enda;

逻辑功能:

将50MH分频为单位脉冲1Hz和扫描频率。

十进制计数器

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=9时,下一秒时钟上升沿到来时,将产生一个CARRY_OUT信号作为下一个CNT10的时钟信号,同时CQ清零。

依次递推到8个CNT10。

测频控制信号发生器

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;

逻辑功能:

对8个CNT10产生同步使能信号TSTEN;产生一个清零信号CLR_CNT,计数完成时对4个CNT10清零;产生一个锁存信号LOAD对锁存器RED16B,对CNT10产生的信号进行锁

16位锁存器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityreg16bis

port(load:

instd_logic;

din:

instd_logic_vector(15downto0);

dout:

outstd_logic_vector(15downto0));

endreg16b;

architectureartofreg16bis

begin

process(load,din)

begin

ifload'eventandload='1'then

dout<=din;

endif;

endprocess;

endarchitectureart;

逻辑功能:

锁存信号,并将结果输出给SELTIME。

数码管扫描SELTIME

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityseltimeis

port(

clk:

instd_logic;

din:

instd_logic_vector(15downto0);

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>="100")then

sec<="000";

else

sec<=sec+1;

endif;

endif;

endprocess;

process(sec,din(15downto0))

begin

casesecis

when"000"=>daout<=din(3downto0);

when"001"=>daout<=din(7downto4);

when"010"=>daout<=din(11downto8);

when"011"=>daout<=din(15downto12);

whenothers=>null;

endcase;

endprocess;

sel<=sec;

endbehav;

逻辑功能:

锁存信号输出给DIN[16..0],然后由SELTIME进行扫描输出,当SEL为”000”时选通第一个CNT10,输出到DELED进行译码输出。

依次类推。

译码器

IIBRARYieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

ENTITYSEG7IS

PORT(NUM:

INstd_logic_vector(3downto0);

A:

OUTstd_logic;

B:

OUTstd_logic;

C:

OUTstd_logic;

D:

OUTstd_logic;

E:

OUTstd_logic;

F:

OUTstd_logic;

G:

OUTstd_logic;

DP:

OUTstd_logic

);

ENDSEG7;

ARCHITECTUREfunOFSEG7IS

signalled:

std_logic_vector(6downto0);

BEGIN

A<=led(6);

B<=led(5);

C<=led(4);

D<=led(3);

E<=led

(2);

F<=led

(1);

G<=led(0);

DP<='0';

 

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;

逻辑功能:

将SELTIME输出的信号译码显示出来。

3-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

"11111111";

ENDa;

逻辑功能:

将编码后的信号“翻译”出来从而实现所需的输出信号。

五、总体设计电路

电路的整体工作情况及连接关系:

实验箱内部管脚pin_153接div的clk端,同时div的两个输出div_outb和div_outc分别接testctl的clk端和seltime的clk端,testctl的三个输出端tsten、ckr_cnt、load,其中tsten、ckr_cnt分别接到cnt10的ena和clr端,load接到reg16b的load端。

cnt10的clk端接待测信号,对应实验箱的管脚pin_28——IO3,将IO3用导线与IO_CLK连接,四个cnt10的输出端cq[3..0]与reg16b的din[15..0]连接。

最后由reg16b输出的信号经过译码显示电路显示出来。

整体仿真图

根据上图可以频率为10Hz,对应功能仿真波形同样是10Hz,所以仿真结果正确。

 

管脚分配图

实验箱上的IO_3用导线与IO_CLK连接,其中IO_3对应的是pin_28。

拨动实验箱上的SW17—SW20,IO_CLK输出不同的频率,同时在数码管上显示出对应的频率,设计理论与实际硬件实现相同。

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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