超前進位加法器

来源:https://www.cnblogs.com/mxdon/archive/2019/08/08/11324569.html
-Advertisement-
Play Games

概述 之前學習了一位半加器與一/四位全加器的相關知識,接著學習超前進位加法器加深認識 八位級聯進位加法器 設計文件 採用硬體行為方式描述八位全加器 模擬結構圖 模擬文件 模擬波形 說明:首先在設計文件中,由最開始的進位輸入ci逐級傳遞給c,最後傳遞給co,每位數據都需要傳遞一次上級數據,代碼運算次數 ...


概述

之前學習了一位半加器與一/四位全加器的相關知識,接著學習超前進位加法器加深認識

八位級聯進位加法器

設計文件

採用硬體行為方式描述八位全加器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module qjq(co,sum,a,b,ci);
input[7:0] a,b;
input ci;
output[7:0] sum;
output co;
reg[7:0] sum;
reg co;
reg[7:0] G,P,C; //中間變數,分別是生產函數、傳遞函數、和進位函數
always @(a or b or ci)
begin
G[0] =a[0] & b[0]; //生產函數,加數相與,產生進位
P[0] =a[0] | b[0]; //傳遞函數,如果a或b有不為0,則將進位輸入傳遞
C[0] =ci; //最後位的進位輸入,初始化位ci
sum[0] =G[0]^ P[0] ^ C[0];//輸出數據
G[1] =a[1] & b[1];
P[1] =a[1] | b[1];
C[1] =G[0] |(P[0] & C[0]);//c=ab+(a+b)ci=G|(P&ci)
sum[1] =G[1] ^ P[1] ^ C[1];
G[2] =a[2] & b[2];
P[2] =a[2] | b[2];
C[2] =G[1] |(P[1] & C[1]);
sum[2] =G[2] ^ P[2] ^ C[2];
G[3] =a[3]& b[3];
P[3] =a[3] | b[3];
C[3] =G[2] |(P[2] & C[2]);
sum[3] =G[3] ^ P[3] ^ C[3];
G[4] =a[4] & b[4];
P[4] =a[4] | b[4];
C[4] =G[3] |(P[3] & C[3]);
sum[4] =G[4] ^ P[4] ^ C[4];
G[5] =a[5] & b[5];
P[5] =a[5] | b[5];
C[5] =G[4] |(P[4] & C[4]);
sum[5] =G[5] ^ P[5] ^ C[5];
G[6] =a[6] & b[6];
P[6] =a[6] | b[6];
C[6] =G[5] |(P[5] & C[5]);
sum[6] =G[6] ^ P[6] ^ C[6];
G[7] =a[7] & b[7];
P[7] =a[7] | b[7];
C[7] =G[6] |(P[6] & C[6]);
sum[7] =G[7] ^ P[7] ^ C[7];
co=G[7] |(P[7] & C[7]);
end
endmodule

模擬結構圖

模擬文件

1
2
3
4
5
6
7
8
9
10
11
12
13
module qjqsimu;
reg [7:0] a,b;
reg ci;
wire [7:0] sum;
wire co;
qjq sl(co,sum,a,b,ci);
initial
begin
a=8'b00000000;b=8'b00000000;ci=0; //初始化,可將a初始大一些得到co為1的情況
end
always #2 assign {a,b}={a,b}+1; //延遲2ps,增大觀察範圍
always #1 assign ci=~ci;
endmodule

模擬波形

說明:首先在設計文件中,由最開始的進位輸入ci逐級傳遞給c,最後傳遞給co,每位數據都需要傳遞一次上級數據,代碼運算次數多,延時高。

四位超前進位加法器

設計文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
module qjq(sum,c_out,a,b,c_in);
input[3:0] a,b;
input c_in;
output[3:0] sum;
output c_out;
wire[4:0] g,p,c;
assign c[0]=c_in;
assign p=a|b;
assign g=a&b;
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=p^c[3:0];
assign c_out=c[4];
endmodule

模擬結構圖

模擬文件

1
2
3
4
5
6
7
8
9
10
11
12
13
module qjqsimu;
reg [3:0] a,b;
reg c_in;
wire [3:0] sum;
wire c_out;
qjq U3(.a(a),.b(b),.c_in(c_in),.sum(sum),.c_out(c_out));
initial
begin
a=4'b0000;b=4'b0000;c_in=0;
end
always #10 assign {a,b}={a,b}+1;
always #5 assign c_in=~c_in;
endmodule

模擬波形

說明:設計文件中對每一個進位的運算都進行了合併,總共計算8次,如果按照八位級聯加法器的寫法,每一位需進行4次運算,加上最後的進位,總共應需要17次計算。顯然是提高了效率。

八位超前進位

