FPGA-基本IP核的应用之RAM

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

一、RAM介绍

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

RAM的端口有单端口和双端口:

fpga ram,FPGA学习,fpga开发

 fpga ram,FPGA学习,fpga开发

 fpga ram,FPGA学习,fpga开发

其他类型的存储器还有:

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

(2)FIFO(不寻址,操作简单):适合数据缓冲和跨时钟域数据同步处理

RAM、ROM、FIFO都是FPGA提供的存储单元。

二、创建IP核

以上一篇文章为参考,创建RAM IP 核

找到图中RAM IP 的设置位置:

fpga ram,FPGA学习,fpga开发

在ip工程文件夹下创建ram_1port.v文件,并导入,进入ip核参数设置。

输入输出数据位宽设置为8bits,64个字节(64个存储单元,一个字节8bits),可以看到左下角可以存储1M9K大小的数据,最大显示64字节所用的地址位宽为6位;存储的样式设为自动,一般默认M9K;输出输出共用同一个时钟,即设为单时钟。

fpga ram,FPGA学习,fpga开发

 进入next,选择输出作为寄存器(插入了一个寄存器),勾选清零,即进行异步复位;勾选使能信号:(注意,此处的输出时钟,只是针对于输出端的寄存器,而不针对于输出端口,即‘q’output port被设置为寄存器,所以数据丢失是在引脚和输出端口之间的寄存器的位置)

fpga ram,FPGA学习,fpga开发

 点击next:

fpga ram,FPGA学习,fpga开发

无需选择初始化:

fpga ram,FPGA学习,fpga开发 接下来就是同样的步骤:

fpga ram,FPGA学习,fpga开发

fpga ram,FPGA学习,fpga开发

 添加进工程里:

fpga ram,FPGA学习,fpga开发

fpga ram,FPGA学习,fpga开发

三、硬件语言描述

(1)顶层文件:

module test_ip (

    input          rst_n,

    input          clk,

    input  [5:0]   address,

    input  [7:0]   data,

    input          wren,

    input          rden,

    output [7:0]   q  

);

//在调用ram时,此时pll中的时钟信号就变为了中间信号

    wire       c0      ;//25M

    wire       c1      ;//100M,90°相移

    wire       c2      ;//100M

    wire       c3      ;//25M,25%占空比

    wire       c4      ;//70M

    wire       locked  ;

    wire       inclk   ;//添加时钟中间信号,便于更改时钟

    assign     inclk = c2 & locked;//locked观察时钟是否锁定,为了不影响ram所以&locked

                                   //能看到输出稳定的时钟信号,如果不&,c2输出时钟就为不定态

   

    pll pll_inst (

    .areset ( ~rst_n ),//根据手册,pll复位高电平有效,而设计的rst_n为低电平有效

    .inclk0 ( clk    ),

    .c0     ( c0     ),

    .c1     ( c1     ),

    .c2     ( c2     ),

    .c3     ( c3     ),

    .c4     ( c4     ),

    .locked ( locked )

    );

    ram_1port   ram_1port_inst (

    .aclr    ( ~rst_n  ),//复位信号低电平有效,手册ram高电平有效

    .address ( address ),

    .clock   ( inclk   ),//选用100M时钟

    .data    ( data    ),

    .rden    ( rden    ),

    .wren    ( wren    ),

    .q       ( q       )

    );

endmodule

(2) 测试文件:

`timescale 1ns/1ps

module test_tb();

    reg         rst_n   ;

    reg         clk     ;

    reg [5:0]   address ;

    reg [7:0]   data    ;

    reg         wren    ;

    reg         rden    ;

    wire[7:0]   q       ;    

   

parameter CYCLE = 20;

    test_ip u_test_ip (

    .rst_n    ( rst_n   ),

    .clk      ( clk     ),

    .address  ( address ),

    .data     ( data    ),

    .wren     ( wren    ),

    .rden     ( rden    ),

    .q        ( q       )

    );

    integer i ;//加入i个存储单位(字节),ram中设置的64个字节

initial begin

    clk = 1'b1;

    rst_n = 1'b1;

    #(2*CYCLE);

    rst_n = 1'b0;

    //时钟复位后给所有信号一个初值

    address = 0 ;

    data    = 0 ;

    wren    = 0 ;

    rden    = 0 ;

    //延迟5个周期释放

    #(5*CYCLE);

    rst_n = 1'b1;

    #(CYCLE*10);//延迟10个时钟是为了打开时钟锁得到稳定的时钟信号

//写数据

    for(i=0;i<64;i=i+1) begin

        wren = 1'b1    ;

        data = i + 1   ;//data给1到64

        address = i    ;//地址给0到63刚好与data错开

        #(CYCLE/2)     ;//保证一个时钟周期写写完一个数据

end

    wren = 1'b0    ;//写完数据拉低

    #(200*CYCLE)   ;

//读数据

    for (i=0;i<64;i=i+1) begin

        rden = 1'b1    ;

        address = i    ;//写数据读地址

        #(CYCLE/2)     ;//保证一个是时钟周期读完一个数据

    end

    rden = 1'b0    ;//读完数据拉低

    #(200*CYCLE)   ;

   

    $stop;

end

always #(CYCLE/2)  clk = ~clk ;//50M

endmodule

四、仿真波形 

修改test.do文件,在modelsim中仿真。

仿真分析:

全局分析:当wren信号拉高,rden信号拉低时,数据data读0到64,地址address读0到63,而q无数据;待到rden信号拉高时,输出q才有数据0到64。

fpga ram,FPGA学习,fpga开发

 局部分析:

locked拉高时时钟c2稳定输入,复位信号arest有效时,开始有数据

fpga ram,FPGA学习,fpga开发

 经过200个时钟周期,读数据,可以看到,读使能拉高,并在时钟c2上升沿时数据进行变化,当address为0时,输出q应该等于data对应的数据1,但在这里并不是立马读出数据,而是在下一个c2时钟上升沿才有数据1 ,同理,在结束时候也要在下一个时钟上升沿输出64.

fpga ram,FPGA学习,fpga开发

fpga ram,FPGA学习,fpga开发 

五、补充

 如果例化IP核时用了双时钟,对比单时钟来说,双时钟只是对输入和输出分别用了两个时钟来各自控制,但是在编写测试文件时完全不用改变代码,因为测试文件不能对输出q进行操作,只能对输入端进行激励,即只与输入时钟有关,与输出时钟无关。

对于复位清零,双时钟会变为输出端的复位清零,但是实际上和单时钟的效果是一样的,都是对寄存器进行清零,而寄存器位于输出端。

 

fpga ram,FPGA学习,fpga开发文章来源地址https://www.toymoban.com/news/detail-604184.html

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

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

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

相关文章

  • FPGA学习笔记(六): FIR IP核的使用

    1. 打开VIVADO,点击IP Catalog   2.搜索DDS,选择DDS Compiler,按照上节配置频率为3MHz和4MHz的DDS IP核。    这里注意不勾选Has Phase Out 这里注意不勾选Output TREADY     输出频率为3MHz 按照上述步骤,配置4MHz的DDS,同样不勾选Has Phase Out以及不勾选Output TREADY。 3. 点击IP Catalog,搜索mu

    2024年02月03日
    浏览(45)
  • FPGA中FIFO的应用(三)——Vivado FIFO IP核的调用

    ⭐️作者简介: 小瑞同学 ,一个努力精进的 FPGA 和通信学习者。 🍎个人主页:小瑞同学的博客主页 🌻个人信条:越努力,越幸运! ⏰日期:2023.12.6 🔍来源:自学经历 📖文章内容概述:简单介绍了 FIFO IP核 常用参数的配置,通过仿真分析了异步IP的 读写数据 过程。 连载

    2024年01月18日
    浏览(42)
  • 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日
    浏览(41)
  • 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日
    浏览(42)
  • 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日
    浏览(40)
  • FPGA之Quartus II 自带的IP核的使用(IP核仅自己学习,未完成)

    1、锁相环:       锁相环是对接收到的信号进行处理,并从其中提取某个时钟的相位信息。锁相环由鉴相器、环路滤波器和压控振荡器组成。  锁相环原理图 鉴相器:         用来鉴别输入信号输入信号Ui与输出信号输出信号Uo之间的相位差相位差,并输出误差电压Ud。Ud

    2023年04月09日
    浏览(49)
  • FPGA_学习_11_IP核_RAM_乒乓操作

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

    2024年02月09日
    浏览(41)
  • FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(二)——IP学习使用

      学习不能稀里糊涂,要学会多思考,发散式学习以及总结:   FPGA作为一种器件,只是实现目的的一种方法,过度追求实现的技术细节(用hdl还是hls,用啥芯片,用啥接口)容易只见树木不见森林。工具软件的用法也好,器件的架构也好,语言孰优孰劣的争论也罢。工程应

    2023年04月10日
    浏览(45)
  • 【FPGA】七、IP核的调用

    文章目录 前言 1、PLL简介 2、PLL工作原理 3、PLL实验 3.1、PLL的调用 3.2、程序与仿真 总结 前言         在我们进行FPGA项目设计中,简单的工程我们可以自己手动去设计与编写,但是如果工程较为复杂,我们完全自己去设计编写的话效率就太低了。所以在进行FPGA设计当中,常

    2024年02月08日
    浏览(44)
  • FPGA平台以太网学习:涉及1G/2.5G Ethernet 和Tri Mode Ethernet MAC两个IP核的学习记录(一)——知识补给

    学习不能稀里糊涂,要学会多思考,发散式学习以及总结: FPGA作为一种器件,只是实现目的的一种方法,过度追求实现的技术细节(用hdl还是hls,用啥芯片,用啥接口)容易只见树木不见森林。工具软件的用法也好,器件的架构也好,语言孰优孰劣的争论也罢。工程应用里大概

    2023年04月09日
    浏览(58)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包