Harvester 0 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Добрый день. Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно). // Счетчик битов reg [2:0] bitcntr; always @(posedge SCK or posedge CSn) if(CSn) bitcntr <= 3'b0; else bitcntr <= bitcntr + 3'b1; ... // Счетчик байтов reg [1:0] bytecntr; always @(posedge SCK or posedge CSn) if(CSn) bytecntr <= 2'b0; else bytecntr <= bytecntr + {1'b0, &bitcntr}; Все работало как надо. Я захотел увеличить разрядность счетчика байтов и переписал 2-й фрагмент как reg [2:0] bytecntr; always @(posedge SCK or posedge CSn) if(CSn) bytecntr <= 3'b0; else bytecntr <= bytecntr + {2'b0, &bitcntr}; Но счетчик все равно считает до 3-х. Почему? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Добрый день. Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно). ... Но счетчик все равно считает до 3-х. Почему? На самом деле подход к проектированию у Вас неправильный. Нет смысле плодить сущности счетчиков, если они нужны, то сделайте один модуль счетчика с параметрами. Сам по себе счетчик - должен быть абсолютно стандартный и проблем с ним нет... И изменением параметров подгоняйте счетчик к конкретному случаю. А так как сейчас Вы только сами себе жизнь усложняете... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Но счетчик все равно считает до 3-х. Почему? Тут важный вопрос как вы это определили? Если на том устройстве что у вас показывает значение счетчика выводятся всего 2 бита, то больше 3 не будет, 4 выглядит как 0, 5 как 1 и так далее... проверяйте то место где вы смотрите значение счетчика, наверняка там бита не хватает... Ну и да, как уже сказано, надо сделать модуль счетчик с параметром, и работать уже этими модулями, а не писать все каждый раз заново. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Тут важный вопрос как вы это определили? Если на том устройстве что у вас показывает значение счетчика выводятся всего 2 бита, то больше 3 не будет, 4 выглядит как 0, 5 как 1 и так далее... Я смотрю в SignalTap - старший разряд bytecntr постоянно в '0'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба На самом деле подход к проектированию у Вас неправильный. Нет смысле плодить сущности счетчиков, если они нужны, то сделайте один модуль счетчика с параметрами. Сам по себе счетчик - должен быть абсолютно стандартный и проблем с ним нет... И изменением параметров подгоняйте счетчик к конкретному случаю. А так как сейчас Вы только сами себе жизнь усложняете... Правильно ли я Вас понял, что проще написать отдельный модуль счётчика с параметрами ? И в других проектах, если требуется счётчик, то вместо его описания, вставлять готовый модуль счётчика с настройкой его параметров ? Просто я всё чаще и чаще прихожу к мысли, что так хоть и сложнее схему описывать, но проще искать ошибки в логике работы схемы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Я смотрю в SignalTap - старший разряд bytecntr постоянно в '0'. Такие проблемы решаются не в SignalTap, а в МоделСим... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Harvester 0 31 марта, 2017 Опубликовано 31 марта, 2017 (изменено) · Жалоба Такие проблемы решаются не в SignalTap, а в МоделСим... Простите, но я не понимаю, что Вы хотите этим сказать? Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта. Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме. Изменено 31 марта, 2017 пользователем Harvester Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Простите, но я не понимаю, что Вы хотите этим сказать? Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта. Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме. Вот что я хотел сказать. Сначала все что требуется для проекта отлаживается в симуляторе на RTL уровне. Это когда интересует только предача данных, но не расположение проекта в кристалле и не задержки и клоки. В симуляторе делается до 70% трудозатрат проекта. И если Вы не увидите правильно работающий проект в симуляторе, то грузить этот проект в ПЛИС - это пустая трата времени и ресурсов.... Ну а то, что " этот проект писал не я", так либо заставить разработчика, который это делал, либо разгребать самому... Но уж если взялись " проверить одну идею", то делать это надо не любительским образом. Хитрого тут ничего нет, просто надо усвоить немного базовых навыков. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shamil 2 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба reg [2:0] bytecntr; always @(posedge SCK or posedge CSn) if(CSn) bytecntr <= 3'b0; else bytecntr <= bytecntr + {2'b0, &bitcntr}; Но счетчик все равно считает до 3-х. Почему? Если bytecntr считает только до 3-х, значит его кто то сбрасывает сигналом CSn. Ну или синтезатор соптимизировал (выкинул) старший разряд, т. к. он не используется в Вашем проекте. Других вариантов не вижу... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Правильно ли я Вас понял, что проще написать отдельный модуль счётчика с параметрами ? И в других проектах, если требуется счётчик, то вместо его описания, вставлять готовый модуль счётчика с настройкой его параметров ? Просто я всё чаще и чаще прихожу к мысли, что так хоть и сложнее схему описывать, но проще искать ошибки в логике работы схемы... Естественно повторное использование повышает эффективность работы Модуль делается, проверяется, отлаживается и дальше он живет своей предсказуемой жизнью. Повторение этого модуля в проекте требует повторной отладки, использование того же модуля не требует. Плюс вы локализуете ошибки, повторно использованным часто использованным кускам доверие выше, и там ошибки надо искать в последнюю очередь. Это не значит что надо все, даже элементарное, заворачивать в модули, но если вы видите что вы какой-то кусок текста копируете больше 1 раза, значит уже стоит подумать а не оформить ли это модулем, или хотя бы таском-функцией Хитрого тут ничего нет, просто надо усвоить немного базовых навыков. справедливости ради надо сказать что симулить проект с НИОС внутри все же задача не тривиальная, особенно если есть зависимость от программы. Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта. Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме. Написали вы все правильно, если что-то работает не так - то ошибка в другом месте. Скорее всего реально где то дергается CSn возможно по тому же счетчику... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Естественно повторное использование повышает эффективность работы Модуль делается, проверяется, отлаживается и дальше он живет своей предсказуемой жизнью. Повторение этого модуля в проекте требует повторной отладки, использование того же модуля не требует. Плюс вы локализуете ошибки, повторно использованным часто использованным кускам доверие выше, и там ошибки надо искать в последнюю очередь. Это не значит что надо все, даже элементарное, заворачивать в модули, но если вы видите что вы какой-то кусок текста копируете больше 1 раза, значит уже стоит подумать а не оформить ли это модулем, или хотя бы таском-функцией Я немного добавлю "Введения" к этому посту. Главное определить глобальную цель. Если цель - мудохаться с кодами и выяснять почему и как взялся тот или иной триггер, то скорее всего перед Вами - "игрун", для которого важен именно сам процесс, но не его результат. А вот если цель - минимизация риска при разработке, то и стиль разработки немного меняется. Микросхема стоит 10 долл. а лишняя неделя разработки 3-5 тыс долл. Вывод? Хрен с ней с микросхемой, пусть будет заполнена на 50% но на неделю раньше. Если число строк кода в отдельно взятом файле велико, то велика и вероятность ошибки. А если Вы используете проверенные "кирпичи", то вероятность ошибки будет меньше. И уже потом, когда пройдет первая партия изделий и будут отработаны доработки, можно будет заниматься оптимизацией железа. Но потом, когда пойдет прибыль и будет захвачен рынок... Поэтому - шаблонные подходы, автоматы, параметры для дебага и релиза... Комментарии, соглашения об именах, сопроводительные описания. А главное - отработанная блок-схема процесса с обработкой ошибочных ситуаций... Подробнее могу только словами по скайпу... Писать все - долго... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vascom 0 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Может изменённый файл просто не был синтезирован, и использовалась старая версия? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 31 марта, 2017 Опубликовано 31 марта, 2017 · Жалоба Может изменённый файл просто не был синтезирован, и использовалась старая версия? А вот для этого я в свой проект вставлял регистр, который читался с хоста. И в нем при обработке файла для встроенного процессора автоматически прописывалась дата компиляции... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться