Стоит примерно следующая задача: Имеется Cyclone II, SRAM, W5100. Необходимо реализовать устройство которое будет получать команды по езернету, складывать их в буфер, а по истечению определенного времени (значение передается в команде) писать в цапы. Устройство не сложное, если бы не одно но. Опыта работы с ПЛИС нет. Приступил к работе с создания части, которая пишет в цап. Вот код который я натоптал: library IEEE; use IEEE.STD_LOGIC_1164.all;
entity shifter is
PORT(WR : IN STD_LOGIC; SEND : IN STD_LOGIC; data_in : IN STD_LOGIC_VECTOR(23 downto 0); data_out : OUT STD_LOGIC; CS : OUT STD_LOGIC; shift_clk_out : OUT STD_LOGIC);
END entity shifter;
architecture a_shifter of shifter is BEGIN
PROCESS(WR, SEND) variable buf : STD_LOGIC_VECTOR(23 downto 0); BEGIN IF(WR'event and WR ='1') then for A in 23 downto 0 loop buf(A) := data_in(A); end loop; END IF; IF(SEND'event and SEND ='1') then CS <= '1'; for A in 23 downto 0 loop shift_clk_out <= '1'; data_out <= buf(A) after 10 ns; shift_clk_out <= '0'; end loop; CS <= '0'; END IF;
END PROCESS; END architecture a_shifter;
Естественно, он не работает в симуляторе. Алгоритм, который я пытался реализовать такой: Сначала я выставляю 23 бита на data_in, потом дергаю WR и по фронту это все дело пишется в buf. Потом дергаю SEND и биты должны из buf последовательно выдаваться на пин данных, при этом не забывая про цлк и выбор кристалла (shift_clk_out и CS). Помогите кто чем может, желательно по-существу.
Еще переделывал, задавая buf, как сигнал в начале архитектуры (до begin). Наверное так правильнее, но все равно не работало)
|