libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба добрый день, Задача такая, на вход подается 8 битный вектор, в котором только одна 1, начальное условие 10000000, еще есть выходное число, позиция, оно соответсвуе месту 1цы в векторе. library IEEE; use IEEE.std_logic_1164.all; -------------------------------------------------------- entity POSITIONING is port (INPUT : in bit_vector(0 to 7); STATE : out bit_vector(1 downto 0); POSITION : out integer); end POSITIONING; -------------------------------------------------------- architecture MUDEL of POSITIONING is begin process variable pos_number : integer := 1; variable marker : bit_vector (0 to 7) := "10000000"; begin if (marker = input) then state <= "00"; position <= pos_number; elsif (marker > input) then state <= "01"; pos_number := pos_number - 1; position <= pos_number; marker := marker sll 1; elsif (marker <input) then state <= "10"; pos_number :=pos_number + 1; position <= pos_number; marker := marker srl 1; end if; wait for 1000 ms; end process; end MUDEL; я написал код. как смог... но в симуляции число растет, и не меняется ... и ещё... важно чтобы изменения происходили раз в секунду ... это чтото вроде описания движения лифта , вектор это этаж, позиция номер этажа, а двойной вектор, это просто анправление, 00 стоим, 01 10 вверх и вниз. Я не понимаю почему не выполняются условия, почему он все вермя увеличивает значение маркера? Буду очень благодарен за помощь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба у вас конструкция не синтезируемая. напишите как вы изменяете input вход. Изменено 6 октября, 2008 пользователем SFx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба у меня есть второй файл, дляс имуляции library IEEE; use IEEE.std_logic_1164.all; entity TB_POSITIONING is end TB_POSITIONING; architecture testbench of TB_POSITIONING is component POSITIONING is port (INPUT : in bit_vector(0 to 7); STATE : out bit_vector(1 downto 0); POSITION : out integer); end component; signal t_input: bit_vector(0 to 7); signal t_state: bit_vector(1 downto 0); signal t_position: integer; begin POS: POSITIONING port map(t_input, t_state, t_position); process begin t_input<="00010000"; wait for 10 sec; t_input<="00010000"; wait for 10 sec; t_input<="00000001"; wait for 10 sec; t_input<="01000000"; wait; end process; end testbench; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hitower1 0 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба Почитайте для начала вот это: http://www.bsuir.by/vhdl/literature/bibilo Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба да читаю я, читаю , правдо на англ. купил книжку одну. языки vhdl и verilog. в проектировании цифровой аппаратуры но очень сложно, на англ читаю в интернете боле понятно что да как , но всё таки... я не понимаю многого. вот мне надо сделать так, чтобы эти сдвиги были раз в 1 сек, правлеьно ли я поставил вэйт ? и вообще этот совершенно неверен или как.. с точки зрения си, он работал бы. последовательное выполнение... процесс тоже последовательно, но не работает. и тогда вопрос времени жизни переменных в процессе, вообще процесс как выполняется, все время, если я его прописал без условий запуска а с вэйтом, то он будет каждую секунду запускаться? а переменные, они стираются, мне тогда что, надо сигналами их обьявить в архитектуре?? ещё, если кому не сложно, посоветуйте хорошую книжку по вхдлу, чтобы можно было заказать её с сайта www.books.ru заранее спасибо, я только с этого сайта могу русские книги получать, тут у нас из русских только сорокин :) Изменено 6 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба Ошибка в сдвиге. Вы сразу сдвигали влево и '1' исчезала. Довил условие и теперь ниже 1 этаже (ровно также как и выше 8го) уехать нельзя ;) process variable pos_number : integer := 1; variable marker : bit_vector (0 to 7) := "10000000"; begin if (marker = input) then state <= "00"; pos_number := pos_number; position <= pos_number; marker := marker; elsif (marker > input) then state <= "01"; pos_number := pos_number + 1; position <= pos_number; if marker /= "00000001" then marker := marker srl 1; end if; elsif (marker <input) then state <= "10"; pos_number :=pos_number - 1; position <= pos_number; if marker /= "10000000" then marker := marker sll 1; end if; end if; wait for 1000ms; end process; Изменено 6 октября, 2008 пользователем SFx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба чтото не так, вообще никак не реагирует в симуляции.... так, поменял условия немного, заработала как надо но ! почему то он начинает сразу с 2 ... т.е такой шустрый малый :) и второе , он реагирует раз в секунду :) тупит. Изменено 6 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба В какой среде симулируете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба то что нашел ,model sim работает и не надо платить, и не требует 4 гига ... как этот quadrus или как его там какая у вас программа хорошая .. наглядно, я нажал в модео сим сохранить диаграмму, завис, жду.... а можно как то его переписать, чтобы он сразу реагировал, а не через секунду ... если каждому условию сделать свой процесс? или если я сделаю процесс реагирующий на изменений входа, то как сделать чтобы он через секунду там тикал .... Изменено 6 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 6 октября, 2008 Опубликовано 6 октября, 2008 · Жалоба Вот то что в modelsim получилось и исходники Оказывается modelsim не умеет выводить в waveforms переменную из процесса. а можно как то его переписать, чтобы он сразу реагировал, а не через секунду ... если каждому условию сделать свой процесс? или если я сделаю процесс реагирующий на изменений входа, то как сделать чтобы он через секунду там тикал .... на каждое условие процесс нельзя делать, тк у вас входное значение одно и выходное тоже. если будете что то подобное синтезировать получите неработоспособную схему. msim.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба library IEEE; use IEEE.std_logic_1164.all; -------------------------------------------------------- entity POSITIONING is port (INPUT : in bit_vector(0 to 7); STATE : out bit_vector(1 downto 0); POSITION : out integer); end POSITIONING; -------------------------------------------------------- architecture MUDEL of POSITIONING is begin process variable pos_number : integer := 0; variable marker : bit_vector (0 to 7) := "10000000"; begin if (marker = input) then state <= "00"; position <= pos_number; marker := marker; elsif (marker > input) then state <= "01"; position <= pos_number; pos_number := pos_number + 1; if marker /= "00000001" then marker := marker srl 1; end if; elsif (marker < input) then state <= "10"; position <= pos_number; pos_number :=pos_number - 1; if marker /= "10000000" then marker := marker sll 1; end if; end if; wait for 1000ms; end process; end MUDEL; вот в таком виде все как надо , но http://www.pld.ttu.ee/~uljana/IAY0040/lab2...es/image004.jpg в отличии от того что нужно, он реагиует с опозданием, т.е явно надо как то процессы переделать... но блин, как? вот кстати картинка ксатти, а чем вызвана такая большая задержка, разве переменные не меняются моментально а сигналы через дельта Т, а тут через задержку в секунду ... странно Изменено 6 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SFx 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба ксатти, а чем вызвана такая большая задержка, разве переменные не меняются моментально а сигналы через дельта Т, а тут через задержку в секунду ... странно у Вас шаг в файле для симуляции как раз секунда. Там можно попробовать вот так написать: wait for 10.36 sec; А если вам нужно чтобы быстрее значение на выходе появлялось тo wait for 1ms; нужно поставить в modul.vhd дельта T - это шаг симуляции. если вы поставите его слишком маленький то 50 sec будете ждать то утра следующей недели. поэтому он должен быть выбран оптимально, быть равен минимальной задержке (если 'wait'-конструкция используется). Изменяется через параметр при старте: vsim -t <ms|us|ns|ps|fs> <entity> В если будете синтезировать на VHDL устройства, то там нельзя будет использовать 'wait' - конструкцию. в реальности все цифровые устройства (FPGA) тактируются с задающего генератора. и если вам нужно будет какую то паузу держать вы ставите счетчик и по выходу старшего разряда продалжаете какую либо операцию. Изменено 6 октября, 2008 пользователем SFx Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 6 октября, 2008 Опубликовано 6 октября, 2008 (изменено) · Жалоба пока надо освоиться с языком... у меня одна секунда потому, что "лифт" едет медленно, и менятся должны значения разв в секунду попробовал шаг маленький сделать, все равно реакция тормознутая. а во вайт в файле я н могу сделать меньше секунды, иначе ... иначе поменяются значения очень быстро, а шаг всего 1 сек. Изменено 6 октября, 2008 пользователем Kirill Trusov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба пока надо освоиться с языком... у меня одна секунда потому, что "лифт" едет медленно, и менятся должны значения разв в секунду попробовал шаг маленький сделать, все равно реакция тормознутая. а во вайт в файле я н могу сделать меньше секунды, иначе ... иначе поменяются значения очень быстро, а шаг всего 1 сек. Опишите свою задачу более подробно, пожайлуста. Какие входные данные, какие выходные данные, что должно делать Ваше устройство? По поводу русских книг поищите здесь в поиске наберите VHDL Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
libricon 0 7 октября, 2008 Опубликовано 7 октября, 2008 · Жалоба это чтото вроде модели лифта, входные данные, это вектор (8 бит ), 1 в нём означает этаж, куда ехать надо, выходной вектор (2 бита ) это направление движения, 00 стоим, 01 вверх 10 вниз. и одно число - это типо этаж, на котором мы. изначально 1000_0000 ( младший слева ). Например подаем 0000_1000. начинается, выходной 01 (вверх), число 0, через секунду 1 , через секунду 2, через секунду 3, через секунду 4 и сразу вектор 00 , типо приехали. Подаем 0010_0000 выходной вектор 10 (вниз), число 4, секунда 3, секунда 2 и вектор 00, стоим. Вот вроде простая модель лифта, но я вхдл ненаю совсем,... я тот код 2 дня писал, чтобы без ошибок он был, и то так и не смог. мне помогли. теперь он работает, но он меняет состояние векторов через 1 секунду, а не сразу... вот в чем беда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться