Skip to content

Latest commit

 

History

History
276 lines (198 loc) · 10.2 KB

Portando_a_SoCkit.md

File metadata and controls

276 lines (198 loc) · 10.2 KB

Como portar cores MiSTer de DE10-nano a SoCkit

Ejemplo de commit con los cambios realizados para portar el core de Minimig de MiSTer de DE10-nano a SoCkit:

https://github.com/sockitfpga/Template_SoCkit/commit/c349aa28e03251e3225126e6f79496f1b9eeb9d7

Pasos a realizar para portar cores de MiSTer de DE10-nano a SoCkit

  • Clonar el repositorio del core MiSTer de https://github.com/MiSTer-devel/

    • Opcionalmente bajar el zip del repositorio (CODE > download zip)
  • Borrar del directorio releases/ todos los archivos *.rbf (no borrar el resto de ficheros)

  • Editar el fichero .qsf del directorio principal del core (por ejemplo Minimig.qsf)

    #reemplazar estas líneas
    set_global_assignment -name MIN_CORE_JUNCTION_TEMP "-40"
    set_global_assignment -name MAX_CORE_JUNCTION_TEMP 100
    
    #por estas otras
    set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
    set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
    #añadir las siguientes líneas hacia el final después de "source files.qip"
    
    set_global_assignment -name VERILOG_FILE sys/I2C_Controller.v
    set_global_assignment -name VERILOG_FILE sys/I2C_AV_Config.v
    
    set_global_assignment -name ENABLE_OCT_DONE OFF
    set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "PASSIVE SERIAL"
    set_global_assignment -name USE_CONFIGURATION_DEVICE ON
    set_global_assignment -name CRC_ERROR_OPEN_DRAIN ON
    set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
    set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
    set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
    set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
    set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_100MHZ

