不同类型时钟CLK信号波形的产生、与时钟频率的关系

不同类型时钟CLK信号波形的产生、与时钟频率的关系文章目录一 周期性时钟 50 占空比 二 高低电平持续时间不同的时钟三 带初始延迟的时钟四 指定数目的时钟五 相移时钟六 倍频时钟一 周期性时钟 50 占空比 二 高低电平持续时间不同的时钟三 带初始延迟的时钟四 指定数目的时钟五 相移时钟六 倍频时钟 clk 时钟信号

一、时钟周期与时钟频率换算

  时间(s) = 1/时钟频率(单位换算成HZ)

例如:1GHz换算成秒

  • 单位换算 把GHz换算成 Hz
  • 1GHz = 10^3MHz = 10^6KHz = 10^9Hz 1000的数量级
  • T(s) = 1ns = 1/(10^9Hz) = 10^-9 s , 即1ns的时钟周期对应1GHz的时钟频率
  • 1s = 10^3 ms = 10^6 us = 10^9 ns
时钟频率 时钟周期
10MHz 100ns
50MHz 20ns
100MHz 10ns
1GHz 1.0ns

二、不同类型CLK波形

2.1、占空比50%的时钟信号(高低电平持续时间相同)

module gen_clk_50(clk_a); output reg clk_a; parameter tPERIOD = 10; initial clk_a = 0; always #(tPERIOD/2) clk_a = ~clk_a; endmodule 

在这里插入图片描述

2.2、占空比可设置时钟信号(高低电平持续时间不同)

module gen_clk(clk_b); parameter tON = 5, tOFF = 10; //设置占空比 output reg clk_b; always begin #tON clk_b = 0; #tOFF clk_b = 1; end endmodule 

在这里插入图片描述

2.3、带初始延迟的时钟(占空比可设置)

module gen_clk_d(clk_c); output reg clk_c; parameter START_DELAY = 5, LOW_TIME = 3, HIGH_TIME = 2; initial begin clk_c = 0; //初始化 #START_DELAY; //设置初始延迟 forever begin //也可通过repeat()语句指定时钟产生个数 clk_c = 1; #HIGH_TIME; clk_c = 0; #LOE_TIME; end end endmodule 

在这里插入图片描述

2.4、相移时钟(assign赋值+延迟)

module clk_phase(master_clk, slave_clk); output reg master_clk; output wire slave_clk; //相移始终 parameter tON = 2, tOFF = 3, tPHASE_DELAY = 1; always begin #tON master_clk = 0; #tOFF slave_clk = 1; end assign #tPHASE_DELAY salve_clk = master_clk; //通过连续赋值语句生成一个时钟的相移始终 endmodule 

在这里插入图片描述

2.5、倍频时钟(原时钟与相移始终异或)

   为产生一个频率为原本时钟频率2倍的时钟,将原时钟相移1/4周期,新的时钟信号与原时钟信号异或得到的结果就是一个更快速的时钟。

module clk_divider(output double_clk); parameter tHALF_PERIOD = 2; reg clk; wire delayed_clk; always begin #tHALF_PERIOD clk = 0; #tHALF_PERIOD clk = 1; end assign #(tHALF_PERIOD/2) delayed_clk = clk; assign double_clk = delayed_clk^clk; endmodule 

在这里插入图片描述

2.6、检测时钟脉冲是否丢失

module check_clock#(parameter tPERIOD=3)(input clk); time curr_time, last_time; //定义时间变量 always@(posedge clk)begin curr_time = $time; if( (curr_time-last_tiem)>tPERIOD ) $display("Assertion fail:: CLock not period"); last_time = curr_time; end endmodule 
//实际检查目标clk=1536Mhz的频率方式 @(posedge clk) time_1 = $realtime; @(posedge clk) time_2 = $realtime; freq_tmp = 1000/(time_2 - time_1); //获取目标clk的频率 assert((freq_tmp>1536-2)&(freq_tmp<1536+2)) else begin //检查1536M目标频点,通常可以给±2余量 `uvm_error("freq check failed",$sformatf("freq_tmp = %0d", freq_tmp)); end 
今天的文章 不同类型时钟CLK信号波形的产生、与时钟频率的关系分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-01 07:57
下一篇 2025-01-01 07:51

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98898.html