首页 > 编程知识 正文

用verilog设计一个分频器(任意倍数分频器设计)

时间:2023-05-03 07:58:21 阅读:123164 作者:3208

假设n是分频倍数,在第一步中判断n的奇偶校验。

步骤2设计分频电路,如果n为奇分频,则可以通过分别计数上升沿和下降沿来计数(N-1 ),计数值为(nege_cnt or pose_cnt ) (N-1 ) ) 对上升沿至(N-1 )进行计数即可,计数值cnt满足cnt ) n1 )时,even_clk为高,否则为低。

在步骤3中,使用三维运算符向最终输出时钟指派值。

模块div _ fre (inputwireclk,input wire rstn,input wire n,output wire dclk ); reg odd,even; reg pose_clk,nege_clk; reg [5:0]pose_cnt,nege_cnt; reg [5:0]cnt; //奇偶校验always @ (posedgeclkornegedgerstn ) if (! rtn () odd,Even )=2'd0; ELSEif(n[0]==1'D0 ) begin even=1'd1; odd=1'd0 end else begin even=1'd0; odd=1'd1; end//奇分频always @ (posedgeclkornegedgerstn ) if (! rstn ) pose_cnt=1'd0; elseif(pose_CNT==(n-1 ) ) pose_cnt=1'd0; else pose_cnt=pose_cnt 1'd1; always @ (negedgeclkornegedgerstn ) if (! rstn ) nege_cnt=1'd0; elseif(nege_CNT==(n-1 ) ) nege_cnt=1'd0; else nege_cnt=nege_cnt 1'd1; always @ (posedgeclkornegedgerstn ) if (! rstn ) pose_clk=1'd0; elseif(pose_CNT((n-1 )1) ) pose_clk=1'd1; else pose_clk=1'd0; always @ (negedgeclkornegedgerstn ) if (! rstn ) nege_clk=1'd0; elseif(nege_CNT ) (n-1 )1) ) nege_clk=1'd1; else nege_clk=1'd0; assign odd _ clk=nege _ clk|pose _ clk; //偶分频always @ (posedgeclkornegedgerstn ) if (! rtn ) cnt=1'd0; ELSEif(CNT==(n-1 ) ) cnt=1'd0; else cnt=cnt 1'd1; always @ (posedgeclkornegedgerstn ) if (! rstn ) even_clk=1'd0; ELSEif(CNT(N1 ) ) even_clk=1'd1; else even_clk=1'd0; //赋值assign dclk=odd? odd_clk:even_clk; 最终模块并不难。 虽然没有写tb,但是想法很重要

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。