首页 > 其他分享 >FPGA入门笔记011_A——嵌入式块RAM的使用

FPGA入门笔记011_A——嵌入式块RAM的使用

时间:2024-04-06 16:00:36浏览次数:46  
标签:FPGA dpram RAM 端口 011 所示 clock 时钟

1、Cyclone-II系列FPGA内部结构

image-20240406125954361

图1——Altera公司Cyclone-II系列FPGA内部结构

​ 如上图所示是Altera公司Cyclone-II系列FPGA内部结构,个模块作用如下:

PLL锁相环—对时钟进行管理。

IOEs—管脚单元,配置管脚,设置输入输出。

逻辑阵列—实现组合、时序逻辑。

块RAM—连续的存储空间,配合少量的逻辑阵列,形成不同的结构。

乘法器—为了提高乘法运算速度,加入了乘法器。

2、IP 核使用之 dpram

​ 新建一个以名为 dpram 的工程保存在 prj 下,然后单击 Tools—MegaWizard Plug-In Manager 找到 RAM:2-PORT(双端口RAM),并将输出目录确定为工程文件夹下的 ip 文件夹,并以 dpram 保存,单击 Next,如下图所示。对于单端口 RAM,读写操作共用端口 A 的地址,数据通过端口 A 写入和读出;对于本节使用的双端口 RAM,则是一个读端口和一个写端口

image-20240406132544550

​ 这里将双端口 RAM 的使用方式设置为一个读端口和一个写端口,另一种方式为两 个端口都可用作读/写。如下图所示,这也就是设置一般而言的简单双端口 RAM 还是 真正双端口 RAM。设置存储器大小的方式为按照字数(word)确定,另一种方式为按照比特数(bits)。

image-20240406133229807

​ 设置大小为256字节的RAM。不同端口使用相同数的位宽,端口位宽为 8。存储器使用的存储块类型为软件自动选择(Auto);存储器深度为软件自动选择(Auto),具体如下图所示。

image-20240406133633286

​ 时钟选择这里为单时钟,不勾选创建读使能信号。这里用一个时钟和一个时钟使能信号控制存储块所有的寄存器。其他应用场所还可以设置为双时钟使用独立的输入时钟和输 出时钟或者双时钟使用单独的读时钟和写时钟,如下图所示。

image-20240406134253191

​ 对输出端口进行寄存,不创建时钟使能信号,不创建异步复位端口(aclr),需注意这里复位并不复位 RAM 中的数据而是只复位寄存器(registered)上的值,具体如下图所示。

image-20240406135220809

​ 当在前面选择 “一个读端口和一个写端口” 或者 “两个端口都可用读写” ,会出现如下图中的选项,如果对同一个地址同时进行读和写,那么输出端口 q 的输出可能是旧数据,可能是同时准备写入的数据。 这里选择不关心,另一种可以设置为写数据之前的存储数据。

image-20240406135935309

​ 这里不对 RAM 进行初始化,如下图所示,在后面使用 ROM 时必须进行初始化,初始化步骤将在 ROM 部分再讲解。

image-20240406140123275

​ 然后确定配置信息后即可点击 Finish 完成配置。 并将生成的 IP 核加入工程,即可在工程下看到加入的 IP 核文件并可将其设置为顶层文件。

​ 键入Ctrl+O,查看到ip核文件已成功加入,如下图所示:

image-20240406140443860

​ 将ip核文件设置为顶层文件。

image-20240406140639594

3、激励创建及仿真测试

​ 为了测试两端口 RAM,可以通过实际写入一些数据再读取部分数据的方式来验证两端口 RAM 读写是否正常。下面的激励文件实现了在地址从 0~16 上写入数据为从 255 减至 240。 延时一段时间后读地址为 0~16 上的数据的功能。

`timescale 1ns/1ns
`define clk_period 20

module dpram_tb;

    reg	  clock;
	reg	[7:0]  data;
	reg	[7:0]  rdaddress;
	reg	[7:0]  wraddress;
	reg	  wren;

	wire	[7:0]  q;

    integer i;

    dpram dpram(
        .clock(clock),
        .data(data),
        .rdaddress(rdaddress),
        .wraddress(wraddress),
        .wren(wren),
        .q(q)
    );

    initial clock = 1'b1;
    always#(`clk_period/2) clock = ~clock;

    initial begin
        data = 0;
        rdaddress = 30;
        wraddress = 0;
        wren = 0;

        #(`clk_period*20 + 1);
        for(i = 0;i <= 15;i=i+1)begin
            wren = 1;
            data = 255 - i;
            wraddress = i;
            #`clk_period;
        end
        wren = 0;

        #(`clk_period*20);
        for(i = 0;i <= 15;i=i+1)begin
            rdaddress = i;
            #`clk_period;
        end

        #(`clk_period*20);
        $stop;
    end

