Author Archives: Небојша Филиповић

Меморија: Флип-флопови

У многим колима неопходно је узорковати сигнал у одређеном тренутку и ту вредност „ускладиштити“. У таквим колима, званим флип-флопови, стање се не мења у тренутку када радни такт има вредност 1, већ током преласка из нуле у јединицу (узлазна ивица сигнала) или из јединице у нулу (силазна ивица сигнала). Тада трајање импулса радног такта постаје неважно све док се прелазак одвија брзо.

Да би се боље схватила разлика између флип-флопа и леча, треба назначити да флип-флоп реагује на ивицу импулса, а леч на ниво импулса. У овом тренутку долази до размимоилажења у терминима међу ауторима. Неки ово зову синхрона D леч кола (Clocked D latch) док коло које смо ми назвали синхрона D леч називају Gated D latch.

Идеја је да се синхроно D леч коло „натера“ да реагује на промену сигнала (узлазну ивицу или силазну ивицу сигнала), а не на ниво сигнала (дали је ниво висок (1) или низак (0)). Коло које ће омогућити ово је приказано на слици 1.

Слика 1

Вероватно сте запазили да ће излаз из овог И кола увек бити 0!? У суштини у идеалном свету ово би било апсолутно тачно. Међутим у реалном свету, струја која протиче кроз компоненте и водове зна мало да „закасни“. Управо та чињеница омогућава нам да конструишемо коло које ће реаговати на промену сигнала. Овде је сада потребно увести и време (водите рачуна да је реч о нано секундама – милијардитим деловима секунде).

Претпоставимо да меримо напон на четири места у нашем колу са слике 1 a, b, c и d.

Улазни сигнал , који се мери на месту а, представља дугачак импулс радног такта. Он је приказан на слици 2.

Слика 2

Погледајмо шта се сада дешава на месту b. Овај сигнал је инвертован, обрнут од оригинала. Проласком кроз инвертор (НЕ коло) сигнала а долази до малог кашњења сигнала b. Кашњење је реда неколико наносекунди (али је кашњење). Приказ кашњења сигнала а у односу на сигнал b приказан је на слици 3.

Слика 3

Шта се дешава са сигналом c? Неко би рекао да и сигнал c касни, и био би у праву. Колико је то закашњење? Ако се узме брзина простирања кроз проводник и удаљеност места a и места c које износи око 20 микрометара, кашњење би износило свега 0,0001 наносекунд. Како је ово занемарљиво мало у односу на кашњење у односу на пролазак кроз инвертор можемо га занемарити. Распростирање сигнала c у времену приказано је на слици 4.

Слика 4

Када се на улазе b и c примени операција И, резултат ће бити веома кратак импулс чија је ширина одређена кашњењем инвертора. То кашњење износи 5 наносекунди или мање, што зависи од саме конструкције инвертора – слика 5.

Слика 5

И на крају, и само логичко коло И производи неко кашњење тако да ће се импулс, обележен са d, који се појављује на излазу из кола И бити померен за неку вредност – слика 6.

Слика 6

Управо овај сигнал ће активирати наше D леч коло после фиксног интервала након узлазне ивице сигнала радног такта (у нашем случају сигнал а). Дакле, у том периоду, биће омогућено узорковање („памћење“) сигнала који је доведен на улаз у D леч коло. На слици 7 приказано је флип-флоп коло.

Слика 7

Са слике видимо да је узоркован сигнал D на излазу Q. То узорковање ће се вршити само на узлазном сигналу радног такта. У свим осталим тренуцима ово коло ће „памтити“ забележену вредност. Ако узмемо меморију код које је циклус 10 наносекунди, импулс који траје 1 наносекунду ће „рећи“ овом колу да „запамти“ вредност која је доведена на улаз D.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

Categories: Логичка кола, Рачунарски системи | Поставите коментар

Меморија: Леч кола

Меморија је једна од најважнијих компоненти сваког рачунара. Користи се за складиштење инструкција, које треба извршити и података.

Леч кола

За меморију величине једног бита неопходно је конструисати електронско коло које може некако да „запамти“ предходне улазне вредности. За конструкцију таквог кола користимо НИЛИ логичка кола (мада их је могуће направити и уз помоћ НИ кола). Једно такво коло приказано је на слици 1 (да се подсетимо да НИЛИ коло даје 1 само ако су оба улаза 0).

Слика 1.

Ово коло се зове SR leč коло (енг. SR latch). Оно има два улаза: S (од енглеске речи Setting) за активирање и R (од енглеске речи Resetting) за деактивирање. Коло има и два излаза: Q и not(Q) који се међусобно допуњују. Излази нису јединствено одређени тренутним улазним сигналима (не зависе само од улаза).

Претпоставимо да S и R имају вредност 0. Ова два улазна сигнала током већег дела времена и имају вредност 0. Надаље претпоставимо да је Q=0. Како се са слике види сигнал Q се враћа у горње коло НИЛИ. Сада су оба улаза у горње НИЛИ коло једнака 0, па је његов излазни сигнал (not(Q)) једнак 1. Та вредност се доводи у доње логичко коло, које тада на улазима има вредности 1 и 0, што значи да ће на излазу (Q) бити вредност 0. Ово стање се зове консистентно стање.

Погледајмо сада SR leč коло на слици 2

Слика 2

Сада излаз Q има вредност 1, S и R су и даље на 0 (као што је већ напоменуто у већини времена ово је стање ова два улаза). Горње логичко коло НИЛИ има улазе S=0 и Q=1 па је на излазу not(Q) = 0. Та вредност се прослеђује у доње НИЛИ коло где на улазу имамо R=0 и not(Q)=0 па на излазу имамо Q=1. И ово стање је консистентно.

Дакле немогуће је довести систем у коме би оба излаза имала вредност 0 (јер тада би оба логичка кола на оба улаза морала да имају вредности 0 што би дало излазе 1). Оба излаза, такође, не могу имати вредности 1.

Да закључимо: када имамо сигнале R=S=0 леч коло има два стабилна стања (то су стање са слике 1 и стање са слике 2) у зависности од сигнала Q.

Сада можемо да видимо како улазни сигнали S и R утичу на наше леч коло. Претпоставимо да је вредност Q=0. Ако сада поставимо сигнал S на 1, улаз у горње коло има вредности 1 и 0 па је излаз not(Q) добио вредност 0. Сада ова вредност представља улаз у доње логичко коло а како је R=0 сада на излазу имамо Q=1. Стање леч кола приказано је на слици 3

Слика 3,

На тај начин „активирањем“ (постављањем сигнала S на 1) пребацујемо леч коло из стања 0 у стање 1. Ако је коло већ у овом стању и сада сигнал S вратимо на 0 стање леч кола се неће променити (Q и даље остаје 1, not(Q) и даље остаје 0). Можемо да закључимо да је леч коло „запамтило“ да је постављено на 1 и да било каква промена сигнала S неће променити ову запамћену вредност.

Да видимо како сада „деактивирањем“ („ресетовањем“) утичемо на леч коло. Ако је наше коло у стању које је приказано сликом 1 (Q=0; not(Q)=1, S=0) постављање сигнала за ресетовање R на 1 не постижемо ништа, јер је излазни сигнал из доњег кола и даље имати вредност 0. Међутим, ако је излазни сигнал Q=1, постављањем сигнала R на 1 пребацујемо леч коло у стање Q=0. Дакле, запамћена је 0.

