硬件描述语言实验七:译码器实验

本文介绍了如何使用VHDL语言设计一个显示十六进制数字的LED数码管译码电路,详细步骤包括建立工程、编写代码、编译调试和在HEDL-2实验箱上的应用。通过实验,学习者掌握了VHDL的使用和译码器在电路设计中的应用。
摘要由CSDN通过智能技术生成

预习报告部分

  • 实验目的:进一步练习VHDL语言组合逻辑的描述方法。
  • 实验原理:实验箱的LED数码管为共阳极,段选线a(LEDC_a)、b、…、dp引脚分别为173、171、168、167、166、164、162、160,低电平有效。字选1(LEDC1)线引脚为148,低电平有效。本实验可与实验六相结合,当实验六编码为空或非法时字选无效,无显示;编码正常时,显示十六进制编码值。
  • 实验内容:

设计一个显示十六进制数字的LED数码管译码电路,实体名称为“transcode_led”,其输入与输出的逻辑关系如下表所示。

输入

输出

code_input(4位)

a

b

c

d

e

f

g

dp

0

0

0

0

0

0

0

0

0

0

1

1

0

0

0

1

1

0

0

1

1

1

1

1

1

1

1

1

0

1

1

1

0

0

0

1

  • 实验所用设备:PC个人计算机、Windows操作系统、Quartus II集成开发环境软件、HEDL-2实验箱。
  • 实验步骤:①建立工程、②编辑代码、③编译及修改错误、④建立仿真波形并仿真、⑤应用HEDL-2实验箱观察实际效果,分析设计是否正确。

实验报告部分

一、实验步骤:

二、 实验数据及结果分析

通过对多组实验数据的分析,判断其符合预期结果。如图所示,并且实验箱正常亮起符合实验预期。

三、实验结论

通过本次实验,我们深入了解了译码器的工作原理和使用方法,并通过实际操作掌握了它们在电路设计中的应用。

四、总结与心得体会

VHDL作为一种硬件描述语言,有助于我们以一种结构化和可扩展的方式描述和实现数字电路。

在实验中,我们需要理解译码器的逻辑行为和功能映射,这对于正确编写VHDL代码至关重要。

在编写VHDL代码时,需注意语法规则和信号命名约定等细节问题。

在进行测试时,确保提供不同的输入模式,并验证输出是否符合预期结果,以确保译码器的正确性。

五、附录(实验源码)

   library ieee;
use ieee.std_logic_1164.all;
 
entity encode_16_4 is
port(indata:in std_logic_vector(15 downto 0);
     dout : out std_logic_vector(3 downto 0);
  nul,inv : out std_logic
  );
end entity;
 
architecture rtl of encode_16_4 is 
begin      
  process(indata) is
  begin
  case indata is
when"0111111111111111"=>dout<="0000";nul<='0';inv<='0';
when"1011111111111111"=>dout<="0001";nul<='0';inv<='0';
when"1101111111111111"=>dout<="0010";nul<='0';inv<='0';
when"1110111111111111"=>dout<="0011";nul<='0';inv<='0';
when"1111011111111111"=>dout<="0100";nul<='0';inv<='0';
when"1111101111111111"=>dout<="0101";nul<='0';inv<='0';
when"1111110111111111"=>dout<="0110";nul<='0';inv<='0';
when"1111111011111111"=>dout<="0111";nul<='0';inv<='0';
when"1111111101111111"=>dout<="1000";nul<='0';inv<='0';
when"1111111110111111"=>dout<="1001";nul<='0';inv<='0';
when"1111111111011111"=>dout<="1010";nul<='0';inv<='0';
when"1111111111101111"=>dout<="1011";nul<='0';inv<='0';
when"1111111111110111"=>dout<="1100";nul<='0';inv<='0';
when"1111111111111011"=>dout<="1101";nul<='0';inv<='0';
when"1111111111111101"=>dout<="1110";nul<='0';inv<='0';
when"1111111111111110"=>dout<="1111";nul<='0';inv<='0';
when"1111111111111111"=>dout<="0000";nul<='1';inv<='0';
when others=>dout<="0000";nul<='0';inv<='1';
end case;

end process;
end rtl;

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值