LiteDram仿真验证(二):仿真中,DDR3初始化问题

news2024/11/16 1:46:57

目录

  • 前言
  • 一、讨论
    • 1、[init_done never goes to 1 in simulation #145](https://github.com/enjoy-digital/litedram/issues/145)
    • 2、[Add ECP5 support to standalone core generator #106](https://github.com/enjoy-digital/litedram/issues/106)
    • 3、[Help generating DDR3 Verilog module for Digilent NexysVideo Artix-7 FPGA #281](https://github.com/enjoy-digital/litedram/issues/281)
    • 结论:
  • 二、关于DDR3初始化问题
  • 三、Linux环境问题
    • 问题1:终端拉不了GitHub资源
    • 问题2:Python版本

前言

       接上一篇文章:LiteDram仿真验证(一):安装、配置及导出Verilog,上一篇文章,在搭建好环境,导出Litedram_core.v文件后,原本计划是使用镁光的DDR3模型在Vivado或Modelsim上对这个内核进行仿真。
       但是,用AXI接到内核的AXI用户接口,对模型进行testbench仿真,发现,DDR3一直无法完成初始化(即init_done,一直没有被拉高),于是乎,我查阅了GitHub项目中多个讨论。

一、讨论

1、init_done never goes to 1 in simulation #145

        这个问答中,提问者的问题大概是,litedram在仿真过程中一直没有被拉高,即使后面被拉高,也是花了很长的仿真时间。litex的作者表示可以禁用部分功能,比如串口在仿真时会花很长时间。
在这里插入图片描述

在这里插入图片描述

2、Add ECP5 support to standalone core generator #106

        在这一问答中,提问者的问题大概是,他想单独使用litedram作为控制器来控制DDR,但是他又不想使用CPU,问有没有办法避开CPU执行控制器的初始化。
        litex作者的回答:大概意思是,对于SDRAM使用纯逻辑来实现初始化不会太复杂,但是DD3/DD4,读写很复杂,CPU来初始化可能比自己写Verilog完成初始化占用更少的逻辑资源,要尽可能的使用CPU。然后又说,VexRiscv 的精简版已经很好了,将来我们可能会有更小的变体或内核,我们可以使用它,切换到它会非常容易。因此,除非您不打算使用 DDR3 和 DDR4,否则我不确定是否值得在纯逻辑中这样做。

在这里插入图片描述

3、Help generating DDR3 Verilog module for Digilent NexysVideo Artix-7 FPGA #281

       这个问答者,想生成一个litedram_core.v运用在 Digilent NexysVideo Artix-7 板卡上,但是也遇到了初始化问题。从问答中看,问答者自己写了个wishbone的py文件,但是我还没去验证他在这个是什么。有空可以看看。
在这里插入图片描述

结论:

       内核的有个CPU总线(wishbone)是需要控制的,不然无法完成Litedram的初始化。并且自己手写的wishbone初始化,占用的逻辑资源可能比他的精简版VexRiscv 占用的资源多。

       下面有个项目用VHDL对litedram进行了初始化,可惜笔者能力有限,对VHDL代码不是很所熟悉没有进行解读,读者有兴趣可以自己看。
https://github.com/antonblanchard/microwatt/tree/master/litedram/gen-src
在这里插入图片描述
       另一个项目:https://epsilon537.github.io/boxlambda/exit-mig-enter-litedram/,使用system Verilog设计了litedram的外包装,实现初始化,但是很不幸,sv代码,笔者也不熟悉,看了一段时间,没能解读。有兴趣的,自己看。值得一提的是,这个作者也遇过这个初始化的问题,并且向litex作者提问了。

二、关于DDR3初始化问题

https://github.com/enjoy-digital/litedram/blob/master/litedram/init.py

https://github.com/enjoy-digital/litex/blob/master/litex/soc/software/liblitedram/sdram.c
在这里插入图片描述

Sdram_init()
       Sdram_phy.h 还包含一个名为 init_sequence()的函数。此函数作为名为 sdram_init()的更精细初始化函数的一部分被调用。但是,Sdram_init()不是生成litedram的代码的一部分。它是sdram.c的一部分,sdram.c是liblitedram的一部分,liblitedram是基本Litex存储库的一部分,而不是LiteDRAM存储库。(也就是说,如果你单独生成litedram_core.v,并不会包含sdram_init,即没有初始化)

在这里插入图片描述

       在做Litedram项目中,我跟前文讨论的问答者一样,也是想单独使用litedram来控制DDR,但是也遇到一样的问题,做了很多工作,都没办法完成仿真,我也尝试过对wishbone进行读写,奈何不熟悉,暂时还没用完成,后面要是完成,我会继续出一篇文章讲解。
       我也尝试生成带vexriscv的arty vivado板级工程,通过testbench进行反向仿真,但是不知道为什么,仿真总是会报错,进入死循环。
       接着,我尝试按照官方仿真进行仿真,发现别有洞天:
       装好verilator,运行仿真脚本,可以根据指令实时仿真,并且产生VCD波形,通过gtkwave可以看波形,一个几秒的仿真,只需要几分钟,又快又实用。还不用自己写testbench。
在这里插入图片描述

       输入litex_sin --help,可以看到各种配置的仿真工程,可以根据自己需要产生仿真工程。
在这里插入图片描述
       我这里激活了sdram,并且定义了sdram型号,将CPU设置为vexriscv,并打开了仿真波形追踪功能,还有寄存器文档生成。
在这里插入图片描述
生成完,可以看到,进入了bois
在这里插入图片描述

       在命令行输入help,可以看到,支持的一些仿真:
       这里支持能哪些仿真,主要是看你在产生工程的时候,激活了哪些功能,我这里有CPU+SDRAM。
在这里插入图片描述

我运行了一个sdram_init,然后产生了vcd波形文件。
在这里插入图片描述

       打开波形,这里就是sdram的初始化。值得一提的是,我在检查仿真工程的时候,没有看到DDR仿真模型,他的phy接口都是内部信号,可能在内部调用了某些函数,然后接到了模型上(代码有上万行,我暂时还没看完)
加粗样式




-------因为我周五下班的时候,就干到这里,工程较大,波形我还没去研究,等下周上班看看(目前的想法是从bios中的main.c文件进行调试看看,砍掉一些我用不到的功能,比如一些串口打印信息会特别浪费仿真时间),我会对这篇文章进行补充。


未完,待续。。。。。

三、Linux环境问题

问题1:终端拉不了GitHub资源

       之前留下一个问题,后来有几个网友问起,如果在wget或者git clone,一直连接不上资源,或者显示拒绝连接时,建议在最前面加上:proxychains
在这里插入图片描述
       简单来说,Proxychains可以帮助你绕过网络封锁或限制,访问被封锁的网站或服务。通过选择可用的代理服务器,你可以获得更自由的网络访问。有些网络资源可能对特定地区或IP地址进行了限制,使用Proxychains可以通过连接到代理服务器来获取对这些资源的访问权限。用proxychains,可以解决99%的问题。

问题2:Python版本

       Litex要求Python3.7,太低的版本经常报错,我的系统Python是3.6经常报错,后来装了个3.7,因为多个版本存在系统里面,很混乱,然后就去百度,有垃圾文章就说把系统版本指向Python3.7,改了之后,系统各种问题,连apt都不能用了。后来在师兄的推荐下,装了anaconda,可以创建各种Python,要用的时候,激活一下就行。特别好用。

创建:conda create --name 名称 python=3.7
激活:conda activate --name

       像这里,我就激活了一个litex_new_0525的环境,是Python3.7。不用的时候,再切回base就行。
在这里插入图片描述

想装的,可以自己百度看看教程,还有其他指令。

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

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

相关文章

【unity插件】2d切割破坏插件-Smart Slicer 2D

文章目录 效果1.切割2.破坏3.创建源码使用1.导入插件2.摄像机3.新建地面4.新建切割刀5.新建切割食物6. 运行即可不同slicer Type的切割刀类型测试1.线性2.Complex3.点4.多边形5.explode6.创建效果 1.切割

华为OD机试之数列描述(Java源码)

数列描述 题目描述 有一个数列a[N] (N60),从a[0]开始,每一项都是一个数字。数列中a[n1]都是a[n]的描述。其中a[0]1。规则如下: a[0]:1a[1]:11(含义:其前一项a[0]1是1个1,即“11”。表示a[0]从左到右,连续出…

Java简单实现短信验证登录(Session、Redis)

前端设计 <div class"login-form"><div style"display: flex; justify-content: space-between"><el-input style"width: 60%" placeholder"请输入手机号" v-model"form.phone" ></el-input><e…

winform的RichTextBox控件追加文本及图片(实现笔记录入和笔记搜索功能)

在工作中&#xff0c;在工作中&#xff0c;难免有一些笔记要记录下来&#xff0c;方便后续工作中快速找到。之前用的是共享文档来记录的&#xff0c;但有一个缺点就是随着写的内容越来越多&#xff0c;打开变得很慢&#xff0c;搜索更加慢&#xff0c;网络不好的时候&#xff0…

Redis的常用数据结构之有序集合类型

有序集合的特点 集合中的元素有序&#xff0c;不可以重复与列表通过索引实现有序不同&#xff0c;有序集合实现有序的方式是通过给每一个集合元素设置一个分数score字段作为排序依据集合中的元素不能重复&#xff0c;但是score可以重复无法通过某一个下标的方式获取元素单个集…

大数据:spark环境搭建,local模式,standalone模式,zookeeper standby,yarn模式

大数据&#xff1a;spark环境搭建&#xff0c;local模式 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;or…

chatgpt赋能python:Python列表倒序排列

Python列表倒序排列 介绍 Python是一种强大的编程语言&#xff0c;经过多年的发展&#xff0c;它已成为最受欢迎的编程语言之一。Python列表是一个非常有用的数据结构&#xff0c;它允许您将多个项目组合在一起&#xff0c;并可以轻松地对它们进行排序和操作。本篇文章将介绍…

Cubase12没有声音解决办法(Windows 11专用)

本文章由CSDN 不想加班呀 原创&#xff0c;转载请注明出处。 作者首页&#xff1a;不想加班呀的博客_CSDN博客-Python爬虫,电脑小知识,程序员剪视频领域博主 目录 前言 解决办法 第一步&#xff08;进入系统硬件和声音设置界面&#xff09; 第二步&#xff08;在声音设置中…

【正点原子STM32连载】 第二十五章 TFT-LCD(MCU屏)实验 摘自【正点原子】STM32F103 战舰开发指南V1.2

1&#xff09;实验平台&#xff1a;正点原子stm32f103战舰开发板V4 2&#xff09;平台购买地址&#xff1a;https://detail.tmall.com/item.htm?id609294757420 3&#xff09;全套实验源码手册视频下载地址&#xff1a; http://www.openedv.com/thread-340252-1-1.html 第二十…

05.JavaWeb-Servlet

1.Servlet基础 1.1 Servlet概述 用于处理客户端传来的HTTP请求&#xff0c;并返回一个响应&#xff08;特点&#xff1a;方便、跨平台、灵活性和可扩展性&#xff09; 1.2 Servlet开发入门 1.2.1 Servlet接口及实现类 1.最基本的接口是javax.servlet.Servlet&#xff0c;Ser…

高完整性系统工程(十二):Separation Logic for Automated Verification

目录 1. INTRODUCTION TO SEPARATION LOGIC 分离逻辑 1.1 霍尔推理&#xff08;Hoare Reasoning&#xff09; 1.2 堆指针的影响 1.3 全局和局部推理&#xff08;Global and Local Reasoning&#xff09; 1.4 组合推理&#xff08;Compositional Reasoning&#xff09; 1.…

SpringBoot通过加装外部JAR包中的类实现业务插件功能

综合记录一下关于ClassLoader和Spring Bean的动态加载卸载功能 目录 一、需要说明二、总体设计三、具体设计3.1 加载卸载Bean工具类3.2 创建卸载方法3.3 创建加载方法3.4 创建获取具体服务类方法 四、总结 一、需要说明 有一个公共的发送通知的接口&#xff0c;这个接口需要做…

CUDA配置正确,但是torch.cuda.is_available()却是False的解决方案

1.torch.cuda.is_available()返回为False 有时候我们想要使用GPU加速&#xff0c;但是发现CUDA、pytorch都安装好了&#xff0c;且版本也匹配&#xff0c;但是仍然无法使用GPU,显示信息如下&#xff1a; 这时候我们可以看看是不是我们的Pytorch的问题 2.输入下面命令查看pyto…

(学习日记)2023.04.26

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

cesium-native编译

我相信点进这个博客的都是一些cesium专业人才&#xff0c;这文章只起了一个抛砖引玉的作用&#xff0c;希望各位人才不惜赐教。 Github地址&#xff1a;CesiumGS/cesium-native (github.com) 编译需求&#xff1a;升级公司的3dtile的架构&#xff0c;提高性能 博客目的&…

(转载)基于混合粒子群算法的TSP问题求解(matlab实现)

1 理论基础 标准粒子群算法通过追随个体极值和群体极值完成极值寻优&#xff0c;虽然操作简单&#xff0c;且能够快速收敛&#xff0c;但是随着迭代次数的不断增加&#xff0c;在种群收敛集中的同时&#xff0c;各粒子也越来越相似&#xff0c;可能在局部最优解周边无法跳出。…

福利·分析

竞争使得生产者剩余和消费者剩余的和最大化 无谓损失指的是由于过量生产或生产不足造成的消费者剩余和生产者剩余的净损失。 税收与补贴的福利分析 从量税效果&#xff1a; 为简单期间&#xff0c;我们对某种商品征收从量税&#xff1a;对每一销售的单元&#xff0c;征收特定…

汽车电子设计之AUTOSAR中CanNM模块

目录 前言 正文 网络节点类型 仅本地唤醒 仅网络唤醒 本地网络唤醒 KL15电唤醒 NM状态机 Bus Sleep Mode Network Mode Prepare Bus-Sleep Mode Passive Mode 状态机时间参数总结 NM状态机切换 网络管理报文结构 NM报文总体结构解析 CBV详解 常用函数接口 前言…

matlab给变量名称

效果 做法&#xff1a; 构建table-> ‘VariableNames’,{‘y’,‘x’} adata; a(:,2)linspace(0.1,4.1,41); tbltable(a(:,1),a(:,2), VariableNames,{y,x});

Verilog学习(SPI协议的Flash驱动控制)

目录 一、SPI通信协议 1.1 SPI物理层 1.2 SPI协议层 二、实战 2.1 SPI控制FLASH实现全擦除代码编写 2.2 上板验证 一、SPI通信协议 1.1 SPI物理层 SPI通信模式为主-从模式 &#xff0c;分为一主一从、一主多从&#xff1a; 片选线CS用于主机选择对应的从机进行通信&…