FPGA niosII 视频笔记--小梅

我先看的正点原子nios视频笔记,后看的小梅哥,这篇笔记就不怎么记太基础的了

讲课口头禅、音量忽大忽小、语速忽快忽慢也让人头疼,但是讲的比较细致、透彻,还讲了很多正点原子没讲过的东西,值得一听,有收获,很多时候看视频标题没兴趣看,看的过程中发现有意外收获。多看看他的视频,加深认识,调试时可以少走很多弯路。

​​​​​​P1 (SOPC)SOPC技术介绍

IP硬核:外设固定 无法修改,增加成本和功耗、依赖具体FPGA器件。性能较高。

IP软核:低成本、灵活裁剪、可集成多个处理器、支持TCP/IP。

FPGA niosII 视频笔记--小梅_第1张图片

基于ASIC与FPGA区别

FPGA niosII 视频笔记--小梅_第2张图片

quartus15.0以上版本,有nios II GEN2

FPGA niosII 视频笔记--小梅_第3张图片

nios内核类型

FPGA niosII 视频笔记--小梅_第4张图片

FPGA niosII 视频笔记--小梅_第5张图片

32位对应4G寻址空间。最高位用于指令缓存屏蔽位、所以只有2G寻址空间

FPGA niosII 视频笔记--小梅_第6张图片

FPGA大大简化设计

FPGA niosII 视频笔记--小梅_第7张图片

qsys配置生成的是Verilog代码。

软件工具及开发流程

FPGA niosII 视频笔记--小梅_第8张图片

软件实现容易修改、增删、差错、不增加逻辑资源占用,但性能较低。一般优先使用软件实现。

P2 (SOPC)SOPC开发流程

FPGA niosII 视频笔记--小梅_第9张图片

led闪烁系统框图

FPGA niosII 视频笔记--小梅_第10张图片

软核一般不进行仿真

如果在nios跑linux,nios设置需要include MMU。使用SDRAM时为提高速度,利用片上ram实现cache。注意有cache时不要使用指针操作外设,容易出问题。

on-chip ROM,不要勾选 Enable non-default initialization file,否则niosIDE报错

FPGA niosII 视频笔记--小梅_第11张图片

统一编址

FPGA niosII 视频笔记--小梅_第12张图片FPGA niosII 视频笔记--小梅_第13张图片

注意:quartus工程添加*.qsys文件后再编译。

FPGA niosII 视频笔记--小梅_第14张图片

添加时钟的时序约束

注意去掉优化,否则LED不闪烁

FPGA niosII 视频笔记--小梅_第15张图片

P3 (SOPC)SOPC开发流程常见问题分析

quartus正常破解qsys才能generate

FPGA niosII 视频笔记--小梅_第16张图片

bsp包含硬件信息

system.h中的SYSID_ID是十进制,qsys中设置的是16进制

将elf转化为hex初始化文件

工程右键-->Make Targets-->Build-->mem_init_generate-->build 。quartus工程添加生成的qip(就是hex的路径)文件。重新编译,下载sof(同时包含软硬件)led闪烁。烧写jic即可固化软硬件。

FPGA niosII 视频笔记--小梅_第17张图片FPGA niosII 视频笔记--小梅_第18张图片

EPCS实际是SPI接口的FLASH,几块钱。 

Flash Loader实际上也是一段代码,实现将jtag传过来的配置数据写入epcs

FPGA niosII 视频笔记--小梅_第19张图片

P4 (SOPC)PIO寄存器分析与使用

PIO设置修改。Bidir只有1个信号引出,可用于IIC的信号。InOut有2个信号引出,一般用于FPGA内部逻辑。

FPGA niosII 视频笔记--小梅_第20张图片

直接双击Assembler可避免时序分析,节约时间。

查看pio源码发现双向IO口默认是输入

FPGA niosII 视频笔记--小梅_第21张图片FPGA niosII 视频笔记--小梅_第22张图片

视频把PIO核8页说明全部简单讲了1遍

FPGA niosII 视频笔记--小梅_第23张图片

作业

FPGA niosII 视频笔记--小梅_第24张图片

注意时钟输入引脚可以作为按键输入,但不可以作为输出或三态引脚

FPGA niosII 视频笔记--小梅_第25张图片

P5 (SOPC)PIO寄存器操作实例

完成上个视频作业

键盘无上拉电阻,需要在quartus中设置上拉电阻

FPGA niosII 视频笔记--小梅_第26张图片

字体从默认的西欧改为中欧

FPGA niosII 视频笔记--小梅_第27张图片

查询PIO数据方式:设置PIO方向、关中断、读PIO

FPGA niosII 视频笔记--小梅_第28张图片

查询PIO边沿捕获寄存器方式:设置PIO方向、关中断、清捕获位、读捕获寄存器、清捕获位

FPGA niosII 视频笔记--小梅_第29张图片

P6 (SOPC)工程拷贝所需解决的问题_置位清零寄存器的使用

拷贝的工程若不做任何修改,直接改c文件,更改的实际是原路径下的c文件

FPGA niosII 视频笔记--小梅_第30张图片

更改路径后,先删除工程(非删除文件),后右键 import-->general-->existing projects into workspace ,修改 settings.bsp 的两个路径。

2个常用操作:右键工程 Refresh 或 Index-->Freshen ALL Files

位设置与位清零

​​​​​​P7 (SOPC)PIO与NIOS II中断使用

FPGA niosII 视频笔记--小梅_第31张图片

#include sys/alt_irq.h

IOWR_ALTERA_AVALON_PIO_IRQ_MASK 打开中断

alt_ic_isr_register注册中断(ic指器件)

FPGA niosII 视频笔记--小梅_第32张图片

 FPGA niosII 视频笔记--小梅_第33张图片 

 使用 Outline当目录用也不错

FPGA niosII 视频笔记--小梅_第34张图片

查看工程与bsp是否关联,如下图

FPGA niosII 视频笔记--小梅_第35张图片

debug时需要关掉优化

FPGA niosII 视频笔记--小梅_第36张图片

若debug时有gdb进程在运行(debug时异常退出),会导致debug异常,需要去任务管理器中关掉gdb。 

FPGA niosII 视频笔记--小梅_第37张图片

  

P8 (SOPC)UART串口原理与应用

只保留.v文件和.sys文件共2个文件,新建quartus工程,添加2个文件

Altera 16550 Compatible UART是收费IP,功能较全

JTAG UART示意图如下,nios写入JTAG 的FIFO(等待PC通过blaster主动读FIFO),若FIFO满则无法写入,nios等待、挂起、软件死机

FPGA niosII 视频笔记--小梅_第38张图片

UART(RS-232 Serial Port)性能最弱,简单可靠,本视频使用该UART核。

若端口较多,可从IP核源码中复制到用户工程源文件,如下图 

FPGA niosII 视频笔记--小梅_第39张图片

在引脚分配窗口也可以直接复制Location,另外优先使用3.3-V LVTTL

FPGA niosII 视频笔记--小梅_第40张图片

 新建hello world small,例程代码无需修改,直接从串口打印字符串,代码如下

FPGA niosII 视频笔记--小梅_第41张图片

alt_main函数调用alt_sys_init调用串口初始化代码,若在Drivers中取消Enable,则无对应设备的初始化代码,如下图

FPGA niosII 视频笔记--小梅_第42张图片

 多个串口时选择某个串口作为标准输入、输出、错误设备,如下

FPGA niosII 视频笔记--小梅_第43张图片

花了大量时间看文档UART相关内容

FPGA niosII 视频笔记--小梅_第44张图片

注意:若用户直接操作寄存器收发数据,一定记得关掉bsp的驱动,否则会导致bsp与用户抢数据。

P9 (SOPC)查询方式编写串口发送代码

关bsp的uart驱动

C代码:关uart中断、清status、读空rxdata、设波特率(使用系统频率宏定义),txdata为空则发送。

FPGA niosII 视频笔记--小梅_第45张图片

用户工程优化选项为size,导致边沿捕获读取不到数值,始终为0。 

用搜索的方式改代码字体,快多了

FPGA niosII 视频笔记--小梅_第46张图片

编译完看不到过程中的Console信息,选中用户工程就能看到了

P10 (SOPC)查询方式实现串口回环_中断方式实现串口接收数据

