flexxx Опубликовано 6 апреля, 2007 Поделиться Опубликовано 6 апреля, 2007 Помогите написать Генератор ССП на VHDL, что бы работал в двух режимах на 525 и 625. Входы -Clock (ТС) -Slave (режим) Выход -ССП Плиз. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
wowa Опубликовано 6 апреля, 2007 Поделиться Опубликовано 6 апреля, 2007 (изменено) Я не русский - что это такое ССП??? Стандартный Серийный Порт? Если да - то надо уточнить если это нужно только для симулятора или будет зашиваться в какой то девайс? Ну и уточнить ещё пару вещей - частота и небольшую табличку режимов на входе.... Ну и если это только передачик или и приёмник? Вобщем уточнить.. Изменено 6 апреля, 2007 пользователем wowa 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
flexxx Опубликовано 6 апреля, 2007 Автор Поделиться Опубликовано 6 апреля, 2007 (изменено) ССП - это сигнал синхронизации приёмников . Расположен он в полном видеосигнале ниже уровня чёрного , и состоит из строчных синхроимпульсов , кадровых синхроимпульсов , и так называемых уравнивающих импульсов ( импульсов двойной строчной частоты до и после кадрового синхроимпульса ) . В одном стандарте 525 строк , 60 полукадров в секунду , в другом - 625 строк , 50 полукадров в секунду . Частота строк у первого ( NTSC ) стандарта - 15750 герц , у второго ( PAL , SECAM ) - 15625 герц . Для различения стандартов проще использовать частоту кадров , так как она сильнее отличается . Выделить кадровый импульс , да измерить его частоту. Тока надо все по умному, я пока долеко не спец в VHDL. __||__||__||__||__...__||_||_||_||_|--------------|_||_||_||_||_||__||__||__||__||___ таково вида должен быть сигнал, но это воймет только тот кто в ТВ шарит, я не понимаю, вот и хочу спорсить у более продвинутых людях. В приложенной pdf подробно описано про стандарты, и что представляет собой ССП, правда на английском, вот только я не могу разобраться. ITU_R_BT470_6.pdf Изменено 6 апреля, 2007 пользователем flexxx 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
wowa Опубликовано 6 апреля, 2007 Поделиться Опубликовано 6 апреля, 2007 Ага!!! Ну тогда боюсь что и с моими знаниями VHDL тебе непомогу.. Знаю что в нём можно обрабатывать и аналоговые сигналы - да только как я понял всё это ещё только в симулятору.. Для нормальной ПЛИС тебе будет нужен цифровой сигнал.. А розделить синхро из видео будет я думаю проще специальными микрухами для теликов... Ну и потом попробовать его подать на входи анализировать... Я так понял что надо иметь что-то типа автоматического переключения стандартов в телеку? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 6 апреля, 2007 Автор Поделиться Опубликовано 6 апреля, 2007 Жаль что не поможешь, может кто еще поможет??? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 6 апреля, 2007 Автор Поделиться Опубликовано 6 апреля, 2007 Ну народ чем нибудь помогите.... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 6 апреля, 2007 Поделиться Опубликовано 6 апреля, 2007 Ну народ чем нибудь помогите.... Чем конкретно помочь по VHDL (написать весь код или что-то другое)??? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 6 апреля, 2007 Автор Поделиться Опубликовано 6 апреля, 2007 Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо. Хотя бы обьясните как ССП описать, наше и зарубежное. Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально. А ты можешь код написать? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 9 апреля, 2007 Поделиться Опубликовано 9 апреля, 2007 Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо.Хотя бы обьясните как ССП описать, наше и зарубежное. Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально. А ты можешь код написать? У тебя же в пдфке всё расписано. Тебе под какой стандарт нужно делать? Вот почитай. Здесь по русски про формирование видеосигнала и про реализацию на МК. А потом пиши в чём возникает трудность при реализации этого на VHDL. TV_signal.rar 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 10 апреля, 2007 Автор Поделиться Опубликовано 10 апреля, 2007 Я просто понятть не могу как ССП ревлизовать на VHDL... причем что бы этот блок работал только от ТС, т.е. подаю я Clock с частотой 15750 Гц (стандарт 525/60, периуд примерно 63.5 ns) и на единственном выходе выходи сигнал ССП. т.е. такой как на рисунке. первые 1000 тактов на выходе была единица (первый сигнал полукадра), потом примерно 75 тактов (2.3us +/-0,1) в "0", потом вновь 1000 тактов... короче 5 сигналов полукадра по 1000 тс, между ними примерно 75тс в "0". Далее уравнимающие импульсы через те же 75 тактов после 5ого полукадра. Уравнивающие по 4.7us, между ними 27.1us. Уравнивающих тоже 5. Короче есть тестбенч для ModelSim, приведени ниже library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use ieee.numeric_std.all; entity test_sweep is end test_sweep; architecture testbench of test_sweep is -- Declaration of the component under test component SyncSelector port ( Clock : in std_logic; CompSyncIn : in std_logic; LineRes : buffer std_logic; FildRes : out std_logic; Standart : out std_logic; Sync : out std_logic ); end component; signal Clock : std_logic :='1'; signal CompSyncIn : std_logic :='1'; signal LineRes : std_logic; signal FildRes : std_logic; signal Standart : std_logic; signal Sync : std_logic; signal LineSync : std_logic :='0'; signal LineEqual : std_logic :='0'; signal LineSerra : std_logic :='0'; signal FildSync : std_logic :='0'; signal FildState : INTEGER RANGE 0 TO 3; begin -- Place stimulus and analysis statements here dut : SyncSelector port map ( Clock => Clock, CompSyncIn => CompSyncIn, LineRes => LineRes, FildRes => FildRes, Standart => Standart, Sync => Sync ); clk : PROCESS begin wait for 31.75 ns; Clock <= not Clock; end PROCESS clk; LnSnc : PROCESS begin LineSync <= '1'; wait for 4.7 us; LineSync <= '0'; wait for 58.8 us; end PROCESS LnSnc; LnEqu : PROCESS begin LineEqual <= '1'; wait for 4.7 us; LineEqual <= '0'; wait for 29.45 us; end PROCESS LnEqu; LnSer : PROCESS begin LineSerra <= '1'; wait for 27.05 us; LineSerra <= '0'; wait for 2.3 us; end PROCESS LnSer; FdStt : PROCESS begin FildState <= 0; wait for 190.5 us; FildState <= 1; wait for 190.5 us; FildState <= 2; wait for 16.09725 ms; FildState <= 3; wait for 190.5 us; end PROCESS FdStt; With FildState Select CompSyncIn <= LineSerra When 0, LineSync When 2, LineEqual When Others; end testbench; касячный немного, но помоги из него сделать Генератор ССП.... Плиз. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 10 апреля, 2007 Поделиться Опубликовано 10 апреля, 2007 (изменено) Из тестбенча не сделаешь тебе нужно типа этого library IEEE; use ieee.std_logic_1164.all; entity TV_test is port( CLK:in std_logic; H:out std_logic ); end entity; architecture TV_arc of TV_test is signal Hcount : integer; begin process TV(CLK) begin if rising_edge(CLK) then Hcount<=Hcount+1; if Hcount<Value1 then H<='0'; else H<='1'; if Hcount>Value2 then Hcount<=0; H<='0'; end if; end if; end if; end process; end architecture; Здесь CLK вход тактовых импульсов, H выход. В результате должно получиться типа H<= __value1__/-----\__value1_ Период = value2 Это только набросок, а не рабочий код. Просто хотел показать в какую степь двигаться Изменено 10 апреля, 2007 пользователем ИнЖеНиГеР 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 10 апреля, 2007 Автор Поделиться Опубликовано 10 апреля, 2007 можешь сделать рабочий? просто очень нужно... хелпай плиз... 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 10 апреля, 2007 Поделиться Опубликовано 10 апреля, 2007 можешь сделать рабочий? просто очень нужно...хелпай плиз... У своих хлопот хватает. Могу только подсказать немного. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 11 апреля, 2007 Автор Поделиться Опубликовано 11 апреля, 2007 Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет. Заранее большое СПАСИБО! очень помог. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TV_test is port( CLK :in std_logic; H :out STD_LOGIC ); end TV_test; architecture TV_arc of TV_test is signal Hcount : STD_LOGIC_VECTOR (15 DOWNTO 0); begin process (CLK) begin IF (clk'EVENT AND clk = '1') THEN Hcount <= Hcount + 1; if (Hcount < "1111101000") then H <= '1'; else H <= '0'; if (Hcount > "10000110011") then H <= '1'; end if; end if; end if; end process; end TV_arc; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 11 апреля, 2007 Поделиться Опубликовано 11 апреля, 2007 Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет.Заранее большое СПАСИБО! очень помог. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TV_test is port( CLK :in std_logic; H :out STD_LOGIC ); end TV_test; architecture TV_arc of TV_test is signal Hcount : STD_LOGIC_VECTOR (15 DOWNTO 0); begin process (CLK) begin IF (clk'EVENT AND clk = '1') THEN Hcount <= Hcount + 1; if (Hcount < "1111101000") then H <= '1'; else H <= '0'; if (Hcount > "10000110011") then H <= '1'; end if; end if; end if; end process; end TV_arc; Здесь if (Hcount > "10000110011") then H <= '1'; end if; надо обнулить Hcount<="0000000000000000"; Тогда это будет крутиться пока не кончаться тактовые импульсы Затем вводишь ещё один сигнал который будешь инкрементировать каждый раз по окончанию периода. Как только переменная будет равна 5 выполняешь следующее действие. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 11 апреля, 2007 Автор Поделиться Опубликовано 11 апреля, 2007 дело в том что ТИ будут поступать постоянно... так что тут это не получиться. есть же вроде loop? только как им пользоваться??????? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ИнЖеНиГеР Опубликовано 11 апреля, 2007 Поделиться Опубликовано 11 апреля, 2007 дело в том что ТИ будут поступать постоянно... так что тут это не получиться.есть же вроде loop? только как им пользоваться??????? А ты переведи внешние ТИ во внутренние с битом управления. InternalCLK<=CLK and OE; OE-бит управления которым ты можешь включать или выключать ТИ. CLK - внешние ТИ InternalCLK - от них можешь тактироваться, пока тебе это нужно затем сбрасываешь OE в "0" и уже не тактируешься. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 12 апреля, 2007 Автор Поделиться Опубликовано 12 апреля, 2007 СДЕЛАЛ!!! только немного не так как ты показал. ВОТ исходник, только остаеться одна проблема. Как из этого сделать неостоновливающийся цикл. Т.е. как все таки сделать бесконечную петлю? library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity TV_test is port( CLK :in std_logic; SSP :out STD_LOGIC; CTLSig : buffer STD_LOGIC; EqSig : buffer STD_LOGIC; ESig : buffer STD_LOGIC ); end TV_test; architecture TV_arc of TV_test is signal LineCT : STD_LOGIC_VECTOR (8 DOWNTO 0); signal EqualizeCT : STD_LOGIC_VECTOR (8 DOWNTO 0); signal FieldCT : STD_LOGIC_VECTOR (9 DOWNTO 0); signal CTL : STD_LOGIC_VECTOR (2 DOWNTO 0); signal CTEq : STD_LOGIC_VECTOR (2 DOWNTO 0); signal CTF : STD_LOGIC_VECTOR (9 DOWNTO 0); begin process (CLK) begin IF (clk'EVENT AND clk = '1') THEN ------/////////////////////////////////////////////////////////-------------------- IF ( CTL < 101 and CTLSig = '0' ) then LineCT <= LineCT + 1; if (LineCT < "111001111") then SSP <= '1'; else SSP <= '0'; if (LineCT > "111110010") then LineCT <="000000000"; CTL <= CTL + 1; end if; end if; elsif (CTL = 101) then CTL <= "000"; CTLSig <= '1'; end if; ------/////////////////////////////////////////////////////////-------------------- IF ( CTLSig = '1' ) then if ( CTEq < "110" and EqSig = '0' ) then EqualizeCT <= EqualizeCT + 1; if ( (EqualizeCT < "1001010") and (CTEq < "101") ) then SSP <= '1'; else SSP <= '0'; if (EqualizeCT > "111110010") then EqualizeCT <="000000000"; CTEq <= CTEq + 1; end if; end if; elsif ( (CTEq = "110") and CTL = 000 ) then CTEq <= "000"; CTEq <= "000"; EqSig <= '1'; end if; end if; ------///////////////////////////////////////////////////////---------------------- IF ( EqSig = '1' ) then if ( (CTF < "1000000011") and ESig = '0' ) then FieldCT <= FieldCT + 1; if (FieldCT < "10010100") then SSP <= '1'; else SSP <= '0'; if (FieldCT > "1111101000") then FieldCT <="0000000000"; CTF <= CTF + 1; end if; end if; elsif ( (CTF = "1000000011") and CTL = 000 and CTEq = 000) then CTF <= "0000000000"; ESig <= '1'; end if; end if; ------///////////////////////////////////////////////////////---------------------- end if; end process; end TV_arc; 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
flexxx Опубликовано 13 апреля, 2007 Автор Поделиться Опубликовано 13 апреля, 2007 если кто знает, как после begin описать for... loop, вот такое выражение, т.е. что бы вся выше показанная прога работала неостонавливаясь? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.