作者:桂。

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

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


前言

主要是Xilinx 常用模块汇总(verilog)【03】中双端口RAM的细节补充,限于篇幅,单独列出。

一、双端口RAM简述

具体细节参考ug473_7Series_Memory_Resources.pdf.

这里直接调用IP核。

二、IP核参数简述

     A-Page1

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

  • no change mode

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

     C-Page3

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

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

     D-Page4

 
其他略。
     E-Page5
略。

三、仿真验证

任务要求【简化】

两路周期为64clocks【对应最大延迟数】的数据链,相差delay clocks,现在需要用DUAL PORT RAM进行对齐处理。

思路分析

1)选1路为参考,一路进入DUAL PORT RAM修正;

2)修正思路:对于脉冲信号,信号高为有效->判断延拍数—>根据延拍数进行地址偏移->输出对齐的数据。

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 

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

DUAL PORT RAM应用实例的更多相关文章

  1. Xilinx ISE 14.1中模拟True Dual Port RAM例子

    <一>创建工程 创建工程在此略过. <二>基本代码 1.创建一个Verilog modual代码如下: module main( input clk, input rsta, ...

  2. AHB总线RAM Verilog实例

    //*************************************************************************** // Copyright(c)2017, L ...

  3. Xilinx 常用模块汇总(verilog)【03】

    作者:桂. 时间:2018-05-10  2018-05-10  21:03:44 链接:http://www.cnblogs.com/xingshansi/p/9021919.html 前言 主要记 ...

  4. 单双口RAM

    // Quartus II Verilog Template// Simple Dual Port RAM with separate read/write addresses and// singl ...

  5. RAM建模和初始化

    冯诺依曼提出的存储计算,计算存储,因此,几乎所有的CPU和ASIC都会使用存储器,它们的类型很多,包括异步RAM.同步RAM.ZBT RAM.DDR DRAM.ROM等.由于大部分的异步RAM和SRA ...

  6. [RAM] FPGA的学习笔记——RAM

    1.RAM——随机存取存储器, 分为SRAM和DRAM. SRAM:存和取得速度快,操作简单.然而,成本高,很难做到很大.FPGA的片内存储器,就是一种SRAM,用来存放程序,以及程序执行过程中,产生 ...

  7. 单口 RAM、伪双口 RAM、真双口 RAM、单口 ROM、双口 ROM 到底有什么区别呢?

    打开 IP Catalog,搜索 Block Memory Generator,即可看到其 Memory Type 可分为 5 中,分别是单口 RAM(Single Port RAM).伪双口 RAM ...

  8. IP核——RAM

    一.Quartus 1.打开Quartus ii,点击Tools---MegaWizard Plug-In Manager 2.弹出创建页面,选择Creat a new custom megafunc ...

  9. Vivado的helloword计划(一个):硬件project部分

    硬件平台:ZedBoard 软件平台:vivado2013.3 本演示样例通过综合.实现,生成比特流,发送到SDK实现. 启动vivado而且创建一个项目 依据提示操作一步步创建新项目的时候记得选择R ...

随机推荐

  1. Python hashlib、hmac加密模块

    #用于加密的相关操作,3.x里代替了md5模块和sha模块,主要提供sha1,sha224,sha256,sha384,sha512,md5算法 #sha2为主流加密算法,md5加密方式不如sha2 ...

  2. jQuery动态设置样式(style、css)

    一.jQuery设置css样式 <div style="background-color:#ffffff;padding-left:10px;">测试jQuery动态获 ...

  3. <构建之法>阅读笔记6

    第九章:项目经理 是讲项目经理的作用功能和重要性,书里面主要讲的是微软的PM(Programe Manager)和其他团队PM(Project Manager)的区别,还介绍了PM的能力要求以及人物, ...

  4. java构造代码块与静态代码块

    一:构造代码块 1.概述 作用:给对象初始化. 优先级:优先于对象的构造函数之前执行. { /*构造代码块的代码*/ } 给所有的对象统一的初始化,而构造函数只是给特定的对象初始化,因为构造函数可以重 ...

  5. unity 之 no cameras rendering

    相机被隐藏或删除了 应该是你的代码摧毁了全部的东西,包括摄像机,所以就会提示你没有摄像机了. 或者说你将  OnClose(); 这段代码的脚本赋给了摄像机

  6. 最全Python爬虫总结(转载)

    [html] view plain copy 最近总是要爬取一些东西,索性就把Python爬虫的相关内容都总结起来了,自己多动手还是好. (1)普通的内容爬取(2)保存爬取的图片/视频和文件和网页(3 ...

  7. P1007 独木桥

    P1007 独木桥最少的话是同时朝一个方向,最多可以这样考虑,碰头时不是转向吗?它等价于穿过另一个人,也就是两个人交换,最后取最大值就好了. #include<iostream> usin ...

  8. Pytorch 基础

    Pytorch 1.0.0 学习笔记: Pytorch 的学习可以参考:Welcome to PyTorch Tutorials Pytorch 是什么? 快速上手 Pytorch! Tensors( ...

  9. 使用starUML一步一步画顺序图

    顺序图:是UML中能表现出一个过程中各个详细步骤的模型图,过程可以理解为一个功能的执行过程. 下面我们以一个简单的影院管理系统中售票功能为例来一步一步完成顺序图的构建. 建模工具:starUML 版本 ...

  10. JS-最全的创建对象的方式

    JS最全创建对象方式汇总 1.最简单的方式--创建一个Object实例 var person = new Object(); //创建实例 person.name = "BlueBeginn ...