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

инкремент двоичного счётчика на два

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

Но, толи устал толи ...

Проект на MAXII.

Есть 20-ти разрядный двоичный счёчик с сигналами сброса, начальной загрузки и входом разрешения счёта.

Нужно как-то реализовать возможность увеличения его значения на единицу или на два.

В зависимости от некого внешнего сигнала.

Как это реализовать?

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


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

Счётчик это сумматор с регистром. Вот что суммировать в принципе не сильно важно. Или x=x+1; или x=x+2

Соответственно мультиплексор выбирающий 1 или 2 + сумматор и регистр :)

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


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

Не понял.

Вот к примеру:

1. начальное значение счётчика =0, слагаемое =1

на каждом следующем такте получим 1,2,3,4...

2. начальное значение счётчика =0, слагаемое =2

на каждом следующем такте получим 2,3,4,5...

Получается просто смещение начального значения.

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


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

15 минут назад, zombi сказал:

Нужно как-то реализовать возможность увеличения его значения на единицу или на два.

В зависимости от некого внешнего сигнала.

Подаем внешний сигнал S = 1, если надо добавлять 2 или 0, если надо добавлять 1.

И суммируем  Х + 1 + S... Вот и все...

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


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

7 минут назад, zombi сказал:

Не понял.

Вот к примеру:

1. начальное значение счётчика =0, слагаемое =1

на каждом следующем такте получим 1,2,3,4...

2. начальное значение счётчика =0, слагаемое =2

на каждом следующем такте получим 2,3,4,5...

Получается просто смещение начального значения.

Dj втором случае x=x+2 т.е. 2, 4, 6, и пр...

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


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

Ага, т.е. счетчик как таковой не и нужен.

Просто регистр выход которого через сумматор подключён к его же входу.

Правильно?

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


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

Так "регистр выход которого через сумматор подключён к его же входу." при слагаемом 1 это и есть синхронный счётчик :)))

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


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

Ясно. Спасибо.

А как же грузить этот счётчик начальным значением?

Ещё один мультиплексор после сумматора ставить...

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


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

3 минуты назад, MegaVolt сказал:

http://iosifk.narod.ru/hdl_coding/hdl_coding_11_kit_1_09.pdf

Только вместо "1" подаём или 1 или 2

Спасибо, что не забываете...

Ну а еще можно и так...

Если 20 разрядов сильно тормозят проект, то можно сделать маленький автомат, аккумулятор, скажем на 4 бита + флаг переноса и к этому память на 5 ячеек по 4 бита... Ну и если на 20 разрядов синхронный перенос сожрет много ресурсов, то на 4 бита проект будет бегать быстро.. И счет делать по-тетрадно. Если точность счета "до последнего бита" не нужна, то можно учесть сколько тактов работает автомат, ну скажем 4 такта и это умножить на 4 ячейки. Получим 16 тактов на обработку счетчика... 

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


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

9 minutes ago, iosifk said:

Если 20 разрядов сильно тормозят проект... Получим 16 тактов на обработку счетчика... 

На самом деле счетчик у меня 25-ти битный (на блок-схеме просто мегафункция LPM_COUNTER).

На вход clk поступает частота 120MHz.

Каждый третий такт формируется единица на входе разрешения счёта счетчика.

Получается что счётчик должен увеличится на единицу за 2 такта (~16.6 нс).

Сейчас вроде всё работает, успевает.

Но вот захотелось мне его не на единицу а на два увеличивать.

Завтра буду пробовать сумматор и регистр использовать вместо просто двоичного счётчика.

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


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

Приветствую!

9 hours ago, zombi said:

Завтра буду пробовать сумматор и регистр использовать вместо просто двоичного счётчика.

Простой синхронный двоичный счетчик это как раз комбинация сумматора и регистра. Поэтому без разницы какую константу вы будете суммировать  1,2 или -1.    

Удачи! Rob.  

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


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

Интересно было почитать. Если не сложно, извините что не совсем по теме. Почему в данном случае вы все общаетесь на языке электроники (сумматор, регистры...) Если проще было один раз написать на Verilog с одним If и простым инкрементом. В журнале Иосифа так же половину текста долго рассказывается на языке электроники и достаточно быстро выложено одним куском кода пересказанное.
Это наверное идеология, которая мне, программисту, не понятна?

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


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

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

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

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

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

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

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

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

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

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