EDA 课程设计M序列及相关检测器
EDA实验报告实验三、序列检测器的设计

实验三、序列检测器的设计一、预习内容1、预习序列发生器和检测器的基本工作原理;2、画出实验原理草图;3、写出实验的基本步骤和源程序。
二、实验目的1、掌握序列检测器的工作原理;2、学会用状态机进行数字系统设计。
三、实验器材PC机一台、EDA教学实验系统一台、下载电缆一根(已接好)、导线若干四、实验要求1、检测连续4个‘1’的状态机,画出状态转移图,并写出VHD代码;(必做部分)2、了解试验箱,完成数据分配器的硬件实验。
(实验一的硬件操作,首次使用请谨慎使用试验箱!)3、检测“10001110”序列,当检测到该序列后输出为‘1’。
(此部分选作)五、实验原理和实验内容1、序列发生器原理(此部分选作)在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。
本实验要求产生一串序列“10001110”。
该电路可由计数器与数据选择器构成,其结构图如图6-1所示,其中的锁存输出的功能是为了消除序列产生时可能出现的毛刺现象:图6-1 序列发生器结构图2、序列检测器的基本工作过程:序列检测器用于检测一组或多组由二进制码组成的脉冲序列信号,在数字通信中有着广泛的应用。
当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
状态图如图6-2所示:图6-2 序列检测器状态图3、状态机的基本设计思想:在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设计效率,增加程序的可读性,减少错误的发生几率。
同时,状态机的设计方法也是数字系统中一种最常用的设计方法。
一般来说,标准状态机可以分为摩尔(Moore)机和米立(Mealy)机两种。
EDA设计——序列检测器的设计PPT课件

EDA课程设计
设计题目:序列检测器的设计
指导老师:张广忠 张薇 组员:宋成发 克彩霞 彭亚伟
2021/3/9
授课:XXX
1
序列检测器的介绍
• 序列检测器用于检测一组或多组由二进制 组成的脉冲序列信号,在数字通信中有着广泛 的应用。当序列检测器连续收到一组串行二进 制码后,如果这组码与检测器中预先设置的8 位二进制码相同,则输出1,否则输出0。由于 这种检测器的关键在于正确码的收到必须记住 前一次的正确码及正确序列,直到在连续的检 测中所收到的每一位码都与预置的对应码相同。 在检测过程中,任何一位不相等都将导致回到 初始状态重新开始检测。
2021/3/9
授课:XXX
2
附加功能
• 本次设计中不但完成了对VHDL程序中预设的 序列检测。我们组还设计:数码显示被检测数 (十六进制);并对被检测数据(二进制)统 计其连续0的个数,规定该被检测数据中只能 有一串连0出现,即8位串行数据中0是相邻的。 否则,认为数据无效,连0计数器清0,并且给 出错误提示信号,即D8点亮,表示该被检测数 据不合法!
2021/3/9
授课:XXX
4
顶层设计原理图
2021/3/9
授课:XXX
5
Hale Waihona Puke 连续0数统计仿真图2021/3/9
授课:XXX
6
序列检测仿真图
2021/3/9
授课:XXX
7
顶层仿真图
2021/3/9
授课:XXX
8
2021/3/9
授课:XXX
9
EDA序列检测器设计课程设计

EDA序列检测器设计课程设计一、课程目标知识目标:1. 让学生掌握EDA(电子设计自动化)序列检测器的基本原理与设计流程;2. 使学生了解并掌握数字逻辑设计的基本方法,以及Verilog HDL硬件描述语言;3. 帮助学生理解同步时序电路的工作原理,掌握序列检测器的功能与实现。
技能目标:1. 培养学生运用Verilog HDL进行数字电路设计与仿真能力;2. 培养学生运用EDA工具(如ModelSim、Quartus II等)进行电路仿真、调试的能力;3. 提高学生分析问题、解决问题的能力。
情感态度价值观目标:1. 培养学生积极探究、主动学习的兴趣和热情,增强学生的自主学习能力;2. 培养学生的团队合作意识,提高沟通与协作能力;3. 增强学生的创新意识,鼓励学生勇于尝试、善于实践。
本课程针对电子工程及相关专业高年级学生,结合课程性质、学生特点和教学要求,将课程目标分解为具体的学习成果。
在教学过程中,注重理论与实践相结合,以实际工程项目为背景,引导学生通过自主学习、团队合作、实践创新等方式,达到本课程的教学目标。
通过本课程的学习,使学生具备一定的EDA 技术基础,为未来从事电子设计及相关领域工作打下坚实基础。
二、教学内容1. 序列检测器原理:介绍序列检测器的基本概念、功能、分类及其在数字系统中的应用。
- 教材章节:第三章第二节- 内容:同步时序电路原理,序列检测器设计方法。
2. Verilog HDL基础:讲解Verilog HDL硬件描述语言的基本语法、数据类型、运算符和建模方法。
- 教材章节:第四章- 内容:模块化设计,行为描述与结构描述,组合逻辑与时序逻辑描述。
3. 序列检测器设计:结合实例,分析序列检测器的设计方法与步骤。
- 教材章节:第五章第三节- 内容:Mealy型与Moore型序列检测器设计,状态编码,状态转移图。
4. EDA工具应用:介绍ModelSim、Quartus II等EDA工具的使用,进行电路仿真与调试。
EDA课程设计_2

EDA课程设计实验1多功能数字电子钟1.1 实验目的1.2 实验仪器与器材1.EDA开发软件一套2.微机一台3.实验开发系统一台4.打印机一台5.其他器件与材料若干1.3 实验说明系统输入:系统状态及校时、定时转换的控制信号为k、set;时钟信号clk,采用1024Hz;系统复位信号为reset。
输入信号均由按键产生。
系统输出:LED显示输出;蜂鸣器声音信号输出。
多功能数字钟系统功能的具体描述如下:计时:正常工作状态下,每日按24 h计时制计时并显示,蜂鸣器无声,逢整点报时。
校时:在计时显示状态下,按下“set键”,进入“小时”校准状态,之后按下“k键”则进入“分”校准状态,继续按下“k键”则进入“秒复零”状态,第三次按下“k键”又恢复到正常计时显示状态。
1.“小时”校准状态:在“小时”校准状态下,显示“小时”的数码管闪烁,并以4Hz的频率递增计数。
2.“分”校准状态:在“分”校准状态下,显示“分”的数码管闪烁,并以4Hz的频率递增计数。
3.“秒”复零状态:在“秒复零”状态下,显示“秒”的数码管闪烁并复零。
整点报时:蜂鸣器在“59”分钟的第"51”、“53”、“55"、“57”秒发频率为512Hz的低音,在“59”分钟的第“59”秒发频率为1024Hz的高音,结束时为整点。
显示:要求采用扫描显示方式驱动6个LED数码管显示小时、分、秒。
闹钟:闹钟定时时间到,蜂鸣器发出周期为1s的“滴”、“滴”声,持续时间为10s;闹钟定时显示。
闹钟定时设置:在闹钟定时显示状态下,按下“set键”,进入闹钟的“时”设置状态,之后按下“k键”进入闹钟的“分”设置状态,继续按下“k键”则进入“秒”设置状态,第三次按下“k键”又恢复到闹钟定时显示状态。
1.闹钟“小时”设置状态:在闹钟“小时”设置状态下,显示“小时”的数码管闪烁,并以4Hz的频率递增计数。
2.闹钟“分”设置状态:在闹钟“分”设置状态下,显示“分”的数码管闪烁,并以4Hz的频率递增计数。
EDA课程ROM扩展巴克码检测器

