если я правильно понял, то для 5030 требуется 16 пучков по 16 бит, DCLK-тактирование, LE-с последним битом каждого пучка, 3 раза на 16 пучке, GCLK-частота мерцания диодов. написал на VHDL тестовый код:
Код
entity test_vhdl is
Port ( CLK0 : in STD_LOGIC; -- частота тактового генератора
-- управляющие сигналы --
LED : out STD_LOGIC := '0'; -- диод на плате
TX_E : out STD_LOGIC := '1'; -- разрешение
CLK_TX : inout STD_LOGIC := '0'; -- GCLK для драйвера
LE_TX : inout STD_LOGIC := '0'; -- обозначение нового пакета для драйвера
DCLK_TX : inout STD_LOGIC := '0'; -- тактирование
-- данные на преобразователь -- 3 драйвера на R, G, B
TA2 : out STD_LOGIC; -- R
TA3 : out STD_LOGIC; -- G
TA4 : out STD_LOGIC; -- B
TA5 : out STD_LOGIC); -- доп. по плате надо
end test_vhdl;
architecture Behavioral of test_vhdl is
begin
process (CLK0)
variable count : integer range 0 to 111 := 0; -- для делителя тактовой частоты
variable count2, count3, count4 : integer range 0 to 16 := 0;
variable clk_in : STD_LOGIC; -- работа не по тактовой частоте генератора, а по этой
---------------- пробовать менять значения битов и смотреть, что получится ------------------------------------
variable bit0 : STD_LOGIC := '0';
variable bit1 : STD_LOGIC := '0';
variable bit2 : STD_LOGIC := '1';
variable bit3 : STD_LOGIC := '0';
variable bit4 : STD_LOGIC := '0';
variable bit5 : STD_LOGIC := '1';
variable bit6 : STD_LOGIC := '1';
variable bit7 : STD_LOGIC := '0';
variable bit8 : STD_LOGIC := '0';
variable bit9 : STD_LOGIC := '0';
variable bit10 : STD_LOGIC := '0';
variable bit11 : STD_LOGIC := '0';
variable bit12 : STD_LOGIC := '0';
variable bit13 : STD_LOGIC := '0';
variable bit14 : STD_LOGIC := '0';
variable bit15 : STD_LOGIC := '1';
begin
------------------------------делитель тактовой частоты------------------------------
if (rising_edge(CLK0)) then
if (count = 5) then -- счет импульсов для выставления "1", частота генератора большая
count := 0;
clk_in := '1';
else
count := count + 1;
clk_in := '0';
end if;
end if;
-------------------------------------------------------------------------------------
DCLK_TX <= clk_in; -- синхронизация драйвера по частоте
CLK_TX <= clk_in; -- частота мерцания диодов
-------------------------------------------------------------------------------------
if (clk_in='1') then -- тактирование по внутреннерассчитанной частоте
------------------------------ LE ------------------------------
if (count2=15) then
LE_TX <= '1'; -- 16 импульсов на передачу, потом новый пакет
count2:=0;
count3:=count3+1;
else
count2:=count2+1;
if (count3 < 15 or count2 < 13) then -- на 16 пачке из 16 импульсов 3 раза надо выдать LE
LE_TX <= '0';
else
LE_TX <= '1';
end if;
end if;
------------------------------ RGB ------------------------------
case count2 is
when 0 => TA2 <= bit0; TA3 <= bit0; TA4 <= bit0; -- MSB
when 1 => TA2 <= bit1; TA3 <= bit1; TA4 <= bit1;
when 2 => TA2 <= bit2; TA3 <= bit2; TA4 <= bit2;
when 3 => TA2 <= bit3; TA3 <= bit3; TA4 <= bit3;
when 4 => TA2 <= bit4; TA3 <= bit4; TA4 <= bit4;
when 5 => TA2 <= bit5; TA3 <= bit5; TA4 <= bit5;
when 6 => TA2 <= bit6; TA3 <= bit6; TA4 <= bit6;
when 7 => TA2 <= bit7; TA3 <= bit7; TA4 <= bit7;
when 8 => TA2 <= bit8; TA3 <= bit8; TA4 <= bit8;
when 9 => TA2 <= bit9; TA3 <= bit9; TA4 <= bit9;
when 10 => TA2 <= bit10; TA3 <= bit10; TA4 <= bit10;
when 11 => TA2 <= bit11; TA3 <= bit11; TA4 <= bit11;
when 12 => TA2 <= bit12; TA3 <= bit12; TA4 <= bit12;
when 13 => TA2 <= bit13; TA3 <= bit13; TA4 <= bit13;
when 14 => TA2 <= bit14; TA3 <= bit14; TA4 <= bit14;
when 15 => TA2 <= bit15; TA3 <= bit15; TA4 <= bit15; -- LSB
when OTHERS => TA2 <= '0'; TA3 <= '0'; TA4 <= '0';
END CASE;
------------------------------ adr ------------------------------
TA5 <= '1';
end if;
-------------------------------------------------------------------------------------
end process;
end Behavioral;
но не работает. кто-нить подскажите, выдавать В ТА2 последовательность, например из bit(i).