2012/01/03

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



Техник дүрслэлийн хэл ашиглан тоон хэлхээг дүрслэхэд програмын бусад хэлтэй адилхан нөхцөл шалгах болон өгөгдөл сонгох гэсэн операторыг хэрэглэхийг зөвшөөрдөг.
Жишээ нь 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 өгөгдөл сонгуур ашиглан дараах байдлаар хийж болно.