Yangi boshlanuvchilar uchun qo'llanma Logisimga xush kelibsiz!


Oddiy kulrang kod hisoblagichi


Download 1.38 Mb.
bet33/82
Sana16.04.2023
Hajmi1.38 Mb.
#1359783
1   ...   29   30   31   32   33   34   35   36   ...   82
Bog'liq
Logisim

Oddiy kulrang kod hisoblagichi
Ko'pincha biz tabiatan faqat kombinatsiyalangan bo'lmagan komponentlarni xohlaymiz - ya'ni komponent xotiraga ega bo'lishini xohlaymiz. Bunday komponentlarni belgilashda muhim noziklik mavjud: komponentning o‘zi holatni saqlay olmaydi, chunki alohida komponent bir sxemada ko‘p marta paydo bo‘lishi mumkin. U to'g'ridan-to'g'ri sxemada bir necha marta paydo bo'lishi mumkin emas, lekin bir necha marta ishlatiladigan pastki sxemada paydo bo'lsa, bir necha marta paydo bo'lishi mumkin.
Yechim ob'ektning joriy holatini ko'rsatish uchun yangi sinf yaratish va uning misollarini asosiy sxema holati orqali komponent bilan bog'lashdir. Kengaytirilgan 4-bitli Grey kod hisoblagichini qo'llaydigan ushbu misolda biz yuqorida ko'rsatilgan InstanceFactory pastki sinfiga qo'shimcha ravishda hisoblagich holatini ko'rsatish uchun CounterData sinfini aniqlaymiz. CounterData ob'ekti hisoblagichning joriy qiymatini ham, oxirgi ko'rilgan soat kiritishini ham eslab qoladi (ko'tarilgan qirralarni aniqlash uchun).
CounterData
com.cburch.gray paketi;
import com.cburch.logisim.data.BitWidth;
import com.cburch.logisim.data.Value;
import com.cburch.logisim.instance.InstanceData;
import com.cburch.logisim.instance.InstanceState;
/** Hisoblagich holatini ifodalaydi. */
sinf CounterData InstanceData, Cloneable {ni amalga oshiradi
/** sxema holatida ushbu hisoblagich bilan bog'langan holatni oladi,
* agar kerak bo'lsa, davlatni yaratish.
*/
umumiy statik CounterData get (InstanceState holati, BitWidth kengligi) {
CounterData ret = (CounterData) state.getData();
if(ret == null) {
// Agar u hali mavjud bo'lmasa, biz uni sukut bo'yicha o'rnatamiz
// qiymatlarni kiriting va uni qaytarib olish uchun kontaktlarning zanglashiga olib qo'ying
// kelajakdagi targ'ibotlarda.
ret = yangi CounterData(null, Value.createKnown(kenglik, 0));
state.setData(ret);
} else if(!ret.value.getBitWidth().equals(width)) {
ret.value = ret.value.extendWidth(width.getWidth(), Value.FALSE);
}
qaytish ret;
}
/** Oxirgi kuzatilgan soat kiritish qiymati. */
xususiy qiymat lastClock;
/** Hisoblagich tomonidan chiqarilgan joriy qiymat. */
shaxsiy qiymat qiymati;

/** Berilgan qiymatlar bilan holat tuzadi. */


umumiy CounterData(oxirgi soat qiymati, qiymat qiymati) {
this.lastClock = lastClock;
this.value = qiymat;
}
/** Ushbu obyektning nusxasini qaytaradi. */
umumiy obyekt klonu() {
// Biz faqat super.clone() qaytaradigan narsadan foydalanishimiz mumkin: Yagona misol o'zgaruvchilari
// Qiymat ob'ektlari, ular o'zgarmasdir, shuning uchun biz ikkala nusxaga ham ahamiyat bermaymiz
// va ko'chirilganlar bir xil Value obyektlariga ishora qiladi. Agar bizda o'zgaruvchan misol bo'lsa
// o'zgaruvchilar, albatta, biz ularni klonlashimiz kerak.
try { return super.clone(); }
catch(CloneNotSupportedException e) { nullni qaytarish; }
}
/** Oxirgi kuzatilgan soatni yangilaydi, agar ishga tushirilsa, true qiymatini qaytaradi. */
ommaviy mantiqiy yangilanish soati (qiymat qiymati) {
Qadimgi qiymat = oxirgi soat;
lastClock = qiymat;
eski qaytish == Value.FALSE && value == Value.TRUE;
}
/** Hisoblagich tomonidan chiqarilgan joriy qiymatni qaytaradi. */
umumiy qiymat getValue() {
qaytish qiymati;
}
/** Hisoblagich tomonidan chiqarilgan joriy qiymatni yangilaydi. */
public void setValue (qiymat qiymati) {
this.value = qiymat;
}
}

Download 1.38 Mb.

Do'stlaringiz bilan baham:
1   ...   29   30   31   32   33   34   35   36   ...   82




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling