ƯỜ Ạ Ọ 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 ứ
ể ể ừ ử ạ ư ế ạ ệ ớ ứ t kê ch a. T đó s a l i m ch cho đúng v i yêu
ỏ ầ ớ v i yêu c u thi ặ ầ c u đ t ra. ỏ ộ ử ủ ạ ố ế t
Mô ph ng v th i gian đ đánh giá t c đ x lí c a m ch đã thi ờ ế k và xét đ n nh ng kho ng th i gian tr c a các c ng logic.
ề ờ ữ ế ễ ủ ể ả ổ
ờ ế ể ệ ị Bi ng th i gian c n thi
c l ế ổ ầ ế
ầ ả ầ ờ ớ ấ ế ế ầ ể ể ả ở
ể ả ơ ế ượ ượ t đ có tín hi u đúng, n đ nh đ t đ ể ử ụ ế ử ụ s d ng ti p. N u k t qu đ u ra có s d ng đ làm đ u vào đ ế ử t sau th i gian bao nhiêu thì m i l y k t qu x lí ti p thì c n bi ế ầ đ u ra đó đ có k t qu chính xác h n.
ế ế ộ Bài 4: Thi t k b so sánh 3 bit
ươ ề t k b so sánh 8 bít? Khó khăn
ệ Câu 1: Có bao nhi u ph ươ ủ c a các ph ế ế ộ ng án thi ự 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 ề ườ ng đi tín hi u dài, qua nhi u ộ ứ ệ ư ộ nh b so sánh 3 bit. Cách này có đ ầ ử 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 Ripplecarry thì
2
ậ ế ườ ộ ộ ng đi tín hi u dài. N u dùng b c ng carry
ế ệ ả
ơ ế ế ế ấ ầ ả c.
ậ ẽ ư ố ộ
ề ề ấ ch m, do đ ỉ ầ ấ 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 đ ứ ề Nh ng khi so sánh s nhi u bit thì b carrylookahead s ph c ạ t p, có v n đ v fanin....
ằ
ộ ấ ủ ố ớ ộ ộ ố ằ ố 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ì đ c 3 đ u ra B, N, L
ề ư ổ
ườ ừ ệ ấ
ấ ủ ố ủ
ấ ở ả ườ ổ ng ng đi dài nh t c a tín hi u là 9, đi qua 3 ộ ố ổ i đa cho phép c a ể ủ ổ ằ ộ ổ ườ ng đi dài nh t ổ nh nhau, đ u là 1 c ng NOT, 1 c ng AND3 và 1 c ng OR2 => đ đi dài nh t là 3. T đó ta có đ ổ công NOT, 3 c ng AND3 và 3 c ng OR2. T c đ t b so sánh này b ng Delay c a t ng các c ng k trên.
ầ ử ượ ế ế đ c dùng cho thi t k này là bao nhiêu? ố Câu 3: S ph n t
Tr l
ổ ổ ả ờ i : ổ 9 c ng NOT , 12 c ng AND3 và 9 c ng OR2.
ộ ế ự ạ 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
3
ạ ế ể ặ
ượ ộ ế ầ ằ ộ ế ủ ứ ứ
ộ ế c đ m 1 l n, t o thành b đ m 8 bit. Có th đ t xung clock ấ ả t c các bit c a b đ m th 2, khi ệ ộ ế ẽ ề ấ
ứ th 1 đ ủ c a b đ m th 1 b ng cách And t ứ ằ ấ ả 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 ố ớ ộ i đa cho phép đ i v i b so sánh này b ng bao nhiêu ? nhiêu? T c đ t
Tr l ả ờ i :
4
ộ ế ườ ế ổ Đ ng đi dài nh t c a liên k t trong b đ m là Y[2] : qua 1 c ng
ấ ủ ộ ằ
ổ ổ
ừ ề x đ tr c a các c ng logic đ u là ∆t, qua 3 c ng s tr 3 ∆t.T ả ớ ẽ ễ ơ ộ ố ố ớ ơ i đa cho phép ph i l n h n 3∆t và l n h n xung
Not, 1 And3 và 1 Or 2 , đ dài b ng 3. ả ử ộ ễ ủ Gi đó suy ra t c đ t clock.
ầ ử ạ ồ dùng trong m ch này g m : 4 Tflipflop , 3 NOT, 3
ố Câu 3: S ph n t AND3 , 1 OR2.
ữ ạ ạ 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ái qua ph i .
ể ệ ả ờ i : Tr l ẽ ệ Ta s duy t chu i bit t ưở Ý 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 Sw
S1 S11 S111 S1110 S11101 Mô tả ạ ầ Tr ng thái ban đ u ch a có bit nào ặ ho c có bit ‘0’ ượ ệ Phát hi n đ ượ ệ Phát hi n đ ượ ệ Phát hi n đ ượ ệ Phát hi n đ ượ ệ Phát hi n đ c 1 bít ‘1’ ỗ c chu i “11” ỗ c chu i “111” ỗ c chu i “1110” ỗ c chu i “11101”
ư ể ả ạ B ng chuy n tr ng thái nh sau:
5
6
ủ ả ầ ạ B ng đ u ra c a m ch
ơ ồ ố S đ kh i FSM
7
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
8
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
9
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,
10
"000000" when others;
END BEHAVIOR;
ủ ứ ạ ỏ