Технически се катерим по стека

Ок. Това ще е малко по-техни-философско. Може би даже с леки елементи на дизайн.

От известно време се занимаваме с определен протокол за комуникация с малки чипове. На база на i2c, но ползва i2c за физически слой.

Та имаме определени щения да пренапишем хардуерното изпълнение така, че да е по-scalable и параметризуемо. Демек опитваме се да оправим това, което предишни дизайнери са заковали с пирони и са облепили с тиксо. Не че тяхното не работи, но е еквиеалента на нещо, което ще направиш в час по трудово колкото да мине номера или каквото майсторите ще направят докато не ги  гледаш.

След известно чоплене с колежката, стигнахме до не особено изненадващия извод, че "тоя протокол са го писали ембедед софтуеристи". Има си белези. Някои неща просто са грозни като изпълнение, колкото и да се опитваш да ги направиш хубави в хардуер, но в момента в който ги погледнеш като функция изведнъж стават логични. Други неща са си направо декодер на инструкции и феч/екзекют пайплайн. 

Ако оставим на страна фактът, че повечето дизайни естествено се "стремят" към общ вид архитектура, изведнъж се вижда ясно как, комисията по протокола е решила проблема последователно и алгоритмично вместо предпочитаното от хардуера паралелно. 

Та това ме наведе на мисълта, дали не може да се синтезира софт процесор за конкретна задача. Чисто теоретично нищо не ни спира. Тогава излиза, че всеки един процес може да бъде решен чисто алгоритмично и всяка функция би могла да е софтуерно дефинирана.

Излиза, че всичката галимация около цифровата електроника е практически безсмислена и би могла да се сведе до писане на скрипт, който да ти генерира софт процесор, на който да си напишеш фърмуера и да го синтезираш. Да, със сигурност ще е по-тежък от към ресурси сравнено с логика, написана на ръка, но на кой му пука? За всекидневни цели на никой не му пука дали химикалката му е ръчно изработена или шпиц-форма, стига да пише и да е удобна. 
Сега остава да намеря време и хора, на които да пусна мухата и да седнем да разработим нещо. 

Оказва се, че първоначалната ми интуиция да се насоча към софтуер вместо към хардуер е била по-правилна. Дееей%&#мааму!

Още миналия век(хаха) в България си играех с един софт 8051 и програми в ром-а. Та още тогава синтезиран 8051 с програма във формата на константа (ром с машинен код) хабеше значително по-малко ресурси от колкото ако го синтезираш като отделен процесор с някакъв вид памет. Или дори ако направиш сметка колко тригера се ползват. Или ако го синтезираш с модул ром, който в последствие да запълниш. Някакъв вид OTP например. 

Частично синтезатора разкарва всичко, което не се ползва, но на края, след синтез и оптимизация резултатът е по-скоро краен автомат. В една от предишните работи ползвахме същия принцип за да създадем най-малкия физически слой (за тогава) с 2 процесора и асемблер, синтезирани в fpga.

Може би, това е един вид хардуерен design pattern.

Просто случайно мисли... 

Коментари

Популярни публикации