testbench实例 vhdl_FPGA仿真 test bench实例(VHDL)
知识的共享才能促使个人和一个行业良好的发展。
写文章的初衷是为了和更多的人相互交流和学习,当然也希望能帮助到一些初学者。
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)相关推荐
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 包括图中模型以及一个仿真设置要点word文档教程
永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程 ID:69100643350855880陈cola
- Arduino与Proteus仿真实例-电子相册仿真
电子相册仿真 本次实例将仿真如何从SD卡读取BMP格式图像并在ILI9341驱动器的LCD显示屏上显示. 1.仿真电路原理图 在仿真电路原理图中,SD卡通过SPI方式连接,ILI9341 LCD显示屏 ...
- 51单片机 74HC595应用实例+Proteus仿真
51单片机 74HC595应用实例+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #include <intrins.h> #defi ...
- 永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极
永磁同步直线电机仿真实例,仿真教学 maxwell16.0版本 12槽11极 包括图中模型以及一个仿真设置要点word文档教程 YID:99150643350855880陈cola
- 交直轴电感matlab_永磁电机交直轴电感Lq Ld仿真计算ANSOFT实例详解.pdf
永磁电机交直轴电感Lq Ld仿真计算ANSOFT实例详解 ANSOFT和Mathcad 永磁电机交直轴电感Lq. Ld计算 详解 Haiwin 2012-7-17 TEL QQ:573059618 方 ...
- *(Virtual.Lab Acoustics声学仿真计算高级应用实例声学仿真计算从入门到精通.光盘下载链接)**
(Virtual.Lab Acoustics声学仿真计算高级应用实例&声学仿真计算从入门到精通.光盘下载链接) http://pan.baidu.com/s/1c05tpVa 感谢这位大神分享 ...
- 51单片机AT24C02写读流水灯实例+Proteus仿真
51单片机AT24C02写读流水灯实例+Proteus仿真 Proteus仿真 这个流水灯的状态是通过读取AT24C02地址中的数值来改变的.(有点废AT24C02) 程序代码 #include &l ...
- matlab里的DEE在哪里,matlab_4_SIMULINK仿真 及 DEE实例步骤.doc
matlab_4_SIMULINK仿真 及 DEE实例步骤 SIMULINK & DEE简介 如何进入SIMULINK? Step1:进入MATLAB Step2: 方法一:在workspac ...
- python基础数据实例_Python基本数据类型及实例详解
Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对 ...
- mysql实例管理工具巨杉_实例管理工具_操作_MySQL实例_关系型数据库实例_文档中心_SequoiaDB巨杉数据库...
实例管理工具 sdb_mysql_ctl 是 MySQL 实例组件的管理工具.用户通过 sdb_mysql_ctl 既可以初始化.启动和停止实例,也可以修改实例的引擎配置参数. 参数说明 参数 描述 ...
最新文章
- 研究生导师为什么喜欢问学生家境?我帮你们问了几个导师
- 使用fprintf()函数格式化输出至磁盘文件和是stdout
- 基于wemos D1的无线遥控灯(433m无线模块)
- 推荐我看过的几本好书给大家!(2)
- web浏览器_Web上的分享(Share)API
- python编程一球从100米_Python练习题 015:一颗自由落地的球
- window10删除目录时提示没有找到该项目
- JAVA面向对象-----接口与类、接口之间的关系
- apache配置说明
- 四足鼎立,北京互联网产业地图
- flink-metric原理与实战
- 三、Logstash安装部署
- 经典游戏PK:魔兽争霸VS星际争霸VS红警
- 企鹅号重磅宣布平台三大升级 推出全新TOP计划助力内容精品化
- 【读书笔记】《比基尼口才》文皙铉
- 目前数据分析师都有哪些国际认证
- Ubuntu下,用键盘定义鼠标按键
- PS进阶篇——如何PS软件钢笔工具抠图(三)
- 【转】想到他再看不到自己英俊的脸,方继藩就心肝儿疼
- 笔记连载 | Day19【综合实验】之【数字钟】【Intel Cycle IV FPGA平台验证】