FPGA片内RAM读写代码示例

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

RAM(Random Access Memory),也就是随机存取寄存器,它可以随时把数据数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,其读写速度是由时钟频率决定的。
在本例程汇总,实现了向RAM里面写入1024个数据,然后再读取出来,通过ILA(在线逻辑分析仪)进行查看。

1、新建工程

器件选择Zynq 7000系列中的xc7z030ffg676-2,其他按默认选项。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
在Design source中,选择“+”来生成代码文件。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
创建一个RAM_TOP文件,并且选择Verilog格式。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
创建完成后,可以看到Design Sources文件夹中有一个RAM_TOP.v文件,这就是需要编写verilog程序的文件。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
添加RAM IP到工程,如下图:
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
RAM IP配置如下(其他默认):
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
[FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
添加ILA IP到工程,如下图:
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
ILA IP配置如下(其他默认):
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
双击RAM_TOP文件,添加代码如下:

module RAM_TOP(
input clk_p,
input clk_n,
input rst
    );
    
    wire clk;
    
    IBUFDS #(
    .DIFF_TERM("FALSE"),
    .IBUF_LOW_PWR("TRUE"),
    .IOSTANDARD("DEFAULT")
    ) IBUFDS_inst(
    .O(clk),
    .I(clk_p),
    .IB(clk_n)
    );
    
     wire  ena;
    reg  [0:0] wea;
    reg  [9:0] addra;
    reg  [15:0] dina;
    wire [15:0] douta;
    
    assign ena = rst;
    
    reg [2:0] ram_state;
    always @(posedge clk or negedge rst)
      if(!rst) begin
        ram_state <= 'b0;
        wea <= 'b1;
        addra <= 'b0;
        dina <= 'b0;
      end
      else begin
        case(ram_state)
             'b0:  begin
                   if(addra < 1023) begin
                     wea <= 'b1;
                     addra <= addra + 'b1;
                     dina <= dina + 'b1;
                   end
                   else begin
                     ram_state <= 'b1;
                     wea <= 'b0;
                     addra <= 'b0;
                     dina <= 'b0;
                   end
                  end
              'b1:  begin
                    if(addra < 1023) begin
                       wea <= 'b0;
                       addra <= addra + 'b1;                     
                    end
                    else begin
                      ram_state <= 'b0;
                      wea <= 'b1;
                      addra <= 'b0;
                      dina <= 'b0;
                   end
                  end
                default: begin
                      ram_state <= 'b0;
                      wea <= 'b0;
                      addra <= 'b0;
                      dina <= 'b0;
                end
              endcase
      end
      
      blk_mem_gen_0 u0 (
      .clka(clk),    // input wire clka
      .ena(ena),      // input wire ena
      .wea(wea),      // input wire [0 : 0] wea
      .addra(addra),  // input wire [9 : 0] addra
      .dina(dina),    // input wire [15 : 0] dina
      .douta(douta)  // output wire [15 : 0] douta
      );

     ila_0 u1 (
    .clk(clk), // input wire clk

	.probe0(ena), // input wire [0:0]  probe0  
	.probe1(wea), // input wire [0:0]  probe1 
	.probe2(addra), // input wire [9:0]  probe2 
	.probe3(dina), // input wire [15:0]  probe3 
	.probe4(douta) // input wire [15:0]  probe4
    );
endmodule

2、添加管脚约束文件

在Design Sources中选择“+”,在“Add Sources”对话框中选择添加约束文件main.xdc。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
文件类型默认为xdc。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
在Design Sources中点击main.xdc进行编辑。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
约束文件代码如下:

set_property IOSTANDARD lVDS [get_ports clk_p]
set_property PACKAGE_PIN C8 [get_ports clk_p]

set_property IOSTANDARD SSTL135 [get_ports rst]
set_property PACKAGE_PIN G9 [get_ports rst]

3、编译并生成bit文件

点击Flow Navigator中的Generate Bitstream,等待生成bit文件。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
bit文件生成成功。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发

4、加电测试

连接仿真器,给设备加电。
注意:为了延长仿真器的使用时间,尽可能不要带电插拔仿真器。
点击Flow Navigator——>PROGRAM AND DEBUG——>Open Hardware Manager——>Open Target,在弹出界面上点击Auto Connect。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
在HardWare的xc7z030_1上点击右键,选择Program Device…
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
选择刚刚生成的bit文件和ltx文件,点击Program。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发
下载完成后,自动跳出ILA界面,点击界面上的“》”即可开始抓取信号。
FPGA片内RAM读写代码示例,FPGA代码示例,fpga开发文章来源地址https://www.toymoban.com/news/detail-858177.html

