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

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中,通信系统的有效性用带宽来衡量,带宽定义为每秒传输的比特数,单位 b/s,或 bps。在 DDR3 接口的产品设计中,DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置,以及测试 DDR3 读写带宽的过程,FPGA 器件型号是 Cyclone 10 GX 10CX220YF780E6G,DDR3 颗粒型号是 Winbond W631GG6KB。

目录

1 EMIF IP 配置

2 AMM 接口

3 读写带宽测试


1 EMIF IP 配置

        在进行 EMIF DDR3 读写带宽测试之前,先确保 EMIF DDR3 IP 时钟与时序参数配置正确。

         General -> Clocks 选项卡,填写内存时钟频率 Memory clock frequency ,这里填了 933M,PLL 参考时钟频率为 116.625MHz.

        Memory -> Latency and Burst 选项卡,根据 DDR3 内存颗粒用户手册,设置 Memory CAS latency 和 Memory write CAS latency 值。

        这里所使用的 DDR3 内存型号为 Winbond W631GG6KB,933M 对应的 tCK 为 1.07ns,根据手册得知,CL = 13,CWL = 9.

 Memory Timing 参数如下:

 

2 AMM 接口

        Quartus EMIF IP 提供了 AMM(Avalon Memory-Mapped) 接口,用于 DDR3 数据的传输,AMM 接口定义如下。

        amm_ready 扮演 waitrequest_n 的角色,当控制器处于 busy 状态时,该信号将会拉低;amm_burstcount 表示读/写 burst 传输的周期数;DDR3 颗粒数据接口位宽是 16bit,8n-prefetch,所以 amm_writedata 与 amm_readdata 的位宽是 16bit × 8 = 128bit。

AMM 接口读写时序图与其他细节,可以参考 Intel 官网 Avalon® 接口规范简介。

3 读写带宽测试

        在本设计中,DDR3 读写采用固定地址突发的方式,amm_burstcount 大小固定为 64,每次先写入 64 个数据,再读出 64 个数据。

        同时定义两个计数器 wr_data_cnt 与 rd_data_cnt,用于一段时间读写数据的计数,需要注意计数器位宽,避免溢出的情况。这里计数器位宽定义 32bit,时间间隔取 200ms。

VHDL 设计代码如下,

process(sys_rst,sys_clk) 
beginif sys_rst = '1' thenpstate <= st_init;buf_test_wr_req <= '0';buf_test_rd_req <= '0';test_wr_q <= (others => '0');test_wr_mask <= (others => '0');wr_cnt_scope <= (others => '0');rd_cnt_scope <= (others => '0');rd_err_cnt_scope <= (others => '0');elsif rising_edge(sys_clk) thenif timeout_event = '1' thenwr_cnt_scope <= (others => '0');rd_cnt_scope <= (others => '0');rd_err_cnt_scope <= (others => '0');end if;case(pstate) iswhen st_init => -- power on delay and initializationif ddr_init_done = '1' thenpstate <= st_idle;elsepstate <= st_init;end if;when st_idle => -- idle statepstate <= st_test_write;when st_test_write => -- pull up req and wait fot ackif buf_test_wr_req = '1' and test_wr_ack = '1' thenpstate <= st_test_write_end;buf_test_wr_req <= '0';elsepstate <= st_test_write;buf_test_wr_req <= '1';end if;when st_test_write_end => -- wait write endingif test_wr_end = '1' thenpstate <= st_test_read;elsepstate <= st_test_write_end;end if;test_wr_q(4*128-1 downto 3*128) <= DDR_DATA_PATTERN;test_wr_q(3*128-1 downto 2*128) <= DDR_DATA_PATTERN;test_wr_q(2*128-1 downto 1*128) <= DDR_DATA_PATTERN;test_wr_q(1*128-1 downto 0*128) <= DDR_DATA_PATTERN;test_wr_mask <= (others => '0');if test_wr_rden = '1' thenwr_cnt_scope <= wr_cnt_scope + 1;end if;when st_test_read => -- pull up req and wait for ackif buf_test_rd_req = '1' and test_rd_ack = '1' thenpstate <= st_test_read_end;buf_test_rd_req <= '0';elsepstate <= st_test_read;buf_test_rd_req <= '1';end if;when st_test_read_end => -- wait read endingif test_rd_end = '1' thenpstate <= st_idle;elsepstate <= st_test_read_end;if test_rd_rdvld = '1' thenrd_cnt_scope <= rd_cnt_scope + 1;if test_rd_rdata(4*128-1 downto 3*128) /= DDR_DATA_PATTERN thenrd_err_cnt_scope <= rd_err_cnt_scope + 1;elsif test_rd_rdata(3*128-1 downto 2*128) /= DDR_DATA_PATTERN thenrd_err_cnt_scope <= rd_err_cnt_scope + 1;elsif test_rd_rdata(2*128-1 downto 1*128) /= DDR_DATA_PATTERN thenrd_err_cnt_scope <= rd_err_cnt_scope + 1;elsif test_rd_rdata(1*128-1 downto 0*128) /= DDR_DATA_PATTERN thenrd_err_cnt_scope <= rd_err_cnt_scope + 1;end if;end if;end if;when others => NULL;end case;end if;
end process;

SignalTap 调试波形如下:

读带宽:

7533666 × 128bit × 1s/200ms = 4.822Gbps

写带宽:

7653248 × 128bit × 1s/200ms = 4.898Gbps

可以进一步计算,在突发传输为 64 时,DDR3 的读写效率约 32.56%.

相关文章:

【Quartus FPGA】EMIF DDR3 读写带宽测试

在通信原理中&#xff0c;通信系统的有效性用带宽来衡量&#xff0c;带宽定义为每秒传输的比特数&#xff0c;单位 b/s&#xff0c;或 bps。在 DDR3 接口的产品设计中&#xff0c;DDR3 读/写带宽是设计者必须考虑的指标。本文主要介绍了 Quartus FPGA 平台 EMIF 参数配置&#…...

Flutter:flutter_local_notifications——消息推送的学习

前言 注&#xff1a; 刚开始学习&#xff0c;如果某些案例使用时遇到问题&#xff0c;可以自行百度、查看官方案例、官方github。 简介 Flutter Local Notifications是一个用于在Flutter应用程序中显示本地通知的插件。它提供了一个简单而强大的方法来在设备上发送通知&#…...

Spring AOP (面向切面编程)原理与代理模式—实例演示

一、AOP介绍和应用场景 Spring 中文文档 (springdoc.cn) Spring | Home 官网 1、AOP介绍&#xff08;为什么会出现AOP &#xff1f;&#xff09; Java是一个面向对象&#xff08;OOP&#xff09;的语言&#xff0c;但它有一些弊端。虽然使用OOP可以通过组合或继承的方…...

什么是SCRUM认证体系 ?

Scrum认证是一个针对个人职业发展的认证体系&#xff0c;基础级认证主要面向Scrum的三个角色&#xff1a;Scrum Master、Scrum Product Owner 和 Developers。Scrum认证体系由Scrum官方机构—国际Scrum联盟&#xff08;ScrumAlliance.org&#xff09;制定和维护&#xff0c;Scr…...

DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记

文章目录 1. 添加.cdd2. CAPL中调用接口发送DoIP请求3. “Ethernet Packet Builder”的妙用4. CANoe也可以做交互界面在进行测试前,先检查车载以太网硬件连线是否正确,需要注意连接两端的Master、Slave,100M、1000M等基本情况,在配置VN5620的时候就可以灵活处理了。成功安装…...

Grafana - TDEngine搭建数据监测报警系统

TDengine 与开源数据可视化系统 Grafana 快速集成搭建数据监测报警系统 一、介绍二、前置条件三、Grafana 安装及配置3.1 下载3.2 安装3.2.1 windows安装 - 图形界面3.2.2 linux安装 - 安装脚本 四、Grafana的TDEngine配置及使用4.1 登录4.2 安装 Grafana Plugin 并配置数据源4…...

ES6基础知识二:ES6中数组新增了哪些扩展?

一、扩展运算符的应用 ES6通过扩展元素符…&#xff0c;好比 rest 参数的逆运算&#xff0c;将一个数组转为用逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5[...document.querySelectorAll(div)] // [<div>, &l…...

