巴克码检测器课程设计.docx
《巴克码检测器课程设计.docx》由会员分享,可在线阅读,更多相关《巴克码检测器课程设计.docx(46页珍藏版)》请在冰豆网上搜索。
巴克码检测器课程设计
武汉理工大学《EDA 课程设计》说明书
课程设计任务书
学生姓名:
专业班级:
电子科学与技术 0803 班
指导教师:
工作单位:
信息工程学院
题目:
巴克码检测器
课题要求:
(1)学会在 QuartusⅡ环境中运用 VHDL 语言设计方法构建具有一定逻辑功能的模块,
并能运用图形设计方法完成顶层原理图的设计。
(2)掌握巴克码检测器的主要功能与在 CPLD 中的实现方法。
课题内容:
(1)设计一个七位巴克码(X1110010)代码检测器,当识别到一组代码时,输出一个高电平脉
冲。
(2)运用 QuartusⅡ软件中的仿真功能对所设计的巴克码检测器的各个模块及顶层
电路的功能进行仿真分析。
时间安排:
学习 VHDL 语言的概况第 1 天
学习 VHDL 语言的基本知识第 2、3 天
学习 VHDL 语言的应用环境,调试命令第 4、5 天
课程设计第 6-9 天
答辩第 10 天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
武汉理工大学《EDA 课程设计》说明书
摘要 ....................................................................I
ABSTRACT ...............................................................II
1 绪论 ..................................................................1
2 巴克码简介 ............................................................2
3 QUARTERS Ⅱ设计软件介绍 ...............................................3
3.1 VHDL 发展史及特点 ..................................................3
3.2 QUARTERS Ⅱ应用 .....................................................4
4 方案选择及论证 ........................................................6
5 设计原理 ..............................................................7
5.1 巴克码发生器 ......................................................7
5.2 巴克码检测器 ......................................................9
6 编译与仿真 ...........................................................13
6.1 程序编译 .........................................................13
6.2 实验仿真 .........................................................18
7 小结 .................................................................20
参考文献:
.............................................................21
武汉理工大学《EDA 课程设计》说明书
摘要
本课程设计主要是利用QUARTERSⅡ设计一个七位巴克码(X1110010)代码检测器,
当识别到一组代码时,输出一个高电平脉冲。
巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的
数字信息相区别,易于识别,出现伪同步的可能性小。
巴克码是一种具有特殊规律的二进制
码组,它是一种非周期序列。
关键词:
QUARTERSⅡ,巴克码,信号检测器,序列
武汉理工大学《EDA 课程设计》说明书
Abstract
This course is designed using QUARTERS Ⅱ design a seven buck code
(X1110010) code detector, when to recognize a set of code, and the output
pulse a high level.
Buck code is mainly used for communication system of frame
synchronization, characterized by a sharp autocorrelation, facilitate and
random digital information to distinguish, easy to identify, appear the
possibility of pseudo synchronous small. Buck code is one kind has the
special law of binary code group, it is a non-periodic sequence.
Keywords:
QUARTERS Ⅱ, buck yards, signal tester, sequence
武汉理工大学《EDA 课程设计》说明书
1 绪论
在通信系统中,同步技术起着相当重要的作用。
通信系统能否有效地、可靠地工作,很
大程度上依赖于有无良好的同步系统。
通信系统中的同步可分为载波同步、位同步、帧同步
等几大类。
当采用同步解调或相干检测时,接收端需要提供一个与发射端调制载波同频同相
的相干载波,获得此相干载波的过程称为载波提取,或称为载波同步。
而在数字通信中,消
息是一串连续的信号码元序列,解调时常须知道每个码元的起止时刻。
因此,就要求接收端
必须能产生一个用作定时的脉冲序列,以便与接收的每一个码元的起止时刻一一对齐。
在接
收端产生与接收码元的重复频率和相位一致的定时脉冲序列的过程称为码元同步或位同步。
数字通信中的消息数字流总是用若干码元组成一个 字”,又用若干“字”组成一“句”。
因
此,在接收这些数字流时,同样也必须知道这些 字”、“句”的起止时刻,在接收端产生与
“字”、“句”起止时刻相一致的定时脉冲序列,统称为群同步或帧同步。
当通信是在两点
之间进行时,完成了载波同步、位同步和帧同步之后,接收端不仅获得了相干载波,而且通
信双方的时标关系也解决了,这时,接收端就能以较低的错误概率恢复出数字信息。
在数字
通信系统中,实现帧同步的方法通常有两种:
起止式同步法和集中式插入同步法。
起止式同
步比较简单,一般是在数据码元的开始和结束位置加入特定的起始和停止脉冲来表示数据帧
的开始和结束。
另外在计算机RS232 串口通信中通常也使用类似方法。
而在集中式插入同步
法中,要求插入的同步码在接收端进行同步识别时出现伪同步的概率尽可能小,并且要求该
码组具有尖锐的自相关函数以便于识别。
同时接收机端的同步码识别器要尽量简单。
目前用
得比较广泛的是性能良好的巴克(Barker)码。
0
武汉理工大学《EDA 课程设计》说明书
2 巴克码简介
巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的
数字信息相区别,易于识别,出现伪同步的可能性小。
巴克码是一种具有特殊规律的二进制
码组,它是一种非周期序列。
一个 位的巴克码组为 , :
, ,. ,},其中 的取值是+1 或
一 1,其局部自相关函数为:
目前已发现的所有巴克码组如表 :
表 1 已发现的巴克码组
其中,“+”表示取值为高电平1,“一”表示取值为低电平0。
依要求及上面的巴克码组
可知,8 位的巴克码发生器应在输入时钟信号作用下依次产生 01110010”的码元序列。
1
武汉理工大学《EDA 课程设计》说明书
3 Quarters Ⅱ设计软件介绍
3.1 VHDL 发展史及特点
VHDL 诞生于 1982 年。
随后各 EDA 公司相继推出了自己的 VHDL 设计环境,或宣
布自己的设计工具可以和 VHDL 接口。
此后 VHDL 在电子设计领域得到了广泛的接受,
并逐步取代了原有的非标准的硬件描述语言。
1993 年,IEEE 对 VHDL 进行了修订,从更
高的抽象层次和系统描述能力上扩展 VHDL 的内容,公布了新版本的 VHDL,即 IEEE 标
准的 1076-1993 版本,(简称 93 版)。
现在,VHDL 和 Verilog 作为 IEEE 的工业标准硬件
描述语言,又得到众多 EDA 公司的支持,在电子工程领域,已成为事实上的通用硬件描
述语言。
有专家认为,在新的世纪中,VHDL 于 Verilog 语言将承担起大部分的数字系统
设计任务。
VHDL 的英文全写是:
VHSIC(Very High Speed Integrated Circuit)Hardware
Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。
因此它的应用主要
是应用在数字电路的设计中。
目前,它在中国的应用多数是用在 FPGA/CPLD/EPLD 的设
计中。
当然在一些实力较为雄厚的单位,它也被用来设计 ASIC。
VHDL 主要用于描述数
字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL 的语
言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL 语言特点
(1)VHDL 语言功能强大、设计灵活。
VHDL 具有功能强大的语言结构,可以用简
洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最
后可直接生成电路级描述。
VHDL 支持同步电路、异步电路和随机电路的设计,这是其
他硬件描述语言虽不能比拟的。
VHDL 还支持各种设计方法,既支持自底向上的设计,
又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
(2)支持广泛、易于修改。
由于 VHDL 已经成为 IEEE 标准所规范的硬件描述语言,
目前大多数 EDA 工具几乎都支持 VHDL,这为 VHDL 的进一步推广和广泛应用奠定了基
础。
在硬件电路设计过程中,主要的设计文件是用 VHDL 编写的源代码,因为 VHDL 易
读和结构化,所以易于修改设计。
(3)强大的系统硬件描述能力。
VHDL 具有多层次的设计描述功能,既可以描述系
统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构
描述,也可以采用三者混合的混合级描述。
另外,VHDL 支持惯性延迟和传输延迟,还
可以准确地建立硬件电路模型。
VHDL 支持预定义的和自定义的数据类型,给硬件描述
带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
(4)独立于器件的设计、与工艺无关。
设计人员用 VHDL 进行设计时,不需要首先
考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以
2
武汉理工大学《EDA 课程设计》说明书
用多种不同的器件结构来实现其功能。
(5)很强的移植能力。
VHDL 是一种标准化的硬件描述语言,同一个设计描述可以
被不同的工具所支持,使得设计描述的移植成为可能。
(6)易于共享和复用。
VHDL 采用基于库(Library)的设计方法,可以建立各种可
再次利用的模块。
这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存
放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流
和共享,减少硬件电路设计。
(7)VHDL 丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计
系统的功能可行性,随时可对设计进行仿真模拟。
(8)VHDL 语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和
已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至
多个代发组共同并行工作才能实现。
对于用 VHDL 完成的一个确定的设计,可以利用
EDA 工具进行逻辑综合和优化,并自动的把 VHDL 描述设计转变成门级网表。
(9)VHDL 对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管
理最终设计实现的目标器件是什么,而进行独立的设计。
总之,由于 VHDL 语言有这么多优点和特点,因此它被广泛的应用在电路系统的设
计和器件的设计仿真中。
3.2 Quarters Ⅱ应用
QuartersⅡ是 Altera 公司推出的新一代开发软件,适合于大规模逻辑电路设计,是
Altera 公司的第 4 代可编程逻辑器件集成开发环境,提供了从设计输入到器件编程的全部
功能,与 Max+plus Ⅱ相比,Quarters Ⅱ设计软件增加了网络编辑功能,提升了调试能力,
解决了潜在的设计延迟,同时其强大的设计能力和直观易用的接口,受到数字系统设计
者的普遍欢迎。
Quarters Ⅱ开发系统具有以下主要特点:
Quarters Ⅱ可以产生并识别 EDIF 网表文件、VHDL 网表文件和 Verilog HDL 网表文
件,为第三方 EDA 工具提供了方便的接口。
Quarters Ⅱ支持一个工作组环境下的设计要求,包括支持基于Internet的协作设计,与
Cadence,ExemplarLogic,MentorGraphics,Synopsys和Synplicity等EDA
供应商的开发工具相兼容。
QuartersⅡ作为一种设计环境,除支持 Altera 的 APEX20KE,APEX
20KC,APEXⅡ,ARM 的 Excalibur 嵌入式处理器方案,Mercury,FLEX10KE 和 ACEX1K
之外,还支持 MAX3000A 和 MAX7000 系列乘积项器件。
3
武汉理工大学《EDA 课程设计》说明书
QuartersⅡ增加了一个新的快速适配编译选项,可缩短 50%的编译时间。
快速适配
功能保留了最佳性能的设置,加快了编译过程,编译速度更快,对设计性能的影响最小[3]
境,或宣布自己的设计工具可以和 VHDL 接口。
此后 VHDL 在电子设计领域得到了广泛
的接受,并逐步取代了原有的非标准的硬件描述语言。
Quarters Ⅱ设计软件界面如图 3.1
所示。
图3.1
Quarters Ⅱ设计软件界面
4
武汉理工大学《EDA 课程设计》说明书
4 方案选择及论证
方案一:
在状态连续变化的数字系统设计中,采用状态机的设计思想有利于提高设
计效率,增加程序的可读性,减少错误的发生几率。
同时,状态机的设计方法也是数字
系统中一种常用的设计方法,其输出仅仅是当前状态值的函数,并且在时钟上升沿到来
时才发生变化。
米立机的输出则是当前状态值、当前输出值和当前输入值的函数。
本实
验要从一串二进制码中检测出一个已预置的 7 位二进制码,每增加一位二进制相当于增
加一个状态,用 7 个状态可以实现。
方案二:
利用移位寄存器实现序列检测:
上面检测的原理是:
逐位检测,的那个检测到
信号时则转入下一个状态。
这种检测的原理清晰,但缺点是当检测到序列比较长时就非常麻烦,而且检测的灵活性
差。
利用移位寄存器能实现简便快速,可移植的序列检测器。
通过比较可以看出方案一比较容易实现,因此本次课程设计我选择的是方案一。
5
武汉理工大学《EDA 课程设计》说明书
5 设计原理
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器
连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出 1,否
则输出 0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记
住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对
应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
在本次设
计中首先要设计一个巴克码发生器,然后再设计巴克码检测器。
5.1 巴克码发生器
发生器原理:
N 位触发器构成的计数器可产生 M 个代码。
原理图:
图 5.1 巴克码发生器原理图
当计数脉冲不断进入由 Q3Q2Q1 组成的三位二进制异步计数器时,3-8 译码
器的 8 个输出经反相器后顺序输出高电平。
其中五路信号经“或非”后再和其中
6
武汉理工大学《EDA 课程设计》说明书
3 路“或”,在 Y 端便可顺序产生 11000100 代码序列。
代码序列发生:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity bak1 is
port(clk,reset:
in std_logic;
dout:
out std_logic);
end bak1;
architecture a of bak1 is
signal count :
std_logic_vector(2 downto 0);
signal tmp1:
std_logic;
begin
dout<=tmp1;
process(clk,reset)
begin
if reset='0' then
count<=(others=>'0');
elsif rising_edge(clk) then
count<=count+1;
case count is
when "000"=>tmp1<='1' ;
when "001"=>tmp1<='1' ;
when "010"=>tmp1<='1' ;
when "011"=>tmp1<='0' ;
when "100"=>tmp1<='0' ;
when "101"=>tmp1<='1' ;
when "110"=>tmp1<='0' ;
7
武汉理工大学《EDA 课程设计》说明书
when "111"=>tmp1<='1' ;
when others=>tmp1<='0';
end case;
end if;
end process;
end a;
5.2 巴克码检测器
序列检测器可用于检测一组或多组由二进制码组成的脉冲序列信号,当序列检测器
连续收到一组串行二进制码后,如果这组码与检测器中预先设置的码相同,则输出 1,否
则输出 0。
由于这种检测的关键在于正确码的收到必须是连续的,这就要求检测器必须记
住前一次的正确码及正确序列,直到在连续的检测中所收到的每一位码都与预置数的对
应码相同。
在检测过程中,任何一位不相等都将回到初始状态重新开始检测。
• 序列检测器(1110010)
01
11
S1S2
0
S3 S4
0
1
0 1
1
0
S8
0/1
1
S7 S6
0
S5
图 5.2 巴克码检测器状态图
用状态机设计的巴克码检测器总设计程序如下所示:
library ieee;
8
武汉理工大学《EDA 课程设计》说明书
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity create is
port( CLR :
in std_logic;
CLK_1S :
in std_logic;
SIG_OUT :
out std_logic;
CODE :
in std_logic_vector(6 downto 0)
);
end entity;
architecture behave of create is
type states is(st0,st1,st2,st3,st4,st5,st6,st7);
signal current_state :
states;
begin
process(CLK_1S,CLR,CODE)
begin
if CLR = '0' then
current_state <= st0;
SIG_OUT <= '0';
elsif rising_edge(CLK_1S) then
case current_state is
when st0 => SIG_OUT <= CODE(0);
current_state <= st1;
when st1 => SIG_OUT <= CODE
(1);
current_state <= st2;
when st2 => SIG_OUT <= CODE
(2);
current_state <= st3;
9
武汉理工大学《EDA 课程设计》说明书
when st3 => SIG_OUT <= CODE(3);
current_state <= st4;
when st4 => SIG_OUT <= CODE(4);
current_state <= st5;
when st5 => SIG_OUT <= CODE(5);
current_state <= st6;
when st6 => SIG_OUT <= CODE(6);
current_state <= st7;
when st7 => SIG_OUT <= '0';
current_state <= st0;
when others => current_state <= st0;
end case;
end if;
end process;
end behave;
本次课程设计所用的频率是由实验箱 pin16 提供 20M 的频率,但我们实际中不会用
到那么高的频率,因此我们需要一个分频器将此 20M 的频率分频到我们所需的频率,分
频器原程序如下所示:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity div is
port( CLK_IN :
in std_logic;
CLK_OUT :
buffer std_logic;
DIV_TIME :
in std_logic_vector(15 downto 0)
);
end entity;
10
武汉理工大学《EDA 课程设计》说明书
architecture behave of div is
signal data1:
integer range 0 to 10000000;
signal data2:
integer range 0 to 10000000;
begin
p