XILINX FPGA 7系之 Carry Chains

目錄

0、緒論

0.1、半加器

0.2、全加器

1、XILINX CARRY4


 

0、緒論

在聊進位邏輯之前,先準備一些預備知識關於加法器(半加器和全加器)電路;

0.1、半加器

半加器(half adder)的功能是將兩個一位二進制數相加。它具有兩個輸入和兩個輸出,兩個輸入分別爲 A、B,代表着等待相加的兩個數,輸出爲 Sum、Carry;Sum代表加的結果,Carry 代表進位邏輯;

半加器的真值表爲:

A B Carry Sum
0 0 0 0
1 0 0 1
0 1 0 1
1 1 1 0

加法器電路主要的構成元件由 XOR(異或門)構成,XOR 的真值表爲:

所以一個半加器可以由一個異或門和一個與門組成:

半加器的簡化圖爲:

 

0.2、全加器

全加器(full adder)將兩個一位二進制數相加,並根據接收到的低位進位信號,輸出和、進位輸出。全加器的三個輸入信號爲兩個加數 A、B 和低位進位 Cin

全加器真值表爲:

A B Cin Cout Sum
0 0 0 0 0
1 0 0 0 1
0 1 0 0 1
1 1 0 1 0
0 0 1 0 1
1 0 1 1 0
0 1 1 1 0
1 1 1 1 1

全加器的邏輯電路爲:

全加器的簡化圖爲:

 

1、XILINX CARRY4

XILINX 7 系列提供的 CLB 中的 SLICE 資源,每個 SLICE 包含了一個 CARRY4 進位邏輯:

先整理出輸入輸出,如下所示:

image

其中,

  • CI:是上一個 CARRY4 的進位輸出,位寬爲1;
  • CYINT:是進位的初始化值,位寬爲1;
  • DI:是數據的輸入(兩個加數的任意一個),位寬爲4;
  • SI是兩個加數的異或,位寬爲4
  • O:是加法結果輸出,位寬爲4;
  • CO:是進位輸出,位寬爲4;(爲什麼進位輸出是4bit?後面有解釋)

這裏我們要先解釋一下FPGA中利用Carry Chain實現加法的原理,比如兩個加數分別爲 a = 4'b1000和 b=4'b1100,其結果應該是 8+12=20

a = 4'b1000;
b = 4'b1100;

S = a ^ b = 4'b0100;
D = b = 4'b1100;          //D取a也可以
CIN = 0;                  //沒有上一級的進位輸入
CYINIT = 0;               //初始值爲0
// 下面爲CARRY4的計算過程,具體的算法跟上圖中過程一樣
S0 = 0;                  //S的第0位
O0 = S0 ^ 0 = 0 ^ 0 = 0;
CO0 = DI0 = 0;            //上圖中的MUXCY,S0爲0時,選擇1,也就是DI0,S0爲1是選擇2
S1 = 0;
O1 = S1 ^ CO0 = 0 ^ 0 = 0;
CO1 = DI1 = 0;
S2 = 1;
O2 = S2 ^ CO1 = 0 ^ 1 = 1;
CO2 = CO1 = 0;
S3 = 0;
O3 = S3 ^ CO2 = 0 ^ 0 = 0;
CO3 = DI3 = 1;

加法最終的輸出結果爲:

a = 4'b1000;

b = 4'b1100;

{O3,O2,O1,O0}=4’b0100

{CO3,CO2,CO1,CO0}=4’b1000

最終結果:{CO3,O3,O2,O1,O0} = 5’b10100 = 20

可以看出 {O3,O2,O1,O0} 是 a+b 的半加器結果,而 {CO3,CO2,CO1,CO0} 是 a+b 的進位結果;

輸出給下一級的 COUT 只是CO[3]。

 

參考文獻:

https://blog.csdn.net/zhanghaijun2013/article/details/103122927

https://blog.csdn.net/qq_16184883/article/details/82918184

https://blog.csdn.net/bbs165198646/article/details/76895919

https://blog.csdn.net/vivid117/article/details/102725318

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章