基于FPGA的贪吃蛇游戏设计
- 格式:doc
- 大小:1.79 MB
- 文档页数:8
E D A/S O P C技术实验讲义陕西科技大学电气与信息工程学院目录4第一章 EDA_VHDL实验/设计与电子设计竞赛4 1-1、应用QuartusII完成基本组合电路设计5 1-2. 应用QuartusII完成基本时序电路的设计6 1-3. 设计含异步清0和同步时钟使能的加法计数器7 1-4. 7段数码显示译码器设计8 1-5. 8位数码扫描显示电路设计9 1-6. 数控分频器的设计10 1-7. 32位并进/并出移位寄存器设计10 1-8. 在QuartusII中用原理图输入法设计8位全加器11 1-9. 在QuartusII中用原理图输入法设计较复杂数字系统11 1-10. 用QuartusII设计正弦信号发生器13 1-11. 8位16进制频率计设计16 1-12. 序列检测器设计16 1-13. VHDL状态机A/D采样控制电路实现18 1-14. 数据采集电路和简易存储示波器设计19 1-15. 比较器和D/A器件实现A/D转换功能的电路设计20 1-16 移位相加硬件乘法器设计24 1-17 采用流水线技术设计高速数字相关器24 1-18 线性反馈移位寄存器设计25 1-19 乐曲硬件演奏电路设计28 1-20 乒乓球游戏电路设计32 1-21 循环冗余校验(CRC)模块设计33 1-22. FPGA步进电机细分驱动控制设计(电子设计竞赛赛题)34 1-23. FPGA直流电机PWM控制实验35 1-24. VGA彩条信号显示控制器设计37 1-25. VGA图像显示控制器设计37 1-26. 清华大学学生基于GW48PK2系统VGA图像显示控制器设计示例5则38 1-27. 直接数字式频率合成器(DDS)设计实验(电子设计竞赛赛题)39 1-28. 嵌入式锁相环PLL应用实验41 1-29. 使用嵌入式锁相环的DDS设计实验(200MHz超高速DAC的PLL测试42 1-30. 基于DDS的数字移相信号发生器设计(电子设计竞赛赛题)45 1-31. 采用超高速A/D的存储示波器设计(含PLL,电子设计竞赛赛题)46 1-32. 信号采集与频谱分析电路设计(电子设计竞赛赛题)46 1-33. 等精度数字频率/相位测试仪设计实验(电子设计竞赛赛题)48 1-34. FPGA与单片机联合开发之isp单片机编程方法49 1-35. 测相仪设计(电子设计竞赛赛题)50 1-36. PS/2键盘鼠标控制电子琴模块设计50 1-37. PS/2鼠标与VGA控制显示游戏模块设计50 1-38. FPGA_单片机_PC机双向通信测频模块设计50 1-39. 10路逻辑分析仪设计(电子设计竞赛赛题)51 1-40. IP核:数控振荡器NCO应用设计52 1-41. IP核:FIR数字滤波器应用设计53 1-42. IP核:FFT应用设计53 1-43. IP核:CSC VGA至电视色制互转模块应用设计54 1-44. IP核:嵌入式逻辑分析仪SignalTapII调用55 1-45. USB与FPGA通信实验56第二章 SOPC/EDA设计实验I56 2-1 用逻辑锁定优化技术设计流水线乘法器实验57 2-2 用逻辑锁定优化技术设计16阶数字滤波器实验59 2-3 基于DSP Builder的FIR数字滤波器设计实验60 2-4 基于DSP Builder的IIR数字滤波器设计实验60 2-5 基于DSP Builder的DDS与数字移相信号发生器设计实验62 2-6 m序列伪随机序列发生器设计实验63 2-7 巴克码检出器设计实验65 2-8 RS码编码器设计实验65 2-9 正交幅度调制与解调模型设计实验67 第三章 SOPC/EDA设计实验II67 3-1 基于MATLAB/DSP Builder DSP可控正弦信号发生器设计72 3-2 32位软核嵌入式处理器系统Nios开发实验73 3-3 设计一个简单的SOPC系统74 3-4 简单测控系统串口接收程序设计74 3-5 GSM短信模块程序设计75 3-6 基于SOPC的秒表程序设计77 3-7 Nios Avalon Slave外设(PWM模块)设计78 3-8 Nios Avalon Slave外设(数码管动态扫描显示模块)设计79 3-15 DMA应用和俄罗斯方块游戏设计79第四章 SOPC/EDA设计实验III ( NiosII系统设计 ) 79 4-1、建立NIOSII嵌入式处理器硬件系统87 4-2、NIOSII软件设计与运行流程94 4-3、加入用户自定义组件设计100 4-4、加入用户自定义指令设计103 4-5、FLASH编程下载104 4-6、设计DSP处理器功能系统104 4-7、AM调制电路设计105第五章液晶接口实验105 5-1 GDM12864A液晶显示模块接口开发111 5-2 HS162-4液晶显示模块与单片机的接口114 5-3 G240-128A液晶显示模块的接口115第六章 CPU及其结构组件设计实验115 6-1 复杂指令CPU设计122 6-2 8051/89C51单片机核于FPGA中实现实验124第七章模拟EDA实验124 7-1 模拟EDA实验及其设计软件使用向导(PAC _Designer使用)124 7-2 基于ispPAC80的5阶精密低通滤波器设计126 7-3 基于ispPAC10的直流增益为9的放大器设计129附录:GW48 EDA/SOPC主系统使用说明129 第一节:GW48教学系统原理与使用介绍,132 第二节:实验电路结构图137 第三节:超高速A/D、D/A板GW-ADDA说明138 第四节:步进电机和直流电机使用说明138 第五节:SOPC适配板使用说明139 第六节:GWDVPB电子设计竞赛应用板使用说明141 第七节:GWCK/PK2/PK3系统万能接插口与结构图信号/与芯片引脚对照表第一章EDA_VHDL实验/设计与电子设计竞赛1-1. 应用QuartusII完成基本组合电路设计(1) 实验目的:熟悉QuartusⅡ的VHDL文本设计流程全过程,学习简单组合电路的设计、多层次电路设计、仿真和硬件测试。
华中科技大学武昌分校文件
校教〔2014〕33号
关于公布2014届本科毕业生优秀毕业设计/论文评选
结果的通知
全校各单位:
根据《华中科技大学武昌分校本科生毕业设计/论文工作管理办法》(校教[2011]73号)文件,经各院(系)推荐、教务处组织专家进行格式审查和内容评议,报校教学指导委员会评审,评定2014届本科生优秀毕业设计/论文257篇,其中,一等奖28篇,二等奖58篇,三等奖171篇,现将评选结果予以公布。
附件:《华中科技大学武昌分校2014届本科生优秀毕业设计/论文获奖名单》
华中科技大学武昌分校
2014年6月12日
主题词:公布评选结果通知
华中科技大学武昌分校办公室2014年6月12日印发
附件:
华中科技大学武昌分校
2014届本科生优秀毕业设计/论文获奖名单
一等奖(28篇)
二等奖(58篇)
三等奖(171篇)。
文档版本控制目录文档版本控制 (2)一、开发板简介 (6)二、AC7Z020核心板 (8)(一)简介 (8)(二)ZYNQ芯片 (9)(三)DDR3 DRAM (11)(四)QSPI Flash (14)(五)时钟配置 (16)(六)电源 (17)(七)结构图 (18)(八)连接器管脚定义 (19)三、扩展板 (23)(一)简介 (23)(二)CAN通信接口 (24)(三)485通信接口 (24)(四)千兆以太网接口 (25)(五)USB2.0 Host接口 (27)(六)USB转串口 (28)(七)AD输入接口 (29)(八)HDMI输出接口 (30)(九)MIPI摄像头接口(仅AX7Z020使用) (32)(十)SD卡槽 (33)(十一)EEPROM (34)(十二)实时时钟 (34)(十三)温度传感器 (35)(十四)JTAG接口 (36)(十五)用户LED灯 (36)(十六)用户按键 (37)(十七)扩展口 (38)(十八)供电电源 (40)(十九)底板结构图 (41)芯驿电子科技(上海)有限公司 基于XILINX ZYNQ7000开发平台的开发板(型号: AX7Z020B )2022款正式发布了,为了让您对此开发平台可以快速了解,我们编写了此用户手册。
这款ZYNQ7000 FPGA 开发平台采用核心板加扩展板的模式,方便用户对核心板的二次开发利用。
核心板使用XILINX 的Zynq7000 SOC 芯片的解决方案,它采用ARM+FPGA SOC 技术将双核ARM Cortex-A9 和FPGA 可编程逻辑集成在一颗芯片上。
另外核心板上含有2片共512MB 高速DDR3 SDRAM 芯片和1片256Mb 的QSPI FLASH 芯片。
在底板设计上我们为用户扩展了丰富的外围接口,比如2路CAN 通信接口,2路485通信接口,2路XADC 输入接口, 1路千兆以太网接口,1路USB2.0 HOST 接口,1路HDMI输出接口,Uart 通信接口,SD 卡座,40针扩展接口等等。
fpga常用接口协议FPGA常用接口协议随着科技的不断发展,FPGA(现场可编程门阵列)在数字电路设计中的应用越来越广泛。
FPGA常用接口协议是指在FPGA与其他设备之间进行数据交换时所使用的通信协议。
本文将介绍几种常见的FPGA接口协议,包括SPI、I2C、UART和PCIe。
一、SPI(串行外设接口)协议SPI是一种串行通信协议,可以实现FPGA与外设之间的数据传输。
SPI接口由四条线组成,分别是时钟信号(SCLK)、主设备输出从设备输入(MOSI)、主设备输入从设备输出(MISO)和片选信号(CS)。
SPI协议采用主从模式,主设备通过控制时钟信号和片选信号来与从设备进行通信。
SPI接口的优点是通信速度快,但只能实现点对点的通信。
二、I2C(串行总线接口)协议I2C是一种串行通信协议,可以实现FPGA与多个外设之间的数据传输。
I2C接口由两条线组成,分别是时钟信号(SCL)和数据信号(SDA)。
I2C协议采用主从模式,主设备通过控制时钟信号和数据信号来与从设备进行通信。
I2C接口的优点是可以同时连接多个从设备,但通信速度相对较慢。
三、UART(通用异步收发传输)协议UART是一种异步串行通信协议,可以实现FPGA与其他设备之间的数据传输。
UART接口由两条线组成,分别是发送线(TX)和接收线(RX)。
UART协议采用点对点通信,通过发送和接收线来进行数据传输。
UART接口的优点是通信简单易用,但通信速度相对较慢。
四、PCIe(外部总线接口)协议PCIe是一种高速串行总线接口协议,可以实现FPGA与计算机之间的数据传输。
PCIe接口由多条差分信号线组成,包括数据传输线(TX和RX)和控制信号线(CLK、RESET等)。
PCIe协议采用主从模式,通过数据传输线和控制信号线来实现高速数据传输。
PCIe接口的优点是通信速度快,但连接和配置相对复杂。
总结:本文介绍了几种常见的FPGA常用接口协议,包括SPI、I2C、UART 和PCIe。
Snake算法简介Snake算法是一种经典的贪心算法,常应用于解决路径规划问题。
它模拟了一条蛇在平面上爬行的过程,通过贪心策略选择最优的方向,从而找到最短路径。
原理1.初始化一条蛇,包括蛇头和蛇身,起始位置为起点位置。
2.在蛇的周围寻找可行的方向,选择一个方向作为下一步的移动方向。
3.更新蛇的位置,包括蛇身的增减。
4.重复步骤2和3,直到到达目标位置或无法继续移动为止。
算法流程Snake算法的基本流程如下:1. 设置起点位置为蛇的初始位置,并创建一个空的路径列表。
2. 循环执行以下步骤,直到到达目标位置或无法继续移动为止:3. 在蛇的周围寻找可行的方向,并计算每个方向的路径长度。
4. 选择路径长度最短的方向作为下一步的移动方向。
5. 更新蛇的位置,并将移动方向添加到路径列表中。
6. 输出路径列表作为最短路径。
实例以下是一个Snake算法的实例:起点位置:(0, 0)目标位置:(4, 3)地图大小:5x41. 设置起点位置为(0, 0),路径列表为[(0, 0)]。
2. 当前位置为(0, 0),计算可行方向和路径长度:可行方向:[右(1, 0), 下(0, -1)]路径长度:[5, 3]选择路径长度最短的方向“下”作为下一步的移动方向,更新蛇的位置为(0, -1),路径列表为[(0, 0), (0, -1)]。
3. 当前位置为(0, -1),计算可行方向和路径长度:可行方向:[右(1, -1), 左(-1, -1), 下(0, -2)]路径长度:[4, 2, 4]选择路径长度最短的方向“左”作为下一步的移动方向,更新蛇的位置为(-1, -1),路径列表为[(0, 0), (0, -1), (-1, -1)]。
4. 当前位置为(-1, -1),计算可行方向和路径长度:可行方向:[右(0, -1), 上(-1, 0)]路径长度:[3, 5]选择路径长度最短的方向“右”作为下一步的移动方向,更新蛇的位置为(0, -1),路径列表为[(0, 0), (0, -1), (-1, -1), (0, -1)]。
c语言贪吃蛇本文实例为大家分享了C语言实现简单贪吃蛇游戏的具体代码,供大家参考,具体内容如下:用指针数组来表示蛇,p[0]表示蛇头控制方向:w,s,a,d-->上下左右 j,k-->加速、减速键盘控制需要用到线程代码:#include <stdio.h>#include <pthread.h>#include <stdlib.h>#include <time.h>#include <unistd.h>#define X 20#define Y 40char head='@';//蛇头的形状char body='O';//蛇身的形状char a[X][Y]={'O','O','O','@'};char *p[X*Y]={&a[0][3],&a[0][2],&a[0][1],&a[0][0]};//p[0]表示蛇头int n=3; //蛇身的长度(不带蛇头)int i,j;int f=1; //标志位:1.右;2.上;3.左;4.下;-1.退出int us=200000;//用于usleep,延时0.2秒void right(){*p[n]=0;for(i=n;i>0;i--){p[i]=p[i-1];}*p[0]=body;p[0]=p[0]+1;//蛇头向右移*p[0]=head;}void left(){*p[n]=0;for(i=n;i>0;i--) {p[i]=p[i-1];}*p[0]=body;p[0]=p[0]-1;*p[0]=head;}void down(){*p[n]=0;for(i=n;i>0;i--) {p[i]=p[i-1];}*p[0]=body;p[0]=p[0]+Y;*p[0]=head;}void up(){*p[n]=0;for(i=n;i>0;i--) {p[i]=p[i-1];}*p[0]=body;p[0]=p[0]-Y;*p[0]=head;}void show(){system("clear"); for(i=0;i<Y;i++) printf("-"); printf("\n");for(i=0;i<X;i++){for(j=0;j<Y;j++){if(a[i][j]==0)printf(" ");elseprintf("%c",a[i][j]);}printf("\n");}for(i=0;i<Y;i++)printf("-");printf("\nw,s,a,d->上下左右;j,k->加减速;ESC退出\n"); }int ran()//随机数生成*{srand(time(NULL));lb:i=rand()%X;j=rand()%Y;//随机位置的值为0,则产生*;否则继续找随机位置if(a[i][j]==0)a[i][j]='*';elsegoto lb;}void eat(){if(f==1)//右{if(*(p[0]+1)=='*'){n++;//长度增加p[n]=p[n-1];ran();//随机数生成*}}if(f==2)//上{if(*(p[0]-Y)=='*'){n++;//长度增加p[n]=p[n-1];ran();//随机数生成*}}if(f==3)//左{if(*(p[0]-1)=='*'){n++;//长度增加p[n]=p[n-1];ran();//随机数生成*}}if(f==4)//下{if(*(p[0]+Y)=='*'){n++;//长度增加p[n]=p[n-1];ran();//随机数生成*}}}void fail(){if(p[0]<&a[0][0]||p[0]>&a[X-1][Y-1])//蛇头不在矩阵内{printf("fail!\n");f=-1;}if(f==1)//右{for(i=n;i>0;i--){if((p[0]+1)==p[i])//右边是自己的身体{printf("fail!\n");f=-1;}}}if(f==2)//上{for(i=n;i>0;i--){if((p[0]-Y)==p[i])//上边是自己的身体{printf("fail!\n");f=-1;}}}if(f==3)//左{for(i=n;i>0;i--){if((p[0]-1)==p[i])//左边是自己的身体{printf("fail!\n");f=-1;}}}if(f==4)//下{for(i=n;i>0;i--){if((p[0]+Y)==p[i])//下边是自己的身体{printf("fail!\n");f=-1;}}}}void *key(void *arg)//控制方向:w,s,a,d-->上下左右{char k;while(1){k=getchar();if(k=='w')//上f=2;if(k=='s')//下f=4;if(k=='a')//左f=3;if(k=='d')//右f=1;if(k=='j')//加速us=us*4/5;if(k=='k')//减速us=us*5/4;if(k==27)//ESC{printf("退出!\n");f=-1;}usleep(100);}}int main(){system("stty -icanon");//关闭缓冲区,输入字符无需回车直接接受pthread_t pid;pthread_create(&pid , NULL , key , NULL);//创建线程,键盘控制ran();while(1){show(); //显示usleep(us);fail(); //判断是否会咬到自己eat(); //判断是否能吃到*if(f==1)//右right();if(f==2)//上up();if(f==3)//左left();if(f==4)//下down();if(f==-1)//退出{pthread_cancel(pid);//关闭线程return -1;}}return 0; }。
ESP32-S2ESP-IDF编程指南Release v4.3.3乐鑫信息科技2022年06月02日Table of contentsTable of contents i 1快速入门31.1概述 (3)1.2准备工作 (3)1.3开发板简介 (4)1.3.1ESP32-S2-Saola-1 (4)1.3.2ESP32-S2-DevKitM-1(U) (9)1.3.3ESP32-S2-DevKitC-1 (15)1.3.4ESP32-S2-Kaluga-1套件v1.3 (19)1.4详细安装步骤 (54)1.4.1设置开发环境 (54)1.4.2创建您的第一个工程 (54)1.5第一步:安装准备 (54)1.5.1Windows平台工具链的标准设置 (54)1.5.2Linux平台工具链的标准设置 (59)1.5.3macOS平台工具链的标准设置 (60)1.6第二步:获取ESP-IDF (61)1.6.1Linux和macOS操作系统 (61)1.6.2Windows操作系统 (61)1.7第三步:设置工具 (61)1.7.1Windows操作系统 (62)1.7.2Linux和macOS操作系统 (62)1.7.3下载工具备选方案 (62)1.7.4自定义工具安装路径 (63)1.8第四步:设置环境变量 (63)1.8.1Windows操作系统 (63)1.8.2Linux和macOS操作系统 (63)1.9第五步:开始创建工程 (64)1.9.1Linux和macOS操作系统 (64)1.9.2Windows操作系统 (64)1.10第六步:连接设备 (64)1.11第七步:配置 (64)1.11.1Linux和macOS操作系统 (64)1.11.2Windows操作系统 (65)1.12第八步:编译工程 (65)1.13第九步:烧录到设备 (66)1.13.1烧录过程中可能遇到的问题 (66)1.13.2常规操作 (67)1.14第十步:监视器 (67)1.15更新ESP-IDF (68)1.16相关文档 (68)1.16.1与ESP32-S2创建串口连接 (69)1.16.2Eclipse IDE创建和烧录指南 (74)1.16.3VS Code IDE快速入门 (75)1.16.4IDF监视器 (75)i1.16.5工具链的自定义设置 (79)2API参考852.1连网API (85)2.1.1Wi-Fi (85)2.1.2以太网 (166)2.1.3IP网络层协议 (181)2.1.4应用层协议 (197)2.2外设API (197)2.2.1Analog to Digital Converter (197)2.2.2Digital To Analog Converter (221)2.2.3通用定时器 (225)2.2.4GPIO&RTC GPIO (234)2.2.5Dedicated GPIO (252)2.2.6HMAC (257)2.2.7Digital Signature (260)2.2.8I2C驱动程序 (265)2.2.9I2S (277)2.2.10LED PWM控制器 (287)2.2.11Pulse Counter (300)2.2.12RMT (308)2.2.13SD SPI Host Driver (326)2.2.14Sigma-delta Modulation (330)2.2.15SPI Master Driver (333)2.2.16SPI Slave Driver (349)2.2.17SPI Slave Half Duplex (355)2.2.18ESP32-S2Temperature Sensor (361)2.2.19触摸传感器 (363)2.2.20Touch Element (385)2.2.21TWAI (409)2.2.22UART (425)2.2.23USB Driver (447)2.3应用层协议 (454)2.3.1mDNS服务 (454)2.3.2ESP-TLS (462)2.3.3ESP HTTP Client (474)2.3.4ESP WebSocket Client (488)2.3.5HTTP服务器 (495)2.3.6HTTPS server (516)2.3.7ICMP Echo (518)2.3.8ASIO port (523)2.3.9ESP-MQTT (523)2.3.10ESP-Modbus (534)2.3.11ESP Local Control (539)2.3.12ESP Serial Slave Link (548)2.3.13ESP x509Certificate Bundle (560)2.3.14IP网络层协议 (562)2.4配网API (563)2.4.1Unified Provisioning (563)2.4.2Protocol Communication (566)2.4.3Wi-Fi Provisioning (577)2.5存储API (593)2.5.1SPI Flash API (593)2.5.2SD/SDIO/MMC驱动程序 (615)2.5.3非易失性存储库 (623)2.5.4NVS分区生成程序 (642)2.5.5虚拟文件系统组件 (646)2.5.6FAT文件系统 (657)ii2.5.7磨损均衡API (661)2.5.8SPIFFS文件系统 (665)2.5.9量产程序 (668)2.6System API (672)2.6.1App Image Format (672)2.6.2Application Level Tracing (677)2.6.3The Async memcpy API (682)2.6.4控制台终端 (685)2.6.5eFuse Manager (692)2.6.6Error Codes and Helper Functions (711)2.6.7ESP HTTPS OTA (713)2.6.8ESP-pthread (716)2.6.9Event Loop Library (719)2.6.10FreeRTOS (735)2.6.11FreeRTOS Additions (828)2.6.12Heap Memory Allocation (844)2.6.13Heap Memory Debugging (855)2.6.14High Resolution Timer (866)2.6.15Call function with external stack (870)2.6.16Interrupt allocation (872)2.6.17Logging library (877)2.6.18Miscellaneous System APIs (882)2.6.19空中升级(OTA) (890)2.6.20Performance Monitor (900)2.6.21电源管理 (902)2.6.22Sleep Modes (907)2.6.23Watchdogs (916)2.6.24System Time (920)2.6.25Internal and Unstable APIs (924)2.7Project Configuration (924)2.7.1Introduction (924)2.7.2Project Configuration Menu (924)2.7.3Using sdkconfig.defaults (925)2.7.4Kconfig Formatting Rules (925)2.7.5Backward Compatibility of Kconfig Options (925)2.7.6Configuration Options Reference (926)2.7.7Customisations (1094)2.8Error Codes Reference (1094)3ESP32-S2H/W硬件参考11013.1ESP32-S2系列模组和开发板 (1101)3.1.1模组 (1101)3.1.2相关文档 (1101)3.2ESP32-S2模组与开发板(历史版本) (1101)3.2.1模组 (1101)3.2.2开发板 (1102)3.2.3相关文档 (1102)3.3Chip Series Comparison (1102)3.3.1Related Documents (1104)4API指南11054.1应用层跟踪库 (1105)4.1.1概述 (1105)4.1.2运行模式 (1105)4.1.3配置选项与依赖项 (1105)4.1.4如何使用这个库 (1106)4.2应用程序的启动流程 (1112)4.2.1一级引导程序 (1113)iii4.2.2二级引导程序 (1113)4.2.3应用程序启动阶段 (1113)4.3引导加载程序(Bootloader) (1114)4.3.1引导加载程序兼容性 (1114)4.3.2恢复出厂设置 (1114)4.3.3从测试应用程序分区启动 (1115)4.3.4从深度睡眠中快速启动 (1115)4.3.5自定义引导程序 (1115)4.4构建系统(CMake版) (1115)4.4.1概述 (1116)4.4.2使用构建系统 (1116)4.4.3示例项目 (1119)4.4.4项目CMakeLists文件 (1120)4.4.5组件CMakeLists文件 (1121)4.4.6组件配置 (1123)4.4.7预处理器定义 (1123)4.4.8组件依赖 (1124)4.4.9组件CMakeLists示例 (1128)4.4.10自定义sdkconfig的默认值 (1131)4.4.11Flash参数 (1132)4.4.12构建Bootloader (1132)4.4.13选择目标芯片 (1132)4.4.14编写纯CMake组件 (1133)4.4.15组件中使用第三方CMake项目 (1133)4.4.16组件中使用预建库 (1134)4.4.17在自定义CMake项目中使用ESP-IDF (1134)4.4.18ESP-IDF CMake构建系统API (1135)4.4.19文件通配&增量构建 (1138)4.4.20构建系统的元数据 (1139)4.4.21构建系统内部 (1139)4.4.22从ESP-IDF GNU Make构建系统迁移到CMake构建系统 (1141)4.5Deep Sleep Wake Stubs (1142)4.5.1Rules for Wake Stubs (1143)4.5.2Implementing A Stub (1143)4.5.3Loading Code Into RTC Memory (1143)4.5.4Loading Data Into RTC Memory (1143)4.6Device Firmware Upgrade through USB (1144)4.6.1Building the DFU Image (1145)4.6.2Flashing the Chip with the DFU Image (1145)4.7错误处理 (1146)4.7.1概述 (1146)4.7.2错误码 (1147)4.7.3错误码到错误消息 (1147)4.7.4ESP_ERROR_CHECK宏 (1147)4.7.5错误处理模式 (1148)4.7.6C++异常 (1148)4.8ESP-MESH (1148)4.8.1概述 (1149)4.8.2简介 (1149)4.8.3ESP-MESH概念 (1149)4.8.4建立网络 (1155)4.8.5管理网络 (1159)4.8.6数据传输 (1161)4.8.7信道切换 (1163)4.8.8性能 (1166)4.8.9更多注意事项 (1167)4.9Core Dump (1167)4.9.1Overview (1167)iv4.9.2Configurations (1167)4.9.3Save core dump toflash (1168)4.9.4Print core dump to UART (1168)4.9.5ROM Functions in Backtraces (1168)4.9.6Dumping variables on demand (1169)4.9.7Running espcoredump.py (1169)4.10Event Handling (1170)4.10.1Wi-Fi,Ethernet,and IP Events (1170)4.10.2Mesh Events (1171)4.10.3Bluetooth Events (1171)4.11片外RAM (1172)4.11.1简介 (1172)4.11.2硬件 (1172)4.11.3配置片外RAM (1172)4.11.4片外RAM使用限制 (1173)4.12严重错误 (1174)4.12.1概述 (1174)4.12.2紧急处理程序 (1174)4.12.3寄存器转储与回溯 (1175)4.12.4GDB Stub (1176)4.12.5Guru Meditation错误 (1177)4.12.6其它严重错误 (1178)4.13Flash加密 (1179)4.13.1概述 (1179)4.13.2Flash加密过程中使用的eFuse (1180)4.13.3Flash的加密过程 (1180)4.13.4设置Flash加密的步骤 (1181)4.13.5Flash加密的要点 (1187)4.13.6使用加密的Flash (1187)4.13.7更新加密的Flash (1188)4.13.8关闭Flash加密 (1188)4.13.9Flash加密的局限性 (1189)4.13.10Flash加密与安全启动 (1189)4.13.11使用无安全启动的Flash加密 (1189)4.13.12Flash加密的高级功能 (1189)4.13.13技术细节 (1190)4.14ESP-IDF FreeRTOS SMP Changes (1191)4.14.1Overview (1191)4.14.2Tasks and Task Creation (1191)4.14.3Scheduling (1192)4.14.4Critical Sections&Disabling Interrupts (1194)4.14.5Task Deletion (1195)4.14.6Thread Local Storage Pointers&Deletion Callbacks (1195)4.14.7Configuring ESP-IDF FreeRTOS (1195)4.15Hardware Abstraction (1195)4.15.1Architecture (1196)4.15.2LL(Low Level)Layer (1197)4.15.3HAL(Hardware Abstraction Layer) (1198)4.16High-Level Interrupts (1199)4.16.1Interrupt Levels (1199)4.16.2Notes (1199)4.17JTAG调试 (1200)4.17.1引言 (1200)4.17.2工作原理 (1201)4.17.3选择JTAG适配器 (1201)4.17.4安装OpenOCD (1202)4.17.5配置ESP32-S2目标板 (1202)4.17.6启动调试器 (1207)v4.17.7调试范例 (1207)4.17.8从源码构建OpenOCD (1207)4.17.9注意事项和补充内容 (1211)4.17.10相关文档 (1215)4.18链接脚本生成机制 (1240)4.18.1概述 (1240)4.18.2快速上手 (1240)4.18.3链接脚本生成机制内核 (1243)4.19lwIP (1247)4.19.1Supported APIs (1247)4.19.2BSD Sockets API (1248)4.19.3Netconn API (1252)4.19.4lwIP FreeRTOS Task (1252)4.19.5esp-lwip custom modifications (1252)4.19.6Performance Optimization (1253)4.20应用程序的内存布局 (1254)4.20.1IRAM(指令RAM) (1254)4.20.2IROM(代码从Flash中运行) (1255)4.20.3RTC快速内存 (1255)4.20.4DRAM(数据RAM) (1255)4.20.5DROM(数据存储在Flash中) (1255)4.20.6RTC慢速内存 (1256)4.21DMA能力要求 (1256)4.22分区表 (1257)4.22.1概述 (1257)4.22.2内置分区表 (1257)4.22.3创建自定义分区表 (1258)4.22.4生成二进制分区表 (1260)4.22.5烧写分区表 (1260)4.22.6分区工具(parttool.py) (1260)4.23RF calibration (1262)4.23.1Partial calibration (1262)4.23.2Full calibration (1262)4.23.3No calibration (1262)4.23.4PHY initialization data (1263)4.24Secure Boot V2 (1263)4.24.1Background (1263)4.24.2Advantages (1263)4.24.3Secure Boot V2Process (1263)4.24.4Signature Block Format (1264)4.24.5Verifying the signature Block (1264)4.24.6Bootloader Size (1265)4.24.7eFuse usage (1265)4.24.8How To Enable Secure Boot V2 (1265)4.24.9Restrictions after Secure Boot is enabled (1266)4.24.10Generating Secure Boot Signing Key (1266)4.24.11Remote Signing of Images (1266)4.24.12Secure Boot Best Practices (1267)4.24.13Key Management (1267)4.24.14Multiple Keys (1267)4.24.15Key Revocation (1267)4.24.16Technical Details (1268)4.24.17Secure Boot&Flash Encryption (1268)4.24.18Signed App Verification Without Hardware Secure Boot (1269)4.24.19Advanced Features (1269)4.25Thread Local Storage (1269)4.25.1Overview (1270)4.25.2FreeRTOS Native API (1270)vi4.25.3Pthread API (1270)4.25.4C11Standard (1270)4.26工具 (1270)4.26.1Downloadable Tools (1270)4.26.2IDF Docker Image (1279)4.26.3IDF Windows Installer (1281)4.26.4IDF Component Manager (1282)4.27ULP协处理器编程 (1283)4.27.1ESP32-S2ULP coprocessor instruction set (1283)4.27.2Programming ULP coprocessor using C macros(legacy) (1299)4.27.3安装工具链 (1303)4.27.4编译ULP代码 (1303)4.27.5访问ULP程序变量 (1304)4.27.6启动ULP程序 (1305)4.27.7ESP32-S2ULP程序流 (1306)4.28ULP-RISC-V协处理器编程 (1307)4.28.1安装ULP-RISC-V工具链 (1307)4.28.2编译ULP-RISC-V代码 (1307)4.28.3访问ULP-RISC-V程序变量 (1308)4.28.4启动ULP-RISC-V程序 (1308)4.28.5ULP-RISC-V程序流 (1309)4.29ESP32-S2中的单元测试 (1309)4.29.1添加常规测试用例 (1310)4.29.2添加多设备测试用例 (1310)4.29.3添加多阶段测试用例 (1311)4.29.4应用于不同芯片的单元测试 (1312)4.29.5编译单元测试程序 (1312)4.29.6运行单元测试 (1313)4.30USB OTG Console (1314)4.30.1Hardware Requirements (1314)4.30.2Software Configuration (1314)4.30.3Uploading the Application (1314)4.30.4Limitations (1315)4.31Wi-Fi驱动程序 (1316)4.31.1ESP32-S2Wi-Fi功能列表 (1316)4.31.2如何编写Wi-Fi应用程序 (1316)4.31.3ESP32-S2Wi-Fi API错误代码 (1317)4.31.4初始化ESP32-S2Wi-Fi API参数 (1317)4.31.5ESP32-S2Wi-Fi编程模型 (1317)4.31.6ESP32-S2Wi-Fi事件描述 (1318)4.31.7ESP32-S2Wi-Fi station一般情况 (1321)4.31.8ESP32-S2Wi-Fi AP一般情况 (1323)4.31.9ESP32-S2Wi-Fi扫描 (1323)4.31.10ESP32-S2Wi-Fi station连接场景 (1330)4.31.11找到多个AP时的ESP32-S2Wi-Fi station连接 (1334)4.31.12Wi-Fi重新连接 (1334)4.31.13Wi-Fi beacon超时 (1334)4.31.14ESP32-S2Wi-Fi配置 (1334)4.31.15Wi-Fi Easy Connect™(DPP) (1338)4.31.16无线网络管理 (1339)4.31.17无线资源管理 (1339)4.31.18Wi-Fi Location (1339)4.31.19ESP32-S2Wi-Fi节能模式 (1340)4.31.20ESP32-S2Wi-Fi吞吐量 (1340)4.31.21Wi-Fi80211数据包发送 (1341)4.31.22Wi-Fi Sniffer模式 (1342)4.31.23Wi-Fi多根天线 (1343)4.31.24Wi-Fi信道状态信息 (1344)vii4.31.25Wi-Fi信道状态信息配置 (1345)4.31.26Wi-Fi HT20/40 (1345)4.31.27Wi-Fi QoS (1345)4.31.28Wi-Fi AMSDU (1346)4.31.29Wi-Fi分片 (1346)4.31.30WPS注册 (1346)4.31.31Wi-Fi缓冲区使用情况 (1346)4.31.32如何提高Wi-Fi性能 (1347)4.31.33Wi-Fi Menuconfig (1350)4.31.34故障排除 (1353)4.32Wi-Fi Security (1358)4.32.1ESP32-S2Wi-Fi Security Features (1358)4.32.2Protected Management Frames(PMF) (1358)4.32.3WPA3-Personal (1359)5Libraries and Frameworks13615.1Cloud Frameworks (1361)5.1.1AWS IoT (1361)5.1.2Azure IoT (1361)5.1.3Google IoT Core (1361)5.1.4Aliyun IoT (1361)5.1.5Joylink IoT (1361)5.1.6Tencent IoT (1361)5.1.7Tencentyun IoT (1362)5.1.8Baidu IoT (1362)6Contributions Guide13636.1How to Contribute (1363)6.2Before Contributing (1363)6.3Pull Request Process (1363)6.4Legal Part (1364)6.5Related Documents (1364)6.5.1Espressif IoT Development Framework Style Guide (1364)6.5.2Install pre-commit Hook for ESP-IDF Project (1370)6.5.3编写代码文档 (1371)6.5.4文档的附加工具和扩展功能指南 (1380)6.5.5创建示例项目 (1383)6.5.6API Documentation Template (1384)6.5.7Contributor Agreement (1386)7ESP-IDF版本简介13897.1发布版本 (1389)7.2我该选择哪个版本? (1389)7.3版本管理 (1389)7.4支持期限 (1390)7.5查看当前版本 (1391)7.6Git工作流 (1392)7.7更新ESP-IDF (1392)7.7.1更新至一个稳定发布版本 (1393)7.7.2更新至一个预发布版本 (1393)7.7.3更新至master分支 (1393)7.7.4更新至一个发布分支 (1393)8资源13958.1PlatformIO (1395)8.1.1What is PlatformIO? (1395)8.1.2Installation (1395)8.1.3Configuration (1396)8.1.4Tutorials (1396)viii8.1.5Project Examples (1396)8.1.6Next Steps (1396)8.2有用的链接 (1396)9Copyrights and Licenses13979.1Software Copyrights (1397)9.1.1Firmware Components (1397)9.1.2Build Tools (1398)9.1.3Documentation (1398)9.2ROM Source Code Copyrights (1398)9.3Xtensa libhal MIT License (1399)9.4TinyBasic Plus MIT License (1399)9.5TJpgDec License (1399)10关于本指南1401 11切换语言1403索引1405索引1405ix这里是乐鑫IoT开发框架(esp-idf)的文档中心。
电子技术综合实验箱使用说明目录一、系统简介 (1)二、配置 (2)三、软、硬件安装 (2)四、系统功能介绍 (4)五、MCU单片机小系统详述 (22)六、ISE9.1简明教程 (36)七、电子技术综合实验箱实验项目简介 (48)实验一、流水灯控制实验 (48)实验二、数码管显示实验 (50)实验三、液晶显示实验 (52)实验四、串行A/D实验 (53)实验五、串行D/A实验 (54)实验六、232通讯实验 (55)实验七、鼠标键盘驱动及VGA显示实验 (57)实验八:简易电子琴实验 (61)实验九:音乐回放实验 (62)实验十:等精度频率计实验 (62)实验十一:DDS实验 (64)实验十一:扩展部分实验(只提供方案) (66)实验一、数字存储示波器 (66)实验二、频谱分析仪 (68)八、ISE9.1i安装步骤 (73)电子技术综合实验箱使用说明书一、系统简介电子技术综合实验箱是由长沙鑫三知科教设备有限公司研发的,以单片机与FPGA为核心的综合实验系统。
主要适用于各高校参加全国大学电子竞赛的赛前辅导,以及本科生的单片机与FPGA的入门级教学,同时该实验系统也可作为研究生、中小企业的电子工程师等使用者的开发平台和辅助培训工具。
开发工程师可使用VHDL语言、Verilog语言、原理图或方程式,结合Xilinx集成开发环境开发FPGA的应用,使用C语言或汇编语言开发单片机应用程序。
二、配置2.1 基本配置★ 1. 5V、3.3V、1.8V板上电源★ 2. 40万门SpartanⅢXC3S400 FPGA★ 3. 支持JTAG、Slave Serial、Select MAP 等多种加载模式★ 4. 支持FPGA EEPROM配置,EEPROM 芯片为XCF02S★ 5. 内置50MHZ晶振,满足高速设计要求★ 6. 以STC89c58RD+为核心的单片机最小系统★7. 高速AD/DA模块★8. 支持标准RS232串行接口★9. PS2键盘接口、PS2鼠标接口,支持3D、4D滚轮鼠标★10. VGA监视器接口,支持800×600、1600×1200或自定义分辨率★11. 12864点阵LCD显示(可选)2.2 可选配置★12. 大容量高速SRAM模块,容量128KB ★13. 直接数字合成DDS模块★14. 语音处理模块三、软、硬件安装3.1 开发套件内容★电子技术综合实验箱;★FPGA下载线;★串口电缆;★用户手册(含原理图和元器件清单);★CD-ROM(含ISE7.1、ModelSim6.0、Keilc51、ISPlay v1.5开发软件(数据手册);3.2 电子技术综合实验箱各模块基本配置:◎底板:★+12V、-12V、5V、-5V、3.3V、1.8V电源★VGA显示接口★PS2鼠标、键盘接口★RS232串行通信接口★音频输入/输出接口★LCD接口★2个独立按键★8个发光二极管★电源指示灯★各模块插座◎FPGA模块:★SpartanⅢXC3S400 40万门FPGA★XCF02S(2Mbit)Configuration PROM ★内置3.3V、2.5V、1.8V、1.2V电源★内置Jtag下载电路★电源指示★内/外部电源切换开关◎MCU模块:★51系列核心单片机,与多款型号兼容★地址、数据、中断等多种扩展接口★内置ISP下载电路★8个7段数码管★128*64点阵液晶★4行4列按键★32K静态SRAM★ TLC549 AD芯片★ TLV5618 DA芯片★11.059MHz晶振;3.3 硬件安装图 3.1 硬件安装示意图硬件的安装过程非常简单,如图3.1所示,将各模块插到对应的位置。
基于FPGA的贪吃蛇游戏
一、项目简介
贪吃蛇游戏是一款比较古老且流行的游戏,该项目做的是一款以FPGA 实验板为控制端,显示器为终端的贪吃蛇游戏。
涉及到的关键技术是:配置生成nios核,了解VGA格式,贪吃蛇游戏软件设计。
二、整体设计思路
整体思路是基于DE2实验板,用QuartusII自带的nios核做一个32位的CPU,载入程序后就可以通过DE2板上的4个按键和显示器来玩贪吃蛇的游戏了。
同时在实验板的LCD上显示玩家所得的分数。
由于使用的是VGA格式传送图象信号,所以显示器要求支持VGA格式。
FPGA使用的是Altera大学计划的DE2板子。
同时板上提供了丰富的输入输出设备。
该项目使用到的资源有:4个按键,外扩的SRAM,Flash,VGA 模块,LCD显示模块。
完全满足项目的设计要求。
三、硬件说明
硬件以实验板为基础设计。
以下原理图中的悬空引脚网络号都是连向CycloneII 2C35(CycloneIV4CE1155)芯片的。
整个系统的硬件主要由电源模块,CPU及存储器,按键模块,LCD模块,VGA模块,下载调试模块组成。
下面将依次介绍。
系统硬件框图如下:
首先介绍实验板上自带的50M晶振。
它作为基准时钟源,然后通过数字逻辑电路内部分频至不同的频率作为不同模块的时钟源。
50M晶振电路原理图如下:
虽然可以在FPGA内部就开辟出RAM和ROM区。
但一般应用都不这样做,而是采用外部专用芯片。
一是价格原因,二是FPGA的SOPC应用一般规模很大,内部开辟的RAM区大小难以达到设计要求,而内部ROM根本就没有掉电后依然能储存数据的这个特性。
所以使用外接SRAM和FLASH 是必要且必须的。
SRAM芯片网络连接原理图如下:
FLASH芯片网络连接原理图如下:
按键部分是通过施密特触发器来进行硬件按键消抖动的。
这样编写软件时就不用考虑按键消抖,简化了程序。
按钮按键和电平按键电路原理图如下:
LCD用于显示一些必要的系统提示。
也方便在无显示器时的调试。
LCD部分电路原理图如下:
VGA用于传送图象信号到显示器。
它分离传送RGB三原色信号,还有行场同步信号。
从而保证了信号间无串扰,有很好的显示效果。
DE2的实验板使用的VGA输出芯片是ADV7123,具有每通道10位数字信号的高速视频芯片。
最高可支持1600x1200,100Hz的画面输出。
VGA的时序图如下:
VGA模块的电路原理图如下:
四、CPU设计说明
FPGA的特点就是可根据需求编程,实际上就是芯片级的数字电路设计。
Altera公司的软件Quartus提供了一个免费的nios核,使用的是哈佛结构,精简指令集。
它使用图形配置方式,最后生成VeriloHDL或VHDL进行编译。
因此可以很方便的在FPGA上生成一个高性能的32位CPU,而且其外设可按需定制。
该项目配置了一个32位的CPU,定制的外设有:JTAG模块、SRAM控制器、FLASH控制器、9个电平触发按键、4个边沿触发的按键中断输入口、LCD控制电路、VGA控制电路、定时器一个。
在SOPC下选择配置,编译成功后,载入sof文件到FPGA中,一款定制的32位CPU就诞生了。
然后在QuartusII中使用VerlogHDL或者原理图配置方式将CPU模块的生成IO口定义成IO口,如有特殊需求也可在这些IO口加上必要逻辑电路。
配置好的CPU图形功能模块如下:
五、软件设计说明
Altera提供了一款niosII IDE的C语言软件开发工具,它提供了一个HAL 界面,使得软件和硬件无关,大大方便了针对niosII核的软件开发。
该项目的软件部分就是设计贪吃蛇的游戏。
主要的内容有VGA驱动、LCD驱动、检测按键、贪吃蛇游戏初始化、蛇的状态控制、图形和信息的显示等等。
LCD底层驱动是由HAL完成的,编程时只需十分方便得使用调用文件函数及格式打印函数即可完成对LCD的操作。
编写的VGA驱动提供了最基本的背景色和前景色的设置,象素点的清除和显示等函数,VGA驱动可以查看VGA.c和VGA.h二个文件中的内容。
按键检测使用的是边沿触发中断模式。
由于是硬件消抖(见硬件原理图),所以无需使用软件延时消抖。
4个按键控制蛇的上下左右4个前进方向。
主函数用于读取按键,控制的走向,判断是否吃到蛋或者游戏结束,以及显示分数等等。
程序设计思路的十分清晰明朗。
源程序内容见board_diag.c文件。
包含的文件有board_diag.h ,VGA.h,VGA.c。
主函数流程图如下:
六、升级空间
现在的贪吃蛇是没有音乐的,玩起来不免单调。
而DE2板的资源十分丰富,有音频解码芯片,加以使用,就可以边玩游戏边听音乐。
另外DE2板的按键比较少,只有4个,但它支持USB,PS/2,所以完全可以用标准键盘或USB输入设备作为控制器。
这样功能就更强大了。
设置可以把DE2板设计制作成一个具有平机功能的游戏机,在SD卡中存放游戏,DE2板载入后就可以玩各种不同的游戏了。
当然,这样做的话工作量很大,涉及的面也比较
大。
不是一个人短时间内能完成的。
七、游戏操作说明
蛇的前进方向用4个按键控制,分别如下:
K0——蛇向右前进,
K1——蛇向左前进,
K2——蛇向下前进,
K3——蛇向上前进。
游戏的难度分为9档,难度1蛇的速度最慢,难度9蛇的速度最快。
游戏的默认难度是7。
当蛇碰到墙壁或者身体后算输,游戏结束。
难度分档用9个SW来控制,分别如下:
SW0——难度1,每吃一个蛋加1分。
SW1——难度2,每吃一个蛋加2分。
SW2——难度3,每吃一个蛋加3分。
SW3——难度4,每吃一个蛋加4分。
SW4——难度5,每吃一个蛋加5分。
SW5——难度6,每吃一个蛋加6分。
SW6——难度7,每吃一个蛋加7分。
SW7——难度8,每吃一个蛋加8分。
SW8——难度9,每吃一个蛋加9分。
八、心得体会
通过这个项目的制作,让我对FPGA的认识和使用水平又上了一个台阶:了解了SOPC的应用,学会了在FPGA中制作一个CPU以及编写程序。
更重要的是体会到了技术的日新月异,大致了解了日后FPGA的大致发展方向。
我敢说,日后大规模使用FPGA来完成项目制作是一个大趋势,芯片级的设计份额将进一步提高,从而使板级设计的工作量进一步减少。
因为这样有利于电子产品微型化,也可以提高稳定性,降低功耗。
而FPGA在数字电路的芯片级设计是大有可为。
但目前还有点问题:一是开发成本过高,另外要使用FPGA设计产品工作量过大。
所以日后对FPGA的设计工作将进一步细分,同时软件的运行速度要求更快,功能更强大。