当前位置:首页 > 新闻资讯 > FPGA之家动态 >

FPGA之数电组合电路学习

时间:2024-07-30      来源:网络搜集 关于我们 0

2024年

FPGA数字电路学习之路

IC半导体芯片学习

01

数字电路之组合电路学习

01

组合逻辑电路的分析

3.1

合逻辑电路的分析

02

组合逻辑电路的设

3.2

组合逻辑电路的设

03

竞争与冒险现象消除

3.3

竞争与冒险现象消除

04

常见的组合逻辑电路

3.4

常见的组合逻辑电路

3.4.1编码器

普通编码器(8-3线编码器)

按照3.2的设计步骤,走一遍流程:

功能需求:

输入是,满足约束关系,输出

(1)输入输出关系已经有了,根据输入输出关系列出真值表

(2)根据真值表,得出函数关系

(3)并用卡诺图或者公式法进行化简得到    

(4)画出最后的电路图

根据这个电路图,其实也很容易理解,就是如果要使最低位出现1,只有位为1时,才会出现,换句话说输入的下标数字,输入是的下标001,011,101,111的时候才会有输出为1,其他同理。

最终得到八线三线编码器的封装图如下图所示:    

Verilog 代码:

module encoder83(input I0,input I1,input I2,input I3,input I4,input I5,input I6,input I7,output reg [2:0] Y);always @(*)beginY=3b0; case(1b1) I0:Y=3b000; I1:Y=3b001; I2:Y=3b010; I3:Y=3b011; I4:Y=3b100; I5:Y=3b101; I6:Y=3b110; I7:Y=3b111; default:; endcaseendendmodule

Verilog 仿真代码:

module tb_encoder83();//信号的定义 由于信号I在initial行为级语句中,所以是reg型reg I0;reg I1;reg I2;reg I3;reg I4;reg I5;reg I6;reg I7;wire [2:0] Y;//信号激励的产生initial begin I0=0; I1=0; I2=0; I3=1; I4=0; I5=0; I6=0; I7=0; end//模块元件列化encoder83 encoder83_th(.I0(I0),.I1(I1),.I2(I2),.I3(I3),.I4(I4),.I5(I5),.I6(I6),.I7(I7),.Y(Y));endmodule

所设计生成的符号文件为:    

仿真结果如下:

可以看到的是,当I3输入为1的时候输出为3,也就是011

优先编码器

八线三线优先编码器74HC148,十线四线优先编码器74LS147。特别解释一下,优先编码器,一般是优先级越高,输出数越低,这是由于对偶导致的,通常如果假设输入是高点平有效,那么是正向输出,如果输入是低电平有效,将其对偶过去,就会输出数越低。

(1)八线三线优先编码器74HC148

把数字组合电路的设计流程走一遍:

第一步,列出功能需求,确定输入输出

功能需求:    

输入是,其中的优先级最高,输出,当优先级最高的时候,输出为000,即输出数字越小,优先级越高,当没有输入的时候,默认为输出111,特别注意的是为了更好的扩展,加入了,其中表述电路是否工作,称为使能端或者选通端,称为使能输出端或者选通输出端,表示的是电路工作,无输入,即=1,其中表示的电路工作,有输入,这个端口通常用来进行芯片的扩展的高位。

第二步,根据功能,画出真值表

第三步,根据真值表写出函数表达式

最后一步,根据电路函数表达式画出电路图    

(2)十线四线优先编码器74LS147

实质上将十进制数转换成四位二进制BCD码。

设计分析和八线三线优先编码器一样,具体分析过程参考上面,这里只给出它的真值表。

3.4.2译码器

三线八线译码器

功能需求:        

最典型的就是74HC138,输入是三位二进制的数,输出是0到7下标的输出对应的低电平,也就是输入是高电平有效,输出是低电平有效。其中,那么这个时候电路就是正常的译码状态。

组合逻辑电路的分析过程走一遍:

(1)根据功能需求,列出输入输出端口

(2)根据功能需求,列出输入输出的真值表

(3)根据真值表,列出输出函数表达式,并用卡诺图化简

(4)根据函数表达式,画出对应的电路图    

Verilog代码:

module decoder38(input s1,input s_2,input s_3,input [2:0] data,output reg [7:0] Y);//开始输入数据,74HC138,输入是高电平有效,输出是低电平有效parameter outdata=8b11111110;always @(*)if (!(s1==1&&s_2==0&&s_3==0)) Y[7:0]=8b11111111;else if(data==3d000) Y[7:0]=outdata;else if(data==3d001) Y[7:0]=~((~outdata)<<3d1);else if(data==3d002) Y[7:0]=~((~outdata)<<3d2);else if(data==3d003) Y[7:0]=~((~outdata)<<3d3);else if(data==3d004) Y[7:0]=~((~outdata)<<3d4);else if(data==3d005) Y[7:0]=~((~outdata)<<3d5);else if(data==3d006) Y[7:0]=~((~outdata)<<3d6);else if(data==3d007) Y[7:0]=~((~outdata)<<3d7);endmodule

Verilog仿真代码:

`timescale 1ns / 1psmodule tb_decoder38();reg s1;reg s_2;reg s_3;wire [7:0] Y;reg [2:0] data; //激励信号的产生initial begin s1<=1; s_2<=0; s_3=0; endinitial begin data<=3d0; #10 data<=3d1; #10 data<=3d2; #10 data<=3d3; #10 data<=3d4; #10 data<=3d5; #10 data<=3d6; #10 data<=3d7; #10 data<=3d0; end//元件列化decoder38 #(.outdata(8b11111110))decoder38(.s1(s1), .s_2(s_2),.s_3(s_3),.Y(Y),.data(data));endmodule

仿真波形:

四线八线译码器

四线十线译码器分析与以上相同,下面只给出74HC42的真值表:    

数码管七段译码器

七段数码管译码器较为简单,给出对应的图形以及真值表,具体过程可以参考3线八线译码器74HC138:

    

3.4.3数据选择器

接下来对中规模集成电路双四选一数据选择器74HC153进行分析,并对其扩展进行讨论。

双四选一数据选择器原理分析

       按照对组合逻辑电路的分析思路,走一遍流程:

(1)对电路图进行分析    

(2)根据电路图,画出对应的真值表,别列出函数表达式

由于这里面变量数比较多,请读者自己前去列出。这里只给出输出端Y1的表达式,由于Y2与Y1完全对称,会分析Y1就会分析Y2,Y1的函数表达式为:

这表明了,S1高电平,输入地址端二进制数据为00,选择数据D10端,其他同理,确实达到了数据选择的效果。

双四选一数据选择器扩展成八选一数据选择器    

八选一数据选择器中规模集成电路74HC151

例题补充    

问题分析:

       我们来思考这个问题,要构成一个八选一数据选择器,应该要有什么,一个是八个数据输入端,这在双四选一数据选择器74HC153已经具备;八个数据端应该对应三个地址选择端,但是在双四选一数据选择器74HC153中,只有两个地址段A1,A0,还有两个无用的使能端,能不能将两个无用的使能端组成最高位地址段是这个题目的关键。

画出双四选一数据选择器74HC153的顶层图,尝试在上面思考:

分析思维图:

    

最后不难得出

3.4.4 加法器

一位加法器

(1)半加器

根据组合电路的设计流程走一遍:

1.列出功能需求,确定输入输出,由于设计的是半加器,不考虑下位的进位相加,即不考虑进位输入,且是一位加法器,输入是A,B,输出和是S,以及进位输出CO

2.根据半加器的功能,画出真值表

3.根据真值表,确定对应的输出的函数表达式

4.画出电路图

5.分析验证,对于二进制相加而言,异或相当于相加,进位输出是当两者输入A,B都为1的时候,输出才是进位1.

Verilog 代码:

module half_add(input A,input B,output S,output CO);assign S=A^B;assign CO=A&B;endmodule

Verilog 仿真代码:

`timescale 1ns/1ps//最小单位是1ns,精度是1psmodule tb_half_add();//信号的定义reg A;reg B;wire S;wire CO;//激励信号A,B的产生initial begin A<=0;B<=0; #10 A<=0;B<=1; #10 A<=1;B<=0; #10 A<=1;B<=1; #10; end//模块的列化half_add half_add1(.A(A),.B(B),.S(S),.CO(CO));endmodule

仿真波形:

综合的RTL图:

(2)全加器

(1)按照组合电路的设计流程走一遍,首先进行功能需求的分析,由于是全加器,输入A,B,C,输出是COS

(2)根据功能需求列出真值表

(3)根据真值表,列出输出函数表达式

(4)画出电路图

Verilog 代码:

module add(input A,input B,input Cl,output S,output CO);assign S=A^B^Cl;assign CO=A&B+A&Cl+B&Cl;endmodule

Verilog 仿真代码:

`timescale 1ns/1psmodule tb_add();reg A;reg B;reg Cl;//激励的产生initial begin A<=0;B<=0;Cl<=0; #10 A<=0;B<=0;Cl<=1; #10 A<=0;B<=1;Cl<=0; #10 A<=0;B<=1;Cl<=1; #10 A<=1;B<=0;Cl<=0; #10 A<=1;B<=0;Cl<=1; #10 A<=1;B<=1;Cl<=0; #10 A<=1;B<=1;Cl<=1; #10; end//模块的初始化add add1(.A(A),.B(B),.Cl(Cl),.S(S),.CO(CO));endmodule

仿真图:

RTL综合图:

多位加法器

(1)串行加法器

串行加法器存在的一个缺陷是各级的延时比较严重,每次的CO需要等到下面的进位输入CI才能确定。

(2)超前进位加法器

超前进位加法器,根据每次的进位输入CI可以由前面的数字Ai,Bi确定,这样每次就能直接通过关系确定CO,而不用等下级的CI确定。

四位超前进位加法器74LS283

3.4.5 数值比较器

一位数值比较器

多位数值比较器

芯片·半导体

长按扫码关注


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言