作者:桂。

时间:2018-05-14  12:11:00

链接:http://www.cnblogs.com/xingshansi/p/9035522.html


前言

一、双端口RAM简述

具体细节参考ug473_7Series_Memory_Resources.pdf.

DUAL PORT RAM应用实例-LMLPHP

这里直接调用IP核。

二、IP核参数简述

     A-Page1

DUAL PORT RAM应用实例-LMLPHP

  • Common Clock:同源时钟
  • Generate adderss..:默认32bit地址,否则根据深度自动调节
  • ECC:纠错
其他略.
     B-Page2
  • Read First Operating Mode is supported when the Common Clock option is selected.

DUAL PORT RAM应用实例-LMLPHP

  • no change mode

DUAL PORT RAM应用实例-LMLPHP

这里使用,通常选择no change mode。

     C-Page3

DUAL PORT RAM应用实例-LMLPHP

Port-A is used for write, and Port-B is used for read.(原语调用需要注意)
(PORT A/B同理):
DUAL PORT RAM应用实例-LMLPHP

在输出添加一个锁存器,即多延1拍,保证时序良好

DUAL PORT RAM应用实例-LMLPHP

     D-Page4

DUAL PORT RAM应用实例-LMLPHP 
其他略。
     E-Page5
略。

三、仿真验证

Testbench:

`timescale 1ns / 1ps
/*
Function: DPRAM for data aligned
Author: Gui.
Data: 2018年5月14日12:49:07
*/
module dpram_tb;
//parameter
//parameter datwidth = 18;
parameter delay = ;
parameter start = ;
//port
logic clk,rst;
logic [:] datin1;
logic [:] datin2;
logic [:] datout;
logic [:] addra, addrb, counter, delayest;
logic [:] flag;//FSM
//initial
initial begin
clk = ;
rst = ;
#
rst = ;
#
$stop;
end always # clk = ~clk; always @(posedge clk)
begin
if(rst) begin
datin1 <= ;
datin2 <= ;
counter <= ;
end
else begin
counter <= counter+;
if(counter == start)
begin
datin1 <= {'b1,17'b0};
end
else begin
datin1 <= ;
end
if (counter == (start + delay ))
begin
datin2 <= {'b1,17'b0};
end
else begin
datin2 <= ;
end
end
end //flag control
always @(posedge clk)
begin
if(rst)
begin
delayest <= ;
addra <= ; //for primitive output register
addrb <= ;
flag <= ;
end
else begin
if (flag == 'b00)
begin
if(datout[])
begin
delayest <= ;
flag <= 'b01;
end
end
if (flag == 'b01)
begin
delayest <= delayest + ;
end
if ((flag == 'b01) & datin2[17])
begin
flag <= 'b10;
end
if (flag == 'b10)
begin
addra <= addra + delayest + ;
flag <= 'b11;//next flag state
end
else begin
addra <= addra + ;
end
addrb <= addrb + ;
end
end
//IP
blk_mem_gen_0 uut(
.clka(clk),
.wea('b1),
.addra(addra),
.dina(datin1),
.clkb(clk),
.addrb(addrb),
.doutb(datout)
); endmodule 

DUAL PORT RAM应用实例-LMLPHP

datout是datin1的修正,可见datin1修正后的结果—>datout 已经与datin2对齐。

04-26 17:25
查看更多