Project Name: Gõ tên project phải trùng với tên file top mà bạn tính mô phỏng Default Library Name: các bác cứ để nguyên Ở đây tại hạ làm một encoder_16_4... Add Existing file: Thêm file
Trang 1Bước 1: Khởi động ModelSim có giao diện sau
Bước 2: Vào File/New/Project…
Project Location: chọn thư mục lưu project (Chú ý rằng việc tạo một thư mục mới cũng phải dùng ModelSim Nếu bạn tạo thư mục mới thông thường từ WINDOWN thì sau này sẽ không chạy mô phỏng được - xem hình sau)
Trang 2Project Name: Gõ tên project (phải trùng với tên file top mà bạn tính
mô phỏng) Default Library Name: các bác cứ để nguyên Ở đây tại hạ
làm một encoder_16_4 Nhấn OK
Bước 3: Sau khi Nhấn OK - có khung sau:
Trang 3Create new file: Tạo file mới Add Existing file: Thêm file có sẵn (ví dụ: bạn đã viết file verilog sẵn và để đâu đó, bạn chỉ cần copy file đó vào thư mục mà bạn tạo project, bấn vào đây để thêm file đó vào) Ở đây tại hạ tạo file mới
File name: Tên file Add file as type: Chọn loại file cần tạo Folder: Cứ
để Top Level Nhấn OK Trong cửa sổ WorkSpace xuất hiện file cần tạo với trạng thái “?” (nghĩa là chưa được tổng hợp, kiểm tra)
Trang 4Nếu cần tạo thêm file khác thì làm lại bước 3 Xong ta Close để sang bước 4
Bước 4: Viết RTL code - Nhấp đôi chuột vào tên file trong cửa sổ
Workspace sẽ hiện ra cửa sổ edit để viết RTL code
Trang 5Bước 5: Compile thiết kế - Nhấp chuột phải vào tên file vừa viết code
xong Chọn Compile Selected: Chỉ kiểm tra file chọn Compile All:
Kiểm tra tất cả các file trong cửa sổ workspace
Bước 6: Sửa lỗi (nếu có) Nếu có lỗi, ModelSim sẽ hiện dòng chữ đỏ
thông báo Nhấp đôi chuột vào nó để tìm vị trí lỗi và sửa
Sửa và Compile lại cho đến khi có dòng thông báo successful màu
xanh
Sau khi tạo xong một project, viết RTL code và compile Khâu tiếp
theo là chúng ta mô phỏng kiểm tra Ví dụ được thực hiện ở đây là
encoder_16_4, ngõ ra sẽ chỉ vị trí của ngõ vào được tích cực và nếu có hơn hai ngõ vào bằng 1 thì ngõ ra bằng 0
Trang 6Bảng giá trị của encoder_16_4:
Trước hết đây là RTL code của encoder_16_4:
module encoder_16_4(
enable, // tin hieu cho phep
binary_out, // 4 bit ngo ra
encoder_in // 16-bit ngo vao
);
//ngo vao
input enable;
input [15:0] encoder_in;
//ngo ra
output [3:0] binary_out;
//kieu ngo ra
reg [3:0] binary_out;
//chuong trinh chinh
always @ (enable or encoder_in)
begin
binary_out = 0;
Trang 7if (enable) begin
case (encoder_in)
16'h0002 : binary_out = 4'd1;
16'h0004 : binary_out = 4'd2;
16'h0008 : binary_out = 4'd3;
16'h0010 : binary_out = 4'd4;
16'h0020 : binary_out = 4'd5;
16'h0040 : binary_out = 4'd6;
16'h0080 : binary_out = 4'd7;
16'h0100 : binary_out = 4'd8;
16'h0200 : binary_out = 4'd9;
16'h0400 : binary_out = 4'd10;
16'h0800 : binary_out = 4'd11;
16'h1000 : binary_out = 4'd12;
16'h2000 : binary_out = 4'd13;
16'h4000 : binary_out = 4'd14;
16'h8000 : binary_out = 4'd15;
endcase
end
end
endmodule
Để mô phỏng kiểm tra ta thực hiện như sau:
Bước 1: Tạo testbench
Nhấp chuột phải vào vùng trống của cửa sổ Workspace Chọn Add to project/New file…
Trang 8Cửa sổ Create Project File xuất hiện
Trang 9Điền tên file (tb_encoder_16_4) và chọn loại file cần tạo (verilog) Nhấn OK Cửa sổ edit xuất hiện và chúng ta gõ file testbench vào
Trang 10Đây là nội dung file testbench (viết cơ bản theo hướng dẫn ở topic
“Help me – viết testbench”)
module tb_encoder_16_4;
//ngo vao gan gia tri test
reg enable;
reg [15:0] encoder_in;
//ngo ra quan sat
wire [3:0] binary_out;
//goi module test
encoder_16_4 encoder(
enable, // tin hieu cho phep
binary_out, // 4 bit ngo ra
encoder_in // 16-bit ngo vao
);
//phan gan gia tri test
initial
begin
enable = 1'b0;
encoder_in = 16'h0001;
#500
enable = 1'b1;
#200
encoder_in = 16'h0002;
#200
encoder_in = 16'h0004;
#200
encoder_in = 16'h0008;
#200
encoder_in = 16'h0010;
#200
Trang 11encoder_in = 16'h0020;
#200
encoder_in = 16'h0040;
#200
encoder_in = 16'h0080;
#200
encoder_in = 16'h0100;
#200
encoder_in = 16'h0200;
#200
encoder_in = 16'h0400;
#200
encoder_in = 16'h0800;
#200
encoder_in = 16'h1000;
#200
encoder_in = 16'h2000;
#200
encoder_in = 16'h4000;
#200
encoder_in = 16'h8000;
#200
encoder_in = 16'h1010;
end
endmodule
Bước 2: Compile file testbench (như compile file RTL code)
Trang 12Xuất hiện dòng báo successful là đã xong
Bước 3: Chạy mô phỏng
Trong cửa sổ Workspace chọn thẻ Library, chọn mục work ta sẽ thấy
hai file đã được compile như sau
Trang 13Nhấp đôi chuột vào dòng có tên file testbench để bắt đầu chạy mô
phỏng Sau khi nhấp đôi chuột ta có kết quả như sau
Trong hình trên, ô bên phải ta thấy hai dòng có chữ “Loading” báo đã
tải thành công hai file bao gồm file thiết kế encoder_16_4 và file
testbench tb_encoder_16_4
Bước 4: Chỉnh khoảng thời gian cho một lần chạy mô phỏng
Từ bước này, tại hạ chỉ cách chạy mô phỏng theo từng khoảng thời
gian để chúng ta có thể dễ dàng quan sát Xem hình sau để biết chỗ
chỉnh khoảng thời gian cho 1 lần chạy mô phỏng (tại hạ chỉnh 1000us – mặc định là 100us)
Trang 14Bước 5: Bật cửa sổ tín hiệu “Signals”
vào View/Signals
Cửa sổ sau xuất hiện
Trang 15Trong cửa sổ “Signals” vô Add/Wave để hiển thị các tín hiệu trong thiết kế lên cửa sổ chạy dạng sóng Wave
Bước 6: Chạy dạng sóng
Trang 16Cửa sổ Wave
Bấm nút RUN (khoang tròn màu vàng) để chạy dạng sóng Một lần
bấm dạng sóng sẽ chạy 1 khoảng thời gian bằng khoảng thời gian
chúng ta đã thiết lập
Bước 7: Xem kết quả
Ta thấy kết quả mô phỏng đúng ý đồ thiết kế
Trang 17Thế là chúng ta hoàn thành phần viết RTL code và compile thiết kế
trong ModelSim Bài sau tại hạ sẽ hướng dẫn một món mô phỏng đơn giản, dễ làm – dễ xơi