xilinx FPAG 学习分享 (1)----CARRY4原理分析(超前快速进位逻辑结构)

学习FPAG例程,发现综合后产生了一个CARRY4的逻辑单元。没看明白乍回事。决定研究一下。
查看官网说明:
https://www.xilinx.com/support/documentation/user_guides/ug474_7Series_CLB.pdf
xilinx FPAG 学习分享 (1)----CARRY4原理分析(超前快速进位逻辑结构)_第1张图片
没太看明白。大概说了O[3:0]是运算的输出,CO[3:0]作为进位级联用的。S[3:0]和DI[3:0]是数据输入。作为运算用的。但是图中看并没有实现Sx和DIx的运算。只是对Sx和CIN做了异或。

好吧,到目前并没有看太懂。于是做个简单的加法运算,看看综合后电路图啥样吧。

module add(a,b,c,d,e);// 模块接口
input [5:0] a; // 输入信号a
input [5:0] b; // 输入信号b
input [5:0] c; // 输入信号a
input [5:0] d; // 输入信号b
output[7:0] e; // 求和输出信号
wire [6:0]outa1,outa2; // 定义输出网线型
assign e = outa2+outa1; // 把两部分输出结果合并

adder u1 (.ina(a),.inb(b),.outa(outa1)); // 调用adder 模块,自定义名字为u1
adder u2 (.ina(c),.inb(d),.outa(outa2)); // 调用adder 模块,自定义名字为u2
endmodule

//adder 子模块
module adder(ina,inb,outa );// 模块接口
input [5:0] ina; // ina-输入信号
input [5:0] inb; // inb-输入信号
output [6:0] outa; // outa-输入信号
assign outa = ina + inb; // 求和
endmodule // 模块结束

程序实现了一个加法运算。看看综合后的效果。
xilinx FPAG 学习分享 (1)----CARRY4原理分析(超前快速进位逻辑结构)_第2张图片
综合后出现了CARRY4。程序a+b的实现并不是直接连接到DI和S上的。
其中S[3:0]已经进行了一次异或操作(LUT查找表实现的,异或就是加法不进位)。数据在进入CARRY4之前已经进行了加法运算,只是还没有判断进位标志。

这样一看,大概了解了,CARRY4的原理过程了。
1 端口S[3:0]是要求数据的异或输入;
2 端口DI[3:0]是数据的输入(a,b都可以),通过选择器判断是否是进位标志;
3 MUXCY选择器作为向下一级输出标志的选择端口;

举个栗子:

 // 需要求和的数据
 a=4'b0101;
 b=4'b0011;
 ->
 S = a^b = 4'b0110;
 D= b    = 4'b0011;
 //CARRY4 计算过程
S0 =0;
O0=S0^0=0;
OC0 :  (OC0=D0=1;)
   if(S0 == 0)
   {
        OC0 = D0;
   }else
   {
         OC0=CIN;
   }
/////////////////////////////////
S1=1;
O1=S1^OC0 = 0
OC1 =OC0=1;
/////////////////////////////////
S2=1; 
O2=S2^OC1=0;
OC2=OC1=1;
////////////////////////////////
S3=0;
O3=S3^OC2=1;
OC3=D3=0;

所以O[3:0]=4b1000, OC[3:0] = 4’b0111;

你可能感兴趣的:(xilin学习分享)