【FPGA】正确处理设计优先级--或许能帮你节省50%的资源

news2024/11/28 16:35:31

概述

假如现在有一种方法–可以在不怎么需要修改已有设计的情况下,就可以帮您节省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输入与门
	end
end

每个触发器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输入与门
	end
end

下图展示了综合工具是怎样综合这段代码的:在这里插入图片描述
奇怪的是,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) begin
	if (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这两个信号的,因为这种情况一定会造成面积浪费和性能下降。


  • 📣您有任何问题,都可以在评论区和我交流📃!
  • 📣本文由 孤独的单刀 原创,首发于 CSDN 平台🐵,博客主页:wuzhikai.blog.csdn.net
  • 📣您的支持是我持续创作的最大动力!如果本文对您有帮助,还请多多点赞👍、评论💬和收藏⭐!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

“云芯一体”赋能位置应用,真点高精度定位服务正式发布

11月9日&#xff0c;北斗星通旗下企业真点科技正式发布了云芯一体高精度定位服务——TruePoint.CM(厘米级定位服务)和TruePoint.DM&#xff08;分米级定位服务&#xff09;。 此次发布会在第一届测绘地理信息大会期间举办&#xff0c;中国测绘学会宋超智理事长、中国卫星导航定…

Vue.Draggable 踩坑:add 事件与 change 事件中 newIndex 字段不同之谜

背景 最近在弄自定义表单&#xff0c;需要拖动组件进行表单设计&#xff0c;所以用到了 Vue.Draggable(中文文档)。Vue.Draggable 是一款基于 Sortable.js 实现的 vue 拖拽插件&#xff0c;文档挺简单的&#xff0c;用起来也方便&#xff0c;但没想到接下来给我遇到了灵异事件……

Python数据容器(元组)

元组 1.定义元组 定义元组使用小括号&#xff0c;且使用逗号隔开各个数据&#xff0c;数据是不同的数据类型 # 定义元组字面量 (元素,元素,...,元素) # 定义元组变量 变量名称 (元素,元素,...,元素) # 定义空元组 变量名称 () 变量名称 tuple()2.元组的相关操作 编号方法…

JavaScript_Node节点属性_nodeName

nodeName属性&#xff1a;返回节点的名称 节点的类型有七种 Document&#xff1a;整个文档树的顶层节点 DocumentType&#xff1a;doctype标签 Element&#xff1a;网页的各种HTML标签 Attribute&#xff1a;网页元素的属性 Text&#xff1a;标签之间或标签包含的文本 C…

【kylin】使用nmtui软件配置网桥

文章目录 一、什么是网桥二、如何配置网桥域名解析失败 一、什么是网桥 网桥也叫桥接器&#xff0c;是连接两个局域网的一种存储/转发设备&#xff0c;它能将一个大的LAN分割为多个网段&#xff0c;或将两个以上的LAN互联为一个逻辑LAN&#xff0c;使LAN上的所有用户都可访问服…

go 引入包报错“构建约束排除‘D/...vendor/pkg包’”中所有的GO文件

解决方案&#xff1a; 方案一&#xff1a;没生效 go - 构建约束排除所有 Go 文件 - IT工具网 go modules - build constraints exclude all Go files in - Stack Overflow 方案二&#xff1a;生效&#xff0c;手动初始化创建一个目录 后续再研究原因&#xff0c;有明白的大…

第18章Swing程序设计

Swing程序设计 Swing用于开发桌面窗体程序用于JDK的第二代GUI框架&#xff0c;其功能比JDK第一代GUI框架AWT更为强大&#xff0c;性能更加优良。但因为Swing技术推出时间太早&#xff0c;七性能&#xff0c;开发效率等不及一些其他的留下技术&#xff0c;所以目前市场大多数桌面…

ISP算法——UVNR

ISP算法——UVNR 概念简介 UVNR也就是经过CSC只有在YUV域对UV两个色域进行降噪&#xff0c;在有些方案里也叫CNR&#xff08;chroma noise reduction&#xff09;。主要就是在YUV域针对彩燥进行特殊处理的一系列算法。 关于噪声产生的原因在前面关于降噪的文章和视频中已经做…

latex cite命令、款式

UTS SEDE 的 latex 模板 [1,2] 用 biblatex&#xff0c;默认用的引用格式是 ieee。然而 Research Foundation 的 literature review 这个作业要用 APA 7&#xff0c;想在保留 biblatex 的情况下区分有括号和无括号两种引用格式&#xff0c;即 [3] 中 \citet、\citep 的分别。 …

OSG交互:选中场景模型并高亮显示

1、目的 可以在osg视图中选中指定模型实体,并高亮显示。共分为两种,一种鼠标点选,一种框选。 2、鼠标点选 2.1 功能说明 生成两组对象,一组cow对象可以被选中,另一组robot不能被选中;点击cow对象被选中高亮,点击robot被选中不高亮;点击空白处,弹出“select nothing!…

rocketMq消息堆积处理方式

消息堆积常见于以下几种情况&#xff1a; &#xff08;1&#xff09;新上线的消费者功能有BUG&#xff0c;消息无法被消费。 &#xff08;2&#xff09;消费者实例宕机或因网络问题暂时无法同Broker建立连接。 &#xff08;3&#xff09;生产者短时间内推送大量消息至Broker…

PTA_乙级_1096

Q1&#xff1a;因数 在数学中&#xff0c;一个数的因数是能够整除该数的整数。换句话说&#xff0c;如果我们将一个数 a 除以另一个整数 b 而得到整数商&#xff0c;那么 b 就是 a 的因数。以下是一些例子&#xff1a; 1.因数的定义&#xff1a; 如果整数 b 可以被整数 a 整除&…

IP行业API助力于网络分析和数据挖掘

引言 在当今数字化时代&#xff0c;数据成为了企业、科研机构和政府决策者的重要资源&#xff0c;而IP行业API则成为了数据分析及挖掘的工具之一。IP行业API是一种能够查询IP地址所属的行业分类信息的应用程序接口&#xff0c;它能够提供在网络分析、用户行为分析及大数据挖掘…

奇异矩阵、非奇异矩阵

对于一个方阵A&#xff1a; 如果A的行列式等于0&#xff0c;称矩阵A为奇异矩阵如果A的行列式不等于0&#xff0c;称A 非奇异矩阵 也就是说&#xff0c;对于方阵A&#xff0c;如果它是满秩的&#xff0c;即它的秩等于矩阵的阶数&#xff0c;就是非奇异矩阵&#xff1b;如果秩小…

MS2358:96KHz、24bit 音频 ADC

MS2358 是带有采样速率 8kHz-96kHz 的立体声音频模数 转换器&#xff0c;适合于面向消费者的专业音频系统。 MS2358 通过使用增强型双位 Δ - ∑ 技术来实现其高精度 的特点。 MS2358 支持单端的模拟输入&#xff0c;所以不需要外部器 件&#xff0c;非常适合用于像 …

【无标题(PC+WAP)花卉租赁盆栽绿植类pbootcms站模板

(PCWAP)花卉租赁盆栽绿植类pbootcms网站模板 PbootCMS内核开发的网站模板&#xff0c;该模板适用于盆栽绿植网站等企业&#xff0c;当然其他行业也可以做&#xff0c;只需要把文字图片换成其他行业的即可&#xff1b; PCWAP&#xff0c;同一个后台&#xff0c;数据即时同步&…

【iOS开发】iOS App的加固保护原理:使用ipaguard混淆加固

​ 摘要 在开发iOS应用时&#xff0c;保护应用程序的安全是非常重要的。本文将介绍一种使用ipaguard混淆加固的方法来保护iOS应用的安全。通过字符串混淆、类名和方法名混淆、程序结构混淆加密以及反调试、反注入等主动保护策略&#xff0c;可以有效地保护应用程序的安全性。 …

远程运维如何更高效的远程管理?向日葵的这几项功能会帮到你

具备一定规模的企业&#xff0c;其IT运维需求普遍会面临设备数量众多、难以统一高效管理、始终存在安全敞口等问题&#xff0c;尤其是针对分部广泛的无人值守设备时&#xff0c;更是如此。 举一个简单的例子&#xff0c;一台位于商圈的无人值守可互动广告机设备&#xff0c;所…

怎么设置代理IP进行网络爬取呢?代理访问网络如何设置?

在如今网络爬虫广泛应用的年代&#xff0c;很多时候我们都会遇到需要使用代理IP进行网络爬取的情况。代理IP可以帮助我们隐藏真实的IP地址&#xff0c;从而保护我们的隐私和安全。那么&#xff0c;怎么设置代理IP进行网络爬取呢&#xff1f;代理访问网络如何设置&#xff1f;下…

腾讯云3年540,买其他服务器的都是韭菜!

你是否曾经为选择一款合适的云服务器而烦恼&#xff1f;市场上的云服务器品牌繁多&#xff0c;价格各异&#xff0c;如何才能找到一款性价比高&#xff0c;又适合自己的服务器呢&#xff1f;今天&#xff0c;我要给大家介绍一款腾讯云服务器&#xff0c;3年只需540元&#xff0…