Testbench中如何产生精确的时钟

编写TestBench的目的就是将激励施加一个设计(Design),观察它的响应,并将这个响应和期望的结果进行比较。下面将说明如何生成精确的时钟信号。下面是用Verilog 编写的两个程序用来生成100Mhz DutyCycle为50%的Clock。

例1和例2 都生成正确的Clock,例1的方法使用1和0 显示赋值会更可靠,另外可以更好地控制Clock的初始相位,同样可以用来设计出不同DutyCycle的Clock。例2使用clk = ~clk的语句时,将依赖Clock信号的初始值,而不是默认的1‘bx,如何没有给clk赋初值,试想将1’bx取反 得到的是什么?将不能产生Clock。

1、整形除法可以加快时钟的产生 同时可能造成截断错误

当使用Verilog产生正确的Clock 或者波形的时候,必须选择适当的时延单位和时延精度,这样才能将波形的边沿设置在准确的位置,当使用类似Cycle/2的表达式时,为了计算延时,必须确定整数运算不会截断变量的小数部分。如例3 我想产生的Clock的period 为15ns,但我得到的14ns的信号,因为整数除法将小数部分截断了。

2 、Verilog的时延精度(timescale)会影响信号的边沿

如果延时精度相对天当前的延时单位太低 ,延时(delay)的值和预期值相比会变大或变小,当这种情况发生时钟信号上时,它会改变时钟沿的相对位置。例如例4中的Module会生产生一个的period为16ns的时钟信号,因为是由实数除法得到的值再经过舍入得到的整形值。

综上所述 想产生一个精确的波形,必须根据需要 选择恰当的时延单位 时间精度 ,同时明白整形除法和实数除法 区别。例5提供了能够保证实现7.5ns的半周期长度的时延精度,因此可以产生周期为15ns的Clock。

例5:

未经允许不得转载:TacuLee » Testbench中如何产生精确的时钟

赞 (0)

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址