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

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

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

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

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

基于ASIC与FPGA区别

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

nios内核类型

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

FPGA大大简化设计

qsys配置生成的是Verilog代码。

软件工具及开发流程

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

P2 (SOPC)SOPC开发流程

led闪烁系统框图

软核一般不进行仿真

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

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

统一编址

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

添加时钟的时序约束

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

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

quartus正常破解qsys才能generate

bsp包含硬件信息

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

将elf转化为hex初始化文件

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

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

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

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

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

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

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

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

作业

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

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

完成上个视频作业

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

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

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

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

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

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

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

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

位设置与位清零

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

#include sys/alt_irq.h

IOWR_ALTERA_AVALON_PIO_IRQ_MASK 打开中断

alt_ic_isr_register注册中断(ic指器件)

使用 Outline当目录用也不错

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

debug时需要关掉优化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

关bsp的uart驱动

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

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

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

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

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

回环发送代码如下

中断接收代码如下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

添加时序约束

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

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

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

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

3个任务的3种实现方式

操作系统必须有定时器

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

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

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

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

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

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

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

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

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

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

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

LED IO设为输出,关IO中断

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

任务1 2代码如下

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

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

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

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

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

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

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

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

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

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

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

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

官方EPCS16 ID

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

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

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

SOC的核心是软硬件协同

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

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

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

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

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

自定义IP核操作

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

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

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

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

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

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

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

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

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

封装IP的操作步骤总结

 

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

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

SYSTEM_BUS_WIDTH为32

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

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

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

地址对齐总结

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

上节复习

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

DAC寄存器

C语言操作时注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

master核配置类似读master配置

quartus中端口

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

使用第3方IIC IP核

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

SPI IP核 连线及配置

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

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

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

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

视频示例的数据流

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

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

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

IP核连接如下

VGA_SINK模块默认设置即可

IP连线完成

需要增加硬件板卡

右键代码注释

显示图片

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

FPGA niosII 视频笔记--小梅相关推荐

  1. FPGA niosII 视频笔记

    工作需要使用FPGA驱动的CAN总线,一番搜索发现正点原子开发板有例程.了解之后知道是FPGA内部软核IP,基于qsys实现 ,就看完了相关视频. nios更进一步可以看FPGA niosII 视频笔 ...

  2. FPGA Verilog视频笔记

    最近抽空看了不少教学视频,简单整理一下 USB.以太网UDP通信虽然复杂,但是有专门芯片,具体FPGA代码就比较简单 SD卡.SDRAM较为复杂,但完全由FPGA驱动,相比之下代码就比较复杂 1_开发 ...

  3. 学习小梅哥FPGA培训视频第一天

    ** 学习小梅哥FPGA培训视频第一天 ** 学习实现计数器 利用quartus II 编写代码并仿真 仿真为前仿真和后仿真 这是前仿真 这是后仿真 在后仿真中,会有毛刺的出现,例如在 1(0001) ...

  4. 虚幻4视频笔记002:精简StarterContent文件夹体积

    #虚幻4#视频笔记:精简StarterContent文件夹体积 . 在很多练习项目和测试项目中,都会使用StarterContent文件夹,但是该文件夹体积巨大,如果项目数量多会占用大量空间,并且分享 ...

  5. ng机器学习视频笔记(二) ——梯度下降算法解释以及求解θ

    ng机器学习视频笔记(二) --梯度下降算法解释以及求解θ (转载请附上本文链接--linhxx)   一.解释梯度算法 梯度算法公式以及简化的代价函数图,如上图所示. 1)偏导数 由上图可知,在a点 ...

  6. ng机器学习视频笔记(十四) ——推荐系统基础理论

    ng机器学习视频笔记(十三) --推荐系统基础理论 (转载请附上本文链接--linhxx) 一.概述 推荐系统(recommender system),作为机器学习的应用之一,在各大app中都有应用. ...

  7. Aupera:FPGA让视频编码与AI结合水到渠成

    Aupera是一家专注于视频数据应用的新一代系统解决方案的创业公司,Aupera资深AI工程师Narges Afsham博士接受LiveVideoStack采访时表示,在FPGA中集成视频编码与AI是 ...

  8. 红橙Darren视频笔记 UML图简介

    整体架构复制自红橙原视频的课堂笔记 因为他这一课没有博客,所以没有转载链接,CSDN没有转载地址是无法作为转载类型的文章发表的,暂时标记为原创 参考链接 https://blog.csdn.net/r ...

  9. 红橙Darren视频笔记 代理模式 动态代理和静态代理

    红橙Darren视频笔记 代理模式 动态代理和静态代理(Android API 25) 关于代理模式我之前有过相关的介绍: https://blog.csdn.net/u011109881/artic ...

最新文章

  1. java提高篇之理解java的三大特性——多态
  2. java录入会员信息_java-第三章-升级我行我素购物管理系统,实现会员信息录入的功能...
  3. redis 和 数据库mysql之间的关系
  4. Java坦克大战(四)
  5. BZOJ 2560(子集DP+容斥原理)
  6. Structs1.0入门知识
  7. 备战二级之MSOffice部分
  8. java画矩形代码_Java以一种方式绘制矩形
  9. lol手游修改服务器,英雄联盟官方修改大区的方法
  10. LeCo-200. 岛屿数量
  11. Android 绘制优化
  12. CAN总线测试方法——单通道USBCAN及双通道USBCAN
  13. 互联网快讯:瑞幸回应价格异常;极米H3S、极米Z6X Pro受用户青睐;知网回应被中科院停用
  14. jcifs报错,jcifs.util.transport.TransportException: Transport1 timedout waiting for response to SmbComR
  15. window.showModalDialog 简介
  16. 时尚主题快闪视频相册视频案例制作教程(可转载)
  17. 一篇文章让你了解大数据
  18. lua string 库
  19. 多态和接口(3)——设计模式(1)——方法override、CLR(Common Language Runtime 公共语言运行时)、CTS(Common Type System 公共语言系统)
  20. ECharts3D地图 简单制作省份地图

热门文章

  1. 流密码(一)同步流密码、自同步流密码以及线性反馈移位寄存器
  2. Qt编写安防视频监控系统55-布局方案
  3. 深信服AD应用交付介绍
  4. Xmanager或者Xshell用户连接信息迁移
  5. 开关电源matlab仿真设计报告,MATLAB非隔离式开关电源仿真分析+源代码
  6. Odoo客户成功案例访谈:机加工厂企业信息化的心路历程探讨
  7. 【嵌入式】SIM808/SIM900发送短信AT指令0X1A
  8. Ubuntu切换窗口,快速返回桌面
  9. eclipse的安装与下载
  10. 基于Python的书店销售管理系统