Thứ Tư, 17 tháng 4, 2019

[SystemC][High Level Design]Bài 2 - Phân tích model specification

Bài viết này hướng dẫn việc thực hiện model specification trên ví dụ SCPU. Để thực hiện được bước này các bạn cần phải hoàn chỉnh bước phân tích logic để tạo ra logic specification. Logic specification được hướng dẫn cụ thể trong các tài liệu đã liệt kê trong bài 1.

1) Model specification là gì?
Ở bước này, chúng ta cần xác định rõ các điểm sau: 
  1. Số lượng module: số lượng này bằng với số khối chức năng (sub-module) cộng với top module đã được phân tích trong logic specification. 
  2. Số lượng process và tên cụ thể của từng process trong sub-module: người thiết kế cần phân định rõ mỗi process sẽ bao gồm các mạch nguyên lý (mạch logic) nào. Tên process sẽ đặt bằng chữ in hoa thể hiện chức năng của mạch nguyên lý. Việc dùng chữ in hoa giúp dễ phân biệt giữa tên process với tên biến hoặc tên tín hiệu. 
  3. Số lượng port và tên cụ thể của các port ở các module: Thông tin này đã có đầy đủ ở logic specification. 
  4. Số lượng các tín hiệu (signal) và tên cụ thể của từng tín hiệu: số lượng các tín hiệu chính là tổng số ngõ ra của tất cả các process nếu là sub-module hoặc tổng số ngõ ra của các sub-module nếu là top module, không tính các ngõ ra nối đến port. Ngõ ra của một process là tín hiệu sẽ được kết nối đến một hoặc nhiều process khác trong cùng một module hoặc với module khác. Khi tín hiệu này nối đến module khác, nó được gọi là port.
Hình 1: Cấu trúc một sub-module trong phương pháp HLD
Hình 2: Cấu trúc một top module trong phương pháp HLD
2) Process
Process được sử dụng để mô hình hóa các mạch logic, mạch tổ hợp và mạch tuần tự, của phần cứng. Process cho phép mô tả các hành vi song song như hoạt động của phần cứng. Các process sẽ thực thi song song còn code bên trong một process được thực thi tuần tự.
3) Phân tích tổng quan SCPU
SPCU gồm bốn module, một top module và ba sub-module.
  1.  scpu_top là top module SPCU kết nối các sub-module
  2.  scpu_fetch là module chứa tất cả các process của khối FETCH
  3. scpu_decoder là module chứa tất cả các process của khối DECODER
  4. scpu_execute là module chứa tất cả các process của khối EXECUTE.

Hình 3: Cấu trúc tổng quan của SCPU
Hình 3 thể hiện rõ số lượng module với tên gọi cụ thể. Hình 4 xác định các port và tín hiệu của TOP module.
Hình 4: Các port và tín hiệu của TOP mdule
Việc phân tích tổng quan cho model SCPU đã hoàn tất. Bạn đọc có thể thấy việc phân tích model kế thừa toàn bộ logic specification và thêm một số thông tin khác để hỗ trợ việc viết model code về sau.
4) Phân tích chi tiết SCPU
4.1) Những lưu ý khi phân tích sub-module
Điểm khác của sub-module so với TOP module là sub-module chứa các mô hình mạch tổ hợp và mạch tuần tự của một thiết kế phần cứng, trong khi TOP module chỉ chứa các kết nối giữa các sub-module.
Các mạch tổ hợp và mạch tuần tự được mô hình hóa thành các process trong SystemC. Để đảm bảo model code tổng hợp được trên nhiều phần mềm khác nhau và dễ đọc, các bạn cần lưu ý một số điểm sau đây:
  1. Nếu một tín hiệu vừa là port ngõ ra của module vừa là tín hiệu nội sử dụng giữa các process trong module thì tạo một tín hiệu trung gian, khác với tên port ngõ ra, để sử dụng
  2. Không đặt chung mạch tổ hợp và mạch tuần tự trong cùng một process
  3. Tên process là chữ in hoa và tên các port, tên tín hiệu và tên module là chữ thường.
  4. Đặt tên process phải gợi nhớ được chức năng của mạch tổ hợp hoặc mạch tuần tự mà nó mô hình.
Điểm 1 cần tuân thủ vì một số phần mềm không hỗ trợ tổng hợp việc “đọc” giá trị từ một port ngõ ra. Vì vậy, chúng ta sẽ thao tác trên một tín hiệu trung gian và lấy tín hiệu này gán đến ngõ ra mong muốn. Bạn đọc sẽ hình dung rõ hơn trong các phân tích tiếp theo và phần hướng dẫn viết model code.
Điểm 2 cần phải tuân thủ khi mạch tổ hợp và mạch tuần tự là hai mạch độc lập. Trong model code, mạch tổ hợp chỉ phụ thuộc vào trạng thái các ngõ vào trong khi mạch tuần tự hoạt động theo các sự kiện của xung clock và reset. Ràng buộc này tương tự với việc bạn mô tả RTL code.
Điểm 3 và điểm 4 giúp model dễ đọc hơn.
4.2) Module FETCH
4.2.1) Các process mô hình hóa memory
Các mạch liên quan đến memory gồm 3 process:
  1. IR_DR_INPUT: Lựa chọn giá trị từ memory để đưa đến thanh ghi IR và DR. Ngõ ra của process này là mem_dout[7:0] và đây là một signal.
  2. MEM_OUTPUT: Lựa chọn giá trị từ memory để đưa đến khối DECODER. Ngõ ra của process này là fetch_mem_dout[7:0] và đây là một port của khối FETCH.
  3. MEM_WRITE: Giải mã địa chỉ để ghi vào memory. Ngõ ra của process là 256 thanh ghi của mảng bộ nhớ mem_array và đây là các signal nối đến process IR_DR_INPUT và MEM_OUTPUT.
