输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个,请使用verilog进行描述?(附verilog代码)

回答:7个。

解释:全加器是full_adder,实现两个二进制相加求和的过程。其中,Ai是被加数,Bi是加数,相邻低位来的进位数是Ci-1,输出本位和是Si,向相邻高位进位数是Ci。

图1:全加器的真值表

下面就8bit数值进行逻辑结果上的梳理:

 

图2:不同颜色代表不同权重(核心重点)

下面就图2中的逻辑进行代码书写:


Module	full_adder(
Input	a,
Input	b,
Input	cin,
Ouput	sum,
Output	cout
);
Assign	{cout,sum} = a + b + cin ;
endmodule
//
module	count(
input	[7:0]	data_in;
output	[3:0]	data_out;
);
Wire	sum_1;
Wire	sum_2;
Wire	sum_3;
Wire	sum_4;
Wire	sum_5;
Wire	sum_6;
Wire	sum_7;
Wire	cout_1;
Wire	cout_2;
Wire	cout_3;
Wire	cout_4;
Wire	cout_5;
Wire	cout_6;
Wire	cout_7;

full_adder	full_adder_inst1 (
.a(data_in[0]),
.b(data_in[1]),
.cin(data_in[2]),
.sum(sum_1),
.cout(cout_1)

);
full_adder	full_adder_inst2 (
.a(data_in[3]),
.b(data_in[4]),
.cin(data_in[5]),
.sum(sum_2),
.cout(cout_2)

);
full_adder	full_adder_inst3 (
.a(sum_1),
.b(sum_2),
.cin(data_in[6]),
.sum(sum_3),
.cout(cout_3)

);
full_adder	full_adder_inst4 (
.a(sum_3),
.b(data_in[7]),
.cin(1’b0),
.sum(sum_4),
.cout(cout_4)

);
full_adder	full_adder_inst5 (
.a(cout_1),
.b(cout_3),
.cin(cout_2),
.sum(sum_5),
.cout(cout_5)

);

full_adder	full_adder_inst6 (
.a(sum_5),
.b(cout_4),
.cin(1’b0),
.sum(sum_6),
.cout(cout_6)

);
full_adder	full_adder_inst7 (
.a(cout_5),
.b(cout_6),
.cin(1’b0),
.sum(sum_7),
.cout(cout_7)

);

Endmodule

感谢大家的支持。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值