ƯỜ Ạ Ọ 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 Ripple­carry 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  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ì đ 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 AND­3 và 1 c ng OR­2 => đ đi dài nh t là 3. T  đó ta có đ ổ công NOT, 3 c ng AND­3 và 3 c ng OR­2. 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 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

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 T­flipflop ,  3 NOT, 3

ố Câu 3: S  ph n t 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á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;

ủ ứ ạ ỏ

­ Mô ph ng ch c năng c a m ch:

11