AX7A200教程(4): DDR3的读写fifo仿真

news2024/9/20 22:26:04

在上篇博客中,我们只是进行突发读写,没有使用读写fifo对ddr3进行读写,因ddr3读写接口都是256位宽,所以ddr3的读写fifo输入和输出都是32位,和ddr3对接的接口都是256位,如下面示意图所示。下面的截图为ddr3的fifo读写功能示意图,本章节侧重于对write_fifo和read_fifo的仿真

调用写fifo

选择Block RAM

设置写宽度为32,读宽度为256,设置高电平复位

选择默认

勾选读写数据计数

点OK,完成fifo配置

点击Generate,生成fifo模块

调用读fifo

选择Block RAM

设置写位宽为256,设置读位宽为32位,并且设置高电平复位

选择默认

勾选读写数据计数

点OK,完成fifo配置

点击Generate,生成fifo模块

仿真工程加入读写fifo,如下图所示

将写fifo模块例化到test_tb仿真工程里,如下图所示

写fifo

可以看到wr_en为1写入了0~15一共16个数据,但fifo的写计数wr_data_count输出为8也就是总数据的一半,而fifo读计数rd_data_count输出为1也就是fifo写计数wr_data_count的8分之一。

ddr的写入和读出宽度都是256,也就是8个32位数据。从上图我们可以看出写入16个32位数据,写fifo的写计数wr_data_count为8,读计数的rd_data_count为1,而我们突发读写章节可以看到,设置4个写突发也就是写入4个256位宽度的数据,也就是32个32位数据,那么fifo写计数wr_data_count为16,而fifo读计数rd_data_count为2。可以看出ddr的突发读写,如果使用fifo读计数的rd_data_count就能和ddr的突发读写对上,比如我们ddr需要突发传输4次也就是4个256位宽的数据,那么只需fifo读计数rd_data_count为2就能刚好fifo写入4个256位数据,当然如果为了更加保险可以让fifo读计数rd_data_count为4再进行一次突发传输。

我们验证一下,写入32个32位数据,看是否和我们计算的一样,从下图可以看出写入0~31一共32个数据,写fifo计数wr_data_count为16,读fifo计数rd_data_count为2,和我们上面计算的一样,所以ddr写突发传输我们使用写fifo计数rd_data_count这个计数值来触发wr_len_en写突发使能信号

验证fifo写入数据和读出数据是否一样,从图中可以看到fifo写入的最后一个数据是1f,rd_data_count为2时产生一个读使能,读出来了四个256位宽的数据,读完成后fifo的empty信号拉高,代表数据都读出为空了。

读出的第一个数据8个32位数据0~7

读出的第二个数据8个32位数据8~f

读出的第三个数据8个32位数据10~17

读出的第四个数据8个32位数据18~1f,可以看到最后一个数据和我们写入的是一样的,都是1f,整个写fifo测试完成

读fifo

从下面的截图我们可以看出,一共写入四个256位宽的数据,fifo的写数据计数wr_data_count为4,fifo的读数据计数rd_data_count为32,我们刚好写入的是32个32位也就是4个256位,所以fifo写计数wr_data_count为实际写入的256位数据的个数,也就是ddr输入接口位宽的数据个数为4,而读计数的rd_data_count为输出接口32位宽的数据的个数为32

可以看到ddr读突发里面输出数据是256位的,所以fifo的输入数据数量,最好使用fifo写计数器wr_data_count的计数值来触发rd_len_en突发读使能信号,这样能刚好和输入的256位宽数据个数对应

再来看写入fifo的数据和读出fifo的数据是否一致,当wr_data_count为4时触发fifo读使能信号,一共读出32个32位数据

读出32位数据,从0~18一共19个数据

读出32位数据,从19~31一共13个数据,可以看出一共读出了32个32位数据,写入的最后一个数据为31化成16进制也就是1f,可以看出读写数据是一致的,并且empty信号拉高,说明fifo数据都读空了。

整体的ddr的读写fifo仿真就到这里,如果哪里写的有问题,欢迎各位指正

如若转载,请注明出处

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/177764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《c++ primer》第五章 语句

前言 建议看书的时候就看一下异常,其它的直接跳过 一、简单语句 ​ 一条表达式语句以;结尾,它的作用是执行表达式并丢弃掉求值结果。一行如果只有一个;也是一条语句,称为空语句。复合语句时用{}括起来的语句或者声明, 也称为块&a…

Qt之QLCDNumber

文章目录一、QLCDNumber简介二、QLCDNumber属性示例获取系统时间示例代码提示:以下是本篇文章正文内容,下面案例可供参考 一、QLCDNumber简介 QLCDNumber控件用于显示一个LCD数字。 它可以显示几乎任意大小的数字。可以显示十进制、十六进制、八进制或…

【并发编程】ForkJoin线程池

一、使用场景 用于CPU密集型的任务,通过把任务进行拆分,拆分成多个小任务去执行,然后小任务执行完毕后再把每个小任务执行的结果合并起来,这样就可以节省时间。 CPU密集型(CPU-bound):CPU密集…

Java 初识IO流

IO流概述 用于读写文件中的数据(可以读写文件,或网络中的数据…) IO流的分类 纯文本文件:用windows系统自带的记事本打开并且能读懂的文件。如:txt文件、md文件、xml文件、lrc文件等. IO流的体系 总结 什么是IO流? 存…

Amesim2021.1与Simulink联合仿真配置流程及经验总结

