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

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

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

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

-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIAN

《FPGA》课程报告

设计题目:状态机实现序列检测器设计学生班级:

学生学号:

学生姓名:

指导教师:

时间:

成绩:

一、实验目的:

1. 理解有限状态机的概念;

2. 掌握有限状态机的状态图的画法及其含义

二、实验原理:

本次实验的内容是:应用有限状态机设计思路,检测输入的串行数据是否是””,本次实验由顶层文件、串行检测、并行数据转串行、数码管显示四个模块组成。

1.并行数据转串行数据模块功能是:可以异步复位,可以在时钟控制下,将并行输入数据din[7:0],按照din[7],din[6],din[5],

din[4],din[3],din[2],din[1],din[0]的顺序输出至串行检测模块的输入端口din。

2.串行检测模块:

输入信号:DIN-----1bit的串行输入数据

CLK-----同步输入时钟

CLR ------异步清零信号,当CLR=1,系统输出置0,否则,系统正常工作

输出信号: AB--------4bits数据,如果系统检测到“”这8bit的输入,AB=4’b1010,否则,AB=4’b1011.

三、实验过程:

1.首先建立一个新的工程,添加一个新的Verilog Module文件,然后写入并行数据转串行数据模块的代码,代码如下:

然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:

2.再新建一个Verilog Module文件,在其中写入串行检测模块的代码,代码如下:

然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:

3. 再新建一个Verilog Module文件,数码管显示模块的代码,代码如下:

然后执行综合,确认无误后,新建一个Test Bench WaveForm文件,进行仿真,仿真图如下:

序列信号检测器

南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合 设计□创新实验日期:实验成绩:实验三序列信号发生检测器 一、实验目的 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

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作出状态转换表及状态转换图如下:

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;

序列检测器的设计实验报告

班级:生物医学工程141班姓名:刘玉奔学号:6103413018 设计性实验项目名称序列信号发生和检测器设计 (一)实验目的 1、进一步熟悉EDA实验装置和QuartusⅡ软件的使用方法; 2、学习有限状态机法进行数字系统设计; 3、学习使用原理图输入法进行设计。 (二)设计要求 完成设计、仿真、调试、下载、硬件测试等环节,在EDA实验装置上实现一个串行序列信号发生器和一个序列信号检测器的功能,具体要求如下: 1、先用设计0111010011011010序列信号发生器,其最后6BIT数据用LED显示出来; 2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“11010”则 输出为“1”,否则输出为“0”; 3、检查检测01011,即将发生的序列最后五位改为01011,为0111010011001011 (三)主要仪器设备 1、微机1台 2、QuartusII集成开发软件1套 3、EDA实验装置1套 (四)实验步骤 主要有三个模块 1:一个设计序列信号发生器 2:一个设计序列信号检测器 3:综合两个设计,通过对模块的调用达到最终效果 (五)实验数据 --设计时间:2016.10.29 --设计者:刘玉奔 --设计内容:1、先用设计0111010011001011序列信号发生器,其最后6BIT数据用LED 显示出来; --2、再设计一个序列信号检测器,检测上述序列信号,若检测到串行序列“01011”则输出

为“1”,否则输出为“0”; --序列信号发生器部分 LIBRARY IEEE;--声明IEEE库 USE IEEE.STD_LOGIC_1164.ALL;--允许使用IEEE中程序包STD_LOGIC_1164 ENTITY serialsignalgenerator IS PORT(CLK,RST:IN STD_LOGIC; CO:OUT STD_LOGIC; LED0,LED1,LED2,LED3,LED4,LED5:OUT STD_LOGIC); END behav; 得到symbol file: 序列信号检测器: LIBRARY IEEE;--声明IEEE库 USE IEEE.STD_LOGIC_1164.ALL;--允许使用IEEE中程序包STD_LOGIC_1164 ENTITY serialsignaltest IS PORT(CLK,DIN,CLR:IN STD_LOGIC; SS:OUT STD_LOGIC; LED0,LED1,LED2,LED3,LED4:OUT STD_LOGIC);

