一、储存单元简介

1.ROM

只读存储器,系统上电后数据就被写入ROM,运行过程中只能从ROM中读取数据,而不能改变ROM中的数值。

2.RAM

随机存取储存器,可以随时把数据写入任一指定地址的储存单元,也可以随时从任一指定地址中读取数据。其读写速度是由时钟频率决定的。RAM主要用来存放程序及程序执行过程中产生的中间数据、运算结果等。适合双向交换数据。

2.1RAM的分类

Altera FPGA的RAM IP核分为两种类型:单端口RAM和双端口RAM。单端口RAM只有一组地址线,这组地址线控制着写数据端口和读数据端口,而双端口RAM具有两组地址线,这两组地址线分别控制着写数据端口和读数据端口。单端口RAM类型和双端口RAM类型在操作上都是一样的。下面以单端口RAM IP核为例。

Data

RAM写数据端口

Address

写使能信号,高电平有效,高电平时data口的数据才能被写入

Wren

写使能信号,高电平有效,高电平时RAM中的数据才能被读出

rden

读使能信号,高电平有效,高电平时RAM中的数据才能被读出

Clken

时钟使能信号,用于控制时钟是否有效

aclr

异步复位信号,高电平有效

Inclock

outclock

单口RAM端口支持双时钟模式和单时钟模式。在双时钟模式下,输入时钟控制存储器模块的输入寄存器,其中包括数据、地址、wren以及rden寄存器;输出时钟控制数据输出寄存器。在单时钟模式下,没有Inclock信号与outclock信号之分,只有一个clock信号,可以通过单时钟以及时钟使能来控制M9K存储器模块中的所有寄存器。

2.2双端口RAM介绍

分为简单双口RAM和真双口RAM两种:

简单双口RAM:一组读数据和读地址线,一组写数据和写地址线,能同时进行读和写操作,但不能同时对同一地址进行读和写操作。

真双口RAM:有两组读数据线线与地址线,两组写数据线与写地址线;能同时进行两个端口读,能同时进行两个端口写,也能一个端口读同时另一个端口写。这个真双口RAM其实就是两个单口RAM组合在一起构成的,只是真双口RAM里的两个单口RAM是操作的同一片存储空间。

3.FIFO

(不寻址,操作简单)适合数据缓冲、跨时钟域数据同步,数据位宽匹配处理。

3.1FIFO的基本介绍

              FIFO的英文全称是First In First Out,即先进先出。FPGA使用的FIFO一般指的是对数据的存储具有先进先出特性的一个缓存器,常被用于数据的缓存或者高速异步数据的交互,也即所谓的跨时钟域信号传递。

它与FPGA内部的RAM和ROM的区别是没有外部读写地址线,采取顺序写入数据,顺序读出数据的方式,使用起来简单方便,由此带来的缺点是不能像RAM和ROM那样可以由地址线决定读取或写入某个指定的地址。

3.2FIFO的分类

FIFO从输入时钟的角度来分,有两种类型:单时钟FIFOSCFIFO双时钟FIFODCFIFO;其中,双时钟FIFO又可从输出数据的位宽的角度,分为普通双时钟(DCFIFO混合宽度双时钟FIFODCFIFO_MIXED_WIDTHS)。

单时钟FIFO具有一个独立的时钟端口clock,因此,所有的输入输出信号都同步于clock信号。

双时钟FIFO结构中,写端口和读端口分别有独立的时钟,所有与写相关的信号都是同步于写时钟wrclk,所有与读相关的信号都是同步于读时钟rdclk。

3.3FIFO的参数

1.FIFO的宽度:FIFO一次读写操作的数据位N;

2.FIFO的深度:FIFO可以储存多少个宽度位N位的数据;

3.空标志:对于双时钟FIFO,又分为读空rdempty和写空标志wrempty;FIFO已空或将要空时由FIFO的状态电路送出的一个信号,以阻止继续从FIFO中读出数据而造成无效数据的读出。

4.满标志:对于双时钟FIFO,又分为读满标志rdfull和写满标志wrfull;FIFO已满或将要写满时由FIFO的状态电路送出的一个信号,以阻止继续向FIFO中写数据而造成溢出。

5.读时钟:读FIFO时所遵循的时钟,在每个时钟的上升沿触发。

6.写时钟:写FIFO时所遵循的时钟,在每个时钟的上升沿触发。

3.4单时钟FIFO和双时钟FIFO的应用场景

1.单时钟FIFO常用于同步时钟的数据缓冲;

2.双时钟FIFO常用于跨时钟域的数据信号的传递,例如时钟域A下的数据data传递给异步时钟域B,当data为连续变化信号时,如果直接传递给时钟域B则可能会导致收非所送的情况,即在采集过程中会出现包括亚稳态(数据采样失真)问题在内的一系列问题,使用双时钟FIFO能将不同时钟域中的数据同步到所需的时钟域中。

二、储存单元测试代码

1.RAM

`timescale  1ns/1nsmodule tb_ram();
//激励信号reg                clk             ;reg                rst_n           ; reg   [07:00]      address         ;reg   [07:00]      data            ;reg                rden            ;reg                wren            ;//观测信号    wire   [07:00] data_out            ;    //模块例化
s_ram_256_8 s_ram_256_8_inst (.aclr       ( ~rst_n  ),.address    ( address ),.clock      ( clk     ),.data       ( data    ),.rden       ( rden    ),.wren       ( wren    ),.q          ( data_out));//系统初始化initial beginclk   = 1'b1;forever begin#10 clk = ~clk;endendinitial beginrst_n =1'b0     ;address = 8'd0  ;data    = 8'h33 ;   rden    = 1'b0  ;wren    = 1'b0  ;#203rst_n = 1'b1    ;//读取一遍储存空间所有数据repeat(256)beginrden    =           1'b1;#20address = address + 8'd1;end        rden = 1'b0;//读取使能关闭//写入数据repeat(256)beginwren  =  1'b1;#20data = data + 8'h2;address = address + 8'd1;endwren = 1'b0;//写入使能关闭#1000;//再次读取repeat(256)beginrden    =           1'b1;#20address = address + 8'd1;end    #1000$stop(2)        ;endendmodule

2.FIFO

`timescale  1ns/1ps
module tb_fifo_test();//激励信号reg            clk;
reg            rst_n;reg  [07:00]  data_in;
reg           wrreq;
reg           rdreq;
wire           rdempty;
wire  [07:00]  rdusedw;
wire           wrfull;
wire  [08:00]  wrusedw;wire [15:00]  data_out;//模块例化
fifo_test U_fifo_test(.clk        (clk)       ,.rst_n      (rst_n)     ,.data_in    (data_in)   ,.wrreq      (wrreq)     ,.rdreq      (rdreq)     ,.rdempty    (rdempty)   ,.rdusedw    (rdusedw)   ,.wrfull     (wrfull)    ,.wrusedw    (wrusedw)   ,.data_out   (data_out)
);//系统初始化initial beginclk   = 1'b1;forever begin#10 clk = ~clk;endendinitial beginrst_n =1'b0            ;data_in    = 8'h0      ;   rdreq      = 1'b0      ;wrreq      = 1'b0      ;#203rst_n = 1'b1           ;//写入数据repeat(512)beginwrreq    =           1'b1;#20data_in  = data_in + 8'h2;end        wrreq = 1'b0;//写入请求关闭//读出数据rdreq  =  1'b1;#10000$stop(2)        ;endendmodule

