ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-27 11:34:40  阅读:265  来源: 互联网

标签:VHDL -- quartus modelsim seg BCDin testbench VECTOR display


今天为数字钟写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就行了

 

标签:VHDL,--,quartus,modelsim,seg,BCDin,testbench,VECTOR,display
来源: https://blog.csdn.net/u013183444/article/details/120989460

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有