XSMB-L1 Works !

XCore Project reviews, ideas, videos and proposals.
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

XSMB-L1 Works !

Postby ale500 » Mon Aug 08, 2011 7:29 pm

Hallo,

if you haven't seen my XSMB project here is the page https://www.xcore.com/projects/xsmb-l1

Today I was able to finally connect it together with the XTAG to the computer and it was recognized ! :)... Not bad !. I hope everything I put in there works as well !. Here are the pics...
Attachments
SANY3014r.jpg
Mobo + Stamp
(825.5 KiB) Not downloaded yet
SANY3014r.jpg
Mobo + Stamp
(825.5 KiB) Not downloaded yet
SANY2857r.jpg
Stamp
(575.46 KiB) Not downloaded yet
SANY2857r.jpg
Stamp
(575.46 KiB) Not downloaded yet
SANY2855.jpg
Stamp
(403.18 KiB) Not downloaded yet
SANY2855.jpg
Stamp
(403.18 KiB) Not downloaded yet
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 7:29 pm

And here the panel (Only 3 attachments per post...)

Edit: I re-uploaded the design files, the old ones were incomplete. Please re-download if you have the old ones. The panel-xm.brd contains a panelized version of two MB and two stamps. YOu have to cut them yourself because the sizes do not fit for a V-grooved version :(... there is always room for improvement!
Attachments
SANY2847r.jpg
(314.03 KiB) Not downloaded yet
SANY2847r.jpg
(314.03 KiB) Not downloaded yet
Last edited by ale500 on Mon Aug 08, 2011 7:41 pm, edited 1 time in total.
User avatar
Bianco
XCore Expert
Posts: 737
Joined: Thu Dec 10, 2009 6:56 pm
Contact:

Postby Bianco » Mon Aug 08, 2011 7:41 pm

So is the VGA tied to the XMOS or FPGA?
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 7:47 pm

The VGA Port is tied to the FPGA, the FPGA has extra 512k SRAM and 4 pins (2 bit Xlink) to the L1. There is on the left size a connector for a TFT like the one on the picture (powered by a XC-1 so far but the software should run on the L1 without changes... ).

The display has a 6 bit interface (24 bits but cut down for memory reasons) and needs vsync and hsync besides, clock (10 MHz in this case) and display on/of, data enable and backlight. I'm using text mode because I wanted to use the external SRAM in the L1 for the display... time for more soldering ! I can post the code, it is very straightforward, clocked/buffered ports, clock output and a bit of magic ;-)
Attachments
SANY3015r.jpg
(298.02 KiB) Not downloaded yet
SANY3015r.jpg
(298.02 KiB) Not downloaded yet
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 7:57 pm

I have written several drivers for VGA output for the G4... they were available on the old xlinkers site... I can re-post them, both graphics and text based (there was a circuit too)...
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 8:14 pm

Here is the TFT code so far...

Code: Select all

/*
 * tftmain.xc
 *
 *  Created on: 06.01.2011
 *      Author: pacito
 */
#include <xs1.h>
#include <platform.h>

#define YLINES (272/8)
#define XCHARS (480/8)
on stdcore[0]: out port pDON = XS1_PORT_1O; // X0D38
on stdcore[0]: out port pVSYNC = XS1_PORT_1N; // X0D37
on stdcore[0]: out port pHSYNC = XS1_PORT_1M; // X0D36
on stdcore[0]: out port pBL = XS1_PORT_1P;  // X0D39
on stdcore[0]: out port pPCLK = XS1_PORT_1D; // X0D11
on stdcore[0]: out buffered port:32 pRGB = XS1_PORT_8C;
on stdcore[0]: clock clk = XS1_CLKBLK_1;

on stdcore[0]: unsigned char textbuffer[XCHARS*YLINES*2] =
                { 0x41, 9, 0x42, 9, 0x43, 5, 0x44, 5 };

extern unsigned char font[]; // 8x8 font
extern unsigned int translate[]; // nibble to word translation table

#pragma unsafe arrays

void TFTRefresh( void )
{
   unsigned int x, y, time = 0, yptr;
   unsigned int c, rgb;
   unsigned int textptr, fontptr, ones = 0x01010101;
   unsigned char color;
   set_clock_div(clk, 5); // div 5*2 = 10 MHz
   configure_out_port_no_ready(pHSYNC, clk, 0);
   configure_out_port_no_ready(pVSYNC, clk, 0);
   configure_out_port_no_ready(pRGB, clk, 0);
   configure_port_clock_output(pPCLK, clk);
   start_clock(clk);
   pBL <: 1;
   pVSYNC <: 1;
   pHSYNC <: 1;
   pDON <: 0;
   pRGB <: 0;
   // clock
   while (1) {
      // veritcal back porch, four empty lines
      for (y = 0; y < 4; y++) {
         time += 490; pHSYNC @ time <: 0;
         time += 4;   pHSYNC @ time <: 1;
      }
      textptr = 0;
      // visible
      yptr = 0;
      for (y = 0; y < 272; y++) {
         // we need to wait 8 clocks for back porch
         time += 4; pRGB @ time <: 0; // 8 clocks passed already
         fontptr = textbuffer[textptr++] << 3; // pointer to the font
         color = textbuffer[textptr++]; // foreground color
         for (x = 0; x < XCHARS; x++) {
            rgb = ones * color;
            c = font[fontptr+yptr];
            pRGB <: (unsigned int) (translate[c>>4] & rgb) | ones;
            fontptr = textbuffer[textptr++] << 3; // pointer to the font
            color = textbuffer[textptr++]; // foreground color
            pRGB <: (unsigned int) (translate[c&15] & rgb) | ones;
         }
         yptr += 1;
         if (yptr == 8)
         {
            textptr -= 2;
            yptr = 0;
         }
         else
            textptr -= 2*XCHARS+2;
         pRGB <: 0;
         time += 486; pHSYNC @ time <: 0;
         time += 4;   pHSYNC @ time <: 1;
      }
      // front porch
      for (y = 0; y < 8; y++) {
         time += 490; pHSYNC @ time <: 0;
         time += 4;   pHSYNC @ time <: 1;
      }
      pVSYNC <: 0; // VSYNC
      for (y = 0; y < 8; y++) {
         time += 490; pHSYNC @ time <: 0;
         time += 4;   pHSYNC @ time <: 1;
      }
      pVSYNC <: 1;
      pDON <: 1;
   }
}

int main(void)
{
   par {
      on stdcore[0]: TFTRefresh();
   }
   return 0;
}


The translate table is:

unsigned int translate[] = {
       0x00000000,
       0xff000000,
       0x00ff0000,
       0xffff0000,
       0x0000ff00,
       0xff00ff00,
       0x00ffff00,
       0xffffff00,
       0x000000ff,
       0xff0000ff,
       0x00ff00ff,
       0xffff00ff,
       0x0000ffff,
       0xff00ffff,
       0x00ffffff,
       0xffffffff
};

User avatar
Bianco
XCore Expert
Posts: 737
Joined: Thu Dec 10, 2009 6:56 pm
Contact:

Postby Bianco » Mon Aug 08, 2011 8:21 pm

ale500 wrote:I have written several drivers for VGA output for the G4... they were available on the old xlinkers site... I can re-post them, both graphics and text based (there was a circuit too)...


Yeah i'm interested in using VGA in the future, what resolution could you get on a G4?
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 8:25 pm

I did 320x200, 320x240, 640x400 & 640x480. It may be possible to get 800x600 (I tried 400x300)... the thing is the number of colors you will get...
ale500
Respected Member
Posts: 259
Joined: Thu Sep 16, 2010 9:15 am

Postby ale500 » Mon Aug 08, 2011 9:20 pm

Here are the sources for 320x240 4bpp. I probably should update it because this used to be compiled with the version 8 of the tools...

I have somewhere more advanced drivers...
Attachments
vga_4bpp_320x240.zip
(125.03 KiB) Downloaded 77 times
vga_4bpp_320x240.zip
(125.03 KiB) Downloaded 77 times
User avatar
phalt
Respected Member
Posts: 298
Joined: Thu May 12, 2011 11:14 am
Contact:

Postby phalt » Tue Aug 09, 2011 10:47 am

Wow this is great. I wasn't working with XMOS when you posted the project - did you design the entire board yourself?

What are you planning to do with it?
Don't forget to update your project with the new images!

Return to “Projects”

Who is online

Users browsing this forum: No registered users and 7 guests