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

概述

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

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

单级逻辑

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

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

两级逻辑

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

always @(posedge clk) begindata_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) beginif (reset) begindata_out <= 1’b0;				//全局复位endelse begindata_out <= a & b & c & d;	//4输入与门end
end

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

增加更多控制信号

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

always @(posedge clk or posedge reset) beginif (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) 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这两个信号的,因为这种情况一定会造成面积浪费和性能下降。


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

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

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

相关文章

【Linux网络】2分钟学习centos7永久修改网卡名称

目录 第一步&#xff0c;先查看网卡名称 第二步&#xff1a;先修改配置文件/etc/default/grub&#xff0c;添加net.ifnemes0 第三步&#xff1a;重新加载内核配置grub2-mkconfig -o /boot/grub2/grub.cfg 第四步&#xff1a;重启电脑 第五步&#xff1a;查看网卡名称&…

微带线的ABCD矩阵的推导、转换与级联-Matlab计算实例

微带线的ABCD矩阵的推导、转换与级联-Matlab计算实例 散射参数矩阵有实际的物理意义&#xff0c;但是其无法级联计算&#xff0c;但是ABCD参数和传输散射矩阵可以级联计算&#xff0c;在此先简单介绍ABCD参数矩阵的基本用法。 1、微带线的ABCD矩阵的推导 其他的一些常用的二端…

应用在便携式多媒体播放器中的音频Codec芯片

便携式多媒体播放器(PMP&#xff0c;Portable Media Player)&#xff0c;也就是通常人们所说的MP4。PMP的主要优点是&#xff1a;携带方便&#xff0c;能够直接播放高品质音/视频文件&#xff1b;也可以浏览图片&#xff0c;以及作为移动硬盘使用&#xff1b;此外&#xff0c;P…

【面试经典150 | 位运算】二进制求和

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;模拟 其他语言c 写在最后 Tag 【二进制】【位运算】 题目来源 67. 二进制求和 题目解读 以二进制字符串的形式返回两个二进制字符串的和。 解题思路 看到这个题目首先想到的方法可能是先把二进制字符转化成 int 型数…

内存管理

目录 C/C内存分布 引入 分析 说明 C语言内存管理方式&#xff1a;malloc calloc realloc free malloc realloc calloc 面试题 C内存管理方式 new/delete操作符 用法 new和delete操作自定义类型 operator new和operator delete函数 operator new ​编辑 operator…

H264 NALU分析

H264简介 H.264从1999年开始&#xff0c;到2003年形成草案&#xff0c;最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c;在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10&#xff0c;⼜叫AdvancedVideo Codec&#xff0c;因此常常称为MPEG-4 AVC或直接叫…

一文概览NLP句法分析:从理论到PyTorch实战解读

本文全面探讨了自然语言处理&#xff08;NLP&#xff09;中句法分析的理论与实践。从句法和语法的定义&#xff0c;到各类句法理论和方法&#xff0c;文章细致入微地解析了句法分析的多个维度。最后&#xff0c;通过PyTorch的实战演示&#xff0c;我们展示了如何将这些理论应用…

云服务器哪家便宜靠谱 | 简单了解亚马逊云科技发展史

云服务器哪家便宜又靠谱呢&#xff1f;为什么说亚马逊云科技在这道题答案的第一行&#xff0c;一篇故事告诉你。 1994年&#xff0c;杰夫贝索斯在西雅图创建了亚马逊&#xff0c;最初只是一个在线书店。 1997年&#xff0c;亚马逊在纳斯达克交易所上市&#xff0c;成为一家公…

webpack的简单使用

什么是webpack&#xff08;去官网看详细的API&#xff09; 本质上&#xff0c;webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口点构建一个 依赖图(dependency graph)&#xff0c;然后将你项…

Linux——手把手教你解决sudo指令无法使用的问题

解决sudo指令无法使用的问题 1. 为什么不能使用 sudo指令能够使某一条指令拥有root权限&#xff0c;即以root权限去执行 例如&#xff1a; sudo ls -l //就是以root权限查看当前目录里的内容但是&#xff0c;如果是新创建的普通账户&#xff0c;一般来说一开始是不能执行s…

访问控制列表

目录 ACL ACL原理 ACL包过滤方式 ACL通用命令 查看ACL表命令 删除整张表命令 接口配置ACL ACL分类 标准ACL 标准ACL的动作与条件 通配符掩码 扩展ACL 扩展ACL的动作与条件 命名ACL 前言 书写方式 ACL 含义&#xff1a;访问控制列表&#xff0c;其是一种包过滤…

计算机基础知识49

三板斧的使用(views.py) 三个方法&#xff1a;HttpResponse: 返回的是字符串render : 返回html文件redirect : 返回加载HTML页面的 def html(request):print(from html)# return HttpResponse(request) # 它返回的是字符串return render(request,html.html) # 返回html# ret…

Jenkins CICD过程常见异常

1 Status [126] Exception when publishing, exception message [Exec exit status not zero. Status [126] 1.1 报错日志 SSH: EXEC: STDOUT/STDERR from command [/app/***/publish.sh] ... bash: /app/***/publish.sh: Permission denied SSH: EXEC: completed after 200…

媒体转码软件Media Encoder 2024 mac中文版功能介绍

Media Encoder 2024 mac是一款媒体转码软件&#xff0c;它可以将视频从一种格式转码为另一种格式&#xff0c;支持H.265、HDR10等多种编码格式&#xff0c;同时优化了视频质量&#xff0c;提高了编码速度。此外&#xff0c;Media Encoder 2024还支持收录、创建代理和输出各种格…

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群

openEuler 系统使用 Docker Compose 容器化部署 Redis Cluster 集群 Redis 的多种模式Redis-Alone 单机模式Redis 单机模式的优缺点 Redis 高可用集群模式Redis-Master/Slaver 主从模式Redis-Master/Slaver 哨兵模式哨兵模式监控的原理Redis 节点主客观下线标记Redis 节点主客观…

使用Nginx和Spring Gateway为SkyWalking的增加登录认证功能

文章目录 1、使用Nginx增加认证。2、使用Spring Gateway增加认证 SkyWalking的可视化后台是没有用户认证功能的&#xff0c;默认下所有知道地址的用户都能访问&#xff0c;官网是建议通过网关增加认证。 本文介绍通过Nginx和Spring Gateway两种方式 1、使用Nginx增加认证。 生…

晶振分频【FPGA】

所有数据对齐晶振。 6分频&#xff1a;【1】 module divider_six // 6分频 【0~2】 ( input wire sys_clk , //系统时钟 50MHz input wire sys_rst_n , //全局复位 output reg clk_out //对系统时钟 6 分频后的信号 );reg [1:0] cnt; //用于计数的寄存器 //cnt:计数器从 0 到…

Flink -- 事件时间 Watermark

1、事件时间&#xff1a; 指的是数据产生的时间或是说是数据发生的时间。 在Flink中有三种时间分别是&#xff1a; Event Time&#xff1a;事件时间&#xff0c;数据产生的时间&#xff0c;可以反应数据真实发生的时间 Infestion Time&#xff1a;事件接收时间 Processing Tim…

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

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

【MySQL习题】各个视频的平均完播率【全网最详细教学】

目录 数据表描述 问题描述 输出示例 解题思路【重点】 正解代码 数据表描述 有以下两张表&#xff1a; 表1&#xff1a;用户-视频互动表tb_user_video_log 数据举例&#xff1a; 说明&#xff1a; uid-用户ID,video_id-视频ID start_time-开始观看时间end_time-结束观…