FPGA学习笔记1

欢迎关注我的微信公众号,与我一起学习成长:
请添加图片描述

正点原子 FPGA学习笔记

前言

  最近发现自己对FPGA的理解远远没有达到熟练的程度,对于协议部分,尤其是比较大的工程的源码阅读时,感到很困难,所以打算将正点原子的FPGA教程快快过一下。不求每个教学工程都可以搞懂,但求在遇到类似问题时,能够快速想起,有一定的案例来供自己分析。下面是清明假期期间记录的一些笔记,供以后查看。

学习笔记

第四章 Vivado 软件的安装和使用

安装
  1. 选择全功能的版次,即“System Edition”,因为其中包含最多的子组件。
使用
  1. 工程类型选择
“RTL Project”是指按照正常设计流程所选择的类型,这也是常用的一种类型;
“Post-synthesis Project”在导入第三方工具所产生的综合后网表时才选择; 
“I/O Planning Project”一般用于在开始 RTL 设计之前,创建一个用于早期IO 规划和器件开发的空工程;
“Imported Project” 用于从 ISE、 XST 或 Synopsys Synplify 导入现有的工程源文件;
“Example Project”是指创建一个 Vivado 提供的工程模板。
  1. 芯片板卡型号
依据下面条件筛选,确定芯片板卡型号
Family:FPGA的家族
Package:封装
Temperature:温度
Speed:速度
  1. 数据窗口区域
- Sources 窗口: 显示层次结构(Hierarchy) 、 IP 源文件(IP Sources) 、库(Libraries) 和编译顺序(CompileOrder)的视图。
- Netlist 窗口: 提供分析后的(elaborated) 或综合后的(synthesized) 逻辑设计的分层视图。
  1. 包含开发板上所有引脚分配的表格和 XDC 约束文件,位于资料盘(A 盘) \3_正点原子 ZYNQ 开发板原理图文件夹下
  2. 由于 ZYNQ 非易失性存储器的引脚(如 SD 卡、 QSPI Flash) 是 ZYNQ PS 部分的专用引脚, 这些非易失性存储器由 PS 的 ARM 处理器进行驱动, 需要将 bit 流文件和 elf 文件(软件程序的下载文件) 合成一个 BOOT.BIN,才能进行固化
  3. 在线逻辑分析仪
在线逻辑分析仪的功能被称为“集成逻辑分析器(Integrated Logic Analyzer, ILA) ”,Vivado 提供了三种具有不同集成层次的插入 ILA 方法。
1. 直接在 HDL 代码中例化一个 ILA IP 核,,也被称为“HDL 实例化调试探针流程” 
2. 在综合后的网表中,分别标记要进行调试观察的各个信号,然后通过一个简单的“Setup Debug”向导来设置各个探针和 ILA IP 核的工作参数,然后工具会根据用户设置的参数,自动地生成各个ILA IP 核。这个方法也被称为“网表插入调试探针流程”。
3. 手动地在 XDC 约束文件中书写对应的 Tcl XDC 调试命令,在实现阶段工具会自动读取这
些命令,并在布局布线时加入这些 ILA IP 核。

逻辑分析仪的使用方式,详见正点原子FPGA教学内容。

  1. Vivado 的 OOC(Out-of-Context)综合的概念:
    对于顶层设计, Vivado 使用自顶向下的全局(Global)综合方式,将顶层之下的所有逻辑模块都进行综合,但是设置为 OOC 方式的模块除外,它们独立于顶层设计而单独综合。其选项如下

第九章 触摸按键控制LED灯实验

  1. 边沿检测电路的生成逻辑:对输入信号寄存两拍,然后依据两拍状态不同判定输入信号发生了上升沿调变还是下降沿调变。

第十一章 IP 核之 MMCM/PLL 实验

  1. MMCM 的功能是 PLL 的超集。
  2. MMCM 主要用于驱动器件逻辑(CLB、 DSP、 RAM 等)的时钟。
  3. PLL 主要用于为内存接口生成所需的时钟信号,但也具有与器件逻辑的连接,因此如果需要额外的功能,它们可以用作额外的时钟资源。
  4. Xilinx 提供了用于实现时钟功能的 IP 核 Clocking Wizard。
  5. IP核clk_wiz_0中locked信号的理解:MMCM达到输出时钟与输入时钟的锁相状态需要需要一定的周期数,在刚上电时,输出时钟是不稳定的,不能用来驱动其他器件,所以需要用clcked信号来指示一下输出时钟是否达到的稳定可工作状态。

