整数分频,奇偶分频。

实验目标:

实现任意整数奇偶分频。

/*

二分频电路就是用同一个时钟信号通过一定的电路结构转变成不同频率的时钟信号。

二分频就是通过有分频作用的电路结构,在时钟每触发2个周期时,电路输出1个周期信号。

比如用一个脉冲时钟触发一个计数器,计数器每计2个数就清零一次并输出1个脉冲。

那么这个电路就实现了二分频功能。 

四分频就是通过有分频作用的电路结构,在时钟每触发4个周期时,电路输出1个周期信号。

比如用一个脉冲时钟触发一个计数器,计数器每计4个数就清零一次并输出1个脉冲,

那么这个电路就实现了四分频功能。

*/

需求分析:

任意整数分频。占空比百分之50.

灵活使用计数器,可以进行分频。

比如偶数分频N

高电平时间占(N/2) * T_sys_clk,在这个期间有N/2个sys_clk系统时钟。

低电平时间占(N/2) * T_sys_clk,在这个期间有N/2个sys_clk系统时钟。

比如奇数分频M

高电平时间占(M/2) * T_sys_clk,  在这个期间有(M>>1)个完整的sys_clk + 半个sys_clk.

低电平时间占(M/2) * T_sys_clk,  在这个期间有(M>>1)个完整的sys_clk + 半个sys_clk.

模块框图:

时序图:

 

 

代码: 

/*
二分频电路就是用同一个时钟信号通过一定的电路结构转变成不同频率的时钟信号。 
二分频就是通过有分频作用的电路结构,在时钟每触发2个周期时,电路输出1个周期信号。
比如用一个脉冲时钟触发一个计数器,计数器每计2个数就清零一次并输出1个脉冲。
那么这个电路就实现了二分频功能。 四分频就是通过有分频作用的电路结构,在时钟每触发4个周期时,电路输出1个周期信号。
比如用一个脉冲时钟触发一个计数器,计数器每计4个数就清零一次并输出1个脉冲,
那么这个电路就实现了四分频功能。
*/
module top (input		wire				sys_clk      ,input		wire				sys_rst_n    ,output		wire                clk_even     ,output		wire                clk_odd     
);clk_even clk_even_inst(.sys_clk           ( sys_clk    ) ,.sys_rst_n         ( sys_rst_n  ) ,.clk_even          ( clk_even   )  
);clk_odd clk_odd_isnt(.sys_clk            ( sys_clk    ) ,.sys_rst_n          ( sys_rst_n  ) ,.odd_clk            ( clk_odd   )  
);endmodule
/*奇数分频。整数。
*/
`include     "para.v" 
module clk_odd (input		wire				sys_clk      ,input		wire				sys_rst_n    ,output		wire                odd_clk     
);// reg signalreg     [31:0]      cnt_odd     ;reg                 clk_odd_p   ;reg                 clk_odd_n   ;// wire signal  wire                add_cnt_odd ;wire                end_cnt_odd ;wire    [31:0]      reversal_odd;
/******************************************************************************************
********************************************main code**************************************
*******************************************************************************************/// reg signal// reg     [31:0]      cnt_odd     ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) cnt_odd <= 32'd0 ;else if(add_cnt_odd) beginif(end_cnt_odd)cnt_odd <= 32'd0 ;elsecnt_odd <= cnt_odd + 1'b1 ;endelse cnt_odd <= 32'd0 ;end// reg                 clk_odd_p   ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) clk_odd_p <= 1'b0 ;else if(cnt_odd >= reversal_odd)clk_odd_p <= 1'b1 ;else clk_odd_p <= 1'b0 ;end// reg                 clk_odd_n   ;always @(negedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) clk_odd_n <= 1'b0 ;else if(cnt_odd >= reversal_odd)clk_odd_n <= 1'b1 ;else clk_odd_n <= 1'b0 ;end// wire signal  // wire                add_cnt_odd ;assign  add_cnt_odd = 1'b1 ;// wire                end_cnt_odd ;assign  end_cnt_odd = add_cnt_odd && (cnt_odd == (`ODD_NUM - 1)) ;// wire                reversal_odd;assign  reversal_odd= ((`ODD_NUM >> 1) + 1) ; // 由于加的优先级大于>> 所以要加括号。// output		wire                odd_clk assign  odd_clk = clk_odd_p || clk_odd_n ;endmodule
/*偶数分频。整数。
*/
`include     "para.v"
module clk_even (input		wire				sys_clk      ,input		wire				sys_rst_n    ,output		reg                 clk_even     
);// reg signal reg     [31:0]      cnt_even ;// wire signal wire                add_cnt_even    ;wire                end_cnt_even    ;wire                reversal_even   ;/******************************************************************************************
********************************************main code**************************************
*******************************************************************************************/// // reg signal // reg     [31:0]      cnt_even ;always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) cnt_even <= 32'd0 ;else if(add_cnt_even) beginif(end_cnt_even)cnt_even <= 32'd0 ;else cnt_even <= cnt_even + 1'b1 ;endelse cnt_even <= 32'd0 ;end// // wire signal // wire                add_cnt_even ;assign  add_cnt_even = 1'b1 ;// wire                end_cnt_even ;assign  end_cnt_even = add_cnt_even && (cnt_even == (`EVEN_NUM - 1)) ;// wire                reversal_even  ;assign  reversal_even= (cnt_even == ((`EVEN_NUM >> 1) - 1)) ;// output		reg                 clk_even    always @(posedge sys_clk or negedge sys_rst_n) beginif(~sys_rst_n) clk_even <= 1'b1 ;else if(reversal_even || end_cnt_even)clk_even <= ~clk_even ;else clk_even <= clk_even ;end 
endmodule

