草庐IT

Quartus与Modelsim联合仿真ROM IP时输出波形一直为零的问题以及ROM配置仿真教程

WayneLin_ 2024-05-15 原文

本人近期在使用Quartus Prime与 ModelSim联合对ROM IP进行仿真时,遇到了一个问题,仿真输出波形一直为零。如下图,其中neur_W即为ROM的输出。

在反复确认本人代码没有问题后,经过反复尝试发现是ROM IP的初始化文件——.mif文件在仿真时加载出现问题。本人上网查阅资料后发现了问题原因并解决了问题。

主要原因为.mif文件没有放在该项目的prj文件夹下,即.mif文件应与.qpf文件同属一个文件夹下,而不能放在子目录下。

在修改了.mif文件的保存位置之后,再次仿真,仿真结果不再是全零,而是正常状态了。

 

如该方法依然无法解决仿真输出波形为零的问题,可以参照以下链接:

(27条消息) 解决调用rom ip核时modelsim仿真波形一直为零_今天画板子了没的博客-CSDN博客_modelsim romhttps://blog.csdn.net/qq_44956862/article/details/118722018


 下面附上整个ROM的配置和仿真全过程:

1.创建ROM的初始化文件

ROM的初始化需要用到.mif或者.hex文件。这里介绍.mif文件的创建方法。.mif文件的格式如下图。

 我们可以使用Quartus创建.mif文件,首先选择File—new。

然后弹出如下图所示窗口,选择“Memory Initialization File”。

 在下一个界面中设置ROM的位宽和位深。

 此时已经新建好了一个.mif文件,如下图所示。接下来需要对其内容做修改。图中像表格一样的是一个8列32行的存储单元阵列,每一个单元格就是一个存储单元,按照之前的设置,每个单元格(存储单元)位宽为8bits,即最大可以存储数字255。通过修改每个单元格内的数字可以设置每个存储单元内的数据。

 通过右击行或者列可以调整坐标和单元格内数据的格式。

 

 在填充每个单元格的数据时,可以选择手动填写、从别的文本(如Excel文档)中复制和通过Quartus自带功能自动填写。当从别的文本中复制粘贴时,需注意使用右击后的“Paste”按键,Ctrl+V无法粘贴。

若使用Quartus自带功能自动填写,则需要右击单元格,然后选择“Custom Fill Cells”。

之后弹出如下图界面。红框1内设置自动填充单元格的地址范围。红框2和红框3设置自动填充的内容。若选择红框2,则按给定序列重复填充。若选择红框3,则需给定等差数列的首项和公差,同时需要设置递增还是递减。

 

 当设置好.mif文件的内容后,点击File—Save,然后选择保存位置和文件名。如下图,可以发现Quartus已自动将位置选择在prj文件夹中,即与.qpf文件同属于一个文件夹。注意,该.mif文件必须放在次文件夹中(与.qpf文件同文件夹下),千万不要放在ip_core或任何其他子文件夹下,否则在进行Quartus与Modelsim的联合仿真时,Modelsim不会报错,但ROM的仿真输出波形会是全零。保存好后即可创建ROM IP了。

 

 

2. 在quartus中创建ROM IP

本人使用的是Quartus Prime 19.1,首先在界面右侧的IP Catalog中搜索ROM。

 双击选择相应的ROM(以单端口ROM为例),然后会弹出下图中窗口,点击文件夹目录右侧的按钮选择IP保存的位置并命名。

 点击OK后弹出对ROM IP进行具体设置的对话框,如下图。

 图示1号红框部分,上部分为设置ROM的位宽,下部分为设置ROM的位深。

2号红框可选择存储单元的类型,不同FPGA芯片内部的存储单元可能不同,这里选择Auto即可。

3号框设置使用的时钟模式。“single clock”即用一个时钟控制存储块的所有寄存器,“Dual clock”为输入时钟控制地址寄存器,输出时钟控制数据输出寄存器。

点击next后,图示红框部分的上部分"'q' output port"为添加一个输出寄存器,会使输出延迟一个时钟周期,一般不需要,可以去掉勾选。下面的红框内可以设置是否创建异步复位信号“aclr”,和是否创建读使能信号“rden”。

 

 在下一步后,需要选择对ROM初始化的.mif文件,然后点击next。

 

 下一个界面如下图所示,该界面没有需要我们配置的参数。它显示了我们如果单独使用第三方仿真软件(如ModelSim)时需要用到的Altera仿真库,这里是需要用到“altera_mf”。

 下一个界面如下图所示,这里是设置生成的文件。我们勾选“_inst.v”选项,该文件为这个IP的例化模板,在使用该IP例化时可以直接复制该文件中的例化模板,然后修改其中的信号连线。

 点击finish,至此ROM IP已创建完毕。

有关Quartus与Modelsim联合仿真ROM IP时输出波形一直为零的问题以及ROM配置仿真教程的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  4. 在VMware16虚拟机安装Ubuntu详细教程 - 2

    在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主

  5. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  6. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  7. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  8. ruby - 在 RUBY 上的 PADRINO 框架上使用 RSPEC 进行测试的教程 - 2

    我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa

  9. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  10. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

随机推荐