实验三 译码器 编码器 3.1 实现3-8译码器

一、实验设计目标

在FPGA中使用行为描述语句实现3-8译码器。

二、实验设计思路

译码器电路有n个输入和2n个输出,每个输出都对应着一个可能的二进制输入。本实验设计实现一个3-8译码器,表3.1给出了该译码器的真值表。从真值表可以写出img的逻辑表达式:

img

img

img

img

img

img

img

img (3.1)

3.1 3-8译码器真值表

img img img img img img img img img img img
0 0 0 0 0 0 0 0 0 0 1
0 0 1 0 0 0 0 0 0 1 0
0 1 0 0 0 0 0 0 1 0 0
0 1 1 0 0 0 0 1 0 0 0
1 0 0 0 0 0 1 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 1 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0

三、功能模块图与输入输出引脚说明

译码器工程包含顶层模块decode38与底层模块decode_module,图3.1是整个工程的模块功能图。下面介绍一下顶层模块各引脚的功能:

img

3.1 译码器模块功能图

(1)SW_In:拨动开关输入,共有三位。SW_In[2:0]分别连接“3-8译码器”的输入“a2、a1、a0”。

(2)LED_Out:输出到LED灯,共有八位。LED_Out[7:0]分别连接“3-8译码器”的输出“y7~y0”,通过8个LED灯的亮灭情况来判断二进制输入。

四、程序设计

​ 图3.2是截取自底层模块decode_module的部分代码:

5-6:输入输出信号声明。

​ 8-15:使用连续赋值语句assign实现y7~y0的逻辑表达式,见公式(3.1)。

img

3.2 逻辑门实验核心代码

五、FPGA管脚配置

以下是Anlogic FPGA的IO Constraint,SW_In[2:0]输入信号分别与开发板上的SW2SW0相连;LED_Out[7:0]输出信号分别与开发板上的LED7LED0相连。

set_pin_assignment { LED_Out[0] } { LOCATION = B14; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[1] } { LOCATION = B15; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[2] } { LOCATION = B16; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[3] } { LOCATION = C15; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[4] } { LOCATION = C16; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[5] } { LOCATION = E13; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[6] } { LOCATION = E16; IOSTANDARD = LVCMOS33; }

set_pin_assignment { LED_Out[7] } { LOCATION = F16; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Sw_In[0] } { LOCATION = A9; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Sw_In[1] } { LOCATION = A10; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Sw_In[2] } { LOCATION = B10; IOSTANDARD = LVCMOS33; }

译码器实验IO Constraint

六、实验结果

当输入信号“a2、a1、a0”分别为“1、0、0”时,根据表3.1,输出信号中y4为“1”,其余全为“0”。即LED4亮,其余全灭。因篇幅有限,其他情况请自行验证。

七、思考与拓展

自行建立工程,使用case语句实现3—8译码器。