endmodule

​ 为了更好的观察时钟沿与地址、数据变化的过程,可以全编译后进行时序仿真,仿真波形图如下图所示。读数据时,可以看出图中第一个箭头指向的时钟上升沿采集到的地址数据为 0;第二个时钟上升沿开始赋值,但是由于逻辑延迟(方框选中处)后才开始赋值; 因此第三个时钟上升沿的数据才是稳定的。

image-20240406154647941

标签:FPGA,dpram,RAM,端口,011,所示,clock,时钟
From: https://www.cnblogs.com/little55/p/18117510

相关文章

  • 基于EP4CE6F17C8的FPGA可调校数码管时钟实例
    一、电路模块1、数码管开发板板载了6个数码管,全部为共阳型,原理图如下图所示,段码端引脚为DIG[0]~DIG[7]共8位(包含小数点),位选端引脚为SEL[0]~SEL[5]共6位。端口均为低电平有效。其实物图如下所示。数码管引脚分配见下表。2、时钟晶振开发板板载了一个50MHz的有源晶振,为系统......
  • [报错纪录] IDEA进行远程开发时报错 Cannot run program "/usr/lib/jvm/jdk1.8.0_371/
    错误内容Cannotrunprogram"/usr/lib/jvm/jdk1.8.0_371/bin/java"(indirectory"/home/awang/.cache/JetBrains/RemoteDev-IU/_home_awang_code_spark/compile-server"):error=0,Failedtoexecspawnhelper:pid:10071,exitvalue:1解决方法打开Se......
  • 【每日一题】补档 CF730I. Olympiad in Programming and Sports | 反悔贪心 | 困难
    题目内容原题链接给定nnn个学生,第iii个学生的编程能力为......
  • gdb 环境问题:Backtrace stopped: previous frame identical to this frame (corrupt s
    背景虽然才刚进入新环境,但是由于项目交付节点临近,领导主要让我分析、解决以前遗留的问题,保证软件的稳定性。其中有一个问题现象是:片间通信进程(负责SOC和MCU交互的服务)偶现阻塞问题。经过短暂的分析,我怀疑是因为资源竞争导致的死锁问题。针对死锁问题,我认为有两种分析方式......
  • 记一次dlopen使用问题导致Framework重启,tombstones、pmap与反汇编分析(上)
    关键词:AndroidFramework动态库动态链接Binder1、事件起因AndroidStudio一次更新后发现installApp,设备就重启了,跑了一遍开机动画但不是从开机第一屏开始重启,tombstones内容查看发现是surfaceflinger挂在libbinder.so,那installapp做了什么这个不得而知,理论上有问题应该挂的......
  • 基于EP4CE6F17C8的FPGA键控灯实例
    一、电路模块1、LED开发板板载了4个用户LED发光二极管,其原理图如下所示,当FPGA的引脚输出为逻辑0时,LED会熄灭。输出为逻辑1时,LED被点亮。其实物图如下所示。LED的引脚分配见下表。2、时钟晶振开发板板载了一个50MHz的有源晶振,为系统提供时钟。其实物图如下所示。时......
  • 【论文精读】Detecting Out-of-Distribution Examples with Gram Matrices 使用Gram矩
    文章目录一、文章概览(一)Gram矩阵1、Gram(格朗姆)矩阵的定义2、Gram矩阵计算特征表示3、风格迁移中的Gram矩阵(二)ood检测(三)核心思路:扩展Gram矩阵以进行分布外检测(四)研究成果二、模型细节(一)符号定义(二)Gram矩阵和高阶Gram矩阵(三)预处理(四)计算分层偏差(五)测试图像的总偏差(......
  • Quasar framework build if not a root path
    build:{target:{browser:['es2019','edge88','firefox78','chrome87','safari13.1'],node:'node16'},vueRouterMode:'hash',//availablevalues:......
  • 一些fpga相关的知识
    一、什么是LUT?二、芯片型号命名的意义 比如我用的是xc7a35tfgg484-2,那么它每一部分的意思是: 三、blockram ......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧011-Noticeboard
    PDF格式公众号回复关键字:ZKYD011阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......