VHDL编写3-8译码器

简介: VHDL编写3-8译码器

VHDL编写3-8译码器

3-8译码器是由3个输入端和8个输出端组成的译码器,实现3位二进制数转换成10进制的输出(用高低电平来表示输入输出)真值表如下:

本文用两种方法来实现译码器(case和with-select)


因此在设计时,定义3个输入端和两个8个输出端的实体(分别时case语言和with-select语言),分别设计两个结构体HA和HB,在结构体中分别实现case语言和选择信号赋值语句,最后由配置语句选择执行with-select语句。(具体代码如下)

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY homework1 IS
  PORT(A:IN STD_LOGIC_VECTOR(2 DOWNTO 0);               --输入端
    LED8S1,LED8S2:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));  --输出端(LED8S1是HA的输出,LED8S2是HB的输出)
END homework1;
ARCHITECTURE HA OF homework1 IS      --HA实现CASE语句
BEGIN
PROCESS(A)                           --顺序执行
BEGIN
CASE A IS
WHEN "000" =>LED8S1<="11111110";
WHEN "001" =>LED8S1<="11111101";
WHEN "010" =>LED8S1<="11111011";
WHEN "011" =>LED8S1<="11110111";
WHEN "100" =>LED8S1<="11101111";
WHEN "101" =>LED8S1<="11011111";
WHEN "110" =>LED8S1<="10111111";
WHEN "111" =>LED8S1<="01111111";
WHEN OTHERS=>NULL;                    
END CASE;
END PROCESS;
END HA;
ARCHITECTURE HB OF homework1 IS            --HB实现选择赋值语句
SIGNAL tmp :STD_LOGIC_VECTOR(2 DOWNTO 0);  --定义一个信号数组
BEGIN
tmp<=A;                                    --将实体中A的值赋值给tmp
WITH tmp SELECT
LED8S2<="11111110" WHEN "000",
     "11111101" WHEN "001",
     "11111011" WHEN "010",
     "11110111" WHEN "011",
     "11101111" WHEN "100",
     "11011111" WHEN "101",
     "10111111" WHEN "110",
     "01111111" WHEN "111",
     "11111111" WHEN OTHERS;
END HB;
CONFIGURATION S OF homework1 IS             --配置
FOR HB
END FOR;
END CONFIGURATION S;

其中CONFIGURATION是用来选择使用的结构体(本文选用的是结构体HB)

接下来就是仿真了

要注意实体ENTITY中的DOWNTO顺序哦(๑•́ ₃ •̀๑)

相关文章
|
芯片 存储 C语言
STM32F103标准外设库——固件库 (三)
STM32F103标准外设库——固件库 (三)
1013 0
STM32F103标准外设库——固件库 (三)
|
API 网络安全 网络架构
浅谈Elastic Search V8版本的一些重大改进
浅谈Elastic Search V8版本的一些重大改进
393 0
|
编解码 JavaScript 前端开发
Vue项目实战(01)-vue-element-admin项目结构分析
Vue项目实战(01)-vue-element-admin项目结构分析
292 1
|
存储 JSON 小程序
【小程序云开发】不用后端也能构建完整的微信小程序
本文介绍了如何从零开始学习和掌握微信小程序云开发,包括云函数、云数据库和HTTP触发等重要概念。通过详细的步骤和示例,读者将学会如何创建和部署云函数,以及如何使用云数据库来存储和管理小程序的数据。同时,本文还介绍了如何通过HTTP触发器实现小程序与外部API的数据交互,从而为小程序开发提供更灵活、高效的后端解决方案。无论您是初学者还是有一定经验的开发者,本文都将帮助您轻松掌握微信小程序云开发,并为您的小程序开发项目提供更多可能性。
2591 0
|
11月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
491 4
|
10月前
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
941 149
|
存储 关系型数据库 MySQL
MySQL数据库碎片化:隐患与解决策略
UUID作为主键可能导致MySQL存储碎片,影响性能。频繁的DML操作、字段长度变化和非顺序插入(如UUID)都会造成碎片。碎片增加磁盘I/O,降低查询效率,浪费空间,影响备份速度。建议使用自增ID,固定长度字段,并适时运行OPTIMIZE TABLE来减少碎片。
|
存储 NoSQL Cloud Native
数据库技术前沿:探索、挑战与未来趋势
一、引言 数据库技术作为信息技术领域的核心,随着数字化和智能化的发展,正经历着前所未有的变革
STM32学习笔记(4) 高级定时器-两路互补的PWM输出(带死区和刹车控制)
原理:当捕捉到信号的跳变沿时,将CNT的值所存到捕获寄存器CCR中,然后把两次的值相减,就可以得到脉宽或者频率。
2708 0