spectr 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба SMПоддерживаю dxp в том, что неудобно лезть в объявление переменных и менять wire на reg. Да, Вы говорите что поменять объявление всего несколько секунд. Но тут всплывают те же тезисы, что и в холиваре между тоннами писанины на VHDL и краткостью Verilog: не сама писанина страшна, это действительно всего несколько лишних нажатий на клавиатуре. Пугает чисто психологический момент (возвращаемся обратно к wire и reg): вот, надо из текущего положения исходника куда-то лезть в его начало, выискивать там этот злополучный сигнал и менять его объявление. А затем возвращаться обратно и искать то положение в тексте, над которым я работал, которое было на экране. В результате даже мысль можно потерять из-за таких переключений внимания. И тогда можно наделать ещё больше неочевидных системных ошибок (которые тоже не обнаруживаются синтезатором как ошибки), чем ошибка в наличии/отсутствии задержки сигнала на такт. ... У некоторых есть ещё привычка ставить перед сигналом префикс его объявления типа w_my_signal или r_my_signal. Я вот тоже против таких префиксов, т.к. потом при необходимости изменения объявления придётся все сигналы заменять. Пусть и автозаменой. Но я ей не доверяю на 100%, боюсь, что что-то лишнее в общем случае может попасть под паттерн, поэтому стараюсь автозамены не делать либо делать их с подтверждением вручную по каждой замене, анализируя, что же предлагается заменить. А это уже небыстро... По первому тезису: в любом прогерском редакторе есть закладки. Поставил - и бац, всегда можно в один клик вернуться назад. Либо в два клика, если закладок несколько. По второму тезису: за почти 15 лет использования редакторами автозамена не подвела ни разу. ЧЯДНТ? Примкну к армии SM в плане способа описания FSM, т.к. читать две простыни дюже неубоднее, чем одну (да еще и перескакивать между ними, уточняя что конкретно делается в том или ином состоянии). И тут снова на помощь приходит любой прогерский редактор: поставил курсор на переменную state - и он подсветил тебе все строчки с ее участием. Или на конкретное состояние - и сразу видно откуда и кто в него приходит. Примеры с выделением ниже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба По первому тезису: в любом прогерском редакторе есть закладки. Поставил - и бац, всегда можно в один клик вернуться назад. Либо в два клика, если закладок несколько.Всё равно лишние телодвижения. К тому же перешли Вы только к началу блока описания сигналов, а там ещё всматриваться надо, где нужный вам сигнал. Я прогерский редактор не использую, сижу в notepad++. В любом случае бесполезное отвлечение (которого могло не быть вообще) может стоит вам ошибки из-за переключения внимания (хоть и наненадолго). По второму тезису: за почти 15 лет использования редакторами автозамена не подвела ни разу. ЧЯДНТ?Условно: я за 36 лет ни разу не болел водянкой. ЧЯДНТ? Это у Вас не аргументы, что вот ни разу, и всё тут. Я же пишу, что может попасться паттерн, что захватит лишние замены. И опять же лишние телодвижения, которых могло не быть вообще. Опять же отвлечение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectr 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Всё равно лишние телодвижения. К тому же перешли Вы только к началу блока описания сигналов, а там ещё всматриваться надо, где нужный вам сигнал. Я прогерский редактор не использую, сижу в notepad++. В любом случае бесполезное отвлечение (которого могло не быть вообще) может стоит вам ошибки из-за переключения внимания (хоть и наненадолго). Не знаю как в нотпаде, но в прогерских редакторах есть возможность по клику на переменной перейти к ее описанию (а в некоторых даже - в другой файл, если описание выненесно), причем в том месте, откуда осуществляется переход - автоматически ставится закладка, чтобы потом быстро вернуться назад. По поводу автозамены: в нотпаде++ есть multiedit - редактируете переменную в одном месте, а вслед за Вами автоматически редактируются все эти же переменные по всему исходнику. И не надо никакой автозамены. (http://notepad-plus-plus.org/features/multi-editing.html) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Всё равно лишние телодвижения. К тому же перешли Вы только к началу блока описания сигналов, а там ещё всматриваться надо, где нужный вам сигнал. Я прогерский редактор не использую, сижу в notepad++. В любом случае бесполезное отвлечение (которого могло не быть вообще) может стоит вам ошибки из-за переключения внимания (хоть и наненадолго). Сижу в Notepad++, пользуюсь закладками, выделяю нужные слова. В-общем, много чего есть в нем. Я же пишу, что может попасться паттерн, что захватит лишние замены. Тоже боюсь изменять автоматически, но делаю. Иногда изменяю по мере обнаружения. Лишних переименований не помню. P.S. Тем более, пользуюсь системой контроля версий, всегда могу вернуть назад. О, про мультиэдит не знал. Еще работаю в двух окнах. Очень удобно в одном смотреть, в другом редактировать. Потом наоборот. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба мультиедит - это лазить по всему исходнику и кликать мышкой с контролом в нужных местах - гимор, если исходник приличный. Автозамена всё же проще. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Примкну к армии SM в плане способа описания FSM, т.к. читать две простыни дюже неубоднее, чем одну Судя по скриншотам, это "примыкание" к теме-то не относится... Разговор шел о разделение FSM на комбинаторную часть отдельно, а регистровую - отдельно. А у вас тут просто перемешивание тела автомата с тем, чем он управляет. Это - другая тема. Плюс - да, удобство понимания, все сразу наглядно видно. Да и писать проще и меньше. Минус - что нельзя корректно описать асинхронный сброс, если он нужен только части регистрам, а так бывает чаще всего, так как асинхронной инициализации подлежат обычно лишь малая часть из всей кучи, остальные инициализируются уже самим автоматом. То есть, к примеру, регистр с данными не надо сбрасывать (без разницы, что в нем было до старта работы), а вот сигнал управления запросом на чтение - надо. Да и синхронный, тоже... Его описание приводит к тому, что разводится сигнал запрещения работы регистрам, сброса не требующим, на время сброса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба в нотпаде++ не хватает, тыкнуть правой кнопкой и вызвать меню найти определение... ну очень не хватает. А вдруг есть и я просто не знаю? пару раз я нарывался при замене если не правильно расставить галочки, то большие буквы на маленькие заменить, по часть определений в более длинных заменит, то есть накосячить можно, но с другой стороны и на клавише delete уснуть тоже можно.... мультиедит - не совсем то, больше он подходит для вертикальной правки... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexadmin 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Минус - что нельзя корректно описать асинхронный сброс, если он нужен только части регистрам, а так бывает чаще всего, так как асинхронной инициализации подлежат обычно лишь малая часть из всей кучи, остальные инициализируются уже самим автоматом. Грязный хак, не входящий в фициальные language templates, но работающий, и у Xilinx и у Altera, насколько я помню: process(clk, arst) if rising_edge(clk) then q0 <= a; q1 <= b; end if; if arst = '1' then q0 <= '0'; end if; end process; Впрочем сам так делать боюсь :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Грязный хак Вот это редкий плюс VHDL-я. На верилоге так не получается... так как там: always @(posedge clk or posedge rst) if (rst) begin fsm <= FSM_IDLE; nCE <= 1'b1; end else case (fsm) STATE_XXX: begin fsm <= STATE_YYY; nCE <= 1'b0; data_reg <= in_data; end endcase В результате таких вот вещей резет разводится корректно, а вот регистр "data_reg" получает в свой сигнал enable добавку в виде !reset.... А, чтобы без этой добавки, не получается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 17 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба В результате таких вот вещей резет разводится корректно, а вот регистр "data_reg" получает в свой сигнал enable добавку в виде !reset.... А, чтобы без этой добавки, не получается... Это зависит от синтезатора. Я когда-то сравнивал xst, synplify и quartus вот как раз на эту тему. Кто-то из них заводил сброс на enable, а кто-то нет. Кто именно, не помню, давно дело было. С тех пор могло что-то поменяться. Ну и VHDL, да. Сам явно пишу так, что если сброс в процессе используется, то он используется для всех сигналов в процессе. Триггеры без сброса пишу в отдельном процессе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Это зависит от синтезатора. Я когда-то сравнивал xst, synplify и quartus У меня это synplify делает. Самый современный, идущий с последним Diamond. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба а ресет без else нельзя так как он асинхронный? а если data_reg <= in_data; поставить и там и там? always @(posedge clk or posedge rst) if (rst) begin fsm <= FSM_IDLE; nCE <= 1'b1; data_reg <= in_data; end else case (fsm) STATE_XXX: begin fsm <= STATE_YYY; nCE <= 1'b0; data_reg <= in_data; end endcase по идее теперь оно от reset не зависит и его с енайбла должны убрать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба по идее теперь оно от reset не зависит и его с енайбла должны убрать? Да щас. Вы описали асинхронную загрузку in_data в регистр data_reg по сигналу reset. От этого схему вокруг этого регистра может разнести аж втрое, если нет такого железного триггера с такой загрузкой. А без else нельзя, так как, по аналогии с VHDL, нельзя написать потом if rising_edge(clk) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Если взять за основу freescale или cisco стандарты... Если не сложно, можете дать ссылки на эти стандарты? Спасибо! UPD Понял, это про coding style. Тогда не нужно, это легко находится :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Да щас. Вы описали асинхронную загрузку in_data в регистр data_reg по сигналу reset. От этого схему вокруг этого регистра может разнести аж втрое, если нет такого железного триггера с такой загрузкой. А без else нельзя, так как, по аналогии с VHDL, нельзя написать потом if rising_edge(clk) ну да, все как всегда не так как кажется... это просто дурная договоренность что блок асинхронного ресета описывается именно так, ну вернее она может и не дурная, но договоренность, от нее все и беды... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться