介绍(针对K7系列)
\quad
SLICEM可以不用SLICE中的FF生成一个最大深度为32bit的移位寄存器。用这种方法,每个LUT能够延迟串行数据1~32个时钟周期。
\quad
移位寄存器的输入端D和输出端Q31可以级联成一个更大的移位寄存器。可以将不同的SLICEM组合成一个移位寄存器。
\quad
LUT的地址A[4:0]可以选择在第几级深度输出数据,深度等于地址数值加一。输出端口为Q6 。
\quad
每个SLICEM有4个LUT,可以输入8bit位宽的数据。
特性
1)单时钟沿操作
2)时钟使能,高电平有效
3)D输入端的数据输入移位寄存器的第一个bit
4)每一个bit移位到下一个高bit位置
5)在级联模式下,在Q31端口输出数据
6)A[4:0]选择输出的bit位(深度),在Q6口输出数据
动态读取
1)A[4:0]地址决定了Q输出的深度
2)每一个新地址输入到A[4:0]地址上,经过一段时间延迟后到达LUT。一个新bit深度的数据将会出现在Q6上。
3)这个操作是异步的,独立于时钟和时钟使能。
命令
(srl_style = “ ”)
可选择的属性有:
register:用FF生成SRL
srl:用LUT生成SRL
srl_reg:用LUT和FF生成SRL,最后一级深度用FF
reg_srl:第一级深度用FF,其他用LUT
reg_srl_reg:第一和最后级深度用FF,其他用LUT
block:用BRAM生成SRL
srl_style命令只能用于静态读取操作!
例:
1)LUT生成SRL
(*srl_style = "srl"*)reg [3:0] temp[0:7];
integer i;
always @(posedge clk)begin
temp [0] = in;
for(i=0;i<7;i=i+1)
begin:loop
temp[i+1] <= temp[i];
end
end
assign out = temp[7];
2)FF生成SRL
(*srl_style = "register"*)reg [3:0] temp[0:7];
integer i;
always @(posedge clk)begin
temp [0] = in;
for(i=0;i<7;i=i+1)
begin:loop
temp[i+1] <= temp[i];
end
end
assign out = temp[7];