1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Báo cáo thực hành môn thiết kế số và vi xử lý buổi 3+4 mô hình cấu trúc

34 4 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Mô hình cấu trúc
Tác giả Trần Duy Long, Phạm Thu Hằng
Người hướng dẫn KS. Dương Minh Ngọc
Trường học ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Chuyên ngành Thiết kế số và vi xử lý
Thể loại Báo cáo thực hành
Năm xuất bản 2024
Thành phố HÀ NỘI
Định dạng
Số trang 34
Dung lượng 30,74 MB

Nội dung

Biến nội bộ - Thiết kế mạch phức tạp với các hàm phức tạp  Phân chia hàm thành các bước trung gian  Sử dụng biến nội bộ - Biến nội bộ không phải là đầu vào hay đầu ra, mà chỉ được sử d

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

BÁO CÁO THỰC HÀNH

MÔN THIẾT KẾ SỐ VÀ VI XỬ LÝ

BUỔI 3+4

Giảng viên hướng dẫn: KS Dương Minh Ngọc

Họ và tên sinh viên: Trần Duy Long – 22029071

Phạm Thu Hằng - 21021580 Lớp: ELT3290 59

HÀ NỘI – 2024

Trang 2

1 Lý thuyết

1.1 Mô hình cấu trúc

- Mạch phức tạp -> Sử dụng mô hình cấu trúc.

- Mô hình cấu trúc: mô tả một mô-đun dựa trên cách mà nó được kết hợp từ các

mô-đun đơn giản hơn

1.2 Biến nội bộ

- Thiết kế mạch phức tạp với các hàm phức tạp

 Phân chia hàm thành các bước trung gian

 Sử dụng biến nội bộ

- Biến nội bộ không phải là đầu vào hay đầu ra, mà chỉ được sử dụng bên trong

mô-đun; tương tự như biến cục bộ trong các ngôn ngữ lập trình

1.3 Phép gán:

Phépgánliêntục

Phépgánkhóa

Phépgánkhôngkhóa

Cậpnhậtvếtráichovếphải

Ngaylậptức

Ngaylậptức

Vàocuốibướcthờigianhiệntại,thườn

g làtạicạnhxungđồnghồThứ tự

thựchiệncáccâulệnh

Đồngthời Theothứ tự Đồngthời

Dùng để

thiếtkế

Mạch tổhợpđơngiản

Mạch tổhợp

Mạchtuầntự

Trang 3

- Các câu lệnh trong câu lệnh always chỉ được chạy khi sự kiện được chỉ định

trong sensitivity list xảy ra

- câu lệnh always có thể được sử dụng để thiết kế flip-flop, latches hoặc mạch tổ

hợp tùy thuộc vào sensitivity list và câu lệnh

- Các loại câu lệnh always:

+ always@(sensitivity list) có thể được sử dụng để thiết kế mạch tuần tự hoặc tổhợp dựa trên sensitivity list

+ always_comb: dành riêng cho việc thiết kế mạch tổ hợp; đánh giá lại các câulệnh bên trong always_comb bất kỳ lúc nào tín hiệu ở vế phải của câu lệnh thayđổi

+ always_latch dành riêng cho thiết kế latch

+ always_ff dành riêng cho thiết kế flip flop

1.5 Mảng đóng gói và mảng không đóng gói

Đặc điểm Mảng đóng gói Mảng khôngđóng gói

Khai báo

Kích thước/chiềunằm bên trái tên biến

Ví dụ: logic [3:0]

data_bus (4 bit được đóng gói với nhau)

Kích thước/chiềunằm bên phải tên biến

Ví dụ: logic flag[3:0] (4 biến logic 1-bit độc lập)Lưu trữ Khối bit liền kề

(gọn trong bộ

Các thành phần độc lập

Trang 4

trong bộ nhớ)

Sử dụng

Biểu diễn dữ liệu

đa bit như vecto, bus

Biểu diễn các biến độc lập (như mảng)Các phép

toán bitwise Có hỗ trợ

Không trực tiếp

hỗ trợ (cần truy cập riêng mỗi biến)Các phép

tính số học

Có hỗ trợ (coi toàn mảng là một số)

Không trực tiếp

hỗ trợ cả mảng

1.6 Số trong SystemVerilog

- Định dạng để khai báo hằng số là N'Bvalue, trong đó N là kích thước tính

bằng bit, B chỉ cơ số và value cho biết giá trị

Ví dụ: 9'h25 biểu thị số có 9 bit với giá trị là 25(cơ số 16) = 37(cơ số 10) =

0001001012 (cơ số 2)

- SystemVerilog hỗ trợ 'b cho nhị phân, 'o cho bát phân, 'd cho thập phân và 'h

cho thập lục phân Nếu cơ số bị bỏ qua, nó sẽ mặc định là thập phân

1.7 Câu lệnh if-else

- Cú pháp:

if (dieu_kien) begin

// Doan ma chay neu dieu kien dung

end else begin

// Doan ma chay neu dieu kien sai

Trang 5

2.1 Bài 1: Thiết kế bộ ghép kênh 4:1 sử dụng bộ ghép kênh 2:1 trong

SystemVerilog, mô phỏng trên ModelSim và thử nghiệm hoạt động của thiết kếtrên bảng mạch DE-10

- Đoạn mã thiết kế:

module mux2_1 (input logic a, b, sel, output logic y);

assign y = sel ? b : a;

endmodule

module mux4_1 (input logic in1, in2, in3, in4, sel0, sel1, output logic y);

logic low, high;

mux2_1 muxhigh(in3, in4, sel1, high);

Trang 6

mux2_1 muxlow(in1, in2, sel1, low);

mux2_1 muxfinal(low, high, sel0, y);

endmodule

- Testbench:

module mux4_1_tb();

logic in4, in3, in2, in1;

logic sel1, sel0;

case ({sel1, sel0})

0 : assert (y == in1) else $error ("in4 = %b, in3 = %b, in2 = %b, in1 = %b sel1 =

%b, sel0 = %b failed", in4, in3, in2, in1, sel1, sel0);

1 : assert (y == in2) else $error ("in4 = %b, in3 = %b, in2 = %b, in1 = %b sel1 =

%b, sel0 = %b failed", in4, in3, in2, in1, sel1, sel0);

2 : assert (y == in3) else $error ("in4 = %b, in3 = %b, in2 = %b, in1 = %b sel1 =

%b, sel0 = %b failed", in4, in3, in2, in1, sel1, sel0);

3 : assert (y == in4) else $error ("in4 = %b, in3 = %b, in2 = %b, in1 = %b sel1 =

%b, sel0 = %b failed", in4, in3, in2, in1, sel1, sel0);

endcase

Trang 7

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

- Giải thích kết quả thử nghiệm:

 Trong thực nghiệm này ta gắn input a, b, c, d lần lượt với các switch 1, 2, 3, 4

và 2 sel1 và sel2 ta gắn với 2 button là button 1 và 2 cùng với đó output e tagắn cho led 1

 Khi ta không bấm vào các button nó sẽ mặc định là 11 và nó sẽ lấy lối ra led 1dựa vào switch 4 và khi switch 4 ở giá trị 0( hay off) đèn led sẽ sáng(biểu thịcho giá trị 0)(hình bên trái) Khi switch 4 ở giá trị 1(hay on) đèn led sẽ tắt(biểuthị cho giá trị 1)(hình bên phải)

Trang 8

 Khi ta bấm cả 2 button cùng lúc thì mạch sẽ hiểu là ta muốn giá trị led1 dựatheo switch 1(00)(khi bấm button sẽ chuyển từ dạng 1 về 0) khi switch 1 ở giátrị 0( hay off) đèn led sẽ sáng(biểu thị cho giá trị 0)(hình bên trái) Khi switch

1 ở giá trị 1(hay on) đèn led sẽ tắt(biểu thị cho giá trị 1)(hình bên phải)

Trang 9

 Khi ta chỉ bấm button 1 thì mạch sẽ hiểu là ta muốn giá trị led1 dựa theoswitch 2(01) (khi bấm button sẽ chuyển từ dạng 1 về 0) khi switch 2 ở giá trị0( hay off) đèn led sẽ sáng(biểu thị cho giá trị 0)(hình bên trái) Khi switch 2 ởgiá trị 1(hay on) đèn led sẽ tắt(biểu thị cho giá trị 1)(hình bên phải).

 Khi ta chỉ bấm button 2 thì mạch sẽ hiểu là ta muốn giá trị led1 dựa theoswitch 3(10) (khi bấm button sẽ chuyển từ dạng 1 về 0) khi switch 3 ở giá trị0( hay off) đèn led sẽ sáng(biểu thị cho giá trị 0)(hình bên trái) Khi switch 3 ởgiá trị 1(hay on) đèn led sẽ tắt(biểu thị cho giá trị 1)(hình bên phải)

Trang 10

2.2 Bài 2: Thiết kế bộ full adder sử dụng biến nội bộ và phép gán liên tục trong

SystemVerilog, mô phỏng trên ModelSim và thử nghiệm hoạt động của thiết kếtrên bảng mạch STEP MAX-10

Trang 11

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

- Giải thích kết quả thử nghiệm:

 Trong thực nghiệm này ta gắn input A, B, Cin lần lượt với các switch 1, 2, 3

và output S, Cout ta gắn cho led 1, 2

 Khi lối vào A, B, Cin đều có giá trị bằng 1 ( hay switch 1,2,3 đều có giá trị là1(ON) ) thì đèn led 1,2(hay lối ra S,Cout) đều sẽ tắt(biểu thị cho giá trị bằng 1)

Trang 12

 Khi switch 1 OFF(hay có giá trị bằng 0) và switch 2,3 ON(hay có giá trị bằng1) thì led 1 sẽ sáng(biểu thị cho giá trị bằng 0) và led 2 sẽ tắt (biểu thị cho giátrị bằng 1)

 Khi switch 2 OFF(hay có giá trị bằng 0) và switch 1,3 ON(hay có giá trị bằng1) thì led 1 sẽ sáng(biểu thị cho giá trị bằng 0) và led 2 sẽ tắt (biểu thị cho giátrị bằng 1)

Trang 13

 Khi switch 1,2 OFF(hay có giá trị bằng 0) và switch 3 ON(hay có giá trị bằng1) thì led 1 sẽ tắt(biểu thị cho giá trị bằng 1) và led 2 sẽ sáng (biểu thị cho giátrị bằng 0)

 Khi switch 1,2 ON(hay có giá trị bằng 1) và switch 3 OFF(hay có giá trị bằng0) thì led 1 sẽ sáng(biểu thị cho giá trị bằng 0) và led 2 sẽ tắt(biểu thị cho giátrị bằng 1)

Trang 14

 Khi switch 1,3 OFF(hay có giá trị bằng 0) và switch 2 ON(hay có giá trị bằng1) thì led 1 sẽ tắt(biểu thị cho giá trị bằng 1) và led 2 sẽ sáng(biểu thị cho giátrị bằng 0)

 Khi switch 1 ON(hay có giá trị bằng 1) và switch 2,3 OFF(hay có giá trị bằng0) thì led 1 sẽ tắt(biểu thị cho giá trị bằng 1) và led 2 sẽ sáng(biểu thị cho giátrị bằng 0)

Trang 15

 Khi switch 1,2,3 đều OFF(hay có giá trị bằng 0) thì led 1,2 đều sẽ sáng(biểuthị cho giá trị bằng 0)

2.3 Bài 3: Thiết kế bộ fulladder sử dụng câu lệnh always_comb

- Đoạn mã thiết kế:

module full_adder_2 (input logic a, b, cin, output logic s, cout);

Trang 16

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

2.4 Bài 4: Thiết kế bộ giải mã 2-4 dùng trong SystemVerilog, mô phỏng trên

ModelSim và thử nghiệm hoạt động của thiết kế trên bảng mạch STEP MAX10

Trang 17

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

- Giải thích thực nghiệm:

Trang 18

 Ta gắn lần lượt các đầu vào A[1], A[0] lần lượt với các switch 1,2 và các đầu

ra B[0] cho đến B[3] lần lượt với các led 4 đến 1

 Ta có những trường hợp như dưới đây:

 Khi ta để các giá trị switch là off tương ứng với trường hợp 00 thì đèn led4( B[0] ) sẽ tắt( tương ứng với giá trị 1 ) còn 3 led còn lại sẽ sáng( tương ứngvới giá trị 1)

Trang 19

 Khi ta để switch 2( A[0] ) ở giá trị ON( tương ứng với giá trị 1), switch1( A[1] ) ở giá trị OFF( tương ứng với giá trị 0 ) thì led 3( B[1] ) sẽ tắt (tươngứng với giá trị 1) còn 3 led còn lại sẽ sáng(tương ứng với giá trị 0).

 Khi ta để switch 1 ( A[1] ) ở giá trị ON và switch 2 ( A[2] ) ở giá trị OFF thìled 2( B[2] ) sẽ tắt còn 3 led còn lại sẽ sáng

Trang 20

 Khi ta để switch 1 và switch 2 đều ở giá trị ON ( tương ứng với giá trị 11 ) thìled 1 ( A[3] ) sẽ tắt còn 3 led còn lại sẽ sáng.

2.5 Bài 5: Thiết kế bộ ALU dùng trong SystemVerilog, mô phỏng trên ModelSim

và thử nghiệm hoạt động của thiết kế trên bảng mạch STEP MAX10

Trang 21

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

- Giải thích thực nghiệm:

Trang 22

Ta gắn các đầu vào opcode[2] đến opcode[0] lần lượt cho các switch từ 1 đến 3 và 2đầu vào A, B lần lượt cho các button 1 và 2 Đầu ra out ta gắn với led 1.

Trang 23

Khi có 1 trong 2 giá trị đầu vào A hoặc B bằng 0( để giá trị bằng 0 bằng cách bấmbutton) thì lối ra out sẽ bằng 1 thể hiện bằng led của out tắt.

Trang 24

Khi cả 2 giá trị đầu vào A và B bằng 0 thì lối ra out sẽ bằng 0 thể hiện bằng led của outsáng.

2) Xét đến trường hợp opcode có tác dụng là trừ( opcode[0] = 1, opcode[1] = 0,opcode[2] = 0 )

Khi ta không bấm các giá trị đầu vào A, B sẽ mặc định giá trị là 1 vậy nên đầu ra sẽ cógiá trị là 0 thể hiện với led của đầu ra sáng( khi out = 0 thì led sẽ sáng )

Trang 25

Khi có 1 trong 2 giá trị đầu vào A hoặc B bằng 0( để giá trị bằng 0 bằng cách bấmbutton) thì lối ra out sẽ bằng 1 thể hiện bằng led của out tắt.

Khi cả 2 giá trị đầu vào A và B bằng 0 thì lối ra out sẽ bằng 0 thể hiện bằng led của outsáng

3) Xét đến trường hợp opcode có tác dụng như là 1 cổng logic AND( opcode[0] = 0,opcode[1] = 1, opcode[2] = 0 )

Trang 26

Khi ta không bấm các giá trị đầu vào A, B sẽ mặc định giá trị là 1 vậy nên đầu ra sẽ cógiá trị là 1 thể hiện với led của đầu ra tắt( khi out = 1 thì led sẽ tắt ).

Trang 27

Khi 1 trong 2 hoặc cả 2 giá trị đầu vào A, B là 0 (bằng cách bấm button) thì đầu ra out

= 0 do đó đèn led sẽ sáng ( khi out = 0 thì led sẽ sáng )

4) Xét đến trường hợp opcode có tác dụng như là 1 cổng logic OR( opcode[0] = 1,opcode[1] = 1, opcode[2] = 0 )

Khi cả 2 giá trị đầu vào A, B là 0(bằng cách bấm button) thì đầu ra out = 0 do đó đènled sẽ sáng ( khi out = 0 thì led sẽ sáng )

Trang 28

Khi cả 2 đầu vào hoặc 1 trong 2 đầu vào A, B có giá trị bằng 1 thì đầu ra out = 1 do đóđèn led sẽ tắt ( khi out = 0 thì led sẽ tắt ).

4) Xét đến trường hợp opcode có tác dụng như là 1 cổng logic XOR( opcode[0] = 0,opcode[1] = 0, opcode[2] = 1 )

Trang 29

Khi đầu vào A và B có các giá trị giống nhau như cùng là giá trị 1 hoặc cùng là giá trị

0 thì out = 0 khi đó đèn led sẽ sáng

Trang 30

Khi đầu vào A và B có các giá trị khác nhau như khi A = 0, B = 1 hoặc khi A = 1, B =

0 thì out = 1 khi đó đèn led sẽ tắt

5) Xét đến trường hợp opcode có tác dụng như là bộ so sánh( opcode[0] = 1,opcode[1] = 0, opcode[2] = 1 )

Trang 31

Khi A và B có các giá trị giống nhau như cùng là giá trị 1 hoặc 0 thì out = 1 khi đó đènled sẽ tắt.

Trang 32

Khi đầu vào A và B có các giá trị khác nhau như khi A = 0, B = 1 hoặc khi A = 1, B =

0 thì out = 0 khi đó đèn led sẽ sáng

2.6 Bài 6: Thiết kế bộ giải mã bảy đoạn sử dụng câu lệnh always_comb và cấu trúc

case trong SystemVerilog, mô phỏng trên ModelSim và thử nghiệm hoạt độngcủa thiết kế trên bảng mạch STEP MAX-10

- Đoạn mã thiết kế:

module seven_segment_decoder (input logic [3:0] D, output logic [6:0] S);

Trang 33

D = 4'b0000; #50;

D = 4'b0001; #50;

D = 4'b0010; #50;

D = 4'b0011; #50;

Trang 34

- Mô phỏng trên ModelSim

- Thử nghiệm trên bảng mạch STEP MAX-10

Ngày đăng: 23/10/2024, 21:59

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w