Compare commits
	
		
			25 Commits
		
	
	
		
			master
			...
			2c74ef7f03
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 2c74ef7f03 | |||
| c27ee2215c | |||
| ec4e3ec36d | |||
| 87bb3a5f24 | |||
| a3f166d5a2 | |||
| 175ed051d3 | |||
| 291a765b8d | |||
| 7b46ed6b7c | |||
| 0cb89fd675 | |||
| 7a514c6477 | |||
| e57dfd0f63 | |||
| df44d1a3bc | |||
| 4f950772a1 | |||
| 97eeb7af29 | |||
| 1cb558d2ea | |||
| d749f87696 | |||
| c10d2378e7 | |||
| 2b5509009c | |||
| 06a623a05a | |||
| 48f3a7e590 | |||
| 7449f52b9a | |||
| 212821fe4d | |||
| 8e4eaf6603 | |||
| 0134a8f4dc | |||
| 5fdadd244c | 
							
								
								
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -1,9 +1,9 @@ | ||||
| [submodule "rocket-chip"] | ||||
| 	path = rocket-chip | ||||
| 	url = https://github.com/ucb-bar/rocket-chip.git | ||||
| 	url = https://git.tiband.de/riscv/rocket-chip.git | ||||
| [submodule "sifive-blocks"] | ||||
| 	path = sifive-blocks | ||||
| 	url = https://github.com/sifive/sifive-blocks.git | ||||
| 	url = https://git.tiband.de/riscv/sifive-blocks.git | ||||
| [submodule "fpga-shells"] | ||||
| 	path = fpga-shells | ||||
| 	url = https://github.com/sifive/fpga-shells | ||||
| 	url = https://git.tiband.de/riscv/fpga-shells.git | ||||
|   | ||||
							
								
								
									
										24
									
								
								Makefile.u500ml507devkit
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								Makefile.u500ml507devkit
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # See LICENSE for license details. | ||||
| base_dir := $(patsubst %/,%,$(dir $(abspath $(lastword $(MAKEFILE_LIST))))) | ||||
| BUILD_DIR := $(base_dir)/builds/u500ml507devkit | ||||
| FPGA_DIR := $(base_dir)/fpga-shells/xilinx | ||||
| MODEL := U500ML507DevKitFPGAChip | ||||
| PROJECT := sifive.freedom.unleashed.u500ml507devkit | ||||
| export CONFIG_PROJECT := sifive.freedom.unleashed.u500ml507devkit | ||||
| export CONFIG := U500ML507DevKitConfig | ||||
| export BOARD := ml507 | ||||
| export BOOTROM_DIR := $(base_dir)/bootrom/sdboot | ||||
|  | ||||
| rocketchip_dir := $(base_dir)/rocket-chip | ||||
| sifiveblocks_dir := $(base_dir)/sifive-blocks | ||||
| VSRCS := \ | ||||
| 	$(rocketchip_dir)/vsrc/AsyncResetReg.v \ | ||||
| 	$(rocketchip_dir)/vsrc/plusarg_reader.v \ | ||||
| 	$(sifiveblocks_dir)/vsrc/SRLatch.v \ | ||||
| 	$(FPGA_DIR)/common/vsrc/PowerOnResetFPGAOnly.v \ | ||||
| 	$(FPGA_DIR)/$(BOARD)/vsrc/sdio.v \ | ||||
| 	$(FPGA_DIR)/$(BOARD)/vsrc/ml507reset.v \ | ||||
| 	$(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).rom.v \ | ||||
| 	$(BUILD_DIR)/$(CONFIG_PROJECT).$(CONFIG).v | ||||
|  | ||||
| include common.mk | ||||
| @@ -33,6 +33,9 @@ static inline void kputc(char c) | ||||
| 	while ((int32_t)(*tx) < 0); | ||||
| 	*tx = c; | ||||
| #endif | ||||
| 	volatile uint32_t *term = (void *) 0x64003000; // Terminal (32 bit) | ||||
| 	while ((int32_t)(*term) < 0); | ||||
| 	*term = c; | ||||
| } | ||||
|  | ||||
| extern void kputs(const char *); | ||||
|   | ||||
| @@ -12,7 +12,7 @@ | ||||
|  | ||||
| #define PAYLOAD_SIZE	(16 << 11) | ||||
|  | ||||
| #define F_CLK 50000000UL | ||||
| #define F_CLK 60000000UL | ||||
|  | ||||
| static volatile uint32_t * const spi = (void *)(SPI_CTRL_ADDR); | ||||
|  | ||||
|   | ||||
 Submodule fpga-shells updated: 9d02f530fc...b49f5cfa78
									
								
							 Submodule rocket-chip updated: 4ba8acb4aa...81d631a6a1
									
								
							 Submodule sifive-blocks updated: 7ac56c01af...88f1cbe420
									
								
							
							
								
								
									
										58
									
								
								src/main/scala/unleashed/u500ml507devkit/Config.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								src/main/scala/unleashed/u500ml507devkit/Config.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,58 @@ | ||||
