flexxx

Генератор Ссп На Vhdl

19 сообщений в этой теме

flexxx    0

Помогите написать Генератор ССП на VHDL, что бы работал в двух режимах на 525 и 625.

Входы

-Clock (ТС)

-Slave (режим)

Выход

-ССП

Плиз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

:) Я не русский - что это такое ССП??? Стандартный Серийный Порт?

Если да - то надо уточнить если это нужно только для симулятора или будет зашиваться в какой то девайс? Ну и уточнить ещё пару вещей - частота и небольшую табличку режимов на входе.... Ну и если это только передачик или и приёмник? Вобщем уточнить..

Изменено пользователем wowa

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

ССП - это сигнал синхронизации приёмников . Расположен он в полном видеосигнале ниже уровня чёрного , и состоит из строчных синхроимпульсов , кадровых синхроимпульсов , и так называемых уравнивающих импульсов ( импульсов двойной строчной частоты до и после кадрового синхроимпульса ) .

В одном стандарте 525 строк , 60 полукадров в секунду , в другом - 625 строк , 50 полукадров в секунду . Частота строк у первого ( NTSC ) стандарта - 15750 герц , у второго ( PAL , SECAM ) - 15625 герц . Для различения стандартов проще использовать частоту кадров , так как она сильнее отличается . Выделить кадровый импульс , да измерить его частоту.

Тока надо все по умному, я пока долеко не спец в VHDL.

__||__||__||__||__...__||_||_||_||_|--------------|_||_||_||_||_||__||__||__||__||___

таково вида должен быть сигнал, но это воймет только тот кто в ТВ шарит, я не понимаю, вот и хочу спорсить у более продвинутых людях.

В приложенной pdf подробно описано про стандарты, и что представляет собой ССП, правда на английском, вот только я не могу разобраться.

ITU_R_BT470_6.pdf

Изменено пользователем flexxx

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
wowa    4

Ага!!! Ну тогда боюсь что и с моими знаниями VHDL тебе непомогу.. Знаю что в нём можно обрабатывать и аналоговые сигналы - да только как я понял всё это ещё только в симулятору.. Для нормальной ПЛИС тебе будет нужен цифровой сигнал.. А розделить синхро из видео будет я думаю проще специальными микрухами для теликов... Ну и потом попробовать его подать на входи анализировать... Я так понял что надо иметь что-то типа автоматического переключения стандартов в телеку?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

Жаль что не поможешь, может кто еще поможет???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Ну народ чем нибудь помогите....

Чем конкретно помочь по VHDL (написать весь код или что-то другое)???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо.

Хотя бы обьясните как ССП описать, наше и зарубежное.

Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально.

А ты можешь код написать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Ну весь код это ваще в идеале, но я понимаю что это не кому кроме меня и начальства моего не надо.

Хотя бы обьясните как ССП описать, наше и зарубежное.

Самая большая проблема с ССП, не как не пойму какие импульсы когда будут, порсто не где толком не написано нормально.

А ты можешь код написать?

У тебя же в пдфке всё расписано. Тебе под какой стандарт нужно делать? Вот почитай. Здесь по русски про формирование видеосигнала и про реализацию на МК. А потом пиши в чём возникает трудность при реализации этого на VHDL.

TV_signal.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

Я просто понятть не могу как ССП ревлизовать на 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;

касячный немного, но помоги из него сделать Генератор ССП....

Плиз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Из тестбенча не сделаешь :)

тебе нужно типа этого

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

Это только набросок, а не рабочий код. Просто хотел показать в какую степь двигаться :)

Изменено пользователем ИнЖеНиГеР

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

можешь сделать рабочий? просто очень нужно...

хелпай плиз...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
можешь сделать рабочий? просто очень нужно...

хелпай плиз...

У своих хлопот хватает. Могу только подсказать немного.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе :rolleyes: , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет.

Заранее большое СПАСИБО! очень помог.

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вот сделал как ты показал, СПАСИБО за идею! только вопрос как сделать петлю? т.е. что бы когда отработает 1000 тактов выдает 1, потом еще 75 выдает 0, и это надо сделать 5 раз подряд. ПОКАЖИ пожалуйста как это можно сделать. потом идет другой цикл, но это я разберусь, благодаря тебе :rolleyes: , там правда тоже цикл нужно сделать, ног если покажешь как делать цикл думаю дальше проблем не будет.

Заранее большое СПАСИБО! очень помог.

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 выполняешь следующее действие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

дело в том что ТИ будут поступать постоянно... так что тут это не получиться.

есть же вроде loop? только как им пользоваться???????

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
дело в том что ТИ будут поступать постоянно... так что тут это не получиться.

есть же вроде loop? только как им пользоваться???????

А ты переведи внешние ТИ во внутренние с битом управления.

InternalCLK<=CLK and OE;

OE-бит управления которым ты можешь включать или выключать ТИ.

CLK - внешние ТИ

InternalCLK - от них можешь тактироваться, пока тебе это нужно :) затем сбрасываешь OE в "0" и уже не тактируешься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

СДЕЛАЛ!!! только немного не так как ты показал.

ВОТ исходник, только остаеться одна проблема. Как из этого сделать неостоновливающийся цикл.

Т.е. как все таки сделать бесконечную петлю?

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;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
flexxx    0

если кто знает, как после begin описать for... loop, вот такое выражение, т.е. что бы вся выше показанная прога работала неостонавливаясь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сообщения

    • для иголок снаббера ,но все равно впритирку ,хотелось шоттки использовать ,они меньше греются ,но придется либо снижать напряжение либо обычные ультрафасты ставить  
    • Поступление.
      Файл с наличием обновлен.
      https://yadi.sk/d/Lhe1ng_WgaHXY ++++++++++++++++++++++++++++++++++++++++ Метчик м/р м3 х 0.5осн Р6АМ5 Владивосток  
      Метчик м/р м4 х 0.5 Йошкар-Ола тип2 
      Метчик м/р м6 х 0.75осн Р6М5 Владивосток тип2 
      Метчик м/р м8 х 1.0 Р18 Ижевск Н2 сквозной
      Метчик м/р м8 х 1.25осн Р6М5 Сесторецк  сквозной
      Метчик м/р м8 х 1.25осн Р6М5 Йошкар-Ола сквоз.тип2  
      Метчик м/р м8 х 1.25осн Р6М5К5 ТИЗ КИБ сквозной тип1
      Метчик м/р м10 х 1.5осн Р6М5К5 №1 из комп. тиз КИБ 
      Метчик м/р м10 х 0.5  р18 Тиз сквозной    
      Метчик м/р м10 х 0.75 р18 Тиз сквозной  
      ++++++++++++++++++++++++++++++++++++++++ Метчик м/р комплектный м3 х 0.5осн Р6АМ5 Владивосток
      Метчик м/р комплектный м7 х 1.0осн Р6М5 Владивосток
      Метчик м/р комплектный м8 х 0.75  HSS Львов 
      Метчик м/р комплектный м8 х 1.0  HSS Львов КИБ
      Метчик м/р комплектный м10 х 0.5 HSS Владивосток
      Метчик м/р комплектный м10 х 1.0 Р6М5 зн/к Владивосток
      Метчик м/р комплектный м10 х 1.25 Р6М5 зн/к Владивосток
      Метчик м/р комплектный м10 х 1.5осн Р6М5 КИБ зн/к Владивосток
      Метчик м/р комплектный м12 х 1.0 Р6М5 КИБ зн/к Владивосток
      Метчик м/р комплектный м12 х 1.5 Р6М5 н1 Владивосток левое вращение
      Метчик м/р комплектный м12 х 1.75осн Р6М5 Фрезер
      Метчик м/р комплектный м14 х 0.75 Р6М3 Львов
      Метчик м/р комплектный м14 х 0.75 Р18 Львов
      Метчик м/р комплектный м14 х 1.25 HSS Львов USSR КИБ
      Метчик м/р комплектный м18 х 1.0 HSS Львов USSR КИБ ++++++++++++++++++++++++++++++++++++++++ Плашка М3.5 х 0.35 ХВСГФ Сестрорецк ф20 
      Плашка М4 х 0.7 Р18 Сестрорецк ф20 
      Плашка М4.5 х 0.5 ХВСГФ Харьков ф20
      Плашка М5 х 0.5 ХВСГФ Харьков ф20  
      Плашка М5 х 0.8осн ХВСГФ Харьков ф20 левое вращение 
      Плашка М6 х 0.75 9хс оборонка ф20 
      Плашка М7 х 0.5 ХВСГФ Харьков ф25 
      Плашка М7 х 1.0осн ХВСГФ Харьков ф25
      Плашка М8 х 0.5 ХВСГФ Харьков ф25
      Плашка М8 х 1.0 Р12 Харьков ф25 
      Плашка М8 х 1.0 ХВСГФ Харьков ф25 
      Плашка М8 х 1.0 ХВСГФ Харьков ф25  левое вращение 
      Плашка М9 х 0.5 ХВСГФ Харьков ф25 
      Плашка М9 х 0.75 ХВСГФ Харьков ф25 
      Плашка м10 х 0.75 ХВСГФ Харьков ф30
      Плашка М10 х 1.0 ХВСГФ ТИЗ ф30 
      Плашка М11 х 1.0 ХВСГФ Харьков ф30х8  
      Плашка М11 х 1.0 ХВСГФ Харьков ф30х11 
      Плашка М11 х 1.5 ХВСГФ Харьков ф30 
      Плашка М12 х 1.0 ХВСГФ Харьков ф38
      Плашка М12 х 1.75 ХВСГФ Харьков ф30х11 
      Плашка М12 х 1.75 ХВСГФ Харьков ф38х14
      Плашка М12 х 1.75 ХВСГФ Сестрорецк ф38х14
      Плашка М12 х 1.75 ХВСГФ Львов ф38х14 
      Плашка М12 х 1.75 ХВСГФ Иркутск ф38х14
      Плашка М12 х 1.75 ХВСГФ ТИЗ ф38х14 
      Плашка М14 х 0.5 ХВСГФ Львов ф38 
      Плашка М14 х 0.75 ХВСГФ Сестрорецк ф38 
      Плашка М16 х 1.0 ХВСГФ Харьков ф38
      Плашка М16 х 1.5 ХВСГФ Иркутск ф45
      Плашка М18 х 1.5 ХВСГФ Сестрорецк ф45
      Плашка М18 х 2.0 ХВСГФ Сестрорецк ф45 6G
      Плашка М18 х 2.5 ХВСГФ Сестрорецк ф45
      Плашка М20 х 0.75 ХВСГФ ТИЗ ф45 
      Плашка М20 х 1.0 ХВСГФ ТИЗ ф45 
      Плашка М22 х 2.0 ХВСГФ Сестрорецк ф55 
      Плашка М22 х 2.5осн ХВСГФ Фрезер ф55 
      Плашка М27 х 2.0 ХВСГФ Фрезер ф65
      Плашка М30 х 1.0 ХВСГФ Харьков USSR ф65 
      Плашка М30 х 1.5 ХВСГФ Харьков ф65 
      Плашка М30 х 3.5осн ХВСГФ ИТЗ ф65  ++++++++++++++++++++++++++++++++++++++++
    • Всем спасибо, все понял, схема плохая. А что думаете по поводу этой схемы ? Стоит ее собирать для зарядного, или это уже раритет и такими схемами современные акуммуляторы плохо заряжать ?
    • Всем привет. Снял видео по изготовлению корпуса и штанги. Для многих это и сейчас проблема. Так что думаю будет полезно.  
    • 389 тошиба делала в соике по спецзаказу для маранца. Года 2 назад видел их в продаже у японского поставщика - может, неликвид. Потом убрали почему-то, 19000 шт в стоке было ЕМНИП.   Add___________ О! Вот они вроде: https://ru.yoycart.com/Product/549878706539/