常用电路设计之分频器的设计

2023-10-27

引言

     分频器在实际数字电路设计中是最基础的,也是最重要的。常见的分频器主要有偶数倍分频器,奇数倍分频器,半整数倍分频器,任意小数倍分频器等。本文主要对最常用的偶数倍分频器和奇数倍分频器展开介绍。

1、偶数倍分频器

      偶数倍分频器通过计数器可以很简单的实现。基本原理就是如果要进行N倍偶数分频,那么就可以利用待分频的时钟触发计数器,当计数器从0计数到N/2-1的时候,输出时钟翻转一次,并复位计数器,这样循环往复,就可以得到N倍偶数分频,如下图所示就是一个标准的4分频时序图。

2、奇数倍分频器

      奇数倍分频器通过计数器也很容易实现。 对于占空比为非50%的奇数倍分频而言,如果要实现N倍奇数分频,那么就可以利用待分频时钟上升沿触发计数器进行模N计数,计数到到某个值进行时钟翻转,然后再经过(N-1)/2个计数值再进行翻转,如下图所示为一个标准的5倍占空比非50%分频器时序图。

       如果要实现占空比为50%的奇数倍分频,就需要用待分频时钟的下降沿去触发计数器,其他原理一样,然后将两个时钟相或即可,如下图所示为一个标准的5倍占空比50%分频器的时序图。

 3、Verilog代码分享

       顶层文件:

module fre_div (
	//system signals
	input				clk				, 
	input				rst_n				,
	//
	output		reg     fre_div_4			,	
	output      reg     fre_div_5_1         ,
    output      reg     fre_div_5_2         ,
    output      fre_div_5_3         
);
reg 			[0:0]		count_4			;
reg 			[2:0]		count_5_1		;
reg 			[2:0]		count_5_2		;
always @(posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		// reset
		count_4 <= 1'd0;
	end
	else begin
		if (count_4 == 1'd1) 
			count_4 <= 1'd0;
		else 
			count_4 <= count_4 + 1'b1;
	end
end
always @(posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		// reset
		fre_div_4 <= 1'b0;
	end
	else if(count_4 == 1'd1) 
			fre_div_4 <= ~fre_div_4;
		 else
		 	fre_div_4 <= fre_div_4;
end

always @ (posedge clk or negedge rst_n) begin
	if(!rst_n)
		count_5_1 <= 3'd0;
	else begin
		if (count_5_1 == 3'd4) 
			count_5_1 <= 3'd0;
		else 
			count_5_1 <= count_5_1 + 1'b1;
	end    
end
always @ (posedge clk or negedge rst_n) begin
	if(!rst_n)
		fre_div_5_1 <= 1'b0;
	else begin
		if (count_5_1 == 3'd1) 
			fre_div_5_1 <= ~fre_div_5_1;
		else if (count_5_1 == 3'd3) 
		    	fre_div_5_1 <= ~fre_div_5_1;
			else 
		   		fre_div_5_1 <= fre_div_5_1;
	end	
end
always @ (negedge clk or negedge rst_n) begin
	if(!rst_n)
		count_5_2 <= 3'd0;
	else begin
		if (count_5_2 == 3'd4) 
			count_5_2 <= 3'd0;
		else 
			count_5_2 <= count_5_2 + 1'b1;
	end    
end
always @ (negedge clk or negedge rst_n) begin
	if(!rst_n)
		fre_div_5_2 <= 1'b0;
	else begin
		if (count_5_2 == 3'd1) 
			fre_div_5_2 <= ~fre_div_5_2;
		else if (count_5_2 == 3'd3) 
		    	fre_div_5_2 <= ~fre_div_5_2;
			else 
		   		fre_div_5_2 <= fre_div_5_2;
	end	 
end
assign fre_div_5_3 = fre_div_5_1|fre_div_5_2;
endmodule

           测试文件:

`timescale 1ns/1ps
module tb ();
 
reg clk;
reg rst_n;
wire fre_div_4;
wire fre_div_5_1;
wire fre_div_5_2;
wire fre_div_5_3;
initial
begin
	clk = 1'b1;
	rst_n = 1'b1;
	#5 rst_n = 1'b0;
	#5 rst_n = 1'b1;
end
always #5 clk = ~clk;
fre_div demo(
	//system signals
	.clk(clk), 
	.rst_n(rst_n),
	.fre_div_4(fre_div_4),
	.fre_div_5_1(fre_div_5_1),
	.fre_div_5_2(fre_div_5_2),
	.fre_div_5_3(fre_div_5_3)
);
endmodule

          完整仿真结果:

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

常用电路设计之分频器的设计 的相关文章

  • 如何在 Verilog 中将长语句分成行

    例如 我有一个很长的声明 display input data x output data x result x input data output data result 如何在 Verilog 中将其变成单语句和多行 您需要分解引用的字
  • |变量在verilog中是什么意思?

    我想知道什么assign hd trs detected hd trs match Verilog 中的意思 我最感兴趣的是 hd trs match部分 我知道 表示按位或 但不确定如何解释它之前没有值 它是可理解的 1 还是 0 如果它
  • 如何在 verilog 中不使用 while() 循环(用于综合)?

    我已经养成了开发大量测试平台并使用 for 和 while 循环进行测试的习惯 没关系 问题是我已经将这种习惯用于对应该可综合的电路进行编码 XST等拒绝合成代码 无需对合成参数进行额外修改 例如 while num lt test num
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • 使用数据流模型的T触发器

    我正在尝试模拟 t flipflop 的工作 timescale 1ns 1ps module t flipflop input t input clk input clear output q output qbar wire sbar
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • 信号连接到以下多个驱动器

    我尝试运行以下命令并收到此错误 这是 Verilog 代码 module needle input referrence input penalty output index 7 0 inout input itemsets input r
  • Verilog 最佳实践 - 递增变量

    我绝不是 Verilog 专家 我想知道是否有人知道这些增加值的方法中哪一种更好 抱歉 如果这个问题太简单了 Way A 在组合逻辑块中 可能在状态机中 some condition count next count 1 然后在一个连续块中
  • Verilog 错误:必须连接到结构网络表达式

    我收到错误 output or inout port Qout must be connected to a structural net expression 我评论了下面代码中发生错误的行 代码被修剪 压缩 我搜索了答案 似乎我无法将输
  • if 语句导致 Verilog 中的锁存推断?

    我正在编写用于合成算法的 Verilog 代码 我对哪些情况可能导致推断锁存器有点困惑 下面是这样的一段代码 虽然它在模拟中工作得很好 但我担心它可能会导致硬件问题 always b1 or b2 b1 map b2 map m1 map
  • verilog $readmemh 对于 50x50 像素 RGB 图像花费太多时间

    我正在尝试编译用于 FPGA 编程的 verilog 代码 我将在其中实现 VGA 应用程序 我使用 QuartusII 和 Altera 我正在尝试正确使用 readmemh 来逐像素获取图片 现在 我已经使用 matlab 将图片转换为
  • 我们可以在 C 或 SystemVerilog 中使用 ifdef MACROS 中的条件吗?

    我想要那样的东西 ifdef N O gt N I define GREATER 1 else define LESSER 1 endif 但做不到 有什么解决方案或阅读吗 我很努力地想要做到这一点 但是却做不到 Verilog 不提供这样
  • 始终块中的 Veriloggenerate/genvar

    我试图让一个模块通过 ISE 12 4 中的语法检查 但它给了我一个我不明白的错误 首先是代码片段 parameter ROWBITS 4 reg ROWBITS 1 0 temp genvar c generate always pose
  • 在 Verilog 中判断总线是否包含单个 x 的最佳方法是什么?

    我有一个监控总线的测试台 总线内的一些信号 位 可以是 1 bx 由于多种原因 我需要知道总线内是否有任何信号是 1 bx 如果总线包含任何 x 测试 不用于综合 仅用于模拟目的 的最佳方法是什么 我曾希望我可以使用减少或然后使用 但这似乎
  • 在 Verilog 设计中产生时钟故障

    我正在使用 Verilog 设计芯片 我有一个 3 位计数器 我希望当计数器处于第 8 次循环时 应该有一个时钟故障 之后就可以正常工作了 在 Verilog 设计中产生时钟故障的可能方法是什么 在时钟信号上注入毛刺的一种方法是使用forc
  • Verilog 中的 If 语句和分配连线

    我试图弄清楚基于组合逻辑分配电线的基础知识 I have wire val wire x wire a wire b always begin if val 00 I want to assign x a if val 01 I want
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 我怎样才能让我的verilog移位器更通用?

    这里我有一个移位器 但现在它最多只能工作 3 位 我一直在寻找 但不知道如何让它工作最多 8 位 module shifter a b out input 7 0 a b output 7 0 out wire 7 0 out1 out2
  • Verilog 双向握手示例

    我正在完成一个项目 要求是处理器内部功能单元之间的双向握手 我知道它是什么 但是有没有任何 标准 或一个简单的例子 我唯一能想到的就是两个单元之间 当它们之间有一条数据线并且当 X 发送到 Y 时 会给出一个单独的 发送 信号 当 Y 接收
  • Verilog:如何取绝对值

    在 verilog 中 我有一个二进制值数组 如何取减去值的绝对值 Verilog代码 module aaa clk input clk reg 7 0 a 1 9 reg 7 0 s 1 9 always posedge clk begi

随机推荐

  • 渗透测试技术----常见web漏洞--命令执行原理及防御

    一 命令执行漏洞介绍 1 命令执行漏洞简介 命令执行漏洞时指服务器没有对执行的命令进行过滤 用户可以随意执行系统命令 命令执行漏洞属于高危漏洞之一 也属于代码执行的范围内 2 命令执行漏洞的原理 应用程序有时需要调用一些执行系统命令的函数
  • 嵌入式AI助力当代商业的发展

    数字化转型的业务影响是广泛的 但购买者应寻求嵌入式AI在以下领域具有最大的影响力 1 业务流程和任务的自动化 当买家搜索购买包含AI的软件时 他们应该研究该解决方案为员工自动执行日常任务的方式 嵌入式AI应该节省员工的时间和精力 以便他们可
  • 华为文稿演示服务器操作异常修复,修复服务器

    修复服务器 内容精选 换一换 安装Agent插件后 修复插件配置为用户提供了一键配置AK SK RegionID ProjectId的功能 省去了繁琐的手动配置步骤 提升配置效率 目前大部分区域已上线一键式授予该区域插件权限功能 即自动修复
  • java编码 第一次

    这是java的快速入门 演示java的开发步骤 对代码的相关说明 1 public class Hello 表示Hello是一个类 是一个public公有的类 2 Hello 表示一个类的开始和结束 3 public static void
  • java循环while之等差数列均值_java基础_while 循环语句的定义及用法

    一 while 循环语句的定义 在 C 语言中 while 循环是除了 for 循环外最常用的循环语句 相对于 for 循环而言 while 循环更多地应用于循环次数未定的循环控制中 while 循环的一般表达形式为 while 表达式 循
  • 色温

    色温是表示光线中包含颜色成分的一个计量单位 从理论上说 黑体温度指绝对黑体从绝对零度 273 开始加温后所呈现的颜色 黑体在受热后 逐渐由黑变红 转黄 发白 最后发出蓝色光 当加热到一定的温度 黑体发出的光所含的光谱成分 就称为这一温度下的
  • 线程池OOM错误

    1 LinkedBlockingQueue报错 package com spring pro threadpool completableFuture youhua test import java util concurrent Exec
  • 【场景】大数据常考场景题 - Bitmap

    大数据开发面试通常会问场景题 主要考察大数据中常用的数据结构 比如 Bitmap Bloom Filter 等等 今天就说一个工作中碰到的 比如昨天说到的问题 用户要在自定义时间区间内查询 就需要快速响应 可能用到 ClickHouse 可
  • Ubuntu 下安装 apt-get install npm

    步骤一 sudo apt get remove nodejs npm 删除原来的 sudo apt get install curl curl sL https deb nodesource com setup sudo bash sudo
  • 第十一届蓝桥杯国赛 奇偶覆盖

    我的主要思路是找到每个矩形内的单位方格 再使用set集合将所有方格统计 最后在set集合里遍历每一个方格 统计其再矩形里出现的次数 即为面积 再蓝桥刷题系统上只能过30 有优化方案的欢迎私信讨论 矩形类 class The it def i
  • Angular4 使用GET向后端请求数据

    Angular4 使用GET向后端请求数据 在工程的src app app module ts的头部引入http jsonp import HttpModule JsonpModule from angular http 在工程的src a
  • 线程池实例

    public Executor asyncServiceExecutor ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor 配置核心线程数 executor setCore
  • 日常Linux操作命令使用手册

    OS 查看操作系统 cat etc issue GPU 查看GPU 利用率 nvidia smi 文件和空间 查看linux文件目录的大小和文件夹包含的文件数 查看磁盘使用情况 df h 统计总数大小 du sh xmldb du sm s
  • Java: 断言(assert)

    断言 assert 语句一般用于程序不准备通过捕获异常来处理的错误 例如 账号交易时 对于支出的金额为正数 收入 支出 纯收入 或者收入的金额为负数 程序必须立即停止执行 同时发现错误 当正式收益时 就可以避开错误 但仍保留断言语句在程序中
  • 6.28同花顺笔试

    笔试共22题 题型比较多 选择 简答 编程 开放逻辑题都有 笔试时长2h 对深度学习方面考察的比较多 包含性能评价指标 常见定义等 选择题与简答题 1 提高深层神经网络特征表达能力的方法 题目问的下列哪个方法无法用来提高 a 增加层深度 b
  • 微信小程序遇到does not have a method “xxxx“ to handle event “tap“

    刚开始学小程序的小白 学到事件绑定的时候 跟着老师的步骤一步一步把代码输入好 结果发现和老师的结果不大一样 我在网上找了很多方法 有说多打空格的 有说要写进method 里的 都试过 没用 结果意外之下 我随手取消勾选 将JS编译成ES5
  • 2022.08 VMware官网下载安装+配置Linux虚拟机,最新最全

    前言 文章概要叙述 步骤一 安装VMware VMware 安装包下载 VMware官方下载页面 1 1小节 步骤二 配置虚拟机 步骤三 安装操作系统 CentOS7 9 镜像文件下载 CentOS阿里云镜像下载页 2 2 1小节 一 VM
  • UE4 获取目录下所有的图片转换成Texture2D并通过UMG显示出来

    主要内容 本文主要讲解简单插件的编写 将类继承至Subsystem 子系统 框架的好处 鼠标射线检测以及鼠标拖拽功能的实现 实现步骤 一 编写插件 1 首先新建一个空的C 项目 然后新建插件 Author是作者名 Description是描
  • 《Linux入门与基础》课程教案

    Linux入门与基础 linux的目录结构 打开终端 输入ls查看linux根目录下的情况 ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sy
  • 常用电路设计之分频器的设计

    引言 分频器在实际数字电路设计中是最基础的 也是最重要的 常见的分频器主要有偶数倍分频器 奇数倍分频器 半整数倍分频器 任意小数倍分频器等 本文主要对最常用的偶数倍分频器和奇数倍分频器展开介绍 1 偶数倍分频器 偶数倍分频器通过计数器可以很