fpga流水线设计思想_fpga视频容易入门

fpga流水线设计思想_fpga视频容易入门流水线设计的思想来源是高流量,也就是说时间延迟固定的情况下尽可能的产生高的流量,使得整体的信号传输速率得到提升。这一概念我是最早在《高级FPGA设计——结构、实现和优化》(SteveKilts)一书中接触到的。作者在书中提到,高流量设计的抽象术语就是“流水线”。作者指出:流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理。并给出一个例子,硬件实现计算一个数的三次方。这给出设计代码,用于下文分析比较。1.类似于软件的递归算法实现(非流水线结构)`timescale1ns/

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

流水线设计的思想来源是高流量,也就是说时间延迟固定的情况下尽可能的产生高的流量,使得整体的信号传输速率得到提升。

这一概念我是最早在《高级FPGA设计——结构、实现和优化》(Steve Kilts)一书中接触到的。作者在书中提到,高流量设计的抽象术语就是“流水线”。

作者指出:流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理。并给出一个例子,硬件实现计算一个数的三次方。

这给出设计代码,用于下文分析比较。

1.类似于软件的递归算法实现(非流水线结构)

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2022/01/21 15:59:20
// Design Name: 
// Module Name: test
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 实现计算一个数的三次方,采用非流水线的方式
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module power3(
output reg [7:0]  XPower,
output            finished,
input       [7:0] X,
input             clk, start     //the duration of start is  a single clock
);    

reg [7:0] ncount;

assign finished=(ncount==0);

always@(posedge clk)
 if (start) begin 
    XPower <=X;
    ncount<=2;
 end
 else if (!finished)  begin 
      ncount<=ncount-1;
      XPower <=XPower*X;

end

endmodule 

2.流水线结构

module power3(
   output  reg  [7:0] XPower,
   input               clk,
   input         [7:0] X 
);

reg   [7:0]  XPower1, XPower2;
reg   [7:0]  X1, X2;

//两级流水操作
always@(posedge clk) begin
// Pipeline stage 1
    X1     <= X;
    XPower1<= X;
// Pipeline stage 2
    X2     <= X1;
    XPower2<= XPower1*X1;
//  Pipeline stage 3 
    XPower<= XPower2*X2;
end
endmodule

有了设计代码,下面就是比较分析,在硬件层面上究竟两者有啥区别呢?速度?占用资源?是否有差别呢?

在vivado中将两者综合并分析比较。

fpga流水线设计思想_fpga视频容易入门

图一:非流水线设计RTL连线图

fpga流水线设计思想_fpga视频容易入门

图二:非流水线设计资源报告

fpga流水线设计思想_fpga视频容易入门

图三:流水线设计RTL连线图

fpga流水线设计思想_fpga视频容易入门

图四:流水线设计资源报告

比较1:可以看到,非流水线设计中存在较多组合逻辑,而触发器和乘法单元相对较少;在流水线设计中,触发器和乘法单元用的更多。这是不是所谓的“面积”上的区别

fpga流水线设计思想_fpga视频容易入门

图五:非流水线设计时序报告

fpga流水线设计思想_fpga视频容易入门

 图六:流水线设计时序报告

比较2:可以看到,在相同的时钟约束下,流水线设计所能达到的最大频率更高(1/(4+0.185)),也就是速度更快。

这是我们通过综合工具得出的结论,Steve Kilts在书中用更抽象的参数描述了两者的区别。

非流水设计:

流量=8/3,或者2.7位/时钟

时滞=3时钟

时序=关键路径中的一个乘法延时

流水设计:

流量=8/1,或者8位/时钟

时滞=3时钟

时序=关键路径中的一个乘法延时

个人思考:

那么这上述流量判定的依据是什么呢?一开始我也困惑,后来慢慢体会给出了自己的思考。

在非流水设计中,最终的输出须等到三次运算都完成后,才能输出,所以输出8位数据需要3个时钟周期,而在流水设计中呢?

我们回到开头“流水线设计的优越性是新数据在前面的数据完成之前就可以进行处理”,抓住“新”一词,其中应强调数据的变化性,就能体会到流水线设计的特征。当数据变化时,在最后一级处理的同时“新数据”已经在处理了,只需“再”一个时钟周期,8位的“新”数据又可以输出了,所有此时流量为8/1。

这里强调数据变化,若是数据不变,或者在第一个数据处理时,流水线的这种优越性将很难让人体会的到。

那么流水线处理的本质依据是什么呢?答案是FPGA的并行性。这一点在Donald G.Bailey 的《基于FPGA的嵌入式图像处理系统设计》中提到过。作者指出,流水性设计,就是将系统整体操作拆解成若干操作步骤进行处理。我们可以看出,上述三次乘方计算中,就是将其拆解成X*X*X来处理。

综合起来,我们可以得出这样的结论:流水线设计单个模块而言,由于插入了若干级寄存器,使得

其时钟频率增加;对于系统级设计而言,流水线设计又能减少模块间的传输延迟。

所以,流水线设计用起来吧!下一步研究怎么样应用吧。

我是fpga小白,写博客只为分享和记录。

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/170396.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 什么是java构造函数_什么是java构造函数

    什么是java构造函数_什么是java构造函数构造函数是面向对象中的一员,构造函数可以叫做构造器,它的函数名与类名相同,不用定义返回值类型,也没有具体的返回值。构造函数是在构建创造时对象时调用函数,作用是可以给对象进行初始化,创建对象都必须要通过构造函数初始化。一个类中如果没有定义过构造函数,那么该类会有一个默认的空参数构造函数。如果在类中定义了指定的构造函数,那么该类中的默认构造函数就没有了。我们人出生的时候,有些人一出生之后再起名字的,但…

  • bilibili【考研英语词汇】

    bilibili【考研英语词汇】1、abandonvt.离弃,遗弃,抛弃;放弃。放纵,放弃a-否定(前缀)band-布带on布带不在自己身上,放纵,放弃bandn.条,带;乐队;波段;v.绑扎一群人绑在一起:乐队,一群bandagen绷带v用绷带扎缚-age永恒的(后缀)band-~ban-(前缀)banner横幅,旗帜(商店的旗帜)在小带子上写的字:slogan…

  • 欧拉角pitch、yaw,roll的理解_彻底搞懂四元数

    欧拉角pitch、yaw,roll的理解_彻底搞懂四元数目录0、简介一、四元数的定义二、欧拉角到四元数的转换2.1公式:2.2code:三、四元数到欧拉角的转换3.1公式3.2code:3.3四元素到旋转矩阵转换四.奇点五.矢量旋转证明:六.其他参考0、简介四元数与欧拉角之间的转换百度百科四元素在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具……

  • contextmenu是什么事件_onpropertychange事件

    contextmenu是什么事件_onpropertychange事件用户点击鼠标右键时触发并打开上下文菜单禁用:document.oncontextmenu=function(){   returnfalse;}编辑自定义右键打开菜单document.oncontextmenu=function(){   returnfalse; } document.body.addEventListener(‘mousedown’…

  • 剑指java面试offer直通车_面试后一般多久给offer

    剑指java面试offer直通车_面试后一般多久给offer这是本人整理的数万字的面试笔记,基本上涵盖了Java领域的所有技术栈,本人也是凭借这份面试笔记斩获了近10个offer,面试成功率高达80%。当然这份笔记是我根据自身的经验和技术栈整理的,自己觉得很重要的或者记不清的就会记录记录下来,面试被问到的时候也有回答的思路。现在共享给大家,希望对准备面试的小伙伴有帮助。1.微服务1.1主流注册中心对比zookeeper:zookeeper作为注册中心主要是因为它具有节点变更通知功能。只要客户端监听相关服务节点,服务节点有所变更就能及时的通知到监

  • 自动化测试系列(三)|UI测试「建议收藏」

    自动化测试系列(三)|UI测试「建议收藏」UI测试是一种测试类型,也称为用户界面测试,通过该测试,我们检查应用程序的界面是否工作正常或是否存在任何妨碍用户行为且不符合书面规格的BUG。了解用户将如何在用户和网站之间进行交互以执行UI测试至关重要,通过执行UI测试,测试人员将尝试模仿用户的行为,以查看用户将如何与程序进行交互,并查看网站的运行情况是否如预期的那样,是否有缺陷。在上次的自动化测试系列(二)中为大家大体介绍了API测试的概念及在猪齿鱼中的实践展开,本文主要围绕UI测试进行概念介绍及Choerodon中的实践展开。下面.

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号