BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC KỸ THUẬT CÔNG NGHỆ TP.HCM KHOA ĐIỆN - ĐIỆN TỬ
NGANH DIEN TU - VIEN THONG
LUAN VAN TOT NGHIEP
DE TAI:
ỨNG DỤNG VHDL TRONG THIẾT KẾ SỐ
THIET KE VI MACH (IC) DUNG DIEU KHIỂN CUA GARAGE XE
GVHD : Ks TRUGNG NGOC BAO
SVTH : LÊ PHƯỚC THỌ MSSV : 02DHDT192 LỚP :02DT1
“` em mt te
(TRUONG BMDL-KTCN|
Fil YES T Hồ Chí Minh Tháng 01 năm 2007 + th
|isố Ap 1003342 ;
Trang 2
Ñ Eh Np EER xà in Sa RES AY A xà 0c AES cà a TS Ao ER Aes i aie i A a Ne AO eR i he ee i ch Ee 4
7X
NHAN XET CUA GIAO VIEN HUONG DAN
IOC
" SII, -LÁo li & sa, 56 -hạyg địm, chai Í8u, ưấc
¬- Nephi Ro AUC eleven AN oe dA are he Ean io That RA
DHKTCN,Ngaythangotnam 2007
Giáo viên hướng dẫn
Trang 4
LỜI CẢM ƠN !
Để hoàn thành luận văn tốt nghiệp này, thầy hướng
dẫn, các thầy cô trong phịng thí nghiệm về tất cả các bạn đã giúp đổ em rất nhiều, đặc biệt là thầy hướng dẫn
Tôi xin chân thành ghỉ nhớ ơn của Trương Ngọc
Bảo,Thầy đã rất nhiệt tình giúp đỡ em trong suốt quá
trình nghiền cứu và làm luận văn Em xin cắm ơn các
thầy cô trực các phịng thí nghiệm, đã tạo mọi điều kiện
cho em trong những buổi cân chỉnh mạch Tôi xin cắm
ơn tất cả các bạn cách này cách khác đã giúp đỡ tơi, góp
phần làm cho đề tài tôi được phong phú hơn
Một lần nữa em xin chân thành cám ơn Trương
Ngọc Bảo, các Thầy cơ và tồn thể các bạn
Lê Phước Thọ
Trang 5
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐHDL KỸ THUẬT CƠNG NGHỆ CỘNG HỊA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP - TỰ DO - HẠNH PHÚC KHOA ĐIỆN - ĐIỆN TỬ - 0O -
k#**w&&*&
NHIỆM VỤ ĐỎ ÁN TĨT NGHIỆP
(Sinh viên phải đóng bản nhiệm vụ này vào trang thứ nhất của đồ án)
Họ và tên SV : Lê Phước Thọ MSSV :
Ngành : Điện tử - Viễn thông Lớp
1 Đầu đề đồ án tốt nghiệp:
ỨNG DỤNG VHDL TRONG THIẾT KÉ SÓ
THIẾT KÉẺ VI MẠCH (IC) DÙNG ĐIÊU KHIỂN CỬA GARAGE XE
2 Nhiệm vụ đồ án tốt nghiệp (Yêu cầu về nội dung và số liệu ban đầu): - Tìm hiểu tổng quan về GAL, PAL và FPGA
- Tìm hiểu phần mềm MaxPlusII lập trình cho vi mach FPGA
- Thiết kế, lập trình chức năng điều khiển cho vi mạch FPGA
- Thực hiện mô phỏng trên PC, minh họa cho các chức năng của vỉ mạch
3 Ngày giao nhiệm vụ đồ án : 02/10/2006
4 Ngày hoàn thành đồán : 30/01/2007
5 Họ tên người hướng dẫn : Phần hướng dẫn
1/ Ks Trương Ngọc Bảo l/ Toàn bộ
LH H111 11011, “
u10 tk ey 3Í ve
Nội dung và yêu cầu của ĐATN đã được thông qua Ngàyvh tháng AQ nim 2006
TRUONG KHOA NGƯỜI HƯỚNG DẪN CHÍNH
(Ký và ghi rõ họ tên) (Ký và ghi rõ họ tên)
p— o Á vài ~
ĐẠI HỤC DỊ tý: Đ GNỀNGHỆ Í “Lá”
Pos ¬ ad a
TS Hồ Ngọc Bá Ks Trương Ngọc Bảo
Trang 6LỜI NÓI ĐẦU
Các Ngơn ngữ lập trình hiện nay như : Visual Basic, C++, Pascal đã trở thành
những ngôn ngữ lập trình chủ yếu trong máy vi tính, tính linh hoạt, mềm dẻo và
gần với ngôn ngữ tự nhiên của con người đã cho phép người lập trình ngày càng tạo
ra nhiều sản phẩm trên phần mềm ứng dụng Tuy nhiên, các ngôn ngữ trên chủ yếu
ứng dụng cho máy vi tính Đối với ngành điện tử, các ngôn ngữ trên đôi khi không
thật sự hiệu quả, do đặc thù xây dựng các phần cứng, nên một ngôn ngữ lập trình
dùng cho phần cứng sẽ thật sự hiệu quả hơn
VHDL là một ngôn ngữ mô tả phần cứng rất mạnh, hỗ trợ các vi mạch lập trình
cho các họ như CPLDs, FPGAs Cấu trúc cú pháp trong ngôn ngữ VHDL tương tự như các ngôn ngữ cấp cao như C++, Pascal, Java Tuy nhiên vì là một ngơn ngữ
mô tả phần cứng nên nó địi hỏi người thiết kế cần có sự hiểu biết nhất định về kỹ
thuật số, VHDL có thể được ví như một ngơn ngữ thực hành, sử dụng ngơn ngữ này địi hỏi người thiết kế phải đọc đi đọc lại rất nhiễu lần mới có thể hiểu, nhưng khi
đã nắm vững các cú pháp ngôn ngữ này thì nó cho phép người thiết kế biết những
khả năng mô tả phần cứng tuyệt vời
Ngôn ngữ mô tả phần cứng VHDL và các vi mạch có khả năng lập trình với mật
độ tích hợp cổng logic bên trong rất cao như các họ IC theo công nghệ CPLDs, FPGAs cho phép giải quyết những bài toán lớn đã xuất hiện trên thị trường Việt
Nam nhiều năm nay nhưng chúng vẫn chưa được những người thiết kế các vi mạch khai thác, điều này một phần là do đây là các vi mạch tương đối mới, thêm vào đó
là do ngôn ngữ VHDL vẫn chưa phổ biến rộng rãi Chính vì thế đã làm cho việc
vận dụng khả năng tuyệt vời của ngôn ngữ VHDL vào trong các thiết kế số vẫn còn hạn chế
Chính vì những yếu tố trên nên em quyết định tìm hiểu và chọn để tài “Ứng dụng VHDL trong thiết kế số, thiết kế vi mạch (IC) dùng điều khiển cửa garage
Trang 7
TÓM TẮT NỘI DUNG CỦA ĐỀ TÀI
Dé tài đã khảo sát cấu trúc và chức năng của vi mạch số lập trình FPGA, sử dụng phần mềm MaxPluxII cuả ALTERA lập trình cho vi mạch FPGA, từ đó ứng
dụng VHDLằ trong thiết kế vi mạch (IC) điều khiển cửa garage xe
Đề tài được chia làm 2 phần:
Phẩn1: CƠ SỞ LÝ THUYẾT
Tổng quan Pal, Gal và FPGA
Téng quan VHDL
Cấu tạo của một chương trinh VHDL Các đối tượng của VHDL,
Các kiểu dữ liệu
Chương trình con
Phan 2: THIET KE VA MO PHONG
Viết chương trình VHDL thiết kế (IC) diéu khién Garage xe
Mô phỏng trên phần mềm MAXPLUS II
Từ khoá sử dụng:
GAL PAL FPGA VHDL
: Generic Array Logic
: Programmable Array Logic Field Programmable Gate Array
Trang 8
MỤC LỤC
Lời nói đầu
Tóm tắt nội dung của để tài
PHẨNI: CƠ SỞ LÝ THUYẾT
CHUONG I: TONG QUAN VE PAL, GAL, FPGA ———
I TOng quan Vé Pal, Gal c c ccssecscssssssesssesseessessessssscecsessesseees
L1 Logic lập trình được (PAL) c5-
L2 1
II Tổng quan về FPGA .S22Stt 2222225 EEcecee CHUONG II: TONG QUAN VE VHDL
I Cac dac diém chinh cia ng6n ngif VHDL eeccececccececcceeees L1 Đặc tính tổng quát 2c s22 xe crec L2 Hỗ trợ phân cấp thiết kế 72s secscnceccscc
1.3 C6 thu vién h6 tr oo ccc cececeeccsecsecseesesecseceeeeees
L4 Có lệnh tuần tự .- -QSc SH S2Tnen ng ngan,
L5 Thiết kế tương thích chung . 2+2 csvzcz c5: L6 Khai báo kiểu và cách đùng c.ccccec
1.7 Sử dụng các chương trình con . -c+s se se:
L8 Điều khiển định thời - 2-22scccccccccreree
L9 Đặc tả cấu trÚc + s- chen nghe
II Cac cong cu phan mém AG trd eeeeeeesceesseceeseceseeeseseeseeeees CHƯƠNG III: CẤU TẠO CUA MOAT CHUONG TRINH VHDL
I, TẨY Đà HH HH HT HT HH TH KHE KT nàng I ATChIt€CEUC€ QC HH n1 HH TH HH TH HH ờy
IL1 Gán tín hiệu đồng thời . - 22 Ss St nen sec: H2 Thiết kế cấu trÚc . - + + sec Stvx 2323 cEsEcEcsseceea
I3 Kiến trúc tuẫn tự HH Phát biểu Process Q2 SH
IH.1 Danh sách cảm nhận . -Q St TH nen re IH.2 Vùng khai báo Process Sc cv
HI.3 Vùng phát biểu Process -.s ccccss se căc IV Các phát biểu tuần tự trong Process sccccccscccccez
IV.I Phát biểu [F cu re
IV.2 Phát biểu Case s son tre sec,
Trang 9
IV.3.1 Vòng lặp Whie loop
IV.3.2 Vòng lặp For .-S-
IV.4 Phátbiểu wait
IV.4.1 Walton signal .<S2
IV.4.2 Waituntill expression
IV.4.3 Wait for time expression
V PaCKaB€ eeeccecsecssecseccseeesessseeessessccssessscssecssessecsacees V.1 Khai báo góI - c2 SH,
V.2 Than Ca QOL ee ccecceceseesesceeessecseessecssscsssssscenecees
CHUONG IV: DOI TUGNG CUA VHDL
I na
II Biến n2 T HH HT H1 T011 0111111711112 keo
[H Hằng 2.2.2 Hee
CHƯƠNG V:_ CÁC KIỂU DỮ LIỆU c-c-s ccc
L Kiểu vô hướng -L.k tt TT 1112111211111 xe L1 Kiểu nguyên Sàn TH tre
I2 Kiểu thực I3 Kiểulệtkê
L4 Kiểu vật lý - - cs s HH HT 2211 treo H Kiểu kếthợp St HH nen TH
I1 Kiểu mắng ¿- 52s cv t EEEEE TE2x E sercrec
IL2 Mang da hướng ĐÀ Snn SH ng rệt
I3 Mang khong bi rang buộc . -c sec sec
II Kiểu mắng ghi G5 St SE SE E112 cEcrcey
IV KiỂucon Ăn SH HH ra
CHƯƠNG VI: CHƯƠNG TRÌNH CON -c-s<cccsee
L so
H THU UC
Ill Khai bao chương 000)0809: 0 4
CHƯƠNG VII: PHẪN MỀM MAX+PLUS lI . c-cccccce
L Bắt đầu với Project mới ¿+ s2 tt 21x xe re
H Mở một project đang tỔn tại cv serxrseereee I Mở bắt đầu từ một file nguồn VHDL - cccsczscscc
IV Nhap source VHDL vào trong project . -s<s<cs+ V Tạo mới một file source VHDL mới cho Project
VI Tổng hợp cho chức năng mô phỏng 2: 2z 22222
VII Thực hiện biên dịch .- + 5-55 52c 2122 SE Ecrkre re
VIH Thiết lập tín hiệu ngõ vào . - S22 212x211 cret IX Thiết lập và xem các tầm mô phỏng thời gian
Trang 10
X Gán giá trị cho các tín hiệu ngõ vào .- cào 71
XT MG phon ooo — 72
PHAN IL: THIẾT KẾ VÀ MÔ PHỎNG 714
CHƯƠNG!I: CÁC ỨNG DỤNG . -k c+ c2 crererrree 75
L Mạch T_FEF - - LG TQ n TT HH HH HH HH ng ng rep 75
II Thiết kế mạch nhan G61 ccc cceesecececceeceseseeseseesesesenseenes 76
ILI Giải thích thiết kế 2252 css¿ 76
IL2 Sơ đồ khối - + «sec rcrsez 77
I3 Mơ tả VHDIL 52-22222225 22z2cze2 T1
H4 Kết quả m6 phong .- 82
J 72M ':°ô 0e a a4ă 83
CHƯƠNG II: BỘ ĐIỀU KHIỂN CỔNG CHẮN BÃI DAU XE 84
L Mơ hình và sơ đổ khối - + 5 cà k kg ngay 84
Ll Mơ hình 2-22 Et22E52 22522552 EEczse2 84 L2 Sơ đỗ khối -2 2-22 222n SE 2x2 csrsrse2 84
L3 Lưu đồ ASM csccececckeesei 85
I — Giải thích thiGt KE oes cecceccccccccccscssccseessecssessecssesuvessesssecseessseen 86
IH — Chương trình VHDIL o G5555 S5 5 9956068056555 88 87
IV Kết quả mơ phống ¬ 94
KẾTT LUẬN 2 ©C2e+E2s€ESE+sd€tEEZeeEESssevEEvessvtvvzseerrcse 97
I Kết quả thực hiện đỀ tài 5 S1 Sky re 97
H Hướng phát triển để tài . - ĐÀ àSn nhe 97
Trang 11
Phan II Thiết kế và mô phỏng
PHAN II:
THIET KE VA MO PHONG
Trang 12
Chương I Tổng quan về PAL, GAL và FPGA
CHUONG I: TONG QUAN VE PAL, GAL VA FPGA I TONG QUAN VE PAL VA GAL
I.1 Logic dãy lập trình được (PAL-Programmable Array Logic)
PAL là trường hợp đặc biệt của PLA mà trong đó dãy AND lập trình
được và dãy OR là cố định Cấu trúc cơ bản của PAL thì giống như PLA ở hình
1-18 Bởi vì chỉ có đãy AND là lập trình được, do đó PAL ít mắc tiền hơn các
PLA tổng quát hơn, và dễ lập trình PAL hơn Vì lý do này, các nhà thiết kế logic thường sử dụng các PAL để thay thế các cổng logic khi phải cài đặt nhiều
Trang 13
Chương I Tổng quan về PAL, GAL va FPGA
Phần lớn các nhà sản xuất PAL có chỉ ra thiết kế nội của PAL ở ký hiệu tên của nó Thí dụ: PAL16L8B4 có 16 là số ngõ vào; L chỉ cấu trúc ngõ ra (tích cực thấp); 8 là số ngõ ra; B là tốc độ và 4 chỉ tiêu tán công suất
+ Với cấu trúc ra, thí dụ như :
H: (High) chỉ ngõ ra tích cực cao (acitve high)
L: (Low) chỉ ngõ ra tích cực thấp (active low)
C : (Complement) chỉ ngõ ra có cả 2 đường tích cực cao và thấp + Tốc độ : A = tốc độ cao; B = tốc độ rất cao; và D = tốc độ cực cao
+ Tiêu tán công suất: để trống chỉ day đủ; 2 chỉ 1/2; 4 chỉ 1/4
OE OE
Registered Active Low Registered Active High
Combinatorial I/O Active Low Combinatorial /O Active High Veo Vee
Combinatorial Output Active Low Combinatorial Output Active High
Hình 1.22 Thứ dụ một số cấu trúc ngõ ra
Trang 14
Chương I Tổng quan về PAL, GAL và FPGA
L2 GAL:
GAL, 16V8 có hình dạng 20 chân ,vi mạch này có 8 tổ hợp ngõ ra, mỗi
ngõ ra được đảo với 7 tích số ngõ vào, 6 trong 8 ngõ ra được hồi tiếp với mảng
AND.Cho phép các chân này được sử dụng với chức năng I/0.Do GAL16V8 có
ngõ ra tác động mức thấp nên có thể kết hợp với các IC khác cùng một mức tác
động Các vi mạch GAL đều hổ trợ các thanh ghi “Preload” điều này có ích cho việc kiểm tra vi mạch
Fsedtack $——————— Yeo
Active Pul-up Active Pulp
Circuit Chrewit
cm me Wœ mì
i Vo! Vret Ti-Shte —— Viet
ESD tr Control i Protection |} : Circuft } i ‡ } } "~ `" Peres PIN Datla = : Output PIN |ESP TÍ : Protection |: 1 Creu ị —.` TS s Feedback
Typ Vref = 3.2 Typ Veet = 3.29 ‘To Input Buffer)
Typical Input Typical Output
Sơ đồ ngõ vào Sơ đồ ngõ ra
Trang 15
Chương I Tổng quan về PAL, GAL và FPGA
DIP & PLCC Package Pinouts
OLNC xDR.2Ð AC 12122 ES 0LRIE SOR 2061 16 OLMC la Ai ;1.2124 15 tiêu OLMC SOR.2023 1-2135 1đ DLME XOEF 4 1-2123 13 nag OLMC sR es ẨI;1.2127 11 J-EAST UE FLEE See, A, co ETM, 210F Sh 2192 mee Rye En Eg M2186 Me 2 3 h0Q
Sơ đồ logic GAL 16V8
Trang 16
Chương Ï Tổng quan về PAL, GAL và FPGA II TONG QUAN FPGA:
FPGA gồm một dãy càc phần tử rời rạc có thể được kết nối với nhau theo một cách chung Giống như PLD các kết nối giữa các phần tử là có thể lập
trình được
FPGA được giới thiệu đầu tiên bởi công ty Xilinx vào năm 1985, kể từ đó có nhiều loại FPGA đã được nhiễu công ty phát triển: Actel, Altera,
Crosspoint, Solutions
Từ mơ hình lý thuyết của một FPGA tas thấy nó bao gồm một dãy hay nhiều các khối logic(logic block) có thể được kết nối bằng các nguồn kết nối
chung (tái nguyên kết nối), được tổ chức tạo thành các kênh dẫn Bên trong các kết nối là các chuyển mạch lập trình được (I/O cell) dùng để kết nối các logic
block với các đoạn dây, hoặc dùng để nối các đoạn day với nhau theo nhiều
cách
Mạch logic được cài đặt trong FPGA bằng cách ánh xạ logic vào các
logic block riêng lẽ và sau đó nối các logic block cần thiết qua các chuyển
mạch
Để tính tốn mức độ tích hợp, người ta thường dùng đơn vị cổng tương
đương (nghĩa là cổng NAND 2 ngõ vào), khi đó CPLD cứ mỗi macrosell biểu
diễn 20 cổng tương đương và một PAL tiêu biểu với 8 macrosell có thể dùng để
thực hiện mạch cần 160 cổng Với CPLD có 1000 macrosell có thể cài đặt các
mạch lên đến khoảng 20.000 cổng tương đương
Theo tiêu chuẩn hiện đại thì một mạch logic với 20.000 cổng thì khơng
lớn Để cài đặt mạch lớn hơn người ta dùng một loại chip khác có dung lượng logic lớn hơn, đó là FPGA Họ FPGA được Signetic giới thiệu vào năm 1977
được sử dụng để thay thế cho những cổng nhiều ngõ vào tiêu chuẩn, cấu trúc
của nó bao gồm một mảng AND lập trình, với lập trình cực tính ở ngõ ra Chỉ
với một cổng AND có thể biến đổi thành cổng NAND hay cổng OR Mỗi cổng
AND trong FPGA có thể biến đổi thành các cổng logic khác nhau
FPGA 1a chip c6 dung lượng khá lớn, các FPGA hoàn toàn khác với các
CPLD không chứa các mặt phẳng AND, OR mà FPGA cung cấp các khối logic
(logic block) để cài đặt các hàm mong muốn
FPGA có thể được dùng để cài đặt các cổng logic có hơn vài trăm ngàn cổng tương đương
Trang 17
Chương II Tổng quan về VHDL
CHUONG IL: TONG QUAN VE VHDL
VHDL (VHSIC Hardware Description Language) là một ngôn ngữ chuẩn
trong công nghiệp, được sử dụng để mô tả phần cứng từ mức trừu tượng tới mức cụ thể VHDL đã nhanh chóng trở thành một ngôn ngữ được sử dụng rộng rãi
trên thế giới cho những thiết kế có độ phức tạp trung bình Các thiết kế sử dụng
VHDL được hỗ trợ bởi máy tính, FPGA, các tiêu chuẩn trên VHDL được hỗ trợ bởi các công cụ của nó, các cơng cụ này bao gồm: công cụ mô phỏng, tổng hợp, định đường đi
VHDL là một nhánh của chương trình “ Very High Speed Integrated Circuit( VHSIC) ”, được phát triển bởi Department of Defense vào cuối thập niên 70, đầu thập niên 80 Mục tiêu của chương trình VHSTIC là tạo ra những mạch điện được tích hợp thơng dụng mới Những người tham gia vào chương trình này muốn đẩy mạnh hơn nữa việc các giới hạn của công nghệ trong mỗi
giai đoạn thiết kế và sản xuất ra các vi mạch tích hợp
Chương trình đã đạt được những thành công đáng ngạc nhiên, nhưng trong
quá trình phát triển những mạch điện có độ phức tạp lớn, người thiết kế căn cứ
vào những công cụ đã được sử dụng để tạo ra những thiết kế lớn thì khơng có đầy đủ, các công cụ hỗ trợ cho người thiết hầu hết ở mức cổng Tạo ra một thiết kế sử dụng hàng trăm ngàn cổng mà sử dụng mức cổng thì that sự là một nhiệm vụ cực kỳ khó khăn nếu khơng muốn nói là khơng thể Chính vì vậy một
phương pháp mô tả mới đã được ra đời, đó là VHDL Ban đầu VHDL được thiết
kế như một ngôn ngữ dùng để cung cấp các tài liệu và mơ phỏng Sau đó VHDL đã bao gồm các công cụ tổng hợp để mô tả các thiết kế ở mức thanh ghi (
Register Transfer Level)
Vào năm 1981, một ngôn ngữ mô tả phần cứng đã được đề nghị và được gol la VHSIC Hardware Description Language va ngày nay chúng ta gọi là VHDL
Mục đích của ngơn ngữ mới này bao gồm 2 phần: Đầu tiên người thiết kế muốn có một ngơn ngữ giúp họ có thể vận dụng để mô tả các mạch điện phức tạp, kế
tiếp họ muốn ngôn ngữ đó trở thành một chuẩn để tất cả mọi người là việc
trong chương trình VHSIC có thể phân phối các thiết kế của họ tới những người khác trong một định dạng chuẩn Từ những chương trình con có thể sắp xếp để
tạo thành một chương trình chính với một định dạng chuẩn duy nhất
Trang 18
Chương II Tổng quan về VHDL
Vào năm 1986, VHDL đã để ra một chuẩn gọi là IEEE, chuẩn này đã qua
một số lần thay đổi, sửa chữa và đã được công nhận là chuẩn IEEE 1076 vào
thang 12 nam 1987
I CAC ĐẶC ĐIỂM CHÍNH CỦA NGON NGU VHDL
L1 Đặc tính tổng quát:
VHDL có thể được sử dụng để lập tài liệu thiết kế, thiết kế mức độ cao,
mô phỏng, tổng hợp và kiểm tra phần cứng, nó cho phép mô tả phần cứng từ mức hệ thống tới mức cổng Hỗ trợ tính đồng thời, nghĩa là các hợp phần từ nhỏ đến lớn hoạt động tại mọi thời điểm
L2 Hỗ trợ phân cấp thiết kế:
Khi thiết kế bằng VHDL người thiết kế có thể phân bài toán lớn thành
những bài toán nhỏ hơn sao cho có thể giải quyết và quản lý dễ dàng Đây là đặc tính thiết yếu của ngôn ngữ phần cứng đa cấp, thiết kế chứa một mô tả giao
diện và một số phần độc lập để mô tả hoạt động Hoạt động của hệ thống có thể
được đặc tả dựa trên cấu trúc của của những hợp phần nhỏ hơn của chúng, đặc
tả cấu trúc có thể thực hiện ở tất cả các cấp thiết kế
L3 Có thư viện hỗ trơ:
Ngôn ngữ VHDL cung cấp cơ chế để truy cập tới nhiều thư viện khác nhau, thư
viện không những chỉ chứa đặc tả giao diện thiết kế, mà còn chứa một số đặc tả hoạt động của hệ thống, các đặc tả và các mẫu có thể dựa vào thư viện để sau
khi dịch bởi chương trình dịch Với đặc điểm này người thiết kế có thể tạo ra những thư viên riêng có chứa các thành phần cần cho những thiết kế sau này mà không cần phải thiết kế lại, điều này cho phép người thiết kế rút ngắn thời gian thiết kế và quá trình thiết kế sẽ trở nên đơn giản hơn rất nhiều
L4 — Có lệnh tuần tự:
Khi người thiết kế phân chia hệ thống thành những hợp phần đồng thời
hay những phần con, tiếp đó người thiết kế có thể mơ tả chi tiết hoạt động bên
trong bằng những cấu trúc ngôn ngữ lập trình tuân tự như: case, if- then — else, loop các lệnh tuần tự cung cấp phương pháp đơn giản để tạo ra các hợp phần phần cứng dựa trên chức năng của chúng Với các lệnh tuần tự người thiết kế có
thể mơ tả hệ thống một cách dễ dàng và linh hoạt, ngồi ra cịn giúp cho những
người làm việc chung trong một nhóm có thể dễ dàng hiểu được ý tưởng thiết
kế của nhau để có sự phối hợp tốt hơn
Trang 19
Chương H Tổng quan vé VHDL
L5 Thiết kế tương thích chung:
Để thiết kế tổng quát, ngôn ngữ VHDL cho phép người thiết kế đặt cấu hình mơ tả hợp phần có thơng số chung trong thiết kế, mô tả tương thích chung có thể thay đổi kích thước, đặc tính vật lý, định thời , đặc tính tải, và mơi trường hoạt động của thiết kế
L6 Khai báo kiểu và cách dùng:
Ngôn ngữ VHDL cho phép mô tổ các biến số ở các kiểu như: bịt, boolean, integer, floating point, kiểu liệt kê, kiểu dãy, bản ghi, ngồi ra cịn hỗ
trợ các kiểu do người thiết kế định nghĩa, VHDL cũng cho phép người thiết kế
định nghiã các loại toán tử cho riêng mình để phục vụ cho quá trình thiết kế linh hoạt hơn
L7 Sử dụng chương các trình con:
VHDL cho phép sử dụng các hàm, thủ tục, chương trình con có thể sử dụng để biến đổi kiểu, định nghĩa đơn vị luận lý, định nghĩa lại các toán tử, định
nghĩa toán tử mới, với đặc điểm này ngôn ngữ VHDL sẽ trợ giúp cho người
thiết kế trong việc linh hoạt các thiết kế của mình
I8 Điều khiển định thời:
Một đặc điểm đặc biệt của ngôn ngữ VHDL, là cho phép đặc tả định thời
ở tất cả các cấp, nó cho phép người thiết kế đặt giá trị của tín hiệu với thời gian
giữ chậm, định nghĩa tín hiệu đồng bộ, đặt độ rộng xung, các ràng buộc thời
gian khác người thiết kế có thể căn cứ vào đặc điểm này để định các giá trị
tín hiệu sao cho phù hợp với các thiết kế cho phần cứng
L9 Đặc tả cấu trúc:
Ngôn ngữ VHDL có các cấu trúc để đặc tả phân rã cấu trúc của phần cứng ở tất cả các cấp
Trang 20
Chương II Tổng quan về VHDL
Il CAC CONG CU PHAN MEM HO TRO
Có rất nhiều hãng đầu tư nghiên cứu và ứng dụng ngôn ngữ VHDL để
thiết kế các mạch lập trình được theo nhiều tiêu chuẩn công nghệ Một số
phần mềm của các hãng lớn như:
Exemplar Logic°s Leonardo là một công cụ tổng hợp, tối ưu hóa và phân tích rất linh hoạt và mềm dẻo Nó được sử dụng để thiết kế các vi mạch ASICs, FPGÁ, CPLDs Người thiết kế có thể thực hiện nhiều mức thiết kế
trên một bản thiết kế, lưu trữ và điều chỉnh bằng tay các cấp thiết kế, sử dụng ngôn ngữ mô tả phần cứng để cài đặt thiết kế Leonardo cung cấp một môi
trường thiết kế Top - Down bắt đầu từ VHDL hay Verilog, có khả năng thơng
báo kết quả bằng việc sử dụng tập tin định thời SDF va thu viện mô phỏng
Vital Leonardo được tích hợp đầy đủ môi trường mô phỏng các kiểu công
nghệ Công cụ tổng hợp Exemplar giải quyết các mức tổng hợp tới cổng logic,
tối ưu hóa tốc độ và điện tích, ánh xạ tới một loại công nghệ cụ thể
Snopsys FPGA Express có các chức năng chuyển ngôn ngữ VHDL thành
các khối luận lý Tối ưu hóa các khối đó bằng một phương pháp tối ưu Anh
xạ các cấu trúc luận lý vào thư viện cong nghệ đặc biệt FPGA
Synplify là phần mềm tổng hợp mạch dùng ngôn ngữ VHDL và Verilog
có ưu điểm là rất dễ sử dụng, tốc độ tổng hợp rất nhanh so với các công cụ tổng hợp khác Ngõ ra là sơ đỗ liên kết mức cổng cung cấp cho các công cụ place và route FPGA sử dụng
MAX + PLUS II là phần mềm đa chức năng thực hiện thiết kế tổng hợp
mạch cho một số loại CPLDs và FPGAs của hãng Altera Nó hỗ trợ biên dịch,
mơ phỏng, phân tích, định thời và tổng hợp mạch cho một số thiết bị như:
EPM7128LC84-7, EPF1OK20RC2404
Cypress Semiconductor Warp là chương trình dịch cho thiết kế CPLDs
và FPGAs, Warp nhận đầu vào là tập tin VHDL, nó sẽ tổng hợp và tối ưu
thiết kế để tạo ra phần cứng Warp xuất ra sơ đỗ liên kết QDIF cho việc place và route Công cụ SpDE trong Warp thực hiện tối ưu hóa, sắp xếp và đi dây
cho loai vi mach FPGA Pasic80
Mentor Graphic 14 hang phan mém lớn chuyên cung cấp các công cụ
tổng hợp phức tạp để thiết kế phần cứng cho các loại thiết bị CPLDs và
FPGAs
Trong khuôn khổ đề tài, em tập trung sử dụng phần mền Max+plus II vì
những ưu điểm của nó
Trang 21
Chương II Cấu tạo của một chương trình VHDL
CHƯƠNG II : CAU TAO CUA MOT CHUONG TRINH VHDL
L ENTITY :
Tất cả các thiết kế (design) được biểu diễn ở hình thức ENTITY ENTITY là khối xây dựng cơ bản nhất của một thiết kế Tất cả các thiết kế
được tạo ra bằng cách sử dụng một hoặc nhiều ENTITY ENTITY mô tả Sự giao
tiếp với mơ hình VHDL ENTITY chỉ ra sự giao tiếp với thế giới bên ngoài Nó
chỉ ra các PORT, hướng của PORT
Một ENTITY gồm có 3 phần : ENTITY_NAME; PORTS và các thông
tin liên quan đến ENTITY Xét ví dụ sau :
ENTITY mux IS
PORT (a, b, c, d: INTEGER BIT; SO, sl : IN BIT;
X : OUT BIT);
END mux;
ENTITY là từ khoá chỉ ra sự bắt đầu của một phát biểu ENTITY
ENTITY_name 14 mux; cac PORT 18 a, b, c, d, sO, sl va x
Il ARCHITECTURE :
ARCHITECTURE mô tả chức năng nằm bên dưới của ENTITY và nó chứa các phát biểu trình bày hành vi của ENTITY Một ARCHITECTURE luôn liên hệ với một ENTITY và mô tả hành vi của ENTITY đ Sau đây là một
ARCHITECTURE cho một ENTITY mux ở trên
ARCHITECT
URE dataflow of mux IS
SIGNAL sel : INTEGER; BEGIN
sel <= 0 WHEN s0 = '0' AND s1 ='0' ELSE 1 WHEN sO ='l' AND s1 ='0' ELSE 2 WHEN sO ='0' AND s1 ='1' ELSE
Trang 22
Chương II Cấu tạo của một chương trình VHDL
x<= a AFTER 0.5 NS WHEN sel =0 ELSE b AFTER 0.5 NS WHEN sel =1 ELSE c AFTER 0.5 NS WHEN sel =2 ELSE d AFTER 0.5 NS;
END dataflow;
ARCHITECTURE 1a ti khóa chỉ ra rằng phát biểu ARCHITECTURE là
của một ENTTTY nào đó
Tén cia ARCHITECTURE 1a dataflow
ARCHITECTURE dang mé ta cho ENTITY cé6 tén 14 mux OF mux 14 su kết nối giữa ARCHITECTURE với ENTITY có tên là mux
Cấu trúc của một ARCHITECTURE :
Các ARCHITECTURE ARCHITECTURE _name
khai OF ENTITY _name IS
báo
Các BEGIN
phát
biểu END ARCHITECTURE _name;
Trong phần khai báo ta khai báo các tín hiệu nội bộ và các thành phần cho sử dụng sau này Ví dụ :
ARCHITECTURE dataflow OF mux IS
SIGNAL sel : INTEGER ; khai báo 1 tín hiệu sel
Trang 23
Chương IH Cấu tạo của một chương trình VHDL
H.1 Gán tín hiệu đồng thời (concurrent signal asignment architecture) :
Trong kiến trúc VHDL khơng có thứ tự cho các phép gán Thứ tự thực
hiện độ nhất được chỉ ra bởi các sự kiện trên các tín hiệu mà các phát biểu gán
bị ảnh hưởng Ví dụ :
sel <= 0 WHEN s0 = '0' AND s1I ='0' ELSE 1 WHEN s0 ='1!' AND s1 ='0 ELSE 2 WHEN s0 ='0 AND s1 ='1' ELSE
3;
Sự kiện trên tín hiệu là sự thay đổi giá trị của tín hiệu đó
Một phép gán tín hiệu bị ảnh hưởng bởi sự thay đổi của các tín hiệu nằm bên phải dấu <=
Ở ví dụ trên tín hiệu sel được gán một giá trị phụ thuộc vào giá trị sÖ và s1 Việc gán này xảy ra bất kỳ lúc nào có một sự kiện xảy ra trên s0 hoặc sĨ
Tất cả phát biểu gán khác trong ví dụ này bị ảnh hưởng bởi tín hiệu sel
Kiến trúc gán tín hiệu đồng thời còn gọi là kiến trúc luồng dữ liệu Cấu
trúc luồng đữ liệu nó khơng có cấu trúc, khơng có thành phần làm sẵn trong
kiến trúc
Vấn để gán tín hiệu đồng thời : khi người thiết kế dùng phát biểu gán tín
hiệu gặp phải một vấn để đó là giá trị được gán vào phát biểu sau cùng khơng
xuất hiện tức thì Làm cho hành vi của mơ hình bị lỗi nếu người thiết kế đang
phụ thuôc vào giá trị mới này
Ví dụ :
LIBRARY IEEE;
USE IEEE.Sdt_logic _1164.ALL; ENTITY mux4_la is
Port (10, il, 12, 13, a, b : IN std_logic;
q : out std_logic);
END mux4_la;
Trang 24
Chương II Cấu tạo của một chương trình VHDL
architecture Behavioral of mux4_la is
SIGNAL sel : INTEGER; BEGIN PROCESS (40, il, 12, 13, a, b) BEGIN sel <= 0; IF (a ='1') THEN sel <= sel + 1; END IF; IF (b ='1') THEN sel <= sel + 2; END IF; CASE muxval IS WHEN 0 => gq <=i0 AFTER 10 ns; WHEN 1=> q <=il AFTER 10 ns; WHEN 2 => q <=i2 AFTER 10 ns; WHEN OTHERS => NULL; END CASE; END PROCESS; END Behavioral;
Mô hình này viết cho mux 4:1 Phụ thuộc vào giá trị a, b một trong 4 ngõ vào được đưa đến ngõ ra ARCHITECTURE bắt đầu PROCESS bằng việc khởi
Trang 25
Chương IH Cấu tạo của một chương trình VHDL
tao tín hiệu nội bộ sel = 0; dựa vào giá trị a và b Giá trị 1 hoặc 2 được cộng vào
sel để chọn ngõ vào Phát biểu CASE được chọn bởi giá trị của sel Tuy nhiên
ARCHITECTURE không làm việc đúng vì giá trị của sel không bao giờ được
khởi tạo bởi dòng đầu tiên sel <= 0 cho đến khi PROCESS hoàn tất lần đầu tiên Chúng ta có 2 cách để khắc phục : cách một Chèn một phát biểu wait sau mỗi phép gán tín hiệu tuần tự
LIBRARY IEEE;
USE IEEE.Sdt_logic _1164.ALL;
ENTITY mux4_la is
Port (10, il, i2, 13, a, b : IN std_logic;
q : out std_logic);
END mux4_ la;
architecture Behavioral of mux4_la is
SIGNAL sel : INTEGER; BEGIN
PROCESS (10, il, i2, 13, a, b) BEGIN
sel <= 0;
Trang 26
Chương III Cấu tạo của một chương trinh VHDL
q <=10 AFTER 10 ns; WHEN l=> q <=il AFTER 10 ns; WHEN 2 => q <= 12 AFTER 10 ns; WHEN OTHERS => NULL; END CASE; END PROCESS; END Behavioral;
thay vì dùng tín hiệu ta dùng biến
LIBRARY IEEE;
USE IEEE.Sdt_logic _1164.ALL;
ENTITY mux4_la is
Port (10, il, 12, 13, a, b : IN std_logic;
q : out std_logic);
END mux4_la;
architecture Behavioral of mux4_la is
BEGIN
PROCESS (i0, il, 12, 13, a, b)
VARIABLE sel : INTEGER RANGE 0 TO
3;
Khai bdo 1 bién cho PROCESS BEGIN
Trang 27
Chương II Cấu tạo của một chương trình VHDL
sel := 0; IF (a ='1') THEN sel <= sel + 1; END IF; IF (b ='1') THEN sel <= sel + 2; END IF; CASE muxval IS WHEN 0 => q <=i0 AFTER 10 ns; WHEN l=> q <=il AFTER 10 ns; WHEN 2 => q <= 12 AFTER 10 ns; WHEN OTHERS => NULL; END CASE; END PROCESS; END Behavioral;
Khi sel được khai báo là biến thì việc gán xảy ra tức thì Nên các phát
biểu sau sử dụng giá trị đúng
IL2 Thiết kế cấu trúc (netlist design) :
Một cách khác để viết thiết kế mux ở trên là ta sử dụng các thành phần
con (subcomponent) Mỗi thành phần con thể hiện một thao tác nhỏ hơn của mơ
hình hồn chỉnh Ví dụ :
ARCHITECTURE netlist OF mux IS
Trang 28
Chương II
C,X=>X);
Cấu tạo của một chương trình VHDL COMPONENT andgate
PORT(a, b, c : IN BIT; x : OUT BIT); END COMPONENT;
COMPONENT inverter
PORT(n1 : IN BIT; x : OUT BIT); END COMPONENT;
COMPONENT orgate
PORT (a, b, c, d: IN BIT; x : OUT BIT);
END COMPONENT;
SIGNAL sO_inv, sl_inv, x1, x2, x3, x4: BIT;
BEGIN
U1 : inverter (sO, sO_inv); U2 : inverter (sl, s1_inv);
U3 : andgate (a, sO_inv, s1_inv, x1);
U4 : andgate (b, sO, sl_inv, x2);
U5 : andgate (c, sO_inv, sl, x3);
U6 : andgate (d, sO, sl, x4);
U7: orgate (x2 => b, xl => a, x4 => d, x3 =>
Cách này dùng cho một số thành phần mức cổng (gate-level) để mơ hình
hóa hành vi của thiết bị Mỗi thành phần cổng được khai báo trong phần khai báo ARCHITECTURE Phần này nằm giữa phát biểu ARCHITECTURE và từ
khóa BEGIN
Các tín hiệu cục bộ được dùng để kết nối các thành phần để hình thành
nên mô tả kiến trúc Các tín hiệu này được khai báo sử dụng khai báo SIGNAL
Vùng phát biểu kiến trúc được đặt sau từ khoá BEGIN
Đối với ví dụ trên các phát biểu được đánh nhãn u1 — u7 Phát biểu ul thuyết minh cho thành phần inverter, phát biểu này nối port sO tới ngõ đầu tiên
Trang 29
Chương 1H Cấu tạo của một chương trình VHDL
của thành phần ¡nverter Kết quả là ngõ in1 của inverter được nối đến ngõ s0
cia ENTITY mux và ngõ x được nối với tín hiệu nội bộ s0_inv
Phát biểu lý thuyết minh cho cổng orgate x => x nghĩa là nối ngõ ra x của cổng or với ngõ ra x của ENTITY
IL3 Kiến trúc tuần tự (sequential architecture) :
Cách thứ 3 để mô tả chức năng của ARCHITECTURE đó là dùng phát biểu PROCESS để mô tả chức năng được thể hiện ở dạng thuật toán (
algorithmic ) Xét vi du :
ARCHITECTURE sequential OF mux IS
BEGIN
PROCESS (a, b, c, d, sO, s1)
VARIABLE sel : INTEGER ; BEGIN
IF sO = ‘0’ AND s1 = ‘0’ THEN
Sel := 0;
ELSIF sO = ‘1’ AND s1 = ‘0’ THEN
Sel :=‘V;
ELSIF s0 = ‘0’ AND si = ‘1’ THEN
Trang 30
Chương II Cấu tạo của một chương trình VHDL,
WHEN 2 => X <=C; WHEN OTHERS => X <=d; END CASE END PROCESS; END sequential;
ARCHITECTURE nay chi chifa mét phát biểu được gọi là phát biểu
PROCESS Nó bắt đầu với từ khóa PROCESS và kết htúc ở dòng END
PROCESS; Tat cd các phát biểu giữa 2 dòng này được xem là phần của
PROCESS
Ill Phát biểu PROCESS:
Trong 1 ARCHITECTURE cho một ENTITY tất cả các phát biểu là
đồng thời Như vậy phát biểu tuần tự nằm ở đâu? Có một phát biểu PROCESS nó chỉ chứa các phát biểu tuần tự Bảng thân phát biểu PROCESS là phát biểu đồng thời Một phát biểu PROCESS có thể tổn tại trong một ARCHITECTURE
Một phát biểu PROCESS gồm có 3 phần : danh sách cảm nhận, khai báo
PROCESS và phần phát biểu PROCESS HH.1 Danh sách cảm nhận(sensitivity lis) :
Là một danh sách gồm các tín hiệu được đặt trong dấu ngoặc sau từ khoá
PROCESS Danh sách nàyliệt kê chính xác các tín hiệu mà nó làm cho phát
biểu PROCESS thực thi Chỉ có những sự kiện xảy ra trên các tín hiệu trong danh sách cảm nhận mới làm cho các phát biểu trong PROCESS thực thi
IH.2 Vùng khai báo PROCESS :
Vùng nằm giữa kết thúc danh sách cảm nhận và từ khoá BEGIN khai
báo các biến, hằng, khai báo kiểu, khai báo chương trình con
IH.3 Vùng phát biểu PROCESS:
Trang 31
Chương II Cấu tạo của một chương trình VHDL
Vùng này bắt đầu với từ khóa BEGIN và kết thúc với dòng END
PROCESS Tất cả các phát biểu được bao trong vùng này là các phát biểu tuần
tự ( IF, ELSE, LOOP ) Thứ tự thực thi là thứ tự các phát biểu trong
PROCESS
Ví dụ :
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nand2 is
PORT (a: in std_logic; b : in std_logic; c : out std_logic); END nand2;
ARCHITECTURE behavial of nand2 is BEGIN
PROCESS (a, b) ; Phát biểu
PROCESS với danh sách cảm nhận là
; 2 tín hiệu a, b
VARIABLE temp : std_logic; Khai bao 1
biến temp BEGIN
temp := NOT(a AND b); phat biéu 1
IF (temp ='l') THEN , phát biểu tuần
tự IF
c€ <= temp AFTER 6 ns; ELSIF (temp = '0) THEN
Trang 32
Chương II Cấu tạo của một chương trình VHDL,
c <=temp AFFER 6 ns;
END IF; END PROCESS;
END behavial;
IV Các phát biểu tuần tự trong PROCESS
IV.1 Phat biéu IF :
Phát biểu IF bắt đầu với từ khóa IF và kết thúc với từ khóa END IF, Có 2
mệnh đề tùy chọn trong phát biểu IF : ELSIF và ELSE Mệnh để ELSIF có thể
lập lại nhiều hơn 1 lần, còn mệnh để ELSE thì chỉ có 1 Điểu kiện trong tất cả
các trường hợp là biểu thức Boolean Bất kỳ khi nào giá trị của biểu thức là
đúng thì phát biểu theo sau được thực thi, Nếu khơng có điều kiện đúng thì phát
biểu theo sau mệnh để ELSE được thực thi nếu nó tơn tại
Ví dụ l1 :
IF (X < 10) THEN
A:=b;
END IF;
Phát biểu bắt đầu với từ khóa IF tiếp theo là điều kiện ( X < 10) và theo sau là từ khóa THEN Nếu điều kện là đúng X < 10 thì phát biểu giữa THEN và
END IF được thực thi Trong ví dụ này phát biểu gán a := b được thực thi, nếu X >=l0 thì điều kiện sai Trong ví dụ này khơng có mệnh đề ELSE Vì vậy
khơng có phát biểu được thưc thi, điều khiển được chuyển đến sau END IE
Ví dụ 2 :
IF ( day = sunday) THEN
Weekend := true;
ELSIF (day := Saturday) THEN
Trang 33
Chương III Cấu tạo của một chương trình VHDL,
Trong ví dụ này có 2 biến weekend và weekday Nó được thiết lập phụ
thuộc vào tín hiệu day Weekday = true bất kỳ khi nào day = Sunday hoặc day
= Saturday Ngoài ra biến weekday = true Việc thực thi phát biểu IF được bắt đầu bằng việc kiểm tra xem biến day = cái gì Nếu day = Sunday thì phát biểu theo sau được thi thi và điều khiển được chuyển đến phát biểu sau END IF Nếu điều kiện của IF khơng đúng thì điều kiện được chuyển đến phát biểu ELSIF và
day được kiểm tra cho Saturday Nếu day = Saturday thì phát biểu theo sau
được thực thi và điều khiển được chuyển đến phát biểu sau END IF Cuối cùng
nếu day không bằng Sunday hoặc Saturday thì phát biểu ELSE được thực thi IV.2 Phát biểu CASE :
Phát biểu CASE được dùng bất kỳ khi nào giá trị biểu thức được dùng để
chọn giữa một số các hoạt động Vi dul: CASE instruction IS WHEN load_accum => Accum <= data; WHEN store_accum=> Data_out <= accum; WHEN load/store => Process_IO (addr); WHEN OTHERS => Process_error (instruction); END CASE;
Phát biểu được thực thi phụ thuộc vào giá trị của biểu thức instruction
Nếu giá trị của instruction là một trong các lựa chọn được đưa ra sau WHEN thì
phát biểu của giá trị đó được thực thi Ngồi ra, phát biểu sau mệnh để OTHERS được thực thi Chương trình sẽ bị lỗi nếu khơng có mệnh đề OTHERS,
vì các lựa chọn của chúng ta không bao hàm hết mọi giá trị của 1nstruction
Ví dụ 2:
TYPE vectype IS ARRAY (0 TO 1) OF BIT
Trang 34
Chương II Cấu tạo của một chương trình VHDL
VARIABLE bit_vec : vectype
CASE bit_vec IS WHEN “001 => Return 0; WHEN ‘01’ => Return 1; WHEN ‘10 => Return 2; WHEN ‘11’ => Return 3; END CASE;
Trong ví dụ này phát biểu CASE không cần mệnh để OTHERS vì tất cả
các giá trị có thể của bit_vec đã được đưa ra
IV.3 Phát biểu LOOP :
Phát biểu này được dùng bất kỳ khi nào một thao tác cần được lặp lại
Có kiểu phát biểu LOOP
IV.3.1 Vòng lặp WHILE LOOP :
WHILE condition LOOP : vòng lặp này được thực thi với số lần lặp không biết trước miễn là điều kiện cịn đúng Ví dụ :
WHILE (day- weekday) LOOP
Day: = get- net- day (day);
End LOOP;
Khi vào vòng lặp điều kiện được kiểm tra trước khi vòng lặp được thực thi Nếu điều kiện là đúng, các phát biểu của vòng lặp được thực thi Sau đó
điều khiển được chuyển trở về tại vị trí bắt đầu của vòng lặp Điểu kiện được
Trang 35
Chương II Cấu tạo của một chương trình VHDL
kiểm tra trở lại, nếu đúng vòng lặp lại được thực thi, nếu sai điểu khiển được chuyển tới phát biểu sau mệnh đề End Loop
IV.3.2 Vòng lặp FOR :
Lặp với số lần được xác định FOR identifier IN discrete- range
Ví dụ :
For i IN 1 to 10 Loop i_squared (i) := i*i; End Loop;
Vòng lặp được thực thi 10 lần bắt kỳ khi nào vòng lặp được thực thi Chỉ
số ¡ bắt đầu từ giá trị bên trái nhất của tầm và được tăng dân lên phía biến phải
nhất của tầm _
Một điểm cần lưu ý về phát biểu For Loop là giá trị chỉ số ¡ được khai
báo nội bộ bởi phát biểu FOR Nếu một biến khác cùng tên tổn tại trong Process, Function, Proceddure, thì hai biến này được đối xử như là hai biến tách
biệt nhau và được truy xuất bởi ngữ cảnh
Ví dụ:
Process ()
Begin
X <=I1+l; x là một tính hiệu For i in 1 to a/2 Loop;
q6) := a; q là một biến
END LOOP; End PROCESS ;
Khi ¡ trong danh sách được cảm nhận thay đổi giá trị thì phát biểu x«i+
1 được thực thi Tiếp theo với vòng lặp FOR được thực thi, giá trị chỉ số ¡ không giống với giá trị ¡ được dùng để tính giá trị cho x hai đối tượng này tách biệt
nhau, chúng được truy xuất bởi ngữ cảnh Bên trong vòng lặp LOOP, khi một sự
tham chiếu đến I thì chỉ số nội bộ được lấy lại Nhưng bên ngoài vòng lặp FOR,
khi tham chiếu đến ¡ giá trị của ¡ trong danh sách cảm nhận của PROCESS được
lấy lại
Trang 36
Chương II Cấu tạo của một chương trình VHDL
s* Ghỉ chú: Giá trị được chỉ ra tầm của vòng lặp FOR không cần thiết phải là giá trị INTEGER Tầm này có thể là một tầm riêng biệt bất kỳ Hãy xem một
số ví dụ:
Process (clk)
TYPE day- Of- Week IS (Sun, Mon, Tue, Wed, Thur, Fri, Sat); Begin
FOR 1 IN day- of- week Loop
IF [= Sat THEN
Sun <mov- lawn;
ELSIF i= Sun THEN Church <= family; ELSE
Dad < go to- work;
END IF;
End Loop;
END Process;
Khoảng của tầm được chỉ ra là kiểu Bằng việc chỉ ra kiểu như là tầm,
trình biên dịch xác định rằng giá trị bên trái nhất là Sun và giá trị bên phải nhất là sat Do đó tầm xác định là Sun to Sat
Chúng ta có thể tạo một tầm giảm dần bằng mệnh để Downto
Ví dụ:
Process (x,y)
Begin
For i IN x downto Y Loop
D()= w(i);
| End Loop;
End Process;
Trang 37
Chương IH Cấu tạo của một chương trình VHDL
Với x, y khác nhau ta có một tầm khác nhau
IV.4 Phat biéu wait:
Phát biểu wait cho phép người thiết kế khả năng treo (suspend) việc thực
thi tuần tự của PROCESS hoặc một Subprogram Điều kiện để khôi phục việc
thực thi PROCESS hoặc subprogram bị treo có thể chỉ ra bởi ba cách khác nhau
Wait On signal Changes
Wait Until an expression is true Wait for a specfic amount of time
Phát biểu wait được dùng cho một số các mục đích khác nhau, vệc sử
dụng phổ biến nhất ngày nay là chỉ ra các ngõ vào clock cho Synthesis tool
Phát biểu wait chỉ ra clock cho một phát biểu process mà nó được đọc bởi synthesis tool để tạo ra logic tuần tự chẳng hạn như thanh ghi hay Flip- Flop Các sử dụng khác là làm trễ việc thực thi process mét khỏang thời gian hoặc để chỉnh sửa động danh sách cảm nhận của PROCESS
Sau đây là phát biểu của process với một phát biểu wait được dùng để tạo logic
tuần tự
PROCESS Begin
Wait untill Clock= ‘1’ and clock Event;
q <d;
End process;
PROCESS nay dudc dùng để tạo một FF mà nó đưa giá trị của d ra q khi
ngõ vào clock có một cạnh lên Thuộc tính EVENT được buộc với ngõ vào
clock có một sự kiện trong suốt delta timepoint hiện tại Việc kết hợp nhìn vào giá trị 1 và 1 sự thay đổi trên clock tạo ra một chức năng cân thiết để nhìn vào
cạnh lên của ngõ vào clock Kết quả là PROCESS bị treo tại phát biểu wait cho
đến khi clock có một cạnh lên thì giá trị hiện tại của d được gán cho q
Để một FF có ngõ vào không đồng bộ reset cho FF trên ta có thể làm như sau :
PROCESS
Trang 38
Chương HI Cấu tạo của một chương trình VHDL
Begin
Wait until clock= ‘1’ and clock EVENT;
IF (reset= ‘1’) THEN
qed END IF;
END process;
Khi clock xảy ra, tín hiệu reset được kiểm tra đầu tiên, nếu nó tích Cực
thì “o' được gán cho q ngoài ra ngõ vào q được gán= d Một FF có ngõ vào reset như sau :
PROCESS BEGIN
IF (reset= ‘1’) THEN
q=’0’
ELSIF clock Event and clock = ‘1’ THEN
qed END IF;
wait on reset, clock
END PROCESS;
Phát biểu process chứa một phát biểu wait on, làm cho process treo viéc
thực thi cho đến khi một sự kiện xảy ra trên ngõ vào reset hoặc clock, phát biểu
LF sau đó được thực thi và nếu reset tinh cuc, FF bi reset vé ‘o’ ngoai ra clock
được kiểm tra cạnh lên thì nó chuyển ngõ vaò d sang ngõ ra q
Phát biểu wait cũng được dùng để điều khiển các tín hiệu một process
Trang 39Chương IH Cấu tạo của một chương trình VHDL,
Wait ON b; 2
End process;
Việc thực thi các phát biểu trong phát biểu PROCESS tiếp tục cho đến điểm 1, phát biểu wait làm cho process treo việc thực thi tại điểm này Process
không tiếp tục thực thi cho đến khi một sự kiện xảy kiện xảy ra trên tín hiệu a
Do đó process bị ảnh hưởng bởi sự thay đổi trong tín hiệu a Khi có một sự kiện
xảy ra trên tín hiệu a, việc thực thi bắt đầu trở lại tại phát biểu ngay sau phát biểu wit tại điểm 1 Việc thực thi tiếp tục cho đến khi bắt gặp phát biểu wait tại
điểm 2 Một lần nữa, việc thực thi bị treo, bà PROCESS bây giờ bị ảnh hưởng
bởi tín hiệu b Do đó, bằng việc thêm vào 2 phát biểu wait, chúng ta có thể thay đổi danh sách cảm nhận của PROCESS một cách linh động
Ta có 3 lựa chọn cho phát biểu wait : Wait on signal, wait until expression, wait for time expression
IV.4.1.Wait on signal [, signal] :
Loại nay chỉ ra 1 danh sách các tín hiệu mà phát biểu wait sẽ đợi sự
kiện trên chúng Nếu có bất kỳ sự kiện nào xảy ra trên danh sách tín hiệu này
thì việc thực thi tiếp tục với phát biểu theo sau phát biểu wait
WAITT ON a, b; Khi có sự kiện xảy ra trên a hoặc b, PROCESS bắt đầu
lại việc thực thi với phát biểu sau phát biểu wait
IV.4.2 Wait untill expression :
Mệnh để này treo việc thực thi PROCESS cho đến khi biểu thức trả về
giá trị đúng Phát biểu này tạo ra một danh sách cảm nhận các tín hiệu ẩn tàng
được sử dụng qua các biểu thức Khi có bất kỳ tín hiệu nào trong biểu thức xây
ra sự kiện, biểu thức được định giá Khi biểu thức trả về một giá trị đúng, việc
thực thi tiếp tục với phát biểu theo sau phát biểu wait, nhoài ra PROCESS tiếp
tục bị treo
Trang 40
Chương IH Cấu tạo của một chương trình VHDL
|
WAIT UNTIL ((x*10) < 100); Khi gid tri của x lớn hơn hoặc bằng 10 thì
PROCESS vẫn cịn bị treo, cho đến khi x < 10 thì PROCESS được thực thi tại
phát biểu sau phát biểu wait
IV.4.3.Wait for time expression :
Ménh dé WAIT FOR time — expression treo việc thực thi PROCESS trong một khoảng thời gian được chỉ ra trong biểu thức thời gian Sau khoảng thời gian được chỉ ra trong biểu thức trôi qua, việc thực thi được tiếp tục ở phát
biểu theo sau phát biểu wait Ví dụ :
WAIT FOR 10ns; PROCESS bi treo 10ns Sau 10 ns viéc thuc thi tiếp
;tục ở phát biểu sau WAIT
WAITT FOR (a*(b+c)); Biểu thức thời gian trước hết phải được tính toán
để trả về 1 giá trị thời gian, sau khi giá trị này được tính, phát biểu sử dụng giá
trị này là khoảng thời gian phải chờ
Multiple WAIT condition: ching ta có thể ding | phát biểu WAITT với
nhiều điều kiện
Ví dụ :
WAIT ON nmi, interrupt UNTILL (nmi = TRUE) or (interrupt = TRUE)
FOR 5 Hs ; Chỉ khi có sự kiện xảy ra trén nmi, 1ntrrupt hoặc nmi = true hoặc
interrupt = true hoặc 5 Hs trơi qua thì phát biểu sau WAIT mới được thực thi
Trong một phát biểu WAIT dùng với nhiều điểu kiện thì phải đảm bảo rằng ít nhất một trong các giá trị của biểu thức phải là tín hiệu để đảm bảo rằng
lên WAIT khong bi chd mai mii
Vidu:
WAIT UNTILL interrupt = true) OR (old_clk = ‘1’);
WAIT time_out : Có 1 số trường hợp , ta không biết chắc rằng điều kiện của phát biểu wait có thể được đáp ứng hay không Để tránh phát biểu wait chờ
mãi mãi ta thêm vào mệnh để time_out Mện để này cho phép việc thực thi
được tiếp tục sau khoảng thời gian time_out bất chấp điều kiện có được đáp ứng
hay khơng
Ví dụ :