盐城工学院eda实验指导书3,4 下载本文

内容发布更新时间 : 2024/6/4 1:27:53星期一 下面是文章的全部内容请认真阅读。

实验三 序列信号检测器的设计

一、实验目的:

1、理解序列信号检测器的工作原理;

2、掌握原理图和文本输入的混合设计输入方法; 3、理解状态划分;

4、掌握状态机程序的编写方法; 二、实验原理:

序列检测器是时序数字电路中非常常见的设计之一。它的主要功能是:将一

个指定的序列从数字码流中识别出来。接下来的设计就是针对“011”这个序列的检测器。设input为数字码流输入,output为检出标记输出,高电平表示“发现指定序列”,低电平表示“没有发现指定的序列”。设输入的码流为“001101101111011111...”,在时钟2~4中,码流input里出现指定序列“011”,对应输出output在第4个时钟变为高电平“1”,表示发现指定\”,以此类推。 序列发生器模块采用的是M(n=4)序列发生器,详细可以参考《EDA技术与应用》一书的4.4团队协作及逻辑锁定。 三、实验内容

(1)最终的顶层设计原理图如下:

左侧的四个D触发器组成的电路为M序列信号发生器模块,它可以产生15位随机的二进制码流。发生器产生的二进制码流每隔15个时钟周期重复出现一次。详细的可以在最终的时序仿真图中看出来。

右侧的get_str模块为检测模块,给予状态机的结构编写的,具体如下: library ieee;

use ieee.std_logic_1164.all;

entity get_ser is

end entity;

architecture rtl of get_ser is

-- Register to hold the current state signal state : state_type;

-- Build an enumerated type for the state machine type state_type is (s0, s1, s2, s3); port( );

clk

: in std_logic;

input : in std_logic; reset : in std_logic;

serout : out std_logic_vector(1 downto 0); output : out std_logic

begin

serout <= ('0'&input);

-- Logic to advance to the next state process (clk, reset) begin

if reset = '1' then

state <= s0;

elsif (rising_edge(clk)) then

case state is

when s0=>

if input = '0' then

state <= s1;

else

state <= s0;

end if;

when s1=>

if input = '1' then

state <= s2;

else

state <= s1;

end if;

when s2=>

if input = '1' then

state <= s3;

else

state <= s1;

end if;

when s3 =>

if input = '1' then

state <= s0;

else

state <= s1;

end if;

end case;

end if;

end process;

-- Output depends solely on the current state process (state)