zoukankan      html  css  js  c++  java
  • 任意时钟分频

       1:  // clock divider
       2:  `timescale 1ns/1ps
       3:  module clgen  
       4:  #(parameter DIVIDER_LEN = 8)
       5:  (
       6:    input wire clk_in,
       7:    input wire rst,
       8:    input wire enable,
       9:    input wire [DIVIDER_LEN-1:0] divider,
      10:    output wire clk_out
      11:  );
      12:   
      13:  wire odd_or_even;
      14:  wire [DIVIDER_LEN-1:0] cnt_zero;
      15:  wire [DIVIDER_LEN-1:0] cnt_one;
      16:  reg [DIVIDER_LEN-1:0] cnt_pos;
      17:  reg [DIVIDER_LEN-1:0] cnt_neg;
      18:  reg flag_pos;
      19:  reg flag_neg;
      20:   
      21:  assign odd_or_even = divider[0];
      22:  assign cnt_zero = odd_or_even ? (divider-1)>>1:divider[DIVIDER_LEN-1:1]-1 ;
      23:  assign cnt_one = (divider-1);
      24:   
      25:  always @(posedge clk_in or posedge rst)
      26:  if(rst)
      27:        cnt_pos <= {DIVIDER_LEN{1'b0}};
      28:  else begin
      29:      if(cnt_pos >= cnt_one)
      30:          cnt_pos <= {DIVIDER_LEN{1'b0}};
      31:      else if(enable)
      32:          cnt_pos <= cnt_pos + 1;
      33:  end
      34:   
      35:  always @(negedge clk_in or posedge rst)
      36:  if(rst)
      37:        cnt_neg <= {DIVIDER_LEN{1'b0}};
      38:  else begin
      39:      if(cnt_neg >= cnt_one)
      40:          cnt_neg <= {DIVIDER_LEN{1'b0}};
      41:      else if(enable)
      42:          cnt_neg <= cnt_neg + 1;
      43:   
      44:  end
      45:   
      46:  always @(posedge clk_in or posedge rst)
      47:  if(rst)
      48:        flag_pos <= 1'b0;
      49:  else begin
      50:      if(cnt_pos == cnt_zero)
      51:        flag_pos <= 1'b0;
      52:      else 
      53:        if(cnt_pos == cnt_one)
      54:        flag_pos <= 1'b1;
      55:  end
      56:   
      57:  always @(negedge clk_in or posedge rst)
      58:  if(rst)
      59:        flag_neg <= 1'b0;
      60:  else begin
      61:      if(cnt_neg == cnt_zero)
      62:        flag_neg <= 1'b0;
      63:      else 
      64:        if(cnt_neg == cnt_one)
      65:        flag_neg <= 1'b1;
      66:  end
      67:   
      68:  assign clk_out = odd_or_even ?( flag_pos & flag_neg) : flag_pos;
      69:   
      70:  
      91:  endmodule
      92:   

    image

    image

    image

    OPTIMISM, PASSION & HARDWORK
  • 相关阅读:
    20159320《网络攻防实践》第4周教材学习总结
    20159320《网络攻防实践》第3周学习总结
    20159320 《网络攻防实践》第3周教材学习总结
    20159320 《网络攻防实践》第3周视频学习总结
    网络攻防学习心得一(20159320)学习小结
    Android 开发环境搭建以及编译
    iTOP-4412 开发板镜像的烧写
    Ubuntu 的基本操作
    iTOP-4412 平台基础软件的安装和学习
    几个关于嵌入式芯片的硬件系统
  • 原文地址:https://www.cnblogs.com/hiramlee0534/p/3902576.html
Copyright © 2011-2022 走看看