Vivado综合属性SRL_STYLE怎么用?

2024-04-20 16:12

本文主要是介绍Vivado综合属性SRL_STYLE怎么用?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

“SRL_STYLE”属性是Vivado中用于控制移位寄存器(Shift Register Logic, SRL)映射方式的关键属性。

本文将详细介绍SRL_STYLE的工作原理、可选值及其在实际设计中的应用代码示例。

一、什么是SRL_STYLE?

SRL_STYLE属性用于指导Vivado综合工具如何将SRL映射为硬件实现。

在Xilinx FPGA中,SRL可以由不同类型的硬件资源实现,包括寄存器(Flip-Flops)、查找表(LUTs)以及块RAM(Block RAM)。

不同的实现方式具有不同的性能特点和资源消耗,因此选择合适的SRL_STYLE对于优化设计至关重要。

二、什么是移位寄存器?

移位寄存器是一种重要的数字逻辑电路,它能够在时钟信号的驱动下,将存储的数据按位进行左移或右移。

这种电路在串行通信、数据处理和存储器设计中有着广泛的应用。

三、SRL_STYLE的可选值

“SRL_STYLE”属性有六个可选值,分别是:

1、register

使用纯寄存器(Flip-Flops)实现SRL,默认是这个属性。

这种方式通常提供较好的时序性能,因为寄存器的时钟到输出的延迟(Tco)较小。

2、srl

使用查找表(LUT)来实现SRL。

这种方式可以节省寄存器资源,适用于小深度的SRL。

3、srl_reg

使用LUT和触发器的组合来实现SRL,最后一级深度使用触发器。

这种方式结合了LUT和寄存器的优点,适用于中等深度的SRL。

4、reg_srl

同时使用寄存器和LUT资源实现SRL,寄存器放在第一级。

这种方式适用于需要在SRL的输出端提供较好的时序特性的场景。

5、reg_srl_reg

第一级和最后一级深度使用触发器,中间级别使用LUT。

这种方式在SRL的两端使用寄存器,中间使用LUT,适用于需要两端时序保证的SRL。

6、block

使用块RAM(BRAM)来实现SRL。

对于大深度的SRL,这种方式可以有效节省LUT资源,并且提供稳定的存储能力。

四、SRL_STYLE的影响因素

1、性能

不同的SRL_STYLE实现方式对时序性能有不同的影响。

例如,寄存器实现的SRL通常具有更好的时序特性,而LUT实现的SRL可能在某些情况下提供更高的数据吞吐量。

2、资源消耗

SRL_STYLE的选择直接影响设计中LUT和寄存器的消耗。

例如,使用block实现方式可以节省大量的LUT资源,但可能会增加BRAM的使用。

一般不用使用默认的register就行,因为实际项目中大部分是LUT和BRAM资源不够用,FF资源都有富余。

3、功耗

不同的实现方式也会影响设计的静态和动态功耗。

寄存器实现的SRL可能具有较低的静态功耗,而LUT实现的SRL在活动因子较低时可能具有较低的动态功耗

五、如何使用SRL_STYLE?

为了更好地理解SRL_STYLE的应用,我们来看一个简单的设计示例。

假设我们需要实现一个4位移位寄存器,我们将使用不同的SRL_STYLE选项来展示它们的实现方式。

1、使用register选项

module srl_register_example (input wire clk,input wire data_in,output wire data_out
);parameter SHIFT = 4;reg [SHIFT-1:0] reg_shift;always @(posedge clk) beginreg_shift <= {data_in, reg_shift[SHIFT-1:1]};endassign data_out = reg_shift[0];endmodule

 

在这个例子中,我们没有SRL_STYLE属性,实际就是用了register选项,综合工具将使用触发器来实现SRL。

2、使用srl选项

module srl_lut_example (input wire clk,input wire data_in,output wire data_out
);
parameter SHIFT = 4;(* SRL_STYLE = "srl" *)  reg [SHIFT-1:0];always @(posedge clk) beginreg_shift <= {data_in, reg_shift[SHIFT-1:1]};end
assign data_out = reg_shift[0];endmodule

 

这里,我们指定了SRL_STYLE为srl,综合工具将使用LUT来实现SRL。

3、使用block选项

module srl_block_example (input wire clk,input wire [3:0] data_in,output wire [3:0] data_out
);
parameter SHIFT = 4;
(* SRL_STYLE = "block" *)  reg [4*SHIFT-1:0] block_srl;always @(posedge clk) beginblock_srl <= {data_in, block_srl[4*SHIFT-1:4]};
endassign data_out = block_srl[3:0];
endmodule

在这个例子中,我们使用了`block`选项,综合工具将使用BRAM来实现SRL。

六、结论

`SRL_STYLE`属性为FPGA设计师提供了灵活的SRL实现选项,可以根据设计的具体需求来选择最合适的实现方式,实现性能、资源和功耗之间的最佳平衡。

一般不用使用默认的register就行,因为实际项目中大部分是LUT和BRAM资源不够用,FF资源都有富余。


本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦

本文由FPGA入门到精通原创,有任何问题,都可以在评论区和我交流哦

@FPGA入门到精通获取免费学习资料,github开源代码:“FPGA知识库”

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。

这篇关于Vivado综合属性SRL_STYLE怎么用?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920720

相关文章

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

电脑开机提示krpt.dll丢失怎么解决? krpt.dll文件缺失的多种解决办法

《电脑开机提示krpt.dll丢失怎么解决?krpt.dll文件缺失的多种解决办法》krpt.dll是Windows操作系统中的一个动态链接库文件,它对于系统的正常运行起着重要的作用,本文将详细介绍... 在使用 Windows 操作系统的过程中,用户有时会遇到各种错误提示,其中“找不到 krpt.dll”

HTML5 data-*自定义数据属性的示例代码

《HTML5data-*自定义数据属性的示例代码》HTML5的自定义数据属性(data-*)提供了一种标准化的方法在HTML元素上存储额外信息,可以通过JavaScript访问、修改和在CSS中使用... 目录引言基本概念使用自定义数据属性1. 在 html 中定义2. 通过 JavaScript 访问3.

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题

《解读为什么@Autowired在属性上被警告,在setter方法上不被警告问题》在Spring开发中,@Autowired注解常用于实现依赖注入,它可以应用于类的属性、构造器或setter方法上,然... 目录1. 为什么 @Autowired 在属性上被警告?1.1 隐式依赖注入1.2 IDE 的警告:

HTML5中下拉框<select>标签的属性和样式详解

《HTML5中下拉框<select>标签的属性和样式详解》在HTML5中,下拉框(select标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中选择值的方式,本文将深入探讨select标签的... 在html5中,下拉框(<select>标签)作为表单的重要组成部分,为用户提供了一个从预定义选项中

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li