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

更新时间:2024-03-27 10:51:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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

一、实验内容

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

end if; when s2=>

if d='0' then state<=s3; else state<=s2; end if; when s3=>

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

if d='0' then state<=s5; else state<=s2; end if; when s5=>

if d='0' then state<=s6; else state<=s1; end if; when s6=>

if d='1' then state<=s0; else state<=s0; end if; end case; end if;

end process; --输出设置 process(state,d) begin

case state is when s6=>

if d='1' then z<='1'; --1101001检测成功 else z<='0'; end if;

when others=>z<='0'; end case; end process; end bhv; 2.仿真

3.逻辑图

6

stateclkdrstclkdresets6001zz~0 4. 序列检测器的Mealy机状态表: 现 态 (present_state) 次态 / 输出(next_state / cout) cin=0 cin=1 S1 / 0 S2 / 0 S3 / 0 S3 / 0 S1 / 0 S6 / 0 S2 / 0 S0 S0 / 0 S1 S0 / 0 S2 S0 / 0 S3 S4 / 0 S4 S5 / 0 S5 S0 / 0 S6 S0 / 1 7

本文来源:https://www.bwwdw.com/article/wqzr.html

Top