一、FPGA实现存储器的实际应用场景

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

(1)数据量比较多

(2)数据量已知

ROM(read only memory)(CMOS初始化)

2、信号源(例如ADC)以1us一个的速率产生12位的数据,现要求获得连续1ms内的数据,通过串口以115200的波特率发到电脑。数据量是1000个。

(1)数据量是1000个

(2)数据内容是未知

(3)一秒钟发11520个字节的数据。每个数据发送需要86.8us。

        数据生产速率是0.5us一个字节。

(4)数据的生产和消耗时候的位宽不一样。

FIFO(first in first out)(高速数据发送系统)

3、某芯片,一次完整的输出需要1024个14位数据,该芯片开始工作后会循环持续的输出这1024个数据,用户能通过串口来改变这1024个数据的内容。

(1)数据要求能被更改。

(2)数据要能重复使用。

RAM(random access memory)(DDS信号发生器)

4、信号源(例如ADC)以1ms,一个的速率产生12位的数据,现要求获得连续1s内的数据,通过某通信接口以100MB/S的发送到电脑,该通信接口一次发送至少需要连续的512个字节的数据。数据速率不匹配数据消耗速率快于数据生产速率,数据消耗时候要求是连续的。

(1)使用一个通道,数据生产满512个字节之后,再让数据消耗模块开始一次发送。

总线形式、通过以太网或者USB传输数据的应用


二、Vivado中存储器IP的应用

学习方法:阅读手册\对照着IP调用界面旁边的模块看

1、ROM/RAM模块的打开

distributed memory generator分布式ROM(查找表、小型RAM)\block memory generator块ROM(嵌入式硬件RAM)

(1)鼠标停留在栏上可以看到该项的简介

(2)用pdf阅读器读

打不开去官网搜:

AMD Developer Documentation Find technical documentation. Includes docs relevant for AMD EPYC™ processors, ROCm™, adaptive computing products, GPUOpen, and research papers.  https://www.amd.com/zh-cn/developer/browse-by-resource-type/documentation.html文件参考:

https://zhuanlan.zhihu.com/p/545872080

2、模块的调用

(1)修改右边的值,左边的端口会变黑或灰,黑为启用,灰为未启用。

(2)初始化信息

1.加载文件进行初始化(用小梅哥mif精灵)

【原创】Mif精灵/mif(coe)文件生成器 - 芯路恒资料与技术支持专区 - 芯路恒电子技术论坛 - Powered by Discuz!

2.Edit输入(用matlab进行加载)

3、模块展示

(1)时钟延迟时间可以在ip调用模块中summary看。

(2)观察模拟数据(可以愉快地做数字信号处理了)

三、代码tb

`timescale 1ns / 1ps

module ROM_tb;

 reg clka;
 reg wea;
 reg [9:0] addra;
 reg [9:0] dina;
 wire [9:0] douta;

blk_mem_gen_0 rom(
  clka,
  wea,
  addra,
  dina,
  douta
);

initial clka = 1;
always #10 clka = ~clka;

initial begin
    addra = 100;
    wea = 0;
    #501
    repeat(500)begin
        addra = addra + 1;
        #20;  //一个clk
        end
    #2000
    $stop;
 end


endmodule

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