预习报告部分
- 实验目的:进一步练习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;