ƯƠ

B  CÔNG TH

NG

ƯỜ

Ạ Ọ

TR

Ộ NG Đ I H C CÔNG NGHI P HÀ N I

KHOA : ĐI N TỆ Ử

Ạ THI T K  VI M CH TRÊN FPGA

ướ ố Giáo viên h ng d n ẫ :                           T ng Văn Luyên

ễ Sinh viên th c t p ự ậ :                                Nguy n Thanh Tùng

L pớ :                                                       ĐH CNKT DT6­ K6

Hà N i 03/03/2015

M C L C

Hà N i University of Industry                                                                         Faculty of  Electronics

ụ Danh m c hình

3

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

I GI

I THI U

ệ ệ ừ ữ ầ ể Trong nh ng năm g n đây công ngh  đi n t ả    đã và đang phát tri n nh y

ạ ọ v t.   Các   lo i   IC   LSI(   Large   Scale   Integration),   VLSK(Very   Large   Scale

ợ ớ ả ớ ờ ớ ệ Integration) v i kh  năng tích h p t ề   i hàng tri u Transistor đã ra đ i v i nhi u

ứ ệ ử ễ ụ ệ ng d ng khác nhau trong Công ngh  thông tin, Đi n t ự ộ    vi n thông, T  đ ng

ừ ứ ữ ộ ộ ầ ủ hoá... không ng ng đáp  ng các nhu c u c a xã h i .M t trong nh ng công ngh ệ

ớ ượ ệ ố ố ướ ể ờ ấ m i đ ế c ra đ i, có th  thay th  cho các h  th ng s  tr ề   c đây đòi hòi r t nhi u

ế ạ ứ ệ ờ th i   gian   và   chi   phí   cho   nghiên   c u   và   ch   t o,   đó   là   công   ngh   ASIC

ự ẫ ầ ả ẩ   (Application Specific Integrated Circuit). D n đ u trong lĩnh v c này là s n ph m

FPGA (Field Programmable Gate Array và CPLD (Complex Programmable Logic

ử ụ ể ố ặ ể ượ ề Devices). S  d ng FPGA ho c CPLD có th  t i thi u hóa đ ạ   c nhi u công đo n

ế ế ắ ế ượ ầ ữ ự ệ thi t k , l p ráp vì h u h t đ c th c hi n trên máy tính. Các ngôn ng  mô

ứ ư ầ phòng ph n c ng (HDL: Hardware Description Languages) nh  ABEL, VHDL,

ế ế ủ ạ ỏ Verilog, Schematic... cho phép thi ằ   ạ ộ t k  và mô ph ng ho t đ ng c a m ch b ng

ươ ươ ỏ ị ỗ ch ng trình. Các ch ng trình mô ph ng cho phép xác đ nh l i thi ế ế ộ   t k  m t

ự ủ ễ ế ệ ươ ấ ộ cách d  dàng và k t quà th c hi n c a ch ng trình là m t file bít c u hình

ạ ộ ế ạ ể ố (bitstream) đ  n p (download) vào FPGA và CPLD đ  nó ho t đ ng gi ng nh ư

ả ạ ộ ớ ợ ớ m t m ch logic. Các FPGA và CPLD v i kh  năng tích h p cao t ệ   i hàng tri u

ấ ạ ố ư ậ ộ ệ ấ ợ gate và c u trúc m ch t ử   i  u hoá m t đ  tích h p, hi u su t cao cho phép x  lý

ố ệ ấ ượ ậ ượ ứ ộ nhanh s  li u, đ  tin c y và ch t l ễ ử ụ ng cao, d  s  d ng do đó đ ụ   c  ng d ng

ề ạ ạ ệ ấ r t đa d ng trong nhi u lo i thi ế ị ệ ử t b  đi n t hi n nay.

Hà N i University of Industry                                                                         Faculty of  Electronics

ề ậ ớ ỉ ậ ữ ạ Trong báo cáo này em ch  t p trung đ  c p t i khía c nh ngôn ng  mô t ả

ử ụ ứ ữ ầ ớ ệ ề ọ ph n c ng s  d ng ngôn ng  VHDL và gi i thi u v  FPGA h  SPARTAN­3E

ủ c a hãng Xilinx.

ƯƠ

ƯƠ

CH

NG 1: T NG QUAN V  CÁC PH

NG PHÁP

Ế THI T K  VI M CH

ươ ế ế ề 1.1. Các ph ng pháp thi t k  ti n HDL

ươ ế ế 1.1.1. Ph ng pháp thi t k  dùng hàm logic

ệ ế ế ệ ố ế ườ Trong vi c thi ố ẽ ấ t k  các h  th ng s , s  r t khó khăn n u ng i thi ế ế  t k

ứ ơ ả ữ ứ ủ ế ể ề ặ không có nh ng ki n th c c  b n v  đ c đi m và ch c năng c a các ph n t ầ ử

ơ ả ư ư ổ ầ   logic c  b n nh  các c ng logic AND, OR, NOT,… cũng nh  các flip­ flop. H u

ạ ạ ờ ổ ượ ế ế ế h t các m ch logic t o nên nh  các c ng logic và các flip­ flop đ c thi t k  theo

ươ ứ ự ề ề ố ph ng th c truy n th ng d a trên các hàm logic (boolean equations). Nhi u kĩ

ế ế ằ ờ ố ư ươ ề ố ậ thu t thi t k  đã ra đ i nh m t i  u hóa ph ộ   ng pháp truy n th ng này, m t

ể ố ệ ươ ế ế ả trong các công vi c đ  t i ph ng pháp thi ể   t k  dùng hàm logic là gi m thi u

5

ươ ử ụ ả ơ ệ ổ các ph ng trình logic giúp s  d ng các c ng logic và flip­ flop hi u qu  h n.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ươ ế ế Hình 1.1 Ph ng pháp thi t k  dùng hàm logic

ế ế ự ầ ả ế ươ ậ Kĩ thu t thi t k  d a trên các hàm logic yêu c u ph i vi t các ph ng trình

ữ ệ ủ ừ ừ ầ ổ ề   logic cho t ng đ u vào d  li u c a flip­ flop và cho t ng nhóm c ng logic. Đi u

ậ ế ế ẽ ệ ớ ế ế ạ này có nghĩa kĩ thu t thi ả t k  s  không kh  thi v i vi c thi ớ   t k  các m ch l n

ộ ố ượ ậ ả ở ỏ ớ v i hàng trăm các flip­flop b i vì kĩ thu t này đòi h i ph i có m t s  l ng lón

ươ ươ ứ hàng trăm các ph ng trình logic t ng  ng.

ươ ế ế ự ơ ồ 1.1.2. Ph ng pháp thi t k  d a trên s  đ  nguyên lí

ươ ế ế ự ự ợ ơ ồ ủ Ph ng pháp thi t k  d a trên s  đ  nguyên lí có s  tr  giúp c a máy tính

ế ế ệ ố ớ ơ ổ cho phép thi ờ ế ợ t k  các h  th ng l n h n nh  k t h p các c ng logic và flip­ flop

ể ề ấ ạ ạ ở ồ ớ v i các m ch. B i vì các m ch có th  bao g m r t nhi u các flip­ flop cũng nh ư

ạ ế ế ạ ấ ớ ề các m ch khác, đi u này cho phép thi t k  các m ch l n có tính phân c p v i s ớ ố

ứ ề ạ ầ ấ ấ ầ ớ ượ l ng   l n   các   thành   ph n   c u   t o   nên   không   c n   m t   nhi u   công   s c   nh ư

ươ ế ế ướ ph ng pháp thi t k  dùng hàm logic tr c đây.

Hà N i University of Industry                                                                         Faculty of  Electronics

ế ế ạ ơ ồ ự Hình 1.2. Thi t k  m ch d a trên s  đ  nguyên lí

ườ ư ườ ử ụ ươ ở ọ M i ng i  a thích và th ng xuyên s  d ng ph ng pháp này còn b i kh ả

ể ễ ế ế ự ộ ế ế ằ ơ ồ năng bi u di n thi t k  tr c quan sinh đ ng các thi t k  b ng các s  đ  nguyên

ễ ể ề ầ ế ế ế ố ữ lí d  hi u v  các thành ph n thi t k  và k t n i gi a chúng.

Ư ể ượ ể ươ ế ế ố 1.1.3. u đi m, nh ủ c di m c a các ph ng pháp thi ề t k  truy n th ng

ướ ế ế ủ ữ ả ầ ứ ề ố Các b c thi t k  c a ngôn ng  mô t ph n c ng  truy n th ng:

ướ ế ế ủ ươ ế ế ố Hình 1.3  Các b c thi t k  c a ph ng pháp thi ề t k  truy n th ng

ề ệ ố ướ ầ ủ ể ổ B c 1: Thông tin v  h  th ng c n thi ế ượ t đ c chuy n đ i th  công sang

ộ ậ m t t p các hàm logic.

ế ố ướ ủ ể ạ ổ ộ B c 2: Chuy n đ i th  công các hàm luân lí thành m t m ng k t n i các

ơ ồ ổ c ng logic và flip­ flop (s  đ  nguyên lý).

ướ ự ệ ổ ợ B c 3: T ng h p và th c hi n thi ế ế t k

 Ư ể u đi m:

7

ễ ự ệ ­ D  th c hi n.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ự ệ ế ế ớ ạ ừ ầ ử ế ­ Th c hi n thi t k  v i các m ch t vài ph n t ầ    logic đ n vài trăm ph n

ử t logic.

ượ  Nh ể c đi m:

ệ ố ế ố ạ ầ ộ ị ị ­ Xác đ nh h  th ng là m t m ng k t n i các thành ph n. Không xác đ nh

ậ ủ ệ ố ệ ố ứ ể ẽ ớ ặ đ c đi m kĩ thu t c a h  th ng( hành vi/ ch c năng)­ H  th ng s  làm gì v i các

ố ụ ể tình hu ng c  th .

ợ ỡ ớ ệ ố ứ ạ ợ ớ ­ Không phù h p v i các h  th ng tích h p c  l n và ph c t p.

ươ ế ế 1.2. Ph ng pháp thi t k  dùng HDL

ứ ủ ể ư a)  Ch c năng và  u đi m c a HDL

 Ch c năng: ứ

ộ ớ ữ ữ HDL là ngôn ng  thu c l p ngôn ng  máy tính(computer language):

ả ấ ạ ộ  Dùng miêu t ạ ộ  c u trúc và ho t đ ng m t vi m ch.

ạ ộ ể ạ ỏ  Dùng mô ph ng, ki m tra ho t đ ng vi m ch.

ủ ể ễ ạ ấ ờ  Bi u di n hành vi theo th i gian và c u trúc không gian c a m ch.

ự ồ ữ ệ ễ ể ồ ờ ờ  Bao g m nh ng ký hi u bi u di n th i gian và s  đ ng th i (time and

concurrence).

 u đi m:  Ư ể

ạ ỏ ủ ể ạ ổ ừ ả ế ế  Lo i b  công đo n chuy n đ i th  công t mô t thông tin thi t k  thành

ươ các ph ng trình logic

ữ ễ ả ạ ớ  D  qu n lí nh ng m ch l n và ph c t p ứ ạ

ộ ậ ệ  Đ c l p v i công ngh ớ

ử ụ ữ ế ế ẵ  Cho phép tái s  d ng nh ng thi t k  đã có s n

Hà N i University of Industry                                                                         Faculty of  Electronics

ể ượ ổ ợ ừ ặ ả ạ  M ch có th  đ c t ng h p t đ c t

ươ ế ế b)  Ph ng pháp thi t k  dùng HDL

ướ ế ế Hình 1.4. Các b c thi t k  dùng HDL

ượ ử ụ ể ế ế ầ ử HDL   đ c   s d ng   đ   thi t   k   các   ph n   t ậ   logic   l p   trình   đ ượ   c

ừ ế ả ơ (Programable Logic Devices­ PLD) t các PLD đ n gi n đ n CPLD và FPGA

ứ ạ ệ ề ượ ủ ụ ổ ế ấ ph c t p. Hi n nay có nhi u HDL đang đ c s  d ng trong đó ph  bi n nh t là

ậ ớ ữ ệ ề VHDL, Verilog và Abel. Báo cáo này t p trung gi i thi u v  ngôn ng  mô t ả

9

ầ ứ ứ ụ ủ ph n c ng VHDL và  ng d ng c a nó trên FPGA.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ƯƠ

CH

NG 2:           T NG QUAN V  VHDL

ớ ệ ề 2.1. Gi i thi u v  VHDL

ế ắ ủ ụ ừ VHDL là vi t c a c m t t t Very High Speed Intergrated Circuit Hardware

ữ ả ầ ứ ợ ố ạ Description Language ­ ngôn ng  mô t ph n c ng cho các m ch tích h p t c đ ộ

ữ ả ứ ầ ượ ể ấ r t cao. VHDL là ngôn ng  mô t ph n c ng đ c phát tri n dùng cho ch ươ   ng

ủ ộ ố ỹ ụ   trình VHSIC (Very High Speed Intergrated Circuit) c a b  qu c phòng M . M c

ủ ể ệ ượ ữ ộ ả ầ tiêu c a vi c phát tri n VHDL là có đ c m t ngôn ng  mô t ứ  ph n c ng tiêu

ệ ố ử ể ệ ẩ ấ ố ố ơ   chu n và th ng nh t cho phép phát tri n th  nghi m các h  th ng s  nhanh h n

ệ ố ư ư ứ ụ ễ cũng nh  cho phép d  dàng đ a các h  th ng đó vào  ng d ng trong th c t ự ế   .

ượ ữ Ngôn ng  VHDL đ ắ ầ   c ba công ty Intermetics, IBM và Texas Instruments b t đ u

ứ ể ầ ả ượ ố nghiên c u phát tri n vào 7/1983. Phiên b n đ u tiên đ c công b  vào 8/1985.

ượ ề ấ ể ổ ứ ẩ ộ Sau đó VHDL đ c đ  xu t đ  t ch c IEEE xem xét thành m t tiêu chu n. Năm

ư ề ẩ ẩ 1987, đã đ a ra tiêu chu n v  VHDL – tiêu chu n IEEE­1076­1987.

ướ ữ ề ờ ả Tr c khi VHDL ra đ i, có nhi u ngôn ng  mô t ầ ứ  ph n c ng đ ượ ử ụ   c s  d ng

ư ữ ấ ẩ ộ ố ỏ ầ   nh ng không có m t tiêu chu n th ng nh t. Vì các ngôn ng  mô ph ng ph n

ượ ấ ế ị ư ể ặ ứ c ng đó đ c các nhà cung c p thi ắ   t b  phát tri n, nên mang các đ c tr ng g n

ế ị ủ ộ ở ữ ủ ấ ấ ớ v i các thi t b  c a nhà cung c p đó và thu c s  h u c a nhà cung c p.

Hà N i University of Industry                                                                         Faculty of  Electronics

ượ ữ ộ ậ ư ộ ể Trong khi đó, VHDL đ ắ   c phát tri n nh  m t ngôn ng  đ c l p không g n

ươ ế ế ộ ệ ầ ỏ ớ ấ ỳ ộ v i b t k  m t ph ng pháp thi ứ   t k , b  mô ph ng hay công ngh  ph n c ng

ườ ế ế ể ự ự ệ ọ ươ nào. Ng i thi t k  có th  t do l a ch n công ngh , ph ng pháp thi ế ế  t k

ẫ ử ụ ữ ấ ộ trong khi v n s  d ng m t ngôn ng  duy nh t.

ộ ố ư ữ ể ẳ ơ ả ầ ứ VHDL có m t s   u đi m h n h n các ngôn ng  mô t ph n c ng khác là:

(cid:0) ộ ượ ể ướ ự ả ợ ủ VHDL đ c phát tri n d i s  b o tr c a chính ph ủ Tính công c ng:

ẩ ủ ệ ộ ỹ ộ ở ữ ủ ấ   M  và hi n nay là m t tiêu chu n c a IEEE, VHDL không thu c s  h u c a b t

ổ ứ ượ ỗ ợ ủ ả ỳ k  cá nhân hay t ch c nào. Do đó VHDL đ ấ   ề c h  tr  c a nhi u nhà s n xu t

ế ị ư ụ ề ấ ế ế ệ ố ỏ thi t b  cũng nh  nhi u nhà cung c p công c  thi t k  mô ph ng h  th ng. Ðây

ổ ậ ủ ổ ế ộ ư ể ở là m t  u đi m n i b t c a VHDL, giúp VHDL tr  nên ngày càng ph  bi n.

(cid:0) ỗ ợ ề ệ ả ươ ế ế   VHDL Kh  năng h  tr  nhi u công ngh  và ph ng pháp thi t k :

ế ế ằ ề ươ ư ươ cho phép thi t k  b ng nhi u ph ng pháp nh  ph ng pháp thi ế ế ừ t k  t trên

ố ư ệ ư ậ ự xu ng, hay t ừ ướ  d ể ụ   ẵ i lên d a vào các th  vi n có s n. Nh  v y VHDL có th  ph c

ụ ề ế ế ừ ệ ế ế ầ ử ụ ố v  t t cho nhi u m c đích thi t k  khác nhau, t vi c thi t k  các ph n t ph ổ

ế ế ệ ế ế ứ ụ ặ ệ bi n đ n vi c thi t k  các IC  ng d ng đ c bi t (Application Specified IC).

(cid:0) ộ ậ ớ ộ ậ ớ ệ ế ạ   ệ  VHDL hoàn toàn đ c l p v i công ngh  ch  t o Ð c l p v i công ngh :

ầ ứ ộ ả ệ ố ế ế ở ứ ổ ph n c ng. M t mô t h  th ng dùng VHDL thi m c c ng có th  đ t k ể ượ   c

ả ổ ể ệ ạ ợ ộ ỳ chuy n thành các b n t ng h p m ch khác nhau tu  thu c vào công ngh  ch ế

ượ ử ụ ầ ứ ạ t o ph n c ng nào đ c s  d ng (dùng CMOS, nMOS, hay GaAs). Ðây cũng là

ộ ư ể ọ ườ ế ế ầ ủ m t  u đi m quan tr ng c a VHDL nó cho phép ng i thi t k  không c n quan

ứ ế ầ ế ế ệ ố ộ ệ tâm đ n công ngh  ph n c ng khi thi ư ế t k  h  th ng, nh  th  khi có m t công

ế ạ ể ượ ứ ệ ầ ớ ờ ụ ngh  ch  t o ph n c ng m i ra đ i nó có th  đ c áp d ng ngay cho các h ệ

ố th ng đã thi ế ế t k .

(cid:0) ả ả ạ ộ ủ ầ    ho t đ ng c a ph n Kh  năng mô t ả ở ộ : VHDL cho phép mô t m  r ng

ừ ứ ệ ố ứ ổ ố ộ ả ứ c ng t ế  m c h  th ng s ( h p đen) cho đ n m c c ng. VHDL có kh  năng mô

ủ ệ ố ỉ ử ụ ạ ộ ư ề ộ ả t ặ   ứ  ho t đ ng c a h  th ng trên nhi u m c nh ng ch  s  d ng m t cú pháp ch t

ẽ ố ộ ả ứ ể ấ ọ ỏ ế ế ư ế ch  th ng nh t cho m i m c. Nh  th  ta có th  mô ph ng m t b n thi t k  bao

ệ ả ượ ả ở ứ ệ ượ ả ế ồ g m c  các h  con đ c mô t m c cao và các h  con đ c mô t chi ti t.

(cid:0) ổ ế ả ẩ ượ ộ ấ ả  Vì VHDL là m t tiêu chu n đ ậ   c ch p nh n, Kh  năng trao đ i k t qu :

ọ ộ ứ ể ộ ỏ ượ ạ nên m t mô hình VHDL có th  ch y trên m i b  mô ph ng đáp  ng đ c tiêu   11

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ế ả ẩ ả ệ ố ể ượ ữ ổ chu n VHDL và các k t qu  mô t h  th ng có th  đ c trao đ i gi a các nhà

ế ế ử ụ ụ ế ế ư ẩ thi t k  s  d ng công c  thi t k  khác nhau nh ng cùng tuân theo chu n VHDL.

ơ ữ ế ế ể ổ ả ứ ệ ố ủ ộ H n n a, m t nhóm thi t k  có th  trao đ i mô t m c cao c a các h  th ng con

ộ ệ ố ệ ượ ế ế ộ ậ trong m t h  th ng; trong khi các h  con đó đ c thi t k  đ c l p.

(cid:0) ỗ ợ ả ế ế ứ ớ ử ụ ả ạ Kh  năng h  tr  thi t k  m c l n và kh  năng s  d ng l i các thi ế   t

ượ ư ộ ể ậ ậ ữ ậ c phát tri n nh  m t ngôn ng  l p trình b c cao, vì v y nó có th ể k : ế VHDL đ

ể ế ế ộ ệ ố ớ ự ủ ớ ộ ử ụ s  d ng đ  thi ề   t k  m t h  th ng l n v i s  tham gia c a m t nhóm nhi u

ườ ỗ ợ ệ ữ ề ng i. Bên trong ngôn ng  VHDL có nhi u tính năng h  tr ả  vi c qu n lý, th ử

ệ ẻ ế ế ạ ầ ẵ nghi m và chia s  thi t k . VHDL cũng cho phép dùng l i các ph n đã có s n.

ơ ả ủ ấ 2.2. C u trúc c  b n c a VHDL

ầ ả ứ ả ơ ả ầ Trong   ph n   này, chúng ta mô t ạ    các ph n c    b n có ch a c  các đo n

ỏ ủ code  nh  c a VHDL:  các khai  báo LIBRARY, ENTITY và  ARCHITECTURE.

ẩ ủ ộ ọ ồ ố ụ ể M t đ an Code chu n c a VHDL g m t i thi u 3 m c sau:

ủ ấ ả ứ ư ệ ộ ? Khai báo LIBRARY: ch a m t danh sách c a t t c  các th   vi n đ ượ   c

ế ế ụ ử ụ s  d ng trong thi t k . Ví  d : ieee, std, work, …

ả ủ ạ ? ENTITY: Mô  t các chân vào ra (I/O pins) c a m ch.

ứ ả ạ ẽ ọ ư ộ ? ARCHITECTURE: ch a mã VHDL, mô t m ch s  h at đ ng nh   th ế

ộ ậ ộ ọ ườ ượ ử ụ ệ nào. M t LIBRARY là m t t p các đ an Code th ng đ c s   d ng. Vi c có

ư ệ ư ậ ộ ượ ượ m t th  vi n nh  v y cho phép chúng đ ử ụ c tái s  d ng và đ ẻ c chia s  cho các

ứ ụ ườ ượ ế ủ ạ ị ng   d ng   khác. Mã th ng đ c vi t theo các đ nh d ng c a   FUNCTIONS,

ượ ế ặ PROCEDURES, ho c COMPONENTS, đ c thay th  bên trong PACKAGES và

ượ ị ư ệ sau đó đ c d ch thành th   vi n đích.

Hà N i University of Industry                                                                         Faculty of  Electronics

ạ ộ ầ ơ ả ủ Hình 2.1: Các thành ph n c  b n c a m t đo n mã VHDL

2.2.1. Khai báo Library

ứ ể ầ ấ ứ   Đ   khai  báo  Library, chúng  ta c n  hai dòng mã  sau, dòng th  nh t ch a

ề ầ ử ụ ư ế ệ ệ ộ ứ tên th   vi n, dòng ti p theo ch a m t m nh đ  c n s  d ng:

LIBRARY library_name;

USE library_name.package_name.package_parts;

ườ ừ ư ệ ờ ượ ử ụ Thông th ng có 3 gói, t 3 th  vi n khác nhau thu ng đ c s  d ng trong

ế ế thi t k :

? ieee.std_logic_1164 (from the ieee library),

? standard (from the std library),

? work (work library).

ầ ơ ả ủ ộ Hình 2.2: Các ph n c  b n c a m t Library

ư Các khai báo nh  sau:

LIBRARY ieee;

13

USE ieee.std_logic_1164.all;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

LIBRARY std;

USE std.standard.all;

LIBRARY work;

USE work.all;

ư ệ ườ ặ ầ ị Các th  vi n std và work th ế ng là m c đ nh, vì th  không c n khai báo

ả ượ ư ầ ỉ ế ệ chúng, ch  có  th   vi n ieee là  c n ph i đ c vi t rõ ra.

ư ệ ủ ụ ượ ể ở ư M c đích c a 3 gói/th  vi n đ c k trên là nh   sau: gói std_logic_1164

ư ế ư ệ ộ ệ ứ ộ ệ ủ c a th   vi n ieee cho bi t m t h  logic đa m c; std là m t th  vi n tài nguyên

ữ ệ ể ườ ế ế ư ệ (ki u d  ki u, i/o text..) cho môi tr ng thi t k  VHDL và th  vi n work đ ượ   c

ư ế ế ượ ạ ở ươ ủ ụ s  d ng khi chúng ta l u thi t k  ( file .vhd, các file đ c t o b i ch ng trình

ươ ỏ ị d ch và ch ng trình mô ph ng…) .

2.2.2. Khai báo Entity

ộ ộ ả ủ M t ENTITY là m t danh sách mô t ạ    các chân vào/ra ( các PORT) c a m ch

đi n. ệ

ư Cú pháp nh  sau:

ENTITY entity_name IS PORT (

port_name : signal_mode signal_type;

port_name : signal_mode signal_type;

...);

END entity_name;

ế ộ ủ ể ệ ặ   Ch  đ  c a tín hi u ( mode of the signal) có th  là IN, OUT, INOUT ho c

ể ấ ụ ỉ ộ   BUFFER. Ví d  trong hình 2.3 ta có th  th y rõ các chân IN, OUT ch  có m t

Hà N i University of Industry                                                                         Faculty of  Electronics

ề ề ặ ạ ệ chi u (vào ho c ra) trong khi INOUT là 2 chi u và BUFFER l i khác, tín hi u ra

ả ượ ử ụ ừ ữ ệ ph i đ c s  d ng t d  li u bên trong.

ủ ể ệ ể Ki u   c a   tín   hi u   (   type   of   the   signal)   có   th   là   BIT,   STD_   LOGIC,

INTEGER, …

ấ ỳ ể ấ ủ ự ể ộ ọ Tên c a th c th  ( name of the entity) có th  l y m t tên b t k , ng ai tr ừ

ủ các tù khóa c a VHDL.

ụ ở ư ổ Ví d : Xét c ng NAND hình 2.4, khai báo ENTITY nh  sau:

ENTITY nand_gate IS PORT (

a, b : IN BIT;

x : OUT BIT);

END nand_gate;

ế ộ ệ ổ Hình 2.3. Các ch  đ  tín hi u Hình 2.4. C ng NAND

ể ế 2.2.3. Các ki u ki n trúc (Achitecture)

ộ ả ạ ệ ế ẽ ể ạ ARCHITECTURE là m t mô t m ch dùng đ  quy t m ch s  làm vi c nh ư

ứ ế th  nào ( có ch c năng gì).

ư Cú pháp nh  sau:

ARCHITECTURE architecture_name OF entity_name IS [declarations]

BEGIN

(code)

END architecture_name;

ư ấ ở ộ ấ ứ ầ ầ Nh  th y ơ    trên, m t c u trúc có 2 ph n: ph n khai báo ( ch c năng), n i

ệ ằ ượ ầ ừ ố các tín hi u và các h ng đ c khai báo, và ph n mã (code ­ t ở  BEGIN tr  xu ng).

ở ạ ổ ụ ủ Ví d : Xét tr  l i c ng NAND c a hình 2.4

ARCHITECTURE mach OF nand_gate IS BEGIN

x <= a NAND b;

15

END mach;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ủ ư ự ệ ạ ả Ý nghĩa c a ARCHITECTURE trên là nh  sau: m ch ph i th c hi n công

ệ ệ ế ả vi c NAND 2 tín hi u vào (a,b) và gán (<=) k t qu  cho chân ra x.

ể ề ự ế ấ ỗ ộ ớ ộ ả M i m t khai báo th c th  đ u ph i đi kèm v i ít nh t m t ki n trúc t ươ   ng

ứ ự ể ầ ạ ộ ơ ộ ế ng. VHDL cho phép t o ra h n m t ki n trúc cho m t th c th . Ph n khai báo

ầ ử ế ể ề ệ ồ ki n trúc có th  bao g m các khai báo v  các tín hi u bên trong, các ph n t bên

ệ ố ủ ụ ả ạ ộ trong h  th ng, hay các hàm và th  t c mô t ủ   ủ ệ ố  ho t đ ng c a h  th ng. Tên c a

ế ượ ặ ườ ử ụ ả ế ki n trúc là nhãn đ ỳ c đ t tu  theo ng i s  d ng. Có hai cách mô t ki n trúc

ầ ử ạ ộ ệ ố ặ ộ ủ c a m t ph n t ( ho c h  th ng) đó là mô hình ho t đ ng (Behaviour) hay mô

ộ ệ ố ể ấ ồ ả t theo mô hình c u trúc (Structure). Tuy nhiên m t h  th ng có th  bao g m c ả

