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 汽车右转...