| // See LICENSE for license details. | ||||
| package sifive.freedom.unleashed.u500ml507devkit | ||||
|  | ||||
| import freechips.rocketchip.config._ | ||||
| import freechips.rocketchip.subsystem._ | ||||
| import freechips.rocketchip.devices.debug._ | ||||
| import freechips.rocketchip.devices.tilelink._ | ||||
| import freechips.rocketchip.diplomacy._ | ||||
| import freechips.rocketchip.system._ | ||||
| import freechips.rocketchip.tile._ | ||||
|  | ||||
| import sifive.blocks.devices.gpio._ | ||||
| import sifive.blocks.devices.spi._ | ||||
| import sifive.blocks.devices.uart._ | ||||
| import sifive.blocks.devices.terminal._ | ||||
|  | ||||
| import sifive.fpgashells.devices.xilinx.xilinxml507mig._ | ||||
|  | ||||
| // Default FreedomUML507Config | ||||
| class FreedomUML507Config extends Config( | ||||
|   new WithoutTLMonitors      ++ | ||||
|   new WithJtagDTM            ++ | ||||
|   new WithNMemoryChannels(1) ++ | ||||
|   new WithNSmallLinuxCores(1)       ++ | ||||
|   new BaseConfig | ||||
| ) | ||||
|  | ||||
| // Freedom U500 ML507 Dev Kit Peripherals | ||||
| class U500ML507DevKitPeripherals extends Config((site, here, up) => { | ||||
|   case PeripheryUARTKey => List( | ||||
|     UARTParams(address = BigInt(0x64000000L))) | ||||
|   case PeripherySPIKey => List( | ||||
|     SPIParams(rAddress = BigInt(0x64001000L))) | ||||
|   case PeripheryGPIOKey => List( | ||||
|     GPIOParams(address = BigInt(0x64002000L), width = 8)) | ||||
|   case PeripheryTerminalKey => | ||||
|     TerminalParams(address = BigInt(0x64003000L)) | ||||
|   case PeripheryMaskROMKey => List( | ||||
|     MaskROMParams(address = 0x10000, name = "BootROM")) | ||||
| }) | ||||
|  | ||||
| // Freedom U500 ML507 Dev Kit | ||||
| class U500ML507DevKitConfig extends Config( | ||||
|   new WithNExtTopInterrupts(0)   ++ | ||||
|   new U500ML507DevKitPeripherals ++ | ||||
|   new FreedomUML507Config().alter((site,here,up) => { | ||||
|     case ErrorParams => ErrorParams(Seq(AddressSet(0x3000, 0xfff)), maxAtomic=site(XLen)/8, maxTransfer=128) | ||||
|     case PeripheryBusKey => up(PeripheryBusKey, site).copy(frequency = 60000000) // 60 MHz clock | ||||
|     case MemoryML507Key => XilinxML507MIGParams(address = Seq(AddressSet(0x80000000L,0x10000000L-1))) // 256 MiB | ||||
|     case DTSTimebase => BigInt(1000000) | ||||
|     case ExtMem => up(ExtMem).copy(size = 0x10000000L) | ||||
|     case JtagDTMKey => new JtagDTMConfig ( | ||||
|       idcodeVersion = 2,      // 1 was legacy (FE310-G000, Acai). | ||||
|       idcodePartNum = 0x000,  // Decided to simplify. | ||||
|       idcodeManufId = 0x489,  // As Assigned by JEDEC to SiFive. Only used in wrappers / test harnesses. | ||||
|       debugIdleCycles = 5)    // Reasonable guess for synchronization | ||||
|   }) | ||||
| ) | ||||
							
								
								
									
										66
									
								
								src/main/scala/unleashed/u500ml507devkit/FPGAChip.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								src/main/scala/unleashed/u500ml507devkit/FPGAChip.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| // See LICENSE for license details. | ||||
