首页 > 其他分享 >Vivado DDR4, BRAM与定点数加法模块交互调试

Vivado DDR4, BRAM与定点数加法模块交互调试

时间:2024-02-29 20:12:58浏览次数:28  
标签:real DDR4 Vivado 定点数 加法 FM ROW

Vivado DDR4, BRAM与定点数加法模块交互调试

一、实验目的

在上一实验《Vivado DDR4和BRAM交互调试经验分享 - George2024 - 博客园 (cnblogs.com)》的基础上,加入定点数加法这一功能模块,搭建一个最小的系统,实现DDR4, BRAM和功能模块的交互。相关代码已经发布在《GeorgeLin200100/FM_ADD (github.com)》,欢迎指正。

二、实验流程

分为5步(假设两个源操作数矩阵的列数均为FM_COL,行数均为FM_ROW):

  1. 利用随机数生成模块,生成FM_COL \(\times\) FM_ROW \(\times\) 2个定点数,并全部通过DDR UI端naive接口写入DDR。
  2. 从DDR读出刚刚写入的定点数,前FM_COL \(\times\) FM_ROW个数写到BRAM0中,后FM_COL \(\times\) FM_ROW个数写到BRAM1中。
  3. 同时从BRAM0和BRAM1中读,执行定点数加法操作,并将结果写回BRAM0,覆盖原有的数据。
  4. 将运算结果从BRAM0中读出,写回DDR。
  5. 从DDR中读出运算结果,检验正确性。

三、实验结果

  1. 实现了对于矩阵数据规模(FM_COL, FM_ROW) = (8, 4) / (16, 4) / (16, 8) / (64, 4) /(64, 8) /(128, 4)的有符号定点数加法(15位小数位),结果无误。
  2. 实现了结果的自动检查,可在tcl console中查看测试是否通过。

四、一些问题 & 体悟

问题1:Vivado有时会出现奇怪的仿真波形。如下列代码:

always @(posedge clk) begin
	if (a) 
		b <= b + 1;
end

按照正常时序,b应该在a拉高后一周期变化。但是Vivado在多次行为级仿真中表现出a、b同时拉高。本问题在换用modelsim作为仿真工具后不再出现,在代码赋值语句中手动添加延迟后也不再出现,值得关注。Xilinx社区相关回答:[1]

问题2:real类型的比较出错。

在代码文件[E1_qadd_tb.sv]中,对于c_realc_ref两个real类型数据,假如直接判断c_real==c_ref?,会出现判断错误。采用代码文件中如下写法,判断无误。如果判断边界±0.000001再除以\(10^6\),那么判断准确率下降到84%左右。

if (((c_real - c_ref) > -0.000001) & ((c_real - c_ref) < 0.000001)) begin
	$display("Case passed");
	right_num = right_num + 1;
end else begin
	$display("Test failed");
	err_num = err_num + 1;
end

问题3(未解决):大数据规模下出现问题。

本工程在矩阵规模\(\le 128\times4\)时运行无误,经测试,在矩阵规模\(=256\times4\)时出现一定问题(app_wdf_rdy在数据传输后期很长时间才拉高一个周期,严重影响传输效率)。此问题待排查。



代码仓库地址:GeorgeLin200100/FM_ADD (github.com)。欢迎指正!

标签:real,DDR4,Vivado,定点数,加法,FM,ROW
From: https://www.cnblogs.com/georgelin/p/18045313

相关文章

  • Invalid character ( found Illegal strategy name: 'Vivado Synthesis Defaults(2)'
    出现问题的操作步骤:Tools---settings---啥也没改,点击ok或者apply就会弹出这个错误,如下图: 解决方法: 在4数字标的输入框里输入1,回车之后这个问题就消失了。可能是不知道啥时候动点了什么,导致了这个问题,比较像是Vivado的Bug。本来都打算重装vivado了,还好随便试了一下解决了。......
  • [转帖]内存(DDR/DDR2/DDR3/DDR4)的速度等级和时钟频率
    以下全部图片均来自镁光(Micron)公司产品的数据手册。DDR:以MT48LCxx型号的DDR内存芯片为例,数据手册中给出如图1所示的一个表格。从表格中可以看出它的主频(ClockFrequency)。图1不同速度等级的DDR主频它的主频与传输数据的频率相同。我们可以从时序图中观察出来。随便......
  • vivado 时序约束1
    1.常见的xdc约束命令2.对异步时钟进行时序约束对异步时钟组和时钟域交汇进行约束在“ClockInteraction”(时钟交互)报告中可快速明确异步关系:无公用基准时钟的时钟对或者无公共周期(未扩展)的时钟对。即使时钟周期相同,从不同时钟源生成的时钟仍为异步关系。必须仔细审查异步“Clo......
  • 1-1-04 VIVADO设置VSCODE为第三方编译器
    使用第三方编辑工具可以让开发代码变的更加高效,vscode是非常好用的第三方编辑器,下面我们演示如何vivado中设置vscode为第三方编译器双击打开vivado程序点击设置选择代码编译器"TextEditor"选择编辑器,里面包含Notepad++等各类编译器,但是我们要设置的VSCODE并不包含在里面......
  • 1-1-02 AMD(XILINX) FPGA开发工具Vitis(vivado)安装
    1.1Vitis概述Vitis统一软件平台可实现在Xilinx异构平台(包括FPGA、SoC和VersalACAP)上开发嵌入式软件和加速应用。它可为边缘、云和混合计算应用加速提供统一编程模型。利用与高层次框架的集成,通过加速库采用C、C++或Python进行开发,或者使用基于RTL的加速器和低层次......
  • 35 VIVADO用户IP软件总线接口封装
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述使用VIVADO基于图形化创新编程FPGA的方式可以大大提高FPGA编程效率,但是前提是把代码打包成图形化的IP......
  • 36 高效的VIVADO BlockDesign设计方法
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述由于VIVADO图形化的编程方式中大量应用,所以我们大部分时候都需要对IP进行图形化的封装,前面两节课实验,......
  • 34 VIVADO自定义IP简单封装方法
    软件版本:VIVADO2021.1操作系统:WIN1064bit硬件平台:适用XILINXA7/K7/Z7/ZU/KU系列FPGA登录米联客(MiLianKe)FPGA社区-www.uisrc.com观看免费视频课程、在线答疑解惑!1概述XILINX作为FPGA全球老大,不仅仅是硬件技术实力,而且EDA软件也是非常优秀,XILINXVIVADO是业内最先进的开......
  • MT6785/MT6359/MT6360/MT6186/MT6631 UFS_LPDDR4X原理图
    联发科MT6785核心板是一款高度集成的基带平台,集成了蓝牙、FM、WLAN和GPS模块,旨在支持LTE/LTE-A和C2K智能手机应用。这款芯片采用了两个最高频率可达到2.05GHz的ARM®Cortex-A76核心和六个最高频率可达到2.0GHz的ARM®Cortex-A55核心,搭载ArmMali-G76MC4GPU运行速度可提升至......
  • Unity 3D定点数物理引擎实战系列1.1BEPUphysicsint 3D定点数物理引擎介绍
    1.1BEPUphysicsint3D定点数物理引擎介绍对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理......