第一篇:数字锁相环的FPGA设计与实现-课设
1.设计要求
利用MAX PLUSII软件工具,设计一个全数字锁相环路,通过它从19.2k的信号中提取同步信号。本地源时钟为11.0592MHz。
要求实现的功能:
a当远端信号(方波)的占空比分别为1:
1、1:
3、1:5和1:7时,从其中提取同步信号。b先将远端信号(方波)转变成伪随机序列,然后从中提取同步信号。完成仿真过程,给出测试结果,要求得到同步带宽、捕捉带宽和最大同步时间。
2.设计原理
2.1数字锁相环基本原理
一个典型的锁相环(PLL)系统,是由鉴相器(PD),压控荡器(VCO)和低通滤波器(LPF)三个基本电路组成,如图1所示。
图1 PLL模块图
传统的锁相环是模拟电路,它利用环路中误差信号去连续地调整位同步信号的相位。全数字锁相环路完全用数字电路构成,采用高稳定度的振荡器(信号钟),从鉴相器所获得的与同步误差成比例的误差信号不是直接用于调整振荡器,而是通过一个控制器在信号钟输出的脉冲序列中附加或扣除一个或几个脉冲,这样同样可以调整加到鉴相器上的位同步脉冲序列的相位,达到同步的目的。
全数字锁相环(ADPLL)由数字鉴相器(DP)、数字滤波器(DF)与数字压控振荡器(DCO)三个数字电路部件组成,如图2所示。
图2 ADPLL模块图
2.2数字锁相环原理框图
本设计中的数字锁相环由信号钟、控制器、分频器、相位比较器组成。其原理框图如图3所示。
图3 数字锁相环原理框图
信号钟包括一个高稳定度的晶体振荡器和整形电路。若接收码元的速率为F=1/T,那么振荡器频率设定在nF,经整形电路之后,输出周期性脉冲序列,其周期T0=1/(nF)=T/n。本设计中时钟为11.0592MHz。
控制器包括图中的扣除门(常开)、附加门(常闭)和“或门”,它根据相位比较器输出的控制脉冲(“超前脉冲”或“滞后脉冲”)对信号钟输出的序列实施扣除(或添加)脉冲。分频器是一个计数器,每当控制器输出n个脉冲时,它就输出一个脉冲。控制器与分频器的共同作用的结果就调整了加至相位比较器的位同步信号的相位。这种相位前、后移的调整量取决于信号钟的周期,每次的时间阶跃量为T0,相应的相位最小调整量为Δ=2πT0/T=2π/n。
相位比较器将接收脉冲序列与位同步信号进行相位比较,以判别位同步信号究竟是超前还是滞后,若超前就输出超前脉冲,若滞后就输出滞后脉冲。
3.数字锁相环的硬件实现
根据图3(数字锁相环原理框图),利用MAX PLUSII中的硬件仿真功能,实现数字锁相环。下面将给出信号钟、分频器和相位比较器的硬件实现图。
信号钟包含一个晶振和整形电路,晶振产生的方波信号经过整形电路后变成脉冲信号。为了和控制器相配合,需要两路脉冲信号。整形电路由D触发器和逻辑与、或、非门组成。D触发器起到延时的作用,然后通过逻辑或门和与门产生脉冲波。电路如图4所示。
图4 整形电路(rc)
分频器是一个计数器,由3片74LS161来实现。电路如图5所示。
图5 分频器(fd)
相位比较器主要由微分脉冲电路和逻辑与、非门组成。微分脉冲形成电路由D触发器和逻辑异或、与门组成。D触发器起延时的作用。微分脉冲形成电路如图6所示。
图6 微分脉冲形成电路(dp)
数字锁相环的硬件实现电路如图7所示。图中蓝色字样所在框图由上至下分别为微分脉冲形成电路(dp)、整形电路(rc)和分频器(fd),具体结构如图
6、图4和图5所示。
图7 数字锁相环电路
由于在MAX PLUSII中没有占空比为1:
3、1:5和1:7的方形波,所以要利用可用的元器件来生成满足要求的信号。可以通过把方波分别通过模
4、模6和模8计数器来达到这一目的。在本设计中,利用74LS161来实现这些计数器。模
4、模
6、模8计数器分别如图
8、图
9、图10所示。
图8 模4计数器(1_3)
图9 模6计数器(1_5)
图10 模8计数器(1_7)
方波通过这些计数器后就能形成占空比满足要求的信号,然后再将信号送入图7所示的数字锁相环电路中,便可以提取出同步信号。
在本设计中,将方波转变成伪随机序列用到74LS194和逻辑异或门、与非门。7位伪随机序列发生器电路如图11所示。将产生的伪随机序列送入图7所示的数字锁相环电路中,便可以提取出同步信号。
图11 7位伪随机序列发生器
4.仿真过程
4.1接收信号的占空比为1:1
条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图12所示,蓝色线条处放大后如图13所示。经过一段时间后锁相成功,达到同步状态,如图14所示。
图12 位同步信号超前于接收脉冲序列
图13 超前脉冲作用于扣除门
图14同步状态
位同步信号滞后于接收脉冲序列的情况如图15所示,蓝色线条处放大后如图16所示。经过一段时间后锁相成功,达到同步状态,如图17所示。
图15 位同步信号滞后于接收脉冲序列
图16 滞后脉冲作用于附加门
图17 同步状态
通过多次试验,可得测试结果如下: 同步建立时间:14.824ms 同步带宽:40hz 4.2接收信号的占空比为1:3
条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图18所示,蓝色线条处放大后如图19所示。经过一段时间后锁相成功,达到同步状态,如图20所示。同步建立时间:6.906ms
图18 位同步信号超前于接收脉冲序列
图19 超前脉冲作用于扣除门
图20 同步状态
位同步信号滞后于接收脉冲序列的情况如图21所示,蓝色线条处放大后如图22所示。经过一段时间后锁相成功,达到同步状态,如图23所示。
图21 位同步信号滞后于接收脉冲序列
图22 滞后脉冲作用于附加门
图23 同步状态
通过多次试验,可得测试结果如下: 同步建立时间:14.905ms 同步带宽:24hz 4.3接收信号的占空比为1:5
条件设置为:End Time = 10ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图24所示,蓝色线条处放大后如图25所示。经过一段时间后锁相成功,达到同步状态,如图26所示。
图24 位同步信号超前于接收脉冲序列
图25 超前脉冲作用于扣除门
图26 同步状态
位同步信号滞后于接收脉冲序列的情况如图27所示,蓝色线条处放大后如图28所示。经过一段时间后锁相成功,达到同步状态,如图29所示。
图27 位同步信号滞后于接收脉冲序列
图28 滞后脉冲作用于附加门
图29 同步状态
通过多次试验,可得测试结果如下: 同步建立时间:14.706ms 同步带宽:16hz 4.4接收信号的占空比为1:7
条件设置为:End Time = 20ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图30所示,蓝色线条处放大后如图31所示。经过一段时间后锁相成功,达到同步状态,如图32所示。
图30 位同步信号超前于接收脉冲序列
图31 超前脉冲作用于扣除门
图32 同步状态
位同步信号滞后于接收脉冲序列的情况如图33所示,蓝色线条处放大后如图34所示。经过一段时间后锁相成功,达到同步状态,如图35所示。
图33 位同步信号滞后于接收脉冲序列
图34 滞后脉冲作用于附加门
图35 同步状态
通过多次试验,可得测试结果如下: 同步建立时间:14.865ms 同步带宽:18hz 4.5远端信号(方波)转变成伪随机序列
条件设置为:End Time = 20ms,Grid Size = 45.2ns 位同步信号超前于接收脉冲序列的情况如图36所示,蓝色线条处放大后如图37所示。经过一段时间后锁相成功,达到同步状态,如图38所示。
图36 位同步信号超前于接收脉冲序列
图37 超前脉冲作用于扣除门
图38 同步状态
位同步信号滞后于接收脉冲序列的情况如图39所示,蓝色线条处放大后如图40所示。经过一段时间后锁相成功,达到同步状态,如图41所示。
图39 位同步信号滞后于接收脉冲序列
图40 滞后脉冲作用于附加门
图41 同步状态
通过多次试验,可得测试结果如下: 同步建立时间:52.476ms 同步带宽:8hz 5.心得体会
在做这个课程设计之前,我没有接触过MAX PLUSII这个软件,对数字锁相器亦没有太多的认识,所以刚开始感觉很难。在查阅了很多相关资料之后,对软件的操作和数字锁相器的理解已经比较深入,越到后边就感觉越得心应手。自己竟然在短短几天之内,掌握了这些东西,并且完整地将课程设计完成。在这过程中也学到了很多东西。一方面,在完成该课程设计的过程中,对数字锁相环技术有了深刻的理解,也学会了如何去利用仿真工具去验证一个设计的正确性和可行性。这对之后的毕业设计都有莫大的帮助。另一方面,自己又一次领悟到与人合作交流的重要性,期间遇到的许多问题都是在不断地讨论和请教中解决的,如果没有集体的智慧,可能到现在也无法完成该设计。总而言之,学期末的课程设计教会了我很多东西,也为本学期画上了一个完满的句号。感谢老师的指导。
第二篇:基于FPGA的数字电子时钟设计与实现(范文模版)
《数字电子技术》课程设计
设计题目:基于FPGA的数字电子时钟设计与实现
系 部: 电子与信息工程系 专业班级: 电子信息工程08秋(1)班 小组成员: 胡修远 学 号: 08031145 指导教师 : 陶亚雄 周丽婕
完成日期: 2012年 1 月
目录
一、所用设备与器材................................................1 1.1仪器设备...................................................1 二.系统方案......................................................1 2.1 设计思想..................................................1 2.1.1课题背景........................................1 2.1.2 Quartus II软件.................................3 2.2工作原理及系统框图.........................................8 三.软件方案......................................................9 3.1 程序流程图................................................9 3.1.1 24进制........................................9 3.1.2 10进制流程图.................................10 3.1.3 6进制........................................11 3.1.4 60进制.......................................11 3.1.5 from0to9......................................12 3.1.6 分频模块.......................................12 3.1.7 总流程图.......................................13 3.2 程序清单.................................................14 3.2.1头文件complete_clock程序......................14 3.2.2 counter24程序.................................15 3.2.3 counter60程序.................................15 3.2.4 from0to9程序..................................16 3.2.5 counter6程序..................................17 3.2.6 counter10程序.................................17 3.2.7 分频程序.......................................17 3.2.8 校时模块程序...................................18 四.调试及结果...................................................18
4.1 模块仿真.................................................18 4.1.1 counter10模块仿真.............................18 4.1.2 counter24模块仿真.............................19 4.1.3 counter60模块仿真.............................19 4.1.4 分频模块仿真...................................19 4.1.5 top_clock计时模块仿真.........................19 4.2 程序下载.................................................20 4.3分析运行结果..............................................21 4.3.1 设计总结.......................................21 4.3.2 心得体会.......................................21 4.3.3 致谢...........................................22
2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
一、所用设备与器材
1.1仪器设备
使用仪器设备有FPGA DE2-70开发板、PC机、信号发生器。
图1 FPGA DE2-70开发板图
二.系统方案
2.1 设计思想
利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。扩展功能设计为倒计时功能,从59分55秒至59分59秒,每秒亮一盏灯报时。
2.1.1课题背景
20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力的推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能更进一步,产品更新换代的节奏也越来越快。
20世纪80年代末,出现了FPGA(Field Progrommable Gate Array),CAE和CAD技术的应用更为广泛,它们在PCB设计的原理图输入,自动布局布线及PCB分析,以及逻辑设计,逻辑仿真布尔综合和化简等方面担任了重要的角色,2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
为电子设计自动化必须解决的电路建模,标准文档及仿真测试奠定了基础。硬件描述语言是EDA技术的重要组成部分,VHDL是作为电子设计主流硬件的描述语言。本论文就是应用VHDL语言来实现秒表的电路设计。VHDL语言是标准硬件描述语言,它的特点就是能形式化抽样表示电路结构及行为,支持逻辑设计中层次领域的描述,借用了高级语言的精巧结构简化电路描述,具有电路模拟与验证及保证设计的正确性,支持电路由高层向底层的综合变换,便于文档管理,易于理解和设计重用。
EDA技术是在电子CAD技术基础上发展起来的计算机软件系统,是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程在计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA 技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA 设计可分为系统级、电路级和物理实现级。
用VHDL语言开发的流程:(1)文本编辑:用任何文本编辑器都可以进行,也可以用专用的HDL编辑环境。通常VHDL文件保存为.vhd文件。
(2)功能仿真:将文件调入HDL仿真软件进行功能仿真,检查逻辑功能是否正确(也叫前仿真,对简单的设计可以跳过这一步,只在布线完成以后,进行时序仿真)。
(3)逻辑综合:将源文件调入逻辑综合软件进行综合,即把语言综合成最简的布尔表达式和信号的连接关系。逻辑综合软件会生成.edf(edif)的EDA工业标准文件。
(4)布局布线:将.edf文件调入PLD厂家提供的软件中进行布线,即把设计好的逻辑安放到PLD/FPGA内。2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
3(5)编程下载:确认仿真无误后,将文件下载到芯片中。
本设计为一个多功能的数字钟,具有时、分、秒计数显示功能,以24小时的循环计数:具有校对功能。本设计采用EDA技术,以硬件描述语言VHDL为系统逻辑描述手段设计文件,在Quartus 工具软件下,采用自顶向下的设计方式,由各个基本模块共同构建了一个基本FPGA的数字钟。
系统主芯片采用EP2C70F896C6,有时钟模块、控制模块、计时模块、数据译码模块、显示以及报时模块组成。经编译和仿真所设计的程序,在可编程逻辑器件上下载验证,本系统能够完成时、分、秒的分别显示,由按键输入进行数字钟的校时、清零、启停功能。
随着电子技术的发展,数字电路朝着速度快、容量大、体积小、重量轻的方向发展。人们对时间计量的精度要求越来越高,钟表的数字化给人们生产生活带来了极大的方便。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。
本次设计以数字电子为主,实现对时、分、秒数字显示的计时装置,周期为24小时,显示满刻度为23时59分59秒,并具有校时功能和报时功能的数字电子钟。课程设计所采用的开发平台:Quartus II是可编程片上系统的综合性设计环境,它支持CPLD和FPGA器件的开发。FPGA(Field Programmable Gate Array)现场可编程门阵列,内部主要由许多可编程逻辑模块组成,靠纵横交错的分布式可编程互连线连接起来,可构成极其复杂的逻辑电路。本次课程设计所采用的FPGA芯片 Cyclone II系列的EP2C70F896C6。
2.1.2 Quartus II软件
Quartus II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计程。Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。
Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
Quartus II使用基本流程如下: 1.打开Quartus II软件,创建工程
a.点击工具栏File,利用创建工程向导(New Project Wizard)创建新工程。
图2 新建工程图
b.工程目录为c:altera71sp1quartus(路径中不能包含中文,不能建立在桌面上),工程名称以及顶层设计实体为counter10(以英文字母开头)。
图3 创建路径图
c.选择与开发板上芯片型号对应的器件。硬件选cycloneⅡ EP2C70F896C6。
图4 芯片选择图
d.进入第三方EDA工具选择窗口,在此可以选择使用第三方的EDA工具,如一些布局布线、综合、仿真软件。
e.确认无误后,单击Finsh完成工程创建。2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
f.工程创建成功后,在【Project Navigator】(资源管理窗口)显示当前工程的层次、文件和设计单元。
g.执行File—New—Design Files—verilog HDL File,建立原理图文件。
图5 原理图文件建立图
h.完成后点击File----save as,保存到c:altera71sp1quartus目录下。i.使用文本编辑器输入源码,完成原理图编译。
j.编译工程,执行Processing—start—start Analysis&Elaboration进行编译,分析检查输入文件是否有错误。2.创建仿真波形文件
a.点击New—Vector Waveform File—save as
图6 新建仿真波形文件图
b.在Name框图中右击鼠标,Insert—Insert Node or Bus—Node Finder—在Filter中选择Pinns:all,点击list,点击“》”将左侧列表中的内容移动到右侧列表中。2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
图7 插入管脚图
c.在CP上右击选择value,选择时钟脉冲信号clock(周期可自行设置)。EN和nCR都选择高电平(Forcing High)。
图8 输入信号赋值
d.选择Assignments—Settings设置—simulater settings—模式mode选择功能型Functional e.选择Processing—generate functional simulation netlist生成功能网表
图9 生成功能网表图
f.点击波形仿真的快捷键,进行波形的仿真。
g.分别给EN和nCR不同的电平信号,观察分析波形的变化。2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
图10 EN=1 nCR=1
图11 EN=0 nCR=1
图12 EN=1 nCR=0 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
图13 EN=0 nCR=0
图14 EN脉冲 nCR=1
2.2工作原理及系统框图
利用数字电子技术、EDA设计方法、FPGA等技术,设计、仿真并实现一个基于FPGA的数字电子时钟基本功能,其基本组成框图如图1所示,振荡器采用ALTERA的DE2-70实验板的50MHz输出,分频器将50MHz的方波进行分频进而得到1Hz的标准秒脉冲,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。电子时钟扩展功能为倒计时流水灯。数字电子钟的电路组成框图片如下图: 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
多功能数字钟顶层模块振荡器校时电路倒计时模块分频器CP 1Hz时计数器(24进制)分计数器(60进制)秒计数器(60进制)时译码显示6计数器10计数器分译码显示6计数器10计数器分译码显示 图15 系统框图
1.数字钟电路系统由主体电路和扩展电路两大部分所组成。
2.数字电子时钟电路具有时、分、秒计时,秒计数器计满60后向分计数器进位,分计数器计满60后向小时计数器进位,小时计数器按照“24进制”规律计数。
3.准确计时,以数字形式显示时、分、秒的时间,计数器的输出经译码器送显示器。
4.具有分、时校正功能,校正输入脉冲频率为1Hz 5.复位功能,时、分、秒计时清零。
6.扩展功能为:具有仿广播电台整点报时的功能,即每逢59分51秒、52秒、53秒、54秒、55秒及57秒,LED绿灯依此点亮,59分59秒时,LED红灯亮,形成倒计时流水灯报时。
三.软件方案
3.1 程序流程图
3.1.1 24进制
小时采用24进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,23],使能信号EN等于0时,计时器保持。当高位大于2或高位等于2且低位大于3时,计时器清零,否则继续计时。流程图见下图。2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
开始CP↑or nCR↓YnCR=0 ?YNNEN=0 ?YNNQH>2 or Q>23Y清零保持清零Q=Q+1 图16 24进制程序流程图
3.1.2 10进制流程图
当CP↑,EN和nCR为高电平时计数,计数范围为[0,9],使能信号EN等于0时,计时器保持。当计时到9的时候,计时器清零,否则继续计时。流程图见下图。
开始CP↑or nCR↓YnCR=0 ?YNNNEN=0 ?YQ=9 ?Y清零保持清零NQ=Q+1
图17 10进制流程图 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
3.1.3 6进制
当CP↑,EN和nCR为高电平时计数,计数范围为[0,5],使能信号EN等于0时,计时器保持。当计时到5的时候,计时器清零,否则继续计时。流程图见下图。
开始CP↑or nCR↓YnCR=0 ?YNNNNEN=0 ?YQ=5 ?Y清零保持清零Q=Q+1 图18 6进制流程图
3.1.4 60进制
分、秒采用60进制计时,当CP↑,EN和nCR为高电平时计数,计数范围为[0,59],使能信号EN等于0时,计时器保持。当个位等于9时向十位进位;当个位等于9十位等于5,计时器清零,否则继续计时。流程图见下图。
开始CP↑or nCR↓NnCR=0?NEN=0?Y个位Q1=9?NYQ2=Q2+1Q2=5?YQ1=9?NNN清零保持Q1=Q1+1Y清零Q1=Q1+1 图19 60进制流程图 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
3.1.5 from0to9
数码管有7段组成,分共阳极和共阴极,本次设计采用共阳极数码管。当输入为低电平时,数码管显示;当输入为高电平时,数码管不显示。用这样的方法输入不同的高低信号控制数码管的显示。
HEX=7'b0000001HEX=1001111HEX=b0010010HEX=7'b0000110HEX=7'b1001100开始Case DNHEX=7'b0100000HEX=7'b1111111HEX=7'b0001111HEX=7'b0000000HEX=7'b0000100显示7显示8显示9显示6YHEX=7'b0100100显示5显示0显示1显示2显示3显示4 图20 from0to9流程图
3.1.6 分频模块
开始50MHz方波10^2分频500KHz方波10^2分频5KHz方波10^2分频50Hz方波10^2分频0.5Hz方波
图21 分频模块流程图 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
3.1.7 总流程图
开始开始NCPCP↑↑or nCRor nCR↓↓Y分频模块YYNYAdjHrkey=1?AdjHrkey=1?NNN时低位时低位=9?=9?NYYAdjMinKey=1?AdjMinKey=1?YY低位清零高位进位低位清零高位进位N高位高位>2or>2or时时>23>23YNN分低位分低位=9=9??NN清零清零YY秒低位秒低位=9=9??NNNY低位清零高位进位低位清零高位进位YY低位计数低位计数低位计数低位计数YNY秒高位秒高位=5=5??低位清零高位进位低位清零高位进位低位计数低位计数NYY高位高位=5=5??NN秒高位清零,分低位进位秒高位清零,分低位进位高位计数高位计数清零清零Y高位计数高位计数N低位计数低位计数Y低位清零高位进位低位清零高位进位N分低位分低位=9=9??NN分高位分高位=5=5??YY高位计数高位计数Y分清零,时低位位进位分清零,时低位位进位低位清零高位进位低位清零高位进位Y时低位时低位=9=9??NNNNYY高位高位>2or>2or时时>23>23清零清零低位计数低位计数
图22 总流程图 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
3.2 程序清单
3.2.1头文件complete_clock程序
module complete_clock(HEX0,HEX1,HEX2,HEX3,HEX4,HEX5,_50MHzIn,_1Hz,_50Hz, _5KHz,_500KHz,AdjMinkey,AdjHrkey,nCR,Alarm,LED0,LED10,LED3,LED4,LED5,LED6,LED7,LED8,LED9);
output [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;output Alarm,_1Hz,_50Hz,_5KHz,_500KHz;output LED0;output LED10;output LED3;output LED4;output LED5;output LED6;output LED7;output LED8;output LED9;wire [7:0] HEX0,HEX1,HEX2,HEX3,HEX4,HEX5;input nCR,_50MHzIn;wire _1Hz,_50Hz,_5KHz,_500KHz;wire LED0;wire LED10;wire LED3;wire LED4;wire LED5;wire LED6;wire LED7;wire LED8;wire LED9;input AdjMinkey,AdjHrkey;wire [7:0] Second,Minute,Hour;Divided_Frequency C1(_5KHz,_500KHz,nCR,_50MHzIn);//调用分频模块,输入50MHz的频率,经两次分频后变为5KHz Divided_Frequency U0(_1Hz,_50Hz,nCR,_5KHz);//调用分频模块,输入5KHz的频率,经
两次分频后变为1Hz top_clock U1(Hour,Minute,Second,_1Hz,nCR,AdjMinkey,AdjHrkey);//调用校时模块,对时、分模块进行校时 baoshi U2(Alarm_Ring,Minute,Second,_50Hz,_5KHz);assign Alarm=Alarm_Ring;assign LED0=({Minute,Second}==16'h5951);//定义LED0为59分51秒时灯亮 assign LED10=({Minute,Second}==16'h5952);//定义LED10为59分52秒时灯亮 assign LED3=({Minute,Second}==16'h5953);//定义LED3为59分53秒时灯亮 assign LED4=({Minute,Second}==16'h5954);//定义LED4为59分54秒时灯亮 assign LED5=({Minute,Second}==16'h5955);//定义LED5为59分55秒时灯亮 assign LED6=({Minute,Second}==16'h5956);//定义LED6为59分56秒时灯亮 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
assign LED7=({Minute,Second}==16'h5957);//定义LED7为59分57秒时灯亮 assign LED8=({Minute,Second}==16'h5958);//定义LED8为59分58秒时灯亮 assign LED9=({Minute,Second}==16'h5959);//定义LED9为59分59秒时灯亮 from0to9 U10(HEX0,Second[3:0]);//个位秒调用译码 from0to9 U9(HEX1,Second[7:4]);//十位秒调用译码 from0to9 U3(HEX2,Minute[3:0]);//个位分调用译码 from0to9 U4(HEX3,Minute[7:4]);//个位分调用译码 from0to9 U5(HEX4,Hour[3:0]);//个位时调用译码 from0to9 U6(HEX5,Hour[7:4]);//十位时调用译码 endmodule 3.2.2 counter24程序
module counter24(CntH,CntL,nCR,EN,CP);input CP,nCR,EN;output [3:0] CntH,CntL;reg [3:0] CntH,CntL;always @(posedge CP or negedge nCR)begin if(~nCR){CntH,CntL}<=8'h00;//当nCR=0时,计时器清零
else if(~EN){CntH,CntL}<={CntH,CntL};//当EN=0时,停止计时,保持 else if((CntH>2)||(CntH>9)||((CntH==2)&&(CntL>=3))){CntH,CntL}<=8'h00;else if((CntH==2)&&(CntL<3))begin CntH<=CntH;CntL<=CntL+1'b1;end else if(CntL==9)begin CntH<=CntH+1'b1;CntL<=4'b0000;end else begin CntH<=CntH;CntL<=CntL+1'b1;end end Endmodule 3.2.3 counter60程序
module counter60(Q1,Q2,Q3,Q4,Q5,Q6,Cnt,Cnt1,Cnt24,nCR,EN,CP,LED,LED1,LED2);input CP,nCR,EN;output [7:0] Cnt;output [7:0] Cnt1;output [7:0] Cnt24;output [6:0] Q1;output [6:0] Q2;output [6:0] Q3;output [6:0] Q4;output [6:0] Q5;output [6:0] Q6;output LED;output LED1;output LED2;wire [7:0] Cnt;2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
wire [7:0] Cnt1;wire [7:0] Cnt24;wire [6:0] Q1;wire [6:0] Q2;wire [6:0] Q3;wire [6:0] Q4;wire [6:0] Q5;wire [6:0] Q6;wire LED;wire LED1;wire LED2;wire ENP;wire ENP1;wire ENP2;wire ENP3;counter10 UC0(Cnt[3:0],nCR,EN,CP);counter6 UC1(Cnt[7:4],nCR,ENP,CP);counter10 UC2(Cnt1[3:0],nCR,ENP1,CP);counter6 UC3(Cnt1[7:4],nCR,ENP2,CP);counter24 UC4(Cnt24[7:4],Cnt24[3:0],nCR,ENP3,CP);assign ENP=(Cnt[3:0]==4'h9);assign ENP1=(Cnt==8'h59);assign ENP2=((Cnt1[3:0]==4'h9)&&(Cnt==8'h59));assign ENP3=((Cnt1==8'h59)&&(Cnt==8'h59));assign LED=~CP;assign LED1=~CP;assign LED2=~CP;from0to9 UC5(Q1,Cnt[3:0]);from0to9 UC6(Q2,Cnt[7:4]);from0to9 UC7(Q3,Cnt1[3:0]);from0to9 UC8(Q4,Cnt1[7:4]);from0to9 UC9(Q5,Cnt24[3:0]);from0to9 UC10(Q6,Cnt24[7:4]);Endmodule 3.2.4 from0to9程序
module from0to9(HEX,D);output [6:0] HEX;input [3:0] D;reg [6:0] HEX;always @(D)begin case(D)4'd0:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000001;4'd1:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001111;4'd2:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0010010;2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
4'd3:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000110;4'd4:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1001100;4'd5:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100100;4'd6:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0100000;4'd7:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0001111;4'd8:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000000;4'd9:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b0000100;default:{HEX[0],HEX[1],HEX[2],HEX[3],HEX[4],HEX[5],HEX[6]}=7'b1111111;endcase end endmodule 3.2.5 counter6程序
module counter6(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)begin if(~nCR)Q<=4'b0000;//当nCR=0时,计时器清零 else if(~EN)Q<=Q;//当EN=0时,停止计时,保持 else if(Q==4'b0101)Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时 end Endmodule 3.2.6 counter10程序
module counter10(Q,nCR,EN,CP);input CP,nCR,EN;output [3:0] Q;reg [3:0] Q;always @(posedge CP or negedge nCR)begin if(~nCR)Q<=4'b0000;//当nCR=0时,计时器清零 else if(~EN)Q<=Q;//当EN=0时,停止计时,保持 else if(Q==4'b1001)Q<=4'b0000;else Q<=Q+1'b1;//计时器正常计时 end Endmodule 3.2.7 分频程序
module Divided_Frequency(_1HzOut,nCR,_5kHzIN);input _5kHzIN,nCR;output _1HzOut;supply1 Vdd;//定义 Vdd 是高电平
wire [15:0] Q;//计时器的输出信号(中间变量)wire EN1,EN2,EN3;// 计时器的使能信号(中间变量)counter10 DU0(Q[3:0],nCR,Vdd,_5kHzIN);//调用十进制 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
counter10 DU1(Q[7:4],nCR,EN1,_5kHzIN);counter10 DU2(Q[11:8],nCR,EN2,_5kHzIN);counter10 DU3(Q[15:12],nCR,EN3,_5kHzIN);assign EN1=(Q[3:0]==4'h9);assign EN2=(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign EN3=(Q[11:8]==4'h9)&(Q[7:4]==4'h9)&(Q[3:0]==4'h9);assign _1HzOut=Q[15];//assign _500HzOut=Q[0];endmodule 3.2.8 校时模块程序
module top_clock(Second,Minute,Hour,_1Hz,nCR,AdjMinKey,AdjHrkey);input _1Hz,nCR,AdjMinKey,AdjHrkey;output [7:0] Second,Minute,Hour;wire [7:0] Hour,Minute,Second;supply1 Vdd;wire MinCP,HrCP;counter60 UT1(Second,nCR,Vdd,_1Hz);//调用counter60,对秒计时 counter60 UT2(Minute,nCR,Vdd,~MinCP);// 调用counter60,对分校时
counter24 UT3(Hour[7:4],Hour[3:0],nCR,Vdd,~HrCP);//调用counter24,对时校时 assign MinCP=AdjMinKey ? _1Hz:(Second==8'h59);//当MinCP=AdjMinKey时,执行校时,当MinCP≠AdjMinKey时,秒计时至59 时向分进位 assign HrCP=AdjHrkey?_1Hz:({Minute,Second}==16'h5959);//当HrCP=AdjHrkey时,执
行校时,当HrCP≠AdjHrkey时,分
秒计时至59分59秒时向时进位 Endmodule 四.调试及结果
4.1 模块仿真
4.1.1 counter10模块仿真
CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,9]
图counter10仿真波形图 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
4.1.2 counter24模块仿真
CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,23]
图24 counter24仿真波形图
4.1.3 counter60模块仿真
CP为时钟脉冲;当CP↑,EN和nCR为高电平时Q计数;Q的计数范围为[0,59]
图25 counter60仿真波形图
4.1.4 分频模块仿真
分频器是将输入的基本时钟信号分频为其他模块需要的5kHZ 和1HZ 的信号.其中CLK 输入为5kHZ , CLK2 输出1HZ 信号,分频实际也是用了计数器的原理。
图26 分频模块仿真波形图
4.1.5 top_clock计时模块仿真 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
当秒计时到59时,向分进一位,当秒计时到59且分计时到59时向时进一位。当时分秒计时到23’59’59时,计时器清零。
图27 top_clock计时模块仿真波形图
4.2 程序下载
图28 时测试校时,时至23 图29 时测试校时,时进位至00
图30 分测试校时分至59
图31 分测试校时,分进位至00 图32 59分52秒,LEDG1亮 图33 59分55秒,LEDG4亮 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
图34 59分57秒,LEDG6亮
图35 59分59秒,LEDR0亮
4.3分析运行结果
4.3.1 设计总结
本次大型作业我们所研究的课题是基于FPGA的数字电子时钟的设计与实现。时钟设计的方法是通过计时模块、分频模块、校时模块、译码显示模块和倒计时报时模块来构成该电子时钟。计时模块为时分秒计时,采用24进制计时。因此该模块中调用了24进制和60进制两个程序,其中60进制采用的是调用6进制和10进制的方法来实现。
分频模块输入一频率为50MHz的信号,经过四次10^2分频,将信号逐次分为500KHz、5KHz、50Hz直至0.5Hz。计时模块就由分频器分频出来的标准秒脉冲进行计时,时、分、秒计时模块分别由二十四进制时计数器、六十进制分计数器和六十进制秒计数器完成,校时模块完成时和分的校正。我们还进行了扩展功能设计——倒计时流水灯功能,从59分55秒至59分59秒,每秒亮一盏灯报时,55秒至58秒,依此亮绿灯,59秒亮红灯。
通过这两周的课程设计,我们熟悉了基于FPGA的数字电子时钟的设计与实现的整个流程,文本编辑,功能仿真,逻辑综合,布局布线,编程下载,每一步刚开始或多或少有些问题,但在我们不断努力学习补充修改后,最终圆满完成数字电子时钟的时、分、秒的计时和校时功能,复位功能,还设计实现了倒计时流水灯扩展功能。
4.3.2 心得体会
为期两周的大型作业,我们组顺利完成了基于FPGA的数字电子时钟设计与实现的课程设计。从刚开始对Verilog语言非常陌生,到最后接近熟练地掌握Verilog语言的程度,期间花费不少时间和精力,同时也收获了很多,学会了 2012.1
上海师范大学天华学院电信系数字集成器件与应用专业课程设计
使用Verilog语言编程仿真电路实验,掌握了可编程逻辑器件的应用开发技术,熟悉了一种EDA软件使用,掌握了Verilog设计方法,即分模块分层次的设计方法。
在设计的过程中,因为刚刚接触这种编程语言,我们也遇到了很多问题。但是我们没有放弃过,不断检查纠正错误。Verilog源程序的编写很容易出现错误,这就需要耐心的调试。因为很多情况下,一长串的错误往往是由一个不经意的小错误引起的。有时程序一直出错找不到原因的时候,我们也会去虚心向别的组的同学请教,或者和他们一起讨论问题,从中得到一些启发。
由于设备和时间的限制,我们还有一部分扩展内容没能够完成,即数字钟的整点蜂鸣报时功能。但本次设计实验已使我们对Verilog语言产生了浓厚的兴趣,在以后的学习生活中会主动去了解更多有关这方面的知识及其在实践中的应用。
这次大型作业,不仅让我们又掌握了一些新的知识,也提高了我们的动手能力和科学严谨的精神。其次也培养了我们自学的能力,遇到不明白的地方可以通过思考、查资料、与同学交流多种方式解决问题。这些对于我们以后的学习和工作都有极大的帮助。
4.3.3 致谢
最后,我们要感谢系里提供这一次的机会让我们学到更多知识,并且提供了这么好的学习条件,设备、学习环境、师资等方面都非常好。同时也要感谢周丽婕老师和陶亚雄老师两周以来耐心的指导,在我们遇到问题的时候,是她们悉心的指导帮助和不厌其烦的讲解下我们才得以顺利的完成这次的设计,我们再次表示由衷的感谢!
第三篇:基于FPGA的CDMA数字基带系统设计
摘 要
随着现代通信技术的发展,特别是移动通信技术的高速发展,CDMA技术越来越被人们所关注。而基于FPGA的CDMA数字基带系统正是一种新兴的具有很大可行性的技术。本文给出了CDMA数字基带收发系统的设计方案,并以Xilinx ISE 8.1为硬件开发平台,利用FPGA实现了4路信息信号的扩频、编码调制和解扩、解调、验证了初始方案的可行性。运用VHDL语言,实现对CDMA通讯系统的上行链路数字部分进行设计,对有关模块的编译,编译通过后的结果,以及使用Xilinx系列芯片通过仿真得到波形,证明了整个系统原理和设计提出的正确性。关键词:CDMA;数字基带;FPGA;Xilinx
目录
1.课程设计目的...............................................................................................................1 2.软、硬件环境介绍.....................................................................................................1 4.CDMA基带传输系统简介..........................................................................................2 5.CDMA基带系统设计....................................................................................................2
5.1 系统设计平台...............................................................................................................2 5.2 CDMA系统设计原理......................................................................................................2
6.系统总体设计...........................................3
6.1 CDMA的整体设计框图..................................................................................................3 6.2 利用VHDL语言编程实现的分频电路模块.................................................................4
7.本系统完成的功能.......................................4
7.1 Walsh码发生器............................................................................................................4 7.1.1 生成Walsh码调制(地址编码)的模块图...........................................................5 7.2 PN码、信息码发生器..................................................................................................5 7.2.1 生成PN扩频的模块图.............................................................................................5 7.3 调制与解调...................................................................................................................6
8.程序代码..............................................7
8.1 分频器模块...................................................................................................................7 8.2 PSK模块........................................................................................................................7 8.3串并转换模块................................................................................................................8
9.仿真调试与结果.........................................9 10.设计心得体会.........................................11 11.参考文献.............................................12
1.课程设计目的
《应用电子技术综合实训》是电子信息工程专业技术教育的重要实践教学环 节,对学生掌握基本理论、运用基本知识、训练基本技能和达到技术教育培养目标的要求有着十分重要的意义和作用。通过对具体应用电子电路的设计和开发过程的练习,加深学生对基础理论的理解,掌握设计电路、开发电路和实现电路的能力,能熟练应用开发软件。培养学生独立思考、解决实际工程问题的能力,为专业理论知识的学习和专业技能训练打好坚实的基础。
2.软、硬件环境介绍
1.软件环境:Windows XP操作系统、Xilinx ISE8.1 EDA集成开发环境; 2.硬件环境:个人计算机一台
3.Xilinx ISE8.1 EDA集成开发环境介绍:
ISE的全称为Integrated Software Environment,即“集成软件环境”,是Xilinx公司的硬件设计工具。相对容易使用的、首屈一指的PLD设计环境。ISE将先进的技术与灵活性、易使用性的图形界面结合在一起,能在最短的时间,以最少的努力,达到最佳的硬件设计。
Xilinx公司的ISE开发设计软件的工程设计流程,具体分为五个步骤:即输入(Design Entry)、综合(Synthesis)、实现(Implementation)、验证(Verification)、下载(Download)。4.Xilinx公司介绍:
Xilinx(赛灵思)是全球领先的可编程逻辑完整解决方案的供应商。Xilinx研发、制造并销售范围广泛的高级集成电路、软件设计工具以及作为预定义系统级功能的IP(Intellectual Property)核。客户使用Xilinx及其合作伙伴的自动化软件工具和IP核对器件进行编程,从而完成特定的逻辑操作。Xilinx公司成立于 1984年,Xilinx首创了现场可编程逻辑阵列(FPGA)这一创新性的技术,并于1985年首次推出商业化产品。眼下Xilinx满足了全世界对 FPGA产品一半以上的需求。Xilinx产品线还包括复杂可编程逻辑器件(CPLD)。在某些控制应用方面CPLD通常比FPGA速度快,但其提供的逻辑资源较少。Xilinx可编程逻辑解决方案缩短了电子设备制造商开发产品的时间并加快了产品面市的速度,从而减小 了制造商的风险。与采用传统方法如固定逻辑门阵列相比,利用Xilinx可编程器件,客户可以更快地设计和验证他们的电路。而且,由于Xilinx器件是只需要进行编程的标准部件,客户不需要象采用固定逻辑芯片时那样等待样品或者付出巨额成本。Xilinx产品已经被广泛应用于从无线电话基站到DVD播放机的数字电子应用技术中。
4.CDMA基带传输系统简介
CDMA(Code Division Multiple Access)是在数字通信技术的分支扩频通信的基础上发展起来的一项技术。它主要用于利用相互正交(或者尽可能正交)的不同编码分配给不同用户调制信号,实现多用户同时使用同一频率接入系统和网络的通信。本文针对 CDMA 码分多址技术设计1个4路用户传输系统 , 省去了载波调制部分 , 把 CDMA扩频系统中传输的信号简化为数字基带信号 , 并做出一个与之相应的扩频编码调制收发系统,系统采用Walsh 函数正交码作为地址码调制原数据信号 , 选用m序列作为扩频的伪随机码。
5.CDMA基带系统设计
5.1 系统设计平台
开发工具软件采用Xilinx公 司 的 EDA 工 具Xilinx ISE。利用 ISE中提供的编程语言设计方法和图形设计方法实现系统各部分的功能。
5.2 CDMA系统设计原理
CDMA技术基于扩频通信的基本原理,将要传送的具有一定信号带宽的信息数据,用一个带宽远大于信号带宽的高速伪随机编码信号去调制它,使原信息数据信号的带宽被大大扩频,再经载波调制后发射出去。接收端则使用完全相同的伪随机码,与接收的带宽信号做相关处
理,把宽带信号变换成信息数据的窄带信号(解扩)实现数据通信。这种扩频通信的明显特点是采用编码调制、频谱扩频和相关处理技术。使用扩频编码调 制易于保密也可供多用户使用。另外,对信息数据的频谱扩展,使功率谱密度明显降低,既不容易被别人发现又不容易干扰别人。CDMA通信多址干扰的大小决定于扩频编码间的互相关值,如果该值非常小乃至可以忽略,那么接收调解输出结果就只有原数据信号和噪声。所以CDMA可在同一载波频率上同时传送多个用户的信息、数据、实现多址通信。编码之间的互相关值越小,多址通信用户就越多。
6.系统总体设计
6.1 CDMA的整体设计框图
整体框图如图 1 所示。
说明:图 1 中“→”表示信号是1路, “→”表示信号是 4路。触发时钟 : 该收发系统受同步时钟控制,在全局时钟的基础上进行分频,详见表1。
表 1 触发时钟分频
图1 CDMA基带收发系统概念框图 6.2 利用VHDL语言编程实现的分频电路模块
图2.实现的多分频模块图
7.本系统完成的功能
本收发系统主要由调制器和解调器两部分组成。它们完成的功能如下:(a)调制器:内嵌于编码器中的信息信号发生器产生的 4 路输入信号,经 Walsh 调制、PN 扩频、基带求和与并串变换成为 1 路信号,完成调制。
(b)解调器:接收端将收到的 1 路信号首先进行串并变换,在取得同步的基础上进行 PN 解扩和 Walsh 解调,恢复出 4 路输入信息。
7.1 Walsh码发生器
Walsh函数是一种非正弦的完备正交函数集。由于它采用的是数字系统,比较适合于用来表达和处理数字信号。考虑到是数字基带系统 , 本系统采用的 Walsh 码组应为:
W1={1,1,1,1};W2={1,0,1,0};W3={1,1,0,0};W4={1,0,0,1}。
该发生器利用 ISE 编程实现较简单,在 Walsh码时钟(全局时钟的 24 分频)的控制下,每出现一次时钟跳变事件,输出端以4为周期依次输出1111,1010,1100和1001的码序列。
沃尔什(Walsh)码是正交码,经常被用作码分多址系统的地址码,Walsh码产生模块作为扩频传输的地址码,并且具有检测使用中的两路Walsh码是否正交 的功能。本设计中使用Walsh,存储在发射端数据寄存器中,扩频过程中根据 Walsh码的地址控制信号。抽取两路 Walsh 码分别对两路消息码进行扩频。接收端截获串行的数字信息流后,从接收端的数据寄存器中取出 Walsh 码对接收信号进行解扩。Walsh 码电路的设计思路运用了译码的原理来实现。
7.1.1 生成Walsh码调制(地址编码)的模块图
Walsh 码调制所生成的模块图为图3所示。
图3 Walsh码调制模块图
Walsh 码调制的仿真图为图 4所示。
图4 Walsh码调制仿真结果图
7.2 PN码、信息码发生器
利用7个D触发器相互级联实现周期为 127 的 PN 序列。具体构成依据 m 序列特征多项式 , 由 ISE提供图形设计方法实现。PN 码时钟为全局时钟的 3 分频。信息码的产生则只需在信息码时钟的控制下 , 从同样的级联中引出 4 路信号作为信息码 , 信息码时钟为全局时钟的 96 分频。
7.2.1 生成PN扩频的模块图
由 PN 扩频所生成的模块图为图5所示。
图5 PN 扩频所生成的模块图
7.3 调制与解调
在数字基带系统中,Walsh 码调制可以简单地用同或门来实现,而PN扩频则可通过简单的异或门实现。在实现 Walsh 码解调与解扩时 ,PN 解扩只需在接收端加 1 异或门。下面着重介绍一下 Wlash 码解调的方法———相关检测。
相关检测原理举例解释(见表 2)。
表2相关原理检测举例解释
Walsh调制码即原信息码与Walsh 码同或 , 所得 4 路码统计所得 1 的个数并转化成相应 3 比特并行码 , 例如表中 Walsh编码的第 1 列转化为010,第2列为100。在接收端则根据传递来的接收信息逐路进行相关检测。相关检测 规则列于表 3 中。
表3 相关检测规则 8.程序代码
8.1 分频器模块
module clk_div(clk_in,rst_n,clk_out);parameter cnt_top=10;clk_in/clk_out=cnt_top; parameter width=4;parameter duty=50;input clk_in;input rst_n;output clk_out;reg clk_out;reg [width-1:0]cnt;always@(posedge clk_in or negedge rst_n)begin if(!rst_n)cnt<=0;else if(cnt==(cnt_top-1))cnt<=0;else cnt<=cnt+1'b1;end always@(posedge clk_in or negedge rst_n)begin if(!rst_n)clk_out<=0;else if(cnt<(cnt_top*duty)/100)clk_out<=1;else clk_out<=0;end endmodule 8.2 PSK模块
module pskmod(clk,rst,seq,in,out);input clk,rst,seq;input [7:0] in;output [7:0] out;reg [7:0] out;always @(posedge clk or negedge rst)begin if(!rst)out=0;else begin if(seq)out=in;else out=~in;end end endmodule 8.3串并转换模块
module ser2par2(clk,rst,in,out,flag);//serial to parallel input clk,rst;input in;output flag;output [3:0]out;reg [3:0]out;reg [1:0]cnt;reg flag;always @(posedge clk or negedge rst)begin if(!rst)begin out=0;end else begin case(cnt)2'b00:out[0]=in;2'b01:out[1]=in;2'b10:out[2]=in;2'b11:out[3]=in;default:out[0]=in;endcase end end always @(posedge clk or negedge rst)begin if(!rst)flag=0;else begin cnt=cnt+1;if(cnt==2'b11)flag=1;else flag=0;end end endmodule 9.仿真调试与结果
点击processes框下的modelsim simulator中Simulation Behavioral Model,调用Modelsim对模块进行仿真。(注,同一时刻仅能有一个modelsim打开)。双击后调用modelsim,在弹出的modelsim界面中,已有部分仿真结果,如图6所示。
图6 软件仿真界面
在transcript框中输入“restart”,在弹出的对话框中选ok。各端口信号 清空,如图7所示。
图7 清空端口信号 在transcript框中输入命令,run 10us。仿真运行10us。查看仿真功能。验证程序设计正确性。由于数字信号不易查看输出信号的变化,因而可在输出波形窗口对应信号上单击右键,选择format->analog(automatic), 得到模拟信号波形进行观察,如图8所示。
图8 波形仿真结果
10.设计心得体会
通过这次课程设计,我深刻的体会到企业局域网建设是一项涉及面广、技术复杂、周期比较长的系统工程。它既是建设一个集计算机网络与各类信息的搜集、传递、处理、加工为一体的信息枢纽中心,又是一项为企业的生产、经营、产品开发及领导决策服务的综合工程。设计一个好的局域网需要有清晰的思维和整体布局的能力,总体说来还是一个比较难的工作。
在这次课程设计过程中,通过查找相关书籍和相关资料,也使得自己增长了不少知识。从这次课设我充分认识到自己相关网络知识的缺乏,虽然也用了很长时间但设计方案还是缺乏一定的可行性。在这次课程设计过程中我也认真阅读了相关书籍,对局域网有了一定的了解,所以说这次课设我还是收获不小。11.参考文献
[1]李栋.多进制扩频系统的关键技术的研究[D].西安:西安电子科技大学出版社,2001.[2]胡兵.自适应阵在码分多址(CDMA)中的应用[D].西安 :西北工业大学,2001.[3] 李畅怡.基于扩展频谱和CDMA的数字视频移动通信研究[D].长沙 :湖南大学,2001.[4] 常娥.突发性扩频信号的同步技术研究[D].大连 :大连理工大学,2003.[6] R.C.Dixon, Spread Spectrum Systems[M].New York: John Wiley & Sons, 1976.[5] 邬民莺.IS-95 CDMA 前向链路的研究与仿真[D].大连 :大连海事大学出版社 , 2003.
第四篇:用FPGA设计MP3个人数字播放机
引 言
MPEG(活动影像专业人员组织)是为数字音频确定单一编码和解码(压缩/解压缩)方法于1988年建立的。1992年,国际标准组织(ISO)和国际电工委员会(IEC)为音频和视频编码建立了MPEG1(ISO/IEC11172)标准。这使得业内在处理新数字世纪出现的各种类型音频/视频媒体
时统一在单一格式上。
随着以数字形式存储和播放音乐的MPEG Audio Layer3(MP3)格式的发展,个人数字播放机市场开始出现巨大的发展机会。非压缩的音频磁轨的MP3数字文件只有原来磁轨大小的1/10。能保持74分钟数字音频录音时间的650Mbytes读写CD可以保持740分钟MP3压缩音频数据。数字播放机的一般解决方案是采用软件形式(如基于Windows或其他OS基础上的“Internet Audio Player”)或硬件形式(如“Portable MP3 Player”)。如Diamond Multimedia公司的Rio PMP300和Rio PMP500 MP3数字播放机分别采用Actel公司的A40MX04和A40MX09 FPGA实现其特殊应用功能。FPGA能满足整个系统的价格、功耗和性能要求。A40MX04提供547个逻辑模块,它们可配置做为组合逻辑或273个触发器和实现接口逻辑的69个I/O。A40MX04和A40MX09很容易满足48MHz速度要求。它们灵活的结构使系统设计人员能在每种MP3播放机
中最佳地实现各种功能。
MP3数字播放机系统要求
MP3播放机有两个基本工作模式:下载模式和播放模式。在下载模式中,在PC上运行的软件允许用户下载MP3文件到播入机中的闪存卡。一旦把所有文件下载完,播放机与PC断开,并通过耳机收听下载的音乐。MP3播放机有不同的播放选择控制,如播放、快进、快倒、停止/暂停、音量控制、随机播放和重复播放功能。
MP3播放机包含可输入到PC的软件。软件提供用户接口以便通过PC并行端口选择、定序和下载不同音乐的MP3文件到播放机。图1示出系统级框图。
通过并行端口下载音乐到播放机,其速率大约为每1MB编码音乐10秒。MP3播放机的小尺寸对所有元件的物理尺寸有严格限制。另外,MP3播放机是便携、电池供电装置,需要工作在大约180mW低功率下。这两个因素对功能设计的元件选择有很大的影响。
用FPGA实现MP3系统
图2示出Rio PMP500系统框图,其中A42MX09 FPGA做为接口FPGA,它包含CPU接口、带ECC(Error Correcting Code)支持的闪存和灵巧存储器接口、时钟产生逻辑、功能控制逻辑和
键功能检测逻辑单元。
A42MX09中的CPU I/F单元提供与系统CPU(NECD78P064GC微控制器,带集成LCD控制器)的通信通路。CPU运行在2.5MHz,控制整个系统的工作。对于任何所需要的操作,CPU唤醒系统并设置整个系统。CPU存取系统存储器和管理整个闪存的配置、编程和存取。CPU有一个到MP3处理器的接口。MP3从闪存读的数据由CPU写到MP3处理器。MP3处理器译码MP3数据并把数据送到DAC,以便模拟输出到耳机。
A42MX09中的灵巧存储器接口单元是连接灵巧存储器卡的接口。灵巧存储器卡是一个外部闪存,用来增加整个系统存储器以便在播放机中存储更多的歌曲。到灵巧存储器卡的信号接口非
常类似于闪存接口。
闪存接口单元用于控制闪存,闪存保存通过并行端口下载的MP3文件。另外,ECC用Hamming码函数实现。Hamming码是一种FEC(Forward Error Correction)工具,当所用数据通过噪声媒体时FEC能校正错误。原始数据具有额外的校验位附加在每个字组以生成一个码字。这些额外位用“Block Parity”机理计算。采用模2运算用数据位来生成矩阵G得到Hamming码字。这需要乘法功能,而用A42MX09中的逻辑模块的组合功能很容易实现乘法功能。
A42MX09中的时钟产生器从48MHz输入时钟产生驱动器件内部不同逻辑单元所需的不同时钟。时钟产生逻辑单元由触发器和组合逻辑构成分频器。A42MX09中的键盘检测单元用于改变播放机的设置。键盘接口单元一般由检测键盘阵列中连接点(根据按键)的逻辑单元构成并把按键转变为与该键相关的功能。根据按键检测执行适当的功能。阵列由寄存器、锁存器和组合逻辑
实现。
Rio MP3播放机的功率由MAX1M1705器件控制,而1705由FPGA功耗控制单元控制。MP3播放机一般由单节1.5V电池供电。电池最少应能维持12小时听所有下载的音乐。功率控制是Rio MP3播放机的一个显著的特点。功率控制器件有两种功率工作模式:PFM(脉冲频率调制)和
PWM(脉宽调制)模式。
PFM模式是低静态电流待机模式,此模式提供120mA总输出电流并降低静态功耗到500uW。PWM模式是高功耗模式,能提供高达450mA输出电流。当MP3播放机处于停机状态时,CPU编程写FPGA的一个寄存器,从而产生MODE信号置MAX1M器件进入PFM低功率模式。在PFM模式Rio MP3播放机功耗只有2mW~3mW。当MP3播放机工作时,MODE信号改变MAX1M器件到PWM模式。Rio MP3播放机工作状态时的总功率大约在180mW左右。
下一代MP3系统 下一代MP3系统将改变现在的系统,能提供更快的下载、更多的用于播放的音乐文件和更多的用户从接口/键面板选择。更快的下载可通过采用高速并行端口模式(见IEEE1284)或USB端口实现。采用高密度闪存连同本地SDRAM基歌曲高速缓冲存储器可提供更多音乐文件播放并可提供另外的选择,如快速播放、快进、慢播放、编程播放等。其他选择可包括红外收发器,可使用户从播放机到播放机来回发射数据或执行某些远程控制操作。整个系统可用一个FPGA实现,不需要CPU。在FPGA中的音频DAC控制器逻辑单元可提供I2C接口来控制音频DAC,音频DAC通过I2C接口取串行音频数据并变换为模拟音频提供给耳机。
其他新的压缩方法正在涌现,其中ATRAC3(Adaptive Transform Acoustic Coding—自适应变换声频编码)标准可压缩CD音乐数据10:1而又能保持CD音质。ATRAC3特点是:
1、通过频带分裂滤波器和MDCT(Modified Discrete Cosine Transforms—改进式离散余弦变换)
对信号分析获得的。
2、位率压缩。利用ATRAC3技术,能实现音乐信号的高效率压缩。
结语
利用FPGA实现MP3数字播放机的主要接口FPGA功能,可有效地满足系统的性能、功率、价
格和尺寸要求。
第五篇:基于FPGA的直流电机PWM调速系统设计与实现
FPGA课程设计
题目:基于FPGA的直流电机PWM调速系统设计与实现 班级:微电子学1202班 姓名:杜英 学号:1206080201 日期:2016年3月24日
基于FPGA的直流电机PWM调速系统设计与实现
1设计任务与要求
1.1设计任务
完成基于FPGA的直流电机PWM调速系统设计与实现,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。
1.2设计要求
1.2.1了解PWM控制方法及应用;掌握PWM直流电机调速控制原理;掌握直流电机调速及驱动控制原理;完成基于FPGA的直流电机PWM调速系统设计。采用PWM(脉冲宽度调制)技术,速度值采用LCD或数码管显示。
1.2.2通过课程设计的实践,进一步了解和掌握硬件描述语言(VHDL或Verilog)和TOP-DOWN的设计流程,提高对实际项目的分析和设计能力,体会FPGA项目开发的过程,熟悉实验报告的编写规范。
2设计原理分析
2.1直流电机结构如下图1.1所示
图2.1 直流电机的构造
将直流电源通过电刷接通线组线圈,使线组线圈导体(电枢导体)有电流通过,在电磁的作用下,线组线圈将会产生磁场,同时产生的磁场与主磁极的磁场产生电磁力,这个电磁力作用于转子,使转子以一定的速度开始旋转,电机就开始工作。
在电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间内霍尔元件输出端低脉冲的个数推算出直流电机的转速。
本次设计中,调节PWM占空比进而控制直流电机转速,在本次设计中,为了保护霍尔元件,故设定程序每6秒刷新一次数据,所以在数码管显示的数据乘以10就是在该占空比时的直流电机每分钟转速。在这次的实验中数码管采用的8位共阴极数码管,通过锁存器输入数据使得数码管的8个段码数字显示,再通过选择输出数据对所需数码管进行选择。
2.2电路原理图
图2.2 电路原理图 3 设计方案
上述原理图中包含PWM模块、测速模块、计数模块、电机模块、滤波模块。电机的外部电路加入开关型的霍尔元件,同时在电子转子的转盘上加入一个使霍尔元件产生输出的带有磁场的磁钢片。当直流电机旋转时转盘与磁钢片一起旋转,当磁钢片转到霍尔元件上方时,可以使霍尔元件的输出端高电平变为低电平。当磁钢片离开霍尔元件上方后,霍尔元件输出端又恢复高电平。如此,点击每旋转一周,会使霍尔元件的输出端产生一个低脉冲,可以通过检测单位时间内霍尔元件输出端低脉冲的个数推算出直流电机的转速。本次设计为六秒记一次数,乘十就是每分钟转速值。再通过驱动模块显示数码管数据。
4设计步骤
(1)首先确定整体设计方案,确定设计需要使用的软件;(2)设计电路模块,编写各模块程序代码并进行仿真编译;(3)完成整体电路图设计后,使用QuartusⅡ软件对整体电路进行仿真调试;
(4)连接硬件,使用示波器观察产生的波形,对不足之处进行改进调试。
5调试结果说明
连接好试验箱,把硬件与实验箱接通,将程序下载到实验箱中。进行实验,示波器观察PWM脉冲波形(占空比),看实验结果与预期效果是否相同,若相同,则实验无误。其波形如下: 占空比为50%时
占空比为90%时
将程序下载到实验箱中后,其实际操作过程如下: K12为使能键,使K12=‘1’;输入时钟信号为1MHZ;(1)K4=1时,示波器和LED的显示如下:
示波器显示的是霍尔元件单位时间内计数的个数为31.011 显示器是每六秒电机转的圈数为186转
结论:31.011*6=186.066于186近似,所以结论符合要求。(2)K4=1,k3=1时,示波器和LED的显示如下:
结论:68.6338*6=411.8028于412近似,所以结论符合要求。(3)K4=1,k3=1,K2=1时,示波器和LED的显示如下:
结论:85.516*6=513.096于513近似,所以结论符合要求。(4)K4=1,k3=1,K2=1,K1=1时,示波器和LED的显示如下:
结论:90.0339*6=540.2034于541近似,所以结论符合要求。通过以上的比较,发现示波器中的结果与数码管上数据大概一致,即实验结果基本达到要求。
6心得体会
本次课程设计,用FPGA控制直流电机,完成直流电机PWM调速系统设计,实现对直流电机的闭环调速,速度值采用LCD或数码管显示。是一次很好的学习和实践的机会。通过课程设计,我明白了电机工作的原理,以及用FPGA控制电机的原理。最重要的是,对如何设计一个系统有了更进一步的了解,积累了很多经验。
从下载测试的结果来看,设计的要求基本上都实现了。但是仍存在不少问题。每个模块生成基本电路后,把各个模块的进行连接,仿真结果是正确的。但是当连接到试验箱后,电机正常转动,LED却无法显示。检查电路和程序还有电路图,并发现什么问题。无意中发现LED偶尔会出现数字,但也只是闪一下。最后才发现是因为电机转动太快了,LED无法及时显示或者是一直在闪,人眼无法识别。在程序中加入了滤波模块,才解决了问题。
在设计的过程中,开始照着EDA课本上的原理设计,后来才发现所设计的电路有很多地方都满足不了设计要求,使设计一度遭遇了很大困难。通过与同学讨论请教,逐步改进了设计,终于使设计的电路和设计要求相吻合。在这中间,通过不断提出问题,解决问题,我对这次设计的原理有了更深的了解,也给我分析问题,解决问题提供了很多好的方法,好的思路。同时,我也发现了自己存在的很多不足。发现自己在设计一个系统的时候不能够统筹兼顾,不能够从总体上把握设计的思路,也不能看清问题的核心与关键所在。这些都需要在下面不断学习实践,理论毕竟只是理论,要多参加实践,这样才能提高自己的能力,积累经验。
附录一
PWM模块程序 Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity PWM is port(clock:in std_logic;
duty_cycle:in std_logic_vector(3 downto 0);
pwm_en:in std_logic;
pwm_out:out std_logic);end entity;architecture art of PWM is
signal pwm_out_io:std_logic;
signal count:std_logic_vector(3 downto 0);begin
pwm_out<=pwm_out_io;
process(clock)
begin
if rising_edge(clock)then
if pwm_en='1' then
count<=count+1;
end if;
end if;
end process;
process(clock)
begin
if rising_edge(clock)then
if pwm_en='1' and count pwm_out_io<='1'; else pwm_out_io<='0'; end if; end if; end process;end; 测速模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity cesu is port(clk : in std_logic; --时钟输入1Mhz ena : out std_logic; --允许计数 clr : out std_logic; --计数器清零信号产生 load : out std_logic);--锁存、显示输出允许高有效 end cesu;architecture behav of cesu is signal clkk :std_logic; --1HZ时钟信号 signal count :integer range 0 to 7;--6秒计数 signal clr1 :std_logic; --清零信号 signal ena1 :std_logic; --允许计数信号 signal load1 :std_logic; --允许计数信号 --signal cq1,cq2,cq3,cq4 : INTEGER RANGE 0 TO 15;--计数数据 begin process(clk) variable c:std_logic; variable cnt:integer range 0 to 500000; begin if clk'event and clk='1' then cnt:=cnt+1; if cnt=500000 then cnt:=0;c:=not c; end if; end if; clkk<=c; end process; process(clkk) --6秒计数 begin if clkk'event and clkk='1' then count<=count+1; if count<6 then ena1<='1';load1<='0';clr1<='0'; elsif count=6 then ena1<='0';load1<='1';clr1<='0'; elsif count=7 then ena1<='0';load1<='1';clr1<='1'; end if; end if; ena<=ena1; load<=load1; clr<=clr1; end process;end behav; 计数模块程序 library ieee;use ieee.std_logic_1164.all; entity cnt10 is port(clk:in std_logic; --计数时钟信号 clr:in std_logic; --清零信号 ena:in std_logic; --计数使能信号 cq :out integer range 0 to 15;--4位计数结果输出 carry_out:out std_logic); --计数进位 end cnt10;architecture behav of cnt10 is signal cq1:integer range 0 to 15;begin process(clk,ena)begin if clr= '1' then cq1<= 0; ----计数器异步清零 elsif clk'event and clk= '1' then if ena= '1' then if cq1=10 then cq1<=1; else cq1<=cq1+1; end if; ----等于9,则计数器清零 end if; end if;end process;process(cq1) begin if cq1=10 then carry_out<= '1'; ----进位输出 else carry_out<= '0'; end if;end process; cq<=cq1;end behav; 驱动模块程序 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qudong_8 is port(clk:in std_logic; --动态显示刷新速度时钟 QQ1,QQ2,QQ3:in std_logic_vector(3 downto 0);--32位BCD码输入,最0~3低位,28~31最高位 qudong1:out std_logic_vector(7 downto 0);--驱动信号输出,0~7分别为abcdefgp contrl:buffer std_logic_vector(2 downto 0));--数码管位选输出,000最低位数码管有效,111最高位数码管有效 end qudong_8;architecture behavior of qudong_8 is signal disp:std_logic_vector(3 downto 0);signal temp:std_logic_vector(2 downto 0);begin process(clk)begin if clk'event and clk='1' then temp<=temp+1; end if; contrl<=temp;end process; process(contrl) --位选信号产生进程 begin case contrl is --when“000”=>disp<=QQ7; --when“001”=>disp<=QQ6; --when“010”=>disp<=QQ5; --when“011”=>disp<=QQ4; when“100”=>disp<=QQ3; when“101”=>disp<=QQ2; when“110”=>disp<=QQ1; --when“111”=>disp<=“0000”; when others=>disp<=“0000”; end case;end process;process(disp) --译码进程 begin case disp is when“0000”=>qudong1<=“00111111”; when“0001”=>qudong1<=“00000110”; when“0010”=>qudong1<=“01011011”; when“0011”=>qudong1<=“01001111”; when“0100”=>qudong1<=“01100110”; when“0101”=>qudong1<=“01101101”; when“0110”=>qudong1<=“01111101”; when“0111”=>qudong1<=“00000111”; when“1000”=>qudong1<=“01111111”; when“1001”=>qudong1<=“01101111”; when others=>qudong1<=“00000110”; end case;end process;end behavior; 消抖模块程序 library ieee;use ieee.std_logic_1164.all; entity xiaodou is port(clk,input: in std_logic;output: out std_logic);end xiaodou; architecture behav of xiaodou is signal cp:std_logic;signal count:integer range 0 to 3;begin process(clk)begin if(clk'event and clk='1')then--检测上升沿 if(input='1')then--如果有输入信号 if(count=3)then count<=count;--当计数达到3时,保持计数值不变 else count<=count+1;--当其小于3时,进行加1处理 end if;if(count=2)then cp<='1';--如果计数达到2,cp置1 else cp<='0';--其余情况全部为0 end if;else count<=0;--如果计数出现非法状况,进行清零复位 end if;end if;output<=cp;--信号输出 end process;end behav;