当前位置: 首页 > news >正文

FPGA自学——存储器模型

FPGA自学——存储器模型

文章目录

  • FPGA自学——存储器模型
    • 一、IP核
    • 二、ROM(read only memory)
    • 三、ROM的IP核调用
    • 四、RAM(random access memory)
    • 五、RAM的IP核调用
  • 总结
    • 1.不同波形的使用的存储器
    • 2.块与分布式的选择
    • 3.FPGA与模块的容量资源计算
    • 4.控制写入的ena和wea的区别
    • 5.下载手册资源的方式

一、IP核

一)概念:是指芯片中具有独立功能的电路模块的成熟设计

二)常见IP核:

1.逻辑运算:与、或、非、异或等基本逻辑运算单元和复用器、循环位移器、三态缓存器和解码器等相对复杂的逻辑运算模块

2.数学运算:分为整数运算和浮点运算

整数运算:加法器、减法器、乘法器、除法器、比较器、计数器和绝对值计算器

浮点运算:浮点数加法器、浮点数减法器、浮点数乘法器、浮点数除法器、浮点数平方根计算器、浮点数指数计算器

3.存储器IP:移位寄存器、触发器、锁存器的简单的存储器IP核和较为复杂ROM、RAM、FIFO和Flash存储器等模块

4.输入/输出IP核:时钟控制器、锁相环(PLL),低电压差分信号(LVDS)、收发器、双数据速率(DDR)I/O、访问外部存储器的DQ-DQS I/O,I/O缓存器

5.数字信号处理IP核:有限冲激响应滤波(FIR)编译器,级联积分梳状(CIC)滤波器编译器、数控振荡器(NCO)编译器以及快速傅里叶交换(FFT)等IP核,用于数字信号系统设计

6.数字通信IP核:RS码编通器、循环冗余校验(CRC)编译器、8B/10B编/译码器、SONET/SDH物理层IP核

7.图像处理IP核:2D FIR滤波器、2D中值滤波器、α混合器、视频监视器、色度重采样器、图像裁剪器、视频输入和输出模块、测试模板生成器、视频跟踪系统模块

8.芯片接口IP核:数字视频广播(DVB)的异步串行接口(AS1)、10/100/1000Mbps以太网接口、DDR和DDR2 SDRAM控制器、存储器物理层访问接口、PCI/PCI Expresso编译器、Rapidlo和用于数字电视信号传输的串行数字接口(SDI)

9.设计调试IP核:ILA逻辑分析仪、串行和并行Flash加载器、系统内的源和探测模块、虚拟JTAG

10.其他

三)应用示例

情况1: 某芯片,有500个寄存器,需要在上电的时候由FPGA向这些寄存器中写入初始值,初始值通过相应的文档给出来了具体值,这些值都是已知的

特点: 数据量较多; 数值已知固定;上电工作(一次);只需要读取

功能选用: ROM:只读存储器

情况2: 信号源(ADC)以1微妙一个的速率产生12位的数据现要求获得连续1毫秒内的数据,通过串口以115200的波特率发送到电脑

特点: 数据量1000(总数有限); 数据内容未知;数据的使用速度低于数据的产生速度(速率不匹配);需要重复利用(位宽不同)

速度计算: 串口——以两次六位的方式进行传输,每次传输的bit数((起始位+停止位)+6)bit = 8bit

​ 每个bit传输的时间为1000_000_000ns/115200 ≈ 8680ns ,一组数据传输8680ns*8 = 69440ns = 69.4微妙

​ 数据源——1微妙产生两组数据,一组数据的产生 = 0.5微妙

存在问题: 数据生产(12)和消耗(6)的位宽不同——需要重复利用

功能选用: RAM:可读可写

二、ROM(read only memory)

定义:只读存储器

特点:非易失性,断电后数据不会丢失

应用:嵌入电脑主板或者做移动存储介质,体积够小,提供的容量可以比光盘核软盘的大,速度也不慢

延展:

EPROMErasable Program ROM (可擦除编程ROM)紫外线光擦除
EEPROMElectric Erasable Program ROM (电可擦除编程ROM)一次擦除一个字节
FLASH按块擦除

三、ROM的IP核调用

1.新建一个rom_test的工程文件

2.选择对应的IP核,选择块存储器生存器

在这里插入图片描述

3.配置相关参数
在这里插入图片描述
在这里插入图片描述

4.生成并加载rom的初始化文件

在【原创】Mif精灵/mif(coe)文件生成器 - 芯路恒资料与技术支持专区 - 芯路恒电子技术论坛 - Powered by Discuz!下载Mif_Make_V2.4_exe.zip文件,并压缩打开使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

5.查看总结

在这里插入图片描述

6.生成

在这里插入图片描述

7.查看IP核相关的代码

找到例化代码

在这里插入图片描述

8.编写测试文件

在这里插入图片描述

