[an error occurred while processing this directive]
|
Задача такая сделать часы с тактовой 2МГц.
Условия минимальный объем. Как лучше сделать:
считать такты до 2000 делая миллисекундные
тактовые (часы с миллисекундами),затем считая
уже их до 1000 и.т.д. ,или есть что то поинтересней?
Так как часы показывают время в дв-десятичном коде
придется переводить из бинарного в дв-дес. Хотя
может проще завести несколько переменных под
каждый разряд десятичного кода и прибавлять по
единице: сначала на разряд единиц,затем на разряд
десятков.
Вот небольшой прототип часов (пока просто показывают
секунды минуты часы а на входе такты с частотой 1 секунда).
Как с вашей точки зрения совсем плохо или так себе.
Кстати надо ли применять LPM функции для счетчиков и.др.
или можно без них.Мне более понятно рассматривать
переменные.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY clocks IS
PORT
(
clk : IN STD_LOGIC;
I_sec,I_min : buffer INTEGER RANGE 0 TO 60;
I_chr : buffer INTEGER RANGE 0 TO 24
);
END clocks;
ARCHITECTURE a OF clocks IS
Begin
process(clk) begin
IF clk'event AND clk='1' THEN
IF I_sec=59 THEN
I_sec<=0;
else
I_sec<=I_sec+1;
end if;
end if;
end process;
process(clk,I_sec) begin
IF clk'event AND clk='1' THEN
IF I_sec=59 THEN
IF I_min=59 THEN
I_min<=0;
else
I_min<=I_min+1;
end if;
end if;
end if;
end process;
process(clk,I_min,I_sec) begin
IF clk'event AND clk='1' THEN
IF I_min=59 THEN
IF I_sec=59 THEN
if I_chr=23 then
I_chr<=0;
else
I_chr<=I_chr+1;
end if;
end if;
end if;
end if;
end process;
end a;
E-mail: info@telesys.ru