EDA大作业

发布 2020-02-25 08:51:28 阅读 3117

eda技术课程大作业。

设计题目: 八位十进制数字频率计

学生姓名朱毅。

学号: 200902050011

专业班级: 09级通信工程。

2012 年5月7日。

八位十进制数字频率计设计。

1. 设计背景和设计方案。

1.1设计背景。

在电子技术中,频率是最基本的参数之一,并且与许多点参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得尤为重要。测量频率的方法有很多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

1.2设计方案。

数字式频率计的测量原理有两类:一是直接测频法,即在一定的闸门时间内测量被测信号的脉冲个数;二是间接测频法即周期法,如周期测频法。直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数阀门的时间长短以达到不同的测量精度;间接测频法适用于低频信号的频率测量。

本次课程设计中使用的是直接测频法,即用计数器在计算机1s内输入信号周期的个数,其测频范围为1hz-99999999hz。

本频率器结构框图如下:

图1 基本结构框图。

本乘法器原理图如图2所示:本文要设计一个 8 位十进制数字频率计 ,需要由四种器件来组成 ,即 : 测频控制信号发生器( zpkzh) 、有时钟使能的十进制计数器 (j sh 位锁存器 ( scq32b 段显示译码器 (l ed7) 。

因为是 8 位十进制数字频率计 ,所以计数器 j sh10 需用 8 个 ,7 段显示译码器 l ed7 也需用 8 个。信号的脉冲个数 。为此 , 测频控制信号发生器 zpkzh 应设置一个控制信号时钟 cl k ,一个计数使能信号输出端 j sen 、一个与 j sen 输出信号反向的锁存输出信号 scxh、和清零输出信号 clr-j sh。

如 cl k 的输入频率为 1 hz ,则输出信号端 j sen 输出一个脉宽恰好为 1 秒的周期信号 , 可以作为闸门信号用 。由它对频率计的每一个计数器的使能端进行同步控制 。当 j sen 高电平时允许计数 ,低电平时停止计数 ,并保持所计的数 。

在停止计数期间 ,锁存信号 scxh 的上跳沿将计数器在前 1 秒钟的计数值锁存进 32 位锁存器 scq32b ,由 7 段译码器译出并稳定显示 。设置锁存器的好处是 ,显示的数据稳定 ,不会由于周期性的清零信号而不断闪烁 。锁存信号之后 ,清零信号 clr - j sh 对计数器进行清零 。

为下 1 秒钟的计数操作作准备 。

图2八位十进制数频率计原理图。

2. 方案实施。

2.1 测频控制信号发生器的功能模块设计

源程序如下:

library ieee;

use use

entity testctl is

port(clk : in std_logic;

tsten : out std_logic;

clr_cnt : out std_logic;

load : out std_logic);

end testctl;

architecture beh** of testctl is

signal div2clk : std_logic;

beginprocess(clk)

beginif(clk'event and clk='1') then

div2clk<=not div2clk;

end if;

end process;

process(clk,div2clk)

beginif(clk='0' and div2clk='0') then

clr_cnt<='1';

elseclr_cnt<='0';

end if;

end process;

load<=not div2clk;

tsten<=div2clk;

end beh**;

作用:由系统时钟分频模块为testctl的计数使能信号tsten产生一个1s脉宽的周期信号,并对频率计中的32位十进制计数器cnt10的ena使能端进行同步控制。当tsten高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要一个锁存信号load的上跳沿将计数器在前一秒的计数值锁存进锁存器reg32b中,并由外部的十进制7段数码管显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清零信号而不断闪烁。锁存信号后,必须有一个清零信号clr_cnt对计数器进行清零,为下一秒的计数操作做准备。

该模块的信号**图如下:

2.2 32位锁存器的功能模块图设计。

源程序如下:

library ieee;

use entity reg32b is

port(load: in std_logic;

din: in std_logic_vector(31 downto 0);

dout: out std_logic_vector(31 downto 0 ))

end entity reg32b;

architecture beh** of reg32b is

begin

process(load,din) is

begin

if load'event and load='1' then dout<=din;

end if;

end process;

end architecture beh**;

实现方式:load信号上升沿到来时将对输入到内部的cnt10计数信号进行锁存。

作用:锁存信号,并将结果输出给seltime。

该模块的信号**图如下:

2.3系统时钟分频的功能模块设计。

源程序如下:

library ieee;

use use

entity arictl is

port(clk,start:in std_logic;

clkout,rstall,ariend:out std_logic);

end arictl;

architecture art of arictl is

signal cnt4b:std_logic_vector(3 downto 0);

beginrstall<=start;

process(clk,start)

beginif start='1'

then cnt4b<="0000";

if cnt4b<8 then cnt4b<=cnt4b+1;

end if;

end if;

end process;

process(clk,cnt4b,start)

beginif start='0' then

if cnt4b<8 then

clkout<=clk;

ariend<='0';

else clkout<='0';

ariend<='1';

end if;

else clkout<=clk;

ariend<='0';

end if;

end process;

end art;

作用:。该模块的信号**图如下:

2.4 数码管扫描的功能模块设计。

源程序如下:

library ieee;

use use

entity seltime is

port(clk : in std_logic;

din : in std_logic_vector(31 downto 0);

daout: out std_logic_vector(3 downto 0);

sel : out std_logic_vector(2 downto 0));

end seltime;

architecture beh** of seltime is

signal sec : std_logic_vector(2 downto 0);

beginprocess(clk)

beginif(clk'event and clk='1') then

if(sec="111") then

sec<="000";

elsesec<=sec+1;

end if;

end if;

end process;

process(sec,din(31 downto 0))

begincase sec is

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

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

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

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

when "100"=>daout<=din(19 downto 16);

when "101"=>daout<=din(23 downto 20);

when "110"=>daout<=din(27 downto 24);

when "111"=>daout<=din(31 downto 28);

when others=>null;

end case;

end process;

sel<=sec;

end beh**;

作用:锁存信号输出din[31..0],然后由seltime进行扫描输出,当sel为”000”时选通第一个cnt10,输出到led7进行译码输出。依次类推。

该模块的信号**图如下:

2.5数码管译码显示的功能模块设计。

源程序如下。

library ieee;

use use

entity led7 is

port(din:in std_logic_vector(3 downto 0);

dout:out std_logic_vector(6 downto 0));

end led7;

architecture beh** of led7 is

-signal led7:std_logic_vector(6 downto 0);

beginprocess(din)

begincase din is

when "0000"=>dout<="0111111";

when "0001"=>dout<="0000110";

EDA大作业

eda技术课程大作业。设计题目 4线 16线译码器设计。学生姓名。学号。专业班级 09电子信息1班 2012年5月26日。4线 8线译码器设计。1.设计背景与设计方案。1.1设计背景。译码器是组合逻辑电路的一个重要器件,它是一种将一种编码转换为另一种编码的逻辑电路,在编码时,每一种二进制 都赋予了特...

EDA大作业

eda技术课程大作业。设计题目 双二选一多路选择器。学生姓名 王行智。学号 201002050002 专业班级 电气自动化技术一班。2012 年 5 月 26日。1.设计背景 在很多时候,要完成一项工作,需要进行两次判断和选择,对于机器和人都是如此,这就需要两个选择器,双2选1多路选择器就应运而生了...

EDA大作业

一 设计方案。1 设计一个汽车尾灯控制器,利用eda软件 max plusii 进行编译及 设计输入可采用vhdl硬件描述语言输入法和原理图输入法,通过 查看设计的可行性,因条件有限,只能进行简单的 实验。2 设计要求。1 汽车尾部左右两侧各有多盏指示灯。2 汽车正常行驶时指示灯都不亮。3 汽车右转...