FPGA节省资源篇------正确处理设计优先级

news/2024/2/24 6:29:57/文章来源:https://blog.csdn.net/weixin_65286359/article/details/135576302

声明:以下文章来源于孤独的单刀,仅供学习用途


概述

假如现在有一种方法–可以在不怎么需要修改已有设计的情况下,就可以帮您节省50%的设计资源,那你会试试看吗?

当前市场环境下,更低廉的成本却可获得同等性能无疑是极具诱惑的。本文将介绍一种FPGA设计技术,该技术可以改变 FPGA 设计的规模大小和使用性能。

单级逻辑

你可以在Xilinx的FPGA 中使用可配置逻辑块CLB中的查找表LUT和触发器DFF来实现简单的逻辑函数。LUT4 可以实现4个输入的任何功能–不管这个功能需要多少门来描述。LUT4的输出直接连接到触发器DFF的D输入端,从而实现时序逻辑。

图片

这张图片对应的Verilog代码(使用一个与门来实现4输入逻辑函数):

always @(posedge clk) begin  data_out <= a & b & c & d;//4输入与门end

两级逻辑

同样的与门,一旦其有了4个以上的输入,那么综合工具就只能将逻辑拆分到在2个或多个LUT4里面了。下图使用了2个LUT4+DFF来实现6输入的与门。它对应的Verilog代码:​​​​​​​

always @(posedge clk) begin  data_out <= a & b & c & d & e & f;//6输入与门end

图片

可以看到,这个6输入与门的使用的资源是4输入与门的两倍。同时,它的逻辑级数也从1变成了2(1个LUT到2个LUT),这会额外增加布线延迟和门电路延迟,导致该设计的时序性能一定程度的下降。

增加复位信号

设计师通常会在设计中加入一个全局复位信号(global reset)。这个复位信号在仿真中很有用,但是由于 Xilinx的FPGA 在上电配置后会以已知状态启动,因此在实际使用完全没必要使用全局复位。下面的Verilog代码展示了如何实现全局异步复位:​​​​​​​

always @(posedge clk or posedge reset) begin  if (reset) begin    data_out <= 1’b0;//全局复位  end  else begin    data_out <= a & b & c & d;//4输入与门    endend

每个触发器DFF都有一组专用的控制信号–设置信号set、复位信号reset和时钟使能信号clock enable。如下图所示,触发器使用了异步复位CLR信号。

图片

增加更多控制信号

下面的代码也是4输入的与门,但是增加了复位信号reset、置位信号set和时钟使能控制信号ce:​​​​​​​

always @(posedge clk or posedge reset) begin  if (reset) //异步复位有效    data_out <= 1’b0;  else if(ce)begin//时钟使能有效  if(set)//置位有效    data_out <= 1’b1;  else//置位无效    data_out <= a & b & c & d;//4输入与门  endend

下图展示了综合工具是怎样综合这段代码的:

图片

奇怪的是,4输入的与门居然使用了2个LUT4来实现!而且代码中的set信号综合出来并没有出现在DFF的PRE端!

这真的不能怪综合工具,它已经尽力了。该怪的是代码,因为它描述的功能无法在只用DFF的情况下就实现,综合工具被迫使用多余的资源来实现这个预期设计。

触发器DFF支持异步复位、同步复位、异步置位和同步置位。但是,在同一触发器上不能混合使用异步控制信号和同步控制信号。因此,综合工具必须在具有SET和RST控制的同步触发器或具有PRE和CLR控制的异步触发器之间进行选择。

图片

通常情况下,全局复位是一个异步信号。前面的示例同时使用了set和reset信号,这可能并不常见。但是在某些情况下,同一触发器可能会有两个复位条件。一种是全局复位;还有一种是操作目的所需的局部复位(例如BCD 计数器必须在计数到9之后重新跳到0)。

如果全局复位是异步的,则必须使用LUT来模拟局部的同步复位,这可能会以两倍的成本和更低的性能强制执行两级逻辑。如果你仍然坚持要使用全局复位,那么请尝试使用同步复位信号。

解决问题的关键在于了解触发器的工作方式。虽然FPGA作为一个整体是可编程的,但是底层单元的功能实际上却是固定的。

假如你将使用一个电子器件,那么在使用它之前,你必须研究它的datasheet以了解它的工作原理和工作方式。下表的输入和输出都与触发器一致。

图片

  1. R信号的优先级是最高的,它可以在C信号的上升沿将输出Q复位。

  2. S信号具有次高的优先级,它可以在C信号的上升沿将输出Q置位。

  3. CE信号的优先级最低,当它为高电平时,输出Q的变化跟随输入D。

这种器件实际上就是xilinx的FPGA中的触发器FDRSE

图片

FPGA内部的所有同步触发器都具有相同的控制集,而异步触发器则被称为FDCPE,它有异步复位信号CLR和预置位信号PRE。当多个控制信号同时被使用时,每个信号都会遵循已定义好的优先级顺序。

在上面的示例中,由于设计中的时钟使能信号ce的优先级高于置位信号set,这违反了定义的优先级顺序(reset>set>ce),所以综合工具只能使用多余的资源来实现这一功能,这就是为什么会多出来一个LUT的原因。

当我们使用外部器件时,都非常清楚控制信号的优先级,但在编写 HDL 代码时,这却很容易被忽视。幸运的是,由于所有触发器的内部结构都是相同的,一旦我们知道了它们的优先级规则,那编写符合它们工作方式的代码就很容易了。比如上面的代码就可以做如下修改:​​​​​​​

always @(posedge clk) beginif (reset) //同步复位有效  data_out <= 1’b0;else if(set)//置位有效  data_out <= 1’b1;else if(ce)//时钟使能有效  data_out <= a & b & c & d;//4输入与门end

现在,综合工具终于可以正确地综合出我们的预期电路了:

图片

总结

总有一些情况需要打破优先级规则----这就是可编程逻辑的意义所在。但是,如果你能够学会将这些情况视为例外,并编写与优先级相符的代码,那么结果将大有裨益。如果你可以删除不必要的全局异步复位信号,那么每次设计时都需要担心的优先级就会减少一个。

这篇文章是Xilinx的白皮书《wp275,Get your Priorities Right – Make your Design Up to 50% Smaller》的内容,该文发布时间是2007年,当时的DFF结构与当下(2023年)的Xilinx 7系列FPGA架构的DFF结构有很大不一样。

现在的DFF并不会同时有set和reset这两个端口,如下所示,所以也就不存在set和reset这两个信号的优先级问题了。

图片

当前的FPGA设计中,Xilinx是不鼓励用户同时使用set和reset这两个信号的,因为这种情况一定会造成面积浪费和性能下降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_926225.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

steam游戏搬砖项目还能火多久?

最近放假回到老家&#xff0c;见了不少亲戚朋友&#xff0c;大家不约而同都在感叹今年大环境不好&#xff0c;工作不顺&#xff0c;生意效益不好&#xff0c;公司状况不佳&#xff0c;反问我们生意如何&#xff1f;为了让他们心里好受一点&#xff0c;我也假装附和道:也不咋地&…

3000多个厂商默认帐号、默认密码

做网工这行&#xff0c;多少都会遇上各种各样的厂商设备&#xff0c;遇上一些新设备&#xff0c;虽然没有更改密码&#xff0c;但不知道初始默认账号和密码是啥。 今天就给你整理了一波&#xff0c;三千多个厂商默认帐号、默认密码&#xff0c;方便你查阅。 不过&#xff0c;…

自创C++题目——风扇

预估难度 简单 题目描述 有一个风扇&#xff0c;它有个旋转叶片&#xff0c;每个旋转叶片的编号是&#xff0c;请输出它旋转后&#xff0c;中心点与地面的直线距离哪个叶片最近&#xff0c;输出此旋转叶片的编号。默认以“”的形式。 当时&#xff1a; 当或时&#xff0c;…

MATLAB二维与三维绘图实验

本文MATLAB源码&#xff0c;下载后直接打开运行即可[点击跳转下载]-附实验报告https://download.csdn.net/download/Coin_Collecter/88740747 一、实验目的 掌握图形对象属性的基本操作。掌握利用图形对象进行绘图操作的方法。 二、实验内容 利用图形对象绘制曲线&#xff…

Java基础 - 黑马

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

最佳实践分享:SQL性能调优

SQL性能调优是一个需要不断探索和实践的过程&#xff0c;旨在确保数据库查询的高效运行。本文将分享一些SQL性能调优的最佳实践&#xff0c;帮助您提升数据库性能&#xff0c;减少查询响应时间。 一、索引优化 索引是提高查询性能的关键。以下是一些关于索引优化的建议&#…

完全备份、增量备份、差异备份、binlog日志

1 案例1&#xff1a;完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192.168.88.50 练习数据的备份与恢复 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一&#xff1a;练习物理备份与恢复 冷备份&#xff0c;需停止数…

数据结构第十四弹---链式二叉树基本操作(下)

链式二叉树 1、翻转二叉树2、判断两棵树是否相同3、判断二叉树是否是单值二叉树4、对称二叉树5、判断二叉树是否是平衡二叉树6、判断二叉树是否是另一棵二叉树的子树7、二叉树的销毁8、二叉树的深度遍历8.1、前序遍历8.2、中序遍历8.3、后序遍历 9、二叉树的构造和遍历总结 1、…

