文档库 最新最全的文档下载
当前位置:文档库 › 8位序列检测器的设计

8位序列检测器的设计

8位序列检测器的设计
8位序列检测器的设计

八位序列检测器设计

摘要:序列检测器多用于通信系统中对禁用码的检测,或者是对所需信号的提取,即一旦检测到所需信号就输出高电平,这在数字通信领域有广泛的应运。本文介绍了一种采用单片PGA 芯片进行脉冲序列检测器的设计方法,主要阐述如何使用新兴的EDA 器件取代传统的电子设计方法,利用FPGA 的可编程性,简洁而又多变的设计方法,缩短了研发周期,同时使设计的电路体积更小功能更强大。本次课程设计设计出能够检测序列“11010011”的序列检测器,并以此来描述序列检测器的设计过程和基于FPGA 的软件仿真。最后通过QuartusII 的波形输出对设计方案进行检测,在硬件调试经检测输出正确设计符合要求。

关键词: VHDL 序列检测QuartusⅡFPGA

Abstract:Sequence detector system used for communication on the detection code disabled, or is the extraction of the desired signal, that is, once detected, the required high output signal, which in the broad field of digital communications to be transported. This paper presents a single FPGA chip with the detector pulse sequence design method, mainly on how to us e new device to replace the traditional EDA electronic design, the use of FPGA's programmability, concise and changing the design method shortens the development cycle, while allowing smaller circuit design and more powerful. The curriculum is designed to detect sequence "11010011"

sequence detectors, and detector in order to describe the sequence of the design process and FPGA- based software simulation. Finally, the output of the waveform QuartusII design testing, debugging the hardware design has been tested and meet the requirements of the correct output.

Keywords:VHDL Sequence detection QuartusⅡFPGA

目录

1前言 (1)

1.1 课题设计背景 (1)

2. 总体方案设计 (2)

2.1 方案比较 (2)

2.2 两种方案的论证与比较 (3)

3. 单元模块设计 (4)

3.1 序列信号发生器 (4)

3.2序列检测器 (6)

3.3计数器 (7)

3.4 顶层文件设计 (8)

4 系统调试与验证 (9)

4.1待测序列的输入 (9)

4.2 时序仿真 (11)

4.3结果分析 (12)

5 总结与体会 (13)

6 辞谢 (14)

7 参考文献 (15)

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个状态。

表3.1

序列信号发生器的代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY SHK IS

PORT (CLK,RST :IN STD_LOGIC; CO :OUT STD_LOGIC );

END SHK;

ARCHITECTURE behav OF SHK IS

TYPE FSM_ST IS (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15); SIGNAL REG:FSM_ST;

SIGNAL Q:STD_LOGIC;

BEGIN

PROCESS(CLK,RST)

BEGIN

IF RST ='1' THEN REG<=s0;Q<='0';

ELSIF CLK'EVENT AND CLK='1' THEN

CASE REG IS

WHEN s0=> Q<='1'; REG<=s1; WHEN s1=> Q<='0';REG<=s2; WHEN s2=> Q<='1';REG<=s3; WHEN s3=> Q<='1';REG<=s4; WHEN s4=> Q<='0';REG<=s5; WHEN s5=> Q<='1';REG<=s6; WHEN s6=> Q<='0';REG<=s7; WHEN s7=> Q<='0';REG<=s8; WHEN s8=> Q<='0';REG<=s9; WHEN s9=> Q<='1';REG<=s10; WHEN s10=> Q<='1';REG<=s11; WHEN s11=> Q<='0';REG<=s12; WHEN s12=> Q<='1';REG<=s13; WHEN s13=> Q<='0';REG<=s14;

WHEN s14=> Q<='1';REG<=s15; WHEN s15=> Q<='0';REG<=s0;

WHEN OTHERS=>REG<=s0;Q<='0';

END CASE;

END IF;

END PROCESS; CO<=Q;

END behav;

转化成可调用的元件:

图3.1

波形仿真如下:

图3.2

3.2序列检测器

脉冲序列检测起可用于检测一组或多组二进制码组成的脉冲序列信号,当序列检测器连续接收到一组穿行二进制码后,如果这组码与检测器中预先设置的码相同,则输出1,否则输出0。由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记住前一次的正确码及正确的序列,直到连续的检测中所收到的每一位码都与预置数的对应码相同。在检测过程中,任何一位不相等将回到初始状态重新开始检测。序列检测器的代码如下:

