Altera FPGA 储存单元IP核之RAM、FIFO

这篇具有很好参考价值的文章主要介绍了Altera FPGA 储存单元IP核之RAM、FIFO。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、储存单元简介

    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能将不同时钟域中的数据同步到所需的时钟域中。文章来源地址https://www.toymoban.com/news/detail-402259.html

二、储存单元测试代码

            1.RAM

`timescale  1ns/1ns

module 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 begin
        clk   = 1'b1;
        forever begin
            #10 clk = ~clk;
        end
    end
    
    initial begin
        rst_n =1'b0     ;
        address = 8'd0  ;
        data    = 8'h33 ;   
        rden    = 1'b0  ;
        wren    = 1'b0  ;
        #203
        rst_n = 1'b1    ;
        
        //读取一遍储存空间所有数据
        repeat(256)begin
            rden    =           1'b1;
            #20
            address = address + 8'd1;
        end        
        
        rden = 1'b0;//读取使能关闭

        //写入数据
        repeat(256)begin
            wren  =  1'b1;
            #20
            data = data + 8'h2;
            address = address + 8'd1;
        end
        
        wren = 1'b0;//写入使能关闭
        #1000;

        //再次读取
        repeat(256)begin
            rden    =           1'b1;
            #20
            address = address + 8'd1;
        end    

        #1000
        $stop(2)        ;
    end

endmodule

           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 begin
        clk   = 1'b1;
        forever begin
            #10 clk = ~clk;
        end
    end
    
    initial begin
        rst_n =1'b0            ;
        data_in    = 8'h0      ;   
        rdreq      = 1'b0      ;
        wrreq      = 1'b0      ;
        #203
        rst_n = 1'b1           ;
        
        //写入数据
        repeat(512)begin
            wrreq    =           1'b1;
            #20
            data_in  = data_in + 8'h2;
        end        
        
        wrreq = 1'b0;//写入请求关闭

        //读出数据
            rdreq  =  1'b1;
        #10000
        $stop(2)        ;
    end

endmodule

到了这里,关于Altera FPGA 储存单元IP核之RAM、FIFO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • #FPGA(IP_RAM 调用 )

    1.IDE:Quartus II 2.设备:Cyclone II  EP2C8Q208C8N   3.实验:调用单端口RAM仿真读取写入 4.时序图: 5.步骤: (1)添加一个初始化文件做对比,255递减到0(HEX文件) (2)仿真时出现报错,为配置的ram的.v文件没有添加,按如下方式解决。   6.代码: ram_ctrl.v tb_ram_ctrl.v  

    2024年02月19日
    浏览(35)
  • FPGA简单双端口RAM——IP核

    环境: 1、Quartus18.0 2、vscode 3、板子型号:原子哥开拓者2(EP4CE10F17C8) 要求: 使用 Altera RAM IP 核生成一个简单双端口的 RAM,然后对 RAM 进行读写操作,并通过 Modelsim 软件进行仿真及 SignalTap 软件进行在线调试。 由前面的单端口学习我们知道RAM IP核分为单端口RAM以及双端口RAM,

    2024年02月07日
    浏览(41)
  • FPGA-基本IP核的应用之RAM

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

    2024年02月16日
    浏览(46)
  • FPGA | RAM IP端口输出延迟问题解决

    Vivado中调用RAM IP,端口输出有延迟 版本器件 Version Vivado 2021.2 ZYNQ 7020 问题描述 ram_wea 信号拉低后,RAM读出数据有两个时钟的延迟 解决方式 在 Summary 中可以看到端口的读出延迟,关于该选项的具体使用方式可以参考Xilinx的数据手册:

    2024年02月16日
    浏览(40)
  • FPGA原理与结构——RAM IP核原理学习

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、什么是RAM 二、RAM IP介绍 1、RAM分类简介  2、可选的内存算法 (1)Minimum Area Algorithm(最小面积算法) (2)Low Power Algorithm (低功耗算法) (3)Fixed Primitive Algorithm (固定模块算法) (4)小结 3、位宽 4、工作模

    2024年02月12日
    浏览(40)
  • FPGA原理与结构(9)——RAM IP核原理学习

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、什么是RAM 二、RAM IP介绍 1、RAM分类简介  2、可选的内存算法 (1)Minimum Area Algorithm(最小面积算法) (2)Low Power Algorithm (低功耗算法) (3)Fixed Primitive Algorithm (固定模块算法) (4)小结 3、位宽 4、工作模

    2024年02月01日
    浏览(41)
  • FPGA vivado IP核学习笔记——单端口RAM

    1. 新建IP 在IP Catalog中找到Block Memory Generator 2. 基本配置 ①在 Component Name 位置可以修改IP名字 ② Interface Type 选择接口类型,有Native(常规)和AXI4两种,AXI4常用于软核控制FPGA或ZYNQ中PS端控制FPGA时使用 ③ Generate address interface with 31 bits ,将地址深度固定在32bit ④ Memory Type : 有一

    2024年04月29日
    浏览(39)
  • FPGA原理与结构——RAM IP核的使用与测试

    系列文章目录:FPGA原理与结构(0)——目录与传送门 目录 一、前言 二、RAM IP核定制 1、RAM IP核 step1 打开vivado工程,点击左侧栏中的IP Catalog step2 在搜索栏搜索RAM,找到Block Memory Generator IP核: 2、IP核定制 step3 Baisc界面定制 step4 端口定制 step5 Other Options step6 Summary 3、IP核例化

    2024年02月11日
    浏览(38)
  • FPGA_学习_11_IP核_RAM_乒乓操作

    本篇博客学习另一个IP核,RAM。 用RAM实现什么功能呢? 实现 乒乓操作。 乒乓操作是什么呢? 参考: FPGA中的乒乓操作思想_fpga中乒乓操作的原因_小林家的龙小年的博客-CSDN博客 何为乒乓操作_fanyuandrj的博客-CSDN博客 以下是本人理解: 乒乓操作可以实现低速模块处理高速数据

    2024年02月09日
    浏览(41)
  • [FPGA IP系列] FPGA常用存储资源大全(RAM、ROM、CAM、SRAM、DRAM、FLASH)

    本文主要介绍FPGA中常用的RAM、ROM、CAM、SRAM、DRAM、FLASH等资源。 RAM(Random Access Memory)是FPGA中最基本和常用的内部存储块,根据不同架构可以实现不同容量,最大可达几十Mb。 FPGA中的RAM主要包括: 分布式RAM:存在于逻辑块(LE)中的小容量RAM,通常为几百比特到几千比特。 块RAM:F

    2024年02月12日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包