kt368 0 25 ноября, 2012 Опубликовано 25 ноября, 2012 (изменено) · Жалоба Здравствуйте! Нужно реализовать подсчёт длительности нахождения входного сигнала в '1' (в периодах тактовой частоты), а затем в этом же процессе реализовать задержку на такое же количество периодов тактовой частоты. Пробовал сделать подсчёт сделать так: if (CLK'event and CLK='0') then if RESET='1' then .............. else if CONVERT = '1' then sample_length := sample_length +1; end if; end if; end if; А задержку так: if sample_length = 1 then sample_length := 0; state <= idle; else sample_length := sample_length - 1; end if; Весь процесс выглядит так: MAIN: process (CLK) variable clk_count : clk_count_type := 0; variable sample_length : natural := 0; begin if (CLK'event and CLK='0') then if RESET='1' then state <= idle; DATA_RDY <= '0'; DATA_OUT <= "0000000000"; else if CONVERT = '1' then state <= wiat_coorect_ADC_data; sample_length := sample_length +1; end if; case (state) is when idle => DATA_RDY <= '0'; DATA_OUT <= "0000000000"; when wiat_coorect_ADC_data => if clk_count < (adc_propagation - 2) then clk_count := clk_count+1; else clk_count := 0; state <= coorect_ADC_data; end if; when coorect_ADC_data => DATA_RDY <= '1'; DATA_OUT <= DATA_IN; if sample_length = 1 then sample_length := 0; state <= idle; else sample_length := sample_length - 1; end if; end case; end if; end if; end process; Но при этом схема приобретает устрашающе большие размеры, и при симуляции на Post-Translate уровне работа схемы неудовлетворительная, хотя на Behavioral уровне всё было супер. Как правильно сделать такую задержку? Если нужно, могу выложить весь проект или нужные скриншоты. Заранее спасибо. Изменено 25 ноября, 2012 пользователем kt368 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба Обычный счетчик, а потом FIFO "прикрутить". Не вариант? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kt368 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 (изменено) · Жалоба А чем отличается описание обычного счётчика от того, что я описываю? И ещё, какой тип использовать для сигнала sample_length? integer или лучше std_logic_vector? И можно ли её сделать не сигналом, а переменной? И FIFO тут зачем? Изменено 26 ноября, 2012 пользователем kt368 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kt368 0 26 ноября, 2012 Опубликовано 26 ноября, 2012 · Жалоба И вдогонку: Как на VHDL в ISE объяснить что я хочу создать, допустим, асинхронный счётчик. Или синхронный. P.S. Не пинайте сильно, только начинаю осваивать ПЛИС. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nikolascha 0 27 ноября, 2012 Опубликовано 27 ноября, 2012 · Жалоба И вдогонку: Как на VHDL в ISE объяснить что я хочу создать, допустим, асинхронный счётчик. Или синхронный.Синхронный вариант вы уже описали. А асинхронный нужно описывать на структурном уровне, удобней всего с помощью generate описать последовательное соединение линейки триггеров. Например так: CountBit(0) <= clk; CountBitN <= not CountBit; gCountBit : for i in 1 to CountBit'high generate begin tCountBitI : process (CountBitN, rst) begin if rst = '0' then CountBit(i) <= '0'; elsif CountBitN(i-1)'event and CountBitN(i-1) = '1' then CountBit(i) <= not CountBit(i); end if; end process tCountBitI; end generate; count_bit(7 downto 0) <= unsigned(CountBit(8 downto 1)); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться