8.5. Process-ийг ашиглах


VHDL хэл нь техник дүрслэлийн хэл учраас тодорхой дараалалгүйгээр бүх мөрүүд зэрэг биелдэг тухай өмнө үзсэн. Гэтэл синхрон санамжтай хэлхээ нь тодорхой дарааллаар буюу клок сигналын төвшингийн өөрчлөлтөөр биелэх тул тодорхой дарааллын дагуу явагддаг гэж үздэг. Иймд VHDL хэлэнд тодорхой дарааллын дагуу биелэх хэлхээг sequential statement гэж нэрлэгддэг process ашиглан гүйцэтгэнэ.
Process ашиглах үед process-ийн ард бичигддэг sensitive list-ийг ашиглаж дарааллыг хийдэг. Өөрөөр хэлбэл process дотор бичигдсэн үйлдэл нь process-ийн sensitive list доторх сигнал өөрчлөгдөхөд биелэнэ гэж ойлгоно.
Жишээ нь process(clk, reset) гэж байвал clk ба reset сигнал өөрчлөгдөхөд process дотор бичигдсэн үйлдлүүд гүйцэтгэгдэнэ.
Тэгвэл process дотор нөхцөл шалгах ба өгөгдөл сонгох үйлдлийг хэрхэн гүйцэтгэхийг үзье.
Process доторх нөхцөл шалгах үйлдлийг if else опетаторыг ашиглан гүйцэтгэнэ.
Process доторх өгөгдөл сонгох үйлдлийг case операторыг ашиглан гүйцэтгэнэ.

8.4. Нөхцөл шалгах ба өгөгдөл сонгох



Техник дүрслэлийн хэл ашиглан тоон хэлхээг дүрслэхэд програмын бусад хэлтэй адилхан нөхцөл шалгах болон өгөгдөл сонгох гэсэн операторыг хэрэглэхийг зөвшөөрдөг.
Жишээ нь 4 хүсэлттэй 3 гаралттай priority encoder-ийг авч үзье. Энэ кодлуурын үнэмшлийн хүснэгт нь дараах хэлбээр өгөгдөнө.

Өөрөөр хэлбэл оролтоос хамаарч гаралт нь тодорхойлогдох тул үүнийг when else нөхцөл шалгах оператор ашиглан гүйцэтгэж болно. Өөрөөр хэлбэл r оролтын 4 дугаартай ахлах битийг шалгаад 1 бол pcode-д 100 утга онооно. Биш бол 3 дугаартай битийг шалгах ба энэ нь 1 бол pcode-д 011 утга онооно. Хэрэв 4 ба 3-р битүүд аль нь 1 биш бол 2-р битийг шалгах ба энэ нь 1 бол pcode-д 010 утга онооно. 4, 3, 2 бүгд 1 биш бол 1-р битийг шалгана. 1-р бит 1 бол pcode-д 001 утга оноох ба 4, 3, 2, 1р битүүд бүгд 1 биш бол pcode-д 000 утга олгоно.

Ингээд энэ кодлуурыг бүтнээр нь бичвэл:

Энд std_logic сигналын вектор хэлбэр болох sdt_logic_vector гэдэг сигналын шинэ төрөл шинээр нэмэгдсэн байна. Std_logic_1164 дэд санд std_logic гэсэн логик сигналаас гадна std_logic_vector гэсэн логик сигналыг тодорхойлж өгсөн байдаг. Ингэснээр 1-ээс олон битэд логик сигналын утга олгоход сигналын энэ төрлийг ашиглана.
Жишээ нь:

гэсэн std_logic_vector сигналыг авч үзье. Энэ сигнал нийтдээ нь r(4), r(3), r(2), r(1) гэж нэрлэгдэх 4 тусдаа сигналыг ойлгоно. Эдгээр сигналыг хэрхэн индекслэх буюу дугаарлахыг 4 downto 1 хэмээн зааж өгсөн байгаа. Энд ахлах сигнал нь буюу зүүн гар талаасаа 4 эхлэн баруун тийш 1 хүртэл дугаарлана гэсэн үг.
Өөр нэг std_logic_vector сигналыг авч үзье.

Энэ вектор сигнал нь pcode(2), pcode(1), pcode(0) гэсэн сигнал болно. Ингээд дээрх priority encoder нь хэрхэн пакетлагдсан болохыг харвал:

Priority encoder-ийг when else гэдэг нөхцөл шалгах оператор ашиглан хийхээс гадна өгөгдөл сонгох оператор ашиглан гүйцэтгэж болно.
Priority encoder-ийг with select өгөгдөл сонгуур ашиглан дараах байдлаар хийж болно.

8.3. VHDL програмчлал



1 битийн тэнцүү шалгах харьцуулагч өгөгдсөн байг.

Үүнийг Карногийн тор дээр буулгаж минтерм илэрхийллийг бичье.

Үүнийг 2 AND, 1 OR гейтийг ашиглан AND-OR хэлхээгээр гейтийн төвшинд дүрсэлж болно.

Тэгвэл гейтийн төвшинд дүрслэгдсэн AND-OR хэлхээг техник дүрслэлийн VHDL хэл дээр буулгая.

Энд эхний хоёр мөр нь санг зарлаж байна. Library гэсэн түлхүүр үгээр санг зарлана. Ингээд ieeе гэсэн үндсэн санг зарлалаа. Дараагийн мөрөнд хэрэглэх дэд санг зарлаж байна. Sdt_logic_1164 гэсэн ieee-гийн дэд сан нь std_logic гэж нэрлэгдэх логик сигналыг тодорхойлж өгнө. Std_logic сигналд энэ хичээлийн хүрээнд логик 0, логик 1, х буюу don’t care, Z буюу high impedance гэсэн 4 утга авдаг логик сигналыг ойлгоно. Энэ сигналын хувьд харьцуулах болон логик үйлдлийг хийхийг зөвшөөрөх ба үүнийг std_logic_1164 дэд санд тодорхойлж өгсөн байна. All гэдэг нь ieee-гийн std_logic_1164 дэд сангаар тодорхойлогдсон бүхнийг ашиглана гэдгийг заана. Өөрөөр std_logic_1164 дэд санг бүтнээр нь ашиглана гэдгийг заана.
Дэд санг ба түүний бүрэлдэхүүн хэсэг нь use гэсэн түлхүүр үгийг ашиглан зарлагдана.

Дараагийн 4 мөрөнд энэ хэлхээ хэрхэн пакетлагдсан болохыг зааж өгнө. Юуны өмнө энэ хэлхээг пакетлаж хайрцагт оруулаад eq1 гэсэн нэр өгсөн байна.

Энэ пакет маань i0, i1 гэсэн 2 оролттой, eq гэсэн 1 гаралттай байх бөгөөд оролт гаралт маань std_logic_1164 дэд сангаар тодорхойлогдсон std_logic гэж нэрлэгдэх логик сигнал байна. Пакетлах хэсэг маань entity гэсэн түлхүүр үгээр эхэлж ард нь пакетынхаа нэрийг бичиж өгөх ба end гээд пакетынхаа нэрийг бичиж өгснөөр дуусна.
Port түлхүүр үгийфг ашиглаж оролт, гаралтын портууд түүний сигналын төрлийг зааж өгнө.

Architecture гэсэн түлхүүр үгээр өмнө зарлагдсан пакетын бүтцийг зааж өгнө.
Ингэхдээ архитектуртаа нэр өгнө.

Жишээ нь бид eq1 пакетлагдсан хэлхээний бүтэц болох архитектурт arch гэсэн нэр өгсөн байгаа харж байна.
Дараа нь signal гэсэн түлхүүр үгээр архитектурт байгаа p0, p1 гэсэн холбоосыг зарлаж өгсөн байна. Энд p0 нь i0, i1-ийн хооронд AND үйлдэл гүйцэтгэх гарах дүн бол p1 нь i0, i1-ийн үгүйсгэлүүдэд AND үйлдэл гүйцэтгэхэд гарах дүн болно. Үүнийг AND-OR хэлхээн дээр тодорхой тэмдэглэсэн байгаа болно.

Дараа нь begin гэсэн түлхүүр үгээр архитектурыг эхэлж end архитектурын нэрээр бүтцийг хийнэ.

Энд 2 AND, 1 OR нийт 3 ширхэг логик үйлдлийг харуулсан байна. VHDL нь текник дүрслэлийн хэл учраас програмын хэлтэй адилхан мөр дагаж биелэхгүй. Иймд эдгээр үйлдлийг алийг түрүүлж бичих талаар заах зүйлгүй бөгөөд бүгд нэгэн зэрэг биелэх болно гэж ойлгоно.