c, Liên kết thông qua stack
6.2.5. Lập trình nano
Trong hình 6.10 ở trên, chúng ta đã nghiên cứu về cấu trúc của CPU, trong đó ta thấy có một vùng nhớ control store kích thước 2048 x 41 bit. Đây là vùng nhớ
chứa các vi lệnh. Các vi lệnh này sẽ được nạp vào thanh ghi điều khiển MIR để điều khiển các luồng dữ liệu trong hệ thống. Vấn đề đặt ra là ta có thể thiết kế
vùng nhớ này như thế nào
Thông thường, vùng nhớ control store sẽ lưu trữ 2048 vi lệnh khác nhau, mỗi vi lệnh có kích thước 41 bit. Tuy nhiên, nếu trong trường hợp hệ thống có nhiều vi lệnh giống nhau, chúng ta có thể tiết kiệm kích thước vùng nhớ này bằng cách là lưu trữ một vi lệnh duy nhất được gọi là nanostore và sẽ đánh chỉ số để truy cập vào các nanostore này.
Hình 6.19a chỉ ra kích thước bộ nhớ trong trường hợp cơ bản là 2048 x 41 bit. Khi đó dung lượng cần thiết của bộ nhớ là 2048 x 41 = 83968 bit
Hình 6.19. (a) Vùng nhớ control store (b) Lập trình nano
Bây giờ hãy giả sử là hệ thống của ta không sử dụng 2048 vi lệnh khác nhau mà chỉ sử dụng khoảng 100 vi lệnh. Thông thường, 100 vi lệnh này vẫn nằm trong vùng nhớ 2048 x 41 bit, trong đó có nhiều hàng có cùng một nội dung. Với mục
đích sắp xếp lại vùng nhớ đó để giảm thiểu dung lượng bộ nhớ cần sử dụng (nói cách khác là lập trình lại vùng nhớ - lập trình nano), ta có thể thực hiện như sau. Vùng nhớ thứ nhất cần dùng là vùng nhớ có tên nanoprogram được sử dụng để
chứa 100 vi lệnh khác nhau. Vùng nhớ thứ 2 là vùng nhớ microgram có 2048 hàng tương ứng với số hàng mặc định trong ARC, số cột trong mỗi hàng có số
bit tương ứng với số vi lệnh, ở đây là 100. Do đó ta cần sử dụng ở đây là k = log2(100) = 7. Vùng nhớ microgram này chứa 2048 giá trị mà mỗi giá trị mã hóa tương ứng 1 lệnh trong vùng nhớ nanoprogram. Lúc đó tổng vùng nhớ mà ta cần sử dụng là 18436 bit