文档库 最新最全的文档下载
当前位置:文档库 › EDA实验报告四(状态机实现序列检测器的设计)

EDA实验报告四(状态机实现序列检测器的设计)

EDA实验报告四(状态机实现序列检测器的设计)
EDA实验报告四(状态机实现序列检测器的设计)

实验四:状态机实现序列检测器的设计

一、实验目的

1、了解和学习Quartus II 7.2软件设计平台。

2、了解EDA的设计过程。

3、通过实例,学习和掌握Quartus II 7.2平台下的文本输入法。

4、学习和掌握状态机的工作和设计原理。

5、掌握用VHDL 实现状态机的方法

6、利用状态机设计一个序列检测器

二、实验仪器

PC机,操作系统为Windows7/XP,本课程所用系统均为WindowsXP(下同),Quartus II 7.2设计平台。

三、实验步骤

1、创建工程,在File菜单中选择New Project Wizard,弹出对话框如下图所示

在这个窗口中第一行为工程保存路径,第二行为工程名,第三行为顶层文件实体名,和工程名一样。

2、新建设计文本文件,在file中选择new,出现如下对话框:

选择VHDL File 点击OK。

3、文本输入,在文本中输入如下程序代码: LIBRARY IEEE;

USE IEEE. STD_LOGIC_1164. ALL;

ENTITY fsm IS

port(clk,x:IN STD_LOGIC;

z:OUT STD_LOGIC);

END fsm;

ARCHITECTURE bhv OF fsm IS

TYPE STATE IS(S0,S1,S2,S3);

SIGNAL present_state:state;

BEGIN

PROCESS(clk)

BEGIN

