正在加载图片...
120 Verilog hdl硬件描述语言 下载 assign #(PERIOD/2) clock = clock; 但是这种做法并不完全正确。问题在于 Clock是一个线网(只有线网能够在连续赋值中被赋 值),它的初始值是z,并且,z等于x,~x等于x。因此Cock的值永远固定为值x。 现在需要一种初始化 Clock的方法。可以用 initial语句实现。 in⊥七ia1 但是现在 Clock必须是寄存器数据类型(因为只有寄存器数据类型能够在 initial语句中被赋 值),因此连续赋值语句需要被变换为 always语句。下面是一个完整的时钟产生器模块。 module Gen Clk A(Clk A output CIk A: reg clk parameter tPERIOD= 1( ⊥n主七ia1 ClK A=0 always #(tPERIOD/2) clk A=-Clk A 图11-3显示了该模块产生的时钟波形 Clk_A 」「1「L「L 20 30 图11-3周期性的时钟波形 下面给出了产生周期性时钟波形的另一种可选方式。 module Gen Clk B(Clk B) output Clk B start =1 end nor #2(Clk B, Start Clk B)i endmodul //产生一个高、低电平宽度均为2的时钟 initial语句将Sant置为1,这促使或非门的输出为0(从x值中获得)。5个时间单位后,在 iar变为0时,或非门反转产生带有周期为4个时间单位的时钟波形。产生的波形如图11-4所 如果要产生高低电平持续时间不同的时钟波形,可用 always语句建立模型,如下所示 module Gen Clk C(clk C) parameter toN 5, tOFF =10 output Clk C,a s s i g n # (P E R I O D/2) Clock = ~ C l o c k; 但是这种做法并不完全正确。问题在于 C l o c k是一个线网(只有线网能够在连续赋值中被赋 值),它的初始值是z,并且,z等于x,~ x等于x。因此C l o c k的值永远固定为值x。 现在需要一种初始化C l o c k的方法。可以用i n i t i a l语句实现。 i n i t i a l C l o c k = 0; 但是现在C l o c k必须是寄存器数据类型 (因为只有寄存器数据类型能够在 i n i t i a l语句中被赋 值),因此连续赋值语句需要被变换为 a l w a y s语句。下面是一个完整的时钟产生器模块。 m o d u l e Gen_Clk_A (C l k _ A) ; o u t p u t C l k _ A; r e g C l k _ A ; p a r a m e t e r tPERIOD = 10; i n i t i a l C l k _ A = 0; always # (t P E R I O D/2) Clk_A = ~ C l k _ A; e n d m o d u l e 图11 - 3显示了该模块产生的时钟波形。 图11-3 周期性的时钟波形 下面给出了产生周期性时钟波形的另一种可选方式。 m o d u l e Gen_Clk_B (C l k _ B) ; o u t p u t C l k _ B; r e g S t a r t; i n i t i a l b e g i n S t a r t = 1; #5 S t a r t = 0; e n d n o r #2 (Clk_B, Start, C l k _ B) ; e n d m o d u l e / /产生一个高、低电平宽度均为2的时钟。 i n i t i a l语句将S t a rt置为1,这促使或非门的输出为 0 (从x值中获得)。5个时间单位后,在 S t a rt变为0时,或非门反转产生带有周期为 4个时间单位的时钟波形。产生的波形如图 11 - 4所 示。 如果要产生高低电平持续时间不同的时钟波形,可用 a l w a y s语句建立模型,如下所示: m o d u l e Gen_Clk_C (C l k _ C) ; p a r a m e t e r tON = 5, t O F F = 10; o u t p u t C l k _ C ; 120 Verilog HDL 硬件描述语言 下载
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有