输入一个8bit数,输出其中1的个数。如果只能使用1bit全加器,最少需要几个?
看上面的思路,我们得出下面的过程:
所以,总共用到7个全加器,代码如下:
//全加器
module f_add(
input a,
input b,
input ci,
output s,
output co
);
assign {co,s} = a + b + ci;
//assign s = (a ^ b) ^ ci;
//assign co = a & b + ci & ( a ^ b );
endmodule
//统计1的个数
module count_1_hadd(
input [7:0] data_in,
output [3:0] data_out
);
wire s0,c0,s1,c1,s2,c2,s3,c3,s4,c4,s5,c5,s6,c6;
f_add u_f_add0(
.a(data_in[0]),
.b(data_in[1]),
.ci(data_in[2]),
.s(s0),
.co(c0)
);
f_add u_f_add1(
.a(data_in[3]),
.b(data_in[4]),
.ci(data_in[5]),
.s(s1),
.co(c1)
);
f_add u_f_add2(
.a(s0),
.b(s1),
.ci(data_in[6]),
.s(s2),
.co(c2)
);
f_add u_f_add3(
.a(s2),
.b(data_in[7]),
.ci(0),
.s(s3),
.co(c3)
);
f_add u_f_add4(
.a(c0),
.b(c1),
.ci(c2),
.s(s4),
.co(c4)
);
f_add u_f_add5(
.a(s4),
.b(c3),
.ci(0),
.s(s5),
.co(c5)
);
f_add u_f_add6(
.a(c4),
.b(c5),
.ci(0),
.s(s6),
.co(c6)
);
assign data_out = {c6,s6,s5,s3};
endmodule
CMOS反相器的功耗主要包括哪几部分?分别与哪些因素相关?
$$ P_{Total} = P_{dynamic} + P_{short} + P_{leakage} $$
静态功耗:CMOS反相器在静态时,P、N管只有一个导通。由于没有Vdd到GND的直流通路,所以CMOS的静态功耗应该等于零。但实际上,由于扩散区和衬底的PN结上存在反向漏电流,所以会产生静态功耗。
短路功耗:CMOS电路在“0”和“1”的转换过程中,P、N管会同时导通,产生一个由Vdd到VSS窄脉冲电流,由此引起功耗;
动态功耗:C_L 这个CMOS反相器的输出负载电容,由NMOS和PMOS晶体管的漏扩散电容、连线电容和扇出门的输入电容组成;
什么是latch-up(闩锁效应)?
闩锁效应是集成电路中出现的一种效应。通常拉CMOS结构中,形成PNP搭NPN寄生晶体管。当有一个微小电流触发,会形成正反馈,让芯片发热报废
MOS工艺会包含许多内在的双极型管,它们在CMOS工艺中特别会引起麻烦,因为同时存在的阱和衬底会形成寄生的n-p-n-p结构,这些类似于闸流管的器件一旦激发会导致Vdd和Vss线短路,这通常会破坏芯片,或至少使系统无法工作职能断电后重新启动。——《数字集成电路》
相同面积的cmos与非门和或非门哪个更快?
电子迁移率是空穴的2.5倍(在硅基CMOS工艺中),运算就是用这些大大小小的MOS管驱动后一级的负载电容,翻转速度和负载大小一级前级驱动能力相关。为了上升延迟和下降延迟相同,PMOS需要做成NMOS两倍多大小。
载流子的迁移率,对PMOS而言,载流子是空穴;对NMOS而言,载流子是电子。
PMOS采用空穴导电,NMOS采用电子导电,由于PMOS的载流子的迁移率比NMOS的迁移率小,所以,同样尺寸条件下,PMOS的充电时间要大于NMOS的充电时间长,在互补CMOS电路中,与非门是PMOS管并联,NMOS管串联,而或非门正好相反,所以,同样尺寸条件下,与非门的速度快,所以,在互补CMOS电路中,优先选择与非门。
用最简洁的电路将0-9的BCD码(4bit)乘以5,结果同样用BCD码来表示
可以通过真值表甚至卡诺图观察来得到一些思路:]
所以甚至一个逻辑门都不需要用到。比起第一反应乘法器之类的,是不是大大的化简了呢;