到了这里,关于FPGA片内RAM读写代码示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 深入探索STM32的存储选项:片内RAM、片内Flash与SDRAM

    在嵌入式系统设计中,存储管理是一个至关重要的方面,尤其是对于基于STM32这类强大的微控制器来说。STM32系列微控制器因其高性能、低功耗以及灵活的存储选项而广受欢迎。本文将详细探讨STM32微控制器中的三种主要存储选项:片内RAM、片内Flash和SDRAM,它们各自的特点、应

    2024年02月22日
    浏览(44)
  • FPGA双口RAM使用

    模块名称: dpram() IP Core 双口RAM,有俩组数据线和地址线,读写可以同时进行,FIFO读写可以同时进行,可以看作是双口。分为Simple two-dual RAM和true two-dual RAM。简单双口RAM,一个端口只读,另一个端口只写,且写入和读取的时钟可以不同,位宽比可以不是1:1;而双口RAM两个端口

    2024年02月16日
    浏览(41)
  • 【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之DDR3 IP简单读写测试(六)

    本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 适用于板卡型号: 紫光同创PGL22G开发平台(盘古22K) 一:盘古22K开发板(紫光同创PGL22G开发平台)简介 盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全

    2024年01月23日
    浏览(65)
  • FPGA之分布RAM(1)

    SLICEM 资源可以实现分布式 RAM。可以实现的 RAM 类型: 单口 RAM 双端口 简单的双端口 四端口 下表给出了通过1SLICEM中的4个LUT可以实现的RAM类型         我们介绍过把 6 输入 LUT 当作 2 个 5输入 LUT 使用,在这里,就可以同一个 LUT 实现数据位宽的增加。对于32X2的4口RAM,如下图

    2024年01月20日
    浏览(49)
  • (34)FPGA IP设计(RAM)

    1.1 本节目录 1.2 IP核介绍 1.3 FPGA介绍 1.4 Verilog介绍 1.5 Vivado_RAM_IP设计 1.6 结束语 IP核有行为(Behavior)级、结构(Structure)级和物理(Physical)级三个层次的分类,对应着三个种类型的IP核,它们是由硬件描述语言设计的软核(Soft IP Core)、完成结构描述的固核(Firm IP Core) 和基于物理描述并

    2024年01月19日
    浏览(38)
  • FPGA中RAM的结构理解

    看代码的过程中对RAM的结构不是很理解,搞脑子一片浆糊,反复推算,好不容易理清了思路,记录下来,防止忘记。开辟的RAM总容量为128bytes,数据的位宽为32位(即一个单元有32bit数据) RAM结构示意图:

    2024年02月16日
    浏览(36)
  • FPGA Develop Note ——— RAM

    RAM 的英文全称是 Random Access Memory ,即随机存取存储器,简称随机存储器。它可以随时把数据 写入 任一指定地址的存储单元,也可以随时从任一指定地址的存储单元中 读出 数据,其 读写速度是由时钟频率决定的 。 Types RAM类型 特性说明 数据读写口数量 地址口数量 Simple P

    2024年03月15日
    浏览(47)
  • FPGA原理与结构(8)——块RAM(Block RAM,BRAM)

    系列文章目录:FPGA原理与结构(0)——目录与传送门         大家对于RAM应该并不陌生,RAM就是一张可读可写的存储表,它经常被拿来与ROM进行对比,相比之下,ROM只可读。而在FPGA中,RAM一般可以分成两种,一种是使用LUT资源组成的分布式RAM(DRAM),另一种就是块RAM(B

    2024年02月08日
    浏览(39)
  • #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(2)

    下图中可以看出来,通过2个LUT的组合使用可以串联实现更大深度的分布式RAM.下图中出现了F7BMUX的加入, F7BMUX可以用于LUT输出的选通. 原语调用: RAM128XIS#(INIT(128\\\'h00000000000000000000000000000000) // Initial contents of RAM)RAM128XIS_inst ( .O(O),// 1-bit data output .A0(A0), .Al(AI),// Address[1] .A(A2), .A3(A3)

    2024年01月23日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包