FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)

这篇具有很好参考价值的文章主要介绍了FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、分频器

在FPGA(可编程逻辑门阵列)中,分频器是一种用于将时钟信号的频率降低的电路或模块。它可以根据输入的时钟信号生成一个较低频率的输出时钟信号。

常见的分频器可以按照固定比例来进行分频,例如将输入时钟频率除以2、除以4等。因此,如果输入时钟信号的频率为100 MHz,并且使用一个除以2的分频器,那么输出时钟信号的频率将为50 MHz。这样就可以将高频的时钟信号降低到所需的较低频率,以满足电路设计中对时序和性能的要求。

FPGA中的分频器一般由触发器和计数器组成。触发器用于产生时钟信号的边沿触发,计数器用于对触发器的触发计数,并在达到一定计数值时生成输出时钟信号。通过调整计数器的初值和计数步长,可以实现不同的分频比例。

分频器在FPGA中非常常用,可以在时序控制、数据采样、状态机设计等方面起到重要作用。它可以帮助实现时钟域划分、减少功耗、减小时序延迟等功能。

以上是GPT3对分频器的概述。

二、Verilog实现任意倍分频器

2.1、Verilog源码

  • 由于我们无法在一个always块中同时检测时钟的上升沿和下降沿,因此我们需要两个always块分别进行检测。同时博主引进了两个中间时钟信号分别是根据始终上升沿反转的clk_p,以及根据时钟下降沿进行反转的clk_n。

  • 以本题为例,我们设计一个七倍分频器,因此我们需要在数到七个半个系统时钟周期时对输出的clk_out进行信号反转,因此对于计数器,我们只需要计数到7的一半,也就是3。

  • 由于上升沿与下降沿相隔了半个时钟周期,因此我们可以通过对两个中间时钟信号想与从而获得相当于系统时钟周期的七个半个周期时钟信号。

  • fpga分频器,fpga开发,学习

  • 而对于偶数倍分频器,相信已经大家十分熟悉,只需要计数时钟上升沿进行翻转即可,因此不再赘述。

  • 具体请看如下代码:

module N_divider#(parameter N = 7)(  //分频系数,填入几代表数到几输出的时钟信号就要翻转一次
    input   wire     clk     , //系统时钟
    input   wire     rst_n   , //系统复位

    output  wire     clk_out     //分频时钟
);

reg     [N:0]   cnt_p   ; //时钟上升沿计数寄存器,计满信号反转
reg     [N:0]   cnt_n   ; //时钟下降沿计数寄存器,计满信号反转
reg             clk_p   ; //对时钟上升沿敏感的时钟信号
reg             clk_n   ; //对时钟下降沿敏感的时钟信号

//时钟上升沿敏感计数器
wire				add_cnt_p	;
wire				end_cnt_p	; 

always @(posedge clk or negedge rst_n)begin 
   if(!rst_n)begin
        cnt_p <= 1'd0;
    end 
    else if(add_cnt_p)begin 
        if(end_cnt_p)begin 
            cnt_p <= 1'd0;
        end
        else begin 
            cnt_p <= cnt_p + 1'b1;
        end 
    end
end 

assign add_cnt_p = 1'b1;
assign end_cnt_p = add_cnt_p && cnt_p == N - 1'b1;

//对时钟上升沿敏感的信号反转                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
always@(posedge clk or negedge rst_n)begin
    if(!rst_n)begin
        clk_p <= 1'b0;
    end
    else if(cnt_n <= (N >> 1))begin
        clk_p <= 1'b1;
    end
    else begin
        clk_p <= 1'b0;
    end
end

//时钟下降沿敏感计数器
wire				add_cnt_n	;
wire				end_cnt_n	;

always @(posedge clk or negedge rst_n)begin 
   if(!rst_n)begin
        cnt_n <= 'd0;
    end 
    else if(add_cnt_n)begin 
        if(end_cnt_n)begin 
            cnt_n <= 'd0;
        end
        else begin 
            cnt_n <= cnt_n + 1'b1;
        end 
    end
end 

assign add_cnt_n = 1'b1;
assign end_cnt_n = add_cnt_n && cnt_n == N - 1'b1;

//对时钟下降沿敏感的输出信号
always@(negedge clk or negedge rst_n)begin
    if(!rst_n)begin
        clk_n <= 1'b0;
    end
    else if(cnt_p <= (N >> 1))begin
        clk_n <= 1'b1;
    end
    else begin
        clk_n <= 1'b0;
    end
end

assign clk_out = (N==1) ? clk_p : N[0] ? (clk_p&clk_n) : clk_p;//在二进制中,奇数的第一位是1,偶数的第一位是0;
                                                               //N=1的情况,clk不变;N大于1,判断奇数偶数
                                                               //偶数的情况直接输出上升沿时的输出时钟
                                                               //奇数,则输出clk_p&clk_n;
                                                               //N[0]等效于N[0] == 1
                                                               
endmodule                         

2.2、仿真文件

`timescale 1ns/1ns
module N_divider_tb#(parameter N = 7)();


reg     clk     ;
reg     rst_n   ;
wire     clk_out   ; 


always #10 clk = ~clk;

initial begin
    clk = 1'b0;
    rst_n = 1'b1;
    #20;
    rst_n = 1'b0;
    #20;
    rst_n = 1'b1;
    #1000;
    $stop;
end

N_divider #(.N(N)) N_divider_u(
    .clk  (clk  ),
    .rst_n(rst_n),
    
    .clk_out(clk_out)
);


endmodule

三、仿真波形图

fpga分频器,fpga开发,学习

fpga分频器,fpga开发,学习文章来源地址https://www.toymoban.com/news/detail-751683.html

到了这里,关于FPGA学习——实现任意倍分频器(奇数/偶数倍分频器均可实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • FPGA学习日记——verilog实现分频器

    主要思想是利用计数器实现分频器功能,其中按原理不同可分为分频和降频 一、先说分频。 1、第一种实现方式 输入信号为系统时钟50MHz,本例子先以偶数倍六分频为例实现分频的第一种方式:计数器对系统时钟的上升沿进行计数,最大计数M=5,即count取值范围为0~5,当计数

    2024年02月04日
    浏览(44)
  • 4种FPGA时钟分频 【附源码】:1.偶数分频;2.奇数分频(占空比50%);3.奇数分频(任意无占空比);4.小数分频;

    题目来源于牛客网,完整工程源码:https://github.com/ningbo99128/verilog 目录 VL37 偶数分频 VL40 奇数分频(占空比50%) VL42 奇数分频(任意无占空比) VL41 任意小数分频(较难) 题目介绍 请使用D触发器设计一个同时输出2/4/8分频的50%占空比的时钟分频器;注意rst为低电平复位。

    2024年01月17日
    浏览(39)
  • 偶数分频器电路设计

    目录 偶数分频器电路设计 1、偶数分频器电路简介 2、实验任务 3、程序设计 方法1: 3.1、8分频电路代码如下: 3.2、仿真验证 3.2.1、编写 TB 文件 3.2.2、仿真验证 方法2: 4、计数器进行分频 4.1、仿真测试        分频器在逻辑设计中一直都担任着很重要的角色,分频器一般包

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

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

    2023年04月23日
    浏览(68)
  • 任意分频器电路设计

    目录 任意分频器电路设计 1、任意偶数分频器电路设计 1.2、实验任务 1.3、程序设计 1.3.1、代码如下: 1.3.2、编写仿真 TB 文件 2、任意奇数分频器电路设计 2.1、实验任务 2.2、程序设计 2.2.1、奇数分频电路代码 2.2.2、编写仿真 TB 文件 2.2.3、仿真验证        偶数分频实现比较

    2024年02月16日
    浏览(34)
  • FPGA——分频器

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

    2024年02月10日
    浏览(42)
  • 【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

    记录时钟分频器的Verilog代码编写,主要掌握分频器设计思路 2、4、8分频设计较为容易: 2分频—设计一个1位的寄存器,当原时钟上升沿时取反即可 代码展示: 4分频与8分频—设计一个两位的计数器,4分频只需在计数器计数到00B或者10B时跳变电平即可,8分频只需在计数器计

    2024年02月11日
    浏览(43)
  • FPGA【Verilog分频器】

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

    2024年02月20日
    浏览(48)
  • FPGA 多路分频器实验

    1 概述         在 FPGA 中,时钟分频是经常用到的。本节课讲解 2 分频、3 分频、4 分频和 8 分频的 Verilog 实现并且学习 generate 语法功能的应。 2 程序设计思路         1)整数倍分频,为 2、4、8,这种 2^n 次方倍数倍数关系的分频最容易实现,所以我们可以把这 3 种分

    2024年01月19日
    浏览(38)
  • FPGA设计开发(基础课题):分频器设计

    一、设计目的 1、掌握分频器的设计原理; 2、用HDL语言设计分频器。 二、设计原理 分频器与计数器类似,也是要对时钟脉冲进行计数,但其输出的不是对时钟脉冲个数的计数值,而是其频率与时钟的频率成固定比例关系的脉冲信号。整数分频是所有分频器中最简单,最容易

    2024年02月13日
    浏览(54)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包