VHDL编写8-3线优先编码器

简介: VHDL编写8-3线优先编码器

VHDL编写8-3线优先编码器

先简单介绍一下什么是"8-3线优先编码器":

8-3线优先编码器由9个输入端和五个输出端组成,允许同时在几个输入端输入信号。当有多个输入信号传入时,只对其中优先权最高的一个输入信号进行编码(输出的二进制代码以反码形式表示)

如图所示:

因此,我们可以进行实体定义:

定义八个输入端(由权低到权高):a,b,c,d,e,f,g,h

定义一个选通输入端(0时才正常工作):st

定义三个输出端:out0,out1,out2

定义一个扩展端:yex

定义一个无编码指示器:ys


下面我给出两种语句来实现它:

1.IF…ELSE语句

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY homework3 IS
  PORT(a,b,c,d,e,f,g,h:IN BIT;        --定义八个输入端(由权低到权高):a,b,c,d,e,f,g,h
     st:IN BIT;                     --定义一个选通输入端(0时才正常工作):st
     out0,out1,out2:OUT BIT;    --定义三个输出端:out0,out1,out2
     yex:OUT BIT;           --定义一个扩展端:yex
     ys:OUT BIT);           --定义一个无编码指示器:ys
END homework3;
ARCHITECTURE yejiayu OF homework3 IS
SIGNAL tmp_in:BIT_VECTOR(7 DOWNTO 0);   --信号数组
SIGNAL tmp_out:BIT_VECTOR(4 DOWNTO 0);
BEGIN
tmp_in <= h&g&f&e&d&c&b&a;              --用&连接8个输入值并赋值给tmp_in
PROCESS(st,tmp_in)
BEGIN
IF(st='0')THEN                          --IF…ELSE语句
  IF(tmp_in="11111111")THEN
    tmp_out<="11110";
  ELSIF(tmp_in(7)='0')THEN
    tmp_out<="00001";
  ELSIF(tmp_in(6)='0')THEN
    tmp_out<="00101";
  ELSIF(tmp_in(5)='0')THEN
    tmp_out<="01001";
  ELSIF(tmp_in(4)='0')THEN
    tmp_out<="01101"; 
  ELSIF(tmp_in(3)='0')THEN
    tmp_out<="10001";
  ELSIF(tmp_in(2)='0')THEN
    tmp_out<="10101";
  ELSIF(tmp_in(1)='0')THEN
    tmp_out<="11001";
  ELSIF(tmp_in(0)='0')THEN
    tmp_out<="11101";
  END IF;
ELSE
  tmp_out<="11111";
END IF;
out2<=tmp_out(4);out1<=tmp_out(3);out0<=tmp_out(2);yex<=tmp_out(1);ys<=tmp_out(0);
END PROCESS;
END yejiayu;

2.条件信号赋值语句

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY homework4 IS
  PORT(a,b,c,d,e,f,g,h:IN STD_LOGIC;        --定义八个输入端(由权低到权高):a,b,c,d,e,f,g,h
     st:IN STD_LOGIC;                     --定义一个选通输入端(0时才正常工作):st
     out0,out1,out2:OUT STD_LOGIC;      --定义三个输出端:out0,out1,out2
     yex:OUT STD_LOGIC;           --定义一个扩展端:yex
     ys:OUT STD_LOGIC);             --定义一个无编码指示器:ys
END homework4;
ARCHITECTURE yejiayu OF homework4 IS
SIGNAL tmp_in:STD_LOGIC_VECTOR(7 DOWNTO 0);   --信号数组
SIGNAL tmp_out:STD_LOGIC_VECTOR(4 DOWNTO 0);
BEGIN
tmp_in <= h&g&f&e&d&c&b&a;                    --用&连接8个输入值并赋值给tmp_in
tmp_out <= "11110" WHEN (st='0' AND tmp_in="11111111") ELSE
       "00001" WHEN (st='0' AND tmp_in(7)='0') ELSE
       "00101" WHEN (st='0' AND tmp_in(6)='0') ELSE
       "01001" WHEN (st='0' AND tmp_in(5)='0') ELSE
       "01101" WHEN (st='0' AND tmp_in(4)='0') ELSE
       "10001" WHEN (st='0' AND tmp_in(3)='0') ELSE
       "10101" WHEN (st='0' AND tmp_in(2)='0') ELSE
       "11001" WHEN (st='0' AND tmp_in(1)='0') ELSE
       "11101" WHEN (st='0' AND tmp_in(0)='0') ELSE
       "11111" WHEN (st='1');
out2<=tmp_out(4);out1<=tmp_out(3);out0<=tmp_out(2);yex<=tmp_out(1);ys<=tmp_out(0);
END yejiayu;

保存后编译仿真,得到波形图:

在第二个方法中,要去掉PROCESS哦- ̗̀(๑ᵔ⌔ᵔ๑)

相关文章
|
编解码 芯片
STM32--TIM定时器(2)
STM32--TIM定时器(2)
565 0
|
传感器
STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)(下)
STM32F407软件模拟I2C实现MPU6050通讯(CUBEIDE)(下)
1157 0
|
存储 监控 数据挖掘
云MES:数字化转型的引擎,企业上云的强力推手
云MES系统与企业上云的紧密合作,使得企业能够更加灵活地应对市场变化,快速响应客户需求。无论是新产品的快速研发与上市,还是生产线的快速调整与优化,云MES系统都能提供强有力的支持,助力企业在激烈的市场竞争中占据先机。
778 10
云MES:数字化转型的引擎,企业上云的强力推手
|
10月前
|
Python
阿里云百炼大模型生成贪吃蛇小游戏
阿里云百炼大模型生成的贪吃蛇小游戏增加了背景音乐功能。通过Pygame的`mixer`模块,实现背景音乐的加载和播放。关键步骤包括:1. 安装Pygame;2. 准备音乐文件;3. 修改代码以初始化混音器并加载音乐。游戏开始时自动播放背景音乐,支持无限循环。此外,还可以根据需要调整游戏速度、难度及添加更多音效。
201 13
阿里云百炼大模型生成贪吃蛇小游戏
|
弹性计算 数据中心
便宜香港服务器推荐,阿里云24元1个月,288元一年
便宜香港服务器推荐,阿里云24元1个月,288元一年,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量
|
存储 传感器 编解码
STM32外设系列—BH1750
本文详细介绍了BH1750的特点,原理图,IIC通信协议。给出了BH1750程序设计,能够实时获取周围环境光照强度。最后,给出了两种拓展应用,并说明了实现思路。
2015 0
STM32外设系列—BH1750
|
Rust 安全 C++
游戏引擎的未来:是Rust成为新王,还是C++仍占鳌头?
【8月更文挑战第31天】随着游戏行业的快速发展,对高性能、安全且易维护的游戏引擎需求日益增长。虽然C++长期占据主导地位,但Rust语言凭借其内存安全和高性能的特点,逐渐成为游戏引擎开发的新选择。Rust通过所有权机制和强大的类型系统,在保证内存安全的同时实现了与C++相当的性能,有助于提前发现潜在错误。尽管Rust在生态系统成熟度和学习曲线上仍面临挑战,其在游戏引擎领域的潜力正逐渐被认可。随着Rust社区的发展和工具链的完善,Rust有望成为游戏引擎开发的重要选项。
554 0
|
存储 消息中间件 Java
【分布式链路追踪技术】sleuth+zipkin
【分布式链路追踪技术】sleuth+zipkin
207 2
|
Python
NumPy 中级教程——广播(Broadcasting)
NumPy 中级教程——广播(Broadcasting)
279 1
|
Prometheus Cloud Native Linux
Linux|错误集锦|prometheus Error on ingesting samples that are too old or are too far into the future的解决
Linux|错误集锦|prometheus Error on ingesting samples that are too old or are too far into the future的解决
784 0
Linux|错误集锦|prometheus Error on ingesting samples that are too old or are too far into the future的解决
下一篇
oss教程