使用CRM分析数据有哪些功能?

CRM数据分析软件可以帮助企业增强竞争力&#xff0c;并更好地了解客户需求及市场变化&#xff0c;助力企业数据分析&#xff0c;并提供实时更新的数据和分析结果&#xff0c;CRM数据分析软件的主要特点是什么&#xff1f;包括以下6个特点。 CRM数据分析软件的主要功能通常包括…...

大数据课程综合实验案例---课设问题汇总

最近翻看两年前的大数据课设&#xff0c;感觉这个大数据课设实验当时答辩 在大数据课设实验过程中&#xff0c;我遇到了很多问题&#xff0c;在这里做出汇总&#xff1a; 1、MySQL启动报错 首先&#xff0c;我的MySQL有时候启动不了&#xff0c;当我输入这个命令的时候&#…...

基于Vue+Element Plus实现表格组件

目录 前言分析实现例子效果图前言 表格对于管理类项目是很重要的,可以只管的展示和比比较数据。使用Element Plus能解决一部分问题,但是还存在一些缺点和不足。 分析 浏览器上表格数据展示空间不足。列显示太多不够直观。完全依赖官方表格组件代码过于臃肿不利于管理和优化…...

MYSQL 主从复制

在读多写少的网络环境下&#xff0c;MySQL 如何优化数据查询方案 假如说一个电商平台 到双十一了 大量的读写操作 如果不做点什么的话 平台就被冲烂了 那我们要怎么办呢? 你或许会想 林北直接一个redis缓存 帮数据库度过难关 这个操作实际上是不行的 因为应用缓存的原则之一…...

网络安全领域关键信息泄露事件引发关注

近日&#xff0c;一家知名网络安全公司发布了一份报告揭露了一起重大信息泄露事件。据称&#xff0c;该事件涉及大量敏感用户数据的泄露引发了全球网络安全领域的广泛关注。 根据报道&#xff0c;该事件发生在全球范围内涉及多个国家和组织。专家指出&#xff0c;此次泄露事件…...

AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明

部署包作者:秋葉aaaki 免责声明: 本安装包及启动器免费提供 无任何盈利目的 大家好&#xff0c;我是风雨无阻。众所周知&#xff0c;StableDiffusion 是非常强大的AI绘图工具&#xff0c;需要详细了解StableDiffusion的朋友&#xff0c;可查看我之前的这篇文章&#xff1a; 最…...

夯实数字化转型安全地基,华东某农商行开源安全治理经验

华东某农村商业银行是一家全国首批组建的股份制农村金融机构。近年来&#xff0c;该农商行坚持“科技强行”战略&#xff0c;进一步夯实数字化核心基础&#xff0c;积极推动金融科技与产品、服务的深度融合&#xff0c;努力拓展数字金融的包容性&#xff0c;让数字金融更有温度…...

第G3周:CGAN|生成手势图像

目录 一、准备工作1. 导入数据2. 数据可视化 二、构建模型1. 构建生成器2. 构建鉴别器 三、训练模型1. 定义损失函数2. 定义优化器3. 训练模型 四、理论基础1.DCGAN原理2.DCGAN网络3.个人感悟 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…...

wireshark导出H264裸流

导出H264裸流 安装wireshark下载rtp_h264_extractor.lua脚本配置lua脚本重启wireshark筛选 安装wireshark 下载抓包工具&#xff1a;首先&#xff0c;您需要下载并安装一个网络抓包工具&#xff0c;例如Wireshark&#xff08;https://www.wireshark.org&#xff09;或tcpdump&…...

Sentinel针对IP限流

改造限流策略的针对来源选项 import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.RequestOriginParser; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class Senti…...

S475支持 ModbusRTU 转 MQTT协议采集网关

6路模拟量输入和2路RS485串口是一种功能强大的通信接口&#xff0c;可以接入多种设备和系统&#xff0c;支持4-20mA输出的传感器以及开关量输入输出。本文将详细介绍6路模拟量输入和2路RS485串口的应用场景和功能&#xff0c;重点介绍其在SCADA、HMI、远程数据监控以及采集控制…...

js的变量

目录 变量 var和let 1.for循环中的声明 2.暂时性死区 3.全局声明 4.条件声明 const声明 变量 java是一种强数据类型语言,对数据类型要求高&#xff0c;要声明清楚变量的类型 数据类型 变量名 值 -----> int a 10 而javaScrit是一种弱类型语言&#xff0c;在声明变…...

MicroPython for ESP32

MicroPython for ESP32 开发板引脚图 环境搭建 参考资料 https://zhuanlan.zhihu.com/p/587027345 官方资料 https://docs.micropython.org/en/latest/ http://vcc-gnd.com/rtd/html/esp32/quickref.html#i2c 创建一个虚拟环境&#xff0c; conda create -n esp32 pytho…...

选择适合产品需求管理的项目管理系统,打造完美项目流程!

一般来说&#xff0c;互联网产品经理收到的需求一般分为业务需求、用户需求和产品功能需求。业务需求主要包括战略和规则需求&#xff1b;用户需求一般是真实反馈、真实需求、吐槽、建议等。&#xff1b;功能需求主要围绕产品的旧功能问题进行升级&#xff0c;bug处理、技术问题…...

@monaco-editor/react组件CDN加载失败解决办法

monaco-editor/react引入这个cdn资源会load失败 网上很多例子都是这样写的&#xff0c;我这样写monaco会报错 import * as monaco from monaco-editor; import { loader } from monaco-editor/react;loader.config({ monaco });改成这样 import * as monaco from monaco-edi…...

java对象的强引用,弱引用,软引用,虚引用

前言:java对象在java虚拟机中的生存状态&#xff0c;面试可能会有人问道&#xff0c;了解一下 这里大量引用 《疯狂Java讲义第4版》 书中的内容...

ubuntu ssh

前置 需要知道自己的ip 如果没有ifconfig sudo apt-get install net-tools然后 ifconfig中文用户 winr,输入 intl.cpl在git里&#xff0c;选zh_cn和UTF-8 安装 sudo apt-get install -y openssh-client openssh-server设置开机启动 sudo systemctl enable sshsudo nano…...

js:斐波那契额数列生成器Generator

请你编写一个生成器函数&#xff0c;并返回一个可以生成 斐波那契数列 的生成器对象。 斐波那契数列 的递推公式为 Xn Xn-1 Xn-2 。 这个数列的前几个数字是 0, 1, 1, 2, 3, 5, 8, 13 。 /*** return {Generator<number>}*/ var fibGenerator function*() {let pre…...

行列转换.

表abc&#xff1a; &#xff08;建表语句在文章末尾&#xff09; 想要得到&#xff1a; 方法一 with a as(select 年,产 from abc where 季1), b as(select 年,产 from abc where 季2), c as(select 年,产 from abc where 季3), d as(select 年,产 from abc where 季4) selec…...

CentOs 7利用iscaiadm工具发现并连接外接存储

CentOs 7利用iscaiadm工具发现并连接外接存储 1.1 使用iscsiadm发现存储 iscsiadm -m discovery -t st -p ${外接存储IP} # 执行结果may like ${外接存储IP}:3260,1 iqn.${存储唯一标识} 1.2 登入发现的存储 iscsiadm -m node -T iqn.${存储唯一标识} -p ${外接存储IP} -…...

Java期末复习基础题编程题

文章目录 基础题记录实践题记录&&与C比较题目1&#xff1a;题目2&#xff1a;题目3&#xff1a; 基础题记录 编译型语言&#xff1a; 定义&#xff1a;在程序运行之前&#xff0c;通过编译器将源程序编译成机器码(可运行的二进制代码)&#xff0c;以后执行这个程序时&…...

资深测试总结,自动化测试-ddt数据驱动yaml文件实战(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 ddt 驱动 yaml/ym…...

F12 浏览器调试模式页面刷新 network 日志刷新消失的解决办法

每次请求刷新后都把之前的请求记录刷新掉了&#xff0c;把preserve log勾选上后&#xff0c;所有的请求都会保留&#xff0c;再也不怕抓不到记录了。...