最近抽空看了不少教学视频,简单整理一下
USB、以太网UDP通信虽然复杂,但是有专门芯片,具体FPGA代码就比较简单
SD卡、SDRAM较为复杂,但完全由FPGA驱动,相比之下代码就比较复杂
3 初识FPGA
1 FPGA是什么:与单片机异同、厂商、优势
2 应用领域及前景:通信、算法、嵌入式、前沿科技--5G无线、自动驾驶、AI、云计算
3 内部结构:框图
电源:适配器、USB(小功率)、排针
CAN、WIRELESS、SD卡、IO、RGB TFT LCD、晶振、JTAG、USB转串口、32Mbyte SDRAM、数码管、喇叭、OLED 摄像头接口、光传感器、蜂鸣器、红外接收头、RTC时钟、单总线接口、LED、按键、电池、AD DA、音频输入输出、以太网、485、232、VGA、MCU LCD、FPGA、FLASH、EEPROM
1 简介:Altera专用
2 开发流程:新建工程、设计输入、配置工程、分析综合、分配引脚、编译工程得到sof
3 流水灯实例:创建文件夹层次、新建工程、选择芯片型号、新建代码文件、编写代码、分析综合、Tab设置为4个字符 禁止保存备份文件、双用途引脚设置、分配引脚(对应qsf文件,也可直接修改qsf)、编译、下载sof(片内RAM,断电丢失)、sof转为jic、下载jic 擦除flash
1 简介:片上调试软件、内嵌逻辑分析仪;缺点--消耗FPGA资源
2 实例:打开qpf工程、打开signaltap;选择综合前信号、选择时钟、采样深度、保存为stp文件;编译、下载、采集波形;常用用法--触发方式、数据类型显示;禁止signaltap 节约资源
以流水灯为例,视频演示了完整的仿真过程,还有各种常用操作和设置
好久不用,直接看一遍视频就行
Modelsim工程后缀 .mpf
建立仿真工程-->添加文件-->编译通过-->开始仿真-->添加波形-->仿真
restart -f run 5us 变量本身没有变化,修改文件且编译后快速重新仿真
功能仿真如下
时序仿真:拷贝网表文件.vo .sdo文件、altera_ver cycloneive_ver文件夹,仿真工程添加.vo文件并编译,library添加两个文件夹。时序仿真如下,注意counter变化时刻与时钟沿不一致
1 FPGA:传统数字电路-->PLD-->CPLD乘积项 FPGA查找表 、用户角度没区别;
2 HDL:中美Verilog、欧洲VHDL
3 Verilog:83年发明、1995、2001两版标准;原理图开发仅适合小规模;
1 基础知识:逻辑值 0 1 X Z;进制 4‘b0101 4'd2 'o 4'ha 16’b1001_1010=16'h9A、默认32位;标识符 定义模块名、端口名、信号名、区分大小写、建议小写 下划线 前后缀;
2 数据类型:寄存器--reg、默认初始值为X、数据存储单元。时序逻辑中reg对应触发器,组合逻辑中reg对应硬件接线; 线网--wire tri、不能储存值、默认初始值为高阻Z; 参数--parameter、常量。用于定义位宽、状态机、延迟大小、模块参数传递;
3 运算符:/只能整数除法;!非、~按位取反;?:条件运算符;左移位宽增加,右移位宽不变;拼接运算符。
1 注释:// /* */
2 关键字:
3 程序框架:基本单元 module;端口描述默认wire,除非明确写reg;
模块调用时,模块输出端必须连接wire类型
1 结构语句:initial一般用于测试文件;always--敏感列表、块语句。边沿触发常描述时序逻辑,电平触发常描述组合逻辑。
2 赋值语句:= 阻塞赋值;<= 非阻塞赋值;
3 条件语句:必须在过程块中使用。if、case
1 概念:在有限个状态之间按一定规律转换的时序电路。
2 模型:moore是mealy的特例,密码锁为moore状态机。
3 设计:四段论--状态空间定义 独热码译码逻辑简单、状态跳转、下个状态判断(组合逻辑 使用阻塞赋值)、各个状态下的动作
组合逻辑线路延时导致数据偏移,可能导致下一级接收电路出错
1 LED简介:发光二极管
2 硬件设计:管脚连接
3 实例:
One more thing:直接在qsf文件中修改引脚配置,修改成功。
1 按键简介: 轻触式按键、自锁式按键
2 硬件设计:按下为低电平,弹起高电平
3 软件设计:
One more thing:
编译通过的quartus工程,打开工程时删除qsf,对于工程没有影响,会自动生成一个一模一样的qsf
关闭工程时删除qsf,重新打开工程编译失败,需要重新加载.v文件,重新选择FPGA型号,重新配置引脚,才能得到一样的现象
但是有下图的区别
1 蜂鸣器简介:有源蜂鸣器(含振荡源,黑胶封闭、直接加电源可鸣叫)、无源蜂鸣器(无振荡源,能看到PCB,须加脉冲鸣叫)
2 按键消抖简介:机械按键抖动5-10ms。延时20ms采样 或 信号无抖动持续20ms
3 程序设计:
一共三个源文件,设置顶层模块
One more thing:
视频中的代码有缺陷,下图灰色部分delay_cnt赋值代码有时候不执行(SignalTapII实测发现,随机出现,概率很低),应该和异步信号检测有关,外部引脚使用前应该先打两拍
代码不执行分析:key某一时刻从0变为1,恰好与时钟上升沿时刻相近,不满足建立时间或保持时间,导致发生亚稳态,if(key_reg != key)上一个时钟上升沿key_reg、key都是0,下一个时钟上升沿key_reg、key都是1,delay_cnt赋值失败。类似图如下
1 触摸按键简介:电容式、电阻式、红外感应式、表面声波式。电容式最广泛。
2 硬件设计:触摸芯片AR101,FPGA无需考虑防抖
3 软件设计:经典边沿检测代码如下
//根据按键信号的上升沿判断按下了按键
assign touch_en = (~touch_key_d1) & touch_key_d0;
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(sys_rst_n == 1'b0) begin
touch_key_d0 <= 1'b0;
touch_key_d1 <= 1'b0;
end
else begin
touch_key_d0 <= touch_key;
touch_key_d1 <= touch_key_d0;
end
end
1 数码管简介:静态显示--独立段显信号;动态显示--共用段显信号;
2 硬件设计:动态显示电路;
3 程序设计:循环显示0~f
1 数码管驱动方式:动态扫描速度,扫描周期<1/24秒。视频中代码6ms刷新一遍,改为;24ms几乎看不出闪烁;60ms闪烁很明显;600ms、6s刷新显示明显异常;
2 硬件设计:同上节
3 程序设计:视频中说乘法和除法占用时间较长,需要低频的时钟。但实测50M的1个时钟就计算完毕了
assign data0 = data % 4'd10; // 个位数 自动调用IP核
assign data1 = data / 4'd10 % 4'd10 ; // 十位数
assign data2 = data / 7'd100 % 4'd10 ; // 百位数 100对应7bit
assign data3 = data / 10'd1000 % 4'd10 ; // 千位数
assign data4 = data / 14'd10000 % 4'd10; // 万位数
assign data5 = data / 17'd100000; // 十万位数
1 PLL简介:倍频、分频、相位偏移、占空比
2 PLL IP使用:设置输入 输出时钟频率、例化;生成.qip .v两个文件
3 PLL IP仿真:altera_mf.v
一个清爽的设置
1 RAM简介:可配置RAM ROM FIFO 移位寄存器、单口 双口RAM;M9K 8192bit;
2 程序设计:单口RAM;极简时序;
3 IP核的使用:M9K优于LCs(选择自动,系统优先使用M9K)、SignalTap演示、In-System Memory Content Editor调试RAM
32*8bit、单时钟、取消输出寄存、取消时钟使能信号、创建读使能
1 FIFO简介:时钟不同、位宽不同,用于不同时钟域数据传输或不同位宽接口匹配;
2 程序设计:写入数据后读出、系统框图
3 IP核使用:详细演示FIFO-IP核用法、读写FIFO模块代码解读、SignalTap演示效果
双时钟、前显模式
33 RGB-LCD第一讲 彩条显示
1 简介:液晶原理、像素 分辨率、行列扫描、像素格式RGB888、接口RGB MCU LVDS MIPI、IIC SPI支持触摸屏、接口原理图
2 时序:
3 程序设计:
34 RGB-LCD第二讲 彩条显示
1 简介:
2 时序:时间参数、黑边框原因、行显示时序、帧显示时序、更改电阻调整LCD分辨率 方向、管脚说明
3 程序设计:读LCD ID模块、时钟分频模块、LCD显示模块生成彩条、LCD驱动模块--最底层
35 RGB-LCD第3讲 彩条显示
读LCD ID模块:读取尺寸和分辨率
时钟分频模块:提供LCD时钟、2分频、4分频
LCD显示模块生成彩条:5个等分彩条
LCD驱动模块--最底层:兼容5种屏幕
RTL、效果演示
36 RGB TFT-LCD字符显示试验
1 RGB LCD字符显示简介:取模软件PCtoLCD用法
2 硬件设计:原理图、管脚分配
3 程序设计:系统框图、LCD显示模块--坐标计算
效果演示
1 EEPROM简介:寿命一般100万次;EEPROM--以字节为单位改写、结构复杂成本高、容量小、一般存储关键数据;FLASH--以扇区 块为单位擦除、结构简单成本低、容量大、一般存储大容量数据;
看原厂datasheet简介
2 硬件设计:AT24C64 64Kbit
1 IIC通信协议:Inter-Integrated Circuit 内部集成电路总线、数据量小、距离短、主从通信;标准100Kbps、快速400Kbps、高速3.4Mbps;UART异步全双工、IIC同步半双工;看原厂datasheet写时序
看原厂datasheet读时序
试验任务:写入地址0-255并读取。
端口划分
驱动模块状态跳转图
注意避免下图状态,使用三态
//SDA控制
assign sda = sda_dir ? sda_out : 1'bz; //SDA数据输出或高阻
assign sda_in = sda ; //SDA数据输入
4倍频,满足IIC时序要求
通过4倍频时钟计数器实现IIC时序
本视频讲解IIC代码
仿真IIC模块,需要EEPROM仿真模型(时序复杂的一般官网会提供,较为简单的可以自己写或百度)
仿真IIC模块。主要观察scl、sda波形。
sda白色虚线为高阻
sda红色为不定态,EEPROM模型不严谨,不影响仿真
讲解EEPROM读写模块和LED模块
烧写sof,看LED
1 AP3216C简介:数字环境光传感器+距离传感器+红外传感器;IIC 400kHz;
2 硬件设计:
3 程序设计:数码管显示环境光强度, LED灯亮灭指示物体距离远近。
als_data = als_data_t * 6'd35 / 7'd100; //*0.35
1 PCF8653简介:和EEPROM、环境光传感器共用IIC总线;
2 硬件设计:
3 程序设计:配置并显示时间,按键切换日期、时间;
1 PCF8591简介:4AD 1DA 1IIC;IIC独立于EEPROM、RTC、ALS/PS的另一条总线;8位,器件地址、状态寄存器、读写时序
2 试验任务:先DA输出,后AD采样,显示在数码管上
3 硬件设计:
4 程序设计:
1 存储器简介:存储器类型、SD同步 动态(电容充电)、容量大 速度快 便宜 控制复杂
2 SDRAM内部结构:L Bank 行列 存储单元、功能框图
3 硬件设计:原理图、管脚分配
1 初始化:稳定期 预充电 刷新 模式寄存器设置、MRS tRSC
2 读写操作:行激活、tRCD、列读写、CL、数据输出 读、数据输入 写、tWR、
2 读写操作:突发长度、数据掩码、读写预充电 tRP
上图应该是错了,但是历程的代码是对的, Datasheet如下图
3 刷新:动态、自动刷新 自刷新
1 试验任务:先写后读
2 系统框图:框图、RTL;输出给SD RAM芯片的时钟考虑硬件延时;
3 程序设计:SDRAM控制器框图、初始化状态机、工作状态机
测试模块、led模块、FIFO模块--用户至SDRAM转换
SDRAM控制器:状态控制、命令控制、数据读写
状态控制模块、命令控制模块:最底层代码、对应芯片手册、有头文件、对应2个状态机图、操作指令
数据读写模块:最简单
72 SD卡简介
1 SD卡概述:安全数字卡、基于flash、MMC SD TF异同、SDSC SDHC SDXC容量级别、速度等级、SD TF 引脚定义 SDIO SPI、
2 SD卡常用命令:写命令格式、CMD0 8 17 24 55 ACMD41、返回R1 R3 R7
3 硬件设计:原理图、上拉电阻
73 SD卡操作时序
1 SPI接口与时序:同步全双工、4个引脚、通信模式3 时钟极性 相位
2 SD卡初始化:发送命令确认协议版本 卡类型;步骤--同步 复位 查版本号 发CMD55 发ACMD41;复位命令时序
3 SD卡读写操作:读写时序 数据块 数据头
74 SD卡程序设计1
1 试验任务:写入后读回512字节数据
2 系统框图:框图讲解
3 程序设计:顶层原理图、2路反向50MHz时钟、初始化状态机
75 SD卡程序设计2
数据产生代码解读;
核心 SD卡顶层控制模块源码解读--SD初始化代码
76 SD卡程序设计3
应该先看一遍代码,再看视频讲解或者不看视频
读SD卡模块、写SD卡模块:对比时序图讲代码;实验演示
77 SD卡图片显示--VGA
1 简介:SD卡事先存入BIN图片,FPGA读取并通过VGA显示;
2 试验任务:SD-->FPGA-->SDRAM-->VGA、两张图片循环显示
3 程序设计:系统框图、RTL、读取SD卡图片模块代码详解、img2lcd SD卡处理 WinHex、实验效果演示
78 SD卡图片显示--RGB
1 试验任务:SD-->FPGA-->SDRAM-->RGB LCD
2 程序设计:系统框图、分辨率 时钟异于VGA、实验演示、更改图片分辨率后再次演示
1 以太网概述:IEEE802.3;速度--标准10M、快速100M、千兆1G;RJ45引脚;
2 MII接口与时序:PHY芯片作用--并转串、自动协商;MII引脚、时序
冲突检测一般用在半双工,全双工时不需要
1 以太网数据格式:OSI底层4层、数据包、帧格式解析、帧间隙
2 IP协议:数据报格式解析、校验和算法
3 UDP协议:TCP UDP区别 UDP效率高适合Verilog实现
1 试验任务:网口调试助手与FPGA通信、FPGA先收后发
2 系统框图:功能框图、顶层原理图、模块端口及功能
顶层模块 eth_pc_loop简介
UDP模块udp:ip_send详细讲解源码
接收模块ip_receive、脉冲同步模块pulse_sync_pro 逐行解读源码
实验步骤、效果演示、网络调试助手、Wireshark
本机实测结果:PC先发后收,共5个字节
PC发送给FPGA如下
00 11 22 33 44 55(目的MAC,即FPGA-MAC) b4 b6 86 be 92 68(源MAC,即PC-MAC) 08 00(IP协议) 4(IPv4)5(首部长度) 00(一般服务)
00 21(总长度=33byte=IP 20+UDP 8+数据 5byte) bb 7c(标识) 00 00(允许分片,偏移=0) 40(生存时间64) 11(UDP=17=0x11) 00 00(首部校验和) c0 a8 0b 32(源IP地址 192.168.11.50) c0 a8 0b 7b(目的IP地址 192.168.11.123) 04 d2(源端口号1234) 04 d2(目的端口号1234) 00 0d(UDP长度13byte=UDP 8+数据 5byte) 98 1c(UDP校验和) 55 66 77 88 99(用户数据)
FPGA发送给PC如下
ff ff ff ff ff ff(目的MAC,广播) 00 11 22 33 44 55(源MAC,即FPGA-MAC) 08 00(IP协议)4(IPv4)5(首部长度) 00(一般服务)
00 21(总长度=33byte=IP 20+UDP 8+数据 5byte)01 78(标识) 40 00( 不分片,偏移=0) 40(生存时间64) 11(UDP=17=0x11) a1 56(首部校验和) c0 a8 0b 7b(源IP地址 192.168.11.123) c0 a8 0b 32(目的IP地址 192.168.11.50) 04 d2(源端口号1234) 04 d2 (目的端口号1234) 00 0d(UDP长度13byte=UDP 8+数据 5byte) 00 00(UDP校验和) 55 66 77 88 99 (用户数据)
66 77 88 99 66 77 88 99 66 77 88 99 66(为凑够18个字节而填充的13个字节)
1 试验任务:上位机-->FPGA-->SDRAM-->VGA显示
640*480
2 程序设计 :系统框图、顶层模块eth_sdram_vga源码解读、32位转16位模块解读
img2lcd、PC网络设置为巨型帧(突破1500字节的限制)、效果演示
1 试验任务:PC机-->FPGA-->SDRAM-->LCD 800*480
2 程序设计:框图、顶层模块介绍
尽管设置了巨型帧,但实际发的还是正常的帧。一共发了1500帧(视频中只发了不到100帧),每帧有效数据512字节。1500*512 = 768000 = 800*480*2。
91 基于FFT IP核的音频频谱仪试验
1 频谱简介:时域 频域、声音示例、FFT简介 共轭对称
2 试验任务:音频WM8978-->IP核-->RGB LCD
3 程序设计:系统框图、RTL
92 基于FFT IP核的音频频谱仪试验-代码详解
顶层模块
音频:改为16位字长、只用1通道
FFT相关模块(FFT FIFO FFT控制 取模):数据流接口 sop eop、1帧128个数据、计算原码、sqrt IP核
FFT核需要破解
93 基于FIR IP核的低通滤波器试验
1 FIR滤波器简介:有限冲激响应、阶数+1=抽头数
2 试验任务:将上1个FFT试验进行低通滤波
3 程序设计:系统框图、添加FIR IP核 配置、quartus_map.exe、音频滤波效果演示
正点原子手把手教你学FPGA-基于达芬奇开发板 A7_哔哩哔哩_bilibili
1 综合测试
演示效果
数码管、流水灯、按键、触摸键、摄像头、LCD、HDMI、网口、USB、串口测试 SD卡 EEPROM RTC 蜂鸣器
74 USB通信试验
1 USB协议讲解:高速串行、应用软件-->系统软件-->USB控制总线、7种域、3类包、三大事务
2 硬件设计
3 程序设计
75 USB通信试验
1 USB协议讲解:IN事务、OUT事务、SETUP事务;4种传输模式;2个位-->7个域-->3个包-->3个事务-->4个传输
2 硬件设计:FT232芯片--电源模块、EEPROM接口、底层协议解析、FPGA接口模块、复位模块;引脚说明;USB2FIFO;典型电路
3 程序设计
76 USB通信试验
1 USB协议讲解:
2 硬件设计:
3 程序设计:时序图、源码解读 很简单、ATK-FUSB演示
正点原子FPGA实战篇之以太网_哔哩哔哩_bilibili
72 以太网简介
1 以太网概述:速度、RJ45引脚
2 MII接口与时序:PHY芯片作用、MII引脚、时序
3 硬件设计:MII转为RJ45
73 以太网通信协议UDP
1 以太网数据格式:OSI底层4层、数据包、帧格式解析、帧间隙
2 IP协议:数据报格式解析、校验和算法
3 UDP协议:TCP UDP区别 UDP效率高适合Verilog实现
74 以太网通信试验
1 试验任务:网口调试助手与FPGA通信、FPGA先收后发
2 系统框图:功能框图、顶层原理图、模块端口及功能
3 程序设计:收发状态机
75 以太网通信试验(源码讲解)
顶层模块 eth_pc_loop简介
UDP模块udp:ip_send详细讲解源码
76 以太网通信试验(源码讲解)
接收模块ip_receive、脉冲同步模块pulse_sync_pro 逐行解读源码
实验步骤、效果演示、Wireshark
77 以太网传输图片
1 试验任务:上位机-->FPGA-->SDRAM-->VGA显示
2 程序设计 :系统框图、顶层模块eth_sdram_vga源码解读、32位转16位模块解读
img2lcd、PC网络设置为巨型帧、效果演示
78 以太网传输图片 LCD
1 试验任务:PC机-->FPGA-->SDRAM-->LCD
2 程序设计:框图、顶层模块介绍
外设连接、img2lcd、效果演示、wireshark
79 以太网传输视频OV7725
1 视频传输简介:自定义帧头
2 试验任务:OV7725摄像头-->FPGA-->上位机
3 程序设计:系统框图、顶层模块介绍、图像数据封装模块介绍、RawNetCapture
80 以太网传输视频OV5640
1 试验任务:OV5640-->FPGA-->上位机
2 程序设计:系统框图、顶层模块介绍、效果演示
81 以太网音频互传WM8978
1 试验任务:2块FPGA打电话
2 程序设计:系统框图、顶层模块介绍、音频缓存收发模块介绍、效果演示