当前位置: 首页 > news >正文

【FPGA开发】Cordic原理推导、Xilinx PG105手册解读

目录

  • Cordic原理推导
  • PG105手册解读
    • IP核总览
    • 核心计算功能总览
    • 基本握手信号
    • 非阻塞模式 NonBlocking Mode
    • 阻塞模式 Block Mode
  • 数据格式
  • 数据映射

本文针对Cordic算法本身,以及Xilinx官方CORDIC IP做学习记录,如有纰漏,欢迎指正!

Cordic原理推导

在这里插入图片描述

PG105手册解读

IP核总览

输入输出格式,内部硬件结构,Cordic算法能配置的信息基本上都引出来了,方便用户配置。
在这里插入图片描述

核心计算功能总览

在这里插入图片描述

基本握手信号

该IP核的数据接口为 AXI-Stream 协议格式,熟悉AXI的朋友不会对下图3-1感到陌生。
tvalid有主机控制,其指示 tdata、tuser、tlast 等负载信号是有效的。
tready 由从机控制,其指示从机准备好接收数据了。
tvalid 和 tready 两者的控制是独立的。
只有当他们同时 assert 时,传输才会发生。
在这里插入图片描述

非阻塞模式 NonBlocking Mode

Codric IP核支持非阻塞模式的数据输入,其目的是方便用户把自己的非AXI协议模块放在上游,与Cordic IP级联。

下面的一句话详细的说明了NonBlocking的含义,初读可能不会有很深的体会:一个通道的数据缺失,不会导致另一个通道的输入数据缓存,这里存疑,后面写到波形图分析时,理解会清晰很多。

NBlock模式是不存在“”背压“”的,也就是tready信号不起作用,也可认为其保持assert。

这样一来,模块就不需要处理tready的信息,内部的逻辑就会简单,和用户自己的模块继级联时,也很方便。
在这里插入图片描述

下面开始分析NBlock模式的波形图
在这里插入图片描述
分析图3-2,首先将端口信号分组观察,可以看到:

  1. 输入数据有两个通道,cartesian通道对应数据A,phase通道对应数据B。
  2. 输出数据只有一个通道,dout,输出通道同时依赖两个输入通道A、B。

!特别注意!:这里Xilinx为了简化理解,把核心的计算延时假想成了0,相当于纯逻辑电路,输入立马有输出(原话如下)。
在这里插入图片描述


第1次传输分析-B通道握手失败情形:

  • A通道握手成功,数据为A1
  • B通道tvalid为低,握手失败,且数据为无效数据
  • 此时dout通道,tdata无效,tvalid无效
  • 解释:必须A、B通道同时握手成功,才能驱动数据
    在这里插入图片描述

第2次传输分析-双通道握手成功,数据有效情形:

  • A通道握手成功,数据为A2。
  • B通道握手成功,数据为B1。
  • 此时dout通道,tdata(A2,B1),tvalid有效。
  • 解释:A、B通道同时握手成功,可以输出数据,但是由于当前的工作模式为NBlock,所以A通道上一次输入的A1并未因为B通道握手失败而得到缓存,A1就算是丢了,这里配合B1输出的,只能是A2。
    在这里插入图片描述

第3次传输分析-A通道握手失败情形:

  • A通道握手失败,且数据为无效。
  • B通道握手成功,数据为B2。
  • 此时dout通道,tdata无效,tvalid无效。
  • 解释:必须A、B通道同时握手成功,才能驱动数据(和第1次传输类似!)。
    在这里插入图片描述

第4次传输分析-双通道握手成功,数据无效情形:

  • A通道握手成功,数据为A3。
  • B通道握手成功,但数据为无效。
  • 此时dout通道,tdata无效,tvalid有效。
  • 解释:尽管都双通道都握手成功,但是由于输入数据无效,导致输出数据无效。

在这里插入图片描述


第5次传输分析-双通道握手成功,数据有效情形:

  • A通道握手成功,数据为A4。
  • B通道握手成功,数据为B3。
  • 此时dout通道,tdata(A4,B3),tvalid有效。
  • 解释:A、B通道同时握手成功,可以输出数据,但是由于当前的工作模式为NBlock,A3、B2等都已经丢失了,只能输出A4和B3。

1

至此,NBlock的波形分析已经完毕,是否对下图提到的这段话有新的体会?
在这里插入图片描述
总结起来:一个握手成功,一个握手失败时,握手失败的数据不会得到保留。且握手失败一定是输入的valid或data引起的,ready信号不起作用,认为其始终assert!

阻塞模式 Block Mode

阻塞模式就是正常AXI的模式,tready信号有背压,在阻塞模式下,模块的 Latency 概念意义不大,因为输出的数据不光有内部计算逻辑造成延时,也会被ready信号影响。

闲言少叙,有了前面NBlock的基础,这里直接分析波形图。


第1段传输分析:

  • A通道连续握手成功3个clk,A1、A2、A3数据都有效
  • B通道在A1有效时刻握手失败,在A2有效时刻握手成功B1,在A3有效时刻握手失败
  • A、B两通道共同有效的时刻对应(A2,B1)
  • 输出dout通道在(A2,B1)时刻输出了(A1,B1)
  • 解释:Block模式下,输入数据有缓冲区,A1虽然独自握手成功,但是不会被丢弃,而是会等待B,像FIFO一样,队列一样出来。

在这里插入图片描述


第2段传输分析:

  • A通道握手成功A4,此时A通道已经堆积了A2~A4。
  • B通道握手成功B2,此时B通道无堆积数据。
  • 输出dout通道输出了(A2,B2)
  • 解释:于B通道数据少,来了就能输出;A通道数据多,就堆积住了,但是会以队列的方式依次伴随B输出。

在这里插入图片描述


第3段传输分析:

  • A通道握手成功A5,此时A通道已经堆积了A3~A5。
  • B通道握手成功B3。
  • 输出dout通道的ready无效,tvalid有效,tdate无效。
  • 解释:该周期内tdata无效的原因在于tready为低,所以B3也缓存了,等到tready拉高时,直接就输出了(A3,B3)。

在这里插入图片描述
至此,Blcok模式的波形图分析完了。

在Block模式下,不光输出有缓冲,输入也有缓冲。

对于输出缓冲的理解:
模块会一直计算并输出,直到下游的信号把ready拉低,拉低之后,模块仍会计算(tvalid有效),但是停止输出(tdata无效),转而在内部buffer中缓存。
如果长时间ready信号都没有再次拉高,缓存buffer肯定会被存满,此时核心会停止计算,保证已经算好的结果数据一个也不被覆盖

对于输入缓冲的理解:
比如两个输入通道,通道A接收握手的数据,通道 B 没握手成功。
此时,A 通道的数据不会被计算或丢弃,只会被缓存到输入缓冲区。
如果 B 很快也握手成功进了数据,那么 A 已经存储的数据就可以和B的数据一起输入进核心计算,A 的 buffer 也就释放了。
但如果 B 迟迟没有握手数据进来,那么 A 的 buffer 会被填满,此时, A 通道会告诉上游模块,不能再接收数据了。

数据格式

在这里插入图片描述

数据映射

在这里插入图片描述

相关文章:

  • 【AI测试必学】DeepSeek API 快速入门:获取 API Key 与调用 API 步骤详解
  • 一文读懂Python之json模块(33)
  • ABAP Core Data Services (SAP PRESS) (First Edition)
  • 蓝桥杯11届 蛇形填数
  • 电脑上不了网普通用户排除方法
  • 神聖的綫性代數速成例題19. 最小二乘法在線性代數中的應用、線性空間的直和分解及相關性質、矩陣的特徵值分解的拓展應用
  • Python | 如何在Pandas中删除常量列
  • 【蓝桥杯】4535勇闯魔堡(多源BFS + 二分)
  • 【euclid】20 2D包围盒模块(box2d.rs)
  • 《背影》再读:时光深处的温暖与感触
  • 深度学习框架中动态图和静态图是什么意思,如何通过keras和estmator实现?
  • Linux centos 7 vsftp本地部署脚本
  • 【软件架构论文范文:价值驱动的云原生架构在电商订单系统中的实践】
  • vue3 ts 请求封装后端接口
  • #C8# UVM中的factory机制 #S8.1.4# 约束的重载
  • Spring JDBC Template与事务管理:基于XML与注解的实战指南
  • 软件设计师-进制转换
  • 在 Linux 中使用 Vim 和 C++ 实现一个基本 Shell
  • C语言三大程序结构 单分支语句
  • 【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画
  • 四川甘孜炉霍县觉日寺管委会主任呷玛降泽被查
  • 把中国声音带向世界,DG和Blue Note落户中国
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%
  • 沪指跌0.68%报3380.82点,创指跌1.92%:券商、军工跌幅靠前
  • 30平米的无障碍酒吧里,我们将偏见折叠又摊开
  • 小耳朵等来了春天:公益义诊筛查专家走进安徽安庆