Важно је напоменути да се улазни сигнали S и R само за тренутак постављају на 1 а затим се враћају на 0. Постављањем сигнала S на 1 леч коло завршава у стању 1 без обзира на његово претходно стање. Постављањем сигнала R на 1 леч коло завршава у стању 0 без обзира на његово претходно стање.

На следећем видо запису можете да видикет како функционишу леч кола.

Синхронa SR leč кола

Да би се постигло да леч коло мења своје стање само у одређеним периодима неопходно је модификовати оригинално леч коло. Измена је приказана на слици 4.

Слика 4.

Ово коло има додатни улаз за радни такт. Када сигнал радног такта има вредност 0 излази из оба логичкa кола И такође имају вредност 0, без обзира на вредност улаза S и R, и леч не мења затечено стање. Када сигнал радног такта има вредност 1, ефекат кола И нестаје и леч реагује на сигнале S и R.

Ради лакшег представљања синхрона SR леч кола се често представљају симболом на слици 5, где је са CK означен радни такт. Овде се игнорише унутрашња структура самог кола и представљају се његови улази и излази док је задржан начин функционисања. Некада се уместо радног такта користи нека врста прекидача, „капије“ (енг. Gate), па се и ова кола зову Gated SR Latch.

Слика 5

Некада се изостави not(Q) излаз па се приказује само излаз Q као вредност која се „памти“.

Синхрона D lкола

До сада је избегавана ситуација „шта ако су оба улаза (и S и R) 1?“. Једино консистентно стање за ову ситуацију S=R=1 јесте Q=not(Q)=0, али чим се оба улазна сигнала врате на 0, леч мора да пређе у једно од своја два стабилна стања. Ако било који од два улазна сигнала достигне вредност 0 пре оног другог, сигнал који је дуже задржао вредност 1 има предност, а уколико би оба улазна сигнала вратили на вредност 0 истовремено (мало вероватно) леч би прешао у једно од два стабилна стања на случајан начин.

Ако модификујемо леч коло ово стање неодређености (када је S=R=1) је могуће избећи. Модификација је приказана на слици 6

Слика 6

Сада уместо два улаза S и R, имамо један улаз D. Како је улаз у доње И коло увек комплемент (негирана вредност) улаза у горње коло, вредности на улазима никада не могу истовремено бити 1. Када је D=1, а истовремено и сигнал радног такта има вредност 1, леч се пребацује у стање Q=1. Када је D=0, а сигнал радног такта има вредност 1, леч се пребацује у стање Q=0. Дакле, ако је сигнал радног такта постављен на 1 „запамтиће“ се вредност сигнала D. Коло са слике 5 зове се синхроно D леч коло (енг. clocked D latch). Ово коло је права 1-bit-на меморија. Ускладиштена вредност је на излазу Q. За ово коло нам је потребно 11 транзистора.

И ово коло има поједностављену представу приказану на слици 7

Слика 7.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

 

Categories: Логичка кола, Рачунарски системи | Ознаке: | Поставите коментар

Аритметичка кола

У пракси се електронска кола ретко праве од основних компоненти. Углавном се производе основни градивни блокови који садрже бројна логичка кола. Основна кола дигиталне логике чине:

  • интегрисана кола
  • комбинациона кола
  • аритметичка кола

 

Аритметичка кола

MSI кола специфичне намене подешена за аритметичке операције су:

  • померач

  • сабирач

  • аритметичко-логичка јединица

Померачи

Померач је аритметичко MSI коло чија је основна намена да n улазних битова помери за 1 бит у лево или у десно. Састоји се од:

  • n улаза

  • управљачког сигнала С

  • n излаза

Пример једног померача дат је на слици 1

Слика 1.

Управљачки сигнал С одређује смер померања, при чему 0 означава помак улево, а 1 удесно. При померању улево, на место 7 бита уноси се 0. Слично томе, при померању удесно на место нултог бита умеће се 1 (код аритметичког померача, док се код логичког померача поставља такође 0).

Како ради померач? За све битове, осим крајњих, постоје по два логичка кола И. Када је управљачка вредност постављена на 1 активира се десни члан сваког пара логичких кола, који улазни сигнал директно пропушта на излаз (погледај слику 1). Пошто је десно коло И из сваког пара повезано на улаз кола ИЛИ десно од њега, померање се изводи удесно. Када је управљачки бит С=0, укључује се леви члан из пара кола И и померање се изводи улево.

Сабирачи

Суштински део сваког процесора је хардверско коло за сабирање. Коло приказано на слици 2 користи се за сабирање 2 бита и израчунавање преноса зове се полусабирач.

Слика 2.

На слици је такође представљена и табела истинитости за полусабирач, где су две улазне вредности A и B, и две излазне вредности Збир и Пренос. Полусабирач не може да се искористи за сабирање низа бинарних цифара јер не узима у обзира пренос бројева. Нпр. не би могао да да се искористи да сабере 11+01 јер ово логичко коло узима само битове најмање значајности (крајње десне битове).

Да би сабрали две бинарне речи (два бинарна броја) неопходан је потпуни сабирач (енг. Full adder). Потпуни сабирач, приказан на слици 3 направљен је од два полусабирача. Излазни сигнал Збир и Пренос имаће вредности приказане у табели истинитости на истој слици.

Слика 3

Ако погледамо аритметичко коло са слике видимо да је конструисано од два полусабирача. Излазни сигнал Збир има вредност 1 ако А, В и Унос имају непаран број битова 1. Пренос има вредност 1 ако А и В истовремено имају вредност 1 или ако само једно од њих има вредност 1, а Унос такође има вредност 1. Два полусабирача заједно генеришу бит збира и бит преноса.

Комбиновањем више потпуних сабирача могуће је креирати сабирач за, на пример, 16-битне речи. Креира се тако што се бит преноса користи као унос за позицију на левој страни.

Следеће две анимације показују начин рада полусабирача и потпуног сабирача

Полусабирач

Потпуни сабирач

Аритметичко-логичке јединице

Већина рачунара има само једно коло које обавља операције И, ИЛИ, НЕ и сабирања два низа бинарних цифара (машинске речи). Такво коло за n-битне речи најчешће се састоји од највише n идентичних кола, за сваки бит у речи имамо једно коло. Такво коло називамо аритметичко-логичка јединица (енг. Arithmetic Logic Unit, ALU).

Аритметичко логичка јединица може да обави било коју од четири функције: A и В, А или В, не(В), А+В (збир бинарних цифара). Коју од ове четири операције треба да изврши, АЛЈ „одлучује“ на основу управљачких инструкција F0, F1. На слици 4 дат је изглед АЛЈ.

Слика 4.

Аритметичко-логичка јединица састављена је од три основна дела. У доњем левом углу налази се двобитни декодер. Како је основна улога декодера да постави само један излаз на 1 (сви остали на 0), може се искористити да „изабере“ коју ће се операцију да изврши. На улазу у овај део АЛЈ имамо двобитни управљачи сигнал означен са F0 и F1. Ако је управљачки сигнал 00, активираће се део који израчунава логичку операцију И. Ако је управљачки сигнал 01, биће активан део који израчунава логичку операцију ИЛИ. Управљачки сигнал 10 активира операцију негације улаза В (not(В)). И на крају управљачким сигналом 11 „активира“ се део АЛЈ који је задужен за сабирање две бинарне цифре (А+В).