Altera FPGA 储存单元IP核之RAM、FIFO相关推荐

  1. 【正点原子FPGA连载】第十四章 IP核之RAM实验 -摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  2. 【正点原子MP157连载】 第十四章 IP核之RAM实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  3. 【FPGA】SRIO IP核系统总览以及端口介绍(二)(I/O Port 含义介绍)

    上篇博文:[FPGA]SRIO IP核系统总览以及端口介绍(一)(User Interfaces 之 I/O Port)根据数据手册PG007,介绍到了逻辑层接口的IO口,今天想研究下,这些端口如何使 ...

  4. 【FPGA】SRIO IP核的三层协议的作用?

    SRIO这种高速串口复杂就复杂在它的协议上,三层协议:逻辑层,传输层以及物理层. 数据手册会说这三层协议是干什么的呢?也就是分工([FPGA]SRIO IP核系统总览以及端口介绍(一)(User In ...

  5. 【FPGA】SRIO IP核系统总览以及端口介绍(一)(User Interfaces 之 I/O Port)

    系统总览 RapidIO标准分为三层:逻辑,传输和物理. 逻辑层定义整体协议和数据包格式. 这是端点启动和完成事务(transaction)所必需的信息. 传输层提供数据包从端点移动到端点所需的路由信 ...

  6. 如何测试IP核(RAM为例)

    如何测试IP核(RAM为例) (读出数据有两个时钟的延时) 了解RAM IP 核的几种工作方式. Simple Dual port RAM (简化双口RAM):A端只能写入,B端只能读出. Singl ...

  7. ISE中FIFO IP核的Standard FIFO和First-word-Fall-Through模式的仿真比较

    ISE下的FIFO IP核有Standard FIFO和First-word-Fall-Through两种模式,相对于标准模式FWFT(First-word-Fall-Through)可以不需要读命令 ...

  8. FPGA IP核之RAM

    1.RAM简介 RAM 是随机存取存储器(Random Access Memory)的简称,是一个易失性存储器.RAM 工作时可以随时从任何一个指定的地址写入或读出数据,同时我们还能修改其存储的数据, ...

  9. FPGA 之 SCFIFO IP 核配置

            首先介绍 SCFIFO 的使用.如图 1 所示,在搜索栏中搜索"fifo(大小写均可)"就会显示和 FIFO 相关的所有 IP 核,这里我们选择 Installed ...

最新文章

  1. oracle怎么adi导入,Web adi 导入笔记 详细图解
  2. C语言中| 按位或, || 逻辑或。
  3. 【图像分割应用】医学图像分割小总结
  4. u8 oracle,Linux As3 U8环境下Oracle 9i 9208的安装(二)
  5. 000 SpringMVC介绍
  6. Android模拟器访问本机服务IP地址
  7. python 标准库之 glob 介绍(获取文件夹下所有同类文件)
  8. Java中调用文件中所有bat脚本
  9. python终端会话_如何为Python终端提供持久性历史记录
  10. PyQt学习--HelloWorld
  11. 记录一次失败的Git操作
  12. 在Ubuntu系统下进行引导修复
  13. yarn application -kill application_id yarn kill 超时任务脚本
  14. Object-Oriented Programming Summary Ⅲ
  15. 什么是POJO?没有你想象中那么复杂!
  16. Python数据分析和django建站一般使用工具
  17. 互联网的那点事:商业模式、开放平台、开放开源标准
  18. 在嵌入式x86上构建我的智能家居(home assistant) (三)
  19. python语言创意绘画是什么-Python街机模块的draw系列绘画例子集合
  20. 英伟达FXAA抗锯齿性能实测、画质对比

热门文章

  1. 【金字塔原理2】剖析金字塔的内部结构
  2. 期货、股票资管分仓软件分账户系统APP开发需要用到哪些技术?
  3. Python单词反写、单词倒排
  4. BS4爬取电影天堂的下载地址并保存至csv文件(一)
  5. Scrapy之10行代码爬下电影天堂全站
  6. android火焰图分析,android实现简单的火焰效果
  7. Matlab2022a无法识别vs2019编译器,未检测到支持的编译器,错误使用Mex -setup error cannot find support compiler
  8. Arduion实验九 轻触开关实验
  9. 安全多方计算之四:比特承诺
  10. Minecraft 开服记录 自动备份