**这是本文档旧的修订版!**

组合逻辑中的3:8译码器

  1. 掌握38译码器的基本原理
  2. 掌握组合逻辑的设计
  3. 掌握case的基本语法
  4. 使用拨码开关实现译码器输入功能
  5. 基于小脚丫STEP FPGA的拨码开关输入,LED输出实现38译码器功能

1. 知识点

译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号或另外一个代码。 38译码器由三路信号输入,八路信号输出的译码器(2^3 = 8)。 以芯片74HC138为例: 74hc138原理图 74hc138真值表 由上图芯片使能由E1,E2,E3共同控制 三路信号输入:A0,A1,A2 八路信号输出:Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7

2. CircuitJS电路仿真

3. 原理图

decode38_stepfpga_block.png

结合74HC138的结构原理及小脚丫FPGA的硬件配置,我们使用:

  1. 一个拨码开关(S1)替代E1、E2和E3的逻辑运算结果,作为芯片使能管脚
  2. 三个拨码开关(S2、S3、S4)作为38译码器的三路信号输入管脚
  3. 八个LED灯作为38译码器的八路信号输出管脚

38译码器程序设计框图

通过38译码器的原理及程序设计框图,我们不难发现这是一个比较简单的组合逻辑设计。

正如我们在原理及硬件连接中描述的,我们需要一路芯片使能端口、三路信号输入端口和八路信号输出端口。模块端口设计如下:

4. Verilog代码

module Decode38 
(
input Enable,
input [2:0] A_in,
output reg [7:0] Y_out
);

逻辑部分,当芯片使能信号无效时,输出全部置高,当芯片使能信号有效时,根据三路信号的输入状态译码控制八路信号输出。

always@(A_in or Enable) begin
    if (Enable)
		case (A_in)
			3'b000: Y_out = 8'b11111110;
			3'b001: Y_out = 8'b11111101;
			3'b010: Y_out = 8'b11111011;
			3'b011: Y_out = 8'b11110111;
			3'b100: Y_out = 8'b11101111;
			3'b101: Y_out = 8'b11011111;
			3'b110: Y_out = 8'b10111111;
			3'b111: Y_out = 8'b01111111;
			default:Y_out = 8'b11111111;
		endcase
    else Y_out = 8'b11111111;
end

5. 管脚分配

6. 板上验证