У горњем левом делу слике налази се део који је задужен за израчунавање логичких операција. Овај део АЛЈ активирају прва три И логичка кола декодера. На улазу у логички део АЛЈ имамо битове означене са А и В. Вредности ових улаза биће коришћене за израчунавање основних логичких операција. Улази означени са ENA и ENB служе да „искључе“ улазе А и В. Ако се оба ова улаза (ENA и ENB) поставе на 0 ни А ни В нису активни. У нормалним околностима, сигнали ENA и ENB, имају вредности 1 да би се омогућила оба улаза. Сигнал INVA се користи да би се негирао сигнал А. Ово се постиже тако што се INVA постави на 1. У нормалним околностима овај сигнал има вредност 0.

У доњем десном углу АЛЈ налази се аритметички део, део задужен за сабирање две бинарне цифре са улаза А и В. Овај део је потпуни сабирач. Аритметички део „активира“ се управљачким сигналом 11 декодера (последње И коло декодера).

Коло са слике 4 заиста се производе и позната су као једнобитне секције (енг. bit slices). Коришћењем једнобитних секција могуће је конструисати АЛЈ било које ширине (у битовима). На слици 5 приказана је 8-битна АЛЈ изграђена од 8 једнобитних АЛЈ секција. Нови сигнал који се овде појављује INC служи да повећа (математичари воле да кажу инкрементира) резултат за 1, нпр А+1 или А+В+1

Слика 5.

Генератор радног такта

У многим дигиталним колима, важан је редослед којим се одвијају догађаји. Понекад један догађај мора претходити другом, а понекад се два догађаја морају десити истовремено. За синхронизацију редоследа користи се радни такт. Радни такт (енг. Clock) представља коло које непрекидно генерише и шаље импулсе одређене дужине у одређеним временским размацима. Временски интервал између две одговарајуће ивице два узастопна импулса зове се циклус радног татка. Учесталост импулса је најчешће између 100MHz и 4GHz што одговара циклусима дужине између 10 ns и 250 ps. Учесталост се прецизно одржава помоћу кристалног осцилатора.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

Categories: Логичка кола, Рачунарски системи | Поставите коментар

Комбинациона кола

У пракси се електронска кола ретко праве од основних компоненти. Углавном се производе основни градивни блокови који садрже бројна логичка кола. Основна кола дигиталне логике чине:

  • интегрисана кола
  • комбинациона кола
  • аритметичка кола

Комбинациона кола

Комбинационо коло (енг. Combinational circuit) је коло које се састоји од више улаза и излаза, где је излазни сигнал увек одређен вредностима које су задате на улазу. Најчешће коришћена комбинациона кола су:

  • мултиплексер

  • декодер

  • компаратор

  • програмабилни логички низови

Мултиплексер

Мустиплексер је коло које се састоји од:

  • 2n улаза

  • једног излаза

  • n управљачких сигнала.

Његова улога огледа се у томе да на основу управљачког сигнала изабере један од 2n улаза и његову вредност прикаже на излазу. На слици 3 приказан мултиплексер који се састоји од 8 улаза (23) који су обележени од D0 до D7, три управљачка сигнала који су обележени са A, B и C и једним излазом. Ово коло спада у MSI кола.

Слика 3.

Како функционише мултиплексер? На основу управљачког сигнала бира се једна од вредности улаза и његова вредност ће бити приказана на излазу. Управљачки сигнал није ништа друго до бинарни број. Ако се погледа пример са слике виде се да управљачки сигнал изгледа овако А=1, В=0 и С=1. Бинарно 101 је број 5 у декадном бројевном систему. Ово значи да је мултиплексеру задат управљачки сигнал да прикаже пети улаз (улаз означен са D5). Улаз D5 има вредност 1, што ће и бити приказано као излазна вредност.

Као што се са слике види свако од И кола има 4 улаза и то тако што је први повезан са одговарајућим улазом (D0 – D7) а остала три су повезана са управљачким сигналом. Да би коло И дало вредност 1 сви његови улази морају бити 1. За наш пример шесто коло И (посматрано одозго) једино има сва три управљачка сигнала постављено на 1, што значи да ће једино ово коло моћи да има излаз 1, сва остала сигурно имају на излазу 0. Да ли ће ово наше И коло као резултат дати 0 или 1 зависи сада искључиво од улазне вредности D5. Како је и оно постављено на 1 излаз из И кола је 1 (да је вредност D5 била постављена на 0 и излаз И кола би био 0).

Сада се сви излази из И кола повезују на ИЛИ коло. Знамо сигурно да ће седам од осам тих улазних вредности бити 0 и на основу тога закључујемо да ће излазна вредност ИЛИ кола зависити једино од вредности излаза једног И кола (за наш пример то је шесто коло одозго са улазом D5). Ако је излаз из тог кола 1 (као у нашем примеру) и излазна вредност мултиплексера биће 1 и обратно.

Основна употреба овог логичког кола је да на основу управљачког сигнала изабере само један од улаза и његову вредност прикаже на излазу.

Друга могућа примена мултиплексера је у облику паралелно-серијског претварача (звучи компликовано, зар не?). Реч је о томе да на улазу имамо паралелно доведене вредности (наш пример: 10010100), потребно је те вредности проследити бит по бит, дакле прво издвојити 1, па 0, па 0, па 1, па 0, па 1, па 0, па 0 и тако их проследити даље. Ово се може остварити тако што мењамо вредности управљачког сигнала. Да би издвојили први бит из улазног сигнала управљачки сигнал постављамо на 000, да би издвојили други бит из улазног сигнала управљачки сигнал постављамо на 001, да би издвојили трећи бит из улазног сигнала управљачки сигнал постављамо на 010… да би издвојили последњи (осми) бит из улазног сигнала управљачки сигнал постављамо на 111. Овакав паралелно-серијски претварач се користи у тастатури где се притиском на тастер дефинише 8-битни број који се мора проследити бит по бит кроз кабл.

Декодер

Декодер представља комбинационо коло које се састоји од:

  • n улаза

  • 2n излаза

Основна идеја је да на основу улазне вредности постави само један од 2n излаза на логичку 1 док су сви остали постављени на 0. На слици 4 представљен је декодер „3 у 8“. Ово коло спада у MSI кола.

Слика 4.

Рад овог кола је крајње једноставан. Свако логичко коло И састоји се од 3 улаза од којих је први А или not(А), други В или not(В) и трећи С или not(С). Свако логичко коло И се активира другачијом комбинацијом улазних сигнала: логичко коло означено са D0 активираће се (добиће вредност 1) комбинацијом not(А)not(В)not(С). Ако је наш улазни сигнал А=0, В=0 и С=0 (000) значи да ће једино комбинација not(А)not(В)not(С) имати вредност 1 тако да ће само логичко коло D0 имати вредност 1 док ће сва остала имати вредност 0. Ако се погледа наш пример на слици види се да је улаз 011 (декадно 3) што опет значи да ће само комбинација not(А)ВС имати вредност 1 и да ће једино коло И које је означено са D3 (четврто одозго) имати вредност 1.

