Verilog基础之十六、RAM实现

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

目录

一、前言

二、工程设计

2.1 RAM IP核使用

2.2 设计代码

2.3 仿真代码

2.4 综合结果

2.5 仿真结果


一、前言

    工程设计中除逻辑计算单元外,存储单元也是不可获取的部分,RAM(Random Access Memory)随机存取存储器即可以写入数据,也可读取数据,写入或读取的位置由输入的地址决定。

二、工程设计

    RAM作为常用的单元,器件都是自带对应的IP核,可直接创建例化使用,本文将介绍通过IP核以及RTL代码两种方式实现RAM。

2.1 RAM IP核使用

    先创建工程指定器件,然后在Flow Navigator中进入IP Catalog,进入创建界面

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

    进入IP Catalog,Search搜索框中输入查找的IP核RAM,显示相关的搜索结果,此处以“Distributed Memory Generator”为例。

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

进入IP核的设置窗口,Depth为存储器的深度,此处设置的值将决定左侧输入a的位宽,Data Width为存储数据的位宽,设置后即为左侧输入d的位宽。Port config和RST&Initialization为相关的设置

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

设置完后点击右下角的OK,成功生成IP核,在Sources窗口可看到生成的IP核,名称为dist_mem_gen_0;

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

2.2 设计代码

设计中包含了IP核和RTL生成RAM的方式,IP核的生成方式十分方便,对dist_mem_gen_0进行例化即可实现

module RAM(addr,d,d0,clk,we,spo_ip,spo,rst );
input [3:0] addr;
input clk,rst,we;
input [15:0] d;
input [4:0] d0;
output [15:0] spo_ip;
output reg [4:0] spo;
reg [4:0] addrtemp [0:15];
dist_mem_gen_0 ram_ip(.a(addr),.d(d),.clk(clk),.we(we),.spo(spo_ip)); //使用IP核调用RAM 

always@(posedge clk,negedge rst)    //RTL代码实现RAM,RAM的深度为16,数据位宽为4
begin
if(!rst)
     spo<=5'b0;    
else
    spo<=addrtemp[addr];   
end
always@(posedge clk)
 if(we==0)
begin
    addrtemp[addr]<=d0;
end
endmodule

2.3 仿真代码

`timescale 1ns / 1ns
module RAM_tb(  );
reg clk,rst,we;
reg [3:0] addr;   //RAM 读写地址
reg [4:0] d0;	  //RTL代码实现的RAM的数据输入
reg [15:0] d;	  //IP核实现RAM的数据输入
wire [15:0] spo_ip;   //IP核实现RAM的数据输出
wire [4:0] spo;		//RTL代码实现RAM的数据输出,位宽为5
initial
begin
clk=0;
rst=1;
we=0;
d=0;
d0=0;
addr=4'b0;
#20 we=1;
#80 we=0;
#100 rst=0;
#50 rst=1;
end
always #2 clk=~clk;   //时钟周期为4ns
always #5 d=d+16'h1111;  //IP核例化RAM的数据输入d每隔5ns变化一次
always #4 d0=d0+5'b00001; //RTL RAM的数据输入d每隔5ns变化一次
always #4 addr=addr+4'b0001;   //RAM读写地址每隔4ns改变一次
RAM RAM_test(.addr(addr),.d(d),.d0(d0),.clk(clk),.rst(rst),.we(we),.spo_ip(spo_ip),.spo(spo) );
endmodule

2.4 综合结果

IP核实现的RAM在Schematic中即为一个完整的模块

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

RTL代码实现依赖LUT和FF和RAM网表单元。

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

2.5 仿真结果

仿真结果如下图

1)在rst为1时非复位状态,we为1处于写入状态,因此输出spo一直为0

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

2)在we为0处于读取状态时,下图红框1,2,3分为别复位信号rst为1,0,1,为0时进行复位,在方框2处为复位状态,输出spo输出为0

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim

3)在rst为1,we为0,即正常的读取状态时,地址addr范围为0-15,输入d0范围为0-31,当前地址addr的读取值为之前的写入值。

a.在序号1 439ns处,addr为13,输入d0为13,此时写入13;

b.在序号2 441ns处,addr为14,输入d0为14,此时写入14;

c.在序号3 502ns处,此时读取地址为13,根据之前存储的值为13,因此输出spo为13.

d.在序号4 506ns处,类似的读取之前存储的值14,符合预期

verilog设计ram,Verilog学习笔记,Vivado,FPGA所知所见所解,fpga开发,RAM,随机存储器,modelsim文章来源地址https://www.toymoban.com/news/detail-736833.html

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

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

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

相关文章

  • Verilog实现FPGA可编程电路中的RAM存储器

    Verilog实现FPGA可编程电路中的RAM存储器 在FPGA可编程电路的设计中,RAM存储器通常被广泛使用。而手写RAM存储器则可以提供更加灵活、高效的设计方案。本文将介绍如何使用Verilog语言来手写FPGA中的RAM存储器。 首先,我们需要确定RAM存储器的大小和宽度。假设我们需要实现一个

    2024年02月04日
    浏览(40)
  • Verilog RAM/ROM的数据初始化

    FPGA设计中RAM和ROM作为存储器用来存储可变或不可变类型的数据。 ROM初始化一般是加载固定数据,RAM声明时默认为不定态数据,初始化时可以让数据为全1或者全0。 复位时按地址写入初值 使用initial 和 for循环来初始化 用于初始化为有规律的数据, RAM初始化常使用这种方式。

    2024年02月04日
    浏览(31)
  • Verilog基础之十四、FIFO实现

    目录 一、FIFO 1.1 定义 1.2 实现方式 1.3 实现原理   二、代码实现 三、仿真结果 3.1 复位阶段 3.2 写入阶段 3.3 读取阶段 3.4 同时读写或不读不写 四、参考资料     FIFO(First in First out)为先进先出队列,具有存储功能,可用于不同时钟域间传输数据以及不同的数据宽度进行数据

    2024年02月13日
    浏览(23)
  • Verilog基础之十、计数器实现

    目录 一、前言 二、工程设计 2.1 设计代码 2.2 综合结果 ​2.3 仿真结果     计数器是较为基础的逻辑,很多其他逻辑可依靠计数器实现,如控制器,分频。原理为通过统计时钟脉冲的个数来输出计数值。 工程设计以计数20的计数器为例 测试代码 综合后的网表可知,6位的计

    2024年02月09日
    浏览(40)
  • Verilog基础之十一、移位寄存器实现

    目录 一、前言 二、工程设计 ​2.1 工程代码 2.2 综合结果 2.3 仿真结果     移位寄存器SRL在工程中属于使用频率较高个模块,可用于存储数据,实现串并转换;根据数据移动方向可分为左移寄存器,右移寄存器,左移是向数据高位移动,右移是向数据低位移动。  工程中包

    2024年02月11日
    浏览(33)
  • FPGA基础设计(八):串口收发之RAM存储

    实现上位机通过串口发送数据到FPGA,FPGA接收到数据后将其存储在RAM的一段连续空间中,然后通过按键触发读出RAM数据,再通过串口发送到上位机。 1、串口接收模块; 2、按键消抖模块 3、创建RAM IP核模块 4、RAM IP核控制模块; 5、串口发送模块。 前面已经设计好了串口发送模

    2024年02月03日
    浏览(43)
  • (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日
    浏览(30)
  • 【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display

    写在前面: 本章主要内容为理解七点数码管显示的概念,并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作,通过 FPGA 检查在 Verilog 中实现的电路的操作。 七段数码管是利用多重输出功能的非常有用的元件。该元件用于字符化,如十进制、十六进制数等。适当配

    2024年02月02日
    浏览(35)
  • 计算机组成原理实验 MIPS RAM设计

    一、设计要求     Logisim中RAM组件只能提供固定的地址位宽,数据输出也只能提供固定的数据位宽,访问时无法同时支持字节/半字/字三种访问模式,实验要求利用4个4K * 8 位的 RAM 组件进行扩展,设计完成既能按照8位、也能按照16位、也能按照32位进行读写访问的32位存储器

    2024年02月04日
    浏览(30)
  • FPGA设计Verilog基础之Verilog的运算符

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus FPGA设计Verilog基础之Verilog的运算符 Verilog是一种硬件描述语言,支持多种运算符,包括算术运算符、比较(关系)运算符、逻辑运算符、条件

    2024年02月03日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包