孩子都能学会的FPGA:第二十二课——用FPGA实现计数时钟的奇数次分频

(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!

前面的计数器加法的时候讲解过计数器的第0位是计数时钟的2分频第1位是计数时钟的4分频第2位是计数时钟的8分频......还有就是计数分频,每计数n次信号反转一次,就是高低电平都是n次,那就是计数时钟的2n次分频,这个2n一定是偶数。

但是在实际的应用中,如果需要计数时钟的奇数次分频,需要如何实现呢?比如实现计数时钟的5分频,而且要求占空比是50%,就是高电平2.5时钟周期,低电平2.5时钟周期。

前期的时序逻辑我们一般都是用的系统时钟的上升沿做为触发条件,对于计数时钟的5分频,用系统时钟的上升沿计数只能得到高电平3个时钟周期,低电平2个时钟周期,或者高电平2个时钟周期,低电平3个时钟周期,不满足占空比50%的条件。

这时候就要考虑用系统时钟的下降沿做为触发条件,对于计数时钟的5分频,用系统时钟的下升沿计数也只能得到高电平3个时钟周期,低电平2个时钟周期,或者高电平2个时钟周期,低电平3个时钟周期,也不满足占空比50%的条件。

但是用系统时钟的上升沿和用系统时钟的下降沿分别触发,得到的分频信号会有半个时钟的相位差,这个相位差太关键了,为了直观,绘制了如下的时序图,clk是系统时钟,cklp是时钟上升沿触发的分频信号,ckln是时钟下升沿触发的分频信号,我们仔细观察一下,如果把clkp和clkn取或运算,就可以实现系统时钟clk5分频,其中高电平是2.5个系统时钟,低电平也是2.5个系统时钟。

理解了设计的思路,FPGA的设计就非常的简单了,只需要两个计数器就可以实现任意计数时钟的奇数次分频。如下所示,可以通过定义DIV完成不同奇数次的分频。

用计数时钟的上升沿实现计数器cntp和分频信号div_clk_pos。

用计数时钟的下升沿实现计数器cntn和分频信号div_clk_neg。最后将div_clk_posdiv_clk_neg取或既可得到最终的分频信号。

双击sim目录下的top_tb.bat文件,完成自动化仿真。

modelsim的仿真波形如下所示,和我们上面的分析是一致的,fpga设计功能正常。

计数时钟的奇数次分频是一个非常经典的面试题,看似只涉及非常简单的计数器,其实也考察了对时钟触发条件的理解,我们平常一般用的是时钟的上升沿,很少用时钟的下降沿,因为如果同时使用时钟的上升沿和下降沿会让时序分析变得非常复杂。但是合理的使用时钟的下降沿,能让一些设计非常的简单,这需要读者慢慢的体会。

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

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

相关文章

使用SQL中的LIKE操作符进行模糊匹配:原理与用法

LIKE操作符的基本原理: LIKE操作符用于在SELECT语句中进行模糊匹配,通常与通配符%一起使用。%表示匹配任意长度的任意字符,例如%apple%可以匹配包含apple字符串的任意位置的字符串。而其他的通配符如下: _ 表示匹配一个任意字符[…

内核定时器

一、时钟中断 硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1 jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量&#xff0…

用pip更新、安装python的包

查看pip的版本:python -m pip --version 例如,查看下pip的版本,在cmd下输入命令python -m pip --version,可以发现当前安装的pip的版本是23.2.1: 查看一个包的详情:python -m pip show 例如&#xff0c…

Python 调用企业微信群机器人发送消息及文件

Python 操作企业微信群机器人。 企业微信群创建机器人 : 安装 requests json : pip install requests pip install json发送消息(markdown) import requests import json# 企业微信机器人发送文字 def send_markdown (message, …

【信息安全】-个人敏感信息、个人信息、个人金融信息

文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…

xxl-job简单实用

仅仅为了记录一下xxl-job的使用,针对新手而言! 1.开始准备 源码仓库地址Release Downloadhttps://github.com/xuxueli/xxl-jobDownloadhttp://gitee.com/xuxueli0323/xxl-jobDownload

cmd下查看python命令的用法

在cmd下,可以运行python --help或者py --help来查看python命令的用法。例如:

C++11改进观察者模式

观察者模式定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 先看一个简单的观察者模式是如何实现的&#xff1a; #include <iostream> #include <vector> #include <map> …

《计算机算法设计与分析(第5版)》笔记

文章目录 [toc]第一章&#xff1a;算法概述1.1|算法与程序算法性质 程序 1.2|算法复杂性分析算法复杂性时间复杂性最坏情况下的时间复杂性最好情况下的时间复杂性平均情况下的时间复杂性 渐进复杂性 O O O表示法、 Ω \Omega Ω表示法、 θ \theta θ表示法、 o o o表示法 O O …

一起学docker系列之十七Docker Compose 与手动操作的比较与优势分析

目录 1 前言2 不使用 Docker Compose2.1 启动 MySQL 容器2.2 启动 Redis 容器2.3 启动微服务容器 3 使用 Docker Compose4 使用 Docker Compose 的优势5 结语参考地址 1 前言 在当今容器化应用的开发与部署中&#xff0c;容器编排工具的选择对于简化流程、提高效率至关重要。本…

24、pytest通过xfail将测试函数标记为预期失败

官方实例 # content of test_xfail.py import pytest import syspytest.mark.xfail def test_function():print("test_function was invoked.")def valid_config():return Falsedef test_function_02():if not valid_config():pytest.xfail("failing configura…

集体建筑业总产值数据,shp/excel格式,1990-2021年,可直接下载

建筑业总产值指以货币表现的建筑业企业在一定时期内生产的建筑业产品和服务的总和。建筑业总产值包括建筑工程产值、安装工程产值和其他产值三部分内容&#xff0c;不包括境外产值。 建筑业总产值是指以货币表现的建筑业企业在一定时期内生产的建筑业产品和服务的总和。 建筑…

代数学笔记8: Sylow定理

Sylow定理 ∣ G ∣ p r ⋅ m |G|p^r\cdot m ∣G∣pr⋅m, ( m , p ) 1 (m,p)1 (m,p)1, 则 G G G中必有 p r p^r pr阶子群. 证明: 应用 例子: 15阶群必定是循环群. 因为 15 3 5 153\times 5 1535, 所以15阶群有 3 3 3阶群或 5 5 5阶群, 设3阶群有 n 3 n_3 n3​个, 5阶群有…

金蝶EAS从哪里查看 即使库存的金额?

【财务会计】——【存货核算】——【报表分析】——【存货收发存汇总表】 从这里能看到即使库存的金额

机器人制作开源方案 | 自主型收集餐盘机器人

作者&#xff1a;蔡佳怡、朱启会、郭晨杰、杨昊天、焦家辉 单位&#xff1a;西安外事学院 指导老师&#xff1a;杜喜昭、张燕 1. 产品说明 1.1 设计目的 对于如学校、工厂这种大型食堂&#xff0c;一般的收餐盘模式为用餐人用餐完毕后&#xff0c;把餐盘拿到最近的收餐盘点&…

【算法】对二分搜索的理解

二分搜索大家都很熟悉&#xff0c;首先我们先来看看基本框架 func binarySearch(nums []int, target int) int {left, right : 0, ...for ... {mid : left (right-left)/2if nums[mid] target {...} else if nums[mid] < target {left ...} else if nums[mid] > targ…

圈子社交系统:打破时间与空间的限制。APP小程序H5三端源码交付,支持二开!

在现代社会&#xff0c;社交已成为人们生活中不可或缺的一部分。然而&#xff0c;传统的社交方式往往受制于时间和空间的限制&#xff0c;使得人们难以充分发挥社交的潜力。为了解决这一问题&#xff0c;圈子社交系统应运而生。 圈子社交系统通过技术手段打破时间与空间的限制&…

Linux环境搭建SVN服务器并结合内网穿透实现远程访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;网络奇遇记、Cpolar杂谈 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. Ubuntu安装SVN服务二. 修改配置文件2.1 修改svnserve.conf文件2.2 修改pass…

【Linux】cp 命令使用

cp 命令 cp&#xff08;英文全拼&#xff1a;copy file&#xff09;命令主要用于复制文件或目录。 著者 由Torbjorn Granlund、David MacKenzie和Jim Meyering撰写。 语法 cp [选项]... [-T] 源文件 目标文件或&#xff1a;cp [选项]... 源文件... 目录或&#xff1a;cp [选…

synchronized关键字-监视器锁(monitor lock)

这就是我们上一篇中代码提到的加锁的主要方式,本质上是调用系统api进行加锁,系统api本质是靠cpu特定指令加锁. synchronize的特性 互斥性 synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,,其它线程如果也执行到同一个对象synchronized就会阻塞等待(锁…