差别

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

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
3_to_8_decoder [2021/10/02 16:35]
gongyu
3_to_8_decoder [2021/10/09 11:05] (当前版本)
gongyu
行 1: 行 1:
 ## 组合逻辑中的3:​8译码器 ## 组合逻辑中的3:​8译码器
- 
-### 1. 知识点 
- 
-### 2. CircuitJS电路仿真 
- 
-### 3. 原理图 
- 
-### 4. Verilog代码 
- 
-### 5. 管脚分配 
- 
-### 6. 板上验证 
- 
-=====38译码器===== 
- 
-====硬件平台==== 
------- 
-  - [[STEP-MXO2第一代]] 
-  - [[STEP-Baseboard]] 
- 
-====设计要求==== 
------- 
   - 掌握38译码器的基本原理   - 掌握38译码器的基本原理
   - 掌握组合逻辑的设计   - 掌握组合逻辑的设计
   - 掌握case的基本语法   - 掌握case的基本语法
   - 使用拨码开关实现译码器输入功能   - 使用拨码开关实现译码器输入功能
-  - 基于小脚丫STEP FPGA Base Board开发平台拨码开关输入,LED输出实现38译码器功能 +  - 基于小脚丫STEP FPGA拨码开关输入,LED输出实现38译码器功能
- +
-====工作原理==== +
------- +
- +
-===38译码器原理=== +
-------+
  
 +### 1. 知识点
 译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号或另外一个代码。 译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号或另外一个代码。
- 
 38译码器由三路信号输入,八路信号输出的译码器(2^3 = 8)。 38译码器由三路信号输入,八路信号输出的译码器(2^3 = 8)。
- 
 以芯片74HC138为例: 以芯片74HC138为例:
- 
 {{ :​74hc138原理图.jpg |74hc138原理图}} {{ :​74hc138原理图.jpg |74hc138原理图}}
- 
 {{ :​74hc138真值表.jpg |74hc138真值表}} {{ :​74hc138真值表.jpg |74hc138真值表}}
- 
 由上图芯片使能由E1,E2,E3共同控制 由上图芯片使能由E1,E2,E3共同控制
- 
 三路信号输入:A0,A1,A2 三路信号输入:A0,A1,A2
- 
 八路信号输出:Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7 八路信号输出:Y0,Y1,Y2,Y3,Y4,Y5,Y6,Y7
  
 +### 2. 原理图
  
 +{{drawio>​decode38_stepfpga_block.png}}
  
-====硬件连接==== +结合74HC138的结构原理及小脚丫FPGA的硬件配置,我们使用: 
------- +  - 一个拨码开关(S1)替代E1、E2和E3的逻辑运算结果,作为芯片使能管脚 
-结合74HC138的结构原理及实验平台[[STEP-Baseboard]]的硬件配置,我们使用: +  - 三个拨码开关(S2、S3、S4)作为38译码器的三路信号输入管脚
-  - 一个拨码开关(S5)替代E1、E2和E3的逻辑运算结果,作为芯片使能管脚 +
-  - 三个拨码开关(S1、S2、S3)作为38译码器的三路信号输入管脚+
   - 八个LED灯作为38译码器的八路信号输出管脚   - 八个LED灯作为38译码器的八路信号输出管脚
- 
-{{:​图11.拨码模块电路连接.png ​  ​|拨码模块电路连接}} 
-{{:​图10.LED模块电路连接.png|LED模块电路连接}} 
- 
- 
-====代码设计==== 
----- 
-===设计文件=== 
  
 {{ :​38译码器程序设计框图.jpg |38译码器程序设计框图}} {{ :​38译码器程序设计框图.jpg |38译码器程序设计框图}}
行 73: 行 31:
 正如我们在原理及硬件连接中描述的,我们需要一路芯片使能端口、三路信号输入端口和八路信号输出端口。模块端口设计如下: 正如我们在原理及硬件连接中描述的,我们需要一路芯片使能端口、三路信号输入端口和八路信号输出端口。模块端口设计如下:
  
 +### 3. Verilog代码
 <code 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 ​ module Decode38 ​
 ( (
-input Enable, +input Enable, ​                                  //Enable to make the logice work 
-input [2:0] A_in, +input [2:0] A_in,                               //3 input signals 
-output reg [7:0] Y_out+output reg [7:0] Y_out                          //8 decoded signals out
 ); );
-</​code>​ 
  
-逻辑部分,当芯片使能信号无效时,输出全部置高,当芯片使能信号有效时,根据三路信号的输入状态译码控制八路信号输出。 
- 
-<code verilog> 
 always@(A_in or Enable) begin always@(A_in or Enable) begin
     if (Enable)     if (Enable)
行 100: 行 72:
     else Y_out = 8'​b11111111;​     else Y_out = 8'​b11111111;​
 end end
-</​code>​ 
  
-===测试文件=== +endmodule
- +
-测试文件中,我们要生成被测文件输入信号需要的激励,我们设计Enable信号每隔200ns(200个时间单位)进行翻转,三路信号输入为每20ns取随机值($random)。 +
- +
-<code verilog>​ +
-reg Enable; +
-reg [2:0] A_in; +
-initial +
- begin +
- Enable = 1'​b0;​ +
- A_in = 3'​b000;​ +
- end +
-  +
-always Enable = #200 ~Enable; +
-always A_in = #20 $random;+
 </​code>​ </​code>​
  
-引脚分配如下: +{{ :decode38_verilog.png |}} <WRAP centeralign>​ WebIDE里的代码界面 </​WRAP>​
- +
-^ 管脚名称 | Enable| A_in[0]| A_in[1] ​ | A_in[2] ​ | Y_out[0] ​ |Y_out[1] ​ |Y_out[2] ​ |Y_out[3] ​ |Y_out[4] ​ |Y_out[5] ​ |Y_out[6] ​ |Y_out[7] ​ | +
-^ FPGA管脚 | P12| M13| M14  | N13  |B14  |C14  |E14  |F14  |G14  |J14  |K14  |L14  | +
-====仿真结果==== +
- +
-{{:38译码器仿真.jpg|38译码器仿真}} +
-====资源报告==== +
- +
-^ 资源 | 数量 ​ | 比例 ​ | 说明 ​ | +
-^ LUTs | 8   | 1%   ​| ​  |  +
-^ 寄存器 | 0    | 0% |   | +
-^ 存储器 | 0  | 0%   ​| ​   | +
-^ IO管脚 ​  | 12 |   ​| ​   | +
-^ 时钟频率 | 25MHz |   ​| ​   | +
- +
-====知识点==== +
- +
-  * 组合逻辑 +
  
-====参考文档==== 
-  * {{:​machxo2familydatasheet.pdf|Lattice MachXO2数据手册}} 
  
-====相关文档====+### 4. 管脚分配 
 +{{ :​decode38_pinout.png |}} <WRAP centeralign>​ Web IDE里的管脚分配 </​WRAP>​
  
-^ **文件名称** ​ | **功能** | 
-^ **[[Decode38.v]]** | **38译码器** | 
-^ **[[Decode38_test.v]]** | **测试文件** | 
  
 +### 5. 板上验证