预习报告部分
- 实验目的:进一步练习VHDL语言组合逻辑的描述方法。
- 实验原理:本实验先编写entity声明编码器输入端口indata和输出端口dout,inv,再编写一个architecture,描述编码器的逻辑行为。可以使用if-else语句或case语句来实现编码器的逻辑功能。
- 实验内容:
设计一个具有无有效输入标志和非法输入标志输出的16-4编码器,实体名称为“encode_16_4”,其引脚名称和逻辑功能如下表所示。
输入 | 输出 | |||||||||||
in0 | In1 | in2 | in3 | in14 | in15 | dout(3位总线) | nul | inv | ||||
0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | |
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | |
0 | 0 | |||||||||||
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | |
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | |
其他输入值 | 0 | 0 | 0 | 0 | 0 | 1 |
- 实验所用设备:PC个人计算机、Windows操作系统、Quartus II集成开发环境软件、HEDL-2实验箱。
五、实验步骤:①建立工程、②编辑代码、③编译及修改错误、④建立仿真波形并仿真、⑤应用HEDL-2实验箱观察实际效果,分析设计是否正确。
实验报告部分
- 实验步骤:
二、 实验数据及结果分析
通过对多组实验数据的分析,判断其符合预期结果。如图所示,并且实验箱正常亮起符合实验预期。
三、实验结论
通过以上步骤,实验中已经成功编写了一个编码器的VHDL模型,并进行了功能验证。将不同的输入模式应用到编码器,观察输出输出与期望输出匹配,确定了编码器实现的正确性。
四、总结与心得体会
在实验中,理解编码器的逻辑行为是非常重要的,这样才能正确地进行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;