在xilinx ise12.2 环境下用自带的isim仿真详解

    学习FPGA写的第一篇文档,算是人生的一个里程碑,现在脑子里是当年一个人在一个实验室默默学习的场景,但最后依靠着这项技能养活自己,感恩

最近项目用到FPGA,也开始了FPGA的学习历程,硬件为红色飓风的E45,FPGA是spartan6系列的,软件开发环境是xilinx ise12.2的版本。

之前一直在做单片机,有一定的C基础,对FPGA的学习也算快吧,花了一天的时间移植了一个FPGA的串口程序,测试通过,收发正常,心里美滋的,在第三天的时候要做一个SPI的时序,由于程序是自己写的,所以对时序没把握,就需要仿真,看一下波形,可谁知道这一仿真就是2天的时间,搞得我头疼闹热的,到处查资料,看网站,弄得我好不痛苦啊,明明很简单的事情,却花了两天的时间,哎,在此也深感一个人学习的痛苦,也感到资源的可贵啊,为了我的两天时间,我决定写下记录,以此让跟我一样遇到问题的人能够少花时间。

以下是我从网上收集的在xilinx ise12.2 环境下用自带的isim仿真步骤:

http://wenku.baidu.com/view/fce6e53c0912a21614792981.html

该链接的资料是OK的,但是有些小的细节需要说了,同时也我遇到的问题。

1.  在生成verilog hex fixture 之后,一定要记得在Add stimulus here之后加上你的动作代码,要不然仿真是不会有动作的,问题很幼稚,但是他花了我2个小时的时间,回头看了好几遍文档在注意到有自己要添加的东西。

一般的添加格式为:

initial

begin

clk= 1‘b0;

rst=    1‘b0;

#5

clk= 1‘b1;

rst=    1‘b1;

end

always #10clk = ~clk;

2. 对于isim的界面,需要用好几个工具。

1所指的10us的选项,一般默认都很小,所以要根据具体的时间自己修改,小问题,也花了我不少时间

2所指的功能键是一次运行10us,很有用的

3所指的放大器在看波形的很好用

如果仿真出现红线和蓝线,证明仿真失败!

这是我两天以来出现的最多的仿真界面,到现在才明白如果信号不是绿色的证明都是有问题的,仿真是失败的!之所以会出现这种问题都是因为自己的设计功底太差。

3.仿真是程序应该注意的问题.

以下为一段可以正确运行的程序:

module led_run(iClk,oLed);

input iClk;

output [3:0] oLed;

reg [3:0] oLed;

reg [24:0] count;

reg [1:0] state;

wire clk;

always @ (posedge iClk)

count=count+1;

assign clk=count[24];

always @ (posedge clk)

begin

case(state)

2‘b00:   oLed<=4‘b0001;

2‘b01:   oLed<=4‘b0010;

2‘b10:   oLed<=4‘b0100;

2‘b11:   oLed<=4‘b1000;

endcase

state=state+1;

end

endmodule

但是仿真是失败的,原因来自于:没有rst信号。对于count的初始值仿真器无从取得,导致仿真失败。

应该对其做以下修改:

module led_run(iClk,oLed,rst);

input iClk;

input rst;

output [3:0] oLed;

reg [3:0] oLed;

reg [1:0] count;

reg [1:0] state;

wire clk;

always @ (posedge iClk or negedge rst)

begin

if(!rst)

count = 0;

else

count=count+1;

end

assign clk=count[1];

always @ (posedge clk or negedge rst)

begin

if(!rst)

oLed <=4‘b0001;

else

begin

case(state)

2‘b00: oLed<=4‘b0001;

2‘b01: oLed<=4‘b0010;

2‘b10: oLed<=4‘b0100;

2‘b11: oLed<=4‘b1000;

endcase

state=state+1;

end

end

endmodule

对于FPGA的仿真而言,每个值都应该有其初始值,而我恰恰是忽略了这一点。

最后要注意的地方:

仿真时要点击生产的verilog hex fixture文件,而不是其本身的V文件

yi 于2012.02.23

EMEQ实验室

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-09 00:42:57

在xilinx ise12.2 环境下用自带的isim仿真详解的相关文章

Windows下Nginx Virtual Host多站点配置详解

Windows下Nginx Virtual Host多站点配置详解 此教程适用于Windows系统已经配置好Nginx+Php+Mysql环境的同学. 如果您还未搭建WNMP环境,请查看 windows7配置Nginx+php+mysql教程. 先说明一下配置多站点的目的:在生产环境中,如果将系统所有代码文件都放在公开目录中,则很容易被查看到系统源码,这样是很不安全的,所以需要只公开index.php的入口文件目录.而同一个服务器中,可能运行多个系统,这样就必须公开多个入口文件目录,以便用不同的

JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路径下你应该能够找到bin.lib等目录.值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX

[转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/static/26526894200842414338201/ Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路径下你应该能够找到bin.lib等目录.

Linux下nginx编译安装教程和编译参数详解

这篇文章主要介绍了Linux下nginx编译安装教程和编译参数详解,需要的朋友可以参考下 一.必要软件准备1.安装pcre 为了支持rewrite功能,我们需要安装pcre 复制代码代码如下: # yum install pcre* //如过你已经装了,请跳过这一步 2.安装openssl 需要ssl的支持,如果不需要ssl支持,请跳过这一步 复制代码代码如下: # yum install openssl* 3.gzip 类库安装 复制代码代码如下: yum install zlib zlib-

Linux下的crontab定时执行任务命令详解

Linux下的crontab定时执行任务命令详解 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间.cron的配置文件称为"crontab",是"cron table"的简写. 一.cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service crond start    //启动服务 servi

Linux下的crontab定时执行任务命令详解 - 回家的流浪者 - 博客园

Linux下的crontab定时执行任务命令详解 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron].cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间. cron的配置文件称为“crontab”,是“cron table”的简写. 一.cron服务 cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业. service crond start    //启动服务 service crond stop 

linux下的/etc/passwd和/etc/shadow详解

linux下的/etc/passwd和/etc/shadow详解一./etc/passwd/etc/passwd 文件是一个纯文本文件,每行采用了相同的格式:name:password:uid:gid:comment:home:shellname 用户登录名password 用户口令.此域中的口令是加密的,常用x表示.当用户登录系统时,系统对输入的口令采取相同的算法,与此域中的内容进行比较.如果此域为空,表明该用户登录时不需要口令.uid 指定用户的 UID.用户登录进系统后,系统通过该值,而不

Linux下的I/O复用与epoll详解

前言 I/O多路复用有很多种实现.在linux上,2.4内核前主要是select和poll,自Linux 2.6内核正式引入epoll以来,epoll已经成为了目前实现高性能网络服务器的必备技术.尽管他们的使用方法不尽相同,但是本质上却没有什么区别.本文将重点探讨将放在EPOLL的实现与使用详解. 为什么会是EPOLL select的缺陷 高并发的核心解决方案是1个线程处理所有连接的“等待消息准备好”,这一点上epoll和select是无争议的.但select预估错误了一件事,当数十万并发连接存

Linux下进程的创建过程分析(_do_fork/do_fork详解)--Linux进程的管理与调度(八)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 参照 分析Linux内核创建一个新进程的过程 前言 Unix标准的复制进程的系统调用时fork(即分叉),但是Linux,BSD等操作系统并不止实现这一个,确切的说linux实现了三个,fork,vfork,clone(确切说vfork创造出来的是轻量级进程,也叫线程,是共享资源的进程)