`timescale 1ns / 1psmodule rom_tb();reg clka;reg [9:0] addra;wire [9:0] douta;rom rom_inst0 (.clka(clka),    // input wire clka.addra(addra),  // input wire [9 : 0] addra.douta(douta)  // output wire [9 : 0] douta
);//产生时钟,以50MHz为准initial clka = 1;always #10 clka = ~clka;//也可以写为clka = !clka;initial beginaddra = 100;#201;repeat(30000) begin //repeat循环addra = addra + 1'b1;#20;end#2000;$stop;end
endmodule

9.查看波形

数字波形,修改为十进制进行查看

在这里插入图片描述

模拟波形

在这里插入图片描述

四、RAM(random access memory)

一)介绍

定义:随机存储器,它可以随时把数据写入到任何一指定地址的存储单元,也可以随时从任一指定地址读出数据,其读写速度由时钟频率决定,主要用来存放程序以及程序执行过程中产生的数据,运算结果等

种类:

在这里插入图片描述

五、RAM的IP核调用

1.创建一个ram_test的项目工程文件

2.选用block ram的IP核

3.设计数据流向模块图

在这里插入图片描述

4.根据数据流向模块图选择配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.点击生成即可

三)仿真测试

1.跟上面rom的步骤基本一致

2.仿真代码实现

`timescale 1ns / 1nsmodule ram_tb();reg          clka     ;
reg          ena      ;
reg          wea      ;
reg [15 : 0] addra    ;
reg [15 : 0] dina     ;
reg          clkb     ;
reg          enb      ;
reg [15 : 0] addrb    ;
wire [15 : 0] doutb    ;ram ram_inst0 (.clka     (clka),    // input wire clka.ena      (ena),      // input wire ena.wea      (wea),      // input wire [0 : 0] wea.addra    (addra),  // input wire [15 : 0] addra.dina     (dina),    // input wire [15 : 0] dina.clkb     (clkb),    // input wire clkb.enb      (enb),      // input wire enb.addrb    (addrb),  // input wire [15 : 0] addrb.doutb    (doutb)  // output wire [15 : 0] doutb
);initial clka = 1;
always #10 clka = ~clka;
initial clkb = 1;
always #15 clkb = ~clkb;initial begin//初始化ena   = 0 ;wea   = 0 ;addra = 0 ;dina  = 0 ;enb   = 0 ;addrb = 0 ;//写入#201repeat(65536) beginena = 1;wea = 1;#20;addra = addra + 1'b1;dina = dina + 1'b1;endena = 0;wea = 0;#2000;//读出addrb = 65536;#300repeat (65535) beginenb = 1;#30 addrb = addrb - 1'b1;end#2000$stop;
endendmodule

3.仿真结果

在这里插入图片描述

总结

1.不同波形的使用的存储器

在这里插入图片描述

2.块与分布式的选择

区别distributed(分布式)block(块式)
资源LUT(查找表——本质是很小的ram)Block Memory(嵌入式的硬件RAM)
调用方式需要多少拿多少成块拿取
用户需求需求小,选用分布式需求大,选用块式

3.FPGA与模块的容量资源计算

以TFT屏幕为例:

**计算FPGA的最大容量:**RGB565 -> 需要16位宽 -> 选取的配置为16K×2 -> xc7z015-2(blocl ram有95)-> 计算最大容量:16K×95 = 190K

**TFT模块:**RGB565 -> 需要16位宽 -> 屏幕大小800×480 =384K -> 需要容量 = 384K × 16 =

**资源不足时解决方法:**选择部分屏幕进行显示

4.控制写入的ena和wea的区别

区别enawea
名称Enable的缩写Write Enable A的缩写
作用控制RAM块是否激活或工作控制数据是否写入到指定地址的RAM中

wea使用时要注意位宽给限定字节大小的整数倍,wea的位宽位数就是倍数

在这里插入图片描述

手册wea的使用案例
在这里插入图片描述

5.下载手册资源的方式

1.使用vivado自带功能进行下载

在这里插入图片描述

2.查看文件

在这里插入图片描述

3.如果无法成功下载,或下载后的文件打不开,使用自动打开的官网入口

在这里插入图片描述

4.根据关键字进行搜索

在这里插入图片描述

http://www.lryc.cn/news/596180.html

相关文章:

  • Kafka单条消息长度限制详解及Java实战指南
  • Apache Ignite 中 WHERE 子句中的子查询(Subqueries in WHERE Clause)的执行方式
  • Android 中 实现日期选择功能(DatePickerDialog/MaterialDatePicker)
  • 【无标题】buuctf-re3
  • JAVA中的IO流(四)数据流
  • 一个电脑抓包工具
  • 黄仁勋强调:首先,我是中国人
  • Python进阶第三方库之Numpy
  • 用手机当外挂-图文并茂做报告纪要
  • 云祺容灾备份系统Hadoop备份与恢复实操手册
  • 如何在 Windows 10 下部署多个 PHP 版本7.4,8.2
  • WIFI路由器长期不重启,手机连接时提示无IP分配
  • Android接入RocketMQ的文章链接
  • Spring Boot 使用Jasypt加密
  • Cy3-COOH 花菁染料Cy3-羧基
  • 《小白学习产品经理》第八章:方法论之马斯洛需求层次理论
  • 用ffmpeg 进行视频的拼接
  • 从 0 到 1 搞定nvidia 独显推流:硬件视频编码环境安装完整学习笔记
  • Golang避免主协程退出方案
  • 前端葵花宝典
  • 《Uniapp-Vue 3-TS 实战开发》自定义时间选择
  • el-input 动态获焦
  • Vue 脚手架基础特性
  • js 数字逢三切断、整数最大9位、小数最大2位
  • SpringBoot+Mybatis+MySQL+Vue+ElementUI前后端分离版:权限管理(三)
  • ucharts 搭配uniapp 自定义x轴文字 实现截取显示
  • redis秒杀之lua脚本
  • 企业微信快捷回复设定方法(提高效率)
  • 如何永久删除安卓设备中的照片(已验证)
  • 大型语言模型(Large Language Models,LLM)