原创 N倍奇数分频器.(Verilog)

2008-8-16 23:29 8138 9 10 分类: FPGA/CPLD

N_odd_divider.v / Verilog




module N_odd_divider (
  input   i_clk,
  input   rst_n,
  output  o_clk
);

 

parameter N = N_odd; // 设置奇数(除1外)倍分频

parameter M = ?;     // M="N/2"


     

// bit_of_N: N_odd的二进制位宽

reg [(bit_of_N - 1):0] cnt_p; // 上升沿计数单位
reg [(bit_of_N - 1):0] cnt_n; // 下降沿计数单位

 

reg clk_p; // 上升沿时钟
reg clk_n; // 下降沿时钟

 

assign o_clk = clk_n & clk_p; // 按位与(作用:掩码)

 

// 上升沿计数器: 0~(N-1)

always @ (posedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    cnt_p <= 0;
  else
  begin
    if (cnt_p == N-1)
      cnt_p <= 0;
    else
      cnt_p <= cnt_p + 1'b1;
  end
end

 

// 生成上升沿时钟

// 0~(N>>1) ↑ -> 1; ((N/2)+1)~(N-1) ↑ -> 0

always @ (posedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    clk_p <= 0;
  else
  begin
    if (cnt_p <= M) // 0 ~ (N/2)
      clk_p <= 1;
    else 
      clk_p <= 0;
  end
end

 

 

// 下降沿计数器: 0~(N-1)

always @ (negedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    cnt_n <= 0;
  else
  begin
    if (cnt_n == N-1)
      cnt_n <= 0;
    else
      cnt_n <= cnt_n + 1'b1;
  end
end

 


// 生成下降沿时钟

// 0~(N>>1) ↓ -> 1; ((N/2)+1)~(N-1) ↓ -> 0

always @ (negedge i_clk or negedge rst_n)
begin
  if (!rst_n)
    clk_n <= 0;
  else
  begin
    if (cnt_n <= M) // 0 ~ (N/2)
      clk_n <= 1;
    else
      clk_n <= 0;
  end
end

 

endmodule



仿真波形


点击看大图
图1. N_odd = 3

 


点击看大图
图2.
N_odd = 5

 

另见


 


PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户171203 2008-10-8 17:55

奇数分频其实不用这么复杂,只需把计数器时钟设为always @( i_clk or negedge rst_n),如果是n倍分频,则需计2n的数,输出时钟上升沿和下降沿各占n位数
相关推荐阅读
用户1373959 2009-11-17 22:44
本博客地址迁移.(公告)
迁移至:http://yuphone.cnblogs.com/...
用户1373959 2009-10-16 13:10
七段数码管动态显示IP的研究及设计.(Nios II)(SOPC Builder)
这两个礼拜整理的,欢迎大家抓虫。...
用户1373959 2009-10-16 13:00
sizeof()和strlen()的区别.(C)
#include <stdio.h>int main(void){  char msg[] = "Hello Nios!";    printf("sizeof(msg) = %ld", ...
用户1373959 2009-10-16 12:56
HAL的不同方式访问字符器件的空间开销简单比较.(Nios II)
Unix类型 #include "system.h"#include "fcntl.h"#include "unistd.h"int main(void){  int fd; // file desc...
用户1373959 2009-10-16 12:49
几个的Ubuntu 9.04好源.(Ubuntu)
新加坡国立大学理学院 - 全国通用deb http://ftp.science.nus.edu.sg/ubuntu/ jaunty main restricted universe multivers...
用户1373959 2009-05-05 10:43
NI Multisim 基础电路范例.(Multisim)
NI官网提供的NI Multisim Fundamental Circuits, 内容涵盖RLC电路, 二极管, 晶体管, 放大器, 运放, 滤波器和混合电路. 这些内容不仅可作为初学者的学习范例, ...
EE直播间
更多
我要评论
1
9
关闭 站长推荐上一条 /3 下一条