Cacharreando con el OpenBench Logic Sniffer

(Casi) cualquier cosa que quieras compartir será bienvenida por la comunidad

Moderador: Sir Cilve Sinclair

Responder
Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Cacharreando con el OpenBench Logic Sniffer

Mensaje por antoniovillena » Dom Nov 06, 2011 5:41 pm

Pues nada, que por fin he hecho el cable VGA y he conseguido cargar una demo. Pongo aquí todos los pasos por si alguien quiere reproducirlos.

1. Instalarse el Xilinx ISE, yo tengo la versión 12.3, pero cualquiera puede valer. Luego echarle un vistazo a cualquier tutorial que hay en youtube, yo lo hice con http://www.youtube.com/watch?v=Ob7B6x5g6tw. La demo es en VHDL y consta de dos archivos importantes: vga.vhd y pins.out.

2. Compilar la demo. Me he basado en el vga.vhd de esta web, http://www.mikekohn.net/micro/fpga_vga.php. Los archivos son éstos:

vga.vhd

Código: Seleccionar todo

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity vga is
  Port ( mclk : in  STD_LOGIC;
         red : out  STD_LOGIC;
         grn : out  STD_LOGIC;
         blu : out  STD_LOGIC;
         hs : out  STD_LOGIC;
         vs : out  STD_LOGIC;
         arml : out  STD_LOGIC;
         tril : out  STD_LOGIC);
end vga;

architecture Behavioral of vga is

signal clk: STD_LOGIC;
signal horz_scan: STD_LOGIC_VECTOR (9 downto 0);
signal vert_scan: STD_LOGIC_VECTOR (9 downto 0);
signal vinc_flag: STD_LOGIC;

begin

  -- Clock divide by 1/2 
  process(mclk)
  begin
    if mclk = '1' and mclk'Event then
      -- clk <= clk xor mclk;
      clk <= not clk;
    end if;
  end process;

  -- horizonal clock
  process(clk)
  begin
    if clk = '1' and clk'Event then
      if horz_scan = "1100100000" then
        horz_scan <= "0000000000";
      else
        horz_scan <= horz_scan + 1;
      end if;
    end if;
  end process;

  -- vertial clock (increments when the horizontal clock is on the front porch
  process(vinc_flag)
  begin

    if vinc_flag = '1' and vinc_flag'Event then
      if vert_scan = "1000001001" then
          vert_scan <= "0000000000";
      else
        vert_scan <= vert_scan + 1;
      end if;
    end if;

  end process;

  -- horizontal sync for 96 horizontal clocks (96 pixels)
  -- hs <= '1' when horz_scan(9 downto 7) = "000" else '0';
  hs <= '1' when horz_scan < 96 else '0';
  -- vertial sync for 2 scan lines
  vs <= '1' when vert_scan(9 downto 1) = "000000000" else '0';

  red <= '1' when vert_scan > 100 and vert_scan < 310 and horz_scan >= 144 and horz_scan < 784 else '0';
  grn <= '1' when vert_scan >= 300 and vert_scan < 350 and horz_scan >= 144 and horz_scan < 784 else '0';
  blu <= '1' when vert_scan >= 350 and vert_scan < 515 and horz_scan >= 144 and horz_scan < 784 else '0';

  vinc_flag <= '1' when horz_scan = "1100011000" else '0';
 
  arml <= '1';
  tril <= '0';

end Behavioral;


pins.ucf

Código: Seleccionar todo

NET "mclk" LOC = P41 | IOSTANDARD = LVCMOS33 | PERIOD = 20ns ;
NET "red"  LOC = P71 | IOSTANDARD = LVCMOS33;
NET "grn"  LOC = P70 | IOSTANDARD = LVCMOS33;
NET "blu"  LOC = P68 | IOSTANDARD = LVCMOS33;
NET "hs"   LOC = P79 | IOSTANDARD = LVCMOS33;
NET "vs"   LOC = P78 | IOSTANDARD = LVCMOS33;
NET "arml" LOC = P9  | IOSTANDARD = LVCMOS33;
NET "tril" LOC = P10 | IOSTANDARD = LVCMOS33;


El resultado es un archivo llamado vga.bit, lo podéis descargar aquí en caso de que sólo querráis testear el cable. http://antoniovillena.es/upload/vga.bit

3. Cargarlo en el OLS. Necesitáis bajaros un programa llamado ols_winloader.exe, desde aquí: http://www.mygizmos.org/ols/ols_winloader_v2.04.zip. Primero enchufáis el OLS al puerto USB, luego os aseguráis de que esté desmarcada la casilla "Perform OLS self test before writing" en el botón Advanced. Luego cargáis el archivo vga.bit, pulsáis UPDATE y luego RESET (sin soltar el UPDATE) hasta que los 2 leds verdes estén encendidos y finalmente le dais a OK (botón play) en el ols_winloader.exe. Comprobaréis que la demo se ha cargado en la ROM de la FPGA porque el led TRIG estará encendido y el ARM apagado.

4. Os hacéis el cable VGA. Para ello podéis o bien cortar un alargador por la mitad o como en mi caso usar el de un monitor roto. También necesitaréis 3 resistencias de 270 ohmios y 2 tiras de 6 pines, una hembra y la otra macho. Yo uso tiras con pines redondos, aunque también valen si son cuadrados. El esquema a montar es éste:
Imagen

A mí me ha salido algo así:
Imagen
Imagen

Las masas son los pines 5,6,7,8 y 10 según el esquema. En otros esquemas también he visto el 11. Lo importante es que detectéis todos los cables con un polímetro de estos que pitan si hay corto. En mi caso sólo tuve que unir 5 y 10 como GND, el resto son pines individuales: los pines de sincronismo van directos y los R, G y B con resistencias a la tira de pines. Este es el orden que yo he empleado en la tira de pines, empezando por GND:

Código: Seleccionar todo

pin 1: GND
pin 2: HS
pin 3: VS
pin 4: RED
pin 5: GREEN
pin 6: BLUE


La tira de pines macho la soldáis al Wing Header del OLS por la parte más cercana a los Buffer Inputs (o más alejada al conector USB).

5. Y Voilá. Sólo tenéis que conectar la tira macho a la hembra haciendo coincidir GND, enchufar el otro lado del cable al monitor, encender el monitor, y alimentar la OLS por el puerto USB (enchufándolo al ordenador o a un cargador con salida USB).

Esto sería lo que se ve por pantalla:

Imagen
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Cacharreando con el OpenBench Logic Sniffer

Mensaje por mcleod_ideafix » Lun Nov 07, 2011 8:30 pm

Pues si te atreves, te paso el diseño que hice del Jupiter ACE completo metido dentro del OLS para que lo pruebes ;) (aunque creo que lo dejé para descarga por algún sitio....mmmm)
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Cacharreando con el OpenBench Logic Sniffer

Mensaje por antoniovillena » Lun Nov 07, 2011 9:58 pm

mcleod_ideafix escribió:Pues si te atreves, te paso el diseño que hice del Jupiter ACE completo metido dentro del OLS para que lo pruebes ;) (aunque creo que lo dejé para descarga por algún sitio....mmmm)


Gracias, estaría genial. Ahora que estoy aprendiendo VHDL lo que necesito es practicar y me vendría bien programar un puerto PS/2 para el teclado.

Por cierto, para los que queráis iniciaros en esto de las FPGAs y sigáis este post como guía, no es imprescindible ser un manitas soldando, podéis comprar este accesorio por $15:
http://papilio.cc/index.php?n=Papilio.VGAWing

Basta con cambiar el archivo vga.ucf con el patillaje que usa el VGAWing. Tampoco es imprescindible disponer del OLS, cualquier entrenadora con la FPGA Spartan 3E valdría, especialmente las Papilo One que usan el mismo formato para las Wing.

http://store.gadgetfactory.net/index.ph ... ex&cPath=1
Imagen

Avatar de Usuario
mcleod_ideafix
Johnny Jones
Mensajes: 3985
Registrado: Vie Sep 21, 2007 1:26 am
Ubicación: Jerez de la Frontera
Contactar:

Re: Cacharreando con el OpenBench Logic Sniffer

Mensaje por mcleod_ideafix » Mar Nov 08, 2011 1:11 pm

antoniovillena escribió:Gracias, estaría genial. Ahora que estoy aprendiendo VHDL lo que necesito es practicar y me vendría bien programar un puerto PS/2 para el teclado.


Bueno... yo trabajo en Verilog, así que el ACE lo tengo descrito en ese lenguaje. Me resultó mucho más fácil aprender Verilog que VHDL, y ahora lo uso para practicamente todo lo que hago en lógica programable. De todas formas, mis primeros pinitos no fueron ni en VHDL ni en Verilog, sino en Handel-C.
Web: ZX Projects | Twitter: @zxprojects

Avatar de Usuario
antoniovillena
Nonamed
Mensajes: 1164
Registrado: Dom Ene 09, 2011 8:55 am

Re: Cacharreando con el OpenBench Logic Sniffer

Mensaje por antoniovillena » Mar Nov 08, 2011 1:34 pm

mcleod_ideafix escribió:Bueno... yo trabajo en Verilog, así que el ACE lo tengo descrito en ese lenguaje. Me resultó mucho más fácil aprender Verilog que VHDL, y ahora lo uso para practicamente todo lo que hago en lógica programable. De todas formas, mis primeros pinitos no fueron ni en VHDL ni en Verilog, sino en Handel-C.


No importa. Yo estoy aprendiendo VHDL, pero para las modificaciones que le quiero hacer al Jupiter Ace supongo que viendo cómo está hecho podré modificarlo en Verilog, si no te pido ayuda o escribo un módulo en VHDL (por lo visto son interoperables). Las modificaciones serán:
-Salida por VGA en lugar de video compuesto.
-Entrada por PS/2 en lugar de lo que tengas (supongo que es un teclado matricial).
Imagen

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 8 invitados