VHDL/CPLD硬件描述语言:2022年做的万年历实验

之前接触过一些硬件描述语言以及VHDL/CPLD的单片机的设计实验,那时是2022年了

这里补写一篇笔记,以记录一下那十多个小时 万年历实验 研究中的心得体会:

说明解释都是个人理解,与标准描述有较大出入......

目录

输入输出器件的编写:

分频器点亮不同频率LED:

引用头文件:

实体(ENTITY)定义和架构(ARCHITECTURE)的开头部分:

主体:变量定义与时钟事件检查:

完整代码:

电路连接与效果描述:

级联分频/计时器实现时钟的效果:

四位计数器(10分频)的内部硬件描述代码:

接口与变量作用定义:

计数器过程:

数码管分频计数逻辑输出器:

​编辑

它的完整代码如下:

最后的输入输出总线连接:

编译下载效果如下:

回忆与感悟 :


 

输入输出器件的编写:

想必大家都听说过一些单片机外围电路上的芯片:

比如74HC138(三选八)芯片,74HC573扩展芯片等,这些芯片在硬件上定义一些输入与输出相联系的逻辑来实现他们的功能,

而这里的编程则是在软件上自己先使用硬件描述语言进行对输入输出逻辑的组合,自己编写出类似于分频器、片选芯片类似功能的器件模块,然后再将它们与具体的输入输出线引脚相组合,最后编译无报错下载进板子查看效果的过程。

分频器点亮不同频率LED:

这里展示了一个编写简单的分频器的硬件描述语言的逻辑代码,下面分布解释:

引用头文件:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;

实体(ENTITY)定义和架构(ARCHITECTURE)的开头部分:

PORT 描述了一个具有时钟分离功能的模块,

它接收一个输入时钟信号CLK,并产生两个输出时钟信号:

CLK_1HZ(1赫兹的时钟)和CLK_1KHZ(1千赫兹的时钟)

ENTITY CLK_SEP IS
PORT(CLK:IN STD_LOGIC;
  CLK_1HZ:OUT STD_LOGIC;
  CLK_1KHZ:OUT STD_LOGIC);
END CLK_SEP;
ARCHITECTURE BHV OF CLK_SEP IS

主体:变量定义与时钟事件检查:

COUNT1:一个24位的STD_LOGIC_VECTOR,用于产生1Hz的时钟信号。

COUNT2:一个14位的STD_LOGIC_VECTOR,用于产生1kHz的时钟信号。

IF CLK'EVENT AND CLK = '1' THEN:这一行检查CLK信号是否有一个事件(上升沿0变为1)

COUNT1COUNT2 在每个CLK上升沿递增。

COUNT1的值在"010110111000110110000000"(二进制表示,对应于某个十进制数)和"101101110001101100000000"之间时,CLK_1HZ被设置为'1'。这个范围代表了从某个特定开始点到结束点的时间段,用于产生1Hz的时钟周期。

COUNT1的值小于或等于结束点且大于或等于"000000000000000000000000"(即开始点)时,CLK_1HZ被设置为'0'

COUNT1达到结束点"101101110001101100000000"时,它被重置为"000000000000000000000000",以便开始下一个1Hz周期。

COUNT2的值在"01011101110000""10111011100000"之间时,CLK_1KHZ被设置为'1'。这个范围代表了从某个特定开始点到结束点的时间段,用于产生1kHz的时钟周期。

COUNT2的值小于或等于结束点且大于或等于"00000000000000"时,CLK_1KHZ被设置为'0'

COUNT2达到结束点"10111011100000"时,它被重置为"00000000000000",以便开始下一个1kHz周期。

BEGIN
 PROCESS(CLK)
 VARIABLE COUNT1:STD_LOGIC_VECTOR(23 DOWNTO 0);
 VARIABLE COUNT2:STD_LOGIC_VECTOR(13 DOWNTO 0);
 
 BEGIN
  IF CLK'EVENT AND CLK = '1' THEN
   COUNT1:=COUNT1+1;
   COUNT2:=COUNT2+1;
   IF ((COUNT1>="010110111000110110000000") AND	(COUNT1<="101101110001101100000000") ) THEN
    CLK_1HZ<='1'; 
   ELSIF ((COUNT1<="010110111000110110000000") AND(COUNT1>="000000000000000000000000")) THEN
    CLK_1HZ<='0';
   IF
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NULL指向我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值