Где се користе декодери? Узмимо за пример меморију са 8 чипова од по 1МВ. Чип 0 има адресе од 0 до 1МВ, чип 1 има адресе од 1МВ до 2МВ итд. Када се од меморије затражи садржај са неке адресе, три најзначајнија бита адресе (они који се налазе са десне стране) омогућавају бирање једног од 8 чипова. Та три бита су управо улазни сигнал означен са А,В и С и на основу њега ће се изабрати одговарајући чип. (НАПОМЕНА: у другом разреду учићете адресирање и појмове као што су релативна, логичка и физичка адреса тако да ће овај део бити мало детаљније обрађен)

Компаратори

Улога компаратора (као што му и име каже compare – упореди) је да упореди два улазна сигнала (речи) и да на излазу да логичку 1 ако су те две речи исте (имају исти низ битова) или логичку 0 ако нису. На слици 5 приказан је један једноставан компаратор који упоређује две 4bit-не речи. Једна реч (назовимо је А) састоји се од битова (А0, А1, А2 и А3). Друга реч (назовимо је В) састоји се од битова (В0, В1, В2 и В3). Ако су оба низа битова идентични (на слици реч А је низ 1010 а реч В је низ 1010) тада ће на излазу бити 1. Да је реч А била низ 1100 а реч В 1101 тада би на излазу имали вредност 0. Ово коло спада у MSI кола.

Слика 5.

Један компаратор се састоји од низа Искључивог ИЛИ (енг. XOR) кола. Искључиво ИЛИ даје 1 ако су улазне вредности различите. Табела истинитости за xor операцију дата је у следећој табели:

Ако су два улаза идентична тада ће сваки од ових xor кола дати 0 и очекивани резултат би био 0. Сада примењујемо НИЛИ коло које ће излазни резултат „окренути“ како би са становишта корисника излазни резултат имао више смисла (1 исти; 0 различити).

Програмабилни логички низови

Произвољне функције могу се конструисати тако што се помоћу логичких кола И израчунају производи на које се затим примени операција ИЛИ. Чип којим се образује збир производа назива се програмабилни логички низ (енг. Programmable Logic Array, PLA). Пример једног PLA чипа дат је на слици 6.

Слика 6.

Идеја је да се „истопе“ одговарајући прекидачи како би се добили низови операција који дају одговарајућу функцију. Ретко се дешава да корисник сам „програмира“ на овај начин чипове како би добио одговарајућу функцију. Чешће се дешава да купац зада одговарајућу матрицу (функцију коју жели да добије) а произвођач прави овакве чипове према спецификацији. Реч је о јефтиним чиповима чија се цена креће свега неколико центи и овакви чипови се уграђују у велики број уређаја (играчке, веш машине…).

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

Categories: Логичка кола, Рачунарски системи | Поставите коментар

Интегрисана кола

У пракси се електронска кола ретко праве од основних компоненти. Углавном се производе основни градивни блокови који садрже бројна логичка кола. Основна кола дигиталне логике чине:

  • интегрисана кола
  • комбинациона кола
  • аритметичка кола

 

Интегрисана кола

Логичка кола се праве у облику модула које зовемо интегрисана кола (енг. Integrated Circuits, IC). Често се као синоним појма интегрисано коло користи и појам чип. Интегрисана кола се добијају када се на плочу (обично је реч о пластичној плочи) поставе основна логичка кола. Дуж ивица плоче налазе се два паралелна реда ножица (извода) које се могу уметнути у одговарајуће подножје. Свака од ножица представља улаз или излаз једног од логичких кола на чипу, док се један пар користи за уземљење и напајање што укупно чини 14 ножица. Овако конструисан чип је у техници познат као пакет са два реда ножица (енг. Dual Inline Package, DIP). Овакви чипови најчешће имају 14, 16, 20, 22, 24, 28, 40, 64 или 68 ножица. Када је реч о већим чиповима они могу имати и ножице са све четири стране, или се пак налазе на доњој страни плоче. Пример једног интегрисаног кола (чипа) може се видети на слици 1 (извор: Wikipedia).

Слика 1.


Слика 1.

На основу броја логичких кола која садрже чипови се могу поделити на:

  • кола са ниским степеном интеграције (SSI кола – енг. Small Scale Integrated) која садрже 1 до 10 логичких кола

  • кола са средњим степеном интеграције (MSI кола – енг. Medium Scale Integrated) која садрже 10 до 100 логичких кола

  • кола са високим степеном интеграције (LSI кола – енг. Large Scale Integrated) која садрже 100 до 100.000 логичких кола

  • кола са веома високим степеном интеграције (VLSI кола – енг. Very Large Scale Integrated) која садрже више од 100.000 логичких кола

SSI чипови обично садрже 2 – 6 независних логичких кола. На слици 2 (Аутор: Audrius Meskauskas) приказан је чип са четири логичка НИ кола. Свако од ових кола има два улаза и један излаз (што за 4 НИ кола чини укупно 12 ножица), 1 ножица предвиђена је за напајање (VCC) и једна ножица за уземљење (GND) што укупно чини 14 ножица за овај чип. На чипу се поред прве ножице обично налази урез како би се уочила његова правилна оријентација.

Слика 2.


Слика 2.

Поставља се питање како се користе оваква логичка кола? Средином седамдесетих година прошлог века рачунари су се конструисали уз помоћ великог броја оваквих (или сличних) чипова. Њихова основна предност огледа се у цени (коштају свега неколико центи). Данашњи рачунари конструисани су тако што се на један чип ставља цео процесор (или неколико њих) и велика количина кеш меморије.

Садашњи ниво технологије омогућава да се на чип смести и више од 10 милиона транзистора.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

 

Categories: Логичка кола, Рачунарски системи | Поставите коментар

Булова алгебра и логичка кола

Да бисмо могли да опишемо неко логичко коло потребан нам је неки математички апарат – Булова алгебра. Њом је успостављен однос између улазних вредности и добијеног резултата. Дакле, да би „конструисали“ неко логичко коло претходно га је неопходно описати у облику булових израза (функција).

Пример можемо да илуструјемо следећим задатком: Креирати логичко коло које ће за скуп од 3 улаза (А, В, С) на излазу (М) имати 1 ако је већина улазних вредности 1 (ово је такозвана функција већине).

У првом кораку креирамо табелу истинитости. Како имамо 3 улаза, потребно је креирати 8 могућих улазних комбинација (за n улазних вредности број могућих комбинација је 2n). Табела истинитости би имала следећи изглед:

Дакле, у свим редовима у којима је број 1 на улазу већи од броја 0 као резултат имамо 1. Посматрамо сада само оне редове у табели који нам као резултат дају 1 и гледамо на који начин применом операције И можемо да добијемо 1. За улазне вредности 0,1,1 булова функција би изгледала овако:

за следећи ред са резултатом 1 (улаз1,0,1) функција би изгледала овако:

 за улаз 1,1,0 функција би изгледала овако:

и за последњи ред где су улазне вредности 1,1,1 функција би изгледала овако: .

Ако сада на ове четири функције применимо логичко ИЛИ наша коначна булуова функција би добила следећи изглед:

Тек сада можемо да креирамо логичко коло којим би се реализовала ова функција. Коло би имало изглед са слике 1. На овој слици је приказан улаз 1,0,1 и излазна вредност 1.

