知识的共享才能促使个人和一个行业良好的发展。

写文章的初衷是为了和更多的人相互交流和学习,当然也希望能帮助到一些初学者。

test bench是FPGA开发中很关键的一个部分,可以给大型FPGA项目开发节约大量的时间,进行逻辑仿真是非常有必要的一步,希望初学者重视起来。使用编译软件quartus或者vivado等等和modelsim进行关联仿真,这种调用方法显的比较繁琐,本文使用的是直接在modelsim中建立工程进行编译和仿真。

本人使用的是编译环境是quartus13.0(64位),使用的是VHDL语言,仿真工具是modelsim SE 10.1a。选择的芯片器件是Arria V:5AGXMB3G4F35I5.

以一个很简单的例子来说明一下testbench的架构和使用方式,这里仿真不涉及具体功能,而是对一个RAM的IP核进行最简单的读写仿真。

1、

首先使用quartus13.0建立一个空的工程test,在空工程中直接生成一个RAM的IP核(这里IP核全部使用默认设置):

2、

使用modelsim建立一个新工程:

3、

将刚在quartus生成的ramT.vhd文件复制到生成的modelsim工程目录下(当然进行文件区分是好的习惯):

4、

在modelsim中将这个上面文件添加到工程中(右键project空白处):

5、

生成一个新文件命名ramTb作为我们的testbench文件,在文件中可以书写测试程序(modelsim的代码编辑器很不好用,推荐使用Notepad++来完成代码书写):

6、 两个文件都在工程中,然后使用modelsim进行全编译:

7、 编译通过后就可以进行仿真了:

8、 然后就可以进行一些仿真操作,比如将信号添加到波形文件中,直观观察输入输出,判定逻辑是否正确:

9、如果测试程序或者功能程序有修改,则退出当前仿真,修改完成后跳转第6步再开始仿真。

library ieee; --调用的库

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity ramTb is --测试脚本的实体没有输入输出

end ramTb;

architecture beha of ramTb is

component ramT is --声明元件,需要进行仿真的顶层文件,这里就是我们需要仿真的ram。

port(

clock: IN STD_LOGIC := '1';

data: IN STD_LOGIC_VECTOR (7 DOWNTO 0);

rdaddress: IN STD_LOGIC_VECTOR (4 DOWNTO 0);

wraddress: IN STD_LOGIC_VECTOR (4 DOWNTO 0);

wren: IN STD_LOGIC := '0';

q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0)

);

end component;

--==========================信号定义==========================

signal clock : std_logic := '0';

signal data : std_logic_vector(7 downto 0) := (others => '0');

signal rdaddress : std_logic_vector(4 downto 0) := (others => '0');

signal wraddress : std_logic_vector(4 downto 0) := (others => '0');

signal wren : std_logic := '0';

signal q : std_logic_vector(7 downto 0) := (others => '0');

--==========================end===============================

signal rst : std_logic := '0';

constant clkPeriod : time := 20 ns; --主时钟定义 50Mhz

signal cnt : integer range 0 to 255 := 0;

begin

uut : ramT --例化元件,相当于调用上面声明的器件

port map(

clock => clock,

data => data,

rdaddress => rdaddress,

wraddress => wraddress,

wren => wren,

q => q

);

clkPro : process --此进程生成测试时钟

begin

clock <= '0';

wait for clkPeriod/2;

clock <= '1';

wait for clkPeriod/2;

end process;

rstPro : process --初始化复位(本工程可以不用此进程)

begin

rst <= '1';

wait for 500 ns;

rst <= '0';

wait;

end process;

simuliPro : process(clock,rst) --此进程是仿真激励,也就是输入,敏感量一定要填写

begin

if rst='1' then

cnt <= 0;

data <= (others => '0');

wren <= '0';

rdaddress <= (others => '0');

wraddress <= (others => '0');

elsif rising_edge(clock) then

if cnt<10 then --循环向ram写入数据,跳过0地址

cnt <= cnt + 1;

wren <= '1';

wraddress <= wraddress + '1';

data <= data + '1';

elsif cnt<20 then --将写入的数据读出

cnt <= cnt + 1;

wren <= '0';

wraddress <= (others => '0');

rdaddress <= rdaddress + '1';

else

rdaddress <= (others => '0');

end if;

end if;

end process;

end beha;

