八位序列检测器设计.docx
《八位序列检测器设计.docx》由会员分享,可在线阅读,更多相关《八位序列检测器设计.docx(8页珍藏版)》请在冰豆网上搜索。
八位序列检测器设计
八位序列检测器设计
班级:
1302012
学号:
姓名:
郭春晖
1、设计说明
使用quartus软件进行仿真和验证,并且还可以检测其他的序列,只需要修改一部分代码就可以实现。
二、方案
工作原理:
基于FPGA的多路脉冲序列检测器的设计方案,使用VHDL语言设计时序逻辑电路,先设计序列发生器产生序列:
01010;再设计序列检测器,检测序列发生器产生序列,若检测到信号与预置待测信号相同,则输出“1”,否则输出“0”,并且将检测到的信号的显示出来。
三、单元模块设计
1、序列信号发生器
序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号。
利用状态机设计,首先定义一个数据类型FSM_ST它的取值为st0到st15的16个状态。
REG
s0
s1
s2
s3
s4
s5
s6
s7
Q
1
0
1
1
0
1
0
0
REG
s8
s9
s10
s11
s12
s13
s14
s15
Q
0
1
1
0
1
0
1
0
序列信号发生器的代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYSHKIS
PORT(CLK,RST:
INSTD_LOGIC;CO:
OUTSTD_LOGIC);
ENDSHK;
ARCHITECTUREbehavOFSHKIS
TYPEFSM_STIS(s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);
SIGNALREG:
FSM_ST;
SIGNALQ:
STD_LOGIC;
BEGIN
PROCESS(CLK,RST)
BEGIN
IFRST='1'THENREG<=s0;Q<='0';
ELSIFCLK'EVENTANDCLK='1'THEN
CASEREGIS
WHENs0=>Q<='1';REG<=s1;WHENs1=>Q<='0';REG<=s2;
WHENs2=>Q<='1';REG<=s3;WHENs3=>Q<='1';REG<=s4;
WHENs4=>Q<='0';REG<=s5;WHENs5=>Q<='1';REG<=s6;
WHENs6=>Q<='0';REG<=s7;WHENs7=>Q<='0';REG<=s8;
WHENs8=>Q<='0';REG<=s9;WHENs9=>Q<='1';REG<=s10;
WHENs10=>Q<='1';REG<=s11;WHENs11=>Q<='0';REG<=s12;
WHENs12=>Q<='1';REG<=s13;WHENs13=>Q<='0';REG<=s14;
WHENs14=>Q<='1';REG<=s15;WHENs15=>Q<='0';REG<=s0;
WHENOTHERS=>REG<=s0;Q<='0';
ENDCASE;
ENDIF;
ENDPROCESS;CO<=Q;
ENDbehav;
转化成可调用的元件:
波形仿真如下:
2、序列检测器
脉冲序列检测起可用于检测一组或多组二进制码组成的脉冲序列信号,当序列检测器连续接收到一组穿行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确的序列,直到连续的检测中所收到的每一位码都与预置数的对应码相同。
在检测过程中,任何一位不相等将回到初始状态重新开始检测。
序列检测器的代码如下:
libraryieee;
useieee.std_logic_1164.all;
entitySCHK1is
port(datain,clk:
instd_logic;
t:
instd_logic_vector(4downto0);
q:
outstd_logic;
cq:
outstd_logic_vector(4downto0));
endSCHK1;
architecturert1ofSCHK1is
signalreg:
std_logic_vector(4downto0);
begin
process(clk)
variablet1:
std_logic_vector(4downto0);
begin
ifclk'eventandclk='1'then
reg(0)<=datain;
reg(4downto1)<=reg(3downto0);
endif;
t1:
=t;
ifreg=t1thenq<='1';elseq<='0';
cq<=reg;
endif;
endprocess;
endrt1;
可调用的元件:
图3.3
波形仿真如下:
3、计数器
利用序列检测器产生的信号(1和0)作为计数器模块的时钟信号,产生的信号0、1变化,形成类似的CLK信号,实现计数器计数。
计数器的代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,EN,RST:
INSTD_LOGIC;Q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q2:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:
OUTSTD_LOGIC);
ENDENTITYCOUNT;
ARCHITECTUREONEOFCOUNTISBEGIN
PROCESS(CLK,EN,RST)
VARIABLECQI:
STD_LOGIC_VECTOR(7DOWNTO0);
BEGIN
IFRST='1'THENCQI:
=(OTHERS=>'0');
ELSIFCLK'EVENTANDCLK='1'THEN
IFEN='1'THEN
IFCQI<153THEN
IFCQI(3DOWNTO0)=9THENCQI:
=CQI+7;--高位进位
ELSECQI:
=CQI+1;
ENDIF;
ELSECQI:
=(OTHERS=>'0');
ENDIF;
ENDIF;
ENDIF;
IFCQI=153THENCOUT<='1';
ELSECOUT<='0';
ENDIF;
Q1<=CQI(3DOWNTO0);Q2<=CQI(7DOWNTO4);
ENDPROCESSCOUNT;ENDARCHITECTUREONE;
可调用的元件:
波形仿真如下:
4、顶层文件设计
通过前面的准备,我们得到了3个模块,即序列信号发生器、序列检测器、计数器。
在此,我们运用原理图法来生成顶层实体。
即将上述3个模块,通过我们的设计软件,生成可以移植,调用的原理图文件,在将其在顶层设计中直接调用即可。
本次设计生成的顶层实体如下图所示:
四波形仿真与验证
1、时序仿真
置入待检测序列:
仿真结果:
2、管脚连接
NodeName
Location
1
count[3]
PIN_J2
2
count[2]
PIN_J3
3
count[1]
PIN_H1
4
count[0]
PIN_F2
5
date[7]
PIN_J6
6
date[6]
PIN_H5
7
date[5]
PIN_H6
8
date[4]
PIN_G4
9
date[3]
PIN_G5
10
date[2]
PIN_J7
11
date[1]
PIN_H7
12
date[0]
PIN_E3
13
error
PIN_J1
3、结果分析:
输入待测序列若有检测的序列则会加一,之后继续检测。