调用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 ...
随机推荐
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- 如何实现一个php框架系列文章【开篇】
1.本系列文章的目的 实现一个小而美的产品级别php框架 自己动手实现一个新框架仅用于学习交流,不打算替代市面上现有的其他主流框架. 2. 我要一个怎样的PHP框架 简单实用,安全优雅,博采众长 安装 ...
- Json CPP 中文支持与入门示例
在每一个Json Cpp自带*.cpp文件头加上: #include "stdafx.h" 将Json Cpp对自带的头文件的引用修改为单引号方式,例如json_reader.cp ...
- DNS原理及其解析过程 精彩剖析
本文章转自下面:http://369369.blog.51cto.com/319630/812889 DNS原理及其解析过程 精彩剖析 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址 ...
- entityframework学习笔记--009-使用原生sql语句操作数据
1 使用原生SQL语句更新--Database.ExecuteSqlCommand 假设你有一张如图9-1所示的Payment数据库表. 图9-1 1.1 实体类型: public class Pay ...
- Windows10应用Docker部署DoNet Core
Win10和Mac稳定版的Docker发布了,之前看了下徐磊老师的几篇Docker4Dotnet的文章http://devopshub.cn/2016/07/08/docker4dotnet-1-ov ...
- windows 7下React Native环境配置
React Native 是 Facebook 推出的一个用 Java 语言就能同时编写 ios,android,以及后台的一项技术,它可以做到实时热更新 .FaceBook 也号称这们技术是 “Le ...
- AlloyTouch全屏滚动插件发布--30秒搞定顺滑H5页
原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/AlloyTouch-FullPage-Plugin 先验货 插件代码可以在这里找到. 注意,虽然是 ...
- Python开发【第二篇】:Python基础知识
Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...
- asp.net将图片转成二进制存入数据库
一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...