IF(clk'EVENT AND clk='1')THEN

CASE present_state IS

WHEN S0=>

IF x='1'THEN

present_state<=S1;

ELSE present_state<=S0;

END IF;

WHEN S1=>

IF x='0'THEN present_state<=S2;

ELSE present_state<=S0;

END IF;

WHEN S2=>

IF x='1'THEN present_state<=S3; ELSE present_state<=S0;

END IF;

WHEN S3=>

IF x='1'THEN present_state<=S0; END IF;

END CASE;

END IF;

END PROCESS;

z<='1'

WHEN present_state<=S3

ELSE '0';

END bhv;

然后保存到工程中,结果如下图所示:

4、编译,如果有多个文件要把这个文件设为当前顶层实体,这样软件编译时就只编译这个文件。点击projet->Set as Top-level EntityCtrl+Shift+J

接下来进行编译,点击processing->Start Compilation ,见下图

路图:

到如下状态转移图

小结

通过这次上机,我们了解了关于状态机实现序列检测机的设计与应用,对VDHL

语言有更深刻的了解学习和运用。

序列信号检测器

南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合 设计□创新实验日期:实验成绩:实验三序列信号发生检测器 一、实验目的 1、学会运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。 2、掌握脉冲序列检测器的主要功能 二、实验要求 1、设计一个序列信号发生器,用以产生输入序列“1101010011010101”由左开始。 2、设计一个序列检测器,用以检测输入序列,检测序列为10011 3、运用QuartusⅡ软件中的仿真功能对所设计的序列检测器的各个模块及顶层电路的功 能进行仿真分析。 三、设计过程 1,序列信号检测器设计原理: 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的相同,则输出 1,否则输出 0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码与预置数的对应码相同。设计中一般采用状态机来实现。 2,模块设计: 根据层次化设计理论以及序列信号检测器的基本原理,本次设计的序列检测器采用自顶向下的思路可分为时钟输入模块、序列发生模块、序列检测模块、数码管动态扫描显示模块及LED状态转换显示模块,系统框图如下

序列信号检测器系统框图 3、使用文本设计底层文件,并生成相应元器件,再使用原理图设计顶层文件 四、实验步骤 1、顶层文件的设计 顶层原理图设计可以依据系统框图进行,时钟输入模块(clkdiv)、序列发生模块(fsq)、序列检测模块(jcq)、数码管动态扫描显示模块及LED状态转换显示模块(scan_led)、序列信号译码模块(czb) 2,各模块设计文件 ①时钟clkdiv: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DIV IS PORT(CLK : IN STD_LOGIC; CLK_DIV : OUT STD_LOGIC); END DIV; ARCHITECTURE RT1 OF DIV IS SIGNAL DA TA:INTEGER RANGE 0 TO 500;

实验五 用状态机实现序列检测器的设计

实验五用状态机实现序列检测器的设计 一、实验目的 1.熟悉QuartusⅡ软件应用环境,了解实验流程。 2.编写简单的Verilog代码,并在QuartusⅡ中进行调试和验证,并在EDA6000中下载代 码和验证。 3.掌握用状态机(State Machine)实现序列检测器的设计。 二、实验原理 假设检测器预先已经设定一个8位序列d,那么当由din端口串行输入的一个8位序列,与d完全相同时,检测器输出代码1010,即在试验箱上的LED上显示一个“A”;否则,检测器输出1110,即在试验箱上的LED上显示一个“E”。同时,当清零信号clr有效时,输出为1110。由清零信号clr和输入信号din共同控制状态机的状态变化。 三、实验内容 1、检测一组二进制序列信号,当连续的脉冲信号和预先设定的序列d相同时,显示字符“A”,否则显示“E”。 2、使用工具为译码器建立一个元件符号 3、设计仿真文件,进行验证。 4、编程下载并在实验箱上进行验证。 四、实验步骤 1.新建Verilog工程项目,编写代码并保存至与模块名对应的项目文件夹。 2.编译程序,编译无误后,在【tools】>【netlist viewers】里面选择RTL Viewer,观察电 路结构;在【tools】>【netlist viewers】里面选择State Machine Viewer,查看状态机转换图。 3.新建波形文件进行仿真。保存时要和源程序存放在同一目录下。设置好输入波形参数后, 开始仿真。在仿真后输入输出波形中观察逻辑关系是否正确。 4.将实验箱和PC合理连接起来。打开EDA6000软件,设置好芯片类型为ACEX1K (EP1K30TC144-3),载入模式12。 5.根据EDA6000界面内管脚对应芯片的实际管脚在QUARTUSⅡ里面设定管脚号并检查 无误。 6.将程序下载至FPGA内,并在EDA6000软件界面内进行验证测试。 程序代码 module SCHK(clk,din,clr,d,err); input clk,din,clr; input [7:0]d; output [3:0]err; parameter s0=0,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6,s7=7,s8=8; reg [8:0]cs,ns; reg [3:0]err; always @(posedge clk or posedge clr) begin if(clr) cs<=s0; else cs<=ns; case (cs) s0:if(din==d[0] ) ns<=s1; else ns<=s0;

使用D触发器设计一个11001序列检测器介绍

讨论使用D触发器设计一个11001序列检测器,讨论序列可交迭(Overlap)检测和不可交迭检测在设计上的区别,讨论分别采用Mealy机设计和采用Moore机设计的区别,讨论未用状态的处理问题。 【要求】给出电路原理图或HDL代码,要求进行仿真,并给出仿真结果。 1.原件介绍 D触发器(74LS74)、“与”门(74LS08)、“或”门(74LS32)、“非”门(74LS04),集成电路引脚

2.设计思路 根据要求,设计的序列检测器有一个外部输入x和一个外部输出Z。输入和输出的逻辑关系为:当外部输入x第一个为"1",外部输出Z为"0";当外部输入x 第二个为"1",外部输出Z为"0";当外部输入第三个x为"0",外部输出Z为"0",当外部输入第四个x为“0”,外部输出Z为0,当外部输入第五个x为“1”,外部输出Z为“1”。假定有一个外部输入x序列以及外部输出Z为: 输入X 0 1 1 1 0 0 1 0 1 输出Y 0 0 0 0 0 0 1 0 0 要判别序列检测器是否连续接收了"11001",电路必须用不同的状态记载外部输入x的值。假设电路的初始状态为A,x 输入第一个"1",检测器状态由A装换到B,用状态B记载检测器接受了"11001"序列的第一个"1",这时外部输出Z=0;x输入第二个"1",检测器状态由B装换到C,用状态C 记载检测器接了“11001”序列的第二个"1",外部输出Z=0;x输入第三个"0",检测器状态由C装换到D,外部输出Z=0;x输入第四个为“0”,检测器状态由D装换到E,外部输出Z=0;x输入第五个为“1”,检测器状态由E装换到F,外部输出Z=1。然后再根据外部输入及其他情况时的状态转移,写出相应的输出。以上分析了序列检测器工作,由此可画出原始状态图。根据原始状态图可列出原始状态表。 状态转换表 A B D C E F 1\0 1\0 0\0 0\0 1\1 0\0 0\0 1\0 1\0 0\0 0\0

quartus设计状态机实现序列检测器

用状态机实现序列检测器的设计 一、原理 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果与检测器预先设置的码相同,则输出为1,否则输出为0。 二、内容与步骤: 1、状态转换图 2、设计一个序列检测器,对1110010进行检测,编写实验程序。 3、对程序进行仿真测试并给出仿真波形。 4、仿真通过后进行引脚锁定,再进行一次全编译,并下载到实验箱上进行验证。 三、状态机源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY STATEMACHINE IS PORT(DIN,CLK,RST:IN STD_LOGIC; SOUT:OUT STD_LOGIC); END STATEMACHINE; ARCHITECTURE BEHA V OF STATEMACHINE IS TYPE STATES IS (S0,S1,S2,S3,S4,S5,S6,S7); SIGNAL ST,NST:STATES:=S0; BEGIN COM:PROCESS(ST,DIN) BEGIN CASE ST IS WHEN S0=>IF DIN='1' THEN NST<=S1;ELSE NST<=S0;END IF; WHEN S1=>IF DIN='1' THEN NST<=S2;ELSE NST<=S0;END IF; WHEN S2=>IF DIN='1' THEN NST<=S3;ELSE NST<=S0;END IF; WHEN S3=>IF DIN='1' THEN NST<=S3;ELSE NST<=S4;END IF; WHEN S4=>IF DIN='1' THEN NST<=S1;ELSE NST<=S5;END IF; WHEN S5=>IF DIN='1' THEN NST<=S6;ELSE NST<=S0;END IF; WHEN S6=>IF DIN='1' THEN NST<=S2;ELSE NST<=S7;END IF; WHEN S7=>IF DIN='1' THEN NST<=S1;ELSE NST<=S0;END IF; WHEN OTHERS=>NST<=S0; END CASE;

序列检测器实验报告

序列检测器设计 实验内容: 设计一个1110010序列检测器,即检测器检测到序列1110010时,输出为1,否则输出为0。 输入信号:一个时钟输入信号clk; 一个输入端x以输入序列来检测; 一个输入y用来选择是检测序列1110010或是检测自己输入的序列;一个输入k(7..0)用来输入想要检测器检测的序列; 输出信号:一个7位输出信号q,用来输出正在检测的7位序列;一个1位输出信号unlk,当被检测序列符合时,输出unlk为1否则为0; 中间信号:再定义两个7位的中间信号a和combination; 执行操作:在上升的时钟沿时候,将从x输入的序列赋给7位a,在y等于1的情况下,令中间信号combination为1110010,否则,在y等于0的情况下,令中间信号combination为从k输入的七位长序列。最后把a的值赋给q,如果a与combination输出unlk等于1否则等于0。 (1)序列检测器语言设计: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; USE IEEE.STD_LOGIC_ARITH.ALL;

entity xulie2 is port ( clk,x:in std_logic; y:in std_logic; k:in std_logic_vector(7 downto 1); unlk:out std_logic; q:out std_logic_vector(7 downto 1)); end xulie2; architecture art of xulie2 is signal a:std_logic_vector(7 downto 1); signal combination: std_logic_vector(7 downto 1); begin process(clk) begin if clk'event and clk='1' then a<=a(6 downto 1)&x; if y='1' then combination<="1110010";

实验三_用状态机实现序列检测器的设计Verilog

实验三用状态机实现序列检测器的设计 一、实验目的: 用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。 二、原理说明: 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出a,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对序列数"11100101"的。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“a”,否则仍然输出“b”。 【例3-1】 //顶层文件: module XULIEQI(clk,reset,din18,LED7S); input clk; input reset; input [17:0] din18; output [6:0] LED7S; wire [3:0] AB; wire [17:0] din18; xulie u1 (clk, din18, reset, din); schk u2 (din,clk,reset,AB); decl7s u3 (AB,LED7S); endmodule //串行检测: module schk(DIN,CLK,CLR,AB); input DIN,CLK,CLR; output[3:0] AB; reg [3:0] AB; reg [7:0] Q;

parameter idle = 8'b00000000, a = 8'b00000001, b = 8'b00000010, c = 8'b00000100, d = 8'b00001000, e = 8'b00010000, f = 8'b00100000, g = 8'b01000000, h = 8'b10000000; parameter data=8'b11100101; always @(posedge CLK or negedge CLR) if(!CLR) begin Q <= idle; end else begin case(Q) idle: begin if(DIN==data[7]) Q<=a; else Q<=idle; end a: begin if(DIN== data[6]) Q<=b; else Q<=idle; end b: begin if(DIN== data[5]) Q<=c; else Q<=idle; end c: begin if(DIN== data[4]) Q<=d; else Q<=c; end d: begin

实验六 序列信号发生器与序列信号检测器的设计1

实验六、序列信号发生器与序列信号检测器的设计 一、实验目的 1、掌握序列发生器和检测器的工作原理; 2、初步学会用状态机进行数字系统设计。 二、实验要求 1、基本要求 1)设计一个“10001110”序列发生器; 2)设计一个“10001110”序列的检测器。 2、扩展要求 1)设计一个序列发生器,将8 位待发生序列数据由外部控制输入进行预置,从而可随时改变输出序列数据。 2)将8 位待检测预置数由按键作为外部输入,从而可随时改变检测密码。写出该检测器的VHDL 代码,并进行编译下载测试。 3)如果待检测预置数以右移方式进入序列检测器,写出该检测器的VHDL 代码(两进程符号化有限状态机)。 三、实验原理 1、序列发生器原理 在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。 本实验要求产生一串序列“10001110”。该电路可由计数器与数据选择器构成,其结构图如图6-1所示,其中的锁存输出的功能是为了消除序列产生时可能出现的毛刺现象: 图6-1 序列发生器结构图 2、序列检测器的基本工作过程: 序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,在数字通信中有着广泛的应用。当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。状态图如图6-2所示:

1011序列检测器

综合设计性实验报告 题目: 学生姓名: 学号: 班级: 指导教师: 学期:2010——2011第2学期

目录 一基本知识点 (1) 二实验器件 (1) 三设计思路 (1) 四设计过程 (2) (一)三位二进制减法计数器(无效状态000,001) (二)5 五引脚功能 (9) 六逻辑电路图: (11) 七实验结果波形图 (12) 八设计心得体会 (12)

一基本知识点 1、掌握时序电路的设计方法和步骤 2、掌握触发器的设计与应用 3、掌握移位寄存器的原理与应用 4 熟悉集成电路的引脚排列; 5 掌握芯片的逻辑功能及使用方法; 6 了解序列产生及检测器的组成及工作原理 7 会在EWB软件上进行仿真; 二实验器件 1、移位寄存器74LS194 1片 2、负边沿JK触发器74LS112 1片 3四输入与非门74LS20 1片 4、六输入非门74LS05 1片 5 电源一个 6 地线一个 7 与门,或门,非门若干个 8 时钟脉冲一个 三设计思路 1作原始状态表。根据给定的电路设计条件构成原始状态表和状

态转化图 2状态表的简化。原始状态表通常不是最小化状态表,它往往包括多余的状态,因此必须首先对它进行简化。 3状态分配。即对简化后的状态给以编码。这就要根据状态数确定触发器的数量并对每个状态指定一个二进制数构成的编码。 4根据给定的电路设计条件选择触发器根据 5 作激励函数和输出函数。根据选用的触发器激励表和电路的状态表,综合出电路中各触发器的激励函数和电路的输出函数。 ⑸6画逻辑图,并检查自启动功能 四设计过程 (一)101101001信号发生器的设计 设计一个信号序列发生器,在产生的信号序列中,含有“1011”信号码,要求用一片移位寄存器,生成信号序列“10110100”,其中含有1011码,其设计按以下步骤进行:、、 1本实验所用仪器为移位寄存器74LS194,确定移存器的位数n。因M=9,故n≥4,用74LS194 的四位。 2确定移存器的九个独立状态。将序列码101101001按照每四位一组,划分为九个状态,其迁移关系如下所示: 3作出状态转换表及状态转换图如下:

实验5 状态机序列检测器设计

实验五序列检测器设计 一、实验目的 1 掌握时序电路状态机设计一般方法; 2 学会用状态机方法实现序列检测器的设计。 二、实验原理: 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。序列检测可由状态机完成,也可进行串行滑窗检测器。 线性反馈移位寄存器,用来产生伪随机序列,用做测试数据输入。 三、实验内容 1、完成“1101”检测器的设计,输入信号a和时钟clk,输出为out。 2、设计一个五位线性反馈移位寄存器,其输出数据以串行移位方式进入序列 检测器,其有置数端set,输入时钟clk,左移输出out; 3、连接五位线性反馈移位寄存器和序列检测器构成完整实验系统。 四、设计步骤 1、建立新工程, 2、完成五位线性反馈移位寄存器设计,序列检测器设计,顶层文件设计,并把各 个模块连接起来。 3、对顶层文件进行编译。 4、对顶层文件时序仿真。 五、实验报告:根据以上的实验内容写出实验报告,包括设计原理、程序设计、仿真分析等详细实验过程。 六、扩展部分: 1、采用文本输入方式构成顶层文件,重新构造本系统。

2、设计采用移动滑窗法进行序列检测。 参考程序:状态机序列检测器(1101)module fsm (clock, reset, datain, out); input clock,reset, datain; output out; reg out; reg [1:0] state; parameter Idle = 2'b00, Start = 2'b01, Step=2'b10, Stop = 2'b11; always @(posedge clock)// if (!reset) // begin state <= Idle; out<=0; end else case (state) Idle: if (datain==1) begin state <= Start; out<=0; end else begin state<=Idle; out<=0; end Start: if (datain==1) begin state <= Step; out<=0; end else state <=Idle; Step: if (datain==0) begin state <= Stop; out<=0; end else state<=Step; Stop: if (datain==1) begin state <= Idle; out<=1; end else begin state <=Idle; out<=0; end endcase endmodule

EDA实验六-用状态图输入法实现序列检测器

EDA实验六用状态图输入法实现序列检测器 一、实验目的: 了解序列检测器的基本原理,Mealy型和Moore型状态机的基本原理, 掌握状态图输入法实现序列检测器的方法,并进行分析和仿真验证。 二、实验内容: 本实验内容是:用状态图输入法设计一个序列检测器,若检测器收到一组码流1110010则输出为1,否则输出为0。 三、实验方法: 实验方法: 采用基于FPGA进行数字逻辑电路设计的方法。 采用的软件工具是QuartusII软件仿真平台,采用的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。 实验步骤: 1、绘制状态图。打开QuartusII软件平台,建立工程文件夹,工程文件夹名称为exp_detect3。然后点击File中的New建立一个状态图文件(用State Machine File命令),然后设置并生成状态图。 2、按照实验箱上FPGA的芯片名更改编程芯片的设置。操作是点击Assign/Device,选取芯片的类型。 3、编译与调试。确定状态图文件为当前工程文件,点击Complier进行文件编译。编译结果有错误或警告,则将要调试修改直至文件编译成功。 4、波形仿真及验证。在编译成功后,点击Waveform开始设计波形。点击“insert the node”,按照程序所述引脚,任意设置各输入节点的输入波形…点击保存按钮保存。 5、FPGA芯片编程及验证,应记录实验结果进行分析。 四、实验过程: 用状态图输入法实现序列检测器: 1、建立工程文件,工程文件夹的名称为exp_detect3,工程名和顶层实体名称为exp_detect3。 工程建立过程中平台设置设置如下图所示:

状态机设计仿真

状态机设计仿真 一、实验例题 设计一个序列检测器电路,检测出串行输入数据data中的二进制序列110,当检测到该序列时,电路输出1 out=;没有检测到该序列时,电路输出0,电路的状态图如1所示: 图1 电路状态转换图 二、实验原理分析 由电路的状态图分析,可列出对应的状态转换表,如图2所示: 图2 状态转换表 +相同,将图1,图2简化可得: 从状态转化表分析可得S3与S0对应的S n1

改进的状态转换表 三、实验任务:依据图1状态图2表,S 存在时,用VerilogHDL设计的参考程序如 3 下: module pulse_check(data,clk,rst,out); input data,clk,rst; output out; reg out; reg[1:0] CST,NST; parameter[1:0] s0=0,s1=1,s2=2,s3=3; always@(posedge clk or negedge rst) if (!rst) CST<=s0;//复位有效,进入下一个状态 else CST<=NST; always@(CST or data) begin case(CST) s0: if(data==1'b1) NST<=s1; else NST<=s0; s1: if(data==1'b1) NST<=s2; else NST<=s0; s2: if(data==1'b0) NST<=s3; else NST<=s2; s3: if(data==1'b0) NST<=s0; else NST<=s1;