library ieee;

use ieee.std_logic_1164.all;

entity SCHK1 is

port(datain,clk:in std_logic;

t: in std_logic_vector (4 downto 0);

q:out std_logic;

cq: out std_logic_vector (4 downto 0)); end SCHK1;

architecture rt1 of SCHK1 is

signal reg:std_logic_vector(4 downto 0); begin

process(clk)

variable t1:std_logic_vector (4 downto 0); begin

if clk'event and clk='1' then

reg(0)<=datain;

reg(4 downto 1)<=reg(3 downto 0) ; end if;

t1:=t;

if reg=t1 then q<='1' ; else q<='0'; cq<=reg;

end if;

end process;

end rt1;

转化成可调用的元件:

图3.3

波形仿真如下:

图3.4

3.3计数器

利用序列检测器产生的信号(1和0)作为计数器模块的时钟信号,产生的信号0、1变化,形成类似的CLK信号,实现计数器计数。

计数器的代码如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNT IS

PORT (CLK, EN,RST :IN STD_LOGIC; Q1:OUT STD_LOGIC_VECTOR(3

DOWNTO 0);

Q2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT: OUT STD_LOGIC );

END ENTITY COUNT;

ARCHITECTURE ONE OF COUNT IS BEGIN

PROCESS(CLK,EN,RST)

VARIABLE CQI:STD_LOGIC_VECTOR(7 DOWNTO 0);

BEGIN

IF RST='1' THEN CQI:= (OTHERS=>'0');

ELSIF CLK'EVENT AND CLK='1' THEN

IF EN='1' THEN

IF CQI<153 THEN

IF CQI(3 DOWNTO 0)=9 THEN CQI:=CQI +7; --高位进位

ELSE CQI := CQI+1;

END IF;

ELSE CQI:= (OTHERS=>'0');

END IF;

END IF;

END IF;

IF CQI=153 THEN COUT<='1';

ELSE COUT<='0';

END IF;

Q1<=CQI(3 DOWNTO 0); Q2<=CQI(7 DOWNTO 4);

END PROCESS COUNT; END ARCHITECTURE ONE;

转化成可调用的元件:

图3.5

波形仿真如下:

图3.6

3.4 顶层文件设计

通过前面的准备,我们已经得到了全部所需要的3个模块,即序列信号发生器、序列检测器、计数器。在此,我们运用原理图法来生成顶层实体。

具体的实现方法是,将上述3个模块,通过我们的设计软件,生成可以移植,调用的原理图文件,在将其在顶层设计中直接调用即可。

本次设计生成的顶层实体如下图所示:

图3.7

4 系统调试与验证

4.1待测序列的输入

输入检测的8位序列“11001011”程序如下:library ieee;

use ieee.std_logic_1164.all;

entity SCHK1 is

port(din,clk,clr : in std_logic;

pre_load : in std_logic_vector(7 downto 0);

ab : out std_logic_vector(3 downto 0));

end SCHK1;

architecture behav of SCHK1 is

signal q : integer range 0 to 8;

signal d : std_logic_vector(7 downto 0);

begin

D<=pre_load;--置入待检测序列

process (clk, clr)

begin

if clr='1' then q <= 0;

elsif clk'event and clk='1' then

case q is

when 0=> if din=d(7) then q<=1;else q<=0;end if;

when 1=> if din=d(6) then q<=2;else q<=0;end if;

when 2=> if din=d(5) then q<=3;else q<=0;end if;

when 3=> if din=d(4) then q<=4;else q<=0;end if;

when 4=> if din=d(3) then q<=5;else q<=0;end if;

when 5=> if din=d(2) then q<=6;else q<=0;end if;

when 6=> if din=d(1) then q<=7;else q<=0;end if;

when 7=> if din=d(0) then q<=8;else q<=0;end if;

when others => q<=0;

end case;

end if;

end process;

process(q)

begin

if q=8 then ab<=1;

else ab<=0;

end if;

end process;

end behav;

转化成可调用的元件:

图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

相关文档