剛入手八位超前進位加法器的話,寫之前就在為進位鏈的表達式頭疼,但是做了一下四位超前進位,可以總結出表達式的規律,進而再寫一遍進行驗證,與級聯加法器的模擬結果完全相同,其設計文件源碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
module qjq(co,sum,a,b,ci);
input [7:0] a,b;
input ci;
output [7:0] sum;
output co;
wire [7:0] G,P,C; //中間變數,分別是生產函數、傳遞函數、和進位函數
assign G=a&b;
assign P=a|b;
assign C[0]=ci;
assign C[1]=G[1]|(P[1]&G[0])|(P[1]&P[0]&ci);
assign C[2]=G[2]|(P[2]&G[1])|(P[2]&P[1]&G[0])|(P[2]&P[1]&P[0]&ci);
assign C[3]=G[3]|(P[3]&G[2])|(P[3]&P[2]&G[1])|(P[3]&P[2]&P[1]&G[0])|(P[3]&P[2]&P[1]&P[0]&ci);
assign C[4]=G[4]|(P[4]&G[3])|(P[4]&P[3]&G[2])|(P[4]&P[3]&P[2]&G[1])|(P[4]&P[3]&P[2]&P[1]&G[0])|(P[4]&P[3]&P[2]&P[1]&P[0]&ci);
assign C[5]=G[5]|(P[5]&P[4]&G[3])|(P[5]&P[4]&P[3]&G[2])|(P[5]&P[4]&P[3]&P[2]&G[1])|(P[5]&P[4]&P[3]&P[2]&P[1]&G[0])|(P[5]&P[4]&P[3]&P[2]&P[1]&P[0]&ci);
assign C[6]=G[6]|(P[6]&G[5])|(P[6]&P[5]&G[4])|(P[6]&P[5]&P[4]&G[3])|(P[6]&P[5]&P[4]&P[3]&G[2])|(P[6]&P[5]&P[4]&P[3]&P[2]&G[1])|(P[6]&P[5]&P[4]&P[3]&P[2]&P[1]&G[0])|(P[6]&P[5]&P[4]&P[3]&P[2]&P[1]&P[0]&ci);
assign C[7]=G[7]|(P[7]&G[6])|(P[7]&P[6]&G[5])|(P[7]&P[6]&P[5]&G[4])|(P[7]&P[6]&P[5]&P[4]&G[3])|(P[7]&P[6]&P[5]&P[4]&P[3]&G[2])|(P[7]&P[6]&P[5]&P[4]&P[3]&P[2]&G[1])|(P[7]&P[6]&P[5]&P[4]&P[3]&P[2]&P[1]&G[0])|(P[7]&P[6]&P[5]&P[4]&P[3]&P[2]&P[1]&P[0]&ci);
assign sum=P^C[7:0];
assign co=C[7];
endmodule

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 另一篇文章,也對TempData 做了很詳細的介紹,鏈接地址:https://www.jianshu.com/p/eb7a301bc536 。 MVC中的 TempData 可以在Controller之間進行傳遞,如果使用過了之後,不管是在View里使用,還是在controller里使用,再次獲取就 ...
  • 前言: 本文一切觀點和測試代碼是在python3的基礎上。 Content: 1.什麼是魔法函數,魔法函數__getitem__在python中應用。 2.python的數據模型和數據模型這種設計對python的影響 3.python常用的魔法函數 4.從len()方法看魔法函數的特點 5.魔法函數 ...
  • 剛到大三時前面兩年荒廢了 什麼都沒學到所以打算自學個編程 自己對Java非常感興趣 就打算自學Java 但是一開始看書 有很多看不懂 非常苦惱 也打算過去培訓 但是培訓太貴了 最後打算還是先自學一段時間 不行再去培訓 最後買了一套教程 覺得這套教程非常不錯 老師講解非常細緻 通俗易懂 自學了幾個月 ...
  • 一、集成開發環境(Integrated Develop Environment,簡稱IDE) 1.什麼是集成開發環境 (1)集成開發環境可以使軟體開發變得更簡單 (2)沒有IDE工具: i.需要安裝JDK,需要配置環境變數;需要手動的將java源文件編譯生成class位元組碼文件; ii.java源程 ...
  • 結合 "Spring 後置處理器源碼" 和 "Spring Aware源碼" ,再來看下 Spring AOP 的源碼。 啟動 AOP 使用 @EnableAspectJAutoProxy 這個註解來啟用 AOP 的能力了。它使用 @Import 導入類 AspectJAutoProxyRegist ...
  • 概述 一些同學的Java課設有這樣一個問題,比較感興趣就做了一下 功能介紹: 1、可增加鬧鐘 2、可刪除鬧鐘 3、時間到了響鈴 4、關閉鬧鐘不會丟失鬧鐘(因為鬧鐘存儲在txt文件中,不會因程式關閉就終止) 缺點 1、沒有使用多線程,鬧鐘響起時只能等待1分鐘或者關閉程式 2、界面設計不夠美觀,後期有時 ...
  • 概述 電腦二級在近兩年新加了python的選擇,趁機考了一下,順便記錄一下學習的一些所獲 第一章 程式設計語言概述 考綱考點: 這一部分主要是介紹電腦語言的公共常識,一些嘗試我就按照自己的理解方式來記憶: 程式設計語言——電腦與人類之間的翻譯官,所以稱為交互體系,翻譯官用的語言稱為電腦程式, ...
  • 前言 本來想把《瘋狂工作流講義 activiti6.0》這本書裡面的實例拿過來,但是這本書我看完後,認為裡面編寫的activiti6的核心API代碼片段不是很清晰,有不少需要雕琢的地方纔好形成一篇博客。 所以我就把以前看過的黑馬activiti5的案例拿過來放到activiti6.0依賴中運行測試, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...