Bài học Hướng dẫn cài đặt và chạy mô phỏng cơ bản với Questa SIM

Lu ROm

Administrator
Staff member
25 Tháng bảy 2014
481
118
43
31
One piece
vimach.net
Nguồn :https://nguyenquanicd.blogspot.com/ các bạn vào site để ủng hộ tác giả nha.
1. Giới thiệu về Questa SIM


Questa SIM là một trình mô phỏng của hãng Mentor Graphics hỗ trợ đa nền tảng như hệ điều hành UNIX, Linux và Windows. Nếu bạn nào đã từng sử dụng ModelSim, một trình mổ phỏng khác của Mentor Graphics, thì việc làm quen với Questa SIM rất nhanh chóng và dễ dàng.
Questa SIM hỗ trợ biên dịch các thiết kế viết bằng Verilog HDL, VHDL và SystemC và hỗ trợ mô phỏng các đối tượng viết bằng Verilog HDL, VHDL, SystemC, System Verilog, PSL, UPF (Unified Power Format).
Việc chạy mô phỏng với Questa SIM có thể thực hiện bằng giao diện phần mềm (GUI - Graphical User Interface), bằng chế độ lệnh (Command-line) hoặc bằng chế độ batch.
  • GUI: Chế độ sử dụng giao diện phần mềm để thực thi mô phỏng bằng các nút, menu tùy chọn hoặc bằng cách lệnh trong cửa sổ transcript mà giao diện hỗ trợ
  • Command-line: Dùng lệnh để chạy mô phỏng bằng cửa sổ lệnh (command prompt) của hệ điều hành. Questa SIM sẽ bắt đầu thực thi với các biến được đặc tả trong file modelsim.ini, một file được trình mô phỏng tự động tạo ra, hoặc một file DO tùy chọn do người dùng tạo ra.
  • Batch: Dùng lệnh để chạy mô phỏng bằng cửa sổ lệnh của hệ điều hành với các biến được nhập trực tiếp từ ngõ vào chuẩn (bàn phím) hoặc từ file; và xuất ra ngõ ra chuẩn (màn hình) hoặc file.
upload_2018-7-5_11-36-5.png

Hình 1. Trình tự thực thi mô phỏng trong Questa SIM​
Trình tự mô phỏng gồm 5 bước cơ bản:
  1. Thu thập các file đầu vào (Verilog, VHDL, SystemC) và ánh xạ các thư viện. Bước này tự động tạo ra file modelsim.ini như đã nói ở trên.
  2. Phân tích kiểm tra code và biên dịch
  3. Tối ưu và tạo cơ sở dữ liệu đã biên dịch
  4. Mô phỏng
  5. Gỡ lỗi (Debug)
2. Download gói cài đặt

http://www.mediafire.com/file/38o33r07r87800p/QuestaSim10.2c.rar
3. Cài đặt
1/ Giải nén thư mục cài đặt

Sau khi giải nén, thư mục QuestaSim10.2c\Mentor Graphics Questa sim SE (64bit) 10.2c chứa các file sau:
  1. questasim-gcc-4.5.0-mingw64.zip
  2. questasim-win64-10.2c.exe
  3. regassistuvm_4.3_win.exe
  4. Thuốc để tạo LICENSE

2/ Cài đặt Questa SIM
Chạy file questasim-win64-10.2c.exe để cài đặt Questa SIM.
Chọn Next → Agree → Next → Yes → Yes
Đến cửa sổ sau đây thì chọn NO
upload_2018-7-5_11-36-43.png

Hình 2. Cài đặt Questa SIM
3/ Cài đặt thưc viện UVM
Đây là thư viện sử dụng cho phương pháp mô phỏng mới nhất hiện nay là UVM (Universal Verification Methodology).
Chạy file regassistuvm_4.3_win.exe để cài đặt.
Chọn Next -> chọn thư mục cài đặt và Next
upload_2018-7-5_11-37-6.png

upload_2018-7-5_11-37-24.png

Hình 2. Cài đặt thư viện UVM
4/ Tạo LICENSE file cho Questa SIM
Copy file MentorKG.exe patch_dll.bat trong thư mục
QuestaSim10.2c\Mentor Graphics Questa sim SE (64bit) 10.2c\c-r-a-c-k vào thư mục cài đặt c:\questasim64_10.2c\win64\
Chạy file patch_dll.bat sẽ tự động tạo ra file mgls.dll.
Chạy file MentorKG.exe, cửa sổ hiện ra như sau:
upload_2018-7-5_11-37-33.png

Hình 3. Chạy file MentorKG.exe​
Chờ cho đến khi file LICENSE.txt được tạo ra và hiện lên như sau:
upload_2018-7-5_11-37-48.png

Hình 4. File LICENSE.txt​
Lưu lại file trên dưới tên license.dat trong thư mục cài đặt c:\questasim64_10.2c\win64\
Bấm chuột phải lên Computer -> Properties -> Advanced system
  • Chọn Environment Variables tab -> Chọn new ở khung User variables for
  • Thêm:
    • Variable name: LM_LICENSE_FILE
    • Variable value: c:\questasim64_10.2c\win64\license.dat
upload_2018-7-5_11-38-1.png

Hình 5. Thiết lập biến môi trường cho Questa SIM​
Khởi động thử Questa SIM, hiện giao diện bình thường là OK.
upload_2018-7-5_11-38-14.png

