时钟控制器的设计.doc
文本预览下载声明
时钟控制器的设计实验
江新远
一.实验内容及要求
实验目的
熟悉并掌握同步时序电路设计的时钟控制器的方法。
设计任务
设计一个能放过一串数目可预订的完整无缺的时钟控制器,放过的脉冲数目N=1~15可调,要求:
用常规器件实现,所给器件为“3”中所述。
用可编程器件FPGA实现,用原理图或VHDL语言实现电路功能。
参考器件
FPGA芯片,下载器 1只,七段字型译码器(74LS48)1只,led灯若干。
实验要求
设计电路,然后在仿真软件上进行虚拟实验,正确后,在实验板上搭建实验电路,现在数码管上观察显示数字是否正确,然后搭建动态观察时的电路,在示波器上观察并记录输入、输出波形,最后一步是撰写实验报告及整理文档,对实验进行总结。
二.设计过程:
实验原理图如图所示
图中,时钟φ为1kHz/1Hz脉冲源,k1~k4为0-1开关,为单次脉冲,低电平有效。兼有??零、预置及启动功能。时钟控制器输出Z平时处于低电平状态。为了检测该电路的功能,即放过的脉冲数是否为预定值,可采用两种方法:一种方法是将输出Z接至LED显示器,观察LED闪烁的次数;另一种方法是将Z接至十六进制计数器的时钟端,计数器的输出接译码、显示电路,以观察显示器的读数是否正确。如果控制器中的计数器选用加法计数,可将预置数的反码打入预置端,如果选用减法计数,可将预置数的原码打入预置端。
从图中可以看到,设计时钟控制器,关键是要设计一个启停电路,即产生一个门控信号,如图中虚线所示的Q波形。当启动时,其负脉冲将系统复位,并对计数器进行预置,负脉冲结束后的下一个时钟的上升沿到来时,启停电路开启,Q由01,与此同时,计数器开始计数。当计数值与预置值相等时,启停电路关闭,Q由10,这时,计数器停止计数,根据Q与φ的时间关系,通过简单的控制逻辑,即可实现预期的时钟控制的目的。
如果要用示波器动态观察Q和Z的波形,还需要对原电路进行改动,所以,设计的电路包括两部分,即静态观察时的电路和动态观察时的电路。
输出时钟脉冲数可控的时钟控制器VHDL语言描述
输出时钟脉冲数可控的时钟控制器VHDL语言描述的
设计流程如图所示:
顶层电路图
三:实验仿真
静态演示实验代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity wavecontrol is
port
(
-- Input ports
clk : in std_logic;
data0 : in std_logic;
data1 : in std_logic;
data2 : in std_logic;
data3 : in std_logic;
reset: in std_logic;
-- Output ports
gate: out std_logic;
z: out std_logic;
q:buffer std_logic_vector(3 downto 0)
);
end wavecontrol;
architecture one of wavecontrol is
signal tem_data:std_logic_vector(3 downto 0);
signal tem_gate:std_logic;
begin
process(clk)
begin
if(clkevent and clk=1)then
if(reset=0)then --如果清零端为有效,置数切计数清零
tem_data(0)=data0;--数据输入
tem_data(1)=data1;
tem_data(2)=data2;
tem_data(3)=data3;
q=0000;
tem_gate=0;--gate无效
else
tem_gate=1;--否则门开启
if(qtem_data)then
q=q+1;
else
tem_gate=0;--如果计数超过预置数门关闭
end if;
end if;
end if;
end process;
z=tem_gate and clk;
gate=tem_gate;
end one;
功能仿真结果:
动态演示过程:
把reset调为q计数结束后自动清零,让数据自动重复输入,以便于在示波器上显示。同时将gate与z进行双踪示波。
修改后的代码:
library ieee;
use ieee.s
显示全部