default: NST<=s0; endcase end always@(CST or data) case(CST) s0:out=1'b0; s1:out=1'b0; s2: if(data==1'b0) out=1'b1; else out=1'b0; s3:out=1'b0; endcase endmodule rst复位信号(低电平有效),clk状态时钟。四:仿真图形

EDA实验报告实验三:序列信号发生器与检测器设计

实验三序列信号发生器与检测器设计 一、实验目的 1.学习一般有限状态机的设计; 2.实现串行序列的设计。 二、设计要求 1.先设计0111010011011010序列信号发生器; 2.再设计一个序列信号检测器,若系统检测到串行序列11010则输出为“1”,否则输出为“0”,并对其进行仿真和硬件测试。 三、实验设备 PC机,Quartu eⅱ软件,实验箱 四、实验原理 1、序列信号发生器 复位信号CLRN。当CLRN=0时,使CNT=0000,当CLRN=1时,不影响程序运行,每来一个CLK脉冲CNT加一。 2、序列信号检测器 状态转移图:

五、实验步骤 1、信号发生器 1)建立工作库文件夹,输入设计项目VHDL代码,如下: L I B R A R Y I E E E; U S E I E E E.S T D_L O G I C_1164.A L L; U S E I E E E.S T D_L O G I C_A R I T H.A L L; U S E I E E E.S T D_L O G I C_U N S I G N E D.A L L; E N T I T Y X L S I G N A L16_1I S P O R T(C L K,C L R N:I N S T D_L O G I C; Z O U T:O U T S T D_L O G I C); E N D X L S I G N A L16_1; A R C H I T E C T U R E o n e O F X L S I G N A L16_1I S S I G N A L C N T:S T D_L O G I C_V E C T O R(3D O W N T O0); S I G N A L Z R E G:S T D_L O G I C; B E G I N P R O C E S S(C L K,C L R N) B E G I N I F(C L R N='0')T H E N C N T<="0000";E L S E I F(C L K'E V E N T A N D C L K='1')T H E N C N T<=C N T+'1'; E N D I F;

6实验六 状态机序列检测

实验六用状态机实现序列检测器的设计 1、实验目的 用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。 2、实验原理 序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例实验六描述的电路完成对序列数"11100101"的。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“B”。 【例实验六】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS PORT(DIN,CLK,CLR : IN STD_LOGIC ; --串行输入数据位/工作时钟/复位信号 AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); --检测结果输出 END SCHK; ARCHITECTURE behav OF SCHK IS SIGNAL Q : INTEGER RANGE 0 TO 8 ; SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0); --8位待检测预置数 BEGIN D <="11100101"; --8位待检测预置数 PROCESS( CLK, CLR ) BEGIN IF CLR = '1' THEN Q <= 0 ; ELSIF CLK'EVENT AND CLK='1' THEN --时钟到来时,判断并处理当前输入的位 CASE Q IS WHEN 0=> IF DIN = D(7) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ; WHEN 1=> IF DIN = D(6) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ; WHEN 2=> IF DIN = D(5) THEN Q <= 3 ; ELSE Q <= 0 ; END IF ; WHEN 3=> IF DIN = D(4) THEN Q <= 4 ; ELSE Q <= 0 ; END IF ; WHEN 4=> IF DIN = D(3) THEN Q <= 5 ; ELSE Q <= 0 ; END IF ; WHEN 5=> IF DIN = D(2) THEN Q <= 6 ; ELSE Q <= 0 ; END IF ; WHEN 6=> IF DIN = D(1) THEN Q <= 7 ; ELSE Q <= 0 ; END IF ; WHEN 7=> IF DIN = D(0) THEN Q <= 8 ; ELSE Q <= 0 ; END IF ; WHEN OTHERS => Q <= 0 ; END CASE ; END IF ; END PROCESS ; PROCESS( Q ) --检测结果判断输出 BEGIN

EDA实验报告--序列信号发生器

