FPGA课程设计报告112.docx
- 文档编号:9767830
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:43
- 大小:4.16MB
FPGA课程设计报告112.docx
《FPGA课程设计报告112.docx》由会员分享,可在线阅读,更多相关《FPGA课程设计报告112.docx(43页珍藏版)》请在冰豆网上搜索。
FPGA课程设计报告112
西南科技大学
研究生课程设计报告
课程名称:
现代数字系统设计
设计名称:
基于FPGA的超声波雷达数据采集系统
姓名:
王桂山
学号:
2015000102
课程教师:
刘桂华教授
起止日期:
2015/12/27-2016/1/22
西南科技大学信息工程学院制
设计任务书
学生班级:
现代数字系统设计学生姓名:
王桂山学号:
2015000102
设计名称:
基于FPGA的超声波雷达数据采集系统——EFPG液晶显示屏
起止日期:
2015/12/27-20151/22课程教师:
刘桂华教授
设计要求:
设计要求:
(1)完成对工业超声波雷达通信协议系统设计。
(总)
(2)对该设计进行解析的实时性、准确性验证,证明验证方案的正确性。
(3)给出经过传输到上位机(肖悦)后的数据流,对数据流内的每一帧的起始位、数据位、校验位。
每个数据位都要有必要的说明。
(4)液晶显示屏能够通过波形图时序图等,完成图像的传输。
(5)液晶显示屏能够显示数据分析变化、颜色变化、微调的数据能够被体现,灵活掌握对阵彩色液晶屏的应用。
(6)液晶显示屏能够通过获得自模数据来显示字符。
教学提示:
(1)系统说明
系统框图如图1所示。
图1系统框图
端口信号说明如表2所示。
表1超声波雷达端口信号说明
信号
I/O
说明
TranStart
I
复位信号,低电平复位
PortName
[7:
0]
I
超声波雷达端口号,有8种取值98、96、97、99、114、115分别代表A、B、C、D、E、H端口
Distance
[7:
0]
I
距离数据,单位CM,最小值0X15,表示障碍物距离当前端口映射的超声波探头距离15CM,最大值0X250,表示障碍物距离当前端口映射的超声波探头距离250CM,TranStart有效的同时,超声雷达送出数据。
NextCommand[7:
0]
I
控制命令,具体为8位二进制值8’B10001000,表示当前端口值数据传输完成,预备传输下一端口的值。
TranEnd
I
数据包包尾指示,和数据包最后一个字节同步,且只维持一个时钟周期
(2)LCD控制说明
LCD的接口时序波形如图1所示。
VSYNC是场同步信号,低电平有效,从时序图可以看出,VSYNC是每一场(即也可以理解为每送一幅完整图像)的同步信号;与此类似,HSYNC是行同步信号,也是在每一行数据传输的开始产生几个时钟周期的低脉冲。
这两个信号用于同步当前的数据信号,根据固定的脉冲约定,我们在某些时钟上升沿前将图像数据送到数据总线上供LCD内部锁存。
图2.LCD数据传输说明
表2.LCD数据传输的时间参数
表3.LCD控制命令传输的时间参数
(3)SRAM传输协议
SRAM内部的结构如图所示,要访问实际的Momory区域,FPGA必须送地址(A0-A14)和控制信号(CE#\OE#\WE#),SRAM内部有与此对应的地址译码(decoder)和控制处理电路(controlcircuit)。
这样,数据总线(I/O0-I/O7)上的数据就可以相应的读或写,其结构如图3所示。
图3.SRAM数据传输结构框图
表4.SRAM数据传输的时间参数
序号
管脚I/O
方向
描述
1
A0-A14
Input
地址总线
2
CEn
Input
芯片使能输入,低有效。
3
OEn
Input
输出使能输入,低有效。
4
WEn
Input
写使能输入,低有效。
5
I/O[0-7]
Input
数据输入/输出总线。
6
VCC
电源。
7
GND
数字地
要写数据时,(这里是相对于用FPGA操作SRAM而言的,软件读写可能有时间顺序的问题需要注意),比较高效率的操作是送数据和地址。
图4.SRAM读写时序图
把CE#和WE#拉低。
然后延时WCt时间再把CE#和WE#拉高,这时就把数据写入了相应地址了,就这么简单。
读数据就更简单了,只要把需要读出的地址放到SRAM的地址总线上,把CE#和OE#拉低,然后延时一段时间后就可以读出数据了。
时序图中列出的相关时间参数如表所示。
表5.SRAM时间控制边缘的时间参数表
(3)数据采集系统
数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。
数据采集技术广泛引用在各个领域。
在该系统中需要将模拟量转换为数据量,而A/D是将模拟量转换为数字量的器件,他需要考虑的指标有:
分辨率、转换时间、转换误差等等。
而单片机是该系统的基本的微处理系统,它完成数据读取、处理及逻辑控制,数据传输等一系列的任务。
在该系统中采用的是8052系列的单片机。
而数据的显示则采用的是12864LCD液晶显示屏,该器件比较直观,在生活中接触也较多。
数据采集系统一般由信号调理电路,多路切换电路,采样保持电路,A/D,单片机等组成。
(4)显示部分
因为汉字本身的特点,显示汉字始终是计算机在我国应用普及的一个障碍。
随着单片机和显示技术的发展,加上人们不满足单片机系统采用LED数码管的简单显示,利用单片机控制液晶显示成为当前显示系统的主流。
本文主要引用LCD液晶显示器为显示设备。
实现的一个可以显示汉字、字符和动态显示汉字的液晶显示器设备。
基于FPGA的超声波雷达数据采集系统
一、设计目的和意义
1.1设计的目的和意义
超声波避障技术在车辆运动中广泛应用,现成的车载超声波雷达的优势是性能稳定、多路传感,劣势是难以二次开发。
为项目开发的需要,解析超声雷达的通信协议就显得重要。
本设计源于西南科技大学“XX核环境遥操作机器人”的子项目“基于超声扫描的机器人环境障碍信息识别”,有很强的实用性。
通过基于FPGA的超声波雷达数据解析系统,深入的理解FPGA设计的原理,理解和运用SRAM数据保存与读取,理解与运用RTC实时时间更新,运用LCD进行数据显示,熟悉UART双向通信,PC端数据采集、处理、保存、调用等常用的FPGA对传感器信号开发的整套流程,有很强的科研与学术价值。
二、设计原理
2.1设计的整体原理
图1.基于FPGA的超声波雷达数据采集系统框图
原理:
利用FPGA快速采集I/O口信号与并行处理的能力,将超声波雷达获取的多路距离信息读取,并实时传输。
由于超声波测量需要的实际驱动频率是40KHz,6路超声波理论上要求单片机响应速度不能低于40*6*8KHz,也就是2MHz,同时UART串口一般波特率要求9600,液晶屏刷新频率72Hz,综合要求单片机没有倍频需要至少20MHz,端口数需要47个。
故采用CycloneIVE系列EP4CE6E22C8芯片,芯片可用I/O引脚多于150,主频25MHz,满足设计的要求。
2.2设计的硬件组成
2.3设计的组成
(1)设计内容
(2)设计方案
(3)项目进度
(4)设计思路
(5)成果展示
三、详细设计步骤
超声波雷达传输协议解析
数据解析的流程
数据解析的matlab主程序
数据解析的结果
FPGA超声波数据采集系统框图
数据解析的软件构成:
数据解析的FPGA软件构成
数据解析的FPGA端软件编程环境
数据解析的PC端软件构成
数据解析的PC端软件编程环境
系统设计原理
本设计的硬件电路主要包括上位机、LCD液晶显示屏、SY-CY4学习板、超声波测距模块以及电脑等五大模块组成。
数字电路高度集成化是现代电子发展的大势所趋,片上系统(SOC)的概念也就应运而
生。
它是指在单个芯片上集成一个完整的系统,一般包括系统级芯片控制逻辑模块、微处理器\微控制器内核模块、数字信号处理器模块、存储器或存储器控制模块、与外部通信的各种接口协议模块、含有ADC\DAC的模拟前端模块、电源及功耗管理模块,它是一个具备特定功能、应用于特定产品的高度集成电路。
原理:
总线桥,通俗的理解桥就是用来连接河两岸的,一定听说过主板上的南桥和北桥吧。
CPU很好很强大,可以处理海量数据,但是再强大也没法发出声音、显示图像啊,术业有专攻嘛,CPU就是干数据运算和控制的活,别的基本不管。
因此,CPU需要通过桥和外围设备进行信息交互,把需要进行处理的数据接收进来,把处理完的数据发送出去,可能说得不是很专业,但是基本就是这样了。
CPU的引脚终归是有限的,如果一个CPU要和所有外设都搭个独木桥,那么恐怕咱们的CPU要比得上巴掌大才够在肚子底下容下那么多“脚”了。
这么看,这个桥还真不能是独木桥。
至少该是一座纵横南北的立交桥,再形象一点说,这座立交桥的交错中心点是贯通的,处于这个中心点的车可以通过处于任何高度的道路驶向四面八方。
那么,我们所说的CPU就处于这样的核心位置。
好,这里不再深入了,总线其实就是CPU的一组满足一定协议的引脚的集合,这组引脚可以和多个同样满足这个特定协议的不同外设进行连接。
当CPU要用这个总线和某个外设交互信息时,就会在它们之间搭起一座“独木桥”,其它外设就只能望桥兴叹。
总线从某种意义上看就是为了节约引脚而出现的,当然从另一种意义上看也是为了统一信息交互方式而出现的。
这里FPGA外面挂了个“总线桥”,用于这个系统和外部设备交互,其实FPGA内部的SOPC也有个总线桥,它的名字叫做“Avalon”,Avalon总线,以后当你越是使用它也就会越多的发现它的强大。
上面提到NIOSII只是一个处理器而已,而Avalon总线就是要把NIOSII和所有其它在FPGA内甚至FPGA外定制的外设连接起来。
当然你可以理解那个“系统互联逻辑”(SystemInterconnectFabric)就是Avalon,但是请记住,Avalon只是SystemInterconnectFabric的一种形式而已。
说个桥就说到FPGA里面去了,说完才发现其实FPGA系统内和常见的嵌入式系统的架构有着异曲同工之妙,个中奥妙只能用心的人才会体味得到了。
系统设计框图
三:
FPGA液晶显示屏
一主要外置硬件:
1、LCD简介
LCD的接口时序波形如图所示。
VSYNC是场同步信号,低电平有效,从时序图可以看出,
VSYNC是每一场(即也可以理解为每送一幅完整图像)的同步信号;与此类似,HSYNC是行
同步信号,也是在每一行数据传输的开始产生几个时钟周期的低脉冲。
这两个信号用于同步
当前的数据信号,根据固定的脉冲约定,我们在某些时钟上升沿前将图像数据送到数据总线
上供LCD内部锁存。
如表所示,这是LCD时序图中对应的时间参数。
2、功能简介
如图所示,本实例除了SF-CY4开发板,还需要SF-LCD子板用于连接3.5寸320*240的
真彩色液晶屏。
FPGA内部产生32级红色的ColorBar以及LCD时序用于驱动显示。
LCD的驱动大体如图所示。
3、模块划分
本实例模块划分如图所示。
lcd_controller.v模块产生32级红色ColorBar和LCD驱动时序。
SF-CY4开发板和SF-LCD子板的装配连接如图所示。
4、板级调试
连接好下载线,给CY4开发板供电。
打开QuartusII,进入下载界面,将本实例工程下的cy4.sof文件烧录到FPGA中在线运
行。
如图所示,可以看到显示器上出现32级红色的ColorBar。
图:
液晶显示模块
液晶显示模块
用于显示采集好的数据,由EFPG液晶显示屏来完成。
FPGA截图
(如上图接线,VCC供5V电源,GND为地线,TRIG触发控制信号输入,ECHO回响信号输出等四支线。
)
实物规格
(SF-CY4外形尺寸图)
四、LCD字符显示驱动之字符取模
1、字符取模
要显示字符,首先需要获得字模数据,我们使用字模软件PCtoLCD2002。
该字模软件用1bit代表一个像素点,即它只能表示2种颜色的图像,当然不是仅仅局限于黑和白了,用户可以根据需要来决定这1bit数据(0或1)代表的色彩。
下面说明设计中需要的字符是如何取模的,启动取模软件PCtoLCD2002,点击菜单栏的“模式”,选择“字符模式”。
再点击菜单栏的“选项”(或点击如图所示的齿轮图标),在弹出的对话框中设置如图所示(行后缀为英文的“;”)。
此外,在主界面中,我们设置字符宽度为64*64(实际上如果我们是给字符取模,它默认为32*64),在主界面下方的字模输入框中输入了大写字母A,接着点击它右侧的“生成字模”按钮(图中没有示意),则在输出栏中出现了一大串32bit一行,并且行后缀为“;”的字符,copy他们,后面马上就会用上。
32*64点阵的字符“A”取模后的数据如下。
实际上这些数据如果我们用二进制的0和1一位位的将他们排列开来,则我们可以看到1可以排列出一个字母“A”出来。
正是根据这个原理,我们后面会每行32位的将他们送往液晶屏显示,一共有64行这样的显示。
基于前面取到的字模数据,我们假定从屏幕的(0,0)坐标到(31,63)坐标区域(对应就是32*64的点阵)内显示字符。
那么当坐标计数器刷新到(0,0)坐标点的时候我们就要相应判断第一行数据的bit31的值,然后决定送哪种色彩(0代表一种色彩,1代表另一种色彩)。
当坐标计数器刷新到(1,0)坐标点的时候我们就要相应判断第一行数据的bit30的值……直到刷新到(31,0)时判断第一行数据的bit0的值,由此完成了首行字模数据的译码。
往后的译码都和首行类似,64行字模数据寻址完毕后,大写字母“A”便出现在我们的屏幕上。
当然了,为了显示得美观,我们特意将这个32*64的大写字母“A”放到了320*240的LCD的正中央。
那么它的坐标就不是(0,0)到(31,63)的区域了。
而是(144,104)到(175,135)这个区域。
我们这个实例最终要显示的效果如图7.86所示。
在(144,104)到(175,135)这个区域内,字符“A”以蓝(16’h001f)字红(16’hf800)底显示,LCD的其他显示区域则为黑色(16’h0000)。
LCD显示电路
设计采用LCD液晶显示屏显示。
其具有体积小、功耗低、界面美观大方等优点,这里使用YB1602液晶屏,1602显示模块用点阵图形显示字符,显示模式分为2行16个字符。
它具有16个引脚,其正面左起为第一脚,如下图所示:
第一脚GND:
接地。
第二脚VCC:
+5V电源。
第三脚VO:
对比度调整端。
使用时通过接一个10K的电阻来调节。
第四脚RS:
寄存器选择信号线。
第五脚RW:
读写信号线。
第六脚E:
使能端,当E由高电平跳变为低电平时执行命令。
第7~14脚:
8位数据线D0~D7。
第十五脚BLA:
背光电源正极输入端。
第十六脚BLK:
背光电源负极输入端。
(LCD显示电路)
(1602操作指令)
液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如'A’。
1602通过D0~D7的8位数据端传输数据和指令。
显示模式设置:
(初始化)
0011 0000 [0x38]设置16×2显示,5×7点阵,8位数据接口; 显示开关及光标设置:
(初始化) 0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1), N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移) s=0 当写一个字符后,整屏显示不移动 数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针 =0)
四、系统整体软件介绍
(1)、软件功能简介
实例
(1)读取SystemID外设的两个寄存器值,一个是ID值,另一个是Timestamp值。
软
件流程如图所示。
示例
(1)首先做一个最简单的软件实例,即通过JTAGUART在EDS的NiosConsole中每个3
秒钟打印一串“HelloNIOSII”的字符。
软件流程如图所示。
示例
(2)使用秒定时中断,递增显示到数码管上的4位数据。
软件流程如图所示。
实例
(1)如图上示例
(1)如图上示例
(2)如图上
SytemID的两个寄存器,其描述如下。
设组件的寄存器1取值为自1970年1月1日以来到该外设生成时的总秒数。
(2)、软件代码解析
(本实例
(1)的软件代码如上:
)
1、IORD_ALTERA_AVALON_SYSID_QSYS_ID(SYSID_BASE)函数即读取我们定义的SystemID外设
的ID值,SYSID_BASE是我们定义的SystemID外设的基址。
2、IORD_ALTERA_AVALON_SYSID_QSYS_TIMESTAMP(SYSID_BASE)函数即读取我们定义的
SystemID外设的Timestamp值。
本示例
(1)的软件代码很简单。
如图上所示:
printf()是标准的输入输出函数,它所对应的设备在BSPEditor中可以设定,我们当前的
设定是JTAGUART,如图所示。
Usleep()函数也是标准的库函数,它表示以us为单位的延时。
如我们输入3000000则延
时3000000us,即3000ms=3s。
在示例
(2)中宏定义,使用简单的IOWR函数可以读写数码管组件的地址,从而实现数码管显示控制。
数码管显示值是4位的10进制数,但是我们在Verilog编写定义时,写入的数据是32位,bit31-24代表显示到数码管千位的数据;bit23-16代表显示到数码管百位的数据;bit15-8代表显示到数码管十位的数据;bit7-0代表显示到数码管个位的数据。
(3)、板级调试
实例
(1):
首先,我们需要将QuartusII工程中产生的cy4.sof文件烧录到CY4开发板的FPGA中。
接着,在EDS下,将程序Run起来。
片刻后,我们可以在EDS的NiosConsole中看到如图所示打印出来的字符串。
SystemID的值正是我们在Qsys所设定的,而timestamp的值自己可以再换算,
是不是从1970年1月1日到今天所经过的秒数(这个值可以根据自己实验得到的为准,分别出现过各种不同的情况)。
示例
(1)首先,我们需要将QuartusII工程中产生的cy4.sof文件烧录到CY4开发板的FPGA中。
接着,我们在EDS下,点击菜单“RunàRunConfiguration”。
接着如图所示,在弹出的选项卡中,选择Project下的Projectname为nios2ex1。
在TargetConnection中,点击右侧的“RefreshConnections”按钮,直到左侧的Processors
和ByteStreamDevices出现我们工程所对应的处理器和下载线名称。
在示例
(2)中,首先,我们需要将QuartusII工程中产生的cy4.sof文件烧录到CY4开发板的FPGA中。
接着,在EDS下,将程序Run起来。
接着我们可以看到数码管上的数据每秒递增。
五、设计结果及分析电气参数系统软件设计
(本人主要负责EFPG液晶显示器的部分工作,主要工作是李志雄大师哥做的。
)
六、体会
今年选修这现代数字系统设计节课收获很多,之前完全不懂这节课的内容,上课一点听不懂,上机做实验一点不会,后来碰巧遇到大师哥,在大师哥的带领和帮助下,从开始的茫然、完全不知道,到后来的看书,设计开发板,调电路,偶尔通宵练习各种FPGA实例,到最后能独立完成试着一小部分任务,一路走来,感受颇多。
学习FPGA主要经历了第一阶段:
(1)学习Verilog语言,熟悉Verilog语法。
(2)学习FPGA,熟悉QuartusII软件的功能,逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA板子。
(3)学习NiosII,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosIIIDE),了解NiosII的基本结构,设计NiosII开发板,编写NiosIIC语言程序,调试板子各模块功能。
第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种。
有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。
学习Verilog没有看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。
Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就进入了学习的第二个阶段。
所有的项目制作都是在李志雄大师哥带领下进行的,大师哥自己买了一块FPGA的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现FPGA的资源的利用,几乎快要用完。
硬件完成后,大部分的时间都在写程序,感觉verilog跟C差不多,就将原来写成的C代码翻译了一下,每写一段代码就测试一下。
起初并不知道在Quartus里还有逻辑分析仪的功能,所以程序出了问题只能使劲的分析代码,猜想问题可能出在哪里,万不得已时才做一下仿真(后来看很多有做程序都先做仿真,仿真通过后再下载到目标板里运行测试,但到现在李志雄大师哥的仿真关还没过),所以做得很累。
大师哥感到这样做下去到时间结点肯定结了不了项目,就找FPGA的qq群向高手们请教经验,知道了可以Quartus的逻辑分析仪来观察信号。
后面的程序找问题就容易多了,按照ATA协议、SDRAM手册、及各外围芯片手册一步步写下去,当然其中也遇到了各种各样的问题,但很快得到解决。
简单说一下体会吧,归结起来就三个字:
做、想、问。
书读千遍,不如做一遍;看别人做百次,不如自己做一次;就是要实践。
实践的动力一方面来自兴趣,别一方面来自己压力,个人觉得后者更重要。
有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。
在做的过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 课程设计 报告 112