首页 > 其他 > 详细

校招基础——门电路和加法器

时间:2020-09-09 23:17:45      阅读:619      评论:0      收藏:0      [点我收藏+]

门电路

1、使用最少数量的两个输入与非门设计3输入与非门

解析:Y=ABC’=((AB)’+C’)=(((AB)’)’C)’=((1(AB)’)’C)’,答案就出来了。

技术分享图片

 

2、分别用两个输入的与非门实现OR GATE,AND GATE,画出门级电路。

分析: 或门,A+B = (A’B’)’=((1A)’(1B)’)’,三个与非门即可。

与门,AB=(AB)’)’,两个与非门即可。

 

3画出assign out = (a[3:0] != 4b0001)的门电路。

a[3:0] == 4’b0001    ->     out = 1’b0;

a[3:0] != 4’b0001    ->     out = 1’b1;

技术分享图片

 

4、一位比较器的门电路实现,输出Y0>)、Y1=)、Y2<)?

技术分享图片

 技术分享图片

 

5、二选一选择器的门电路实现?

 技术分享图片

 

6使用2x1MUX实现2输入AND

技术分享图片

 

7、使用2x1MUX实现D锁存器?

 技术分享图片

 

8如果只使用21mux完成异或逻辑,至少需要几个mux

技术分享图片

 

9比较下面两个代码,利用FFMuxAdderDcmux等元件画出对应的框图,并比较这两个设计的不同以及优劣(注意:不要对加法器等进行细化处理,只要利用现有的模块,如DFFAdder、减法器等)

1)Always @(A or B or C or D)

Sum = sel ?(A+B):(C+D)

(2always @(A or B or C or D) begin

Switch0 = sel ? A:C;

Switch1 = sel ? B:D;

end

assign sum = Switch0+Switch1;

技术分享图片

技术分享图片 

很明显第二种比第一种少了一个加法器,资源消耗减少,说明一个好的设计可以减少资源的占用,提高资源的利用率。

 

10、相同工艺条件下,下列哪种逻辑的组合逻辑延迟最长(A

A、2输入异或门  B、2输入与非门

C、2输入或门 D、1输入反相器

 

11、根据 A 的波形,画出 B、C 的波形,寄存器是同步清0的。

技术分享图片

 

 

加法器专题

1、加法器分类

(1)半加器;

(2)全加器;

(3)进位延时加法器;

  1. 行波进位加法器(RCA
  2. 超前进位加法器(CLA

(4)进位保留加法器;

2、半加器和全加器结构

半加器:两个1位二进制相加,不考虑低位进位;

全加器:两个1位二进制相加,考虑低位进位; 

技术分享图片

技术分享图片

 技术分享图片

 

 

3、行波进位加法器RCA(串行进位加法器、逐位进位加法器)

 技术分享图片

 

 技术分享图片

 

4、超前进位加法器 

技术分享图片

 

 

5、下图是一个全加器的电路图,假设每个门的延时为T,不考虑线延时的扇入扇出,下列说法正确的是(AD

技术分享图片

A) 4Ripple-Carry Adder的最大延时为9T

B) 8Ripple-Carry Adder的最大延时为9T

C) 4Carry-Lookahead Adder的最大延时为3T

D) 8Carry-Lookahead Adder的最大延时为4T

分析:首先明白两种加法器的结构,首先分析 Ripple-Carry Adder的结构,2bitR加法器就是两个R加法器连接起来,如下图所示:

技术分享图片

将这个图代入题干,可以得出最大延时是ACount,然后再一个CinCount,即3+2=5,每再添一个R加法器,最长路径多2个门,因此4R加法器最大延时为3+2+2+2=9;其次分析Carry-Lookahead Aheader的特点,C加法器的各级进位彼此独立产生,只与输入数据和Cin有关,因此超过1位的C加法器,其最大延时都是3位本体最大延时加上1位的进位延时,因此8位的C加法器的最大延时为3+1=4。(很多人分析的是3,他只算了输入到进位,但我们求的是和,所以得加一)。

 

6、加法器代码

 

//--------------------------------------------------------
//--    半加器
//--------------------------------------------------------
module HALF_ADDER
(
  input wire a,
  input wire b,
  output reg s,
  output reg c
);

always@(*)begin
  c = a & b;
  s = a ^ b;
end
 
endmodule
//--------------------------------------------------------
//--    全加器
//--------------------------------------------------------
module FULL_ADDER
(
  input wire ai,
  input wire bi,
  input wire ci,
  output reg s,
  output reg co
);
wire gi;
wire pi;
wire pi_ci;
wire si;

HALF_ADDER U_HALF_ADDER_0
(
  .a    (ai     ),
  .b    (bi     ),
  .c    (gi     ),
  .s    (pi     )
);

HALF_ADDER U_HALF_ADDER_1
(
  .a    (ci     ),
  .b    (pi     ),
  .c    (pi_ci  ),
  .s    (si     )
);

always@(*)begin
  co = pi_ci | gi;
  s  = si;
end

endmodule
//--------------------------------------------------------
//--    行波进位加法器
//--------------------------------------------------------
module RCA
#(
  parameter             N = 4)
(
  input wire    [N-1:0] ai,
  input wire    [N-1:0] bi,
  input wire            ci,
  output wire   [N-1:0] s,
  output wire           co
);
reg     [N-1:0] ci_t;
wire    [N-1:0] co_t;

always@(*)begin:ci_gen
  integer n;
  for(n = 0; n < N; n = n + 1)begin
    if(n == 0)
      ci_t[n] = ci;
    else
      ci_t[n] = co_t[n-1];
  end
end

assign  co = co_t[N-1];

genvar i;
generate
for(i = 0; i < N; i = i + 1)begin:rca_g
  FULL_ADDER U_FULL_ADDER
  (
    .ai     (ai[i]      ),
    .bi     (bi[i]      ),
    .ci     (ci_t[i]    ),
    .co     (co_t[i]    ),
    .s      (s[i]       )
  );
end
endgenerate

endmodule
//--------------------------------------------------------
//--    超前进位加法器
//--------------------------------------------------------
module CLA
#(
parameter           N = 4)
(
input wire [N-1:0]  ai,
input wire [N-1:0]  bi,
input wire          ci,
output reg [N-1:0]  s,
output reg          co
);
reg [N:0]   c;
reg [N:1]   st;
reg [N:1]   g;
reg [N:1]   p;
reg [N:1]   a;
reg [N:1]   b;
reg         gp;
reg         gg;

always@(*)begin
  s  = st;
  a  = ai;
  b  = bi;
  co = c[N];
end

always@(*)begin:cla_gen
 integer i;
 gp = 1;
 gg = 0;
 c[0] = ci;
 for(i=1; i<=N; i=i+1)begin
   g[i]  = a[i] & b[i];
   p[i]  = a[i] ^ b[i];
   gp    = p[i] & gp;
   gg    = g[i] + (p[i] & gg);
   c[i]  = gg | (gp & c[i-1]);
   st[i] = p[i] ^ c[i-1];
 end
end

endmodule

 

 

 

 

校招基础——门电路和加法器

原文:https://www.cnblogs.com/xianyufpga/p/13642359.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!