差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
3_to_8_decoder [2021/10/02 16:27]
gongyu 创建
3_to_8_decoder [2021/10/09 11:05] (当前版本)
gongyu
行 1: 行 1:
 ## 组合逻辑中的3:​8译码器 ## 组合逻辑中的3:​8译码器
 +  - 掌握38译码器的基本原理
 +  - 掌握组合逻辑的设计
 +  - 掌握case的基本语法
 +  - 使用拨码开关实现译码器输入功能
 +  - 基于小脚丫STEP FPGA的拨码开关输入,LED输出实现38译码器功能
  
 ### 1. 知识点 ### 1. 知识点
 +译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号或另外一个代码。
 +38译码器由三路信号输入,八路信号输出的译码器(2^3 = 8)。
 +以芯片74HC138为例:
 +{{ :​74hc138原理图.jpg |74hc138原理图}}
 +{{ :​74hc138真值表.jpg |74hc138真值表}}
 +由上图芯片使能由E1,E2,E3共同控制
 +三路信号输入:A0,A1,A2
 +八路信号输出:Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7
  
-### 2. CircuitJS电路仿真+### 2. 原理图
  
-### 3原理图+{{drawio>​decode38_stepfpga_block.png}}
  
-### 4. Verilog代码+结合74HC138的结构原理及小脚丫FPGA的硬件配置,我们使用: 
 +  - 一个拨码开关(S1)替E1、E2和E3的逻辑运算结果,作为芯片使能管脚 
 +  - 三个拨码开关(S2、S3、S4)作为38译码器的三路信号输入管脚 
 +  - 八个LED灯作为38译器的八路信号输出管脚
  
-### 5. 管脚分配+{{ :​38译码器程序设计框图.jpg |38译码器程序设计框图}} 
 + 
 +通过38译码器的原理及程序设计框图,我们不难发现这是一个比较简单的组合逻辑设计。 
 + 
 +正如我们在原理及硬件连接中描述的,我们需要一路芯片使能端口、三路信号输入端口和八路信号输出端口。模块端口设计如下: 
 + 
 +### 3. Verilog代码 
 +<code verilog>​ 
 +// ******************************************************************** 
 +// >>>>>>>>>>>>>>>>>>>>>>>>>​ COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<​ 
 +// ******************************************************************** 
 +// File name    : decode38.v 
 +// Module name  : decode38 
 +// Author ​      : STEP 
 +// Description ​ : 3-8decode control LED 
 +// Web          : www.stepfpga.com 
 +//  
 +// -------------------------------------------------------------------- 
 +// Code Revision History :  
 +// -------------------------------------------------------------------- 
 +// Version: |Mod. Date:   ​|Changes Made: 
 +// V1.0     ​|2021/​10/​08 ​  ​|Initial ver 
 +// -------------------------------------------------------------------- 
 +// Module Function:​利用3路开关的状态作为输入,通过3-8译码实现控制LED灯的显示。 
 +  
 +module Decode38  
 +
 +input Enable, ​                                  //​Enable to make the logice work 
 +input [2:0] A_in,                               //3 input signals 
 +output reg [7:0] Y_out                          //8 decoded signals 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 
 + 
 +endmodule 
 +</​code>​ 
 + 
 +{{ :​decode38_verilog.png |}} <WRAP centeralign>​ WebIDE里的代码界面 </​WRAP>​ 
 + 
 + 
 +### 4. 管脚分配 
 +{{ :​decode38_pinout.png |}} <WRAP centeralign>​ Web IDE里的管脚分配 </​WRAP>​ 
 + 
 + 
 +### 5. 板上验证
  
-### 6. 板上验证