如果我们已经书写了一段FSM代码,现在想倒过来把它转换成为状态转移图,方便我们直观地检查我们书写的状态对不对(在写论文什么的画图太麻烦的时候,有个自动生成的是多方便啊!),应该怎么弄呢?通过在Vivado中调用ModelSim,可以直接完成这个操作,下面我们就来看看这个神奇的转换是如何完成的。

首先介绍一下软件环境:

ü  操作系统win7 sp1 64位

ü  Vivado2014.1 64位

ü  Modelsim SE-64 10.2c

然后就是打开Vivado,新建一个RTL工程,配置好器件……这个步骤大家都写过了,所以在此略过。然后在Vivado中新建顶层文件,然后输入一段FSM代码。接下来我们要先配置ModelSim的路径,使得Vivado知道ModelSim在哪里。方法是在Vivado中点击菜单栏的Tools---Options---General,在最后面的一行里选择ModelSim的安装路径,如图1所示。

图1 配置ModelSim的路径

然后我们要为Xilinx的FPGA器件编译生成供ModelSim仿真使用的库。点击Vivado工具栏上的Tools---Compaile Simulation Libraries,如图2所示。

图2 编译仿真库

在图2的配置窗口中选择仿真器类型(例如ModelSim、Active-HDL等)、编程语言(Verilog或者HDL或者全选)、库的类型(Unisim或者SimPrim或者全选)、器件家族(例如Kintex/ Virtex/ Artix -7, ,Zynq-7000, Kintex/Virtex UltraScale系列,或者干脆全选)。中间的框是选择编译之后输出的库文件的路径以及第三方仿真工具的路径。最后是其它杂项,例如是否覆盖现有的库,是不是编译32位的库,是不是启用啰嗦模式等。ISE相比,在Vivado中编译仿真库只需要点击这两个步骤然后等待几分钟就可以了,步骤只有ISE的五分之一,需要我们决定的选择框要少了非常多,花的时间则只有几分钟,比ISE编译仿真库的效率要高了好几倍。

编译很快就完成了。然后我们在Vivado设计流程管理器中点击Simulation下面的Simulation Settings,如图3所示。

图3 改变仿真设置

然后把仿真软件设置为ModelSim,如图4所示。

图4 改变仿真软件

在Vivado的仿真配置中,我们可以直接指定Vsim的选项,如图5所示。

图5 指定Vsim选项

然后就可以在Vivado设计流程管理器中在Simulation上点击右键,运行行为仿真了,如图6所示。

图6 运行行为仿真

很不幸的是,ModelSim启动之后遇到了错误,如图7所示。

图7 仿真错误(单击图片可放大)

这也许是两个软件的版本不太兼容造成的。为了在ModelSim里显示FSM,我们又必须使用-coverage –fsmdebug两个参数,那怎么办呢?目前可以采用的办法是,暂时不能在图5中启用相关的选项,重新运行行为仿真,此时在ModelSim启动完成并且不抱错。然后我们修改FSM1.do文件,或者直接在ModelSim的命令窗口里输入下面的命令(加黑字体为更改的部分):

vsim -L unisims_ver -L unimacro_ver -L secureip  -L xil_defaultlib -lib xil_defaultlib -voptargs=\"+acc\" -t 1ps -coverage -fsmdebug xil_defaultlib.FSM1 xil_defaultlib.glbl

此时我们便可以查看FSM的状态转移图了,点击ModelSim菜单栏上的View---FSM List,然后在任务视图里点击FSM List,就能看到状态转移图了,如图8所示。

图8 FSM的状态转移图(单击图片可放大)

最后,感谢大家的支持

在Vivado中调用ModelSim生成FSM的状态转移图的更多相关文章

  1. Quartus 中调用modelsim的流程及*.vt或*.vht自动生成

    一.自动生成验证程序testbench的方法,setting-EDA Tool->simylation->选择对应的语言(verilog对应*.vt,VHDL对应*.vht)process ...

  2. 示例 - 如何在NodeJS中调用SS生成的DLL

    要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS中生成DLL, 请查看: S ...

  3. vivado中basic memory生成

    vivado中basic memory生成

  4. 在java中调用mockjs生成模拟数据

    一.手写版 在前端有个模拟数据的神器 Mock.js 能生成随机数据,拦截 Ajax 请求,然后我觉得他的这个生成随机数据不错.然后我就到度娘一顿操作,没找到类似的java实现,于是就有了下面的代码: ...

  5. 在C#中调用Java生成的jar包文件的方法

    C#工程调用Java已生成的jar包步骤如下: 一.使用IKVM.NET组件 首先到IKVM官网(http://www.ikvm.net)下载组件,下载地址:https://sourceforge.n ...

  6. 如何在vivado中调用ultraedit 编辑器

    ISE下点击菜单Edit -> Preferences -> Editor. 在Editor选项框里选择Custom,在Command line syntax文本框里输入: {C:/Pro ...

  7. QuartusII中调用Modelsim的方法

    Modelsim的使用 1,  建立工程编译通过之后——证明实例工程无语法等简单错误.编写testbench 2,  将testbench 添加到工程中,进行编译通过.会在工程的file中看到test ...

  8. mysql自定义函数并在存储过程中调用,生成一千万条数据

    mysql 自定义函数,生成 n 个字符长度的随机字符串 -- sql function delimiter $$ create function rand_str(n int) returns VA ...

  9. [原创][FPGA]Quartus中调用Modelsim波形仿真步骤说明

    0. 简介 在使用QuartusII软件的过程中,经常地需要跑仿真,那么说到仿真就不得不说Modelsim这个仿真软件了,我们这里介绍下该软件在QuartusII中的使用方法. 1. 建立Quartu ...

随机推荐

  1. 下拉列表联动显示(Car表) 三级联动

    .Models namespace 下拉列表联动显示_Car表_.Models { public class ProductorBF { private MyDBDataContext _contex ...

  2. poj2723

    把每对钥匙看做一个变量,那两个钥匙看做他的两个状态 每一个开门的要求就是一个条件(xi or xj) 很显然有了2sat的基本要素 2sat是一个判定性问题,而这题求最多能过几个门: 不难想到二分答案 ...

  3. C#实现微信公众号群发消息(突破破解一天只能发一次的限制)

    总体思路:1.首先必须要在微信公众平台上申请一个公众号. 2.然后进行模拟登陆.(由于我对http传输原理和编程不是特别懂,在模拟登陆的地方,不是特别清楚,希望有大神指教) 3.模拟登陆后会获得一个t ...

  4. MVC中的@Html.DisplayFor等方法如何控制日期的显示格式(转)

    http://www.tuicool.com/articles/BNVBR3 在Sql Server2005中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒 ...

  5. BrnShop开源网上商城第二讲:ASP.NET MVC框架

    在团队设计BrnShop的web项目之初,我们碰到了两个问题,第一个是数据的复用和传递,第二个是大mvc框架和小mvc框架的选择.下面我依次来说明下. 首先是数据的复用和传递:对于BrnShop的每一 ...

  6. SQL Server 堆表与栈表的对比(大表)

    环境准备 使用1个表,生成1000万行来进行性能对比(勉强也算比较大了),对比性能差别. 为了简化过程,不提供生成随机数据的过程.该表初始为非聚集索引(堆表),测试过程中会改为聚集索引(栈表). CR ...

  7. [codevs2230]黑白棋子

    题目链接 http://www.luogu.org/problem/show?pid=1259# http://codevs.cn/problem/2230/ 题目描述 有2n个棋子(n≥4)排成一行 ...

  8. puppet运维配置实列

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABQkAAAGBCAIAAABKMKAEAAAgAElEQVR4nOydeXwU9cH/t2o9WutR+7

  9. POJ 2115 C Looooops(扩展欧几里得)

    辗转相除法(欧几里得算法) 时间复杂度:在O(logmax(a, b))以内 int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a ...

  10. Redis以及Redis的php扩展安装无错版

    安装Redis 下载最新的 官网:http://redis.io/  或者  http://code.google.com/p/redis/downloads/list 第一步:下载安装编译 #wge ...