Copyright©byNXT Trang1 HƯỚNG DẪN THIẾT KẾ BỘ NHỚ ĐƠN GIẢN (Bài tập về nhà của thầy Thuận) NỘI DUNG DANH SÁCH HÌNH 2 1. Đề bài 3 2. Phân tích 3 2.1 Các bước thực hiện 3 2.1.1 Tạo project tên xxx trên Quartus 4 2.1.2 Tạo nhân phần cứng nios trên SOPC 5 2.1.3 Bổ sung vào project xxx trên Quartus 8 2.1.4 Tạo file xxxx code C trên Nios 8 2.1.5 Test hệ thống trên board DE2 10 2.1.6 Mô phỏng h ệ thống trên Modelsim 11 2.2 Code 17 2.2.1 Code memoryDesign 17 2.2.2 Code C Nios 18 2.2.3 Code mô phỏng 18 Copyright©byNXT Trang2 DANH SÁCH HÌNH Hình 1. 1 – Sơ đồ khối memory 3 Hình 2. 1 – Các thư mục và tập tin chính 4 Hình 2. 2 – Module memory 4 Hình 2. 3 – Set Top-Level Entity 5 Hình 2. 4 – Các components được chọn trong SOPC 5 Hình 2. 5 – Thiết lập Reset Vector và Exception Vector 5 Hình 2. 6 – Tự động hiệu chỉnh địa chỉ base 6 Hình 2. 7 – Cách add component tự tạo 6 Hình 2. 8 – Kiểm tra add thành công hay chưa 6 Hình 2. 9 – Đồng bộ các tín hi ệu 7 Hình 2. 10 – Add thành công component tự tạo 7 Hình 2. 11 – Generate hệ thống 7 Hình 2. 12 – Tạo file Top-Level Entity 8 Hình 2. 13 – Mở Nios II IDE 8 Hình 2. 14 – Tạo project mới trong Nios II 9 Hình 2. 15 – Kiểm tra nội dung các thư viện 9 Hình 2. 16 – Kiểm tra địa chỉ 10 Hình 2. 17 – Tạo code C 10 Hình 2. 18 – Nạp phần cứng xuống DE2 11 Hình 2. 19 – Nạp phần mềm xuống DE2 11 Hình 2. 20 – Tạo project mới trong Modelsim 12 Hình 2. 21 – Add files vào project 12 Hình 2. 22 – Tạo file mô phỏng 13 Hình 2. 23 – Lệnh vsim 13 Hình 2. 24 – Mở cửa sổ dạng sóng 14 Hình 2. 25 – Add tín hiệu cần quan sát 14 Hình 2. 26 – Chuyển sang Hex 14 Hình 2. 27 – Lưu dạng sóng 15 Hình 2. 28 – Chạy mô phỏng 15 Hình 2. 29 – Quan sát dạng song mô phỏng 15 Hình 2. 30 – So sánh nội dung memory giữa Nios và Modelsim 16 Hình 2. 31 - So sánh nội dung onchip_mem giữa Nios và Modelsim 17 Hình 3. 1 – Code verilog thiết kế 17 Hình 3. 2 – Code C viết trong Nios II 18 Hình 3. 3 – Địa chỉ vật lí và địa chỉ logic 18 Hình 3. 4 – Code mô phỏng trên Modelsim 19 Copyright©byNXT Trang3 1. Đề bài ¾ Thiết kế memory 4x32 bits, có các tín hiệu • clk (CLOCK_50) • cs (chip_select) • re (read_enable) • we (write_enable) • addr[1:0] (address) • data_in[31:0] • data_out[31:0] Hình 1. 1 – Sơ đồ khối memory ¾ Lưu ý: Một trong các công cụ hiệu quả nhất để vẽ sơ đồ khối là Microsoft Visio 2007 2. Phân tích 2.1 Các bước thực hiện ¾ Một project hoàn chỉnh sẽ có các thư mục và tập tin chính sau (xem hình 2. 1) 9 Thư mục nios_sim chứa project mô phỏng – tool Modelsim 9 Thư mục software chứa project code C – tool Nios 9 File xxx.sof chứa RTL down xuống board DE2 9 File onchip_mem.hex chứa nội dung của code C sau khi biên dịch xong 9 File cpu.vo (file này rất quan trọng) 9 Các file verilog (.v) ¾ Lưu ý: đường dẫn cài đặt các tools của Altera và các bài tập phải không chứa khoảng trắng, nếu có chứa khoảng trắng thì khi biên dịch trên Nios sẽ có báo lỗi Ví dụ: Sai Æ E:\XT Exercises\Verilog VHDL\SampleCode\memoryDesign\ (đường dẫn chứa bài tập có khoảng trắng) OK Æ E:\XT_Exercises\Verilog_VHDL\SampleCode\memoryDesign\ Tương tự, khi cài đặt các tools Altera, tốt nhất nên để đường dẫn mặc định của nó là C:\altera\72 và C:\altera\Modeltech_6.2f Copyright©byNXT Trang4 T Hình 2. 1 – Các thư mục và tập tin chính 2.1.1 Tạo project tên xxx trên Quartus 9 Sau khi tạo xong, mình sẽ viết code Verilog để tạo module memory (chi tiết code sẽ nói ở mục 3) Hình 2. 2 – Module memory 9 Set file memoryDesign.v này là top-level entity để build thử xem còn lỗi hay không. Vào Files Æ chuột phải vào memoryDesign.v Æ chọn Set as Top-Level Entity Copyright©byNXT Trang5 Hình 2. 3 – Set Top-Level Entity 9 Sau đó build thử. Nếu hết lỗi thì sang bước 2.1.2 2.1.2 Tạo nhân phần cứng nios trên SOPC Mở SOPC, tạo project tên nios, sau đó tạo nhân phần cứng. Hình 2. 4 – Các components được chọn trong SOPC 9 Nhớ nhấp chuột phải vào cpu, chọn Edit, sau đó chọn Reset Vector và Exception Vector là onchip_mem Hình 2. 5 – Thiết lập Reset Vector và Exception Vector 9 Tiếp tục chuột phải vào cpu, chọn Auto-Assign Base Addresses Copyright©byNXT Trang6 Hình 2. 6 – Tự động hiệu chỉnh địa chỉ base 9 Kế tiếp, add file memoryDesign.v mình viết vào Hình 2. 7 – Cách add component tự tạo 9 Chọn tiếp Signal Hình 2. 8 – Kiểm tra add thành công hay chưa Copyright©byNXT Trang7 9 Gán các tín hiệu tương ứng giữa module memoryDesign và Avalon bus (các bạn có thể tìm hiểu lí do tại sao gán như vậy trong sách Avalon Bus Specification) Hình 2. 9 – Đồng bộ các tín hiệu của component tự tạo và Avalon Bus 9 Sau khi hết lỗi, nhấn Finish, ta được component mới trong SOPC Hình 2. 10 – Add thành công component tự tạo 9 Chuột phải vào cpu, chọn Auto-Assign Base Addresses lần nữa. Sau đó, qua System Generation thực hiện các bước sau. Cuối cùng Generate Hình 2. 11 – Generate hệ thống Copyright©byNXT Trang8 2.1.3 Bổ sung vào project xxx trên Quartus 9 Tạo file xxx.v 9 Vào file nios.v (tên file project trong SOPC), tìm module nios (…), copy vào xxx.v Hình 2. 12 – Tạo file Top-Level Entity 9 Set lại Top-Level Entity cho file xxx.v, sau đó build project 2.1.4 Tạo file xxxx code C trên Nios 9 Trong SOPC, nhấp vào Nios Hình 2. 13 – Mở Nios II IDE 9 Tạo project xxxx theo các bước sau Copyright©byNXT Trang9 Hình 2. 14 – Tạo project mới trong Nios II 9 Sau đó xóa nội dung file hello_world.c, chỉ để nội dung rỗng như hình dưới và build (nhấn Ctrl+B). Hình 2. 15 – Kiểm tra nội dung các thư viện 9 Sau khi build xong, vào file system.h để tìm địa chỉ các component. Khi cần dùng component nào, ta chỉ quan tâm đến tên địa chỉ của component đó. Ví dụ khi cần gọi địa chỉ base của memoryDesign (0x00011000), ta chỉ cần gọi tên MEMORYDESIGN_INST_BASE Copyright©byNXT Trang10 Hình 2. 16 – Kiểm tra địa chỉ 9 Kế tiếp, sửa nội dung file hello_world.c thành như sau và build lại lần nữa Hình 2. 17 – Tạo code C 9 Sau khi biên dịch xong, Nios sẽ tạo ra 3 file o onchip_mem.hex (đã đề cập ở đầu mục 2) o onchip_mem.dat o onchip_mem.sym Î Trong đó, 2 file cuối chứa trong thư mục nios_sim phục vụ cho việc mô phỏng 2.1.5 Test hệ thống trên board DE2 9 Đầu tiên, vào Quartus để nạp phần cứng [...]... 0x3) = 0x567; return 0; } Hình 3 2 – Code C viết trong Nios II Dòng 7 – ptr là biến con trỏ chỉ tới vùng nhớ base của memoryDesign (0x00011000) MEMORYDESIGN_INST_BASE là tên gợi nhớ được tạo ra trong system.h Mỗi lần ptr tăng lên 1 tương ứng với việc tăng offset lên 4 đối với phần cứng Phần cứng Bộ nhớ Phần mềm offset = 0x0 0x0 0x1 0x2 0x3 ptr offset = 0x4 0x4 0x5 0x6 0x7 ptr+1 offset = 0x8 0x8 0x9 0xa... always @(posedge clk) begin memory[addr] data_out end memory [0:3]; data_out; . Copyright©byNXT Trang1 HƯỚNG DẪN THIẾT KẾ BỘ NHỚ ĐƠN GIẢN (Bài tập về nhà của thầy Thuận) NỘI DUNG DANH SÁCH HÌNH 2 1. Đề bài. 16 Hình 2. 31 - So sánh nội dung onchip_mem giữa Nios và Modelsim 17 Hình 3. 1 – Code verilog thiết kế 17 Hình 3. 2 – Code C viết trong Nios II 18 Hình 3. 3 – Địa chỉ vật lí và địa chỉ logic. 3. 4 – Code mô phỏng trên Modelsim 19 Copyright©byNXT Trang3 1. Đề bài ¾ Thiết kế memory 4x32 bits, có các tín hiệu • clk (CLOCK_50) • cs (chip_select) • re (read_enable)