任意小数分频设计

对于任意小数分频,如果有PLL的话,直接倍频再分频即可;或常用的方法有双模前置小数分频和脉冲删除小数分频。前一种方法设计较为复杂,因此主要以第二种方式为主设计了一下。

 

任意小数均可以化为分数,例如要进行5.3分频即53/10分频,因此之后全部以分数来表示。

 

以13/4分频为例,我们首先要想明白什么是13/4分频。什么是2分频呢?就是每两个输入时钟得到一个输出时钟,4分频就是4/1即四个输入时钟得到一个输出时钟,因此13/4分频其实就是13个输入时钟得到4个输出时钟,想明白这一点很重要。

 

在双模前置小数分频设计中,虽然这个设计我还没完成不过也提一下,是通过分数值的前后两个正数数分频选择输出得到最终结果的。对于13/4而言:

 

M = 13/4 = 3 ... 1

这意味着13/4的分频可以通过3分频和4分频选择输出得到,继续计算:

 

 

a + b = 4
3a + 4b = 13

得到a=3,b=1。也就是说通过3个3分频和1个4分频可以得到13/4分频。

 

 

在不考虑其他情况仅仅做简单选择输出的话,可以画出这样的时序图:

可以看到通过3分频和4分频“凑”出了13/4分频,不过这样的时钟我觉得用处不大。当然了真正这样设计时不能这样简单的先3个3分频再1个4分频,还有一些处理,这里就先不提了。

 

还是回到刚刚话,13/4分频其实就是13个输入时钟得到4个输出时钟,因此脉冲删除小数分频相对比较简单。意思就是在13个输入时钟里我删掉9个时钟周期,这样不就书粗了4个时钟周期了么,就是这样。那应该怎么删呢,查了一些论文后得到结论:

1.设置寄存器cnt位宽自定,我用的[7:0],初始值为0;

2.在clk_in的上升沿+4,并判断是否大于13,若大于13在下一周期-13;

3.cnt小于13时候,删除脉冲信号delete=1,大于13时候delete=0;

说起来比较乱,画个表表示下,每12个周期我们作为一个循环来看:

 

时钟序号cnt值是否删除
04Y
18Y
212Y
3(16->)3N
47Y
511Y
6(15->)2N
76Y
810Y
9(14->)1N
105Y
119Y
12(13->)0N
04 

 

从表中可以看到每13个周期有4个周期没有被删除,刚好满足要求。

 

我们再来试一个,11/9吧:

时钟序号cnt值是否删除
09Y
118->7N
216->5N
314->3N
412->1N
510Y
619->8N
717->6N
815->4N
913->2N
1011->0N
09 

可以看到11个时钟里有删除了2个,输出了9个,完美。

 

下面以代码用进行测试设计,代码中fraction是分频的分子,denominator 是分母,以参数形式设置,testbench中进行传入。

module DIV(input clk_in			,input rst				,output clk_out);
parameter fraction = 1;
parameter denominator = 1;reg  [7:0]cnt;
reg delete;
always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt <= 0;delete <= 0;endelse if (cnt > fraction) begincnt <= cnt + denominator - fraction;delete <= 0;endelse begincnt <= cnt + denominator;delete <= 1;end
endassign clk_out = delete ? 1 : clk_in;
endmodule

 

testbench文件,测试21/8分频。cnt_in和cnt_out仅仅是为了方便数输入时钟和输出时钟而设置的,没有实际意义:

module tb;// Inputsreg clk_in;reg rst;// Outputswire clk_out;parameter fraction = 21;parameter denominator = 8;// Instantiate the Unit Under Test (UUT)DIV #(.fraction(fraction),.denominator(denominator))uut (.clk_in(clk_in),.rst(rst),.clk_out(clk_out));initial beginclk_in = 0;forever #2 clk_in = ! clk_in;endinitial beginrst = 1;forever #50 rst = 0;endreg [7:0]cnt_in, cnt_out;
always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt_in <= 0;endelse if (cnt_in == fraction) begin// resetcnt_in <= 1;endelse begincnt_in <= cnt_in + 1;end
endalways @(posedge clk_out or posedge rst) beginif (rst) begin// resetcnt_out <= 0;endelse if (cnt_out == denominator) begin// resetcnt_out <= 1;endelse begincnt_out <= cnt_out + 1;end
endendmodule


仿真波形图: 

从红框区域可以看得出,21个输入周期刚好输出8个输出周期,当然这计数可以不怎么看,我们自己会数嘛。

 

ps.

在网上还看到了另外一种方式,感觉思路有点相似,也是相加超过分子后就减去分子再相加,把实现的代码贴在这里:

module DIV(input clk_in			,input rst				,output reg clk_out);
parameter fraction = 1;
parameter denominator = 1;reg  [8:0]cnt;
wire vld;assign vld 	 = ((cnt >= fraction>>1) && (cnt < fraction)) ? 1 : 0;always @(posedge clk_in or posedge rst) beginif (rst) begin// resetcnt <= 0;endelse if(cnt > fraction) begincnt <= cnt + denominator - fraction;endelse begincnt <= cnt + denominator;end
endalways @(posedge clk_in or posedge rst) beginif (rst) begin// resetclk_out <= 0;endelse if (vld) beginclk_out <= 1;endelse beginclk_out <= 0;end
endendmodule

 

同样用之前的testbench做21/8的分频,看波形: 

的确是实现了目的,不过好乱的波形呀。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253814.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bootstrap--圆角图片`圆形图

转载于:https://www.cnblogs.com/qiyiyifan/p/6159823.html

逻辑综合——概述与基本概念

逻辑综合系列主要说明以下问题&#xff1a; 为什么要逻辑综合逻辑综合的基本原理逻辑综合需要提供哪些文件逻辑综合过程中施加约束逻辑综合能产生那些结果 综合是前端设计的重要步骤之一&#xff0c;其过程是将行为描述的电路、RTL级的电路转换到门级&#xff0c;其目的在于&a…

Swoole 源码分析——Server模块之初始化

前言 本节主要介绍 server 模块进行初始化的代码&#xff0c;关于初始化过程中&#xff0c;各个属性的意义&#xff0c;可以参考官方文档&#xff1a; SERVER 配置选项 关于初始化过程中&#xff0c;用于监听的 socket 绑定问题&#xff0c;可以参考&#xff1a; UNP 学习笔记—…

linux下搭建git服务器

安装 Git Linux 做为服务器端系统&#xff0c;Windows 作为客户端系统&#xff0c;分别安装 Git 服务器端&#xff1a; #yum install -y git 安装完后&#xff0c;查看 Git 版本 [rootlocalhost ~]# git --version git version 1.7.1 客户端&#xff1a; 下载 Git for Windows&…

逻辑综合——工艺库

一、库文件的设置 运行DC时需要用到的库文件有&#xff1a;目标库&#xff08;target library&#xff09;、链接库&#xff08;link library&#xff09;、符号库&#xff08;symbol library&#xff09;、算术运算库&#xff08;synthetic library&#xff09;。 1、目标库…

[COGS 0065][NOIP 2002] 字串变换

65. [NOIP2002] 字串变换 ★★ 输入文件&#xff1a;string.in 输出文件&#xff1a;string.out 简单对比时间限制&#xff1a;1 s 内存限制&#xff1a;128 MB [问题描述] 已知有两个字串A\$, B\$及一组字串变换的规则&#xff08;至多6个规则&#xff09;: A1\$ ->…

逻辑综合——施加约束

Design Compiler时一个约束驱动&#xff08;constraint-driven&#xff09;的综合工具&#xff0c;它的结果与设计者施加的约束条件密切相关。 一、面积约束 进行面积的约束&#xff0c;也就是告诉DC综合的电路面积要在多少以内。在介绍约束命令之前&#xff0c;先了解一下面积…

[Codevs] 1004 四子连棋

1004 四子连棋 时间限制: 1 s空间限制: 128000 KB题目等级 : 黄金 Gold题目描述 Description在一个4*4的棋盘上摆放了14颗棋子&#xff0c;其中有7颗白色棋子&#xff0c;7颗黑色棋子&#xff0c;有两个空白地带&#xff0c;任何一颗黑白棋子都可以向上下左右四个方向移动到相邻…

逻辑综合——优化电路

对进行时序路径、工作环境、设计规则等进行约束完成之后&#xff0c;DC就可以进行综合、优化时序了&#xff0c;DC在优化过程中主要的策略将在下面进行说明。然而&#xff0c;当普通模式下不能进行优化的&#xff0c;就需要我们进行编写脚本来改进DC的优化来达到时序要求。 DC…

DOM包裹wrap()方法

DOM包裹wrap()方法 如果要将元素用其他元素包裹起来&#xff0c;也就是给它增加一个父元素&#xff0c;针对这样的处理&#xff0c;JQuery提供了一个wrap方法 .wrap( wrappingElement )&#xff1a;在集合中匹配的每个元素周围包裹一个HTML结构 简单的看一段代码&#xff1a; &…

Verdi 基础教程

一、Verdi 功能 查看设计debugVerdi不能自己产生波形 二、Verdi使用流程 1、Verdi环境配置 .bashrc中配置 export Verdi_HOME$Synopsys_Dir/Verdi2015 #export NOVAS_HOME$Synopsys_Dir/Verdi2015 export PATH$Verdi_HOME/bin:$PATH export LD_LIBRARY_PATH"/opt/Syno…

ida和idr机制分析(盘符分配机制)

内核ida和idr机制分析&#xff08;盘符分配机制&#xff09; ida和idr的机制在我个人看来&#xff0c;是内核管理整数资源的一种方法。在内核中&#xff0c;许多地方都用到了该结构&#xff08;例如class的id&#xff0c;disk的id&#xff09;&#xff0c;更直观的说&#xff0…

MIPI CSI-2学习

CSI&#xff08;Camera Serial Interface&#xff09;定义了摄像头外设与主机控制器之间的接口&#xff0c;旨在确定摄像头与主机控制器在移动应用中的标准。 关键词描述 缩写解释CCICamera Control Interface&#xff08;物理层组件&#xff0c;通常使用I2C或I3C进行通信&…

nand flash坏块管理OOB,BBT,ECC

0.NAND的操作管理方式 NAND FLASH的管理方式&#xff1a;以三星FLASH为例&#xff0c;一片Nand flash为一个设备(device)&#xff0c;1 (Device) xxxx (Blocks)&#xff0c;1 (Block) xxxx (Pages)&#xff0c;1(Page) 528 (Bytes) 数据块大小(512Bytes) OOB 块大小(16Byte…

小白学git2

你已经在本地创建了一个Git仓库后&#xff0c;又想在GitHub创建一个Git仓库&#xff0c;并且让这两个仓库进行远程同步&#xff0c;这样&#xff0c;GitHub上的仓库既可以作为备份&#xff0c;又可以让其他人通过该仓库来协作&#xff0c;真是一举多得。 首先&#xff0c;登陆G…

CMOS图像传感器——工作原理

一、像素阵列结构 一般像素阵列是由水平方向的行( Row ) 和垂直方向的列(Column)正交排列构成的。像素排列的最基本设计原则是:摄像器件像素排列的坐标,必须在显示的时候能够准确地还原在图像原来的相对位置上。在大多数情况下,每个像素中心线在行的方向和列的方向,即…

追寻终极数据库 - 事务/分析混合处理系统的交付挑战 (3)

挑战&#xff1a;支持多个存储引擎 以下内容并不是新发现&#xff1a;行优化存储适用于OLTP和运营工作负载&#xff0c;而列存储适用于BI和分析工作负载。频繁写入的工作负载适用于行式存储。对Hadoop而言&#xff0c;Hbase适合低延迟工作负载&#xff0c;列式ORC文件或Parquet…

异步FIFO设计(Verilog)

FIFO&#xff08;First In First Out&#xff09;是异步数据传输时经常使用的存储器。该存储器的特点是数据先进先出&#xff08;后进后出&#xff09;。其实&#xff0c;多位宽数据的异步传输问题&#xff0c;无论是从快时钟到慢时钟域&#xff0c;还是从慢时钟到快时钟域&…

python中RabbitMQ的使用(路由键模糊匹配)

路由键模糊匹配 使用正则表达式进行匹配。其中“#”表示所有、全部的意思&#xff1b;“*”只匹配到一个词。 匹配规则&#xff1a; 路由键&#xff1a;routings [ happy.work, happy.life , happy.work.teacher, sad.work, sad.life, sad.work.teacher ] "#"&am…