Гвоздик 0 10 июня, 2005 Опубликовано 10 июня, 2005 · Жалоба Идет входной сигнал INPUT, по каждому его фронту обнуляю показания счетчика тактовых импульсов CLOCK. Не работает и все, пишет что значение PERIODSIG на хранится вне CLOCK. Почему так и как надо? LIBRARY ieee ; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY METER IS PORT ( INPUT, CLOCK: IN STD_LOGIC; PERIOD : OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END METER ; ARCHITECTURE BEHAVIOR OF METER IS SIGNAL PERIODSIG : INTEGER RANGE 0 TO 255; BEGIN CLKPROC: PROCESS ( CLOCK, INPUT ) BEGIN IF (INPUT'EVENT AND RISING_EDGE(INPUT)) THEN PERIODSIG <= 0; END IF; IF (CLOCK'EVENT AND RISING_EDGE(CLOCK)) THEN PERIODSIG <= PERIODSIG + 1; END IF; END PROCESS CLKPROC; PERIOD <= CONV_STD_LOGIC_VECTOR(PERIODSIG,8); END BEHAVIOR; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 10 июня, 2005 Опубликовано 10 июня, 2005 · Жалоба Каждый раз одно и то же. С завидной постоянностью люди наступают на одни и те же грабли. Почему так и как надо? Потому что вы описываете триггеры, которые переключаются по фронтам двух сигналов. В той FPGA, в какую вы хотите этот код запихнуть, триггеров с двумя тактовыми входами может не оказаться. Как надо --- используйте поиск по конференции. Обсуждалось, и неоднократно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serega Doc 0 10 июня, 2005 Опубликовано 10 июня, 2005 · Жалоба INPUT - синхронный сброс? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DeadMoroz 0 10 июня, 2005 Опубликовано 10 июня, 2005 · Жалоба Может так?: -- если сброс асинхронный: CLKPROC: PROCESS ( CLOCK, INPUT ) BEGIN IF (INPUT='1') THEN PERIODSIG <= 0; ELSIF (CLOCK'EVENT AND RISING_EDGE(CLOCK)) THEN PERIODSIG <= PERIODSIG + 1; END IF; END PROCESS CLKPROC; -- если сброс синхронный: CLKPROC: PROCESS ( CLOCK, INPUT ) BEGIN IF (CLOCK'EVENT AND RISING_EDGE(CLOCK)) THEN IF (INPUT='1') THEN PERIODSIG <= 0; ELSE PERIODSIG <= PERIODSIG + 1; END IF; END PROCESS CLKPROC; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться