基于VHDL的编码器和译码器的设计 第8页 共20页
a<=\ elsif i(6)='1'then a<=\ elsif i(5)='1'then a<=\ elsif i(4)='1'then a<=\ elsif i(3)='1'then a<=\ elsif i(2)='1'then a<=\ elsif i(1)='1'then a<=\ elsif i(0)='1'then a<=\ else gs<='0'; end if; end process;
3.2译码器
3.2.1 译码器的工作原理
二进制译码器的输入是一组二进制代码,输出是一组与输入代码一一对应的高、低电平信号。因此,译码器是编码器的反操作。
对于3线-8线译码器来说,3位二进制共有8种状态,所以对应的输出有8种状态。例如:对于二进制代码111来说,输出为10000000。由于3线-8线译码器只需要输入3根线即可输出8种不同的状态,对信息的译码有很大的好处,所以在硬件电路中占有较重要的地位,实验中也经常用到。3线-8线译码器功能表如表3-2所示,实现逻辑电路图如图3.3所示:
表3-2 3线-8线译码器的功能表
基于VHDL的编码器和译码器的设计 第9页 共20页
输 入 A2 0 0 0 0 1 1 1 1 A1 0 0 1 1 0 0 1 1 A0 0 1 0 1 0 1 0 1 Y7 0 0 0 0 0 0 0 1 Y6 0 0 0 0 0 0 1 0 Y5 0 0 0 0 0 1 0 0 输 出 Y4 0 0 0 0 1 0 0 0 Y3 0 0 0 1 0 0 0 0 Y2 0 0 1 0 0 0 0 0 Y1 0 1 0 0 0 0 0 0 Y0 1 0 0 0 0 0 0 0
图3.3 3线-8线优先编码器
对于2线-4线译码器来说,2位二进制共有4种状态,分别为:00、01、10、11。所以对应的输出有4种状态,分别为:0001、0010、0100、1000。例如:对于二进制代码00来说,输出为0001,对于11来说,输出为1000。2线-4线译码器是所有译码器中结构最简单,其实现的功能也比较少,但是在硬件电路设计中是一个非常重要的元件,在实际应用中也经常用到这种译码器。2线-4线译码器功能表如表3-3所示,实现的电路图如图3.4所示:
表3-3 2线-4线译码器的功能表
基于VHDL的编码器和译码器的设计 第10页 共20页 输 入 A1 0 0 1 1 A0 0 1 0 1 Y3 0 0 0 1
输 出 Y2 0 0 1 0 Y1 0 1 0 0 Y0 1 0 0 0
图3.4 2线-4线译码器
3.2.2 3线-8线译码器的设计
关于3线-8线译码器的工作框图如图3.5所示。
.
图3.5 3线-8线译码器工作框图
3线-8线译码器由VHDL程序来实现,下面是其中一段VHDL关键代码 process(datain) begin
case datain is
when \ when \ when \
基于VHDL的编码器和译码器的设计 第11页 共20页
when \ when \ when \ when \ when \ when others=>dataout<=\ end case; end process;
3.2.3 2线-4线译码器的设计
关于2线-4线译码器的工作框图如图3.6所示。
图3.6 2线-4线译码器工作原理图
2线-4线译码器由VHDL程序来实现,下面是其中一段VHDL关键代码:
process(i)
begin case i is
when \ when \ when \ when \ when others =>o<=\ end case; end process;
基于VHDL的编码器和译码器的设计 第12页 共20页
4 系统仿真与时序分析
使用VHDL语言编写程序后,接下来要做的就是验证程序的正确性,利用 Max+plusII导入源程序后,对源程序进行编译,然后进行模拟仿真,可以得到一个波形文件,可以非常直观知道程序是否正确。在进行模拟仿真之后,为了能了解软件模拟仿真中各信号之间的具体延时量,可以用MAX+plusII提供的时序分析功能来做时序分析。在MAX+plusII中启动时序分析,分析完成后,各信号之间的延时时间以表格形式显示出来,表格中的数据即为两信号之间的延时时间。
4.1 8线-3线优先编码器仿真及时序分析
8线-3线优先编码器由VHDL程序实现后,其仿真图如图4.1所示。
图4.1 8线-3线优先编码器功能时序仿真
对其仿真图进行仿真分析:gs为编码输出标志,i为输入信号组,它由i7-i0八个输入信号组成。a为输出信号组, 它由a2-a0三个二进制代码输出信号组成。gs为1时候表示输出。当i7为1时,即输入为:1*******时,输出111,当i7为0时,输出由优先级仅次于i7的i6决定,即输入为:01******时,输出110,紧接着依次类推,分别得出输入为:001*****时,输出101,输入为:0001****时,输出100,输入为00001***时,输出为011,输入为000001**时,输出010,输入为0000001*时,输出001,输入为00000001时,输出为000。 8线-3线优先编码器的时序分析如图4.2: