Báo cáo thí nghiệm điện tử số - Nguyễn Quang Tuấn

Câu hỏi: Tại sao phải mô phỏng về chức năng và thời gian ?

Trả lời :

 Mô phỏng về chức năng để kiểm tra xem mạch đã thực hiện đứng với yêu cầu thiết kê chưa. Từ đó sửa lại mạch cho đúng với yêu cầu đặt ra.

 Mô phỏng về thời gian để đánh giá tốc độ xử lí của mạch đã thiết kế và xét đến những khoảng thời gian trễ của các cổng logic.

 Biết được lượng thời gian cần thiết để có tín hiệu đúng, ổn định để sử dụng tiếp. Nếu kết quả đầu ra có sử dụng để làm đầu vào để xử lí tiếp thì cần biết sau thời gian bao nhiêu thì mới lấy kết quả ở đầu ra đó để có kết quả chính xác hơn.

 

doc11 trang | Chuyên mục: Điện Tử Cơ Bản | Chia sẻ: tuando | Lượt xem: 521 | Lượt tải: 0download
Tóm tắt nội dung Báo cáo thí nghiệm điện tử số - Nguyễn Quang Tuấn, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
VIỆN ĐIỆN TỬ - VIỄN THÔNG
*****************************
BÁO CÁO
THÍ NGHIỆM ĐIỆN TỬ SỐ
Họ tên sinh viên: Nguyễn Quang Tuấn
Mã lớp thí nghiệm: 31389
Mã số SV: 20093004
Lớp: Điện tử - Viễn thông 01 - K54
Email: nqt.dtvt1@gmail.com
Hà Nội – T11/2011
Bài 1: Giới thiệu về Quartus II và quy trình thiết kế FPGA
Câu hỏi: Tại sao phải mô phỏng về chức năng và thời gian ?
Trả lời : 
Mô phỏng về chức năng để kiểm tra xem mạch đã thực hiện đứng với yêu cầu thiết kê chưa. Từ đó sửa lại mạch cho đúng với yêu cầu đặt ra.
Mô phỏng về thời gian để đánh giá tốc độ xử lí của mạch đã thiết kế và xét đến những khoảng thời gian trễ của các cổng logic.
Biết được lượng thời gian cần thiết để có tín hiệu đúng, ổn định để sử dụng tiếp. Nếu kết quả đầu ra có sử dụng để làm đầu vào để xử lí tiếp thì cần biết sau thời gian bao nhiêu thì mới lấy kết quả ở đầu ra đó để có kết quả chính xác hơn.
Bài 4: Thiết kế bộ so sánh 3 bit
Câu 1: Có bao nhiều phương án thiết kế bộ so sánh 8 bít? Khó khăn của các phương án đó khi thực hiện ra sao?
Trả lời : 
So sánh từng bit một, thứ tự từ cao xuống thấp và đưa ra kết quả như bộ so sánh 3 bit. Cách này có đường đi tín hiệu dài, qua nhiều phần tử logic nên xử lí chậm, tốc độ thức hiện không nhanh.
Chuyển số 8 bit thành số có dấu bằng cách thêm 1 bit vào đầu thành 9 bit, sau đó dùng bộ cộng có dấu để trừ 2 số cho nhau. Xét dấu kết quả xem là số có dấu hay không có thể đi đến kết luận là lớn hơn hay bé hơn. Cách này nếu dùng bộ cộng Ripple-carry thì chậm, do đường đi tín hiệu dài. Nếu dùng bộ cộng carry-lookahead thì có kết quả xét dấu nhanh hơn, cách này chỉ cần quan tâm đến dấu, không cần quan tâm đến kết quả nhận được. Nhưng khi so sánh số nhiều bit thì bộ carry-lookahead sẽ phức tạp, có vấn đề về fan-in....
Câu 2 : Đường đi dài nhất của bộ so sánh 3 bít này bằng bao nhiêu? Tốc độ tối đa cho phép đối với bộ so sánh này bằng bao nhiêu?
Trả lời : 
Mỗi lần so sánh 1 bit thì đường đi dài nhất ở cả 3 đầu ra B, N, L như nhau, đều là 1 cổng NOT, 1 cổng AND-3 và 1 cổng OR-2 => đường đi dài nhất là 3. Từ đó ta có đường đi dài nhất của tín hiệu là 9, đi qua 3 công NOT, 3 cổng AND-3 và 3 cổng OR-2. Tốc độ tối đa cho phép của bộ so sánh này bằng Delay của tổng các cổng kể trên.
Câu 3: Số phần tử được dùng cho thiết kế này là bao nhiêu?
Trả lời : 
9 cổng NOT , 12 cổng AND-3 và 9 cổng OR-2.
Bài 5: Mạch dãy, xây dựng bộ đếm
Câu 1: Phát triển bộ đếm này thành bộ đếm 8 bit như thế nào ?
Trả lời : 	
Ta có thể ghép 2 bộ đếm 4 bit với nhau thành bộ đếm 8 bit, đặt bộ đếm thứ nhất làm 4 bit cao, 4 bit thứ 2 làm 4 bit thấp , với xung clock của bộ 4 bit thứ 1 có chu kì bằng 16 lần xung clock của bộ đếm thứ 2. Khi đó mỗi khi bộ 4 bít thứ 2 đếm từ 0 đến 15 rùi quay về 0 thì bộ đếm thứ 1 được đếm 1 lần, tạo thành bộ đếm 8 bit. Có thể đặt xung clock của bộ đếm thứ 1 bằng cách And tất cả các bit của bộ đếm thứ 2, khi tất cả 4 bít đều bằng 1 thì sẽ xuất hiện xung clock cho bộ đếm thứ nhất .
Sơ đồ bộ đếm 4 bit:
Phát triển thành bộ đếm 8 bit:
Câu 2 : Đường đi dài nhất của các liên kết trong bộ đếm này bằng bao nhiêu? Tốc độ tối đa cho phép đối với bộ so sánh này bằng bao nhiêu ?
Trả lời : 
Đường đi dài nhất của liên kết trong bộ đếm là Y[2] : qua 1 cổng Not, 1 And3 và 1 Or 2 , độ dài bằng 3.
Giả xử độ trễ của các cổng logic đều là ∆t, qua 3 cổng sẽ trễ 3 ∆t.Từ đó suy ra tốc độ tối đa cho phép phải lớn hơn 3∆t và lớn hơn xung clock.
Câu 3: Số phần tử dùng trong mạch này gồm : 4 T-flipflop , 3 NOT, 3 AND-3 , 1 OR-2.
Bài 6 : Trạng thái máy hữu hạn FSM
Xây dựng mạch kiểm tra nếu chuỗi bit là “11101” thì cho ra z=1 , nếu khác thì cho ra z=0.
Trả lời : 
Ta sẽ duyệt chuỗi bit từ trái qua phải .
Ý tưởng : Dùng 6 trạng thái để mô tả mạch. Tín hiệu đưa xung vào là X
Trạng thái
Mô tả
Sw
Trạng thái ban đầu chưa có bit nào hoặc có bit ‘0’
S1
Phát hiện được 1 bít ‘1’
S11
Phát hiện được chuỗi “11”
S111
Phát hiện được chuỗi “111”
S1110
Phát hiện được chuỗi “1110”
S11101
Phát hiện được chuỗi “11101”
Bảng chuyển trạng thái như sau: 
Bảng đầu ra của mạch
Sơ đồ khối FSM
Code VHDL:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY bai6 IS
 PORT (
 clk : IN STD_LOGIC;
 rst : IN STD_LOGIC := '0';
 x : IN STD_LOGIC := '0';
 led: out std_logic_vector(5 downto 0);
 Z : OUT STD_LOGIC
 );
END bai6;
ARCHITECTURE BEHAVIOR OF bai6 IS
 TYPE type_fstate IS (Sw,S1,S11,S111,S1110,S11101);
 SIGNAL fstate : type_fstate;
 SIGNAL reg_fstate : type_fstate;
 SIGNAL reg_Z : STD_LOGIC := '0';
BEGIN
 PROCESS (clk,reg_fstate)
 BEGIN
 IF (clk='1' AND clk'event) THEN
 fstate <= reg_fstate;
 END IF;
 END PROCESS;
 PROCESS (fstate,rst,x,reg_Z)
 BEGIN
 IF (rst='1') THEN
 reg_fstate <= Sw;
 reg_Z <= '0';
 Z <= '0';
 ELSE
 reg_Z <= '0';
 Z <= '0';
 CASE fstate IS
 WHEN Sw =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= Sw;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S1;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= Sw;
 END IF;
 reg_Z <= '0';
 WHEN S1 =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= Sw;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S11;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= S1;
 END IF;
 reg_Z <= '0';
 WHEN S11 =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= Sw;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S111;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= S11;
 END IF;
 reg_Z <= '0';
 WHEN S111 =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= S1110;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S111;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= S111;
 END IF;
 reg_Z <= '0';
 WHEN S1110 =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= Sw;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S11101;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= S1110;
 END IF;
 reg_Z <= '0';
 WHEN S11101 =>
 IF (NOT((x = '1'))) THEN
 reg_fstate <= Sw;
 ELSIF ((x = '1')) THEN
 reg_fstate <= S11;
 -- Inserting 'else' block to prevent latch inference
 ELSE
 reg_fstate <= S11101;
 END IF;
 reg_Z <= '1';
 WHEN OTHERS => 
 reg_Z <= 'X';
 report "Reach undefined state";
 END CASE;
 Z <= reg_Z;
 END IF;
 END PROCESS;
 with fstate select 
	led<="000001" when Sw,
	 "000010" when S1,
	 "000100" when S11,
	 "001000" when S111,
	 "010000" when S1110,
	 "100000" when S11101,
	 "000000" when others;
END BEHAVIOR;
Mô phỏng chức năng của mạch: 

File đính kèm:

  • docbao_cao_thi_nghiem_dien_tu_so_nguyen_quang_tuan.doc
Tài liệu liên quan