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

 
 
 
Reply to this topicStart new topic
> Verilog, счетчик - не увеличивается разрядность
Harvester
сообщение Mar 31 2017, 08:02
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 324
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Добрый день.
Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно).
Код
// Счетчик битов
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-х. Почему?


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 31 2017, 08:24
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Harvester @ Mar 31 2017, 12:02) *
Добрый день.
Имелась конструкция из двух счетчиков (каждый счетчик в своем модуле, но, думаю, это не важно).
...
Но счетчик все равно считает до 3-х. Почему?

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 31 2017, 08:31
Сообщение #3


Гуру
******

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



Цитата(Harvester @ Mar 31 2017, 11:02) *
Но счетчик все равно считает до 3-х. Почему?


Тут важный вопрос как вы это определили?
Если на том устройстве что у вас показывает значение счетчика выводятся всего 2 бита, то больше 3 не будет,
4 выглядит как 0, 5 как 1 и так далее...

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

Ну и да, как уже сказано, надо сделать модуль счетчик с параметром, и работать уже этими модулями, а не писать все каждый раз заново.
Go to the top of the page
 
+Quote Post
Harvester
сообщение Mar 31 2017, 08:42
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 324
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(Golikov A. @ Mar 31 2017, 11:31) *
Тут важный вопрос как вы это определили?
Если на том устройстве что у вас показывает значение счетчика выводятся всего 2 бита, то больше 3 не будет,
4 выглядит как 0, 5 как 1 и так далее...

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


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 31 2017, 08:45
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 272
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(iosifk @ Mar 31 2017, 11:24) *
На самом деле подход к проектированию у Вас неправильный.
Нет смысле плодить сущности счетчиков, если они нужны, то сделайте один модуль счетчика с параметрами. Сам по себе счетчик - должен быть абсолютно стандартный и проблем с ним нет... И изменением параметров подгоняйте счетчик к конкретному случаю.
А так как сейчас Вы только сами себе жизнь усложняете...

Правильно ли я Вас понял, что проще написать отдельный модуль счётчика с параметрами ? И в других проектах, если требуется счётчик, то вместо его описания, вставлять готовый модуль счётчика с настройкой его параметров ?
Просто я всё чаще и чаще прихожу к мысли, что так хоть и сложнее схему описывать, но проще искать ошибки в логике работы схемы...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 31 2017, 08:47
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Harvester @ Mar 31 2017, 12:42) *
Я смотрю в SignalTap - старший разряд bytecntr постоянно в '0'.


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Harvester
сообщение Mar 31 2017, 08:58
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 324
Регистрация: 1-02-06
Из: Королев, М.О.
Пользователь №: 13 846



Цитата(iosifk @ Mar 31 2017, 11:47) *
Такие проблемы решаются не в SignalTap, а в МоделСим...

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

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


Сообщение отредактировал Harvester - Mar 31 2017, 09:04


--------------------
-Да как так-то?/-Да как-то так/-Ну так-то да
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 31 2017, 09:17
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Harvester @ Mar 31 2017, 12:58) *
Простите, но я не понимаю, что Вы хотите этим сказать?

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

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Shamil
сообщение Mar 31 2017, 09:33
Сообщение #9


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

Группа: Свой
Сообщений: 155
Регистрация: 23-12-04
Из: Уфа
Пользователь №: 1 631



Цитата(Harvester @ Mar 31 2017, 14:02) *
Код
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.
Ну или синтезатор соптимизировал (выкинул) старший разряд, т. к. он не используется в Вашем проекте.
Других вариантов не вижу...
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 31 2017, 09:53
Сообщение #10


Гуру
******

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



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

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

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

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

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

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

Написали вы все правильно, если что-то работает не так - то ошибка в другом месте. Скорее всего реально где то дергается CSn возможно по тому же счетчику...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 31 2017, 10:03
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Golikov A. @ Mar 31 2017, 13:49) *
Естественно повторное использование повышает эффективность работы
Модуль делается, проверяется, отлаживается и дальше он живет своей предсказуемой жизнью. Повторение этого модуля в проекте требует повторной отладки, использование того же модуля не требует. Плюс вы локализуете ошибки, повторно использованным часто использованным кускам доверие выше, и там ошибки надо искать в последнюю очередь.

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

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Vascom
сообщение Mar 31 2017, 11:00
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 216
Регистрация: 2-08-07
Из: Москва
Пользователь №: 29 534



Может изменённый файл просто не был синтезирован, и использовалась старая версия?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 31 2017, 11:16
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 3 526
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Vascom @ Mar 31 2017, 15:00) *
Может изменённый файл просто не был синтезирован, и использовалась старая версия?

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2017 - 14:02
Рейтинг@Mail.ru


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