verilog计算某个时钟信号clk_dut的频率[附源代码]
来源:互联网 发布:开发者没有网络adb调试 编辑:程序博客网 时间:2024/04/24 00:04
- 背景
- 算法
- 注意
- 源代码
背景
SOC系统顶层验证的时候,会关注各个时钟信号的频率。
如果一一查看波形,然后用计算器计算频率。缺点很多,不是好的做法。
搞一个模板,以后可以用。
算法
假设待测时钟信号为clk_dut
;期望计算出clk_dut
的频率为freq_dut
。怎么搞?
解:
利用已知时钟clk_1G
为1000MHz,计算仿真时间内该频率下的计数器值;根据待测时钟clk_dut
下的计数器值与clk_1G
下的计数器值的比值,就可以得出freq_dut
答案。
公式:
仿真时间(复位释放之后的仿真时间)=`freq_dut`*`counter_dut`=`freq_clk_1G`*`counter_1G`
注意:
- 要在
clk_dut
和clk_1G
对应的复位信号全部释放之后,才开始计数。 - 如果是PLL的话,还要注意PLL处于锁定lock状态后,才开始计数。
源代码
`timescale 1ns/10ps ////////////////////////////////////////////////////// reg clk_dut; reg [63:0] counter_dut; initial begin clk_dut=1'b0; end always #5 clk_dut = ~clk_dut; always @(posedge clk_dut or negedge rstn) begin if(~rstn) counter_dut=64'h0; else counter_dut = counter_dut + 1'b1; end //////////////////////////////////////////////////// reg clk_1G; reg [63:0] counter_1G; //bit-width is 64;prevent counter_1G overflow initial begin clk_1G=1'b0; end always #1 clk_1G = ~clk_1G; always @(posedge clk_1G or negedge rstn) begin if(~rstn) counter_1G=64'h0; else counter_1G = counter_1G + 1'b1; end ////////////////////////////////// assign freq_dut = 1000/(counter_1G/counter_dut);//unit is MHz
0 0
- verilog计算某个时钟信号clk_dut的频率[附源代码]
- verilog时钟频率对应关系
- MTKl 屏的时钟频率计算
- MTKl 屏的时钟频率计算
- 如何计算时钟输出频率
- CPU的时钟频率
- S3C6410的时钟频率
- S3C6410的时钟频率
- verilog入门经验(三)取某个信号的上升沿或下降沿信号
- verilog系统复位后拉高某个信号
- 信号的频率
- ADC采样频率计算与时钟频率选择
- 大量的verilog源代码
- 关于时钟频率的设置
- mini2440 时钟频率的配置
- 关于时钟频率的设置 .
- STM32F407的定时器时钟频率
- Verilog的信号强度学习
- Socket
- VS中的c++的makefile nmake
- linux下xampp(apache)中配置域名访问,以及遇到的问题
- 随笔
- TCP/UDP实例讲解
- verilog计算某个时钟信号clk_dut的频率[附源代码]
- 2016年度最受欢迎的100个 Java 库
- 调用反射类的指定方法
- hql语言
- 【Spring】Spring Framework Reference Documentation中文版3
- SlidingMenu如何添加依赖资源
- 树梅派应用2:全新配置 HiFiBox DAC + Volumio 系统
- SlidingMenu简单使用
- View触摸事件分发