ả ạ ộ ả ấ mô t theo mô hình ho t đ ng và mô t theo mô hình c u trúc.

ả ế ạ ộ +  Mô t ki n trúc theo mô hình ho t đ ng:

ạ ộ ả ệ ố ạ ộ ủ Mô hình ho t đ ng mô t ứ   ệ ố  các ho t đ ng c a h  th ng (h  th ng đáp  ng

ư ế ư ệ ế ầ ả ướ ạ ớ v i các tín hi u vào nh  th  nào và đ a ra k t qu  gì ra đ u ra) d i d ng các

ữ ậ ể ấ ậ ấ c u trúc ngôn ng  l p trình b c cao. C u trúc đó có th  là PROCESS , WAIT, IF,

CASE, FOR­LOOP…

Ví d :ụ

ARCHITECTURE behavior OF nand IS

ệ ­­ Khai báo các tín hi u bên trong và các bí danh

BEGIN

c <= NOT(a AND b);

END behavior;

ả ế ấ + Mô t ki n trúc theo mô hình c u trúc:

Hà N i University of Industry                                                                         Faculty of  Electronics                                              ộ ấ

ầ ử ệ ố ủ ể ặ ồ Mô hình c u trúc c a m t ph n t ề    (ho c h  th ng) có th  bao g m nhi u

ắ ầ ừ ộ ổ ự ế ấ ơ ả ấ c p c u trúc b t đ u t ả  m t c ng logic đ n gi n đ n xây d ng mô t ộ    cho m t

ấ ủ ự ệ ệ ả ệ ố h  th ng hoàn thi n. Th c ch t c a vi c mô t ấ  theo mô hình c u trúc là mô t ả

ầ ử ự ế ố ủ ệ ố ầ ử các ph n t con bên trong h  th ng và s  k t n i c a các ph n t con đó.

ả Mô t cú pháp:

architecture identifier of entity_name is

Architecture_declarative_part

begin

all_concurrent_statements

end

[architecture][architecture_simple_name];

Khai báo các thành ph n:ầ

Component

Tên_componemt port [ danh sách ];

End component;

ư ớ ụ ả ấ ồ ộ Nh   v i ví d   mô t ổ     mô hình c u  trúc  m t  flip­flop RS g m  hai  c ng

ể ả ổ ượ ị ươ ự ư NAND có th  mô t c ng NAND đ c đ nh nghĩa t ng t ụ ớ ổ    nh  ví d  v i c ng

ả ơ ồ ế ố ầ ử ạ ơ NOT, sau đó mô t s  đ  k t n i các ph n t NAND t o thành trig  RS.

Ví d :ụ

ơ ồ ủ Hình 2.5.  S  đ  c a trigo RS

ENTITY rsff IS

PORT(

r : IN std_logic;

s : IN std_logic;

q : OUT std_logic;

17

qb : OUT std_logic);

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

END rsff;

ARCHITECTURE kien_truc OF rsff IS

ỗ ị COMPONENT nand ­­ đ nh nghĩa c ng nand

GENERIC(delay : time);

PORT(

a : IN std_logic;

b : IN std_logic;

c : OUT std_logic);

END COMPONENT;

BEGIN

ầ ặ u1: nand ­­ cài đ t u1 là thành ph n nand

ể ổ ị GENERIC MAP(5 ns) ­­ giá tr  delay có th  thay đ i values

ầ ồ ả PORT MAP(s, qb, q); ­­ b n đ  I/O cho thành ph n

ế ậ ầ u2: nand  ­­ thi t l p u2 là thành ph n nand GENERIC MAP(5 ns)

PORT MAP(q, r, qb);

END kien_truc;

ả ế ổ ợ + Mô t ki n trúc theo mô hình t ng h p:

ế ợ ủ Đó là mô hình k t h p c a 2 mô hình trên.

Ví d :ụ

Entity adder is

Port (

A,B,Ci : bit

S, Cout : bit);

End adder;

Hà N i University of Industry                                                                         Faculty of  Electronics

Architecture arc_mixed ofadder is

Component Xor2

Port(

P1, P2 : in bit;

PZ : out bit);

End compenent;

Signal S1 :bit;

Begin

X1 : Xor2 port map(A,B,S1);

Process (A,B,Cin)

Variable T1,T2,T3 : bit;

Begin

T1 := A and B;

T2 :=B and Cin ;

T3 :=A and Cin;

Cout :=T1 or T2or T3 ;

End process;

End arc_mixed ;

ể ữ ệ 2.3. Các ki u d  li u

ể 2.3.1. Các ki u con (Subtypes).

ể ữ ệ ệ ể ề ộ ữ ệ Ki u d   li u con   là m t  ki u  d   li u   đi   kèm  theo   đi u   ki n   ràng

ữ ệ ử ụ ể ệ ể ộ ị bu c. Lý do chính  cho  vi c  s   d ng  ki u  d   li u   con  đ   sau  đó  đ nh  ra

ữ ệ ữ ệ ữ ể ể ớ ộ m t  ki u  d  li u m i  đó  là, các  thao  tác   gi a  các  ki u  d   li u  khác   nhau

ượ ỉ ượ ườ ộ ợ không  đ c cho phép, chúng ch  đ c cho phép trong tr ể   ữ ng h p gi a m t ki u

ể ơ ở ươ ứ ớ con và ki u c  s  t ng  ng v i nó.

ụ ể ậ ượ ể ữ ệ ượ ữ ệ Ví  d  1:  Ki u  d   li u  sau  đây  nh n  đ c các ki u d   li u  đ c  gi ớ   i

ụ ầ ệ ướ thi u trong các ví d  ph n tr c.

SUBTYPE  natural  IS INTEGER RANGE 0 TOINTEGER'HIGH;

ể ậ ­­ NA TURALis a ki u con (t p con) of INTEGER.

19

SUBTYPE my_logic IS STD_LOGIC RANGE '0' TO'Z';

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ọ ạ ­­ G i l i STD_LOGIC=('X','0','1','Z','W','L','H','­').

­­ Do đó, my_logic=('0','1','Z').

SUBTYPE my_color IS color RANGE red TO blue;

­­ khi color=(red, green, blue, white)

­­ my_color=(red, green, blue).

SUBTYPE small_integer IS INTEGER RANGE ­32 TO32;

ộ ậ ủ ­­ M t t p con c a INTEGER.

2.3.2. M ngả

ả a) M ng (Arrays)

ộ ậ ố ượ ả ợ ể ể M ng là m t t p h p các đ i t ộ   ng có cùng ki u. Chúng có th  là m t

ủ ề ề ề ộ ọ ộ ề chi u (1D), 2 chi u (2D) h ăc m t chi u c a m t chi u (1D x 1D) và cũng có

ể ướ ơ ữ th  có nh ng kích th c cao h n.

ữ ệ ị ơ ự ệ ả ọ ộ ộ Hình 2.7 minh h a vi c xây d ng m t m ng d  li u. M t giá tr  đ n ( vô

ượ ở ả ộ ở ộ ướ h ng đ ỉ c ch  ra (a), m t vector ( m ng 1D) ả  (b) và m t m ng các vector

ả ở ủ ư ả ( m ng 1Dx1D) ả  (c) và m ng c a m ng 2D nh  trong (d).

ọ Hình 2.6. Minh h a scalar (a), 1D (b), 1Dx1D (c), và 2D (d)

ể ấ ư ề ị ướ ả Nh  có th  th y, không h  có đ nh nghĩa tr ặ c m ng 2D ho c 1Dx1D, mà

ế ả ượ ầ ở ỉ ị ườ ư ậ ể ộ ầ khi c n thi t, c n ph i đ c ch  đ nh b i ng ể   i dùng. Đ  làm nh  v y, m t ki u

ả ượ ầ ớ ệ ầ ớ ị m i (new TYPE) c n ph i đ c đ nh nghĩa đ u tiên, sau đó là tín hi u m i (new

Hà N i University of Industry                                                                         Faculty of  Electronics                                              ọ

ể ượ SIGNAL), new VARIABLE h ăc CONSTANT có th  đ ử ụ   c khai báo s  d ng

ể ữ ệ ướ ẽ ượ ki u d  li u đó. Cú pháp d i đây s  đ c dùng:

ể ỉ ể ả ộ ớ ị Đ  ch  đ nh m t ki u m ng m i:

TYPE type_name IS ARRAY (specification) OF data_type;

ể ạ ử ụ ể ả ớ Đ  t o s  d ng ki u m ng m i:

SIGNAL signal_name: type_name [:= initial_ value];

ở ộ ượ Trong cú pháp trên, m t SIGNAL đ c khai báo. Tuy nhiên nó cũng có th ể

ở ạ ặ ộ ộ ọ ị là m t CONSTANT ho c m t VARIABLE. Giá tr  kh i t o tùy ch n.

ả ổ b) M ng c ng ( Port Array).

ư ế ữ ệ ượ ị ướ Nh  chúng ta đã bi ể t, không có ki u d  li u đ c đ nh nghĩa tr c nào có

ủ ề ể ặ ộ ặ ơ h n m t chi u. Tuy nhiên, trong các đ c đi m c a các chân vào ho c ra (các

ủ ệ ạ ộ ượ ự PORT) c a m t m ch đi n ( mà đ c xây d ng thành ENTITY), chúng ta có th ể

ả ầ ư ả ị ph i c n đ nh rõ các PORT nh  là m ng các VECTOR.

ượ ộ ả Khi các khai báo TYPE không đ c cho phép trong m t ENTITY, gi i pháp

ể ữ ệ ườ ộ ị ể đ  khai báo ki u d  li u ng i dùng đ nh nghĩa trong m t PACKAGE, mà có th ể

ế ộ ậ nh n bi t toàn b  thi ế ế t k .

ụ ư ộ M t ví d  nh  sau:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

PACKAGE my_data_types IS

TYPE   vector_array   IS   ARRAY   (NATURAL   RANGE   <>)   OF

STD_LOGIC_VECTOR(7 DOWNTO 0);

END my_data_types;

­­­­­­­ Main code: ­­­­­­­­­­­­­­­­­­­­­­­­­

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work.my_data_types.all; ­­ user­defined package

ENTITY mux IS

PORT (inp: IN VECTOR_ARRAY (0 TO 3);

21

... );

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

END mux;

... ;

ể ấ ữ ệ ụ ể ộ ườ Có th  th y trong ví d  trên, m t ki u d  li u ng ị i dùng đ nh nghĩa đ ượ   c

ượ ạ ể ứ ộ ố ị ọ g i là vector_array, đã đ c t o ra, mà nó có th  ch a m t s  không xác đ nh các

ữ ệ ể ỗ ượ ư ữ ộ ứ vector, m i vector ch a 8 bit. Ki u d  li u đ c l u gi trong m t PACKAGE

ượ ử ụ ể ộ ị ọ g i là my_data_types, và sau đó đ c s  d ng trong m t ENTITY đ  xác đ nh

ộ ượ ọ ả ộ ệ ạ ồ m t PORT đ c g i. Chú ý trong đo n mã chính bao g m thêm c  m t m nh đ ề

ể ự ệ ườ ể ấ ị USE đ  th c hi n gói ng i dùng đ nh nghĩa my_data_types có th  th y trong

thi ế ế t k .

ứ ở ẽ ượ ướ ơ Ch c năng khác cho PACKAGE trên s  đ c trình bày d i đây, n i mà

có khai báo CONSTANT:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

PACKAGE my_data_types IS CONSTANT b: INTEGER := 7;

TYPE   vector_array   IS   ARRAY   (NATURAL   RANGE   <>)   OF

STD_LOGIC_VECTOR(b DOWNTO 0);

END my_data_types;

ể ả 2.3.3. Ki u b n ghi (Records)

ả ươ ự ư ứ ể ả ằ ớ B n  ghi  t ng  t ố     nh   m ng, v i đi m khác r ng chúng ch a các đ i

ể ữ ệ ượ t ng có ki u d  li u khác nhau.

Ví d :ụ

TYPE birthday IS RECORD

day: INTEGER RANGE 1 TO 31;

Hà N i University of Industry                                                                         Faculty of  Electronics

month: month_name;

END RECORD;

ể ữ ệ ấ ấ 2.3.4. Ki u d  li u có d u và không d u ( Signed and Unsigned)

ề ậ ư ướ ữ ệ ượ ị Nh  đã đ  c p tr ể c  đây, các ki u d  li u này đ c đ nh nghĩa trong  gói

ủ ư ủ ệ ượ ọ std_logic_arith  c a  th   vi n  ieee.  Cú  pháp c a chúng đ c  minh  h a  trong

ụ ướ ví d  d i đây:

Ví d  1:ụ

SIGNAL x: SIGNED (16 DOWNTO 0);

SIGNAL y: UNSIGNED (0 TO 8);

ư ủ ằ ươ ự L u     ý     r ng       cú     pháp       c a     chúng     t ng       t ớ       v i

ư ố STD_LOGIC_VECTOR, không  gi ng  nh  INTEGER.

ộ ố ộ ị ờ ỏ ơ M t  giá  tr  UNSIGNED  là  m t  s  không  bao gi ụ    nh  h n  zero.  Ví  d ,

ư ể ễ ế ậ ố ể   “0101”     bi u   di n   s   th p   phân   5,   trong   khi   “1101”   là   13.   Nh ng   n u   ki u

ượ ử ụ ể ị ươ ặ ị SIGNED đ c  s    d ng  thay  vào, giá tr   có th   là d ng ho c âm ( theo đ nh

ễ ố ẽ ể ể ẫ ạ d ng bù 2). Do đó, “0101” v n bi u di n s  5, trong khi “1 101” s  bi u di n s ễ ố

­3.

ể ữ ệ ể ử ụ ặ Đ  s  d ng ki u d   li u  SIGNED  ho c  UNSIGNED,  gói std_logic_arith

ư ệ ả ượ ủ ấ ấ ủ c a   th   vi n  ieee, ph i  đ c khai  báo.  B t   ch p  cú   pháp   c a chúng,

ả ủ ế ữ ệ ố ớ ể ệ ki u  d   li u  SIGNED  và UNSIGNED có  hi u qu  ch  y u  đ i v i  các phép

ố ọ ượ ớ toán  s    h c,   nghĩa   là,  ng ấ   c  v i  STD_LOGIC_VECTOR,  chúng  ch p

ố ọ Ở ộ ạ ậ nh n  các  phép toán  s  h c. m t  khía  c nh  khác,  các  phép  toán   logic thì

ượ không đ c phép.

ổ ữ ệ ể 2.3.5. Chuy n đ i d  li u

ố ọ ự ế VHDL không  cho  phép  các  phép  toán  tr c  ti p ( s   h c, logic,…)  tác

ữ ệ ể ườ ế ố ớ ộ đ ng lên các d  li u khác ki u nhau. Do đó,th ấ ầ ng là r t c n thi ệ   t đ i v i vi c

ữ ệ ể ổ ừ ể ể ề ộ ộ chuy n  đ i  d   li u  t m t ki u này sang m t ki u khác. Đi u này  có  th ể

ơ ả ự ệ ặ ế ộ t  m t ít code  cho cượ  th c hi n  trong hai cách c   b n:  ho c chúng  ta vi đ

ề ặ ọ ộ ừ ộ ượ ị đi u  đó, ho c chúng ta  g i m t FUNCTION t m t gói đ c đ nh nghĩa tr ướ   c

23

ự ệ ế ổ mà  nó cho phép th c hi n các phép bi n đ i cho ta.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ữ ệ ế ượ ể ệ ạ N u d  li u đ c quan h  đóng  ( nghĩa  là 2 toán  h ng  có cùng ki u  c ơ

ấ ấ ượ ể ớ ề ộ ở s ,     b t ch p  đang đ c khai báo thu c v  hai ki u l p   khác   nhau),   thì

ổ ễ ự ư ệ ủ ệ ể ấ std_logic_1164 c a th  vi n ieee cung c p các hàm chuy n đ i d  th c hi n.

ợ ệ ụ ợ ệ ố ớ ậ Ví d : các phép toán h p l và không h p l đ i v i các t p con

TYPE long IS INTEGER RANGE ­15 TO 15;

TYPE short IS INTEGER RANGE ­9 TO 9;

SIGNAL x : short;

SIGNAL y : long;

...

ỗ ợ y <= 3*x + 9;  ­­ l ể i, không phù h p ki u

ả ượ ế ể ể ổ y <= long(3*x + 9);  ­­ OK, k t qu  đ c chuy n đ i thành ki u long

ử 2.4. Toán t ộ  và thu c tính

2.4.1. Toán tử

ộ ố ử ấ VHDL cung c p m t s  toán t sau:

ử  Toán t gán.

ử  Toán t logic.

ử ọ  Toán t toán h c.

ử  Toán t so sánh.

ử ị  Toán t d ch.

ộ 2.4.2. Thu c tính

ữ ệ ộ a) Thu c tính d  li u

ấ ộ VHDL cung c p các thu c tính sau.

ỉ ố ả ấ ủ ả ề ị ỏ ‟ d LOW Tr  v  giá tr  nh  nh t c a ch  s  m ng.

Hà N i University of Industry                                                                         Faculty of  Electronics

ả ề ỉ ố ớ ấ ủ ả ‟ d HIGH Tr  v  ch  s  l n nh t c a m ng.

ả ề ỉ ố ấ ủ ả ‟ d LEFT Tr  v  ch  s  bên trái nh t c a m ng.

ả ề ỉ ố ấ ủ ả ả ‟ d RIGHT Tr  v  ch  s  bên ph i nh t c a m ng.

ả ề ướ ủ ả ‟ d LENGTH Tr  v  kích th c c a m ng.

ứ ỉ ố ả ề ả ‟ d RANGE Tr  v  m ng ch a ch  s .

ả ề ả ỉ ố ượ ả ứ ượ ‟ d REVERSE_RANGE Tr  v  m ng ch a ch  s  đ c đ o ng c.

ộ ệ b) Thu c tính tín hi u

ỉ ượ ạ ộ ố ớ ữ ệ ụ ế Các thu c tính lo i này ch  đ c áp d ng đ i v i d  li u SIGNAL. N u s là

ộ m t SIGNAL thì ta có :

ộ ự ệ ố ớ ả ề ả ‟ s EVENT : Tr  v  true khi m t s  ki n x y ra đ i v i s.

ự ệ ố ớ ả ề ế ả ‟ s STABLE: Tr  v  true n u không có s  ki n nào x y ra đ i v i s.

ả ề ‟ s ACTIVE: Tr  v  true khi s = 1.

ả ề ả ờ ‟ s QUIET

ệ ả ki n nào x y ra.

ả ề ờ ể ừ ự ệ ố ‟ s LAST_EVENT: Tr  v  th i gian trôi qua k  t s  ki n cu i cùng .

ả ề ớ ể ừ ầ ố ‟ s LAST_ ACTIVE: Tr  v  th i gian k  t l n cu i cùng s = 1

ả ề ị ủ ướ ự ệ ướ ‟ s LAST_ VALUE: Tr  v  giá tr  c a s tr c s  ki n tr c đó.

ộ ộ ‟ ượ ấ Trong các thu c tính trên thì thu c tính s EVENT là hay đ c dùng nh t.

ụ ệ ồ ồ ụ ớ Ví d : Đây là ví d  v i tín hi u đ ng h .

IF (clk'EVENT AND clk='1')...

IF (NOT clk'STABLE AND clk='1')...

WAIT UNTIL (clk'EVENT AND clk='1');

IF RISING_EDGE(clk)...

ộ ượ ị ở ườ 2.4.3. Thu c tính đ c đ nh nghĩa b i ng i dùng.

ệ ẵ ấ ộ VHDL, ngoài vi c cung c p các thu c tính có s n nó còn cho phép ng ườ   i

ự ị ố ử ụ ầ ộ dùng t ả   ộ  đ nh nghĩa các thu c tính. Các thu c tính này mu n s  d ng c n ph i

ả ấ khai báo và mô t rõ ràng theo c u trúc sau:

ATTRIBUTE :< attribute_type>;

ATTRIBUTE  OF< target_name>: 

25

IS ;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

Trong đó

ể ữ ệ +attribute_type là ki u d  li u.

+Class : SIGNAL, TYPE, FUNCTION.

Ví d  :ụ

ATTRIBUTE number_of_inputs: INTEGER;

ATTRIBUTE number_of_inputs OF nand3: SIGNAL IS 3;

2.4.4. GENERIC.

ư ạ ộ ố ố ế   GENERIC là m t cách t o các tham s  dùng chung ( gi ng nh  các bi n

ữ ậ ụ ể ề ạ ẻ   static trong các ngôn ng  l p trình). M c đích là đ  cho các đo n code m m d o

ạ ơ ễ ử ụ và d  s  d ng l i h n.

ạ ộ ượ ử ụ ả ượ ả M t   đo n   GENERIC   khi   đ c   s ầ   d ng   c n   ph i   đ c   mô   t trong

ả ượ ố ư ấ ỉ ENTITY. Các tham s  ph i đ c ch  rõ. C u trúc nh  sau:

GENERIC (parameter_name : parameter_type := parameter_value);

Ví d : ụ

ENTITY my_entity IS  GENERIC

(n : INTEGER := 8);

PORT (...);

END my_entity;

ARCHITECTURE my_architecture OF my_entity IS

...

END my_architecture;

ể ề ơ ố ượ ả ộ Có th  có nhi u h n 1 tham s  GENERIC đ c mô t trong m t ENTITY.

Ví d :ụ

GENERIC (n: INTEGER := 8; vector: BIT_VECTOR := "00001111");

Hà N i University of Industry                                                                         Faculty of  Electronics

2.5. Mã song song

ự ầ ệ ữ ạ ổ ợ ạ ẽ Đ u tiên chúng ta s  xem xét s  khác bi t gi a m ch t h p và m ch dãy

ự ẽ ệ ầ ự ữ ồ sau đó s  xem sét s  khác bi t gi a mã ngu n tu n t và mã song song.

2.5.1. Song song và tu n t ầ ự .

ổ ợ ạ ạ a) M ch t h p và m ch dãy

ổ ợ ủ ụ ầ ầ ạ ạ ộ ỉ ạ M ch t ủ    h p là m ch mà đ u ra c a m ch ch  ph  thu c vào đ u vào c  a

ệ ạ ờ ừ ệ ầ ấ ớ ộ ệ ạ h  t ể i th i đi m hi n t i. T  đó ta th y, h  này không c n yêu câu b  nh  và

ượ ạ ỉ ừ ơ ả ổ chúng đ c t o thành ch  t các c ng logic c  b n.

ả ầ ủ ụ ầ ạ ạ ạ ộ M ch dãy là m ch mà đ u ra c a m ch còn ph  thu c vào c  đ u vào trong

ố ớ ệ ứ ủ ừ ấ ầ ả ạ ớ ộ ộ   quá kh  c a m ch. T  đó ta th y đ i v i h  này c n ph i có b  nh  và m t

ả ồ ả ạ ạ ệ vòng ph n h i tín hi u.  Hính sau đây mô t hai lo i m ch này.

ạ ổ ợ ạ h p và m ch dãy

b) Mã song song và mã tu n t Hình 2.7. M ch t ầ ự .

ạ ồ ộ ỉ Mã   ngu n   VHDL   là   song   song.   Ch   các   đo n   mã   trong   m t   PROCESS,

ầ ự ượ ự ệ ộ FUNCTION, PROCEDURE là tu n t ố . Các kh i này đ c th c hi n  m t cách

ầ ự ươ ọ ồ tu n t . Mã song song đ ữ ệ c g i là mã lu ng d  li u ( dataflow code).

ụ ạ ộ ồ ố ệ Ví d . M t đo n mã g m ba kh i l nh song song ( stat1, stat 2, stat3).

27

ẽ ự ệ ạ ậ ạ ộ Khi đó các đo n sau s  th c hi n cùng m t lúc trong m ch v t lý.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ầ ủ ạ ạ ồ   ể ử ụ Các đo n mã song song không th  s  d ng các thành ph n c a m ch đ ng

ạ ộ ự ồ ộ ủ ỉ ả ộ ồ ồ ộ b  ( ho t đ ng ch  x y ra khi có s  đ ng b  c a xung đ ng h .). M t cách khác

ự ể ạ ỉ ổ ợ ự chúng ta ch  có th  xây d ng d a trên các m ch t ụ  h p. Trong m c này chúng ta

ề ể ể ạ ạ ỉ tìm hi u v  các đo n mã song song. Chúng ta ch  tìm hi u các đo n mã đ ượ ử  c s

ố ệ   ụ d ng bên ngoài PROCESS, FUNCTION, PROCEDURES. Chúng là các kh i l nh

WHEN và

ạ ử ượ ử ụ GENERATE. Bên c nh đó, các phép gán dùng các toán t c s  d ng đ đ ể

ạ ổ ợ ố ệ ạ ặ ố ộ ệ ượ ọ ạ t o các m ch t h p. Cu i cùng m t lo i  kh i l n đ c bi c g i là BLOCK t đ

ẽ ượ ử ụ s  đ c s  d ng.

ệ ề 2.5.2. M nh đ  WHEN

ố ệ ủ ầ ấ ệ   WHEN là  môt thành  ph n  c a  các  kh i  l n  song song. Nó xu t  hi n

ườ ợ trong hai tr ng  h p. WHEN / ELSE  và  WITH / SELECT / WHEN. Cú  pháp

ư ượ đ c trình  bày nh  sau:

WHEN / ELSE:

asignment WHEN condition ELSE,

asignment WHEN condition ELSE,

…;

WITH / SELECT / WHEN:

WHIT identifier  SELECT

asignment WHEN value,

asignment WHEN value,

…;

Hà N i University of Industry                                                                         Faculty of  Electronics

Ví  d :ụ

­­­­­­   With WHEN/ELSE  ­­­­­­­­­­­­­­­­­­­­­­­­

outp <= "000" WHEN

(inp='0' OR reset='1') ELSE "001"

WHEN ctl='1' ELSE "010";

­­­­  With WITH/SELECT/WHEN  ­­­­­­­­­­­­­­­­­­­­

WITH control SELECT

output <= "000" WHEN reset,

"111" WHEN set,

UNAFFECTED WHEN OTHERS;

2.5.3. GENERATE

ộ ươ ươ ố ệ GENERATE là  m t  kh i  l nh  song song  khác. Nó  t ng  đ ớ   ng  v i

kh i  ố

ầ ự ệ ệ ạ ượ ự ệ l nh tu n  t LOOP trong vi c  cho phép  các  đo n  l nh  đ ệ   c th c  hi n

ạ ộ ố ầ ủ ẫ i m t s  l n  nào đó. M u dùng c a  nó là FOR / GENERATE. l pặ  l

label: FOR identifier IN range GENERATE

(concurrent assignments)

END GENERATE;

ử ụ ộ Ở ệ ề M t cách khác s  d ng GENERATE là dùng IF. đây m nh đ    ELSE

ượ ử ụ ượ ử ụ không     đ ộ c   s   d ng.   M t   cách   hay   đ c     s     d ng     là     dùng     IF     trong

FOR/GENERATE.

ẫ ử ụ ư M u s  d ng nh  sau.

label1: FOR identifier IN range GENERATE

...

label2: IF condition GENERATE

(concurrent assignments)

END GENERATE;

...

END GENERATE;

29

Ví  d : ụ

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

SIGNAL x: BIT_VECTOR (7 DOWNTO 0);

SIGNAL y: BIT_VECTOR (15 DOWNTO 0);

SIGNAL z: BIT_VECTOR (7 DOWNTO 0);

G1: FOR i IN x'RANGE GENERATE

z(i) <= x(i) AND y(i+8);

END GENERATE;

ề ả ầ ộ ớ ạ ả ượ ủ M t đi u c n ph i chú ý là gi i h n c a dãy ph i đ c khai báo là static

ợ ệ ụ ượ ẽ ế n u   không s  không h p l . Trong ví d    sau choice không   đ c khai báo là

static nên không h p l ợ ệ :

NotOK: FOR i IN 0 TO choice GENERATE

(concurrent statements)

END GENERATE;

2.6. Mã tu n tầ ự

2.6.1. PROCESS.

ầ ự ủ ầ ượ ả ở PROCESS là ph n tu n t c a mã VHDL. Nó đ c mô t ệ    b i các câu l nh

ạ ừ ạ ặ ở IF, WAIT, CASE, ho c LOOP, và b i danh sách nh y (ngo i tr  WAIT đ ượ ử  c s

ả ượ ặ ượ ở ọ ụ d ng).  PROCESS ph i đ c cài đ t trong mã chính, và đ ự c th c thi ờ    m i th i

ệ ể ạ ộ ổ đi m m t tín hi u trong danh sách nh y thay đ i.

Cú pháp:

[label:]  PROCESS (sensitivity list)

[VARIABLE name type [range] [:=

initial_value;]]

BEGIN

Hà N i University of Industry                                                                         Faculty of  Electronics

(sequential code)

END PROCESS [label];

ử ụ ả ượ ế ọ ỳ VARIABLES là tu  ch n. N u s  d ng, chúng ph i đ c khai báo trong

ầ ở ạ ị ủ ph n khai báo c a PROCESS (tr ướ ừ c t khoá BEGIN). Giá tr  kh i t o không th ể

ể ạ ỉ ấ ệ ỏ ượ ử ụ ỳ ế ợ k t h p, ch  l y đ  đ i di n khi mô ph ng. Nhãn cũng đ ọ   c s  d ng tu  ch n,

ọ ượ ủ ấ ỳ ừ ụ ể ả m c đích là nâng cao kh  năng đ c đ c c a mã. Nhãn có th  là b t k  t nào,

ạ ừ ừ ngo i tr  t khoá.

Ví d :ụ

ệ ồ ộ Hình 2.8. DFF v i tín hi u reset không đ ng b

ư ươ ớ ng trình nh  sau: ủ Mã c a ch

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity DFF is

Port(

d,clk,rst:in std_logic;

q:out std_logic);

end DFF;

architecture Behaviour of DFF is

begin

process(clk,rst)

begin

­­ wait on rst,clk;

if (rst='1') then

q <= '0';

elsif (clk'Event and clk='1') then

31

q <= d;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

end if;

end process;

end Behaviour;

2.6.2. Signals và Variables.

ằ ị ị ặ   VHDL có hai cách đ nh nghĩa các giá tr  không tĩnh: b ng SIGNAL ho c

ể ượ ằ b ng VARIABLE. SIGNAL có th  đ c khai báo trong PACKAGE, ENTITY

ủ ầ ặ ho c ARCHITECTURE (trong ph n khai báo c a nó), trong khi VARIABLE có

ể ượ ả ầ ự ủ ộ th  đ c mô t ầ  bên trong m t ph n c a mã tu n t (trong PROCESS). Do đó,

ị ủ ầ ở ụ ể ụ ộ trong khi giá tr  c a ph n ầ ở ướ  tr c có th  là toàn c c, ph n sau luôn là c c b .

ị ủ ể ờ ị Giá tr  c a VARIABLE có th  không bao gi đ nh nghĩa ngoài PROCESS

ế ầ ả ượ ự ế ộ m t cách tr c ti p, n u c n, thì nó ph i đ c gán thành SIGNAL. Trong cách x ử

ứ ứ ể ậ ậ ị ớ ủ   lý  khác, c p nh t VARIABLE là t c thì, ta có th  tính toán t c thì giá tr  m i c a

ế ệ nó trong dòng l nh ti p theo.

2.7. Signal và Variable

2.7.1. CONSTANT.

ụ ụ ệ ế ậ ị ặ ị CONSTANT ph c v  cho vi c thi t l p các giá tr  m c đ nh.

Cú pháp:

CONSTANT name : type := value;

Ví d :ụ

CONSTANT set_bit : BIT := '1';

CONSTANT datamemory : memory :=  (('0','0','0','0'),

('0','0','0','1'),

('0','0','1','1'));

Hà N i University of Industry                                                                         Faculty of  Electronics

ể ượ CONSTANT   có   th   đ c   khai   báo   trong   PACKAGE,   ENTITY   và

ụ ARCHITECTURE. Khi khai báo trong gói (package), nó là toàn c c, gói có th ể

ử ụ ự ự ề ể ể ở ượ đ c   s   d ng   b i   nhi u   th c   th   (entity).   Khi   khai   báo   trong   th c   th   (sau

ớ ấ ả ụ ự ế ể PORT), nó là toàn c c v i t t c  các ki n trúc (architecture) theo th c th . Khi

ụ ớ ủ ế ầ ỉ ủ   khai báo trong ki n trúc (trong ph n khai báo c a nó), nó ch  toàn c c v i mã c a

ế ki n trúc đó.

2.7.2. SIGNAL.

ụ ả ụ ủ ế ạ ị SIGNAL ph c v  gi ư   i quy t các giá tr  vào và ra c a m ch, cũng nh  là

ệ ế ố ữ ủ ể ễ ạ ơ ị ệ gi a các đ n v  bên trong c a nó. Tín hi u bi u di n cho vi c k t n i m ch (các

ể ệ ấ ả ặ ị ủ ệ dây). Th  hi n là, t t c  các PORT c a ENTITY là các tín hi u m c đ nh.

Cú pháp:

SIGNAL name : type [range] [:= initial_value];

Ví d :ụ

SIGNAL control: BIT := '0';

SIGNAL count: INTEGER RANGE 0 TO 100;

SIGNAL y: STD_LOGIC_VECTOR (7 DOWNTO 0);

ể ượ ạ ủ ở ỗ ố ư Khai báo c a SIGNAL có th  đ c t o ra các ch  gi ng nhau nh  là khai

báo CONSTANT.

ầ ủ ử ụ ủ ạ ọ ộ Khía c nh quan tr ng c a SIGNAl, khi s  d ng bên trong m t ph n c a mã

ầ ự ị ớ ủ ự ậ ứ ậ tu n t (PROCESS), s  c p nh t nó không t c thì. Giá tr  m i c a không nên

cượ đ

ướ ế ặ ợ ể ượ ọ đ i đ  đ c đ c tr c khi k t thúc PROCESS, FUNCTION, ho c PROCEDURE

ươ ứ t ng  ng.

ở ạ ị Phép toán gán cho SIGNAL là “<=” (count <= 35;). Giá tr  kh i t o không

ợ ượ ể ổ ỉ ượ ỏ th  t ng h p đ c, ch  đ c xét khi mô ph ng.

ạ ả ưở ế ế ề ả ượ ạ Khía c nh khác  nh h ng đ n k t qu  khi nhi u phép gán đ c t o cùng

ự ổ ể ể ặ ợ ị SIGNAL. Trình biên d ch có th  thông báo và thoát s  t ng h p, ho c có th  suy

ệ ậ ạ ằ ố ỉ ra m ch sai (b ng cách ch  xét phép gán cu i cùng). Do đó, vi c xét l p các giá tr ị

33

ở ạ ượ ự ệ kh i t o, nên đ ớ c th c hi n v i VARIABLE.

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

2.7.3. VARIABLE.

ượ ạ ớ ỉ ể ễ Ng c l i v i CONSTANT và SIGNAL, VARIABLE ch  bi u  di n thông

ể ượ ử ụ ụ ộ ỉ tin c c b . Nó ch  có th  đ c s  d ng bên trong PROCESS, FUNCTION, hay

ầ ự ị ủ ứ ậ ậ   ệ ậ PROCEDURE (trong mã tu n t ). Vi c c p nh t giá tr  c a nó là t c thì, vì v y

ị ớ ể ượ ậ ứ ử ụ ủ ệ ế giá tr  m i có th  đ c l p t c s  d ng trong dòng l nh ti p theo c a mã.

Cú pháp:

VARIABLE name : type [range] [:= init_value];

Ví d :ụ

VARIABLE control: BIT := '0';

VARIABLE count: INTEGER RANGE 0 TO 100;

VARIABLE y: STD_LOGIC_VECTOR (7 DOWNTO 0) := "10001000";

ể ượ ử ụ ầ ự ỉ ủ Khi VARIABLE ch  có th  đ c s  d ng trong mã tu n t , khai báo c a nó

ể ượ ỉ ự ủ ệ ầ ch  có th  đ c th c hi n trong ph n khai báo c a PROCESS, FUNCTION, hay

PROCEDURE.

ủ ố Phép toán gán c a VARIABLE là “:=” (count:=35;). Cũng gi ng nh  tr ư ườ   ng

ở ạ ể ổ ợ ị ượ ỉ ượ ợ ủ h p c a SIGNAl, giá tr  kh i t o không th  t ng h p đ c, ch  đ c xét khi mô

ph ng.ỏ

ạ 2.8. Máy tr ng thái

ế ế ạ ể ượ ố ộ ử ộ M t thi t k  m ch s  có th  đ ữ ệ   ầ c chia làm 2 thành ph n: b  x  lý d  li u

ệ ữ ộ ề ộ ề ữ ệ ộ ử ể ể ố và b  đi u khi n. M i quan h  gi a b  đi u khi n và b  x  lý d  li u trong

ượ ể ễ ạ m ch đ c bi u di n

ữ ệ ặ ạ ạ ộ ệ Máy tr ng thái h u h n (FSM) là m t công ngh  mô hình hoá đ c bi t cho

ầ ự ạ ể ấ ượ các m ch logic tu n t . Mô hình đó có th  r t đ ỡ c giúp đ  trong thi ế ế ủ   t k  c a

Hà N i University of Industry                                                                         Faculty of  Electronics                                              ặ

ạ ệ ố ệ ố ữ ủ ữ ệ nh ng lo i h  th ng nào đó, đ c bi t là các thao tác c a nh ng h  th ng đó theo

ầ ự ị ạ khuôn d ng tu n t hoàn toàn xác đ nh.

ớ 2.8.1. Gi ệ i thi u.

ố ủ ơ ồ ạ ộ ỉ ộ Hình sau đây ch  ra s  đ  kh i c a m t máy tr ng thái m t pha. Trong hình

ứ ứ ạ ầ ạ ạ ầ này, ph n m ch dãy ch a các m ch dãy (flip­flops), ph n cao ch a m ch logic t ổ

h p.ợ

ơ ồ Hình 2.9. S  đ  máy tr ng thái

ầ ạ ầ ầ ổ ợ Ph n m ch t ạ  h p có 2 đ u vào và 2 đ u ra:

ứ ấ ệ ạ ủ ầ ạ ầ + Đ u vào th  nh t: là đ u vào tr ng thái hi n t i c a máy.

ầ ầ ừ ứ + Đ u vào th  2: là đ u vào t bên ngoài.

ứ ấ ầ ầ + Đ u ra th  nh t:  là đ u ra phía ngo ài

ủ ứ ế ạ ầ + Đ u ra th  2: là tr ng thái ti p theo c a máy.

ầ ạ Ph n m ch dãy có:

ế ạ ầ + 3 đ u vào: clock, reset, và tr ng thái ti p theo

ệ ạ ầ ạ + 1 đ u ra: tr ng thái hi n t i.

ấ ả ệ ề ằ ả   ầ T t c  các flip­flop đ u n m trong ph n này, các tín hi u clock và reset ph i

ể ự ề ệ ể ệ ượ ế ố ớ đ c k t n i v i các flip – flop đ  th c hi n vi c đi u khi n.

ữ ạ ộ ộ ư ậ ộ ố Nh  v y, m t máy ôtômát h u h n là m t b  6 thông s  

δ λ , >, trong đó:

ủ ệ ậ ợ X ­ T p h p các tín hi u vào c a ôtômat:

X = { x1(t),…,xn(t)}

35

(cid:0) ủ ậ ệ T p c ác tín hi u ra c a ôtômat:

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

Y = {y1(t),…,ym(t)}

(cid:0) ủ ậ ạ ợ T p h p các tr ng thái c a ôtômat:

S={ s1(t),…,ss(t) }

(cid:0) ủ ạ ể Hàm  (s, x) – hàm chuy n tr ng thái c a ôtômat.

(cid:0) ủ ầ Hàm  (s,x) – hàm đ u ra c a ôtômat.

ươ ứ ươ ể ạ T ớ ng  ng v i các ph ng pháp tính toán hàm chuy n tr ng thái và hàm ra,

ụ ữ ạ ạ ạ chúng ta có các lo i ôtômat khác nhau. Hai d ng ôtômat h u  h n chuyên d ng là:

ôtômat Moore và ôtômat Mealy.

ạ ớ ẽ ầ ạ ạ Quay l i v i hình v  trên, m ch c n thi ế ế ượ t k  đ ệ   c chia làm hai đo n. Vi c

ư ế ẽ ạ ế ế ố ơ ẽ chia đo n nh  th  này s  giúp chúng ta thi t k  t t h n. Chúng ta s  thi ế ế   t k  2

ụ ể ữ ầ ườ ầ ph n theo nh ng cách khác  nhau. C  th  trong môi tr ạ   ng VHDL, ph n m ch

ẽ ự ệ ầ ạ ổ ợ dãy chúng ta s  th c hi n trong PROCESS và ph n m ch t h p chúng ta có th ể

ầ ự ự ệ ặ ế ợ ầ ự ặ ẫ ấ th c hi n theo c u trúc ho c tu n t ả ấ  ho c k t h p c  c u trúc l n tu n t . Tuy

ầ ự ụ ể ả ạ ổ ợ ầ ự nhiên mã tu n t có th  áp d ng cho c  2 lo i logic: t h p và tu n t .

ườ ệ ệ ầ ạ Thông th ng các tín hi u clock và các tín hi u reset trong ph n m ch dãy

ừ ệ ệ ặ ấ ồ ộ ẽ s  xu t hi n trong PROCESS (tr  khi tín hi u reset là đ ng b  ho c khô ng đ ượ   c

ệ ượ ử ụ ệ ệ ử ụ s  d ng, tín hi u WAIT đ c s  d ng thay cho l nh IF). Khi tín hi u reset đ ượ   c

ệ ạ ẽ ượ ậ ế ậ ở ạ ủ ạ ạ xác nh n, tr ng thái hi n t i s  đ c thi t l p cho tr ng thái kh i t o c a h ệ

ố ồ ự ế ồ ẽ ư ữ ạ ặ th ng. M t khác, t ạ ườ i s n đ ng h  th c t , các flip­flop s  l u tr tr ng thái

ế ẽ ể ớ ầ ệ ạ ủ ầ ạ ạ ti p theo, do đó s  chuy n nó t i đ u ra c a ph n m ch dãy (tr ng thái hi n t i).

ề ộ ọ ớ ươ ề M t đi u quan tr ng liên quan t i ph ắ   ng pháp FSM là : v  nguyên t c

ấ ỳ ộ ể ượ ạ chung là b t k  m t m ch dãy nào cũng có th  đ c mô hình hoá thành 1 máy

ậ ợ ư ề ả ạ ề tr ng thái, nh ng đi u này không ph i luôn luôn thu n l i. Vì có nhi u tr ườ   ng

Hà N i University of Industry                                                                         Faculty of  Electronics                                              ợ h p (đ c bi

ư ộ ế ế ế ệ ế ặ ạ t là các m ch thanh ghi nh : b  đ m,…) n u thi t k  theo ph ươ   ng

ứ ạ ể ở ắ ồ ơ ơ pháp FSM thì mã ngu n có th  tr  nên dài h n, ph c t p h n, m c nhi u l ề ỗ ơ   i h n

ươ ườ ớ so v i ph ng pháp thông th ng.

ư ắ ộ ỏ ươ ợ ớ Nh  thành m t quy t c nh , ph ng pháp FSM thì thích h p v i các h ệ

ủ ố ộ ượ ụ ấ th ng mà thao tác c a nó là m t dãy hoàn toàn đ ạ   c c u trúc, ví d : các m ch

ể ố ệ ố ố ớ ề ạ ấ ả ủ ạ đi u khi n s . Vì đ i v i các h  th ng lo i này thì t t c  các tr ng thái c a nó

ể ễ ượ ệ ạ ả ạ có th  d  dàng đ c li t kê. Khi so n th o mã VHDL, thì các tr ng thái này s ẽ

ầ ầ ầ ướ ạ ể ượ đ ủ c khai báo trong ph n đ u c a ph n ARCHITECTURE d i d ng ki u d ữ

ệ ượ ị ở ườ ử ụ ệ li u li t kê đ c đ nh nghĩa b i ng i s  d ng.

ế ế 2.8.2. Thi t k  theo mô hình may moore

ươ ể ượ ể ế ế ộ Có vài ph ng pháp có th  đ c hình thành đ  thi t k  m t  FSM. Chúng ta

ả ế ụ ẫ ạ ộ ượ ấ ễ ẽ s  mô t chi ti t m t ví d  m u mà m ch hoàn toàn đ c c u trúc và d  dàng áp

ủ ẽ ạ ầ ạ ệ ớ ạ ụ d ng. Trong đó ph n m ch dãy c a máy tr ng thái s  tách bi ầ t v i ph n m ch t ổ

ẽ ợ ủ h p c a nó (hình v  trên).

ấ ả ủ ạ ượ ằ T t c  các tr ng thái c a máy luôn luôn đ c khai báo rõ ràng b ng cách s ử

ể ữ ệ ệ ụ d ng ki u d  li u li t kê.

ế ế ầ ạ Thi t k  ph n m ch dãy:

ằ ở ầ ạ ầ ừ Trên hình trên, các flip­flop n m ph n m ch dãy. Các đ u vào t bên

ủ ệ ệ ầ ượ ngoài c a ph n này là các tín hi u clock và reset. Các tín hi u này đ ố ớ   c n i v i

ộ ầ ế ạ ầ các Flip­flop. M t đ u vào khác (bên trong) là tr ng thái ti p theo. Đ u ra duy

ấ ủ ệ ạ ầ ự ể ầ ạ nh t c a ph n này là trang thái hi n t i. Đ  xây d ng cho ph n m ch dãy này, ta

ủ ấ ấ ầ ử ụ c n s  d ng c u trúc PROCESS. Trong c u trúc c a PROCESS chúng ta có th ể

ầ ự ư ệ ệ ẽ ử ụ s  s  d ng các câu l nh tu n t nh  l nh IF, WAIT, CASE, LOOP.

ẫ ế ế ủ ẽ ư ầ Khuôn m u thi ạ t k  c a ph n m ch dãy s  nh  sau:

PROCESS (reset, clock) BEGIN

IF reset = ‘1’ THEN

Trang_thai_hien_tai <= Trang_thai_0 ;

ELSIF (clock ‘EVENT and clock = ‘’) THEN

Trang_thai_hien_tai <=

37

Trang_thai_tiep_theo;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

END IF ;

END PROCESS ;

ỉ ở ấ ơ ỉ ứ ệ ả ộ ồ ộ Mã ch  ra đây là r t đ n gi n. Nó ch  ch a m t tín hi u reset đ ng b . Tín

ệ ố ở ầ ư ủ ẽ ệ ạ ị hi u reset này s  xác đ nh tr ng thái kh i đ u c a h  th ng, sau đó là l u tr ữ

ộ ạ ế ươ ầ ồ ồ ồ đ ng b  tr ng thái ti p theo (t ạ ườ i s n d ủ   ư ng đ ng h ),và đ a ra đ u ra c a

ệ ạ ầ ạ ạ ph n m ch dãy tr ng thái hi n t i.

ế ế ạ ả ầ ẩ ơ ộ ệ Vi c thi t k  cho ph n m ch dãy này thì đ n gi n vì nó là m t chu n c ơ

ố ượ ố ể ế ằ ố ượ ả b n, và s  l ng các thanh ghi là t i thi u.  Chúng ta bi t r ng s  l ng các flip

ự ẽ ầ ố ế ể ấ ả ủ ạ – flop s  tính d a vào s  bits c n thi t đ  mã hoá t t c  các tr ng thái c a FSM.

ở ậ ẫ ượ ặ ị ị ế B i v y n u m u đ c mã hoá theo cách m c đ nh (mã hoá nh  phân) thì, chúng

ố ạ ẽ ầ ớ ta s  c n log2n Flip­flop, v i n là s  tr ng thái.

ế ế ầ ạ ổ ợ Thi t k  ph n m ch t h p:

Ở ạ ầ ổ ợ ủ ủ ẽ ầ hình 2.11, thì ph n m ch t ậ  h p là đ y đ , vì v y mã c a nó s  không

ế ầ ự ố ử ụ ấ ồ ờ ầ c n thi t theo tu n t . T t nh t, chúng ta nên s  d ng mã đ ng th i. Song trong

ụ ẫ ướ ẽ ử ụ ầ ự ớ ệ ví d  m u d i đây chúng ta s  s  d ng mã tu n t v i câu l nh CASE đóng vai

trò trung tâm.

PROCESS (input, pr_state)

BEGIN

CASE pr_state IS

WHEN state0 =>

IF (input = ...) THEN

output <= ; nx_state <= state1;

ELSE ... END IF;

Hà N i University of Industry                                                                         Faculty of  Electronics

WHEN state1 =>

IF (input = ...) THEN

output <= ; nx_state <= state2;

ELSE ...

END IF;

WHEN state2 =>

IF (input = ...) THEN

output <= ; nx_state <= state2;

ELSE ...

END IF;

... END CASE;

END PROCESS;

ở ẽ ự ấ ơ ệ ệ ả ạ Đo n mã đây cũng r t đ n gi n, và nó s  th c hi n 2 công vi c chính:

ầ ị +     Gán giá tr  cho đ u ra.

ế ậ ế +     Thi t l p trang thái ti p theo.

ể ạ ẫ ế ế M u máy tr ng thái cho ki u thi t k  1:

ề ể ướ ẫ ỉ ế ế D i đây là khuôn m u hoàn ch nh v  ki u thi t k  1:

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY  IS

PORT (

input: IN ;

reset, clock: IN STD_LOGIC;

output: OUT );

END ;

ARCHITECTURE  OF  IS

TYPE state IS (state0, state1, state2, state3, ...);

SIGNAL pr_state, nx_state: state;

BEGIN

39

ầ ạ ­­­­­­­­­­ Ph n m ch dãy: ­­­­­­­­­­­­­­­­­­­­­­­­

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

PROCESS (reset, clock)

BEGIN

IF (reset='1') THEN

pr_state <= state0;

ELSIF (clock'EVENT AND clock='1') THEN

pr_state <= nx_state;

END IF;

END PROCESS;

ạ ổ ợ ầ ­­­­­­­­­Ph n m ch t h p: ­­­­­­­­­­­­­­­­­­­­­­­­

PROCESS (input, pr_state)

BEGIN

CASE pr_state IS

WHEN state0 =>

IF (input = ...) THEN

output <= ;

nx_state <= state1;

ELSE ... END IF;

WHEN state1 =>

IF (input = ...) THEN

output <= ;

nx_state <= state2;

ELSE ...

END IF;

Hà N i University of Industry                                                                         Faculty of  Electronics

WHEN state2 =>

IF (input = ...) THEN

output <= ;

nx_state <= state3;

ELSE ...

END IF;

... END CASE;

END PROCESS;

END ;

ụ ộ ế Ví d : B  đ m BCD

ộ ộ ế ỉ ụ ụ ủ ế ầ ộ ộ M t b  đ m là m t ví d  c a máy Moore, đ u ra ch  ph  thu c vào k t qu ả

ệ ạ ạ ư ộ ạ ạ ố ộ ủ c a tr ng thái hi n t ơ   i. Gi ng nh  m t m ch thanh ghi và m t m ch dãy đ n

ể ả ế ế ạ ể ươ gi n. Đ  thi t k  m ch này, chúng ta có th  dùng ph ng pháp thông th ườ   ng

ư ữ ạ ạ ổ ợ ư ở ươ ầ nh  nh ng ph n m ch m ch t h p, nh ng ẽ  đây ta s  dùng ph ng pháp FSM.

ả ử ầ ế ế ộ ế ẽ ầ Gi s  ta c n thi ộ   ư ậ t k  b  đ m modul 10. Nh  v y chúng ta s  c n có m t

ạ ạ ở ượ ồ ọ may có 10 tr ng thái. Các tr ng thái đây đ c g i là zero, one,…,nine. Đ  hình

ủ ạ ượ ư tr ng thái c a máy đ c cho nh  sau:

Hình 2.10. S  đ  tr ng thái c a b  đ m BCD

ẫ ủ ố ạ ơ ồ ạ ư ủ ộ ế ế ế Mã VHDL cũng gi ng nh  khuôn m u c a thi t k . Do có 10 tr ng thái nên

ằ ế ế ẽ ư ố ượ s  l ng các thanh ghi b ng là [log210 ]= 4. Mã thi t k  s  nh  sau:

LIBRARY ieee;

41

USE ieee.std_logic_1164.all;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ENTITY counterBCD IS

PORT (

clk, rst: IN STD_LOGIC;

count: OUT STD_LOGIC_VECTOR (3 DOWNTO 0));

END counterBCD;

ARCHITECTURE state_machine OF counterBCD IS TYPE state IS (zero,

one, two, three, four, five, six, seven, eight, nine);

SIGNAL pr_state, nx_state: state;

BEGIN

­­­­­­­­­­­­­ Phan mach day: ­­­­­­­­­­­­­­­­­

PROCESS (rst, clk)

BEGIN

IF (rst='1') THEN

pr_state <= zero;

ELSIF (clk'EVENT AND clk='1') THEN

pr_state <= nx_state;

END IF;

END PROCESS;

­­­­­­­­­­­­­ Phan mach to hop: ­­­­­­­­­­­­­­­­­

PROCESS (pr_state)

BEGIN

CASE pr_state IS

WHEN zero =>

count <= "0000";

Hà N i University of Industry                                                                         Faculty of  Electronics

nx_state <= one;

WHEN one =>

count <= "0001";

nx_state <= two;

WHEN two =>

count <= "0010";

nx_state <= three;

WHEN three =>

count <= "0011";

nx_state <= four;

WHEN four =>

count <= "0100";

nx_state <= five;

WHEN five =>

count <= "0101";

nx_state <= six;

WHEN six =>

count <= "0110";

nx_state <= seven;

WHEN seven =>

count <= "0111";

nx_state <= eight;

WHEN eight =>

count <= "1000";

nx_state <= nine;

WHEN nine =>

count <= "1001";

nx_state <= zero;

END CASE;

43

END PROCESS;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

END state_machine;

ế ả ỏ K t qu  mô ph ng:

ộ ế ỏ Hình 2.11. Mô ph ng b  đ m BCD

Hà N i University of Industry                                                                         Faculty of  Electronics

ƯƠ

CH

NG 3: T NG QUAN V  FPGA

ớ ệ 3.1.Gi i thi u FPGA

ượ ế ế ầ ở FPGA (Field­Programmable Gate Array)  đ c thi t k  đ u tiên b i Ross

ườ ạ ậ Freeman, ng i  sáng  l p  công  ty  Xilinx vào năm 1984, FPGA là vi m ch dùng

ầ ử ườ ể ậ ượ ả ấ c u trúc m ng ph n t logic mà ng i dùng có th  l p trình đ ạ   c. Vi m ch

ượ ấ ừ ậ FPGA đ c c u thành t ộ  các b  ph n:

ơ ả ậ ố ượ ? Các kh i logic c  b n l p trình đ c (logic block)

ệ ố ế ậ ạ ượ ? H  th ng m ch liên k t l p trình đ c

ố ? Kh i vào/ra (IO Pads)

ầ ử ế ế ẵ ử ư ? Ph n t thi t k  s n khác nh  DSP slice, RAM, ROM, nhân vi x  lý...

ạ ẫ ớ So sánh FPGA v i ASIC và các vi m ch bán d n khác:

ạ ộ ượ ASIC (Application­Specific Integrated Circuit) là m t vi m ch IC đ c thi ế   t

ụ ụ ể ộ ứ ế k  dành cho m t  ng d ng c  th .

ượ ư ộ ụ ạ ạ ẫ FPGA cũng đ c xem nh  m t lo i vi m ch bán d n chuyên d ng ASIC,

ư ữ ế ế ặ ớ nh ng n u so sánh FPGA v i nh ng ASIC đ c ch  hoàn toàn hay ASIC thi ế ế  t k

ư ệ ạ ựợ ứ ộ ố ư ư ạ trên th  vi n logic thì FPGA không đ t đ c m c đ  t ữ i  u nh  nh ng lo i này,

ụ ặ ữ ế ệ ả ạ ệ ứ ạ ự và h n ch  trong kh  năng th c hi n nh ng tác v  đ c bi ậ   t ph c t p, tuy v y

ư ệ ơ ở ỗ ể ấ ạ ử ụ FPGA  u vi t h n ch  có  th  tái  c u trúc  l ạ   i  khi đang  s  d ng,  công  đo n

45

ế ư ả ế ơ ắ ẩ ả ả ậ ờ thi t  k  đ n  gi n do  v y  chi  phí  gi m, rút ng n th i gian đ a s n ph m vào

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ế ạ ạ ậ ẫ ớ ử ụ s  d ng. Còn  n u  so  sánh  v i  các  d ng  vi  m ch  bán  d n  l p  trình  đ ượ   c

ầ ử ấ ả ư ư dùng  c u  trúc m ng ph n t logic nh  PLA, PAL, CPLD thì FPGA  u vi ệ ơ   t h n

các đi m:ể

ụ ủ ự ệ ả ậ ơ ơ ?      Tác v  tái l p trình c a FPGA th c hi n đ n gi n h n.

ậ ả ộ ơ ?      Kh  năng l p trình linh đ ng h n.

ố ượ ủ ứ ế ả ?    Ki n trúc c a FPGA cho phép nó có kh  năng  ch a  kh i  l ớ   ng  l n

ẫ ậ ạ ớ ượ ổ c ng  logic (logic gate), so v i các vi m ch bán d n l p trình đ c có tr ướ   c

nó.

ế ế ậ ượ ự ệ ằ Thi t k  hay l p trình cho FPGA đ ủ ế c th c hi n ch  y u b ng các ngôn

ữ ả ư ứ ả ầ ng  mô t ấ     ph n  c ng  HDL nh   VHDL,  Verilog,  AHDL,  các  hãng  s n  xu t

ớ ườ ề ấ ầ ư FPGA  l n  nh  Xilinx, Altera th ng cung c p các gói ph n m m và  thi ế ị  t b

ụ ợ ế ứ ế ố ộ ph  tr  cho quá  trình thi ấ   t  k ,  cũng  có m t  s   các  hãng  th  ba  cung  c p

ư ề ề ể ầ ầ các  gói  ph n m m  ki u này  nh  Synopsys, Synplify... Các gói  ph n  m m này

ự ệ ả ấ ả ướ ủ ế ế có  kh  năng  th c  hi n  t t c  các b ộ c c a toàn b  quy trình thi ẩ   t k  IC chu n

ế ế ọ ớ ầ v i đ u vào là mã thi t k  trên HDL (còn g i là mã RTL).

ộ ấ 3.2.C u trúc m t FPGA

ế ớ ệ ề ỗ Trên th  gi ấ i hi n nay có nhi u nhà cung c p FPGA. M i nhà cung c p l ấ ạ   i

ộ ấ ệ ư ấ ượ có m t c u trúc FPGA riêng bi t. Nh ng nói chung FPGA có c u trúc đ c trình

ư bày nh  hình 2.1 sau:

Hà N i University of Industry                                                                         Faculty of  Electronics

ế ộ ấ

ủ ế ầ ồ ố ố ổ Hình 3.1. C u trúc t ng th  m t FPGA Ki n trúc c a FPGA g m các thành ph n sau: kh i logic, kh i I/O và đ ườ   ng

ấ ạ ố ồ ỗ ồ ế ố k t n i ngoài ra còn có m ch cung c p xung đ ng h  cho m i kh i logic. Các

ớ ộ ả ư ể ầ ố ộ ệ kh i logic có th  thêm các thành ph n nh  ALU, b  nh , b  gi i mã… Hi n nay

ổ ế ệ ượ ể ậ ệ có hai công ngh  ph  bi n đ c dùng đ  l p trình cho FPGA là công ngh  RAM

ệ ầ ị tĩnh và công ngh  c u chì ngh ch.

ớ ệ 3.3.Gi i thi u chip SPARTAN­3E

ế ọ 3.3.1. Ki n trúc h  XILINX SPARTAN­3E FPGA

ộ ố ọ ươ ự ư Có m t s  h  Spartan FPGA: Spartan­II, Spartan­IIE (t ng t nh  Virtex),

ạ ớ ệ ổ ươ ậ ộ ổ Spartan­3 (m t đ  c ng cao, đ t t ệ ố i 5 tri u c ng h  th ng), Spartan­3E (t ng t ự

ư ố ư ủ ố ư nh  Virtex­4, và t i  u cho chi phí c a logic), Spartan­3A (t i  u cho chi phí pin),

ử ệ ấ ấ ớ Spartan­3AN (cao c p v i flash), Spartan­3ADSP (cao c p cho x  lý tín hi u).

47

ọ Hình 3.2. H  Spartan­3 FPGA

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ủ ọ ư ế ấ ị ậ   Ta xét ki n trúc c a h  Xilinx Spartan­3E FPGA có giá tr   th p,  nh ng m t

ươ ủ ặ ố ế ế ứ ề ầ ộ ổ đ  c ng t ng đ i cao và đ  các đ c tính cho thi ứ   t k  ph n c ng nhi u ch c

ụ ầ ự ủ ể ề năng d a trên KIT phát tri n Spartan­3E và các công c  ph n m m c a Xilinx.

ủ ế 3.3.2. Ki n trúc c a Xilinx Spartan­3E FPGA

ế

ơ ả ứ ế Hình 3.3. Ki n trúc Spartan­3E FPGA ủ ầ Trong ki n trúc c a Spartan­3 FPGA có 5 thành ph n ch c năng c  b n có

ể ậ ượ th  l p trình đ c (hình 2.4):

ể ấ ố • CLB (Configurable Logic Blocks) ­ các kh i logic có th  c u hình

ượ ứ ự ư ệ ầ ả ớ đ c: ch a các b ng LUT th c hi n các thành ph n nh  và logic nh  các

ự ứ ệ ề ạ ặ ố filp­flops ho c các m ch ch t. Các CLB th c hi n nhi u ch c năng logic

ữ ữ ệ ư khác nhau và l u tr  d  li u.

ề ể ố ồ • IOB (Input/Output Blocks) ­ các kh i vào/ra: đi u khi n lu ng d ữ

ữ ệ ệ ỗ   li u gi a các chân tín hi u vào/ra (I/O pins) và logic bên trong FPGA. M i

ỗ ợ ồ ộ ố ữ ệ ủ ề ẩ I/OB h  tr ạ  lu ng d  li u hai chi u, 3­tr ng thái, m t s  chu n c a tín

Hà N i University of Industry                                                                         Faculty of  Electronics

ể ả ệ ệ ẩ ố ộ ữ ệ   hi u, k  c  4 chu n vi phân hi u năng cao, và các thanh ghi t c đ  d  li u

ấ g p đôi DDR register (Double Data­Rate).

ữ ữ ệ ở ạ ả ư ả ớ • Block RAM: đ m b o l u tr  d  li u ố  d ng các kh i nh  18Kbit

hai c ng.ổ

ự ế ậ ố • Dedicated Multiplier Blocks ­ các kh i nhân tr c ti p: nh n các s ố

ị ở ủ ầ nh  phân 18­bit các đ u vào và tính tích c a chúng.

ả ố • DCM Blocks (Digital Clock Manager Blocks) – các kh i qu n lý

ả ự ự ị ồ ỡ ị ả ộ ố ồ ố ả nh p đ ng h  s : đ m b o s  t đ nh kích c , các gi i pháp s  toàn b  cho

ệ ễ ố ồ ồ ị phân ph i, tr , nhân, chia, và d ch pha các tín hi u đ ng h .

ặ ầ ạ ộ ườ Trong Spartan­3E FPGA có m t m ng d y đ c các đ ng liên k t t ế ấ ả   t c  5

ơ ả ứ ữ ệ ề ầ ộ ỗ thành ph n ch c năng c  b n, truy n các tín hi u gi a chúng. M i m t thành

ứ ể ề ậ ạ ầ ộ ế ố   ph n ch c năng có m t ma tr n chuy n m ch liên quan cho phép nhi u k t n i

ế ể ị đ  đ nh tuy n.

ố ọ 3.3.3. Cách đ c tham s  trên chip

49

ươ ệ ọ Hình 3.4. Ph ng pháp đ c các ký hi u trên chip FPGA

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ƯƠ

ế ế

CH

NG 4: Thi

t k  vi m ch trên FPGA

ế ế ổ 4.1. Quy trình thi t k  FPGA t ng quát

ế ế Hình 4.1.  Quy trình thi t k  FPGA

ả ầ ề 4.1.1. Mô t ban đ u v  thi ế ế t k

ự ả ộ ớ ộ ứ   Khi xây d ng m t chip kh  trình (FPGA) v i ý nghĩa dành cho m t  ng

ệ ừ ỗ ứ ộ ố ụ ễ ụ d ng  riêng bi ấ t, vì xu t phát t ẽ ặ   ự  m i  ng d ng trong th c ti n cu c s ng, s  đ t

ả ế ế ệ ố ư ữ ụ ấ ầ ra   yêu c u ph i thi ự t k  IC th c hi n t ướ   ứ i  u nh t nh ng  ng d ng đó. B c

ủ ế ế ầ ủ ụ ế ệ ậ ầ đ u tiên c a quy trình thi t k  này có nhi m v  ti p nh n các yêu c u c a thi ế   t

ự ủ ổ ế ế ế ế k  và xây d ng nên ki n trúc t ng quát c a thi t k .

Hà N i University of Industry                                                                         Faculty of  Electronics

ả ế ế ướ ừ ủ ữ ầ ế ế * Mô t thi t k : Trong b c này, t nh ng yêu c u c a thi ự   t k  và d a

ệ ệ ủ ả ườ ế ế ế ự trên kh  năng c a công ngh  hi n có, ng i thi ẽ t k  ki n trúc s  xây d ng nên

ộ ế ổ ế ế ướ ườ toàn b  ki n trúc t ng quan cho thi t k . Nghĩa là trong b c này ng i thi ế ế  t k

ế ả ượ ữ ề ki n trúc ph i mô đ ấ c nh ng v n đ  sau:

ế ế ữ ố ? Thi t k  có nh ng kh i nào?

ứ ỗ ố ? M i kh i có ch c năng gì?

ạ ộ ủ ế ế ủ ố ? Ho t đ ng c a thi ỗ t k  và c a m i kh i ra sao ?

ậ ử ụ ỹ ế ế ụ ầ ? Phân tích các k  thu t s  d ng trong thi ề   t k  và các công c , ph n m m

ỗ ợ h  tr  thi ế ế t k .

ế ế ể ượ ả ử ụ ữ ả ầ ứ ộ M t thi t k  có th  đ c mô t s  d ng ngôn ng  mô t ph n c ng, nh ư

ể ặ ả ẽ ả ạ VHDL     hay   Verilog   HDL   ho c   có   th   mô   t qua   b n   v   m ch   (schematic

ộ ế ế ẽ ạ ể ừ ả ả ơ ồ capture). M t thi ồ t k  có th  v a bao g m b n v  m ch mô t ố    s  đ  kh i

ừ ữ ể ể ả ế ố chung, v a có th  dùng ngôn ng  HDL đ  mô t chi ti t cho các kh i trong s ơ

đ . ồ

ứ ỏ ả ế ế * Mô ph ng ch c năng (Function simulation): sau khi mô t thi t k , ng ườ   i

ế ế ầ ể ổ ế ế ề ặ ể ể ứ thi ỏ t k  c n mô ph ng t ng th  thi t k  v  m t ch c năng đ  ki m tra thi ế ế  t k

ạ ộ ứ ầ ớ có ho t đ ng đúng v i các ch c năng yêu c u.

ổ ợ ợ ổ ợ ổ  * T ng h p logic (Logic Synthesis): t ng h p logic là quá trình t ng h p các

ả ế ế ơ ồ ố ạ mô t thi t k  thành s  đ  b  trí m ch (netlist). Quá trình chia thành 2 b ướ   c:

ể ổ ả ướ ạ ứ chuy n đ i các mã RTL, mã HDL thành mô t ể i d ng các bi u th c đ i s ạ ố d

ư ệ ế ế ợ ự ứ ể ớ ẩ ẵ Boolean và d a trên các bi u th c này k t h p v i th  vi n t bào chu n s n có

ợ ộ ế ế ố ư ể ổ đ  t ng h p nên m t thi t k  t i  u.

ế ố ệ ậ ỉ * Hi u ch nh các k t n i (Datapath Schematic): nh p   netlist và các ràng

ộ ề ụ ờ ộ ờ bu c v   th i gian vào m t công c  phân tích th i gian (timing analysic). Công c ụ

ờ ấ ả ế ố ủ ẽ ế ế ễ ủ ờ phân tích này s  tách r i t t c  các k t n i c a thi t k , tính th i gian tr  c a các

ự ủ ế ả ộ ế ố ự k t n i d a trên các ràng bu c. D a trên k t qu  phân tích (report) c a công c ụ

ế ố ề ờ ỏ ị phân tích, xác đ nh các k t n i không th a mãn v  th i gian. Tùy theo nguyên

ể ế ạ ế ẫ ạ ổ ỏ nhân d n đ n không th a mãn mà ta có th  vi t l ế i mã và ti n hành l ợ   i t ng h p

ệ ặ ỉ ạ ộ logic ho c hi u ch nh l i các ràng bu c.

51

ự 4.1.2. Th c thi

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ơ ồ ố ả ổ ể ứ ổ Ta đã có s  đ  b  trí netlist mô t t ng th  thi ế ế ạ t k  t ỉ ồ   i m c c ng (ch  g m

ơ ả ư ạ ổ các c ng  logic  c   b n  và  các  m ch  logic  khác  nh :  MUX).  Quá  trình  này

ơ ự ồ ọ ẽ s ặ     đ t     s đ   netlist   này   lên   chip,   g i   là   quá   trình   th c   thi   (Device

Implementation).

ồ ướ Quá trình g m các b c:

ị ữ ệ ẩ ầ ạ ọ ớ * Ánh x  (mapping hay còn g i fitting ­ ăn kh p): chu n b  d  li u đ u vào,

ị ướ ớ ấ ủ ẽ ố ố ợ xác đ nh kích th ả c các kh i. Các kh i này s  ph i phù h p v i c u trúc c a 1 t ế

ơ ả ủ ề ặ ồ ị ổ bào c  b n c a FPGA (g m nhi u c ng logic) và đ t chúng vào các v  trí t ố ư   i  u

ệ ạ cho vi c ch y dây.

ặ ố ị ơ ồ Hình 4.2. S  đ  gán chân ế *  Đ t kh i và đ nh tuy n (Place & Route):

ạ ặ ặ ố ố ế ở ị ố ư ­ Đ t kh i: đ t các kh i ánh x  vào các t bào (cell) v  trí t ệ   i  u cho vi c

ạ ch y dây.

Hà N i University of Industry                                                                         Faculty of  Electronics

ị ơ ồ ự ệ ố ướ ệ ế ­  Đ nh tuy n: b Hình 4.3.  S  đ  không gian gán bên trong FPGA ế  bào. c này th c hi n vi c n i dây các t

ế

ể ự ệ ệ ơ ồ ị Hình 4.4.  S  đ  đ nh tuy n ầ Đ  th c hi n vi c này, chúng ta c n có các thông tin sau:

ề ư ệ ế ậ ? Các thông tin v t lý v  th  vi n t ụ  bào, ví d  kích th ướ ế c t ể    bào, các đi m

ạ ở ờ ị ể ế ố đ  k t n i, đ nh th i, các tr  ng i trong khi đi dây.

ộ ượ ổ ợ ẽ ỉ ế ố ? M t netlist đ c t ng h p s  ch  ra chi ti t các instance và m i quan h ệ

ả ồ ườ ị ạ ế ẫ ế ố k t n i bao g m c  các đ ng d n b  h n ch  trong thi ế ế t k .

ế ố ấ ả ủ ế ầ ồ ớ ậ   ? T t c  các yêu c u c a ti n trình cho các l p k t n i, bao g m các lu t

ế ế ụ ệ ạ ớ ở ượ thi t k  cho các l p ch y dây, tr  kháng  và  đi n  dung, tiêu  th   năng l ng,

ậ ề ự ẫ ỗ ớ ệ các lu t v  s  d n đi n trong m i l p.

ậ ạ 4.1.3. Quá trình n p (download) và l p trình (program)

ự ệ ế ế ầ ượ ạ ướ ạ Sau quá trình th c hi n, thi t k  c n đ c n p vào FPGA d i d ng dòng

bit (bit stream).

ạ ế ế ườ ạ ộ Quá trình n p thi t k  (download) vào FPGA th ớ ạ   ng n p vào b  nh  t m,

ẽ ượ ụ ư ấ ạ ộ ớ ví d  nh  SRAM. Thông tin c u hình s  đ c n p vào b  nh . Dòng bit đ ượ   c 53

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ư ế ẽ ề ố ị ố   truy n lúc này  s   mang  thông  tin đ nh nghĩa các kh i logic cũng  nh   k t  n i

ế ẽ ấ ữ ệ ư ế ằ ấ ồ ủ c a  thi t  k . Tuy nhiên, l u ý r ng, SRAM s  m t d  li u khi m t ngu n nên

ế ế ẽ ư ượ ế ệ ế ế thi t k  s  không l u đ c đ n phiên làm vi c k  ti p.

ữ ể ậ ậ ả ạ ươ L p trình (program) là thu t ng  đ  mô t quá trình n p ch ng trình cho

ư ậ ư ụ ẫ ấ ớ ộ các b  nh  trong, ví d  nh  PROM. Nh  v y, thông tin c u hình v n s  đ ẽ ượ   c

ữ ấ ồ ư l u tr  khi m t ngu n.

ạ ứ ụ 4.2. Các vi m ch  ng d ng

ấ ả ế ế ạ ướ ề ử ụ ế T t c  các thi t k  m ch d ầ i đây đ u s  s ng ph n m m ISE(ISE Design

ụ ụ ủ ể Suite 14.5) c a hãng Xilinx và KIT phát tri n Digilent Basys2 ( Xem Ph  l c 1 và

ụ ụ Ph  l c 2).

ẵ ẻ ể ỗ 4.2.1. Ki m tra chu i ch n l

Ở ỗ ồ ử ụ ự ể ệ đây do s  d ng KIT Basys2 nên ta th c hi n ki m tra chu i g m 8bit.

ử ụ ậ ở ử ụ ụ Thu t toán s  d ng ể ể    đây là s  d ng phép toán logic XOR. M c đích là đ  ki m

ỗ ầ ư ủ ế ể ả ố tra k t qu  cu i cùng c a phép toán XOR sau khi đ a chu i c n ki m tra vào.

ỗ ẻ ế ả ẵ ỗ ế ả . Chu i ch n khi k t qu  ‘= 0’ và chu i l khi k t qu  ‘=1’

ế ế ư Mã thi t k  nh  sau:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity kiemtrachanle is

port(

vao : in STD_LOGIC_VECTOR(7 downto 0);

ketqua : out STD_LOGIC

);

Hà N i University of Industry                                                                         Faculty of  Electronics

end kiemtrachanle;

architecture kiemtrachanle of kiemtrachanle is

begin

process(vao)

variable bientam : std_logic;

begin

bientam := vao(0)xor vao(1) xor vao(2) xor vao(3) xor vao(4) xor vao(5) xor

vao(6) xor vao (7) ;

if(bientam = '1') then

ketqua <= '1';

else ketqua <= '0';

end if;

end process;

end kiemtrachanle;

ơ ồ ố S  đ  kh i:

ẵ ẻ ơ ồ ố ủ ộ ể Hình 4.5. S  đ  kh i c a b  ki m tra ch n l

ế ể ậ ơ ị ị 4.2.2. Đ m thu n ngh ch Kd=128, hi n th  trên 8 led đ n

ử ụ ộ ế ướ ể ậ ơ ự   ị D i đây là b  đ m Kd=128, hi n th  ra 8 led đ n. Thu t toàn s  d ng d a

ế ệ ươ ế vào vi c đ m xung clock. Khi xung clock ở ườ  x n d ng thì đ m tăng lên 1. Khi

ủ ế ạ ừ ầ ể ể ị ượ ể ạ ế đ m đ  127 tr ng thái thì đ m l đ u. Đ  có th  hi n th  đ i t c trên led thì ta

ầ ố ể ắ ế ợ ậ ầ ộ ườ ụ dùng k t h p thêm 1 b  chia t n , m c đích làm ch m t n s  đ  m t ng i có

ể ấ th  nhìn th y led sáng.

ế ế ư Mã thi t k  nh  sau:

ầ ộ B  chia t n:

55

library IEEE;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

use IEEE.STD_LOGIC_1164.all;

entity bochiatan is

port(

clk : in STD_LOGIC;

rst : in STD_LOGIC;

cl : out STD_LOGIC

);

end bochiatan;

architecture bochiatan of bochiatan is

signal a:std_logic:='0';

begin

process(clk,rst)

variable i: integer range 0 to 50000000;

begin

if rst='1' then

i:=0;

else

if clk'event  and clk='1' then

if i=25000000 then

i:=0;

a<=not(a);

else

i:=i+1;

Hà N i University of Industry                                                                         Faculty of  Electronics

end if;

end if;

end if;

cl<=a;

end process;

end bochiatan;

ộ ế B  đ m Kd=128

library IEEE;

use IEEE.STD_LOGIC_1164.all;

use IEEE.STD_LOGIC_arith.all;

entity demthuannghichkd128_8led is

port(

clk : in STD_LOGIC;

rst : in STD_LOGIC;

sel : in STD_LOGIC;

led : out STD_LOGIC_VECTOR(7 downto 0)

);

end demthuannghichkd128_8led;

architecture demthuannghichkd128_8led of demthuannghichkd128_8led is

signal dem: integer range 0 to 128:=0;

begin

process(clk,rst)

begin

if rst='1' then

dem<=0;

else

if sel='0' then

if clk'event and clk='1' then

if dem=128 then

57

dem<=0;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

else

dem<=dem+1;

end if;

end if;

else

if clk'event and clk='1' then

if dem=0 then

dem<=128;

else

dem<=dem­1;

end if;

end if;

end if;

end if;

led<=conv_std_logic_vector(dem,8);

end process;

end demthuannghichkd128_8led;

ơ ồ ố S  đ  kh i:

Hà N i University of Industry                                                                         Faculty of  Electronics

ơ ồ ố ủ ộ ế HÌnh 4.6. S  đ  kh i c a b  đ m Kd=128

Mô ph ng:ỏ

ủ ộ ế ỏ Hình 4.7. Mô ph ng c a b  đ m Kd=128

4.2.3. Đèn giao thông

ị ờ ệ ể ộ ể   B  đèn giao thông hi n th  th i gian trên led 7 thanh và 3 đèn tìn hi u hi n

ử ụ ể ạ ậ ơ ị ổ ạ   th  trên 3 led đ n. Thu t toán s  d ng là dùng máy tr ng thái đ  thay đ i tr ng

ủ ệ ườ ươ ủ ờ ộ thái c a 3 đèn tín hi u khi có x n d ng c a xung clock tác đ ng. Th i gian

ệ ẽ ượ ổ ủ ả ể ạ thay đ i c a các tr ng thái tín hi u s  đ c gi ể ể   i mã ra led. Đ  led 7 có th  hi n

ắ ị ườ ấ ượ ụ ướ ư ầ ầ ộ th  cho m t ng i nhìn th y đ c ta cũng c n 1 b  chia t n nh  ví d  tr c.

ế ế ư Mã thi t k  nh  sau:

library IEEE;

use IEEE.STD_LOGIC_1164.all;

entity dengiaothong  is

port(

clk : in STD_LOGIC;

rst : in STD_LOGIC;

x : out STD_LOGIC;

d : out STD_LOGIC;

v : out STD_LOGIC;

led : out STD_LOGIC_VECTOR(6 downto 0);

den:out std_logic_vector(3 downto 0)

);

59

end dengiaothong;

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

architecture dengiaothong of dengiaothong is

type state is (xanh,vang,do);

signal s:state;

signal dem: integer range 0 to 9:=0;

begin

mau:process(clk,rst,s,dem)

begin

den<="1110";

if rst='1' then

s<=vang;

dem <=3;

else

if clk'event and clk='1' then

if s=vang and dem=0 then

s<=do;

dem<=7;

elsif s=do and dem=0 then

s<=xanh;

dem<=5;

elsif s=xanh and dem=0 then

s<=vang;

dem<=3;

else

dem<=dem­1;

Hà N i University of Industry                                                                         Faculty of  Electronics

end if;

end if;

end if;

end process;

denled:process(s)

begin

case s is

when do=>d<='1';

x<='0';

v<='0';

when xanh=>d<='0';

x<='1';

v<='0';

when others =>d<='0';

x<='0';

v<='1';

end case;

end process;

led1:process(dem)

begin

case dem is

when 0 => led <= "1000000";

when 1 => led <= "1111001";

when 2 => led <= "0100100";

when 3 => led <= "0110000";

when 4 => led <= "0011001";

when 5 => led <= "0010010";

when 6 => led <= "0000010";

when 7 => led <= "1111000";

61

when 8 => led <= "0000000";

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

when 9 => led <= "0010000";

end case;

end process;

end dengiaothong;

ơ ồ ố S  đ  kh i:

ơ ồ ố HÌnh 4.8. S  đ  kh i đèn giao thông

Mô ph ng:ỏ

Hà N i University of Industry                                                                         Faculty of  Electronics

ủ ộ ỏ HÌnh 4.9. Mô ph ng c a b  đèn giao thông

ụ ụ Ph  l c 1:

ế ế ạ ử ụ ụ Thi t k  m ch s  d ng công c  ISE (Xilinx ISE Design Suite )

ướ B c 1:

ể ượ ng Xilinx ISE Design Suite 14.5

­ Click chu t vào bi u t ộ

ọ ọ

­ Ch n File trên thanh menu, ch n New project

63

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ặ ọ

­ Đ t tên cho Project và ch n Next

ạ ớ Hình 5.1. T o Project m i

Hà N i University of Industry                                                                         Faculty of  Electronics

ố Hình 5.2. Ch n thông s  cho FPGA

ể ạ ọ ọ ở ọ ­ Ch n Next và ch n Finish ti p theo đ  t o và m  Project m i ớ ế

ướ B c 2:

ủ ả ộ ọ

­ Chu t ph i vào tên c a FPGA và ch n New source

65

ạ Hình 5.3. T o tên cho mã VHDL

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ặ ầ ặ ọ ọ

­ Ch n VHDL module, đ t tên file và ch n Next, đ t tên các đ u I/O và

ể ở ử ổ ạ ạ ọ ọ   ch n Next và Finish đ  m  c a s  t o code. Sau khi t o code xong, ch n

Creat schematic Symbol

ừ ạ Hình 5.4. T o Symbol t mã VHDl

ướ B c 3:

ủ ả ộ ọ ­ Chu t ph i vào tên c a FPGA và ch n New source

ặ ọ ọ

­ Ch n Schematic, đ t tên file và ch n Next, Finish.

ạ ử ổ ẽ ạ ư ẽ ạ i c a s  Symbol, v  m ch nh  hình v  và save l i.

­ Sau đó, t

Hà N i University of Industry                                                                         Faculty of  Electronics

ẽ ạ Hình 5.4. V  m ch

ướ B c 4:

ạ ử ổ ầ ượ t 2 dòng sau:

­T i c a s  Design, chon, l n l

ệ ạ ẩ ế ố Hình 5.5. Chu n b  cho vi c t o các k t n i

67

ử ổ ệ ế ị ­ Ti p đó 1 c a s  hi n lên cho phép ta add các chân I/O lên FPGA

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ạ ế ố Hình 5.6. T o k t n i chân cho FPGA

ạ ử ổ ự ộ ệ i c a s  Design và th c hi n click đúp chu t trái vào

­ Sau đó ta quay l

ể ạ ư Implement Design và Genetate programing file đ  t o file.bit  đ a vào

FPGA

ể ạ Hình 5.7. Ki m tra, đi dây, t o file.bit

Hà N i University of Industry                                                                         Faculty of  Electronics                                              ướ

B c 5:

ể ọ ở

­ M  Digilen adept. Ch n Browse đ  ch n file.bit ọ

ậ ả ề ấ ọ

­ Ch n Program và ch p nh n c nh báo v  JTAG clock

69

ạ ươ Hình 5.8. N p ch ng trình cho FPGA

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng

ụ ụ Ph  l c 2:

ớ ề ệ Gi i thi u v  KIT Digilent Basys2:

ố ớ ế ế ị ườ Digilent INC, đ i tác v i Xilinx cùng thi ư t k  và đ a ra th  tr ng các KIT

ể ằ ớ ố ượ ọ phát tri n FPGA. KIT Basys2 nh m t i các đ i t ng là h c sinh, sinh viên,giáo

ể ế ư ề ề ẫ ậ ầ ỏ ớ viên không c n b  ra quá nhi u ti n nh ng v n có th  ti p c n v i công ngh ệ

ế ế ạ ể ớ thi t k  m ch theo ki u m i.

ượ ử ụ ề ả ư ệ KIT basys2 đ c s  d ng nh  là n n t ng cho tài li u và sách giáo khoa.

ộ ố ố ủ ướ D i đây là m t s  thông s  c a KIT Basys2:

FPGA Effective Gate Count Programming interface Configuration ROM VGA Connector and colour depth Four digit, Seven Segment display Host communication interface Maximum host transfer rate LEDs Slide switches Push buttons Mini­joystick Digilent Basys­250 Spartan 3E 100,000 or 250,000 USB Yes Yes, 8 bit Yes 8 bit parallel (EPP) 170kB/s 8 8 4, in a row No

Hà N i University of Industry                                                                         Faculty of  Electronics

PS/2 port On­board clock Carry case Analogue to digital converter Audio output Additional power connector ESD protection on all connectors Size Open design USB cable supplied Add­on modules available Maximum user I/O pins Voltages available to add­ons Soldering required Designed to work with Arduino S/W Has geek factor? Yes 25/50/100MHz, jittery Yes No No Two pin header Yes Larger No Yes Yes 12 + 2 on PS/2 3.3V No No No, used in colleges

ố ủ Hình 5.8. Thông s  c a KIT Basys2

Tài li u tham kh o:

(cid:0) MIT Press ­ Circuit Design with VHDL (2005)­ Voilnei A.Pedroni

(cid:0) VHDL Programming by Example [Dark Demon]

Các trang web

(cid:0) http://www.xilinx.com/

(cid:0) http://www.digilentinc.com/

71

(cid:0) http://www.dientuvietnam.net/

ự ậ

Sinh viên th c t p: Nguy n  Thanh Tùng