首页 > 其他分享 >m基于FPGA的各类存储器纯Verilog实现,包含testbench,包括RAM,SRAM等

m基于FPGA的各类存储器纯Verilog实现,包含testbench,包括RAM,SRAM等

时间:2023-07-17 23:55:05浏览次数:37  
标签:存储器 LUT FPGA SRAM RAM 存储单元 选择器

1.算法仿真效果

本系统进行了Vivado2019.2平台的开发,Vivado2019.2仿真结果如下:

 

ram

 

 

 

SRAM

 

 

 

2.算法涉及理论知识概要

        FPGA(Field Programmable Gate Array)是一种可编程逻辑器件,具有可重构性、高速度、低功耗等特点,被广泛应用于数字电路设计、信号处理、图像处理等领域。在FPGA中,实现各类存储器是非常重要的任务之一。存储器是计算机系统中的重要组成部分,用于存储程序和数据。在FPGA中,存储器包括RAM(Random Access Memory)、SRAM(Static Random Access Memory)等。本文将从专业角度详细介绍基于FPGA的各类存储器的实现步骤和数学原理。

 

2.1、RAM的实现步骤

       RAM是一种随机读写存储器,可以随机读取和写入存储单元中的数据。在FPGA中,RAM可以使用两种不同的实现方式:基于LUT的RAM和基于Block RAM的RAM。基于LUT的RAM使用LUT(Look-Up Table)实现存储器的单元。每个存储单元包含一个LUT和一个D触发器。LUT中存储了一个地址和对应的数据,D触发器用于保存LUT中的数据。实现基于LUT的RAM的步骤如下:

 

(1)定义RAM的大小和数据宽度。

 

(2)使用LUT作为存储器单元,每个单元包含一个LUT和一个D触发器。

 

(3)使用地址选择器选择需要访问的存储单元。

 

(4)使用数据选择器选择需要读取或写入的数据。

 

(5)使用时钟信号控制D触发器的读写操作。

基于Block RAM的RAM使用FPGA中的Block RAM实现存储器的单元。每个存储单元包含一个Block RAM和一个地址选择器。实现基于Block RAM的RAM的步骤如下:

 

(1)定义RAM的大小和数据宽度。

 

(2)使用FPGA中的Block RAM作为存储器单元。

 

(3)使用地址选择器选择需要访问的存储单元。

 

(4)使用数据选择器选择需要读取或写入的数据。

 

(5)使用时钟信号控制Block RAM的读写操作。

 

2.2、SRAM的实现步骤

       SRAM是一种静态随机读写存储器,可以在不刷新的情况下保持存储单元中的数据。在FPGA中,SRAM可以使用两种不同的实现方式:基于LUT的SRAM和基于Block RAM的SRAM。

       基于LUT的SRAM使用LUT实现存储器的单元。每个存储单元包含一个LUT和一个D触发器。LUT中存储了一个地址和对应的数据,D触发器用于保存LUT中的数据。实现基于LUT的SRAM的步骤如下:

 

(1)定义SRAM的大小和数据宽度。

 

(2)使用LUT作为存储器单元,每个单元包含一个LUT和一个D触发器。

 

(3)使用地址选择器选择需要访问的存储单元。

 

(4)使用数据选择器选择需要读取或写入的数据。

 

(5)使用时钟信号控制D触发器的读写操作。

       基于Block RAM的SRAM使用FPGA中的Block RAM实现存储器的单元。每个存储单元包含一个Block RAM和一个地址选择器。实现基于Block RAM的SRAM的步骤如下:

 

(1)定义SRAM的大小和数据宽度。

 

(2)使用FPGA中的Block RAM作为存储器单元。

 

(3)使用地址选择器选择需要访问的存储单元。

 

(4)使用数据选择器选择需要读取或写入的数据。

 

(5)使用时钟信号控制Block RAM的读写操作。

 

       RAM和SRAM的实现都涉及到存储器单元的读写操作和地址选择器的设计。

 

存储器单元的读写操作

      存储器单元的读写操作是通过时钟信号控制的。在RAM和SRAM中,每个存储单元都包含一个D触发器,用于保存读取或写入的数据。D触发器的输出Q表示存储单元中保存的数据。D触发器的输入D表示需要写入的数据或需要读取的数据。时钟信号控制D触发器的读写操作。具体地,当时钟信号为上升沿时,D触发器将输入D的值保存在Q中,实现写操作;当时钟信号为下降沿时,D触发器输出Q的值,实现读操作。

 

地址选择器的设计

     地址选择器用于选择需要访问的存储单元。在RAM和SRAM中,地址选择器通常使用多路选择器(Multiplexer)实现。多路选择器的输入包括需要访问的存储单元的地址和需要写入或读取的数据,输出为选择的数据。具体地,多路选择器的选择信号为需要访问的存储单元的地址,输入信号为需要写入或读取的数据,输出信号为选择的数据。

 

存储器的容量和速度

       RAM和SRAM的容量和速度是设计存储器时需要考虑的重要因素。容量指存储器可以存储的数据量,速度指存储器的读写速度。在FPGA中,RAM和SRAM的容量和速度可以通过调整存储器单元的大小和时钟频率进行优化。具体地,增加存储单元的大小可以提高存储器的容量,增加时钟频率可以提高存储器的速度。但是,在增加存储单元的大小和时钟频率时需要考虑到FPGA的资源限制和功耗消耗等问题。

 

3.Verilog核心程序

 

