文章目录
一、时钟周期与时钟频率换算
时间(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信号波形的产生、与时钟频率的关系分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/98898.html