#!/usr/bin/env python from arch_classes import * ######################################################################################### # file : arch_info.py # date : august 2016 # author : Alain Greiner # # This file describes the architecture for ALMOS-MKH. ######################################################################################### # This python script defines a specific instance of ithe "tsar_generic_iob" architecture # for the ALMOS-MKH operating system. It is used to generate the "hard_config.h" file, # used to configure the hardware architecture, and the "arch_info.bin" file, used by # the ALMOS-MK bootloader. # # The constructor prototype format is imposed by the genarch.py application, # and should not be modified. # # The "tsar_generic_iob" architecture includes 7 external peripherals, accessed # through an IOB components located in cluster [0,0] or in cluster [x_size-1, y_size-1]. # Available peripherals are: TTY, IOC, FBF, ROM, NIC, CMA, PIC. # All clusters contain (nb_cores) processors, one L2 cache, one XCU, and # one optional hardware coprocessor connected to a MWMR controller. # # As the "tsar_generic_iob" architecture is generic, the following parameters # are defined as constructor arguments and can be redefined in the Makefile when # a new kernel image is generated : # - x_size : number of clusters in a row (from 1 to 16) # - y_size : number of clusters in a column (from & to 16) # - nb_cores : number of processors per cluster (from 1 to 4) # - nb_ttys : number of TTY channels (can be from 1 to 8) # - nb_nics : number of NIC channels (from 1 to 2) # - ioc_type : can be IOC_BDV, IOC_HBA, IOC_SDC, IOC_SPI # - txt_type : IOB architecture use TXT_TTY # - fbf_type : IOB architecture use FBF_SCL # - sys_clk : IOB architecture is SystemC only # # The other hardware parameters are defined below: # - x_width : number of bits for x coordinate # - y_width : number of bits for y coordinate # - p_width : number of bits for local processor index # - paddr_width : number of bits for physical address # - irqs_per_core : number of input IRQs per processor # - io_cxy : IO cluster identifier # - boot_cxy : boot cluster identifier # - cache_line : number of bytes in cache line (in 16,32,64) # - devices_max : max number of internal devices per cluster # - fbf_width : number of lines = number of pixels ######################################################################################## ############################ def arch( x_size = 2, y_size = 2, nb_cores = 2, nb_ttys = 3, nb_nics = 1, ioc_type = 'IOC_BDV', txt_type = 'TXT_TTY', fbf_type = 'FBF_SCL', sys_clk = 50000 ): ### architecture constants p_width = 2 x_width = 4 y_width = 4 paddr_width = 40 irqs_per_core = 4 io_cxy = ((x_size-1)<= 1) and (nb_ttys <= 8) ) assert( (nb_nics >= 1) and (nb_nics <= 2) ) assert( ioc_type in ['IOC_BDV','IOC_HBA','IOC_SDC','IOC_SPI','IOC_RDK'] ) assert( (io_cxy == 0) or (io_cxy == ((x_size-1)<> y_width) < x_size) and ((boot_cxy & ((1<