реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обычный счетчик, а не работает!?! Почему?, Обычный счетчик длительности импульса
Гвоздик
сообщение Jun 10 2005, 08:17
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 2-12-04
Из: Чебоксары
Пользователь №: 1 289



Идет входной сигнал 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;
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Jun 10 2005, 08:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Каждый раз одно и то же. С завидной постоянностью люди наступают на одни и те же грабли.
Цитата(Гвоздик @ Jun 10 2005, 12:17)
Почему так и как надо?

Потому что вы описываете триггеры, которые переключаются по фронтам двух сигналов. В той FPGA, в какую вы хотите этот код запихнуть, триггеров с двумя тактовыми входами может не оказаться. Как надо --- используйте поиск по конференции. Обсуждалось, и неоднократно.
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Jun 10 2005, 08:40
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



INPUT - синхронный сброс?
Go to the top of the page
 
+Quote Post
DeadMoroz
сообщение Jun 10 2005, 13:39
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-02-05
Пользователь №: 2 391



Может так?:
-- если сброс асинхронный:
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;
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st June 2025 - 08:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016