| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Задача за интервю http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=6441 |
Страница 1 от 1 |
| Автор: | HCL [ Пет Яну 09, 2009 3:29 pm ] |
| Заглавие: | Задача за интервю |
Новата задача тип Интервю на "Adventures in ASIC Digital Design" http://asicdigitaldesign.wordpress.com/ "Design a circuit with minimum logic that receives a single digit, coded BCD (4 wires) and as an output gives you the result multiplied by 5 - also BCD coded (8 wires)." Предложете схемно решение с минимално количество логика на следния проблем. На входа получавате единична BCD кодирана цифра (4 bits), която следва да бьде умножена по 5 и предадена на изхода в BCD формат (8 bits). Пример: input=5 (0101) => output=25 (0010 0101) Сьветвам ви, преди да погледнете решенията на страницата, да опитате сами. Сред предложените отговори има особенно интересен подход. |
|
| Автор: | zaphod [ Пет Яну 09, 2009 3:42 pm ] |
| Заглавие: | |
старшите три бита стават на десетици а младшия бит се цепва на две и отива на бит 0 и бит 2. нула елемента логика |
|
| Автор: | HCL [ Пет Яну 09, 2009 4:27 pm ] | |||||||||
| Заглавие: | ||||||||||
Така е, но по кой метод стигна до извода? Разпозна визуално структурата в таблицата или използва друг подход. Сред предложените решения има едно особено интересно
|
||||||||||
| Автор: | zaphod [ Пет Яну 09, 2009 4:46 pm ] |
| Заглавие: | |
ами по кой метод, за такива неща метод няма. първо се пробвах конвенционално, със едно шифтване и сумиране и няква десетична корекция, после видях че няма да стане и викам я да видим в десетична система директно. |
|
| Автор: | bateAz [ Пет Яну 09, 2009 5:09 pm ] |
| Заглавие: | |
Умноженията по число, което е основа или степен на основата на бройната система, не изисква логически схеми. В случая на BCD основата е 10, а не 2, така че на 5 се умножава без логика. |
|
| Автор: | HCL [ Пет Яну 09, 2009 7:02 pm ] | |||||||||
| Заглавие: | ||||||||||
Получи се наистина интересно @Zaphod като "софтуерист" търси подходяш алгоритъм за решението на проблема, чрез сумиране и десетична корекция. Аз изобразих функцията таблично за да разпозная pattern-а ако има такьв, ако не щях да я развия директно с помощта на Karnaugh map или по Quine-McCluskey. @bateAz използва формален подход, характерно за един системен архитект. Още идеи? Всяка една от споменатите техники е в състояние да ни отведе до оптимално или близко до оптималното решение. Всеки един от нас е трьгнал по различен път, макар и да е способен да разпознае останалите щом ги види. Хареса ми идеяата на автора. Независимо от това, с какво знание/инструменти разполагаме понякога е трудно да надскочим ограниченията, които сами си налагаме. Добре е когато човек разширява крьгозора си. Hе само в личен план, но и в професионален. За нас като инженери и програмисти е особено важно да умеем да подхождаме по различен начин кьм проблемите с които се борим. Това като малко лирично отклонение.
|
||||||||||
| Автор: | ДедоБоре [ Пет Яну 09, 2009 7:19 pm ] | |||||||||
| Заглавие: | ||||||||||
не е добре. много е добре |
||||||||||
| Автор: | ps66 [ Пет Яну 09, 2009 7:23 pm ] |
| Заглавие: | |
x*5 == (x*10) / 2 0 0 0 0 b3 b2 b1 b0 * 5 == (b3 b2 b1 b0 0 0 0 0)/2 == 0 b3 b2 b1 0 b0 0 b0 (при деление на 2 на десетиците остатъка е 0 или 5 според b0 ... затова е 0 b0 0 b0) |
|
| Автор: | ToHu [ Пет Яну 09, 2009 8:21 pm ] |
| Заглавие: | |
Ами както батето каза няма нужда от логика, бит нула и две от единиците на резултата се мапват към бит 0 на входа, и съответно бит 0 = бит 1, бит 1 = бит 2, бит 3 = бит 4, бит 5= 0 за резултата, съответно свързан към входа. |
|
| Автор: | zaphod [ Пет Яну 09, 2009 8:39 pm ] | |||||||||
| Заглавие: | ||||||||||
сега да пусна заядливостта си в действие
всичко това е много благородно (чии лаф е това?), но 5 не е степен на десятката. степените на десятката са 0.01, 0.1,1,10,100.. между тях не виждам 5. и за да не каже някой "е се тая, степен или кратно", то да отбележа че същата задача приложена не към двоично десетичен код, а към троично десетичен, няма да може да се реши по тоя хитър начин. |
||||||||||
| Автор: | ps66 [ Пет Яну 09, 2009 9:22 pm ] | |||||||||
| Заглавие: | ||||||||||
обаче за всяка бройна система с база B (ЧЕТНО), решението е подобно (ако е умножава по B/2) ! |
||||||||||
| Автор: | tgi [ Съб Яну 10, 2009 4:15 am ] |
| Заглавие: | |
Пет наистина не е степен на 10, и бит 0 не може да се "цепне" на две.... Май не видях много работещи решения дотук А е елементарно - старшите 4 бита на резултата са входното число >>1 (*10/2, инак казано горните 3 бита на входното число - това вече доста го направиха), младшите 4 бита са '5 AND [бит 0 на входното число]' (т.е. 0 или 5).... [edit] За по-ясно: q7=0 q6=i3 q5=i2 q4=i1 * q3=0 q2=i0 q1=0 q0=i0 Само жици.... никакъв силиций [/edit] |
|
| Автор: | ps66 [ Съб Яну 10, 2009 9:15 am ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
спИцЯлно (мнооого бавно) за @tgi : при делението на 2 (повтарям ДВЕ и няма да повтарям и зависи от това дали е четно/нечетно (разряда на десетицата) ... в нашия случй четността зависи от b0 (по моя пример) така за младшата цифра остава: if (b0) =5 else =0 или (b0) ? 5 : 0; или (класиката) (b0 *5) което логично "навява" на (имаме бит b0 по числото 0101): 0 b0 0 b0 по надолу @tgi може и да не чете! самоцитирам се:
за всяка бройна система с база B (ЧЕТНО и НЕ-ПРОСТО) (4, 6, .. 10, ... 16) горната задачa (x*B/2) има подобно решение (при B=10 е задачата на темата) и то е: 0 b3 b2 b1 x x x x където: x x x x , e B/2 като всяка негова 1-ца е заместена с b0 (от побитовато умнoжение b0*B/2 !) решението е просто, ... защото младшия разряд може да заема само 2 стойности 0 и B/2, което позволява да се избегне каквато и да е логика! |
|||||||||||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|