差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
top190520 [2019/05/20 07:39] gongyu 创建 |
top190520 [2019/05/21 14:35] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
#### 今日推荐:RISC-V在FPGA系统上的移植和功能演示扩展板 | #### 今日推荐:RISC-V在FPGA系统上的移植和功能演示扩展板 | ||
+ | --- | ||
+ | |||
+ | |||
+ | 项目参与人员及分工: | ||
+ | |||
+ | * 谢凡 | ||
+ | * 复旦大学硕士研究生[[page_kaili.lu|卢凯丽]] | ||
+ | * 复旦大学博士后[[page_ziyu.guo|郭子钰]] | ||
+ | * 西交利物浦大学大4学生[[page_zhenbang.liu|刘振邦]] | ||
+ | |||
+ | {{ :ihhdnljbstse6zxeusmw9a.jpg |}} | ||
+ | |||
+ | {{:lkl笔记.docx|}} | ||
+ | |||
+ | ### 项目需求 | ||
+ | |||
+ | --- | ||
+ | |||
+ | #### 功能要求 | ||
+ | 本项目的内容是在STEP CYC10开发板上移植和仿真Reindeer RISC-V CPU软核。将软核移植到FPGA平台上既可以在FPGA里面灵活地设计底层电路,又能够利用像Arduino一样的开发环境快速地开发应用程序。熟悉已有的STEP MAX10 + FP51软核移植方案中,FLASH,RAM,OCD之间的通信机制。 | ||
+ | |||
+ | 1.在扩展板上增加FLASH模块:搭载RISC-V软核的Intel Cyclone 10 FPGA芯片没有包含DRAM和FLASH,目前板上已有SDRAM,还没有FLASH,项目的目标是实现FLASH中代码的存放和Boost功能。 | ||
+ | |||
+ | 2.基于STEP CYC10功能扩展板增加外设模块:a.使用一个距离传感器,实现当有人进入感应范围时,随着距离的变化,使得LED灯的亮度也随之发生变化;b.在LCD显示屏上显示一张图片。 | ||
+ | |||
+ | |||
+ | {{ :undefined:day3fangan.jpg?1500 |}} | ||
+ | |||
+ | #### 性能要求 | ||
+ | * 通过以上的功能来进行RISC-V系统在FPGA上的功能演示 | ||
+ | * 可以根据距离的远近控制LED灯的亮度 | ||
+ | * 可以在LCD屏上显示特定的图片 | ||
+ | * 熟悉Makefile for RISC-V | ||
+ | *(sketch for DRAM test) | ||
+ | |||
+ | |||
+ | #### 资源要求 | ||
+ | * 其他的LCD、LED、ADC、DAC、距离传感器均使用公司已有器件 | ||
+ | |||
+ | #### 进度要求 | ||
+ | |||
+ | * 第一周:熟悉STEP CYC10开发板相关内容;选择合适的SPI-FLASH以及相关的外设元器件;熟悉Reindeer RISC-V软核的Makefile; | ||
+ | * 第二周:学习PCB的设计以及FPGA相关知识;完成PCB板设计;阅读FP51 OCD、RAM、FLASH数据传输相关代码。 | ||
+ | * 第三周:学习Verilog语法以及System Verilog语法;编程设计FLASH-SDRAM接口,实现程序的存放和Boost功能;编写程序实现以上外设模块的相应功能。 | ||
+ | * 第四周:继续修改;项目总结。 | ||
+ | |||
+ | |||
+ | |||
+ | #### 成本要求 | ||
+ | |||
+ | * 新增FLASH价格:1.25元 | ||
+ | |||
+ | #### 其它要求 | ||
+ | |||
+ | ### 项目方案 | ||
+ | |||
+ | --- | ||
+ | |||
+ | #### 方案综述: | ||
+ | |||
+ | 目前RISC-V软核中嵌入了OCD (onchip debugger)模块,相当于MCU内部的硬件BOOT模块,通过外接串口同样可以实现串口一键下载。只不过程序下载到RAM区,掉电数据会丢失,如果想程序掉电不丢失还是需要将Arduino IDE 生成的.hex文件存放到到外部的FLASH中。 | ||
+ | |||
+ | 目前STEP CYC10开发板上已经在FPGA片外实现了SDRAM,片内的OCD模块将RISC-V的运行程序烧录到SDRAM,如前文所述,如果SDRAM下电,那么RISC-V的运行程序就丢失了。本项目的第一项任务是将RISV-V的代码经SDRAM存入外部FLASH,该任务实现之后,代码在板子下电之后也不会被擦除。 | ||
+ | |||
+ | 目前STEP CYC10开放板上的Boost是通过OCD模块实现,从串口读入SDRAM。本项目的第二项任务是设计FLASH Boost电路,该任务实现之后,SDRAM可以从FLASH Boost将代码送入软核运行。 | ||
+ | |||
+ | {{ :undefined:11.jpg?1500 |}} | ||
+ | |||
+ | 在完成代码下电不擦除的功能之后,继续完成扩展板上的功能设计,这是本项目的第三项任务。扩展板上的预置模块如上图所示,主要演示的内容包括:1. 根据距离传感器的反馈输出PWM信号调节LED灯的亮暗;2. 在LCD屏上显示图片。还预留了PWM+电机、ADC、DAC的位置。板子上的器件除了FLASH和ADC/DAC,均参考MiCOKit扩展版上的器件,具体尺寸参照器件文档(目前还没找到),需要注意的是LCD需要开槽将引脚引到背面。ADC/DAC的器件选用公司已有器件{{:undefined:micokit-samg55原理图及生产资料.zip|}}。FLASH器件的参数如下所示 | ||
+ | |||
+ | | 名称 | 型号 | 存储空间 | 电压 | 封装 | 大小 | 链接 | | ||
+ | | Flash | M25P32-VMW6TG | NA | 3.3V | 8 PIN SOP | 150mil body width | NA | | ||
+ | | 距离传感器 | APDS-9901 (micokit拓展板已有) | NA | 2.5V | LGA8 | 2.6 mm x 2.2 mm x 0.55 mm | NA | | ||
+ | | 小电机 | LX0610C(DIGIKey没有,micokit拓展板已有) | NA | 3V | 6 x 10mm | NA | NA | | ||
+ | | ADC | ADS930 | NA | 2.7-5.25V | SSOP | 0.209",5.30mm宽 | [1](www.ti.com.cn/zh-cn/data-converters/adc-circuit/products.html?pqs=paqs&familyid=390#p84=8;8&p157max=20.000015) | | ||
+ | | 运放 | AD8061 | NA | 3V | SC-74A,SOT-753 | 6 x 10mm | [2](www.mouser.com/datasheet/2/609/AD8061_8062_8063-1502303.pdf) | | ||
+ | |||
+ | |||
+ | |||
+ | {{ :b.jpg?800 |}} | ||
+ | |||
+ | {{ :undefined:c1.png?1200 |}} | ||
+ | |||
+ | #### 关键元器件: | ||
+ | * SPI-FLASH | ||
+ | * LCD显示屏 | ||
+ | |||
+ | #### 实施计划: | ||
+ | |||
+ | |||
+ | ### 项目答辩 | ||
+ | |||
+ | --- | ||
+ | #### 项目进展 | ||
+ | |||
+ | 1. 完成原理图和PCB | ||
+ | |||
+ | |||
+ | 目前的扩展板上包含有SPI FLASH、R2R电阻网络DAC+运放、运放+ADC、距离传感器、LCD屏幕、4个GPIO引脚、2个PWM引脚、2对UART引脚、2个3.3v电压引脚、3个接地引脚。 | ||
+ | | ||
+ | 版本1: | ||
+ | 正面图 {{:undefined:正面.png?500|}} | ||
+ | | ||
+ | 背面图 {{:undefined:背面.png?500|}} | ||
+ | |||
+ | 版本2: | ||
+ | 正面图 {{ :1557883004_1_.png?500 |}} | ||
+ | | ||
+ | 3D图 {{ :1557903367_1_.png?500 |}} | ||
+ | | ||
+ | |||
+ | |||
+ | 建议后续改进:扩展板上应该加上LED灯,方便程序调试。 | ||
+ | |||
+ | 2.BOM表:{{:riscv_final_board.xlsx|}} | ||
+ | |||
+ | 3.完成了DAC、ADC、距离传感器、FLASH的FPGA验证 | ||
+ | |||
+ | FLASH验证方案:对于FLASH内部的STATUS REGISTER进行读写操作。STATUS REGISTER中的bit4、bit3、bit2是SECTOR擦除保护控制位,可读可写。本项目选用的M25P32器件采用4线SPI,在时钟的上升沿从外部读取数据,在时钟的下降沿准备输出数据。控制命令采用“控制字+数据字节”的形式,共有13个控制命令。验证用到了WRITE ENABLE、WRITE STATUS REGISTER、READ STATUS REGISTER这三条命令。WRITE ENABLE是写使能。只有写使能执行之后才能执行WRITE STATUS REGISTER,该命令将STATUS REGISTER中的bit2、bit3、bit4置为100。READ STATUS REGISTER让FPGA读取STATUS REGISTER中的bit4、bit3、bit2的值,并将其接到LED的引脚输出。按键朝右边掰触发写,按键朝左掰触发读,最终LED[1:0]亮,LED[3]不亮,符合预期。 | ||
+ | |||
+ | {{:undefined:控制命令.png?500|}} | ||
+ | |||
+ | |||
+ | {{:undefined:flash验证.mp4|}} | ||
+ | |||
+ | 验证距离传感器(点击下图) | ||
+ | |||
+ | {{:undefined:juli.gif?300|}} | ||
+ | |||
+ | 4.了解了FPGA+软核(8051,RISC-V)+高级语言编程的操作流程 | ||
+ | 参考 | ||
+ | [[http://note.youdao.com/noteshare?id=4f082b50248c1e0f916f59e5a006297a|RISC-V软核-Reindeer_step调试笔记]] | ||
+ | |||
+ | 在软核wishbone总线上增加PWM外设,经过跑通流水灯完成验证。 | ||
+ | 在软核wishbone总线上增加LCD模块,完成刷屏输出。 | ||
+ | {{:4f1d740666c1b9b685430efa24056f81.mp4|}} | ||
+ | |||
+ | ...更新中... | ||
+ | |||
+ | |||
+ | #### 设计文件 | ||
+ | * PCB版本1:郭子钰:[[https://pan.baidu.com/s/1XnYNHuOvZgiECSqdgCkS5w |原理图+PCB 提取码5n4p]],{{:undefined:demo9_key_debounce.zip|flash验证代码}} | ||
+ | |||
+ | * PCB版本2:卢凯丽:原理图 {{:task3_5_13.pdf|}} | ||
+ | |||
+ | |||
+ | #### 遇到的问题和解决过程 | ||
+ | |||
+ | 1. 一开始对Flash片选引脚S#的功能不清楚,在原理图中直接接了低电平。但是S#其实是个控制信号,需要产生上升沿和下降沿,因此直接把它接到低电平是错误的,flash将无法工作。后来将芯片的引脚掰直,用杜邦线连接到GPIO2引脚,对齐进行电平控制。 | ||
+ | |||
+ | 2. 对RISC-V软核理解还不够深入。目前把工具链熟悉了,后面通过读代码,改代码来加深理解。 | ||
+ | |||
+ | ### 项目参考资料 | ||
+ | |||
+ | --- | ||
+ | |||
+ | #### 学习顺序 | ||
+ | - 熟悉Intel Cyclone FPGA、Quartus Prime软件(Lattice MXO2 FPGA、Diamond软件)及FPGA设计流程 | ||
+ | - 熟悉STEP CYC10开发板硬件资源 | ||
+ | - 操作一遍FPGA + Arduino + 软核这种开发方式,[[http://www.stepfpga.com/doc/reindeer_step|在小脚丫FPGA板上玩转开源农场(FARM)——FPGA+Arduino+RISC-V+Make]] | ||
+ | - 看RISC-V相关资料,了解Reindeer_Step软核内部结构,对比FP-1T 8051软核,[[http://www.stepfpga.com/doc/fpga_arduino_8051|基于FPGA使用Arduino编程的8051软核FP51-1T]],主要参考外设IP | ||
+ | - 尝试修改Reindeer_Step外设并测试 | ||
+ | - 尝试修改Reindeer Arduino IDE固件并测试 | ||
+ | - 分工: | ||
+ | * RISC-V的验证和仿真的改进 | ||
+ | * 设计基于STEP CYC10的功能扩展板以演示RISC-V系统 | ||
+ | * sketch for DRAM test | ||
+ | * Makefile for RISC-V | ||
+ | |||
+ | |||
+ | #### FPGA相关资源 | ||
+ | |||
+ | ##### 硬件平台 | ||
+ | - STEP FPGA核心板 | ||
+ | - STEP CYC10开发板 | ||
+ | |||
+ | ##### 参考文档 | ||
+ | |||
+ | * RISC-V | ||
+ | - Reindeer RISC-V CPU软核[[https://github.com/PulseRain/Reindeer|Reindeer]]及[[https://github.com/PulseRain/Reindeer_Step|Reindeer_Step]] | ||
+ | - RISC-V from Wikipedia (https://en.wikipedia.org/wiki/RISC-V) | ||
+ | - JEDEC from Wikipedia (https://en.wikipedia.org/wiki/JEDEC) | ||
+ | * Reindeer RISC-V CPU移植 | ||
+ | - [[http://www.stepfpga.com/doc/reindeer_step|在小脚丫FPGA板上玩转开源农场(FARM)——FPGA+Arduino+RISC-V+Make]] | ||
+ | - [[http://www.stepfpga.com/doc/fpga_arduino_8051|基于FPGA使用Arduino编程的8051软核FP51-1T]] | ||
+ | |||
+ | --- | ||
+ | 关于硬禾实战营研究生技能培训更多的实战项目信息,参见[[handsontraining|硬禾实战营研究生技能培训项目第一期]] |