一个计算频率的模块

embedded/2024/11/27 6:09:23/

先上代码

module _sync_reg #(parameter INIT         = 0,parameter ASYNC_RESET  = 0
) (input  clk,input  rst,input  in,output out
);(* ASYNC_REG = "TRUE" *) reg sync1;
(* ASYNC_REG = "TRUE" *) reg sync2;assign out = sync2;generate
if (ASYNC_RESET) beginalways @(posedge clk or posedge rst) beginif (rst) beginsync1 <= INIT;sync2 <= INIT;end else beginsync1 <= in;sync2 <= sync1;endend
end else beginalways @(posedge clk) beginif (rst) beginsync1 <= INIT;sync2 <= INIT;end else beginsync1 <= in;sync2 <= sync1;endend
end
endgenerateendmodule/*clk_estimator #( .EST_BITS ( 24 ))  clk_estimator (.rst(),.clk(),.meas_clk(), .cntr_data()
);
*/module clk_estimator #(parameter FRQ  = 100*1000*1000     
)(input         rst,input         clk, input         meas_clk, output reg [32-1:0] dout ,output  reg  update     
);reg [31:0] c;
reg f  = 0 ; 
wire of = c >=    (FRQ/20) -1  ;  
always @(posedge clk) beginif (rst  ) begin    c <= 0;    f<=0;   end else if (of)begin  f<=~f;    c<=0;   end   else  begin  c <= c + 1 ;end
endwire out_dclk;_sync_reg  self_estim(.clk(meas_clk),.rst(rst),.in(f),.out(out_dclk)
); reg [32-1:0] cntr_clk;
reg [32-1:0] ref_cntr_data_r; 
reg prev_out_dclk;
reg update_w ; always @(posedge meas_clk) beginif (rst) beginupdate_w <=0;cntr_clk        <= 0;prev_out_dclk   <= 0;ref_cntr_data_r <= 0; end else beginprev_out_dclk   <= out_dclk; if (prev_out_dclk == 0 && out_dclk == 1'b1) begincntr_clk        <= 0;ref_cntr_data_r <= cntr_clk;update_w <=1; end else begincntr_clk        <= cntr_clk + 1'b1;update_w <=0;endend
end(* ASYNC_REG = "TRUE" *)  reg [4:0]  updater; always @ (posedge clk )  updater <= { updater[3:0], update_w };
(* ASYNC_REG = "TRUE" *)  reg[31:0] r; reg[31:0] rr,rrr,rrrr;always @ (posedge clk )  rrrr<=rrr;always @ (posedge clk )  rrr<=rr;always @ (posedge clk )  rr<=r;always @ (posedge clk )  r<=ref_cntr_data_r;reg [31:0]watch_dog_cntr ;wire update1=   updater[4:3] == 2'b01   ; always @ (posedge clk ) if ( update1 | rst )watch_dog_cntr<=0; else   watch_dog_cntr<= ( watch_dog_cntr>= FRQ/4 )?0: (watch_dog_cntr+1);
wire watch_dog_act =  watch_dog_cntr >= FRQ/4 ;always @ (posedge clk ) if (watch_dog_act) dout <= 0 ;else if (update1) dout<=  rrrr ;always @ (posedge clk )  update <= watch_dog_act ==1 ||   update1  ==1  ;endmodule

当外部meas_clk有频率信号接入时,每1/10秒就会输出更新一下时钟计数,这里的计数是输入meas_clk的1/10。如果没有频率接入每1/4秒输出一下结果0。

原理是我们已知频率为FRQ的时钟clk每1/20秒翻转一次,这样得到的每次上升边缘就是1/0秒。被测试的时钟meas_clk在1/10秒内数数,数到到多少,之后再传到clk时钟域,输出出来。另外设置了1/4秒的看门狗,当时meas_clk丢失,超过1/4秒没有更新,就触犯看门狗电路自动更新输出0.

这个代码实验通过了,非常好用。可以在编译时候有跨时钟区域的警告,可以通过设置虚假路径来解决。


http://www.ppmy.cn/embedded/140830.html

相关文章

Android adb shell dumpsys audio 信息查看分析详解

Android adb shell dumpsys audio 信息查看分析详解 一、前言 Android 如果要分析当前设备的声音通道相关日志&#xff0c; 仅仅看AudioService的日志是看不到啥日志的&#xff0c;但是看整个audio关键字的日志又太多太乱了&#xff0c; 所以可以看一下系统提供的一个调试指令…

使用 ROCm 在 AMD GPU 上用Axolotl微调 Llama 3

Fine-tuning Llama 3 with Axolotl using ROCm on AMD GPUs — ROCm Blogs 简介 大型语言模型&#xff08;LLMs&#xff09;已经彻底改变了自然语言处理领域&#xff0c;使机器能够理解和生成类似人类的语言。然而&#xff0c;这些模型通常是在大量通用数据上训练的&#xff0…

Figma入门-填充、描边、效果、导出

Figma入门-填充、描边、效果、导出 前言 在之前的工作中&#xff0c;大家的原型图都是使用 Axure 制作的&#xff0c;印象中 Figma 一直是个专业设计软件。 最近&#xff0c;很多产品朋友告诉我&#xff0c;很多原型图都开始用Figma制作了&#xff0c;并且很多组件都是内置的…

深入了解决策树---机器学习中的经典算法

引言 决策树&#xff08;Decision Tree&#xff09;是一种重要的机器学习模型&#xff0c;以直观的分层决策方式和简单高效的特点成为分类和回归任务中广泛应用的工具。作为解释性和透明性强的算法&#xff0c;决策树不仅适用于小规模数据&#xff0c;也可作为复杂模型的基石&…

【数据结构实战篇】用C语言实现你的私有队列

&#x1f3dd;️专栏&#xff1a;【数据结构实战篇】 &#x1f305;主页&#xff1a;f狐o狸x 在前面的文章中我们用C语言实现了栈的数据结构&#xff0c;本期内容我们将实现队列的数据结构 一、队列的概念 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端…

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…

充满智慧的埃塞俄比亚狼

非洲的青山 随着地球温度上升&#xff0c;贝尔山顶峰的冰川消失殆尽&#xff0c;许多野生动物移居到海拔3000米以上的高原上生活&#xff0c;其中就包括埃塞俄比亚狼。埃塞俄比亚狼是埃塞俄比亚特有的动物&#xff0c;总数不到500只&#xff0c;为“濒危”物种。 埃塞俄比亚狼…

LLM PPT Translator

LLM PPT Translator 引言Github 地址UI PreviewTranslated Result Samples 引言 周末开发了1个PowerPoint文档翻译工具&#xff0c;上传PowerPoint文档&#xff0c;指定想翻译的目标语言&#xff0c;通过LLM的能力将文档翻译成目标语言的文档。 Github 地址 https://github.…