schewermut 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба Написать можно, смоделировать тоже можно, синтезировать - нет (если только целевая FPGA/CPLD не имеет тригеров работающих как по фронту, так и по спаду клока) Моделирование в Quartus (насколько мне известно) делается после синтеза, так что облом :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста! Можно теоретически сделать два счетчика - один по фронту, другой по срезу и потом обычный комбинационный сумматор. Вы огласите конкретней условие задачи, а то по Вашим условиям получается не счетчик, а схема с 3 значениями 0 и +1 или 0 и -1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
schewermut 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба спсб за советы! Пишу стек это проблема при создании указателя стека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба спсб за советы! Пишу стек это проблема при создании указателя стека. Нет там никакой проблемы. И должен быть только один клок. Под запись в стек - инкремент, под чтение - декремент. И более никаких хитростей с двумя фронтами... Единственное, что там может быть, так это латентность... У меня есть статьи о том, как сделать микропроцессор в ПЛИС. Так вот, там еще в самой первой статье есть пример реализации стека на триггерах. На блочной памяти тоже можно сделать, только немножко сложнее. А уж двух клоков для блочной памяти нет и не будет... Кстати, у Альтеры есть очень древние аппликухи о реализвции стеков на памяти... Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SergeyF 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба А уж двух клоков для блочной памяти нет и не будет... Справедливости ради - в том же Cyclone III есть много разных вариантов тактирования портов блочной памяти. В частности, в Read or Write Clock Mode, регистры, относящиеся к порту чтения, тактируются одним тактовым импульсом, а к порту записи - другим. При одновременном обращении по одному адресу результат, понятное дело, не определен. Относительно того, что проблемы с реализацией стека по одному клоку нет - присоединяюсь. Кстати, если работать по одному клоку, во многих семействах можно выбрать, что будет видно при одновременном обращении на чтение и запись по одному адресу - старые или новые данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Magnum 0 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба Если CLK не очень высокий, то помножить х2 в PLL и работать на удвоенной частоте по переднему фронту :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба А уж двух клоков для блочной памяти нет и не будет... А двухпортовое ОЗУ? В 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 ); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба А двухпортовое ОЗУ? В 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 ); Двухпортовое ОЗУ у Альтеры конечно есть, я об этом и не спорю... Но вот только дальше начнутся проблемы с латентностью... Поэтому, чтобы его использовать надо сделать еще и такты ожидания по готовности. Для стека я понимаю только такую структуру, когда не надо делать тактов ожиданий... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 23 июня, 2010 Опубликовано 23 июня, 2010 · Жалоба Двухпортовое ОЗУ у Альтеры конечно есть, я об этом и не спорю... Но вот только дальше начнутся проблемы с латентностью... Поэтому, чтобы его использовать надо сделать еще и такты ожидания по готовности. Да, вроде, никаких проблем. Можно писать и читать одновременно, на любых допустимых частотах, безо всяких ожиданий. Другое дело, что для стека это не нужно, там не бывает одновременных записи и чтения. В этом смысле я с вами согласен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2010 Опубликовано 24 июня, 2010 · Жалоба добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста! Если частота низкая, а глобальная более высокая(раза в 2 больше), тогда можно сделать следующим образом: Поставить детектор переднего и заднего фронтов и считать уже импульсы по переднему фронту, приходящие с детектора. Определять +1 или -1 можно сделать из Т триггера, который будет переключаться по импульсам приходящим с детектора и давать логический(ую) 1 или 0 а в счетчике сделать реверс счета по лог 1 или 0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 24 июня, 2010 Опубликовано 24 июня, 2010 · Жалоба добрый день! Нуждаюсь в помощи! Мне нужно создать счетчик на VHDL который делает +1 по (clk'event and clk = '0'), а -1 по (clk'event and clk = '1'). Возможно ли вообще так делать, моделирую в Quartus, ему не нравиться это, в других САПР которые не привязанные к схемам все работает нормально. Посоветуйте что-то пожалуйста! Перед Вами явно стоит другая задача. Если сделать то, что Вы описали - значение счетчика постоянно будет чередоваться: n и n+1. Пользы от такого счетчика явно не много. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2010 Опубликовано 24 июня, 2010 · Жалоба Перед Вами явно стоит другая задача. Если сделать то, что Вы описали - значение счетчика постоянно будет чередоваться: n и n+1. Пользы от такого счетчика явно не много. ДЕЙСТВИТЕЛЬНО! :) Хорошо,что заметили. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться