6 计数器与序列检测器仿真实验报告

2019-03-03 10:22

实验六 计数器与序列检测器的仿真

一、实验内容

1.用VHDL语言设计一个按余3码顺序计数的计数器,并进行仿真与分析; 2.用VHDL语言设计一个?1101001?位串的序列检测器,并仿真与分析。 二、实验要求

1.进实验室前,请写一份预习报告;进实验室时经指导老师检查后,才可上机操作。

2.预习报告内容有:

用VHDL语言编写余3码计数器程序;

用VHDL语言编写?1101001?序列检测器程序。

3.在文本编辑区使用VHDL硬件描述语言设计逻辑电路,再利用波形编辑区进行逻辑功能仿真,以此验证电路的逻辑功能是否正确,最后在实验箱上进行下载验证。

4.实验结束前,由指导老师检查了仿真波形和实验箱上的实验结果后方可离开。

三、电路功能介绍

1、计数器

计数器: 一般来说,在状态图中包含有一个循环(见下图)的任何时钟时序电路都可称为计数器。

计数器的模是指在循环中的状态个数。

一个有m个状态的计数器称为模m计数器,有时也称为m分频计数器。如果一个计数器的模不是2的幂,就会有多余状态,在正常工作时是不用这些状态的。

最常用的计数器可能就是n位二进制计数器。这样的计数器有n个触发器及2n

1

种状态,这些状态的循环顺序是0, 1, 2, ..., 2n-1, 0, 1, ...。其中,每一种状态都被编码成对应的n位二进制整数。

行波计数器:当某一位由1变到0,这一位就会向高位产生一个进位,由低位到高位,每次传送一位,如T触发器。

同步计数器: 所有的触发器都共用一个CLK信号,在经过仅仅tTQ纳秒的延迟后,所有的触发器的输出都同时变化,它包括两种结构:同步串行计数器和同步并行计数器。

1.同步串行计数器:采用一个主计数使能信号CNTEN来实现控制。每一个T触发器要发生翻转的充要条件是CNTEN信号有效且所有的低阶计数位都为1,同步n位二进制计数器的每一位都可以用一定数量的逻辑元件来实现,它的缺点是组合型的使能信号由最低位到最高位串行传送,如果时钟周期太短的话,计数器LSB(最低位)的变化可能来不及传送到MSB(最高位)。

2.同步并行计数器:每一个EN输入都用一个专门的与门来驱动,这样,CNTEN信号到达各个触发器的EN输入端只需要经过一级逻辑电路,它是最快的二进制计数器的结构形式。

2

2.序列检测器

应用状态机的概念设计一个序列检测器,以?1110010?序列检测器的设计为例。该序列检测器收到一组串行码(1110010)后输出检测标志为‘1’,否则为‘0’。

3

一、计数器

1. VHDL语言实现

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity count is

port(clk,clr,en:in std_logic;

a:out std_logic_vector(3 downto 0); cout:out std_logic); end count;

architecture bhv of count is

signal b:std_logic_vector(3 downto 0); begin

process(clk,clr,en,b) begin

if(clr='1') then b<=\elsif(clk'event and clk='1') then if(en='1') then

if(b<\ else b<=\ end if; end if; end if;

if(b=\else cout<='0'; end if; a<=b; end process; end bhv; 2. 波形仿真

4

3. 逻辑图

clrb[1..0]PREDQ4' h1 --ENACLRADDERA[3..0]B[3..0]Add0b[3..2]PREA[3..0]Equal04' hC --B[3..0]clken+LessThan0DQ=EQUALcouta[3..0]ENACLRA[3..0]4' hC --B[3..0]

use ieee.std_logic_1164.all; entity xulie is

port(clk,rst,d:in std_logic; z: out std_logic); end xulie;

architecture bhv of xulie is

type state_type is(s0,s1,s2,s3,s4,s5,s6); --状态定义 signal state: state_type; --状态寄存器 begin

process(clk,rst) --次态设置 begin

if rst= '1' then state<=s0; --异步重启 elsif (clk'event and clk ='1') then case state is --根据d判断状态转移 when s0 =>

if d='1' then state<=s1; else state<=s0; end if; when s1=>

if d='1' then state<=s2; else state<=s0;

5


6 计数器与序列检测器仿真实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电工进网作业许可证,继电保护练习题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: