原创 多种方式表达全加器

2011-8-7 15:39 1747 6 6 分类: FPGA/CPLD

全加器

全加器能进行家数,被加数和低位来的进位信号相加,并根据求和结果给出该进位信号。真值表如下: 

 输入       输出

a  b  c    s  co

0  0  0    0  0

0  0  1    1  0

0  1  0    1  0

0  1  1    0  1

1  0  0    1  0

1  0  1    0  1

1  1  0    0  1

1  1  1    1  1

1,电路符号

如图,,ci为低位进位,co为进位

20110807153104001.gif
2,设计方法

采用文本编辑发,利用Verilog HDL语言描述全加器,代码如下:

(1)行为级描述的4位全加器
module add4(s,co,a,b,ci);

output[3:0] s;     //和数
output co;      //进位
input[3:0] a,b;     //被加数,加数    
input ci;      //低位进位
reg co;
reg[3:0] s;

always@(*)
 begin
  {co,s} = a+b+ci;
 end
 
endmodule

(2)数据流描述的4位全加器


module add4_1 (s,co,a,b,ci);

input  [3:0] a,b;     //被加数,加数
input  ci;       //低位进位

output [3:0] s;      //和数
output co;       //进位

assign {co,s} = a+b+ci;

endmodule

(3)结构化描述的4位级联全加器.

//'include"full_add1.v"

module fulladd4 (s,co,a,b,ci);

output[3:0] s;
output co;
input[3:0] a,b;
input ci;

// wire ci1,ci2,ci3;

full_add1 f0(a[0],b[0],ci,s[0],ci1); //级联描述
full_add1 f1(a[1],b[1],ci1,s[1],ci2); 
full_add1 f2(a[2],b[2],ci2,s[2],ci3);
full_add1 f3(a[3],b[3],ci3,s[3],co); 


 
endmodule

//半加器代码
module full_add1(a,b,cin,sum,cout);

input a,b,cin;
output sum,cout;
wire s1,m1,m2,m3;

and (m1,a,b),
(m2,b,cin),
(m3,a,cin);
xor(s1,a,b),
(sum,s1,cin);
or(cout,m1,m2,m3);

endmodule

 




 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /1 下一条