日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Verilog中的加法器(半加器,全加器,串行、超前进位加法器)

發(fā)布時間:2024/10/14 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Verilog中的加法器(半加器,全加器,串行、超前进位加法器) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

加法器為半加器和全加器:

半加器:不考慮低位向高位的進位。2輸入,2輸出。

全加器:考慮低位向高位的進位。3輸入(多了進位輸入C),2輸出。

?

Verilog代碼如下:

module half_add(input A,B, //兩輸入,無進位輸入output sum,cout //加法結(jié)果和進位輸出 ); assign sum=A^B; assign coot=A&B; endmodule

圖中的co表達式錯誤,應(yīng)為co=(A+B)ci +A·B

?Verilog代碼如下:

module full_add(input A,B,cin //三輸入,有進位輸入output sum,cout ); assign sum=A^B^cin; assign co=(A&B)|(A&cin)|(B&cin); endmodule

用全加器實現(xiàn)半加器:只需要把全加器的進位端CI進位輸入端屏蔽即可。

?用半加器實現(xiàn)全加器:用兩個半加器如下圖。

Verilog代碼如下:

module half_add(input A,B,output sum,cout ); assign sum=A^B; assign cout=A&B; endmodule //先編寫一個半加器module full_add( input A,B,cinoutput sum,cout ); //通過例化兩個半加器組成一個全加器 wire w1,w2,w3;half_add add1(.A (A),.B (B),.sum (w1),.cout(w2) );half_add add2(.A (cin),.B (w1),.sum (sum),.cout(w3) );assign cout=w2|w3;endmodule

多位加法器的進位原理:

1.串行進位加法器

?從上面的原理圖可以看出,串行進位加法器就是將上一片的進位輸出與下一片的進位輸入相連,用4片1bit全加器串行相接即可實現(xiàn)4bit全加器。

直接描述的Verilog代碼會產(chǎn)生串行進位加法器:

//4位全加器,有低位向本位進位(即有輸入進位) module four_bits_full_add(input [3:0]a,b,input cin,output cout,output [3:0]sum );assign {cout,sum} = a + b + cin; endmodule

但是這種結(jié)構(gòu)的缺點是,必須要等到上一片的結(jié)果算出來之后下一片才能進行工作,當級數(shù)很高的時候計算的時間將是每一片時間的n倍,會出現(xiàn)組合邏輯延時過長的問題。此時另一種進位方法——超前進位加法器就可以解決這一延時過高的問題。

2.超前進位加法器

?超前進位加法器的原理是不等后級把進位算完再傳過來,我們直接通過輸入的數(shù)據(jù)把這個進位直接算出來發(fā)給每一級。

從上面的全加器講解中我們知道,輸出進位co=(A+B)cin+A·B。

?Verilog代碼如下:

module four_bits_fast_add(input [3:0]a,b, input cin, output [3:0]sum, output cout );wire [3:0] g,p; //分別對應(yīng)Gi、Piwire [4:0] c; //對應(yīng)Ciassign p = a | b; // Pi = Ai·Biassign g = a & b;// Gi = Ai+Biassign c[0] = cin; //C0就是第一片的輸入進位assign c[1] = g[0]|(p[0]&c[0]);assign c[2] = g[1]|(p[1]&(g[0]|(p[0]&c[0]) );assign c[3] = g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))));assign c[4] = g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));assign sum =a ^b^ c[3:0]; assign cout = c[4]; //C4就是最后一片的輸出進位 endmodule

總結(jié)

以上是生活随笔為你收集整理的Verilog中的加法器(半加器,全加器,串行、超前进位加法器)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。