michile

导航

verilog testbench 浅析

      早上看了《精通Verilog》,一节课看了八十多页的,所以说并不是精读的,对于我这种半路出家接手verilog语言的人来说,现在看看基本的语法倒是觉得受益匪浅。以前上课学习了VHDL后,马上转向Verilog,倒是没有什么困难。当然这只是把一种语言翻译成另外的语言,但在现在看来是远远不够的,事实是Verilog支持的不只是把VHDL翻译过来就完事的。翻译只是完成了在QUARTUS II里面提供综合的语句,但是Verilog的灵活性并不会在quartus II里面体现的,如果有较好的Verilog语法基础的人应该知道它支持的大量系统函数和任务,在quartusII里面做设计的时候我们并不会使用到这些系统函数和任务的,就连简单的延时语句都不会用到,那么这些语句设计出来并不是为了综合的,他们的目的就是仿真,也就是编写testbench的。

       昨天看了一个晚上的testbench编写,总是感觉似懂非懂的样子,原因之一是我没有扎实的Verilog基础,对程序里面的initial 语句总是感觉很难接受,或许是再VHDL语法中很难找到对应的语句来帮助学习吧。今天看了基础的语法书后,对整个testbench的理解就比较透彻了。Teshtench是一个完整的Verilog程序(当然也有VHDL写得testbench,我这里所说的只是针对Verilog的),由quartus II生产的testbench模板是已经例化好了的,我忽视了例化,就把整个程序理解不清了。简单的说,整个testbench程序把我们写得将要综合的语句和自己写得激励程序组合到一起。这里modelsim就像是个FPGA了,模块例化就像我们把程序下载到了这块板子中,而自己写得激励信号就像在完成各个信号的输入,这个概念在所有的仿真中都可以这么理解的。

     这样对testbench的编写就可以有了很感性的认识了,接下来就是对teshbench文本的理解了。首先知道所有iniaial语句从一开始就开始顺序执行,所有的foever和always语句都是反复循环执行。我们用循环语句产生周期性信号,如时钟信号。在initial语句中利用延时语句如#1000进行相对时间操作,如在5时刻复位信号撤销,计数器开始计数,利用#10在15时刻使清零信号有效,对计数器清零。 当然在testbench中可以调用大量的系统函数和任务,来完成显示和调用文本,这算是对testbench的深入理解操作了,我只是完成了对testbench的初级的认识。

posted on 2011-11-22 10:54  michile  阅读(4160)  评论(0编辑  收藏  举报