Слика 1

Овим примером илустрован је и принцип конструкције електронских кола који би могао да се опише следећим корацима:

1. Написати табелу истинитости функције.

2. Генерисати негације свих улазних вредности.

3. Предвидети по једно логичко коло И за сваки ред у табели који у колони за резултат има 1.

4. Спојити логичка кола И са одговарајућим улазима.

5. Све излазе логичких кола И довести на улаз логичког кола ИЛИ.

Како је већ наглашено у претходној лекцији већина савремених рачунара заснована је на НИ и НИЛИ колима па је неопходно на неки начин користити само ова кола. На сликама 2, 3 и 4. приказана су тзв. еквивалентна кола, која користећи само НИ и НИЛИ кола као резултат дају НЕ, И и ИЛИ.

Слика 2

Слика 3

Слика 4

Како пројектанти теже да у својим конструкцијама смање број логичких кола како би снизили цену реализације, уштедели простор на картици са штампаним колом, смањили потрошњу струје… Булова алгебра нам омогућава да одређене логичке изразе „упростимо“ и са мањим бројем операција (самим тим и мањим бројем логичких кола) конструишемо одговарајуће логичко коло.

Да би се разумело како се булова алгебра може искористити при пројектовању можемо узети за пример булову функцију АВ+АС. Табела истинитости за ову функцију би имала следећи изглед:

Одговарајуће логичко коло би имало изглед са слике 5.

Слика 5

Применом правила дистрибутивности функцију сада можемо изразити и са А(В+С). Одговарајућа табела истинитости би гласила:

Ако се погледа ова табела и упореди са претходном видећемо да су последње колоне идентичне, односно резултати су исти. Коло за ову табелу истинитости би имало изгледа као на слици 6.

Слика 6

 

Како оба ова кола (и коло са слике 5 и коло са слике 6) дају идентичне резултате за одговарајуће улазе, зовемо их еквивалентна кола. Пошто коло са слике 6 захтева мање елемената свакако да ће при конструкцији бити оптималније изабрати ово коле него оно које је приказано на слици 5.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

За конструисање логичких кола коришћен је програм Logisim (http://www.cburch.com/logisim/).

Categories: Логичка кола, Рачунарски системи | Поставите коментар

Логичка кола

Дигитално коло је оно струјно коло у којем постоје само две логичке вредности. Бинарну нулу најчешће представља сигнал напона од 0 до 1 волта, а бинарну јединицу сигнал напона између 2 и 5 волти (напони ван ових опсега нису дозвољени). Логичка кола (енг. Gates) представљају електронске уређаје (веома малих димензија) која могу да израчунавају различите функције ова два сигнала. Логичка кола су темељ хардвера од кога се састоје сви рачунари. Принцип њиховог рада није тешко разумети.

Савремена дигитална логика почива на чињеници да се транзистор може навести да ради као врло брз (биполарни) прекидач. На слици 1 приказан је транзистор који може да се угради у једноставно коло.

Слика 1

Када се на улазни напон Vu доведе напон испод одређене критичне вредности, транзистор се „искључује“ и понаша се као отпорник тако да излазни напон Vi има вредност која је веома блиска напону VCC. VCC представља напајање транзистора и његов напон је обично постављен на +5 волти. Ако би смо ово свели на бинарну логику то би значило да ако на улазу имамо 0 на излазу добијамо 1.

Важи и обрнуто, када напон Vu пређе неку критичну вредност, транзистор се „укључује“ и понаша се као проводник, услед чега напон Vi пада до напона уземљења, односно 0 волти. Опет, сводећи ово на језик бинарне логике значи да на улазу имамо 1 на излазу се очитава 0.

Табела истинитости би изгледала овако:

Табела 1

Дакле, појединачно гледано транзистор би у буловој алгебри представљао функцију негације. Овакав елемент у логичком колу називамо инвертор јер претвара улазни сигнал означен логичком 0 у излазни сигнал означен јединицом и обратно, логичку јединицу на улазу претвара у логичку нулу на излазу.

Слика 2

Ради поједностављења представе у логичком колу инвертор се представља симболом датим на слици 2 (А – улазни сигнал; Х излазни сигнал). Кружић на излазу приказује инверзију (обртање) сигнала. Ово коло зове се НЕ коло (енг. NOT)

 

 

Слика 3

На слици 3 два транзистора повезана су серијски. Није тешко закључити шта је потребно урадити да би излазни напон Vi пао на 0 – оба улаза V1 и V2 морају бити високи (логичка јединица). Ако се на било који од ових улаза доведе низак напон (логичка нула) на излазу Vi ћемо имати висок напон (логичка јединица).

 

 

 

 

 

Слика 4

Табела 2

Ради поједностављења представе у логичком колу овакво логичко коло се представља симболом датим на слици 4и В – улазни сигнал; Х излазни сигнал). Кружић на излазу приказује инверзију (обртање) сигнала. Овакво коло зове се НИ коло (енг. NAND). У табели 2 приказана је табела истинитости за ово коло.

Ако се мало пажљивије погледа и упореди са логичком функцијом И видеће се да функција НИ даје управо обрнуте резултате (одатле и кружић – инвертор на излазу).

Слика 5

На слици 5 два транзистора су везана паралелно. У оваквој врсти везе ако се на било коју од улазних вредности (V1 или V2) доведе висок напон (логичка 1) на излазу ће напон опасти (логичка нула). Једино у случају када су оба улазна напона ниска (логичка 0) на излазу ће бити висок напон (логичка јединица).

 

 

 

 

Слика 6

Табела 3

Ради поједностављења представе у логичком колу овакво логичко коло се представља симболом датим на слици 6и В – улазни сигнал; Х излазни сигнал). Кружић на излазу приказује инверзију (обртање) сигнала. Овакво коло зове се НИЛИ коло (енг. NOR). У табели 3 приказана је табела истинитости за ово коло.

 Ако се мало пажљивије погледа и упореди са логичком функцијом ИЛИ видеће се да функција НИЛИ даје управо обрнуте резултате (одатле и кружић – инвертор на излазу).

Ова три кола представљају три најједноставнија логичка кола. Још једном треба напоменути да појам „високи напон“ (VCC волти) представља логичку јединицу, а „низак напон“ (напон уземљења) логичку нулу, док се излазне вредности напона представљају у функцији улазних.

Слика 7

Табела 4

Поставља се питање како доћи до логичких кола којима би могли да представимо до сада познате логичке операције И и ИЛИ. Ако се само мало боље погледа и узме у обзир да НИ коло даје обрнуте резултате од онога што се очекује применом И логичке операције, на излаз Vi кола са слике 3 неопходно је прикачити улаз Vu кола са слике 1 („обрнути“ излазни сигнал). Сада ће се коло састојати од 3 транзистора. Симбол за приказ логичког кола И (енг. AND) дат је на слици 7, а табела истинитости приказана је у табели 4.

Слично претходном случају ако би смо на излаз Vi кола са слике 5 повезали улаз Vu кола са слике 1 добили би смо ИЛИ (енг. OR) коло. На слици 8 и у табели 5 приказани су симбол који се користи за приказ овог логичког кола као и одговарајућа табела истинитиости.

Слика 8.

