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

2023-11-08

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)
begin
     if(!rst_i)
	     div_2_o<=1'b0;
     else
	     div_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)
begin
     if(!rst_i)
	     div_reg_4_8<=2'b00;
     else
	     div_reg_4_8<=div_reg_4_8+1'b01;
end


always@(posedge clk_i)
begin
     if(!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;
     else
	     div_4_o<=div_4_o;
end
		 
always@(posedge clk_i)
begin
     if(!rst_i)
         div_8_o<=1'b0;
     else if(div_reg_4_8==2'b00)
         div_8_o<=~div_8_o;	 
	 else
	     div_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)
begin
     if(!rst_i)
	     pos_cnt<=2'b00;
     else if(pos_cnt==2'd2)
	     pos_cnt<=2'b00;
     else
	     pos_cnt<=pos_cnt+1'b1;
end

always@(negedge clk_i)
begin
     if(!rst_i)
	     neg_cnt<=2'b00;
     else if(neg_cnt==2'd2)
	     neg_cnt<=2'b00;
     else
	     neg_cntt<=neg_cnt+1'b1;
end

always@(posedge clk_i)
begin
     if(!rst_i)
	     div_3_r0<=1'b0;
     else if(pos_cnt<2'b1)
	     div_3_r0<=1'b1;
	 else 
	     div_3_r0<=1'b0;
end

always@(negedge clk_i)
begin
     if(!rst_i)
	     div_3_r1<=1'b0;
     else if(neg_cnt<2'b1)
	     div_3_r1<=1'b1;
	 else 
	     div_3_r1<=1'b0;
end

assign 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; 
end

always #5 clk_i=~clk_i;


endmodule

仿真结果如下:
100ns时复位为0,开始工作
在这里插入图片描述
仿真结果符合预期,实现了2、3、4、8分频
在这里插入图片描述

3结语

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 熵,信息熵,香农熵,微分熵,交叉熵,相对熵

    2019 07 13 https blog csdn net landstream article details 82383503 https blog csdn net pipisorry article details 5169528
  • Java 实现二分法查找

    二分法 public class BinarySearch public static void main String args int array 1 5 8 11 19 22 31 35 40 45 48 49 50 int targ
  • Java面向对象,你真的会用吗?

    就在今天 自己写的一个C 项目 同事说用面向对象的思想写比较好 其实面向对象思想 感觉这个东西谁不知道啊 但是 确实这个程序没有使用 使用的好处是什么呢 又要如何使用呢 这是很值得思考的问题 面向对象简称OO Object Oriented
  • OpenWrt的学习和总结

    OpenWrt的学习和总结 内容目录 1OpenWrt背景知识 2 2OpenWrt 基础知识 2 2 1目录结构 2 2 2扩展软件包feeds 3 2 3OpenWrt SDK 4 2 4固件升级 8 3OpenWrt内部机制 8 3
  • c++涉及继承和虚继承时的内存布局

    原文地址 c 涉及继承和虚继承时的内存布局 作者 风箫夜吟 今天是清明节假期的第二天 天气阴沉 无心于游玩 遂决定宅于实验室 现在来说每天拜读一下大牛的博客已成生活中不可或缺之乐趣 但是俗话说的好 光说不练假把式 今天拜读了浩哥的博客 感触

随机推荐

  • java中filereader使用

    package dadeo import java io FileNotFoundException import java io FileReader import java io FileWriter import java io IO
  • jmeter压测监控服务器

    安装步骤可参考 Windows https www cnblogs com zjn 20161215 p 8652623 html Linux https blog csdn net liuqiuxiu article details 10
  • springboot集成zipkin

    1 下载zipkin 的jar 后台启动 比如127 0 0 1 9411 2 所有的springboot项目 pom xml添加依赖
  • 笔记——输出信息

    Input sensor was set to Monocular Loading ORB Vocabulary This could take a while Vocabulary loaded Camera Parameters fx
  • SpringBoot启动时忽略某些自动配置类

    SpringBoot启动时忽略某些自动配置类 最近业务要求对接数据 需要连接第三方的数据库 但是他们的都是内网 只能通过前置机上部署我们的项目 由于 我们与第三方对接的处理都写在单独的服务里 如果来一个第三方 单独再写一个服务会很麻烦 不好
  • OpenGL 学习笔记(四) 基础纹理

    一 载入纹理 1 从磁盘中载入Targa 文件 GLbyte gltReadTGABits const szFileName GLint iWidth GLint iHeight GLint iComponents GLenum eForm
  • 实测—fft IP核使用(包括ifft的配置使用)

    Vivado xilinx fft9 0 使用笔记 注 仿真实测1024点的转换需要经过1148个时钟周期才能得到转换结果 模块配置信号含义请参考pg109文档手册 写的贼烂会看晕 不详细说明 一 查找fft IP核按如下几图配置可实现正确
  • Model checking Part I

    Model Checking 文章目录 Model Checking 序言 可靠系统开发过程中的主要挑战 设计验证问题 design validation 现有实践方法 模拟和测试 simulation and tesing 本书主题 取代
  • 想去BAT、美团、京东和字节面试?那你必须懂他们的面试套路!

    V xin ruyuanhadeng获得600 页原创精品文章汇总PDF 目录 面试官为啥要出这样一个开放式问题 生产消费模型及核心数据结构 支撑TB级数据写入的分布式架构 数据宕机场景下的高可用架构 支持数据不丢失的ack机制 最后的总结
  • 加密算法md5、AES、RSA、Base64的区别

    1 md5 不可逆的 即只能加密不能解密 只能加密字符串 var md5 require utils md5 js var sign md5 这是我要加密的内容 2 AES 与MD5类似 主要区别可逆 能加密也能解密 加密解密用同一把钥匙
  • ES模块化语法

    封装一个工具js文件 一 单个导出 定义utils js 方式 一 export function set console log set export function get console log get 方式 二 function
  • 双向BiGRU做多输入单输出预测模型,直接替换数据就可以用

    双向BiGRU做多输入单输出预测模型 直接替换数据就可以用 程序语言是matlab 需求最低版本为2020及以上 程序可以出真实值和预测值对比图 线性拟合图 可打印多种评价指标 PS 以下效果图为测试数据的效果图 主要目的是为了显示程序运行
  • Linking CXX shared library .....so FAILED

    Executing tasks clean smartcropperlib assembleDebug app assembleDebug clean UP TO DATE app clean smartcropperlib externa
  • 3ds Max 2019 Essential Training 3ds Max 2019基本培训 Lynda课程中文字幕

    3ds Max 2019 Essential Training 中文字幕 3ds Max 2019基本培训 中文字幕3ds Max 2019 Essential Training 3ds Max以其建模和渲染工具而闻名 这些优势在建筑 制造
  • 生成msf常用payload

    msf作为一款强大的漏洞检测工具 如何生成适用于msf的payload以及如何利用是使用msf的关键 今天就主要记录一下常用的payload以及如何使用 生成payload使用的工具是MSFVenom 下面看看他的帮助信息 在kali下可以
  • JAVA 8函数式编程(一) 高阶函数

    首先给大家分享一个巨牛巨牛的人工智能教程 是我无意中发现的 教程不仅零基础 通俗易懂 而且非常风趣幽默 还时不时有内涵段子 像看小说一样 哈哈 我正在学习中 觉得太牛了 所以分享给大家 点这里可以跳转到教程 函数式编程的核心在高阶函数与偏函
  • ​行业竞争格局已显,上市公司布局加速丨2021中国区块链产业发展报告

    目前 区块链作为数字经济革命中的重要支撑 正以新一代信息基础设施的姿态快速发展并渗透到我国经济的各个领域 对我国经济社会发展的支撑作用初步显现 但同时 我国区块链也面临核心技术亟待突破 融合应用尚不成熟 产业生态有待完善 监管治理仍待探索等
  • 一个非常完整的测试实习面试过程

    首先是投简历 我这次面试是在实习seng投的 有一点要注意 简历是为了拿到面试 可以稍加修饰 但切忽作假 这相当于给面试的你挖坑 我面试的公司首先是要进行在线笔试 有些公司有 有些公司没有 富途 下面是一些题目 我尽量把有印象的都写出来了
  • 微信小程序-图片宽高设置

    微信小程序中 有很做组件都是有默认宽高的 比如 image组件默认宽度320px 度240px 这些默认设置常常会对我们的页面布局造成影响
  • 【实验室学习】时钟分频器,2、3、4、8分频 verilog实现

    0引言 记录时钟分频器的Verilog代码编写 主要掌握分频器设计思路 1设计 2 3 4 8分频 2 4 8分频设计较为容易 2分频 设计一个1位的寄存器 当原时钟上升沿时取反即可 代码展示 timescale 1ns 1ps modul