En los siguientes pasos puedes tomar los ficheros indicados del core Template https://github.com/sockitfpga/Template_SoCkit/tree/master/sys

  • Añadir los siguientes ficheros en la carpeta sys/

    • sys/I2C_AV_Config.v
    • sys/I2C_Controller.v
  • Sobrescribir los siguientes ficheros de la carpeta sys/

    • sys/sys.tcl
    • sys/sys_analog.tcl
    • sys/sys_dual_sdram.tcl

    Nota: Personalmente sigo comparando estos ficheros antes de sobrescribirlos por si hubiera alguna cosa especial, pero en la mayoría de casos se pueden sobrescribir sin problemas.

  • Editar el fichero sys/sys_top.v de la carpeta sys/

    Como ejemplo de los cambios a realizar puedes revisar este commit

    En resumen solo hay que modificar 3 zonas de este extenso fichero.

    • Zona inicial de definición de ports del module sys_top

      # Modificar los comentarios de cabecera añadiendo lo siguiente
      //  Arrow SoCKit / DE10-Standard / DE1-SoC MiSTer hardware abstraction module 
      //  2022 by XXXX https://github.com/XXXX, based on 2019 work by modernhackers
      //
      //  MiSTer hardware abstraction module
      //  (c)2017-2020 Alexey Melnikov
      //
      
      # Modificar los siguientes puertos del módulo sys_top
      
      	//////////// VGA ///////////
      # Donde ponga un 5 modificarlo por un 7 ( [5:0]  pasa a  [7:0] )
      	//SoCkit, DE10-standard, DE1-SoC implementation need to contain 8 bit color otherwise the brightness is low on the DAC
      	output  [7:0] VGA_R,
      	output  [7:0] VGA_G,
      	output  [7:0] VGA_B,
      	inout         VGA_HS,  // VGA_HS is secondary SD card detect when VGA_EN = 1 (inactive)
      	output		  VGA_VS,
      # Comentar la línia siguiente 
      	//input      VGA_EN,  // active low
      # Añadir a continuación las nuevas señales para SoCkit
      	//SoCkit, DE10-standard, DE1-SoC implementation for on-board VGA DAC route - additional pins
      	output 		  VGA_CLK,
      	output 		  VGA_BLANK_N,
      	output 		  VGA_SYNC_N,
      
      # Añadir en la sección de ports de AUDIO las nuevas señales para SoCkit
      	/////////// AUDIO //////////
      	//SoCkit, DE10-standard, DE1-SoC implementation for on-board Audio CODEC
      	// Audio CODEC
      	inout wire    AUD_ADCLRCK,  // Audio CODEC ADC LR Clock
      	input wire    AUD_ADCDAT,   // Audio CODEC ADC Data
      	inout wire    AUD_DACLRCK,  // Audio CODEC DAC LR Clock
      	output wire   AUD_DACDAT,   // Audio CODEC DAC Data
          inout wire    AUD_BCLK,     // Audio CODEC Bit-Stream Clock
          output wire   AUD_XCK,      // Audio CODEC Chip Clock
          output wire   AUD_MUTE,		// Audio CODEC Mute (active low)
      	// I2C Audio CODEC
          inout wire    AUD_I2C_SDAT,     // I2C Data
          output wire   AUD_I2C_SCLK,     // I2C Clock
      
      # Modificar la sección MB SWITCH según lo descrito
      	////////// MB SWITCH ////////
      	//input   [3:0] SW,
      	//SoCkit, DE10-standard, DE1-SoC board implementation
      	inout   [3:0] SW,		
      
      # Modificar la sección MB LED según lo descrito
      	////////// MB LED ///////////
      	//output  [7:0] LED
      	//SoCkit, DE10-standard, DE1-SoC board implementation
      	output LED_0_USER,
      	output LED_1_HDD,
      	output LED_2_POWER,
      	output LED_3_LOCKED,
      # Comentar los ports no utilizados 
          //////////// HDMI //////////
          // output        HDMI_I2C_SCL,
      	// inout         HDMI_I2C_SDA,
      	// output        HDMI_MCLK,
      	// output        HDMI_SCLK,
      	// output        HDMI_LRCLK,
      	// output        HDMI_I2S,
      	// output        HDMI_TX_CLK,
      	// output        HDMI_TX_DE,
      	// output [23:0] HDMI_TX_D,
      	// output        HDMI_TX_HS,
      	// output        HDMI_TX_VS,
      	// input         HDMI_TX_INT,
      
      	//////////// VGA ///////////
      	//input      VGA_EN,  // active low
      
      
      	////////// I/O ALT /////////
      	// output        SD_SPI_CS,
      	// input         SD_SPI_MISO,
      	// output        SD_SPI_CLK,
      	// output        SD_SPI_MOSI,
      
      
      	////////// ADC //////////////
      	// output        ADC_SCK,
      	// input         ADC_SDO,
      	// output        ADC_SDI,
      	// output        ADC_CONVST,
      

      Añadir lo siguiente justo después del final de la definición de ports de sys_top (después de la línea que pone "";)"" aprox. línea 155 )

      //SoCkit, DE10-standard, DE1-SoC board implementation
      wire        HDMI_TX_CLK;
      wire        HDMI_TX_DE;
      wire [23:0] HDMI_TX_D;
      wire        HDMI_TX_HS;
      wire        HDMI_TX_VS;
      wire        HDMI_TX_INT;
      wire        HDMI_I2C_SCL;
      wire        HDMI_I2C_SDA;
      wire        HDMI_MCLK;
      wire        HDMI_SCLK;
      wire        HDMI_LRCLK;
      wire        HDMI_I2S;
      
      wire        ADC_SCK;
      wire        ADC_SDO;
      wire        ADC_SDI;
      wire        ADC_CONVST;
      
      wire        SD_SPI_CS;
      wire        SD_SPI_MISO;
      wire        SD_SPI_CLK;
      wire        SD_SPI_MOSI;
      
      wire   [7:0] LED;
      
      assign LED_0_USER   = LED[0];
      assign LED_1_HDD    = LED[2];
      assign LED_2_POWER  = LED[4];
      assign LED_3_LOCKED = LED[6];
      
      // DE10-Standard / DE1-SoC / SoCKit implementation for on-board VGA DAC route - this will be overrided by code to set value to 0
      wire   VGA_EN;  // active low
      assign VGA_EN = 1'b0;		//enable VGA mode when VGA_EN is low
      
      // DE10-Standard / DE1-SoC / Arrow SoCKit VGA mode
      assign SW[3] = 1'b0;		//necessary for VGA mode
      
    • Zona asignaciones VGA hacia el final del documento (sobre la línia 1410, puede variar según la versión de framework)

      #modificar las siguientes líneas de ejemplo pero solo lo expresamente indicado a continuación
      #donde ponga 6'bZZZZZZ  modificar por  8'bZZZZZZZZ
      #donde ponga [23:18] modificar por [23:16]
      #donde ponga [15:10] modificar por [15:8]
      #donde ponga [7:2] modificar por [7:0]
      
      #Ejemplo. Estas líneas del core original de MiSTer  (pueden ser diferentes pero solo hay que añadir las Z y modificar los números)
      
      assign VGA_R  = (VGA_EN | SW[3]) ? 6'bZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[23:18] : vga_o[23:18];
      	assign VGA_G  = (VGA_EN | SW[3]) ? 6'bZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[15:10] : vga_o[15:10];
      	assign VGA_B  = (VGA_EN | SW[3]) ? 6'bZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[7:2]   : vga_o[7:2]  ;
      
      #cambian a lo siguiente para el port de SoCkit
      
      	//DE10-standard / DE1-SoC / SoCkit implementation for on-board VGA DAC route - additional 2 bit per color
      	assign VGA_R  = (VGA_EN | SW[3]) ? 8'bZZZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[23:16] : vga_o[23:16];
      	assign VGA_G  = (VGA_EN | SW[3]) ? 8'bZZZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[15:8]  : vga_o[15:8] ;
      	assign VGA_B  = (VGA_EN | SW[3]) ? 8'bZZZZZZZZ :   (vga_fb | vga_scaler) ? vgas_o[7:0]   : vga_o[7:0]  ;
      
      #Añadir las siguientes líneas a continuación
      
      	//DE10-standard / DE1-SoC / SoCkit implementation for on-board VGA DAC route - additional pins
      	assign VGA_BLANK_N = VGA_HS && VGA_VS;  //VGA DAC additional required pin
      	assign VGA_SYNC_N = 0; 					//VGA DAC additional required pin
      	assign VGA_CLK = HDMI_TX_CLK; 			//has to define a clock to VGA DAC clock otherwise
    • Zona Audio

      # Añadir las siguientes líneas antes de la sección  User I/O (USB 3.0 connector) situada hacia el final del archivo (sobre la línia 1550, puede variar según la versión de framework)
      
      //// DE10-Standard / DE1-SoC / SoCkit Audio CODEC
      
      assign AUD_MUTE    = 1'b1;
      assign AUD_XCK     = HDMI_MCLK;
      assign AUD_DACLRCK = HDMI_LRCLK;
      assign AUD_BCLK    = HDMI_SCLK;
      assign AUD_DACDAT  = HDMI_I2S;
      
      // I2C audio config
      I2C_AV_Config audio_config (
        // host side
        .iCLK         (clk_audio        ),
        .iRST_N       (!reset           ),
        // i2c side
        .oI2C_SCLK    (AUD_I2C_SCLK         ),
        .oI2C_SDAT    (AUD_I2C_SDAT         )
      );