序列检测器实验报告

序列检测器设计 实验内容: 设计一个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.1设计任务..........................................................1 1.2设计要求..........................................................1 1.2.1整体功能要求.................................................1 1.2.2测试要求.....................................................1 第二章设计思路.........................................................2 2.1数字频率计介绍....................................................2 2.2设计原理..........................................................2 2.2.1频率测量的基本原理...........................................2 2.2.2整体方框图及原理.............................................2 2.2.3序列器结构框图...............................................2 第三章模块介绍.........................................................4 3.1顶层文件模块......................................................4 3.1.1顶层文件原理.................................................4 3.1.2顶层文件模块verilog语言描述程序.............................4 3.2伪随机序列发生器模块..............................................4 3.2.1伪随机序列发生器.............................................4 3.2.2伪随机序列发生器原理.........................................5 3.2.3伪随机序列发生器模块verilog语言描述程序.....................6 3.3序列检测器模块....................................................7 3.3.1序列检测器原理...............................................7 3.3.2序列检测器模块verilog语言描述程序...........................7 第四章序列检测器的实现.................................................8 4.1序列检测器的verilog语言程序描述及仿真............................8 4.1.1序列检测器的verilog语言程序描述.............................8 4.1.2序列检测器的波形仿真.........................................9 4.2 设计中遇到的问题与解决方法.......................................10 4.2.1设计中遇到的问题.............................................10 4.2.2解决方法.....................................................10 第五章设计小结.........................................................11 5.1 心得体会..........................................................11

实验六 序列信号发生器与序列信号检测器的设计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所示:

实验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。 工程建立过程中平台设置设置如下图所示:

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;

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序列编码检测器的设计

110序列编码检测器的设计 设计一个110序列编码检测器。 设计一个序列检测电路,当检测到输入信号出现110的序列编码(按自左至右的顺序)时,电路输出为1,否则输出为0。 指导教师签名: 2008年7月 6 日 指导教师签名: 2008 年7月日 验收盖章 2008年月日 熟悉集成电路的引脚排列。 掌握各种芯片的逻辑功能及使用方法。 了解序列检测器的组成及工作原理。 熟悉序列检测器的设计和制作。 由给定的逻辑功能建立原始状态图和原始状态表。 状态简化。 状态分配。 选择触发器类型。 确定激励方程和输出方程组。 画出逻辑图,并检查自启动能力。 (1)由给定的逻辑功能建立原始状态图和原始状态表

从给定的逻辑功能可知,电路有一个输入信号A和一个输出信号Y,电路功能是对输入信号A的编码序列进行检测,一旦检测到信号A出现连续编码为110序列时,输出为1,检测到其他编码序列,则输出均为0。 设电路的初始状态为a,如图1中大箭头所指。在此状态下,电路输出Y=0,这时可能的输入有A=0和A=1两中情况。当CP脉冲相应边沿到来时,若A=0,则是收到0,应保持在状态a不变;若A=1,则转向状态b,表示电路收到一个1。当在状态b时,若输入A=0,则表明连续输入编码为10,不是110,则应回到初始状态a,重新开始检测;若A=1,则进入c,表示已连续收到两个1。在状态c时,若A=0,表示已收到序列编码110,则输出Y=1,并进入状态d;若A=1,则收到的编码为111,应保持在状态c不变,看下一个编码输入是否为A=0;由于尚未收到最后的0,故输入仍为0。在状态d,若输入A=0,则应回到状态a,重新开始检测;若A=1,电路应转向状态b,表示在收到110之后又重新收到一个1,已进入下一轮检测;在d状态下,无论A为何值,输出Y均为0。根据上述分析,可以得出原始状态图和表1所示的原始状态表。 1 )nn+1nn+1现态(S)次态/输出(S/Y)现态(S)次态/输出( S/Y)

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; //定义中间变量

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