差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
|
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. 板上验证 | ||