1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Lab 01

14 12 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 14
Dung lượng 1,18 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Khoa Vô tuyến điện tử Bộ môn Kỹ thuật Xung, số, VXL Thực hành: Thiết kế logic số Bài 01: Mô phỏng VHDL trên ModelSim Mục đích Giúp sinh viên làm quen với chương trình mô phỏng Modelsim,

Trang 1

Khoa Vô tuyến điện tử

Bộ môn Kỹ thuật Xung, số, VXL

Thực hành: Thiết kế logic số Bài 01: Mô phỏng VHDL trên ModelSim

Mục đích

Giúp sinh viên làm quen với chương trình mô phỏng Modelsim, làm quen với cấu trúc chương trình VHDL và cách kiểm tra nhanh một thiết kế trên VHDL

Công cụ phục vụ thực hành : Máy vi tính

Thời gian : 1h30

Trang 2

1 Giới thiệu về chương trình mô phỏng Modelsim

Do các ngôn ngữ mô tả phần cứng như VHDL được chuẩn hóa bởi IEEE

và được công bố rộng rãi nên có rất nhiều các phần mềm mô phỏng mạch số được nhiều công ty khác nhau phát triển Điểm chung của các chương trình này là đều phải có một trình biên dịch và có khả năng mô phỏng mạch theo thời gian thực, kết xuất kết quả một số dạng nhất định như File text, file định kiểu, hay phổ biến và trực quan nhất là dưới dạng giản đồ sóng Dưới đây sẽ giới thiệu chương trình mô phỏng là ModelSim, đây là một chương trình mô phỏng khá mạnh và chính xác được phát triển bởi Mentor Graphics

ModelSim là một chương trình phần mềm thương mại, tuy vậy bên cạnh các phiên bản phải trả tiền license, có phiên bản miễn phí dành cho sinh viên

và người nghiên cứu không sử dụng với mục đích thương mại Phiên bản này

có tên là ModelSim Student Edition có thể được tải trực tiếp từ trang chủ của Mentor Graphics theo địa chỉ

http://model.com/content/modelsim-pe-student-edition-hdl-simulation

Trang 3

Sau khi cài chương trình sẽ đòi hỏi cài đặt cấp phép sử dụng (license) Để

có được license cần phải điều đủ vào bản khai báo các thông tin cá nhân như hòm thư, địa chỉ vv Mentor Graphic sẽ gửi vào hòm thư của bạn một file license có tên là student_license.dat, file này cho phép sử dụng phần mềm trong vòng 180 ngày, để kích hoạt license chỉ việc copy vào thư mục gốc của modelSim (thường là C:\Modeltech_pe_edu_6.2f trong đó “6.2f” là số hiệu phiên bản của chương trình)

Chú ý: Hướng dẫn mô phỏng một thiết kế và sử dụng chương trình có trong

thư mục “C:\Modeltech_pe_edu_6.2f\docs\pdfdocs”, đối với các phiên bản khác nhau thì có thể đường dẫn sẽ khác nhau

Sau đây chúng ta sẽ lần lượt học cách sử dụng chương trình thông qua một ví

dụ cụ thể

2 Viết mã nguồn VHDL

