【乌拉喵.教程】进一步学习编写TestBench(VHDL语言),quartus与modelsim时序仿真

简介: 【乌拉喵.教程】进一步学习编写TestBench(VHDL语言),quartus与modelsim时序仿真

科技背景_副本 公众号_副本.png

最近将多年来收集到的教学视频、国内外图书、源码等整理整合拿出来,
涉及arm、Linux、python、信号完整性、FPGA、DSP、算法、
stm32、单片机、制图、电子模块、kali、出版社图书等。大小约1.5TB+。
详情:
https://www.bilibili.com/read/cv20701606

今天为数字钟写display显示代码,还是要用到testbench和modelsim,上次的方法感觉好乱好乱的,今天在前面学习的基础上又查找资料,学到了新的方法,有了新的体会,在这里记录下来。有部分图片啥的是从前面的文档里复制的,更新的主要是今天学习的操作方法。


注意,从今天开始,testbench使用VHDL语句了!


假设现在已经写好了一个电路vhdl,编译也没问题了,什么都没问题了,就差仿真了。


  1. 设置testbench语言

这里使用VHDL语言,确认。


  1. 生成testbench

点击之后,quartus会自动生成以.vht为扩展名的testbench文件。

  1. 建立modelsim工程

打开modelsim 10.1c

打开后是没有work库的


所以要新建work库


取名为work


在建立的library库之后,要再建立一个工程project


我们为这工程取名为display


点击OK后会弹出另一个对话框


因为我们的VHDL元件文件和testbench都是使用quartusII来生成的,所以我们直接选择“Add existing file”将我们设计的display元件和testbench都添加进来,为什么这两个文件都要添加呢?


因为仔细看testbench中,他有个component,他其实就是引用了display元件,要不他知道要对输入引脚的信号进行什么操作呢,对吧。


添加display元件


确定之后,我们会看到工程中会添加了display.vhd元件文件


接着我们在添加testbench文件就行了


是simulation->modelsim中的display.vht

最后整个工程中包含了两个文件,一个.vhd一个.vht


这样一个工程就完成了。

  1. testbench文件编写

在把整个大环境搭建完成后,我们就要修改quartusII直接生成的testbench文件,在上面工程的.vht文件上右键选择edit



在编辑界面可以对testbench进行修改,下面先把vhdl的元件代码复制到这里,让大家看看这个元件是什么,才能测试,对吧,所以先看元件是干啥的


这个用来驱动4位7段数码管,seg用来控制选第几个数码管,00表示第一个,01是第二个,10是第三个,11是第四个。BCDin是按BCD码的输入数字,将BCDin转成int型就是对应的数字。输出的seg_c是直接连到硬件的位选,num连到段选。


那么他的testbench怎么写的呢?

LIBRARY ieee;                                              
USE ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; 
use ieee.std_logic_arith.all;                             
ENTITY display_vhd_tst IS
END display_vhd_tst;
ARCHITECTURE display_arch OF display_vhd_tst IS
-- constants                                                
-- signals                                                
SIGNAL BCDin : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL num : STD_LOGIC_VECTOR(6 DOWNTO 0);
SIGNAL seg : STD_LOGIC_VECTOR(1 DOWNTO 0);
SIGNAL seg_c : STD_LOGIC_VECTOR(3 DOWNTO 0);
COMPONENT display
       PORT (
       BCDin : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
       num : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
       seg : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
       seg_c : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
       );
END COMPONENT;
BEGIN
       i1 : display
       PORT MAP (
-- list connections between master ports and signals
       BCDin => BCDin,
       num => num,
       seg => seg,
       seg_c => seg_c
       );
init : PROCESS                                            
-- variable declarations   
variable BCDintemp:std_logic_vector(3 downto 0);                                
BEGIN                                                       
        -- code that executes only once 
                     BCDin<="1111";
                     seg<="11";
                     wait for 500ns;
                     BCDintemp:="0000";
                     for i in 0 to 9 loop
                seg<="00"; --out 0001
        BCDintemp:=BCDintemp+'1'; --use "+" must include std_logic_unsigned library
        BCDin<=BCDintemp;
        wait for 500ns;
      end loop;     
WAIT;                                                      
END PROCESS init;                                          
always : PROCESS                                             
-- optional sensitivity list                                  
-- (        )                                                
-- variable declarations                                     
BEGIN                                                        
        -- code executes for every event on sensitivity list 
WAIT;                                                       
END PROCESS always;                                         
END display_arch;

BCDintemp来累加,看整个输出对不对。


  1. 编译

保存testbench,点击编译all


编译完成后会发现工程中的?号变为了对号√

说明编译通过了。


  1. 仿真


在弹出的对话框中选择仿真程序


点击OK后应该有一个object界面,如果没有,从view中选出来


在object界面中将所有的管脚都加到波形中:


在波形界面,修改为10ms,之后点击run就行了

相关文章
|
算法 异构计算
基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序
基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序
|
5月前
|
开发框架 监控 .NET
【学习笔记】Verilog之三:行为建模方法
Verilog是一种硬件描述语言,用于模拟电子系统的结构和行为。行为建模是Verilog的一种方法,分为数据流行为建模和顺序行为建模。 数据流行为建模主要使用`assign`语句,它描述了电路的功能而不涉及具体结构。连续赋值语句(`assign`)用于给线网分配值,当右端表达式发生变化时,新值会立即赋给线网。此外,还有时延的概念,可以指定赋值或事件发生的延迟时间。
|
算法 芯片
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(一)
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL
117 0
|
算法 芯片
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(三)
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(三)
88 0
|
监控 算法 Linux
【乌拉喵.教程】编写TestBench,quartus与modelsim时序仿真
【乌拉喵.教程】编写TestBench,quartus与modelsim时序仿真
217 0
【乌拉喵.教程】编写TestBench,quartus与modelsim时序仿真
|
C语言 芯片
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(二)
快速入门数字芯片设计,UCSD ECE111(十二)Testbench和VHDL(二)
86 0
Verilog小练习- 看时序写代码--学习自测(完结篇)
Verilog小练习- 看时序写代码--学习自测(完结篇)
133 0
Verilog小练习- 看时序写代码--学习自测(完结篇)
|
文件存储
基于Quartus II 和 ModelSim平台对Verilog HDL硬件描述语言编程仿真操作流程
基于Quartus II 和 ModelSim平台对Verilog HDL硬件描述语言编程仿真操作流程
368 0
基于Quartus II 和 ModelSim平台对Verilog HDL硬件描述语言编程仿真操作流程