Табела 5

Ових пет логичких кола основни су градивни блокови нивоа дигиталне логике. Како НИ и НИЛИ кола садрже само два транзистора (за разлику од И и ИЛИ кола који садрже по три транзистора) многи рачунари засновани су на овим колима (напомена: у пракси ова кола реализују се мало другачије али су и даље једноставнија од И и ИЛИ кола). Неопходно је нагласити да логичка кола могу имати и више од два улаза (у пракси ретко више од 8).

Што се тиче технологије израде, две главне врсте су биполарни транзистори и транзистори засновани на MOS технологији (Metal Oxide Semiconductor – полупроводник на бази металног оксида). Главне врсте биполарних транзистора су TTL (Transistor-Transistor Logic- транзисторско-транзисторска логика), која је годинама предњачила у дигиталној електроници и ECL (Emitter-Coupled Logic емитерски спрегнута логика), која је коришћена за изузетно брз рад. Данашњи рачунари најчешће користе MOS транзисторе.

Иако су спорија, кола заснована на MOS технологији троше мање струје и знатно су мања, па их може више стати на чип. Постоји неколико врста MOS транзистора: PMOS, NMOS и CMOS. У већини савремених процесора и меморија примењује се CMOS технологија која користи напон од +3,3 волта.

За писање овог текста коришћена је књига „Архитектура и организација рачунара“ аутор: Ендру Таненбаум.

 

Categories: Логичка кола, Рачунарски системи | Поставите коментар

SaveFileDialog компонента

SaveFileDialog компонента намењена је за приказ дијалошког прозора за снимање фајла. Спада у категорију Dialogs компоненти (слика 1а). Приликом постављања на форму издваја се у посебан део јер се ова компонента неће приказивати на форми приликом покретања програма (слика1б).

Слика 1

Слика 1

Користећи објекат ове класе могуће је преписати постојећи или креирати нови фајл.

Својстава

AddExtension

Својство је типа boolean. Поставља се на вредност true ако се екстензија аутоматски додаје на име фајла ако корисник изостави екстензију. У супротном поставља се на false.

Напомена: екстензија се додаје на основу изабраног филтера у самом дијалошком прозору (погледати својство Filter) и вредности CheckFileExists својства.

Ако је својство CheckFileExists постављено на true, прозор за дијалог додаје прву екстензију из тренутног филтера који одговара постојећем фајлу. Ако ни један од фајлова не одговара тренутном филтеру, дијалошки прозор додаје екстензију која је дефинисана у DefaultExt својству.

Ако је својство CheckFileExists постављено на false, дијалошки прозор додаје прву екстензију са тренутног списка филтера.

CheckFileExists

Својство је типа boolean. Ако се вредност својстава постави на true, након уписа имена фајла и избора екстензије проверава да ли фајл постоји и ако не постоји упозорава корисника да фајл са датим именом не постоји. Ако је вредност постављена на false (што је и подразумевана вредност овог својства) кориснику неће бити приказано упозорење.

DefaultExt

Својство типа string. Поставља подразумевану екстензију фајла. Екстензија која је одређена овом својством биће придодата фајлу само под условм да није изабрана екстензија у дијалошком прозору (падајућа листа Save as Type) или да је изабрана екстензија којом није одређен тип (екстензија типа *.*).

FileName

Својство је типа String. Представља или даје име фајла (комплетна адреса) изабрана или уписана у дијалошком прозору. Подразумевана вредност је празан стринг („“). Име фајла подразумева и адресу и екстензију.

Ако се наредбом постави вредност пре позива методе за приказ SaveDialog-а, у прозору File name биће уписана постављена вредност. Ако се ово својство користи након позива методе за приказ дијалошког прозора ово својство може се користи за одређивање адресе фајла.

ПРИМЕР:

saveFileDialog1.FileName = „Proba“;
saveFileDialog1.ShowDialog();
string imeFajla = saveFileDialog1.FileName;

Применом saveFileDialog1.FileName = „Proba“; обезбеђује да у дијалошком прозору у падајућој листи File Name буде приказано име фајла Proba.

Применом string imeFajla = saveFileDialog1.FileName; у променљивој imeFajla биће сачувана адреса (потпуна путања) са именом фајла коју је корисник унео (или оставио име које је већ уписано) у падајућој листи File Name.

Filter

Својство типа String. Овим својством постављају се екстензије за типове фајлова. Избором одговарајуће екстензије у падајућој листи Save as type врши се филтрирање фајлова који се приказују у дијалошком прозору и одређује се екстензија под којом ће тип бити сачуван. Стринговна вредност се дефинише тако што се прво исписује опис типа, а затим и сама екстензија одвојена усправном цртом.

ПРИМЕР:

saveFileDialog1.Filter = „word dokument | *.xdoc|tekst|*.txt|svi fajlovi|*.*“;

Овим применом дефинисане су три екстензије: xdoc, txt и *.* при чему ако се постави последња вредност (*.*) неће бити уписана екстензија фајла, под условом да ни својство DefaultExt није дефинисано.

Ако се ово својство не дефинише неће се уписивати тип фајла, под условом да ни својство DefaultExt није дефинисано.

FilterIndex

Својство типа Int32. Одређује који од филтера ће бити постављен приликом приказа дијалошког прозора. Подразумевана вредност је 1 (дакле биће приказан први филтер).

saveFileDialog1.Filter = „word dokument | *.xdoc|tekst|*.txt|svi fajlovi|*.*“;
saveFileDialog1.FilterIndex = 2;
saveFileDialog1.ShowDialog();

У дијалошком прозору ће бити приказан филтер tekst. Да није постављен saveFileDialog1.FilterIndex = 2; био би приказан филтер word dokument.

InitialDirectory

Својство типа String. Поставља се директоријум који ће се приказати у дијалошком прозору.

ПРИМЕР:

saveFileDialog1.InitialDirectory = @“C:\Users\Public\Primer“;

Овде ће бити постављен као подразумевани фолдер за снимање фолдер Primer.

Како постоје специфични фолдери на систему (као што је фолдер My Documents) који су чије су путање различите на различитим рачунарима (зависе од имена корисника) њихово постављање као подразумеване вредности није могуће на горе описани начин.

Њих је могуће дефинисати на следећи начин:

saveFileDialog1.InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

Уместо MyDocuments фолдера у горе описаном примеру могу се уписати било који од „стандардних“ фолдера windows окружења као што су: Desktop; MyComputer; MyMusic; MyPictures; MyVideos… Комплетан списак предефинисаних фолдера може се видети на следећем линку: https://docs.microsoft.com/en-us/dotnet/api/system.environment.specialfolder?view=netframework-4.8

Title

Својство типа String. Овим својством се дефинише натпис који ће бити приказана у насловној линији дијалошког прозора.

ПРИМЕР:

saveFileDialog1.Title = „Sacuvaj kao“;

Методе

ShowDialog()

Ова метода покреће стандардни дијалошки прозор за снимање фајла. Као резултат враћа DialogResult. Ако корисник кликне на дугме OK на дијалошком прозору метода ће вратити вредност DialogResult.OK. Ако корисник кликне на дугме Cancel метода враћа DialogResult.Cancel резултат. Ове вредности могуће је користити за проверу да ли је фајл неопходно сачувати (корисник кликнуо ОК) или је одустао од чувања фајла (корисник кликнуо Cancel).

var rez = saveFileDialog1.ShowDialog();
if (rez==DialogResult.OK) //if (saveFileDialog1.ShowDialog()==DialogResult.OK)
{
string imeFajla = saveFileDialog1.FileName;
StreamWriter sr = new StreamWriter(imeFajla);
sr.WriteLine(
„upisi tekst“);
sr.Close();
MessageBox.Show(„Upisan fajl“);
}

Categories: ИТ, Програмирање | Поставите коментар

Класа StreamReader

Класа StreamReader је креирана за „увоз“ знакова из неког тока (текста). Класа као подразумевано користи UTF-8 кодирање.

Конструктори

Да би се користио StreamReader неопходно је креирати инстанцу самог објета. За креирање инстанци објеката користимо тзв. конструкторе. Објекат можемо креирати користећи неки од следећих конструктора:

StreamReader(String)

Креира се инстанца објекта за конкретан фајл.

ОПИС:

public StreamReader (string adresa);

Параметри:

adresa – параметар типа стринг којим се задаје пуна адреса фајла из кога се чита текст;

ПРИМЕР:

string adresa = @“C:\proba.txt“;
StreamReader sr = new StreamReader(adresa);

Креиран је објекат чије је име sr за фајл који је дат адресом задатом у параметру. Овај објекат се касније користи за позив метода које читају текст из фајла.

StreamReader(String, Encoding)

Креира се инстанца објекта за конкретан фајл са дефинисаним начином кодирања знакова.

ОПИС:

public StreamReader (string adresa, System.Text.Encoding kodiranje);

Параметри:

adresa – параметар типа стринг којим се задаје пуна адреса фајла из кога се чита текст;

kodiranje – одређује се тип кодирања текста (погодан за читање текста који користи наша слова, било да је реч о латиници или ћирилици). Кодирање се може задати са: Encoding.ASCII; Encoding.Unicode; Encoding.UTF7; Encoding.UTF8; Encoding.UTF32;

ПРИМЕР:

string adresa = @“C:\proba.txt;
StreamReader sr = new StreamReader(adresa,Encoding.Unicode);

Биће креиран објекат sr који ће моћи да чита текст из фајла (proba.txt) написан нпр. ћирилицом.

Својства

EndOfStream

Даје вредност која показује да ли је тренутна позиција тока (тескта) на крају тока. Вредност овог својства је типа boolean и имаће вредност true ако је „показивач“ дошао до краја. Ово својство се користи када је потребно читати неки фајл све док се не дође до његовог краја.

ПРИМЕР:

string adresa = @“C:\proba.txt;
StreamReader sr = new StreamReader(adresa);
string s = sr.ReadLine();
while (!sr.EndOfStream)
{
        naredba;
}

У while петљи је искоришћено својство EndOfStream и све док није крај текста извршаваће се naredba;

Методе

Close

Затвара се ток и ослобађа се меморија. Ако се остави објекат не затворен, биће онемогућен приступ фајлу за који је ток креиран тако да не може да му се приступи (нпр за упис).

ОПИС:

public override void Close ();

Параметри:

Метода нема параметре.

ПРИМЕР:

string adresa = @“C:\proba.txt“;
StreamReader sr = new StreamReader(adresa);
string s = sr.ReadLine();
Console.WriteLine(s);
sr.Close();

Након примене Close методе моћи ће поново да се приступи proba.txt фајлу (нпр. ради уписа неког новог текста). Ако се изостави ова метода и проба да се креира StreamWriter објекат за исти фајл доћи ће до грешке, односно изузетка типа:
System.IO.IOException: The process cannot access the file ‘C:\proba.txt’ because it is being used by another process.

Peek

Приказује следећи знак у току (тексту) али се „показивач“ не помера.

ОПИС:

public override int Peek ();

Метода као резултат даје целобројну вредност која представља кȏд знака који је следећи на реду за читање.

Параметри:

метода нема параметре

ПРИМЕР:

if (sr.Peek()==13)
{
naredba;
}

Проверава да ли је следећи знак у тексту Ентер“ и ако јесте извршиће се naredba.

НАПОМЕНА: ентер је кодиран бројем 13, размак бројем 32…

Read

Чита се следећи знак у тексту са померањем позиције „показивача“.

ОПИС:

public override int Read ();

Метода као резултат даје целобројну вредност која представља кȏд знака који је прочитан.

Параметри:

метода нема параметре

ПРИМЕР:

string adresa = @“C:\proba.txt“;
StreamReader sr = new StreamReader(adresa);
char zn;
while (!sr.EndOfStream)
{
zn = (
char)sr.Read();
Console.WriteLine(zn);
}
sr.Close();

Сваки знак из текста биће исписан у посебном реду конзоле

ReadLine

Чита линију текста из тока. Ако текст има више редова биће прочитан први, а показивач текста се пребацује на следећи ред.

ОПИС:

public override string ReadLine ();

Метода као резултат даје стринг који представља један ред текста.

Параметри:

метода нема параметре

ПРИМЕР:

string adresa = @“C:\proba.txt“;
StreamReader sr = new StreamReader(adresa);
string s = sr.ReadLine();
Console.WriteLine(s);
s = sr.ReadLine();
Console.WriteLine(s);

Биће прочитане прве две линије текста

Categories: Uncategorized | Поставите коментар

Класа StreamWriter

Класа StreamWriter користи се за испис (output) знакова на неки ток (у нашем случају текст). Као подразумевана вредност за кодирање знакова користи се UTF-8. Ако се појави неки од знакова који није кодиран UTF-8 форматом јавиће се изузетак (грешка). НАПОМЕНА: Када се заврши са радом објекат ове класе би требало уклонити. Класа је дефинисана у System.IO нејмспејсу.

Класа StreamWriter нема статичких метода и самим тим захтева креирање самог објета, односно инстанце објекта (без улажења у значење појма инстанца, објекат и класа, инстанцу у овом тренутку треба изједначити са појмом променљива).

Конструктори:

Да би се користио StreamWriter неопходно је креирати инстанцу самог објета. За креирање инстанци објеката користимо тзв. конструкторе. Објекат можемо креирати користећи неки од следећих конструктора:

StreamWriter(String)

Креира се (иницијализује) инстанца објекта класе за одређени фајл користећи подразумевано кодирање.

ОПИС:

public StreamWriter (string adresa);

Параметри:

adresaпараметар типа string који представља путању фајла у који се врши испис текста.

ПРИМЕР:

string adresa = @“C:\proba.txt;
StreamWriter sw = new StreamWriter(adresa);

На овај начин креираће се инстанца sw објекта StreamWriter за коју касније можемо да позовемо методе како би манипулисали текстом унутар датог фајла.

НАПОМЕНА: ако фајл са датом адресом постоји биће преписан (брише се претходни садржај.) Ако фајл не постоји биће креиран.

StreamWriter(String, Boolean)

Креира нову инстанцу класе StreamWriter која се односи на дати фајл. Ако фајл постоји он може бити преписан (брише се претходни текст) или се омогућава додавање новог текста на текст који се већ налази у фајлу. Ако фајл не постоји биће креиран.

ОПИС:

public StreamWriter (string adresa, bool dodavanje);

Параметри:

