verilog加減法器設(shè)計(jì)

一买喧、半加器與全加器

半加器電路是指對(duì)兩個(gè)輸入數(shù)據(jù)位相加,輸出一個(gè)結(jié)果位進(jìn)位憔杨,沒有進(jìn)位輸入的加法器電路鸟赫。

圖1.1 半加器真值表


半加器verilog代碼:

module half_adder(
    input a,b,
    output s,cout
);
assign {cout,s} = a + b;
endmodule

全加器電路與半加器電路相比,多了進(jìn)位輸入消别。

圖1.2 全加器真值表


全加器verilog代碼:

module full_adder(
    input a,b,cin,
    output s,cout
);
assign {cout,s} = a + b + cin;
endmodule

二抛蚤、多bit加法器的設(shè)計(jì)

有了上節(jié)全加器的設(shè)計(jì)基礎(chǔ),可以展開設(shè)計(jì)多bit加法器寻狂。Nbit加法器需要N個(gè)全加器岁经,低位全加器的進(jìn)位輸出作為高位全加器的進(jìn)位輸入,以此類推蛇券。最低位全加器的進(jìn)位輸入作為整個(gè)模塊進(jìn)位輸入蒿偎,最高位進(jìn)位輸出作為整個(gè)模塊的進(jìn)位輸出。這種設(shè)計(jì)方法叫作行波進(jìn)位法加法器(Ripple Carry Adder怀读,RCA)

圖2.1 行波進(jìn)位法

行波進(jìn)位法加法器verilog代碼:

module rca #(width=4)(
    input [width-1:0] a,b,
    input cin,
    output [width-1:0]s,
    output cout
);
wire [width:0]cin_temp;
assign cin_temp[0]=cin;
assign cout=cin_temp[width];

genvar i;
generate
    for(i=0;i<width;i++)begin
        full_adder inst(
            .a(a[i]),
            .b(b[i]),
            .cin(cin_temp[i]),
            .s(s[i]),
            .cout(cin_temp[i+1])
        );
    end
endgenerate
endmodule

行波進(jìn)位加法器具有布局簡單骑脱、設(shè)計(jì)方便等優(yōu)點(diǎn)菜枷,但高位的計(jì)算必須要等待低位運(yùn)算結(jié)束才可以得到自己的進(jìn)位輸入,開始運(yùn)算叁丧,當(dāng)運(yùn)算位數(shù)較大時(shí)會(huì)造成很大的運(yùn)算延遲啤誊,影響器件工作效率岳瞭。

圖2.2 全加器結(jié)構(gòu)

針對(duì)上述問題,超前進(jìn)位加法器(Carry-Lookahead Adder蚊锹,CLA)可以在低位運(yùn)算之前便可以得到各位的進(jìn)位輸入。如圖2.2所示,某一位的全加器進(jìn)位輸出可以用其輸入信號(hào)直接推算出來并作為下一位的進(jìn)位輸入掌挚,以此類推掂器,這一位的進(jìn)位輸入也可以由前一位全加器的輸入信號(hào)推算得到,直到最低位丢烘。
推算公式為:

所以柱宦!根據(jù)加法器模塊的當(dāng)前輸入信號(hào)便可以直接推算出每個(gè)全加器的進(jìn)位輸入!只需要先計(jì)算出各位的生成信號(hào)與傳播信號(hào)播瞳,再計(jì)算出每個(gè)全加器的進(jìn)位輸入掸刊,便可以直接進(jìn)行運(yùn)算,將N級(jí)延遲轉(zhuǎn)化為固定級(jí)數(shù)延遲赢乓。具體的分析參考資料1的博主分析的很好忧侧,強(qiáng)烈推薦。
超前進(jìn)位加法器verilog代碼:

module cla #(width=4)(
    input [width-1:0]a,b,
    input cin,
    output [width-1:0]s,
    output cout
);
wire [width:0]cin_temp;
wire [width-1:0]g,p;
assign cin_temp[0]=cin;
assign cout=cin_temp[width];

genvar i;
generate
    for(i=0;i<width;i++)begin
       g[i]=a[i]&b[i];
       p[i]=a[i]|b[i];
       cin_temp[i+1]=g[i]|(cin_temp[i]&p[i]);
       full_adder inst(
            .a(a[i]),
            .b(b[i]),
            .cin(cin_temp[i]),
            .s(s[i]),
            .cout()
       );
    end
endgenerate
endmodule

三牌芋、加減法器設(shè)計(jì)

已知蚓炬,減去一個(gè)數(shù)等于加上這個(gè)數(shù)的補(bǔ)碼,所以在加法器的基礎(chǔ)上姜贡,將輸入?yún)?shù)稍作修改试吁,便可以實(shí)現(xiàn)一個(gè)共用結(jié)構(gòu)的加減法模塊。
以行波進(jìn)位法為例楼咳,修改后的加減法器verilog代碼:

module aos #(width=4)(
    input [width-1:0] a,b,
    input cin,
    input sub,//sub=1為減法熄捍,=0為加法
    output [width-1:0]s,
    output cout
);
wire [width:0]cin_temp,b_temp;
assign cin_temp[0]=cin^sub;//減法時(shí)看作被借位,sub_temp[0]作為補(bǔ)碼~b+1的+1母怜,當(dāng)被借位時(shí)cin=1余耽,cin_temp[0]=0,當(dāng)未被借位時(shí)cin=0,cin_temp[0]=1作為正常補(bǔ)碼苹熏。
assign cout=cin_temp[width]^sub;//減法時(shí)看作借位碟贾,運(yùn)算結(jié)果為向高位借位后的值,若有需要將cout看作符號(hào)位求補(bǔ)碼即為答案
assign b_temp={width{sub}}^b;  //減法時(shí)進(jìn)行取反

genvar i;
generate
    for(i=0;i<width;i++)begin
        full_adder inst(
            .a(a[i]),
            .b(b_temp[i]),
            .cin(cin_temp[i]),
            .s(s[i]),
            .cout(cin_temp[i+1])
        );
    end
endgenerate
endmodule

[參考資料1]http://www.reibang.com/p/6ce9cad8b467

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轨域,一起剝皮案震驚了整個(gè)濱河市袱耽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌干发,老刑警劉巖朱巨,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異枉长,居然都是意外死亡冀续,警方通過查閱死者的電腦和手機(jī)琼讽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洪唐,“玉大人钻蹬,你說我怎么就攤上這事∑拘瑁” “怎么了问欠?”我有些...
    開封第一講書人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長功炮。 經(jīng)常有香客問我溅潜,道長,這世上最難降的妖魔是什么薪伏? 我笑而不...
    開封第一講書人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任滚澜,我火速辦了婚禮,結(jié)果婚禮上嫁怀,老公的妹妹穿的比我還像新娘设捐。我一直安慰自己,他們只是感情好塘淑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開白布萝招。 她就那樣靜靜地躺著,像睡著了一般存捺。 火紅的嫁衣襯著肌膚如雪槐沼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,775評(píng)論 1 307
  • 那天捌治,我揣著相機(jī)與錄音岗钩,去河邊找鬼。 笑死肖油,一個(gè)胖子當(dāng)著我的面吹牛兼吓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播森枪,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼视搏,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了县袱?” 一聲冷哼從身側(cè)響起浑娜,我...
    開封第一講書人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎式散,沒想到半個(gè)月后棚愤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年宛畦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揍移。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡次和,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出那伐,到底是詐尸還是另有隱情踏施,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布罕邀,位于F島的核電站畅形,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诉探。R本人自食惡果不足惜日熬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肾胯。 院中可真熱鬧竖席,春花似錦、人聲如沸敬肚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艳馒。三九已至憎亚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄慰,已是汗流浹背第美。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留曹动,地道東北人斋日。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像墓陈,于是被迫代替她去往敵國和親恶守。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

推薦閱讀更多精彩內(nèi)容