verilog基础练习

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

verilog基础练习_第1张图片

看上面的思路,我们得出下面的过程:

verilog基础练习_第2张图片

 所以,总共用到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} $$

  • P_dynamic 是电路翻转产生的动态功耗
  • P_short是P管和N管同时导通时产生的短路功耗
  • 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线短路,这通常会破坏芯片,或至少使系统无法工作职能断电后重新启动。——《数字集成电路》

verilog基础练习_第3张图片

相同面积的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码来表示

可以通过真值表甚至卡诺图观察来得到一些思路:]

verilog基础练习_第4张图片

verilog基础练习_第5张图片

所以甚至一个逻辑门都不需要用到。比起第一反应乘法器之类的,是不是大大的化简了呢;

你可能感兴趣的:(verilog基础练习)