SFx 0 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба в Коментариях у исходника написано время реакции лифта. Для примера я выбрал одну микросекунду. process variable pos_number : integer := 0; variable marker : bit_vector (0 to 7) := "10000000"; begin if (marker = input) then state <= "00"; marker := marker; wait for 1us; -- Lift reaction time; elsif (marker > input) then state <= "01"; if marker /= "00000001" then pos_number := pos_number + 1; marker := marker srl 1; wait for 1000ms; -- Lift up speed; end if; elsif (marker < input) then state <= "10"; if marker /= "10000000" then pos_number :=pos_number - 1; marker := marker sll 1; wait for 1000ms; -- Lift down speed; end if; end if; position <= pos_number; end process; как вариант можно еще установить реакцию на событие input: ... if (marker = input) then state <= "00"; marker := marker; wait until input'event; elsif (marker > input) then .... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба ура, посавил на событие, работает как надо :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба ура, посавил на событие, работает как надо :) Только конструкции, предложенные SFx, не синтезируемые!!! :( Для синтезируемых конструкций нужно просто добавить счетчик который бы отсчитывал бы время! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 7 октября, 2008 Опубликовано 7 октября, 2008 (изменено) · Жалоба Только конструкции, предложенные SFx, не синтезируемые!!! :( Для синтезируемых конструкций нужно просто добавить счетчик который бы отсчитывал бы время! :) Я об этом уже писал выше (пост номер 2 и пост номер 10). Чтобы сделать конструкцию синтезируемой, вводится тактирующий сигнал (к примеру CLK), заданной частоты. Значение входного сигнала input сохраняется в регистре. в реальной схеме управления индикации лифта должен быть еще вход с датчика этажа или с датчика пересечения границы этажа. если такой вход будет то никаких счетчиков ставить не нужно будет. Я так понимаю автору темы нужно сначала изучить сами возможности VHDL, а уж потом начинать на нем писать реальные проекты для FPGA. Пусть он меня поправит если это не так. Изменено 7 октября, 2008 пользователем SFx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба Я об этом уже писал выше (пост номер 2 и пост номер 10). Чтобы сделать конструкцию синтезируемой, вводится тактирующий сигнал (к примеру CLK), заданной частоты. Значение входного сигнала input сохраняется в регистре. в реальной схеме управления индикации лифта должен быть еще вход с датчика этажа или с датчика пересечения границы этажа. если такой вход будет то никаких счетчиков ставить не нужно будет. Я так понимаю автору темы нужно сначала изучить сами возможности VHDL, а уж потом начинать на нем писать реальные проекты для FPGA. Пусть он меня поправит если это не так. Не заметил. Как говорится повторение - мать учения :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 7 октября, 2008 Опубликовано 7 октября, 2008 (изменено) · Жалоба imenno tak, mne nado sna4ala jazqk izu4it, potom uze na shelezo perehodit, kstati a mozno popodrobnee pto clock, ja 4ital 4to clock signalq ushe est vnutri apparaturq kam v FPGA kakieto manedgerq sinhro signalov est malo togo ja ne znakom s programmiruemoi logikoi, no ja smotrel Verilog, on vorde ponjatnee nemnogo. 4to lu4she, kakoi jazqk ? ili eto on zaada4i zavisit ? Изменено 7 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 7 октября, 2008 Опубликовано 7 октября, 2008 (изменено) · Жалоба хех, я чтото в коде запутался, если я пишу if (marker > input ) then выполняется если больше? то лог. 1 как бы и выполнение, или наоборот? или дело в том что сигнал и переменные обьявлены как 0 to 7 ... т.е кто больше 0010_0000 или 0000_1000 по числовому второй, т.к наиоболее значимый последний, а если так сверять, то первый :) Изменено 7 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба если бы вы писали эту задачу для Плис, то вам нужно было бы просто использовать std_logic_vector(7 downto 0). далее вы их сравниваете как два числа и решение будет на поверхности. попробуйте сделать это. также заведите сигнал clk и используйте rising_edge (clk) для формирования тригера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 7 октября, 2008 Опубликовано 7 октября, 2008 (изменено) · Жалоба :) надо будет поробовать. кстати часто в туториалах используют стд логис, а зачем, т.е там есть какие то слабые подтянутые, не подтянутые, вроде 9 значений, или это у ulogic Изменено 7 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба просто большенство типов к std_logic(_vector) приводится, да и сам тип этот наиболее просто описывает сигнал или сигнальную шину. кроме того можно массив std_logic_vector, и это будет называться памятью. 9 значений - это полезность при симуляции. очень важно чтобы было. на самом деле для плис они излишни (я не встречал их использование) Самое важное при симуляции это указывать значения по умолчанию, иначе в больших проектах может пройти не один час реального времени, пока схема не выдет в рабочее состояние. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба или дело в том что сигнал и переменные обьявлены как 0 to 7 ... т.е кто больше 0010_0000 или 0000_1000 по числовому второй, т.к наиоболее значимый последний, а если так сверять, то первый :) Ничего не понял из этого потока сознания. Порядок нумерации бит значения не имеет. В веторе MSB -- это 'left, LSB -- соответственно, 'right. И ещё. Я никогда не работал с bit_vector и могу ошибаться. Я не вижу у вас декларации математического пакета. А без него bit_vector со значением "1000_0000" это +128 и -128? Результат сравнения зависит от интерпретации . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 8 октября, 2008 Опубликовано 8 октября, 2008 · Жалоба такой вопрос, если в архитектуре насколько процессов, то они выоплняются паралельно, а сигналы в процессах меняют значения по окончанию процесса, или через некое дельта Т, тогда чем определяется это дельто Т? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 9 октября, 2008 Опубликовано 9 октября, 2008 · Жалоба How long does it take to execute the for loop? Does it depend on the number of iterations? я так понимаю что время выполнения зависит от кол-ва итераций. но ответ неверен. Препод сказал что по отношению к реальному времени да. та и есть,а вот по отношению в времени ВХДЛ симуляции нет. тут вопрос напрашивается, а чем разница, или симуляция не так циклы симулирует? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 11 октября, 2008 Опубликовано 11 октября, 2008 (изменено) · Жалоба Нужна сного помощь, такая проблема, есть вектор, от 1 до константы, как мне сделать его вида 1000.....00 architecture MUDEL of ELEVATOR is shared variable floors_to_visit : bit_vector (1 to NUM_FLOORS); shared variable current_floor : bit_vector (1 to NUM_FLOORS); shared variable pr_direction : bit_vector (1 downto 0) := "00"; shared variable nw_direction : bit_vector (1 downto 0) := "00"; shared variable current_floor_num : integer := 1; shared variable carry : bit := '0'; begin process current_floor(0) := '0'; компилятор говорит ошибка, но я уже столько раз проверял... я вместо 0 ставил переменную, я пробовл переобьявить сам вектор, число заменял битом со значением 1 ... что тоьлко не пробовал..... в общем 4 часа только над этим бьюсь, помогите.... пожалуйста ещё вопрос назрел, почему я не могу проверить два элемента массива выражением : IF ( current_floor(current_floor_num) and floors_to_visit(current_floor_num)) THEN Изменено 11 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 222 11 октября, 2008 Опубликовано 11 октября, 2008 · Жалоба Например, так: current_floor :=(current_floor'low + 1 to current_floor'high => '0', current_floor'low => '1') А вообще, почитайте http://www.eda.org/comp.lang.vhdl/FAQ1.html#const_vectors Думаю, найдете много для себя полезного. ещё вопрос назрел, почему я не могу проверить два элемента массива выражением : IF ( current_floor(current_floor_num) and floors_to_visit(current_floor_num)) THEN Потому что не может быть автоматически приведено к булевскому типу, поэтому нужно писать так: IF ( current_floor(current_floor_num)='1' and floors_to_visit(current_floor_num)='1') THEN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться