барт 0 19 февраля, 2005 Опубликовано 19 февраля, 2005 · Жалоба Помогите, please Имеется процесс (сдвиговый регистр): SIGNAL parallel_in_signal:std_logic_vector(24 DOWNTO 0); shiftreg1 : PROCESS ( clk_spi, load_shiftreg1, enable_shiftreg, reset ) BEGIN IF reset = '1' THEN sdo <= 'Z'; ELSIF RISING_EDGE(load_shiftreg1) THEN parallel_in_signal <= parallel_in; ELSIF enable_shiftreg = '1' THEN IF FALLING_EDGE(clk_spi) THEN sdo <= parallel_in_signal(0); FOR i IN 0 TO 22 LOOP parallel_in_signal(i) <= parallel_in_signal(i+1); END LOOP; parallel_in_signal(23) <= '0'; END IF; END IF; END PROCESS; на что квартус выдает: Error: VHDL error at file.vhd(129): signal statement is not synthesizable because it does not hold its value after a clock adge, причем ModelSim в этом месте ничего не находил что здесь можно сделать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vjacheslav 0 19 февраля, 2005 Опубликовано 19 февраля, 2005 · Жалоба То, что сразу бросается в глаза: изменение по фронту описывается так: IF (clk'EVENT AND clk = '1') THEN В Вашем случае необходимо заменить: IF FALLING_EDGE(clk_spi) THEN на IF (clk_spi'EVENT AND clk = '0') THEN Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
барт 0 19 февраля, 2005 Опубликовано 19 февраля, 2005 · Жалоба а в чем разница между FALLING_EDGE(clk) и (clk'EVENT AND clk = '0')? :blink: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MadMakc 0 20 февраля, 2005 Опубликовано 20 февраля, 2005 · Жалоба Разницы нет никакой.Просто FALLING_EDGE как и RISING_EDGE -это функции библиотеки IEEE.std_logic_1164. Залезь в эту библиотеку и найти 10 отличий от (clk'EVENT AND clk = '1') или (clk'EVENT AND clk = '0') Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
cdg 2 21 февраля, 2005 Опубликовано 21 февраля, 2005 · Жалоба не являюсь большим знатоком VHDL, но здесь требуют синтезировать триггер с 2-мя тактовыми входами: [ELSIF RISING_EDGE(load_shiftreg1) THEN parallel_in_signal <= parallel_in; ELSIF enable_shiftreg = '1' THEN IF FALLING_EDGE(clk_spi) THEN что для моделирования вещь возможная, для синтеза нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 22 февраля, 2005 Опубликовано 22 февраля, 2005 · Жалоба Тут два варианта регистр с асинхронной загрузкой IF load_shiftreg1 THEN . . IF FALLING_EDGE(clk_spi) THEN или с синхронной IF FALLING_EDGE(clk_spi) THEN IF load_shiftreg1 THEN Компилятор новых элементов не придумает, а использует базовые элементы для синтеза схемы. Поэтому, нужно корректно описывать схему, понимая как это будет ссинтезировано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jodan 0 12 апреля, 2005 Опубликовано 12 апреля, 2005 · Жалоба Правильно тут говорилось и я еще раз повторюсь, что-бы человек в будущем избежал ошибок. Во-первых, при использовании в одном процесе RISING_EDGE и FALLING_EDGE уже автоматически делают его несинтезируемым. Во-вторых, конструкция if edge else также является несинтезируемой, пусть автор сам представит, как это должно выглядеть в железе ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doppler 0 13 апреля, 2005 Опубликовано 13 апреля, 2005 · Жалоба Помогите, please Имеется процесс (сдвиговый регистр): IF reset = '1' THEN sdo <= 'Z'; <{POST_SNAPBACK}> А как он Z на внутренней логике делать? Z - на выходном буфере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться