0引言

记录时钟分频器的Verilog代码编写,主要掌握分频器设计思路

1设计----2、3、4、8分频

2、4、8分频设计较为容易:

2分频—设计一个1位的寄存器,当原时钟上升沿时取反即可
代码展示:

`timescale 1ns / 1ps
module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;);
//2分频代码
reg div_2_o;
always@(posedge clk_i)
beginif(!rst_i)div_2_o<=1'b0;elsediv_2_o<=~div_2_o;
end
assign div_2_out=div_2_o;
endmodule

4分频与8分频—设计一个两位的计数器,4分频只需在计数器计数到00B或者10B时跳变电平即可,8分频只需在计数器计数到00B时跳变电平即可。

原因:计数器跳变一次需要一个时钟周期,00->01->10->11->00 一次循环需要四个clk周期,4分频在两次周期时跳变即可,8分频在四次周期时跳变即可。
代码展示:

//4、8分频代码定义一个两位的寄存器实现
`timescale 1ns / 1ps
module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;);
reg [1:0]div_reg_4_8;
reg div_4_o;
reg div_8_o;always@(posedge clk_i)
beginif(!rst_i)div_reg_4_8<=2'b00;elsediv_reg_4_8<=div_reg_4_8+1'b01;
endalways@(posedge clk_i)
beginif(!rst_i)div_4_o<=1'b0;else if(div_reg_4_8==2'b00||div_reg_4_8==2'b10)div_4_o<=~div_4_o;elsediv_4_o<=div_4_o;
endalways@(posedge clk_i)
beginif(!rst_i)div_8_o<=1'b0;else if(div_reg_4_8==2'b00)div_8_o<=~div_8_o;   elsediv_8_o<=div_8_o;
end
assign div_4_out=div_4_o;
assign div_8_out=div_8_o;
endmodule

3分频较为复杂,需要设计两个计数器,一个计数器在clk下降沿工作,一个计数器在clk上升沿工作。且两个计数器计数三次一循环,而后设计两个寄存器r0与r1,两寄存器分别交错半个周期,高电平与低电平分别占据1.5个clk周期,即可完成3分频。

module Clk_divider
(
input clk_i,
input rst_i,
output div_2_out,
output div_4_out,
output div_3_out,
output div_8_out;);
/*3分频代码定义两个寄存器,分别在clk上升沿和下降沿工作*/reg [1:0]pos_cnt;
reg [1:0]neg_cnt;
reg  div_3_r0;
reg  div_3_r1;always@(posedge clk_i)
beginif(!rst_i)pos_cnt<=2'b00;else if(pos_cnt==2'd2)pos_cnt<=2'b00;elsepos_cnt<=pos_cnt+1'b1;
endalways@(negedge clk_i)
beginif(!rst_i)neg_cnt<=2'b00;else if(neg_cnt==2'd2)neg_cnt<=2'b00;elseneg_cntt<=neg_cnt+1'b1;
endalways@(posedge clk_i)
beginif(!rst_i)div_3_r0<=1'b0;else if(pos_cnt<2'b1)div_3_r0<=1'b1;else div_3_r0<=1'b0;
endalways@(negedge clk_i)
beginif(!rst_i)div_3_r1<=1'b0;else if(neg_cnt<2'b1)div_3_r1<=1'b1;else div_3_r1<=1'b0;
endassign div_3_out = div_3_r0||div_3_r1;
endmodule

2仿真实现

仿真代码如下:

`timescale 1ns / 1ps
module Clk_divider_f
(
);
reg clk_i;
reg rst_i;
wire div_2_out;
wire div_4_out;
wire div_3_out;
wire div_8_out;Clk_divider#
(
.DEBUG_ENABLE(1'b0),
.REF_CLK(100000000)
)
Clk_divider_1
(
.clk_i(clk_i),
.rst_i(rst_i),
.div_2_out(div_2_out),
.div_4_out(div_4_out),
.div_3_out(div_3_out),
.div_8_out(div_8_out)
);
initial begin
clk_i = 0;
rst_i = 0; // Wait 100 ns for global reset to finish
#100;
rst_i=1;
endalways #5 clk_i=~clk_i;endmodule

仿真结果如下:
100ns时复位为0,开始工作

仿真结果符合预期,实现了2、3、4、8分频

3结语

本文主要开始学习Verilog代码,通过编写代码实现FPGA时钟分频。

【实验室学习】时钟分频器,2、3、4、8分频 verilog实现相关推荐

  1. 硬件架构的艺术:时钟分频器

    目录 1. 概述 2. 整数分频器 2.1 偶数分频器 2.1.1 设计原理及结构 2.1.2 代码实现 2.2 奇数分频器 2.2.1 方法一(Mohit Arora) 2.2.1.1 设计原理及结 ...

  2. 8分频verilog线_Verilog设计分频器(面试必看)

    分频器是指使输出信号频率为输入信号频率整数分之一的电子电路.在许多电子设备中如电子钟.频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种 ...

  3. 数字分频器设计(偶数分频、奇数分频、小数分频、半整数分频、状态机分频|verilog代码|Testbench|仿真结果)

    数字分频器设计 一.前言 二.偶数分频 2.1 触发器级联法 2.2 计数器法 2.3 verilog代码 2.4 Testbench 2.5 仿真结果 三.奇数分频 3.1 占空比非50%奇数分频 ...

  4. 来腾讯云开发者实验室 学习.NET Core 2.0

    腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力: 零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果: 在线 WEB IDE 支持 sh ...

  5. 来腾讯云开发者实验室 学习.NET

    腾讯云开发者实验室为开发者提供了一个零门槛的在线实验平台,开发者实验室提供的能力: 零门槛扫码即可免费领取实验机器,支持使用自有机器参与,实验完成后支持保留实验成果: 在线WEBIDE支持shell命 ...

  6. chapter4——时钟分频器

    目录 同步整数分频器 具有50%占空比的奇数整数分频 非整数分频(非50%占空比) 典型情况下SOC要对设计中各种组件提供许多与相位相关的时钟.将主时钟以2为幂次进行分割来产生同步偶数分频时钟,有时也 ...

  7. BurpSuite实战——合天网安实验室学习笔记

    burpsuite是一款功能强大的用于攻击web应用程序的集成平台,通常在服务器和客户端之间充当一个双向代理,用于截获通信过程中的数据包,对于截获到的包可以人为的进行修改和重放. 此BurpSuite ...

  8. 摩尔斯电码和栅栏密码 ——合天网安实验室学习笔记

    实验链接 通过学习本实验理解摩尔斯电码和栅栏密码的编码解码过程:掌握编写摩尔斯电码的编码解码程序和编写多功能栅栏密码的编码解码程序. 链接:http://www.hetianlab.com/expc. ...

  9. 雅特丽单片机学习——时钟配置

    时钟是芯片正确高效运行的基础,正确的时钟配置是芯片能正确运行的必要条件. 本文主要介绍一下AT21F403的时钟配置 1.配置流程: 1.1 CRM Reset :主要是将系统时钟切换到 HICK,其 ...

最新文章

  1. flutter listview 滚动到底部_Flutter常用Widget详解(三)
  2. 关于数据同步,窗口同步之类
  3. python查找输出文字_Python基础练习,查询文本内容并输出;
  4. 把准脉搏 U-Mail邮件系统2014开足马力
  5. webpack 报错 path is not defind
  6. JS中元素的属性(class、style)操作
  7. Springboot内置Tomcat原理
  8. java字符常量_字符常量 java
  9. Google 谷歌创业训练营2021展示日回顾
  10. html5切西瓜游戏,体育游戏切西瓜教案
  11. 智公网:公务员行测基础考点
  12. 互联网电影院新战略5G+民族电影
  13. SQL笔试:Student学生表,Course 课程表,Sc选课表
  14. JAVA-建立TCP的客户端和服务端
  15. 关于接入达达开发者文档的一些问题
  16. Armadillo使用介绍(一):Armadillo介绍
  17. 金蝶K3应付模块后台反结账语句
  18. 前端HTML5开发工具有哪些呢?
  19. LRU(least recently used)算法浅析
  20. 关于调节阀的调试小知识

热门文章

  1. NB-Iot的应用领域、覆盖范围,是什么
  2. VMware虚拟机报错:您无法压缩该虚拟磁盘,因为它是预分配的。
  3. uniapp城市列表_uni-app: 根据定位获取天气(附城市控件)
  4. 【OpenGL学习笔记⑧】——键盘控制正方体+光源【冯氏光照模型 光照原理 环境光照+漫反射光照+镜面光照】
  5. python 三个内置装饰器,python中自带的三个装饰器
  6. PDOException::(“SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long;
  7. 路由表、静态路由、RIP
  8. LaTeX竖立公式符号
  9. 超详细教程-Django使用邮箱发送验证码
  10. WIN7 开启PAE突破4G内存使用限制