06 分频器设计

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

分频器简介

实现分频一般有两种方法,一种方法是直接使用 PLL 进行分频,比如在 FPGA 或者 ASIC 设计中,都可以直接使用 PLL 进行分频。但是这种分频有时候受限于 PLL 本身的特性,无法得到频率很低的时钟信号,比如输入 100Mhz 时钟,很多PLL 都无法得到 1Mhz 以下的时钟信号。另外一种方法是直接使用 Verilog 代码来实现分频。
注意:
使用 Verilog 代码分频得到的时钟信号尽量不要当做其他模块的输入时钟信号,因为通过 Verilog 代码分频得到的时钟信号默认不会连接到 FPGA 的时钟网络上,这样会导致时钟出现偏移和抖动,在高频电路中会影响电路稳定性,这种分频方式一般用于产生外部低速总线的参考时钟,如SPI、I2C的参考时钟。

偶数分频器和奇数分频器

根据分频器的分频比例是偶数还是奇数,可以将其分为偶数分频器和奇数分频器。

  • 偶数分频:就是分频前的频率和分频后的频率比值是偶数,比如一个 50Mhz 的晶振时钟,进行二分频后,就是 50Mhz/2=25Mhz
  • 奇数分频:就是分配前的频率和分频后的频率比值是奇数。比如一个 50Mhz 的晶振时钟,进行三分频后,就是 50Mhz/3=16.667Mhz

偶数分频实现

假设 N(N为偶数)分频,只需计数到 N/2-1,然后时钟翻转、计数器清零,如此循环就可以得到 N 分频。举个例子,比如晶振时钟是 100Mhz 时钟,想得到一个 25Mhz 的时钟,那么这个是一个 100/25=4 的四分频设计,按照我们刚说的计数到 4/2-1=1,然后时钟翻转、计数器清零,就可以得到一个 25Mhz 的时钟。
06 分频器设计,FPGA开发入门,fpga开发

偶数分频 Verilog 代码

`timescale 1ns / 1ps

module divider4(
	input sys_clk,
	input sys_rst_n,

	output reg out_clk
);

//分频计数器
reg [2:0] count;

//分频计数器,按分频比/2-1进行计数
always @(posedge sys_clk) begin
	if(!sys_rst_n)
		count <= 2'd0;
	else if(count < 2'd1)
		count <= count + 2'd1;
	else
		count <= 2'd0;
end

//翻转输出时钟
always @(posedge sys_clk) begin
	if(!sys_rst_n)
		out_clk<= 1'b0;
	else if(count == 2'd1)
		out_clk <= ~out_clk;
end

endmodule

奇数分频器实现

同样假设 N(N为奇数)分频,计数器需要计数到 N-1,当计数器为0时输出时钟1在输入时钟的上升沿拉低,当计数器计数到 N/2 取整时输出时钟1在输入时钟的上升沿进行拉高,同时当计数器为0时输出时钟2在输入时钟的下降沿拉低,当计数器计数到 N/2 取整时输出时钟2在输入时钟的下降沿进行拉高,将输出时钟1和输出时钟2相与即可得到真正的输出时钟。
06 分频器设计,FPGA开发入门,fpga开发

奇数分频 Verilog 代码

`timescale 1ns / 1ps

module divider5(
	input sys_clk,
	input sys_rst_n,

	output out_clk
);

//分频计数器
reg [2:0] count;
//上升沿跳变的中间时钟
reg out_clk1;
//下降沿跳变的中间时钟
reg out_clk2;

//分频计数器,按分频比-1进行计数
always @(posedge sys_clk) begin
	if(!sys_rst_n)
		count <= 3'd0;
	else if(count < 3'd4)
		count <= count + 3'd1;
	else
		count <= 3'd0;
end

//输出时钟1
always @(posedge sys_clk) begin
	if(!sys_rst_n)
		out_clk1 <= 1'b0;
	else if(count == 3'd0)
		out_clk1 <= 1'b0;
	else if(count == 3'd2)
		out_clk1 <= 1'b1;
end

//输出时钟2
always @(negedge sys_clk) begin
	if(!sys_rst_n)
		out_clk2 <= 1'b0;
	else if(count == 3'd0)
		out_clk2 <= 1'b0;
	else if(count == 3'd2)
		out_clk2 <= 1'b1;
end

//输出分频后的时钟
assign out_clk = out_clk1 & out_clk2;

endmodule

任意分频器实现

在实现任意分频器时可以利用条件生成语句,当模块例化时传入的参数为偶数则生成偶数分频的代码,否则生成奇数分频的代码,有关生成语句相关的内容参考03 Verilog HDL 语法。文章来源地址https://www.toymoban.com/news/detail-825175.html

任意分频 Verilog 代码

`timescale 1ns / 1ps

module divider #(
	//参数列表
	parameter COUNT_WIDTH = 3,				//内部分频计数器宽度
	parameter DIV = 5						//分频系数
)
(
	input sys_clk,
	input sys_rst_n,

	output reg out_clk
);

//分频计数器
reg [COUNT_WIDTH-1:0] count;

generate
	if((DIV % 2) == 0) begin
	//偶数分频
		//按分频比/2-1进行计数
		always @(posedge sys_clk) begin
			if(!sys_rst_n)
				count <= 0;
			else if(count < (DIV / 2 -1))
				count <= count + 1;
			else
				count <= 0;
		end
		
		//翻转输出时钟
		always @(posedge sys_clk) begin
			if(!sys_rst_n)
				out_clk <= 1'b0;
			else if(count == (DIV / 2 -1))
				out_clk <= ~out_clk;
		end
	end
	else begin
	//奇数分频
		//上升沿跳变的中间时钟
		reg out_clk1;
		//下降沿跳变的中间时钟
		reg out_clk2;
		
		//按分频比-1进行计数
		always @(posedge sys_clk) begin
			if(!sys_rst_n)
				count <= 0;
			else if(count < (DIV -1))
				count <= count + 1;
			else
				count <= 0;
		end
		
		//输出时钟1
		always @(posedge sys_clk) begin
			if(!sys_rst_n)
				out_clk1 <= 1'b0;
			else if(count == 0)
				out_clk1 <= 1'b0;
			else if(count == (DIV / 2))
				out_clk1 <= 1'b1;
		end
		
		//输出时钟2
		always @(negedge sys_clk) begin
			if(!sys_rst_n)
				out_clk2 <= 1'b0;
			else if(count == 0)
				out_clk2 <= 1'b0;
			else if(count == (DIV / 2))
				out_clk2 <= 1'b1;
		end
		
		//输出分频后的时钟
		always @(*) begin
			out_clk = out_clk1 & out_clk2;
		end
	end
endgenerate

endmodule

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

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

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

相关文章

  • FPGA【Verilog分频器】

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

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

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

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

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

    2024年02月05日
    浏览(28)
  • 【FPGA & Verilog】奇数分频器 (50%)

    2.1 设计输⼊ 1. 模块名称:FrequencyDivider 2. 输⼊输出:CLK、RSTn、CLK_15 2.2 引脚约束 1. 输⼊端 ⾃定义 2. 输出端 ⾃定义 2.3 设计要求 1. 输出时钟的周期是输⼊时钟的15倍(15分频器) 2. 分别实现 7/15 占空⽐和 50% 占空⽐两种分频⽅式 3. 使⽤RTL View分析电路的区别 2.4 电路仿真1.

    2024年02月03日
    浏览(27)
  • FPGA学习日记——verilog实现分频器

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

    2024年02月04日
    浏览(31)
  • 实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)

    1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法; (2) 掌握元件封装及调用方法; (3) 熟悉FPGA实验平台,掌握引脚锁定及下载。 2. 实验任务: (1) 基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。 (2) 拓展任务1:用按键或开关

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

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

    2024年02月04日
    浏览(25)
  • 任意分频器电路设计

    目录 任意分频器电路设计 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日
    浏览(21)
  • 偶数分频器电路设计

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

    2024年02月09日
    浏览(30)
  • 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|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日
    浏览(36)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包