南昌大学实验报告 学生姓名:林聪学号:5801209051 专业班级:中兴091班 实验类型:□验证□综合□设计□创新实验日期:2011/10/19实验成绩: 实验三序列信号发生和检测器 一、实验目的 1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法; 2、学习有限状态机法进行数字系统设计; 二、设计要求 完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下: 1、先设计0111 0100 1101 1010序列信号发生器,其最后8BIT数据用LED显示出来; 2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11010”则输出为“1”, 否则输出为“0”; 三、主要仪器设备 1、微机1台 2、QuartusII集成开发软件1套 3、EDA实验装置1套 四、实验步骤 1、分析实验,由于实验需要产生具备序列发生器和序列检测器的功能,根据分模块处理的 思想,可以把实验分为两个模块,通过顶层元件建立输入输出的连接。 2、建立模块使用VHDL编程,首先,建立序列发生器的模块,名为xlfsq,VHDL代码如下: libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_unsigned.all; entityxlfsq is port(clk,rst:instd_logic; cout,e1,e2,e3,e4,e5,e6,e7,e8:out std_logic); endxlfsq; architecture one of xlfsq is signalcq:std_logic; signal f1,f2,f3,f4,f5,f6,f7:std_logic; begin P1:process(clk,rst) variablecount:std_logic_vector(3 downto 0); begin if(rst='0')then count:="0000"; elsif(clk'event and clk='1')then count:=count+1; end if;

序列检测器之状态机设计

序列检测器之状态机设计 一、实验目的 8位序列数“110110011”的检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的“密码”数相同,则输出1,否则仍然输出0。 二、实验原理 (1)状态机用于序列检测器的设计比其他方法更能显示其优越性。 (2)序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种监测器必须记住前一次的正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测的过程中,任何一位不相等都将回到初始状态重新开始检测。 三、实验步骤 (1)检测数据110110011,高位在前的程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SCHK IS PORT(DIN,CLK, RST : IN STD_LOGIC;--串行输入数据位/工作时钟/复位信号 SOUT : OUT STD_LOGIC);--检验结果输出 END SCHK; ARCHITECTURE behav OF SCHK IS TYPE states IS (S0, S1, S2, S3,S4, S5, S6, S7, S8);--定义各种状态 SIGNAL ST, NST: states :=s0 ;--设定现态变量和次态变量 BEGIN COM: PROCESS(ST, DIN) BEGIN --组合进程,规定各状态转换方式 CASE ST IS --11010011 WHEN s0 => IF DIN = '1' THEN NST <= s1 ; ELSE NST<=s0 ; END IF ; WHEN s1 => IF DIN = '0' THEN NST <= s2 ; ELSE NST<=s0 ; END IF ; WHEN s2 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN s3 => IF DIN = '1' THEN NST <= s4 ; ELSE NST<=s0 ; END IF ; WHEN s4 => IF DIN = '1' THEN NST <= s5 ; ELSE NST<=s0 ; END IF ; WHEN s5 => IF DIN = '0' THEN NST <= s6 ; ELSE NST<=s0 ; END IF ; WHEN s6 => IF DIN = '1' THEN NST <= s7 ; ELSE NST<=s0 ; END IF ; WHEN s7 => IF DIN = '0' THEN NST <= s8 ; ELSE NST<=s0 ; END IF ; WHEN s8 => IF DIN = '0' THEN NST <= s3 ; ELSE NST<=s0 ; END IF ; WHEN OTHERS => NST<=s0; END CASE; END PROCESS; REG: PROCESS (CLK,RST) BEGIN ---时序进程

110序列检测器仿真报告

Lab 110序列检测器仿真 1.实验目的 学会序列检测的设计,学会modelsim的使用,熟悉用Quartus编译Verilog语言的方法,熟悉DEO板的操作。 2.实验内容 1)用HDL语言的输入方式,实现110序列检测器。 2)用modelsim进行仿真。 3)用DE0下载并进行测试。 3.代码分析 1)该实验使用状态机进行设计,使用两个always语句,一个作为时序逻辑,另一个作为组合逻辑,其结构图为 2)首先定义输入输出变量和中间变量: module test110(data_in,data_out,Q,cp,en); output data_out,Q; //定义输出变量; input data_in,cp,en; //定义输出变量; reg data_out; //定义中间变量;

reg[1:0]pres_state,next_state; //定义两个时态; wire Q; //定义wire型中间变量; parameter s0=2'd0,s1=2'd1,s2=2'd2; //指定状态编码; 3)第一个always语句实现时序逻辑功能: fenpinqi(Q,cp); //调用分频器,改变时钟信号; always@(posedge Q or negedge en) //采用边沿触发; if(~en)pres_state<=s0; //清零; else pres_state<=next_state; //在Q上升沿触发器状态翻转; 4)第二个always语句实现组合逻辑功能: always@(pres_state or data_in) //电平触发事件 Begin next_state<=2' xx; //定义输出为零 data_out=1'b0; case(pres_state) //判断条件为现态的状态,对各状态值惊醒判断,并输出值s0:next_state<=(data_in==1)?s1:s0; s1:next_state<=(data_in==1)?s2:s0; s2:begin next_state<=(data_in==1'b1)?s2:s0; if(data_in==1'b0)data_out=1'b1; end endcase end endmodule 5)所调用的分频器的模块: module fenpinqi(Q,CP); output Q; //定义输出端口 input CP; //定义输入端口 wire [32:0]A; //定义中间变量 counter(A,CP); //调用计数器进行计数 D_FF(Q,~Q,CP,A); //调用D触发器是信号发生翻转endmodule module counter(Q,CP); //计数器,每第25M个信号发生一次变化output Q[32:0]; //定义输出端口 input CP; //定义信号输入端口 reg[32:0]Q; //定义中间变量 always@(posedge CP) //采用边沿触发 if(Q==33'd2*******)Q<=33'd0;//每25M作为一个计数周期 else Q<=Q+1'd1; //Q自增并输出 endmodule module D_FF(Q,D,CP,CR); //D触发器 output Q; //定义输出端 input D,CP; //定义输入端及D信号输入 input [32:0]CR; //定义输入变量 reg Q; //定义中间变量