`timescale 1ns/1ns
module test_top ();reg 				sys_clk		    ;reg 				sys_rst_n	    ;wire                clk_odd         ;wire                clk_even        ;parameter           CYCLE = 20 ;top top_inst(.sys_clk            ( sys_clk		) ,.sys_rst_n          ( sys_rst_n	    ) ,.clk_even           ( clk_even      ) ,.clk_odd            ( clk_odd       )  
);initial beginsys_clk = 1'b1      ;sys_rst_n <= 1'b0   ;#(CYCLE * 2)        ;sys_rst_n <= 1'b1   ;endalways #(CYCLE/2) sys_clk = ~sys_clk ;endmodule

 仿真波形:

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

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

相关文章

Kubernetes入门学习(上)

文章目录 Kubernetes入门学习&#xff08;上&#xff09;介绍云原生 Kubernetes架构基础概念Kubernetes架构控制平面组件Node组件 组件关系 安装Kubernetes基本对象和操作Pod&#xff08;容器集&#xff09;Deployment(部署)与ReplicaSet(副本集)Service&#xff08;服务&#…

第一百八十七回 DropdownButton组件

文章目录 1. 概念介绍2. 使用方法2.1 DropdownButton2.2 DropdownMenuItem 3. 示例代码4. 内容总结5. 经验分享 我们在 上一章回中介绍了"DropdownMenu组件"相关的内容&#xff0c;本章回中将介绍 DropdownButton组件.闲话休提&#xff0c;让我们一起Talk Flutter吧…

使用 kubeadm 部署 Kubernetes 集群(三)kubeadm 初始化 k8s 证书过期解决方案

一、延长k8s证书时间 查看 apiserver 证书有效时间&#xff1a;默认是一年的有效期 [rootxuegod63 ~]# openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep Not 延长证书过期时间 1.把 update-kubeadm-cert.sh 文件上传到 xuegod63 节点 vim update-…

Unity 下载网络图片的方法,并把图片赋值给UI和物体的方法

Unity 下载网络图片的方法&#xff0c;可使用WWW类或UnityWebRequest类&#xff0c;其中UnityWebRequest是新版的方法。 通常我们下载图片都会转成Texture&#xff0c;然后赋值给UI或者物体。 具体实现方法&#xff1a; using System.Collections; using System.Collections…

深入理解贝叶斯分类与朴素贝叶斯模型(Naive Bayes, NB):从基础到实战

目录 贝叶斯分类 公式 决策规则 优点 贝叶斯分类器的例子——垃圾邮件问题 1. 特征&#xff08;输入&#xff09;&#xff1a; 2. 类别&#xff1a; 3. 数据&#xff1a; 4. 模型训练&#xff1a; 注&#xff1a;类别先验概率 5. 模型预测&#xff1a; 朴素贝叶斯模…

【开题报告】基于深度学习的驾驶员危险行为检测系统

研究的目的、意义及国内外发展概况 研究的目的、意义&#xff1a;我国每年的交通事故绝对数量是一个十分巨大的数字&#xff0c;造成了巨大的死亡人数和经济损失。而造成交通事故的一个很重要原因就是驾驶员的各种危险驾驶操作行为。如果道路驾驶员的驾驶行为能够得到有效识别…

并行和并发的区别

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1、并发2、并行3、异同点 1、并发 当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程&#xff0c;它只能把CPU运行时间划分成若…

基于SpringBoot的企业客户管理系统的设计与实现

摘 要 本论文主要论述了如何使用JAVA语言开发一个企业客户管理系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述企业客户管理系统的当前背景以及系统开发的目…

npm ERR! notarget No matching version found for @eslint/eslintrc@^2.1.4.

文章目录 Intro解决流程总结前置信息了解npm 镜像源三个要用到的npm命令 官方源确认查看当前镜像源的详情解决&#xff1a; 切换镜像源后重试重新操作 事后感受 Intro 事由是今天我在用 create-react-app 新建一个用于测试的前端项目。 然后就出现以下报错&#xff1a; wuyuj…

【LeetCode热题100】【双指针】移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出…

什么样的SSL证书比较好?

首先需要明确的是最适合自己的就是最好的SSL证书。目前市场上的证书种类很多&#xff0c;那怎么才能挑选出最适合自己的呢&#xff1f;我罗列了几个需要考虑的方面。 1.证书类型&#xff1a;根据您的需求选择合适的证书类型。例如&#xff0c;如果您需要验证公司信息&#xff0…

ios 长传发布审核+safari浏览器,直接安装ipa文件

蒲公英二维码方法 个人开发者账号发布证书AD-hoc 描述文件蒲公英上传链接通过苹果safari 浏览器下载IPA包 浏览器下载方法 前置条件 1.下载 ipa 包的设备的 uuid 已加入 苹果测试设备列表如何添加到测试列表 2.web 服务, 文件服务. 3.需要AD-hoc 描述文件 添加链接描述 1.创…

python常用函数

1.len函数求字符串长度 例如 2.input函数为输入 input里边可以是任意类型的数据 但是它返回的值是一个字符串(即现在只能做出打印那些操作) 想做出其他操作的话,要强制类型转换 例,用str转换为字符串(类似的还有float),字符串可以互相拼接 所以要记得用了input函数后要强制…

kali学习

目录 黑客法则&#xff1a; 一&#xff1a;页面使用基础 二&#xff1a;msf和Windows永恒之蓝漏洞 kali最强渗透工具——metasploit 介绍 使用永恒之蓝进行攻击 ​编辑 使用kali渗透工具生成远程控制木马 渗透测试——信息收集 域名信息收集 黑客法则&#xff1a; 一&…

N-135基于springboot,vue高校图书馆管理系统

开发工具&#xff1a;IDEA 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 系统分前后台&#xff0c;项目采用前后端分离 前端技术&#xff1a;vueelementUI 服务端技术&#xff1a;springbootmybatisredis 本项…

抖音直播招聘报白的介绍和案例

抖音直播招聘报白是指企业人力资源公司在抖音进行直播招聘时&#xff0c;需要向抖音平台提供审核申请。通过报白&#xff0c;企业或人力资源公司可以更好的获取招聘渠道和更多曝光的机会&#xff0c;同时可以提升品牌形象和知名度。报白的对象针对需要企业自招的企业和人力资源…

熬夜会秃头——beta冲刺Day7

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day7团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作…

Pandas教程06:DataFrame.merge数据的合并处理

DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键&#xff08;键可以是列名或索引&#xff09;将两个 DataFrame 连接在一起&#xff0c;这个过程类似于 SQL 中的 JOIN 操作。 #我的Python教程 #微信公众号&#xff1a;wdPy…

@RequestMapping处理请求异常

使用RequestMapping不指定请求方式&#xff0c;多种请求方式都支持。 Get格式FORM_URLENCODED Content-Typeapplication/x-www-form-urlencoded URL形式传参&#xff0c;请求体里面的内容是&#xff1a;usernamejohnexample.com&passwordsecretpassword&grant_type…

C语言之位段(详解)

C语言之位段 文章目录 C语言之位段1. 位段的介绍2. 位段的内存分配3. 位段跨平台问题4. 位段的应用5. 位段使用注意 1. 位段的介绍 位段&#xff08;bit-field&#xff09;是C语言中的一种特殊数据类型&#xff0c;它允许将一个字节分成几个部分&#xff0c;并为每个部分指定特…