首页 > 其他分享 >数字IC习题1--输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个

数字IC习题1--输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个

时间:2023-07-21 18:44:23浏览次数:39  
标签:全加器 dinb dina -- sum cin input 习题 cout

 

【问题分析】

全加器(full_adder):是用门电路实现两个二进制数相加并求出和的组合线路,称为一位全加器,一位全加器可以处理低位进位,并输出本位加法进位。多个一位全加器进行级联可以得到多位全加器。

 

全加器输入信号有三个 dina、dinb、cin,输出的信号有两个sum、cout。

dina和dinb是输入信号,cin是低位进位,sum是dina和dinb当前位上的和,cout是dina和dinb相加后的高进位。

例如dina = 1,dinb = 0,cin = 1, sum = 0,cout = 1 

 

1bit的全加器的dina、dinb、sum信号的长度是1位。

2bit的全加器可以由两个1bit的全加器连接组成,2bit的全加器的dina、dinb、sum信号的长度是2位。

3bit的全加器可以由一个1bit的全加器+一个2bit的全加器连接组成,也就是三个1bit的全加器,3bit的全加器的dina、dinb、sum信号的长度是3位。

 

1bit的全加器

module full_adder_one(
    input dina,
    input dinb,
    input cin,
    output sum,
    output cout
);

assign {cout,sum} = dina + dinb + cin;

endmodule

 

2bit的全加器

module adder2(
    input[1:0]  dina,
    input[1:0]  dinb,
    input       cin,
    output[1:0] sum,
    output      cout
);

wire co;
    full_adder_one u0(
    .dina (dina[0]),
    .dinb (dinb[0]),
    .cin  (cin),
    .sum  (sum[0]),
    .cout (co)
)
    full_adder_one u1(
    .dina (dina[1]),
    .dinb (dinb[1]),
    .cin  (co),
    .sum  (sum[1]),
    .cout (cout)
)
endmodule
View Code

3bit的全加器

module adder3(
    input[2:0]  dina,
    input[2:0]  dinb,
    input       cin,
    output[2:0] sum,
    output      cout
);

wire co;
    full_adder_one u0(
    .dina (dina[0]),
    .dinb (dinb[0]),
    .cin  (cin),
    .sum  (sum[0]),
    .cout (co)
)
    adder2 u1(
    .dina (dina[2:1]),
    .dinb (dinb[2:1]),
    .cin  (co),
    .sum  (sum[2:1]),
    .cout (cout)
)
endmodule
View Code

 

 

 

 

【最终代码】

module number_one(
    input clk,
    input rest_n;
    input [7:0] din;
    output [3:0] num_one;
);

wire [1:0] sum0;
wire [1:0] sum1;
wire [2:0] sum2;

    full_adder_one u0(
    .dina (din[0]),
    .dinb (din[1]),
    .cin  (din[2]),
    .sum  (sum0[0]),
    .cout (sum0[1])
);

    full_adder_one u1(
    .dina (din[3]),
    .dinb (din[4]),
    .cin  (din[5]),
    .sum  (sum1[0]),
    .cout (sum1[1])
);

    adder2 u3(
    .dina (sum0),
    .dinb (sum1),
    .cin  (din[6]),
    .sum  (sum2[1:0]),
    .cout (sum2[2])
);

    adder3 u2(
    .dina (sum2),
    .dinb (0),
    .cin  (din[7]),
    .sum  (num_one[2:0]),
    .cout (num_one[3])
);

endmodule

module full_adder_one(
    input dina,
    input dinb,
    input cin,
    output sum,
    output cout
);

assign {cout,sum} = dina + dinb + cin;

endmodule


module adder2(
    input[1:0]  dina,
    input[1:0]  dinb,
    input       cin,
    output[1:0] sum,
    output      cout
);

wire co;
    full_adder_one u0(
    .dina (dina[0]),
    .dinb (dinb[0]),
    .cin  (cin),
    .sum  (sum[0]),
    .cout (co)
)
    full_adder_one u1(
    .dina (dina[1]),
    .dinb (dinb[1]),
    .cin  (co),
    .sum  (sum[1]),
    .cout (cout)
)
endmodule

module adder3(
    input[2:0]  dina,
    input[2:0]  dinb,
    input       cin,
    output[2:0] sum,
    output      cout
);

wire co;
    full_adder_one u0(
    .dina (dina[0]),
    .dinb (dinb[0]),
    .cin  (cin),
    .sum  (sum[0]),
    .cout (co)
)
    adder2 u1(
    .dina (dina[2:1]),
    .dinb (dinb[2:1]),
    .cin  (co),
    .sum  (sum[2:1]),
    .cout (cout)
)
endmodule

 

标签:全加器,dinb,dina,--,sum,cin,input,习题,cout
From: https://www.cnblogs.com/yphasaki/p/17572153.html

相关文章

  • HJ59 找出字符串中第一个只出现一次的字符
    1.题目读题HJ59 找出字符串中第一个只出现一次的字符  考查点 2.解法思路 代码逻辑 具体实现 自行实现 publicclassHJ059{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println(ge......
  • 博弈论基础捏
    博弈论基础一、四大博弈模型1、巴什博奕定义:一堆n个物品,两个人轮流从中取出不多于m个,最后取光者胜,不能继续取的人输;结论:若n%(m+1)!=0,则先手必胜,反之先手必输2、尼姆博弈定义:n堆物品,每堆物品的个数任意,两人轮流取,每次取某堆中不少于1个,最后取完者必胜。结论:将每堆物品的数量......
  • servlet中response乱码
    1、response乱码指服务器响应输出到浏览器,出现乱码。乱码就是A和B的设置有问题。2、为什么默认设置会导致中文乱码?idea中创建和打开文件使用的字符集为Unicode,输出时默认的编码方案A为UTF-8浏览器默认的编码方案B为ISO_8859_1,不支持中文,所以浏览器接收到了UTF-8编码的数......
  • 沁恒单片机开发板开发
    目录前言一、芯片的介绍二、MounRiver集成开发IDE1.新建工程2.工程目录2.1Include2.2Core2.3Debug2.4Ld2.5Peripheral2.6Startup2.7User3.书写代码4.烧录代码总结前言之前在沁恒微电子官网上申请了块互连型的单片机,芯片的型号是CH32V307,之前在论坛上看到他们说这一块单片......
  • 3种跳过测试的方法
    1.闪电按钮 2.细粒度控制跳过测试,也就在pom文件中使用代码跳过测试   3.使用指令 ......
  • 算网深度融合成趋势,天翼云让政企上云更安全、更便捷!
    7月12日,由中国通信标准化协会算网融合产业及标准推进委员会(CCSATC621)组织召开的“2023年算网融合产业发展峰会-SD-WAN产业发展论坛”在北京召开,论坛旨在进一步凝聚SD-WAN发展共识,面向产业数字化需求,探讨SD-WAN技术演进与产业发展趋势。会上,天翼云荣膺“2022年度SASE最/佳应用奖”......
  • Mybatis笔记
    如何获得Mybatis?maven仓库:<!--https://mvnrepository.com/artifact/org.mybatis/mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></depende......
  • 阿里云flink操作示例
    前期简单查询:(不同版本语法或有不同,当前版本:专有云flink1.11)1、可以先简单定义自己的源表字段(下图test),进行简单查询,确定结果是否输出(结果输出是一直存在的,源表实时新增一条数据,查询结果就会新增一条数据)备注:以下示例特殊信息写成自己的信息;可定义多个源表2、定义结果表(l_result......
  • 组件值的传递
     定义输入框在另一个组件中引入这个输入框组件并绑定值 ......
  • 财大ACM实验室招新指南
    财大ACM实验室招新指南ACM科普大学竞赛ACM通俗是指XCPC,也就是ICPC/CCPC。其中ICPC即InternationalCollegiateProgrammingContest,它是国际大型比赛。也在中国高等教育学会列出的榜单上。属于国际竞赛。如果能在ICPC区域赛拿到银牌、金牌。国内的一些公司可能就会向你投出......