8位序列检测器的设计要点Word格式文档下载.docx
《8位序列检测器的设计要点Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《8位序列检测器的设计要点Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
工作原理:
基于FPGA的多路脉冲序列检测器的设计方案,使用VHDL语言设计时序逻辑电路,先设计序列发生器产生序列:
1011010001101010;
再设计序列检测器,检测序列发生器产生序列,若检测到信号与预置待测信号相同,则输出“1”,否则输出“0”,并且将检测到的信号的显示出来。
系统框图如图所示:
图2.1
2.1.2方案二
工作原理:
使用proteus软件进行仿真,先画出原始状态图和状态表,在根据状态图使用D触发器,与门,或门以及非门等元件画出时序逻辑图,再根据结果译码,最后使用LED灯显示结果。
图2.2
2.2两种方案的论证与比较
第一种方案使用quartus软件进行仿真和验证,直接输入源代码比较简单方便,并且还可以检测其他的序列,只需要修改一部分代码就可以实现。
方案二使用proetus软件进行仿真和验证,需要先进行复杂的状态图分析,如果需要检测的序列过长就会造成原理图连接过于复杂,不易实现。
而且一旦原理图连接好久只能检测一种序列,如果要检测其他序列就要重新连图。
通过比较发现第一种方案明显优于第二种方案,因此选择第一种方案。
3.单元模块设计
主要介绍系统各单元模块的具体功能、电路结构、工作原理、以及各个单元模块之间的联接关系;
同时本节也会对相关电路中的参数计算、元器件选择、以及核心器件进行必要说明。
3.1序列信号发生器
序列信号是指在同步脉冲作用下循环地产生一串周期性的二进制信号。
利用状态机设计,首先定义一个数据类型FSM_ST它的取值为st0到st15的16个状态。
REG
s0
s1
s2
s3
s4
s5
s6
s7
Q
1
s8
s9
s10
s11
s12
s13
s14
s15
表3.1
序列信号发生器的代码如下:
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='
THEN
CASEREGIS
WHENs0=>
Q<
REG<
=s1;
WHENs1=>
REG<
=s2;
WHENs2=>
=s3;
WHENs3=>
=s4;
WHENs4=>
=s5;
WHENs5=>
=s6;
WHENs6=>
=s7;
WHENs7=>
=s8;
WHENs8=>
=s9;
WHENs9=>
=s10;
WHENs10=>
=s11;
WHENs11=>
=s12;
WHENs12=>
=s13;
WHENs13=>
=s14;
WHENs14=>
=s15;
WHENs15=>
WHENOTHERS=>
ENDCASE;
ENDIF;
ENDPROCESS;
CO<
=Q;
ENDbehav;
转化成可调用的元件:
图3.1
波形仿真如下:
图3.2
3.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);
ifclk'
eventandclk='
then
reg(0)<
=datain;
reg(4downto1)<
=reg(3downto0);
endif;
t1:
=t;
ifreg=t1thenq<
;
elseq<
cq<
=reg;
endif;
endprocess;
endrt1;
图3.3
图3.4
3.3计数器
利用序列检测器产生的信号(1和0)作为计数器模块的时钟信号,产生的信号0、1变化,形成类似的CLK信号,实现计数器计数。
计数器的代码如下:
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYCOUNTIS
PORT(CLK,EN,RST:
Q1:
OUTSTD_LOGIC_VECTOR(3DOWNTO0);
Q2:
COUT:
OUTSTD_LOGIC);
ENDENTITYCOUNT;
ARCHITECTUREONEOFCOUNTISBEGIN
PROCESS(CLK,EN,RST)
VARIABLECQI:
STD_LOGIC_VECTOR(7DOWNTO0);
IFRST='
THENCQI:
=(OTHERS=>
'
);
ELSIFCLK'
IFEN='
IFCQI<
153THEN
IFCQI(3DOWNTO0)=9THENCQI:
=CQI+7;
--高位进位
ELSECQI:
=CQI+1;
ELSECQI:
IFCQI=153THENCOUT<
ELSECOUT<
Q1<
=CQI(3DOWNTO0);
Q2<
=CQI(7DOWNTO4);
ENDPROCESSCOUNT;
ENDARCHITECTUREONE;
图3.5
图3.6
3.4顶层文件设计
通过前面的准备,我们已经得到了全部所需要的3个模块,即序列信号发生器、序列检测器、计数器。
在此,我们运用原理图法来生成顶层实体。
具体的实现方法是,将上述3个模块,通过我们的设计软件,生成可以移植,调用的原理图文件,在将其在顶层设计中直接调用即可。
本次设计生成的顶层实体如下图所示:
图3.7
4系统调试与验证
4.1待测序列的输入
输入检测的8位序列“11001011”程序如下:
port(din,clk,clr:
instd_logic;
pre_load:
instd_logic_vector(7downto0);
ab:
outstd_logic_vector(3downto0));
architecturebehavofSCHK1is
signalq:
integerrange0to8;
signald:
std_logic_vector(7downto0);
D<
=pre_load;
--置入待检测序列
process(clk,clr)
begin
ifclr='
thenq<
=0;
elsifclk'
caseqis
when0=>
ifdin=d(7)thenq<
=1;
elseq<
=0;
when1=>
ifdin=d(6)thenq<
=2;
when2=>
ifdin=d(5)thenq<
=3;
when3=>
ifdin=d(4)thenq<
=4;
when4=>
ifdin=d(3)thenq<
=5;
when5=>
ifdin=d
(2)thenq<
=6;
when6=>
ifdin=d
(1)thenq<
=7;
when7=>
ifdin=d(0)thenq<
=8;
whenothers=>
q<
endcase;
process(q)
ifq=8thenab<
elseab<
endif;
endbehav;
图4.1
4.2时序仿真
置入待检测序列:
图4.2
仿真结果:
图4.3
4.3结果分析:
1.根据序列检测器的输出端q可以看出,当检测器检测到串行信号与预置的序列信号相同时,q则输出“A”,没有检测到,q则输出“B”;
2.根据计数器的输出端Q1可以看出,Q1将序列检测器检测到的序列信号的数目显示出来。
3.通过仿真结果还可以看到,输出的波形出现了一些毛刺,这是因为信号在FPGA器件中通过逻辑单元连线时,一定存在延时。
延时的大小不仅和连线的长短和逻辑单元的数目有关,而且也和器件的制造工艺、工作环境等有关。
因此,信号在器件中传输的时候,所需要的时间是不能精确估计的,当多路信号同时发生跳变的瞬间,就产生了“竞争冒险”。
这时,往往会出现一些不正确的尖峰信号,这些尖峰信号就是“毛刺”。
5总结与体会
经过这次课程设计的学习,我确实学习了很多知识,真正的感受到了理论联系实际的重要性,以及这之间莫大区别,到最后看着自己的结果心里还是感到很欣慰的。
具体做了以下几项工作:
1.查找相关资料,了解EDA技术的发展及优点,同时详细分析了利用可编程逻辑器件来设计脉冲序列检测器的优势。
2.简要分析了FPJA器件的特征和结构,详细介绍了FPGA设计流程,同时详细介绍了硬件描述语言VHDL及其特点。
3.对序列检测器原理进行了详细的了解,并详细介绍了序列信号发生器、序列检测器及计数器的设计,最终完成设计的要求。
回顾起此次课程设计,自从拿到题目到完成整个编程,从理论到实践,在整整一Z周的时间,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,我把前面所学过的知识又重新温故了一遍。
6辞谢
在此次课程设计完成之际,我要向曾经给予我帮助的老师和同学表示深深的谢意,感谢老师的耐心指导和同学的帮助。
郭老师以其丰富的知识和经验指导我们的课程设计作业,从他那里我学到了很多专业知识和科学的研究方法,在电路设计过程中,我多次遇到问题,郭老师每次都耐心的讲解,使我可以及时改进并顺利完成设计,在此谨向他表示最诚挚的敬意和谢意!
其次,非常感谢同组的同学在课程设计期间给予我的帮助,他们给了我更多的支持和鼓励,让我更加自信地投入到课程设计中,使得本次的课程设计能如期完成,真的非常感谢他们。
7参考文献
[1]潘松等.EDA技术使用教程(第三版)[M].北京:
科学出版社,2006
[2]王金明,周顺.数字系统设计与VHDL[M].北京:
电子工业出版社,2010
[3]刘欲晓.EDA技术与VHDL技术[M].北京:
电子工业出版社,2009.4
[4]赵明富,李立军,等.EDA技术基础[M].北京:
北京大学出版社,2007
[5]卢毅,赖杰.VHDL与数字电路设计[M].北京:
科学出版社,2001
[6]顾斌.数字电路EDA[M].西安:
西安电子科技大学出版社,2004
[7]黄正瑾.CPLD系统设计技术入门与应用[M].北京:
电子工业出版社,2002
[8]齐亮.FPGA设计及应用[M].西安:
附录1