基于CPLD的VHDL代码学习、解析

前人种树,后人乘凉;创造不易,请勿迁移~ 

daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主
daisy.skye擅长嵌入式,Qt,Linux,等方面的知识
https://blog.csdn.net/qq_40715266?type=blog

版权声明:本文为CSDN博主「daisy.skye」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
————————————————

CPLD(Complex Programmable Logic Device)即复杂可编程逻辑器件,是一种数字电路设计的可编程芯片。它由多个可编程逻辑门和存储单元构成,能够实现复杂的逻辑功能和存储功能。

VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述数字电路和系统。其架构分为三层,即实体层、体系结构层和行为层。实体层描述的是被建模的元素或组件的物理结构;体系结构层描述的是实体层的组合方式和交互方式;行为层描述的是元素或组件的功能行为和计算模型。VHDL还提供了一种自定义构造器的语法,可以定义用户自定义的数据类型、运算符和函数,大大方便了编程工作。

简单的来说就0和1,而0和1 的由来可以追溯到20世纪40年代末期,当时美国的数学家和计算机科学家Claude Shannon提出了“布尔代数”(也称“开关代数”),这是一种基于逻辑的数学模型,用于描述和分析数字电路。

布尔代数的核心思想是将逻辑运算符(如与、或、非等)应用到二进制数上,从而实现计算机运算。由于二进制只有0和1两个数,因此在数电中也被称为“真假”或“开关”状态。

利用0和1这两种状态,可以构建各种逻辑门电路,如逻辑与门、逻辑或门、逻辑非门等,这些门可以实现各种算术、逻辑运算和控制功能,从而构成了现代计算机的基础。

而这也造就了vdhl语言,用芯片最了解的语言,0和1 ,也就是上电不上电,这种高低电平的转换来进行控制芯片工作以。

回到代码架构,举例子

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned;entity tdm_clk isport (clk64m: in std_logic;clk2m:buffer std_logic);
end tdm_clk;
architecture rtl of tdm_clk is
signal  count:  std_logic_vector(12 downto 0) :="0000000000000";beginPROCESS (clk64m, count)----分频模块,8192计数;beginif (clk64m'event AND clk64m='1') THENif(count = "1111111111111") THENcount <= "0000000000000";elsecount <= count +1;end if ;end if;end process;clk2m <= count(4);
end  rtl; 

代码中count是一个12位的计数器。在每个clk64m上升沿时,计数器会增加1。当count达到"1111111111111"时,计数器会被重置为"0000000000000"。

然后,将count的第4位赋值给clk2m。这意味着clk2m的值将等于count的第4位。由于count是一个12位计数器,因此count(4)表示count的第4位。

根据代码中的逻辑,每当count的第4位变为1时,clk2m将变为1。因此,clk2m将以2MHz的频率生成时钟信号。这是因为clk64m的频率为64MHz,而count的计数器在每个clk64m上升沿时增加1,因此count的第4位将在每个clk64m的16个周期内变为1,从而产生2MHz的时钟信号。

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

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

相关文章

C语言深入理解指针(非常详细)(五)

目录 回调函数qsort使用举例qsort函数的模拟实现sizeof和strlen的对比sizeofstrlensizeof和strlen的对比一道关于sizeof的题 回调函数 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针&#xff08;地址&#xff09;作为参数传递给另一个函数&#xff0c;当这个指…

Python项目开发:Flask基于Python的天气数据可视化平台

目录 步骤一&#xff1a;数据获取 步骤二&#xff1a;设置Flask应用程序 步骤三&#xff1a;处理用户输入和数据可视化 步骤四&#xff1a;渲染HTML模板 总结 在这个数字化时代&#xff0c;数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中&#xff0c;我们…

OpenCV(三十):图像膨胀

1.图像膨胀原理 图像膨胀的原理是将一个结构元素&#xff08;也称为核或模板&#xff09;在图像上滑动&#xff0c;并将其与图像中对应位置的像素进行比较。如果结构元素的所有像素与图像中对应位置的像素都匹配&#xff0c;那么该位置的像素值保持不变。如果结构元素的任何一个…

C#__多线程之任务和连续任务

/// <summary> /// /// 任务&#xff1a;System.Threading.Tasks&#xff08;异步编程的一种实现方式&#xff09; /// 表应完成某个单元工作。这个工作可以在单独的线程中运行&#xff0c;也可以以同步方式启动一个任务。 /// /// 连续任务&#…

Mysql数据库基础总结:

什么是数据库&#xff1a; 数据库&#xff08;DataBase&#xff09;&#xff1a;存储和管理数据的一个仓库。 数据库类型分为&#xff1a;关系型数据库和非关系型数据库。 关系型数据库&#xff08;SQL&#xff09;&#xff1a;存储的数据以行和列为格式&#xff0c;类似于e…

wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。

C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件&#xff0c;连续发送&#xff0…

【创新项目探索】大数据服务omnidata-hive-connector介绍

omnidata-hive-connector介绍 omnidata-hive-connector是一种将大数据组件Hive的算子下推到存储节点上的服务&#xff0c;从而实现近数据计算&#xff0c;减少网络带宽&#xff0c;提升Hive的查询性能。目前支持Hive on Tez。omnidata-hive-connector已在openEuler社区开源。 …

运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar

朋友 我当你一秒朋友 朋友 我当你一世朋友 奇怪 过去再不堪回首 怀缅 时时其实还有 运行java命令出现 Error: Invalid or corrupt jarfile XXX.jar 基本可以断定&#xff0c;是jar不完整导致的。不完整&#xff01;&#xff01;&#xff01;记住关键字 检查1&#xff1a; …

【Mysql】数据库第三讲(表的约束、基本查询语句)

表的约束和基本查询 1.表的约束1.1 空属性1.2默认值1.3列描述1.4 zerofill1.5主键1.6 自增长1.7 唯一键1.8外键 1.表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c; 需要有一些额外的约束&#xff0c; 更好的保证数据的合法性&#xff0c;从…

mysql-norebuild的ddl测试

一、简介 为了保证需要注意的有norebuild和ignore两种 /** Operations that InnoDB cares about and can perform without rebuild */ static const Alter_inplace_info::HA_ALTER_FLAGS INNOBASE_ALTER_NOREBUILD INNOBASE_ONLINE_CREATE| INNOBASE_FOREIGN_OPERATIONS| Alt…

colcon build --symlink-install ,编译失败解决方法

colcon build --symlink-install编译ros2源代码时&#xff0c;或者其example时报此错误。 EasyInstallDeprecationWarning: easy_install command is deprecated.报错的路径是/usr/lib/python3/dist-packages中的setuptools&#xff0c;版本是setuptools-59.6.0.egg-info&…

Python列表操作指南:索引、切片、遍历与综合应用

文章目录 列表简介创建列表索引和切片列表的长度列表的拼接和重复检查元素是否存在列表的方法index() 方法count() 方法 列表的修改和删除修改元素删除元素列表的排序和反转添加元素 列表的拷贝列表的遍历列表的切片列表的嵌套列表推导式 python精品专栏推荐python基础知识&…

鸿蒙应用开发之容器组件

一、概述 一个丰富的页面通常是由很多基础组件组成的&#xff0c;那么我们如何才能让这些组件有条不紊地在页面上布局呢&#xff1f;这就需要借助容器组件来实现。 容器组件是一种比较特殊的组件&#xff0c;它可以包含其他的组件&#xff0c;而且按照一定的规律布局&#xf…

【Python】关于自定义对象的Json序列化和反序列化

背景 最近使用Ptyon爬虫数据时&#xff0c;遇到对象无法转换为JSON序列化对象问题TypeError: Object of type Main is not JSON serializable 意思&#xff1a; 就是对象不能转换为JSON序列化对象 原因&#xff1a; 是对象没有自定义实现转换为JSON序列化对象的方法没有。 实…

基于SSM的精品酒销售管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

Java项目-苍穹外卖-Day10-SpirngTask及WebSocket

文章目录 前言SpringTask介绍SpringTask_corn表达式Spring_Task入门案例 订单状态定时处理需求分析代码开发功能测试 WebScoket介绍入门案例 来单提醒需求分析代码开发功能测试 客户催单代码开发功能测试 前言 本章实现的业务功能 超时未支付订单自动取消&#xff0c;配送中订…

想了解Java内存分析工具MAT?看这里哦

MAT 简介 MAT全称为 Eclipse Memory Analyzer Tool &#xff0c;eclipse基金会开源的java堆内存分析工具&#xff0c;可以快速的进行堆内存分析、大对象可视化、类加载器分析、线程分析等。在我们碰到线上内存问题时候&#xff0c;是不可多得的好工具&#xff08;当然也有artha…

打工人必装的5款黑科技软件,办公舒适度立刻提升数倍

分享打工人必装的5款黑科技软件&#xff0c;让你高效完成工作&#xff0c;办公舒适度立刻提升数倍。 DroidCam——手机充当电脑摄像头 DroidCam可以让你的手机充当电脑的摄像头&#xff0c;让手机拍摄到的画面实时投送到电脑屏幕上&#xff0c;也可以充当视频聊天的摄像头&…

民安智库(第三方满意度调研公司)公园游客满意度调查内容

设计公园游客满意度调查指标需要仔细考虑&#xff0c;以确保综合评估游客的体验和需求。以下是一些常见的公园游客满意度调查指标&#xff0c;您可以根据具体情况进行定制&#xff1a; 整体满意度评分&#xff1a; 游客对整个公园体验的总体满意度评分&#xff0c;通常以1到10…

import cv2

我看到一段opencv的代码&#xff0c;是在python环境跑的&#xff0c;我的python环境&#xff08;anaconda - jupyter notebook&#xff09;是刚装好的空白环境&#xff0c;没有opencv包。怎么用anaconda安装一个opencv包呢&#xff1f; 他使用了import cv2&#xff0c;我不知道…