当前位置:   article > 正文

Vivado综合属性之SRL_STYLE

srl_style

本文介绍综合属性SRL_STYLE取register、srl、srl_reg、reg_srl、reg_srl_reg和block中的值时,对Schematic的影响。

SRL_STYLE用于指导Vivado将SRL(移位寄存器)映射为何种形式。

目录

默认值

测试代码

原理图

SRL_STYLE配置为register

测试代码

原理图

SRL_STYLE配置为srl

测试代码

原理图

对应的Device视图

资源利用率

SRL_STYLE配置为srl_reg

测试代码

 原理图

SRL_STYLE配置为reg_srl

测试代码

原理图

SRL_STYLE配置为reg_srl_reg

测试代码

原理图

SRL_STYLE配置为block

测试代码

原理图

Device视图

资源利用率


默认值

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

综合后的Schematic如下: 

原理图

FDRE表示一个单D型触发器。 

SRL_STYLE配置为register

用FF(Flip Flop,触发器)生成SRL。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "register"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

原理图

SRL_STYLE配置为srl

用LUT生成SRL。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "srl"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

原理图

SRL16E表示一个可以最大实现16位移位寄存的移位寄存器。 

对应的Device视图

 

红色大框框表示一个SLICEM,红色MARK对应上上图的SRL16E,上图将红色MARK部分放大,可以看出SRL16E其实是LUT构成的,见下图。

资源利用率

资源利用率报告中的LUT是指设计中消耗的所有LUT,包括SLICEL中的LUT和SLICEM中的LUT。

资源利用率报告中的LUTRAM是指设计中消耗的SLICEM中的LUT。

SRL_STYLE配置为srl_reg

用LUT和FF(Flip Flop,触发器)生成SRL,最后一级深度用FF。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "srl_reg"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

 原理图

SRL_STYLE配置为reg_srl

第一级深度用FF(Flip Flop,触发器),其他用LUT。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "reg_srl"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

原理图

SRL_STYLE配置为reg_srl_reg

第一和最后一级深度用FF(Flip Flop,触发器),其他用LUT。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "reg_srl_reg"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

原理图

SRL_STYLE配置为block

用BRAM生成SRL。

测试代码

  1. module top(
  2. input clk_i,
  3. input data_i,
  4. output data_o);
  5. parameter SHIFT = 4;
  6. (*srl_style = "block"*) reg[SHIFT-1:0] reg_shift;
  7. always @(posedge clk_i)
  8. begin
  9. reg_shift <={data_i,reg_shift[SHIFT-1:1]};
  10. end
  11. assign data_o = reg_shift[0];
  12. endmodule

原理图

RAMB18E2表示UltraScale系列FPGA(我的环境是XCZU21DR)使用Block RAM构成的18Kb 存储单元。

Device视图

 

 黄色框框表示1个Block RAM。

资源利用率

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/321451
推荐阅读
  

闽ICP备14008679号