Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Цифровой записывающий пробник и индикацией на VGA

  1. #1
    Guru Аватар для zst
    Регистрация
    11.04.2009
    Адрес
    Челябинск
    Сообщений
    2,753
    Благодарностей: 814
    Записей в дневнике
    15
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Цифровой записывающий пробник c индикацией на VGA

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

    Как известно, видеоконвертер VGA&PAL имеет быструю память размером 512 килобайтов и может записывать целый кадр со Спектрума, а потом выводить на VGA. Поэтому, очевидно, его можно использовать для записи одновременно до четырех цифровых сигналов с частотой до 7 МГц.

    Сигналы:
    Для записываемых сигналов использовать входы RGBI.
    Тактовая частота для работы платы VGA&PAL будет браться со Спектрума.
    Еще нужна будет кнопка для запуска процесса записи. Для этого можно подключить кнопку к гребенкам для джамперов.

    Cпособ индикации.
    Предлагается каждый канал отображать разными цветами: красный (вход R), зеленый (вход G), голубой (вход B) и желтый (вход I) на черном фоне. Логический ноль отображать точкой, логическую единицу - вертикальной линией. Такой способ отображения легко реализовать на ПЛИС.

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

    Вот такое краткое описание проекта.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    ZEK
    Гость

    По умолчанию

    Триггеры для запуска записи надо по любому.... (ну или отсчета начальной точки показа)
    1. для проверки на иголки
    2. для редких сигналов
    Последний раз редактировалось ZEK; 07.12.2010 в 11:39.

  4. #3
    Guru Аватар для zst
    Регистрация
    11.04.2009
    Адрес
    Челябинск
    Сообщений
    2,753
    Благодарностей: 814
    Записей в дневнике
    15
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    Триггеры для запуска записи надо по любому.... (ну или отсчета начальной точки показа)
    1. для проверки на иголки
    2. для редких сигналов
    Для начала предполагается режим просто записи с тактированием сигналов с частотой 14 МГц. Это уже позволит, например, посмотреть период и длительность строчного синхроимпульса. Для этого нужно записывать сразу несколько сигналов. Один из которых будет контрольным с известными параметрами.

    Запуск записи можно начинать после нажатия кнопки, и если установлен один из джамперов, то после фронта одного из сигналов, которые подавать на входы KSI и SSI.

    Для начала надо научиться отображать содержимое ОЗУ платы VGA&PAL на экран монитора в нужном виде. За основу можно взять одну из версий существующих прошивок. Или, кому проще, на основе своих наработок.

    Доработка железа пока не нужна, только замена прошивки.

    Для дальнейшего анализа плохих сигналов можно осуществлять запись с измерением длительности 0 и длительности 1. Выводить результат измерения в двоичном виде - на большее ПЛИС не потянет. Но это уже потом.

  5. #4
    Activist
    Регистрация
    01.08.2006
    Адрес
    Волгоград
    Сообщений
    304
    Благодарностей: 130
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Идея действительно классная, прям курсач свой вспомнил на 4 курсе. Вопрос только один Z-состояние никак отслеживать не думаете?

  6. #5
    ZEK
    Гость

    По умолчанию

    Это не крусач, это демомейкинг
    вроде как всунутся в 3128 не просто

  7. #6
    Veteran Аватар для KALDYH
    Регистрация
    04.02.2008
    Адрес
    Кемерово
    Сообщений
    1,587
    Благодарностей: 564
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Я для отладки пользуюсь практически тем же методом. Цепляю массу и синхронизацию от телевизора к компьютеру, а RGB входами тыкаю в плату. Соответственно, на экране наблюдается некий рисунок, например полосы или шахматка, который можно интерпретировать. Если на данный участок схемы не приходят сигналы с процессора, то картинка будет статичной, иначе - движется по экрану в зависимости от выполняемого кода.
    Отошёл от дел.

  8. #7
    Guru Аватар для zst
    Регистрация
    11.04.2009
    Адрес
    Челябинск
    Сообщений
    2,753
    Благодарностей: 814
    Записей в дневнике
    15
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Syntal Посмотреть сообщение
    Идея действительно классная, прям курсач свой вспомнил на 4 курсе. Вопрос только один Z-состояние никак отслеживать не думаете?
    На плате VGA&PAL входы RGBI подтянуты резисторами 10к к земле.

    Пока программа минимум - увидеть на экране монитора форму (длительность нуля и единицы) четырех сигналов со счетчиков Ленинграда или другого компа на мелкой логике.

  9. #8
    ZEK
    Гость

    По умолчанию

    78% заняло 3128 без привязки пинов
    осталось сделать скролинг маштаб и тригеры
    скролинг и триггеры просто, код с расчетом на них

    Код:
    module LA(
    	input	wire		CLK14,
    	
    	// Video in
    	input	wire		IR,
    	input	wire		IG,
    	input	wire		IB,
    	input	wire		II,
    	input	wire		ISSI,
    	input	wire		IKSI,
    	
    	input	wire[3:0]	SW,
    	
    	//Video out
    	output	reg			QR,
    	output	reg			QB,
    	output	reg			QG,
    	output	reg			QI,
    	output	reg			KSI,
    	output	reg			SSI,
    	
    	// RAM
    	output	reg [17:0]	RAM_AQ,
    	inout	wire[15:0]	RAM_DB,
    	output	wire		RAM_WE,
    	output	reg			RAM_OE,
    	output	wire		RAM_UE,
    	output	wire		RAM_LE
    	);
    	
    
    parameter	H_SYNC_CYC	=	40;
    parameter	H_SYNC_BACK	=	20;
    parameter	H_SYNC_ACT	=	384;
    parameter	H_SYNC_FRONT=	4;
    parameter	H_SYNC_TOTAL=	447;
    
    parameter	V_SYNC_CYC	=	2;
    parameter	V_SYNC_BACK	=	46;
    parameter	V_SYNC_ACT	=	576;
    parameter	V_SYNC_FRONT=	15;
    parameter	V_SYNC_TOTAL=	640;
    	
    reg 		HBLANK, VBLANK;
    reg [9:0]	VCNT, HCNT;
    	
    reg [17:0]	RAMCNT;
    reg	[7:0]	RAM_DQ;
    reg [7:0]	SHIFT;
    
    reg			WR;
    assign		RAM_WE = WR | CLK14;
    assign		RAM_UE = 1'b0;
    assign		RAM_LE = 1'b0;
    
    assign		RAM_DB[7:0] = (!RAM_WE) ? RAM_DQ : 8'hZZ;
    
    reg [3:0]	RDMUX;
    reg [1:0]	KEY, VAL_R, VAL_G, VAL_B, VAL_I, SHIFT_L, SHIFT_R;
    	
    always@(posedge CLK14)
    begin
    	RDMUX = (HCNT[0]) ? RAM_DB[7:4] : RAM_DB[3:0];
    	
    	KEY = {SW[0], KEY[1]};
    	VAL_R = { RDMUX[3], VAL_R[1] };
    	VAL_G = { RDMUX[2], VAL_G[1] };
    	VAL_B = { RDMUX[1], VAL_B[1] };
    	VAL_I = { RDMUX[0], VAL_I[1] };
    	
    	SHIFT = {SHIFT[3:0], IR,IG,IB,II};
    	
    	if (KEY[0] != KEY[1])
    	begin
    		RAMCNT = 0;
    		WR = 1'b1;
    		
    		if (!KEY[1])
    			RAM_OE = 1'b1; // write
    		else
    			RAM_OE = 1'b0; // read
    	end
    	
    	// mem unit
    	if (RAM_OE)
    	begin
    		if (!HCNT[0])
    		begin
    			RAM_AQ = RAMCNT;
    			RAM_DQ = SHIFT;
    		end
    		else
    			RAMCNT = !RAMCNT[17] ? RAMCNT + 1 : RAMCNT;
    		
    		WR = HCNT[0];
    	end
    	else
    	begin
    		
    	end
    	
    
    	HBLANK <= (HCNT <= H_SYNC_CYC+ H_SYNC_BACK || HCNT >= H_SYNC_TOTAL - H_SYNC_FRONT);
    
    	//	H_Sync Counter
    	if( HCNT < H_SYNC_TOTAL )
    		HCNT	<=	HCNT+1;
    	else
    		HCNT	<=	0;
    		//	H_Sync Generator
    	if( HCNT < H_SYNC_CYC )
    		SSI	<=	0;
    	else
    	begin
    		SSI	<=	1;
    		if (!RAM_OE)
    			RAM_AQ[17:0] = {RAMCNT[10:0], HCNT[8:1]};
    	end
    		
    	if (BLANK)
    		{QR, QG, QB, QI} = 4'h0;
    	else
    	begin
    		QR = PEN_R | PEN_I;
    		QG = PEN_G | PEN_I;
    		QB = PEN_B | PEN_I;
    		QI = (RAY_R | RAY_G | RAY_B | RAY_I) & HCNT[2:0] == 0 & VCNT[3:0] == 0;
    	end
    	
    end
    
    wire	LH = VCNT[5:2] == 4'h0;
    wire	LL = VCNT[5:2] == 4'hF;
    
    wire	RAY_R = VCNT[9:6] == 4'h1;
    wire	RAY_G = VCNT[9:6] == 4'h3;
    wire	RAY_B = VCNT[9:6] == 4'h5;
    wire	RAY_I = VCNT[9:6] == 4'h7;
    
    wire	PEN_R = RAY_R & (VAL_R[0]==VAL_R[1] ? (VAL_R[1] ? LH : LL) : 1'b1); 
    wire	PEN_G = RAY_G & (VAL_G[0]==VAL_G[1] ? (VAL_G[1] ? LH : LL) : 1'b1); 
    wire	PEN_B = RAY_B & (VAL_B[0]==VAL_B[1] ? (VAL_B[1] ? LH : LL) : 1'b1); 
    wire	PEN_I = RAY_I & (VAL_I[0]==VAL_I[1] ? (VAL_I[1] ? LH : LL) : 1'b1); 
    
    
    always@(posedge CLK14)
    begin
    	if(HCNT==0)
    	begin
    		//	V_Sync Counter
    		if( VCNT < V_SYNC_TOTAL )
    			VCNT <=	VCNT+1;
    		else
    			VCNT	<=	0;
    			//	V_Sync Generator
    		if(	VCNT < V_SYNC_CYC )
    		begin
    			KSI	<=	0;
    			SHIFT_L = {SW[3], SHIFT_L[1]};
    			SHIFT_R = {SW[2], SHIFT_R[1]};
    		end
    		else
    			KSI	<=	1;
    	end 
    	
    	VBLANK <= (VCNT < V_SYNC_BACK || VCNT >= V_SYNC_BACK + V_SYNC_ACT);
    end
    
    
    assign BLANK = VBLANK | HBLANK;
    
    endmodule
    Последний раз редактировалось ZEK; 22.02.2014 в 19:03.

  10. Эти 3 пользователя(ей) поблагодарили ZEK за это полезное сообщение:
    Alex_NEMO (08.12.2010), Mad Killer/PG (23.12.2010), piroxilin (08.12.2010)

  11. #9
    ZEK
    Гость

    По умолчанию

    Тайминги надо наверное потестить, там и 40гц кадровой могло получится, у меня тестовый монитор такой плохой что хавает все что не подаш

    Сейчас пишет 128кил данных, в одном байте 2выборки на 14МГц.

  12. #10
    Guru Аватар для zst
    Регистрация
    11.04.2009
    Адрес
    Челябинск
    Сообщений
    2,753
    Благодарностей: 814
    Записей в дневнике
    15
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    Тайминги надо наверное потестить, там и 40гц кадровой могло получится, у меня тестовый монитор такой плохой что хавает все что не подаш

    Сейчас пишет 128кил данных, в одном байте 2выборки на 14МГц.
    Это пока только имитация записи?
    По горизонтали на мониторе сколько выборок влезает?
    Частоту лучше 60 Гц делать, чтобы на любом мониторе показывало.

    Круто получилось, как на настоящем осциллографе. Не думал, что на ПЛИС незаполненные осциллограммы получатся.
    То есть я думал, что возможно единицу только столбиком отобразить.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Speccy и логический пробник
    от Petr0v в разделе Для начинающих
    Ответов: 18
    Последнее: 31.12.2009, 09:50
  2. Цифровой музыкальный редактор 3DAC
    от vBv в разделе Музыка
    Ответов: 7
    Последнее: 11.03.2008, 20:56
  3. Ответов: 4
    Последнее: 12.03.2007, 22:22

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •