如何将两片用3线-8线译码器74ls138和门电路CT74138扩展为4线-16线译码器

2020年09月15日 14:15--浏览 ·
--喜欢 ·
--评论本文中教材是朱震华、唐珂等老师编写的人民邮电出版社出版的《电工电子基础实验》,上机仿真考试使用的软件为美国国家仪器有限公司(N1)所推出的Multisim14.0。受新冠疫情的影响,许多高校在今年上半年均采用线上授课的模式开展教学,电工电子实验这门课也不例外。一台电脑,装好Multisim14.0软件,便可以开始进行仿真实验。个人感觉,仿真实验相较于线下实际操作要简单不少。没有器件本身的故障,没有外界的干扰,轻轻拖动鼠标把应该连好的器件连接起来,仅仅改变仿真导线的颜色便可以十分简易、直观地看清不同颜色的图像波形,电子实验报告的完成时间也比纸质版报告要短。这些优越性,都是线下实验所无法实现的。但是在笔者的学院里,约一个多星期前安排的考试中,并不是所有的同学都取得了理想的成绩,有些同学甚至无法在考试机上按照要求连出相应的逻辑电路而未能通过考试。其中一部分同学对软件的布局、操作已然淡忘,还有一些同学则是数电、模电相关课程的基础不够扎实而导致在考试中束手无策。下面笔者将自己对于软件的一些心得体会陈述于下文,望未能通过考试的同学可以有所收获。先来谈谈这个软件吧,软件的基本安装和配置在这里不做过多陈述,装配好Multisim14.0,打开后界面应该是这样的(笔者的软件是未经汉化的,网络上有汉化补丁,安装即可使用汉化版软件):Multisim14.0起始界面从左向右看第3行第一个图标为Place Source,中文翻译为“放置源”,用通俗一些的话来说就是放置电源和地(常见的有VCC、VDD、AC_Power、DC_Power、Ground等)。Place Source在用软件进行电路仿真的时候,一定要注意接地,不管是什么电路,地线一定要接上,否则仿真电路在运行的时候会报错而无法运行。Place Source旁边的图标为Place Basic,中文翻译为“放置基本”,这里面涵盖了大量的元器件。诸如Switch(开关)、Resistor(电阻)、Capacitor(电容)、Inductor(电感)、RPACK(一种电阻排)这些元器件可能都会在你的电路仿真图中出现。Place Basic这两个按钮涵盖了电路中的绝大多数元器件,但是如果有需求要使用相关门电路的芯片,一般是不需要去翻看列表,因为那样既费时还费力。Multisim14.0的好处再一次体现了出来,不管是打开Place Source还是Place Basic,在右侧总可以看到“Search...”这个按钮。鼠标轻轻一点,便可以随心所欲地搜寻自己需要的元器件,这样便可以找到所有需要的元器件。(不管是从Place Source还是Place Basic进去的Search的功能都是一样的,所有的器件都可以通过这里找到)。搜索元器件下面附上各类常用芯片的编号,方便读者搜寻。双4输入与门:7421双4输入与非门:74208输入与非门:7430四2输入与非门:7400四2输入异或门:74868选1集成数据选择器:74151双4选1集成数据选择器:741533-8线二进制译码器:74138四位同步二进制计数器(十六进制计数器):74161(异步清零同步计数)、74163(同步清零同步计数)四位同步十进制计数器:74160熟,方能生巧。对软件不熟悉,无法将脑海中的电路图落实到软件的仿真图这个问题可以通过多次练习操作软件来实现。考试中,如果不是有100%的把握不要去死背答案,不要去死背答案,不要去死背答案,笔者就认识一个死背平时操作的同学,结果在题目发生变化的时候不知所措,最后未能通过考试。实验课,重在理解其中的道理,知其然也要知其所以然,懂得举一反三、融会贯通,才可以在考试中得心应手,最后心想事成!!笔者不是这方面的专业人员,加上这只是一篇浅谈,叙述过程难免有疏漏不当之处,望广大网友可以在评论区指出来,谢谢!!
学习目的使用3-8译码器,巩固FPGA设计流程以及基础语法的使用理论学习译码器:译码是编码的逆过程,在编码时,每一种二进制代码,都赋予了特定的含义,即都表示了一个确定的信号或者对象。把代码状态的特定含义翻译出来的过程叫做译码,实现译码操作的电路称为译码器。或者说,译码器是可以将输入二进制代码的状态翻译成输出信号,以表示其原来含义的电路。译码器(decoder)是一类多输入多输出组合逻辑电路器件,其可以分为:变量译码和显示译码两类。常见译码:n ->2^n 线显示译码:二进制码 -> 晶码管实战演练硬件设计:使用三个按键作为译码器的输入,通过观察LED灯的亮灭来观察输出信号真值表:嵌入代码法一.{
module ic_74138(
E1,E2,E3,
A,
Y
);
input [2:0] A;
input E1,E2,E3;
output reg [7:0] Y;
always@(*)
begin
if(E3==1&&E2==0&&E1==0)
begin
case(A)
//这里可以用拼接运算符,case({E3, E2, E1})
3'b000:Y=8'b0111_1111;
3'b001:Y=8'b1011_1111;
3'b010:Y=8'b1101_1111;
3'b011:Y=8'b1110_1111;
3'b100:Y=8'b1111_0111;
3'b101:Y=8'b1111_1011;
3'b110:Y=8'b1111_1101;
3'b111:Y=8'b1111_1110; //这里包含所有情况,不会产生latch,所以不需要加default
endcase
end
else
Y=8'b1111_1111;
end
endmodule
}
法二.{
module
decoder3_8
(
input
wire
in1 ,
//输入信号in1
input
wire
in2 ,
//输入信号in2
input
wire
in3 ,
//输入信号in2
output
reg
[7:0]
out
//输出信号out
);
//out:根据3个输入信号选择输出对应的8bit out信号
always@(*)
if({in1, in2, in3} == 3'b000)
//使用"{}"位拼接符将3个1bit数据按照顺序拼成一个3bit数据
out = 8'b0000_0001;
else
if({in1, in2, in3} == 3'b001)
out = 8'b0000_0010;
else
if({in1, in2, in3} == 3'b010)
out = 8'b0000_0100;
else
if({in1, in2, in3} == 3'b011)
out = 8'b0000_1000;
else
if({in1, in2, in3} == 3'b100)
out = 8'b0001_0000;
else
if({in1, in2, in3} == 3'b101)
out = 8'b0010_0000;
else
if({in1, in2, in3} == 3'b110)
out = 8'b0100_0000;
else
if({in1, in2, in3} == 3'b111)
out = 8'b1000_0000;
else
out = 8'b0000_0001;
}
两种代码的差别两种代码产生的RTL图不一样if-else存在优先级,产生了八个二选一的数据选择器case-endcase语句产生了一个input[2:0]->output[7:0]的译码器附录testbeach{
module
tb_decoder3_8();
//********************************************************************//
//****************** Parameter and Internal Signal *******************//
//********************************************************************//
//wire
define
wire
[7:0]
out;
//reg
define
reg
in1;
reg
in2;
reg
in3;
//********************************************************************//
//***************************** Main Code ****************************//
//********************************************************************//
//初始化输入信号
initial begin
in1 <= 1'b0;
in2 <= 1'b0;
in3 <= 1'b0;
end
//in1:产生输入随机数,模拟输入端1的输入情况
always #10 in1 <= {$random} % 2;
//in2:产生输入随机数,模拟输入端2的输入情况
always #10 in2 <= {$random} % 2;
//in3:产生输入随机数,模拟输入端3的输入情况
always #10 in3 <= {$random} % 2;
initial begin
$timeformat(-9, 0, "ns", 6);
//打印时间格式设置
$monitor("@time %t: in1=%b in2=%b in3=%b out=%b", $time, in1, in2, in3, out);
//监测函数设置
end
//********************************************************************//
//**************************** Instantiate ***************************//
//********************************************************************//
//------------- decoder3_8_inst -------------
//实例化
decoder3_8
decoder3_8_inst(
.in1
(in1),
//input
in1
.in2
(in2),
//input
in2
.in3
(in3),
//input
in3
.out
(out)
//output
[7:0]
out
);
endmodule
}

我要回帖

更多关于 用3线-8线译码器74ls138和门电路 的文章