Thứ tự thực thi được: chỉ ra bởi các sự kiện xuất hiện hay xảy ra trên các tín hiệu mà các phát biểu gán bị ảnh hướng.. Mỗi khi một tín hiệu trong đanh sách độ nhạy của một phát biểu gán
Trang 1
ll ĐÀNH CHO | ‘CHO TINH
- CLI Siiri VIÊN
Xin vui long:
Chas ming ban dé dén bi
the diện của ching téé
Không xé sách
Không gạch, viết, vẽ lên sách
Trang 3
LOI NOI DAU 3 Bae
LOI MG BAU
Quyển sách nay bao gồm 4 chương và 2 phụ lục, là tập 2 của bộ sách có tên chung là “NGUYÊN LÝ MẠCH
TÍCH HỢP SỐ” Tập 1 với tựa để “ASIC lập trình được” bao gồm các chương từ 1 đến 8; cuối tập 1 là 8 phụ lục Năm trong số 8 phụ lục này liên quan đến các chip FPGA và CPLD cụ thể, được mô tả chỉ tiết đựa theo các tài liệu kỹ thuật của các nhà cung cấp ASIC là Altera và Xilinx Ba phụ lục còn lại hướng dẫn cách sử dụng MAX+PLUS II (dành cho những bạn đọc bắt đầu làm quen với hệ CAD này) với các thí dụ về hệ tổ hợp, hệ tuần tự và máy trạng thái Nội dung tập 1 chủ yếu tập trung vào việc mô tá tổng quát một ASIC, cdc cell logic va thư viện celí logic sử đụng trong
việc thiết kế một ASIO, đông thời mô tả chỉ tiết cấu trúc của các ASIO lập trình duge (CPLD, FPGA)
Theo lời mở đầu trong tập 1, tập 2 với tựa để “Lập trình ASIC” sẽ bao gồm các chương từ 9 đến 17 và 4 phụ lục,
dự kiến sẽ trình bày phẩn thiết kế logic và thiết kế vật ly, cho cde ASIC cing với các ngôn ngữ mô tả phần cứng (VHDL va Verilog HDL) Tuy phiên do nhu cẩu sử dụng VHDL vào thiết kế hệ thống số, nội dung tập 2 này có thay đổi so với dự kiến, bao gồm 4 chương và 2 phụ lục như sau:
Chương 9 đề cập đến việc học ngôn ngữ mô tá phần cứng VHDL qua các thí dụ Nội dung chương 9 trình bày một cách có hệ thống tất cả các vấn để từ cơ bản đến nâng cao của VHDL Nội dung này nhằm giúp bạn đọc có thể tự học VHDL dé ứng dụng trong việc thiết kế các hệ thống số Trong khi đọc chương 9 này, bạn đọc nên tham kháo thêm các
tai ligu vé chudn IEEE 1076-1987, IEEE 1076-1993 cho VHDL Cac tai ligu nay đễ dàng tìm thấy trên mạng Internet
Chương 10 cung cấp các kiến thức nhằm giúp bạn đọc có thể thiết kế được các bộ ví xử lý chuyên đụng được sử dụng nhiều trong các thiết bị công nghiệp cũng như đân dụng Ghương 10 này cũng để cập đến việc thiết kế các bộ vi
xử lý đa năng được sử đụng trong các hệ vi xử lý, hệ vi điều khiển Nội dung chương 10 bao gồm các mạch số từ đơn giản đến phức tạp, từ hệ tổ hợp đến hệ tuần tự và máy trạng thái Đường dữ liệu và khối điều khiển cho các bộ vi xử
lý chuyên đụng và đa năng được phân tích và thiết kế một cách chí tiết, từ phương pháp thủ công đến việc tổng hợp bằng VHDL
Chương 11 là một thí dụ điển hình của việc thiết kế các hệ điều khiển sử đụng ngôn ngữ mô tá phần cứng VHDL
Mô hình điều khiển các xe lửa điện được mô tả và thiết kế chỉ tiết
Chương 12 là một thí dụ đơn giản cho loại bộ vi xử lý theo công nghệ RISC, máy tính có tập lệnh được thu gọn Bạn đọc qua chương 12 này sẽ hình dung được phần nào cách thiết kế một bộ vi xử lý theo công nghệ RISC và kỹ thuật đường ống được sử dựng rộng rãi hiện nảy
Phụ lục 9 cưng cấp các gói chuẩn ela VHDL
Phụ lục 10 mô tá các bổ sung và sửa đổi của chuẩn IBEE 1076-1993 cho VHDL (VHDL98) so với chuẩn IEEE 1076-1987 (VHDL87) ,
Như vậy nội dung tập 2 chi mới bao gồm phần thiết kế logic Người biên soạn dự định sẽ hoàn tất bộ sách này bằng tập 3 với nội dung thiết kế vật lý một ASIC, trong đó có cá ASIC nhúng
Nội dung quyển sách này được biên soạn từ các quyển sách và các tài liệu sau:
1 Quyển “Applieation-Bpecific Integrated Circuits” của Michael John Sebastian Smith, xuất bản năm 1998
3 Quyển “Microprocessor Design: Principles and Practices With VHDL” của Enoch O Hwang, xuất bản năm 2004
3 Quyển “VHDL: Programming by Exaraple” của Douglas L Perzy, xuất bản lần thứ 4 năm 2002
4 Quyén “Rapid Prototyping of Digital Systems” cia James O HamBlen and Michael D Furman xuất bản năm 2001
5 Các tài liệu đặc tính kỹ thuật của Xilinx Corporation
6 Các tài liệu đặc tinh ky thugt cia Altera Corporation, các kìt UP1 và kit UP2
Đối tượng của quyển sách này là các sinh viên thuộc các chuyên ngành điện, điện tử, viễn thông, công nghệ thông tin của các trường đại học và cao đẳng
Riến thức cần có để đọc quyển sách này bao gồm: mạch số, vi xử Ìý, một ngôn ngữ lập trình của máy tính,
Rất mong nội dung của quyển sách sẽ mang lại nhiễu tiện lợi cho người đọc trong nghiên cứu và học tập Chúc các bạn thành công và mong nhận được những ý kiến đóng góp, phê bình cho những sai sót còn tổn tại
TP Hồ Chí Minh, tháng 06 năm 2005
ME.PUB
mk.pub@minhkhai.com.vn www.minhkhai.com.vn
Trang 4Khẩu biệu của chúng tôi là:
* Lao động khoa học nghiêm túc
* Chất lượng và ngày càng chất lượng hơn
* Tất cả vì Bạn đọc
Rất nhiễu Bạn đọc đã gửi mai! cho chúng tôi đóng góp nhiều ý kiến quý báu cho tủ sách
Ban xuất bản MK.PUB xin được kính mời quý Bạn đọc tham gia cùng nâng cao chất lượng tủ sách của chúng ta
Trong quá trình đọc, xin các Bạn ghi chú lại các sai sót (dù nhỏ, lớn) của cuốn sách hoặc các nhận xét của riêng
Bạn Sau đó xin gửi về dia chi:
E-mail: mk.book@minhkhai.com.vn - mà,pub@minhkhai,com.on
Hoặc gửi về: Nhà sách Minh Khai
249 Nguyễn Thị Minh Khai, Q.1, Tp Hẻ Chí Minh Nếu Bạn ghỉ chú trực tiếp lên cuốn sách, rồi gửi cuốn sách đó cho chúng tôi thì chúng tôi sẽ xin hoàn lại cước phí bưu điện và gởi lại cho Bạn cuốn sách khác
Chúng tôi xin gửi tặng một cuốn sách của tủ sách MK,PUB tùy chọn lựa của Bạn theo một đanh raục thích hợp sẽ
được gửi tới Bạn
Với mục đích ngày càng nâng cao chất lượng của tủ sách MK.PUB, chúng tôi rất mong nhận được sự hợp tác của quý Bạn đọc gần xa
“MK.PUB uà Bạn đọc cùng làm !"
ME.PUB
Trang 59.1.7 Lua chon biến trút
9.1.8 Phái biểu cấu hình
9.3.3 Phat bidu IF
9.3.4 Phái biểu CASE
8.3.5 Phái biểu LOOP
9.3.6 Phat biéu EXIT
9.3.7 Phat biéu ASSERT
9.3.8 Phat bidu WAIT
9.6 Thuộc tính tiền định nghĩa
Trang 69.6.3 Thude tinh logi tin hit
9.6.4 Thuộc tính loại biết
9.6.6 Thuộc tính loại tâm
ò 102 -Ö- 103
9.7.4 GENERIC trong các cẩu hình
9.7.7 Tuong déng bo mach-dé cdm-chip
111
9.7.8 Cấu hình khối
Ö Ê18 9.7.9 Cấu hình kiến trúc
133
134
140
140 -ÖÒ 141
142
144 -°Ö- 144
145 - 146
9.10.1 Cổng đơn giản — Phép gan
9.10.2 Phát biểu điều khiển luéng IF
9.10.3 Phát biểu điều khiển luéng CASE
9.10.4 Phát biểu tuần tự đơn giản
9.10.5 Xóa không đông bộ
9.10.6 Đặt trước uà xóa không đông bộ
9.10.7 Phát biểu tuân tự phức tạp hơn
9.10.8 Thi dy may trang thdi
9.11 Luéng thiết kế mức cao
189 9.11.5 Mô phỏng định thời sau layout
160 9.11.6 Dink thời tĩnh
Trang 7
10.1.2 Các mức trừu tượng của thiế
10.1.3 Các thí dụ của mạch ghép kênh 2-ngõ uào
10.1.4 VHDIL
10.1.6 Tổng hợp
19.3 Một số thí đụ ôn tập VHDL
10.8.1 Đoạn mã VHDL cho cổng NAND 2-ngõ uùào
10.3.2 Đoạn mã VHDL cho cổng NOR 3-ngõ uòo
10.2.3 Doan m& VHDL cho mét ham
10.8 đoạn mã VHDL cho mạch tổ hợp
10.3.1 Mạch giải mã BCD sang 7-đoạn ở mức cấu trúc
10.3.2 Mạch giải mã BCD sang 7-đoạn ở mức luông dữ liệu
40.3.3 Mach giải mã BCD sang 7-doan ở mức hành uì
10.4 Các thành phần tổ hợp
10.4.1 Các qui ước định rõ tín hiệu
10.4.2 Mạch cộng
10.4.8 Mach tr
10.4.4 Két hop mach c6ng/mach tri
10.4.5 Đơn uị số học logic ALD
10.5.2 VHDL cho mach chét va infor
10.8.3 Cae loai flipflop
10.7.1 Đường đã liệu tổng quát
10.7.2 Sử dụng đường dữ liệu tổng quát
10.7.3 Các uấn đề định thời
10.7.4 Đường đã liệu phúc tạp hơn
10.7.6 VHDL cho đường đữ liệu phúc tạp
10.7.6 Duong di liệu chuyên dụng
10.7.7 Sử dụng đường đã liệu chuyên dụng
Trang 8
Tap 2: Lap trình ASIC
10.7.8 Thi dụ thiết kế đường dữ liệu chuyên dụng
10.7.9 VHDL cho đường dữ liệu chuyên dụng
10.8 Đơn vị điều khiến
10.8.1 Mô hình FSM
10.8.2 Phân tích mạch tuân tự
10.8.3 Tổng hợp mạch tuân tự
10.8.4 Biéu dé ASM va bang trang th
10.8.5 VHDL cho cde mach tudn tu
10.8.6 Tối tụ hóa mạch tuần tự
10.9 Bộ vị xử lý chuyên dụng =
10.9.1 Xây dựng thủ công bộ uì xử Đụ chuyên dụng
10.9.2 Mé hinh FSM + D sit dung VHDL
11 ĐIỀU KHIỂN XE LỬA ĐIỆN
11.1 Bài toán điều khiển xe lửa
11.2 Cấp điện đường ray
11.3 Chiểu đường ray
11.4 Hướng chuyển mạch
11.5 Các tín hiệu của thiết bị cảm biến xe lửa
11.6 Một mạch điều khiển thí dụ
11.7 Đoạn mã VHDL cho thiết kế mạch điều khiển thí đụ
11.8 Tập tin vector mô phổng để mô phỏng máy trạng thái
11.8 Chạy mé phéng mach diéu khiển xe lửa
11.10 Chạy hệ thống xe lửa ảo (sau khi mô phỏng thành công)
12 THIET KE RISC: TONG HOP LOI Box XỬ LÝ MIPS
12.1 Tập lệnh của MIPS và bộ xử ] oa
12.2 Sit dung VHDL dé tổng hợp lõi bộ xứ lý MIPS
12.4 Đơn vị điều khiển
12.5 Tang tim nap lénh
PHY LUC 9 CAC GOI LOGIC CHUAN
PHU LUC 10 THONG TIN MGI CUA VHDL 93
Trang 9
1987 là VHDL được sử dụng trong chương này Phụ lục 10 sẽ mô tả tóm tắt chuẩn IEEE 1076-1993 Tất cả các thí dụ
được mô tả trong VHDL IEEE 1076
9.1.1 Các thuật ngữ của VHDL
Trước tiên ta hãy định nghĩa một số thuật ngữ được sử dụng trong chương này Đây là các khối xây dựng sẩn (building block) cơ bản của VHDI, được sử dụng trong hầu hết các mô tả cùng với một số thuật ngữ được định nghĩa lại
trong VHDL, có ý nghĩa khác đối với người thiết kế
Thực thể: Tất cả các thiết kế đều được biểu din đưới dạng các thực thể (entity) Một thực thể là một khối xây dựng sẵn cơ bản nhất trong một thiết kế Mức cao nhất của thiết kế là thực thể mức đỉnh (top-level entity) Nếu thiết
kế có thứ bậc, mô tả mức đỉnh (top-level đescription) sẽ có các mô tả mức thấp hơn chứa bên trong Những mô tả mức thấp hơn này sẽ là các thực thể mức thấp hơn chứa trong mô tả thực thể mức đính
Kiến trúc: Tất cả các thực thể có thể được mô phỏng đều có một mô tả kiến trúc Kiến trúc (architecture) mô tả hành vi của thực thể Một thực thể đơn có thể có nhiều kiến trúc Một kiến trúc có thể ở mức bành vi (behavioral) trong khi một kiến trúc khác có thể là rô tả ở mức cấu trúc (structural description) của thiết kế
Cấu hình: Một phát biểu cấu hình (configuration statement) duge sử dụng để làm kết một thể hiện thành phần (component instance) với một cặp thực thể-kiến trúc Một cấu hình có thể được khảo sát giống như một danh sách các
- phần (parts list) của một thiết kế Cấu hình mô tả hành vi nào sử dụng cho mỗi thực thể, giống như đanh sách các phần mô tả phần nào sử dụng cho mỗi phần trong thiết kế
Gói: Một gói (package) là một tập các chường trình con (subprogram) và các kiểu dữ liệu (data type) phổ biến được
sử dụng trong một thiết kế Ta hãy nghĩ một gói như là một hộp công cụ chứa nhiều công cụ được sử đụng để xây dựng các thiết kế,
Driver: Đây là một nguồn trên một tín hiệu Nếu một tín hiệu được kích bởi hai nguồn, khi cả hai nguồn đều tích cực, tín hiệu này sẽ có hai driver (Driver có thể được hiểu là mạch kích hay trình kích)
Bus: Bus là thuật ngữ thường làm ta nghĩ đến một nhóm các tín hiệu hoặc một phương pháp truyền thông cy thé được sử đụng trong thiết kế phần cứng Trong VHDL, một bus là một loại tín hiệu đặc biệt có thể có các đriver của mình ở trạng thái tắt
Thuộc tính: Thuộc tính (attribute) là đữ liệu được gắn cho các đối tượng (object) hoặc dữ liệu tiên định nghĩa
(predefined đata) liên quan đến các đối tượng trong VHDL Các thí dụ là khả năng kích dòng của một mạch đệm hoặc nhiệt độ hoạt động cực đại của linh kiện
Generic: Generic là thuật ngữ của VHDL dùng cho một thông số, thông số này chuyển thông tin đến một thực thể Thí dụ, nếu một thực thể là một mô hình ớ mức cổng (gate-level model) có trì hoãn tăng (rise delay) va trì hoãn giảm (fall delay), các giá trị (hay trị số) (value) của các trì hoãn tăng và giảm này có thể được chuyển vào trong thực thể bằng các generic
Quá trình: Một quá trình (process) là một đơn vị thực thi co ban trong VHDL Tat cA các thao tác được thực hiện trong khi mô phỏng một mô tả VHDL đều được chia nhỏ trong một hoặc nhiều quá trình
Trang 10thiết kế thứ cấp Một thiết kế điển hình thường chứa một hoặc nhiều thư viện các đơn vị thiết kế
9.1.2 Thực thể
Một thực thể VHDL chỉ rõ tên của thực thể, các port của thực thể và thông tin liên quan đến thực thể Mọi thiết
kế đều được tạo ra bằng cách sử dụng một hoặc nhiều thực thể
“Ta hãy xem qua một thí đụ đơn gián của thực thé:
Tên của thực thể trên là mu Thực thể có 7 port trong mệnh để PORT trong đó 6 port ở chế độ IN và 1 port ở chế
độ OUT 4 port ngõ vào đữ liệu (hay port nhập đữ liệu) có kiểu BIT Hai ngõ vào chọn lựa của mạch ghép kênh sỐ và s1 cũng có kiểu BIT Port ngé ra (hay port xuất) có kiểu BIT
Thực thể trên mô tả giao điện với thế giới bên ngoài Thực thể chỉ ra số port, hướng của các pórt và kiểu của các port Nhiều thông tin hơn nữa có thể được đặt vào bên trong thực thể nhưng thực thể này cho ta nên tảng, nhờ vào đó
ta có thể xây dựng các thí dụ phức tạp hơn
9.1.3 Kiến trúc
Thực thể mô tả giao diện cho mô hình VHDL Kiến trúc mô tả chức năng cơ bản của thực thể và chứa các phát biểu mô hình hành vi của thực thể Một kiến trúc luôn luôn liên kết với một thực thể và mô tả hành vi của thực thể
đó Một kiến trúc của một mạch chọn kênh được mô tả khá sớm ở đây như sau:
select <= 0 WHEN a0 = ‘0’ AND 1 = ‘0’ ELSE d AFTER 0.5 NS;
1 WHEN s0 = ‘1!’ AND s1 = ‘0’ ELSE END dataflow;
2 WHEN s0 = ‘0’ AND si = ‘1’ ELSE
Tu khéa ARCHITECTURE cé nghĩa là phát biểu này mô tả một kiến trúc của một thực thể Tên của kiến trúc này
la dataflow Thyc thé ma kign trúc đang mnô tả có tên là muz
Lý do cho kết nối giữa kiến trúc và thực thể là một thực thể có thể có nhiều kiến trúc mô tả hành vi của thực thể Thí dụ một kiến trúc có thể là mô tả ở mức hành vi (behavioral đeseription) và kiến trúc khác có thể là mô tả ở mức
cấu trúc (struetural đescription)
Miễn ở giữa từ khóa ARCHITECTURE và từ khóa BEGIN là miễn mà các tín hiệu cục bộ (local signal) và các thành phần (component) được khai báo để sử dụng sau nay Trong thí dụ này tín hiệu se/ec£ được khai báo là tín hiệu
cục bộ.
Trang 11Chương 9: VHDL
Miễn phát biểu của kiến trúc bắt đầu bằng từ khóa BEGIN Tất cả các phát biểu ở giữa BEGIN va END dataflow
được gọi là các phát biểu đồng thời (concurrent statement) do tất cả các phát biểu này được thực thi đồng thời
9.1.4 Phép gán tín hiệu đồng thời
“Trong một ngôn ngữ lập trình chẳng hạn như C hoặc ++, mỗi phát biểu gán thực thi một lần theo sau phát biểu gán khác và theo thứ tự được chỉ ra Thứ tự thực thi được xác định bởi thứ tự của các phát biểu trong tập tin nguồn Bên trong một kiến trúc VHDL, không có sự sắp xếp thứ tự nào cho các phát biểu gán Thứ tự thực thi được: chỉ ra bởi các sự kiện xuất hiện (hay xảy ra) trên các tín hiệu mà các phát biểu gán bị ảnh hướng
Ta hãy khảo sát phát biếu gán thứ nhất từ kién tric dataflow nhu được trình bày dưới đây:
select <= 0 WHEN s0 = ‘0’ AND 61 = ‘0’ ELSE
1 WHEN s0 = ‘1’ AND a1 = (’ ELSE
2 WHEN s0 = ‘0’ AND 1 = ‘1’ ELSE
3;
Phép gán tín hiệu được nhận biết bởi ký hiệu <= Tín hiệu select sẽ nhận một giá trị bằng số gán cho mình đựa
trên các giá trị của s0 và s7 Phát biểu này được thực thi mỗi khi tín hiệu s0 hoặc tín hiệu s7 có một sự kiện xuất
hiện Một sự kiện trên một tín hiệu là sự thay đổi giá trị của tín hiệu này, Phát biểu gán tín hiệu được nói rằng bị ảnh hướng bởi các thay đổi trên tín hiệu nào đó khi tín hiệu này ở bên phải của ký hiệu <= Phát biểu gán tín hiệu
này bị ảnh hưởng bởi s0 và s7 Phát biểu gán khác trong kiến trúc đafa/flow chịu ánh hưởng của tín hiệu select
'Ta hãy khảo sát xem các phát biểu này thực sự hoạt động ra sao Giả sứ rằng ta có điều kiện thường trực trong đó
cả s0 lẫn sĩ đều có giá trị là 0 và các tín hiệu a, b, c và ở hiện tại có giá trị là 0 Tín`hiệu z sẽ có giá trị 0 do tín hiệu
này được gần giá trị của tín hiệu ø mỗi khi các tín hiệu s7 và s0 đều bằng 0 Lúc này giả định rằng ta gây ra một sự
kiện trên tín hiệu a, thay đổi giá trị của a thành 1 Khi điểu này xảy ra, phát biểu gán tín hiệu đầu tiên sẽ không thực thi do phép gán này không bị ảnh hưởng bởi các thay đổi của tín hiệu ø Điểu này xảy ra do tín hiệu ø không ở bên phải của toán tử Phát biểu gán tín hiệu thứ hai sẽ thực thi đo phát biểu này bị ảnh hưởng bởi các sự kiện trên tín hiệu a Khi phát biểu gán thứ hai thực thi, giá trị mới của œ sẽ được gán cho tín hiệu + Port ngõ ra z lúc này sẽ thay
đổi thành 1
Bay gid ta hãy khảo sát trường hợp tín hiệu z0 thay đổi trị số Giá định rằng s1 và s0 đều bằng 0 va cdc port a, Ö,
e và ở có các giá trị 0, 1, 0, 1 theo thứ tự Lúc này ta thay đổi giá trị của port s0 từ 0 thành 1 Phép gán tín hiệu đầu
tiên bị ảnh hưởng bởi tín hiệu sỞ nên sẽ thực thi Khi các phát biểu đẳng thời thực thị, việc tính toán giá trị của biểu
thức sẽ sử dụng các giá trị hiện tại của tất cả các tín hiệu chứa trong biểu thức
Khi phát biểu đầu tiên thực thi, phát biểu tính giá trị mới được gán cho select ti giá trị hiện tại của biểu thức tín
hiệu ở bên phải của ký hiệu <= Việc tính giá trị của biểu thức sử dụng các giá trị hiện tại của tất cả các tín hiệu chứa
trong biểu thức
Với giá trị của s0 là 1 và giá trị của s7 là 0, tín hiệu select sẽ nhận giá trị mới là 1 Giá trị mới này của tín hiệu
select sẽ gây ra một sự kiện xuất hiện trên tin hiéu select lam cho phát biểu gán tín hiệu thứ hai thực thi Phát biểu nay sẽ aử đụng giá trị mới của tín hiệu seiect để gán giá trị của port 6 cho port x Phép gán mới sẽ lam cho port x thay
Phát biểu gán thứ nhất là phát biểu duy nhất thực thi khi các sự kiện xuất hiện trên các port s7 và s0 Phát biểu
gán tín hiệu thứ hai không thực thi trừ khi một sự kiện trên tín hiệu select xảy ra hoặc một sự kiện xáy ra trên các
port a, b, ¢, d
Hai phát biểu gán tín hiệu trong kiến trúc dataflow tao thành một mô hình hành vi (behavioral model) hoặc kiến
trúc của thực thd mux Kiến trúc đa‡offoo không chứa cấu trúc nào Không có thành phần nào được thể hiện trong kiến trúc Ta cũng không có một hệ thống thứ bậc nào và kiến trúc này có thể được xem như một nút lá trong hộ thống thứ bậc của thiết kế
Trang 12Mật phương pháp khác để viết thiét ké mux la thể hiện các thành phần con thực hiện các thao tác nhỏ hơn của
mô hình hoàn chỉnh Với mô hình đơn giản như mạch ghép kênh 4-ngõ vào mà ta đang sử dụng, mô tả đơn giản ở mức cổng (simple gate-level description) có thể được tạo ra để trình bày cách thức các thành phần được mô tả và được thể hiện Riến trúc được trình bày dưới đây là mô tả ở mức cấu trúc (structural đeseription) của thực thé mux:
ARCHITECTURE netlist OF mux IS SIGNAL s0_inv, si_inv, x1, x2, x3, x4 : BIT;
COMPONENT andgate BEGIN
PORT(a, b, ¢ : IN bit; ¢ : OUT BIT); U1 : inverter(s0, s0_inv);
END COMPONENT; U2 : inverter(s1, sỈ_inv);
COMPONENT inverter U3 : andgate(a, sO_inv, sl_inv, x1);
PORTGn1 : IN BIT; x : OUT BIT); U4 : andgate(b, s0, s1_inv, x2);
END COMPONENT; US : andgate(e, s0_inv, s1, x3);
COMPONENT orgate U6 : andgate(d, s0, s1, x4);
PORT(a, b, c, d : IN bit; x : OUT BIT); UT : orgate(x2 => b, x1 => a, x4 => d, x3 => c, x => x); END COMPONENT; END netlist;
Mô tả này sử dụng một số thành phần mức thấp hơn để mô hình hành vi của mạch mu Có một thành phần inverter, mot thanh phan andgate và một thành phần orgofe Mỗi thành phần trong các thành phần này được khai báo trong phẩn khai báo kiến trúc (architecture đeclaration seetion), phẩn này ở giữa phát biểu kiến trúc
(ARCHITECTURE) va tit khéa BEGIN
Một số tín hiệu cục bộ được sử dụng để nối mỗi thành phần của các thành phần này nhằm tạo thành mô tả kiến
trúc Các tín hiệu cục bộ này được khai báo bằng cách sử dụng khai báo SIGNAL
Miễn phát biểu kiến trúc được định vị sau từ khóa BEGIN, trong thí dụ này là một số phát biểu thể hiện thành phan (component instantiation statement) Các phát biểu này được đánh nhãn từ UJ đến U7 Phát biểu U1 là một phát biểu thể hiện thành phần, phát biểu nay thể hiện thành phần inverter Phát biểu này nối port sở với port đầu tiên của thành phần ¿nuer/er và tín hiệu sỞ jnu với port thứ hai của thành phần inuerfer Kết quả là port inj của inverter duge nối với port sÖ của thyc thé mux va port x của inuerter được nối với tín hiệu cục bộ s0 inu Trong phát biểu này các port được kết nối theo thứ tự mà chúng xuất hiện trong phát biểu
Ta lưu ý phát biểu thể hiện thành phần U7 Phát biểu này sử dụng ký hiệu sau:
U7 : orgate(x2 => b, x1 => a, x4 => d, x3 => ¢, x => x);
Phát biểu này sử dụng kết hợp gán tên (named association) để tương hợp các port và các tín hiệu với nhau Chẳng hạn như port x2 eda orgate được kết nối với port ð của thực thể bằng mệnh đề kết hợp đầu tiên Mệnh đề thể hiện sau cùng nối port xz xủa thành phân orgœe với port x của thực thể Thứ tự của các mệnh để không quan trọng Kết hợp gán tên và có thứ tự có thể được trộn lẫn nhưng không được khuyến cáo
9.1.6 Hành vi tuần tự
Con có một phương pháp khác để mô tả chức năng của mạch mux trong VHDL Sự kiện VHDL có nhiều cách biểu điễn cho cùng một chức năng là điều làm cho việc học toàn bộ ngôn ngữ trổ thành công việc lớn Phương pháp thứ ba
mô tả chức năng của mux 1a sit dung phat bidu quá trình để raô tả chức năng ở đạng biểu diễn giải thuật Điều này
được trình bày trong kiến trie sequential nhu sau:
Trang 13END IF; WHEN OTHERS =>
CASE sel IS x<ed;
WHEN 0 => END CASE;
X<= aj END PROCESS, WHEN 1 => END sequential;
x <= bj Kiến trúc này chứa một phát biểu duy nhất gọi là phat biéu qué trinh (process statement) Phat biểu này bắt đầu
ở đồng bắt đầu bằng từ khóa PROCESS và kết thúc bằng dòng chứa END PROCESS Tất cả các phát biểu ở giữa hai
dòng này được xem là phần phát biểu của quá trình
Phát biểu quá trình
Phát biểu quá trình chứa một số phần Phần đâu tiên được gọi là danh sách độ nhạy (sensitivity list); phân thứ hai được gọi là phần khai báo quá trình và phần thứ ba là phần phát biểu Trong thí dụ ở trên, danh sách các tín hiệu trong các dấu ngoặc đơn sau từ khóa PROCESS được gọi là danh sách độ nhạy Danh sách độ nhạy liệt kê một cách chính xác các tín hiệu nào làm cho phát biểu quá trình được thực thi Trong thí dụ trên danh sách gồm có ø, Ð, e, ở, s0
và s1, chỉ có các sự kiện trên các tín hiệu này làm cho phát biểu quá trình được thực thi
Miền khai báo quá trình
Phần khai báo quá trình chứa miễn ở giữa nơi kết thúc danh sách độ nhạy và từ khóa BEGIN Trong thí dụ trên phần khai báo chứa một khai báo biến, khai báo biến cục bộ sei Biến này được sử dụng cục bộ để chứa giá trị được
tính dựa trên các port s7 và s0
Phần phát biểu của quá trình
Phần phát biểu của quá trình bắt đầu ở từ khóa BEGIN và kết thúc ở dòng END PROCESS Tat cd các phát biểu
được bao gồm bởi quá trình là các phát biểu tuần tự Điều này có nghĩa là bất kỳ phát biểu nào được bao gồm bởi quá trình sẽ được thực thi lần lượt từng phát biểu một giống như ngôn ngữ lập trình máy tính Nhớ lại rằng thứ tự của các phát biểu trong kiến trúc không làm nên sự khác biệt nào (không quan trọng) nhưng điều này không đúng ở bên trong
quá trình Thứ tự thực thi là thứ tự của các phát biểu bên trong phát biểu quá trình
Thực thi quá trình
Ta khảo sát việc thực thi kién tric sequential từng dòng một Để nhất quán ta hãy giả định rằng z0 thay đổi thành 0 Do s0 ở trong danh sách độ nhạy của phát biểu quá trình, quá trình này được gọi Mỗi phát biểu trong quá trình kế đến được thực thi tuần tự Trong thí dụ trên phát biểu IF được thực thi trước tiên sau đó đến phát biểu CASE Mỗi kiểm tra mà phát biểu IF thực hiện được làm một cách tuần tự bắt đầu bằng kiểm tra đầu tiên trong mô bình Kiém tra đầu tiên được xem xét nếu s0 bằng 0 Phát biểu này thất bại do s0 bằng 1 và s7 bằng 0 Phát biểu gan
tín hiệu theo sau kiểm tra đầu tiên sẽ không được thực thi Thay vào đó kiểm tra kế tiếp được thực hiện Kiểm tra này thành công và các phát biểu gán tín hiệu theo sau kiểm tra đối với s0 =1 và s1 = 0 được thực thi Phát biểu này được
trình bày dưới đây:
sel := 1;
Phát biểu tuần tự
Phát biểu này được thực thi tuần tự Một khi phát biểu được thực thị, kiểm tra kế của phát biểu IF không được thực hiện Mỗi khi một kiểm tra thành công, không có kiểm tra nào khác được thực hiện nữa Phát biểu IF đã hoàn tất và lúc này phát biểu CASE số thực thi Phát biểu CASE sẽ đánh giá giá trị của sel đã được tính trước đây bởi phát
biểu IE và kế đến thực thi phát biểu tương thích, phù hợp véi gid tri cia sel Trong thí dụ trên giá trị của se! là 1 do
đó phát biểu sau sẽ được thực thi:
x<=b;
Giá trị của port b sẽ được gán cho port x và việc thực thi quá trình sẽ kết thúc do không còn phát biểu nào nữa trong kiến trúc
Trang 14ở mức cấu trúc không được mong muốn vì lý đo khác nào đó, mô hình hữu hiệu hơn có thể được sử dụng, Một trong hai phương pháp khác (các kiến tric dataflow va sequential) cé 16 hou higu hơn về không gian bộ nhớ được yêu cầu và tốc
độ thực thi Làm cách nào để việc chọn giữa hai phương pháp này có thể đưa xuống thành vấn để cách lập trình Người lập mô hình thích viết đoạn mã VHDL đồng thời hay tuần tự hơn ? Nếu người lập mô hình muốn viết đoạn mã
VHDL đồng thời, kiểu kiến trúc da/øflou là cách để tiến hành và ngược lại, kién tric sequential sẽ được chọn Điển
hình, những người lập mô hình khá quen thuộc với kiểu viết chương trình tuân tự nhưng các phát biểu đồng thời là các công cụ rất mạnh để viết hữu hiệu các mô hình nhồ
"Ta sẽ xem xét kiến trúc khác có thể được viết cho một thực thể Day là kiến trúc có thể được sử dụng để kích công
cụ tổng hợp Các công cụ tổng hợp biến đổi mô tá VHDL ở mức truyền thanh ghi RTL (register transfer level) thanh
mô tả mức cổng đã được tối ưu Các công cụ tổng hợp có thể cung cấp hiệu suất rất cao so với các phương pháp thủ
công Quá trình tổng hợp sẽ được để cập ở mục 9.9, “Tổng hợp” và mục 9.10, “Tổng hợp VHDL”
FOR U1, U2:
inverter USE ENTITY WORK.myinv(version1);
Chức năng của phát biểu cấu hình là giải thích chính xác kiến trúc nào được sử dụng cho mỗi thể biện thành
phần trong môö hình Điều này xuất hiện ở dạng có thứ bậc Thực thể cao nhất trong thiết kế cần có kiến trúc để được chỉ rõ cũng như các thành phần nào được thể hiện trong thiết kế
Phát biểu cấu hình trên đọc như sau: đây là cấu hình có tên là muxeon1 của thực thể mux Sử dụng kiến trúc netlist lam kiến trúc của thực thể cao nhất, thực thể này là mưz Với hai thể hiện thành phần U1 và 2 của loại
inverter được thể hiện trong kiến tric netlist, sit dung thực thể myinu, kiến trúc oersion1 từ thư viện có tên la WORK
Với các thể biện thành phẩn U38 - U6 của logi andgate, sit dung thyc thé myand, kién tric version! tit thu vign WORK V6i thé hién thanh phan U7 eda loai orgate sil dyng thyc thé myor, kién trie version! tit thy vign WORK Tat
cả các thực thé lúc này có các kiến trúc được chỉ ra cho chúng Thực thé mux c6 kién tric netlist va cdc thanh phần khác có các kiến trúc gọi là øersion1 được chỉ ra,
Khả năng của cấu bình
Bằng cách địch các thực thể, các kiến trúc và cấu hình được chỉ ra, ta có thể tạo ra một mô hình khả mô phỏng (có thể mô phẳng được) Nhưng điều gì sẽ xây ra nếu ta không muốn mô phông ớ mức cổng ? Didu gì xảy ra nếu ta
Trang 15
Chương 9: VHDL
thực sự muốn sử dụng kiến trúc dataflow dé thay thế ? Khả năng của cấu hình là ta không cần địch lại thiết kế hoàn
chỉnh của ta, ta chỉ cần địch lại cấu hình mới Dưới đây là một cấu hình thi du:
CONFIGURATION muxcon2 OF mux IS
Thí dụ sau cùng cho thấy cái nhìn ở mức hành vi hoặc giải thuật của mux Tất cá cái nhìn của mux đều mô hình thành công chức năng cla mux va tat cd đều có thể được mô phỏng bằng trình mô phỏng VHDL Tuy nhiên về mặt co bản người thiết kế sẽ muốn sử dụng mô hình tạo điều kiện xây đựng thuận lợi một mắng phần cứng Trên thực tế việc
sử dụng phổ biến nhất của VHDL trong việc xây dựng phẩn cứng hiện nay là thông qua các công cụ tổng hợp Do vậy trọng tâm của phần còn lại cia chương này không chỉ ở mô phỏng của VHDL mà còn ở tổng hợp của VHDL
độ nhạy của phát biểu này Mỗi khi một tín hiệu trong đanh sách độ nhạy của một phát biểu gán tín hiệu thay đổi giá
trị, phát biểu gán tín hiệu này được thực thi Nếu kết quá của việc thực thí là một giá trị mới khác với giá trị hiện tại của tín hiệu thì một sự kiện được định thời cho tín hiệu đích Nếu kết quả của việc thực thi là cùng giá trị, không có sự kiện nào sẽ được định thời nhưng một giao tác (transaction) sẽ vẫn được tạo ra (các giao tác sẽ được dé cập ở mục 9.3,
“Xử lý tuần tự”) Một giao tác luôn luôn được tạo ra khi một mô hình được đánh giá nhưng chỉ có các thay đổi giá trị
của tín hiệu mới gây ra các sự kiện để được định thời,
Thí dụ kế cho thấy cách thức đưa vào một giá trị trì hoãn khác 0 cho phép gán:
a <= b after 10 ns;
Phat biểu này được hiểu như sau: ø nhận giá trị của b khi thời gian 10 ns trôi qua
Cả hai phát biểu ở trên là các phát biểu gán tín hiệu đồng thời Cả hai phát biểu này chịu ảnh hưởng của các thay
đổi giá trị của tín hiệu ö Mỗi khi ö thay đổi giá trị, các phát biểu này thực thi và các giá trị mới được gán cho tín hiệu a
Bằng cách sử dụng một phát biểu gán tín hiệu đồng thời, cổng AND đơn gián có thể được mô hình như sau:
ENTITY and2 IS
PORT ( a, b : IN BIT;
c: OUT BIT );
END and2;
Trang 16
ARCHITECTURE and2_behav OF and2 IS
Tap 2: Lap trinh ASIC
BEGIN A
e <=a AND b AFTER 5 ns; “| ° END and2_behav; B
Cổng AND này có hai ngõ vào ø, b và một ngõ ra c như được trình bày ở hình 9.1 Tín hiệu
e eó thể được gán một giá trị mới mỗi khi ø hoặc ô thay đổi giá trị Với cổng AND, néu a 1a ‘0’
và b thay déi tir ‘1’ dén ‘0’, ngo ra c không thay đổi Nếu ngõ ra thay đổi giá trị, một giao tác tình 8.1: Ký
xuất hiện gây ra một sự kiện được định thời trên tín biệu c; ngược lại một giao tác xuất hiện hiệu cổng AND
trên tín hiệu c
> MUX4
Đơn vị thiết kế thực thể mô tả các port của cổng ơnđ2 có hai ngõ vào a va b
cũng như một ngõ ra c Kién trie and2_behav của thực thể ønđ2 chứa một phát biểu —] I0
gán tín hiệu đồng thời Phát biểu này chịu ảnh hưởng bởi cả hai tím hiệu @ va & do
sự kiện biểu thức để tính giá trị của e bao gồm cả giá trị của các tín hiệu ø và ö — !!
Giá trị của biểu thức ø và ö trước tiên được tính và giá trị kết quả từ phép tính 1 er
này được định thời trên tin hiéu ngé ra c, 5 ns kể từ thời điểm phép tính được hoàn
, Thí đụ kế trình bày các phát biểu gán tín hiệu phức tạp hơn và giải thích khái AB
niệm đồng thời chỉ tiết hơn Ở hình 9.2, ký hiệu của mạch ghép kênh 4-ngõ vào
(MUX 4:1) duge trinh bay
Đây là mô hình ở mức hành vi của MUX 4 > 1:
LIBRARY IEEE; Hinh 9.2: Ky hiệu MUX43 USE IEEE.std_logic_1164.ALL;
ENTITY mux4 IS i2 AFTER 10 ns WHEN 2,
PORT ( i0, il, i2, i3, a, b : IN std_logic; i3 AFTER 10 ns WHEN 3,
q : OUT std_logic); ' AFTER 10 ns WHEN OTHERS;
END mux4; sel<= 0 WHEN a = ‘0’ AND b = ‘0’ ELSE
ARCHITECTURE mux4 OF mux4 IS 1 WHEN a = ‘?’ AND b = ‘0’ ELSE
SIGNAL sel: INTEGER; 2 WHEN a= ‘0’ AND b = ‘1’ ELSE
BEGIN 3 WHEN a = ‘1’ AND b = ‘1’ ELSE
WITH sel SELECT 4;
q<= ¡0 AFTER 10 ns WHEN 0, END mux4;
“Thực thế của mô hình này có 6 port ngõ vào (port nhập) và 1 port ngé ra (port xuất) Bốn
trong các port ngõ vào (10, 11, 12 và 13) biểu diễn các tín hiệu sẽ được gán cho tín hiệu ngõ ra g AIB Q Chỉ một trong các tín hiệu nây được gán cho tin higu ngé ra q đựa trên gid trị của hai tín hiệu
ngõ vào còn lại ø và ö Băng giá trị của mạch ghép kênh được trình bày ở hình 9.3 0 |0 | 10
Để thực hiện chức năng được mô tả ở trên, ta sử dụng một phát biểu gán tín hiệu có điểu 1 J0 1 kiện (conditional signal assignment statement) và một phát biểu gán tín hiệu có chọn lựa 0 |1 12 (selected signal assignment statement) Loai phat biéu thứ hai trong thí dụ này được gọi là phát
biểu gán tín hiệu có điều kiện Phát biểu này gán một giá trị cho tín hiệu đích đựa trên điều kiện | 1 |1 | 1
được đánh giá cho từng phát biểu Các điều kiện của phát biểu WHEN được thực thi một lắn ở
một thời điểm một cách tuần tự cho đến khi các điểu kiện của phát biểu được thỏa Phát biểu đầu
tiên tương thích với các điều kiện được yêu cầu sẽ gán giá trị cho tín hiệu đích Tín hiệu đích của
thi du này là tín hiệu cục bộ sei Phụ thuộc xào giá trị của các tín hiệu ø và b, các giá trị từ 0 đến
4 duge gan cho sel
Hình 9.3: Bảng giá trị của MUX 4 > 1.
Trang 17gán tín hiệu có chọn lựa (hoặc mệnh để OTHERS phải hiện hữu)
Mỗi tín hiệu trong các tín hiệu ngõ vào có thể được gán cho tín hiệu ngõ ra g phụ thuộc vào giá trị của hai tín hiệu chọn lựa a và ð Nếu các giá trị của ø hoặc b là các giá trị chưa biết thì giá trị sau cùng chưa biết (27) được gán cho ngõ ra g Trong thí dụ này, khi một trong các tín hiệu ngõ vào chọn lựa có giá trị chưa biết, ngõ ra được thiết lập
là chưa biết
Ta hãy xem xét mô hình của mạch ghép kênh, mô hình này đường như sẽ không hoạt động như được viết Dường như giá trị của tín hiệu se! được sử dụng trước khi được tính toán Câm giác này nhận được từ sự kiện phát biểu thứ hai trong kiến trúc là phát biểu thực tế tinh giá trị của sef Tuy nhiên mô hình sẽ hoạt động như được viết do bởi khái niệm đồng thời
Phát biểu thứ hai chịu ảnh hưởng bởi các tín hiệu ø và b Mỗi khi ø hoặc ö thay đổi giá trị, phát biểu thứ hai được
thực thi và tín hiệu se? được cập nhật Phát biểu đầu tiên chịu ảnh hưởng bởi tín hiệu sel Mỗi khi tín hiệu sel thay đổi
giá trị, phép gán tín hiệu đầu tiên được thực thi
Nếu thí đụ này được xử lý bởi một công cụ tổng hợp, cấu trúc cổng kết quả được tạo ra sẽ giống với mạch ghép kênh 4 > 1 Nếu thư viện tổng hợp chứa một linh kiện gốc (primitive) 4 > 1, linh kiện gốc này có thể được tạo ra dựa trên sự tỉnh vi của công cụ tổng hợp và các ràng buộc đặt trên thiết kế,
9.2.2 Tri hoãn truyền tải và trì hoãn quán tính
"Trong VHDL có hai loại trì hoãn có thể được sử dụng để mô hình các hành vi Trì hoãn quán tính (inertial delay)
là trì hoãn được sử đụng phổ biến nhất trong khi trì hoãn truyên tải (transport đelay) được sử đụng ở nơi mô hình trì hoãn dây dẫn (hay đường dây) được yêu câu
Trì hoãn quán tính
Trì hoãn quán tính là mặc định trong VHDL Nếu không có loại trì hoãn nào được chỉ rõ, trì hoãn quán tính được
sử dụng Trì hoãn quán tính là mặc định vì trong hầu hết các trường hợp, trì hoãn này hoạt động giống như một linh kiện thực tế
Trong một mô hình trì hoãn quán tính, tín hiệu ngõ ra của linh kiện có quán tính, điểu này phải được khắc phục đối với-tín hiệu thay đổi giá trị Giá trị quán tính bằng với trì hoãn ngang qua linh kiện Nếu có các gai, các xung, v.v nào đó có các chu kỳ ở đó giá trị của tín biệu được duy trì nhỏ hơn trì hoấn ngang qua linh kiện, giá trị của tín hiệu ngõ ra sẽ không thay đổi Nếu giá trị của tín hiệu được đuy trì ở một giá trị cụ thể lâu hơn trì hoãn ngang qua linh kiện, quán tính được khắc phục và linh kiện sẽ thay đổi đến trạng thái mới
Hình 9.4 là một thí dụ của mạch đệm đơn giản nhất Mạch đệm có một ngõ vào Á và một ngõ ra B duy nhất Các
dạng sóng được trình bày cho ngõ vào A và ngõ ra B Tín hiệu A thay đổi từ 'ữ' đến “1' ở thời điểm 10 ns và từ “L' đến
*'0' ở 20 na Điều này tạo một xung boặc một gai kéo dài 10 ns Mạch đệm có trì hoãn 20 ns ngang qua linh kiện
_ IMJNö ĐI HỘ NHATRANG| = ® +
°YHƯ VIÊN
Hình 9.4: Các dạng sóng của mạch đệm có trì hoãn quán tính
Trang 18B c6 giá trị là 0 ở thời điểm 40 na Sự kiện được định thời trên ngõ ra B ở thời điểm 30 ns đã không xuất hiện Sự
kiện mới được dự đoán bởi mô hình mạch đệm va chạm với sự kiện hiện tại được định thời và trình mô phông ngăn chận được sự kiện ở thời điểm 30 ns
Hậu quả của việc ngăn chan là xung bị nuốt chứng, Lý đo cho sự loại bổ này tương ứng với mô hình trì hoãn quán tính, sự kiện đầu tiên ở thời điểm 30 ns da không có đủ thời gian để khác phục quán tính của tín hiệu ngõ ra
Mô hình trì hoãn quán tính là mô hình được sử đụng phổ biến nhất trong tất cả các trình mô phỏng có sẵn hiện nay Điều này một phẩn là đo, trong đa số trường hop, mô hình trì hoãn quán tính đủ chính xác đối với các nhu cầu của người thiết kế Một lý do nữa cho việc sử đựng rộng rãi này của trì hoãn quán tính là trì hoãn này ngăn chận sự lan truyền nhanh chóng của các gai xung xuyên suốt mạch Trong hầu hết các trường hợp, đây là hành ví được người thiết kế mong muốn
"Trì hoãn truyền tải
Trì hoãn truyền tái không mặc định trong VHDIL và phải được chỉ rõ Trì hoãn này biểu điễn trì hoãn đây dẫn trong đó một xung bất kỳ, nhỏ bao nhiêu không quan trọng, được truyền đến tín biệu ngõ ra bị trì hoãn bởi giá trị trì hoãn được chỉ rõ Cụ thể là trì hoãn truyền tải hữu ích cho việc mô hình các linh kiện đường đây trì hoãn, các trì hoãn đường đây trên bo mạch của PC và các trì hoãn đường dẫn trên một ASIC
Nếu ta khảo sát một mạch giống như mạch đệm được trình bày ở hình 9.4, nhưng thay thế các dạng sóng trì hoãn quần tính bằng các dạng sóng trì hoãn truyền tải, ta nhận được kết quả được trình bày ở hình 9.5 Dạng sóng tương tự được đưa đến ngõ vào A nhưng tín hiệu ngõ ra ở B rất khác Với trì hoãn truyền tải, các gai xưng không bị nuốt chứng
mà các sự kiện được sắp dat trước khi truyền
Hình 9.6: Các dạng sóng của mạch đệm có trì hoãn truyền tái
Ở thời điểm 10 ns, mô hình mạch đệm được thực thi và sẽ định thời một sự kiện đối với tín hiệu ngõ ra để đi đến giá trị 1 ở 30 na Ở thời điểm 30 ns, mô hình mạch đệm lại được yêu cầu và dự đoán một giá trị mới cho tín hiệu ngõ
ra ở thời điểm 40 ns Với giải thuật trì hoấn truyền tải, các sự kiện được đặt theo thứ tự Sự kiện ở thời điểm 40 na được đặt trong danh sách các sự kiện sau sự kiện ớ thời điểm 30 ns Gai xung không bị nuốt chửng mà được truyền đi nguyên vẹn sau thời gian trì hoãn của linh kiện
Mô hình trì hoãn quán tính
Mô hình sau đây trình bày cách thức viết một mô hình trì hoãn quán tính Mô hình này tương tự như bất kỳ mô
hình nào khác mà ta đã khảo sát Loại trì hoãn mặc định là quán tính do vậy ta không cần thiết chỉ ra loại trì hoãn
là trì hoãn quán tính:
b: OUT std_logic); END buf;
Trang 19
Chương 9: VHDL,
Mô hình trì hoãn truyền tải
Tưới đây là một thí dụ về mô hình trì hoãn truyền tái Mô hình này tương tự như mô hình trì hoãn quán tính
ngoại trừ có từ khóa TRANSPORT trong phát biểu gán tín hiệu đối với tín hiệu b Khi từ khóa này hiện hữu, loại trì
USE IEEE.std_logic_1164.ALL; ARCHITECTURE delay_line OF delay_line IS
PORT ( a : IN std_logic; b <= TRANSPORT a AFTER 20 ns;
9.2.3 Delta mô phỏng
Các đelta mô phỏng được sử dụng để sắp xếp một số loại sự
kiện trong thời gian mô phỏng Cụ thể là, các sự kiện trì hoãn
zero phải được sắp đặt để tạo ra các kết quả nhất quán Nếu các sự
kiện trì hoãn zero không được sắp đặt rõ ràng, các kết quả có thể
khác hẳn nhau giữa các lần chạy mô phỏng khác nhau Một thí dụ
cho điểu này được trình bày bằng cách sử dụng mạch ở hình 9.6
Mạch này là một phần của sơ đồ tạo xung elock trong một linh B
kiện phúc tạp được mô bình, Chắc chắn đây không phải là một
mach đẩy đủ mà chỉ là một phần của mạch được sử dụng để tạo ra
xung clock cho flipflop D Mach nay gém có một cổng đảo, một
cổng NAND và một cổng AND dùng để kích ngõ vào xung clock
Cổng NAND và cổng AND được sử dụng để điểu khiển xung
clock đến ngõ vào xung cloek của flipflop Ta hãy khảo sát hoạt
chế khác Bằng cách khảo sát 2 cơ chế trì hoãn này ta sẽ hiểu rõ
Để sử dụng trì hoãn delta, tất cả các thành phần của mạch
phải có trì hoấn zero được chỉ ra Trì hoãn cho cá 3 cổng được xác Tĩnh 9.6: Mạch đùng để mô phỏng trì hoãn định bằng 0 (Các mạch thực tế không phô bày các đặc tính như delta
vậy, nhưng đôi khi việc mô hình sẽ dé dang hon nếu mọi trì hoãn
déu được tập trung ở các ngõ ra) Trước tiên ta hãy khảo sát cơ chế trì hoãn không đelta
Khi một cạnh giảm xuất hiện trên thực hiện A, ngõ ra của cổng đảo thay đổi ở thời điểm 0 Hãy giả định rằng một sự kiện như vậy xuất hiện ở thời điểm 10 ns Tín hiệu B ở ngõ ra cổng đảo thay đổi để phần ánh giá trị mới của ngõ vào Khi tín hiệu B thay đổi, cả hai ngõ ra của cổng AND và cổng NAND được đánh giá lại Với thí dụ này ngõ
vào xung clock được giả định có giá trị không đổi là ' Nếu cổng NAND được đánh giá trước tiên, giá trị mới ở ngõ ra
cổng này là “0
hi cổng AND được đánh giá, tín hiệu B sé 1a ‘0’ va tin hiệu C sẽ là “I nên ngõ ra cổng AND dự đoán giá trị mới
là “0 Nhưng điều gì xảy ra nếu cổng AND được đánh giá trước tiên ? Cổng AND thấy giá trị “1 trên tín hiệu B và giá
trị 'U trên tín hiệu Ơ trước khi cổng NAND có cơ hội được đánh giá lại Cổng AND dự đoán giá trị mới là “1
Cổng NAND đánh giá lại và tính giá trị mới ở ngõ ra của mình là “0 Thay đổi này trên ngõ ra của cổng NAND
làm cho cổng AND đánh giá lại lần nữa Cổng AND lúc này thấy giá trị của B là giá trị “U và gid trị mới của C 1a “0
Cổng AND lúc này dự đoán giá trị '0' trên ngõ ra của mình Quá trình này được tóm tắt ở hình 9.7 Cả hai cổng này
đạt được cùng giá trị ở tín hiệu D Tuy nhiên khi cổng AND được đánh giá trước, một cạnh tăng, một trì hodn delta
xuất hiện trên tín hiệu D Cạnh tăng này có thể điều khiển ngõ vào xung clock của flipflop, phụ thuộc vào cách thức
mô hình ftipflop
Ý nghĩa của thảo luận này là khi không có cơ chế đổng bộ delta, các kết quả của mô phỏng có thể phụ thuộc vào
các cấu trúc đữ liệu của trình mô phỏng (simulator) được xây dựng ra sao Chẳng hạn như việc biên dịch mạch này ở
lần thứ nhất làm cho cổng AND đánh giá trước trong khi việc biên dịch lần nữa có thể làm cho cổng NÀND được đánh
Trang 20được truyển đi ngay mà được định thời cho thời điểm delta kế tiếp (delta 2) Trình mô phỏng bắt đầu thực thi ở thời
điểm delta 2 Tín hiệu B được cập nhật giá trị là “U và các cổng AND, NAND được đánh giá lại Cả hai cổng AND và
NAND lúc này sẽ định thời các giá trị mới của mình cho thời điểm delta kế tiếp (delta 3)
Khi đeita 3 xuất hiện, tín hiệu D nhận giá trị “U và tín hiệu C nhận giá trị 'ữ Do tín hiệu € cũng kích cổng AND, cổng AND được đánh giá lại và định thời giá trị mới của mình cho thời điểm đelta 4 Tóm lại các delta mô phỏng là
lượng thời gian vô cùng nhỏ được sử đụng làm cơ chế đồng bộ khi các sự kiện trì hoãn zero hiện điện Trì hoãn delta được sử dụng mỗi khi trì hoãn 0 được chỉ ra như được trình bày dưới đây:
a <=b AFTER 0 ng;
"Trường hợp khác sử dụng trì hoãn delta là khi không có trì hoãn nào được chỉ ra Thí dụ:
a<=b;
Trong cả hai trường hợp, mỗi khi tín hiệu B thay đối giá trị từ một sự kiện, tín hiệu A có phép gán tín hiệu (có)
trì hoãn đelta cho mình Mô hình VHDL tương đương cho mạch đã được trình bày ở hình 9.6, ngoại trừ flipflop, được
trình bày đưới đây:
PORT( a, clock : in bit b <= NOT(a); notice no delay
ARCHITECTURE test OF reg IS END test;
SIGNAL b, c : bit;
Trang 21mạch này trong VHDL yêu cầu khái niệm vê mạch (hay trình) kích tín hiệu (signal driver) Một driver của VHDL là
một trình đóng góp cho gid trị tổng thể của một tín biệu
Một tín hiệu có nhiều nguồn kích sẽ có nhiều driver Các giá trị của tất cả các driver được phan tích cùng nhau để tạo ra giá trị duy nhất cho tín hiệu này Phương pháp phân tích tất cả các trình đóng góp thành một giá trị duy nhất
là thông qua hàm phân tích (resolution function) (hàm này sẽ được để cập ở mục 9.5, “Chương trình con và gói”) Một
hàm phân tích là hàm đo người thiết kế viết, sẽ được gọi mỗi khi một driver của tín hiệu thay đổi giá trị
Tao driver
Các driver được tạo ra bằng các phát biểu gán tín hiệu Một phép gán tín hiệu đồng thời bên trong một kiến trúc tạo ra một driver cho mỗi phép gán tín hiệu Do vậy nhiều phép gán tín hiệu tạo ra nhiều driver cho một tín hiệu Hãy khảo sát kiến trúc sau đây:
ARCHITECTURE test OF test IS a <=c AFTER 10 ns;
BEGIN END test;
hành vi của tín hiệu Việc tổng hợp thí dụ ở trên sẽ nối tất b và c với nhau
Mô hình xấu nhiều driver
“Ta hãy khảo sát một mô hình thoạt nhìn có về đúng nhưng lại không thực hiện chức năng như người sử dụng dự
định Mô hình này sử dụng cho mạch MUX 4 > 1 đã được để cập trước đây:
PORT (i0, i1, i2, 13, a, b: IN std_logic; q <= il WHEN a = ‘1’ AND b = ‘0’ ELSE 0;
q: OUT std_logic); q <= i2 WHEN a = ‘0’ AND b = ‘I’ ELSE ‘0;
Mô hình này gán ¿0 cho g khi ø bằng 0 và ð bằng 0; ¿7 khi ø bằng 1 và b bằng 0 v.v Thoạt nhìn, mê hình này có
vẽ hoạt động đúng Tuy nhiên mỗi phép gán cho tín hiệu g tạo ra một driver mới cho tín hiệu g Bốn driver cho tin hiệu ạ được tạo ra trong mô hình này
Mỗi driver sẽ kích giá trị của một trong các ngõ vào i0, i1, i2, 13 hoặc “0 Giá trị được kích phụ thuộc vào các tín
hiệu ø và b Nếu ø bằng 0 và ö bằng 0, phát biểu gán đầu tiên đặt giá trị của ¿0 vào một trong các driver của q Ba phát biểu gần khác không có các điều kiện được thôa và do vậy sẽ kích giá tri ‘0’ Ba driver sẽ kích giá trị '0' và một, driver sẽ kích giá trị của ¿0
Các hàm phân tích điển hình sẽ có nhiều khó khăn để dự đoán kết quả ngõ ra mong muốn trên ợ, kết quả này là
gid trị của ¡0 Phương pháp tốt hơn để viết mô hình này là tạo ra chỉ một mạch kích cho tín hiệu g như được trình bày sau đây:
q<= i0 WHEN a = ‘0’ AND b = ‘0’ ELSE ; - unknown
jl WHEN a = ‘lV’ AND b = ‘0’ ELSE END better;
Trang 22Tại sao người thiết kế muốn chuyển thông tin đến một thực thể Hiển nhiên nhất và có lẽ được sử dụng nhiều nhất, thông tin được chuyển đến một thực thể là các thời gian trì hoãn đối với các trì hoãn tăng và giảm của linh kiện được mô hình Generie cũng có thể được sứ dụng để chuyển các kiểu đữ liệu bất kỳ do người thiết kế định nghĩa (user- defined data type) bao gồm thông tin chắng hạn như điện dung tải, điện trở v.v Các thông số tổng hợp chẳng hạn
như độ rộng đường đữ liệu, độ rộng tín hiệu v.v có thể được chuyển dưới dạng các generic '
Tất cả dữ liệu được chuyển đến một thực thể đều là thông tin của thể hiện cụ thể Các giá trị dữ liệu gắn liền với thể hiện được chuyển đữ liệu Bằng cách này người thiết kế có thể chuyển các giá trị khác nhau đến các thể hiện khác nhau trong thiết kế
Dữ liệu chuyển đến một thực thể là dữ liệu tĩnh Một khi mô hình được cho thêm chỉ tiết (liên kết với trình mô phông), dữ liệu sẽ không thay đổi trong thời gìan mô phỏng Các generic không thể được gán thông tin dưới dạng một
phần của việc chạy trình mô phóng Thông tin chứa trong các generic được chuyển đến một thể hiện thành phân hoặc một khối có thể được sử dụng để thay đổi các kết quả mô phỏng, nhưng các kết quả không thể sửa đổi các generic Dưới đây là một thí dụ thực thể của cổng AND có 3 generic kết hợp:
ENTITY and2 IS ¢: OUT BIT);
GENERIC(rise, fall : TIME; load : INTEGER); END and2;
PORT( a, b : IN BIT;
Thực thể này cho phép người thiết kế chuyển một giá trị cho các trì hoãn tăng và giảm cũng như cho tải mà linh kiện có trên ngõ ra của mình Với thông tin này mô hình có thể mô hình chính xác cổng AND trong thiết kế Sau đây
là kiến trúc của cổng AND:
ARCHITECTURE load_dependent OF and2 IS ¢ <= internal AFTER (rise + (load * 2 ns)) WHEN
BEGIN ELSE internal AFTER (fall + (load * 3 ns));
internal <= a AND b; END load_dependent;
Kiến trúc này khai báo một tín hiệu cục bộ gọi là ¿nfernai để lưu giá trị của biểu thức œ và ở Các giá trị tién tính toán sử dụng trong nhiều thể hiện là một phương pháp rất hiệu quả để mô hình
Các generic rise, f@ll và load chứa các giá trị đã được chuyển vào bởi phát biểu thể hiện thành phân Ta hãy khảo sát một mảng của mô hình thể hiện các thành phần loại AND2 trong một mô hình khác:
GENERIC(rise, fall : TIME; load : INTEGER); BEGIN
PORT ( ina, inb, inc, ind : IN std_logic; U1: AND2 GENERIC MAP(10 ns, 12 na, 3 )
outl, out2 : OUT std_logic); PORT MAP (ina, inb, out1 );
GENERIC(rise, fall : TIME; load : INTEGER);
Đầu tiên phát biểu kiến trúc khai báo các thành phần sẽ được sử đựng trong mô hình Trong thí dy này thành phân AND2 được khai báo Kế đến, thân của phát biểu kiến trúc chứa hai phát biểu thể hiện thành phân của các thành phần U1 và Ứ2 Port ø của thành phần U1 được ánh xạ đến tín hiệu ¿na, port ö được ánh xạ đến tín hiệu ¿zö và
Trang 23Chương 9: VHDL / 23 fal?
port c được ánh xạ đến tín hiệu ou¿7 Cùng phương pháp như vậy thành phần U2 được ánh xạ đến các tín hiệu ¿ne, ind
và out2
Generic rise cua thé hiện U1 được ánh xạ đến 10 ns, generic fall duge anh xạ đến 12 ns va generic load được anh
xạ đến 3 Các generic của thành phần U2 được ánh xa dén cdc gid tri 9 ns, 11 ns va gid tri 5
Các generie cũng có thể có các giá trị mặc định, các giá trị này được ghi đè nếu các giá trị thực tế được ánh xạ đến
các generic Thí dụ tiếp theo đây trình bày hai thể hiện của thành phần loại and2
Trong thể hiện U1, các giá trị thực tế được ánh xạ đến các generic và các giá trị này được sử đụng trong mô
phông Trong thể hiện U2 không có giá trị nào được ánh xạ đến thể hiện này và các giá trị tùy định được sử đựng để
điều khiển hành vi của mô phỏng nếu được chỉ ra, ngược lại một lỗi sẽ xuất hiện:
PORT ( ina, inb, ine, ind : IN std_logic; BEGIN
outl, out2 : OUT std_logic); Ul: and2 GENERIC MAP(10 ns, 12 ns, 3)
ARCHITECTURE test_arch OF test IS U2: and2 PORT MAP (ine, ind, out2 );
Như ta đã thấy, các generic có nhiéu công dụng Các công dụng của generic chỉ bị giới hạn bởi óc sáng tạo của
người viết mô hình
9.2.6 Phát biểu khối
Các khối (block) 1a eo chế phân chia hệ thống (partitioning mechanism) bén trong VHDL cho phép người thiết kế
về mặt logic gom thành nhóm các miễn của mô hình Tương đẳng với hệ thống nhập sơ đổ điển hình là tờ sơ đồ Trong một hệ thống nhập sơ đê điển hình, một mức hoặc một phần của thiết kế có thể được biểu diễn bởi một số tờ sơ
đổ Lý do của việc phân chia hệ thống một thiết kế liên quan đến các chuẩn thiết kế về việc có bao nhiêu thành phần được cho phép trong một tờ hoặc có thể là sự phân nhóm logic mà người thiết kế nhận thấy có thể hiểu được nhiều hơn
Tương đồng như vậy vẫn đúng đối với các phát biểu khối Miễn phát biểu trong một kiến trúc có thể được chia thành một số miễn logic riêng rẽ Chẳng hạn như nếu ta đang thiết kế một CPU, một khối có thể là ALU, khối khác
là một dải thanh ghi và khối khác là mạch dich bit
Một khối biểu diễn một miễn độc lập của mô hình Mỗi khối có thể khai báo các tín hiệu cục bộ, các kiểu, các hằng (eonstant) v.v Một đối tượng bất kỳ có thể được khai báo trong phần khai báo kiến trúc sẽ có thế được khai báo trong
phân khai báo khối 8au đây là một thí dụ:
TYPE tw32 IS ARRAY(31 DOWNTO 0) OF std_logic, | END cpu;
SIGNAL ibus, dbus : tw32;
Trang 2424
Tập 3: Lập trình ASIC
END BLOCK ALU; reg] behavioral statements
END BLOCK REG1;
Các tín hiệu 7b„s và đòus là các tín hiệu cục bộ được khai báo trong kiến trúc epu_blk Các tín hiệu này là cục bộ
đối với kiến trúc epu_blk va khong thé được tham chiếu ở bên ngoài kiến trúc Tuy nhiên một khối bất kỳ bên trong kiến trúc có thể tham chiếu các tín hiệu này Một khối mức thấp bất kỳ có thể tham chiếu các tín hiệu từ mức cao hơn nhưng các khối mức cao hơn không thể tham chiếu các tín hiệu cục bộ của các khối mức thấp hơn
Tin higu gous được khai báo trong phẩn khai báo khối của khối ALU Tín hiệu này là cục bộ đối với khối ALU và
không thể được tham chiếu từ bên ngoài khối Tất cả các phát biểu bên trong khối ALU có thể tham chiếu gbus nhưng các phát biểu bên ngoài khối ALU không thể sử dụng qbus
Cũng theo cách này một cách chính xác, tín hiệu zbus là cục bộ của khối REG8 Khối REGI1 bên trong khối REGS
đã truy cập đến tín hiệu zbus và tất cả các phát biểu khác trong khối REG8 cũng có thể truy cập đến tín hiệu zbus Trong phần khai báo của khối REGI, tín hiệu khác gọi là gòus được khai báo Tín hiệu này có cùng tên với tín higu qòus được khai báo trong khối ALU Điểu này có gây ra vấn đề gì khéng ? Déi vdi trinh dich (compiler), hai tin
hiệu này là tách biệt và đây là một sử dụng hợp lệ của ngôn ngữ mặc đù đễ nhằm lẫn Hai tín hiệu này được khai báo
trong hai miễn khai báo tách biệt và chỉ có hợp lệ trong các miễn này nên chúng được xem xét như hai tín hiệu tách biệt có cùng tên Mỗi gbus chỉ có thể được tham chiếu trong khối có khai báo tín hiệu này, ngoại trừ với một tên hoàn toàn hạn chế sẽ được thảo luận sau
Một trường hợp đáng lưu ý khác được trình bày đưới đây:
SIGNAL qbus : tw32; bIk2 statements
Trong thí dụ nay tin higu qbus dugc khai bdo trong cả hai khối Tính chất thú vị của mô hình này là một trong hai khối sẽ được chứa trong khối khác Dường như BLK2 truy cập đến hai tín hiệu có tên là gözs — tín hiệu thứ nhất
từ khai báo cục bộ của gbus trong phần khai báo của BLR2 và tin hiệu thứ hai từ phân khai báo của BLKI1 BLK1 cũng
là khối cha của BLK2 Tuy nhiên BLK2 chỉ thấy tín hiệu gbus từ khai báo bên trong BLK2 Tín hiệu göus từ BLK1 đã
bị đè mất bởi khai báo cùng tên trong BLK2
Tin hiéu qbus tit BLKE cé thể được thấy bên trong BLK2 néu tên của tin hiệu gbus dugc han chế bởi tên của khối
Chẳng hạn như trong thí dụ này, để tham chiếu tín higu qbus tit BLK1, hãy sử dụng BLK1.qbus
Một cách tổng quát, đây có thể là một phương pháp mô hình gây nhiều khó hiểu Vấn đề xuất phát từ sự kiện ta không bao giờ hoàn toàn chắc chắn göus nào đang được tham chiếu ở một thời điểm cho trước mà không phân tích
đẩy đũ tất cả các khai báo một cách cẩn thận
Như đã để cập ở trên, các khối là các miễn độc lập của mô hình Nhưng các khối là duy nhất do bởi một khối có thể
chứa các port và các generic Điều này cho phép người thiết kế ánh xạ lại các tín hiệu và các generic ở bên ngoài đến các tín hiệu và các generic ở bên trong khối Nhung tại sao ta muốn làm điêu đó, với tư cách là một người thiết kế ?
Trang 25
Chương 9: VHDL
Khả năng của các port và các generie trên các khối cho phép người thiết kế sử dụng lại các khối được viết cho mục
đích khác trong một thiết kế mới Thí dụ, giá định rằng ta sẽ nâng cấp một thiết kế CPU và cần thêm chức năng
trong phần ALU Ta cũng giả định rằng một người thiết kế khác có một mô hình ALU mới thực hiện chức năng được
cần đến Rắc rối duy nhất đối với mô hình ALU mới là tên các port giao điện và tên các generic khác với các tên hiện
hữu trong thiết kế đang được nâng cấp Với khả năng ánh xạ port và generic bên trong các khối, không có vấn để gì ở đây Ta ánh xạ tên các tín hiệu và các thông số generic trong thiết kế đang được nâng cấp đến các port và các generic
được tạo ra cho khối ALU mới Thí dụ sau đây mính họa điều này:
PACKAGE math IS ALU : BLOCK
TYPE tw32 IS ARRAY(31 DOWNTO 0) OF std_logic;
FUNCTION tw_add(a, b : tw32) RETURN tw32;
FUNCTION tw_sub(a, b : tw32) RETURN tw32;
PORT( abus, bbus : IN tw32;
d_out : OUT tw32;
ctbus : IN INTEGER);
END math; PORT MAP ( abus => ibus, bbus => dbus, d_out
USE WORK math.ALL; => data,
USE IBEE.std_logic_1164.ALL: SIGNAL qbus : tw32;
PORT( { elk, interrupt : IN sid_logie; elk, in 9 mee 4 < = tw_add(abus, add(abus, bbus) bbus) WHEN ctbus ctbus =
addr : OUT tw32; cont : IN INTEGER;
data : INOUT tw32 );
END cpu;
ARCHITECTURE cpu_blk OF cpu IS
SIGNAL ibus, dbus : tw32;
BEGIN
Về mặt cơ bản, đây là mô hình tương tự mô hình đã trình bày trước đây ngoại trừ port và các phát biểu ánh xạ
port trong phần khai báo khối ALU Phát biểu port khai báo số port sử dụng cho khối, hướng của các port và kiểu của
các port Phát biểu ánh xạ port sẽ ánh xạ các port mới với các tín hiệu hoặc các port hiện hữu bên ngoài khối Port œbus được ánh xạ đến tín hiệu cục bộ ibs của kiến trúc CPU_BLK; port bözs được ánh xạ đến dbus Cac port d_out và
c£bus được ánh xạ đến các port bên ngoài của thực thể
tw_sub(abus, bbus) WHEN ctbus = 1 ELSE abus;
END BLOCK ALU;
END cpu_blk;
Việc ánh xạ hàm ý một kết nối giữa port và tín hiệu bên ngoài sao cho mỗi khi có một thay đổi giá trị trên tín hiệu được kết nối với một port, giá trị của port thay đổi đến giá trị mới Nếu một thay đổi xuất hiện trong tín hiệu ibus, giá trị mới của ¡bus được chuyển vào trong khối ALU và port øbs nhận giá trị mới Tương tự như vậy cho tất cả
các port
Khối có bảo vệ
Các phát biểu khối có hành ví đáng quan tâm khác được biết đến là các khối có bảo vệ (guarded block) Khối có
bảo vệ chứa một biểu thức bảo vệ có thể cho phép hoặc không cho phép các driver bên trong khối Biểu thức bảo vệ là biểu thức logic: khi đúng, các driver chứa trong khối được cho phép, còn khi sai, các driver không được phép Ta hãy
khảo sát thí dụ sau đây để biết thêm một số chỉ tiết:
LIBRARY IEEE; BEGIN
q <= GUARDED d AFTER 5 ns;
qb <= GUARDED NOT(d) AFTER 7 ns;
END BLOCK G1;
END latch_guard;
Trang 26W? z Tập 2: Lập trình ASIO
Mô bình này mỉnh họa một mô hình iz‡c: (mạch chốt) có thể được viết ra sao bằng cách sử dụng một khối có bảo
vệ Đây là mô hình có ý tưởng rất đơn giản, các mô hình chính xác hơn và phức tạp hơn sẽ được trình bày sau Thực thể khai báo 4 port được cẩn đến cho mạch chốt và kiến trúc chỉ có một phát biểu duy nhất Phát biểu này là phát biểu khối có bảo vệ Một phát biểu khối có bảo vệ giống như một phát biếu khối thông thường ngoại trừ biểu thức bảo
vệ theo sau từ khóa BLOOCK Biểu thức bảo vệ trong thí dụ này là (ejk = ‘1’), Day là biểu thức logic trả vẻ TRUE khi
elk bang ‘1’ va FALSE khi clk bing mét giá trị khác bất kỳ
Khi biểu thức báo vệ đúng, tất cả driver của các phát biểu gán tín hiệu có bảo vệ được cho phép hoặc trở nén on Khi biểu thức bảo vệ sai, tất cả driver của các phát biểu gán tín hiệu có bảo vệ không được phép hoặc trở nên o## Có hai phát biểu gán tín hiệu có bảo vệ trong mô hình này: một là phát biểu gán giá trị cho ạ và một là phát biểu gán giá trị cho gb Một phát biểu gán tín hiệu có bảo vệ được nhận đạng bởi từ khóa GƯUARDED giữa <= và phần biểu thức của
phát biểu
Khi port elk cia thuc thé cé giá trị “U', biểu thức bảo vệ đúng va giá trị của tín hiệu ngõ vào ở được định thời trên ngõ ra q sau 5 ns va gid tri NOT của đ được định thời trên ngõ ra qÖ sau 7 ns
Khi port clk c6 gid trị “0Œ hoặc một giá trị hợp lệ bất kỳ nào Khác của kiểu, các ngõ ra g và gb trd nén off và giá
trị của tín hiệu ngõ ra được xác định bởi giá trị mặc định được gán bởi hàm phân tích
Khi clk khong bang ‘1’, cdc driver được tạo ra bởi các phép gán tín hiệu cho g và gb trong kiến trúc này thực sự trở nên off Caéc đriver không đóng góp cho giá trị tổng thể của tín hiệu
Các phép gán tín hiệu có thể được bảo vệ bằng cách sử dụng từ khóa GUARDED Một tín hiệu mới được khai báo hoàn toàn trong khối mỗi khi một khối có biểu thức bảo vệ Tín hiệu này được gọi là GUARD Giá trị của tín hiệu này
là giá trị của biểu thức bảo vệ Tín hiệu này có thể được sử đụng để kích các quá trình khác xảy ra
Các khối hữu ích đối với việc phân chia hệ thống thành các đơn vị nhỏ hơn, dễ quản lý hơn Các khối cho phép người thiết kế sự linh hoạt để tạo ra nhiễu thiết kế lớn từ những khối xây dựng sẵn nhỏ hơn và cung cấp một phương pháp tiện lợi để điều khiển các driver trên một tín hiệu
9.2.7 Tóm tắt
Trong mục 9.1, các khái niệm về các mô hình xây dựng sắn mang tính cấu trúc được để cập Mục này là mục đầu tiên trong nhiều mục đề cập đến việc mô hình ở mức hành vi
"Trong mục này ta đã thảo luận:
- _ ác phép gán tín hiệu là đạng cơ bản nhất của việc mô hình ở mức hành vi
- _ Ơác phát biểu gán tín hiệu có thể được chọn lựa hoặc có điều kiện
- — Các phát biểu gán tín hiệu có thể chứa các trì hoãn
- VHDL chứa trì hoãn quán tính và trì hoấn truyền tải
- — Các thời điểm delta của mô phỏng được sử đụng để sắp đặt các sự kiện theo thời gian
- _ Các driver trên một tín hiệu được tạo ra bởi các phép gán tín hiệu
-_ Các generic được sử dụng để chuyển đữ liệu cho các thực thé
- _ Các phát biểu khối cho phép tạo nhóm bên trong một thực thể,
~ Các phát biểu khối có bảo vệ cho phép ta có khả năng làm cho các driver bên trong khối trở nén off
9.3 Xử lý tuần tự
9.3.1 Phát biểu quá trình
Trong một kiến trúc cúa một thực thể, tất cả các phát biểu là đồng thời Vậy các phát biểu tuần tự hiện hữu ở nơi nao trong VHDL ? Có một phát biểu được gọi là phát biểu quá trình (process statement) chi chứa các phát biểu tuần
tự Bản thân phát biểu quá trình là một phát biểu đồng thời Một phát biểu quá trình có thể hiện hữu trong một kiến
trúc và xác định các miễn trong kiến trúc ở đó tất cả các phát biểu là tuần tự
Một phát biểu quá trình có phẩn khai báo và phần phát biểu Trong phân khai báo, các kiểu, các biến, các hằng, các chương trình con v.v được khai báo Phần phát biểu chỉ chứa các phát biểu tuần tự Các phát biểu tuần tự gồm có
Trang 27
Chương 9: VHDL
các phát biểu CASE, các phát biếu IF THEN ELSE, các phát biểu LOOP v.v Trong mục này ta cũng sẽ khảo sát các
phát biểu tuần tự Trước tiên ta hãy khảo sát một phát biểu quá trình được cấu trúc ra sao
Danh sách độ nhạy
Phát biểu quá trình có thể có một danh sách độ nhạy (sensitivity list) tường minh Danh sách này định nghĩa các tín hiệu làm cho các phát biểu bên trong phát biểu quá trình thực thi mỗi khi một hoặc nhiều phần tử của danh sách
thay đổi giá trị Danh sách độ nhạy là một danh sách các tín hiệu sẽ làm cho quá trình thực thi, Quá trình phải có
một danh sách độ nhạy tường minh hoặc như ta sẽ để cập sau, mot phdt biéu WAIT
Các trình tổng hợp sẽ có lúc khó khăn với các danh sách độ nhạy không được chỉ rõ hoàn toàn Các trình tổng hợp nghĩ các phát biểu quá trình dùng để mô tả mạch logic tuần tự hoặc mạch logic tổ hợp Nếu một quá trình chứa một danh sách độ nhạy không hoàn chỉnh, danh sách không chứa tất cả các tín hiệu ngõ vào được sử dụng trong quá trình, ta không có cách nào để ánh xạ về mặt chức năng đến mạch logic tuần tự hoặc tổ hợp
Quá trình thí đụ
Ta hãy khảo sát một thí dụ về phát biểu quá trình trong một kiến trúc để thấy phát biểu quá trình khớp với hình ảnh lớn ra sao và để cập một số chỉ tiết về cách thức làm việc của phát biểu quá trình
Dưới đây là mô hình cổng NAND 2-ngõ vào:
LIBRARY IEEE; BEGIN
USE IEEE.std_logic_1164,ALL; temp := NOT (a and b);
IF (temp = ‘1’) THEN ENTITY nand2 IS ce <= temp AFTER 6 ns;
PORT( a, b : IN std_logic; ELSIF (temp = ‘0’) THEN
c: OUT std_logic}; c«= temp AFTER 5 ns;
END nand2; ELSE
ARCHITECTURE nand2 OF nand2 IS ce <= temp AFTER 6 ns;
BEGIN END IF;
PROCESS a, b } END PROCESS;
VARIABLE temp : std_logic; END nand2;
Thi dụ này trình bày cách thức viết mô hình của cổng NAND 2-ngõ vào bằng cách sử dụng phát biểu quá trình Phát biểu USE khai báo một gói của VHDL cung cấp thông tin cần thiết để cho phép mô hình cổng NAND này bằng mach logic 9 trang thái Đây là gói mạch logic chuẩn Ta sẽ để cập các gói trong mục 9.5 Phat biểu USE được bao gồm
để mà mô hình này có thể được mô phóng bằng một trình mô phỏng của VHDL mà không cần sự sửa đổi nào
Thực thể khai báo 3 port cho cổng nønđ2 Port ø và port b là các port ngõ vào của cổng nanđ2 còn port e là port ngõ ra Tên của kiến trúc cùng tên với tên của thực thể Điều này hợp lệ và có thể tránh được một số rắc rối khi cố tạo
ra các tên duy nhất
Kiến trúc chỉ chứa một phát biểu, phát biểu quá trình đồng thời Phần khai báo quá trình bắt đầu ở từ khóa PROCESS và kết thúc ở từ khóa BEGIN Phần phát biểu của quá trình bắt đầu bằng từ khóa BEGIN và kết thúc ở từ
khóa END PROCESS Phần khai báo quá trình khai báo một biến cục bộ có tên là /emp Phần phát biểu của quá trình
có hai phát biểu tuần bự bên trong: một phát biểu gán biến:
c <= temp AFTER 6 ns; END IF;
ELSIF (temp = ‘0’) THEN
Quá trình chứa một danh sách độ nhạy tường minh có hai tín hiệu chứa bên trong:
PROCESS a, b ) v
Trang 28
Quá trình chịu ảnh hưởng bởi các tín hiệu ø và ð Trong thí dụ này ø và ö là các port ngõ vào của mô hình Các
port ngõ vào tạo ra các tín hiệu có thể được sử dụng làm các tín hiệu ngõ vào, các port ngõ ra tạo ra các tín hiệu có thể được sử dụng làm các tín hiệu ngõ ra, còn các port vào/ra tạo ra các tín hiệu có thể được sử dụng làm cả hai Mỗi khi port a hoge port 6 cé thay đổi giá trị, các phát biểu bên trong quá trình được thực thí Mỗi phát biểu được thực thi theo trình tự nối tiếp bắt đầu bằng phát biểu ở trên cùng của phát biểu quá trình và tụt xuống đến đáy Sau khi tất cá các phát biểu được thực thi một lần, quá trình chờ một thay đổi khác ở một tín hiệu hoặc port trong danh sách độ nhạy
Phát biểu đâu tiên bên trong phát biểu quá trình là một phép gán biến, phát biểu này gán một giá trị cho biến
‡emp Trong mục trước ta đã để cập cách thức các tín hiệu nhận các giá trị được định thời sau một khoảng thời gian hoặc sau một trì hoãn đelta Phép gán biến xảy ra tức thời khi phát biểu được thực thi Thí dụ trong mô hình này,
phát biểu đầu tiên phải gần một giá trị cho biến temp để phát biểu thứ hai sử đụng Phép gan biến không có trì hoãn
mà xảy ra tức thời,
Ta hãy khảo sát hai thí dụ để minh họa điểm này rõ ràng hơn Cả hai thí đụ là các mô hình của lính kiện MUX 4
> 1 Ky higu và bảng giá trị đã được trình bày ở hình 9.2 và 9,3 Một trong 4 tín hiệu ngõ vào được truyền đến ngõ ra
phụ thuộc vào các giá trị của hai ngõ vào A và B Mô hình thứ nhất của MUX này là mô hình không đúng, còn mô hình thứ hai là phiên bản đúng
Thí dụ MUX không đúng
Mô hình không đúng của MU có một thiếu sót trong mô hình làm cho mô hình tạo ra các kết quả sai Điều nay
được trình bày ở mô hình sau đây:
PORT ( i, il, i2, 13, a, b : IN std_logic: WHEN 0 =>
q: OUT std_logic); q <= 10 AFTER 10 ns;
q <= [1 AFTER 10 ns;
Mỗi khi một trong các tín hiệu ngõ vào trong danh sách độ nhạy của quá trình thay đổi giá trị, các phát biểu tuần
tự trong quá trình được thực thi Phát biểu quá trình trong thí du thứ nhất này chứa 4 phát biểu tuần tự Phát biểu thứ nhất khởi động tín hiệu cục bộ zmuxoai đến giá trị được biết (0) Các phát biểu kế tiếp cộng các giá trị cho biến cục
bộ phụ thuộc vào giá trị của các tín hiệu ngõ vào ø và ò Sau cùng phát biểu CASE chọn một tín hiệu ngõ vào để tuyên đến ngõ ra đựa trên giá trị của tín hiệu muxudi Tuy nhiên mô hình này có một thiếu sót quan trọng Phát biểu
Trang 29Chương 9: VHDL 29
Tnuxval <= 0)
làm cho giá trị 0 được định thời như là một sự kiện đối với tín hiệu m+uxuai Trên thực tế, giá trị 0 được định thời
trong một sự kiện ở đelta mô phông kế do bởi không có trì hoãn nào được chỉ ra Khi phát biểu thứ hai:
Tin hiéu muaval có một giá trị không thích hợp khi đưa vào quá trình Giá trị của muxua! không được thay đổi cho đến khi quá trình đã hoàn tất việc thực thi tất cả các phát biểu tuần tự chứa trong quá trình Thật ra nếu tín hiệu
b có giá trị “U' thì bất kỳ giá trị không thích hợp nào mà tín hiệu có, khi đưa vào quá trình sẽ có giá trị 2 được cộng
thêm vào
Phương pháp tốt hơn để thực hiện thí dụ này được trình bay trong thí đụ kế tiếp Khác nhau duy nhất giữa hai
mô hình, mô hình kế và mô hình trước, là khai bao muxval và các phép gán cho zuxoaj Trong mô hình trước, muxpai
là một tín hiệu và các phát biểu gán tín hiệu được sử dụng để gán các gid tri cho muxval Trong thí dụ kế tiếp, muxpal
là một biến và các phép gán biến được sử dụng để gán cho muxoal
Thí dụ MUX đúng
Trong thí đụ này mô hình không đúng được viết lại để phần ánh các giải pháp đối với các vấn để của mô hình vừa rối:
LIBRARY IEEE; muxval := muxval + 2;
USE IBEE.std_logic_1164ALL; END IF;
ENTITY mux IS CASE muxval IS
PORT ( ¡0, i1, i2, i3, a, b : IN std logic; WHEN 0 =>
q: OUT std_logic); q <= 10 AFTER 10 ns;
END mux; WHEN 1 =>
ARCHITECTURE better OF mux IS
BEGIN
PROCESS ( iO, il, i2, i3, a, b)
VARIABLE muxval : INTEGER;
được thực thi, giá trị 0 được đặt vào biến mxud tức khắc Giá trị này không được định thời do béi muxval trong thi
đụ này là một biến, không phải là một tín hiệu Các biến biểu diễn việc lưu cục bộ khác với các tín hiệu biểu diễn liên
kết nối mạch Lưu cục bộ được cập nhật ngay tức thời và giá trị mới có thể được sử dụng sau đó trong mô hình cho các
tính toán khác nữa
Trang 30Mô tả BNF của phát biểu IF như sau:
if_statement ::= sequence_of_statements}
sequence_of_statements sequence_of_statements]
Từ mô tả BNF ta có thể kết luận rằng phát biểu IF bắt đầu bằng từ khóa IF và kết thúc bằng từ khóa END IF
(hai từ riêng biệt) Cũng có hai mệnh để tùy chọn: mệnh để ELSIF và mệnh đề ELSE Mạnh đề ELSIF là khả lặp lại
— nhiều hơn một ménh dé ELSIF được cho phép, còn ménh dé ELSE 1a tùy chọn và chỉ một mệnh đề duy nhất được cho phép Cấu trúc điều kiện trong tất cả trường hợp là biểu thức logie Đây là biểu thức được đánh giá là đúng hoặc sai Mỗi khi điểu kiện đánh giá có giá trị đúng, chuỗi các phát biểu theo sau được thực thí Nếu không có điều kiện nào đúng, chuỗi phát biểu của mệnh để ELSE được thực thi, nếu chuỗi này tổn tại Ta hãy phân tích một vài thí du dé có được sự hiểu biết tốt hon vé BNF quan hé véi m4 VHDL ra sao
Thi dy thứ nhất trình bày cách viết một phát biéu IF don giản:
IF (x < 10) THEN
ais b;
END IF;
Phát biểu IF bắt đầu bằng từ khóa IF Kế đến là điều kiện (x < 10) được tiếp theo bằng từ khóa THEN Điều kiện
là đúng khi giá trị của x nhồ hơn 10, ngược lại điều kiện sai Khi điều kiện đúng, các phát biểu ở giữa THEN và END
IF được thực thi Trong thí đụ này phát biểu gán (ø := b) được thực thì mỗi khi x < 10 Điểu gì xảy ra nếu x lớn hơn hay bằng 10 ? Trong thí dụ này không có mệnh để ELSE nên không có phát biểu nào được thực thi trong phát biểu IF
"Thay vào đó điều khiển sẽ được chuyển đến phát biéu sau END IF
'Ta hãy khảo sát một thí dụ khác trong đó mệnh dé ELSE cé ích:
weekend := TRUE;
Trong thí đụ này ta có hai bién weekend vA weekday Cac biến này được thiết lập phụ thuộc vào giá trị của tín hiệu được gọi là day Biến weekend được thiết lập là TRUE mỗi khi day bing véi saturday hoặc sunday Ngược lại biến
Trang 31nếu đay khơng bằng với sưnday hoặc saturday, phần của phát biểu BLSE được thực thi
Phát biểu IF cĩ thể cĩ nhiều phần phát biểu ELSIF nhưng chỉ cĩ một phần phát biểu ELSE Nhiều hơn một phát
biểu tuân tự cĩ thể hiện hữu giữa mỗi phần phát biểu
9.3.4 Phát biểu CASE
Phát biểu CASE được sử dụng mỗi khi giá trị của một biểu thức đơn cĩ thể được sử dụng để chọn giữa một số các
hành động Dưới đây là BNF của phát biểu CASE:
case_siatement ::= {sequential_statement}
CASE expression IS choices ::=
case_statement_alternative choice{} choice}
Một phát biểu CASE gồm cĩ từ khĩa CASE được theo sau bởi một biểu thức và từ khĩa I8 Biểu thức hoặc trả vẻ
một giá trị tương thích với một trong các CHOICES trong phần phát biểu WHEN hoặc tương thích với mệnh để
OTHERS Nếu biểu thức tương thích với phần CHOICE cia ménh dé WHEN choices =>, sequence_of_statements theo sau được thực thi Sau khi các phát biểu này được thực thị, điều khiển được chuyển đến phát biểu theo sau mệnh để
END CASE
Hoặc mệnh để CHOICES phải liệt kẽ mọi giá trị cĩ thể cĩ của kiểu được trả về bởi biểu thức hoặc lựa chọn sau cùng phải được chứa một mệnh để OTHERS
'Ta hãy khảo sát một số thí du để củng cố những điều mà BNF phát biểu:
CASE instruction IS WHEN load |store =>
WHEN load_accum => process_IO(addr);
accum <= data; WHEN OTHERS =>
WHEN store_accum => process_error(instruction);
data_out <= accum; END CASE;
Phát biểu CASE sẽ thực thi phát biểu thích hợp phụ thuộc vao gid tri cia instruction Néu gid trị của instruction
là một trong các chọn lựa được liệt kê trong các mệnh đề WHEN, phát biểu theo sau ménh dé WHEN duoc thực thi Ngược lại, phát biểu theo sau mệnh để OTHERS được thực thi Trong thí dụ này khi giá tri cia instruction là lòd_accum, phát biểu gán thứ nhất được thực thi Nếu giá trị của insiruction là load hoae store, thủ tục process_IO được gọi
Nếu gid tri eda instruction ở ngồi tâm của các chọn lựa đã cho, mệnh để OTHERS tương thích với biểu thức và phát biểu theo sau mệnh để OTHERS được thực thi Đây là một lỗi nếu mệnh đề OTHERS khơng hiện hữu và các chon lựa được cho khơng bao trùm mọi giá trị cĩ thể cĩ cho kiểu của biểu thức
Trong thí dụ kế, một kiểu phức tạp hơn được trả về bởi biểu thức Phát biểu CASE sử dụng kiểu này để chọn trong
các chọn lựa của phát biểu:
TYPE vectype IS ARRAY(0 TO 1) OF BIT, VARIABLE bit_vee : vectype:
Trang 32"Thí dụ này trình bày một phương pháp biến đổi mét dai bit thanh mét sé nguyên Khi cả hai bit của bién dit_vec
chứa các giá tri ‘0’, chọn lựa đầu tiên “00” tương thích và giá trị 0 được trả về Khi cá hai bịt là các giá trị ‘V’, gid trị 3
hoặc “11” được trả về Phát biểu CASE này không cẩn mệnh dé OTHERS do tất cả các giá trị có thể có của biến bit uec được liệt kẽ bởi các chọn lựa
9.3.5 Phát biểu LOOP
Phát biểu LOQP được sử dụng mỗi khi một thao tác cân được lặp lại Các phát biểu LOOP được sở dụng khi khả
năng lặp đi lặp lại được cần đến để thực thi một mô hình
Sau đây là BNF của phát biểu LOOP;
Phát biểu LOOP có một nhãn tùy chọn, nhãn này có thể được sử dụng để nhận biết phát biểu LOOP Phát biểu
LOOP cé mét iteration_scheme tiy chọn xác định loại phát biểu LOOP nào dang duge str dung Iteration_scheme nay
bao gồm hai loại phát biểu LOOP: phát biểu LOOP “WHILE condifion” và phat biéu “FOR identifier IN
discrete_range” Vong FOR lap vong mét số lân được chỉ ra trong điscrete_range trừ khi vòng lặp được thoát Phát biểu WHH.E eondition LOOP sẽ lặp vòng, miễn sao biểu thức điều kiện là đúng
Ta hãy khảo sát hai thí dụ để thấy các phát biểu này hoạt động ra sao:
WHILE (day = weekday) LOOP
day := get_next_day(day);
END LOOP;
Thi du nay sir dung dang “WHILE condition” cha phát biểu LOOP Điều kiện được kiểm tra mỗi lần trước khi vòng lặp được thực thi Nếu điều kiện là TRUE, phát biểu LOOP được thực thi Điều khiển kế đến được chuyển ngược trở về
nơi bắt đầu vòng lặp Điều kiện được kiểm tra lần nữa Nếu TRUE, vòng lặp lại tiếp tục được thực thi, nếu không việc
thực thi sẽ tiếp tục ở phát biểu theo sau mệnh dé END LOOP
Phiên bản khác của phát biểu LOOP là vòng lặp FOR:
FOR i IN 1 to 10 LOOP
isquared(i) := i * i;
END LOOP;
Vong lặp này thực thi 10 lần mỗi khi việc thực thi bắt đầu Chức năng của vòng lặp này là tính các bình phương
từ 1 đến 10 và chèn chúng vào trong dai tín higu i_squared Bién chỉ số ¿ bắt đầu ở giá trị cực trái của tâm và được tăng cho đến giá trị cực phải của tắm
Trang 33
Chương 9: VHDL
Trong một số ngôn ngữ, chí số của vòng lặp (trong thí dụ này là ¿) có thể được gán một giá trị bên trong vòng lặp
để thay adi gid tri VHDL khong cho phép bất kỳ phép gán nào cho chỉ số vòng lặp Điều này cũng ngăn ngừa chỉ số
vòng lặp hiện hữu như là giá trị trả về của một hàm hoặc là một thông số xuất hoặc nhập/xuất của một thủ tục
Điểm thú vị khác liên quan đến các phát biểu FOR LOOP là giá trị chỉ số ¿ được khai báo một cách cục bộ bởi
phát biểu FOR Biến i không cẩn được khai báo tường minh trong một quá trình, hàm hoặc thủ tục vì trong phát biểu
FOR LOOP, chỉ số vòng lặp được khai báo một cách cục bộ
Nếu một biến khác có cùng tên hiện hữu trong một quá trình, hàm hoặc thủ tục, hai biến này được xử lý như là
hai biến riêng biệt và được truy cập theo ngữ cảnh, Ta hãy khảo sát một thí dụ để minh họa điều này:
PROCESS() q(i) := a; ~ q is a variable
BEGIN + END LOOP;
x <=i+1; xisa signal END PROCESS;
FOR i IN 1 to a/2 LOOP
Mỗi khi giá trị của biến ¿ trong danh sách độ nhạy của quá trình thay đổi giá trị, quá trình sẽ được gọi Phát biểu
thứ nhất sẽ định thời giá trị ¿ + 1 trên tín hiệu x Kế đến vòng lặp FOR được thực thi Giá trị chỉ số ¿ không phải là
đối tượng giống như tín hiệu ¡ được sử dụng để tính giá trị mới cho tín hiệu x Đây là các đối tượng riêng biệt, mỗi đối
tượng được truy cập tùy vào ngữ cảnh Đên trong vòng lặp FOR, khi một tham chiếu được thực hiện đối với ¿, chỉ số
cục bộ được khôi phục Nhưng ở bên ngoài vòng lặp FOR, khí một tham chiếu được thực hiện đối với ¿, giá trị của tín
hiệu ¿ trong danh sách độ nhạy của quá trình được khôi phục,
Các giá trị được sử dụng để chỉ ra tầm trong vòng lặp FOR không cần phải là các giá trị số nguyên cụ thể, như đã được trình bày trong các thí dụ Tâm này có thể là một tẩm rời rạc bất kỳ Diserete_range có thể được biểu thị như là một subfype_indication hoặc một phát biểu tâm Ta hãy khảo sát thêm vài thí đụ nữa về cách thức các vòng lặp FOR được xây đựng với các tầm:
PROCESS(clk) ELSIF i = sun THEN
TYPE day_of_week IS (sun, mon, tue, wed, thur, fri, church <= family;
sat); ELSE BEGIN dad <= go_to_work;
FOR i IN day_of_week LOOP END IF;
IF i= sat THEN END LOOP;
son <= mow_lawn; END PROCESS;
Trong thí đụ này tầm được chỉ ra bởi kiểu Bằng cách chỉ ra kiểu duéi dang tẩm, trình địch xác định giá trị cực
trái là sun va gid trị cực phải là sa Tâm được xác định từ sun đến sơi Nếu một tầm tăng được yêu cầu, ta sử dụng mệnh đề £o Mệnh đề đonio có thể được sử dụng để tạo ra tầm giảm Đây là một thí dụ:
BEGIN END LOOP;
FOR i IN x downto y LOOP END PROCESS;
Khi các giá trị khác nhau của z và y được chuyển vào, các tầm khác nhau của ddi w duge sao chép dén cing vi tri trong dải q
Phát biểu NEXT
Có nhiều trường hợp trong dé ta cần dừng việc thực thi các phát biểu trong vòng lặp đối với thao tác lặp này và đi đến thao tác lặp kế tiếp VHDL bao gồm một cấu trúc thực hiện điều này
Phát biểu NEXT cho phép người thiết kế dừng việc xử lý thao tác lặp này và nhảy đến thao tác lặp kế tiếp Khi
phát biểu NEXT được thực thị, việc xử lý cia mô hình đừng lại ở điểm hiện tại và được chuyển đến nơi bắt đầu của phát biểu LOOP Việc thực thi bắt đầu bởi phát biểu đầu tiên trong vòng lặp nhưng biến vòng lặp được tăng đến giá trị của thao tác lặp kế tiếp Nếu giới hạn của thao tác lặp được đạt đến, việc xử lý sẽ dừng Nếu không, việc thực thi sẽ tiếp tục
Trang 34CONSTANT max_limit : INTEGER := 255; done(i) := TRUE;
BEGIN END IF;
FOR i IN 0 TO max_limit LOOP q(i) <= a(i) AND b(i);
IF (done(i) = TRUE) THEN END LOOP;
NEXT; END PROCESS;
Phát biểu quá trình chứa một phát biểu LOOP Về mặt logic phát biểu LOOP này “and” các bit của các đải ø và b
rồi đặt kết qua vao dai g Hanh vi nay tiếp tục mỗi khi cờ trong đải done không đúng Nếu cờ done đã được thiết lập
cho giá trị này của chỉ số i, phát biểu NEXT được thực thi Việc thực thi tiếp tực với phát biểu đầu tiên của vòng lặp
và chỉ số có giá trị ¿ + 1 Nếu giá trị của đải done không đúng, phát biểu NEXT không được thực thi và việc thực thi tiếp tục với phát biểu chứa trong mệnh để ELSE của phát biéu IF
Phát biểu NEXT cho phép người thiết kế khả năng dừng việc thực thi của thao tác lặp này và đi đến thao tác lặp
kế tiếp Có nhiều trường hợp khác trong đó nhu cầu dừng việc thực thi một vòng lặp một cách trọn vẹn Khả năng này
được cung cấp bởi phát biểu EXTT
9.3.6 Phát biểu EXIT
Trong thời gian thực thi một phát biểu LOOP, có thể ta cần nhảy ra khỏi vòng lặp Điều này có thể xây ra đo một lỗi quan trọng xuất hiện trong thời gian thực thì mô hình hoặc toàn bộ việc xử lý kết thúc sớm Phát biểu EXIT cia
VIIDL cho phép người thiết kế thoát hoặc nháy ra khỏi một phát biểu LOOP hiện đang thực thi Phát biểu EXTT làm
cho việc thực thi dừng ở vị trí của phát biểu này Việc thực thi tiếp tục ở phát biểu theo sau phát biểu LOOP
Dưới đây là một thí dụ mình họa điều này:
PROCESS(a) ELSE
variable int_a : integer; int_a := int_a -1;
BEGIN q(i) <= 3.1416 / REAL(int_a * i); signal
FOR i IN 0 TO max_limit LOOP END LOOP;
IF (int_a <= 0) THEN less than or y<dq;
EXIT; equal to END PROCESS;
Bên trong phát biểu quá trình này, giá trị của ¿n£_ø luôn luôn được giả định là giá trị đương lớn hơn 0 Nếu giá trị của in£_ø âm hoặc bằng 0, một điều kiện lỗi sinh ra và việc tính toán sẽ không được hoàn tất Nếu giá trị của ¿ní_a
nhỏ hơn hoặc bằng 0 thì phát biểu IF là đúng và phát biểu EXIT sẽ được thực thi Vòng lặp kết thúc ngay lập tức và
phát biểu kế tiếp được thực thi sẽ là phát biểu gán cho y sau phát biểu LOOP,
Nếu đây đã là một thí dụ hoàn chỉnh, người thiết kế cũng sẽ muốn báo động cho người sử dụng mô hình biết một lỗi quan trọng đã xuất hiện Một phương pháp để thực hiện chức năng này là sử dụng phát biếu ASSERT, phát biểu
này sẽ được để cập sau trong mục này `
Phát biểu EXIT có 3 loại hoạt động cơ bán Loại thứ nhất yêu cầu phát biểu EXIT không có nhãn vòng lặp hoặc WHEN condition Néu các điều kiện này là đúng, phát biểu EXIT sẽ hoạt động như sau: phát biểu EXIP chỉ thoát khỏi
phát biểu LOOP hiện tại nhất gặp phải Nếu phát biểu EXIT ở bên trong một phát biểu LOOP và phát biểu LOOP này được lổng trong một phát biểu LOOP khác, phát biểu EXIT chỉ có thể thoát khôi phát biểu LOOP bên trong Việc thực
thì vẫn đuy trì trong phát biểu LOOP bên ngoài, Phát biểu EXIT chỉ thoát khỏi phát biểu LOOP gần nhất Trường
hợp này được trình bày trong thí dụ trước
Nếu phát biểu EXIT có một nhãn vòng lặp tày định thì phát biểu EXTT khi gặp phải sẽ hoàn tất việc thực thì
vòng lặp được chỉ ra bởi nhãn vòng lặp Do đó phát biểu kế tiếp được thực thí sẽ là phát biểu theo sau END LOOP của
vòng lặp được đánh nhăn Sau đây là một thí dụ:
Trang 35
Chương 9: VHDL
first_loop: FOR i IN 0 TO 100 LOOP EXIT first_loop; exits the first loop and
second_loop:FOR j IN 1 TO 10 LOOP second loop
“ END LOOP;
EXIT second_loop; exits the second loop END LOOP;
only END PROCESS;
Phát biểu EXIT đầu tiên chỉ thoát khỏi vòng lặp bên trong nhất do phát biểu này chỉ hoàn tất việc thực thi của vòng lặp được đánh nhãn second-ioop Phát biểu EXIT sau cùng hoàn tất việc thực thỉ vòng lặp được đánh nhãn frst_loop, phát biểu này thoát khỏi vòng lặp thứ nhất và thứ hai
Nếu phát biểu EXIT có WHEN condi#ion tùy chọn, phát biểu EXIT chỉ thoát khói vòng lặp nếu điều kiện được chỉ
ra là đúng Phát biểu kế tiếp được thực thi phụ thuộc vào phát biểu EXIT có nhãn vòng lặp được chỉ ra hay không Nếu một nhãn vòng lặp được chỉ ra, phát biểu kế tiếp thực thi được chứa trong phát biểu LOOP được chỉ ra bởi nhãn vòng lặp Nếu không có nhãn vòng lặp nào hiện điện, phát biểu kế tiếp được thực thi ở trong vòng lặp bên ngoài tiếp
theo Dưới đây là một thí dụ cho phát biểu EXIT có WHEN condition:
EXIT first_loop WHEN (i < 10};
Phát biểu này hoàn tất việc thực thi vòng lặp có nhan 1a first_loop khi bidu thie i < 10 18 dung
Phát biểu EXTT cung cấp một phương pháp đễ dàng và nhanh chóng để thoát khỏi phát biểu LOOP khi toàn bộ
công việc xử lý kết thúc hoặc một điều kiện lỗi hay cảnh báo xảy ra
9.3.7 Phát biểu ASSERT
Phát biểu ASSERT là phát biểu rất hữu ích để tường thuật các chuỗi nguyên bản cho người thiết kế Phát biểu
ASSERT kiém tra giá trị của một biểu thức logic xem đúng hay sai Nếu giá trị là đúng, phát biểu, này không làm gì
cả Nếu giá trị là sai, phát ASSERT biểu xuất một chuỗi đạng văn bản được chỉ ra bởi người sử dụng đến đầu ra chuẩn của thiết bị đầu cuối
Người thiết kế cũng có thể chỉ ra mức độ nghiêm trọng để xuất chuỗi đạng văn bản Theo sự tăng dân của mức độ nghiêm trọng ta có 4 mức: chú ý, cảnh báo, lỗi và thất bại Mức nghiêm trọng cung cấp cho người thiết kế khả năng phân loại thông điệp thành các loại thích hợp
Loại “chú ý” thường được dùng để thông tin cho người sử đụng về điều gì hiện đang xảy ra trong mô hình Thí dụ, nếu mô hình có một vòng lặp lớn chiếm nhiêu thời gian để thực thi, một khẳng định mức độ nghiêm trong 14 chú ý có thể được dùng để thông báo cho người sử dụng biết vòng lặp đã thực hiện được bao nhiêu phần trăm
Các khẳng định loại “cảnh báo” có thể được sử dụng để báo động cho người thiết kế các điều kiện, mặc dù không
trầm trọng, có thể gây ra hành vi sai lậm sau này Thí dụ, nếu mô hình kỳ vọng một tín hiệu sẽ có một giá trị được biết khi một quá trình nào đó đang thực thi, nhưng tín hiệu lại có giá trị khác, đây có thể không phải là một lỗi như trong thí dụ của phát biểu EXTT nhưng một cảnh báo cho người sử dụng rằng kết quả có thể không như mong muốn
Các khẳng định mức độ nghiêm trọng là “lỗi” được sử dụng để báo động cho người thiết kế các điểu kiện sẽ làm
cho mô hình hoạt động sai hoặc không hoạt động gì cả Nếu kết quả của một tính toán đã được giả định trả về một giá trị dương nhưng lại trả về một giá trị âm, phụ thuộc vào thao tác, điểu này có thể được xem như là rnột lỗi
Các khẳng định mức độ nghiêm trọng là “thất bại” được sử dụng để báo động cho người thiết kế các điều kiện bên trong mô hình có thể có các ảnh hưởng rất nghiêm trọng Thí dụ cho một điêu kiện như vậy đã được để cập trong
phần phát biểu EXIT Viéc chia cho 0 là một thí dụ về một thao tác có thể gây ra một thất bại trong mô hình Một thí
dụ khác là định địa chỉ vượt quá phạm vi kết thúc của một đải Trong cả hai trường hợp, mức độ nghiêm trong thất bại có thể báo cho người thiết kế biết rằng mô hình đang hoạt động sai
Mức độ nghiêm trọng là một phương pháp tốt để phân loại các khẳng định thành các thông điệp mang thông tin
cho người thiết kế, các thông điệp này có thể mô tả các điểu kiện trong thời gian thực thi mô hình Phát biểu ASSERT
hiện nay được bỏ qua bởi các trình tổng hợp Do phát biểu ASSERT được sử dụng chủ yếu để quản lý ngoại lệ trong
khi viết mô hình, không có phần cứng nào được xây dựng
BNF của ASSERT
Sau đây là mô tả BNF của phát biểu ASSERT:
Trang 36Có hai mệnh để tùy chọn trong phát biểu ASSERT Mệnh để đầu tiên là mệnh đẻ REPORT Mệnh đề REPORT
cung cấp cho người thiết kế khả năng chỉ ra giá trị của biểu thức đạng văn bản để xuất Mệnh đề thứ hai là mệnh để SEVERITY Ménh dé SEVERITY cho phép người thiết kế chỉ ra mức độ nghiêm trọng của phát biểu ASSBERT Nếu
mệnh dé REPORT không được chi ra, giá trị mặc định của phát biểu ASSERT là sự vi phạm khẳng định Nếu mệnh
đẻ SEVERITV không được chỉ ra, giá trị mặc định là lỗi
Ta hãy khảo sát một thí dụ thực tế của phát biểu ASSERT để minh họa phát biểu này hoạt động ra sao Thi du thực hiện một kiểm tra thiết lập đữ liệu giữa hai tín hiệu điều khiến flipfop D Hầu hết các fipflop yêu cầu ngõ vào
dữ liệu đin phải ổn định giá trị trong một khoảng thời gian trước khi cạnh của xung clock xuất hiện Thời gian này
được gọi là thời gian thiết lap (setup time) va dam bdo rằng giá trị đin sẽ được đưa vào fiiplop theo cạnh của xung clock néu thời gian thiết lập được thỏa Điêu này được trình bày trong mô hình sau đây Thí dụ khẳng định này sé dua
ra một thông báo lỗi cho người thiết kế nếu thời gian thiết lập bị vi phạm (khẳng định là sai):
VARIABLE last_d_change : TIME := 0 ns; last_clk_value := clk;
VARIABLE last_d_value : std_logic := ‘X’; TF (clk = ‘1’) THEN
VARIABLE last_clk_value : std_logic := x ASSERT (NOW - last_d_change >= 20 ns)
last_d_change := NOW; not equal END IF;
last_d_value := din; END IF;
Quá trình này sử dụng 3 biến cực bộ để ghi thời điểm và giá trị sau cùng của tín hiéu din cũng như giá trị của tín
hiệu clÈ Bằng cách lưu giá trị sau cùng của din va clk, ta có thể xác định có phải tín hiệu đã thay đổi giá trị hay không Bằng cách ghi thời điểm sau cùng mà địn thay đổi, ta có thể đo từ thời điểm hiện tại đến chuyển tiếp sau cùng
cia din để xem có phải thời gian thiết lập đã bị vi phạm hay không (Một phương pháp đễ hơn sử dụng các thuộc tính
sẽ được trình bày ở mục 9,5)
Mỗi khi din hoặc cik thay đổi, quá trình này được gọi Bước đầu tiên trong quá trình là xét xem có phải tín hiệu din đã thay đổi Nếu có, thời điểm của chuyển tiếp sẽ được ghi bằng cách sử dựng hàm tiền định nghĩa NOW Hàm này trả về thời điểm mô phỏng hiện tại Tương tự giá trị sau cùng nhất của đin được lưu để kiểm tra sau này
Bước kế tiếp là xét xem có phải tín hiệu clk da thuc hiện một chuyển tiếp Nếu biến last_cÍk_ualue không bằng với
giá trị hiện tại của ck, ta biết rằng một chuyển tiếp đã xảy ra Nếu tín hiệu cỉk có giá trị“, ta biết một cạnh tăng đã xuất hiện Mỗi khi có một cạnh tăng xuất hiện trên tín hiệu clk, ta cẩn kiểm tra thời gian thiết lập có bị vi phạm không Nếu chuyển tiếp sau cùng trên tín hiệu địn cách đây nhỏ hơn 20 na, biểu thức:
(NOW - last_D_change)
“Thông điệp được thông báo cho người sử dụng có, ở mức tối thiểu, chuỗi của người sử dựng và phân loại lỗi Một số trình mô phỏng còn bao gồm thời điểm của báo cáo khẳng định cũng như số dong trong tap tin khẳng định
Trang 37
Chương 9: VHDL
Phát biểu ASSERT sử dụng trong thí dụ này là phát biểu ASSERT tuần tự, do phát biểu này được bao gồm bên trong phát biểu PROCESS Phiên bản đồng thời của phát biểu ASSERT cũng tổn tại Phát biểu ASSERT đồng thời có cùng dạng với phát biểu ASSERT tuần tự và chỉ hiện hữu bên ngoài phát biểu PROCESS hoặc chương trình con
Phát biểu ASSERT đồng thời thực thi mỗi khi các tín hiệu bất kỳ hiện bữu bên trong biếu thức điều kiện có một
sự kiện trên các tín hiệu này, Điều này khác với phát biểu ASSERT tuần tự, trong đó việc thực thi xuất hiện khi phát
biểu ASSERT tuần tự đạt đến bên trong phát biểu PROCESS hoặc chương trình con
9.3.8 Phat biéu WAIT
Phát biểu WAIT cung cấp cho người thiết kế khả năng dừng tạm thời việc thực thi tuần tự của một quá trình hoặc một chương trình con Các điểu kiện để tiếp tục việc thực thi quá trình hoặc chương trình con bị tạm đừng có thể được chỉ ra bởi 8 phương tiện khác nhau sau đây:
- WAIT ON (chờ) các thay đổi của tín hiệu
- WAIT UNTIL (ché cho dén khi) m6t biểu thức là đúng
- WAIT FOR (chờ trong) một khoảng thời gian cu thể
Các phát biểu WAIT có thể được sử đụng cho một số mục đích khác nhau Hiện nay công đụng phổ biến nhất là dùng để chỉ ra các ngõ vào xung clock cho các công cụ tổng hợp Phát biểu WAIT chỉ ra xung elock cho phát biểu quá trình được đọc bởi các công cụ tổng hợp nhằm tạo ra mạch logic tuần tự chẳng hạn như các thanh ghi và các flipflop
Các công dụng khác là trì hoãn việc thực thi quá trình trong một khoảng thời gian hoặc sửa đổi động danh sách độ nhạy của một quá trình
Ta hãy khảo sát một phát biểu quá trình có phát biểu WAIT được nhúng và được sử dụng để tạo ra mạch logic tuân tự:
PROCESS q<=d;
BEGIN - END PROCESS;
WAIT UNTIL clock = ‘1’ AND clock’EVENT;
Quá trình này được sử dụng để tạo ra một flipflop, flipflop này sẽ đưa giá trị của đ vào q khi ngõ vào xung cloek có
cạnh lên Thuộc tính “®VENT được gắn với ngõ vào eloek là đúng mỗi khi ngõ vào xung clock có một sự kiện trong thời
điểm delta hiện tai, (EVENT duge dé cập chỉ tiết ở mục 9.5) Kết hợp việc tìm giá trị “1' và sự thay đổi trên clock tao
ra chức năng cần thiết để tìm cạnh tăng trên ngõ vào ciock Kết quả là quá trình được giữ ở phát biểu WAIT cho đến khi xung cloek có cạnh lên Kế đến giá trị hiện tại của ở được gán cho g Việc đọc mô tả này vào trong công cụ tổng
hợp tạo ra một flipflop ÐD không có ngõ vào set (lập) và reset (xóa) Một reset đồng bộ có thể được tạo ra như sau:
PROCESS ELSE
BEGIN q <= d;
WAIT UNTIL clock = ‘1’ AND clock'EVENT; END IF;
IF (reset = ‘1’)} THEN END PROCESS;
q<= 05
Thi xung clock xuất hiện, tin hiéu reset duge kiểm tra trước tiên: Nếu tín hiệu này tich cyc, gid tri 0’ (gid tri x6a)
được gán cho q, ngược lại ngõ vào đ được gán Sau cùng một reset (xóa) không đồng bộ có thể được thêm vào như sau:
PROCESS q<sd;
BEGIN END IF;
IF (reset = ‘l’) THEN WAIT ON reset, clock; '
q<= 0 END PROCESS;
ELSIF clockEVENT AND clock = ‘1’ THEN
Phát biểu quá trình này chứa phát biểu WAIT ON sẽ làm cho quá trình dừng việc thực thi cho đến khi một sự kiện xuất hiện trên reset hoặc trên clock Phát biểu IF kế đến được thực thi và nếu reset tích cực, flipflop được xóa
theo cách không đồng bộ, ngược lại clock được kiểm tra để tìm cạnh tăng nhằm chuyển dữ liệu ở ngõ vào ở đến ngõ ra
q của flipflop.
Trang 38gay? 38 Tap 2: Lap trinh ASIC Phát biểu WAIT cũng có thể được sử dựng để điều khiển các tín hiệu mà một quá trình hoặc chương trình con bị ánh hưởng ở thời điểm bất kỳ trong thời gian thực thi Sau đây là một thí du:
BEGIN
WAIT ON a; 1
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 thời điểm 1 trong đoạn VHDI, được trình
bày ở trên Phát biểu WAIT làm cho quá trình đừng việc thực thi ở thời điểm đó Quá trình không tiếp tục việc thực
thi cho đến khi một sự kiện xuất hiện trên tín hiệu a Do vay quá trình chịu ảnh hưởng bởi các thay đổi trong tín hiệu
ø ở thời điểm này trong khi thực thi Khi một sự kiện xuất hiện trên tín hiệu ø, việc thực thi bắt đầu lần nữa ở phát
biểu ngay sau phát biểu WAIT ở thời điểm 1 Việc thực thi tiếp tục cho đến khi gặp phát biểu WAIT ở thời điểm 2
Một lần nữa việc thực thi bị dừng và quá trình lúc này bị ảnh hưởng bởi các sự kiện trên tín hiệu ð Do vậy bằng cách thêm vào hai phát biểu WAIT, ta có thể thay đổi đanh sách độ nhạy của quá trình,
Tiếp theo, ta để cập đến 3 tùy chọn khác nhau có sẩn của phát biểu WAIT:
- WAIT ON signal [, signal]
- WAIT UNTIL boolean_expression
- WAIT FOR time_expression
WAIT ON signal
Ta đã xem xét một thí dụ cho tùy chọn thứ nhất trong thi dụ quá trình ở trén Ménh dé WAIT ON signal chi ra
một đanh sách có một hoặc nhiều tín hiệu mà phát biểu WATT sẽ chờ các sự kiện trên các tín hiệu này Nếu một tín
hiệu bất kỳ trong danh sách tín biệu có một sự kiện xảy ra trên tín hiệu này, việc thực thí tiếp tục với phát biểu theo sau phát biểu WAIT Sau đây là một thí du:
WAIT ON a, b;
Khi một sự kiện xuất hién trén a hoặc ö, quá trình được tiếp tục với phát biểu theo sau phát biểu WAIT,
WAIT UNTIL expression
Mệnh đề WAIT UNTIL boolean_expression sé tạm đừng việc thực thi quá trình cho đến khi biểu thức trả về một giá trị đúng Phát biểu này tạo ra một cách hữu hiệu một đanh sách độ nhạy ẩn của các tín hiệu được sử dụng trong biểu thức Khi một tín hiệu bất kỳ trong biểu thức có các sự kiện xảy ra trên chúng, biểu thức được đánh giá Biểu thức phải trả về giá trị kiểu logic hoặc trình địch sẽ phan nàn 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 Ngược lại, quá trình tiếp tục bị tạm đừng Thí dụ:
WAIT ƯNTIL (( x * 10 ) < 100 );
Trong thí dụ này miễn là giá trị của tín hiệu x lớn hơn hoặc bằng 10, phát biểu WAIT tạm đừng quá trình hoặc chương trình con Khi giá trị của x nhỏ hơn 10, việc thực thi tiếp tục với phát biểu theo sau phat biéu WAIT
WAIT FOR time_expression
Ménh dé WAIT FOR time_expression sẽ tam đừng việc thực thi quá trình một khoảng thời gian được chỉ ra bởi
time_expression Sau khi thời gian được chỉ ra trong time_expression trôi qua, việc thực thi tiếp tục ở phát biểu theo sau phát biểu WAIT Xét hai thí dụ sau đây:
WAIT FOR 10 ns; — —
WAIT FOR (a *(b+c));
Trong thí dụ thứ nhất, biểu thức thời gian là một giá trị hằng số đơn giản Phát biểu WAIT tạm đừng việc thực thi trong 10 ns Sau khi 10 ns trội qua, việc thực thi tiếp tục với phát biểu theo sau phát biểu WAIT
Trong thí đụ thứ hai, biểu thức thời gian là biểu thức trước tiên phải được đánh giá để trả về một giá trị thời
gian Sau khi giá trị này được tính, phát biéu WAIT sit dung giá tri nay làm giá trị thời gian để chờ.
Trang 39
Chương 9: VHDIL,
Nhiều điều kiện cho WAIT
Trong chừng mực các thí dụ phát biểu WAIT mà ta đã khảo sát cho thấy các tùy chọn khác nhau của phát biểu WAIT được sử dung riêng rẽ Các tùy chọn khác nhau có thế sử dụng chung với nhau Một phát biểu đơn có thể bao gồm cdc ménh dé ON signal, UNTIL expression va FOR time_expression Sau day 14 mét thí du:
WAIT ON nmi, interrupt UNTIL ((ami = TRUE) or (interrupt = TRUE)) FOR 5 usec;
Phát biểu này chờ một sự kiện trên cdc tin higu nmi, interrupt vA chi tiếp tuc néu interrupt hod nmi 1a ding &
thời điểm của sự kiện hoặc cho đến khi thời gian ö microsec trôi qua Chỉ khi một hoặc nhiều điều kiện trong các điều
kiện là đúng, việc thực thi mới tiếp tục
Việc sử đụng một phát biểu chẳng hạn như:
WAIT UNTIL (interrupt = TRUE) OR ( old_elk = “1;
đảm bảo có tối thiểu một trong các giá trị trong biểu thức chứa một tín hiệu Điểu này cần thiết để đảm bảo rằng phát
biểu WAIT sẽ không chờ mãi mãi Nếu ca hai interrupt và old_clk là các biến, phát biểu WAIT không đánh giá lại khi
hai biến này thay đổi giá trị (Trên thực tế các biến không thay đổi giá trị đo chúng được khai báo trong quá trình bị tạm đừng) Chỉ có các tín hiệu là có các sự kiện trên chúng và chỉ có các tín hiệu có thể làm cho phát biểu WAIT hoặc phép gán tín hiệu đồng thời đánh giá lại
WAIT time_out
C6 nhiéu thể hiện trong khi thiết kế một mô hình khi ta không chắc rằng một điều kiện sẽ được thỏa Để tránh
cho phát biểu WAIT không phải chờ mãi mãi, ta cần thêm mệnh để #ize_ out Mệnh để tirne_out cho phép việc thực
thi tiếp tục khi có hoặc không có điều kiện được thỏa Dù vậy ta phải cẩn thận do mô hình này có thể gây ra hành vi sai trừ khi được quần lý rõ ràng Thí đụ sau đây cho thấy vấn để này:
ARCHITECTURE wait_example of wait_example IS END PROCESS A;
SIGNAL sendB, sendA : std_logic; B: PROCESS
BEGIN BEGIN
sendA <= ‘0’ AFTER 10 ns;
Ñiến trúc này có hai qué trinh truyén thong vdi nhau qua hai tin hiéu sendA va sendB Thi du nay khéng thue sy làm gì cả nhưng là một minh họa đơn giãn về các phát biểu WAIT có thể chờ mãi mãi ra sao, một điểu kiện thường
duge xem 1a deadlock
"Trong thời gian khởi động trình mô phống, tất cả các quá trình được thực thi chính xác một lần Điều này cho phép các quá trình luôn luôn bất đầu ở thời điểm thực thi được biết vào lúc bắt đầu mô phỏng Trong thí dụ này quá trình được đánh nhãn A thực thi vào lúc khởi động và đừng ở dòng sau đây:
WAIT UNTIL sendB = ‘1’;
Quá trình được đánh nhãn B cũng thực thi vào lic khởi động Việc thực thi bắt đầu ở dòng đầu tiên của quá trình
và tiếp tục cho đến đồng sau:
WAIT UNTIL sendA = ‘1’;
Việc thực thi dừng ở phát biểu WAIT đầu tiên của quá trình cho dù biểu thức sendA = “0' được thỏa bởi phép gán tín hiệu đầu tiên của tín hiệu sendA, Điều này là đo phát biểu WAIT cần một sự kiện xuất hiện trên tín hiệu sendA dé làm cho biểu thức được đánh giá Cả hai quá trình lúc này chờ lẫn nhau Cả hai quá trình đều không thể tiếp tục do cả hai đang chờ một tín hiệu được thiết lập bởi quá trình khác Nếu khoảng thời gian íime ouý được chèn vào trong mỗi phát biểu WAIT, việc thực thi có thể được phép tiếp tục Có một cái bấy cho phát biểu sau cùng này Việc thực thi tiếp
Trang 40IMI? 4o Tập 2: Lập trình ASIC
tục khi điều kiện không thỏa Một phát biểu ASSERT có thể được thêm vào để kiểm tra sự liên tục của quá trình mà
không có điểu kiện thỏa Thí dụ sau đây trình bày kiến trie wait_example được viết lại để bao gồm các mệnh để
time_out:
ARCHITECTURE wait_timeout OF wait_example IS
SIGNAL sendA, sendB : std_logic;
ASSERT (sendA = ‘0’) REPORT “sendA timed out at ‘0”
SEVERITY ERROR;
sendB <& ‘0’ AFTER 10 ns;
WAIT UNTIL (sendA = ‘1’) FOR 1 us;
ASSERT (sendA = ‘1’) REPORT “sendA timed out at ‘1”
Danh sách độ nhạy và phát biểu WAIT
Một quá trình với danh sách độ nhạy là một WAIT ƠN ẩn các tín hiệu trong danh sách độ nhạy, Điều này được trình bày bằng thí dụ sau đây:
cho phép phát biểu PROCESS được thực thi một lần