реклама на сайте
подробности

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> как быстро вникнуть в чужой код, советы по скоростному освоению чужой программы
Timmy
сообщение Aug 12 2014, 17:18
Сообщение #61


Знающий
****

Группа: Участник
Сообщений: 821
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Golikov A. @ Aug 12 2014, 20:32) *
на IXBT оказались дизайнеры лучше. Они видать работали и им некогда было глупостями маятсяsm.gif...

Я вот тоже так подумал, кто будет решать дурацкие задачки? Правильно, только дуракиsm.gif.
Цитата
вопрос о том где описано поведение while остается открытым...

как-то уж очень чуднО выходит.

как только d1 становится 1, мы проваливаемся в while и сидим там пока оно не станет 0, это ок.
как только к d1 добавляется d2, мы проваливаемся во второй while и сидим там, даже если первый while перестал выполняться, то есть даже когда d1 стало обратно 0.
И также с 3 while, и как только мы провалились в него q начинает молотить... и теперь даже если убрать d1 и d2 ничего не остановится...

Поведение вериложного while в этом смысле нисколько не отличается от поведения сишного, всё очень просто.

Ещё один способ обеспечить симулируемость без полного перелопачивания алгоритма - это добавить ожидания по сигналам:
Код
module tst1(
    output reg q=0,
    input d1, d2, d3, clk
);
    always
        @(d1) while(d1)
            @(d2 or ~d1) while(d2)
                 @(d3 or ~d2) while(d3)
                    @(posedge clk)
                        q <= ~q;
endmodule
Go to the top of the page
 
+Quote Post
Leka
сообщение Aug 12 2014, 17:40
Сообщение #62


Знающий
****

Группа: Участник
Сообщений: 982
Регистрация: 30-09-05
Пользователь №: 9 118



"Бой" устроил в ответ на это: http://forum.ixbt.com/topic.cgi?id=48:9544-67#2035
И задачку специально подобрал не на сложность или знание, а на понимание Верилога - как видно, она оказалась чрезвычайно проста для тех кто действительно понимает Верилог.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 12 2014, 18:25
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 4 232
Регистрация: 17-02-06
Пользователь №: 14 454



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

Цитата
Поведение вериложного while в этом смысле нисколько не отличается от поведения сишного, всё очень просто.

кроме всего вокруг... ломается идиология... ну да ладно.
Go to the top of the page
 
+Quote Post
SM
сообщение Aug 12 2014, 18:38
Сообщение #64


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Timmy @ Aug 12 2014, 21:18) *
@(d2 or ~d1) while(d2)


А в чем, если не секрет, суть инверсии d1 внутри @(), если нету ни posedge, ни negedge ?

PS
Интересная задачка была на развитие мозгов в правильном направлении понимания языка. Жаль, только с отпуска прилетел... Уже все всё решили, осталось только посмотреть на готовенькое.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Aug 12 2014, 19:06
Сообщение #65


Знающий
****

Группа: Участник
Сообщений: 821
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(SM @ Aug 12 2014, 22:38) *
А в чем, если не секрет, суть инверсии d1 внутри @(), если нету ни posedge, ни negedge ?

Это я путаюсь между VHDL и Verilog. В VHDL в подобной конструкции будет завершение ожидания по уровню, а в Verilog - только по обоим фронтам. Тогда этот код неправильный, а правильно как-то так:
Код
module tst1(
    output reg q=0,
    input d1, d2, d3, clk
);
    always begin
       if(!d1) @(d1);
       while(d1)begin
            if(!d2) @(d2 or d1);
            while(d2)begin
                 if(!d3) @(d3 or d2);
                 while(d3)
                    @(posedge clk)
                        q <= ~q;
            end
       end
    end
endmodule
Go to the top of the page
 
+Quote Post
Leka
сообщение Aug 12 2014, 19:47
Сообщение #66


Знающий
****

