Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trCommodoreCommodore DonanımFPGA Günlükleri - I, II, III ve IV (FPGA ile HDMI Görüntü Üretme) SON
Sayfa: 1 ... 12 13 [14] 15 16 ... 18   Aşağı git
Yazdır
Gönderen Konu: FPGA Günlükleri - I, II, III ve IV (FPGA ile HDMI Görüntü Üretme) SON  (Okunma Sayısı 174796 defa)
0 Üye ve 5 Ziyaretçi konuyu incelemekte.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #195 : Mart 09, 2016, 14:14:25 ÖS »

Tamam şimdi oldu. Adam PPU'yu çıkartıp yerne resmen FPGA ile yeni PPU yapmış sanki...

Ama bu bana bir cevap oldu. Orjinal PPU'nun CVBS çıkışı iyi değil. Aynı durum bu linkteki photolarda da görülüyor. Dikey çizgiler tırtıklı...

http://retrogamesandhardware.com/wp-content/uploads/2015/02/IMAG0054.jpg


« Son Düzenleme: Mart 09, 2016, 14:16:40 ÖS Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
Skate
Uzman
*****
Mesaj Sayısı: 1.479


A Sinner Scener


Üyelik Bilgileri WWW
« Yanıtla #196 : Mart 09, 2016, 17:26:08 ÖS »

NES'i ben hallediyorum, sen arada C64 audio synch'i hallet kardeşim. NES olayı bende, rahat olun.

...ve c64 hdmi hw'ını elde ettiği gibi ülkeyi terk edip kayıplara karışır.
Logged
EMREZ
Deneyimli
*****
Mesaj Sayısı: 1.940



Üyelik Bilgileri
« Yanıtla #197 : Mart 09, 2016, 17:28:50 ÖS »

c64 daha önemli, nes ci den çok commodore ci vardır aramızda.
Logged

this is amiga speaking.
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #198 : Mart 09, 2016, 18:36:31 ÖS »

Bu NES işi sıkıntılı. Ama sıkıntı devrede değil NES çıkışında. (Biliyorum C64'ün çıkışına da bok atmıştım, ama günümüzün digital sisemleri ancak bu kadar uyum sağlıyor diyelim.)

Neyse bugün tekrar SAA7113'e döndüm. Yapabildiğim kadar ayar yapmaya çalıştım. Hani tatmin edici diyebileceğim sonuçlar çıktı. Normal doğrudan bağlantı yerine bu şekilde bağlamayı kesinlikle tercih ederim.

Bu arada bugün üşenmedim DSLR makineyi getirdim. Şimdi acele ile bir kaç poz çektim. Nispeten daha iyi görüntüler. Yarın biraz daha ayar yapıp daha düzgün çekebileceğimi düşünüyorum.

Fotoları özellikle büyük olarak atıyorum. Imaj sitelerine atınca küçülüyor detaylar kayboluyor.




* ok1.jpg (507.4 KB, 1280x980 - Görüntüleme: 1560 kez.)

* ok2.jpg (539.01 KB, 1280x945 - Görüntüleme: 1542 kez.)

* ok3.jpg (336.25 KB, 1280x1023 - Görüntüleme: 1488 kez.)

* ok4.jpg (572.87 KB, 1280x973 - Görüntüleme: 1543 kez.)
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
LW3D
Yönetici
*****
Mesaj Sayısı: 11.418


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #199 : Mart 09, 2016, 18:49:25 ÖS »

bence olmuş...Bundan daha fazlasını yapman oldukça güç diye düşünüyorum...Aletin kendisi zaten düzgün değil. LCD'den direkt almak yerine bu daha iyi olacak seviye yeterlidir kanımca..

Sadece ilerde ürün olarak hayata geçeceğinde nasıl olacak? composite, svideo ya da RGB giriş seçenekleri mi olacak? ya da C64 için ayrı diğerleri için farklı bir yapıda mı olacak? ne düşünüyorsun? Misal diğer oyun konsolları ya da bilgisayarlarla da benzer sonuç almak herhalde mümkün olur...Atıyorum C64 yerine, Atari800XL'den...? yada Nintendo yerine SNES?
Logged

eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #200 : Mart 09, 2016, 20:35:51 ÖS »

Zaten şu sıra, bu güne kadar yapılanları teknik gözle özetleyen ve kaynak kodları da içeren bir yazı hazırlamaya çalışıyorum. Günlüklerin sonuna geldik. Bu iş oluyor, S-Video, CVBS, PAL, NTSC her durumda scandoubling methodu ile HDMI'a çıkış üretebiliyoruz. Ben bu iş olabilir mi adına yaptığım çalışmaları paylaştım, beklediğimden daha çabuk sonuçlandı ve olabildiğini gördük. Şimdi bir proje başlığı açıp, son ürünün nasıl olması gerektiğine karar verip bir ürün tasarlama aşamasına geçeceğim.

Bu sorduğun soruları daha detaylı irdeleriz, açıkçası ben de tam emin değilim. Aklımda fikirler var ama netleştiremedim bir türlü.

Öncelikle RGB zaten bu projede hiç olmayacak. RGB sampling için ya çok daha sofistike bir video decoder, yada yüksek hızlı 3 adet ADC gerekiyor. Bunlar hiç planladığın şeyler değil. Ama talep olursa belki ileride o iş için de bir donanım tasarlanabilir.

Şu anki hali ile teknik yeterlilik olarak, CVBS (Composite) ve S-Video girebiliyoruz. PAL ve NTSC (hatta SECAM, ama denenmedi.) decoding yapabiliyoruz.

PCB alanı olarak çok büyük bir devre olmayacak hatta nispeten küçük diyebiliriz. 5x10cm ölçülerini geçmek istemiyorum. Üzerinde 2 tane tos giriş barındırabilir. Bunlardan biri CVBS girişi olur, S-Video girilecek ise, biri Luma, biri chroma olabilir. Ayrıca yapabilirsek (daha fazla ilerleyemedim.) stereo ses girişi olur. Toplam 4 tos fiş etti.

Bir adet dişi HDMI çıkış. Ayrıca devrenin beslenmesi için bir power girişi lazım. 5-12V gibi bir adaptör bağlamak gerekecek.

Ben bu işi ilk başta C64 özelinde düşünüyordum. C64 Video soketinde, Luma, Chroma, Ses ve hatta neredeyse tüm modellerde 5v power çıkışı var. Yani aslında bu yukarıda saydığım girişler yerine bir adet kısa (10-20 cm) kablo ile doğrudan C64 Video çıkışına bağlanabilir.

Böylesi çok daha compact olsa da diğer sistemler için destek verilmemiş oluyor. Acaba iki versiyon mu olmalı? Yada ne bilim C64 Video soketinden 4 kablo çıkan ahtapot tarzı bir ara kablo yapıp, tos fişlere ve power jakına mı takmalı? Emin değilim. Fikirlerinizi paylaşırsanız mutlu olurum.
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
LW3D
Yönetici
*****
Mesaj Sayısı: 11.418


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #201 : Mart 09, 2016, 21:38:39 ÖS »

C64 için direkt video soketine giren(oturan) ve çıkış olarak dişi hdmi veren bir model bence güzel olur... Ama NES,SNES, Atari ya da ne bileyim Amstrad kullanıcıları bile böyle bir ürün kullanmak isteyebilir. Spectrumcuların neyine böyle bir ürün zaten Yukarda yazdıklarını bende düşünüp karar verememiştim
Logged

kirkoryan
Ziyaretçi
« Yanıtla #202 : Mart 09, 2016, 22:05:15 ÖS »

Spectrumcuların neyine böyle bir ürün zaten    
Kemal'e cevap hakkı doğmuş oldu
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #203 : Mart 09, 2016, 22:15:39 ÖS »

Ve günlükerin sonuna geldik. PAL yada NTSC sinyali FPGA ile scandoubling yaparak HDMI formatına çevirmek...

PAL yada NTSC, analog sinyali FPGA ile işleyebilmemiz için öncelikle dijital bir hale sokmamız gerekiyor. Bu noktada Video Decoder entegrelerinden yararlanıyoruz. Gelen analog sinyali, dijital ortamda bir çok farklı şekilde ifade etmek mümkün. Biz sektörde çok kabul görmüş bir format olan BT.601 formatını kullanacağız. Esasen bu formatı seçme sebebimiz, ulaşılabilir birçok video decoder chipinin bu formatta çıkış veriyor olması. Bu format hakkında detaylı bilgiye aşağıdaki linkten ulaşabilirsiniz.
 
https://en.wikipedia.org/wiki/Rec._601

Özetlemek gerekirse, bu format ile gelen sinyal ayrıştırıldıktan sonra Luma(Işık/Parlaklık) ve Chroma(Renk) bilgisi haline dönüştürülüyor ve dijital ortama atılıyor. PAL yada NTSC, her bir TV satırı (yada scanline) 720 adet ışık örneğinden ve 360 adet renk örneğinden oluşuyor. İnsan gözü ışık farklılıklarına daha duyarlı olduğu için, renk örneklemesinin az olması gözle görülür bir fark yaratmıyor.

Renk örneklemeleri tek bir byte halinde değil, Cb ve Cr olarak iki byte halinde aktarılıyor. Luma, ışık örnekleri ise Y olarak tek byte olarak aktarılıyor.

Video decoder entegremizden ard arda dijitie edilmiş olarak Cb, Y, Cr, Y şekline devam eden 4 bytelık paketler gelmekte. Bir satırda 720 Y bilgisi, 360 Cr Bilgisi, 360 Cb bilgisi geliyor. Ancak ekranda görünür 720 nokta olsa bile, bir alt satıra geçmeden önce, horizontal blanking adı verilen boşluklar bırakılıyor. Yani eski tip bir CRT monitor bir satırı çizmeyi bitirdikten sonra, bir alt satırın görünür başlangıç noktasına geçmesi için süre tanınıyor. Bu sebeple her bir satır için aslında 720 değil, 858 nokta gönderiliyor. Bu 858 değeri nerden geldi diyecek oluranız, google da 'EIA-CEA-861-B.pdf' dökümanını arayabilirsiniz. Döküman ücretli olduğundan direk link paylaşmıyorum ama kolaylıkla kopyası bulunabilir. Bu dökümanda her bir format için timing ve blanking değerleri detalı olarak açıklanmış durumda.

Bu dijitize edilmiş olan bytelar 27MHz lik bir clock eşliğinde geliyor. Yani decoderdan gelen veriyi 27 mega sample hızında işleyebilmemiz gerekiyor. Decoder chipinin bir özelliği ise, bu 27 MHz sinyali gelen video sinyalinden PLL ile elde ediyor olması. Yani eğer kaynak biraz yavaş yada hızlı bile olsa, gene de bir satırda gelen sample sayısı değişmiyor. Chipin üretmiş olduğu 27MHz clock biraz yavaşlamış yada hızlanmış oluyor sadece.

Artık FPGA kısmına geçebiliriz. FPGA'de hazırladığım kodları olabildiğince modüller halinde yazdım. Daha önce belirtmiştim, verilog tercih ediyorum. İlk modülümüz gelen dijital video sinyalinin, gene FPGA içerisinde oluşturduğumuz bir RAM'e atılmasını sağlıyor. Buna neden ihtiyacımız var? PAL yada NTSC gelen sinyalin her bir satırı toplam 64uS de geliyor. Ancak biz scandoubling yaptığımız için, kaynaktan 1 satır geldiğinde, HDMI'a iki satır göndermemiz gerekiyor. Bu sayede aynı zamanda interlaced gelen sinyali de progressive hale sokmuş olacağız. İhtiyacımız olan RAMin sadece 1 satırlık veri barındırması yeterli. Ben uygulamamda FPGA içerisinde iki adet RAM tanımladım. Bunlardan bri bir satıra ait olan Luma yani ışık değrlerini aklıyor. İkincisi ise Renk değerlerini saklıyor. Her bir RAM toplam 720 sample saklayacak.

Ancak burada bir sıkıntı çıkıyor karşımıza. Gelen stream içerisinde satır başı olduğunu nereden anlayacağız. Bu dijital formatı hazırlayanlar bu detaya şu şekilde bir çözüm getirmişler. Normalde görüntü taranırken kesinlikle 0 veya 255 değerleri üretilmiyor. Aktif video başlangıç ve bitiş anlarında, arka arkaya $FF, $00, $00 ve Senkron byteları gönderiliyor. Normalde bu değerler sinyal içerisinde bulunmadığından, bu bytelar arka arkaya görüldüğünde bir senkron işareti olduğu anlaşılıyor.

Senkron byte'inin içeriği değerlendirilerek, ekran başı, satır başı yada satır sonu işareti mi olduğu belirleniyor.

Bunu FPGA ile nasıl tespit ederiz?

Öncelikle son gelen 3 byte ve o anki byte'ın değerine ihtiyacımız var. Bu sebeple aşağıdaki gibi bir verilog kodu yazıyoruz.

Kod:
always @(posedge videoInClock)
begin
// HSync Detector
sync1<=sync2;
sync2<=sync3;
sync3<=videoInData;

// sync4 0b1FVH1234&nbsp; (1234Protection)
// H=0 Begin of Video
// H=1 End Of Video
if ( (sync1==8'b11111111) && (sync2==8'b00000000) && (sync3==8'b00000000) && ((videoInData&8'b10010000)==8'b10000000) )
begin
// Bu clock ile adigimiz son data icerisinde HSYNC isareti var
// Yani bir sonraki data Cb ile baslayacak, adres 0 olacak ...
regAddress<=10'b0;
regChromaSample<=1'b1;
regHSync<=1'b1;

// Vertical Sync Durumunu Kontrol Et ...
if ((videoInData&8'b00100000)==8'b00100000)
begin
regVSync<=1'b1;
end else
begin
regVSync<=1'b0;
end

end else
begin
if (regChromaSample==0) regAddress<=regAddress+1;
regChromaSample<=!regChromaSample;
regHSync<=1'b0;
end

end

Burada yaptığımız işlem, 3 bytelık bir shift register yaratmak ve son gelen 4 byte'ın senkron işareti taşıyıp taşımadığına bakmak. Eğer senkron işareti varsa, RAM için oluşturduğumuz adres değerini 0 yapıyoruz. Bu arada diğer modüllerde kullanılmak üzere bir senkron sinyali üretiyoruz. Eğer clock anında senkron işareti yakalanmamışsa, RAM için oluşturduğumuz adres değerini bir arttırıyoruz.

Ayrıca burada bir detay daha mevcut, regChromaSample<=!regChromaSample; satırı ile, gelen byte'ın Luma mı Chroma mı olduğuna karar veriyoruz. Sıralama&nbsp; Cb, Y, Cr, Y şeklinde olduğundan, bir Luma bir Chroma değeri geliyor olmalı...

İlk modülümüz bu kadar, yani gelen stream'e senkronize olup, Luma bytelarını Luma RAM'ine, Chroma bytelarını Chroma'a RAM'ine atıyor sadece.

İkinci modülümüz, RAM'lerden adığı veriyi HDMI formatın çeviren kısım. Daha önce yazdığım üzere, HDMI'da her bir pixel 10 bit olarak gönderiliyor. Demekki gelen 27MHz clock'un 10 katı hızında bir başka clock'a daha ihtiyacımız olacak. Bunu kullandığımız FPGA içerisinde 2 adet mevcut olan PLL'lerden birini kullanarak elde ediyoruz. Kabacak 27MHZ giriş clock'unu 270MHz e çeviriyor.

Ayrıca burada bir başka detay ise, elimizdeki dijital verinin Y,Cb,Cr şeklinde olması. Habuki HDMI'a RGB formatında göndereceğiz. Bunun için internette kolayca bulabileceğiniz katsayıları kullanarak bir YCbCr2RGB modülü yazıyoruz. Önce bu modülün koduna bakalım, sonra HDMI encoding işine geri dönelim.

Kod:
module YCbCr2RGB 
(
output reg [7:0]oRed,
output reg [7:0]oGreen,
output reg [7:0]oBlue,
input [7:0]iY,
input [7:0]iCb,
input [7:0]iCr,
input iCLK
);

// TEMP RGB 21Bit+Sign
wire signed [22:0] mR;
wire signed [22:0] mG;
wire signed [22:0] mB;

// -----------------------------------------------------------
// Bu magnitude toplamları maximum 21Bit+Sign olabilir !!!
// -----------------------------------------------------------
// Y*(4096) 8Bit+12Bit=20Bit+Sign
// 1.772*Cb*(4096) 8Bit+12Bit=20Bit+Sign
// -----------------------------------------------------------
// R = 1*Y + 1.402*(Cr-128)
// G = 1*Y - 0.344*(cb-128) - 0.714*(cR-128)
// B = 1*Y + 1.772*(Cb-128)
// -----------------------------------------------------------

assign mR =&nbsp; (iY*4096 + 4096*(iCr-128) + 1647*(iCr-128))>>12;
assign mG =&nbsp; (iY*4096 - 1409*(iCb-128) - 2925*(iCr-128))>>12;
assign mB =&nbsp; (iY*4096 + 4096*(iCb-128) + 3162*(iCb-128))>>12;

always @(posedge iCLK)
begin
oRed&nbsp; [7:0]<=(mR[10])?0:((mR>8'hff)?8'hFF:mR[7:0]);
oGreen[7:0]<=(mG[10])?0:((mG>8'hff)?8'hFF:mG[7:0]);
oBlue [7:0]<=(mB[10])?0:((mB>8'hff)?8'hFF:mB[7:0]);
end

endmodule

HDMI encoder kısmına geri dönecek olursak, verilog kodumuz aşağdaki gibi.

Kod:
// ----------------------------------------------------------------------------
// HDMI64 - C64 Video HDMI Converter (with Scanline Effect)
// [url]www.commodore.gen.tr[/url] - delimawi'2016
// ----------------------------------------------------------------------------
// Project based on HDMI Sample Code from fpga4fun.com
// ----------------------------------------------------------------------------

module HDMI_Encoder
(
input pixelClock, // 27MHz Incomming Video Pixel Clock
input pixelClockX10, // 270MHz HDMI Bit Clock (pixelClockx10)
input extHSync,
input extVSync,

output [2:0] TMDSp, TMDSn, // HDMI Output Pins
output TMDSp_clock, TMDSn_clock,

// FIFO Output
output [9:0] PixelAddress,
input&nbsp; [7:0] PixelLuma,
input&nbsp; [7:0] PixelChroma,
);

// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------

`define DISPLAY_WIDTH 720
`define DISPLAY_HEIGHT 480
`define FULL_WIDTH 858
`define FULL_HEIGHT 525 //525
`define H_FRONT_PORCH 16
`define H_SYNC 62
`define V_FRONT_PORCH 9
`define V_SYNC 6

`define H_SYNC_BEGIN `DISPLAY_WIDTH+`H_FRONT_PORCH
`define H_SYNC_END `H_SYNC_BEGIN+`H_SYNC
`define V_SYNC_BEGIN `DISPLAY_HEIGHT+`V_FRONT_PORCH
`define V_SYNC_END `V_SYNC_BEGIN+`V_SYNC

reg [9:0] regXPos, regYPos; // 10 Bit X,Y Counters (0-1023)
reg regHSync,regVSync,regDrawing; // HDMI Synch Pulses

reg [7:0] regRed, regBlue, regGreen;

assign PixelAddress=regXPos;

always @(posedge pixelClock)
begin
regDrawing<=(regXPos<`DISPLAY_WIDTH)&&(regYPos<`DISPLAY_HEIGHT);
regHSync <= (regXPos>=`H_SYNC_BEGIN)&&(regXPos<`H_SYNC_END);
regVSync <= (regYPos>=`V_SYNC_BEGIN) && (regYPos<`V_SYNC_END);
end

reg regExtHSync, regExtVSync;


always @(posedge pixelClock)
begin
regExtHSync<=extHSync;
regExtVSync<=extVSync;

// Dusey Senkronu yakaladığın anda degerleri sıfırla
if ((extVSync==0) && (regExtVSync==1))
begin
regXPos<=0;
regYPos<=0;
end else
begin
if (regXPos==(`FULL_WIDTH-1))
begin
if (regYPos==(`FULL_HEIGHT-1))
begin
regYPos<=0;
end else
begin
regYPos<=regYPos+1'b1;
end
regXPos<=0;
end else
begin
regXPos<=regXPos+1'b1;
end
end

end

// ----------------------------------------------------------------------------
// Scanline Effect & YCbCr > RGB
// ----------------------------------------------------------------------------

reg [7:0] regCr;
reg [7:0] regCb;

wire [7:0] regInpRed, regInpBlue, regInpGreen;

YCbCr2RGB Convert( .oRed(regInpRed), .oGreen(regInpBlue), .oBlue(regInpGreen), .iY(PixelLuma[7:0]), .iCb(regCb), .iCr(regCr), .iCLK(pixelClock));

always @(posedge pixelClock)
begin
if (regXPos[0]==1)
begin
regCr<=PixelChroma;
end else
begin
regCb<=PixelChroma;
end

if (regYPos[0]==1)
begin
regRed <= (regInpRed>>1);
regGreen <= (regInpGreen>>1);
regBlue <= (regInpBlue>>1);
end
else
begin
regRed <= regInpRed;
regGreen <= regInpGreen;
regBlue <= regInpBlue;
end

end


// ----------------------------------------------------------------------------
// Generate TDMS Encoded 10 Bit Signals
// ----------------------------------------------------------------------------

wire [9:0] TMDS_red;
wire [9:0] TMDS_green;
wire [9:0] TMDS_blue;

TMDS_encoder encode_R( .clk(pixelClock), .VD(regRed&nbsp; ), .CD(2'b00)&nbsp; &nbsp; &nbsp; &nbsp; , .VDE(regDrawing), .TMDS(TMDS_red)&nbsp; &nbsp; );
TMDS_encoder encode_G( .clk(pixelClock), .VD(regGreen), .CD(2'b00)&nbsp; &nbsp; &nbsp; &nbsp; , .VDE(regDrawing), .TMDS(TMDS_green)&nbsp; );
TMDS_encoder encode_B( .clk(pixelClock), .VD(regBlue ), .CD({regVSync,regHSync}), .VDE(regDrawing), .TMDS(TMDS_blue)&nbsp; &nbsp;);

// ----------------------------------------------------------------------------
// Generate TDMS Clock
// ----------------------------------------------------------------------------

wire clk_TMDS=pixelClockX10;

// ----------------------------------------------------------------------------
// Generate TDMS Signals (Serialise)
// ----------------------------------------------------------------------------

reg [3:0] TMDS_mod10=0;&nbsp; // modulus 10 counter
reg [9:0] TMDS_shift_red=0; // 10 Bit Shift Registers
reg [9:0] TMDS_shift_green=0; // 10 Bit Shift Registers
reg [9:0] TMDS_shift_blue=0; // 10 Bit Shift Registers

reg TMDS_shift_load=0;

always @(posedge clk_TMDS) TMDS_shift_load <= (TMDS_mod10==4'd9);

always @(posedge clk_TMDS)
begin
TMDS_shift_red&nbsp; <= TMDS_shift_load ? TMDS_red&nbsp; &nbsp;: TMDS_shift_red&nbsp; [9:1];
TMDS_shift_green <= TMDS_shift_load ? TMDS_green : TMDS_shift_green[9:1];
TMDS_shift_blue <= TMDS_shift_load ? TMDS_blue&nbsp; : TMDS_shift_blue [9:1];

TMDS_mod10 <= (TMDS_mod10==4'd9) ? 4'd0 : TMDS_mod10+4'd1;
end

assign TMDSp[2]&nbsp; &nbsp; = TMDS_shift_red[0]&nbsp; ;
assign TMDSp[1]&nbsp; &nbsp; = TMDS_shift_green[0];
assign TMDSp[0]&nbsp; &nbsp; = TMDS_shift_blue[0] ;
assign TMDSp_clock = pixelClock;

assign TMDSn[2] = !TMDSp[2];
assign TMDSn[1] = !TMDSp[1];
assign TMDSn[0] = !TMDSp[0];
assign TMDSn_clock = !TMDSp_clock;

endmodule


Buradaki timing değerleri en son NES üzerinde çalıştığımdan NTSC için. PAL için olması gereken değerler aşağıda:

Kod:
// ----------------------------------------------
// Timing 720x576 @50 Hz
// pixelClock 30MHz
// ----------------------------------------------
`define DISPLAY_WIDTH 720
`define DISPLAY_HEIGHT 576
`define FULL_WIDTH 864
`define FULL_HEIGHT 624

`define H_FRONT_PORCH 12
`define H_SYNC 64
 
`define V_FRONT_PORCH 5
`define V_SYNC 5


Son olarak FPGA top Level Design Şemamız aşağıda. (Bu modüllerin birbirlerine nasıl bağlandığı kısmı)



Büyük hali: http://i67.tinypic.com/34g4pb4.jpg

Projenin şu anki kaynak kodlarını da üzerinde çalışmak isteyenler için olduğu gibi ekliyorum. Kaynak kodlar ile ilgili olarak hiçbir garanti vermiyorum. Düzenleme yapmadım. Üzerinde çalıştığım son kodu olduğu gibi paylaşıyorum. Kodlar daha önce de belirttiğim gibi başka sitelerden alınmış parçalar bulundurmaktadır. (fgpa4fun)

Bundan sonra yapılacaklar:
- HDMI Ses encoding
- FPGA tarafındaki parametrelerin PIC'ile kontrol edilebilmesi için, FPGA I2C Slave fonksiyonu
- FPGA tarafında HDMI OSD çalışması
- FPGA 4-Bit çalışması

Projenin devamı için ilerleyen günlerde teknik olmayan ayrı bir proje başlığı açacağım.

Herkese iyi akşamlar...

* AlteraPLL.v.txt (16.12 KB - Yükleme: 558 kez.)
* HDMIEncoder.v.txt (10.27 KB - Yükleme: 660 kez.)
* VideoDecoder.v.txt (1.99 KB - Yükleme: 558 kez.)
« Son Düzenleme: Mart 09, 2016, 22:23:05 ÖS Gönderen: delimawi » Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
ibo1973
Uzman
*****
Mesaj Sayısı: 2.499


Üyelik Bilgileri
« Yanıtla #204 : Mart 09, 2016, 22:39:27 ÖS »

eline sağlık .
Logged
LW3D
Yönetici
*****
Mesaj Sayısı: 11.418


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #205 : Mart 09, 2016, 23:03:48 ÖS »

Çoğunu çok anlamasamda okudum Vay be...Bir proje daha hayata geçiyor...Maşallah..çok güzel...
Logged

hades
Üye
****
Mesaj Sayısı: 392



Üyelik Bilgileri
« Yanıtla #206 : Mart 09, 2016, 23:08:31 ÖS »

10 tane beynim olsa ve hepsi tam kapasite çalışşa yinede böyle bir proje üretemezdim. 2 haftada proje bitti. Süper bir iş çıkardın Delimawi.
Logged
WildLord
Deneyimli
*****
Mesaj Sayısı: 758



Üyelik Bilgileri
« Yanıtla #207 : Mart 09, 2016, 23:16:36 ÖS »

Ellerinize sağlık delimawi, teknik dili benim için ağır olsada konuyu başından beri keyifle takip ediyorum. Değerli vaktinizi ayırıp yapması ayrı sıkıntı, izahı ayrı sıkıntı olan bir projeyi paylaşırken, konuya hakim olan arkadaşlar da konuyu daha da zenginleştiriyorlar. Projenin ürün haline gelmesini ümit ediyorum. Bir istek listesi oluşturulursa bence iyi olur.
Logged
eins
Uzman
*****
Mesaj Sayısı: 1.816


A.K.A. deliMawi


Üyelik Bilgileri
« Yanıtla #208 : Mart 09, 2016, 23:35:25 ÖS »

10 tane beynim olsa ve hepsi tam kapasite çalışşa yinede böyle bir proje üretemezdim. 2 haftada proje bitti. Süper bir iş çıkardın Delimawi.

Abi teşekkür ederim ama abartılacak hiç birşey yok. Sadece yazınca sanki roket mühendisliği gibi oluyor. (Zaten onun için teknik ksımları yazmayı çok sevmiyorum.) Ofise uğradığında 15-20 dk da anlatırım sana yüz yüze, göreceksin ki çok basit... Bu arada Z80 kartuşunu bekliyoruz sabırsızlıkla.

Ellerinize sağlık delimawi, teknik dili benim için ağır olsada konuyu başından beri keyifle takip ediyorum. Değerli vaktinizi ayırıp yapması ayrı sıkıntı, izahı ayrı sıkıntı olan bir projeyi paylaşırken, konuya hakim olan arkadaşlar da konuyu daha da zenginleştiriyorlar. Projenin ürün haline gelmesini ümit ediyorum. Bir istek listesi oluşturulursa bence iyi olur.

Sanırım bu konu bir ürün haline gelecek. Destekleriniz için teşekkür ederim.
Teknik kısmı çok zor olmasada dediğiniz gibi izahı hakikaten zor. Açıkçası ben bile yazdığım bir kodu aradan birkaç ay geçtikten sonra anlamakta zorluk çekiyorken, konu üzerinde hiç çalışması olmayan birinin sadece okuyarak anlaması gerçekten zor. En azından benim için öyle. Nette bulduğum herhangi bir kodu yada dökümanı imkanı yok okuyarak anlayıp içime sindiremiyorum. (Öğrenemiyorum.) Mutlaka başına geçip deneyip, değiştirip, duvara toslayıp bir şekilde haşır neşir olup içime sindirmem gerekiyor. Zaten başka türlü öğrenilmiyor...

Çoğunu çok anlamasamda okudum Vay be...Bir proje daha hayata geçiyor...Maşallah..çok güzel...

Eksik olma, desteklerin sayesinde. Bu ortmı sunduğun için ben teşekkür ederim.

eline sağlık .

Teşekkür ederim...
Logged

Doberman ♦ megaOne ♦ HDMI-64 ♦ HDMI-520 ♦ NewSchool
joker_
Deneyimli
*****
Mesaj Sayısı: 2.120



Üyelik Bilgileri
« Yanıtla #209 : Mart 10, 2016, 07:50:26 ÖÖ »

Spectrumcuların neyine böyle bir ürün zaten   

Kahkaha Spectrum candır.
Logged
Sayfa: 1 ... 12 13 [14] 15 16 ... 18   Yukarı git
Yazdır
Gitmek istediğiniz yer: