=====38译码器=====
====硬件平台====
------
- [[STEP-MXO2第一代]]
- [[STEP-Baseboard]]
====设计要求====
------
- 掌握38译码器的基本原理
- 掌握组合逻辑的设计
- 掌握case的基本语法
- 使用拨码开关实现译码器输入功能
- 基于小脚丫STEP FPGA Base Board开发平台拨码开关输入,LED输出实现38译码器功能
====工作原理====
------
===38译码器原理===
------
译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号或另外一个代码。
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
====硬件连接====
------
结合74HC138的结构原理及实验平台[[STEP-Baseboard]]的硬件配置,我们使用:
- 一个拨码开关(S5)替代E1、E2和E3的逻辑运算结果,作为芯片使能管脚
- 三个拨码开关(S1、S2、S3)作为38译码器的三路信号输入管脚
- 八个LED灯作为38译码器的八路信号输出管脚
{{:图11.拨码模块电路连接.png |拨码模块电路连接}}
{{:图10.LED模块电路连接.png|LED模块电路连接}}
====代码设计====
----
===设计文件===
{{ :38译码器程序设计框图.jpg |38译码器程序设计框图}}
通过38译码器的原理及程序设计框图,我们不难发现这是一个比较简单的组合逻辑设计。
正如我们在原理及硬件连接中描述的,我们需要一路芯片使能端口、三路信号输入端口和八路信号输出端口。模块端口设计如下:
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
===测试文件===
测试文件中,我们要生成被测文件输入信号需要的激励,我们设计Enable信号每隔200ns(200个时间单位)进行翻转,三路信号输入为每20ns取随机值($random)。
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;
引脚分配如下:
^ 管脚名称 | 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数据手册}}
====相关文档====
^ **文件名称** | **功能** |
^ **[[Decode38.v]]** | **38译码器** |
^ **[[Decode38_test.v]]** | **测试文件** |