Giáo trình Kiến trúc máy tính - Ngô Như Khoa (Phần 2)
Một trong các hoạt động cơ bản của máy tính là lu trữ dữ liệu dạng nhị phân. Các dữ liệu này là các chơng trình hoặc số liệu mà Vi xử lý đa ra hoặc đọc vào tuỳ theo yêu cầu. Bộ nhớ là các thiết bị để thực hiện nhiệm vụ lu trữ dữ liệu của máy vi tính.
Mỗi ô nhớ đợc xác định bởi một địa chỉ. Thông thờng mỗi ô nhớ có dung lợng là 1 byte. Các byte đợc ghép thành từ. Những máy 16 bit số liệu thì tổ chức 2 byte/từ, còn các máy 32 bit số liệu thì độ dài từ gấp đôi (4 byte/từ).
I.1. Trật tự các byte trong từ.
Có thể là từ phải sang trái (vi xử lý họ Intel) hoặc ngợc lại từ trái sang phải (vi xử lý họ Motorola). Trờng hợp dữ liệu lu giữ là số nguyên thì hai cách sắp xếp trên không có trở ngại gì. Nhng khi dữ liệu bao gồm cả số nguyên và cả xâu ký tự . thì có vấn đề.
Xâu kết thúc bằng các byte 0 ở cuối để điền kín chỗ trống của từ, còn số nguyên thì đợc thêm vào các byte ở phần có trọng số cao hơn. Do vậy nếu dịch cách sắp xếp nọ sang cách kia của xâu giống nh của số nguyên thì sẽ bị nhầm.
I.2. Mã phát hiện lỗi và sửa sai.
Số các vị trí bit khác nhau trong hai từ gọi là khoảng cách Hamming. Ví dụ, trong hai từ: 10001001 và 10110001 có khoảng cách Hammming bằng 3.
Để sửa sai, bên cạnh m số bit số liệu của từ, ngời ta thêm vào r bit d (redundant bits) và chiều dài tổng của từ là n : n = m + r
Để phát hiện d bit lỗi đơn, cần dùng mã có khoảng cách d+1. Tơng tự, để sửa lỗi d bit đơn, cần dùng mã có khoảng cách 2d+1. Ví dụ, dùng mã bit parity thêm vào byte số liệu, mã này có khoảng cách bằng 2, dùng để phát hiện 1 bit sai, nhng không sửa đợc lỗi.
Trong truyền 1 khối ký tự, mỗi ký tự có một bit parity để kiểm tra. ở cuối mỗi khối, ta truyền thêm một ký tự là parity của toàn thể bản tin, gọi là longitudinal check (LRC). Phía thu sẽ tính LRC và so với LRC nhận đợc để kiểm tra lỗi. Một phơng pháp nữa để kiểm tra lỗi khi truyền số liệu là dùng CRC (Cyclic redundance check), đó là một đa thức nhị phân d thu đợc khi chia đa thức các bit của bản tin cho một đa thức quy định.
Ví dụ mã sửa sai là mã có 4 từ dài 10 bit nh sau:
0000000000, 0000011111, 1111100000, 1111111111. Mã này có khoảng cách là 5, tức là nó có thể sửa đợc các lỗi kép. Ví dụ nếu ta nhận đợc từ 0000000111, máy thu sẽ biết rằng từ đó phải là 0000011111 (nếu coi nh không có nhiều hơn một lỗi kép). Nhng nếu một lỗi ba xảy ra, biến 0000000000 thành 0000000111 thì ta không sửa lỗi đợc.
Để sửa lỗi, ngời ta dùng thuật toán của Hamming.
nhận, biến đổi dạng tin, phát tin cho thiết bị nhận tin. 5. Nhận và phát tín hiệu nhịp thời gian trao đổi tin cho các khối trong KGN và TBN. II.2. Sơ đồ khối. INTR data in data out INTA INTR A0 ..An I/O BUS Phối hợp I/O bus Thanh ghi đệm đọc Thanh ghi đệm viết Thanh ghi điều khiển Thanh ghi trạng thái Phối hợp TBN bus TBN Giải mã địa chỉ- lệnh data in data out Xử lý ngắt to local bus From local bus Hình 8.1. Sơ đồ khối khối ghép nối. 1. Khối phối hợp đường dây MT. Khối có nhiệm vụ: - Phối hợp mức và công suất tín hiệu với bus I/O của MT. - Cô lập bus I/O với các TBN khi không trao đổi tin. - Điều khiển đưa tin ra, đưa tin vào bus I/O. Các nhiệm vụ trên dược thực hiện nhờ các vi mạch đệm ba trạng thái. 2. Khối giải mã địa chỉ - lệnh. Mỗi thanh ghi đệm (điều khiển, trạng thái, số liệu đọc vào, số liệu đưa ra) của KGN được chọn để ghi và đọc tin nhờ các lệnh đọc, ghi từ khối giải mã địa chỉ - lệnh. Khối giải mã này là những vi mạch giải mã hay tổ hợp các cổng logic. Lối vào được nối với bus I/O của MT, để nhận các tín hiệu địa chỉ (A0 .. An), tín hiệu điều khiển đọc, ghi, các tín hiệu chốt địa chỉ, chốt dữ liệu. Lối ra của khối này là các tín hiệu đọc, ghi cho từng thanh ghi đệm của KGN. 3. Các thanh ghi đệm gồm: - Thanh ghi điều khiển chế độ hoạt động, thanh ghi điều khiển TBN. - Thanh ghi trạng thái hay yêu cầu trao đổi tin của TBN. - Thanh ghi đệm số liệu ghi - Thanh ghi đệm số liệu đọc. 4. Khối xử lý ngắt. Khi nhận, che chắn yêu cầu trao đổi tin của TBN, xử lý ưu tiên và đưa yêu cầu trao đổi tin vào MT. 5. Khối phát nhịp thời gian. Phát nhịp thời gian cho các hoạt động truyền và xử lý tin trong KGN hay TBN. Đôi khi, để đồng bộ, khối còn nhận tín hiệu nhịp đồng hồ từ MT. 6. Khối đệm TBN. Khối có thể biến đổi mức (TTL), biến đổi công suất (cho các TBN là các mạch điều khiển công suất) và biến đổi về dạng tin. 7. Khối điều khiển: Điều khiển hoạt động của các khối, như khối phát nhịp thời gian, chế độ hoạt động, vv... . III. Giải mã địa chỉ cho bộ ghép nối. Việc giải mã địa chỉ cho bộ ghép nối cũng gần giống như giải mã địa chỉ cho mạch nhớ. Chủ yếu ta nghiên cứu việc giải mã địa chỉ cho các cổng. Thông thường các cổng có địa chỉ 8 bit tại A0-A7 hoặc có địa chỉ 16 bit tại A0-A15. Tuỳ theo độ dài của toán hạng trong lệnh là 8 hay 16 bit ta sẽ có 1 cổng 8 bit hay 2 cổng 16 bit có địa chỉ liền nhau để tạo nên từ với độ dài tương ứng. Trong thực tế ít có hệ sử dụng hết 256 cổng I/O khác nhau, nên ta chỉ xét ở đây các bộ giải mã địa chỉ 8 bit A0-A7 và mạch giải mã thông dụng như 74LS138 để tạo ra các xung chọn thiết bị. Các mạch giải mã đơn giản có thể được thiết kế từ các mạch NAND như hình 8.2 Địa chỉ cổng I IO/ a. Mạch tạo xung chọn cổng vào. Địa chỉ cổng O IO/ b. Mạch tạo xung chọn cổng ra. Hình 8.2 Mạch giải mã địa chỉ đơn giản cho KGN I/O. Trong trường hợp cần nhiều xung chọn ở đầu ra cho các cổng vào/ra có địa chỉ liên tiếp, ta có thể dùng các mạch giải mã loại 74LS138 như ví dụ sau: A B C G1 A0 A1 A2 IO/ A B C G1 A0 A1 A2 IO/ Hình 8.3. Các bộ giải mã với địa chỉ 00-07 cho 8 cổng vào và 8 cổmg ra. III. Các phương pháp điều khiển vào ra dữ liệu. Nói chung, người ta phân biệt ra 3 phương pháp điều khiển vào/ ra dữ liệu như sau: + vào/ra dữ liệu điều khiển bằng cách thăm dò trạng thái sẵn sàng của thiết bị ngoại vi. + vào/ra dữ liệu điều khiển bằng cách ngắt bộ VXL. + vào/ ra dữ liệu điều khiển bằng phần cứng phụ để thâm thập trực tiếp vào bộ nhớ (dùng DMAC). Mỗi phương pháp điều khiển vào/ra dữ liệu nói trên có những đặc điểm khác nhau và được ứng dụng trong những trường hợp khác nhau. Trong phần này chúng ta sẽ lần lượt nghiên cứu từng phương pháp điều khiển trên. III.1. Vào/ra dữ liệu bằng phương pháp thăm dò. Vấn đề điều khiển vào/ra dữ liệu sẽ là đơn giản nếu thiết bị ngoại vi luôn sẵn sàng để làm việc với CPU. Ví dụ, với thiết bị vào như bộ phận đo nhiệt độ số lắp sẵn trong một hệ thống điều khiển lúc nào cũng có thể cung cấp số đo về nhiệt độ của đối tượng cần điều chỉnh, hay thiết bị ra như bộ đèn LED dùng để hiển thị giá trị nhiệt độ trong hệ thống nói trên thì lúc nào cũng có thể biểu hiện thông tin đó. Như vậy khi CPU cần có thông tin về nhiệt độ của đối tượng thì nó chỉ việc đọc dữ liệu tại cổng phối ghép với bộ đo nhiệt độ và nếu CPU muốn biểu diễn thông tin vừa đọc lên đèn LED thì nó chỉ việc đưa ra tín hiệu điều khiển tới đó mà không cần kiểm tra xem các thiết bị này có đang sẵn sàng làm việc hay không. Tuy nhiên, trong thực tế không phải lúc nào CPU cũng làm việc với các đối tượng luôn sẵn sàng như trên. Thông thường khi CPU muốn trao đổi dữ liệu với một đối tượng nào đó, trước tiên nó phải kiểm tra xem thiết bị đó có đang ở trạng thái sẵn sàng hay không, nếu có thì mới thực hiện việc trao đổi dữ liệu. Việc kiểm tra tình trạng thiết bị được thực hiện nhờ tín hiệu móc nối (handshake signal) được lấy từ mạch ghép nối, do người thiết kế tạo ra. Hình 8.4 ví dụ một cách tạo ra tín hiệu móc nối . Trong ví dụ này, để đơn giản ta giả thiết CPU chỉ làm việc với một thiết bị vào và 1 thiết bị ra. Một cổng vào số 0 (có địa chỉ 00) được dùng để đọc trạng thái sẵn sàng của hai thiết bị trên. Tín hiệu sẵn sàng của thiết bị ngoại vi số 1 (cổng vào 01) được đặt tại bit D0, tín hiệu sẵn sàng của thiết bị ngoại vi số 2 (cổng ra 02) được đặt vào bit D1. Các bit này sẽ có giá trị 1 khi thiết bị ngoại vi tương ứng ở trạng thái sẵn sàng làm việc với CPU và chúng sẽ được đưa vào bus dữ liệu khi CPU đọc nó bằng lệnh đọc cổng vào số 0. Chương trình trao đổi dữ liệu sẽ kiểm tra các bit báo sẵn sàng này và sẽ có các đáp ứng phù hợp. D0 D1 D7 Device 1 Buffer 3 States pr Q D clk clr 5v Latch 8 bits Buffer 3 States Device 2 pr Q D clk clr 5v Latch 8 bits Hình 8.4. Sơ đồ tạo tín hiệu móc nối. Khi thiết bị vào số 1 có 1 byte số liệu cần trao đổi, nó đưa ra xung STB để cho phép mạch chốt, chốt lấy 8 byte dữ liệu đó, đồng thời kích cho mạch lật D (mạch tạo tín hiệu sẵn sàng) làm việc. CPU thăm dò trạng thái của thiết bị 1 qua bit D0 khi nó đọc cổng 00. Đến khi CPU đọc 1 byte dữ liệu vào thì đồng thời nó xoá luôn mạch tạo trạng thái để chuẩn bị cho lần làm việc sau. III.2. Vào/ra dữ liệu bằng cách ngắt CPU. Trong cách vào/ra dữ liệu điều khiển bằng phưưng pháp thăm dò, trước khi tiến hành trao đổi dữ liệu CPU phải dành toàn bộ thời gian vào việc xác định trạng thái sẵn sàng của thiết bị cần trao đổi. Trong hệ thống VXL với cách làm việc như vậy, thông thường CPU được thiết kế chủ yếu chỉ là để phục vụ cho việc vào/ ra dữ liệu và thực hiện các tác vụ xử lý dữ liệu liên quan. Trong thực tế, người ta phải tận dụng những khả năng của CPU để thực hiện những công việc khác ngoài việc trao đổi dữ liệu với TBN, chỉ khi nào có yêu cầu trao đổi dữ liệu thì mới yêu cầu CPU tạm dừng công việc hiện tại để phục vụ việc trao đổi dữ liệu. Sau khi hoàn thành thì CPU lại trở lại thực hiện tiếp công việc đang tiến hành, hoặc thực hiện một công việc mới. Cách làm việc như vậy gọi là ngắt CPU để trao đổi dữ liệu. Một hệ thống như vậy có thể đáp ứng rất nhanh với các yêu cầu trao đổi dữ liệu trong khi vẫn có thể thực hiện các công việc khác. Hình 8.5. trình bày một cách đơn giản để đưa ngắt số hiệu N vào bus dữ liệu trong khi cũng tạo ra yêu cầu ngắt đưa vào chân INTR của bộ VXL 8088. AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 INTR 74LS244 5V Hình 8.5. Đưa số hiệu ngắt vào bus dữ liệu Trong trường hợp đơn giản, tại một thời điểm nhất định chỉ có một yêu cầu ngắt IRi được tác động, khi đó ở đầu ra mạch NAND sẽ có xung yêu cầu ngắt đến CPU. Tín hiệu IRi được đồng thời đưa qua mạch khuyếch đại đệm để tạo ra số hiệu ngắt tương ứng, số hiệu ngắt này được CPU đọc vào khi nó đưa ra tín hiệu chấp nhận ngắt. Bảng 8.1 cho quan hệ giữa IRi và số hiệu ngắt N tương ứng. Bảng 8.1. Quan hệ giữa IRi và số hiệu ngắt. AD7 IR6 (AD6) IR5 (AD5) IR4 (AD4) IR3 (AD3) IR2 (AD2) IR1 (AD1) IR0 (AD0) N 1 1 1 1 1 1 1 0 FEH (254) 1 1 1 1 1 1 0 1 FDH (253) 1 1 1 1 1 0 1 1 FBH (251) 1 1 1 1 0 1 1 1 F7H (247) 1 1 1 0 1 1 1 1 EFH (239) 1 1 0 1 1 1 1 1 DFH (223) 1 0 1 1 1 1 1 1 BFH (191) Trong trường hợp có nhiều yêu cầu ngắt một lúc, người ta phải sử dụng các mạch xử lý ưu tiên ngắt. Một trong những mạch xử lý ngắt ưu tiên điển hình là mạch điều khiển ngắt 8259A. III.3. Vào/ra dữ liệu bằng DMA. Trong các cách điều khiển việc trao đổi dữ liệu giữa thiết bị ngoại vi và VXL bằng các cách thăm dò trạng thái sẵn sàng của thiết bị ngoại vi hay bằng cách ngắt bộ VXL như trên, dữ liệu thường được chuyển từ bộ nhớ qua bộ VXL rồi từ đó ghi vào thiết bị ngoại vi hoặc ngược lại, từ thiết bị ngoại vi, dữ liệu được đọc vào qua bộ VXL rồi từ đó ghi vào bộ nhớ. Vì thế tốc độ trao đổi dữ liệu phụ thuộc rất nhiều vào tốc độ thực hiện của các lệnh MOV, IN và OUT của bộ VXL. Do đó tốc độ trao đổi dữ liệu nói chung là chậm. Trong thực tế có những khi rất cần thiết phải trao đổi dữ liệu thật nhanhnvới thiết bị ngoại vi: như khi đưa dữ liệu hiển thị ra màn hình hoặc đọc, ghi đĩa ... . Trong các trường hợp đó ta cần có được khả năng ghi/ đọc dữ liệu trực tiếp với bộ nhớ (DMA- truy nhập trực tiếp vào bộ nhớ mà không qua CPU) thì mới đáp ứng được yêu cầu về tốc độ trao đổi dữ liệu. Để làm được điều này, các hệ VXL nói chung đều phải dùng thêm mạch chuyên dụng để điều khiển việc truy nhập trực tiếp bộ nhớ (Direct Memory Access Controller, DMAC) và phương pháp này là phương pháp điều khiển vào/ra dữ liệu bằng DMA. Có thể lấy một ví dụ để minh hoạ tính ưu việt về tốc độ trao đổi dữ liệu dùng DMAC như sau: Trong khi một mạch DMAC như 8237A-5 của Intel có thể điều khiển việc chuyển 1 byte trong 1 mảng dữ liệu từ bộ nhớ ra thiết bị ngoại vi chỉ mất 4 chu kỳ đồng hồ, thì bộ VXL 8088 cần khoảng 40 chu kỳ đồng hồ để thực hiện công việc này. Cơ chế trao đổi dữ liệu bằng DMAC được giới thiệu chi tiết trong chương 6 tài liệu này.
File đính kèm:
- giao_trinh_kien_truc_may_tinh_ngo_nhu_khoa_phan_2.doc