2008年8月5日 星期二

FullAdder:一位元全加器


一位元全加器的Verilog程式碼
//定義一位元全加器
module fulladder (sum , c_out, a , b , c_in)
//宣告輸出入埠
output sum,c_out;
input a, b, c_in;
//宣告內部接線
wire s1,c1,c2 ;
xor(sl, a,b) ;
and(c1, a,b);
xor (sum, s1, c_in) ;
and (c2, s1, c_in) ;
xor (c_out, c2, c1) ;
endmodule

真值表如下
ABC_INSUMC_OUT
00000
01010
10010
11001
00110
01101
10101
11111

2 則留言:

史丹利 提到...

另一個Gate Level的寫法,這個xor用比較少,gate count數應該會變少
module fadder(sum, cout, a, b, cin)
output sum,cout;
input a, b, cin;
xor u0(sum, a, b, cin);
and u1(net1, a, b);
and u2(net2, b, cin);
and u3(net3, cin, a);
or u4(cout, net1, net2, net3);
endmodule

史丹利 提到...

這個是Behavior Level的全加器
module fadder(sum, cout, a, b, cin)
output sum,cout;
input a, b, cin;
reg sum,cout;

always@(a or b or cin)
begin
sum=a^b^cin;
count=(a&b)|(b&cin)|(cin&a);
end
endmodule