第十二章 IP 核之 RAM 实验

  1. 配置成 RAM 或者 ROM 使用的资源都是 FPGA 内部的 BRAM。
  2. Operating Mode: RAM 读写操作模式。 共分为三种模式,分别是 Write First(写优先模式)、 Read First(读优先模式)和 No Change(不变模式)。
写优先模式:数据先写入 RAM 中,然后在下一个时钟输出该数据;
读优先模式:数据先写入 RAM 中,同时输出 RAM 中同地址的上一次数据;
不变模式:读写分开操作,不能同时进行读写。
  1. “Primitives Output Register”默认是选中状态,作用是打开 BRAM 内部位于输出数据总线之后的输出流水线寄存器,使得 BRAM 输出的数据延迟一拍,以改善时序性能。(本实验中取消选中)
  2. 采用OOC模式,RAM IP核 “blk_mem_gen_0_synth_1”的综合过程独立于顶层设计的综合,
  3. .veo文件是 由 IP 核自动生成的只读的 verilog 例化模板文件。

第十三章 IP 核之 FIFO 实验

  1. FIFO被划分为同步 FIFO 和异步 FIFO。同步FIFO 是指读时钟和写时钟为同一个时钟,常用于同步时钟的数据缓存异步FIFO 是指读写时钟是互相独立的,常用于跨时钟域的数据信号的传递
  2. 异步FIFO系框图

第十四章 UART 串口通信实验

  1. 串口通信实验系框图
  2. 接收模块实现逻辑
1. 捕获接收端口下降沿(起始位)
2. 捕获起始位后,进入接收状态(当采样指定bits数据后进入空闲态)
3. 进入接收过程后,启动系统时钟计数器(多少个系统时钟为一个接收数据时钟)
4. 进入接收过程后,启动接收数据计数器(经过了多少个接收数据时钟,就接收了多少个bits的数据)
5. 每个数据的中间进行采样
6. 接收数据计数器计数完成后,将数据和接收完成信号发送给 环回 模块

选择 clk_cnt 计数至 BPS_CNT/2 时寄存接收端口数
,是因为计数到数据中间时的采样结果最稳定。

串口接收过程结束条件的判定:在连续接收数据时,提前半个波特率周期结束接收过程可以为检测下一帧数据的起始位留出充足的时间。

  1. 环回模块实现逻辑
1. 捕获recv_done上升沿,得到一个时钟周期的脉冲信号
2. 判断接收完成信号,并在串口发送模块空闲时给出发送使能信号(数据可以直接连过去,但使能信号必须在发送模块空闲的前提下使能)

tx_ready信号与前面rx_flag信号一致,只要检测到起始边沿,一定进入该状态,但关闭的时候是基于另外的信号来实现的。

  1. 发送模块实现逻辑
1. 捕获环回模块上升沿
2. 捕获环回模块上升沿后,进入发送过程,并寄存待发送的数据(当发送指定bits数据后进入空闲态)
3. 进入发送过程后,启动系统时钟计数器(多少个系统时钟为一个发送数据时钟)
4. 进入发送过程后,启动发送数据计数器(经过了多少个发送数据时钟,就发送了多少个bits的数据)
5. 每个数据时钟后切换数据(起始位为0,最后停止位为1)
6. 另:在串口发送过程中给出忙状态标志

将 tx_flag 提前 1/16 个停止位拉低的原因:考虑到我们模块里计算波特率会有较小的偏差, 并且串口对端的通信设备(如电脑等)收发数据的波特率同样可能会出现较小的偏差,因此这里为了确保环回实验的成功,这里将发送模块的停止位略微提前结束。(收发理论上是同时的,但收到发有一定延时,故需要让发提前,确保通信正确)

第十五章 RS485 串口通信实验

  1. 模块间的交互关键是生成enable信号,只要确保enable信号有效时,输入数据有效即可。在某些需要并行转串行的模块中,需要输入的信号持续有效,这时就要对发送端进行限制确保其输出值保持固定时间有效。

参考内容

正点原子 领航者ZYNQ开发板资料盘(http://www.openedv.com/docs/)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值