Перейти к содержанию
    

Verilog, счетчик - не увеличивается разрядность

Добрый день.

Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно).

// Счетчик битов
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-х. Почему?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добрый день.

Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно).

...

Но счетчик все равно считает до 3-х. Почему?

На самом деле подход к проектированию у Вас неправильный.

Нет смысле плодить сущности счетчиков, если они нужны, то сделайте один модуль счетчика с параметрами. Сам по себе счетчик - должен быть абсолютно стандартный и проблем с ним нет... И изменением параметров подгоняйте счетчик к конкретному случаю.

А так как сейчас Вы только сами себе жизнь усложняете...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но счетчик все равно считает до 3-х. Почему?

 

Тут важный вопрос как вы это определили?

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

4 выглядит как 0, 5 как 1 и так далее...

 

проверяйте то место где вы смотрите значение счетчика, наверняка там бита не хватает...

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут важный вопрос как вы это определили?

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

4 выглядит как 0, 5 как 1 и так далее...

Я смотрю в SignalTap - старший разряд bytecntr постоянно в '0'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле подход к проектированию у Вас неправильный.

Нет смысле плодить сущности счетчиков, если они нужны, то сделайте один модуль счетчика с параметрами. Сам по себе счетчик - должен быть абсолютно стандартный и проблем с ним нет... И изменением параметров подгоняйте счетчик к конкретному случаю.

А так как сейчас Вы только сами себе жизнь усложняете...

Правильно ли я Вас понял, что проще написать отдельный модуль счётчика с параметрами ? И в других проектах, если требуется счётчик, то вместо его описания, вставлять готовый модуль счётчика с настройкой его параметров ?

Просто я всё чаще и чаще прихожу к мысли, что так хоть и сложнее схему описывать, но проще искать ошибки в логике работы схемы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я смотрю в SignalTap - старший разряд bytecntr постоянно в '0'.

 

Такие проблемы решаются не в SignalTap, а в МоделСим...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такие проблемы решаются не в SignalTap, а в МоделСим...

Простите, но я не понимаю, что Вы хотите этим сказать?

 

Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта.

Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме.

 

Изменено пользователем Harvester

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Простите, но я не понимаю, что Вы хотите этим сказать?

 

Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта.

Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме.

Вот что я хотел сказать.

Сначала все что требуется для проекта отлаживается в симуляторе на RTL уровне. Это когда интересует только предача данных, но не расположение проекта в кристалле и не задержки и клоки.

В симуляторе делается до 70% трудозатрат проекта. И если Вы не увидите правильно работающий проект в симуляторе, то грузить этот проект в ПЛИС - это пустая трата времени и ресурсов....

Ну а то, что " этот проект писал не я", так либо заставить разработчика, который это делал, либо разгребать самому... Но уж если взялись " проверить одну идею", то делать это надо не любительским образом. Хитрого тут ничего нет, просто надо усвоить немного базовых навыков.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

Ну или синтезатор соптимизировал (выкинул) старший разряд, т. к. он не используется в Вашем проекте.

Других вариантов не вижу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Правильно ли я Вас понял, что проще написать отдельный модуль счётчика с параметрами ? И в других проектах, если требуется счётчик, то вместо его описания, вставлять готовый модуль счётчика с настройкой его параметров ?

Просто я всё чаще и чаще прихожу к мысли, что так хоть и сложнее схему описывать, но проще искать ошибки в логике работы схемы...

Естественно повторное использование повышает эффективность работы

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

 

Это не значит что надо все, даже элементарное, заворачивать в модули, но если вы видите что вы какой-то кусок текста копируете больше 1 раза, значит уже стоит подумать а не оформить ли это модулем, или хотя бы таском-функцией

 

Хитрого тут ничего нет, просто надо усвоить немного базовых навыков.

справедливости ради надо сказать что симулить проект с НИОС внутри все же задача не тривиальная, особенно если есть зависимость от программы.

 

Думаю, стоит пояснить - я НЕ работаю с Verilog и этот проект писал не я. Я пишу ПО для NIOS в составе этого проекта.

Мне захотелось проверить одну идею, но у меня не получилось и я задал ответ на форуме.

Написали вы все правильно, если что-то работает не так - то ошибка в другом месте. Скорее всего реально где то дергается CSn возможно по тому же счетчику...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Естественно повторное использование повышает эффективность работы

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

 

Это не значит что надо все, даже элементарное, заворачивать в модули, но если вы видите что вы какой-то кусок текста копируете больше 1 раза, значит уже стоит подумать а не оформить ли это модулем, или хотя бы таском-функцией

Я немного добавлю "Введения" к этому посту.

Главное определить глобальную цель.

Если цель - мудохаться с кодами и выяснять почему и как взялся тот или иной триггер, то скорее всего перед Вами - "игрун", для которого важен именно сам процесс, но не его результат.

А вот если цель - минимизация риска при разработке, то и стиль разработки немного меняется. Микросхема стоит 10 долл. а лишняя неделя разработки 3-5 тыс долл. Вывод? Хрен с ней с микросхемой, пусть будет заполнена на 50% но на неделю раньше. Если число строк кода в отдельно взятом файле велико, то велика и вероятность ошибки. А если Вы используете проверенные "кирпичи", то вероятность ошибки будет меньше. И уже потом, когда пройдет первая партия изделий и будут отработаны доработки, можно будет заниматься оптимизацией железа. Но потом, когда пойдет прибыль и будет захвачен рынок... Поэтому - шаблонные подходы, автоматы, параметры для дебага и релиза... Комментарии, соглашения об именах, сопроводительные описания. А главное - отработанная блок-схема процесса с обработкой ошибочных ситуаций...

Подробнее могу только словами по скайпу... Писать все - долго...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может изменённый файл просто не был синтезирован, и использовалась старая версия?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может изменённый файл просто не был синтезирован, и использовалась старая версия?

А вот для этого я в свой проект вставлял регистр, который читался с хоста. И в нем при обработке файла для встроенного процессора автоматически прописывалась дата компиляции...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...