Verilog中三八译码器与全加器的使用

一、三八译码器

1、三八译码器简介

38译码器是一种数字逻辑电路,用于将3位二进制输入编码为8位输出。它的作用是将特定的输入模式映射到相应的输出。在数字电路设计和信息处理中,38译码器是一个常见且有用的组件,可以帮助实现数据的解码和选择性输出。

2、三八译码器结构及其真值表

真值表:

3-8译码器由三个输入引脚和八个输出引脚组成。输入引脚是A0、A1和A2,它们可以是0或1。输出引脚是YO到Y7,它们中的一个会被激活,其它的则处于非激活状态。当输入引脚的二进制值为000时,输出引脚YO会被激活。当输入引脚的二进制值为001时,输出引脚Y1会被激活,以此类推,直到输入引脚的二进制值为111时,输出引脚Y7会被激活。

3、Verilog代码

if-else版本:

module decoder3_8(
input wire a,b,c,
output reg [7:0] out
);
always@(*)
 if({a, b, c}==3'b000)
 out=8'b0000_0001;
 else if( {a, b, c} ==3'b001)
 out=8'b0000_0010;
 else if( {a, b, c} ==3'b010)
 out=8'b0000_0100;
 else if( {a, b, c} ==3'b011)
 out=8'b0000_1000;
 else if( {a, b, c} ==3'b100)
 out=8'b0001_0000;
 else if( {a, b, c} ==3'b101)
 out=8'b0010_0000;
 else if( {a, b, c} ==3'b110)
 out=8'b0100_0000;
 else if( {a, b, c} ==3'b111)
 out=8'b1000_0000;
endmodule

其RTL图如下:

case版本:
 

module decoder3_8(
input wire a,b,c,
output reg [7:0] out
);
always@(*)
case({a,b,c})
    3'b000: out=8'b0000_0001;
	 3'b001: out=8'b0000_0010;
	 3'b010: out=8'b0000_0100;
	 3'b011: out=8'b0000_1000;
	 3'b100: out=8'b0001_0000;
	 3'b101: out=8'b0010_0000;
	 3'b110: out=8'b0100_0000;
	 3'b111: out=8'b1000_0000;
endcase
endmodule

其RTL图:

二、全加器

1、一位全加器

(1)简介

全加器是能够计算低位进位的二进制加法电路。与半加器相比,全加器不只考虑本位计算结果是否有进位,也考虑上一位对本位的进位,可以把多个一位全加器级联后做成多位全加器。

其结构图如下:

一位全加器的逻辑表达式为

S=A⊕B⊕Cin

Co=Cin(A⊕B)+AB

其中A,B为要相加的数,Cin为进位输入;S为和,Co是进位输出;

Verilog代码:

module adder_1bit(     
 
input a,b,cin,
output wire f,cout
);
assign f=a^b^cin;
assign cout=(a&b)|(a&cin)|(b&cin);
endmodule

RTL图:

2、四位全加器

Verilog代码:

module A4bit(
input a,b,cin,
output wire f,cout
);
assign f=a^b^cin;
assign cout=(a&b)|(a&cin)|(b&cin);
endmodule
module _4add(
input [3:0] a,b,
input cin,
output [3:0] c,
output out
);
wire [3:1] tem;
one_add (a[0],b[0],cin,c[0],tem[1]),
        (a[1],b[1],tem[1],c[1],tem[2]),
		  (a[2],b[2],tem[2],c[2],tem[3]),
		  (a[3],b[3],tem[3],c[3],out);
		  
endmodule

RTL图:

3、八位全加器

Verilog代码:

module A8bit(
input a,b,cin,
output wire f,cout
);
assign f=a^b^cin;
assign cout=(a&b)|(a&cin)|(b&cin);
endmodule
module _8add(
input [7:0] a,b,
input cin,
output [7:0] c,
output out
);
wire [7:1] tem;
one_add (a[0],b[0],cin,c[0],tem[1]),
        (a[1],b[1],tem[1],c[1],tem[2]),
		  (a[2],b[2],tem[2],c[2],tem[3]),
		  (a[3],b[3],tem[3],c[3],tem[4]),
		  (a[4],b[4],tem[4],c[4],tem[5]),
		  (a[5],b[5],tem[5],c[5],tem[6]),
		  (a[6],b[6],tem[6],c[6],tem[7]),
		  (a[7],b[7],tem[7],c[7],out);
endmodule


因不明原因,RTL图与上述四位全加器RTL图相同,若有大佬知道,欢迎指出原因,谢谢。
 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值