12-分频器 -偶分频

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

1.分频器

计数器是对于时钟信号进行计数,板载晶振的时钟频率是固定的,有时候需要进行分频和倍频才能满足需要
开发板上只有一种晶振,只有一种频率的时钟,想要通过对与固定时钟进行分频或者是倍频的方式得到各个模块所需的时钟频率,得到比固定时钟快的时钟通过倍频,得到比固定时钟慢的时钟通过分频

  • 分频和倍频都有两种方式:第一种是通过锁相环(PLL),另外一种是编写verilog代码
  • 分频器是数字系统设计中最常见的基本电路之一,所谓分频就是把输入信号的频率变成成倍数地低于输入频率的输出信号
  • 分频器原理是将输入的信号做为计数脉冲,计数器的输出端口的脉冲是按一定频率输出的,就可以看作是输出端口的分频
  • 分频器分为偶数分频器和奇数分频器,分频器和计数器非常类似,有时可以认为是同一种东西

2.FPGA实现

  • 实现对于固定时钟6分频的电路

2.1 模块框图和波形图

12-分频器 -偶分频
12-分频器 -偶分频

2.2 RTL

module divider_six(
  input wire sys_clk,
  input wire sys_rst_n,
  
  output reg clk_out
);


  reg [1:0] cnt;
  
  // cnt变量
  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      cnt <= 2'd0;
    else if(cnt == 2'd2)
      cnt <= 2'd0;
    else
      cnt <= cnt + 2'd1;


  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      clk_out <= 1'b0;
    else if(cnt == 2'd2)
      clk_out <= ~clk_out;
    else 
      clk_out <= clk_out;

endmodule
  • 创建项目,编译代码
    12-分频器 -偶分频

2.3 Testbench

`timescale 1ns/1ns
module tb_divider_six();
  reg sys_clk;
  reg sys_rst_n;  

  wire [1:0] clk_out;

  // 初始化时钟和复位信号
  initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    #20;
    sys_rst_n = 1'b1;
  end
    
  // 模拟时钟信号
  always #10 sys_clk = ~sys_clk;
  
  // 模块的实例化
  divider_six divider_six_inst(
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .clk_out (clk_out)
  );
endmodule
  • 加载仿真代码,进行仿真设置之后进行仿真
    12-分频器 -偶分频

2.4 上板验证

  • 将信号输出到扩展IO口,通过示波器进行观察波形
    12-分频器 -偶分频
  • 重新进行编译,连接板卡(下载器和电源)
  • 添加sof文件,进行程序下载
  • 连接示波器
    12-分频器 -偶分频

2.5 优化

  • 这种做法是不严谨的,在低速系统中不易察觉,在高速系统中就容易出现问题,通过这种分频的方式表面上是对系统时钟进行了分频产生了新的低频时钟,上述得到的分频时钟,实际上与真正的分频时钟是有不同的;
  • 在FPGA当中凡是时钟信号都要连接到全局时钟网络,全局时钟网络也叫做全局时钟树,是FPGA厂商专门针对时钟路径进行设计的,能够使时钟信号到达各个寄存器的时间尽可能相同,减少时序问题的产生,上面产生的分频信号没有连接到全局时钟网络上,但是外部晶振产生的时钟信号,通过管脚连接到了专用时钟引脚上,自然连接到了FPGA全局时钟网络中
  • 在系统时钟工作下的信号比在上述分频信号工作下的信号更能在高速工作下保持稳定,如何对上述代码进行改进?使用时钟标志信号cnt_flag
    12-分频器 -偶分频
module divider_six(
  input wire sys_clk,
  input wire sys_rst_n,
  
  // output reg clk_out
  output reg clk_flag;
);


  reg [2:0] cnt;
  
  // cnt变量
  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      cnt <= 2'd0;
    else if(cnt == 3'd5)
      cnt <= 3'd0;
    else
      cnt <= cnt + 3'd1;


  always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
      clk_flag <= 1'b0;
    else if(cnt == 3'd4)    // flag信号是在计数最大值减一的时候产生一个周期脉冲
      clk_flag <= 1'b1;
    else 
      clk_flag <= 1'b0;

  // 按照之前产生的分频时钟给变量a赋值
   reg a ;
  always @(posedge clk_out or negedge sys_rst_n) // 使用产生的分频时钟clk_out
    if(sys_rst_n == 1'b0)
      a <= 1'b0;  
    else 
      a <= a + 1'b1;

  // 时钟标志位产生的分频时钟对于变量进行赋值
  always@(posedge sys_clk or sys_rst_n)     // 仍然使用系统时钟,更加稳定
    if(sys_rst_n == 1'b0) 
      a <= 1'b0;
    else if(cnt_flag == 1'b1)
      a <= 1'b1;
  

endmodule

12-分频器 -偶分频

`timescale 1ns/1ns
module tb_divider_six();
  reg sys_clk;
  reg sys_rst_n;  

  wire [2:0] clk_flag;

  // 初始化时钟和复位信号
  initial begin
    sys_clk = 1'b0;
    sys_rst_n = 1'b0;
    #20;
    sys_rst_n = 1'b1;
  end
    
  // 模拟时钟信号
  always #10 sys_clk = ~sys_clk;
  
  // 模块的实例化
  divider_six divider_six_inst(
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .clk_flag (clk_flag)
  );
endmodule

产生一个用于标记 6 分频的 clk_flag 标志信号,这样每两 clk_flag 脉冲之间的频率就是对 sys_clk 时钟信号的 6 分频,但是计数器计数的个数我们需增加一些,如图 18-4 所示需要从 0~5 共 6 个数,否则不能实现 6 分频的功能。和方法 1 对比可以发现,相当于把 clk_out 的上升沿信号变成了 clk_flag 的脉冲电平信号cnt_flag 是一样的道理),为后级模块实现相同的降频效果。**虽然这样会多使用一些寄存器资源,不过不用担心我们的系统是完全可以承担的起的,而得到的好处却远远大于这点资源的使用,能让系统更加稳定。在后级模块中需要使用低频时钟的情况,我们就可以不用 clk_out 这种信号作为时钟了,而是继续使用 sys_clk 系统时钟来作为时钟,但让其执行语句的条件以 clk_flag 信号为高电平的时候有效。
12-分频器 -偶分频
12-分频器 -偶分频
12-分频器 -偶分频

2.6 分频数和占空比

若要实现N分频(N为偶数)占空比为50%,只需在计数器计数到N-1(重新从0开始计数),在小于N/2-1时输出低电平,输出N/2-1时输出高电平。而要改变占空比的,则调整比较器比较的值。(尽量不要在一个module内用作后级时钟输入,但可以用于其他module的时钟输入)文章来源地址https://www.toymoban.com/news/detail-459081.html

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

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

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

相关文章

  • FPGA_分频(信号使能分频与计数器分频)(奇偶分频)

    时钟对于 FPGA 是非常重要的,但板载晶振提供的时钟信号频率是固定的,不一定满 足工程需求,所以分频和倍频还是很有必要的。 一、计数器分频 这里通过计数的方式来实现分频。 1.通过计数器来实现6分频。两种方式。第一种直接通过计数方式直接获取获取。输入信号sy

    2024年02月03日
    浏览(33)
  • 任意进制计数器12进制计数数码管显示verilog代码

    名称:任意进制计数器12进制计数数码管显示verilog代码 软件:VIVADO 语言:Verilog 代码功能: 设计一个12进制计数器,计数值00-11需要在数码管上显示, 时钟脉冲通过按键开关设计。 电路的输入信号en进行清零。 本代码可以修改为任意进制计数器,即修改计数控制模块的红框

    2024年02月04日
    浏览(51)
  • FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

    在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输出时钟信号。 常见的分频器可以按照固定比例来进行分频,例如将输入时钟频率除以2、除以4等。因此,如果输入时钟信号的频率为10

    2024年02月05日
    浏览(42)
  • 分频器——(任意奇分频(50%占空比、非50%占空比),任意偶分频,任意小数分频)

            在数字系统的设计中经常会碰到 需要使用多个时钟 的情况。时钟信号的产生通常具有两种方法,一种是使用PLL(Phase Locked Loop,锁相环),可生成 倍频、分频信号 ;另一种则是使用硬件描述语言构建一个分频电路。         分频器的设计通常分为以下 三类:

    2023年04月23日
    浏览(68)
  • FPGA——分频器

    野火学习备忘录——FPAG分频 时钟对于 FPGA 是非常重要的,但板载晶振提供的时钟信号频率是固定的,不一定满 足工程需求,所以分频和倍频还是很有必要的。这里通过计数的方式来实现分频。 1.通过计数器来实现6分频。两种方式。第一种直接通过计数方式直接获取获取。输

    2024年02月10日
    浏览(42)
  • 06 分频器设计

    实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方

    2024年02月19日
    浏览(52)
  • verilog---分频器设计

    //设计分频器 将50MHZ信号分频产生1HZ的秒脉冲,输出信号占空比为50%。 //设计思路:用计数器设计,N分频:当计数到(N/2)-1个数时,输出时钟翻转一次 //50*10^6次分频:计数到24 999 999(需要25bit)时,输出信号翻转。 //无法用vmf仿真,因为endtime最大为10us,实际最少需要1000000u

    2024年02月04日
    浏览(35)
  • VHDL实现分频器

    目录 设计要求: 实现代码: 生成元件图形: 模拟仿真结果:​ 整体项目资源在:VHDL分频器-占空比50%-将FPGA板上的50Mhz的信号分频为1hz时钟信号-嵌入式文档类资源-CSDN文库 设计要求:                 将系统时钟50MHz 分频为1Hz 的时钟信号                 占

    2024年02月12日
    浏览(37)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|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)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    数字IC经典电路设计 经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字I

    2024年02月08日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包