您的位置  > 互联网

一个3-8译码器对组合逻辑电路的介绍

本实验的任务是搭建一个3-8的解码器,并通过小脚的LED灯显示解码结果。

听起来并不难,我可以想象很多同学会立即开始画8行真值表,然后通过卡诺图进行简化,根据最终的逻辑表达式画出门电路图。 这种方法当然没有什么问题,但如果你面对的是位数更多的系统,比如 4-16 或 8-256 解码器,构建一个数百行的真值表并执行逻辑运算可能听起来不太好。 科学。

这里我们将使用模块化的方法来完成我们的实验设计。

在开始模块化设计之前,我们首先制作一个2-4解码器,这是解码器系列中最底层的基础模块。

A1

A0

Y3

Y2

Y1

Y0

这次我们使用行为级描述(-level)来编写代码,根据真值表直接关联输入和输出的各种组合。 可以看出,行为级的写法甚至不需要门电路的搭建。 它只能通过输入-输出对应关系来构造。 因此,它是最抽象的,也意味着更快的计算速度? 。

[1:0]A, //定义两个输入

reg[3:0] Y //定义输出4位解码结果对应的LED

);

@(A) //Block语句,当a的值改变时执行一次过程块

开始

案例(A)

2'b00:Y = 4'b0001; //2-4解码结果

2'b01:Y = 4'b0010;

2'b10:Y = 4'b0100;

2'b11:Y = 4'b1000;

结尾

有了最基本的模块,如何通过它搭建一个3-8的解码器呢? 现在,我们在原来的真值表中添加一个使能信号E,然后看看新的真值表。 可以发现,当E为低电平时,无论输入值如何,前四位的输出都是0。当E为高电平时,右侧仍然是2-4解码器的输出结构。

A1

A0

Y3

Y2

Y1

Y0

我们可以将表 3 视为 3-8 解码器的真值表,只不过将输入的最高位替换为 E。由于 E 为低电平时输出的 4 个最高位均为 0,因此我们保证赋值至最后四位输出(黄色)不会影响前四位的输出。

A2

A1

A0

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

A1

A0

Y3

Y2

Y1

Y0

y3

y2

y1

y0

从表3中不难看出,黄色和红色方框对应的是带使能端的2-4解码器,使能端E控制前后半位数字的输出结果。 换句话说,一个3-8解码器可以由两个2-4解码器组成。 同样,一个4-16解码器可以由两个3-8解码器组成,以此类推。

启用 E 的 2-4 解码器如下所示。 其实就是对之前的代码稍作修改。 这里就不详细写出来,给大家自己练习的机会。

接下来,根据前面的分析,我们画出了两个2-4解码器组成的3-8解码器的结构。

下面是用编写的3-8解码器。 在程序中,我们调用了2-4解码器的子模块两次。 注意,子模块文件需要和文件放在同一个项目目录下,否则就成了邻家老人了。

输入线[2:0] X,

线[7:0]D

);

upper //调用第一个子模块,命名为upper

.a(X[1:0]), //将大模块的X1、X0与下模块的A1、A0匹配

.E(X[2]), //将大模块的X2与下模块的E进行匹配

.Y(D[7:4]) //将大模块的D7-D4与下模块的Y3-Y0匹配

);

lower //调用第二个子模块,命名为lower

.a(X[1:0]), //将大模块的X1、X0与下模块的A1、A0匹配

.E(!X[2]), //将大模块的X2与下模块的E进行匹配

.Y(D[3:0]) //将大模块的D7-D4与下模块的Y3-Y0匹配

);

当你在图片和代码之间反复徘徊了几轮,痛苦的领悟之后,你可以把你编译好的程序下载到 Foot中,然后通过实验来测试你的代码。

作为练习,当我们将输出D7-D1分别对应小脚上的L7-L1,输入X2-X0分别对应小脚的SW3-SW1时,请判断以下LED状态。

折腾了半天,你终于拿到了代码,并在你的小脚丫上成功验证了你的设计。 那么带着十足的信心,你终于可以上床睡觉尝试通过模块化的设计思路搭建4-16了。 更多位的解码器。

当然啦~我知道你再也不会真正老老实实地写程序了,所以我在这里问几个简单的问题,你可以自己动手思考一下。

Q1:构建一个4-16解码器需要多少个3-8解码器? 回答:

Q2:构建一个4-16解码器需要多少个2-4解码器? 回答:

Q3:构建一个 5-32 解码器需要多少个 2-4 解码器? 回答:

Q4:小明家的4-16解码器售价200元,小李家的2-4解码器售价50元。 现在您需要一个4-16解码器,您会如何选择:

A:去小明家买

B:去小李家买