Java中的JVM指令和Arthas以及Dump文件(jvisualvm和MemoryAnalyzer工具)整体分析

前言 前天线上服务器突然内存和CPU都爆掉了&#xff0c;两者都处于一种高负载的状态&#xff0c;而且还是周末的情况下&#xff0c;起初运维同事怀疑是用户数量暴增&#xff0c;但是数据面板上并没有出现很大的暴增现象&#xff0c;之前的服务器4G的内存都跑不满后面升到8G还是…

NFS网络共享服务存储

目录 一、NFS简介 1、NFS定义&#xff1a; 2、NFS的特点 3、NFS的优缺点 4、NFS的原理图示 二、服务端NFS配置文件&#xff1a;/etc/exports 三、实验&#xff1a;NFS共享存储服务配置 1、服务端安装nfs-utils与rpcbind软件包 2、服务端新建共享文件夹目录并赋予权限 …

【数据库】sql优化有哪些?从query层面和数据库层面分析

目录 归纳sql本身的优化数据库层面的优化 归纳 这类型问题可以称为&#xff1a;Query Optimization&#xff0c;从清华AI4DB的paper list中&#xff0c;该类问题大致可以分为&#xff1a; Query RewriterCardinality EstimationCost EstimationPlan Optimization 从中文的角…

排序算法9----计数排序(C)

计数排序是一种非比较排序&#xff0c;不比较大小 。 1、思想 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 2、步骤 1、统计数据&#xff1a;统计每个数据出现了多少次。&#xff08;建立一个count数组&#xff0c;范围从[MIN,MAX],MAX代表arr中…

网页屏幕适配通透了

一&#xff0c;如果设计尺寸固定 那就按照固定尺寸开发 一般都是1920*1080 二&#xff0c;需要适配多种像素屏幕&#xff08;大屏可视化&#xff09; 可使用媒体查询设置多套css样式或者使用自适应单位&#xff0c;%&#xff0c;vw&#xff0c;vh 最好解决方案rem&#xff…

Unity Shader 的模板测试效果

模板测试是渲染管线中逐片元操作的一环&#xff0c;它的作用是筛选出指定模板的片元&#xff0c;而不符合模板的片元会被舍弃&#xff0c;从而做到一个遮罩的效果。 以下是Unity中实践的一个效果&#xff1a; 场景中可以看出&#xff0c;熊模型和茶壶模型都在差不多的位置&am…

Kafka 的架构

实验过程 1.三个虚拟机中解压kafka软件包 tar -zxvf kafka_2.11-1.1.1.tgz 2.修改 3 个节点配置文件 在 zookeeper 节点&#xff0c;进入 kafka_2.11-1.1.1/config 目录下&#xff0c;编辑 server.properties 文件 [rootdb1 ~]# cd kafka_2.11-1.1.1/config [rootdb1 con…

HarmonyOS应用开发者高级认证试题库(鸿蒙)

目录 考试链接&#xff1a; 流程&#xff1a; 选择&#xff1a; 判断 单选 多选 考试链接&#xff1a; 华为开发者学堂华为开发者学堂https://developer.huawei.com/consumer/cn/training/dev-certification/a617e0d3bc144624864a04edb951f6c4 流程&#xff1a; 先进行…

【一】通信协议概述

通信协议概述 简介&#xff1a; 很早之前就思考了要写一下电力系统常用的几种通信协议&#xff0c;一直拖着也没有行动&#xff0c;这次终于下定决心来出一个《通信协议》这样的专栏。电力行业数字化方面资料较少&#xff0c;我理解主要一方面是数字化程度还不高&#xff0c;一…

使用Python操纵Word自动编写离职报告

目录 一、背景介绍 二、技术原理 三、实现步骤 1、安装python-docx库 2、创建Word文档 3、添加标题和内容 4、添加表格和图片 5、设置样式和格式化文本 6、保存文档 四、注意事项与建议 总结 随着现代社会的发展&#xff0c;自动化和智能化已经成为各行各业追求的目…

使用PyTorch实现混合专家(MoE)模型

Mixtral 8x7B 的推出在开放 AI 领域引发了广泛关注&#xff0c;特别是混合专家&#xff08;Mixture-of-Experts&#xff1a;MoEs&#xff09;这一概念被大家所认知。混合专家(MoE)概念是协作智能的象征&#xff0c;体现了“整体大于部分之和”的说法。MoE模型汇集了各种专家模型…

消息的发送与接收

消息的发送与接收 消息的发送与接收不仅仅是在于聊天功能的实现。其实还有很多种情况也算"消息的发送与接收"。而且我们还可以通过多种方法去实现。我们可以基于实际情况来选择。 WebSocket实现 node做后端。找了好多&#xff0c;前端页面总是用到了jQuery&#x…