找回密码
 注册
关于网站域名变更的通知
查看: 651|回复: 1
打印 上一主题 下一主题

VHDL与Verilog硬件描述语言TestBench的编写

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-8 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
VHDL与Verilog硬件描述语言TestBench的编写

. a% G; }. z+ {' Z
VHDL与Verilog硬件描述语言在数字电路的设计中使用的非常普遍,无论是哪种语言,仿真都是必不可少的。而且随着设计复杂度的提高,仿真工具的重要性就越来越凸显出来。在一些小的设计中,用TestBench来进行仿真是一个很不错的选择。VHDL与Verilog语言的语法规则不同,它们的TestBench的具体写法也不同,但是应包含的基本结构大体相似,在VHDL的仿真文件中应包含以下几点:实体和结构体声明、信号声明、顶层设计实例化、提供激励;Verilog的仿真文件应包括:模块声明、信号声明、顶层设计实例化、提供激励。大致思想都是相似的。
8 d0 i1 h' {6 }5 I6 v
* ]- |* `* F& [  简单的说,TestBench就是一种验证手段,从软件层面对设计的硬件电路进行仿真。具体来讲,一般是在你的仿真文件里,产生激励信号,作用于被仿真的设计文件DUT(Design Under Test),产生相应的输出,然后根据输出信号检验设计的电路是否存在问题或者存在哪些问题。
! [: k0 i) ~0 x. A! u* |1 X
* j5 U) G1 e, p1 L, a0 z% C. f- w  下面以FPGA板中驱动流水灯的一段程序为例,简单介绍一下两种语言的TestBench的编写。
* b& P9 g- Y) h
% [/ P/ [& G8 g5 U! O+ d4 jView Code: X/ N( u# D# X- _2 @# J1 d
  上面是一段流水灯的代码,控制8位流水灯依次点亮,再依次熄灭。第一个always语句完成分频功能,第二个always语句用于计数,共16个值,第三个always语句根据计数的值选择LED灯的状态。其中clk、rst分别为时钟和复位信号,led为驱动流水灯的输出信号。接下来针对这一设计编写其TestBench文件。, T0 d- s" B, v# d* {: t6 ^/ i* ~
$ k7 J* K; C" z' H. g, y
View Code. Q5 y' H! S8 n
  由于只需要时钟和复位信号即可,故在其仿真文件并不复杂,建立测试模块,进行信号声明,在两个initial中分别提供clk和rst信号,最后进行例化。当然注意一点,在仿真时要把分频模块去掉,或者将分频系数改小,否则仿真时不容易观察波形。下面是在Modelsim中仿真得到的波形(分频模块改为2分频)。8 R6 [; V5 G' h# I
$ b2 ~4 i" O9 V/ i8 S+ ~
* x1 ]; c8 Z- e! \4 P

: _0 M9 i( v7 O; @6 e  总结起来,Verilog的TestBench有着相对固定的写法:
& \1 g0 Q/ m, i$ }" H: D- O) c( s/ U; t/ [
View Code
. B9 F& ~8 Q9 q. G2 ?  最主要的是在initial语句中进行激励的生成,这要根据具体的设计来分析。
% J, e. y/ {- x7 a$ t" `' U0 ~2 E9 S! k* R5 D5 h6 k2 v
( I9 e2 q6 c. Q3 k; p2 Y: X+ X

" R; ~6 b+ k# t/ @' s4 S' t  下面对比介绍VHDL语言TestBench的写法。同样的功能,驱动流水灯,VHDL的程序如下:$ I3 y+ N% i" N/ k/ ]; @

/ A/ K( ^) x% a4 q2 bView Code; Q8 g; N1 c/ c. p0 t, c1 v
  根据语法要求,首先声明库,接着定义实体和结构体。在结构体中用三个进程(PROCESS)分别实现分频、计数、流水灯状态分配的功能,功能相当于上面Verilog程序中的三个always语句。接下来写TestBench文件:  `4 @: }) Q. O% z% b
1 f) ]2 w1 N  U1 L& ^. u
View Code
* A" n4 v6 ^1 r  在这个TestBench中同样只需要提供clk和rst信号,分别在两个进程实现,Modelsim中的仿真结果如下(同样在仿真的时候将分频系数改为2):; \# j7 d( g% _

  s" |3 {. d- M, p- y4 x/ }/ B5 r# W' k
+ x0 ?) F& F5 m! {# z8 d2 e2 T
  总结一下,VHDL的TestBench写法也有相对固定的格式:
- q* G  f9 a1 d9 m: n( j, S9 n7 w$ t$ x8 v8 Y4 c5 K
View Code! ]  L0 }  G6 }! v% u
  相对与Verilog语言来说,VHDL的TestBench除了自身的库声明以及Entity和Architecture之外,还需要进行元件的声明,即将被测试的设计声明为一个元件,然后对其例化。在激励的产生方面与Verilog思路相同。 
" \. u9 {" u" t/ i) x. N5 u" b9 D8 G
& ~  N- u' M# j4 {2 ?  从上面的程序可以看出,Verilog语言相对比较随意一些,从C语言编程中继承了多种操作符和结构;而VHDL的语法则比较严谨,有固定的格式。但在功能的实现上二者大同小异。比如Verilog中的always语句,在VHDL中可以找到PROCESS与之对应,当然更多的是不同。两种语言均可在不同的抽象层次对电路进行描述:系统级、算法级、寄存器传输级、逻辑门级和开关电路级,但是VHDL更擅长系统级,而Verilog更方便底层描述。在学习硬件描述语言的时候不妨对比学习一下,相信会对电路设计的理解更加深一层。
) c( z0 m" ?9 [4 y

+ s6 ]+ \# d% G) a4 Q! G8 n- A" b# n0 l4 K4 i* k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 20:59 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表