FPGA中的分频器-偶数分频

分频器是FPGA常用的一种时序电路,在各种的小项目中应用的尤为常见,今天李老湿哦给大家讲讲分频器之偶数分频。

基本原理:**偶数倍分频是最简单的一种分频模式,完全可通过计数器计数实现。如要进行N倍偶数分频,那么可由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数,以此循环下去。这种方法可以实现任意的偶数分频。例4-13给出的是一个参数型偶数分频电路,通过调用该模块可实现任意偶数分频。
不多扯淡了 直接上代码,用的软件是VIVADO2017.4.
底层代码如下:

在这里插入代码片
     `timescale 1ns / 1ps
module divf(clk,clk_N,reset_n
 );
 
 input clk,reset_n;
 output reg clk_N;
parameter N=6;
 reg [7:0] p;
always @(posedge clk or negedge reset_n)
 begin
 
    if (!reset_n)
     begin
         p<=1'b0 ;
          clk_N<=1'b0;
          end
   else if(p==N/2-1)   //6分频
    begin 
    p<=0;
    clk_N<=~clk_N;
    end
    else
     p<=p+1;
 end    
endmodule
顶层代码:
`timescale 1ns / 1ps

module divf_top(clk,clk_12,clk_10,reset_n

  );
  input clk,reset_n;
  output clk_12,clk_10;
 divf# (12) divf_12(     //  #代表传递参数,传递底层的N
              .clk(clk),
              .reset_n(reset_n),
             
              .clk_N(clk_12)
 
 );
  divf# (10) divf_10(
              .clk(clk),
              .reset_n(reset_n),
              .clk_N(clk_10)
 
 );
 
endmodule

仿真代码`在这里插入代码片`

module devf_TB;
 
 reg clk,reset_n; 

 wire clk_10,clk_12;
 
 initial 
 begin
 reset_n=0;
  #20;
  reset_n=1;
 clk = 1'b0; 
end
always#10 clk = ~clk;   //输入时钟为50MHZ
divf_top dut 
( .clk (clk),
  //.clk_12 (clk_12),   //10分频
  .clk_10 (clk_10),
   .clk_12 (clk_12),
  .reset_n (reset_n) );

endmodule
 仿真结果 
 ![大家自己一定要亲手做做哦](https://img-blog.csdnimg.cn/20190510101527881.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjI5NzMwOA==,size_16,color_FFFFFF,t_70)
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值