在ISE11版本中,基于SRL16的分布式RAM不再支持V5、S6和V6等器件,但是SRL16是所有XIlinx器件都支持的,并且在设计中应用非常频繁,因此可通过调用原语的方法来调用SRL16E甚至SRL32E来实现原来ISE分布式RAM IP核的设计。下面给出一段示例代码。
module s2p_8channels_srl16(
a, d, clk, we, qspo
);
input [3:0] a;
input [4:0] d;
input clk;
input we;
output [4:0] qspo;
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16_inst_1 (
.Q(qspo[0]), input
.A2(a[2]), // Select[2] input
.A3(a[3]), // Select[3] input
.CE(we),
.CLK(clk), // Clock input
.D(d[0]) // SRL data input
);
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16_inst_2 (
.Q(qspo[1]), // SRL data output
.A0(a[0]), // Select[0] input
.A1(a[1]), // Select[1] input
.A2(a[2]), // Select[2] input
.A3(a[3]), // Select[3] input
.CE(we),
.CLK(clk), // Clock input
.D(d[1]) // SRL data input
);
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16_inst_3 (
.Q(qspo[2]), // SRL data output
.A0(a[0]), // Select[0] input
.A1(a[1]), // Select[1] input
.A2(a[2]), // Select[2] input
.A3(a[3]), // Select[3] input
.CE(we),
.CLK(clk), // Clock input
.D(d[2]) // SRL data input
);
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16_inst_4 (
.Q(qspo[3]), // SRL data output
.A0(a[0]), // Select[0] input
.A1(a[1]), // Select[1] input
.A2(a[2]), // Select[2] input
.A3(a[3]), // Select[3] input
.CE(we),
.CLK(clk), // Clock input
.D(d[3]) // SRL data input
);
SRL16E #(
.INIT(16'h0000) // Initial Value of Shift Register
) SRL16_inst_5 (
.Q(qspo[4]), // SRL data output
.A0(a[0]), // Select[0] input
.A1(a[1]), // Select[1] input
.A2(a[2]), // Select[2] input
.A3(a[3]), // Select[3] input
.CE(we),
.CLK(clk), // Clock input
.D(d[4]) // SRL data input
);
endmodule
【整理】SRL16_RAM介绍
摘自http://www.eefocus.com/html/08-03/37473s.shtml
【整理】SRL16_RAM使用IP core设计
即,读地址总线的低四位还要作为写地址的低四位,写地址仅输入除低四位的其他位。
摘自ISE分布RAM IP Core数据手册
文章评论(0条评论)
登录后参与讨论