基本信息
项目进度
案例
内容介绍
软件 & 硬件
元器件
超低功耗FPGA、5280 LUTs, 1024kbit SPRAM,1.2V、48-pin QFN (7 x 7 mm)
300mA的线性稳压器LDO,并有使能和自动放电的功能
ST的Arm Cortex-M0+微控制器,有64 KB Flash, 8KB RAM, 64MHz CPU, 2xUSART, timers, ADC, comm. I/F, 1.7-3.6V
Arm Cortex-M0,64kB flash, 12kB SRAM, HVQFN32 package
软件
Verilog HDL是一种硬件描述语言,用于设计和归档电子系统。
工具
Lattice的FPGA开发环境,支持Windows/Linux操作系统,支持ICE40系列器件的开发。
ST公司的图形化工具,可以非常方便地配置STM32微控制器和微处理器,以及相应的初始化C代码的生成。
物料清单
附件
-
iCE40 UltraPlus Family Data Sheet.pdf
ICE40 UP5K的数据手册(PDF)
-
iCE40UltraUltraPlusSG48PinMigration.xlsx
ICE40UP5K的管脚分配表格(XLS)
-
UP5K_MCU_V2.pdf
原理图
打样5块,下载成功 更新发布于 2020年11月12日
2020年11月11日拿到加工好的5块样板,
2020年11月12日焊接好一块,下载简单的测试程序,能够R、G、B三色灯同时以相同的频率闪动,得到一个白色的心跳灯效果。
未来几天要做的事情:
- 基于这个板子做RISC-V的移植测试,
- 基于网上的开源工具链,而不是Lattice的Radiant做几个简单的项目
- LED呼吸灯
- PWM波形输出测试
- 加上R、C构成的LPF测试DDS信号发生器的效果
由于时间关系,目前拿到的5块样板仅用于调试使用,需要改进的几个地方:
- 目前36根管脚中有两根IO31、IO32没有连接,是因为ICE40UP5K已经没有多余的管脚,正式的版本需要改为32管脚的核心模块,其中的IO29和IO30可以留在模块上用作其它功能(待定)、或将连接到LPC11U35上的UART的TX、RX管脚连接出来?带RISC-V软核的测试完成后确定
- 目前是2层板走线,性能未必理想,在正式的版本上可以使用4层板来走线,以提升性能,将所有的走线都在内层,Front层和Back层进行敷铜处理
- PCB加工的时候采用邮票孔工艺
改为40管脚的模块,补充4根信号,换4层板 更新发布于 2020年11月25日
基于刚做的一些测试,改进如下:
- 可以复用SPI Flash的SPI_SCK、SPI_SO两个管脚,完成FPGA代码的加载以后,这两个管脚就可以作为通用GPIO管脚;
- 将UART的TXD、RXD也连接到DIP40的管脚上,在不需要跟PC进行串行通信的场景下,这两个管脚可以做为通用IO管脚来使用;
这样就可以增加4根管脚,使用40Pin的模块可以尽可能跟原来的小脚丫FPGA兼容,只是还有两个管脚空着,正在考虑是将这两根管脚作为GND,还是将LPC11U35上的管脚引进来。
简单的布局调整,使用40Pin/15.4mm的模块
出于性能的考虑,在供电方面做出的改进:
- 原来使用的LDO为300mA的MIC5504-3.3和MI5501-1.2,都更换为支持500mA输出的国产器件,封装不变,都是SOT23-5。
- 在VCCIO管脚增添2个0.1uF的电容,并在VCCPLL管脚上补充一个10uF的去耦电容
为方便布线,且提升模块的性能,改用4层板设计(原来的2层快板设计用于基本连接功能的验证)
- 顶层 -- 放置SMD的元器件,未连线的部分用作GND Plane
- 中间1层 - 走线,在未走线的部分放置GND Plane
- 中间2层 - 走线,在为走线的部分放置+3.3V、+1.2V和+5V的电源Plane,这三块不重叠
- 底层 - GND Plane
仍存在的问题:
目前的RISC-V软核缺省使用的是内置的RC振荡器+PLL,由于RC振荡器的频率不精准会造成UART通信的误码,建议改为外部晶振作为时钟的方式。
整理了与FPGA设计和使用相关的一些技术资源 更新发布于 2020年11月25日
增加了一颗MCU,以方便各种项目中的控制功能 更新发布于 2020年12月07日
鉴于很多实际的项目中都会用到输入(按键)、输出(LCD/OLED显示)等,而这些输入/输出的操作、界面的控制乃至数据流的处理使用MCU会比较容易,且MCU的价格也很低,因此考虑增加一个STM32G031的MCU,此MCU价格低廉,QFN28管脚,在DIP40的封装上放上没有问题。在40个引脚中做了调整:
- 4个电源管脚不变 - 5V(Pin40)、3.3V(Pin1)、GND(PIN19)、GND(PIN20)
- PIN2 - Pin8、PIN33为MCU的数字GPIO
- PIN34 - P39为MCU的数字/模拟复用的GPIO,可以用作模拟信号的输入,比如ADC数据采集
- PIN9 - PIN17,PIN23-PIN32为FPGA的GPIO管脚,共18根数字GPIO
- PIN18、19、21、22为与板上四个LED等复用的IO管脚,如果FPGA的18根数字GPIO不够使用,则可以将板上的4个LED去掉,从而使用这4个管脚做为GPIO。
调整后的板子元器件布局如下图:
这次布线将采用4层走线。
完成MCU+FPGA的布局布线,四层板 更新发布于 2020年12月13日
今天完成了该板的布局和布线,可以投出去制板,四层板。
并计划做一个测试底板:
- MCU输入/输出:
- 128*64 OLED显示屏
- 光电旋转编码器
- 2个按键
- FPGA:
- 10位高速ADC采集
- 10位高速DAC变换
效果图如下:
为该核心板设计了一块评估板 更新发布于 2020年12月15日
设计了一块评估板:
- MCU部分:
- 128 * 64 OLED显示屏,SPI接口
- 旋转编码器
- 2个按键
- FPGA部分
- 10位/50Msps 高速ADC模块
- 10位/125Msps 高速DAC模块
本评估板也适用于小脚丫FPGA核心模块,采用全FPGA逻辑来实现所有的功能
测试新板子,发现了一个G0管脚的硬件限制 更新发布于 2020年12月25日
在测试ADC + FPGA + DAC环路的时候,发现启动内部的PLL,接在Pin35管脚的AD_Data(6)在布局布线的时候会出现错误,不能用作输入管脚使用,可以用做输出。咨询了Lattice的FAE,说这是硬件底层的一个限制,在数据手册中也没有标记清楚,因此建议避开Global的管脚。由于UP5K管脚本来就少,如果不用这些管脚,将来的设计会受很大局限,因此我对其它的管脚也进行了测试,发现只有Pin35这一个用作G0 - 最重要的全局信号输入的管脚有此限制,因此把时钟管脚由原来的Pin44转移到Pin35,释放出Pin44来用做GPIO管脚,这样就没有问题了。
在后面的测试中,我将DAC和ADC的位置做了呼唤,发现是可以工作的,原来的Pin35脚在DAC中用作了输出信号,所以避开了这个问题,可以进行ADC + FPGA + DAC的测试了。
选用的ADC为标称50Msps/10位的高速并行ADC,DAC为125Msps/10为的高速并行DAC,而ICE40UP5K标称可以工作在48MHz,因此通过内部的PLL产生了48MHz的时钟用作ADC和DAC的CLK。结果见下图:
使用48Msps采集口袋仪器送出的2MHz的正弦波信号,再通过DAC输出的2MHz的模拟信号波形,可以看出波形还是不错的。
48Msps的转换率采样5MHz的正弦波模拟信号,再通过DAC输出的信号波形,有一定的失真,一方面是采样率比较低导致的(一个模拟信号周期只有不到10个点),同时也可能是采用时钟的相位问题,需要做进一步分析
试着把转换率提升到60Msps以后对2MHz模拟信号的采样结果,性能反而下降了,有可能是时钟的问题,也有可能是高速ADC的性能限制
使用内部RC振荡器做时钟,设置为48MHz时ADC采集和DAC输出的波形,效果可以和晶振时钟相当
新板测试 - G031的下载和FPGA的工作 更新发布于 2021年01月05日
今天基于新版本的模块做了简单的测试
STM32G031可以通过UART进行下载配置,并且通过点灯程序进行了测试,如下图
另外将FPGA的逻辑配置好,通过10位ADC采集外部的信号,通过DAC输出信号,结果如下:
评估板升级,支持全国大学生电子设计竞赛综合训练使用 更新发布于 2021年03月25日
基于前期评估板的测试,进行了又一次升级,支持全国大学生电子设计竞赛的备赛训练。
可以训练的技能:
- 用OLED显示信息,并掌握SPI总线以及显示屏的驱动原理
- 控制信息的按键输入以及按键消抖的软件/FPGA逻辑处理
- 旋转编码器的输入以及译码 - MCU软件实现/FPGA逻辑实现
- ADC高速数据采集以及缓存处理
- ADC低速数据采集以及数据处理、MCU的响应
- Sigma Delta ADC的实现(通过高速比较器)以及数字滤波器的使用
- 数字信号处理 - FFT以及数字滤波器,通过FPGA内部逻辑/乘法器实现,以及通过MCU的程序实现
- 频率计/计数器设计 - FPGA逻辑实现,以及MCU的定时器/代码实现方法
- 高速DAC以及DDS信号发生器的构成及参数控制
- 通过PWM构成DAC实现DDS 任意波形产生
- 姿态传感器的数据采集、处理以及信息显示
- UART的数据传输
UPDuino 3.0 - 基于ICE40UP5K、支持RISC-V
此为TinyVision.Ai制作的一款经典的ICE40UP5K的开发板,连接一块带摄像头的扩展板就可以支持视觉识别方面的应用。
手势识别
Implements a low power AI based system to detect hand gestures using an IR image sensor
人员侦测
根据客户要求可检测任何目标——该参考设计通过CMOS图像传感器持续感知附近是否有人在,并通过板上LED灯的闪烁得知检测结果
卷积神经网络(CNN)轻量化加速器IP 实现毫瓦级机器学习推理
利用FPGA的并行处理能力实现轻量化CNN,包括二值化的BNN版本。该IP能让您在莱迪思iCE40 UltraPlus FPGA上实现CNN,功耗仅为毫瓦级。该IP使用iCE40 UltraPlus器件的片上DSP资源来实现CNN。加速引擎使用了11个嵌入式块存储器作为(EBR)工作存储器。用户可选择EBR或更大的单端口存储器(SPRAM)来存储引擎所使用的权重和指令。
运行开源RISC V、基于Intel Cyclone 10的FPGA开发平台
这是一款基于Intel Cyclone 10 FPGA的平台开发的RISC V开源软核的项目,清华大学出版社并为之出版了教程。其RISC V软核和我们在ICE40UP5K上的都为同一作者构建并开源。
关键词检测——莱迪思sensAI
可客制化用以检测任意关键词 - 该参考设计不断通过数字MEMS麦克风连续搜索关键短语发音。通过使用深度学习框架(如Caffe、Tensorflow或Keras)更新训练数据集,设计工程师们可以向系统添加指令词唤醒功能。
单线聚合
在单个线路上聚合多个接口, 单线速率高达7.5 Mbps, 协议稳定可靠,支持错误检测和重试功能
二值神经网络(BNN)加速器IP
可以利用FPGA的并行处理能力实现深度学习,实现毫瓦级功耗的二值神经网络
Lattice官网上整理的一些用ICE40UP5K的开发板
有10款来自Lattice官方以及第三方的基于UP5K制作的开发套件
人脸检测
使用实时永久在线的图像传感器实现人工智能,工作功耗不足1mW, 帧率和功耗可根据系统的功耗要求进行调整
8:1麦克风聚合
聚合8个PDM麦克风并通过I2S或SPI连接到处理器, 可在智能音箱中使用多个麦克风实现波束形成
FEMTORV32 / FEMTOSOC: a minimalistic RISC-V CPU
不到1000行Verilog代码的RISC-V软核设计,使用低于1280LUTS的资源
教程 - 基于FPGA与RISC-V的嵌入式系统设计
2019年RISC-V官方CPU设计大赛冠军、FPGA与嵌入式系统开发专家撰写、清华大学出版社出版。包含多个RISC-V芯片设计实战项目及源代码,详细讲解RISC-V Soft CPU芯片设计的步骤以及如何在主流的FPGA架构的使用和移植。
团队介绍
-
硬禾工程师团队专注于基于FPGA和嵌入式系统学习平台的开发和生态系统的建设,在过去5年里成功推出的小脚丫FPGA学习平台被全国上百所高校采用于数字电路教学实践中,并一直积极推动开源、免费PCB设计工具KiCad在高校学生及硬件工程师中的应用。