基于FPGA的数字通信系统.docx
《基于FPGA的数字通信系统.docx》由会员分享,可在线阅读,更多相关《基于FPGA的数字通信系统.docx(71页珍藏版)》请在冰点文库上搜索。
基于FPGA的数字通信系统
摘要
本设计实现多路数据时分复用和解复用系统。
设计分为发端和收端,以FPGA作为主控核心。
发端系统有三路并行数据输入:
A/D转换数据,拨码开关1路和拨码开关2路。
这三路数据在FPGA的控制下作为串行码分时输出。
发端FPGA包括分频模块、复用模块和电压显示模块。
在收端,串行数据进入FPGA,并由FPGA提取位时钟,识别帧同步并解复用发端打包的三路码。
收端的FPGA包括数字锁相环模块、解复用模块和电压显示模块。
发端FPGA输入有三路8-bit数据:
第一路为A/D数据、第二路和第三路是拨码开关产生的数据,另外插入一路巴克码。
这四路码组成一帧,由FPGA对其时分复用。
A/D输入端的模拟信号的电压值通过FPGA处理,显示在数码管上。
在收端,FPGA首先提取位同步,然后识别帧同步,一旦识别出帧同步,FPGA分别解复用三路数据。
本文详细阐述了此系统的设计方法,制作过程以及制作过程中的问题。
设计者的工作包括:
系统各部分电路元件的确定、确定系统框图、画出系统原理图、根据原理图设计FPGA的RTL代码、综合、仿真RTL代码、设计PCB板和在线调试FPGA功能。
关键字:
数字锁相环;帧同步;时分复用;VerilogHDL语言;串行A/D变换;
Abstract
Thesystemisdesignedfordatamultiplexedandde-multiplexed.ItisbasedonTDM.Thesystemincludesthetransmitterandthereceiver.TheyareimplementedmainlybyFPGA.Therearethreeinputsinthetransmissionsystem:
datafromA/Dconverter,DIP1andDIP2.Thethreechannelsareoutseriallyandtime-divisionalundertheFPGA’scontrol.TheFPGAinthetransmitterisdividedintofourmoduleswhicharefrequencydivider,Barkergenerator,datamultiplexerandvoltagedisplay.VoltagedisplayisusedforprocessingthedataconvertedbyADCandsendingittotheLED.TheserialdataareserialshiftedintotheFPGAinthereceiver.Bit-synchronizeandframe-synchronizearebothpickedup,andthende-multiplex.TheFPGAinthereceiverisdividedintothreemoduleswhicharedigitalPLL,datade-multiplexerandvoltagedisplay.Thetransmitterwillmultiplexfourwaysof8-bitparalleldata.ThefirstwayisADCdata,thesecondandthethirdwayisgeneratedbydip-key.TheotherisBarkercodeusedforframesynchronizing.Thereceiverwillmaintainthebitsynchronizing,recognizeoneframeandde-multiplexthreewaysdata.Theessaywilldiscussthedesignprogress,theprogrammingideaandsomeproblems.Workshavetobedonebythedesignerare:
Specifyallsystemcomponents,Makesystemspecification,Drawsystemschematics,WriteRTLcodeaccordingtheschematics,SynthesisandsimulatetheRTLcode,DesignthePCBs,ValidatethefunctionsoftheFPGAon-line.
Keywords:
DPLL;Frame-synchronize;TDM;VerilogHDL;SerialA/Dconvert;
引言
数字复接、分接技术发展到80年代已经趋于成熟,形成了完善的EI、TI系列。
它使得多路低速信号可以在高速信道中传输,同时提高信道的利用率。
PLD/FPGA是电子设计领域中最具活力和发展前途的一项技术,它的影响丝毫不亚于70年代单片机的发明和使用。
可以毫不夸张的讲,PLD/FPGA能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用PLD/FPGA来实现。
PLD/FPGA如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。
通过软件仿真,我们可以事先验证设计的正确性。
在PCB完成以后,还可以利用PLD/FPGA的在线修改能力,随时修改设计而不必改动硬件电路。
使用PLD/FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
PLD/FPGA的这些优点使得PLD/FPGA技术在90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言的进步。
本设计主要利用了FPGA及VerilogHDL语言来设计数字复、接分接系统。
1数字复接系统简介
在数字通信网中,为了扩大传输容量和提高传输效率常常需要把若干个低速数字信号合并成为一个高速数字信号,然后再通过高速信道传输,这就是所谓的数字复接技术。
数字复接是一种已经非常成熟的技术,广泛地应用于无线通信、光通信和微波接力通信。
图1-1数字复接系统方框图
如图1-1所示,数字复接系统包括数字复接器(digitalmultiplexer)和数字分接器(digitalde-multiplexer)两部分。
数字复接器是把两个或多个低速的支路数字信号按照时分复用方式合并成为一路高速的合路数字信号的设备;数字分接器是把合路数字信号分解为原来的支路数字信号的设备。
数字复接器是由定时、调整和复接单元所组成;数字分接器是由同步、定时、分接和恢复单元所组成。
定时单元给设备提供统一的基准时间信号,同步单元给分接器提供与复接器基准时间同步的时间信号,调整单元负责同步输入的各支路信号。
恢复单元与调整单元相对,负责把分接出来的各支路信号复原。
2数字复接方法及方式
2.1数字复接的方法
数字复接的方法主要有按位复接、按字复接和按帧复接三种。
(1)按位复接
按位复接的方法是每次只复接每一个支路的一位码。
复接后,码序列中的第一位表示第一路中的第一位码;第二位表示第二路的第一位码;以此类推,第N位表示第N路的第一位码。
这N位码形成第一时隙。
同样,第二时隙是有每路的第二位码复接而成。
这种复接方法的特点是设备简单、只需小容量存储,易于实现。
(2)按字复接
按字复接就是每次复接支路的一个字或字节。
复接后的码顺序是每个时隙为一路n位码。
它的特点是利于多路合成和处理,但要求有较大的存储容量,使得电路较为复杂。
(3)按帧复接
这种方法是每次复接一个之路的一帧数码,它的特点是复接时不破坏原来的帧结构,有利于交换,但要求有更大的存储容量。
2.2数字复接的方式
按照复接时各低速信号的情况,复接方式可分为同步复接、异步复接与准同步复接。
(1)同步复接
同步复接被复接的各个支路信号在时间上是完全同步的。
在实际应用中,由于各个支路信号到达的时间不一样,造成支路间的码位相位不同,使得信息不能被正确复接。
因此需要对支路进行相位调整。
在复接时,要插入帧同步码及其它的业务码。
(2)异步复接
将没有统一标称频率的不同支路数字信号进行复接的方式成为异步复接。
在数字通信中广泛采用这种复接方式。
(3)准同步复接
准同步复接是指参与复接的各个低速信号使用各自的时钟,但各支路的时钟需要在一定的容差范围内。
准同步复接实际上是在同步复接的基础上增加了码速调整功能。
3系统原理和各模块设计
3.1系统原理及框图
首先介绍系统的工作过程。
此数字通信系统分为发端和收端两部分。
在发端,FPGA对A/D变换数据、DIP1数据和DIP2数据插入帧同步码,形成一帧,对此帧按位时分复用并串行发送出去。
同时,A/D输入端的模拟电压值将通过FPGA的处理,显示在七段数码管上。
在收端,FPGA首先从串行码中提取位时钟,然后识别帧同步。
当识别出帧同步后,FPGA解复用三路并行码,分别将这三路并行码送到后面的D/A变换器、LED1和LED2。
同时,第一路并行码通过FPGA的处理,显示到七段数码管上。
传输帧结构如图3-1所示:
图3-1传输帧结构
总系统框图如图3-2所示:
图3-2总系统框图
3.2发端系统设计
图3-3是发端系统方框图
图3-3发端系统方框图
如图3-3所示,发端有三路信号:
A/D变换信号、拨码开关1和拨码开关2产生的8位信码。
A/D变换的信码经过FPGA处理显示到七段译码管上,它代表变换前模拟信号的电压值。
由于三路信号都是静态信号,因此输入不用进行码速变换和码速调整。
输出信号的码速率为256Kbps。
发端电路在做PCB时需要单层布线,因此将发端系统板做成三块小板,分为三个图,分别是发端主图、A/D变换图和LED显示图。
发端主图如3-4所示,以发端FPGA为核心,其它功能块逐一实现。
为了FPGA运行的稳定,要在其周围加入6个滤波电容,电容值为0.1uF。
拨码开关与排阻共同构成八位信码,分别接到FPGA的8个I/O端口。
复位电路是系统正常运行的必要部分,它由按键开关,电解电容和电阻构成。
主图板与AD变换板、LED显示板之间用插针和电线连接。
这些插针和电线将为A/D变换板和LED显示板提供电源和通信路径。
此外,FPGA还需要配置电路。
配置电路在开机时将配置文件载入到FPGA中,FPGA才可以工作。
配置电路由上拉电阻和插座组成,其中,五个端口接到FPGA五个配置引脚,他们是:
DATA0、nSTATUS、nCONFIG、CONF_DONE与DCLK。
图3-4发端主图原理图
A/D变换图如图3-5所示,要说明的是,这里没有采用并行A/D,而是采用了串行A/D,这样可以节省FPGA的管脚。
我使用的ADC型号是TLC549。
TLC549转换输入端模拟量为数字量,为FPGA提供串行数据。
这块板的电源由主图板提供,电源端接到主图板的电源端。
TLC549需要一片0.1uF的陶瓷电容为芯片的电源端滤波。
在做PCB时,这片电容应靠近芯片的VCC与GND。
TLC549的模拟输入量有电位器分压和外部输入,通过单刀双掷开关选择。
外部输入的模拟量可以是信号源输出,音频输入等。
图3-5A/D变换图
LED显示图如图3-6所示,我用五位LED显示模拟电压值。
它可以提供0.0001的显示精度。
这五位LED由一位独立LED和一个四LED组组成。
这五个LED采用扫描方式显示。
扫描显示是LED显示的常用方法。
通过五个PNP管控制五个LED分时发光,时隙为32ms。
在此时隙下,人眼不会察觉到LED分别点亮,而是同时在亮。
此法不仅节省七段译码驱动芯片和FPGA的管脚,而且节约电能。
小数点的位置固定不变,因此只需将独立LED的小数点设计为常亮。
LED数码管采用共阳极,公共端接PNP发射极,PNP集电极接电源,PNP的导通由FPGA控制。
七段译码芯片采用DM74LS47,它是一片驱动共阳极LED数码管的芯片。
同样,在这片芯片的VCC与GND之间加入0.1uF陶瓷滤波电容。
图3-6LED显示图
3.3收端系统设计
收端系统框图如图3-7所示:
图3-7收端系统框图
收端系统分为两部分:
收端主图和D/A变换图。
收端主图如图3-8所示,与发端主图有相似之处。
收端FPGA同样需要加入滤波电容,复位电路和配置电路。
解复用后的第二路与第三路数据通过两组8个LED灯反映出来。
另外,为周边板提供电源和数据接口的插针也要设计出来。
如果将各模块直接用线连起来会很复杂,因此采用网标的连接方式。
图3-8收端主图
D/A变换图如图3-9所示,采用的D/A芯片是DAC0830。
它受控于FPGA的DAC_STROBE端口,负责将第一路码转换为模拟信号并输出到外部接口。
0.1uF的滤波电容也是必要的。
图3-9D/A变换图
3.4FPGA的设计流程
电路的原理图画好后,便可以根据各模块的特点,性能和限制条件来设计FPGA了。
FPGA设计分为设计输入、综合、功能仿真(前仿真)、实现、时序仿真(后仿真)、配置下载等六个步骤,设计流程如图3-10所示。
图3-10FPGA设计流程
下面分别介绍各个设计步骤。
3.4.1设计输入
设计输入包括使用硬件描述语言HDL、状态图与原理图输入三种方式。
HDL设计方式是现今设计大规模数字集成电路的良好形式,除IEEE标准中VHDL与VerilogHDL两种形式外,尚有各自FPGA厂家推出的专用语言,如Quartus下的AHDL。
HDL语言描述在状态机、控制逻辑、总线功能方面较强,使其描述的电路能特定综合器(如Synopsys公司的FPGACompilerII或FPGAExpress)作用下以具体硬件单元较好地实现;而原理图输入在顶层设计、数据通路逻辑、手工最优化电路等方面具有图形化强、单元节俭、功能明确等特点,另外,在Altera公司Quartus软件环境下,可以使用MomoryEditor对内部memory进行直接编辑置入数据。
常用方式是以HDL语言为主,原理图为辅,进行混合设计以发挥二者各自特色。
通常,FPGA厂商软件与第三方软件设有接口,可以把第三方设计文件导入进行处理。
如Quartus与Foundation都可以把EDIF网表作为输入网表而直接进行布局布线,布局布线后,可再将生成的相应文件交给第三方进行后续处理。
3.4.2设计综合
综合,就是针对给定的电路实现功能和实现此电路的约束条件,如速度、功耗、成本及电路类型等,通过计算机进行优化处理,获得一个能满足上述要求的电路设计方案。
也就是是说,被综合的文件是HDL文件(或相应文件等),综合的依据是逻辑设计的描述和各种约束条件,综合的结果则是一个硬件电路的实现方案,该方案必须同时满足预期的功能和约束条件。
对于综合来说,满足要求的方案可能有多个,综合器将产生一个最优的或接近最优的结果。
因此,综合的过程也就是设计目标的优化过程,最后获得的结构与综合器的工作性能有关。
3.4.3仿真验证
从广义上讲,设计验证包括功能与时序仿真和电路验证。
仿真是指使用设计软件包对已实现的设计进行完整测试,模拟实际物理环境下的工作情况。
前仿真是指仅对逻辑功能进行测试模拟,以了解其实现的功能否满足原设计的要求,仿真过程没有加入时序信息,不涉及具体器件的硬件特性,如延时特性;而在布局布线后,提取有关的器件延迟、连线延时等时序参数,并在此基础上进行的仿真称为后仿真,它是接近真实器件运行的仿真。
3.4.4设计实现
实现可理解为利用实现工具把逻辑映射到目标器件结构的资源中,决定逻辑的最佳布局,选择逻辑与输入输出功能连接的布线通道进行连线,并产生相应文件(如配置文件与相关报告)。
通常可分为如下五个步骤:
(1)转换:
将多个设计文件进行转换并合并到一个设计库文件中。
(2)映射:
将网表中逻辑门映射成物理元素,即把逻辑设计分割到构成可编程逻辑阵列内的可配置逻辑块与输入输出块及其它资源中的过程。
(3)布局与布线:
布局是指从映射取出定义的逻辑和输入输出块,并把它们分配到FPGA内部的物理位置,通常基于某种先进的算法,如最小分割、模拟退火和一般的受力方向张弛等来完成;布线是指利用自动布线软件使用布线资源选择路径试着完成所有的逻辑连接。
因最新的设计实现工具是时序驱动的,即在器件的布局布线期间对整个信号通道执行时序分析,因此可以使用约束条件操作布线软件,完成设计规定的性能要求。
在布局布线过程中,可同时提取时序信息形成报靠。
(4)时序提取:
产生一反标文件,供给后续的时序仿真使用。
(5)配置:
产生FPGA配置时的需要的位流文件。
在实现过程中可以进行选项设置。
因其支持增量设计,可以使其重复多次布线,且每次布线利用上一次布线信息以使布线更优或达到设计目标。
在实现过程中应设置默认配置的下载形式,以使后续位流下载正常。
3.4.5时序分析
在设计实现过程中,在映射后需要对一个设计的实际功能块的延时和估计的布线延时进行时序分析;而在布局布线后,也要对实际布局布线的功能块延时和实际布线延时进行静态时序分析。
从某种程序来讲,静态时序分析可以说是整个FPGA设计中最重要的步骤,它允许设计者详尽地分析所有关键路径并得出一个有次序的报告,而且报告中含有其它调试信息,比如每个网络节点的扇出或容性负载等。
静态时序分析器可以用来检查设计的逻辑和时序,以便计算各通中性能,识别可靠的踪迹,检测建立和保持时间的配合,时序分析器不要求用户产生输入激励或测试矢量。
虽然Xilinx与Altera在FPGA开发套件上拥有时序分析工具,但在拥有第三方专门时序分析工具的情况下,仅利用FPGA厂家设计工具进行布局布线,而使用第三方的专门时序分析工具进行时序分析,一般FPGA厂商在其设计环境下皆有与第三方时序分析工具的接口。
Synopsys公司的PrimeTime是一个很好的时序分析工具,利用它可以达到更好的效果。
将综合后的网表文件保存为db格式,可在PrimeTime环境下打开。
利用此软件查看关键路径或设计者感兴趣的通路的时序,并对其进行分析,再次对原来的设计进行时序结束,可以提高工作主频或减少关键路径的延时。
与综合过程相似,静态时序分析也是一个重复的过程,它与布局布线步骤紧密相连,这个操作通常要进行多次直到时序约束得到很好的满足。
在综合与时序仿真过程中交互使用PrimeTime进行时序分析,满足设计要求后即可进行FPGA芯片投片前的最终物理验证。
3.4.6下载验证
下载是在功能仿真与时序仿真正确的前提下,将综合后形成的位流下载到具体的FPGA芯片中,也叫芯片配置。
FPGA设计有两种配置形式:
直接由计算机经过专用下载电缆进行配置;由外围配置芯片进行上电时自动配置。
因FPGA具有掉电信息丢失的性质,因此可在验证初期使用电缆直接下载位流,如有必要再将烧录配置芯片中(如Xilinx的XC18V系列,Altera的EPC2系列)。
使用电缆下载时有多种直载方式,如对Xilinx公司的FPGA下载可以使用JTAGProgrammer、HardwareProgrammer、PROMProgrammer三种方式,而对Altera公司的FPGA可以选择JTAG方式或PassiveSerial方式。
因FPGA大多支持IEEE的JTAG标准,所以使用芯片上的JTAG口是常用下载方式。
将位流文件下载到FPGA器件内部后进行实际器件的物理测试即为电路验证,当得到正确的验证结果后就证明了设计的正确性。
电路验证对FPGA投片生产具有较大意义。
下面将根据FPGA的设计流程来进行本设计。
3.5发端FPGA设计
在原理图做好之后。
就可以设计FPGA了。
我所使用的设计软件是Altera的QuartusII,所使用的FPGA是Altera的FLEX10K10。
首先,根据发端FPGA所要完成的功能将设计分为三个子模块。
它们是系统分频模块、复接模块和显示模块。
设计细分如图3-11:
如图3-11发端FPGA设计细分
发端采用同步设计,所有触发器均使用系统时钟,分频模块输出全部接到触发器的使能端。
这样的设计可以避免使用行波时钟。
行波时钟不能被时序分析器分析,将被排除出时序逻辑。
行波时钟还会使后续电路产生亚稳态。
因此应尽量避免使用行波时钟。
发端顶层如图3-12所示,
图3-12发端FPGA顶层
下面将介绍各模块的作用。
3.5.1分频模块
分频模块的作用是将系统时钟2.048MHz进行分频,生成其它模块所需要的时钟,并将这些时钟接到系统触发器的使能端。
在设计中,分频模块输出有“CLK_DIV_50P”、“EN”和“EN_SCAN”。
其中,“CLK_DIV_50P”用来作为串行A/D的控制信号,“EN”是时钟频率为256KHz的窄脉冲时钟信号,它用来作复接时钟。
“EN_SCAN”是用来做LED扫描控制的方波时钟,频率是32Hz。
图3-13是分频器的寄存器传输级电路图,
图3-13分频器传输级电路图
分频模块的设计思想实现计数器。
计数器实现循环计数,当达到某个计数值时,相应输出寄存器改变逻辑状态。
模块中的计数器有counter_q和counter1_q。
当counter_q计满时自动归零,EN输出变为“1”,否则,EN为“0”。
当counter1_q计满数时,自动归零,EN_SCAN变为“1”,否则EN_SCAN为“0”。
CLK_DIV_50P的频率与EN相同,不同的是CLK_DIV_50P是方波,而EN是窄脉冲。
3.5.2复接模块
复接模块的作用是时分复用三路数据码、插入帧同步码。
此模块还有一个作用是控制串行A/D工作。
复接模块的寄存器传输级电路图如图3-14,
图3-14复接模块寄存器传输级电路图
复接模块的核心也是自归零计数器。
每一个输出都是在相对应的计数值下完成的,每一次串行A/D的控制是在计数器达到某些计数值时完成。
因此,可以将计数器看成是复接模块的控制中心。
复用过程由模32定时计数器控制。
当计数值在0~7时,串行输出帧同步码;计数值在8~15时,给A/D送CS控制信号和位时钟信号,将串行A/D的数据锁存并输出,同时给显示模块送控制信号和锁存后的A/D数据;计数值在16~23时,串行输出第二路码;计数值在24~31时,串行输出第三路码。
帧同步码是11110010,它作为帧头,其后跟着三路数据码。
3.5.3显示模块
显示模块用来将模拟信号的电压显示出来。
它由分频模块和复接模块共同控制。
显示模块又分为三个子模块:
乘法模块、二进制到BCD转换模块和显示扫描模块。
显示模块顶层如图3-15
图3-15显示模块顶层
乘法模块作用是根据8位A/D转换标度,一共256个量化值,值与值之间的步长是5/256≈0.0195,A/D所能显示的最小电压值是0.0195伏的将其扩大10000倍并与A/D数据相乘得到16位的数据。
乘法模块的电路图如图3-16,
图3-16乘法模块电路图
二进制到BCD转换模块对乘法模块产生的16位数据进行减法运算,对相应的寄存器进行累加运算,加法的最终结果就是BCD码。
此BCD码的表示范围是0~99999。
因此A/D显示精度可达0.0001。
相比之下,另一种转换方法是查表法。
查表法是将范围内的所有二进制数的BCD码一一列举出来,二进制数相当于地址,而BCD数就是地址中的内容。
这两种方法各有千秋。
查表法速度快,只需要一个时钟周期时间,但是程序冗长,编写工作量大,同时占用大量的FPGA资源,是典型的面积换速度;计算