lệnh goto, giá trị của thanh ghi PLC sẽ ựược ánh xạ tới bắt [7:0] của từ lệnh, như ựược mô tả trong hìnhẦ..
Hình 3- 15: Tiến trình thực hiện lệnh GOTO
- Khi thực hiện lệnh rẽ nhánh CALL hoặc bất kì một lệnh nào mà PCL là toán hạng ựắch của lệnh thì bắt [7:0] là giá trị của trường k
PCL Instruction Word 0 0 7 7 10 PA[1:0]
trong từ lệnh, riêng bắt thứ 8 không ựược lấy ra từ từ lệnh mà luôn bị xóa ựể có giá trị 0.
Hình 3- 16: Tiến trình thực hiện lệnh CALL
Hình 3- 17: Tổ chức bộ nhớ dữ liệu, bao gồm cả thanh ghi chức năng ựặc biệt và thanh ghi chức năng chung
Các thanh ghi chức năng chung:
Các thanh ghi chức năng chung có chức năng giống như bộ nhớ RAM của một hệ vi xử lý dùng ựể lưu trữ dữ liệu các biến khi tắnh toán chương trình. Các thanh ghi chức năng chung gồm 16 thanh ghi trong mỗi bank ựược ánh xạ tới vùng
PCL Instruction Word 0 0 7 7 10 PA[1:0] 0 General Purpose Registers Bank 0 10h 1Fh General Purpose Registers Bank 1 30h 3Fh General Purpose Registers Bank 2 50h 5Fh General Purpose Registers Bank 3 70h 7Fh General Purpose Registers 08h PORTC 07h PORTB 06h PORTA 05h FSR 04h STATUS 03h PCL 02h TMR0 01h INDF 00h 20h 2Fh 40h 4Fh 60h 6Fh
ựịa chỉ cao của bank tương ứng ( từ 0x10 tới 0x1F). Riêng ựối với bank0 còn có thêm 8 thanh ghi chức năng chung có ựịa chỉ từ 0x08 tới 0x0F. Với thiết kế như vậy bộ nhớ RAM có tổng cộng là 56 bytes.
Hình 3- 18: Sơ ựồ kiến trúc của vi xử lý.
Tổng hợp các thiết kế ựược ựưa ra cho tới cuối chương này, ta có sơ ựồ khối của vi ựiều khiển như ựược chỉ ra trên hình 3-18 gồm toàn bộ các ựơn vị chức năng, các ựường bus kết nối giữa các ựơn vị chức năng, luồng ựi của dữ liệu trong vi xử lý và ựộ rộng của các ựường dữ liệu.
Chương ba ựã trình bày về kiến trúc của vi xử lý ựược sử dụng trong vi ựiều khiển, thiết kế luồng dữ liệu và mô ựun ựiều khiển, thiết kế bộ nhớ chương trình cũng như bộ nhớ dữ liệu. Các chương tiếp theo sẽ dựa vào các thiết kế của chương này, dùng các ngôn ngữ mô tả phần cứng ựể thiết kế, mô phỏng vi ựiều khiển. EEPROM 2048x12 INSTRUCTION REGISTER INSTRUCTION DECODER PC STACK1 STACK2 STACK3 STACK4 W ALU STATUS
TRISA PORTA TRISB PORTB TRISC PORTC
8 8 8 DATA BUS FROM W 8 FROM W 8 FROM W 8 8 TMR0 FSR GENERAL PURPOSE REGISTER FILE 8 8 5-7 9 12 12 5 8 11 11 8 OPTION REG PRESCALER T0CKI FREQUENCY DIVIDER
Chương 4: THIẾT KẾ TESTBENCH VÀ PHƯƠNG PHÁP MÔ PHỎNG TRÊN MODELSIM
Trong quy trình thiết kế các hệ thống LSI, thường rất mất thời gian vào việc verification. Quá trình verification có thể chia ra làm hai gian ựoạn, giai ựoạn thứ nhất là verification trên máy tắnh dùng các phần mềm mô phỏng RTL, trong luận văn này tác giả dùng phần mềm ModelSim của Mento graphic ựể mô phỏng chức năng cũng như giản ựồ xung của hệ thống. Mô phỏng chức năng ựể kiểm tra xem thiết kế ựã thực hiện ựược ựúng các yêu cầu ựặt ra hay chưa trong ựiều kiện lý tưởng ( không quan tâm tới tốc ựộ của clock, coi như thời gian trễ truyền tắn hiệu giữa các cổng bằng không). Mô phỏng này rất quan trọng vì nó ựảm bảo không còn lỗi trong chương trình lập trình, không có lỗi trong mã nguồn RTL và các chức năng ựặt ra ban ựầu ựạt yêu cầu. Sau khi ựã ựảm bảo rằng không còn lỗi nào và ựảm bảo thực hiện ựúng các chức năng ựược thiết kế ban ựầu, tiếp theo ta phải mô phỏng hệ thống thực, mô phỏng trong ựiều kiện thực tế, mô phỏng thực tế thường có thể hiểu chắnh là việc thử prototype trên FPGA. Việc mô phỏng này ựảm bảo rằng thiết kế của ta sẽ chạy ựúng trên hệ thống thực.
Chương này sẽ trình bày cơ sở lý thuyết, phương pháp luận của việc thiết kế testbench ựể mô phỏng và kiểm tra chức năng của phần cứng ựược thiết kế. Chương tiếp theo sẽ trình bày thiết kế các module phần cứng theo như thiết kế datapath và ựiều khiển ở chương trên, sau ựó sẽ kiểm tra (verify) các module này.
Ngày nay sự phát triển ngày càng phức tạp của các hệ thống nhúng ựã tạo ra rất nhiều thách thức ựối với những chuyên gia phát triển phần cứng bởi vì các hệ thống ngày nay là sự tắch hợp của cả phần cứng và phần mềm, không những vậy các yêu cầu về chất lượng và ựộ ổn ựịnh của hệ thống ngày càng cao. Gần ựây, cả các kĩ sư công nghệ cũng như những nhà nghiên cứu ựã phát triển một số lớn các kĩ thuật verification hệ thống ựộng theo kiểu ựồng mô phỏng (mô phỏng cả phần cứng và phần mềm cùng một lúc). Trên thực tế những kĩ thuật này dựa trên các ựặc ựiểm khác nhau của các thành phần phần cứng và phần mềm của một hệ thống nhúng. Tuy nhiên, một phương pháp ựược chấp nhận rộng rãi ựã không tồn tại. Do ựó trong chương này, tác giả xin trình bày một cái nhìn tổng quan về mô hình hóa dựa vào mô phỏng, và các chiến thuật verification ựược áp dụng cho các hệ thống nhúng. Thực tế chương này tập trung vào mô tả những cách tiếp cận các phương
pháp ựồng mô phỏng tiên tiến nhất và các kĩ thuật verification dựa vào mô phỏng sai và kiểm tra xác nhận.
4.1. Gii thi u
Một hệ thống nhúng có thể ựược ựịnh nghĩa như là một máy tắnh (một thành phần của hệ thống lớn) mà dựa vào vi xử lý của nó[1,2]. Vì vậy chúng ta có thể coi chúng như là việc tổ hợp các phần cứng và phần mềm cùng hoạt ựộng với nhau, những thành phần phần cứng và phần mềm này có khả năng cung cấp tập hợp các chức năng phức tạp một cách rộng hơn và dễ dàng thắch ứng hơn trong các yêu cầu khác nhau nếu ta so sánh với một hệ ASIC. Những hệ thống này cũng không ựòi hỏi nhiều tài nguyên phần cứng như các hệ dùng cho chức năng chung khác. Vắ dụ về hệ thống nhúng như bộ ựiều khiển cho một quá trình trong công nghiệp, các ứng dụng tự ựộng hóa, các thiết bị y tế, các hệ thống multimedia cầm tay, hệ thống thu thập dữ liệu v.vẦ đặc tắnh chắnh của một hệ thống nhúng là khả năng phản ứng, chúng phải liên tục tương tác với các sự kiện không ựồng bộ ở lối vào. Hơn nữa, những hệ thống như vậy thực sự thắch hợp với những ứng dụng thời gian thực, hệ thống mà những nhiệm vụ của nó phải ựược thực hiện trong một khoảng thời gian xác ựịnh, một cách có chu kì có thể trở thành một vấn ựề chắnh. Trong những ứng dụng như vậy, cần ựòi hỏi khả năng thắch ứng của hệ thống.
Thậm chắ nếu một hệ thống nhúng, vì tắnh chất lịch sử nào ựó phải hoạt ựộng với một nguồn tài nguyên hạn chế, vắ dụ như bộ nhớ hoặc sức mạnh tắnh toán, ngày nay chúng ta ựã tăng ựược tài nguyên của chúng dựa vào việc cái tiến công nghệ bán dẫn. Trong thực tế, công nghệ luôn luôn tạo ra các cơ hội mới nhưng ựồng thời cũng tạo ra những thách thức mới cho những kĩ sư thiết kế hệ thống. định luật More dự ựoán rằng ựộ phức tạp của hệ thống sẽ tăng gấp ựôi sau chu kì hai năm. Các chip hiện nay ựược tạo thành từ vài chục triệu cửa, tương ứng với nó là vài trăm triệu transitor, thậm chắ với những sản phẩm thương mại gần ựây, số transitor trên một chip của Intel ựã tăng lên ựến con số 1 tỷ transitor nhờ vào công nghệ 45nm. Bởi vậy, những hệ thống mà ngày hôm qua ựược thiết kế bởi việc kết nối nhiều chip với nhau thì hôm nay ựã có thể tắch hợp chúng trên một chip duy nhất, bao gồm nhiều hệ thống con phức tạp trên cùng một tấm bán dẫn. Những hệ thống như vậy gọi là hệ thống trên một chip (System-on-chip) SoC, những hệ thống này ựã cho thấy nó là một tiến hóa rất lớn cho các hệ thống nhúng[3]. Một vài ưu ựiểm ựã làm cho các hệ thống này rất hấp dẫn ựối với những nhà phát triển hệ thống. Khi ựộ phức tạp của một hệ thống tăng lên, số lượng chân kết nối ra bên ngoài cũng tăng lên, bởi vậy nó cũng làm cho việc kết nối nhiều hệ thống con với
nhau trở nên ựơn giản hơn, rẻ hơn khi so sánh với việc kết nối nhiều chip trên một mạch in. Hơn nữa, ựiện dung kắ sinh của việc ựi dây trên chip là nhỏ hơn rất nhiều so với khi kết nối trên mạch in, ựiều này làm cho hệ thống có thể có hiệu suất cao hơn và tiêu tốn ắt năng lượng hơn.
Nói một cách khác, phát triển một hệ thống, rất phức tạp, SoC ựòi hỏi rất nhiều thách thức với các nhà phát triển.
4.2. Thit k h mô ph?ng.
Kiểm tra hệ thống ựộng ựối mặt với việc chỉnh sửa thiết kế bằng cách sử dụng kĩ thuật mô phỏng. Trong kiểm tra hệ thống ựộng, các chức năng của mô hình về cơ bản ựuợc kiểm tra bằng cách tạo ra rất nhiều các tắn hiệu ựầu vào (stimuli input), có thể coi như tập hợp các testcase, sau ựó mô phỏng ựể quan sát hoạt ựộng của thiết kế dựa trên những ựầu ra cơ bản. Tập hợp các testcase ựược tạo ra ở mức trừu tượng hóa cụ thể và có thể sử dụng lại ở các mức thập hơn sau khi các bước tổng hợp và còn có thể ựược sử dụng sau khi ựã ựược chế tạo ở mức cứng. Có thể số lượng testcase ở mỗi mức sẽ khác nhau, càng ở mức sâu hơn càng cần phải có nhiều testcase hơn. Trong luận văn này, tác giả sử dụng phương pháp mô phỏng ựể kiểm tra hệ thống ựúng theo cách vừa nêu, sau khi ựã thiết kế xong lõi của vi xử lý, tác giả ựã viết một số testbench ựể kiểm tra và chạy thử hệ thống trên cùng một môi trường mô phỏng và cả trên phần cứng.
Các cách tiếp cận dựa vào mô phỏng truyền thống có thể ựược triển khai ựể kiểm tra lại toàn bộ hệ thống nhúng trước khi phân chia thành phần cứng và phần mềm. Tuy nhiên, thách thức lớn nhất là thực hiện ựồng kiểm tra giữa phần cứng và phần mềm. Sự tắch hợp và ựồng bộ giữa các mô ựun phần cứng và phần mềm ựòi hỏi những ựiều khiển trong suốt và ựồng nhất ựể có thể thực thi một cách hiệu quả bằng cách khai thác môi trường ựồng mô phỏng.
đồng mô phỏng trở thành bước bắt buộc sau khi phần chia hệ thống nhúng thành phần cứng và phần mềm. Bởi vì lý do này, một vài môi trường ựồng mô phỏng ựã ựược phát triển trong một vài năm qua [9]. Mặc dù có rất nhiều kiến trúc khác nhau, hiệu quả của hệ thống khá nhau, ngôn ngữ mô tả phần cững khác nhau nhưng ta vẫn có thể phân chia các giải pháp khác nhau này thành hai chủng loại môi trường ựồng mô phỏng cơ bản: ựồng nhất, không ựồng nhất [9].
Môi trường mô phỏng ựồng nhất sử dụng cùng một môi trường mô phỏng ựể thực hiện mô phỏng cả phần cứng và phần mềm (hình 4-1). Môi trường mô phỏng ựồng nhất ựược thực thi bởi việc trừu tượng hóa sự khác nhau giữa phần cứng và
phần mềm bằng cách mô phỏng chúng như là những khối chức năng. Môi trường này làm ựơn giản hóa việc mô hình hóa thiết kế và cho kết quả tốt. Tuy nhiên, chúng chỉ phù hợp cho những pha cơ bản ựầu tiên trong quá trình thiết kế, trước khi phân chia phần cứng và phần mềm. Phần cứng và phần mềm sẽ sử dụng các kĩ thuật khác nhau, các công cụ khác nhau khi mà mỗi trừu tượng hệ thống dần chuyển sang phần thực thi trên hệ thống thực.
Hình 4 - 1 Môi trường ựồng mô phỏng ựồng nhất.
Môi trường mô phỏng không ựồng nhất ựảm bảo sự chắnh xác hơn khi phải giao tiếp giữa phần cứng và phần mềm khi so sánh với môi trường mô phỏng ựồng nhất. Môi trường này cho phép sử dụng mức ựộ trừu tượng hóa thấp hơn mức hành vi của phần cứng ựể có thể ước ựịnh ựược phần mềm khi nó ựã ựược dịch sang dạng binary. Những mã binary thu ựược từ những mô tả ở mức cao của vi xử lý, sử dụng những công cụ chuẩn như trình dịch, mã assembler..
Hầu hết tất cả các môi trường mô phỏng không ựồng nhất ựều có chung một vấn ựề ựó làm thế nào ựể liên kết một cách có hiệu quả một bộ mô phỏng phần cứng ựược ựiều khiển bởi sự kiện và các bộ mô phỏng tập lệnh dựa vào chu kì lệnh. để có thể mô hình hóa ựược kết nối giữa các thành phần phần cứng và vi xử lý, là nơi mà phần mềm sẽ chạy, một kênh thông tin ựể truyền tin giữa hai bộ mô phỏng là cần thiết ựối với môi trường này. Tuy nhiên những bus thông tin như vậy sẽ làm giảm tốc ựộ mô phỏng do phải truyền một lượng thông tin khá lớn giữa hai môi trường mô phỏng. Yếu tố này rất quan trọng bởi như ựã nêu ở phần ựầu chương, ta cần phải thực hiện rất nhiều mô phỏng khác nhau, mỗi một mô phỏng lại mất một khoảng thời gian khá lâu làm cho tổng thời gian ựể hoàn thành quá trình mô phỏng là rất lớn.
Các môi trường ựồng mô phỏng trước ựây, chủ yếu tập trung vào mô phỏng trên phần cứng ựươc mô tả bằng một vài ngôn ngữ mô tả phần cứng khác nhau như verilog, VHDL hoặc SystemC và trên phần mềm bằng các ngôn ngữ lập trình như C, C++, JavaẦ SW description SW description Simulator
Hình 4 - 2 Môi trường ựồng mô phỏng không ựồng nhất
Hầu hết các cách tiếp cận không ựồng nhất này ựều tương tự nhau ở khắa cạnh, cố gắng chắnh ựể giải quyết những vấn ựề của ựiều khiển và ựồng bộ. Những cách mô phỏng không ựồng nhất này, là những tối ưu cục bộ theo khắa cạnh khả năng thực thi mô phỏng cũng như dễ dàng tắch hợp hệ thống bởi chỉ có một lượng thông tin nhỏ truyền thông giữa hai bộ mô phỏng hoàn toàn khác nhau. Tuy nhiên chỉ có một sự lựa chọn khi ngôn ngữ VHDL hoặc Verilog là mức ựộ mô phỏng cao nhất có thể của phần cứng ựược mô hình hóa. Một vài công cụ thương mại như Mentor Graphics Seamless cũng cung cấp khả năng ựồng mô phỏng không ựồng nhất. Tuy nhiên các công cụ này chỉ cho phép ựồng mô phỏng ở mức bus, mà mỗi một trao ựổi trên bus bao gồm toàn bộ những tắn hiệu cần thiết ựể hoàn thành chức năng của bus, bởi vậy giảm hiệu suất của ựồng mô phỏng.
Trong luận văn này, do không có nhiều thời gian ựể phát triển, cũng như yêu cầu chắnh của tác giả là tập trung vào thiết kế phần cứng nên tác giả sử dụng mô hình ựồng mô phỏng không ựồng nhất. Thực ra ở ựây tác giả nêu ra khái niệm ựồng mô phỏng, nhưng trên thực tế tác giả chỉ mô phỏng phần cứng, sử dụng các phần mềm nhỏ, những ựoạn chương trình chắnh ựể làm testbench khi thực mô phỏng phần cứng.
4.3. Mô ph?ng ự8 ki8m tra thit k
Mô phỏng thể hiện những kĩ thuật kiểm ựịnh chắnh khi chức năng của một hệ thống nhúng không ựồng nhất cần phải kiểm ựịnh. Trong thực tế, các kĩ thuật mô phỏng cho hệ thống nhúng ựược chi thành hai loại chắnh mô phỏng bởi testbench và mô kiểm ựịnh hệ thống bằng phường pháp Assertion. Phần tiếp theo sẽ tập
SW description SW description Simulator Communication interface Simulator Communication interface Communication BUS
trung vào mô tả phương pháp dựa vào testbench bởi ựây sẽ là phương pháp dùng ựể thiết kế vào mô phỏng vi xử lý ở những chương sau.
Kĩ thuật mô phỏng dựa trên testbench về cơ bản kiểm ựịnh chức năng của mô hình bằng cách tạo ra một số lượng lớn các stimuli ựầu vào. Các stimuli này sau ựó sẽ ựược dùng ựể mô phỏng ựể quan sát các hoạt ựộng của mô hình, hệ thống trong giai ựoạn nay ựược gọi là thiết bị ựang ựược kiểm ựịnh (Device under