Страница 2 из 2

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Вс фев 19, 2012 10:40:09
Gudd-Head
uldemir писал(а):8ма.
Да ладно... Там все рассчёты исходя из макс. рассеиваемой мощности (выходной ток × падение напряжения на ключе).
Может, п.ч. у меня XC9536XL?

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Вс фев 19, 2012 10:49:40
uldemir
ukr-sasha писал(а):П.С. При синтезировании пишет такое предупреждение: WARNING:Cpld - Unable to retrieve the path to the iSE Project Repository. Will use the default filename of 'EncoderFromRadiokot.ise'.
Что это значит? Не может писать в каталог с проектом?
Какой-то глюк с конфигурацией проекта. Когда у меня пару раз что-то такое бывало, проще было сохранить в исходник в другом месте, этот каталог грохнуть и создать проект по-новой. Кстати, какая версия?

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Вс фев 19, 2012 11:23:29
SubDia
Да можно ничего и не делать. Это предупреждение ни на что не влияет.

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Вс фев 19, 2012 13:52:09
ukr-sasha
Версия 13.4 - последняя.

Можно ли реализовать делитель частоты на дробное число? Т.е., например, на 1000 входящих импульсов было бы 600 выходящих.
Пока читаю книги и форумы, но ничего не нашел. Если есть такое, поделитесь ссылкой, почитаю.

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Пн фев 20, 2012 12:50:22
Ruslan-maniak
Попробуйте с помощью DCM. Там можно полулчить результатвот какой CLKFX = fCLKIN(CLKFX_MULTIPLY/CLKFX_DIVIDE), где CLKFX - выходная частота, fCLKIN - входная частота, CLKFX_MULTIPLY - коэф.умножения (2,3,4...32), CLKFX_DIVIDE - коэф.деления(1,2,3...32). Информация взята отсюда:http://logways.ru/2011/09/07/dcm-very-i ... ent-part3/

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Пн фев 20, 2012 20:31:33
ukr-sasha
Похоже то, что надо. Вот только не пойму, для CPLD есть такой модуль?

Прочитав статью, обратил внимание, что минимальная входная частота 18 МГц, или это только для Спартанов?

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Вт фев 21, 2012 07:53:22
nick17
У Xilinx CPLD нет DCM.....

Re: Мигалка светодиодом на ХС9536 - помогите новичку.

Добавлено: Пт мар 02, 2012 18:05:24
ukr-sasha
Попробовал выполнить делитель частоты входящего сигнала с использованием кварцевого генератора. Алгоритм такой: один процесс считает длительность входящего сигнала в импульсах задающего кварцевого генератора, а второй, используя подсчитанное количество импульсов, генерирует выходящий сигнал.
На симуляции все работает. Некоторое округление расчетов, для моей задачи не критично.
Можно ли, как то оптимизировать код?

Код: Выделить всё

----------------------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Counter_test is
    Port ( Clk, EncA : in  STD_LOGIC; -- один вход с кварца  и один вход сигнал, 
							-- частоту которого нужно поделить
           Led : out  STD_LOGIC); -- выход сигнала с требуемой частотой
end Counter_test;

architecture Behavioral of Counter_test is 
signal Led_status : STD_LOGIC := '0'; -- состояние выходного сигнала
signal EncA_status : STD_LOGIC := '0'; -- предыдущее состояние входного сигнала
signal ClkEn : STD_LOGIC := '0'; -- сигнал разрешения выполнения деления сигнала
signal countA : STD_LOGIC_VECTOR (7 downto 0) := (others=>'0'); -- счетчик импульсов кварца
signal countB : STD_LOGIC_VECTOR (7 downto 0) := (others=>'0'); -- счетчик импульсов выходного сигнала
signal Limit : integer :=9; -- предел счета исходящих импульсов

begin

A: process (Clk) -- процесс подсчета длительности импульса входящего сигнала через ко-во импульсов кварца
	
 
	begin
		if Clk = '1' and Clk'event then -- ловим передний фронт с кварца
			countA <= countA + 1; -- увеличиваем счетчик
				if EncA = not EncA_status then --проверяем изменение состояние входящего сигнала
					EncA_status <= EncA; -- запоминаем его состояние
					Limit <= CONV_INTEGER (countA)* CONV_INTEGER(20/3) - 1; -- вычисляем предел счета 
																							  --исх. импульсов
																							  -- 20/3 - как пример
					countA <= (others => '0'); -- обнуляем счетчик
					ClkEn <= '1'; -- разрешаем счет исходящих импульсов
				end if;
		end if;
	end process;

B: process (Clk) -- процесс генерации выходящего сигнала
	
	begin
		if Clk='1' and Clk'event then -- ловим передний фронт с кварца
			if ClkEn = '1' then -- если счет разрешен
				countB <= countB + 1; -- считаем импульсы
				if countB = CONV_STD_LOGIC_VECTOR (Limit,8) then -- если досчитались до предела
					Led_status <= not Led_status; -- меняем состояние исходящего сигнала
					countB <= (others => '0'); -- обнуляем счетчик
					
				end if;
			end if;
		end if;
	end process;


Led <= Led_status; -- выводим исходящий сигнал наружу


end Behavioral;