module TEST_tops_sram();
 
 reg [7:0] dataIn;
 
 reg [7:0] Addr;
 
 reg CS;
 
 reg WE;
 
 reg RD;
 
 reg Clk;
 
 
 // Outputs
 
 wire [7:0] dataOut;
 
 
 // Instantiate the Unit Under Test (UUT)
 
tops_sram uut (
.dataIn(dataIn),
.dataOut(dataOut),
.Addr(Addr),
.CS(CS),
.WE(WE),
.RD(RD),
.Clk(Clk)
);
 
 
 initial begin
 
  // Initialize Inputs
 
  dataIn  = 8'h0;
  Addr  = 8'h0;
 
  CS  = 1'b0;
  WE  = 1'b0;
 
  RD  = 1'b0;
  Clk  = 1'b0;
 
 
  // Wait 100 ns for global reset to finish
 
  #100;
 
       
 
  // Add stimulus here
 
  dataIn  = 8'h0;
  Addr  = 8'h0;
 
  CS  = 1'b1;
  WE  = 1'b1;
 
  RD  = 1'b0;
  #20;
  dataIn  = 8'h0;
  Addr  = 8'h0;
  #20;
  dataIn  = 8'h1;
  Addr  = 8'h1;
  #20;
  dataIn  = 8'h10;
  Addr  = 8'h2;
  #20;
  dataIn  = 8'h6;
  Addr  = 8'h3;
  #20;
  dataIn  = 8'h12;
  Addr  = 8'h4;
  #40;
  Addr  = 8'h0;
  WE  = 1'b0;
  RD  = 1'b1;
  #20;
  Addr   = 8'h1;
  #20;
  Addr   = 8'h2;
  #20;
  Addr   = 8'h3;
  #20;
  Addr   = 8'h4;
 
 end

 

  

 

标签:存储器,LUT,FPGA,SRAM,RAM,存储单元,选择器
From: https://www.cnblogs.com/51matlab/p/17561672.html

相关文章

  • Proj. CMI Paper Reading: Conversational Automated Program Repair
    Abstract背景:之前APR与大模型的结合仅仅使用了一些特殊构建的input/prompt本文:conversationalAPR方法:使用long-termcontextwindow来记录之前的validationfeedback实验:在10个LLMs上进行对比展示改进......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)
    Preface打的就是依托答辩,当时看一眼D感觉是个爆搜不想写就先跳了去想F,结果傻逼了没想出来最后30min了赶紧溜回去把D爆搜写了,但是已经罚时爆炸了,其实如果正常正序做的话排名会挺稳的后面一问包大爷发现F是个傻逼题,只能说计数水平实在是低下A-OrderSomethingElse签到题#i......
  • GoFrame v2.5 版本发布,企业级 Golang 开发框架
    大家好啊,GoFrame 框架今天发布了 v2.5.0 正式版本啦!......
  • You don't have write permissions for the /System/Library/Frameworks/Ruby.framewo
    GemErrorERROR: Whileexecutinggem...(Gem::FilePermissionError)  Youdon'thavewritepermissionsforthe/System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0directory. 解决办法: ......
  • 【二十三】Django框架(Rest Framework)之版本控制
    【一】为什么需要版本控制API版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。DRF提供了许多不同的版本控制方案。可能会有一些客户端因为某些原因不再维护了但是我们后端的接口还要不断的更新迭代这个时候通过版本控制返回不同的内容......
  • FPGA数码管动态显示
    FPGA驱动6位数码管,主控芯片EP4CE6F17C8N。所使用实验板的数码管原理图如图所示,所使用的数码管3661BS是6位共阳极的数码管。使用PNP三极管驱动数码管,当三极管基极SMG_W0引脚输入低电平时,PNP三极管导通。通过控制SMG_W0~W5的电平来控制三极管的导通,从而控制位选信号。共阳极数码管,......
  • Reverb: A Framework For Experience Replay
    发表时间:2021文章要点:这篇文章主要是设计了一个用来做experiencereplay的框架Reverb,主要是把experiencereplay扩展到了分布式和多台机器上(Reverbisdesignedtoworkefficientlyindistributedconfigurationswithuptothousandsofconcurrentclients.)。大概的思路就......
  • iframe嵌套的https服务,权限开放设置
    1、场景:chatGPT开发语音功能,部署服务需要https协议,有个独立的门户需要将服务以iframe嵌入到系统中2、问题:chatGPT语音服务无法弹出授权开启麦克的提示3、原因:iframe默认是关闭了相关权限4、处理:参考说明<iframe>标签的sandbox属性是一个布尔属性,当存在时表......
  • 人工智能自然语言处理:N-gram和TF-IDF模型详解
    人工智能自然语言处理:N-gram和TF-IDF模型详解1.N-gram模型N-Gram是一种基于统计语言模型的算法。它的基本思想是将文本里面的内容按照字节进行大小为N的滑动窗口操作,形成了长度是N的字节片段序列。每一个字节片段称为gram,对所有gram的出现频度进行统计,并且按照事先设......
  • m基于FPGA的带相位偏差64QAM调制信号相位估计和补偿算法verilog实现,包含testbench
    1.算法仿真效果 本系统进行了Vivado2019.2平台的开发,其中Vivado2019.2仿真结果如下:   将FPGA的仿真结果导入到matlab中,显示星座图,结果如下所示:    2.算法涉及理论知识概要         在现代通信系统中,调制技术是实现高速数据传输和频谱效率优化的......