我们用一个3-8解码器结束了这个组合逻辑电路的介绍,最后我们准备了一个有点酸的任务来保证每个人大脑神经可以得到充分的摩擦。闲话不多说,让咱们现在开始吧。
这个实验的任务是搭建一个3-8解码器,解码结果会通过小脚的LED灯显示出来。
这不听起来很难,可以想象很多同学会马上开始画8行真值表,然后用卡诺图简化,根据最后的逻辑表达式画出电路图。这种方法当然没有错。然而,如果面对一个有更多位数的系统,如4-16或8-256解码器,它不会建立一个有数百行的真值表并执行逻辑运算听起来并不科学。
在这里,我们将采用模块化思维来完成我们的实验设计。
在开始模块化设计之前,让做一个2-4解码器,是解码器系列中最底层的基本模块。
在这段代码中,我们使用行为级描述,并根据真值表直接关联输入和输出的各种组合。可以看出,行为级写法甚至不需要搭建门电路,只需要通过输入输出的对应关系就可以搭建,所以是最抽象的。
有了最基本的模块,如何通过它搭建一个3-8解码器?现在,让给原始真值表加一个使能信号E,然后看新的真值表。可以发现,当E处于低电平时,无论输入的值是多少,输出的前四位都是0。当E为高电平时,2-4解码器的输出结构仍在右侧。
我们可以将表3视为3-8解码器的真值表,只是输入端的最高位被E取代,由于E为低电平时输出端的最高四位全为0,因此必须确保输出端最后四位(黄色)的赋值不会影响前四位的输出。
从表3不难看出,黄框和红框对应的是一个带使能端的2-4解码器,使能端E控制前后半端比特的输出结果。也就是说,一个3-8解码器可以由两个2-4解码器组成。类似地,一个4-16解码器可以由两个3-8解码器组成,依此类推。
下图显示了启用E的2-4解码器。实际上,它这只是对前面代码的一个小小的修改,所以我们赢了这里不详细写出来,给你一个自己练习的机会。
接下来,根据前面的分析,我们画出由两个2-4译码器组成的3-8译码器的结构。
下面是Verilog写的一个3-8解码器。在程序中,我们两次调用了2-4解码器的子模块。注意子模块文件需要和decode38文件放在同一个项目目录下,否则会成为隔壁老王。
当你在图和代码之间反复徘徊了几轮,有了痛苦的理解,你可以把自己编译好的程序下载到你的小脚丫里,然后通过实验来测试你的代码。
实际上,当我们分别将输出D7-D1到L7-L1对应到脚上,并将输入X2-X0到SW3-SW1对应到脚上时,请判断以下LED状态(低亮度)。
半天折腾,你终于拿到了代码,并且在你的小脚丫上成功验证了你的设计,所以你终于可以放心地尝试通过模块化设计思路来构建一个4-16甚至更多比特的解码器了。编辑:CC
标签:解码器真值表代码