回环发送代码如下

FPGA niosII 视频笔记--小梅_第47张图片

中断接收代码如下

FPGA niosII 视频笔记--小梅_第48张图片

调试时在memory中查看全局变量,Monitors中点击+,输入全局变量名

P11 (SOPC)串口中断方式实现数据收发

新建用户工程,使用现有bsp(允许多个用户工程使用同一个bsp)工程

FPGA niosII 视频笔记--小梅_第49张图片

FPGA niosII 视频笔记--小梅_第50张图片

新的用户工程只复制1个c文件即可编译,编译前后如下图 

FPGA niosII 视频笔记--小梅_第51张图片FPGA niosII 视频笔记--小梅_第52张图片

UART收发中断使用同1个函数,如下

FPGA niosII 视频笔记--小梅_第53张图片FPGA niosII 视频笔记--小梅_第54张图片FPGA niosII 视频笔记--小梅_第55张图片

P12 (SOPC)SDRAM_与系统驱动函数

选中工程,alt+enter快速打开属性设置

根据开发板硬件设置SDRAM参数,timing使用默认值,只修改位宽+column

FPGA niosII 视频笔记--小梅_第56张图片FPGA niosII 视频笔记--小梅_第57张图片

添加Avalon ALTPLL为SDRAM提供时钟,-90°相移

PLL取代系统时钟为所有IP核提供时钟,

FPGA niosII 视频笔记--小梅_第58张图片

sdram引脚默认2.5V,可直接复制粘贴成3.3V

FPGA niosII 视频笔记--小梅_第59张图片

引脚分配也可以直接从excel中复制

引脚分配也可以通过预先写好的tcl文件一键分配

从ram改到sdram后需要刷新,否则sdram实际未使用,刷新后interrupt_stack_memory_region_name随之改变

FPGA niosII 视频笔记--小梅_第60张图片FPGA niosII 视频笔记--小梅_第61张图片

P13 (SOPC)LCD1602与NIOS系统常见问题分析

添加qsys核(背光需要自己写代码),printf可直接打印在屏幕上

FPGA niosII 视频笔记--小梅_第62张图片

添加时序约束

没加约束,clk[0]只能跑到68.79MHz,设计100M,可能无法下载 

FPGA niosII 视频笔记--小梅_第63张图片

sdc约束文件添加到工程中,指导布局布线,达到设计要求。

添加约束后,频率几乎翻番,满足要求

FPGA niosII 视频笔记--小梅_第64张图片

P14 (SOPC)定时器与操作系统应用

3个任务的3种实现方式

FPGA niosII 视频笔记--小梅_第65张图片

操作系统必须有定时器

定时时间太短,切换太快,切换相关资源消耗较高。视频中为10ms。

FPGA niosII 视频笔记--小梅_第66张图片

视频中有3个定时器,1个用于操作系统+1个用于通用定时器+1个看门狗 。看门狗一般固定时间、不可停止,否则有warning,看门狗设置如下

FPGA niosII 视频笔记--小梅_第67张图片

 见下图,看门狗复位除clk外所有IP核

FPGA niosII 视频笔记--小梅_第68张图片

若使用同步复位,添加reset核。即看门狗复位reset核,reset核复位其他IP核(含看门狗),连接如下

FPGA niosII 视频笔记--小梅_第69张图片

若不了解IP核,可查阅文档Embedded Peripherals IP User Guide

视频中printf打印到串口,而不是通过jtag打印到niosIDE   

若不想bsp自动驱动某些外设,可以关掉,如下图

FPGA niosII 视频笔记--小梅_第70张图片

若添加了任意定时器,但是没有使用操作系统,也没有使用定时器,建议关掉,否则可能出现各种奇葩问题

FPGA niosII 视频笔记--小梅_第71张图片

使用uCos,必须注意上图系统时钟设置正确。

P15 (SOPC)操作系统多任务编写_看门狗使用

实现上个视频提到的多任务

LED IO设为输出,关IO中断

使用全局变量实现任务间通信

任务1 2代码如下

FPGA niosII 视频笔记--小梅_第72张图片

任务3,按键按下则改变led闪烁方式,led++

