一位元全加器的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
真值表如下
A | B | C_IN | SUM | C_OUT |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
6 則留言:
另一個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
可以請問上面1bit全加器的test bench怎麼寫嗎???
全加器cout輸出好像是用or閘不是xor閘?是否可以更正一下?
cout的輸出用or閘或是xor閘做, 都可以喔.
以真值表來結果來看使用xor與使用or都可以得到相同的真值表結果.
比如:Cout 也可以換另成另一種
Cout=(A.B) + (B.C) + (A.C)
這也可以得到相同的真值表結果.
是的,因為兩個半加器不可能同時進位,所以用or或xor都可以,但一般高職教科書都用or閘,所以原圖是可以的。
張貼留言