ipsocgen


Nameipsocgen JSON
Version 0.1.39 PyPI version JSON
download
home_pagehttps://github.com/aignacio/ipsocgen
SummaryGeneric SoC builder in HDL
upload_time2023-06-24 22:45:09
maintainer
docs_urlNone
authoraignacio (Anderson Ignacio)
requires_python
license
keywords soc mpsoc hdl verilog systemverilog builder
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
# IP SoC Generator

**IP SoC gen** is a framework to generate MP/SoCs with different configurations through a set of masters/slaves for fast
digital design development. To install through pip: 
```bash
pip install --upgrade ipsocgen
```

## Template projects 
In order to get started generating your own designs, check the [template
repository](https://github.com/aignacio/ipsocgen_template) which contains an example of SoC and MPSoC using
[NoX](https://github.com/aignacio/nox)
processor as the main CPU. The configuration files that were used for the **ipsocgen_template** are available in [`ipsocgen/examples/template_soc.yaml`](ipsocgen/examples/template_soc.yaml) and [`ipsocgen/examples/template_mpsoc.yaml`](ipsocgen/examples/template_mpsoc.yaml).

## To contribute/develop/extend the work
Please follow the steps below to build the virtual environment and install the dependencies.
```bash
python3 -m venv venv
source venv/bin/activate 
python3 setup.py install
```
## Configuration file reference

Here is a list of all inputs that can be listed for the IPSoCGen configuration file in yaml format.
```yaml
proj_name:                #Project Name
desc: 	                  #Short description
type:                     #System type (soc or mpsoc)

#####################
# If type == soc
#####################

soc_desc:
  bus_name:		            #Name for the bus Interconnect
  bus_type:	  	          #Type of the bus
  addr_width: 	          #Bus adress width			
  data_width:	  	        #Bus data width
  txn_id_width:  	        #Bus transaction ID width
  num_masters:	          #Number of master in the bus (min == 1)
  num_slaves:    	        #Number of slave in the bus (min == 1)
  proc_required:	        #Set if a processor is required (y or n)
  mmap_type:     	        #Memory map type (manual or auto)
  clk:
    name: 		            #Clock name
    clk_int: 		          #Internal signal name for the clock
    io_in_clk: 		        #Wrapper input pin for the clock
    type:  		            #Type of clock (pll or direct)
    pll:  		            #Only applicable if type == pll
      divclk_divide:      #PLL parameters
      clkfbout_mult:	    #PLL parameters
      clkout_divide:	    #PLL parameters
      io_rst_pin:         #Wrapper input pin for the PLL reset
      rst_in_type:        #Type of reset for the PLL (act_l or act_h)
      clkin_period:       #PLL parameters
  rst: 
    name:   		          #Reset name
    rst_int:  		        #Internal signal name for the reset
    io_in_rst: 		        #Wrapper input pin for the reset
    rst_in_type:  	      #Type of reset for the PLL (act_l or act_h)
    type:         		    #Type of reset (acc_rst or direct)
  proc:		
    name: 		            #Name of the main CPU that will be used
    type:		              #Type of processor (nox, vex…)
    clk: 		              #Describe the clock of the processor
    rst: 		              #Describe the reset of the processor
    boot:		              #Describe the boot for this processor
      type:   	 	        #Type of boot (slave, value or signal)
      signal:  	 	        #Only applicable if type == signal
      slave: 		          #Only applicable if type == slave
      value:        	    #Only applicable if type == value
    irq_mapping:
      timer:    		      #Internal signal name for RV timer interrupts
      software: 		      #Internal signal name for RV software interrupts
      external: 		      #Internal signal name for RV external interrupts
  masters:		            #Describe all masters within the system
    x:		                #Master ID, start always from 0
      name: 		          #Unique name for the instance
      desc: 		          #Brief description of the master I/F
      type: 	      	    #Master type
      if:   		          #Interface name (must be a valid one supported)
    ...
  slaves:
    x:		                #Slave ID, start always from 0
      name: 		          #Unique name for the instance
      desc: 		          #Brief description of the slave
      type:		            #Slave type
      base_addr:	        #Base address if mmap_type == manual
      addr_width:	        #Base address if mmap_type == manual
      mem_size_kib:	      #Slave kib size, only applicable if type == ram_mem/rom_mem/acc_custom_slave
      irq_timer:		      #Timer internal signal name, only applicable if type == acc_timer
      rst_def_addr:	      #Reset default address, only applicable if type == acc_rst
      rst_addr_out:	      #Reset address signal name [usually for CPUs], only applicable if type == acc_rst
      rst_pulse_width: 	  #Reset address signal name [usually for CPUs], only applicable if type == acc_rst
      io_bootloader:	    #Wrapper input pin for the bootloader, only applicable if type == acc_rst
      bootloader_type:    #Bootloader type (act_l or act_h), only applicable if type == acc_rst
      irq_dma_done:	      #Internal signal name for the DMA done IRQ, only applicable if type == acc_dma
      irq_dma_error:  	  #Internal signal name for the DMA error IRQ, only applicable if type == acc_dma
      io_tx:		          #Wrapper output pin for the UART TX, only applicable if type == acc_uart
      io_rx:		          #Wrapper input pin for the UART TX, only applicable if type == acc_uart
      irq_uart_rx:	      #Internal signal name for the UART IRQ, only applicable if type == acc_uart
      irq_type:		        #IRQ type (0-level, 1-edge) for all incomming IRQs, only applicable if type == acc_irq
      irq_summary:	      #Internal signal name for the IRQ summary, only applicable if type == acc_irq
      vec_mapping:	      #List of all internal signal names for the IRQ vector, only applicable if type == acc_irq
         - highest_prior_irq_1
         - …
         - lowest_prior_irq_n
      irq_noc:	      	  #Internal signal name for the NoC IRQ, only applicable if type == acc_noc
      pkt_recv_irq:	      #Internal signal name for the Received Packet IRQ, only applicable if type == acc_eth
      pkt_sent_irq:	      #Internal signal name for the Packet sent IRQ, only applicable if type == acc_eth
      pkt_recv_full_irq:	#Internal signal name for the Full FIFO Recv. Packet IRQ, only applicable if type == acc_eth
      eth_type:		        #Ethernet slave type (csr, infifo or outfifo), only applicable if type == acc_eth
    ...

#####################
# If type == mpsoc
#####################
mpsoc_desc:
  clk:
    name: 		            #Clock name
    clk_int: 		          #Internal signal name for the clock
    io_in_clk: 		        #Wrapper input pin for the clock
    type:  		            #Type of clock (pll or direct)
    pll:  		            #Only applicable if type == pll
      divclk_divide:      #PLL parameters
      clkfbout_mult:	    #PLL parameters
      clkout_divide:	    #PLL parameters
      io_rst_pin:         #Wrapper input pin for the PLL reset
      rst_in_type:        #Type of reset for the PLL (act_l or act_h)
      clkin_period:       #PLL parameters
  rst: 
    name:   		          #Reset name
    rst_int:  		        #Internal signal name for the reset
    io_in_rst: 		        #Wrapper input pin for the reset
    rst_in_type:  	      #Type of reset for the PLL (act_l or act_h)
    type:         		    #Type of reset (acc_rst or direct)
  noc:
    type:                 #Type of the noc (currently only ravenoc is available)
    name:                 #Unique name for the NoC instance
    size_x:               #Num. of rows
    size_y:               #Num. of collumns
    flit_data_width:      #Data width of the flit
    flit_buff:            #Num. of flit buffers
    h_priority:           #Priority of the virtual channels (ZeroHighPrior or ZeroLowPrior)
    n_virt_chn:           #Num. of virtual channels
    routing_alg:          #Routing algorithm (XYAlg or YXAlg)
    max_sz_pkt:           #Max. size of packet in flits (usually 256)
    base_addr:            #NoC common base address across all Tiles
  tiles:
    x:                    #Tile ID, always start from zero
      ....                #Same description pattern as soc_desc
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/aignacio/ipsocgen",
    "name": "ipsocgen",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "soc,mpsoc,hdl,verilog,systemverilog,builder",
    "author": "aignacio (Anderson Ignacio)",
    "author_email": "<anderson@aignacio.com>",
    "download_url": "https://files.pythonhosted.org/packages/5c/76/c60360652967e6d2600b9566e7c0a1dc2162be5deddc0656f180b08ffc5a/ipsocgen-0.1.39.tar.gz",
    "platform": null,
    "description": "\n# IP SoC Generator\n\n**IP SoC gen** is a framework to generate MP/SoCs with different configurations through a set of masters/slaves for fast\ndigital design development. To install through pip: \n```bash\npip install --upgrade ipsocgen\n```\n\n## Template projects \nIn order to get started generating your own designs, check the [template\nrepository](https://github.com/aignacio/ipsocgen_template) which contains an example of SoC and MPSoC using\n[NoX](https://github.com/aignacio/nox)\nprocessor as the main CPU. The configuration files that were used for the **ipsocgen_template** are available in [`ipsocgen/examples/template_soc.yaml`](ipsocgen/examples/template_soc.yaml) and [`ipsocgen/examples/template_mpsoc.yaml`](ipsocgen/examples/template_mpsoc.yaml).\n\n## To contribute/develop/extend the work\nPlease follow the steps below to build the virtual environment and install the dependencies.\n```bash\npython3 -m venv venv\nsource venv/bin/activate \npython3 setup.py install\n```\n## Configuration file reference\n\nHere is a list of all inputs that can be listed for the IPSoCGen configuration file in yaml format.\n```yaml\nproj_name:                #Project Name\ndesc: \t                  #Short description\ntype:                     #System type (soc or mpsoc)\n\n#####################\n# If type == soc\n#####################\n\nsoc_desc:\n  bus_name:\t\t            #Name for the bus Interconnect\n  bus_type:\t  \t          #Type of the bus\n  addr_width: \t          #Bus adress width\t\t\t\n  data_width:\t  \t        #Bus data width\n  txn_id_width:  \t        #Bus transaction ID width\n  num_masters:\t          #Number of master in the bus (min == 1)\n  num_slaves:    \t        #Number of slave in the bus (min == 1)\n  proc_required:\t        #Set if a processor is required (y or n)\n  mmap_type:     \t        #Memory map type (manual or auto)\n  clk:\n    name: \t\t            #Clock name\n    clk_int: \t\t          #Internal signal name for the clock\n    io_in_clk: \t\t        #Wrapper input pin for the clock\n    type:  \t\t            #Type of clock (pll or direct)\n    pll:  \t\t            #Only applicable if type == pll\n      divclk_divide:      #PLL parameters\n      clkfbout_mult:\t    #PLL parameters\n      clkout_divide:\t    #PLL parameters\n      io_rst_pin:         #Wrapper input pin for the PLL reset\n      rst_in_type:        #Type of reset for the PLL (act_l or act_h)\n      clkin_period:       #PLL parameters\n  rst: \n    name:   \t\t          #Reset name\n    rst_int:  \t\t        #Internal signal name for the reset\n    io_in_rst: \t\t        #Wrapper input pin for the reset\n    rst_in_type:  \t      #Type of reset for the PLL (act_l or act_h)\n    type:         \t\t    #Type of reset (acc_rst or direct)\n  proc:\t\t\n    name: \t\t            #Name of the main CPU that will be used\n    type:\t\t              #Type of processor (nox, vex\u2026)\n    clk: \t\t              #Describe the clock of the processor\n    rst: \t\t              #Describe the reset of the processor\n    boot:\t\t              #Describe the boot for this processor\n      type:   \t \t        #Type of boot (slave, value or signal)\n      signal:  \t \t        #Only applicable if type == signal\n      slave: \t\t          #Only applicable if type == slave\n      value:        \t    #Only applicable if type == value\n    irq_mapping:\n      timer:    \t\t      #Internal signal name for RV timer interrupts\n      software: \t\t      #Internal signal name for RV software interrupts\n      external: \t\t      #Internal signal name for RV external interrupts\n  masters:\t\t            #Describe all masters within the system\n    x:\t\t                #Master ID, start always from 0\n      name: \t\t          #Unique name for the instance\n      desc: \t\t          #Brief description of the master I/F\n      type: \t      \t    #Master type\n      if:   \t\t          #Interface name (must be a valid one supported)\n    ...\n  slaves:\n    x:\t\t                #Slave ID, start always from 0\n      name: \t\t          #Unique name for the instance\n      desc: \t\t          #Brief description of the slave\n      type:\t\t            #Slave type\n      base_addr:\t        #Base address if mmap_type == manual\n      addr_width:\t        #Base address if mmap_type == manual\n      mem_size_kib:\t      #Slave kib size, only applicable if type == ram_mem/rom_mem/acc_custom_slave\n      irq_timer:\t\t      #Timer internal signal name, only applicable if type == acc_timer\n      rst_def_addr:\t      #Reset default address, only applicable if type == acc_rst\n      rst_addr_out:\t      #Reset address signal name [usually for CPUs], only applicable if type == acc_rst\n      rst_pulse_width: \t  #Reset address signal name [usually for CPUs], only applicable if type == acc_rst\n      io_bootloader:\t    #Wrapper input pin for the bootloader, only applicable if type == acc_rst\n      bootloader_type:    #Bootloader type (act_l or act_h), only applicable if type == acc_rst\n      irq_dma_done:\t      #Internal signal name for the DMA done IRQ, only applicable if type == acc_dma\n      irq_dma_error:  \t  #Internal signal name for the DMA error IRQ, only applicable if type == acc_dma\n      io_tx:\t\t          #Wrapper output pin for the UART TX, only applicable if type == acc_uart\n      io_rx:\t\t          #Wrapper input pin for the UART TX, only applicable if type == acc_uart\n      irq_uart_rx:\t      #Internal signal name for the UART IRQ, only applicable if type == acc_uart\n      irq_type:\t\t        #IRQ type (0-level, 1-edge) for all incomming IRQs, only applicable if type == acc_irq\n      irq_summary:\t      #Internal signal name for the IRQ summary, only applicable if type == acc_irq\n      vec_mapping:\t      #List of all internal signal names for the IRQ vector, only applicable if type == acc_irq\n         - highest_prior_irq_1\n         - \u2026\n         - lowest_prior_irq_n\n      irq_noc:\t      \t  #Internal signal name for the NoC IRQ, only applicable if type == acc_noc\n      pkt_recv_irq:\t      #Internal signal name for the Received Packet IRQ, only applicable if type == acc_eth\n      pkt_sent_irq:\t      #Internal signal name for the Packet sent IRQ, only applicable if type == acc_eth\n      pkt_recv_full_irq:\t#Internal signal name for the Full FIFO Recv. Packet IRQ, only applicable if type == acc_eth\n      eth_type:\t\t        #Ethernet slave type (csr, infifo or outfifo), only applicable if type == acc_eth\n    ...\n\n#####################\n# If type == mpsoc\n#####################\nmpsoc_desc:\n  clk:\n    name: \t\t            #Clock name\n    clk_int: \t\t          #Internal signal name for the clock\n    io_in_clk: \t\t        #Wrapper input pin for the clock\n    type:  \t\t            #Type of clock (pll or direct)\n    pll:  \t\t            #Only applicable if type == pll\n      divclk_divide:      #PLL parameters\n      clkfbout_mult:\t    #PLL parameters\n      clkout_divide:\t    #PLL parameters\n      io_rst_pin:         #Wrapper input pin for the PLL reset\n      rst_in_type:        #Type of reset for the PLL (act_l or act_h)\n      clkin_period:       #PLL parameters\n  rst: \n    name:   \t\t          #Reset name\n    rst_int:  \t\t        #Internal signal name for the reset\n    io_in_rst: \t\t        #Wrapper input pin for the reset\n    rst_in_type:  \t      #Type of reset for the PLL (act_l or act_h)\n    type:         \t\t    #Type of reset (acc_rst or direct)\n  noc:\n    type:                 #Type of the noc (currently only ravenoc is available)\n    name:                 #Unique name for the NoC instance\n    size_x:               #Num. of rows\n    size_y:               #Num. of collumns\n    flit_data_width:      #Data width of the flit\n    flit_buff:            #Num. of flit buffers\n    h_priority:           #Priority of the virtual channels (ZeroHighPrior or ZeroLowPrior)\n    n_virt_chn:           #Num. of virtual channels\n    routing_alg:          #Routing algorithm (XYAlg or YXAlg)\n    max_sz_pkt:           #Max. size of packet in flits (usually 256)\n    base_addr:            #NoC common base address across all Tiles\n  tiles:\n    x:                    #Tile ID, always start from zero\n      ....                #Same description pattern as soc_desc\n```\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Generic SoC builder in HDL",
    "version": "0.1.39",
    "project_urls": {
        "Homepage": "https://github.com/aignacio/ipsocgen"
    },
    "split_keywords": [
        "soc",
        "mpsoc",
        "hdl",
        "verilog",
        "systemverilog",
        "builder"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9f15492a9339575621a4f028a5f8a82f1e4bb2cbd0350aafd1fb58ee2e4670fe",
                "md5": "cdd92f0f424bd79a2dfc1fd2792dcf3c",
                "sha256": "6ff059993bd0c2a61731b06b6329000b6a1fde3b7ca2d1e124a2df3dc1c9467f"
            },
            "downloads": -1,
            "filename": "ipsocgen-0.1.39-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cdd92f0f424bd79a2dfc1fd2792dcf3c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 30706,
            "upload_time": "2023-06-24T22:45:07",
            "upload_time_iso_8601": "2023-06-24T22:45:07.419560Z",
            "url": "https://files.pythonhosted.org/packages/9f/15/492a9339575621a4f028a5f8a82f1e4bb2cbd0350aafd1fb58ee2e4670fe/ipsocgen-0.1.39-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5c76c60360652967e6d2600b9566e7c0a1dc2162be5deddc0656f180b08ffc5a",
                "md5": "9be1adad633b75715ab0b524ed0e760c",
                "sha256": "8f605b0d28f52ac51fac914a17b3b22c146cb334deb6efde7aa49cccef9161a5"
            },
            "downloads": -1,
            "filename": "ipsocgen-0.1.39.tar.gz",
            "has_sig": false,
            "md5_digest": "9be1adad633b75715ab0b524ed0e760c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 23967,
            "upload_time": "2023-06-24T22:45:09",
            "upload_time_iso_8601": "2023-06-24T22:45:09.133878Z",
            "url": "https://files.pythonhosted.org/packages/5c/76/c60360652967e6d2600b9566e7c0a1dc2162be5deddc0656f180b08ffc5a/ipsocgen-0.1.39.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-06-24 22:45:09",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "aignacio",
    "github_project": "ipsocgen",
    "github_not_found": true,
    "lcname": "ipsocgen"
}
        
Elapsed time: 2.04218s