| package sifive.freedom.unleashed.u500ml507devkit | ||||
|  | ||||
| import Chisel._ | ||||
| import chisel3.experimental.{withClockAndReset} | ||||
|  | ||||
| import freechips.rocketchip.config._ | ||||
| import freechips.rocketchip.diplomacy._ | ||||
|  | ||||
| import sifive.blocks.devices.gpio._ | ||||
| import sifive.blocks.devices.pinctrl.{BasePin} | ||||
|  | ||||
| import sifive.fpgashells.shell.xilinx.ml507shell._ | ||||
|  | ||||
| //------------------------------------------------------------------------- | ||||
| // PinGen | ||||
| //------------------------------------------------------------------------- | ||||
|  | ||||
| object PinGen { | ||||
|   def apply(): BasePin = { | ||||
|     new BasePin() | ||||
|   } | ||||
| } | ||||
|  | ||||
| //------------------------------------------------------------------------- | ||||
| // U500ML507DevKitFPGAChip | ||||
| //------------------------------------------------------------------------- | ||||
|  | ||||
| class U500ML507DevKitFPGAChip(implicit override val p: Parameters) | ||||
|     extends ML507Shell | ||||
|     with HasDebugJTAG { | ||||
|  | ||||
|   //----------------------------------------------------------------------- | ||||
|   // DUT | ||||
|   //----------------------------------------------------------------------- | ||||
|  | ||||
|   withClockAndReset(dut_clock, dut_reset) { | ||||
|     val dut = Module(LazyModule(new U500ML507DevKitSystem).module) | ||||
|  | ||||
|     //--------------------------------------------------------------------- | ||||
|     // Connect peripherals | ||||
|     //--------------------------------------------------------------------- | ||||
|  | ||||
|     connectTerminal (dut) | ||||
|     connectDDRMemory(dut) | ||||
|     connectDebugJTAG(dut) | ||||
|     connectSPI      (dut) | ||||
|     connectUART     (dut) | ||||
|  | ||||
|     //--------------------------------------------------------------------- | ||||
|     // GPIO | ||||
|     //--------------------------------------------------------------------- | ||||
|  | ||||
|     val gpioParams = p(PeripheryGPIOKey) | ||||
|     val gpio_pins = Wire(new GPIOPins(() => PinGen(), gpioParams(0))) | ||||
|  | ||||
|     GPIOPinsFromPort(gpio_pins, dut.gpio(0)) | ||||
|  | ||||
|     gpio_pins.pins.zipWithIndex.foreach { | ||||
|       case(pin, idx) => | ||||
|         pin.i.ival := dip(idx) | ||||
|         led(idx) := pin.o.oval | ||||
|     } | ||||
|   } | ||||
|  | ||||
| } | ||||
							
								
								
									
										48
									
								
								src/main/scala/unleashed/u500ml507devkit/System.scala
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/main/scala/unleashed/u500ml507devkit/System.scala
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,48 @@ | ||||
| // See LICENSE for license details. | ||||
| package sifive.freedom.unleashed.u500ml507devkit | ||||
|  | ||||
| import Chisel._ | ||||
|  | ||||
| import freechips.rocketchip.config._ | ||||
| import freechips.rocketchip.subsystem._ | ||||
| import freechips.rocketchip.devices.debug._ | ||||
| import freechips.rocketchip.devices.tilelink._ | ||||
| import freechips.rocketchip.diplomacy._ | ||||
| import freechips.rocketchip.system._ | ||||
|  | ||||
| import sifive.blocks.devices.gpio._ | ||||
| import sifive.blocks.devices.spi._ | ||||
| import sifive.blocks.devices.uart._ | ||||
| import sifive.blocks.devices.terminal._ | ||||
|  | ||||
| import sifive.fpgashells.devices.xilinx.xilinxml507mig._ | ||||
|  | ||||
| //------------------------------------------------------------------------- | ||||
| // U500ML507DevKitSystem | ||||
| //------------------------------------------------------------------------- | ||||
|  | ||||
| class U500ML507DevKitSystem(implicit p: Parameters) extends RocketSubsystem | ||||
|     with HasPeripheryMaskROMSlave | ||||
|     with HasPeripheryDebug | ||||
|     with HasSystemErrorSlave | ||||
|     with HasPeripheryUART | ||||
|     with HasPeripheryTerminal | ||||
|     with HasPeripherySPI | ||||
|     with HasPeripheryGPIO | ||||
|     with HasMemoryML507 { | ||||
|   override lazy val module = new U500ML507DevKitSystemModule(this) | ||||
| } | ||||
|  | ||||
| class U500ML507DevKitSystemModule[+L <: U500ML507DevKitSystem](_outer: L) | ||||
|   extends RocketSubsystemModuleImp(_outer) | ||||
|     with HasRTCModuleImp | ||||
|     with HasPeripheryDebugModuleImp | ||||
|     with HasPeripheryUARTModuleImp | ||||
|     with HasPeripheryTerminalModuleImp | ||||
|     with HasPeripherySPIModuleImp | ||||
|     with HasPeripheryGPIOModuleImp | ||||
|     with HasMemoryML507ModuleImp { | ||||
|   // Reset vector is set to the location of the mask rom | ||||
|   val maskROMParams = p(PeripheryMaskROMKey) | ||||
|   global_reset_vector := maskROMParams(0).address.U | ||||
| } | ||||
		Reference in New Issue
	
	Block a user