adresa – параметар типа string представља адресу фајла у који се уписује/додаје текст.

dodavanje – параметар типа bool који означава да ли се текст додаје (true) или ће текст у постојећем фајлу бити преписан (false).

ПРИМЕР 1:

string adresa = @“C:\proba.txt;
StreamWriter sw = new StreamWriter(adresa,true);

Овако креирана инстанца sw омогућава да се текст који већ постоји у фајлу задат параметром adresa не обрише. Ако фајл не постоји биће креиран нови.

ПРИМЕР 2:

string adresa = @“C:\proba.txt;
StreamWriter sw = new StreamWriter(adresa,false);

Овако креирана инстанца sw, у случају да фајл постоји и садржи неки текст, обрисаће постојећи текст. Ако фајл не постоји биће креиран нови.

StreamWriter(String, Boolean, Encoding)

Креира нову инстанцу класе StreamWriter која се односи на дати фајл користећи одређени тип кодирања знакова. Ако фајл постоји он може бити преписан (брише се претходин текст) или се омогућава додавање новог текста на текст који се већ налази у фајлу. Ако фајл не постоји биће креиран.

ОПИС:

public StreamWriter (string adresa, bool dodavanje, System.Text.Encoding kodiranje);

Параметри:

adresa – параметар типа string представља адресу фајла у који се уписује/додаје текст.

dodavanje – параметар типа bool који означава да ли се текст додаје (true) или ће текст у постојећем фајлу бити преписан (false).

kodiranje – одређује се начин кодирања текста који се додаје. Кодирање се може задати са: Encoding.ASCII; Encoding.Unicode; Encoding.UTF7; Encoding.UTF8; Encoding.UTF32;

ПРИМЕР:

string adresa = @“C:\proba.txt;
StreamWriter sw = new StreamWriter(adresa,true,Encoding.UTF32);

Овако креиран објекат омогућиће да се на фајл дефинисан параметром adresa дода нови текст који је кодиран са UTF32 (нпр. ћирилични текст).

Подсећање

Треба се подсетити да је инстанцу StreamWriter објета могуће креирати и применом статичке методе CreateText класе File.

StreamWriter sw= File.CreateText(adresa);
sw.Write(tekst);
sw.Close();

Методе:

Close

Затвара StreamWriter објекат. Применом ове методе позива се Close метода са параметром true.

ВАЖНО! Неопходно је позвати Close методу како би текст био уписан.

ОПИС:

public override void Close ();

ПРИМЕР:

string adresa = @“C:\ubuntu\proba.txt“;
StreamWriter sw = new StreamWriter(adresa,true);
sw.Write(
„ovo je tekst koji se dodaje“);
sw.Close();

Ако би се изоставио позив методе Close за sw објекат фајл би остао празан, односно не би био уписан текст.

Write

Уписује податке. У зависности од типа параметра који се проследи могу се уписати стрингови, бројеви, знакови. Када се уписује текст у фајл ова метода са уписом наставља на позицији претходног курсора (места где се завршава текст у фајлу) и курсор оставља у истом реду. У зависности од типа параметара који се прослеђује методи биће извршена једна од доле описаних.

ОПИС:

public override void Write (char[] tekst, int pozicija, int brZnakova);

Параметри:

tekstпараметар који чини низ знакова из кога се издваја подниз који ће бити уписан;

pozicija – параметар типа integer представља позицију знака од кога се почиње са уписом;

brZnakova – параметар типа integer представља број знакова који се уписује

ПРИМЕР:

string adresa = @“C:\proba.txt“;
string tekst = „ovo je tekst koji se dodaje“;
char[] s = tekst.ToArray();
StreamWriter sw = new StreamWriter(adresa);
sw.Write(s,7,20);
sw.Close();

У фајл ће бити додат текст „tekst koji se dodaje“. НАПОМЕНА: ради лакшег уноса низа знакова на променљиву tekst типа string примењена је метода ToArray() која текст претвара у низ знакова.

ОПИС:

public override void Write (string tekst);

Параметри:

tekstпараметар типа string представља текст који ће бити уписан у фајл

ПРИМЕР:

string adresa = @“C:\proba.txt“;
string tekst = „ovo je tekst koji se dodaje“;
StreamWriter sw = new StreamWriter(adresa);
sw.Write(tekst);
sw.Close();

Уписује текст задат параметром tekst.

ОПИС:

public override void Write (char[] nizZnakova);

Параметри:

nizZnakovaпараметар типа низ знакова који се додаје у фајл.

ПРИМЕР:

string adresa = @“C:\proba.txt“;
string tekst = „ovo je tekst koji se dodaje“;
char[] nizZnakova = tekst.ToArray();
StreamWriter sw = new StreamWriter(adresa);
sw.Write(nizZnakova);
sw.Close();

Уписује се низ знакова.

ОПИС:

public override void Write (char znak);

Параметри:

znak – параметар типа char представља знак који се уписује у фајл.

ПРИМЕР:

string adresa = @“C:\proba.txt“;
char znak=‘A’;
StreamWriter sw = new StreamWriter(adresa);
sw.Write(znak);
sw.Close();

У фајл ће бити уписан знак А

ОПИС:

public virtual void Write (decimal broj);
public virtual void Write (double broj);

Параметри:

brojпараметар типа decimal или double представља реалан број који ће бити уписан у ток.

ПРИМЕР:

string adresa = @“C:\proba.txt“;
decimal br1 = 36.6M;
double br2 = 40.7;
StreamWriter sw = new StreamWriter(adresa);
sw.Write(br1);
sw.Write(br2);
sw.Close();

Бројеви br1 типа decimal и br2 типа double биће уписани у ток.

ОПИС:

public virtual void Write (long broj);
public virtual void Write (int broj);

Параметри:

brojпараметар типа long или int представљају 8-битни, односно 4-битни цео број који ће бити уписан у текст.

ПРИМЕР:

string adresa = @“C:\proba.txt“;
long br1 = 36;
int br2 = 40;
StreamWriter sw = new StreamWriter(adresa);
sw.Write(br1);
sw.Write(br2);
sw.Close();

WriteLine

Ова метода, као и метода Write додаје текст у ток који се касније уписује у фајл (још једном да се подсетимо да се текст који је додат у ток применом било Write било WriteLine методом за StreamWriter објекат, додаје у фајл након примене Close методе). За разлику од Write методе ова метода на крају текста додаје и знак за крај реда (АSCII код 13). Ово практично значи да ће поред параметра који се додаје у ток бити уписан и знак за нови ред, односно да ће следећи текст који се додаје бити уписан у новом реду.

Дат је опис већине метода са њиховим параметрима. Опис параметар је идентичан као и код Write методе.

ОПИС:

public virtual void WriteLine ();//уписује ознаку за крај реда
public virtual void WriteLine (string tekst);
public virtual void WriteLine (float broj);
public virtual void WriteLine (double broj);
public virtual void WriteLine (long broj);
public virtual void WriteLine (int broj);
public virtual void WriteLine (decimal broj);
public virtual void WriteLine (char[] nizZnakova);
public virtual void WriteLine (char znak);
public virtual void WriteLine (char[] nizZnakova, int pozicija, int brZnakova);

Categories: ИТ, Програмирање | Поставите коментар

Блог на WordPress.com.