FPGA——分频器

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

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

1.通过计数器来实现6分频。两种方式。第一种直接通过计数方式直接获取获取。输入信号sys_clk和sys_rst_n,输出分频的信号clk_out,还有一个变量计数器cnt。
FPGA——分频器

module      divider_six
(
        input wire      sys_rst,
        input wire      sys_clk,
        
        output reg      clk_out
);
reg     [2:0]   cnt;
always@(posedge sys_clk or negedge sys_rst)
    if(sys_rst == 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)
    if(sys_rst == 1'b0)
    clk_out <= 1'b0;
    else    if(cnt == 2'd2)
    clk_out <= ~clk_out;
    else
    clk_out <= clk_out;

endmodule

    

testbench

`timescale 1ns/1ns
module  tb_divider_six();
        reg       sys_rst;
        reg       sys_clk;
        
        wire       clk_out;
initial
    begin
    sys_clk = 1'b1;
    sys_rst = 1'b0;
    #20
    sys_rst = 1'b1;
    end
always #10 sys_clk = ~sys_clk;


 divider_six  divider_six_inst
(
        .sys_rst(sys_rst),
        .sys_clk(sys_clk),
          
        .clk_out(clk_out)
);
endmodule

modelsim仿真结果
FPGA——分频器

假设工作方式是直接把分频出来的时钟直接当作系统工作时钟

//直接使用clk_out作为工作时钟
always@(posedge clk_out or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		a <= 0;
	else
		a <= a + 1

第二种是通过一个标志信号clk_flag和系统时钟sys_clk来作为一个6分频的工作时钟。

FPGA——分频器

module      divider_six
(
        input wire      sys_rst,
        input wire      sys_clk,
        
        output reg      clk_flag
);
reg     [2:0]   cnt;

always@(posedge sys_clk or negedge sys_rst)
    if(sys_rst == 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)
    if(sys_rst == 1'b0)
		clk_flag <=1'b0;
    else    if(cnt == 3'd4)
		clk_flag <=1'b1;
    else
		clk_flag <=1'b0; 
endmodule

    

这里工作的方式还是在系统的时钟条件下工作的

//工作时钟还是系统时钟 
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		a <= 1'd0;
	else	if(clk_flag == 1'b1)
		a <= a + 1'b1;

这里为什么要说明这两种方式呢?
这里就要说到FPGA中的全局时钟网络,因为在 FPGA 中凡是时钟信号都要连接到全局时钟网络上,全局时钟网络也称为全局时钟树,是 FPGA 厂商专为时钟路径而特殊设计的,它能够使时钟信号到达每个寄存器的时间都尽可能相同,以保证更低的时钟偏斜(Skew)和抖动(Jitter)。然而我们采用第一种方式产生的时钟clk_out信号并没有连接到全局时钟网络上,这种做法所衍生的潜在问题在低速系统中不易察觉,而在高速系统中就很容易出现问题,但 sys_clk 则是由外部晶振直接通过管脚连接到了 FPGA 的专用时钟管脚上,自然就会连接到全局时钟网络上,所以在 sys_clk 时钟工作下的信号要比在 clk_out 时钟工作下的信号更容易在高速系统中保持稳定。所以第二种方式相对来说更加安全。

上述已经说到6分频,属于偶数分频。下面就来介绍奇数分频。奇数分频采用上述第二种方式来实现的话,思路和步骤都差不多。我这里介绍一下奇数分频采用上述的第一种方式。那么问题又来了,既然上述第一种方式没有第二种好,为什么还有讲的,哈哈,是的。我记录他并不是因为他的好,而是因为这里奇数分频时的思路和逻辑思维。这里实现一个5分频。
FPGA——分频器
首先是输入时钟和复位,一个计数器,两个变量分频时钟,一个输出时钟。要实现N奇数分频,计数器计数到N-1,这里5分频最大计数到4。然后变量clk1初始状态为高电平,系统时钟上升沿到来时有效,这里计数到2时拉低,其实这里可以计数到0,1,2,3都是可以的。clk2初始状态也是高电平,系统时钟下降沿到来时有效。这里计数到与clk1计数最大值一致就行,然后clk1与clk2做与运算就可以得到输出5分频时钟clk_out。

RTL代码

module	divider_five
(	
	
	input	wire			sys_clk		,
	input	wire			sys_rst_n	,
	
	output	wire			clk_out
);

reg	[2:0]	cnt;
reg			clk1;
reg			clk2;


always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		cnt <= 3'd0;
	else	if(cnt == 3'd4)
		cnt <= 3'd0;
	else
		cnt <= cnt + 1'b1;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		clk1 <= 1'b1;
	else	if(cnt == 3'd2)
		clk1 <= 1'b0;
	else	if(cnt == 3'd4)
		clk1 <= 1'b1;
	else
		clk1 <= clk1;
		

always@(negedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n == 1'b0)
		clk2 <= 1'b1;
	else	if(cnt == 3'd2)
		clk2 <= 1'b0;
	else	if(cnt == 3'd4)
		clk2 <= 1'b1;
	else
		clk2 <= clk2;


assign  clk_out = clk1 & clk2;

endmodule

testbench

`timescale 1ns/1ns 
module	tb_divider_five();

reg			sys_clk;
reg			sys_rst_n;

wire		clk_out;

initial
	begin
		sys_clk = 1'b1;
		sys_rst_n <= 1'b0;
		#30
		sys_rst_n <= 1'b1;
	end
	
always	#10 sys_clk = ~sys_clk;

divider_five	divider_five_inst
(	
	
	.sys_clk		(sys_clk),
	.sys_rst_n		(sys_rst_n),

	.clk_out        (clk_out)
);
endmodule

modelsim仿真
FPGA——分频器文章来源地址https://www.toymoban.com/news/detail-498430.html

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

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

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

相关文章

  • 【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日
    浏览(34)
  • FPGA设计开发(基础课题):分频器设计

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

    2024年02月13日
    浏览(51)
  • FPGA基础设计(二):任意分频器(奇数,偶数,小数)

    FPGA开发板上一般只有一个晶振,即一种时钟频率。数字系统设计中,时间的计算都要以时钟作为基本单元,对基准时钟进行不同倍数的分频而得到各模块所需时钟频率,可通过Verilog代码实现;倍频可通过锁相环【PLL】实现。 把输入信号的频率变成成倍的低于输入频率的输出

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

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

    2024年02月11日
    浏览(41)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

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

    2024年02月02日
    浏览(58)
  • VHDL学习笔记——半加器 多路选择器 分频器

    VHDL程序结构: 条件语句 if_then_else_end if 数据类型 BIT类型(取逻辑位’1’或’0’)、整数类型INTEGER、布尔类型BOOLEAN(取TRUE或FALSE)、标准逻辑类型STD_LOGIC等 进程语句与顺序语句 process(敏感信号表)_endprocess VHDL中所有的顺序语句都必须放在进程语句中 端口语句 port(端口模式

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

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

    2024年02月06日
    浏览(44)
  • 12-分频器 -偶分频

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

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

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

    2023年04月23日
    浏览(65)
  • verilog---分频器设计

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

    2024年02月04日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包