硬件描述语言实验六:编码器实验

预习报告部分

  • 实验目的:进一步练习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;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值