浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真
浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真
工作内容:
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
Synplify、Synplify Pro和Synplify Premier是Synplicity(Synopsys公司于2008年收购了Synplicity公司)公司提供的专门针对FPGA和CPLD实现的逻辑综合工具,Synplicity的工具涵盖了可编程逻辑器件(FPGAs、PLDs和CPLDs)的综合,验证,调试,物理综合及原型验证等领域。Quartus® II design 是最高级和复杂的,用于system-on-a-programmable-chip (SOPC)的设计环境。 QuartusII design 提供完善的 timing closure 和 LogicLock? 基于块的设计流程。QuartusII design是唯一一个包括以timing closure 和 基于块的设计流为基本特征的programmable logic device (PLD)的软件。 Quartus II 设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmed devices开发的统一工作流程。
1、设计一个多路选择器,利用ModelSimSE做功能仿真;多路选择器是数据选择器的别称。在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器,也称多路选择器或多路开关。
2、利用Synplify Pro进行综合,生成xxx.vqm文件;
3、利用Quartus II导入xxx.vqm进行自动布局布线,并生成xxx.vo(Verilog
4、利用ModelSimSE做后仿真,看是否满足要求。
注:
1. 仿真器(Simulator)是用来仿真电路的波形。仿真器(emulator)以某一系统复现另一系统的功能。与计算机模拟(Computer Simulation)的区别在于,仿真器致力于模仿系统的外在表现、行为,而不是模拟系统的抽象模型。请参阅仿真和模拟词条。
2. 综合工具(Synthesizer)的功能是将HDL转换成由电路所组成的Netlist.
3. 一般而言,在电路设计的仿真上可分为Pre-Sim 和Post-Sim.Pre-Sim 是针而Post-Sim则是针对综合过且做完成了Auto Place and Route(APR)的电路进行仿真,以确保所设计的电路实现在FPGA上时,与Pre-Sim 的功能一样。多路选择器还包括总线的多路选择,模拟信号的多路选择等,相应的器件也有不同的特性和使用方法。具体可以查找相关网站 .
1、前仿真(Pre-Sim)
步骤一:打开ModelSimSE,然后建立一个Project;
建立Project的方式为点选File → New → Project…;
设定Project Name 与Project location,按OK 即可建立Project.

步骤二:新增设计文档或加入文档。
新增文档的方式为点选File → New → Source → Verilog,然后对文档进行编辑并储存为xxx.v;
加入文档的方式为点选File → Add to Project → File…,然后点选xxx.v;

步骤三:编译(Compile)。
编译文档的方式为点选Compile → Compile All,即可编译所有的文档。
如果编译时发生错误,在显示错误的地方(红字)点两下,即可跳到错误。

步骤四:新增或加入测试平台(Testbench)。
当设计完电路后,为了确定所设计的电路是否符合要求,我们会写一个测 试平台(Testbench);
新增或加入测试平台,然后编译它。
步骤五:仿真(Simulate)。
仿真的方式为点选Simulate → Simulate…;
打开Design里面的work,然后点选mux_4_to_1_tb 并Add 它,最后按Load 即可跳到仿真窗口。

步骤六:加入信号线。
在窗口上按右键,然后点选Add → Add to Wave;

步骤七:看波形。
在工具列上按Run,然后就会显示波形;
慢慢看波形吧,没有波形就没有真相.

以上就是使用ModelSim做Pre-Sim的基本流程,在此要特别强调的是,ModelSim所有的功能并不仅仅于此,如果你想要了解更多的话,一切都要靠自己花时间去问去试,只有努力的人才能有丰富的收获,加油!
2、综合(Synthesis)
步骤一:打开Synplify Pro,然后建立一个Project.
先点选File,再点选New;
选择Project File,并设定File Name与File Location;

步骤二:加入设计文件。
点选欲加入的xxx.v,然后按Add,再按OK后就可以将档案加入。

步骤三:选择FPGA的Device 与其它相关设定。
先点选Project,再点选Implementation Options.
在Device 的设定如下:Technology为Altera Stratix,Part为EP1S10,Speed 为-6,Package 为FC780.
在Options 的设定是将FSM Compiler与Resource Sharing打勾。
在Constraints的设定是将Frequency设定至100Mhz.
在Implementation Results的设定是将Result File Name填入与电路模块相同的名称,而xxx.vgm这个文件会在QuartusII做APR时被使用。然后将下列两个选项打勾(Write Vendor Constraint File与Write Mapped Verilog Netlist)。
在Timing Report的设定是将Number of Critical Paths与Number of Start/End Points都设为11.
在Verilog里是将TOP Level Module填入与电路模块相同的名称,然后将 Use Verilog 2001打勾。

步骤四:综合(Synthesis)。
点选RUN → Synthesize,最后出现Done!就是已经综合完毕。
步骤五:检查综合后的电路。
先点选HDL Analyst,再点选RTL,最后点选Hierarchal View,画面会出现综合后的电路Netlist.

以上就是使用Synplify将HDL程序合成为电路Netlist的基本流程,值得注意的是,当你针对不同要求而设定的Constraints不同时,你就会得到不同的电路Netlist,所要付出的硬件代价也不同,这就需要大家多花点心思来了解其中的奥妙之处。
3、自动布局布线(APR)
步骤一:开启Quartus II,然后建立一个Project.
先点选File,再点选New Project Wizard…
设定Work Directory,Project Name与Top-Level Entity Name,再按Next.

步骤二:加入设计文件。
点选Add…,将Synplify合成出来的xxx.vqm加入,再按Next.

步骤三:设定相关的EDA Tools.
在Tool Type点选Simulation,Tool Name点选ModelSim.

点选Settings,将Time Scale设定为1 ns.

步骤四:设定Family.
设定Family为Stratix,再按Next.

步骤五:设定Device.
设定Device 为EP1S10F780C6,再按Finish,即可完成Project的设定。

步骤六:编译。
点选Processing → Start Compilation,即可开始编译。

步骤七:完成编译。
弹出下面窗口即代表编译完毕。

以上就是使用Quartus II对电路Netlist做APR的基本流程,并且利用设定仿真工具所产生的xxx.vo(Verilog Output File)与xxx.sdo(Standard Delay Output File)做后仿真。
4、后仿真(Post-Sim)
步骤一:启动ModelSim,然后建立一个Project.
建立Project的方式为点选File → New → Project…
设定Project Name与Project location,按OK即可建立Project.
步骤二:加入设计文档。
将xxx.vo更改为xxx.v,然后加入。
步骤三:加入组件库文件。
由于我们是采用Altera的Cell Library来合成电路,所以合成后的电Netlist里所包括的那些Logic Gates与Flip-Flop 都是出自于Cell Library,所以模拟时要将此Cell Library加入。
我们所选用的Family是Stratix,所以到QuartusIIedasim_lib 里将Stratix的Cell Library(stratix_atoms.v)加入。
步骤四:加入测试平台。
加入Pre-Sim的测试平台,并在测试平台里加上`timescale 1ns/100ps.
步骤五:编译。
编译档案的方式为点选Compile → Compile All,即可编译所有的档案。
如果编译时发生错误,在显示错误的地方(红字)点两下,即可跳到错误。
步骤六:仿真。
仿真文件的方式为点选Simulate → Simulate…
步骤七:加入要观察的信号。
在窗口上按右键,然后点选Add → Add to Wave.
步骤八:观察波形。

慢慢看波形吧,没有波形就没有真相
步骤九:比对Pre-Sim 与Post-Sim.
很明显地,Post-Sim 的输出有不稳定的信号,并且受到延迟时间的影响。


摘抄自:http://bbs.dzsc.com/space/viewspacepost.aspx?postid=102904
浅谈用ModelSim+Synplify+Quartus来实现Altera FPGA的仿真的更多相关文章
- ModelSim+Synplify+Quartus的Alte
[page_break] 本文适合初学者,源代码:mux4_to_1.v 工作内容: 1.设计一个多路选择器,利用ModelSimSE做功能仿真: 2.利用Synplify Pro进行综合,生成xx ...
- 浅谈 Fragment 生命周期
版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...
- 浅谈 LayoutInflater
浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...
- 浅谈Java的throw与throws
转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...
- 浅谈SQL注入风险 - 一个Login拿下Server
前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...
- 浅谈WebService的版本兼容性设计
在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...
- 浅谈angular2+ionic2
浅谈angular2+ionic2 前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别. 1. 项目所用:angular2+ionic2 ...
- iOS开发之浅谈MVVM的架构设计与团队协作
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- Linux特殊符号浅谈
Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...
随机推荐
- Array-基本功能
<title>Array-基本功能</title></head> <body> <script type="text/javascrip ...
- 数位dp/记忆化搜索
一.引例 #1033 : 交错和 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个数 x,设它十进制展从高位到低位上的数位依次是 a0, a1, ..., an ...
- shopnc 支持 支付宝快捷登陆 shopnc权限验证原理说明
为目前使用的是shopnc商场二次开发,shopnc本身做了qq互联和微博快捷登陆的api,做成了集成通用的接口 首先说下基本的这种类型的api访问方式,首先,的有个配置文件,配置你申请的id和key ...
- 推荐《HeadFirst设计模式》
相对于国内初版的<大话设计模式>,HeadFirst真的是更好的选择,虽然看起来很厚.很吓人,但对于初学者而言浅显易懂.直击要点,即使对设计模式熟悉的同学去读这本书相信也有很大的收获.用了 ...
- [daily][device] linux添加打印机
只用过HP的打印机,用过两个,分别是:HP_p2055dn, 和 HP_LaserJet_Professional_M1216nfh 别的不知道.以下内容仅试用于HP打印机. 第一:装HP,打印机工 ...
- Apply 与 Call 的用法(简化版)
Javascript中Apply 与 Call 的用法,这里只作简单的入门说明 function human( name, age ){ this.name = name; this.age = ag ...
- MYSQL中创建存储过程实现向表中循环插入数据
首先在test数据库中先创建一个表test: CREATE TABLE test( ID INT PRIMARY KEY AUTO_INCREMENT ,test_name VARCHAR(20),t ...
- request.getHeader所想到的
request.getHeader(""),简单的说就是获取请求的头部信息,根据http协议,它能获取到用户访问链接的信息. /** * Returns the value of ...
- python_os
1. 基本功能的介绍 os模块包含普通的操作系统的功能 2. 常用的变量 (1)os.name 获取正在使用的平台, Windows 返回 nt, Linux或者Unix 返回 posix 3. 常用 ...
- Hausdorff distance
微分动力系统原理 这本书里有介绍 Hausdorff距离是描述两组点集之间相似程度的一种量度,它是两个点集之间距离的一种定义形式:假设有两组集合A={a1,…,ap},B={b1,…,bq},则这两个 ...