Перейти к содержанию
    

Обычный счетчик, а не работает!?! Почему?

Идет входной сигнал 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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Каждый раз одно и то же. С завидной постоянностью люди наступают на одни и те же грабли.

Почему так и как надо?

Потому что вы описываете триггеры, которые переключаются по фронтам двух сигналов. В той FPGA, в какую вы хотите этот код запихнуть, триггеров с двумя тактовыми входами может не оказаться. Как надо --- используйте поиск по конференции. Обсуждалось, и неоднократно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может так?:

-- если сброс асинхронный:

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...