Ộ
ƯƠ
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 SPARTAN3E
ủ 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 flipflop 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 IEEE10761987.
ướ ữ ề ờ ả 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, FORLOOP…
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 flipflop 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; userdefined 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
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 (flipflops), 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 flipflop đ 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 flipflop 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 flipflop 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 Flipflop. 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 Flipflop, 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 <= ELSE ... END IF; Hà N i University of Industry Faculty of
Electronics WHEN state1 => IF (input = ...) THEN output <= ELSE ... END IF; WHEN state2 => IF (input = ...) THEN output <= 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 PORT ( input: IN reset, clock: IN STD_LOGIC; output: OUT END ARCHITECTURE 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 ớ ệ 3.1.Gi i thi u FPGA ượ ế ế ầ ở FPGA (FieldProgrammable 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 (ApplicationSpecific 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 SPARTAN3E ế ọ 3.3.1. Ki n trúc h XILINX SPARTAN3E FPGA ộ ố ọ ươ ự ư Có m t s h Spartan FPGA: SpartanII, SpartanIIE (t ng t nh Virtex), ạ ớ ệ ổ ươ ậ ộ ổ
Spartan3 (m t đ c ng cao, đ t t ệ ố
i 5 tri u c ng h th ng), Spartan3E (t ng t ự ư ố ư ủ ố ư nh Virtex4, và t i u cho chi phí c a logic), Spartan3A (t i u cho chi phí pin), ử ệ ấ ấ ớ Spartan3AN (cao c p v i flash), Spartan3ADSP (cao c p cho x lý tín hi u). 47 ọ Hình 3.2. H Spartan3 FPGA Sinh viên th c t p: Nguy n Thanh Tùng ủ ọ ư ế ấ ị ậ
Ta xét ki n trúc c a h Xilinx Spartan3E 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 Spartan3E và các công c ph n m m c a Xilinx. ủ ế 3.3.2. Ki n trúc c a Xilinx Spartan3E FPGA ế ơ ả ứ ế Hình 3.3. Ki n trúc Spartan3E FPGA
ủ ầ Trong ki n trúc c a Spartan3 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 ự ứ ệ ề ạ ặ ố filpflops 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, 3tr 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 DataRate). ữ ữ ệ ở ạ ả ư ả ớ • 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 18bit 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 Spartan3E 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 ế ế ổ 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<=dem1; 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<=dem1; 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 ế ế ạ ử ụ ụ 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 ọ ọ 63 Sinh viên th c t p: Nguy n Thanh Tùng ặ ọ ạ ớ
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: ủ ả ộ ọ 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 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 ặ ọ ọ ạ ử ổ ẽ ạ ư ẽ ạ i c a s Symbol, v m ch nh hình v và save l i. Hà N i University of Industry Faculty of
Electronics ẽ ạ Hình 5.4. V m ch ướ
B c 4: ạ ử ổ ầ ượ t 2 dòng sau: ệ ạ ẩ ế ố
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 ể ạ ư 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: ể ọ ở ậ ả ề ấ ọ 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 ớ ề ệ 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
Minijoystick Digilent Basys250
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
Onboard clock
Carry case
Analogue to digital converter
Audio output
Additional power connector
ESD protection on all connectors
Size
Open design
USB cable supplied
Addon modules available
Maximum user I/O pins
Voltages available to addons
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 (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ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ƯƠ
Ổ
Ề
CH
NG 3: T NG QUAN V FPGA
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ƯƠ
ế ế
ạ
CH
NG 4: Thi
t k vi m ch trên FPGA
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ự ậ
ễ
ộ
ụ ụ
Ph l c 1:
Click chu t vào bi u t
ộ
Ch n File trên thanh menu, ch n New project
ự ậ
ễ
Đ t tên cho Project và ch n Next
ộ
Chu t ph i vào tên c a FPGA và ch n New source
ự ậ
ễ
Ch n VHDL module, đ t tên file và ch n Next, đ t tên các đ u I/O và
Ch n Schematic, đ t tên file và ch n Next, Finish.
Sau đó, t
ộ
T i c a s Design, chon, l n l
ự ậ
ễ
Sau đó ta quay l
ộ
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
ự ậ
ễ
ụ ụ
Ph l c 2:
ộ
ệ
ả
Tài li u tham kh o:
ự ậ
ễ