Altifigence Academy

16 / 63 · Khái niệm

Bộ cộng và cấu trúc truyền carry

Suy ra biểu thức bộ cộng đầy đủ; phân tích chức năng, độ rộng và độ trễ ripple carry cùng nhau.

Biểu diễn tổng một hàng bằng hai bit

Tổng ai,bi,cia_i,b_i,c_i nằm trong 0~3, nên cần bit tổng sis_i và carry sang hàng sau ci+1c_{i+1}. Số lẻ đầu vào bằng 1 làm bit tổng bằng 1; ít nhất hai đầu vào bằng 1 làm carry bằng 1.

si=ai⊕bi⊕cis_i=a_i\oplus b_i\oplus c_i
ci+1=aibi+(ai⊕bi)cic_{i+1}=a_ib_i+(a_i\oplus b_i)c_i

Định nghĩa generate gi=aibig_i=a_ib_i và propagate pi=ai⊕bip_i=a_i\oplus b_i, ta có ci+1=gi+picic_{i+1}=g_i+p_ic_i; ở đây ++ là OR. Bộ bán cộng là trường hợp không có đầu vào carry, với tổng là XOR và carry là AND.

Đổi ba đầu vào, kiểm tra a+b+cin = sum+2×cout luôn đúng. carry trở thành đầu vào hàng tiếp theo, không có cùng trọng số với sum.

Tổng tại hàng hiện tại và carry sang hàng sau

a + b + cin = sum + 2 × cout

Carry đi qua bao xa

Xét phép cộng bốn bit 1111 + 0001. Carry được tạo ở bit 0 và truyền qua ba hàng còn lại. Tổng lưu là 0000, carry cao nhất là 1. Trong ripple-carry, carry hàng thấp có thể làm tính toán hàng cao phải chờ.

c2=g1+p1g0+p1p0c0c_2=g_1+p_1g_0+p_1p_0c_0

Khai triển như vậy cho thấy khả năng tính carry song song. Bộ cộng nhanh thực kết hợp propagate/generate theo nhóm, nhưng phải đánh đổi diện tích và độ trễ gồm fan-in, dây nối và thư viện cell. Dấu + trong RTL không bắt buộc được cài bằng một mạch ripple-carry cụ thể.

Giữ lại độ rộng tổng trong thiết kế

SystemVerilog
logic [3:0] a, b, sum;
logic cin, cout;
logic [4:0] wide_sum;
assign wide_sum = {1'b0, a} + {1'b0, b} + {4'b0000, cin};
assign sum = wide_sum[3:0];
assign cout = wide_sum[4];

Giá trị lớn nhất là 15+15+1=3115+15+1=31, nên năm bit đủ. Xác định trước chỉ cần tổng thấp, cần truyền carry sang tầng sau hay cần bão hòa. Công cụ thực hành dưới đây kiểm tra bảng chân trịBảng chân trị Bảng liệt kê đủ mọi tổ hợp đầu vào và đầu ra tương ứng. Sự thay đổi theo thời gian được kiểm tra riêng bằng dạng sóng. Tìm hiểu thêm một hàng bộ cộng đầy đủ, không đo độ trễ kết quả tổng hợp thực.

Thay đổi đầu vào

Tự thử

Với unsigned bốn bit, a=9a=9, b=6b=6, cin=1c_{in}=1, tìm tổng đầy đủ, tổng bốn bit và carry. Nếu diễn giải cùng mạch là cộng signed, có thể chỉ dùng carry để quyết định overflow không?

Đọc giải thích

Tổng đầy đủ là 16, chuỗi 10000, nên sum=0000, carry=1. Diễn giải signed thì 1001 là -7, do đó −7+6+1=0-7+6+1=0 nằm trong phạm vi. Carry và overflow có dấu là hai điều kiện khác nhau.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.