2823|3

113

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

[笔记].等占空比分频器的几种写法.[Verilog] [复制链接]

(1)2的幂分频案例I 二分频
i: div_2.v
module div_2(
  input  i_clk,
  input  i_rst_n,
  
  output o_clk
);
reg [0:0] cnt;
always @ (posedge i_clk, negedge i_rst_n)
  if (!i_rst_n)
    cnt <= 0;
  else
    cnt <= cnt + 1'b1;
assign o_clk = cnt[0];
endmodule

案例II 四分频
i:div_4.v
module div_4(
  input  i_clk,
  input  i_rst_n,
  
  output o_clk
);
reg [1:0] cnt;
always @ (posedge i_clk, negedge i_rst_n)
  if (!i_rst_n)
    cnt <= 0;
  else
    cnt <= cnt + 1'b1;
assign o_clk = cnt[1];
endmodule
此帖出自FPGA/CPLD论坛
点赞 关注
个人签名FPGA技术交流
 

回复
举报

113

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
案例I 六分频
i:div_6.v
module div_6(
  input      i_clk,
  input      i_rst_n,
  
  output reg o_clk
);
// log2(6) = 2.5850 <= 3
reg [2:0] cnt;

// 6 bit counter: 0 ~ 5
// 5 = 6 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt <= 0;
  else
  begin
    if (cnt == 5)
      cnt <= 0;
    else
      cnt <= cnt + 1'b1;
    end
end

// 0 ~ 2  -> 1      
// 2 ~ 5  -> 0
// 2 = 6>>1 - 1
// 5 = 6    - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk <= 0;
  else
  begin
    if (cnt <= 2)
      o_clk <= 1;
    else
      o_clk <= 0;
  end
end

endmodule

案例II 十分频
i:div_10.v
module div_10(
  input      i_clk,
  input      i_rst_n,
  
  output reg o_clk
);
// log2(10) = 3.3219 <= 4
reg [3:0] cnt;

// 10 bit counter: 0 ~ 9
// 9 = 10 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt <= 0;
  else
  begin
    if (cnt == 9)
      cnt <= 0;
    else
      cnt <= cnt + 1'b1;
    end
end

// 0 ~ 4  -> 1      
// 4 ~ 9  -> 0
// 4 = 10>>1 - 1
// 9 = 10    - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk <= 0;
  else
  begin
    if (cnt <= 4)
      o_clk <= 1;
    else
      o_clk <= 0;
  end
end

endmodule
此帖出自FPGA/CPLD论坛
个人签名FPGA技术交流
 
 

回复

113

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
2 奇数分频
案例I 三分频

i. div_3.v
module div_3(
  input  i_clk,
  input  i_rst_n,
  
  output o_clk
);

// log2(3) = 1.5850 <= 2  
reg [1:0] cnt_p;                        // 上升沿计数子

// 3位上升沿计数器: 0 ~ 2
// 2 = 3 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_p <= 0;
  else
    begin
    if (cnt_p == 2)
      cnt_p <= 0;
    else
      cnt_p <= cnt_p + 1'b1;
    end
end

// log2(3) = 1.5850 <= 2  
reg [1:0] cnt_n;                        // 下降沿计数子

// 3位下降沿计数器: 0 ~ 2
// 2 = 3 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_n <= 0;
  else
  begin
    if (cnt_n == 2)
      cnt_n <= 0;
    else
      cnt_n <= cnt_n + 1'b1;
  end
end


reg o_clk_p;                            // 上升沿时钟输出寄存器

// 输出上升沿时钟
// 0     ~ 1 ↑-> 1
// (1+1) ~ 2 ↑-> 0
// 1 = 3>>1
// 2 = 3 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_p <= 0;
  else
  begin
    if (cnt_p <= 1)                     // 1 = 3>>1
      o_clk_p <= 1;
    else
      o_clk_p <= 0;
  end
end

reg o_clk_n;                            // 下降沿时钟输出寄存器

// 输出下降沿时钟
// 0     ~  1 ↓-> 1
// (1+1) ~  2 ↓-> 0
// 1 = 3>>1
// 2 = 3 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_n <= 0;
  else
  begin
    if (cnt_n <= 1)                     // 1 = 3>>1
      o_clk_n <= 1;
    else
      o_clk_n <= 0;
  end
end

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

endmodule
此帖出自FPGA/CPLD论坛
个人签名FPGA技术交流
 
 
 

回复

113

帖子

0

TA的资源

一粒金砂(高级)

4
 
案例II 五分频

i. div_5.v
module div_5(
  input  i_clk,
  input  i_rst_n,
  
  output o_clk
);

// log2(5) = 2.3219 <= 3  
reg [2:0] cnt_p;                        // 上升沿计数子

// 5位上升沿计数器: 0 ~ 4
// 4 = 5 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_p <= 0;
  else
    begin
    if (cnt_p == 4)
      cnt_p <= 0;
    else
      cnt_p <= cnt_p + 1'b1;
    end
end

// log2(5) = 2.3219 <= 3  
reg [2:0] cnt_n;                        // 下降沿计数子

// 5位下降沿计数器: 0 ~ 4
// 4 = 5 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    cnt_n <= 0;
  else
  begin
    if (cnt_n == 4)
      cnt_n <= 0;
    else
      cnt_n <= cnt_n + 1'b1;
  end
end


reg o_clk_p;                            // 上升沿时钟输出寄存器

// 输出上升沿时钟
// 0     ~ 2 ↑-> 1
// (2+1) ~ 4 ↑-> 0
// 2 = 5>>1
// 4 = 5 - 1
always @ (posedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_p <= 0;
  else
  begin
    if (cnt_p <= 2)                     // 2 = 5>>1
      o_clk_p <= 1;
    else
      o_clk_p <= 0;
  end
end

reg o_clk_n;                            // 下降沿时钟输出寄存器

// 输出下降沿时钟
// 0     ~ 2 ↓-> 1
// (2+1) ~ 4 ↓-> 0
// 2 = 5>>1
// 4 = 5 - 1
always @ (negedge i_clk, negedge i_rst_n)
begin
  if (!i_rst_n)
    o_clk_n <= 0;
  else
  begin
    if (cnt_n <= 2)                     // 2 = 5>>1
      o_clk_n <= 1;
    else
      o_clk_n <= 0;
  end
end

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

endmodule
此帖出自FPGA/CPLD论坛
个人签名FPGA技术交流
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
报名赢【小米双肩包、contigo水杯】 | TI MSPM0 系列 MCU 再添新成员
了解TI 前沿新品——高性能与高性价比的优秀组合 MSPM0G351x / MSPM0L111x,4月24日(周四)上午10:00直播~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 1

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表