实验5 采用状态机实现序列检测器

实验5 采用状态机实现序列检测器 一、实验目的 1.掌握利用有限状态机实现一般时序逻辑分析的方法; 2.掌握利用Verilog编写可综合的有限状态机的标准模板。 二、仪器设备 计算机、Quartus II 9.0 开发软件。 三、实验内容与步骤: 1.实验内容 建立一个序列检测器设计文件,当检测到3个及3个以上1时输出为1。 2.实验步骤 1)新建工程文件夹; 2)启动Quartus II 3)选择File->New Project Wizard,建立新工程; 4)File->New->Verilog HDL File建立设计文件; 5)选择Processing->Start->Start Analysis&Synthesis进行电路综合; 6)选择Tools->Netlist Viewers->RTL Viewer,查看综合后得到的电路; 7)选择Tools->Netlist Viewers->State Machine Viewer,查看综合后得到的有限状态机;8)选择Processing->Start->Start Fitter进行电路适配; 9)选择Tools->Netlist Viewers->Technology Map Viewer,查看适配后得到的电路。 四、实验数据 写出程序代码,及状态转换图。 五、讨论 写出三段式有限状态机的建模方式。 六、其它 实验原理要求说明: 1.什么是有限状态机; 2.什么是Moore有限状态机与Mealy有限状态机; 3.说明用Verilog HDL设计有限状态机的一般步骤。 附:程序部分代码 module seq_111(clk,clr,x,z); input clk,clr,x;

用状态机实现序列检测器的设计

1.掌握基于语言的ISE设计全流程; 实验三:用状态机实现序列检测器的设计 一、实验目的 2.用状态机实现序列检测器的设计,并对其进行仿真和硬件测试。 3.掌握基于语言的ISE设计全流程; 4.熟悉、应用VerilogHDL描述数字电路; 二、实验原理与设计过程 (一)实验容:序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出A,否则输出b。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等都将回到初始状态重新开始检测。例3-1描述的电路完成对序列数"11100101"的。当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码数相同,则输出“A”,否则仍然输出“b”。 (二)本次实验的核心是:应用有限状态机的设计思路,检测输入的串行数据是否是8’b11100101。根据下载电路板的资源,拟用SW3---SW0,J4接口的E8,F8,C7,D7作为系统输入(系统由此需要设计一个8bits并行数据转串行的模块),一个7段数码显示译码器作为检测结果的输出显示,如果串行序列为”11100101”,显示A,否则显示b(系统需要设计一个7段数码显示译码器模块),为了显示可控,清晰,拟用V16,D18实现时钟,复位信号的输入。 (三)设计参考:本实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成:

a)系统共包括4个模块:并行数据转串行数据模块、串行检测模块、数码管显示模块、消抖模块。由于需要用按键V16作为时钟输入,为保证实验效果,调用实验二中应用的消抖模块,对时钟clk输入信号进行消抖。 b)对于并行数据转串行数据模块输入输出端口说明: i.clk-----系统时钟,由按键V16通过消抖模块后提供。 ii.din8-----8bits输入数据,需在时钟控制下,串行输出。 iii.reset----系统复位信号,当reset=1’b1时,系统输出复位,否则系统正常工作。 iv.din----------1bit输出信号。 该并行模块的设计如下: module xulie_u1(clk,din8,reset,din ); input clk; input[7:0] din8; input reset; output din; parameter s0 = 3'b000, s1 = 3'b001, s2 = 3'b010, s3 = 3'b011, s4 = 3'b100, s5 = 3'b101, s6 = 3'b110, s7 = 3'b111; reg[2:0] cur_state,next_state; reg din; always (posedge clk or posedge reset) if(reset) cur_state <= s0; else cur_state <= next_state; always (cur_state or din8 or din ) begin case (cur_state) s0 : begin din <= din8[7]; next_state <= s1; end s1 : begin din <= din8[6]; next_state <= s2; end

相关文档
相关文档 最新文档