DIV nguồn (Unsigned Divide)
T giữa w Low active
4.2.2. Giải mã địa chỉ cho bộ nhớ
Mỗi vi mạch nhớ hay một modul nhớ khi ghép với bộ vi xử lý cần phải được bộ vi xử lý tham chiếu tới một cách chính xác khi thực hiện các thao tác ghi/đọc. Có nghĩa là mỗi “modul” nhớ cần được gán cho một vùng không gian riêng biệt cụ thể (trong không gian quản lý chung của bọ vi xử lý), có địa chỉ xác định. Việc gán địa chỉ cụ thể cho modul nhớ được thực hiện nhờ một xung chọn chip từ mạch giải mã địa chỉ. Việc phân chia không gian tổng thể của bộ vi xử lý thành các vùng khác nhau dành cho các mục đích khác nhau gọi là phân vùng bộ nhớ.
Ví dụ:
Với 8088 vì có 20 bit địa chỉ (A19 – A0) nên không gian tổng thể dành cho bộ nhớ là 220 = 210*210 = 1 MB (1 byte/ngăn nhớ). Trong khơng gian tổng thể đó:
1) Vùng không gian 1 KB đầu, kể từ địa chỉ thấp nhất: 00000h – là phải được dành cho RAM vì tại đây phải có chỗ dành cho bảng vector ngắt gồm 256 (ngắt)*4 (byte)= 1KB).
2) Vùng nhớ có địa chỉ FFFF0h thì nhất thiết phải được dành cho ROM hoặc EPROM – chứa chương trình khởi động hệ thống. Vì sau khi bật nguồn, CS sẽ mạng giá trị FFFF0h (là địa chỉ
khởi động của CPU).
Bộ giải mã địa chỉ để tạo ra xung chọn chip thường có cấu tạo như hình vẽ bên:
Đầu vào bộ (mạch) giải mã là các tín hiệu địa chỉ và các tín hiệu điều khiển khác nữa (nếu cần
RASCAS CAS A7-A0 Hình vẽ: DRAM TMS 4464 (64Kx8) WR RD RD RD A7-A0 D7-D0 TSM 4464 OE CE CAS RAS Address Decode Address Control CS0 CS1 CSn-1
thiết). Các tín hiệu địa chỉ gồm các bit địa chỉ có quan hệ nhất định với các tín hiệu chọn chip ở đầu ra. Tín hiệu điều khiển thường là tín hiệu IO/M dùng để phân biệt đối tượng mà bộ vi xử lý chọn làm việc là bộ nhớ hay thiết bị vào/ra (I/O device). Mạch giải mã là khâu gây ra việc trễ thời gian từ bộ vi xử lý đên thiết bvị ngoại vi mà trong khi chọn mạch nhớ/thiết bị ngoại vi ta cần tính đến. Tuỳ theo quy mơ (u cầu) của mạch giải mã mà ở đầu ra ta có thể có nhiều tín hiệu chọn chip (CS).
Giải mã đầy đủ cho một modul nhớ yêu cầu ta phải đưa đến đầu vào của mạch giải mã các tín hiệu địa chỉ sao cho tín hiệu đầu ra của nó chỉ chọn riêng mạch nhớ đã định trước. Trong trường hợp này ta phải dùng tổ hợp đầy đủ cả các đầu và địa chỉ tương ứng để chọn mạch nhớ. Nếu ta bỏ bớt đi một tín bit địa chỉ nào đó thì đó là việc giải mã thiếu cho modul nhớ, vì xung chọn chip ở đầu ra mạch giải mã ngoài việc chọn mạch nhớ ở vùng đã định sẽ có thể chọn ra các mạch nhớ ở vùng khác nữa. Vậy, việc giải mã thiếu thì có thể tiết kiệm được linh kiện khi xây dựng mạch giải mã nhưng lại khơng đảm bảo tính đơn trị theo ý nghĩa của việc giải mã.
Trong thực tế, thông thường khi thiết kế mạch giải mã địa chỉ cho modul nhớ người ta thường tính dơi ra một chút để dự phịng sự phát triển tăng thêm dung lượng của bộ nhớ mà vẫn có thể tận dụng (sử dụng) được mạch giải mã sẵn có.
Xây dựng mạch giải mã bằng các mạch NAND (các mạch logic đơn giản)
Bằng các gates logic kiểu NAND, ta có thể xây dựng được mạch giải mã địa chỉ đơn giản với số lượng tín hiệu chọn chip ở đầu ra là hạn chế. Ta phải đưa đến đầu vào của mạch cửa NAND nhiều lối vào một tổ hợp thích hợp của các bit địa chỉ để nhận được ở đầu ra của nó tín hiệu chọn chip cho modul nhớ.
Ví dụ: Cho modul nhớ SRAM có dung lượng 32 KB (32Kx8). Xây dựng mạch giải mã
để ghép modul trên với 8088 tại địa chỉ 08000h.
Chú ý: Một địa chỉ bắt đầu cho một modul nhớ cần đảm bảo sao cho có giá trị các bit địa chỉ đưa vào modul nhớ để chọn ra ô nhớ cần tham chiếu phải bằng 0, chúng sẽ “chạy”
lần lượt tới 1 để chọn hết đủ tất cả các ô nhớ. Giải:
Modul nhớ 32 KB cần có 15 bit địa chỉ để chọn các ơ nhớ.
Khơng gian địa chỉ của 8088 gồm 20 bit địa chỉ: A19 – A0.
Nên phải sử dụng các bit địa chỉ thấp: A14 – A0 để đưa vào modul nhớ, còn lại 5 bit địa chỉ phần cao và các tín hiệu điều khiển IO/M sẽ đi vào mạch giải mã. Vậy ta có sơ đồ như sau:
Triển khai địa chỉ của modul nhớ ta có: 0000 1000 0000 0000 0000=08000h 0000 1000 0000 0000 0001=08001h … SRAM 32KB NAND A14 – A0 D7 – D0 WR RD A19 – A15 IO/M CS NAND A15 CS A16 A17 A18 A19 IO/M
0000 1111 1111 1111 1111=0FFFFh Phần cố định Phần thay đổi
Các tín hiệu điều khiển vào mạch NAND nhiều đầu vào phải đồng thời bằng 1 thì đầu ra CS = 0.
Vậy ta có sơ đồ như bên:
Hoặc ta có thể sử dụng các mạch logic đơn giản khác để xây dựng mạch giải mã sau cho có nhiều đầu ra CS = 0 như sau:
Kết luận: Để thực hiện mạch giải mã kiểu này,
có nhiều cách sắp xếp các phần tử logic (gates) để đưa ra được tín hiệu CS = 0 ở đầu ra. Tuy nhiên người thiết kế cần phân tích hàm đầu vào và tín hiệu đầu ra và tối giản các phần tử để sao cho số lượng các gates logic sử dụng trong mạch giải mã là ít nhất (tối ưu mạch giải mã). Ví dụ, mạch giải mã trên có thể thay thế bằng mạch giải mã bên:
Mạch này cũng thực hiện đúng yêu cầu như mạch giải mã trên, tuy nhiên tốn nhiều phần tử gates logic hơn nên chưa tốt.
Giải thích: Trong mạch giải mã cho modul nhớ này, xung chọn chip (CS) sẽ có tác động
(CS = 0 – tích cực thấp) khi ta truy xuất bộ nhớ (ghi/đọc) tại địa chỉ nằm trong phạm vi 08000h – 0FFFFh, 5 bit địa chỉ phần cao (A19 – A15) phối hợp cùng tín hiệu điều khiển IO/M (= 0 để chỉ ra sẵn sàng truy xuất bộ nhớ) để tạo ra xung chọn chip cho modul nhớ. Mỗi ô nhớ cụ thể trong 32 KB của modul nhớ sẽ do các bit thấp còn lại (A14 – A0) của bus địa chỉ chọn ra. Để kiểm chứng nhanh điều này ta thấy bit địa chỉ A15 để chọn ra vùng nhớ 32 KB, bit A16 để chọn ra vùng nhớ 64 KB, ... các vùng nhớ này nằm rải rác nhau trong không gian nhớ 1 MB.
Xây dựng mạch giải mã bằng mạch giải mã chuyên dụng 74LS138
Khi ta muốn có nhiều đầu ta chọn chip (CS) ở đầu ra mạch giải mã mà vẫn dùng các mạch logic đơn giản thì thiết kế sẽ trở nên rất cồng kềnh do số lượng các gates tăng lên. Trong trường hợp đó người ta thường sử dụng mạch giải mã chuyên dụng có sẵn. Một trong các mạch giải mã kiểu đó hay được sử dụng là 74LS138. Đây là mạch giải mã 3 – 8 (vào 3, ra 8).
Sơ đồ khối của 74LS138 và bảng trạng thái
A15 CS CS A16 A17 A18 A19 IO/M NOT OR NOR NAND A15 CS A16 A17 A18 A19 IO/M NOT NAND AND