前言

学习说明此文档为本人的学习笔记,注重实践,关于理论部分会给出相应的学习链接。

学习视频:是根据野火FPGA视频教程——第十四讲
https://www.bilibili.com/video/BV1nQ4y1Z7zN?p=3

理论学习

时钟是数字电路中的基本单元,通常一个板子上只有一个经侦,即只有一种频率的时钟。因此在用到不同时钟时就需要进行分频(时钟频率更慢),倍频(时钟频率更快)。

有两种方式可以选择:一种时锁相环(PLL);另一种时自己动手Verilog代码描述

在Verilog代码描述形成的分频电路,即分频器。所谓“分频”,就是把输入信号的频率变成倍数地低于输入频率的输出信号。分频可以通过计数器来实现,如十进制计数器就是十分频。

实战演练一 偶分频

一、设计规划

1.1 实验目标

设计对系统时钟进行6分频

1.2 硬件资源

这里使用的是野火升腾mini开发板 A7 35T,拓展IO口K21进行时钟输出。

二、程序设计

2.1 模块框图及波形图

以上虽然产生了占空比50%的6分频的时钟,但是在高速电路中会有问题:

在 FPGA 中凡是时钟信号都要连接到全局时钟网络上,全局时钟网络也称为全局时钟树,是 FPGA 厂商专为时钟路径而特殊设计的,它能够使时钟信号到达每个寄存器的时间都尽可能相同,以保证更低的时钟偏斜(Skew)和抖动(Jitter)。而我们用这种分频的方式产生的 clk_out 信号并没有连接到全局时钟网络上,但 sys_clk 则是由外部晶振直接通过管脚连接到了 FPGA 的专用时钟管脚上,自然就会连接到全局时钟网络上,所以在 sys_clk 时钟工作下的信号要比在 clk_out 时钟工作下的信号更容易在高速系统中保持稳定。

为解决以上问题:标志位1/6占空比的6分频器

这里使用flge标志信号,用于标记6分频的clk_flge标志信号,每两个clk_flge脉冲之间的频率就是对sys_clk时钟信号的6分频,相应的技术器也应增加。

2.2 代码编写

//50%占空比分频方式

//使用方式:遇到clk_out的上升沿a+1;
    //问题:由于clk_out的上升沿并不是系统时钟,并未链接到时钟树上,导致高速电路中有问题
    //解决:不使用上升沿作为时钟变化的判断,通过电平方式

module divider_six(input  wire  sys_clk,input  wire  sys_rst_n,output reg   clk_flag);parameter COUNT_MAX = 3'd4;reg [1:0] count;    //计数寄存器变量reg a;always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)count <= 0;else if(count == COUNT_MAX)count <= 1'b0;else count <= count + 1;
/* //分频方法实现——50%占空比,  COUNT_MAX = 2'd2;进行一次翻转   always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)clk_out <= 1'b0;else if(count == COUNT_MAX)clk_out <= ~clk_out;else    clk_out <= clk_out;//使用方式:遇到clk_out的上升沿a+1;//问题:由于clk_out的上升沿并不是系统时钟,并未链接到时钟树上,导致高速电路中有问题//解决:不使用上升沿作为时钟变化的判断,通过电平方式always @(posedge clk_out or negedge sys_rst_n)if(sys_rst_n == 1'b0)a <= 1'b0;else a <= a + 1'b1; */
//降频方法实现——1/6占空比,  COUNT_MAX = 3'd4;在4-5期间保持一时钟周期的高电平always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)clk_flag <= 0;else if(count == COUNT_MAX)clk_flag <= 1'b1;else clk_flag <= 1'b0;
/*     //使用方式:遇到clk_flag的高电平;//将clk_flag的电平作为触发条件,clk_flag具有系统时钟相同的性质,电平变化条件依然是sys_clkalways @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)a <= 1'b0;else if(clk_flag)a <= a+1'b0; */
endmodule

RTL视图:与计数器相同

降频方式

三、逻辑仿真

3.1 仿真文件的编写

`timescale 1ns / 1ns
///
// Company: 追逐者——桥的小作坊
// Create Date: 2022/05/08 10:02:20
// Design Name: 分频器——偶分频(6分频)
// Module Name: tb_divider_six
/
module tb_divider_six();reg  SYS_CLK  ;reg  SYS_RST_N; wire CLK_OUT  ;
//变量初始化initial beginSYS_CLK = 1'b0;SYS_RST_N <= 1'b0;#20    SYS_RST_N <= 1'b1;endalways #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

3.2 仿真波形图对比

由上图可以看出在,达到了6分频的效果,和绘制的波形图相同。

实战演练二 奇分频

一、设计规划

1.1 实验目标

设计对系统时钟进行5分频的奇分频。

1.2 硬件资源

这里使用的是野火升腾mini开发板 A7 35T,拓展IO口K21进行时钟输出。

二、程序设计

2.1 模块框图及波形图

2.2 代码编写

module divider_five(input wire sys_clk ,input wire sys_rst_n ,output wire clk_out);reg [2:0] cnt;reg clk1, clk2;always @(posedge sys_clk or negedge sys_rst_n)if(sys_clk == 1'b0)cnt <= 3'd0;else if(cnt == 3'd4)cnt <= 3'd0;else cnt <= cnt + 3'd1;always @(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)clk1 <= 1'b0;else if(cnt == 3'd2)clk1 <= 1'b1;else if(cnt == 3'd4)clk1 <= 1'b0;else clk1 <= clk1;always @(negedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)clk2 <= 1'b0;else if(cnt == 3'd2)clk2 <= 1'b1;else if(cnt == 3'd4)clk2 <= 1'b0;else clk2 <= clk2;
//使用组合逻辑电路进行赋值,这样时钟就不会延长一个周期            assign clk_out = (clk1 | clk2);
endmodule

RTL视图

三、逻辑仿真

3.1 仿真文件的编写

`timescale 1ns / 1ns
///
// Company: 追逐者——桥的小作坊
// Create Date: 2022/05/08 10:02:20
// Design Name: 分频器——奇分频(5分频)
// Module Name: tb_divider_five
/
module tb_divider_five();reg  SYS_CLK  ;reg  SYS_RST_N; wire CLK_OUT  ;
//变量初始化initial beginSYS_CLK = 1'b0;SYS_RST_N <= 1'b0;#20    SYS_RST_N <= 1'b1;endalways #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

3.2 仿真波形图对比

四、上板验证

4.1 管脚绑定

二、12【FPGA】分频器 —— 奇偶分频相关推荐

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

    实验二 基于FPGA的分频器的设计 1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法: (2) 掌握元件封装及调用方法: (3) 熟悉FPGA实验平台,掌握引脚锁定及下载. 2. 实 ...

  2. FPGA:偶分频、奇分频

    前言 奇偶分频又是一个面试常考问题 正文 怎么理解分频呢,日常生活中,要分什么东西,一般是从较多的地方分的,比如分蛋糕,就是把一整个蛋糕分成小份,从大蛋糕分到小蛋糕.同理这里的分频也就是从频率快的时钟 ...

  3. 【FPGA入门教程】(二)FPGA学习路线及开发流程

    一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -> 时序分析 -> 片上系统 1.工具使用 Altera:Quart ...

  4. 【Verilog基础】分频器(分频(频率变小,周期变大)、倍频(频率变大,周期变小)、体会降频方法)

    文章目录 一.分频器要点总结 二.偶数分频器 三.奇数分频器 一.分频器要点总结 1.为啥要有分频.倍频? (1)时钟通常由板载晶振或**PLL(锁相环)**产生 (2)板载晶振提供的时钟信号频率固定 ...

  5. verilog奇偶分频详解

    文章目录 偶分频 2分频 2N分频 奇分频 3分频高电平 3分频低电平 一般结果推导 奇偶分频是一个很常见的问题,这里探讨的分频都是对于占空比为50%的信号分频,分频后的信号也是50%占空比.分频原信 ...

  6. 一看就会的奇偶分频电路

    目录 前言 题目 二分频电路 第一步:画波形图 第二步:写状态机 三分频电路--1/3占空比 第一步:画波形图 第二步:写状态机 三分频电路--1/2占空比 第一步:画波形图 第二步:写状态机 4/5 ...

  7. FPGA学习笔记——分频电路设计

    FPGA学习笔记--分频电路设计 发布时间:2015-10-3023:29:52 分频就是用一个时钟信号通过一定的电路结构变成不同频率的时钟信号,这里介绍一下整数分频电路的设计方法.整数分频电路有偶数 ...

  8. FPGA中的分频器-偶数分频

    分频器是FPGA常用的一种时序电路,在各种的小项目中应用的尤为常见,今天李老湿哦给大家讲讲分频器之偶数分频. 基本原理:**偶数倍分频是最简单的一种分频模式,完全可通过计数器计数实现.如要进行N倍偶数 ...

  9. 【FPGA】Verilog实现奇偶分频

    文章目录 一.奇分频 一.代码部分 二.仿真部分 二.偶分频 一.代码部分 二.仿真部分 三.D触发器二分频 一.代码部分 二.仿真部分 四.总结 一.奇分频 一.代码部分 // 奇分频 module ...

最新文章

  1. AI创业周报:元宇宙时代来临!环球墨非风头正盛,53岁女博士领现象级芯片公司获数亿元融资...
  2. 在红帽中安装oracle,在红帽企业Linux 5.4中安装Oracle Database 10g
  3. 修改oracle的隐藏参数,oracle隐藏参数查看及修改
  4. 将自己数据集转化为lmdb格式
  5. CH - 0802 占卜DIY(简单模拟,水题)
  6. DB2 乱码
  7. Scala-Spark digamma stackoverflow问题
  8. HDU5794 - A Simple Chess
  9. javafx android sdk,JavaFX打包到Android上
  10. python变量输出到文件_使用函数将多个变量写入文件
  11. c语言密文解密程序,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...
  12. ab plc软件_从GuardLogix 和 CIP Safety认识安全PLC控制器
  13. ASP.NET MVC . Controller
  14. python刷课思路_江西干部网络学院-刷课思路
  15. Velodyne VLP16 激光雷达测试
  16. Java代码来实现-经典排序算法
  17. 蓝桥杯单片机学习13——NE555方波发生器频率测量
  18. 短信群发的频率应该是多少
  19. 解决办法:Win10弹出需要管理员权限才能删除文件夹
  20. 无线充电---无线电能传输

热门文章

  1. HTML系统总结(下)
  2. UVM_MAX_QUIT_COUNT
  3. C语言——字符串函数(必收藏)
  4. 3dmax:3dmax三维设计之各种材质参数化设置之贴图九大经典案例(图文教程,建议收藏)
  5. 网络连接之HttpClient,Volley,xUtils
  6. 如何从椭圆度 matlab,如何利用matlab画出如图潮流椭圆
  7. 基于BP神经网络/GRNN神经网络的电力预测matlab仿真
  8. stm32-串口数据收发
  9. python 相关性检验怎么计算p值_机器学习:数据的准备和探索——数据假设检验...
  10. asp.Net文件的上传下载(2) 转