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

Счетчик работающий по переднему и заднему перепаду на VHDL!

добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста!

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


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

Написать можно, смоделировать тоже можно, синтезировать - нет (если только целевая FPGA/CPLD не имеет тригеров работающих как по фронту, так и по спаду клока)

Моделирование в Quartus (насколько мне известно) делается после синтеза, так что облом :(

 

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


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

добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста!

Можно теоретически сделать два счетчика - один по фронту, другой по срезу и потом обычный комбинационный сумматор.

Вы огласите конкретней условие задачи, а то по Вашим условиям получается не счетчик, а схема с 3 значениями 0 и +1 или 0 и -1

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


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

спсб за советы! Пишу стек это проблема при создании указателя стека.

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

Единственное, что там может быть, так это латентность...

У меня есть статьи о том, как сделать микропроцессор в ПЛИС. Так вот, там еще в самой первой статье есть пример реализации стека на триггерах. На блочной памяти тоже можно сделать, только немножко сложнее. А уж двух клоков для блочной памяти нет и не будет...

Кстати, у Альтеры есть очень древние аппликухи о реализвции стеков на памяти...

Удачи!

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


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

А уж двух клоков для блочной памяти нет и не будет...

Справедливости ради - в том же Cyclone III есть много разных вариантов тактирования портов блочной памяти. В частности, в Read or Write Clock Mode, регистры, относящиеся к порту чтения, тактируются одним тактовым импульсом, а к порту записи - другим. При одновременном обращении по одному адресу результат, понятное дело, не определен.

 

Относительно того, что проблемы с реализацией стека по одному клоку нет - присоединяюсь.

 

Кстати, если работать по одному клоку, во многих семействах можно выбрать, что будет видно при одновременном обращении на чтение и запись по одному адресу - старые или новые данные.

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


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

Если CLK не очень высокий, то помножить х2 в PLL и работать на удвоенной частоте по переднему фронту :)

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


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

А уж двух клоков для блочной памяти нет и не будет...

А двухпортовое ОЗУ? В Altera есть с давних времен. Вот заголовок из шаблона.

module simple_dual_port_ram_dual_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
input [(DATA_WIDTH-1):0] data,
input [(ADDR_WIDTH-1):0] read_addr, write_addr,
input we, read_clock, write_clock,
output reg [(DATA_WIDTH-1):0] q
);

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


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

А двухпортовое ОЗУ? В Altera есть с давних времен. Вот заголовок из шаблона.

module simple_dual_port_ram_dual_clock
#(parameter DATA_WIDTH=8, parameter ADDR_WIDTH=6)
(
input [(DATA_WIDTH-1):0] data,
input [(ADDR_WIDTH-1):0] read_addr, write_addr,
input we, read_clock, write_clock,
output reg [(DATA_WIDTH-1):0] q
);

Двухпортовое ОЗУ у Альтеры конечно есть, я об этом и не спорю... Но вот только дальше начнутся проблемы с латентностью... Поэтому, чтобы его использовать надо сделать еще и такты ожидания по готовности.

Для стека я понимаю только такую структуру, когда не надо делать тактов ожиданий...

 

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


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

Двухпортовое ОЗУ у Альтеры конечно есть, я об этом и не спорю... Но вот только дальше начнутся проблемы с латентностью... Поэтому, чтобы его использовать надо сделать еще и такты ожидания по готовности.

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

Другое дело, что для стека это не нужно, там не бывает одновременных записи и чтения. В этом смысле я с вами согласен.

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


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

добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста!

Если частота низкая, а глобальная более высокая(раза в 2 больше), тогда можно сделать следующим образом:

Поставить детектор переднего и заднего фронтов и считать уже импульсы по переднему фронту, приходящие с детектора. Определять +1 или -1 можно сделать из Т триггера, который будет переключаться по импульсам приходящим с детектора и давать логический(ую) 1 или 0 а в счетчике сделать реверс счета по лог 1 или 0

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


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

добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста!

Перед Вами явно стоит другая задача.

 

Если сделать то, что Вы описали - значение счетчика постоянно будет чередоваться: n и n+1. Пользы от такого счетчика явно не много.

 

 

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


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

Перед Вами явно стоит другая задача.

 

Если сделать то, что Вы описали - значение счетчика постоянно будет чередоваться: n и n+1. Пользы от такого счетчика явно не много.

ДЕЙСТВИТЕЛЬНО! :)

Хорошо,что заметили. :)

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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