FPGA niosII 视频笔记--小梅_第73张图片

按键优先级调整为最高,另外led闪烁和串口打印任务优先级无所谓。

任务4,启动看门狗、喂狗

FPGA niosII 视频笔记--小梅_第74张图片

 修改printf输出设备,打印到lcd屏幕

FPGA niosII 视频笔记--小梅_第75张图片FPGA niosII 视频笔记--小梅_第76张图片

P16  (SOPC)固化软硬件代码到EPCS存储器中以及常见问题

FPGA niosII 视频笔记--小梅_第77张图片

 Epcs中断是为了作为通用存储器时提高读写速度

分配引脚也可以手动输入,而不是必须要综合1遍

更换主内存后注意执行2次restore defaults

 复位地址为epcs,却想用ram调试,需取消allow_code_at_reset、enable_alt_load,但烧写时必须勾选(在13.1实测,勾选则无法调试。不勾选即可在线调试也可固化)

FPGA niosII 视频笔记--小梅_第78张图片

使用sh tcl脚本生成hex jic实现固化:1、eclipse中运行sh脚本;2、quartus中运行tcl脚本;3、烧写jic

FPGA niosII 视频笔记--小梅_第79张图片

FPGA niosII 视频笔记--小梅_第80张图片

  FPGA niosII 视频笔记--小梅_第81张图片

P17 (SOPC)FlashProgramer烧写EPCS遇到的问题与解决方案

开发板使用的通用SPIFLASH W25Q16(ID=EF4015),非altera官方。

FPGA niosII 视频笔记--小梅_第82张图片FPGA niosII 视频笔记--小梅_第83张图片FPGA niosII 视频笔记--小梅_第84张图片

官方EPCS16 ID

FPGA niosII 视频笔记--小梅_第85张图片

保存nios烧写配置文件,方便下次烧写 

FPGA niosII 视频笔记--小梅_第86张图片

解决No EPCS layout data --- looking for section [EPCS-xxxxx]_subkiller的博客-CSDN博客

FPGA niosII 视频笔记--小梅_第87张图片

P18 (SOPC)自定义IP的概念与Verilog实现

SOC的核心是软硬件协同

nios采集AD数据低效率的2个方案如下:1、使用PIO模拟SPI时序读取ADC;2、使用PIO控制Verilog写的ADC驱动。

FPGA niosII 视频笔记--小梅_第88张图片

查看PIO核对应的.c .h .v文件,根据.v文件理解avalon总线时序,时钟 复位 片选 地址 写请求 写数据 

FPGA niosII 视频笔记--小梅_第89张图片

quartus自动扫描工程目录下名为IP的文件夹

数据寄存器一般放在地址0

FPGA niosII 视频笔记--小梅_第90张图片FPGA niosII 视频笔记--小梅_第91张图片

P19 (SOPC)自定义IP(ADC驱动)的封装

自定义IP核操作

FPGA niosII 视频笔记--小梅_第92张图片

FPGA niosII 视频笔记--小梅_第93张图片

小写字母命名比较规范,基本自动识别成功。大写字母全部识别错误,手动修改后如下图

FPGA niosII 视频笔记--小梅_第94张图片

指定复位信号、remove interfaces with no signals、指定中断信号绑定as总线

FPGA niosII 视频笔记--小梅_第95张图片

修改tcl文件所在路径为.v文件路径,修改tcl文件中的.v文件路径,删除选中部分后即为相对路径(tcl文件与v文件在同一路径下)。直接复制文件夹即可复制IP

FPGA niosII 视频笔记--小梅_第96张图片FPGA niosII 视频笔记--小梅_第97张图片

P20 (SOPC)自定义IP的NIOS软件设计

注意nios中地址以字节为单位,nios中地址偏移是ADC IP核地址(以16bit为单位)的2倍

FPGA niosII 视频笔记--小梅_第98张图片

上述代码有误,将按位与~替换为逻辑非!即可在串口打印AD采样值

P21 (SOPC)自定义IP逻辑设计框架详解

FPGA niosII 视频笔记--小梅_第99张图片

FPGA niosII 视频笔记--小梅_第100张图片FPGA niosII 视频笔记--小梅_第101张图片

FPGA niosII 视频笔记--小梅_第102张图片

关于chipselect的作用说明:如下图,PIO只连接低4位地址线,若nios访问UART或ADC,若没有chipselect,PIO会误以为被访问。

FPGA niosII 视频笔记--小梅_第103张图片

P22 (SOPC)自定义IP封装基本原理

封装IP的操作步骤总结

FPGA niosII 视频笔记--小梅_第104张图片 

P23 (SOPC)自定义IP的软件代码编写(地址对齐详解)

__builtin_stwio:内建汇编指令,其中w指word 32bit

SYSTEM_BUS_WIDTH为32

FPGA niosII 视频笔记--小梅_第105张图片

有下图中的一句话,IP按照静态地址对齐,可以使用IORD IOWR。若没有NATIVE这句话,默认动态地址对齐,

FPGA niosII 视频笔记--小梅_第106张图片

更改为静态地址对齐后,软件代码如下(注意地址偏移)。图中有误,0x0a应改为5

FPGA niosII 视频笔记--小梅_第107张图片

下图路径为系统IP源文件保存位置

FPGA niosII 视频笔记--小梅_第108张图片

地址对齐总结

FPGA niosII 视频笔记--小梅_第109张图片

P24 (SOPC)DAC驱动IP封装与配置参数的使用

上节复习

FPGA niosII 视频笔记--小梅_第110张图片

parameter生成IP(必须在顶层文件中)时会展示在GUI界面上,localparam不会。 

FPGA niosII 视频笔记--小梅_第111张图片FPGA niosII 视频笔记--小梅_第112张图片

DAC寄存器

FPGA niosII 视频笔记--小梅_第113张图片

C语言操作时注意 

 FPGA niosII 视频笔记--小梅_第114张图片

 

P25 (SOPC)SOPC软件代码编写规范

底层驱动独立为单独函数,如dac_init()。

为提高可移植性,建议不使用alt_types.h,使用跨平台通用的C99标准的stdint.h中定义的数据类型

自定义IP核建议写寄存器说明文档,编写类似altera_avalon_pio_regs.h的头文件

FPGA niosII 视频笔记--小梅_第115张图片FPGA niosII 视频笔记--小梅_第116张图片

 参考bsp,新建文件夹.c .h,按功能区分文件,而不是都在mian.c一个文件中

FPGA niosII 视频笔记--小梅_第117张图片

注意包含新建的h文件路径

FPGA niosII 视频笔记--小梅_第118张图片

有时还需要下述操作(修改的文件在硬盘,软件运行在内存,Freshen ALL Files保持硬盘和内存一致

FPGA niosII 视频笔记--小梅_第119张图片


P26 (SOPC)Avalon MM Master共享SDRAM存储器

需求:nios占用SDRAM,显示器也想主动从SDRAM读取数据;摄像头主动将数据写入SDRAM,等待nios或其他外设读取;

FPGA niosII 视频笔记--小梅_第120张图片

讲文档《Avalon-MM Master Templates》及相关文件

FPGA niosII 视频笔记--小梅_第121张图片

FPGA niosII 视频笔记--小梅_第122张图片FPGA niosII 视频笔记--小梅_第123张图片

将文件拷贝到相应路径,qsys出现 master_template IP核

FPGA niosII 视频笔记--小梅_第124张图片

master_template 的avalon_master只连接到SDRAM。因为用户接口同步于内部的clk,需要将clk引出。但clk要么内部连线,要么引出到外部,不可同时使用,借助Clock Bridge核实现。因为原fifo为sc同步fifo,不方便使用,小梅哥改写为dc异步fifo,使用用户提供的时钟,注意控制端口仍然是同步的。

FPGA niosII 视频笔记--小梅_第125张图片FPGA niosII 视频笔记--小梅_第126张图片

FPGA niosII 视频笔记--小梅_第127张图片

使用ucgui库实现图形界面,液晶屏直接读SDRAM,大概35帧显示波形。相当于SDRAM既做nios的内存,也做屏幕的显存。

P27 (SOPC)Avalon主机共享读取SDRAM设计与验证

FPGA niosII 视频笔记--小梅_第128张图片FPGA niosII 视频笔记--小梅_第129张图片

码农只需要关心3控制逻辑、4fifo

高速数据传输一般都需要avalon mm master。

FPGA niosII 视频笔记--小梅_第130张图片

位宽与SDRAM保持一致;SDRAM地址宽度23,选择32也能用;SDRAM不支持突发;M9K只要用1点,整体都不能用作其他用处,干脆直接用完,fifo深度512(512*16=8192bit=M9K)。若使用logic,深度别太大;

FPGA niosII 视频笔记--小梅_第131张图片

建议将SDRAM地址固定为0开始,方便用户逻辑访问。

非固定地址、从SDRAM中间位置开始访问、读4096*2字节(与C代码4096*16bits保持一致)。

FPGA niosII 视频笔记--小梅_第132张图片

调试时使用下述工具。另外注意控制端口仍然是同步的

FPGA niosII 视频笔记--小梅_第133张图片 FPGA niosII 视频笔记--小梅_第134张图片

注意:control_done指全部4098*2个字节读完,user_read_buffer才是用户读数据需要考虑的,只要有效就可以读数据。

P28 (SOPC)Avalon主机共享写SDRAM设计与验证

软件C代码和硬件逻辑分工如下

FPGA niosII 视频笔记--小梅_第135张图片

verilog实现udp协议数据带宽高,但不适用于广域网、路由器传输。下述方案OV7670+W5500实现TCP/IP协议,也方便转换为其他协议,但带宽相对较低。

master写IP也将fifo 改写为双时钟,需要修改下图后4个文件

FPGA niosII 视频笔记--小梅_第136张图片

master核配置类似读master配置

FPGA niosII 视频笔记--小梅_第137张图片

FPGA niosII 视频笔记--小梅_第138张图片

quartus中端口

FPGA niosII 视频笔记--小梅_第139张图片

P29 (SOPC)基于Avalon主机写SDRAM的示例展示

使用第3方IIC IP核

FPGA niosII 视频笔记--小梅_第140张图片

硬件上需要通信扩展(貌似板级通过50MSPI传输)板卡(ETH CAN 485)

FPGA niosII 视频笔记--小梅_第141张图片FPGA niosII 视频笔记--小梅_第142张图片

SPI IP核 连线及配置

FPGA niosII 视频笔记--小梅_第143张图片FPGA niosII 视频笔记--小梅_第144张图片

最终效果,帧率只有0.7,非常卡,有很大优化空间

FPGA niosII 视频笔记--小梅_第145张图片

P30 (SOPC)基于SGDMA的VGA图像显示系统设计

SGDMA比master更加复杂,资源占用很多,效率比avalon MM接口的DMA更高,可支持千兆以太网

FPGA niosII 视频笔记--小梅_第146张图片

Memory to Memory使用avalon MM总线,Memory to Stream数据输出方为avalon ST,Stream to Memory数据输入方为avalon ST。

FPGA niosII 视频笔记--小梅_第147张图片

视频示例的数据流

FPGA niosII 视频笔记--小梅_第148张图片

VGA_SINK为第三方开源IP,友晶科技提供。

FPGA niosII 视频笔记--小梅_第149张图片

FPGA niosII 视频笔记--小梅_第150张图片

latency指该信号需要打几拍。很多信号小梅哥也没有彻底明白。

FPGA niosII 视频笔记--小梅_第151张图片

双时钟fifo设置,注意为ST接口,非MM接口

IP核连接如下

FPGA niosII 视频笔记--小梅_第152张图片

VGA_SINK模块默认设置即可

FPGA niosII 视频笔记--小梅_第153张图片FPGA niosII 视频笔记--小梅_第154张图片

IP连线完成

FPGA niosII 视频笔记--小梅_第155张图片

需要增加硬件板卡

FPGA niosII 视频笔记--小梅_第156张图片

右键代码注释

FPGA niosII 视频笔记--小梅_第157张图片

显示图片

FPGA niosII 视频笔记--小梅_第158张图片FPGA niosII 视频笔记--小梅_第159张图片

 上图颜色变化较大时,花纹明显,修改VGA_CLK为反相后显示正常。

你可能感兴趣的:(FPGA,uCOS,verilog,fpga开发,SOPC)