控制系统
用于检测控制系统的异 常情况,提高控制系统
的可靠性和稳定性。
医疗设备
用于检测医疗设备中的 异常情况,提高医疗设 备的安全性和可靠性。
优势与局限性
优势
ROM扩展巴克码检测器具有高可靠 性、高稳定性、高抗干扰能力等优点 ,能够有效地检测和纠正信号中的错 误,提高系统的性能和可靠性。
局限性
由于ROM扩展巴克码检测器的实现较 为复杂,且需要预先定义检测码,因 此在某些情况下可能无法适应快速变 化的环境和信号。
软件实现
软件算法设计
根据巴克码检测器的算法 需求,设计合理的软件算 法,包括编码、解码和检 测等算法。
编程语言选择
选择适合的编程语言,如 C/C或Verilog等,进行软 件算法的实现。
代码优化与调试
对实现的算法进行优化和 调试,确保软件的正确性 和性能。
测试与验证
测试环境搭建
搭建适合的测试环境,包括硬件测试平台和软件测试 平台。
ROM扩展巴克码检测器可根据不同的 应用场景和需求进行灵活配置,具有 广泛的应用前景。
该检测器具有较高的检测效率和准确 性,能够在较短时间内完成信号的解 码和纠错。
对未来研究的展望
01
深入研究其他类型的巴克码
除了ROM扩展巴克码检测器,还有其他类型的巴克码,如Reed-
Solomon码等。未来可以进一步研究这些巴克码的性能和应用。
高速化
随着信号传输速率的不断提高,ROM扩展巴克码检测器 的高速化将成为未来的发展方向,能够适应高速信号的检 测和纠正需求。
05
结论
总结课程收获
掌握ROM扩展巴克码检测器的原理
01
通过学习,我深入理解了ROM扩展巴克码检测器的工作原理,
EDA实验报告——序列检测器

七、状态图输入法实现序列检测器1、基本知识点序列检测器原理。
状态图输入法。
2、实验设备(1)PC机一台。
(2)DDA系列数字系统实验平台。
(3)QuartusⅡ配套软件。
3、实验概述序列检测器序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。
接收的序列号与检测器预设值比较,相同则输出为1,否则输出为0.4、实验内容及步骤用状态图输入法实现序列检测器。
1,新建工程,工程文件夹名称为exp_detect3,工程名称和顶层实体名称均为exp_detect3,选择目标器件为EPF10K20TI144-4.2,状态图输入:选择菜单File——New——State Machine File命令,打开State Machine Editor窗口,选择Tools——State MachineWizard命令,弹出如下状态机创建向导对话框:点击OK,进入下一个页面,如下所示:在上图中选择复位Reset信号为异步,高电平有效,输出端午寄存器,点击Next,进入下图:在四个选框里分别如上图填入名称和控制信号。
进入下一个页面:如上设置后,进入下一个页面,点击finish,完成。
关闭状态机向导,生成所需的状态机,做适当调整,如下图所示:3,保存该设计文件为exp_detect3.smf,并添加到工程文件夹。
4,选择菜单Tools——Generate HDL File命令,打开对话框,选择VHDL,点击OK,分析成功后则自动生成exp_detect3.vhd。
代码如下:LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY exp_detect3 ISPORT (clock : IN STD_LOGIC;reset : IN STD_LOGIC := '0';din : IN STD_LOGIC := '0';z : OUT STD_LOGIC);END exp_detect3;ARCHITECTURE BEHAVIOR OF exp_detect3 ISTYPE type_fstate IS (s0,s1,s2,s3,s4,s5,s6);SIGNAL fstate : type_fstate;SIGNAL reg_fstate : type_fstate;BEGINPROCESS (clock,reset,reg_fstate)BEGINIF (reset='1') THENfstate <= s0;ELSIF (clock='1' AND clock'event) THENfstate <= reg_fstate;END IF;END PROCESS;PROCESS (fstate,din)BEGINz <= '0';CASE fstate ISWHEN s0 =>IF ((din = '1')) THENreg_fstate <= s1;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s0;END IF;WHEN s1 =>IF ((din = '1')) THENreg_fstate <= s2;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s1;END IF;WHEN s2 =>IF ((din = '1')) THENreg_fstate <= s3;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s2;END IF;WHEN s3 =>IF ((din = '1')) THENreg_fstate <= s3;ELSIF (NOT((din = '1'))) THENreg_fstate <= s4;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s3;END IF;WHEN s4 =>IF ((din = '1')) THENreg_fstate <= s1;ELSIF (NOT((din = '1'))) THENreg_fstate <= s5;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s4;END IF;WHEN s5 =>IF ((din = '1')) THENreg_fstate <= s6;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inference ELSEreg_fstate <= s5;END IF;WHEN s6 =>IF ((din = '1')) THENreg_fstate <= s2;ELSIF (NOT((din = '1'))) THENreg_fstate <= s0;-- Inserting 'else' block to prevent latch inferenceELSEreg_fstate <= s6;END IF;IF (NOT((din = '1'))) THENz <= '1';-- Inserting 'else' block to prevent latch inferenceELSEz <= '0';END IF;WHEN OTHERS =>z <= 'X';report "Reach undefined state";END CASE;END PROCESS;END BEHAVIOR;5,对代码进行编译。
EDA序列检测器实验报告

《实验七序列检测器实验》实验报告杨丽斌计科二班学号:20080810218一、实验内容及相关描述:设计一个1110010 序列检测器,即检测器连续收到一组串行码“1110010”后,输出检测标志1,否则输出0。
代码序列检测器是一种同步时序电路,它用于搜索,检测输入的二进制代码串中是否出现指定的代码序列,001 序列检测器的原理图如下:CPX 0 1 0 0 1 0 1 0 1 1 0 1Y 0 0 0 0 1 0 0 0 0 0 0 0二、设计思路:本实验依然采用模块化的设计方法,用VHDL语言设计每一个模块,在顶层图上用图形化模式调用相应模块,组成相关的功能总共用到的模块有:1、分频器:将时钟信号进行十分频2、串行并出序列检测器3、串行并行并出序列检测器4、时钟信号扫描端口:用于扫描时钟信号,并根据信号使能相应的数码管5、数码管驱动模块:用于选择数码管6、其他小模块三、相关主要子模块的设计:1、分频器(clk_div):将时钟信号进行十分频:(1)、VHDL语言(2)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns2、串行并出序列检测器:用时序电路设计方法,先做出其状态转移表,再根据状态转移表编写VHDL程序(1)、状态转移表:(2)VHDL语言程序:功能说明:根据所画的状态转移表,编写状态转移的VHDL语言,当输入的串行序列为:1110010时。
在时钟上升沿,输出Q变为1,并行输出的序列sequence为串行序列的并行输出(3)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns3、并入置数的序列检测器:设计说明;该序列检测器使用的是比较器的原理,(1)VHDL语言:功能描述:该序列检测器使用的是比较器的原理,在使能端en有效时,当输入序列为1110010时,输出Q=1,其他情况下Q=0(2)波形仿真图波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns4、时钟信号扫描模块:(1)VHDL语言:功能描述:用高频时钟信号作为扫描信号,将时钟信号通过计数器计数之后,以7个信号作为一次循环,从而将信号每次一位din扫描到数码管上(2)、波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns5、数码管驱动模块用于将时钟信号计数,从而选择驱动相应的数码管(1)VHDL语言:功能说明:通过设置7个状态,以时钟信号为标记,时钟信号到来时在每一个状态,选择驱动相应的数码管(2)波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns7、其他小模块:(1)、序列寄存器功能说明:在串行比较时将序列用用寄存器存储,并通过时钟信号的驱动依次输出波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns(2)、串行、并行检测器选择模块:VHDL语言:波形仿真:波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns四、顶层图:1、顶层图电路设计:功能描述及主要管脚说明:重要的管脚输入:din[6..0]:并行输入数据的序列比较En:串行输入数据Clk:数据输入时钟信号(低频)Clk2:扫描时钟信号(高频)Cho:串行、并行选择(0为串行,1为并行)输出:A-G:数码管管脚S[6..0]:连接相应数码管Q:序列检测结果(1为检测到序列1110010,0为没有检测到)2、波形仿真(注:由于时间端总长过小,仿真时会将分频模块先去掉以便能很好的观察到仿真结果,在器件测试时再加上分频模块):波形仿真参数设置:网格时间:100ns,总时间:3us;时钟信号长度:100ns五、实验总结:这次实验的设计、以及相应的编写VHDL语言有以前做计算器的经验,很多模块还是很相似的,因此编写VHDL语言及相关的模块设计除了花了一点时间、并没有遇到多大的阻碍,但是在器件验证过程中却出现了一些问题:主要是高低频时钟信号选择的问题,在这个问题上花了比较多的时间。
EDA实验报告 计数器及序列检测器

EDA实验报告通信工程二班李桐20100820212实验目的:1.计数器的原理及应用。
2.混合模式的工程设计法的应用。
3.数码管扫描电路的应用。
4.序列检测器原理。
5.Mealy型与Moore型状态机原理。
6.状态图输入法。
实验原理:1.计数器是一种常用的可统计时钟脉冲个数的时序逻辑器件。
计数器中的“数”是触发器的状态组合,即编码。
计数器循环一次所包含的状态总数就称作模。
本次试验采用VHDL语言直接构建一个202进制计数器。
2.状态机是由一组状态、一个初始状态、输入输出和状态转换函数组成的时序电路。
状态机主要用来控制电路的状态转移,针对不同类型的状态机,输出可以由现态确定,也可以由现态及次态共同确定。
按状态机的信号输出方式分类,可分为Mealy型状态机和Moore型状态机。
Mealy型状态机,次态和输出均取决于现态和当前输入;Moore型状态机,下一状取决于当前状态和当前输入,但其输出仅取决于当前状态。
序列检测器是用于从二进制码流中检测出一组特定序列信号的时序电路。
接受的序列信号与检测器预设值变焦,相同则输出为1,否则输出为 0。
实验具体步骤:1.202进制加法计数器(1).VHDL结构式描述顶层(调用了202进制加法计数器与七段译码器)library ieee;use ieee.std_logic_1164.all;entity cnt212_7seg isport( clk,clrn,en,scan_clk:in std_logic;cout:out std_logic;seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end cnt212_7seg;architecture arch of cnt212_7seg iscomponent cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end component;component scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end component;signal wdatab,wdatas,wdatag:std_logic_vector(3 downto 0);begincnt_212:cnt212 port map(clk,clrn,En,cout,wdatab,wdatas,wdatag);scan_led3:scan_led3_vhd port map(scan_clk,(not clrn),wdatab,wdatas,wdatag,seg7,wei); end arch;(2).VHDL语言描述学号计数器(调用了10进制加法计数器)library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity cnt212 isport( clk,clrn,En:in std_logic;cout:out std_logic;b,s,g:out std_logic_vector(3 downto 0));end cnt212;architecture arch of cnt212 iscomponent exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end component;component dffport(d,clk,clrn:in std_logic;q:out std_logic);end component;signal couts,coutg,coutb,q1,q2,lkaclr:std_logic;signal regb,regs,regg:std_logic_vector(3 downto 0);begincntg:exp_cnt10 port map(clk,(clrn and lkaclr),En,regg,coutg);dff1:dff port map(coutg,clk,clrn,q1); --利用D触发器实现进位cnts:exp_cnt10 port map(q1,(clrn and lkaclr),En,regs,couts);dff2:dff port map((couts and coutg),clk,clrn,q2); --利用D触发器实现进位cntb:exp_cnt10 port map(q2,(clrn and lkaclr),En,regb,coutb);lkaclr<= '0' when ( regb=x"2" and regs=x"1" and regg=x"2") else --在此实现清零'1' ;cout<= '1' when ( regb=x"2" and regs=x"1" and regg=x"1") else --在此使进位为'1''0';b<=regb;s<=regs;g<=regg;end arch;(3).VHDL语言描述10进制加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity exp_cnt10 isport(clk,clrn,En:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end exp_cnt10;architecture arch of exp_cnt10 issignal cqi:std_logic_vector(3 downto 0);beginprocess(En,clk,clrn,cqi)beginif clrn='0' thencqi<="0000";elsif clk'event and clk='1' thenif En='1' thenif cqi<9 thencqi<=cqi+1;elsecqi<="0000";end if;end if;end if;if cqi=9 thencout<='1';elsecout<='0';end if;cq<=cqi;end process;end arch;(4).VHDL语言描述七段译码器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity scan_led3_vhd isport(scan_clk,cnt_aclr:in std_logic;datab,datas,datag:in std_logic_vector(3 downto 0);seg7:out std_logic_vector(6 downto 0);wei:out std_logic_vector(2 downto 0));end scan_led3_vhd;architecture rtl of scan_led3_vhd issignal seg_wire:std_logic_vector(3 downto 0);signal wei_wire:std_logic_vector(2 downto 0);type st is (k_L,k_R,ad_L);signal st_nxt:st;beginscan_st:process(scan_clk,cnt_aclr,st_nxt)beginif cnt_aclr='1' thenst_nxt<=k_L;elsif(scan_clk'event and scan_clk='1') thencase st_nxt iswhen k_L=> st_nxt<=k_R;when k_R=> st_nxt<=ad_L;when ad_L=> st_nxt<=k_L;end case;end if;end process;scan_o:process(st_nxt,datab,datas,datag)begincase st_nxt iswhen k_L=>seg_wire<=datab;wei_wire<="100";when k_R=>seg_wire<=datas;wei_wire<="010";when ad_L=>seg_wire<=datag;wei_wire<="001";end case;end process;seg7<="1111110" when seg_wire=x"0" else"0110000" when seg_wire=x"1" else"1101101" when seg_wire=x"2" else"1111001" when seg_wire=x"3" else"0110011" when seg_wire=x"4" else"1011011" when seg_wire=x"5" else"1011111" when seg_wire=x"6" else"1110000" when seg_wire=x"7" else"1111111" when seg_wire=x"8" else"1111011" when seg_wire=x"9" else"1110111" when seg_wire=x"a" else"0011111" when seg_wire=x"b" else"0001101" when seg_wire=x"c" else"0111101" when seg_wire=x"d" else"1001111" when seg_wire=x"e" else"1000111" when seg_wire=x"f" else"0000000" ;wei<=wei_wire;end rtl;(5).顶层RTL电路(6).202进制加法计数器RTL电路(7).顶层功能仿真波形图(8).202进制加法计数器功能仿真波形图如图所示成功实现了202进制(9).管脚分配及下载验证2.序列检测器(1).1110010序列检测器的VHDL设计状态转换表现态输入0时次态/输出输入1时次态/输出S0 S0/0 S1/0S1 S0/0 S2/0S2 S0/0 S3/0S3 S4/0 S3/0S4 S5/0 S1/0S5 S0/0 S6/0S6 S0/1 S2/0(2).用状态图输入法实现序列检测器选择复位reset信号为异步,高电平有效,输出端无寄存器。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录任务书 (1)第一章系统分析 (2)1.1QuartusII简介 (2)第二章设计容及要求 (3)2.1设计的目的及主要任务 (3)2.1.1设计目的 (3)2.1.2 设计容依据 (3)2.2设计思想 (3)第三章设计原理与模块分析 (4)3.1 序列检测器介绍 (4)3.2 序列检测器设计原理 (4)3.3 序列检测器模块 (4)3.3.1 分频器模块 (4)3.3.2 序列输入模块 (5)3.3.3 序列检测模块 (5)3.4顶层文件 (6)第四章电路仿真与分析 (8)4.1 单元模块的仿真与分析 (8)4.1.1 分频器模块的仿真与分析 (8)4.1.2 序列信号输入模块的仿真与分析 (8)4.1.3 序列检测模块的仿真与分析 (8)4.2 顶层电路的仿真与分析 (9)第五章电路的硬件调试 (10)参考文献 (11)附录 (11)城建大学课程设计任务书系专业班级课程设计名称:EDA技术及应用B设计题目:M序列及相关检测器完成期限:自年月日至年月日共 1 周一.课程设计依据在掌握常用数字电路原理和技术的基础上,根据EDA技术及应用课程所学知识,利用硬件描述语言(VHDL或VerilogHDL),EDA软件(QuartusⅡ)和硬件开发平台(达盛试验箱CycloneⅡFPGA)进行初步数字系统设计。
二.课程设计容设计八位线性反馈移位寄存器产生伪随机序列,串行输出9600bit/s速率伪随机码用做测试数据,序列检测器对该序列进行10101010序列检测,连接伪随机序列发生器和序列检测器构成完整系统,如果检测到该码,则输出1指示灯亮,否则输出0。
要求采用由状态机或串行滑窗方法检测器。
三.课程设计要求1. 要求独立完成设计任务。
2. 课程设计说明书封面格式要求见《城建大学课程设计教学工作规》附表13. 课程设计的说明书要求简洁、通顺,计算正确,图纸表达容完整、清楚、规。
4. 测试要求:根据题目的特点,采用相应的时序仿真或者在实验系统上观察结果。
5. 课设说明书要求:1) 说明题目的设计原理和思路、采用方法及设计流程。
2) 对各子模块的功能以及各子模块之间的关系作明确的描述。
3) 对实验和调试过程,仿真结果和时序图进行说明和分析。
4) 包含系统框图、电路原理图、HDL设计程序、仿真测试图。
指导教师(签字):教研室主任(签字):批准日期:第一章系统分析1.1QuartusII简介Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三放EDA工具。
Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
但Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在Quartus II 中包含了许多设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法,所以Quartus II替代该公司早期的Maxplus II软件。
Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
Altera的Quartus II可编程逻辑软件属于第四代PLD 开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
支持MAX7000/MAX3000等乘积项器件。
第二章设计容及要求2.1设计的目的及主要任务2.1.1设计目的学会在QuartusⅡ环境中运用VHDL语言设计方法构建具有一定逻辑功能的模块,并能运用图形设计方法完成顶层原理图的设计。
掌握序列信号检测器的原理和程序的编写以及在CPLD中的实现方法。
2.1.2 设计容依据在掌握常用数字电路原理和技术的基础上,根据EDA技术及应用课程所学知识,利用硬件描述语言(VHDL或VerilogHDL),EDA软件(QuartusⅡ)和硬件开发平台(达盛试验箱CycloneⅡFPGA)进行初步数字系统设计。
设计八位线性反馈移位寄存器产生伪随机序列,串行输出9600bit/s速率伪随机码用做测试数据,序列检测器对该序列进行10101010序列检测,连接伪随机序列发生器和序列检测器构成完整系统,如果检测到该码,则输出1指示灯亮,否则输出0。
要求采用由状态机或串行滑窗方法检测器。
2.2设计思想本次课程设计在QuartusⅡ环境中对序列信号检测器的各个部分利用VHDL这一硬件描述语言来设计各个模块。
整个电路包括分频器模块、序列输入模块、序列检测模块[6]。
而整个设计的核心部分就在序列检测模块,该模块利用状态机来编写程序。
随后运用QuartusⅡ中的仿真功能对各个模块进行仿真,从仿真的结果中分析程序的正确性。
待所有模块的功能正确之后,运用原理图搭建顶层电路并进行整体仿真实现整体的功能,最后再在实验箱上检验设计的正确与否,并输出标志信号。
第三章设计原理与模块分析3.1 序列检测器介绍序列检测器就是将一个指定序列从数字码流中识别出来。
序列检测器在数据通讯,雷达和遥测等领域中用与检测步识别标志。
它是一种用来检测一组或多组序列信号的电路。
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
3.2 序列检测器设计原理序列信号检测器是具有能识别任意一串二值信号中某特殊码组功能的逻辑电路。
通过输入任意一组想要检测的序列信号,通过状态转移这一部分的检测,来识别这组序列。
序列信号检测电路在序列信号正常工作时,如果检测到待测码组,则电路输出识别信号,本次设计中使用一个发光二极管LED灯来表示,灯亮则表示检测到正确的序列,灯灭表示检测的序列错误。
设计序列信号检测器的关键在于获取正确的状态转移图。
为了减少错误检测的概率,凡是序列信号检测器都应该预置起始状态。
3.3 序列检测器模块序列信号检测器一共有三个主模块,分频模块,序列信号输入模块,序列检测模块。
原理框图如下图所示。
图1 序列检测器系统原理框图3.3.1 分频器模块由于实验箱上的时钟信号是20MHz,对于本实验频率过大,需要一个分频模块得到我们需要的频率。
分频模块的逻辑图如下。
图2 分频器逻辑图3.3.2 序列输入模块通过设计一个序列输入模块,将所需要检测的序列输入检测模块进行检测,本次所需检测的序列是十位二进制码,设计十一个输入端口,一个清零端rst,十个序列输入口,在实验箱上通过十一个拨码开关控制。
其逻辑图如下图所示。
图3 序列输入逻辑图3.3.3 序列检测模块设计要求序列信号检测器能够从收到的一组串行码流中检出同步码组,我们预先设定该码组为1110101101,同时输出检测结果标志信号,即LED灯亮。
该检测模块有三个输入信号,即时钟信号输入端CLK,清零端RST,预设初始状态,序列输入端DIN,一个输出信号Q输出检测结果。
图4 序列检测逻辑图输入信号DIN是一组串行二进制码,输出信号Q是检测结果标志信号,若检测到预设码组则其值为1,否则为0。
检测器每收到一个符合要求的串行码,就需要一个状态进行记忆,因为要求检测的同步码组有10位,因此需要10个状态(S1~S10)。
此外,检测器还要预置初始状态,根据设计要求,设检测器的初始状态为S0。
我们定义检测过程中的状态S0~S10如:S0=0;S1=1;S2=11;S3=111;S4=1110;S5=11101;S6=111010;S7=1110101;S8=11101011;S9=111 010110;S10=1110101101。
序列检测器的状态转换图如下图所示。
图中S0/0表示序列状态机的状态为S0,输出为0。
图5 序列检测器状态转换图从图中可以看出,当序列检测器的状态为S0,如果输入信号为1,则状态装换为S1,否则维持原状态;当序列检测器状态为S1,如果输入信号为1,则状态装换为S2,否则转换为S0;当序列检测器的状态为S2,如果输入信号为1,则状态转换为S3,否则转换为S0;当序列检测器的状态为S3,如果输入信号为0,则状态转换为S4,否则保持原态S3;当序列检测器的状态为S4,如果输入信号为1,则状态转换为S5,否则转换为S0;当序列检测器的状态为S5,如果输入信号为0,则状态转换为S6,否则转换为S2;当序列检测器的状态为S6,如果输入信号为1,则状态转换为S7,否则转换为S0;当序列检测器的状态为S7,如果输入信号为1,则状态转换为S8,否则转换为S0;当序列检测器的状态为S8,如果输入信号为0,则状态转换为S9,否则转换为S3;当序列检测器的状态为S9,如果输入信号为1,则状态转换为S10,否则转换为S0;当序列检测器的状态为S10,此时输出信号为1,如果输入信号为0,则状态转换为S0,否则转换为S1。
3.4顶层文件将各个模块完成以后,设置顶层文件,根据系统的原理框图将各个模块连接起来。
按已经确立的层次化设计思路,在图形编辑中调入前面的层次化设计方案中所设计的底层的元件符号div.sym、xlsr.sym、xljc.sym,并加入相应的输入输出引脚与辅助元件。
完成序列检测器的顶层原理图搭建,最终得到的顶层电路原理图如下图所示。
图6 序列信号检测器顶层电路原理图第四章电路仿真与分析4.1 单元模块的仿真与分析4.1.1 分频器模块的仿真与分析实验箱上20MHz频率输入分成较小的时钟频率,如10Hz,1Hz等。
所设计的分频器的仿真波形如下图所示。