Группа: Участник
Сообщений: 982
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Timmy @ Aug 12 2014, 23:06) *
Тогда этот код неправильный

Правильный, просто "~" внутри "@(...)" лишние.
Go to the top of the page
 
+Quote Post
Timmy
сообщение Aug 12 2014, 20:24
Сообщение #67


Знающий
****

Группа: Участник
Сообщений: 821
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515



Цитата(Leka @ Aug 12 2014, 23:47) *
Правильный, просто "~" внутри "@(...)" лишние.

Неправильный, так как он не предотвращает зацикливание while, который, в отличие от always, не будет ждать следующего дельта-цикла перед повтором. Правильней так:
Код
module tst1(
    output reg q=0,
    input d1, d2, d3, clk
);
    always begin
       if(!d1) @(d1);
       while(d1)begin
            if(!d2) @(d2 or negedge d1);
            while(d2)begin
                 if(!d3) @(d3 or negedge d2);
                 while(d3)
                    @(posedge clk)
                        q <= ~q;
            end
       end
    end
endmodule

Нужны if-ы или нет, не совсем очевидно, лучше не рисковатьsm.gif.
Go to the top of the page
 
+Quote Post
Leka
сообщение Aug 14 2014, 07:03
Сообщение #68


Знающий
****

Группа: Участник
Сообщений: 982
Регистрация: 30-09-05
Пользователь №: 9 118



Цитата(Timmy @ Aug 12 2014, 11:47) *
Тут, помимо q, извращённым способом определены ещё 3 триггера, назову их d1t,d2t,d3t(у каждого выход .q), условия установки/сброса следующие:
d3t.reset = ~d3 && posedge clk
d3t.set = d2t.q && d3
d2t.reset = ~d2 && ~d3.q
d2t.set = d1.q && d2
d1t.reset = ~d1 && ~ d2.q
d1t.set = d1
Сплошная асинхронщина, в некоторых ПЛИС нет RS триггеров, придётся на LE слепитьsm.gif.
Хотя, это можно как то и упростить, наверное, но думать лень, задача дурацкая.

У меня неправильно в tst2(): условия установки/сброса "повторно" должны проверяються не раньше, чем будет "пройден" весь always.
А тут правильно.

Сообщение отредактировал Leka - Aug 14 2014, 07:51
Go to the top of the page
 
+Quote Post
Мур
сообщение Sep 5 2014, 07:14
Сообщение #69


Знающий
****

Группа: Свой
Сообщений: 763
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(ASN @ Jul 20 2014, 12:00) *
egorman44
Знакомая ситуация sad.gif. Долго, муторно и, зачастую, бессмысленно. Но вариантов нет.
Вам привели хороший пример про ручку и карандаш, и про то, то нужно время.
IMHO, необходимо (последовательно):
- выделить ВСЕ сигналы и процессы в таблицу;
- в таблицу внести столбики куда сигналы входят, откуда и куда идут с кратким описанием Вашего понимания их назначения;
- нарисовать блок-схему устройства и перенести (физически скопировать в квадратики) на неё код (как САПР);
- нарисовать машины состояний;
- нарисовать диаграммы изменения сигналов;
- нарисовать временные диаграммы сигналов;
- написать тест-бенч и проверить правильность работы RTL;
- создать контрольные примеры;
- скорее всего, местами переписать код - если нет тестового окружения, то писал его либо гений, либо разгильдяй. Второе наиболее вероятно.
После постараться дать "пинка под зад" руководителю, поскольку если проект не документирован и без контрольных векторов, то это не руководитель. Совсем.

Этот ответ мне понравился больше всего, только хочу дополнить, чтобы автоматизировать процесс...
В подобном случае мне приходилось прибегать к ActiveHDL, который по коду специальным инструментом(я сейчас за чужим компом не могу точнее указать) рисовал квадратики со связями. Это первое.
Любой проект имеет набор тестбенчей, которые позволяют увидеть во времени взаимодействие полученных квадратиков(модулей). Тогда в Модел-Симе можно уточнить для себя нюансы поведения любого составляющего. Если этого нет,- придется написать бенч самому, основываясь на том ТЗ, что был изначально.
Только пройдя этот путь можно быть уверенным в понимании логики, а значит и возможности смены кода на свой. К тому же тест-бенч уже под рукой! =)

Кстати, (для ленивых) в Моделсиме можно на ходу менять руками некоторые состояния(тоже не помню точно, а глянуть тут не могу). Бывает очень выручает...
...Если есть железо под рукой, есть отличная возможность под JTAGом смотреть реальные процессы исследуемого кода. В крайнем случае,- выводить сигналы на контрольные пины (их закладывают с запасом для контрорля осцилографом=) и частенько для подпаек добавленных компонент к макету)
Go to the top of the page
 
+Quote Post
Мур
сообщение Sep 5 2014, 15:21
Сообщение #70


Знающий
****

Группа: Свой
Сообщений: 763
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Следствием этих мучений может быть собственный опыт при создании нового проекта. Я лично по ходу написания проекта в произвольной форме пишу текст, где отражаю ключевые моменты. Как можно подробнее. В итоге, через какое-то время, этот текст становится огромной ценностью. Даже для себя =). Уже чистовик в конце пишется легче и приятнее. "Делть нужно все вовремя!"
Если бы такие черновики оставались от каждого,- экономия сил была бы колоссальной!

Не ленитесь! Следите, чтобы свой код не стал "чужим"!
Go to the top of the page
 
+Quote Post
gotcha
сообщение Sep 30 2014, 11:29
Сообщение #71


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 19-03-06
Пользователь №: 15 389



понять ТЗ;
обложить тестами, начиная с топового и заканчивая отдельными модулями;
в процессе "вкуривания" комментировать код;

Помогают еще разные фичи тулов: просмотр иерархии, схематик вью...
Имея хорошее покрытие тестами, вносить изменения не так боязно.
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 31 2017, 11:35
Сообщение #72


Знающий
****

Группа: Свой
Сообщений: 763
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Хм...
Я в подобных случаях для не знакомых мне VHDL-проектов (желательно рабочих) пользуюсь инструментом в ActiveHDL,- CODE2GRAPHICS conversion Wizard.
В итоге можно будет глянуть функциональную блок-схему со связями с понятной иерархией.
Так легче потом разбираться...

.....А вообще HDL можно ли назвать программированием?
Я всегда для программистов контроллеров объясняю, что мы пишем свои пожелания и не факт, что именно так оно и будет реализовано. Да и этап оптимизации проекта у классических программеров отсутствует.
Go to the top of the page
 
+Quote Post
Aaron
сообщение Mar 31 2017, 12:52
Сообщение #73


Местный
***

Группа: Свой
Сообщений: 228
Регистрация: 5-10-06
Из: Зеленоград
Пользователь №: 21 007



Ни разу не vhdl-программист, но вот сейчас закупаем Sigasi studio, которая очень уж удобная - вот там между кодом и графами скакать оперативно да разбираться в коде самое оно для целей топикстартера! Можно бесплатную демо-версию у них запросить, дают без проблем.
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 31 2017, 15:00
Сообщение #74


Знающий
****

Группа: Свой
Сообщений: 763
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(Aaron @ Mar 31 2017, 15:52) *
Ни разу не vhdl-программист, но вот сейчас закупаем Sigasi studio, которая очень уж удобная - вот там между кодом и графами скакать оперативно да разбираться в коде самое оно для целей топикстартера! Можно бесплатную демо-версию у них запросить, дают без проблем.

Я делал попытку год назад обзавестись. У меня они постоянно в рассылке. И что, теперь можно сделать еще попытку? попробую... Спасибо!
Go to the top of the page
 
+Quote Post

5 страниц V  « < 3 4 5
Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th November 2017 - 07:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016