DIV nguồn (Unsigned Divide)
G A8 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 O3 O4 O5 O6 O7 00010110000111
4.2.3. Phối ghép 8088 với bộ nhớ
Sau khi đã biết một số phương pháp giải mã cho bộ nhớ, ta sẽ thực hiện phối ghép 8088 – 5 MHz với bộ nhớ. Có thể nói rằng nếu khơng có sự chênh lệch về tốc độ thâm nhập bộ nhớ và tốc độ của CPU thì việc phối ghép CPU với bộ nhớ chỉ đơn giản là giải mã cho mạch nhớ. Phần lớn các trường hợp, điều này có thể đúng với các mạch nhớ RAM và các mạch nhớ EPROPM có thời gian thâm nhập ≤ 250 ns, cách phối ghép CPU với các mạch này về cơ bản là giống nhau. Đối với các mạch nhớ ROM và EPROM có thời gian thâm nhập lớn (ví dụ như: 2716, 2732, ... với tac = 450 ns) thì khi phối ghép với CPU 8088 – 5MHz ta cần tính tốn thận trọng hơn.
Trong phần đầu chương, tại ví dụ khi xét CPU 8088 – 5MHz thì mỗi Ti kéo dài 200 ns. Theo biểu đồ thời gian đọc bộ nhớ (đã đơn giản hố) thì việc đọc bộ nhớ kéo dài từ T1 đến T3 mất 600 ns.
Ttrễ địa chỉ = 110 ns, Tgiữ R = 30 ns (thời gian giữ của dữ liệu khi đọc) Ttrễ đệm = 40 ns (trễ khi truyền dữ liệu qua các mạch đệm)
==> thời gian thâm nhập = 3*T - Ttrễ địa chỉ - Tgiữ R - Ttrễ đệm = 420 ns
Và kết luận: Bộ nhớ ghép với 8088 – 5MHz cần có thời gian thâm nhậơ bộ nhớ (tac) ≤
420 ns thì hiệu quả, ngược lại nếu tac ≥ 420 ns thì 8088 phải xen thêm các chu kỳ đợi (Tw).
Vậy nếu muốn ghép EPROM 2732 có tac = 450 ns vào khơng gian nhớ của CPU 8088 – 5MHz thì phải có cách báo cho CPU xen thêm chu kỳ đợi Tw. Sau đây là sơ đồ mạch phối ghép EPROM 2732 có thêm mạch NAND để tạo tín hiệu cho phép mạch giải mã và tín hiệu yêu cầu đợi để đưa đến chân RDY1 của 8284. Như vậy, mỗi khi 8088 đọc EPROM 2832 thì một chu kỳ đợi sẽ được xen thêm.
Việc đặt modul nhớ này vào địa chỉ nào trong không của 8088 là do việc thực hiện mạch giải mã địa chỉ để tạo ra tín hiệu CS. Nó được quyết định bởi các bit từ A19 – A15 và tín hiệu điều khiển IO/M.
Việc phối ghép SRAM với 8088 thường đơn giản hơn so với ROM (nói chung) có tốc độ thâm nhập thấp (tac lớn) vì SRAM có tac nhỏ nên khơng cần có mạch xen thêm các chu kỳ đợi Tw.
Kiểm tra Parity để phát hiện lỗi trong bộ nhớ RAM
Bộ nhớ bán dẫn DRAM dùng cho các máy tính cá nhân ngày nay có giá ngày càng giảm nên người ta đưa vào sử dụng các bộ nhớ DRAM với dung lượng ngày càng lớn và vì vậy việc kiểm tra parity để phát hiện lỗi trong thiết bị nhớ là hết sức cần thiết. Cụ thể, người ta dùng thêm 1 bit (bit thứ 9) để làm bit kiểm tra parity cho 8 bit dữ liệu – người ta so sánh bit parity khi ghi và khi đọc để phát hiện lỗi. Thực tế có thể dùng một trong hai kiểu parity là parity chẵn (even parity) và parity lẻ (odd parity).
Parity chẵn: Khi tổng số bit 1 trong 8 bit dữ liệu là chẵn thì ghi vào bit thứ 9 số 0, ngược lại thì ghi 1 (bit parity = xor (8 bit dữ liệu)).
Parity lẻ: Khi tổng số bit 1 trong 8 bit dữ liệu là lẻ thfi ghi vào bit thứ 9 số 0, ngược lại thì ghi 1 (bit parity = xor (8 bit dữ liệu) xor1).
Mặc dù cơng việc trên có thể thực hiện bằng chương trình tuy nhiên nếu thực hiện bằng phần cứng thì cho kết quả nhanh hơn rất nhiều. Trong thực tế, người ta đã chế tạo ra các vi mạch chuyên dụng thực hiện công việc trên khi kiểm tra parity nhằm xác định lỗi của bộ nhớ khi hoạt động (ghi/đọc). Một trong những vi mạch loại này là mạch tạo parity và phát hiện lỗi 74AS280.
Số bit 1 trong các đầu vào: A-I
Đầu ra
Σeven Σold
0, 2, 4, 6, 8 1 0
1, 3, 5, 7, 9 0 1
Σeven = xor(A-I); Σold = (xor(A-I))xor1
Hình vẽ: Sơ đồ ghép nối EPOM 2732 với 8088
A y0B y1 B y1 C y2 y3 y4 G2A y5 G2B y6 G1 y7 A12 A13 A15 IO/ M B000- B1FFF RD CS 0 D7- D0
Các chân chọn chip cho 7 vi mạch nhớ SRAM 8Kx8 còn lại BE000-BFFFF A19-A15 A11-A0 Bộ Tạo Tw Tới RDY1 của 8284 +5 V EPROM 2732 OE CE Σeven A B 74A280 I Σold 9 bit dữ liệu vào
Hình vẽ: Sơ đồ khối và bảng trạng thái của 74AS280
Dưới đây là sơ đồ tổng thể của một bộ nhớ SRAM trong thực tế có sử dụng vi mạch 74AS280 để tạo và kiểm tra parity. Nếu có sai parity do có lỗi tại bộ nhớ trong khi ghi/đọc thì lỗi này được dùng để tạo ra yêu cầu ngắt không che được NMI gửi đến CPU. Trong sơ đồ có sử dụng thêm 4 mạch nhớ 4044 (là loại có dung lượng 4Kx1) để ghi các bit parity. Các vi mạch nhớ này được giải mã (chọn) thông qua ẵ mạch giải mã 74LS139 (mạch giải mã này gần giống 74LS138, nó được tách làm 2 nửa làm việc độc lập nhau). Trong sơ đồ này, ta sử dụng parity chẵn, tức là khi số bit 1 tại các đầu vào từ A đến H của 74LS280A là chẵn (I nối đất = 0) thì ta ghi 1 vào bộ nhớ parity, ngược lại ta ghi 0. Khi đọc dữ liệu, bit parity được đưa đến đầu vào I của 74LS280B, như vậy nếu các bit đầu đọc được tại các chân từ A đến H (dữ liệu) khơng đổi thì đầu ra Σ even của 74LS280B = 0 nên không xuất hiện yêu cầu ngắt NMI.
Với sơ đồ này ta chỉ có thể phát hiện sai tại 1 bit nào đó (là đặc điểm của parity) của byte nhớ (Nếu sai tại 2 bit thì parity khơng phát hiện được).
Trong thực tế tồn tại những mạch phức tạp hơn cho phép phát hiện và sửa sai ghi thêm vào byte dữ liệu nên có khả năng phát hiện sai tại 2 bit và tự động sửa sai được tại 1 bit lỗi (nếu chỉ lỗi tại 1 bit).
Việc ghép bộ vi xử lý 8088 – 5MHz (vi xử lý nói chung) với DRAN là phức tạp hơn vì cần có thêm các mạch dồn kênh địa chỉ và mạch làm tươi (refresh). Thông thường, để cho thơng tin lưu trên DRAM là chính xác (được bảo tồn) thì ta phải làm tươi DRAM định kỳ sau mỗi 15,6 µs/lần.
Các mạch DRAM thường có 2 chế độ làm tươi:
Làm tươi cả mảng: một mảng các phần tử nhớ gồm 128 đến 256 (thậm chí 512) hàng được chọn ra để làm tươi cứ 2 – 4 ms (hoặc 8 ms) trên một lần.
Làm tươi từng hàng: với tốc độ sao cho đảm bảo mỗi phần tử nhớ đều được làm tươi trong giới hạn 15,6 µs/lần.
Việc làm tươi được thực hiện bằng cách ghi hoặc đọc một loạt các ô nhớ. Số lương bit được làm tươi đồng thời phụ thuộc vào tổ chức bên trong của mỗi mạch nhớ. Một “chu kỳ làm tươi đặc biệt” là một chu kỳ khi việc làm tươi là cơng việc nội bộ của DRAMvà được hồn tắt trong khi các thành phần (bộ phận) khác của bộ nhớ vẫn đang làm việc (trong suốt đói với CPU và hệ thống). Điều này được thực hiện bằng việc đưa ra các địa chỉ hàng và xung RAS nhằm chọn ra một hàng các phần tử cần được làm tươi (RAS only refresh). Xung RAS sẽ khiến cho dòng định chọn làm tươi được đọc và ghi lại. Địa chỉ làm tươi được lấy từ một bộ đếm 7,8 (hoặc 9) bit tuỳ theo kích thước của mạch nhớ cần làm tươi. Nội dung của bộ đếm này được tăng lên sau mỗi chu kỳ làm tươi sao cho tất cả các dòng đều được làm tươi trong thời gian đã định. Kiểu làm tươi này cịn được gọi là làm tươi ẩn vì trong lúc làm tươi một vùng DRAM nào đó thì bộ vi xử lý vẫn ghie/đọc ở vùng nhớ khác.
Đối với DRAM, nói chung các nhà chế tạo đã cấu trúc mạch sao cho thời gian làm tươi một phần tử nhớ là 15,6 µs/lần.
RASCAS CAS
Khi phối ghép DRAM với bộ nhớ ta cần thực hiện:
• Dồn kênh 2 loại địa chỉ cho mỗi mạch nhớ và cung cấp xung cho phép chốt 2 loại địa chỉ trên là RAS và CAS.
• Cung cấp các tín hiệu điều khiển ghi/đọc bộ nhớ.
• Làm tươi mỗi hàng trong thời gian đảm bảo yêu cầu khơng mất mát thơng tin.
• Đảm bảo khơng có tranh chấp trong hoạt động bình thường của vi xử lý với cơng việc làm tươi.
Để đơn giản các công việc khi phối ghép DRAM với vi xử lý, các nhà sản xuất vi mạch nhớ DRAM đã cung cấp các “bộ điều khiển DRAM” thực hiện các chức năng của mạch dồn kênh cho địa chỉ hàng, cột và mạch làm tươi mà khơng ảnh hưởng nhiều đến sự hoạt động bình thường của hệ vi xử lý.
Các chân tín hiệu của bộ điều khiển DRAM TMS 4500A:
• RA7 – RA0 (Row Address) [I]: Địa chỉ hàng, thường được nối với Address bus tại các chân địa chỉ phần thấp: A7 – A0.
• CA7 – CA0 (Column Address) [I]: Địa chỉ cột, thường được nối với Address bus tại các chân địa chỉ phần cao: A15 – A8.
• MA7 – MA0 (Memory Address) [O]: Địa chỉ cho vi mạch nhớ, được nối trực tiếp với DRAM tại các chân địa chỉ: A7 – A0.
• ALE (Address Latch Enable) [I]: Tín hiệu cho phép chốt địa chỉ hàng, địa chỉ cột, REN và CS.
• CS (Chip Select) [I]: Xung chọn vi mạch để bắt đầu việc ghi/đọc DRAM, được nối qua bộ điều khiển trong thời điểm sườn xuống (âm) của xung ALE.
• REN1 [I]: Chọn một trong 2 khối nhớ DRAM nối với bộ điều khiển:
o REN1 = 1 thì chọn RAS0 o REN1 = 0 thì chọn RAS1 Tạo nhịp Và điều khiển MUX Counter Row Addr latch
Col Addr latch
CS Latch Trọng tài Tạo xung Làm tươi RAS0 RAS1 CAS RDY RA7-RA0 CA7-CA0 ALE ALE REN1 CS TWST FS0 FS1 CLK MA7-MA0 ACW ARC REFREQ
• ACR [I]: Sườn lên của xung này sẽ kết thúc việc đọc. Thường được nối với RD trong chế độ MIN của 8088.
• ACW [I]: Sườn lên của xung này kết thúc việc ghi. Thường được nối với WR trong chế độ MIN của 8088.
• CLK [I]: Đầu vào xung đồng hồ (nối với CLK của 8088).
• REFREQ [I/O]: Khi tín hiệu này là vào: để điều khiển việc bắt đầu chu kỳ làm tươi. Cịn khi là ra: để báo cho bên ngồi biết bộ nhớ đang được làm tươi.
• RAS1, RAS0 [O]: Các chân cho phép chốt địa chỉ hàng cho các khối nhớ DRAM.
• CAS [O]: Chân cho phép chốt địa chỉ cột DRAM.
• RDY [O]: RDY = 0 khi DRAM đang được làm tươi, nên chưa sẵn sàng (chân này được nối với RDY của 8088).
• TWST (Timming/Wait Strap) [I]: Chọn trạng thái chờ và các thông số thời gian khác. Khi TWST = 1 thì bộ vi xử lý phải xen thêm một số trạng thái chờ (1 Tw) mỗi khi ghi/đọc bộ nhớ DRAM.
• FS1, FS0 [I]: Cùng với TWST để chọn chế độ làm việc theo như bảng sau:
Bảng: TWST FS1 FS0 Số trạng thái chờ Chu kỳ làm tươi Tần số xung làm tươi (KHz) Số nhịp cho 1 lần làm tươi 0 0 0 0 Ngoài REFREQ 4 0 0 1 0 Tclkx31 64-95 3 0 1 0 0 Tclkx46 64-85 3 0 1 1 0 Tclkx61 64-82 4 1 0 0 1 Tclkx46 64-85 3 1 0 1 1 Tclkx61 64-80 4 1 1 0 1 Tclkx76 64-77 4 1 1 1 1 Tclkx91 64-88 4
Ví dụ: Ví dụ về một ứng dụng của bộ điều khiển DRAM TMS 4500A trong (để điều
khiển) mạch nhớ gồm 4x4464 để tạo nên bộ nhớ 128 KB bắt đầu tại địa chỉ 00000h.
Trong sơ đồ, việc ghép nối chân REN1 với đường địa chỉ A16 để chọn ra 2 vùng nhớ 64 KB và CS nối với mạch NAND để đặt 2 mảng nhớ vào địa chỉ đã định. Các chân TWST, FST1, FST0 được đặt tương ứng là 0, 1 và 1 để khơng có trạng thái chờ và việc làm tươi được tiến hành sau 61 chu kỳ đồng hồ và kéo dài trong 4 nhịp của xung làm tươi. Với tần số fclk = 5 MHz thì nhịp làm tươi cho mỗi hàng là 12,2 μs (≈giá trị yêu cầu là 15,6 µs. Trong khi bộ điều khiển làm tươi đang làm tươi bộ nhớ thì RDY = 0 và CPU bị đưa vào trạng thái chờ.