Hình 6. Giao diện Questa SIM-64 10.2c​
4. Chạy mô phỏng với giao diện (GUI) của Questa SIM
4.1 Đầu vào mô phỏng

Đầu vào mô phỏng gồm một file thiết kế và một file testbench tạo giá trị ngõ vào cho việc mô phỏng thiết kế:
  1. File thiết kế: johnson_counter.v
  2. File testbench: tb_jc.v
Ở đây file testbench chỉ cần tạo xung clock clk và reset ban đầu rst_n.
File RTL code của thiết kế:
Mã:
module johnson_counter (clk, rst_n, js_count);
//
parameter N  = 4;
//
//Interface
//
input clk;
input rst_n;
output reg [N-1:0] js_count;
wire js_msb_inv;
assign js_msb_inv = ~js_count[N-1];
always @ (posedge clk) begin
if (~rst_n)
   js_count[N-1:0] <= 0;
else
   js_count[N-1:0] <= {js_count[N-2:0], js_msb_inv};
end
endmodule
File testbench:
Mã:
module tb_jc;
parameter N = 4;
//
//Interface
//
reg clk;
reg rst_n;
wire [N-1:0] js_count;
johnson_counter #(.N(N)) dut (.clk(clk), .rst_n(rst_n), .js_count(js_count));
initial begin
  clk = 0;
forever #10 clk = !clk;
end
initial begin
  rst_n = 0;
#20
rst_n = 1;
end
endmodule
4.2 Tạo project
Chọn File->New->Project...
Đặt tên project (Project name) và chọn đường dẫn lưu project (Project location) trong cửa sổ sau:
upload_2018-7-5_11-39-24.png

Hình 7. Tạo project​
Tạo file thiết kế (Verilog, VHDL, SystemC) hoặc file mô phỏng mới (Create New File) hoặc thêm các file đã tạo sẵn vào project (Add Existing File) trong cửa sổ sau:
upload_2018-7-5_11-39-34.png

Hình 8. Tạo mã nguồn mô phỏng​
Ở đây, tôi chọn Add Existing File và dẫn đến 2 file johnson_counter.v tb_jc.v đã được viết trước. Open->OK->Close
upload_2018-7-5_11-39-47.png

Hình 9. Chọn file​
4.3 Biên dịch
Bấm chuột phải vào một trong các file và chọn Compile->compile All
upload_2018-7-5_11-40-1.png

Hình 9. Biên dịch các file​

Chú ý, ký hiệu "?" ở cột Status biểu thị file chưa được biên dịch. Nếu biên dịch lỗi thì Status là dấu chéo màu đỏ, biên dịch tốt thì Status là dấu chỉ thị màu xanh. Xem thông tin ở cửa sổ Transcript để thấy các thông tin cảnh báo. Ví dụ ở đây, file johnson_counter.v biên dịch thành công, file tb_jc.v biên dịch lỗi.
upload_2018-7-5_11-40-14.png

Hình 10. Cảnh báo trên cửa sổ Transcript​
Nếu lỗi, hãy nhấp chột vào dòng cảnh báo trên cửa sổ Transcript để biết lý do và vị trí lỗi. Như ví dụ này, file tb_jc.v bị lỗi ở dòng 10 gần ký hiệu "#" và đây là lỗi cú pháp. Dòng 10 như sau:
johnson_counter dut #(.N(N)) (.clk(clk), .rst_n(rst_n), .js_count(js_count));
Tôi khai báo tên gọi module là dut đặt đằng trước việc gán giá trị tham số trong khi nó phải đặt sau như dòng code sau đây:
johnson_counter #(.N(N)) dut (.clk(clk), .rst_n(rst_n), .js_count(js_count));
Sau khi sửa, bạn hãy biên dịch lại là thành công như sau:
upload_2018-7-5_11-40-34.png

Hình 11. Biên dịch lại các file​
4.4 Chạy mô phỏng
Sau khi biên dịch thành công, đối tượng được biện dịch sẽ xuất hiện trong thư mục work của thẻ library như sau:
upload_2018-7-5_11-40-44.png

Hình 12. Thẻ library​
Bấm chuột phải vào đối tượng testbench tb_jc để chọn chế độ chạy mô phỏng. Ở đây, tôi chọn simulate without optimization để tạo ra các tín hiệu có thể quan sát dạng sóng.
upload_2018-7-5_11-40-55.png

Hình 12. Chạy mô phỏng​
Sau khi thực thi, một vài cửa số khác hiện lên gồm:
  • Cửa sổ sim thể hiện cấu trúc thứ bậc của các đối tượng đang được mô phỏng. Ví dụ, tb_jc gọi thiết kế có tên dut. Ngang cấp với dut là hai khối initial. Bên trong dut có 1 khối always và một phát biểu assign.
  • Cửa số Objects thể hiện các tín hiệu, biến tương ứng có trong đối tượng bên cửa sổ sim.
  • Cửa sổ Wave sẽ là nơi để quan sát dạng sóng các tín hiệu
Lựa chọn các tín hiệu cần quan sát, bấm chuột phải và Add wave
upload_2018-7-5_11-41-10.png

Hình 13. Lấy tín hiệu để xem dạng sóng​
Chú ý bên trên thanh công cụ có một nhóm các button để điều khiển việc chạy mô phỏng. Ở đây tôi chọn chạy mô phỏng với thời gian 500 ns. Bấm run cạnh ô 500 ns.
upload_2018-7-5_11-41-21.png

Hình 14. Chạy mô phỏng và xem waveform​