Trong Modelsim cũng tích hợp một trình soạn thảo file nguồn tuy vậy cũng như các ngôn ngữ lập trình khác mã nguồn VHDL của thiết kế có thể được soạn thảo bằng bất kz một chương trình soạn thảo nào Một trong những chương trình soạn thảo khá tốt và tiện dụng là Notepad++ ( http://notepad-plus-plus.org/download), chương trình này hỗ trợ hiện thị nhiều ngôn ngữ lập trình khác nhau trong đó có VHDL và Verilog File nguồn của mã VHDL có đuôi

là vhd Khi soạn thảo file có đuôi dạng này băng Notepad thì toàn bộ các từ khóa, cấu trúc ngôn ngữ được làm đậm hoặc đổi màu cho dễ quan sát và sửa lỗi

Trang 4

Chương trình Notepad++

Để đơn giản và dễ hiểu phần này ta sẽ minh họa bằng ví dụ quen thuộc

về bộ cộng 4 bit Bộ cộng được thiết kế đơn giản nhất bằng cách ghép nối tiếp

4 khối full_adder 1 bit

FULL_ADDER

b0 a0

CI S0

FULL_ADDER

b3 a3

C(2) S3

FULL_ADDER

b2 a2

C(1) S2

FULL_ADDER

b1 a1

C(0)

S1 CO

Cấu trúc của 4 bit - adder Module full_adder có ba mô tả kiến trúc, trong đó mô tả cấu trúc sử dụng các module con là AND2, OR2, XOR2

Bước 1: Tạo trong thư mục D:\Student một thư mục có tên adder4 Thư mục

chúng ta làm việc sẽ là D:\Student\adder4

Bước 2: Trong Notepad++ tạo mới một file bằng cach chọn menu File/new,

soạn thảo file với nội dung như dưới đây

Nội dung full_adder.vhd

Trang 5

- full_adder -

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-

entity full_adder is

port (A : in std_logic;

B : in std_logic;

Cin : in std_logic;

S : out std_logic;

Cout : out std_logic

);

end full_adder;

-

architecture behavioral of full_adder is

BEGIN

add:

process (A, B, Cin)

begin

if (a ='0' and b='0' and Cin = '0') then

S <= '0';

Cout <= '0';

elsif (a = '1' and b = '0' and Cin = '0') or (a = '0' and b = '1' and Cin = '0') or (a = '0' and b = '0' and Cin = '1') then

S <= '1';

Cout <= '0';

elsif (a = '1' and b = '1' and Cin = '0') or (a = '1' and b = '0' and Cin = '1') or (a = '0' and b = '1' and Cin = '1') then

S <= '0';

Cout <= '1';

elsif (a = '1' and b = '1' and Cin = '1') then

S <= '1';

Cout <= '1';

end if;

end process add;

end behavioral;

-

architecture dataflow of full_adder is

begin

S <= A xor B xor Cin;

Cout <= (A and B) or (Cin and (a or b));

end dataflow;

-

Sau khi tạo xong đó chọn File/Save, và lưu file dưới tên

full_adder.vhd trong thư mục làm việc D:\Student\adder4, lưu { để lưu

Trang 6

dưới dạng vhd ở ô chọn File types phải chọn là All files(*) như trong hình dưới đây

Bước 3: Tạo mã nguồn của bộ cộng 4-bit, lưu thành file adder4.vhd với nội dung như sau:

- 4-bit adder -

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-

entity adder4 is

port(

A : in std_logic_vector(3 downto 0);

B : in std_logic_vector(3 downto 0);

CI : in std_logic;

SUM : out std_logic_vector(3 downto 0);

CO : out std_logic);

end adder4;

-

architecture structure of adder4 is

signal C: std_logic_vector(2 downto 0);

declaration of component full_adder

component full_adder

port (

Trang 7

A : in std_logic;

B : in std_logic;

Cin : in std_logic;

S : out std_logic;

Cout : out std_logic

);

end component;

for u0: full_adder use entity work.full_adder(behavioral);

for u1: full_adder use entity work.full_adder(behavioral);

for u2: full_adder use entity work.full_adder(dataflow); for u3: full_adder use entity work.full_adder(dataflow); begin

design of 4-bit adder

u0: component full_adder

port map (A => A(0), B => B(0), Cin => CI,

S =>Sum(0), Cout => C(0));

u1: component full_adder

port map (A => A(1), B => B(1), Cin => C(0),

S =>Sum(1), Cout => C(1));

u2: component full_adder

port map (A => A(2), B => B(2), Cin => C(1),

S =>Sum(2), Cout => C(2));

u3: component full_adder

port map (A => A(3), B => B(3), Cin => C(2),

S =>Sum(3), Cout => CO);

end structure;

Theo như trình bày ở phần lý thuyết của khai báo cấu hình, nếu ta dung phương pháp khai báo trực tiếp cấu hình như trên thì các component full_adder của adder4 được lựa chọn các cấu hình khác nhau như ở trên

3 Biên dịch thiết kế

Để tạo biên dịch thiết kế ta làm lần lượt các bươc sau:

Bước 4: Khởi động Modelsim, tại menu File chọn Change Directory, tại menu

Change directory chọn Chọn đường dẫn tới thư mục làm việc D:\Student\adder4\ chứa các nguồn vừa tạo adder4.vhd, full_adder.vhd

Trang 8

Bước 5: Tạo thư viện work bằng cách gõ lệnh sau vào cửa sổ Transcript của

Modelsim:

vlib work

Trang 9

Bước 6: Biên dịch các mã nguồn bằng cách gõ các lệnh sau vào cửa số

Transcript

vcom full_adder.vhd

vcom adder4.vhd

Khi trình biên dịch phát hiện ra lỗi về mặt cú pháp thì nó sẽ thông báo chính xác dòng tương ứng gây ra lỗi Nếu như mã nguồn của thiết kế không có lỗi thì biên dịch xong sẽ cho ra kết quả như hình trên

4 Mô phỏng và kiểm tra thiết kế

Kiểm tra nhanh thiết kế bằng cách đưa vào đầu vào của DUT các giá trị

cố định và kiểm tra trực tiếp kết quả đầu ra Kiểm tra nhanh cho phép phát hiện và sửa những lỗi về mặt chức năng đơn giản trước khi bước vào bước

kiểm tra với số lượng lớn tổ hợp giá trị đầu vào

Bước 7: Để kiểm tra nhanh bộ cộng thiết kế ở trên tạo thêm một file

adder4_test.vhd trong thư mục làm việc với nội dung như sau như sau:

-adder4_test -

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-

entity adder4_test is

end adder4_test;

-

Trang 10

architecture test of adder4_test is

component adder4 is

port(

A : in std_logic_vector(3 downto 0);

B : in std_logic_vector(3 downto 0);

CI : in std_logic;

SUM : out std_logic_vector(3 downto 0);

CO : out std_logic

);

end component;

khai bao cac tin hieu vao ra cho DUT

signal A : std_logic_vector(3 downto 0) := "0101"; signal B : std_logic_vector(3 downto 0) := "1010";

signal CI : std_logic := '1';

output -

signal SUM : std_logic_vector(3 downto 0);

signal CO : std_logic;

begin

DUT: component adder4

port map (

A => A, B=> B, CI => CI,

SUM => SUM, CO =>CO

);

end test;

-

test_adder4 là một thiết kế mà không chứa bất cứ cổng vào ra nào ở phần khai báo Kiến trúc của nó gồm hai phần, phần khai báo tín hiệu sẽ khai báo các tín hiệu vào ra của adder4 trong đó đối với các tín hiệu đầu vào a_t =

“0011”, b_t = “0110”, ci_t = ‘0’; đối với các tín hiệu đầu ra thì để trống Phần hai là khai báo sử dụng adder4 như một phần tử có tên là dut (component) và gán các cổng vào ra tương ứng như trên

Bước 8: Tiến hành biên dịch file adder4_test.vhd này bằng lệnh sau trong cửa

sổ transcript tương tự làm trong bước 6)

vcom adder4_test.vhd

Bước 9: Khởi tạo mô phỏng thiết kế bằng lệnh:

vsim adder4_test

Trang 11

Bước 10: Bổ xung các tín hiệu vào cửa sổ wave form để quan sát, để thực hiện

gõ các lệnh sau vào cửa sổ Transcript

add wave sim:/adder4_test/dut/a

add wave sim:/adder4_test/dut/b

add wave sim:/adder4_test/dut/CI

add wave sim:/adder4_test/dut/CO

add wave sim:/adder4_test/dut/SUM

Mỗi lệnh trên sẽ hiển thị một tín hiệu tương ứng vào giản đồ sóng, bằng cách đó ta có thể lựa chọn các tín hiệu nhất định để theo dõi Sau khi thực hiện các bước trên thì có thể tiến hành chạy mô phỏng Mô phỏng có thể chạy bằng nút công cụ Run trên thanh công cụ của cửa sổ giản đồ sóng:

Trang 12

Bước 11: Chạy mô phỏng và quan sát kết quả trên waveform bằng cách gõ

lệnh run 100 ns vào cửa sổ Transcript sau đó mở rộng cửa sổ Waveform bên phải để quan sát

run 1000 ns

Khi gặp lệnh này chương trình sẽ chạy mô phỏng trong 1000 ns Kết quả ra như sau:

Trang 13

Quan sát trên hình có và so sánh với mã nguồn của adder4_testbench có thể thấy với a = “0101” = 5, b=”1010” = 10, CI = ‘1’ thì cho ra kết quả sum =

“0000” = 0 và CO = ‘1’

Bước 12: Thực hiện lệnh sau để kết thúc mô phỏng

vsim -quit

Mở file adder4_test.vhd, thay đổi giá trị cho các tín hiệu A, B, Cin tại các dòng khai báo tín hiệu cho DUT, sau khi thay đổi, lưu file lại và thực hiện các bước từ 8 trở đến bước 11, quan sát sự thay đổi tương ứng trên giản đồ sóng

Bước 13: Tạo một file run.do lưu vào trong thư mục làm việc với nội dung như sau:

vsim -quit

vlib work

vcom full_adder.vhd

vcom adder4.vhd

vcom adder4_test.vhd

vsim adder4_test

Trang 14

add wave sim:/adder4_test/a

add wave sim:/adder4_test/b

add wave sim:/adder4_test/CI

add wave sim:/adder4_test/CO

add wave sim:/adder4_test/SUM

run 1000 ns

Dòng thứ nhất để kết thúc bất kz mô phỏng nào đang thực thi nếu nó tồn tại, dòng thứ hai tạo thư viện work nếu nó chưa tồn tại, tiếp đến là các lệnh vcom để biên dịch các file mã nguồn từ thấp đến cao Lệnh vsim để tiến hành mô phỏng, sau đó là các lệnh bổ xung tín hiệu cần theo dõi vào giản đồ sóng Lệnh cuối cùng là lệnh run dùng để chạy mô phỏng Trừ lệnh thứ nhất ra

từ lệnh thứ hai đên cuối là quy trình chúng ta thực hiện lần lượt từ bước 5 đến bước 11

Bước 14: trong cửa sổ transcript của modelsim để biên dịch và chạy lại mô

phỏng ta chỉ như sau

do run.do

Với file run.do này có thể dễ dàng thực hiện bước 12 nhiều lần một cách nhanh chóng, mỗi lần thay đổi mã nguồn chỉ cần dùng lệnh do run.do trên, modelsim sẽ tự động thực hiện các thao tác biên dịch, mô phỏng và chạy từ đầu đến cuối

5 Nhiệm vụ sinh viên

- Dựa trên quy trình đã học, xây dựng bộ cộng 8 bit và thực hiện mô phỏng kiểm tra bộ cộng đó trên modelsim

Ngày đăng: 09/01/2022, 10:37

TỪ KHÓA LIÊN QUAN

w