testbench实例 vhdl_FPGA仿真 test bench实例(VHDL)相关推荐

  1. 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 包括图中模型以及一个仿真设置要点word文档教程

    永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程 ID:69100643350855880陈cola

  2. Arduino与Proteus仿真实例-电子相册仿真

    电子相册仿真 本次实例将仿真如何从SD卡读取BMP格式图像并在ILI9341驱动器的LCD显示屏上显示. 1.仿真电路原理图 在仿真电路原理图中,SD卡通过SPI方式连接,ILI9341 LCD显示屏 ...

  3. 51单片机 74HC595应用实例+Proteus仿真

    51单片机 74HC595应用实例+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #include <intrins.h> #defi ...

  4. 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极

    永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程 YID:99150643350855880陈cola

  5. 交直轴电感matlab_永磁电机交直轴电感Lq Ld仿真计算ANSOFT实例详解.pdf

    永磁电机交直轴电感Lq Ld仿真计算ANSOFT实例详解 ANSOFT和Mathcad 永磁电机交直轴电感Lq. Ld计算 详解 Haiwin 2012-7-17 TEL QQ:573059618 方 ...

  6. *(Virtual.Lab Acoustics声学仿真计算高级应用实例声学仿真计算从入门到精通.光盘下载链接)**

    (Virtual.Lab Acoustics声学仿真计算高级应用实例&声学仿真计算从入门到精通.光盘下载链接) http://pan.baidu.com/s/1c05tpVa 感谢这位大神分享 ...

  7. 51单片机AT24C02写读流水灯实例+Proteus仿真

    51单片机AT24C02写读流水灯实例+Proteus仿真 Proteus仿真 这个流水灯的状态是通过读取AT24C02地址中的数值来改变的.(有点废AT24C02) 程序代码 #include &l ...

  8. matlab里的DEE在哪里,matlab_4_SIMULINK仿真 及 DEE实例步骤.doc

    matlab_4_SIMULINK仿真 及 DEE实例步骤 SIMULINK & DEE简介 如何进入SIMULINK? Step1:进入MATLAB Step2: 方法一:在workspac ...

  9. python基础数据实例_Python基本数据类型及实例详解

    Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...

  10. mysql实例管理工具巨杉_实例管理工具_操作_MySQL实例_关系型数据库实例_文档中心_SequoiaDB巨杉数据库...

    实例管理工具 sdb_mysql_ctl 是 MySQL 实例组件的管理工具.用户通过 sdb_mysql_ctl 既可以初始化.启动和停止实例,也可以修改实例的引擎配置参数. 参数说明 参数 描述 ...

最新文章

  1. 研究生导师为什么喜欢问学生家境?我帮你们问了几个导师
  2. 使用fprintf()函数格式化输出至磁盘文件和是stdout
  3. 基于wemos D1的无线遥控灯(433m无线模块)
  4. 推荐我看过的几本好书给大家!(2)
  5. web浏览器_Web上的分享(Share)API
  6. python编程一球从100米_Python练习题 015:一颗自由落地的球
  7. window10删除目录时提示没有找到该项目
  8. JAVA面向对象-----接口与类、接口之间的关系
  9. apache配置说明
  10. 四足鼎立,北京互联网产业地图
  11. flink-metric原理与实战
  12. 三、Logstash安装部署
  13. 经典游戏PK:魔兽争霸VS星际争霸VS红警
  14. 企鹅号重磅宣布平台三大升级 推出全新TOP计划助力内容精品化
  15. 【读书笔记】《比基尼口才》文皙铉
  16. 目前数据分析师都有哪些国际认证
  17. Ubuntu下,用键盘定义鼠标按键
  18. PS进阶篇——如何PS软件钢笔工具抠图(三)
  19. 【转】想到他再看不到自己英俊的脸,方继藩就心肝儿疼
  20. 笔记连载 | Day19【综合实验】之【数字钟】【Intel Cycle IV FPGA平台验证】

热门文章

  1. 锐捷客户端开热点之秘诀
  2. VC Redist Installer 1.6下载
  3. java5.0下载_java虚拟机官方下载|java虚拟机下载 v5.0 官方免费版-520下载站
  4. 对接GA/T1400协议注册流程简易demo【Java版】
  5. 教育学相关期刊杂志介绍
  6. 解决VMware重启IP地址改变的问题
  7. pycharm中配置Git教程
  8. Circular Sequence
  9. 计算机基础考试题附答案——《第陆篇》
  10. 淘宝宝贝类目怎么更换?