Hình 5: Process mô hình hóa IR_DR_INPUT

Hình 6: Process mô hình hóa MEM_OUTPUT
Hình 7: Process mô hình hóa MEM_ARRAY


4.2.2) Process mô hình hóa thanh ghi IR
Hình 8: Process mô hình hóa thanh ghi IR

4.2.3) Process mô hình hóa thanh ghi DR
Thanh ghi DR được mô hình hóa bởi 2 process là DATA_REG_IN và DATA_OUTPUT.
  1. DATA_REG_IN là process mô hình hóa thanh ghi DR với ngõ ra là fetch_dr_in[7:0]. Ở đây fetch_dr_in[7:0] là một tín hiệu nội sẽ được kết nối đến các process khác trong khối FETCH. Đồng thời giá trị của ngõ cũng được đưa đến ngõ ra fetch_dr[7:0] để nối đến khối DECODER
  2. DATA_OUTPUT chỉ là process gán giá trị thanh ghi DR đến output fetch_dr[7:0].
Như đã trình bày ở phần trên, giá trị thanh ghi DR vừa được sử dụng ở các process khác bên trong khối FETCH, vừa là ngõ ra đến module khác nên tín hiệu trung gian fetch_dr_in[7:0] được tạo ra. Điều này khác với logic specification ban đầu.

Hình 9: Process mô hình hóa thanh ghi DR
4.2.4) Process mô hình hóa thanh ghi PC
Process mô hình hóa thanh ghi PC sử dụng tín hiệu fetch_dr_in làm ngõ vào chứ khoogn dùng trực tiếp fetch_dr[7:0] như logic specification.
Hình 10: Process mô hình hóa thanh ghi PC
4.2.5) Process mô hình hóa mạch chọn địa chỉ truy xuất memory
Hình 11: Process mô hình hóa mạch chọn địa chỉ truy xuất memory
4.3) Module DECODER
4.3.1) Process mô hình hóa logic lựa chọn giá trị thanh ghi Rd và Rs
Ở đây process sử dụng tín hiệu nội dc_rs_tmp[7:0] giữ giá trị của tín hiệu dc_rs[1:0], chứ không đưa trực tiếp giá trị vào tín hiệu dc_rs[7:0] như logic specification.
Hình 12: Process mô hình hóa thanh ghi Rs
Đối với logic lựa chọn thanh ghi Rd, cách mô tả cũng tương tự như logic lựa chọn thanh ghi Rs.
Hình 13: Process mô hình hóa thanh ghi Rd
4.3.2) Mạch giải mã lệnh và điều khiển các thanh ghi R0/R1/R2/R3
Đối với mạch này ta chia ra làm 3 process:
  • SEL_REG_LOAD tạo tín hiệu điều khiển việc ghi giá trị vào R0/R1/R2/R3
  • REG_IN_SEL lựa chọn dữ liệu lưu vào thanh ghi R0/R1/R2/R3
  • LOAD_DATA_TO_REG mô hình các thanh ghi R0/R1/R2/R3
Hình 14: Process mô hình hóa logic tạo tín hiệu cho phép ghi
Hình 15: Process mô hình hóa logic chọn giá trị ghi
Hình 16: Process mô hình hóa các thanh ghi R0/R1/R2/R3
4.3.3) Control Counter
Hình 17: Hai process mô hình hóa control counter
4.3.4) Process mô hình hóa logic giải mã lệnh nhảy
Hình 18: Process mô hình hóa logic giải mã lệnh nhảy
4.3.5) Process mô hình hóa các ngõ ra DECODER






Hình 19: Các process mô hình hóa các ngõ ra khối DECODER
4.4) Module EXECUTE
Khối EXECUTE chỉ có một proccess là ALU mô hình hóa các tính toán số học.
Hình 20: Process mô hình hóa ALU của khối EXECUTE
Kết thúc bài này chúng ta đã phân tích xong model specification của SCPU. Một số điểm cần lưu ý:
  • Model specification được tạo ra từ logic specification nên các bạn cần đọc cách tạo logic specification của SCPU trước khi đọc bài này. Trong model specification, chúng ta chỉ phân chia các logic thành các process để phục vụ việc viết model code sau này.
  • Model specification giúp xác định rõ các port của module và tín hiệu giao tiếp giữa các process
Lịch sử cập nhật:
1. 2019.Apr.17 - Tạo lần đầu
2. 2019.Apr.20 - Sửa input của từ *[8] thành *[7] hình 18 - Process mô hình hóa logic giải mã lệnh nhảy  

1. Trương Công Hoàng Việt
2. Lê Hoàng Vân
3. Nguyễn Hùng Quân

0 bình luận:

Đăng nhận xét