Amesim 与 Simulink 联合仿真配置相对比较麻烦,笔者曾经凭运气配置成功过,但后来在别的电脑又多次配置失败,经过一些尝试及咨询专业人士,对Amesim2021.1版本与Simulink联合仿真配置做了一个流程总结,希望能帮助有需求的…

AutoSAR MemMap模块实例解析及注意事项

文章目录 1 AUTOSAR Memory Mapping的运行机制1.1 AUTOSAR Memory Mapping实例解析1.2 编译器的选择2 内存分配关键字3 如何生成BSW和 SWC的MemMap.h文件4 编译优化的影响传送门 ==>> AutoSAR入门和实战系列总目录 1 AUTOSAR Memory Mapping的运行机制 AUTOSAR Memory …

恶意代码分析实战 6 OllyDbg

6.1 Lab 9-1 程序分析 首先,进行静态分析,使用strings。 CreateFileA RegQueryValueExA RegOpenKeyExA RegSetValueExA RegCreateKeyExA RegDeleteValueA WideCharToMultiByte GetModuleHandleA GetEnvironmentVariableA SetEnvironmentVariableA SOFTW…

DaVinci:Camera Raw(ARRI)

本文主要介绍 ARRI 的 Raw 格式素材相关的 Camera Raw 参数。解码质量Decode Quality解码质量决定了图像解拜耳之后所呈现的素质,也与最终的输出息息相关。默认为“使用项目设置” Use project setting,表示使用项目设置对话框中的“Camera RAW”解码质量…

mysql之explain(性能分析)

目录 1.说明 2.使用方式 3.字段解释 (1)id (2)select_type (3)table (4)type (5)possible_keys (6)keys (7)ken_len (8)ref ​编辑 (9)rows (10)extra 4.示例 1.说明 使用EXPLAIN关键字可以模拟优化器执行SOL查询语句,从而知道MySOL是如何处理你的S…

MySQL主从复制、读写分离

一、MySQL主从复制 MySQL数据库默认是支持主从复制的,不需要借助于其他的技术,我们只需要在数据库中简单的配置即可。 1. MySQL主从复制概述 MySQL主从复制是一个异步的复制过程,底层是基于MySQL数据库自带的 二进制日志 功能。就是一台或多台…

Redis持久化-RDB

Redis持久化-RDB 1.官方资料 在线文档 : https://redis.io/topics/persistence 2.Redis持久化方案 1.RDB(Redis DataBase) 2.AOF(Append Of File) 3.RDB是什么 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c…

尚医通-手机登录-判断用户登录状态-用户网关整合(三十)

目录: (1)前台用户系统-手机登录-前端整合 (2)全局的登录事件-判断登录状态 (3)登录注册-用户认证和网关整合 (1)前台用户系统-手机登录-前端整合 service-user模块的配…

图论(入门版)

目录 1 向、权 2 最小生成树 2.1 Prim算法 2.2 Kruskal算法 3 最大流问题 3.1 Naive算法 3.2 Ford—Fulkerson算法 3.3 Edmonds—Karp算法 3.4 Dinic算法 4 最小割问题 5 二部图 5.1 判断是否是二部图的方法 5.2 匈牙利算法(最小匹配问题&a…

跳跃表,也称跳表

跳表是Redis五种数据结构中有序集合Zset的底层实现 可以看成多个有序链表 链表相较于数组删除和插入的效率要高很多(改变指针指向就行) 但是在查找的时候跟数组比起来,速度就比较慢了,因为链表需要从头开始遍历 为了改变这个查找…

索宝蛋白冲刺A股上市:计划募资5.5亿元,复星等为其股东

近日,宁波索宝蛋白科技股份有限公司(下称“索宝蛋白”)预披露更新招股书,准备在上海证券交易所主板上市。据贝多财经了解,索宝蛋白曾于2022年7月1日提交招股书,此次招股书更新了截至2022年6月30日的财务数据…

Java判断结构练习

目录 1.倍数 2.零食 3.区间 4.三角形 5.游戏时间 6.加薪 7.动物 8.选择练习1 9.DDD 10.点的坐标 11.三角形类型 12.游戏时间2 13.税 14.简单排序 15.一元二次方程公式 16.平均数3 1.倍数 读取两个正整数值 A 和 B。 如果其中一个是另一个的整数倍&#xff0c…

树状数组(代码模板和原理详解)

树状数组代码模板 普通数组:求前缀和: O(n)O(n)O(n),修改:O(1)O(1)O(1) 前缀和数组:求前缀和:O(1)O(1)O(1),修改:O(n)O(n)O(n) 鱼和熊掌不可兼得,当我们同时需要对一个…

NEZUKO: 1——202201152003

NEZUKO: 1——202201152003 About Release Back to the Top Name: nezuko: 1Date release: 21 Aug 2019Author: yunaranyancatSeries: nezuko Download Back to the Top Please remember that VulnHub is a free community resource so we are unable to check the machin…

在Java中使用堆排序求解TopK问题

在Java中使用堆排序求解TopK问题 1. 问题描述 给定一个很大的数组,长度100w,求第k大的数是多少? 这个问题是一个很经典的问题,如果采用传统方式,即现排序,然后找到第k个数,对于数据量很大的时…

Knowledge-based-BERT(一)

多种预训练任务解决NLP处理SMILES的多种弊端,代码:Knowledge-based-BERT,原文:Knowledge-based BERT: a method to extract molecular features like computational chemists,代码解析从K_BERT_pretrain开始。模型框架…