8位序列检测器的设计要点.docx
《8位序列检测器的设计要点.docx》由会员分享,可在线阅读,更多相关《8位序列检测器的设计要点.docx(16页珍藏版)》请在冰豆网上搜索。
8位序列检测器的设计要点
八位序列检测器设计
摘要:
序列检测器多用于通信系统中对禁用码的检测,或者是对所需信号的提取,即一旦检测到所需信号就输出高电平,这在数字通信领域有广泛的应运。
本文介绍了一种采用单片PGA芯片进行脉冲序列检测器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用FPGA的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使设计的电路体积更小功能更强大。
本次课程设计设计出能够检测序列“11010011”的序列检测器,并以此来描述序列检测器的设计过程和基于FPGA的软件仿真。
最后通过QuartusII的波形输出对设计方案进行检测,在硬件调试经检测输出正确设计符合要求。
关键词:
VHDL序列检测QuartusⅡFPGA
Abstract:
Sequencedetectorsystemusedforcommunicationonthedetectioncodedisabled,oristheextractionofthedesiredsignal,thatis,oncedetected,therequiredhighoutputsignal,whichinthebroadfieldofdigitalcommunicationstobetransported.ThispaperpresentsasingleFPGAchipwiththedetectorpulsesequencedesignmethod,mainlyonhowtousenewdevicetoreplacethetraditionalEDAelectronicdesign,theuseofFPGA'sprogrammability,conciseandchangingthedesignmethodshortensthedevelopmentcycle,whileallowingsmallercircuitdesignandmorepowerful.Thecurriculumisdesignedtodetectsequence"11010011"
sequencedetectors,anddetectorinordertodescribethesequenceofthedesignprocessandFPGA-basedsoftwaresimulation.Finally,theoutputofthewaveformQuartusIIdesigntesting,debuggingthehardwaredesignhasbeentestedandmeettherequirementsofthecorrectoutput.
Keywords:
VHDLSequencedetectionQuartusⅡFPGA
1前言
1.1课题设计背景
随着数字通信的广泛应用,可编程逻辑器件容量、功能的不断扩大,集成电路的设计已经进入片上系统(SOC)和专用集成电路(ASIC)的时代。
由于硬件描述语言VHDL可读性、可移植性、支持对大规模设计的分解和对已有设计的再利用等强大功能,迅速出现在各种电子设计自动化(EDA)系统中,先进的开发工具使整个系统设计调试周期大大地缩短。
利用硬件描述语言(如VHDL)来完成对系统硬件功能的描述,在EDA工具的帮助下通过波形仿真得到时序波形,这样就使得对硬件的设计和修改过程软件化,提高了大规模系统设计的自动化程度。
传统的脉冲序列检测器,它的实现方法是把一个算法转化为一个实际数字逻辑电路的过程。
在这个过程中,我们所得到的结果大概一致,但是在具体设计方法和性价比上存在着一定的差异,存在电路设计复杂,体积大,抗干扰能力差以及设计困难、设计周期长等缺点。
而利用FPGA作为硬件电路,采用VHDL等硬件描述语言对硬件的功能进行编程,加快了系统的研发进程,采用数字化的控制方式,大幅度提高了逻辑控制的精确度,实时控制效果好,实践证明,FPGA芯片可以代替传统的复杂的电路,而且可以大比例地缩小了电路的硬件规模,提高了集成度,降低开发成本,提高系统的可靠性,为脉冲序列检测器电路的设计开辟了新的天地。
脉冲序列检测器在现代数字通信系统中发挥着重要的作用,通过中小规模的数字集成电路构成的传统脉冲序列检测器电路往往存在电路设计复杂体积大、抗干扰能力差以及设计困难、设计周期长等缺点。
因此脉冲序列检测器电路的模块化、集成化已成为发展趋势,它不仅可以使系统体积减小、重量减轻且功耗降低、同时可使系统的可靠性大大提高。
随着电子技术的发展,特别是专用集成电路(ASIC)设计技术的日趋完善,数字化的电子自动化设计(EDA)工具给电子设计带来了巨大变革,尤其是硬件描述语言的出现,解决了传统电路原理图设计系统工程的诸多不便。
随着ASIC技术、EDA技术的不断完善和发展以及VHDL、HDL等通用性好、移植性强的硬件描述语言的普及,FPGA等可编程逻辑器件必将在现代数字应用系统中得到广泛的应用,发挥越来越重要的作用。
2.总体方案设计
通过查阅大量相关技术资料,并结合自己的实际知识,我们主要提出了两种技术方案来实现系统功能。
下面我将首先对这两种方案的组成框图和实现原理分别进行说明,并分析比较它们的优劣。
2.1方案比较
2.1.1方案一
工作原理:
基于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
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
表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='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;
转化成可调用的元件:
图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);
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.4
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;
转化成可调用的元件:
图3.5
波形仿真如下:
图3.6
3.4顶层文件设计
通过前面的准备,我们已经得到了全部所需要的3个模块,即序列信号发生器、序列检测器、计数器。
在此,我们运用原理图法来生成顶层实体。
具体的实现方法是,将上述3个模块,通过我们的设计软件,生成可以移植,调用的原理图文件,在将其在顶层设计中直接调用即可。
本次设计生成的顶层实体如下图所示:
图3.7
4系统调试与验证
4.1待测序列的输入
输入检测的8位序列“11001011”程序如下:
libraryieee;
useieee.std_logic_1164.all;
entitySCHK1is
port(din,clk,clr:
instd_logic;
pre_load:
instd_logic_vector(7downto0);
ab:
outstd_logic_vector(3downto0));
endSCHK1;
architecturebehavofSCHK1is
signalq:
integerrange0to8;
signald:
std_logic_vector(7downto0);
begin
D<=pre_load;--置入待检测序列
process(clk,clr)
begin
ifclr='1'thenq<=0;
elsifclk'eventandclk='1'then
caseqis
when0=>ifdin=d(7)thenq<=1;elseq<=0;endif;
when1=>ifdin=d(6)thenq<=2;elseq<=0;endif;
when2=>ifdin=d(5)thenq<=3;elseq<=0;endif;
when3=>ifdin=d(4)thenq<=4;elseq<=0;endif;
when4=>ifdin=d(3)thenq<=5;elseq<=0;endif;
when5=>ifdin=d
(2)thenq<=6;elseq<=0;endif;
when6=>ifdin=d
(1)thenq<=7;elseq<=0;endif;
when7=>ifdin=d(0)thenq<=8;elseq<=0;endif;
whenothers=>q<=0;
endcase;
endif;
endprocess;
process(q)
begin
ifq=8thenab<=1;
elseab<=0;
endif;
endprocess;
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].西安:
西安电子科技大学出版社,2004
附录1