Bộ cộng Carry Ripple và bộ cộng Carry Look Ahead 12 4-

Một phần của tài liệu Ngôn ngữ mô tả phần cứng với VHDL (Trang 125 - 128)

Carry ripple và carry look ahead là 2 phương pháp cổ điển để thiết kế

cácc bộ cộng. Phương pháp đầu tiên có thuận lợi là yêu cầu phần cứng ít, trong khi cái thứ hai lại nhanh hơn.

+ B cng carry ripple:

Hìnhd 9.6 chỉ ra 1 bộ cộng ripple cary 4 bit không dấu:

Hình 9.6. Sơđồ b cng ripple carry

Trên sơ đồ ta có thể thấy, với mỗi bit, một đơn vị bộ cộng đầy đủ sẽ được thực hiện. Bảng thật của bộ cộng đầy đủ được chỉ ra bên cạnh sơ đồ, trong đó a, b là các bít đầu vào, cin là bit nhớ vào, s là bit tổng, cout là bit nhớ

ra. Từ bảng thật ta dễ dàng tính được: s = a xor b xor cin

cout = (a and b) xor (a and cin) xor (b xor cin)

Từ công thức trên ta xây dựng chương trình VHDL như sau (Ở đây chúng ta có thể áp dụng cho bất kỳ số lượng đầu vào nào):

LIBRARY ieee;

USE ieee.std_logic_1164.all;

--- ENTITY Bo_cong_carry_ripple IS

GENERIC (n: INTEGER := 4);

PORT ( a, b: IN STD_LOGIC_VECTOR (n-1 DOWNTO 0); cin: IN STD_LOGIC;

s: OUT STD_LOGIC_VECTOR (n-1 DOWNTO 0); cout: OUT STD_LOGIC);

END Bo_cong_carry_ripple;

--- ARCHITECTURE arc OF Bo_cong_carry_ripple IS SIGNAL c: STD_LOGIC_VECTOR (n DOWNTO 0); BEGIN

c(0) <= cin;

G1: FOR i IN 0 TO n-1 GENERATE

s(i) <= a(i) XOR b(i) XOR c(i); c(i+1) <= (a(i) AND b(i)) OR

(a(i) AND c(i)) OR (b(i) AND c(i));

END GENERATE; cout <= c(n); END arc;

---

Kết quả mô phỏng:

Hình 9.7. Kết qu mô phng cho b cng ripple carry

+ Bộ cộng carry look ahead:

Sơđồ bộ cộng carry look ahead 4 bit được chỉ ra trong hình 9.8.1 dưới

đây:

Hình 9.8.1. Sơđồ b cng carry look ahead

Mạch được hoạt động dựa trên các khái niêm generate và propagate. Chính đặc điểm này đã làm cho bộ cộng này thực hiện với tốc độ nhanh hơn so với bộ cộng trước.

Giả sử 2 đầu vào là 2 bit a,b thì 2 tín hiệu p(propagate) và g(generate)

được tính như sau: g = a and b p = a or b Nếu chúng ta xem a, b là các vector: a = a(n-1)…a(1)a(0) ; b = b(n-1)…b(1)b(0) thì g, p được tính như sau: p = p(n-1)…p(1)p(0); g = g(n-1)…g(1)g(0)

Trong đó:

g(i) = a(i) and b(i) p(i) = a(i) or b(i)

Lúc này vector nhớ sẽ là: c = c(n-1)…c(1)c(0), trong đó: c(0) = cin

c(1) = c(0)p(0) + g(0)

c(2) = c(0)p(0)p(1) + g(0)p(1) + g(1) c(i) = c(i-1)p(i-1) + g(i-1)

Từ công thức tình trên, chúng ta viết chương trình thiết kế bộ cộng carry look ahead 4 bit như sau:

--- LIBRARY ieee;

USE ieee.std_logic_1164.all;

--- ENTITY Bo_cong_carry_look_ahead IS

PORT ( a, b: IN STD_LOGIC_VECTOR (3 DOWNTO 0); cin: IN STD_LOGIC;

s: OUT STD_LOGIC_VECTOR (3 DOWNTO 0); cout: OUT STD_LOGIC);

END Bo_cong_carry_look_ahead;

--- ARCHITECTURE Bo_cong_carry_look_ahead OF Bo_cong_carry_look_ahead IS

SIGNAL c: STD_LOGIC_VECTOR (4 DOWNTO 0); SIGNAL p: STD_LOGIC_VECTOR (3 DOWNTO 0); SIGNAL g: STD_LOGIC_VECTOR (3 DOWNTO 0); BEGIN

---- PGU: --- G1: FOR i IN 0 TO 3 GENERATE

p(i) <= a(i) XOR b(i); g(i) <= a(i) AND b(i); s(i) <= p(i) XOR c(i); END GENERATE;

---- CLAU: --- c(0) <= cin;

c(1) <= (cin AND p(0)) OR g(0);

c(2) <= (cin AND p(0) AND p(1)) OR (g(0) AND p(1)) OR

g(1);

c(3) <= (cin AND p(0) AND p(1) AND p(2)) OR (g(0) AND p(1) AND p(2)) OR (g(1) AND p(2)) OR g(2);

(g(0) AND p(1) AND p(2) AND p(3)) OR (g(1) AND p(2) AND p(3)) OR (g(2) AND p(3)) OR g(3); cout <= c(4); END Bo_cong_carry_look_ahead; --- Kết quả mô phỏng:

Hình 9.8.2. Kết qu mô phng cho b cng carry look ahead

Một phần của tài liệu Ngôn ngữ mô tả phần cứng với VHDL (Trang 125 - 128)

Tải bản đầy đủ (PDF)

(150 trang)