调用altera IP核的仿真流程—上
调用altera IP核的仿真流程—上
在学习本节内容之后,请详细阅读《基于modelsim-SE的简单仿真流程》,因为本节是基于《基于modelsim-SE的简单仿真流程》的基础上进行设计的,关于设计仿真流程的过程所涉及到的重复内容将不再详述,将会一笔带过,如果深入学习了《基于modelsim-SE的简单仿真流程》这一小节,则下面的内容将会非常的简单。
编写RTL功能代码
本小节通过调用altera的ROM宏功能模块,FPGA的ROM模块主要用于存储数据,可以在上电的时候进行写入(下载),ROM模块主要包含三个信号:时钟、地址、数据,在时钟的驱动下,往ROM写入地址,则ROM的数据端就会输出对应地址所存储的数据。采用《基于modelsim-SE的简单仿真流程》所设计的8bit计数器产生的8bit计数值作为ROM模块的地址信号,对ROM进行寻址,输出ROM中存储的数据。
在8bit计数器模块和ROM模块的基础上,新建一个RTL文件,对这两个模块进行信号映射并将ROM输出的数据信号进行输出。设计的结构如下所示:
这里如何调用altera的ROM宏功能的过程就不详细说明了,这里简单说明ROM模块的参数设置,数据位宽为8bit,存储深度为256,如下图所示。
数据输出不经过寄存器
对ROM的原始存储文件进行设置,将sin.mif文件作为原始存储数据,sin.mif文件存储256个正弦波的数据,数据位宽和ROM的数据位宽一致。
编写顶层RTL文件,将两个模块连接起来,代码如下所示
module rom_top( clk, reset_n, rom_data ); input clk; input reset_n; output [7:0]rom_data; wire[7:0]counter_out; counter counter_1( .clk (clk), .reset_n (reset_n), .counter_out(counter_out) ); rom rom_1( .address (counter_out), .clock (clk), .q (rom_data) ); endmodule |
编写testbench代码
Testbench文件采用1 ns/ 10 ps的时间单位和时间精度,该文件的激励输入信号只需要对时钟信号和复位信号进行赋值,同时输出信号是rom中存储的正弦信号。如下所示。
Testbench代码:
`timescale 1 ns/ 10 ps module rom_tst(); // constants // general purpose registers // test vector input registers reg clk; reg reset_n; // wires wire [7:0]rom_data; rom_top rom_top_1( .clk (clk), .reset_n (reset_n), .rom_data (rom_data) ); initial begin // code that executes only once // insert code here --> begin clk<=1'b0; reset_n<=1'b0; // --> end $display("Running testbench"); end always // optional sensitivity list // @(event1 or event2 or .... eventn) begin // code executes for every event on sensitivity list // insert code here --> begin #10 clk<=~clk; reset_n<=1'b1; // --> end end endmodule |
创建工程
运行 ModelSim,方法是点击开始->程序->ModelSim SE->ModelSim 或双击桌面上的快捷方式,会出现如下图所示的界面,如果上一次使用ModelSim 建立过工程,这时候会自动打开上一次所建立的工程;
点击 File->New->Project,会出现如下图所示的界面。
选择project后,会出现如下界面在 Project Name 中我们输入建立的工程名字为rom,在Project Location 中点击browse按键,选择工程保存的路径,注意 ModelSim 不能为一个工程自动建立一个目录,这里最好是选择已经创建好的一个工程文件夹作为目录,在 Default Library Name 中为我们的设计编译到哪一个库中,这里使用默认值,这样,在编译设计文件后,在 Workspace 窗口的 Library中就会出现 work 库。这里我们输入完以后,点击 OK。
在点击OK按键后会出现选择仿真文件的界面,如下图所示,可以点击不同的图标来为工程添加不同的项目,点击 Create New File 可以为工程添加新建的文件, 点击 Add Existing File为工程添加已经存在的文件,点击 Create Simulation 为工程添加仿真,点击Create New Folder 可以为工程添加新的目录。这里我们点击Add Existing File;
这里将前面设计的counter.v文件、rom.v、rom_top.v、rom_tst.v 文件包含进工程里面,同时由于调用了Altera的IP核所以需要将IP核库文件包含进行来,该文件为altera_mf.v也包含到工程中(可以在quartus的安装目录下的eda/sim_lib文件夹下面找到这个文件)。点击browse按键,将文件包含进来,如下图所示,然后点击ok按键。
接着会在modelsim的工程工作窗口出现如下图所示,即已经将两个文件包含进来,其中在状态那一栏出现问号,表明文件包含进来了,还没有进行编译。
每日推送不同科技解读,原创深耕解读当下科技,敬请关注微信公众号“科乎”。
调用altera IP核的仿真流程—上的更多相关文章
- 调用altera IP核的仿真流程—下
调用altera IP核的仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile All是 ...
- Vivado 调用自定义IP核
关于Vivado如何创建自定义IP核有大量的参考文章,这里就不多加阐述了,本文目的主要是解决如何在新建工程中引用其它工程已经自定义封装好的IP核,从而实现自定义IP核的灵活复用. 举个例子,我们的目标 ...
- Altera三速以太网IP核快速仿真与使用(上篇)
对于比较高级的ip核,altera一般都会提供仿真案例,网上有关于这个IP核的各种仿真方法,但都比较繁琐,前几日,朋友跟我分享了一个比较快速高效的仿真方法,这个方法也是他摸索折腾了一段时间才总结出来的 ...
- altera DDR2 IP核之仿真
在生成的IP核文件夹下,有一个testbench文件夹,里面包含了一个example测试激励和DDR2仿真模型. 如下 20 -rw-r--r-- 1 Administrator 197121 171 ...
- modelsim 独立仿真vivado的IP核及仿真脚本
Modelsim独立仿真vivado的IP 最近一直在做local dimming项目的FPGA硬件实现,算法的其中一步就是直方图统计,即数字图像的某一灰度级的像素数,这个直方图的源码找了半天才搞到, ...
- 基于modelsim-SE的简单仿真流程—上
基于modelsim-SE的简单仿真流程 编写RTL功能代码 要进行功能仿真,首先得用需要仿真的模块,也就是RTL功能代码,简称待测试的模块,该模块也就是在设计下载到FPGA的电路.一个电路模块想要有 ...
- FPGA分频与倍频的简单总结(涉及自己设计,调用时钟IP核,调用MMCM原语模块)
原理介绍 1.分频 FPGA设计中时钟分频是重要的基础知识,对于分频通常是利用计数器来实现想要的时钟频率,由此可知分频后的频率周期更大.一般而言实现偶数系数的分频在程序设计上较为容易,而奇数分频则相对 ...
- altera ip 核小究
用quartus的MegaWizard工具生成一个乘法器multiplier,会在工程目录下产生 multiplier.qip (可选) multiplier_bb.v (可选) multip ...
- 基于modelsim-SE的专业进阶仿真流程
基于modelsim-SE的专业进阶仿真流程 通过<基于modelsim-SE的简单仿真流程>和<调用altera IP核的仿真流程>是否感受到仿真流程中的繁琐步骤,特别是在m ...
随机推荐
- CloudNotes之桌面客户端篇:笔记撰写样式的支持
最近在CloudNotes桌面客户端中新增了笔记撰写样式的功能.当用户新建笔记的时候,可以在输入笔记标题的同时,选择笔记撰写样式,由安装包默认提供的样式主要有默认样式(Default).羊皮纸样式(L ...
- 【原创】Kafka Consumer多线程实例
Kafka 0.9版本开始推出了Java版本的consumer,优化了coordinator的设计以及摆脱了对zookeeper的依赖.社区最近也在探讨正式用这套consumer API替换Scala ...
- Java工程师成神之路
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:279558494 我们一起学Java! 一.基础篇 1.1 JVM 1.1.1. J ...
- SIMLock锁卡功能解析
一.锁卡背景介绍 锁卡即SIMLock,当手机开机启动或者插入SIM卡时,手机modem侧预置在NV项中的配置信息会与SIM卡中的信息做比对,检测是否匹配.若匹配,则SIM卡可以正常使用.若不匹配,则 ...
- python学习笔记(基础一:'hello world'、变量、字符编码)
第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...
- Mysql性能优化二
接上一篇Mysql性能优化一 建立适当的索引 说起提高数据库性能,索引是最物美价廉的东西了.不用加内存,不用改程序,不用调sql,只要执行个正确的'create index',查询速度就可能提高百倍千 ...
- Java NIO概述
Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然 Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Se ...
- HTTPS和HTTP的概念和区别
HTPPS和HTTP的概念 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP ...
- SQL初级语句
一)SQL是什么? 结构化查询语言(Structured Query Language)简称SQL, 是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据 ...
- iOS - 捕获应用程序崩溃日志
作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应 ...