Vivado綜合屬性系列之二 SRL_STYLE
一、前言
? ? ? ? 移位寄存器SRL在工程中屬于使用頻率較高個(gè)模塊,可用于存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)串并轉(zhuǎn)換;
根據(jù)數(shù)據(jù)移動(dòng)方向可分為左移寄存器,右移寄存器,左移是向數(shù)據(jù)高位移動(dòng),右移是向數(shù)據(jù)低位移動(dòng)。
二、SRL_STYLE
? ? ? ? 2.1 移位寄存器實(shí)現(xiàn)方式
? ? ? ? 移位寄存器的實(shí)現(xiàn)方式多樣,可以用寄存器,LUT,以及寄存器+LUT組合來(lái)實(shí)現(xiàn),以及塊狀RAM來(lái)實(shí)現(xiàn),對(duì)于采用哪種方式,Vivado提供了屬性SRL_STYLE來(lái)控制生成方式,SRL_STYLE的可選值有6個(gè),register,srl,srl_reg,reg_srl,reg_srl_reg,block,含義如下
register: 只使用寄存器來(lái)實(shí)現(xiàn),不使用LUT資源
srl:不使用寄存器資源,只使用LUT來(lái)實(shí)現(xiàn)
srl_reg:同時(shí)使用LUT和寄存器來(lái)實(shí)現(xiàn),并將寄存器放在最后一級(jí)
reg_srl: 同時(shí)使用寄存器和LUT資源來(lái)實(shí)現(xiàn),寄存器放在第一級(jí)
reg_srl_reg:同時(shí)使用寄存器和LUT資源來(lái)實(shí)現(xiàn),第一級(jí)和最后一級(jí)都為寄存器
block:使用塊狀RAM來(lái)實(shí)現(xiàn)
? ? ? ? 不同的實(shí)現(xiàn)方式主要是對(duì)資源和時(shí)序的影響不同,通常,如果要時(shí)序性能佳,盡量避免最后一級(jí)用LUT來(lái)實(shí)現(xiàn),如果是移位的深度較大,建議使用Block ram實(shí)現(xiàn),可節(jié)省寄存器和LUT資源。
? ? ? ? 2.2 工程代碼
此處為一個(gè)12位右移寄存器的代碼,設(shè)置實(shí)現(xiàn)方式為register
`timescale 1ns / 1ps
module srl_style( d,ce,clk,out );
parameter len=12;
input d,ce,clk;
output out;
(* SRL_STYLE="block"*) reg [len-1:0] srl; ? //使用寄存器來(lái)實(shí)現(xiàn)移位寄存器
always@(posedge clk)
begin?
if(ce==1'b1)
srl[len-1:1]<=srl[len-2:0];
srl[0]<=d;
end
assign out=srl[len-1];
endmodule
? ? ? ? 綜合結(jié)果如下圖,通過(guò)網(wǎng)表圖可布局布線結(jié)果可知,使用了12個(gè)FDRE來(lái)實(shí)現(xiàn)?

????????將屬性SRL_STYLE改為SRL,實(shí)現(xiàn)使用了SRL16E,無(wú)寄存器?

????????將屬性SRL_STYLE改為BLOCK,此時(shí)實(shí)現(xiàn)采用了RAMB 18E1

????????2.3 屬性失效
? ? ? ? 對(duì)于移位寄存器多位輸出時(shí),通過(guò)此種方式設(shè)置是不起作用的,此時(shí)無(wú)論如何設(shè)置都將是用寄存器實(shí)現(xiàn)