EDA课设巴克码.docx
《EDA课设巴克码.docx》由会员分享,可在线阅读,更多相关《EDA课设巴克码.docx(19页珍藏版)》请在冰豆网上搜索。
EDA课设巴克码
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
题目:
巴克码发生器
初始条件:
QuartusⅡ,CPLD
要求完成的主要任务:
1、设计并实现一个巴克码(01110010代码)发生器。
波形图见图1。
图1巴克码(01110010代码)发生器仿真波形图
2、将所设计的整个系统写入CPLD器件中,加上需要的外围电路在实验箱上实现整个系统的硬件搭建,并调试出结果。
时间安排:
收集资料第1天
学习VHDL语言的基本知识第2-3天
学习巴克码的基本知识第4-5天
编写程序并调试出结果完成设计要求第6-9天
答辩第10天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
目录
摘要I
AbstractII
绪论1
1巴克码简介3
1.1巴克码简介3
1.2巴克码的产生与检测3
1.2.1巴克码的产生3
1.2.2巴克码的识别4
2QuartersⅡ设计软件介绍6
3巴克码发生器的设计7
3.1设计原理框图7
3.2单元模块设计7
3.2.1分频模块设计7
3.2.2八位计数控制模块设计8
3.2.3巴克码产生模块设计8
3.2.4显示模块设计9
3.3顶层电路设计9
4仿真与调试10
4.1软件仿真10
4.2硬件调试10
4.2.1硬件配置与初始化10
4.2.2演示结果及分析11
5小结即心得体会12
附录14
摘要
本文介绍了一种采用单片CPLD芯片进行巴克码发生器的设计方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法,利用CPLD的可编程性,简洁而又多变的设计方法,缩短了研发周期。
本设计实现了巴克码发生器的一些基本功能,主要包括八位巴克码序列产生,以及数码显示功能。
本次设计主要包括采用了CPLD芯片,使用VHDL语言进行编程,使其具有了更强的移植性,更加利于产品升级。
巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的数字信息相区别,易于识别,出现伪同步的可能性小。
巴克码是一种具有特殊规律的二进制码组,它是一种非周期序列[1]。
关键词:
VHDL;巴克码;QuartusⅡ;CPLD;序列
Abstract
ThispaperpresentsamonolithicCPLDchipBarkercodegeneratordesignmethodfocusesprimarilyonhowtousetheemergingEDAelectronicdesigndevicetoreplacethetraditionalmethods,theuseofprogrammableCPLD,conciseyetvarieddesignapproach,shortenthedevelopmentcycle.TheBarkercodegeneratordesignedandimplementedsomeofthebasicfeaturesincludeeightBarkercodesequencegeneration,anddigitaldisplay.ThedesignmainlyincludetheuseofaCPLDchip,usingtheVHDLprogramminglanguage,tomakeitamoreportability,moreconducivetoproductupgrades.
BarkerCodeismainlyusedincommunicationsystemsframesynchronization,whichischaracterizedwithasharpauto-correlationfunctionforthedigitalinformationandtherandomDifferentiated,easilyidentifiable,there'sthepossibilityofpseudo-synchronoussmall.BarkerCodeisalawofaspecialgroupofbinarycode,itisanon-periodicsequence.
Keywords:
VHDL;Barkercode;QuartusⅡ;CPLD;sequence
绪论
人类社会已经进入信息化时代,信息社会的发展离不开电子产品的进步。
现代电子产品在性能提高、复杂度降低的同时,价格却一直呈下降趋势,而且产品更新换代的步伐也越来越快,实现这种进步的主要原因就是生产制造技术和电子设计技术的发展。
前者以微细加工技术为代表,目前已进展到深亚微米阶段,可以在几平方厘米的芯片上集成数万个晶体管;后者的核心就是EDA技术。
没有EDA技术的支持,想要完成超大规模集成电路的设计制造是不可想象的,反过来,生产制造技术的不断进步又必须对EDA技术提出新要求。
EDA代表了当今电子设计技术的最新发展方向,它的基本特征是:
设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(VHDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。
可编程逻辑器件自20世纪70年代以来,经历了PAL、GAL、CPLD、FPGA几个发展阶段,其中CPLD、FPGA属高密度可编程逻辑器件,目前集成度以高达200万门/片,它将掩膜ASIC集成度高的优点和可编程逻辑器件设计生产方便的特点结合在一起,特别适合于样品研制和小批量产品开发,使产品能以最快的速度上市,而当市场扩大时,它可以和容易地转由ASIC实现,因此开发风险也大为降低。
CPLD/FPGA器件已成为现代高层次电子设计方法的实现载体。
VHDL是一种全方位的硬件描述语言,包括系统行为级、寄存器传输级和逻辑门级多个设计层次,支持结构、数据流和行为3种描述形式的混合描述,因此VHDL几乎覆盖了以往各种硬件描述语言的功能,整个自顶向下或自底向上的电路设计过程都可以用VHDL来完成。
另外,VHDL还有以下优点:
VHDL的宽范围描述能力使它成为高层次设计的核心,将设计人员的工作重心转移到了系统功能的实现和调试上,只需要花较少的精力用于物理实现;VHDL可以用简洁明确的代码描述来进行复杂控制逻辑的设计,灵活且方便,而且也便于设计结果的交流、保存和重用;VHDL的设计不依赖于特定的器件,方便了工艺的转换。
VHDL是一个标准语言,为众多的EDA场上支持,因此移植性好。
在通信系统中,同步技术起着相当重要的作用。
通信系统能否有效地、可靠地工作,很大程度上依赖于有无良好的同步系统。
通信系统中的同步可分为载波同步、位同步、帧同步等几大类。
当采用同步解调或相干检测时,接收端需要提供一个与发射端调制载波同频同相的相干载波,获得此相干载波的过程称为载波提取,或称为载波同步。
而在数字通信中,消息是一串连续的信号码元序列,解调时常须知道每个码元的起止时刻。
因此,就要求接收端必须能产生一个用作定时的脉冲序列,以便与接收的每一个码元的起止时刻一一对齐。
在接收端产生与接收码元的重复频率和相位一致的定时脉冲序列的过程称为码元同步或位同步。
数字通信中的消息数字流总是用若干码元组成一个“字”,又用若干“字”组成一“句”。
因此,在接收这些数字流时,同样也必须知道这些“字”、“句”的起止时刻,在接收端产生与“字”、“句”起止时刻相一致的定时脉冲序列,统称为群同步或帧同步。
当通信是在两点之间进行时,完成了载波同步、位同步和帧同步之后,接收端不仅获得了相干载波,而且通信双方的时标关系也解决了,这时,接收端就能以较低的错误概率恢复出数字信息。
在数字通信系统中,实现帧同步的方法通常有两种:
起止式同步法和集中式插入同步法。
起止式同步比较简单,一般是在数据码元的开始和结束位置加入特定的起始和停止脉冲来表示数据帧的开始和结束。
另外在计算机RS232串口通信中通常也使用类似方法。
而在集中式插入同步法中,要求插入的同步码在接收端进行同步识别时出现伪同步的概率尽可能小,并且要求该码组具有尖锐的自相关函数以便于识别。
同时接收机端的同步码识别器要尽量简单。
目前用得比较广泛的是性能良好的巴克(Barker)码[2]。
1巴克码简介
1.1巴克码简介
巴克码主要用于通信系统中的帧同步,其特点是具有尖锐的自相关函数,便于与随机的数字信息相区别,易于识别,出现伪同步的可能性小。
巴克码是一种具有特殊规律的二进制码组,它是一种非周期序列。
一个n位的巴克码组为{X1,X2,X3,…Xn},其中Xn的取值是+1或-l,其局部自相关函数为:
目前已发现的所有巴克码组如表1.1:
n
巴克码组
2
++
3
++—
4
+++—;++—+
5
+++—+
7
+++——+—
11
+++———+——+—
13
+++++——++—+—+
表1.1已发现的巴克码组
其中,“+”表示取值为高电平1,“-”表示取值为低电平0。
依要求及上面的巴克码组可知,8位的巴克码发生器应在输入时钟信号作用下依次产生“01110010”的码元序列。
1.2巴克码的产生与检测
1.2.1巴克码的产生
产生巴克码的方法常用移位寄存器,这里以七位巴克码产生其为例子介绍。
产生器的示意图如图2.1所示。
图1.1七位巴克码产生器
图1.1(a)是串行式产生器,移位寄存器的长度等于巴克码组的长度。
七位巴克码由七级移位寄存器单元组成,各寄存器单元的初始状态由预置线预置成巴克码组相应的数字。
七位巴克码的二进制数为lll00l0,移位寄存器的输出端反馈至输入端的第一级,因此,七位巴克码输出后,寄存器各单元均保持原预置状态。
移位寄存器的级数等于巴克码的位数。
另一种是采用反馈式产生器,同样也可以产生七位巴克码,如图1.1(b)所示,这种方法也叫逻辑综合法,此结构节省部件。
但是在本次课程设计中,采用的时编程的方法用VHDL语言来实现的,相比起来更加方便灵活。
1.2.2巴克码的识别
由于在本次课程设计中,对巴克码的检测不作要求这里只做简单介绍。
巴克码的识别仍以七位巴克码为例,用七级移位寄存器、相加器和判决器就可以组成一个巴克码识别器,如图1.2所示,各移位寄存器输出端的接法和巴克码的规律一致,即与巴克码产生器的预置状态相同。
图1.2巴克码判决器
当输入数据中的1进入移位寄存器时,输出电平为+l,而0进入移位寄存器时,输出电平为-l,识别器实际是对输入的巴克码进行相关运算。
当七位巴克码已全部进入了七级移位寄存器时,七个移位寄存器输出端都输出+l,相加后得最大输出+7、若判决器的判决电平定为+6,那么,就在七位巴克码的最后一位“0”进入识别器后,识别器输出一个帧同步脉冲表示一帧数字信号的开头。
2QuartersⅡ设计软件介绍
QuartersⅡ是Altera公司推出的新一代开发软件,适合于大规模逻辑电路设计,是Altera公司的第4代可编程逻辑器件集成开发环境,提供了从设计输入到器件编程的全部功能,与Max+plusⅡ相比,QuartersⅡ设计软件增加了网络编辑功能,提升了调试能力,解决了潜在的设计延迟,同时其强大的设计能力和直观易用的接口,受到数字系统设计者的普遍欢迎。
QuartersⅡ开发系统具有以下主要特点:
QuartersⅡ可以产生并识别EDIF网表文件、VHDL网表文件和VerilogHDL网表文件,为第三方EDA工具提供了方便的接口。
QuartersⅡ支持一个工作组环境下的设计要求,包括支持基于Internet的协作设计,与Cadence,ExemplarLogic,MentorGraphics,Synopsys和Synplicity等EDA供应商的开发工具相兼容。
QuartersⅡ作为一种设计环境,除支持Altera的APEX20KE,APEX20KC,APEXⅡ,ARM的Excalibur嵌入式处理器方案,Mercury,FLEX10KE和ACEX1K之外,还支持MAX3000A和MAX7000系列乘积项器件。
QuartersⅡ增加了一个新的快速适配编译选项,可缩短50%的编译时间。
快速适配功能保留了最佳性能的设置,加快了编译过程,编译速度更快,对设计性能的影响最小[3]。
图2.1QuartersⅡ设计软件界面
3巴克码发生器的设计
3.1设计原理框图
根据层次化设计理论,巴克码发生器设计可由产生及显示先后分为分频模块、8位计数模块、序列产生模块、显示控制模块,其系统框图如图3.1所示。
图3.1系统框图
3.2单元模块设计
3.2.1分频模块设计
分频模块将实验箱提供的20MHz的时钟脉冲分为1Hz的序列产生时钟脉冲。
实际巴克码产生频率是远大于1Hz的,设计中为了便于观察序列输出时的变化所以将产生频率设为1Hz。
1HZ分频的源程序见附录的源程序一,对源程序编译后在file菜单下执行createsymbolfilesforcurrentfile命令就可以生成的对应的模块元件,如图3.2所示。
图3.21HZ分频模块
3.2.2八位计数控制模块设计
八位计数控制模块主要用于产生八位巴克码,和作为数码管显示的同步信号,其源程序见附录的源程序二。
如上节所述,在编译后可生成模块元件,如图3.3所示。
图3.38位计数控制模块
3.2.3巴克码产生模块设计
此模块为发生器的核心模块,其产生串行输出的八位巴克码主要通过case-when语句来实现,其源程序见附录的源程序三,对其编译后,创建的模块元件如图3.4所示。
创建波形文件对其进行功能仿真后的波形如图3.5所示。
图3.4巴克码产生模块
图3.5八位巴克码的仿真波形
由图3.5可知dout端的输出波形就是题目所要求的八位巴克码的连续波形。
以每个时钟周期为单位可以读出产生的序列码正好是01110010,满足设计要求。
3.2.4显示模块设计
此模块主要用于巴克码的输出显示,便于观察和测试。
显示模块分两个部分。
一部分
为巴克码输出接led灯,亮表示输出1、灭表示输出0。
由于是串行输出,为了表示输出时第几位,另一部分输出接数码管,用来显示当前输出的位数。
其源程序见附录源程序四,对其编译后,创建模块元件如图3.6所示。
图3.6显示驱动模块
3.3顶层电路设计
在上面一节中已经分别设计并生成各个模块,在这一节中只需要建立顶层文件,然后用元件例化语句(见源程序五)将各个模块连接起来,或者创建blockdiagram/schematicfile直接添加上生成的模块在进行连线,就可以完成顶层文件的设计。
这样整个设计就完成了。
在tool单下的NetlistViewers可以生成顶层原理图,如图3.7所示。
图3.7顶层原理图
4仿真与调试
4.1软件仿真
在上面的一章中我们已经完成了程序的设计,现在我们只需要创建vectorwaveformfile再添加上输入输出引脚,再设置好输入时钟以及输入控制线就可以进行软件仿真了。
仿真波形如下图4.1所示。
图4.1总体仿真波形
从上面的仿真波形可以看出,segout(数码管段选输出端)每输出一个译码值就对应bkmout(巴克码输出端)的一个输出值,当segout循环输出一组数值后就对应输出一组八位巴克码,从而起到了标志巴克码输出的作用。
这里需要说明一下,由于仿真时间过长软件会计算很长时间。
所以,在只需要观察程序实现的功能的前提下,修改了输入时钟的频率和分频器的输出频率。
在硬件调试时再改过来就行了。
4.2硬件调试
4.2.1硬件配置与初始化
在上面已经得到了正确的功能波形,这是进行硬件调试的前提。
在进行硬件调试之前我还要Assignments菜单下的Device菜单中将未用到的引脚设置为输入三态。
以免导致干扰信号的输入而影响调试结果。
设置好后,就需要进行引脚配置了,引脚配置如图4.2所示。
引脚配置是程序在实验箱上与硬件联系的重要一步,也是实现软件与硬件结合的重要一步。
引脚配置必须与试验箱上器件的实际连接相一致。
引脚配置完毕就可以将程序下载到实验箱上,就可以观察演示结果了。
图4.2引脚配置图
4.2.2演示结果及分析
程序下载到实验后,就可以观察到数码管从0~7循环显示,同时led灯也随之亮灭显示。
显示结果记录如下表4.1所示。
数码管显示数值
0
1
2
3
4
5
6
7
Led灯亮灭情况
灭
亮
亮
亮
灭
灭
亮
灭
表4.1演示结果记录
有上面的记录结果可知,led灯的亮灭情况符合巴克码的输出情况。
从而说明了此次课程设计成功的完成了题目所要求的任务。
5小结即心得体会
本次课程设计至此已经接近尾声,一周的时间虽然很短暂,但在这一个星期的设计过程中收获颇多。
设计的核心内容就是利用VHDL语言灵活的编写能力,以及CPLD工作速度快,集成度高,功耗低的特点完成八位巴克码的生成。
整个设计过程中首先对所学的电子线路EDA有了更深的了解,比如元件模块的生成、顶层原理图的绘制等。
而且我还对QUARTERSⅡ软件的使用更加熟练,使其成为了自己在电子线路设计中不可或缺的工具。
在写相关源程序的时候,我还收索了大量的网站,在网上收索了很多关于VHDL编程的相关资料。
在这个过程中我发现网上有很多有用的知识。
以后应该多注意,充分合理的利用网络,通过网络来学习东西。
虽然我顺利完成了课程设计的要求,但是我感觉到我对VHDL语言的理解还停留在比较浅的层次。
要想真正掌握它还需要继续努力学习它。
这次课程设计也使我明白了在知识的领域里我还有很多很多的不足,并且再一次的深深的体会到理论和实践之间还有很到的差别。
在以后的学习中应该多多的注意实践知识的训练和积累。
在以后的学习生活中要不断的开拓自己的动手能力,不断的训练自己的动手能力。
这次课程设计让我深深的明白了自己以后该做什么,该怎么去做。
参考文献
[1]朱明程,董尔令.可编程逻辑器件原理与应用[M].西安电子科技大学出版社,2004
[2]沈保锁,侯椿萍.现代通信原理[M].国防工业出版社,2002
[3]潘松,黄继业.EDA技术与VHDL.第二版.清华大学出版社,2007
[4]刘玉晓.EDA技术与VHDL电路开发应用实践,2005
[5]汉泽西.EDA技术及其应用.北京:
北京航空航天大学出版社,2004
[6]谭会生.EDA技术基础.长沙:
湖南大学出版社,2004
附录
原程序一:
(1HZ分频输出程序)
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--******************实体定义***********************
ENTITYclk_1IS
PORT(
clk:
instd_logic;--时钟输入
clk_1:
outstd_logic--1HZ输出
);
ENDclk_1;
ARCHITECTUREanOFclk_1IS
signalcc:
std_logic;
begin
--**************分频到1HZ*******************
process(clk)
variablecnt:
integerrange0to10000;--分频计数器
begin
ifclk'eventandclk='1'then
ifcnt=10000then
cnt:
=0;
cc<=notcc;
else
cnt:
=cnt+1;
endif;
endif;
endprocess;
clk_1<=cc;
endan;
源程序二:
(八位计数控制程序)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityCNT8is
port(
clk:
instd_logic;
en,reset:
instd_logic;
cnt8:
outstd_logic_vector(2downto0)
);
endentity;
architectureoneofCNT8is
signalcount8:
std_logic_vector(2downto0);
begin
process(clk,reset)
begin
ifreset='1'then
count8<="000";
elsifclk'eventandclk='1'then
ifen='1'then
count8<=count8+'1';
endif;
endif;
endprocess;
cnt8<=count8;
endone;
源程序三:
(巴克码产生程序)
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entitybakemais
port(
cnt8:
instd_logic_vector(2downto0);
dout:
outstd_logic
);
endentity;
architectureoneofbakemais
begin
process(cnt8)
begin
casecnt8is
when"000"=>dout<='0';
when"001"=>dout<='1';
when"010"=>dout<='1';
when"011"=>dout<='1';
when"100"=>dout<='0';
when"101"=>dout<='0';
when"110"=>dout<='1';
when"111"=>dout<='0';
whenothers=>dout<='0';
endcase;
endprocess;
endone;
源程序四(显示程序)
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
us