From be8c5137ae9d04a798e6d6bdfa42b522397a1457 Mon Sep 17 00:00:00 2001 From: dam1n19 <dam1n19@soton.ac.uk> Date: Thu, 22 Jun 2023 09:15:38 +0100 Subject: [PATCH] Successful simulation on NanoSoC Refactoring --- .gitignore | 17 +- flist/nanosoc.flist | 78 +- makefile | 4 +- .../nanosoc_chip/chip/verilog/nanosoc_chip.v | 8 +- .../chip/verilog/nanosoc_chip_new.v | 835 ------------------ .../dmem_0/verilog/nanosoc_region_dmem_0.v | 4 +- .../verilog/nanosoc_region_expram_h.v | 4 +- .../verilog/nanosoc_region_expram_l.v | 4 +- .../imem_0/verilog/nanosoc_region_imem_0.v | 4 +- .../cpu/verilog/nanosoc_ss_cpu.v | 32 +- .../debug/verilog/nanosoc_ss_debug.v | 26 +- .../dma/verilog/nanosoc_ss_dma.v | 22 +- .../expansion/verilog/nanosoc_ss_expansion.v | 48 +- .../verilog/nanosoc_ss_systemctrl.v | 9 +- .../nanosoc_system/verilog/nanosoc_system.v | 197 +++-- system/slcorem0_tech | 2 +- system/sldma230_tech | 2 +- system/socdebug_tech | 2 +- verif/verilog/nanosoc_tb.v | 50 +- 19 files changed, 300 insertions(+), 1048 deletions(-) delete mode 100644 system/nanosoc_chip/chip/verilog/nanosoc_chip_new.v diff --git a/.gitignore b/.gitignore index 27c13fa..4f177e8 100644 --- a/.gitignore +++ b/.gitignore @@ -9,15 +9,16 @@ /software/*/*.bin # Compile Test Code Removal -system/testcodes/*/*.elf -system/testcodes/*/*.ELF -system/testcodes/*/*.hex -system/testcodes/*/*.lst -system/testcodes/*/*.o -system/testcodes/*/*.bin - +/testcodes/*/*.elf +/testcodes/*/*.ELF +/testcodes/*/*.hex +/testcodes/*/*.lst +/testcodes/*/*.o +/testcodes/*/*.bin # Bootrom removal system/src/bootrom/ # Simulation Removal (If running at Tech Level) -sim \ No newline at end of file +sim + +work \ No newline at end of file diff --git a/flist/nanosoc.flist b/flist/nanosoc.flist index fc7bb4a..220cc3e 100644 --- a/flist/nanosoc.flist +++ b/flist/nanosoc.flist @@ -9,26 +9,74 @@ // Copyright � 2021-3, SoC Labs (www.soclabs.org) //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -// Abstract : Verilog Command File for NanoSoC Bus Matrix IP +// Abstract : Verilog Command File for NanoSoC IP //----------------------------------------------------------------------------- // ============= Verilog library extensions =========== +libext+.v+.vlib -// ============= NanoSoC Bus Matrix IP search path ============= -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_chip.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_chip_pads.v +// ============= NanoSoC IP search path ============= +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_chip/chip/verilog/nanosoc_chip.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_chip/pads/glib/verilog/nanosoc_chip_pads.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_cpu.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_sysio.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_sys_ahb_decode.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_apb_subsystem.v +// NanoSoC Subsystems +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_subsystems/interconnect/verilog/nanosoc_ss_interconnect.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_ahb_cs_rom_table.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_mcu_pin_mux.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_mcu_stclkctrl.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_mcu_clkctrl.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_mcu_sysctrl.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_apb_usrt.v -$(SOCLABS_NANOSOC_TECH_DIR)/system/src/verilog/nanosoc_ahb_bootrom.v \ No newline at end of file + +// Bus Matrix ++incdir+$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix +-y $(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_busmatrix/verilog/nanosoc_busmatrix + +// NanoSoC Regions - Bootrom +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/bootrom_0/verilog/nanosoc_bootrom_cpu_0.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/bootrom_0/verilog/nanosoc_region_bootrom_0.v + +// NanoSoC Regions - CPU Memories +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v + +// NanoSoC Regions - Expansion Regions +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/exp/verilog/nanosoc_region_exp.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/expram_h/verilog/nanosoc_region_expram_h.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v + +// NanoSoC Regions - Sysio Region +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/sysio/verilog/nanosoc_region_sysio.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/sysio/verilog/nanosoc_sysctrl.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/sysio/verilog/nanosoc_sysio_apb_ss.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/sysio/verilog/nanosoc_sysio_decode.v + +// NanoSoC Regions - SysTable Region +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/systable/verilog/nanosoc_coresight_systable.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_regions/systable/verilog/nanosoc_region_systable.v + +// NanoSoC Control +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_control/verilog/nanosoc_clkctrl.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_control/verilog/nanosoc_pin_mux.v + +// NanoSoC System +$(SOCLABS_NANOSOC_TECH_DIR)/system/nanosoc_system/verilog/nanosoc_system.v + +// SLCore Files +$(SOCLABS_NANOSOC_TECH_DIR)/system/slcorem0_tech/src/verilog/slcorem0_integration.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/slcorem0_tech/src/verilog/slcorem0_prmu.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/slcorem0_tech/src/verilog/slcorem0_rstctrl.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/slcorem0_tech/src/verilog/slcorem0_stclkctrl.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/slcorem0_tech/src/verilog/slcorem0.v + +// Debug IP +$(SOCLABS_NANOSOC_TECH_DIR)/system/socdebug_tech/controller/verilog/socdebug_adp_control.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/socdebug_tech/controller/verilog/socdebug_ahb.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/socdebug_tech/controller/verilog/socdebug_ft1248_control.v +$(SOCLABS_NANOSOC_TECH_DIR)/system/socdebug_tech/controller/verilog/socdebug_usrt_control.v + +// DMAC IP +$(SOCLABS_NANOSOC_TECH_DIR)/system/sldma230_tech/src/verilog/sldmac230.v ++incdir+$(SOCLABS_NANOSOC_TECH_DIR)/system/sldma230_tech/src/defines + diff --git a/makefile b/makefile index f426e6b..427bc67 100644 --- a/makefile +++ b/makefile @@ -43,7 +43,7 @@ NANOSOC_SW_DIR ?= $(SOCLABS_NANOSOC_TECH_DIR)/software NANOSOC_HTML_DIR := $(NANOSOC_SYSTEM_DIR)/html VERILOG_DIR := $(NANOSOC_SYSTEM_DIR)/verilog -TESTCODES_DIR := $(NANOSOC_SYSTEM_DIR)/testcodes +TESTCODES_DIR := $(SOCLABS_NANOSOC_TECH_DIR)/testcodes # Project System Directory PROJ_SYS_DIR := $(SOCLABS_PROJECT_DIR)/system @@ -77,7 +77,7 @@ ADP_OPTIONS := -define ADP_FILE=\"$(ADP_PATH)\" # Boot Loader image BOOTLOADER ?= bootloader BOOTROM_ADDRW ?= 8 -BOOTROM_HEX ?= $(SOCLABS_NANOSOC_TECH_DIR)/system/testcodes/bootloader/$(BOOTLOADER).hex +BOOTROM_HEX ?= $(SOCLABS_NANOSOC_TECH_DIR)/testcodes/bootloader/$(BOOTLOADER).hex BOOTROM_BUILD_DIR ?= $(SOCLABS_PROJECT_DIR)/system/src/bootrom diff --git a/system/nanosoc_chip/chip/verilog/nanosoc_chip.v b/system/nanosoc_chip/chip/verilog/nanosoc_chip.v index 8c4f729..9025f88 100644 --- a/system/nanosoc_chip/chip/verilog/nanosoc_chip.v +++ b/system/nanosoc_chip/chip/verilog/nanosoc_chip.v @@ -53,7 +53,6 @@ module nanosoc_chip #( wire [FT1248_WIDTH-1:0] FT_MIOSIO_E; // MIOSIO tristate enable (active hi) wire [FT1248_WIDTH-1:0] FT_MIOSIO_Z; // MIOSIO tristate enable (active lo) wire [FT1248_WIDTH-1:0] FT_MIOSIO_I; // MIOSIO tristate input - wire [7:0] FT_CLKDIV; // divider prescaler to ensure SCLK <1MHz // GPIO interface wire [7:0] GPO8; @@ -103,6 +102,7 @@ module nanosoc_chip #( assign CPU_0_SWCLK = swdclk_i; assign CPU_0_SWDI = swdio_i; assign swdio_o = CPU_0_SWDO; + assign swdio_e = CPU_0_SWDOEN; assign swdio_z = !CPU_0_SWDOEN; //-------------------------- @@ -155,6 +155,7 @@ module nanosoc_chip #( // Free-running and Crystal Clock Output .SYS_CLK(SYS_CLK), .SYS_XTALCLK_OUT(SYS_XTALCLK_OUT), + .SYS_SYSRESETn(nrst_i), // Scan Wiring .SYS_SCANENABLE(SYS_SCANENABLE), @@ -176,7 +177,6 @@ module nanosoc_chip #( .FT_MIOSIO_E(FT_MIOSIO_E), .FT_MIOSIO_Z(FT_MIOSIO_Z), .FT_MIOSIO_I(FT_MIOSIO_I), - .FT_CLKDIV(FT_CLKDIV), // GPIO interface .GPO8(GPO8), @@ -190,7 +190,9 @@ module nanosoc_chip #( .P1_IN(P1_IN), .P1_OUT(P1_OUT), .P1_OUTEN(P1_OUTEN), - .P1_ALTFUNC(P1_ALTFUNC) + .P1_ALTFUNC(P1_ALTFUNC), + .P1_OUT_MUX(P1_OUT_MUX), + .P1_OUT_EN_MUX(P1_OUT_EN_MUX) ); endmodule \ No newline at end of file diff --git a/system/nanosoc_chip/chip/verilog/nanosoc_chip_new.v b/system/nanosoc_chip/chip/verilog/nanosoc_chip_new.v deleted file mode 100644 index 8e4958d..0000000 --- a/system/nanosoc_chip/chip/verilog/nanosoc_chip_new.v +++ /dev/null @@ -1,835 +0,0 @@ -module nanosoc_chip #( - parameter SYS_ADDR_W = 32, - parameter SYS_DATA_W = 32, - parameter RAM_ADDR_W = 14, - parameter RAM_DATA_W = 32, - parameter DMA_CHANNEL_NUM = 2, - parameter CLKGATE_PRESENT = 0 - )( - `ifdef POWER_PINS - inout wire VDDIO, - inout wire VSSIO, - inout wire VDD, - inout wire VSS, - `endif - input wire xtal_clk_i, - output wire xtal_clk_o, - input wire nrst_i, - input wire [15:0] p0_i, // level-shifted input from pad - output wire [15:0] p0_o, // output port drive - output wire [15:0] p0_e, // active high output drive enable (pad tech dependent) - output wire [15:0] p0_z, // active low output drive enable (pad tech dependent) - input wire [15:0] p1_i, // level-shifted input from pad - output wire [15:0] p1_o, // output port drive - output wire [15:0] p1_e, // active high output drive enable (pad tech dependent) - output wire [15:0] p1_z, // active low output drive enable (pad tech dependent) - input wire swdio_i, - output wire swdio_o, - output wire swdio_e, - output wire swdio_z, - input wire swdclk_i - ); - - //------------------------------------ - // CMSDK internal wire naming preserved - //------------------------------------ - - wire xtal_clk_in; - wire xtal_clk_out; - wire pll_clk; - wire CLK; - - assign xtal_clk_in = xtal_clk_i; - assign xtal_clk_o = xtal_clk_out; - wire nrst_in = nrst_i; - - wire [15:0] p0_in; // level-shifted input from pad - wire [15:0] p0_out; // output port drive - wire [15:0] p0_out_en; // active high output drive enable (pad tech dependent) - wire [15:0] p0_out_nen; // active low output drive enable (pad tech dependent) - - wire [15:0] p1_in; // level-shifted input from pad - wire [15:0] p1_out; // output port drive - wire [15:0] p1_out_en; // active high output drive enable (pad tech dependent) - wire [15:0] p1_out_nen; // active low output drive enable (pad tech dependent) - wire [15:0] p1_in_mux; // level-shifted input from pad - wire [15:0] p1_out_mux; // output port drive - wire [15:0] p1_out_en_mux; // active high output drive enable (pad tech dependent) - wire [15:0] p1_out_nen_mux; // active low output drive enable (pad tech dependent) - - wire swdio_in; - wire swdio_out; - wire swdio_out_en; - wire swdio_out_nen; - wire swdclk_in; - - wire ft_clk_o; - wire ft_ssn_o; - wire ft_miso_i; - wire ft_miosio_o; - wire ft_miosio_e; - wire ft_miosio_z; - wire ft_miosio_i; - - // -------------------------------------------------------------------------------- - // Port-0 IO pad driver mapping - // -------------------------------------------------------------------------------- - - assign p0_in = p0_i; // level-shifted input from pad - assign p0_o = p0_out; // output port drive - assign p0_e = p0_out_en; // active high output drive enable (pad tech dependent) - assign p0_z = p0_out_nen; // active low output drive enable (pad tech dependent) - - - // -------------------------------------------------------------------------------- - // Port-1 IO pad driver mapping - // -------------------------------------------------------------------------------- - - assign ft_miso_i = p1_i[0]; // FT_MISO INPUT pad configuration - assign p1_in_mux[0] = p1_i[0]; - assign p1_o[0] = 1'b0; - assign p1_e[0] = 1'b0; - assign p1_z[0] = 1'b1; - - assign p1_in_mux[1] = p1_i[1]; // FT_CLK OUTPUT pad configuration - assign p1_o[1] = ft_clk_o; - assign p1_e[1] = 1'b1; - assign p1_z[1] = 1'b0; - - assign ft_miosio_i = p1_i[2]; // FT_MIOSIO INOUT pad configuration - assign p1_in_mux[2] = p1_i[2]; - assign p1_o[2] = ft_miosio_o; - assign p1_e[2] = ft_miosio_e; - assign p1_z[2] = ft_miosio_z; - - assign p1_in_mux[3] = p1_i[3]; // FT_SSN OUTPUT pad configuration - assign p1_o[3] = ft_ssn_o; - assign p1_e[3] = 1'b1; - assign p1_z[3] = 1'b0; - - assign p1_in_mux[15:4] = p1_i[15:4]; // IO MUX controlled bidirectionals - assign p1_o[15:4] = p1_out_mux[15:4]; - assign p1_e[15:4] = p1_out_en_mux[15:4]; - assign p1_z[15:4] = p1_out_nen_mux[15:4]; - - - wire tiehi = 1'b1; - wire tielo = 1'b0; - - //---------------------------------------- - // SoC Clock and Reset Management - //---------------------------------------- - - wire PORESETn;// Power on reset - wire HRESETn; // AHB reset - wire PRESETn; // APB and peripheral reset - wire DBGRESETn; // Debug system reset - wire FCLK; // Free running system clock - wire HCLK; // System clock from PMU - wire DCLK; - wire SCLK; - wire PCLK; // Peripheral clock - wire PCLKG; // Gated PCLK for APB - wire PCLKEN; // Clock divider for AHB to APB bridge - wire APBACTIVE; - - // event signals - wire TXEV; - wire RXEV; - wire nTRST; // JTAG - Test reset (active low) - wire SWDI; // JTAG/SWD - TMS / SWD data input - wire SWCLK; // JTAG/SWD - TCK / SWCLK - wire SWDO; // SWD - SWD data output - wire SWDOEN; // SWD - SWD data output enable - wire SYSRESETREQ; // processor system reset request - wire WDOGRESETREQ; // watchdog system reset request - wire HRESETREQ; // Combined system reset request - wire NANOSOC_SYSRESETREQ; // Combined system reset request - wire clk_ctrl_sys_reset_req; - wire PMUHRESETREQ; - wire PMUDBGRESETREQ; - wire LOCKUP; - wire LOCKUPRESET; - wire SLEEPING; - wire GATEHCLK; // Processor status - safe to gate HCLK - wire WAKEUP; // Wake up request from WIC - wire WICENREQ; // WIC enable request from PMU - wire WICENACK; // WIC enable ack to PMU - wire PMUENABLE; - wire CDBGPWRUPREQ; // Debug Power Up request to PMU - wire CDBGPWRUPACK; // Debug Power Up ACK from PMU - wire SLEEPHOLDREQn; // Sleep extension request from PMU - wire SLEEPHOLDACKn; // Sleep extension request to PMU - wire SYSPWRDOWNACK; - wire DBGPWRDOWNACK; - wire SYSPWRDOWN; - wire DBGPWRDOWN; - wire SYSISOLATEn; - wire SYSRETAINn; - wire DBGISOLATEn; - wire SLEEPDEEP; - wire ADPRESETREQ; - // Scan test dummy signals; not connected until scan insertion - wire TESTMODE; // Test mode enable signal (override synchronizers etc) - wire SCANENABLE; // Scan enable signal - wire SCANINHCLK; // HCLK scan input - wire SCANOUTHCLK; // Scan Chain wire - -// not required for FPGA - assign TESTMODE = 1'b0; - assign SCANENABLE = 1'b0; - assign SCANINHCLK = 1'b0; - assign SCANOUTHCLK = 1'b0; - -// Technology-specific PLL/Frequecy synthesizer would generate -// CLK, FCLK (Free running system clock) from xtal_clk_in - - assign pll_clk = xtal_clk_in; // default to no PLL - assign CLK = (TESTMODE) ? xtal_clk_in : pll_clk; - assign HCLK = FCLK; - - -//? assign HCLKSYS = (INCLUDE_DMA!=0) ? SCLK : HCLK; - - // System Reset request can be from processor or watchdog - // or when lockup happens and the control flag is set. - assign NANOSOC_SYSRESETREQ = SYSRESETREQ | WDOGRESETREQ | - ADPRESETREQ | - (LOCKUP & LOCKUPRESET); - assign clk_ctrl_sys_reset_req = PMUHRESETREQ | HRESETREQ; - - // Clock controller to generate reset and clock signals - nanosoc_mcu_clkctrl #( - .CLKGATE_PRESENT (CLKGATE_PRESENT) - ) u_nanosoc_mcu_clkctrl ( - // inputs - .XTAL1 (CLK), - .NRST (nrst_in), - - .APBACTIVE (APBACTIVE), - .SLEEPING (SLEEPING), - .SLEEPDEEP (SLEEPDEEP), - .LOCKUP (LOCKUP), - .LOCKUPRESET (LOCKUPRESET), - .SYSRESETREQ (clk_ctrl_sys_reset_req), - .DBGRESETREQ (PMUDBGRESETREQ), - .CGBYPASS (TESTMODE), - .RSTBYPASS (TESTMODE), - - // outputs - .XTAL2 (xtal_clk_out), - .FCLK (FCLK), - .PCLK (PCLK), - .PCLKG (PCLKG), - .PCLKEN (PCLKEN), -//?`ifdef CORTEX_M0DESIGNSTART -//? .PORESETn (PORESETn), // for cm0 designstart -//? .HRESETn (HRESETn), // for cm0 designstart -//?`endif - .PRESETn (PRESETn) - ); - - wire gated_hclk; - wire gated_dclk; - wire gated_sclk; - - cortexm0_rst_ctl u_rst_ctl ( - // Inputs - .GLOBALRESETn (nrst_in), - .FCLK (FCLK), - .HCLK (gated_hclk), - .DCLK (gated_dclk), - .SYSRESETREQ (NANOSOC_SYSRESETREQ), - .PMUHRESETREQ (PMUHRESETREQ), - .PMUDBGRESETREQ (PMUDBGRESETREQ), - .RSTBYPASS (TESTMODE), - .SE (SCANENABLE), - - // Outputs - .PORESETn (PORESETn), - .HRESETn (HRESETn), - .DBGRESETn (DBGRESETn), - .HRESETREQ (HRESETREQ) - ); - - - // Cortex-M0 Power management unit - cortexm0_pmu u_cortexm0_pmu ( // Inputs - .FCLK (FCLK), - .PORESETn (PORESETn), - .HRESETREQ (NANOSOC_SYSRESETREQ), // from processor / watchdog - .PMUENABLE (PMUENABLE), // from System Controller - .WICENACK (WICENACK), // from WIC in integration - - .WAKEUP (WAKEUP), // from WIC in integration - .CDBGPWRUPREQ (CDBGPWRUPREQ), - - .SLEEPDEEP (SLEEPDEEP), - .SLEEPHOLDACKn (SLEEPHOLDACKn), - .GATEHCLK (GATEHCLK), - .SYSPWRDOWNACK (SYSPWRDOWNACK), - .DBGPWRDOWNACK (DBGPWRDOWNACK), - .CGBYPASS (TESTMODE), - - // Outputs - .HCLK (gated_hclk), - .DCLK (gated_dclk), - .SCLK (gated_sclk), - .WICENREQ (WICENREQ), - .CDBGPWRUPACK (CDBGPWRUPACK), - .SYSISOLATEn (SYSISOLATEn), - .SYSRETAINn (SYSRETAINn), - .SYSPWRDOWN (SYSPWRDOWN), - .DBGISOLATEn (DBGISOLATEn), - .DBGPWRDOWN (DBGPWRDOWN), - .SLEEPHOLDREQn (SLEEPHOLDREQn), - .PMUDBGRESETREQ (PMUDBGRESETREQ), - .PMUHRESETREQ (PMUHRESETREQ) - ); - - // Bypass clock gating cell in PMU if CLKGATE_PRESENT is 0 - assign HCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_hclk; - assign DCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_dclk; - assign SCLK = (CLKGATE_PRESENT==0) ? FCLK : gated_sclk; - - - // In this example system, power control takes place immediately. - // In a real circuit you might need to add delays in the next two - // signal assignments for correct operation. - assign SYSPWRDOWNACK = SYSPWRDOWN; - assign DBGPWRDOWNACK = DBGPWRDOWN; - - wire exp_penable; - wire exp_pwrite; - wire [11:0] exp_paddr; - wire [31:0] exp_pwdata; - wire exp12_psel; - wire exp12_pready; - wire exp12_pslverr; - wire [31:0] exp12_prdata; - wire exp13_psel; - wire exp13_pready; - wire exp13_pslverr; - wire [31:0] exp13_prdata; - wire exp14_psel; - wire exp14_pready; - wire exp14_pslverr; - wire [31:0] exp14_prdata; - wire exp15_psel; - wire exp15_pready; - wire exp15_pslverr; - wire [31:0] exp15_prdata; - - - // internal peripheral signals - wire uart0_rxd; - wire uart0_txd; - wire uart0_txen; - wire uart1_rxd; - wire uart1_txd; - wire uart1_txen; - wire uart2_rxd; - wire uart2_txd; - wire uart2_txen; - wire timer0_extin; - wire timer1_extin; - - wire [15:0] p0_altfunc; - - wire [15:0] p1_altfunc; - - wire exp_irq0; - wire exp_irq1; - wire exp_irq2; - wire exp_irq3; - wire exp_irqB; - wire exp_irqC; - wire exp_irqD; - - -//---------------------------------------- -// ADP ASCII DEBUG PROTOCOL controller -// AHB MANAGER 0 -//---------------------------------------- - - // ------------------------------- - // ADP engine stream and control interfaces - // ------------------------------- - - wire comio_tx_ready; - wire [7:0] comio_tx_data8; - wire comio_tx_valid; - - wire comio_rx_ready; - wire [7:0] comio_rx_data8; - wire comio_rx_valid; - - wire stdio_tx_ready; - wire [7:0] stdio_tx_data8; - wire stdio_tx_valid; - - wire stdio_rx_ready; - wire [7:0] stdio_rx_data8; - wire stdio_rx_valid; - - wire [7:0] adp_gpo8; - wire [7:0] adp_gpi8; - - assign adp_gpi8 = adp_gpo8; - assign ADPRESETREQ = adp_gpo8[0]; - - // ADP debug controller present - nanosoc_adp_control_v1_0 u_adp_control ( - // Clock and Reset - .ahb_hclk (HCLK), - .ahb_hresetn (HRESETn), - // DMA Control - .com_rx_tready (comio_rx_ready), - .com_rx_tdata (comio_rx_data8), - .com_rx_tvalid (comio_rx_valid), - .com_tx_tready (comio_tx_ready), - .com_tx_tdata (comio_tx_data8), - .com_tx_tvalid (comio_tx_valid), - .stdio_rx_tready (stdio_rx_ready), - .stdio_rx_tdata (stdio_rx_data8), - .stdio_rx_tvalid (stdio_rx_valid), - .stdio_tx_tready (stdio_tx_ready), - .stdio_tx_tdata (stdio_tx_data8), - .stdio_tx_tvalid (stdio_tx_valid), - .gpo8 (adp_gpo8), - .gpi8 (adp_gpi8), - - // AHB-Lite Master Interface - .ahb_hready (HREADY_adp), - .ahb_hresp (HRESP_adp), - .ahb_hrdata (HRDATA_adp), - .ahb_htrans (HTRANS_adp), - .ahb_hwrite (HWRITE_adp), - .ahb_haddr (HADDR_adp), - .ahb_hsize (HSIZE_adp), - .ahb_hburst (HBURST_adp), - .ahb_hmastlock (HMASTLOCK_adp), - .ahb_hprot (HPROT_adp), - .ahb_hwdata (HWDATA_adp) - ); - assign HAUSER_adp [1:0] = 2'b00; // Address USER signals - assign HWUSER_adp [1:0] = 2'b00; // Write-data USER signals - - nanosoc_apb_usrt u_apb_usrt_com ( - .PCLK (PCLK), // Peripheral clock - .PCLKG (PCLKG), // Gated PCLK for bus - .PRESETn (PRESETn), // Reset - - .PSEL (exp14_psel), // APB interface inputs - .PADDR (exp_paddr[11:2]), - .PENABLE (exp_penable), - .PWRITE (exp_pwrite), - .PWDATA (exp_pwdata), - - .PRDATA (exp14_prdata), // APB interface outputs - .PREADY (exp14_pready), - .PSLVERR (exp14_pslverr), - - .ECOREVNUM (4'h0),// Engineering-change-order revision bits - - .TX_VALID_o (stdio_rx_valid), - .TX_DATA8_o (stdio_rx_data8), - .TX_READY_i (stdio_rx_ready), - - .RX_VALID_i (stdio_tx_valid), - .RX_DATA8_i (stdio_tx_data8), - .RX_READY_o (stdio_tx_ready), - - .TXINT ( ), // Transmit Interrupt - .RXINT ( ), // Receive Interrupt - .TXOVRINT ( ), // Transmit Overrun Interrupt - .RXOVRINT ( ), // Receive Overrun Interrupt - .UARTINT ( ) // Combined Interrupt - ); - - wire [7:0] ft_clkdiv = 8'd03; - - nanosoc_ft1248_stream_io_v1_0 #( - .FT1248_WIDTH (1), - .FT1248_CLKON (0) - ) u_ftdio_com ( - .clk (HCLK), - .resetn (HRESETn), - .ft_clkdiv (ft_clkdiv ), - .ft_clk_o (ft_clk_o ), - .ft_ssn_o (ft_ssn_o ), - .ft_miso_i (ft_miso_i ), - .ft_miosio_o (ft_miosio_o ), - .ft_miosio_e (ft_miosio_e ), - .ft_miosio_z (ft_miosio_z ), - .ft_miosio_i (ft_miosio_i ), - .rxd_tready (comio_tx_ready), - .rxd_tdata (comio_tx_data8), - .rxd_tvalid (comio_tx_valid), - .rxd_tlast (1'b0), - .txd_tready (comio_rx_ready), - .txd_tdata (comio_rx_data8), - .txd_tvalid (comio_rx_valid), - .txd_tlast ( ) - ); - - -//---------------------------------------- -// DIRECT MEMORY ACCESS controller -// AHB MANAGER 1 -//---------------------------------------- - - // DMA interface not used in this example system - wire [DMA_CHANNEL_NUM-1:0] dma230_req; // tie off signal. - wire [DMA_CHANNEL_NUM-1:0] dma230_tie0 = {DMA_CHANNEL_NUM{1'b0}}; - - assign dma230_req[0] = exp_drq_ip; - assign dma230_req[1] = exp_drq_op; - - - // DMA done per channel - wire [DMA_CHANNEL_NUM-1:0] dma230_done_ch; - wire dmac_done; - wire dmac_err; - - ///generate if (INCLUDE_DMA != 0) begin : gen_dma - // DMA controller present - pl230_udma u_pl230_udma ( - // Clock and Reset - .hclk (HCLK), - .hresetn (HRESETn), - - // DMA Control - .dma_req (dma230_req), - .dma_sreq (dma230_req), - .dma_waitonreq (dma230_tie0), - .dma_stall (1'b0), - .dma_active (), - .dma_done (dma230_done_ch), - .dma_err (dmac_err), - - // AHB-Lite Master Interface - .hready (HREADY_dma), - .hresp (HRESP_dma), - .hrdata (HRDATA_dma), - .htrans (HTRANS_dma), - .hwrite (HWRITE_dma), - .haddr (HADDR_dma), - .hsize (HSIZE_dma), - .hburst (HBURST_dma), - .hmastlock (HMASTLOCK_dma), - .hprot (HPROT_dma), - .hwdata (HWDATA_dma), - - // APB Slave Interface - .pclken (PCLKEN), - .psel (exp15_psel), - .pen (exp_penable), - .pwrite (exp_pwrite), - .paddr (exp_paddr[11:0]), - .pwdata (exp_pwdata[31:0]), - .prdata (exp15_prdata) - ); - - assign exp15_pready = 1'b1; - assign exp15_pslverr = 1'b0; - assign dmac_done = |dma230_done_ch; // OR all the DMA done together - -/* end else begin : gen_no_pl230_udma - // DMA controller not present - assign HADDR_dma [31:0] = 32'ha2a2a2a2; // Address bus - assign HTRANS_dma [1:0] = 2'b00; // Transfer type - assign HWRITE_dma = 1'b0; // Transfer direction - assign HSIZE_dma [2:0] = 3'b010; // Transfer size - assign HBURST_dma [2:0] = 3'b001; // Burst type - assign HPROT_dma [3:0] = 4'b0010; // Protection control - assign HWDATA_dma [31:0] = 32'hd2d2d2d2; // Write data - assign HMASTLOCK_dma = 1'b0; // Locked Sequence - assign HAUSER_dma [1:0] = 2'b00; // Address USER signals - assign HWUSER_dma [1:0] = 2'b00; // Write-data USER signals - - assign dmac_done = 1'b0; - assign dmac_err = 1'b0; - assign exp15_pready = 1'b1; - assign exp15_pslverr = 1'b0; - assign exp15_prdata = 32'h00000000; - assign dma230_done_ch = {DMA_CHANNEL_NUM{1'b0}}; - - end endgenerate -*/ - - - -//---------------------------------------- -// CORTEX-M0 CPU controller -// AHB MANAGER 3 -//---------------------------------------- - - wire SYS_NMI; // Watchdog nin-maskable interrupt - wire [31:0] SYS_APB_IRQ; // APB subsystem IRQs - wire [15:0] SYS_GPIO0_IRQ; // GPIO-0 IRQs - wire [15:0] SYS_GPIO1_IRQ; // GPIO-1 IRQs - - wire gpio0_combintr; - wire gpio1_combintr; - assign gpio0_combintr = |SYS_GPIO0_IRQ[15:0]; - assign gpio1_combintr = |SYS_GPIO1_IRQ[15:0]; - - wire intnmi_cm0; - wire [31:0] intisr_cm0; - -// match interrupts to CMSDK for validation code reuse - - assign intnmi_cm0 = SYS_NMI; - //assign intisr_cm0[ 5: 0] = SYS_APB_IRQ[ 5: 0]; - assign intisr_cm0[ 0] = exp_irq0; - assign intisr_cm0[ 1] = exp_irq1; - assign intisr_cm0[ 2] = exp_irq2; - assign intisr_cm0[ 3] = exp_irq3; - assign intisr_cm0[ 5: 4] = SYS_APB_IRQ[ 5: 4]; - assign intisr_cm0[ 6] = SYS_APB_IRQ[ 6] | gpio0_combintr; - assign intisr_cm0[ 7] = SYS_APB_IRQ[ 7] | gpio1_combintr; - assign intisr_cm0[14: 8] = SYS_APB_IRQ[14: 8]; - assign intisr_cm0[15] = SYS_APB_IRQ[15] | dmac_done | dmac_err; - assign intisr_cm0[31:16] = SYS_APB_IRQ[31:16]| SYS_GPIO0_IRQ[15:0]; - - assign HAUSER_cpu [1:0] = 2'b00; // Address USER signals - assign HWUSER_cpu [1:0] = 2'b00; // Write-data USER signals - - - // Cortex-M0 integration level - nanosoc_cpu u_nanosoc_cpu ( - .HCLK (gated_hclk), //HCLK), - .FCLK (FCLK), - .DCLK (DCLK), - .SCLK (SCLK), - .HRESETn (HRESETn), - .PORESETn (PORESETn), - .DBGRESETn (DBGRESETn), - .RSTBYPASS (TESTMODE), - .DFTSE (SCANENABLE), - // AHB port - .HADDR (HADDR_cpu), - .HTRANS (HTRANS_cpu), - .HWRITE (HWRITE_cpu), - .HSIZE (HSIZE_cpu), - .HBURST (HBURST_cpu), - .HPROT (HPROT_cpu), - .HWDATA (HWDATA_cpu), - .HMASTLOCK (HMASTLOCK_cpu), - .HREADY (HREADY_cpu), -// .HAUSER (HAUSER_cpu), -// .HWUSER (HWUSER_cpu), - .HRDATA (HRDATA_cpu), - .HRESP (HRESP_cpu), -// .HRUSER (HRUSER_cpu), - // sideband signals - .NMI (intnmi_cm0), // Non-maskable interrupt input - .IRQ (intisr_cm0[31:0]), // Interrupt request inputs - .TXEV (TXEV), // Event output (SEV executed) - .RXEV (RXEV), // Event input - // MISCELLANEOUS --------------------- - .SLEEPING (SLEEPING), - .SLEEPDEEP (SLEEPDEEP), - .WAKEUP (WAKEUP ), // Wake up request from WIC - .WICENREQ (WICENREQ ), // WIC enable request from PMU - .WICENACK (WICENACK ), // WIC enable ack to PMU - .SLEEPHOLDREQn (SLEEPHOLDREQn), - .SLEEPHOLDACKn (SLEEPHOLDACKn), - .CDBGPWRUPACK (CDBGPWRUPACK), - .CDBGPWRUPREQ (CDBGPWRUPREQ), - .LOCKUP (LOCKUP), // Core is locked-up - .GATEHCLK (GATEHCLK), - .SYSRESETREQ (SYSRESETREQ), // System reset request - .WDOGRESETREQ (WDOGRESETREQ), // Watchdog HW reset request - .ADPRESETREQ (ADPRESETREQ), // ADP debugger reset request - - // Debug - JTAG or Serial wire - // inputs - .SWDI (SWDI), - .SWCLK (SWCLK), - // outputs - .SWDO (SWDO), - .SWDOEN (SWDOEN) - ); - - assign RXEV = dmac_done; // Generate event when a DMA operation completed. - - -//------------------------------------ -// internal wires - - assign p0_out_nen = ~p0_out_en; //active low pad drive option - assign p1_out_nen_mux = ~p1_out_en_mux; //active low pad drive option - - localparam BASEADDR_GPIO0 = 32'h4001_0000; - localparam BASEADDR_GPIO1 = 32'h4001_1000; - localparam BASEADDR_SYSROMTABLE = 32'hf000_0000; - - nanosoc_sysio u_nanosoc_sysio ( - .FCLK (FCLK ), // free-running clock - .PORESETn (PORESETn ), // Power-On-Reset (active-low) - .TESTMODE (TESTMODE ), // Test-mode override for testability - .HCLK (HCLK ), // AHB interconnect clock - .HRESETn (HRESETn ), // AHB interconnect reset (active-low) - // Common AHB signals - .HSEL (HSEL_sysio ), - .HADDR (HADDR_sysio ), - .HBURST (HBURST_sysio ), - .HMASTLOCK (HMASTLOCK_sysio), - .HPROT (HPROT_sysio ), - .HSIZE (HSIZE_sysio ), - .HTRANS (HTRANS_sysio ), - .HWDATA (HWDATA_sysio ), - .HWRITE (HWRITE_sysio ), - .HREADY (HREADYMUX_sysio), - .HRDATA (HRDATA_sysio ), - .HRESP (HRESP_sysio ), - .HREADYOUT (HREADYOUT_sysio), - // APB clocking - .PCLK (PCLK ), - .PCLKG (PCLKG ), - .PRESETn (PRESETn ), - .PCLKEN (PCLKEN ), - // APB expansion select outputs - .exp12_psel (exp12_psel ), - .exp13_psel (exp13_psel ), - .exp14_psel (exp14_psel ), - .exp15_psel (exp15_psel ), - .exp_pwdata (exp_pwdata ), - .exp_paddr (exp_paddr ), - .exp_pwrite (exp_pwrite ), - .exp_penable (exp_penable ), - // APB expansion interface inputs - .exp12_prdata (exp12_prdata ), - .exp12_pready (exp12_pready ), - .exp12_pslverr (exp12_pslverr), - .exp13_prdata (exp13_prdata ), - .exp13_pready (exp13_pready ), - .exp13_pslverr (exp13_pslverr), - .exp14_prdata (exp14_prdata ), - .exp14_pready (exp14_pready ), - .exp14_pslverr (exp14_pslverr), - .exp15_prdata (exp15_prdata ), - .exp15_pready (exp15_pready ), - .exp15_pslverr (exp15_pslverr), - // CPU sideband signalling - .SYS_NMI (SYS_NMI ), - .SYS_APB_IRQ (SYS_APB_IRQ ), - // CPU specific power/reset control - .REMAP_CTRL (ROM_MAP ), - .APBACTIVE (APBACTIVE ), - .SYSRESETREQ (SYSRESETREQ ), - .WDOGRESETREQ (WDOGRESETREQ ), - .LOCKUP (LOCKUP ), - .LOCKUPRESET (LOCKUPRESET ), - .PMUENABLE (PMUENABLE ), - // chip IO - .SYS_GPIO0_IRQ (SYS_GPIO0_IRQ ), - .SYS_GPIO1_IRQ (SYS_GPIO1_IRQ ), - // IO signalling - .uart0_rxd (uart1_txd), //(uart0_rxd ), // crossover - .uart0_txd (uart0_txd ), - .uart0_txen (uart0_txen ), - .uart1_rxd (uart0_txd), //uart1_rxd ), // crossover - .uart1_txd (uart1_txd ), - .uart1_txen (uart1_txen ), - .uart2_rxd (uart2_rxd ), - .uart2_txd (uart2_txd ), - .uart2_txen (uart2_txen ), - .timer0_extin (timer0_extin ), - .timer1_extin (timer1_extin ), - // GPIO port signalling - .p0_in (p0_in ), - .p0_out (p0_out ), - .p0_outen (p0_out_en ), - .p0_altfunc (p0_altfunc ), - - .p1_in (p1_in ), - .p1_out (p1_out ), - .p1_outen (p1_out_en ), - .p1_altfunc (p1_altfunc ) - ); - - assign REMAP[3] = 1'b0; - assign REMAP[2] = 1'b0; - assign REMAP[1] = 1'b0; - assign REMAP[0] =!ROM_MAP; - - assign exp12_pready = 1'b1; - assign exp13_pready = 1'b1; - assign exp12_pslverr = 1'b0; - assign exp13_pslverr = 1'b0; - assign exp12_prdata = 32'h0; - assign exp13_prdata = 32'h0; - - - // Serial wire debug is used. nTRST, TDI and TDO are not needed - - -//---------------------------------------- -// I/O port pin muxing and tristate -//---------------------------------------- - - assign SWCLK = swdclk_i; - assign SWDI = swdio_i; - assign swdio_o = SWDO; - assign swdio_e = SWDOEN; - assign swdio_z = !SWDOEN; - - nanosoc_mcu_pin_mux u_pin_mux ( - // UART - .uart0_rxd (uart0_rxd), - .uart0_txd (uart0_txd), - .uart0_txen (uart0_txen), - .uart1_rxd (uart1_rxd), - .uart1_txd (uart1_txd), - .uart1_txen (uart1_txen), - .uart2_rxd (uart2_rxd), - .uart2_txd (uart2_txd), - .uart2_txen (uart2_txen), - - // Timer - .timer0_extin (timer0_extin), - .timer1_extin (timer1_extin), - - - // IO Ports - .p0_in ( ), // was (p0_in) now from pad inputs), - .p0_out (p0_out), - .p0_outen (p0_out_en), - .p0_altfunc (p0_altfunc), - - .p1_in ( ), // was(p1_in) now from pad inputs), - .p1_out (p1_out), - .p1_outen (p1_out_en), - .p1_altfunc (p1_altfunc), - - // Debug - .i_trst_n ( ), - .i_swditms ( ), //i_swditms), - .i_swclktck ( ), //i_swclktck), - .i_tdi ( ), - .i_tdo ( ), - .i_tdoen_n ( ), - .i_swdo ( ), - .i_swdoen ( ), - - // IO pads - .p1_out_mux (p1_out_mux), - .p1_out_en_mux (p1_out_en_mux), - .P0 ( ), //P0), - .P1 ( ), //P1), - - .nTRST (nTRST), // Not needed if serial-wire debug is used - .TDI (1'b0), // Not needed if serial-wire debug is used - .SWDIOTMS ( ), //SWDIOTMS), - .SWCLKTCK ( ), //SWCLKTCK), - .TDO ( ) // Not needed if serial-wire debug is used - - ); - -endmodule - - - diff --git a/system/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v b/system/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v index 56dfdfc..a2b921e 100644 --- a/system/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v +++ b/system/nanosoc_regions/dmem_0/verilog/nanosoc_region_dmem_0.v @@ -36,6 +36,8 @@ module nanosoc_region_dmem_0 #( // SRAM Instantiation sl_ahb_sram #( + .SYS_ADDR_W (SYS_ADDR_W), + .SYS_DATA_W (SYS_DATA_W), .RAM_ADDR_W (DMEM_RAM_ADDR_W) ) u_dmem_0 ( // AHB Inputs @@ -47,7 +49,7 @@ module nanosoc_region_dmem_0 #( .HSIZE (HSIZE), .HWRITE (HWRITE), .HWDATA (HWDATA), - .HREADY (HREADYMUX), + .HREADY (HREADY), // AHB Outputs .HREADYOUT (HREADYOUT), diff --git a/system/nanosoc_regions/expram_h/verilog/nanosoc_region_expram_h.v b/system/nanosoc_regions/expram_h/verilog/nanosoc_region_expram_h.v index c93b82f..78b3f18 100644 --- a/system/nanosoc_regions/expram_h/verilog/nanosoc_region_expram_h.v +++ b/system/nanosoc_regions/expram_h/verilog/nanosoc_region_expram_h.v @@ -37,6 +37,8 @@ module nanosoc_region_expram_h #( // AHB to SRAM bridge sl_ahb_sram #( + .SYS_ADDR_W (SYS_ADDR_W), + .SYS_DATA_W (SYS_DATA_W), .RAM_ADDR_W (EXPRAM_H_RAM_ADDR_W) ) u_expram_h ( // AHB Inputs @@ -48,7 +50,7 @@ module nanosoc_region_expram_h #( .HSIZE (HSIZE), .HWRITE (HWRITE), .HWDATA (HWDATA), - .HREADY (HREADYMUX), + .HREADY (HREADY), // AHB Outputs .HREADYOUT (HREADYOUT), diff --git a/system/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v b/system/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v index 5e43f89..b3db369 100644 --- a/system/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v +++ b/system/nanosoc_regions/expram_l/verilog/nanosoc_region_expram_l.v @@ -37,6 +37,8 @@ module nanosoc_region_expram_l #( // SRAM Instantiation sl_ahb_sram #( + .SYS_ADDR_W (SYS_ADDR_W), + .SYS_DATA_W (SYS_DATA_W), .RAM_ADDR_W (EXPRAM_L_RAM_ADDR_W) ) u_expram_l ( // AHB Inputs @@ -48,7 +50,7 @@ module nanosoc_region_expram_l #( .HSIZE (HSIZE), .HWRITE (HWRITE), .HWDATA (HWDATA), - .HREADY (HREADYMUX), + .HREADY (HREADY), // AHB Outputs .HREADYOUT (HREADYOUT), diff --git a/system/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v b/system/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v index 38f887e..fd17263 100644 --- a/system/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v +++ b/system/nanosoc_regions/imem_0/verilog/nanosoc_region_imem_0.v @@ -38,6 +38,8 @@ module nanosoc_region_imem_0 #( // SRAM Instantiation sl_ahb_sram #( + .SYS_ADDR_W (SYS_ADDR_W), + .SYS_DATA_W (SYS_DATA_W), .RAM_ADDR_W (IMEM_RAM_ADDR_W), .FILENAME (IMEM_RAM_FPGA_IMG) ) u_imem_0 ( @@ -50,7 +52,7 @@ module nanosoc_region_imem_0 #( .HSIZE (HSIZE), .HWRITE (HWRITE), .HWDATA (HWDATA), - .HREADY (HREADYMUX), + .HREADY (HREADY), // AHB Outputs .HREADYOUT (HREADYOUT), diff --git a/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v b/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v index e41f96a..b4e4702 100644 --- a/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v +++ b/system/nanosoc_subsystems/cpu/verilog/nanosoc_ss_cpu.v @@ -76,6 +76,7 @@ module nanosoc_ss_cpu #( input wire CPU_0_HRESP, // Transfer response // Bootrom 0 AHB Lite port + input wire BOOTROM_0_HSEL, // Select input wire [31:0] BOOTROM_0_HADDR, // Address bus input wire [1:0] BOOTROM_0_HTRANS, // Transfer type input wire BOOTROM_0_HWRITE, // Transfer direction @@ -87,8 +88,10 @@ module nanosoc_ss_cpu #( output wire [31:0] BOOTROM_0_HRDATA, // Read data bus output wire BOOTROM_0_HREADY, // HREADY feedback output wire BOOTROM_0_HRESP, // Transfer response + output wire BOOTROM_0_HREADYOUT, // AHB ready out // IMEM 0 AHB Lite port + input wire IMEM_0_HSEL, // Select input wire [31:0] IMEM_0_HADDR, // Address bus input wire [1:0] IMEM_0_HTRANS, // Transfer type input wire IMEM_0_HWRITE, // Transfer direction @@ -100,8 +103,10 @@ module nanosoc_ss_cpu #( output wire [31:0] IMEM_0_HRDATA, // Read data bus output wire IMEM_0_HREADY, // HREADY feedback output wire IMEM_0_HRESP, // Transfer response + output wire IMEM_0_HREADYOUT, // AHB ready out // DMEM 0 AHB Lite port + input wire DMEM_0_HSEL, // Select input wire [31:0] DMEM_0_HADDR, // Address bus input wire [1:0] DMEM_0_HTRANS, // Transfer type input wire DMEM_0_HWRITE, // Transfer direction @@ -113,6 +118,7 @@ module nanosoc_ss_cpu #( output wire [31:0] DMEM_0_HRDATA, // Read data bus output wire DMEM_0_HREADY, // HREADY feedback output wire DMEM_0_HRESP, // Transfer response + output wire DMEM_0_HREADYOUT, // AHB ready out // CPU Sideband signalling input wire CPU_0_NMI, // Non-Maskable Interrupt request @@ -135,19 +141,19 @@ module nanosoc_ss_cpu #( // CPU Core 0 Instantiation // ------------------------------- slcorem0 #( - .ACG (CLKGATE_PRESENT), // Architectural clock gating - .BE (BE), // Big-endian - .BKPT (BKPT), // Number of breakpoint comparators - .DBG (DBG), // Debug configuration - .JTAGnSW (INCLUDE_JTAG), // Debug port interface: JTAGnSW - .NUMIRQ (NUMIRQ), // Number of Interrupts - .RAR (RESET_ALL_REGS), // Reset All Registers - .SMUL (SMUL), // Multiplier configuration - .SYST (SYST), // SysTick - .WIC (WIC), // Wake-up interrupt controller support - .WICLINES (WICLINES), // Supported WIC lines - .WPT (WPT), // Number of DWT comparators - .ROMTABLE_BASE (ROMTABLE_BASE) + .CLKGATE_PRESENT (CLKGATE_PRESENT), // Architectural clock gating + .BE (BE), // Big-endian + .BKPT (BKPT), // Number of breakpoint comparators + .DBG (DBG), // Debug configuration + .INCLUDE_JTAG (INCLUDE_JTAG), // Debug port interface: JTAGnSW + .NUMIRQ (NUMIRQ), // Number of Interrupts + .RESET_ALL_REGS (RESET_ALL_REGS), // Reset All Registers + .SMUL (SMUL), // Multiplier configuration + .SYST (SYST), // SysTick + .WIC (WIC), // Wake-up interrupt controller support + .WICLINES (WICLINES), // Supported WIC lines + .WPT (WPT), // Number of DWT comparators + .ROMTABLE_BASE (ROMTABLE_BASE) ) u_cpu_0 ( // System Input Clocks and Resets .SYS_FCLK(SYS_FCLK), diff --git a/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v b/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v index 3257983..3ac14db 100644 --- a/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v +++ b/system/nanosoc_subsystems/debug/verilog/nanosoc_ss_debug.v @@ -17,7 +17,8 @@ module nanosoc_ss_debug #( // SoCDebug Parameters parameter PROMPT_CHAR = "]", parameter integer FT1248_WIDTH = 1, // FTDI Interface 1,2,4 width supported - parameter integer FT1248_CLKON = 1 // FTDI clock always on - else quiet when no access + parameter integer FT1248_CLKON = 1, // FTDI clock always on - else quiet when no access + parameter [7:0] FT1248_CLKDIV = 8'd03 // Clock Division Ratio )( // System Clocks and Resets input wire SYS_HCLK, @@ -57,7 +58,6 @@ module nanosoc_ss_debug #( output wire [FT1248_WIDTH-1:0] FT_MIOSIO_E, // MIOSIO tristate output enable (active hi) output wire [FT1248_WIDTH-1:0] FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo) input wire [FT1248_WIDTH-1:0] FT_MIOSIO_I, // MIOSIO tristate input - input wire [7:0] FT_CLKDIV, // divider prescaler to ensure SCLK <1MHz // GPIO interface output wire [7:0] GPO8, @@ -67,11 +67,12 @@ module nanosoc_ss_debug #( socdebug_ahb #( .PROMPT_CHAR(PROMPT_CHAR), .FT1248_WIDTH(FT1248_WIDTH), - .FT1248_CLKON(FT1248_CLKON) - ) u_socdebbug ( + .FT1248_CLKON(FT1248_CLKON), + .FT1248_CLKDIV(FT1248_CLKDIV) + ) u_socdebug ( // AHB-lite Master Interface - ADP - .HCLK(DEBUG_SYS_HCLK), - .HRESETn(DEBUG_SYS_HRESETn), + .HCLK(SYS_HCLK), + .HRESETn(SYS_HRESETn), .HADDR32_o(DEBUG_HADDR), .HBURST3_o(DEBUG_HBURST), .HMASTLOCK_o(DEBUG_HMASTLOCK), @@ -80,14 +81,14 @@ module nanosoc_ss_debug #( .HTRANS2_o(DEBUG_HTRANS), .HWDATA32_o(DEBUG_HWDATA), .HWRITE_o(DEBUG_HWRITE), - .HRDATA32_i(DEBUG_HRDATA32), + .HRDATA32_i(DEBUG_HRDATA), .HREADY_i(DEBUG_HREADY), .HRESP_i(DEBUG_HRESP), // APB Slave Interface - USRT - .PCLK(DEBUG_PCLK), - .PCLKG(DEBUG_PCLKG), - .PRESETn(DEBUG_PRESETn), + .PCLK(SYS_PCLK), + .PCLKG(SYS_PCLKG), + .PRESETn(SYS_PRESETn), .PSEL_i(DEBUG_PSEL), .PADDR_i(DEBUG_PADDR[11:2]), .PENABLE_i(DEBUG_PENABLE), @@ -105,11 +106,10 @@ module nanosoc_ss_debug #( .FT_MIOSIO_E(FT_MIOSIO_E), .FT_MIOSIO_Z(FT_MIOSIO_Z), .FT_MIOSIO_I(FT_MIOSIO_I), - .FT_CLKDIV(FT_CLKDIV), // GPIO interface - .GPO8_o(GPO8_o), - .GPI8_i(GPI8_i) + .GPO8_o(GPO8), + .GPI8_i(GPI8) ); endmodule \ No newline at end of file diff --git a/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v b/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v index 5c835ce..e2af9bf 100644 --- a/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v +++ b/system/nanosoc_subsystems/dma/verilog/nanosoc_ss_dma.v @@ -81,7 +81,7 @@ module nanosoc_ss_dma #( sldmac230 #( .SYS_ADDR_W (SYS_ADDR_W), .SYS_DATA_W (SYS_DATA_W), - .CFG_ADDR_W (CFG_ADDR_W), + .CFG_ADDR_W (DMAC_0_CFG_ADDR_W), .CHANNEL_NUM (DMAC_0_CHANNEL_NUM) ) u_dmac_0 ( // AHB Clocks and Resets @@ -120,20 +120,20 @@ module nanosoc_ss_dma #( // DMA Controller 1 Instantiation - Not implemented // ------------------------------- // AHB Tie-off signals - assign DMAC_1_HADDR = 32'b0; - assign DMAC_1_HTRANS = 2'b0; - assign DMAC_1_HWRITE = 1'b0; - assign DMAC_1_HSIZE = 3'b0; - assign DMAC_1_HBURST = 3'b0; - assign DMAC_1_HPROT = 4'0; - assign DMAC_1_HWDATA = 32'b0; + assign DMAC_1_HADDR = 32'b0; + assign DMAC_1_HTRANS = 2'b0; + assign DMAC_1_HWRITE = 1'b0; + assign DMAC_1_HSIZE = 3'b0; + assign DMAC_1_HBURST = 3'b0; + assign DMAC_1_HPROT = 4'b0; + assign DMAC_1_HWDATA = 32'b0; assign DMAC_1_HMASTLOCK = 1'b0; // APB Tie-off signals - assign DMAC_1_PRDATA = 32'b0; + assign DMAC_1_PRDATA = 32'b0; // DMA Status Tie-off signals - assign DMAC_1_DMA_DONE = 0; - assign DMAC_1_DMA_ERR = 0; + assign DMAC_1_DMA_DONE = 0; + assign DMAC_1_DMA_ERR = 0; endmodule \ No newline at end of file diff --git a/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v b/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v index 3f3cf17..cc200e3 100644 --- a/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v +++ b/system/nanosoc_subsystems/expansion/verilog/nanosoc_ss_expansion.v @@ -41,32 +41,32 @@ module nanosoc_ss_expansion #( output wire [31:0] EXP_HRDATA, // SRAM Low Region AHB Port - input wire EXPSRAM_L_HSEL, - input wire [SYS_ADDR_W-1:0] EXPSRAM_L_HADDR, - input wire [1:0] EXPSRAM_L_HTRANS, - input wire [2:0] EXPSRAM_L_HSIZE, - input wire [3:0] EXPSRAM_L_HPROT, - input wire EXPSRAM_L_HWRITE, - input wire EXPSRAM_L_HREADY, - input wire [31:0] EXPSRAM_L_HWDATA, + input wire EXPRAM_L_HSEL, + input wire [SYS_ADDR_W-1:0] EXPRAM_L_HADDR, + input wire [1:0] EXPRAM_L_HTRANS, + input wire [2:0] EXPRAM_L_HSIZE, + input wire [3:0] EXPRAM_L_HPROT, + input wire EXPRAM_L_HWRITE, + input wire EXPRAM_L_HREADY, + input wire [31:0] EXPRAM_L_HWDATA, - output wire EXPSRAM_L_HREADYOUT, - output wire EXPSRAM_L_HRESP, - output wire [31:0] EXPSRAM_L_HRDATA, + output wire EXPRAM_L_HREADYOUT, + output wire EXPRAM_L_HRESP, + output wire [31:0] EXPRAM_L_HRDATA, // SRAM High Region AHB Port - input wire EXPSRAM_H_HSEL, - input wire [SYS_ADDR_W-1:0] EXPSRAM_H_HADDR, - input wire [1:0] EXPSRAM_H_HTRANS, - input wire [2:0] EXPSRAM_H_HSIZE, - input wire [3:0] EXPSRAM_H_HPROT, - input wire EXPSRAM_H_HWRITE, - input wire EXPSRAM_H_HREADY, - input wire [31:0] EXPSRAM_H_HWDATA, + input wire EXPRAM_H_HSEL, + input wire [SYS_ADDR_W-1:0] EXPRAM_H_HADDR, + input wire [1:0] EXPRAM_H_HTRANS, + input wire [2:0] EXPRAM_H_HSIZE, + input wire [3:0] EXPRAM_H_HPROT, + input wire EXPRAM_H_HWRITE, + input wire EXPRAM_H_HREADY, + input wire [31:0] EXPRAM_H_HWDATA, - output wire EXPSRAM_H_HREADYOUT, - output wire EXPSRAM_H_HRESP, - output wire [31:0] EXPSRAM_H_HRDATA, + output wire EXPRAM_H_HREADYOUT, + output wire EXPRAM_H_HRESP, + output wire [31:0] EXPRAM_H_HRDATA, // Interrupt and DMAC Connections output wire [3:0] EXP_IRQ, @@ -82,8 +82,8 @@ module nanosoc_ss_expansion #( .SYS_DATA_W(SYS_DATA_W) ) u_region_exp ( // Clock and Reset - .HCLK(HCLK), - .HRESETn(HRESETn), + .HCLK(SYS_HCLK), + .HRESETn(SYS_HRESETn), // AHB Subordinate Port .HSEL(EXP_HSEL), diff --git a/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v b/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v index 5b8b683..24e823b 100644 --- a/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v +++ b/system/nanosoc_subsystems/systemctrl/verilog/nanosoc_ss_systemctrl.v @@ -26,6 +26,7 @@ module nanosoc_ss_systemctrl #( output wire SYS_XTALCLK_OUT, // Crystal Clock Output // System Input Clocks and Resets + input wire SYS_SYSRESETn, // System Reset input wire SYS_PORESETn, // Power-On-Reset reset (active-low) input wire SYS_TESTMODE, // Reset bypass in scan test input wire SYS_HCLK, // AHB clock @@ -194,12 +195,12 @@ module nanosoc_ss_systemctrl #( // IO Ports .p0_in ( ), // was (p0_in) now from pad inputs), .p0_out (P0_OUT), - .p0_outen (P0_OUT_EN), + .p0_outen (P0_OUTEN), .p0_altfunc (P0_ALTFUNC), .p1_in ( ), // was(p1_in) now from pad inputs), .p1_out (P1_OUT), - .p1_outen (P1_OUT_EN), + .p1_outen (P1_OUTEN), .p1_altfunc (P1_ALTFUNC), // Debug @@ -240,8 +241,8 @@ module nanosoc_ss_systemctrl #( .TESTMODE(SYS_TESTMODE), // AHB interface - .HCLK(SYSIO_SYS_HCLK), - .HRESETn(SYSIO_SYS_HRESETn), + .HCLK(SYS_HCLK), + .HRESETn(SYS_HRESETn), .HSEL(SYSIO_HSEL), .HADDR(SYSIO_HADDR), .HBURST(SYSIO_HBURST), diff --git a/system/nanosoc_system/verilog/nanosoc_system.v b/system/nanosoc_system/verilog/nanosoc_system.v index d083b9f..24b2146 100644 --- a/system/nanosoc_system/verilog/nanosoc_system.v +++ b/system/nanosoc_system/verilog/nanosoc_system.v @@ -58,14 +58,16 @@ module nanosoc_system #( // SoCDebug Parameters parameter PROMPT_CHAR = "]", - parameter integer FT1248_WIDTH = 1, // FTDI Interface 1,2,4 width supported - parameter integer FT1248_CLKON = 1, // FTDI clock always on - else quiet when no access + parameter integer FT1248_WIDTH = 1, // FTDI Interface 1,2,4 width supported + parameter integer FT1248_CLKON = 1, // FTDI clock always on - else quiet when no access + parameter [7:0] FT1248_CLKDIV = 8'd03, // Clock Division Ratio // Address of System ROM Table parameter SYSTABLE_BASE = 32'hF000_0000 // Base Address of System ROM Table ) ( // Free-running and Crystal Clock Output input wire SYS_CLK, // System Input Clock + input wire SYS_SYSRESETn, // System Reset output wire SYS_XTALCLK_OUT, // Crystal Clock Output // Scan Wiring @@ -88,7 +90,6 @@ module nanosoc_system #( output wire [FT1248_WIDTH-1:0] FT_MIOSIO_E, // MIOSIO tristate output enable (active hi) output wire [FT1248_WIDTH-1:0] FT_MIOSIO_Z, // MIOSIO tristate output enable (active lo) input wire [FT1248_WIDTH-1:0] FT_MIOSIO_I, // MIOSIO tristate input - input wire [7:0] FT_CLKDIV, // divider prescaler to ensure SCLK <1MHz // GPIO interface output wire [7:0] GPO8, @@ -103,7 +104,7 @@ module nanosoc_system #( output wire [15:0] P1_OUT, // GPIO 1 outputs output wire [15:0] P1_OUTEN, // GPIO 1 output enables output wire [15:0] P1_ALTFUNC, // GPIO 1 alternate function (pin mux) - output wire [15:0] P1_OUT_MUX, // GPIO 1 aOutput Port Drive + output wire [15:0] P1_OUT_MUX, // GPIO 1 Output Port Drive output wire [15:0] P1_OUT_EN_MUX // Active High output drive enable (pad tech dependent) ); //-------------------------- @@ -117,7 +118,6 @@ module nanosoc_system #( //-------------------------- // System Input Clocks and Resets wire SYS_FCLK; // Free running clock - wire SYS_SYSRESETn; // System Reset // System Reset Request Signals wire SYS_SYSRESETREQ; // System Request from System Managers @@ -137,14 +137,12 @@ module nanosoc_system #( // Power Management Signals wire SYS_PMUENABLE; // Power Management Enable wire SYS_PMUDBGRESETREQ; // Power Management Debug Reset Req - - // Reset Request Wiring - //-------------------------- - - assign SYS_SYSRESETREQ = CPU_0_SYSRESETREQ - | DEBUG_RESETREQ - | SYS_WDOGRESETREQ - | (SYS_LOCKUPRESET & CPU_0_LOCKUP); + + // Sysio APB driving signals - To all APB Components + wire SYSIO_PENABLE; + wire SYSIO_PWRITE; + wire [APB_ADDR_W-1:0] SYSIO_PADDR; + wire [APB_DATA_W-1:0] SYSIO_PWDATA; //-------------------------- // CPU Subsystem @@ -167,6 +165,7 @@ module nanosoc_system #( wire CPU_0_HRESP; // Transfer response // Bootrom 0 Region Wiring - To Interconnect Subsystem + wire BOOTROM_0_HSEL; // Select wire [31:0] BOOTROM_0_HADDR; // Address bus wire [1:0] BOOTROM_0_HTRANS; // Transfer type wire BOOTROM_0_HWRITE; // Transfer direction @@ -180,6 +179,7 @@ module nanosoc_system #( wire BOOTROM_0_HRESP; // Transfer response // Instruction Memory 0 Region Wiring - To Interconnect Subsystem + wire IMEM_0_HSEL; // Select wire [31:0] IMEM_0_HADDR; // Address bus wire [1:0] IMEM_0_HTRANS; // Transfer type wire IMEM_0_HWRITE; // Transfer direction @@ -193,6 +193,7 @@ module nanosoc_system #( wire IMEM_0_HRESP; // Transfer response // Data Memory 0 Region Wiring - To Interconnect Subsystem + wire DMEM_0_HSEL; // Select wire [31:0] DMEM_0_HADDR; // Address bus wire [1:0] DMEM_0_HTRANS; // Transfer type wire DMEM_0_HWRITE; // Transfer direction @@ -216,23 +217,6 @@ module nanosoc_system #( wire CPU_0_SLEEPING; // Processor status - sleeping wire CPU_0_SLEEPDEEP; // Processor status - deep sleep - // Interrupt Wiring - //-------------------------- - - assign CPU_0_IRQ [3:0] = EXP_IRQ [3:0]; - assign CPU_0_IRQ [ 5: 4] = SYS_APB_IRQ[ 5: 4]; - assign CPU_0_IRQ [ 6] = SYS_APB_IRQ[ 6] | |SYS_GPIO0_ANY_IRQ; - assign CPU_0_IRQ [ 7] = SYS_APB_IRQ[ 7] | |SYS_GPIO1_ANY_IRQ; - assign CPU_0_IRQ [14: 8] = SYS_APB_IRQ[14: 8]; - assign CPU_0_IRQ [15] = SYS_APB_IRQ[15] | DMAC_ANY_DONE | DMAC_ANY_ERROR; - assign CPU_0_IRQ [31:16] = SYS_APB_IRQ[31:16]| SYS_GPIO0_IRQ[15:0]; - - - // Sideband Wiring - //-------------------------- - - assign CPU_0_RXEV = DMAC_ANY_DONE; - // Instantiate Subsystem //-------------------------- @@ -290,6 +274,7 @@ module nanosoc_system #( .CPU_0_HRESP(CPU_0_HRESP), // Bootrom 0 AHB Lite port + .BOOTROM_0_HSEL(BOOTROM_0_HSEL), .BOOTROM_0_HADDR(BOOTROM_0_HADDR), .BOOTROM_0_HTRANS(BOOTROM_0_HTRANS), .BOOTROM_0_HWRITE(BOOTROM_0_HWRITE), @@ -301,8 +286,10 @@ module nanosoc_system #( .BOOTROM_0_HRDATA(BOOTROM_0_HRDATA), .BOOTROM_0_HREADY(BOOTROM_0_HREADY), .BOOTROM_0_HRESP(BOOTROM_0_HRESP), + .BOOTROM_0_HREADYOUT(BOOTROM_0_HREADYOUT), // IMEM 0 AHB Lite port + .IMEM_0_HSEL(IMEM_0_HSEL), .IMEM_0_HADDR(IMEM_0_HADDR), .IMEM_0_HTRANS(IMEM_0_HTRANS), .IMEM_0_HWRITE(IMEM_0_HWRITE), @@ -314,8 +301,10 @@ module nanosoc_system #( .IMEM_0_HRDATA(IMEM_0_HRDATA), .IMEM_0_HREADY(IMEM_0_HREADY), .IMEM_0_HRESP(IMEM_0_HRESP), + .IMEM_0_HREADYOUT(IMEM_0_HREADYOUT), // DMEM 0 AHB Lite port + .DMEM_0_HSEL(DMEM_0_HSEL), .DMEM_0_HADDR(DMEM_0_HADDR), .DMEM_0_HTRANS(DMEM_0_HTRANS), .DMEM_0_HWRITE(DMEM_0_HWRITE), @@ -327,6 +316,7 @@ module nanosoc_system #( .DMEM_0_HRDATA(DMEM_0_HRDATA), .DMEM_0_HREADY(DMEM_0_HREADY), .DMEM_0_HRESP(DMEM_0_HRESP), + .DMEM_0_HREADYOUT(DMEM_0_HREADYOUT), // CPU Sideband signalling .CPU_0_NMI(CPU_0_NMI), @@ -414,9 +404,6 @@ module nanosoc_system #( wire DMAC_0_ANY_DONE; wire DMAC_1_ANY_DONE; - assign EXP_DLAST [1:0] = 2'b00; - assign DMAC_0_DMA_REQ = EXP_DRQ; - assign DMAC_0_ANY_DONE = |DMAC_0_DMA_DONE; assign DMAC_1_ANY_DONE = |DMAC_1_DMA_DONE; @@ -536,6 +523,11 @@ module nanosoc_system #( assign DEBUG_RESETREQ = GPO8[0]; + // Sideband Wiring + //-------------------------- + + assign CPU_0_RXEV = DMAC_ANY_DONE; + // Instantiate Subsystem //-------------------------- nanosoc_ss_debug #( @@ -546,7 +538,8 @@ module nanosoc_system #( // SoCDebug Parameters .PROMPT_CHAR(PROMPT_CHAR), .FT1248_WIDTH(FT1248_WIDTH), - .FT1248_CLKON(FT1248_CLKON) + .FT1248_CLKON(FT1248_CLKON), + .FT1248_CLKDIV(FT1248_CLKDIV) ) u_debug_ss ( // System Clocks and Resets .SYS_HCLK(SYS_HCLK), @@ -586,7 +579,6 @@ module nanosoc_system #( .FT_MIOSIO_E(FT_MIOSIO_E), .FT_MIOSIO_Z(FT_MIOSIO_Z), .FT_MIOSIO_I(FT_MIOSIO_I), - .FT_CLKDIV(FT_CLKDIV), // GPIO interface .GPO8(GPO8), @@ -609,38 +601,43 @@ module nanosoc_system #( wire EXP_HWRITE; wire EXP_HREADY; wire [31:0] EXP_HWDATA; + wire [2:0] EXP_HBURST; wire EXP_HREADYOUT; wire EXP_HRESP; wire [31:0] EXP_HRDATA; // SRAM Low Region AHB Port - To Interconnect Subsystem - wire EXPSRAM_L_HSEL; - wire [SYS_ADDR_W-1:0] EXPSRAM_L_HADDR; - wire [1:0] EXPSRAM_L_HTRANS; - wire [2:0] EXPSRAM_L_HSIZE; - wire [3:0] EXPSRAM_L_HPROT; - wire EXPSRAM_L_HWRITE; - wire EXPSRAM_L_HREADY; - wire [31:0] EXPSRAM_L_HWDATA; + wire EXPRAM_L_HSEL; + wire [SYS_ADDR_W-1:0] EXPRAM_L_HADDR; + wire [1:0] EXPRAM_L_HTRANS; + wire [2:0] EXPRAM_L_HSIZE; + wire [3:0] EXPRAM_L_HPROT; + wire EXPRAM_L_HWRITE; + wire EXPRAM_L_HREADY; + wire [31:0] EXPRAM_L_HWDATA; + wire [2:0] EXPRAM_L_HBURST; - wire EXPSRAM_L_HREADYOUT; - wire EXPSRAM_L_HRESP; - wire [31:0] EXPSRAM_L_HRDATA; + wire EXPRAM_L_HREADYOUT; + wire EXPRAM_L_HRESP; + wire [31:0] EXPRAM_L_HRDATA; + // SRAM High Region AHB Port - To Interconnect Subsystem - wire EXPSRAM_H_HSEL; - wire [SYS_ADDR_W-1:0] EXPSRAM_H_HADDR; - wire [1:0] EXPSRAM_H_HTRANS; - wire [2:0] EXPSRAM_H_HSIZE; - wire [3:0] EXPSRAM_H_HPROT; - wire EXPSRAM_H_HWRITE; - wire EXPSRAM_H_HREADY; - wire [31:0] EXPSRAM_H_HWDATA; + wire EXPRAM_H_HSEL; + wire [SYS_ADDR_W-1:0] EXPRAM_H_HADDR; + wire [1:0] EXPRAM_H_HTRANS; + wire [2:0] EXPRAM_H_HSIZE; + wire [3:0] EXPRAM_H_HPROT; + wire EXPRAM_H_HWRITE; + wire EXPRAM_H_HREADY; + wire [31:0] EXPRAM_H_HWDATA; + wire [2:0] EXPRAM_H_HBURST; - wire EXPSRAM_H_HREADYOUT; - wire EXPSRAM_H_HRESP; - wire [31:0] EXPSRAM_H_HRDATA; + wire EXPRAM_H_HREADYOUT; + wire EXPRAM_H_HRESP; + wire [31:0] EXPRAM_H_HRDATA; + // Interrupt Connections - TO CPU Subsystem wire [3:0] EXP_IRQ; @@ -649,6 +646,11 @@ module nanosoc_system #( wire [1:0] EXP_DRQ; wire [1:0] EXP_DLAST; + // Expansion DRQ Wiring + //-------------------------- + assign EXP_DLAST [1:0] = 2'b00; + assign DMAC_0_DMA_REQ = EXP_DRQ; + // Instantiate Subsystem //-------------------------- nanosoc_ss_expansion #( @@ -682,30 +684,30 @@ module nanosoc_system #( .EXP_HRDATA(EXP_HRDATA), // SRAM Low Region AHB Port - .EXPSRAM_L_HSEL(EXPSRAM_L_HSEL), - .EXPSRAM_L_HADDR(EXPSRAM_L_HADDR), - .EXPSRAM_L_HTRANS(EXPSRAM_L_HTRANS), - .EXPSRAM_L_HSIZE(EXPSRAM_L_HSIZE), - .EXPSRAM_L_HPROT(EXPSRAM_L_HPROT), - .EXPSRAM_L_HWRITE(EXPSRAM_L_HWRITE), - .EXPSRAM_L_HREADY(EXPSRAM_L_HREADY), - .EXPSRAM_L_HWDATA(EXPSRAM_L_HWDATA), - .EXPSRAM_L_HREADYOUT(EXPSRAM_L_HREADYOUT), - .EXPSRAM_L_HRESP(EXPSRAM_L_HRESP), - .EXPSRAM_L_HRDATA(EXPSRAM_L_HRDATA), + .EXPRAM_L_HSEL(EXPRAM_L_HSEL), + .EXPRAM_L_HADDR(EXPRAM_L_HADDR), + .EXPRAM_L_HTRANS(EXPRAM_L_HTRANS), + .EXPRAM_L_HSIZE(EXPRAM_L_HSIZE), + .EXPRAM_L_HPROT(EXPRAM_L_HPROT), + .EXPRAM_L_HWRITE(EXPRAM_L_HWRITE), + .EXPRAM_L_HREADY(EXPRAM_L_HREADY), + .EXPRAM_L_HWDATA(EXPRAM_L_HWDATA), + .EXPRAM_L_HREADYOUT(EXPRAM_L_HREADYOUT), + .EXPRAM_L_HRESP(EXPRAM_L_HRESP), + .EXPRAM_L_HRDATA(EXPRAM_L_HRDATA), // SRAM High Region AHB Port - .EXPSRAM_H_HSEL(EXPSRAM_H_HSEL), - .EXPSRAM_H_HADDR(EXPSRAM_H_HADDR), - .EXPSRAM_H_HTRANS(EXPSRAM_H_HTRANS), - .EXPSRAM_H_HSIZE(EXPSRAM_H_HSIZE), - .EXPSRAM_H_HPROT(EXPSRAM_H_HPROT), - .EXPSRAM_H_HWRITE(EXPSRAM_H_HWRITE), - .EXPSRAM_H_HREADY(EXPSRAM_H_HREADY), - .EXPSRAM_H_HWDATA(EXPSRAM_H_HWDATA), - .EXPSRAM_H_HREADYOUT(EXPSRAM_H_HREADYOUT), - .EXPSRAM_H_HRESP(EXPSRAM_H_HRESP), - .EXPSRAM_H_HRDATA(EXPSRAM_H_HRDATA), + .EXPRAM_H_HSEL(EXPRAM_H_HSEL), + .EXPRAM_H_HADDR(EXPRAM_H_HADDR), + .EXPRAM_H_HTRANS(EXPRAM_H_HTRANS), + .EXPRAM_H_HSIZE(EXPRAM_H_HSIZE), + .EXPRAM_H_HPROT(EXPRAM_H_HPROT), + .EXPRAM_H_HWRITE(EXPRAM_H_HWRITE), + .EXPRAM_H_HREADY(EXPRAM_H_HREADY), + .EXPRAM_H_HWDATA(EXPRAM_H_HWDATA), + .EXPRAM_H_HREADYOUT(EXPRAM_H_HREADYOUT), + .EXPRAM_H_HRESP(EXPRAM_H_HRESP), + .EXPRAM_H_HRDATA(EXPRAM_H_HRDATA), // Interrupt and DMAC Connections .EXP_IRQ(EXP_IRQ), @@ -749,12 +751,6 @@ module nanosoc_system #( wire [SYS_DATA_W-1:0] SYSTABLE_HRDATA; // AHB read-data wire SYSTABLE_HRESP; // AHB response wire SYSTABLE_HREADYOUT; // AHB ready out - - // Sysio APB driving signals - To all APB Components - wire SYSIO_PENABLE; - wire SYSIO_PWRITE; - wire [APB_ADDR_W-1:0] SYSIO_PADDR; - wire [APB_DATA_W-1:0] SYSIO_PWDATA; // CPU sideband signalling - TO CPU Subsystem wire SYS_NMI; // watchdog_interrupt; @@ -782,6 +778,15 @@ module nanosoc_system #( //-------------------------- assign SYS_REMAP_CTRL [3:0] = { 3'b000, !SYSIO_REMAP_CTRL}; + + // Reset Request Wiring + //-------------------------- + + assign SYS_SYSRESETREQ = CPU_0_SYSRESETREQ + | DEBUG_RESETREQ + | SYS_WDOGRESETREQ + | (SYS_LOCKUPRESET & CPU_0_LOCKUP); + // Instantiate Subsystem //-------------------------- @@ -800,6 +805,7 @@ module nanosoc_system #( .SYS_XTALCLK_OUT(SYS_XTALCLK_OUT), // Crystal Clock Output // System Input Clocks and Resets + .SYS_SYSRESETn(SYS_SYSRESETn), .SYS_PORESETn(SYS_PORESETn), // Power-On-Reset reset (active-low) .SYS_TESTMODE(SYS_TESTMODE), // Reset bypass in scan test .SYS_HCLK(SYS_HCLK), // AHB clock @@ -848,7 +854,8 @@ module nanosoc_system #( .SYSIO_PWDATA(SYSIO_PWDATA), .USRT_PSEL(DEBUG_PSEL), - .USRT_PRDATA(DEBUG_PREADY), + .USRT_PRDATA(DEBUG_PRDATA), + .USRT_PREADY(DEBUG_PREADY), .USRT_PSLVERR(DEBUG_PSLVERR), .DMAC_0_PSEL(DMAC_0_PSEL), @@ -893,9 +900,23 @@ module nanosoc_system #( .P1_IN(P1_IN), .P1_OUT(P1_OUT), .P1_OUTEN(P1_OUTEN), - .P1_ALTFUNC(P1_ALTFUNC) + .P1_ALTFUNC(P1_ALTFUNC), + .P1_OUT_MUX(P1_OUT_MUX), + .P1_OUT_EN_MUX(P1_OUT_EN_MUX) ); - + + //-------------------------- + // Interrupt Wiring + //-------------------------- + + assign CPU_0_IRQ [3:0] = EXP_IRQ [3:0]; + assign CPU_0_IRQ [ 5: 4] = SYS_APB_IRQ[ 5: 4]; + assign CPU_0_IRQ [ 6] = SYS_APB_IRQ[ 6] | (|SYS_GPIO0_ANY_IRQ); + assign CPU_0_IRQ [ 7] = SYS_APB_IRQ[ 7] | (|SYS_GPIO1_ANY_IRQ); + assign CPU_0_IRQ [14: 8] = SYS_APB_IRQ[14: 8]; + assign CPU_0_IRQ [15] = SYS_APB_IRQ[15] | DMAC_ANY_DONE | DMAC_ANY_ERROR; + assign CPU_0_IRQ [31:16] = SYS_APB_IRQ[31:16]| SYS_GPIO0_IRQ[15:0]; + //-------------------------- // Interconnect Subsystem //-------------------------- diff --git a/system/slcorem0_tech b/system/slcorem0_tech index 3fbedbf..bc84f48 160000 --- a/system/slcorem0_tech +++ b/system/slcorem0_tech @@ -1 +1 @@ -Subproject commit 3fbedbfb068d360194d1d4b879e5a1eb28930d85 +Subproject commit bc84f48569a2833a67df85c609bc30b081568785 diff --git a/system/sldma230_tech b/system/sldma230_tech index 858deb1..0b63e43 160000 --- a/system/sldma230_tech +++ b/system/sldma230_tech @@ -1 +1 @@ -Subproject commit 858deb1bd8a17fafabf015d702c5891236d024fb +Subproject commit 0b63e4325cbc6d0ee1e5eff5620e38e14092c79d diff --git a/system/socdebug_tech b/system/socdebug_tech index 6a6da3c..ec5a608 160000 --- a/system/socdebug_tech +++ b/system/socdebug_tech @@ -1 +1 @@ -Subproject commit 6a6da3cfd4851abf6623991de6389f54593a9854 +Subproject commit ec5a60835a6ed8b44c084f701411914eeda75a4e diff --git a/verif/verilog/nanosoc_tb.v b/verif/verilog/nanosoc_tb.v index 8a7bc4f..80022c0 100644 --- a/verif/verilog/nanosoc_tb.v +++ b/verif/verilog/nanosoc_tb.v @@ -389,7 +389,7 @@ nanosoc_ft1248x1_track `ifdef CORTEX_M0 `ifdef USE_TARMAC -`define ARM_CM0IK_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_nanosoc_cpu.u_cortex_m0_integration.u_cortexm0 +`define ARM_CM0IK_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_system.u_cpu_ss.u_cpu_0.u_slcorem0_integration.u_cortexm0 CORTEXM0 #(.ACG(1), .AHBSLV(0), .BE(0), .BKPT(4), @@ -523,7 +523,7 @@ nanosoc_ft1248x1_track // - log the RTL Inuts/outputs/internal-state of this traccking DMAC // -------------------------------------------------------------------------------- -`define DMAC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_pl230_udma +`define DMAC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_system.u_dma_ss.u_dmac_0.u_pl230_udma pl230_udma u_track_pl230_udma ( // Clock and Reset @@ -597,29 +597,29 @@ nanosoc_ft1248x1_track // Tracking Accelerator logging support // -------------------------------------------------------------------------------- - `define ACC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_nanosoc_exp_wrapper - - nanosoc_acc_log_to_file #(.FILENAME("logs/acc_exp.log"),.TIMESTAMP(1)) - u_nanosoc_acc_log_to_file ( - .HCLK (`ACC_PATH.HCLK ), - .HRESETn (`ACC_PATH.HRESETn ), - .HSEL_i (`ACC_PATH.HSEL_i ), - .HADDR_i (`ACC_PATH.HADDR_i ), - .HTRANS_i (`ACC_PATH.HTRANS_i ), - .HWRITE_i (`ACC_PATH.HWRITE_i ), - .HSIZE_i (`ACC_PATH.HSIZE_i ), - .HPROT_i (`ACC_PATH.HPROT_i ), - .HWDATA_i (`ACC_PATH.HWDATA_i ), - .HREADY_i (`ACC_PATH.HREADY_i ), - .HRDATA_o (`ACC_PATH.HRDATA_o ), - .HREADYOUT_o (`ACC_PATH.HREADYOUT_o ), - .HRESP_o (`ACC_PATH.HRESP_o ), - .exp_drq_ip_o (`ACC_PATH.exp_drq_ip_o ), - .exp_dlast_ip_i (`ACC_PATH.exp_dlast_ip_i), - .exp_drq_op_o (`ACC_PATH.exp_drq_op_o ), - .exp_dlast_op_i (`ACC_PATH.exp_dlast_op_i), - .exp_irq_o (`ACC_PATH.exp_irq_o ) - ); +// `define ACC_PATH u_nanosoc_chip_pads.u_nanosoc_chip.u_nanosoc_exp_wrapper + +// nanosoc_acc_log_to_file #(.FILENAME("logs/acc_exp.log"),.TIMESTAMP(1)) +// u_nanosoc_acc_log_to_file ( +// .HCLK (`ACC_PATH.HCLK ), +// .HRESETn (`ACC_PATH.HRESETn ), +// .HSEL_i (`ACC_PATH.HSEL_i ), +// .HADDR_i (`ACC_PATH.HADDR_i ), +// .HTRANS_i (`ACC_PATH.HTRANS_i ), +// .HWRITE_i (`ACC_PATH.HWRITE_i ), +// .HSIZE_i (`ACC_PATH.HSIZE_i ), +// .HPROT_i (`ACC_PATH.HPROT_i ), +// .HWDATA_i (`ACC_PATH.HWDATA_i ), +// .HREADY_i (`ACC_PATH.HREADY_i ), +// .HRDATA_o (`ACC_PATH.HRDATA_o ), +// .HREADYOUT_o (`ACC_PATH.HREADYOUT_o ), +// .HRESP_o (`ACC_PATH.HRESP_o ), +// .exp_drq_ip_o (`ACC_PATH.exp_drq_ip_o ), +// .exp_dlast_ip_i (`ACC_PATH.exp_dlast_ip_i), +// .exp_drq_op_o (`ACC_PATH.exp_drq_op_o ), +// .exp_dlast_op_i (`ACC_PATH.exp_dlast_op_i), +// .exp_irq_o (`ACC_PATH.exp_irq_o ) +// ); // -------------------------------------------------------------------------------- -- GitLab