Verilog 时钟分频设计

这篇具有很好参考价值的文章主要介绍了Verilog 时钟分频设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、偶数分频

将触发器的反向输出端接到触发器的输入,可以构成简单二分频电路。

在此基础上,将二分频电路进行级联可以构成四分频,八分频电路。电路如下图所示:

Verilog 时钟分频设计 

对于任意偶数分频,或者系数较大的偶数分频,可以使用计数器循环计数来实现分频。当计数周期达到N/2(N为分频系数)是对输出时钟进行翻转,可以实现占空比为50%的任意偶数分频电路。偶数分频的verilog描述如下所示:

module even(  
    input clk,
    input rst_n,
    output clk_out   
);
//定义分频系数 
parameter N = 8;   

reg clk_out_r;
reg [3:0] cnt;

//N/2 计数 
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin    
       cnt <= 4'd0  ;
    end
    else begin
    cnt <= cnt == (N/2 - 1) ? 0 : cnt +1; 
    end
end 

//时钟输出
always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        clk_out_r <= 0;
    end
    else begin
        clk_out_r <= cnt == (N/2 - 1) ? ~clk_out_r : clk_out_r;
    end
end

assign clk_out = clk_out_r;

endmodule

2、奇数分频

如果不要求分频时钟的占空比为50%,可以使用和偶数分频一样的方法,使用计数器对分频系数N进行循环计数,然后根据占空比选择时钟跳变的计数。

对于要求占空比为50%的奇数分频电路,可以使用源时钟的双边沿特性对输出进行"与运算"或者"或运算"将占空比调整为50%。

或运算产生占空比为50%的奇数分频的verilog描述如下:

module odo_div_or
   (
    input rstn ,
    input clk,
    output clk_out
    );

    //定义分频系数
    parameter N = 3;
    reg ckl_p_r;
    reg clk_n_r;

   //计数器
   reg [3:0] cnt ;
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         cnt <= 'b0 ;
      end
      else if (cnt == N-1) begin
         cnt <= 'b0 ;
      end
      else begin
         cnt <= cnt + 1'b1 ;
      end
   end

   //在上升沿产生N分频
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         ckl_p_r <= 1'b0 ;
      end
      else if (cnt == N/2-1 ) begin 
        ckl_p_r <= 0 ;
      end
      else if (cnt == N-1) begin
        ckl_p_r <= 1 ;
      end
   end
 
   //在下降沿产生N分频
   always @(negedge clk or negedge rstn) begin
      if (!rstn) begin
         clk_n_r <= 1'b0 ;
      end
      else if (cnt == N/2 -1 ) begin
        clk_n_r <= 0 ;
      end
      else if (cnt == N-1) begin
        clk_n_r <= 1 ;
      end
   end

   assign clk_div9 = clk_p_r | clk_n_r ;

endmodule

与运算产生占空比为50%的奇数分频的verilog描述如下:

module odo_div_and
   (
    input rstn ,
    input clk,
    output clk_out
    );

    //定义分频系数
    parameter N = 3;
    reg ckl_p_r;
    reg clk_n_r;

   //计数器
   reg [3:0] cnt ;
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         cnt <= 'b0 ;
      end
      else if (cnt == N-1) begin
         cnt <= 'b0 ;
      end
      else begin
         cnt <= cnt + 1'b1 ;
      end
   end

   //在上升沿产生N分频
   always @(posedge clk or negedge rstn) begin
      if (!rstn) begin
         ckl_p_r <= 1'b0 ;
      end
      else if (cnt == N/2 ) begin 
        ckl_p_r <= 0 ;
      end
      else if (cnt == N-1) begin
        ckl_p_r <= 1 ;
      end
   end
 
   //在下降沿产生N分频
   always @(negedge clk or negedge rstn) begin
      if (!rstn) begin
         clk_n_r <= 1'b0 ;
      end
      else if (cnt == N/2 ) begin
        clk_n_r <= 0 ;
      end
      else if (cnt == N-1) begin
        clk_n_r <= 1 ;
      end
   end

   assign clk_div9 = clk_p_r & clk_n_r ;

endmodule

3、小数分频

小数分频又可以分为半整数分频和不规则的小数分频,可以利用时钟的双边沿可以对占空比进行调整。但是无论怎么调整,输出时钟的占空比不可能是50%。

常用的小数分频方式有双模前置小数分频和脉冲删除小数分频。

双模前置分频:

假设设计一个36/8的小数分频电路,其实就是在36个周期的clk_in内输出8个周期的clk_out。36/8等于4点多,因为需要四分频和五分频交叉。

假设4分频需要a个周期,五分频需要b个周期

即a+b=8,4*a+5*b=36。可解得a=4,b=4。

具体输出的方式可以先输出四个四分频,然后输出四个五分频;也可以四分频和五分频交叉输出。交叉输出的方式有着更小的时钟抖动。

脉冲删除法分频: 

通过计数,来删除一些不需要的脉冲即脉冲删除法。

假设设计一个36/8的小数分频电路,其实就是在36个周期的clk_in内输出8个周期的clk_out。我们在36个周期的clk_in中删除28个脉冲,这样就输出8个周期的clk_out。文章来源地址https://www.toymoban.com/news/detail-509376.html

到了这里,关于Verilog 时钟分频设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FGPA】Verilog:JK 触发器 | D 触发器 | T 触发器 | D 触发器的实现

    0x00 JK 触发器 JK 触发器是 RS 触发器和 T 触发器的组合,有两个输入端 J 和 K,如果两个输入端都等于 1,则将当前值反转。 行为表

    2024年02月05日
    浏览(48)
  • Verilog D触发器

    D触发器有数据、时钟和RST输入端以及Q和!Q两个输出端。在每一个时钟的上升沿,输出Q将与输入的D锁存,直到下一个时钟上升沿到来才继续锁存当前的D端数值!Q与Q的输出结果 相反。图1给出了D触发器的符号,图二给出了D触发器的电路,图三给出了D触发器的输入/输出时序

    2024年02月05日
    浏览(40)
  • (91)Verilog实现D触发器

    1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog实现D触发器 5)结语 FPGA(Field Programmable Gate Array)是在PAL、GAL等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路

    2024年02月04日
    浏览(36)
  • Verilog学习笔记1:D触发器

    实验波形  貌似没什么问题  实验波形:

    2024年02月13日
    浏览(51)
  • 带有时钟使能和同步清零的D触发器

    每个 Slice 有 8 个 FF 。四个可以配置为 D 型触发器或电平敏感锁存器,另外四个只能配置为 D 型触发器,但是需要记得是:当原来的四个 FF 配置为锁存器时,不能使用这四个 FF 。 (1)FDCE 简介 带有时钟使能和异步清零的 D 触发器 当时钟使能(CE)为高并且异步清零信号 C

    2024年02月11日
    浏览(40)
  • verilog学习笔记6——锁存器和触发器

    2023.8.15 信号高电平有效 R :复位端 S :置位端 表达式: Q = S + R\\\' Qn 约束条件:SR=0,也就是SR不能同时为1 信号低电平有效 R :复位端 S :置位端 表达式: Q = S\\\' + R Qn 约束条件:S+R=1,也就是SR不能同时为0 E = 0 :锁存器保持不变,锁住 E = 1 :相当于正常得SR锁存器 把S取反接到

    2024年02月12日
    浏览(46)
  • 【FPGA】Verilog:时序电路 | 触发器电路 | 上升沿触发 | 同步置位 | 异步置位

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:触发器电路    ​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Sw

    2024年02月11日
    浏览(39)
  • [从零开始学习FPGA编程-32]:进阶篇 - 基本时序电路-D触发器(Verilog语言)

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:  目录 第1章 什么是时序电路 1.1 时序电路 1.2 什么是触发器

    2023年04月08日
    浏览(51)
  • verilog 学习笔记 —— 时序逻辑 Sequential Logics (Latches and Flip-Flops 锁存器和触发器)

    1. D flip-flop D触发器 2. D flip-flop  D触发器 3. DFF with reset  带复位的D触发器  4. 带复位值的D触发器 5. DFF with asynchronous reset 带异步复位功能的 D触发器 6. DFF with byte enable   带位启动的触发器 7. D Latch  D锁存器 8. DFF  9. DFF   10. DFF+gate   11. Mux and DFF   12. DFFs and gates   13

    2024年02月04日
    浏览(59)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    目录 一、前言 二、偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三、奇数分频 3.1 占空比非50%奇数分频 3.2 占空比50%奇数分频 3.3 Verilog代码 3.4 Testbench 3.5 仿真结果 四、小数分频 4.1 双模前置分频法 4.2 Verilog代码 4.3 Testbench 4.4 仿真结果 五、半整

    2024年02月04日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包