Jump to content

    

как быстро вникнуть в чужой код

книжек как грязи

Пару примеров? Хотя бы уровня "FPGA Prototyping by VHDL examples".

 

только едва ли описание реальных устройств полезнее перепечатки стандарта

Есть способ быстрее перейти от стадии "я выучил весь синтаксис" к стадии "могу применять на практике", нежели разбирать готовые примеры?

Share this post


Link to post
Share on other sites
Пару примеров? Хотя бы уровня "FPGA Prototyping by VHDL examples".

библия Дугласа Смита HDL Chip design не попадалась ?

 

Share this post


Link to post
Share on other sites

http://www.ozon.ru/?context=search&text=VHDL

:)

 

Обучение - вещь субъективная, учебные примеры стандартных решений и практика реализации множества задач, мне дает больше, чем ковыряние чужого когда. Чужое решение - это чужое решение, на которое влияют множество факторов, вплоть до заплаток из - за нехватки времени, а академическая база - это база. Но я не настаиваю...

Share this post


Link to post
Share on other sites
Чужое решение - это чужое решение, на которое влияют множество факторов, вплоть до заплаток из - за нехватки времени

То есть если чужое решение работает и встала задача доработки этого решения, то надо отбросить это чужое решение и решать все заново самому? И вообще, приходя на новое место работы, удалять все исходники и писать все заново?

Share this post


Link to post
Share on other sites

Ну нет...

 

Одно дело обучение, другое дело работа, разговор был про одно, продолжился в контексте другого... Троллинг?

 

Share this post


Link to post
Share on other sites

если возврат к теме, то продолжая чужой проект у меня 2 сценария.

1. если я становлюсь главным на проекте, я его весь перелопачиваю по кускам. То есть если я ищу как работает какая-то функция или что значит какая-то переменная, то разобранные мной куски текста комментирую, если комментариев не достаточно. Явно неудачные куски кода работу которых я понимаю переписываю под себя во время когда пожар потушен и нет срочных дел.

2. если я ведомый, то только комментарии добавляю, и иногда высказываю предложения о переделки кусков.

 

Естественно если работаю с проектом на предмет исправления ошибки, то в обоих вариантах вношу правки.

 

Заново писать проект - это затратный бред, даже если он очень неправильный, но по какой-то причине продается, выкинуть и написать заново - не правильно, только поэтапные модификации, чтобы продолжал продаваться. Я исхожу из того что полностью не годный проект все таки на продажу не выставят. А от комментариев никому плохо не будет, чем их больше тем лучше, так что их добавляю нещадно:)

Share this post


Link to post
Share on other sites
Заново писать проект - это затратный бред, даже если он очень неправильный, но по какой-то причине продается, выкинуть и написать заново - не правильно,

 

Вот не надо так безапелляционно то.... Бывает, и нередко, что другого выхода нет - так как проект написан таким образом, что результирующая схема либо не влезает в заданный объем, либо не дает нужной частоты, а оптимизация проекта практически невозможна (а, точнее, невыгодна, так как займет больше времени, чем переписывание) из-за изначально глобально не оптимальной структуры. Но при этом вникать в код все равно надо, например, чтобы понять "мутные" места спецификации того, что проект реализовывает...

Share this post


Link to post
Share on other sites
Бывает, и нередко, что другого выхода нет - так как проект написан таким образом, что результирующая схема либо не влезает в заданный объем, либо не дает нужной частоты

тогда в моей терминологии такой проект не может продаваться:) И тут надо смотреть на создание нового проекта, и не считать это правкой старого... как-то так... а в целом из всего есть исключения

Share this post


Link to post
Share on other sites
тогда в моей терминологии такой проект не может продаваться:) И тут надо смотреть на создание нового проекта, и не считать это правкой старого...

 

Так речь тут в первую очередь не в правке чужого кода, а во вникании в него, что бывает не только для правки, а и просто для понимания нюансов спецификаций.

 

А продаваться "оно" еще как может, и продается вовсю и всеми (я это подробно исследовал на примере PCI, PCIe и USB IP - за их мегауниверсальность надо платить лишней площадью и тормозами). Сейчас редко кто "впихивает невпихуемое" :), современная тенденция - тупо поставить ПЛИС грейдом повыше, и/или площадью потолще, не думая о том, что затрата "лишнего" месяца на оптимизацию принесет впоследствии прибыль от экономии на себестоимости продукта, которая, чаще всего, покроет этот месяц с лихвой (за редким исключением единичных изделий и прототипов). Хотя, конечно, для этого надо быть не на зарплате... Сорри за мини-оффтопик.

Share this post


Link to post
Share on other sites

Думаю, подходящая ветка.

module tst(
    output reg q=0,
    input d1, d2, d3, clk 

);
    always
        while(d1)
            while(d2)
                while(d3)
                    @(posedge clk)
                        q <= ~q;    
endmodule

Просьба:

1) объяснить работу этого модуля с точки зрения стандарта Верилога,

2) привести в моделируемый вид,

3) перевести в синтезируемый (для ПЛИС) вид.

Share this post


Link to post
Share on other sites

always @(posedge clk)
  if(((d1&d2&d3) == 1'b1)
    q<=~q;

 

может что-то типа того?

я так понимаю это для симуляции, пока эти 3 сигнала в единице по каждому клоку сигнал ку меняется, и это происходит вечно... зачем 3 раза вложили вайлы фиг знает, может там какие-то задержки или еще что под этими вайлами есть...

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

ага...

 

вот мне проект достался самое длинное имя переменно 6 букв.

переменные типа

F_ENSM - это флаг включения шагового двигателя

F_WP - флаг программной работы, при этом есть еще F_WORK - который тоже флаг работы, но другой.

Все переменные глобальные, и мизер комментариев, причем часто такого рода

 

//чтобы работало эту переменную надо задать в 1

W_DFSV = 0;

 

или

 

//вызов функции с параметром 1 выключит все устойства, с параметром 0 оставит CASEL включенным

void ALLOFF(void)

{

 

}

 

при этом что такое CASEL никто незнает, ровно как вызвать void функцию с параметром:).....

 

а вы говорите граф построит и станет понятно:)....

 

Кстати с графом тоже облом 90% переменных глобальные, и меняются в нескольких прерываниях, которые блокируют друг друга, так что....

Share this post


Link to post
Share on other sites
always @(posedge clk)
  if(((d1&d2&d3) == 1'b1)
    q<=~q;

может что-то типа того? ...пока эти 3 сигнала в единице по каждому клоку сигнал ку меняется, и это происходит вечно...

Нет.

зачем 3 раза вложили вайлы фиг знает...

Это я задачку на сообразительность подкинул - смотрю, на каком форуме дизайнеры круче.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this