HierarchyFilesModulesSignalsTasksFunctionsHelp
12
//-----------------------------------------------------------------------------
// customised top-level example Cortex-M0 controller
// A joint work commissioned on behalf of SoC Labs, under Arm Academic Access license.
//
// Contributors
//
// David Flynn (d.w.flynn@soton.ac.uk)
//
// Copyright � 2021-2, SoC Labs (www.soclabs.org)
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// The confidential and proprietary information contained in this file may
// only be used by a person authorised under and to the extent permitted
// by a subsisting licensing agreement from Arm Limited or its affiliates.
//
//            (C) COPYRIGHT 2010-2013 Arm Limited or its affiliates.
//                ALL RIGHTS RESERVED
//
// This entire notice must be reproduced on all copies of this file
// and copies of this file may only be made by a person if such person is
// permitted to do so under the terms of a subsisting license agreement
// from Arm Limited or its affiliates.
//
//      SVN Information
//
//      Checked In          : $Date: 2017-10-10 15:55:38 +0100 (Tue, 10 Oct 2017) $
//
//      Revision            : $Revision: 371321 $
//
//      Release Information : Cortex-M System Design Kit-r1p1-00rel0
//
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// Abstract : Top level for example Cortex-M0/Cortex-M0+ microcontroller
//-----------------------------------------------------------------------------
//

`include "cmsdk_mcu_defs.v"

[Up: cmsdk_mcu_chip_pads u_cmsdk_mcu]
module cmsdk_mcu_chipIndex #(
  //-----------------------------------------
  // CPU options

`ifdef ARM_CMSDK_INCLUDE_CLKGATE
  parameter CLKGATE_PRESENT = 1,
`else
  parameter CLKGATE_PRESENT = 0,
`endif
  parameter BE              = 0,   // Big or little endian
  parameter BKPT            = 4,   // Number of breakpoint comparators
  parameter DBG             = 1,   // Debug configuration
  parameter NUMIRQ          = 32,  // NUM of IRQ
  parameter SMUL            = 0,   // Multiplier configuration
  parameter SYST            = 1,   // SysTick
  parameter WIC             = 1,   // Wake-up interrupt controller support
  parameter WICLINES        = 34,  // Supported WIC lines
  parameter WPT             = 2,   // Number of DWT comparators
  parameter RESET_ALL_REGS  = 0,   // Do not reset all registers

  parameter BOOT_MEM_TYPE   = `ARM_CMSDK_BOOT_MEM_TYPE,   // Boot loader memory type

  parameter ROM_MEM_TYPE    = `ARM_CMSDK_ROM_MEM_TYPE,   // ROM memory type

  parameter RAM_MEM_TYPE    = `ARM_CMSDK_RAM_MEM_TYPE,   // RAM memory type

  //-----------------------------------------
  // System options

`ifdef ARM_CMSDK_INCLUDE_DMA
  parameter INCLUDE_DMA = 1, // Include instantiation of DMA-230
  // This option also add a number of bus components
  parameter DMA_CHANNEL_NUM = 1,
`else
  parameter INCLUDE_DMA = 0,
  parameter DMA_CHANNEL_NUM = 1,
`endif

`ifdef ARM_CMSDK_INCLUDE_BITBAND
  parameter INCLUDE_BITBAND = 1,
  // Include instantiation of Bit-band wrapper
  // This option add bit band wrapper to CPU interface
`else
  parameter INCLUDE_BITBAND = 0,
`endif

`ifdef ARM_CMSDK_INCLUDE_JTAG
  parameter INCLUDE_JTAG = 1  // Include JTAG feature
`else
  parameter INCLUDE_JTAG = 0  // Do not Include JTAG feature
`endif
 )
 (
`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)

`ifdef ARM_CMSDK_INCLUDE_JTAG
  input  wire          ntrst_i,
  input  wire          tdi_i,
  output wire          tdo_o,
`endif
  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 = xtal_clk_i;
  wire          xtal_clk_out;
  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)


`ifdef ARM_CMSDK_INCLUDE_JTAG
  wire          ntrst_in;
  wire          tdi_in;
  wire          tdo_out;
`endif
  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
 // --------------------------------------------------------------------------------

// modify p1_mux [3:0] for ft1248 interface
//  assign        p1_in_mux[3:0] = p1_i[3:0]; // IO MUX controlled bidirectionals
//  assign        p1_o[3:0] = p1_out_mux[3:0];    
//  assign        p1_e[3:0] = p1_out_en_mux[3:0];
//  assign        p1_z[3:0] = p1_out_nen_mux[3:0];

  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];


//TIE_HI uTIEHI (.tiehi(tiehi));
 wire tiehi = 1'b1;
//TIE_LO uTIELO (.tielo(tielo));
 wire tielo = 1'b0;

  
//------------------------------------
// 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
  
  wire               SLEEPING;
  wire               APBACTIVE;
  wire               SYSRESETREQ;    // processor system reset request
  wire               WDOGRESETREQ;   // watchdog system reset request
  wire               HRESETREQ;      // Combined system reset request
  wire               cmsdk_SYSRESETREQ; // Combined system reset request
  wire               clk_ctrl_sys_reset_req;
  wire               PMUHRESETREQ;
  wire               PMUDBGRESETREQ;
  wire               LOCKUP;
  wire               LOCKUPRESET;
  wire               PMUENABLE;
  wire               SLEEPDEEP;

  wire               ADPRESETREQ;
  


`ifdef CORTEX_M0DESIGNSTART
  // if using DesignStart CortexM0, remove these signals
`else
  wire               WAKEUP;
  wire               GATEHCLK;
  wire               WICENREQ;
  wire               WICENACK;
  wire               CDBGPWRUPREQ;
  wire               CDBGPWRUPACK;
  wire               SLEEPHOLDREQn;
  wire               SLEEPHOLDACKn;

  wire               SYSPWRDOWNACK;
  wire               DBGPWRDOWNACK;
  wire               SYSPWRDOWN;
  wire               DBGPWRDOWN;
  wire               SYSISOLATEn;
  wire               SYSRETAINn;
  wire               DBGISOLATEn;
`endif

  wire               PORESETn;// Power on reset
  wire               HRESETn; // AHB reset
  wire               PRESETn; // APB and peripheral reset
`ifndef CORTEX_M0DESIGNSTART
  wire               DBGRESETn; // Debug system reset
`endif
  wire               FCLK;    // Free running system clock
  wire               HCLK;    // System clock from PMU
`ifndef CORTEX_M0DESIGNSTART
  wire               DCLK;
`endif
  wire               SCLK;
  wire               PCLK;    // Peripheral clock
  wire               PCLKG;   // Gated PCLK for APB
  wire               HCLKSYS; // System clock for memory
  wire               PCLKEN;  // Clock divider for AHB to APB bridge
  // Common AHB signals
  wire  [31:0]       HADDR;
  wire  [1:0]        HTRANS;
  wire  [2:0]        HSIZE;
  wire               HWRITE;
  wire  [31:0]       HWDATA;
  wire               HREADY;

// DMA controller master interface
  wire     [31:0]   dmac_haddr;
  wire     [1:0]    dmac_htrans;
  wire     [2:0]    dmac_hsize;
  wire     [2:0]    dmac_hburst;
  wire     [3:0]    dmac_hprot;
  wire              dmac_hmastlock;
  wire              dmac_hwrite;
  wire     [31:0]   dmac_hwdata;
  wire     [31:0]   dmac_hrdata;
  wire              dmac_hready;
  wire              dmac_hresp;

  wire              dmac_done;
  wire              dmac_err;
  wire              exp_penable;
  wire              exp_pwrite;
  wire  [11:0]      exp_paddr;
  wire  [31:0]      exp_pwdata;
  wire              exp15_psel;
  wire              exp15_pready;
  wire              exp15_pslverr;
  wire     [31:0]   exp15_prdata;
  wire              exp14_psel;
  wire              exp14_pready;
  wire              exp14_pslverr;
  wire     [31:0]   exp14_prdata;

  // Flash memory AHB signals
  wire               flash_hsel;
  wire               flash_hreadyout;
  wire  [31:0]       flash_hrdata;
  wire               flash_hresp;

  // SRAM AHB signals
  wire               sram_hsel;
  wire               sram_hreadyout;
  wire  [31:0]       sram_hrdata;
  wire               sram_hresp;

  // Boot loader/firmware AHB signals
  // Only use if BOOT_MEM_TYPE is not zero
  wire               boot_hsel;
  wire               boot_hreadyout;
  wire  [31:0]       boot_hrdata;
  wire               boot_hresp;

  // 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;

  localparam BASEADDR_GPIO0       = 32'h4001_0000;
  localparam BASEADDR_GPIO1       = 32'h4001_1000;
  localparam BASEADDR_SYSROMTABLE = 32'hF000_0000;

`ifdef CORTEX_M0PLUS
`ifdef ARM_CMSDK_INCLUDE_MTB
  // MTB Control
  wire               TSTART;
  wire               TSTOP;

  // EMBEDDED SRAM (MTB) INTERFACE
  wire               RAMHCLK;
  wire  [31:0]       RAMRD;
  wire  [AWIDTH-3:0] RAMAD;
  wire  [31:0]       RAMWD;
  wire               RAMCS;
  wire  [ 3:0]       RAMWE;

  localparam BASEADDR_MTBSRAM     = 32'hF021_0000;

  wire [31:0]        SRAMBASEADDR = BASEADDR_MTBSRAM;
`endif
`endif

  // Internal Debug signals
  wire               i_trst_n;
  wire               i_swditms;
  wire               i_swclktck;
  wire               i_tdi;
  wire               i_tdo;
  wire               i_tdoen_n;
  wire               i_swdo;
  wire               i_swdoen;

  wire               TESTMODE;

`ifdef ARM_CMSDK_INCLUDE_JTAG
`else
  // Serial wire debug is used.  nTRST, TDI and TDO are not needed
  wire               nTRST = 1'b0;
  wire               TDI   = 1'b1;
  wire               TDO;
`endif

  assign TESTMODE = 1'b0;

//----------------------------------------
// Clock and reset controller
//----------------------------------------
`ifdef CORTEX_M0DESIGNSTART
  // Clock controller generates reset if PMU request (PMUHRESETREQ),
  // CPU request or watchdog request (SYSRESETREQ)
  assign clk_ctrl_sys_reset_req = PMUHRESETREQ | cmsdk_SYSRESETREQ;
`else
  // Clock controller generates reset if PMU request (PMUHRESETREQ),
  // CPU request or watchdog request (HRESETREQ)
  assign clk_ctrl_sys_reset_req = PMUHRESETREQ | HRESETREQ;
`endif

  // Clock controller to generate reset and clock signals
  cmsdk_mcu_clkctrl
   #(.CLKGATE_PRESENT(CLKGATE_PRESENT))
   u_cmsdk_mcu_clkctrl(
     // inputs
    .XTAL1            (xtal_clk_in),
    .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)
    );

//----------------------------------------
//
   // System Reset request can be from processor or watchdog
   // or when lockup happens and the control flag is set.
   assign  cmsdk_SYSRESETREQ = SYSRESETREQ | WDOGRESETREQ |
                               ADPRESETREQ |
                               (LOCKUP & LOCKUPRESET);

`ifdef CORTEX_M0DESIGNSTART
   // Power Management Unit will not be available
   assign  HCLK = FCLK;        // connect HCLK to FCLK
   assign  SCLK = FCLK;        // connect SCLK to FCLK

   // Since there is no PMU, these signals are not used
   assign  PMUDBGRESETREQ = 1'b0;
   assign  PMUHRESETREQ   = 1'b0;

`else

  wire   gated_hclk;
  wire   gated_dclk;
  wire   gated_sclk;

`ifdef CORTEX_M0
  // Cortex-M0 Power management unit
  cortexm0_pmu u_cortexm0_pmu
  ( // Inputs
    .FCLK             (FCLK),
    .PORESETn         (PORESETn),
    .HRESETREQ        (cmsdk_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)
   );

  cortexm0_rst_ctl u_rst_ctl
  (// Inputs
   .GLOBALRESETn      (nrst_in),
   .FCLK              (FCLK),
   .HCLK              (gated_hclk),
   .DCLK              (gated_dclk),
   .SYSRESETREQ       (cmsdk_SYSRESETREQ),
   .PMUHRESETREQ      (PMUHRESETREQ),
   .PMUDBGRESETREQ    (PMUDBGRESETREQ),
   .RSTBYPASS         (1'b0),
   .SE                (1'b0),

   // Outputs
   .PORESETn          (PORESETn),
   .HRESETn           (HRESETn),
   .DBGRESETn         (DBGRESETn),
   .HRESETREQ         (HRESETREQ));

`else
  // Cortex-M0+ Power management unit
  cm0p_ik_pmu u_cortexm0plus_pmu
  ( // Inputs
    .FCLK             (FCLK),
    .PORESETn         (PORESETn),
    .HRESETREQ        (HRESETREQ),
    .PMUENABLE        (PMUENABLE),
    .WICENACK         (WICENACK),

    .WAKEUP           (WAKEUP),
    .CDBGPWRUPREQ     (CDBGPWRUPREQ),

    .SLEEPDEEP        (SLEEPDEEP),
    .SLEEPHOLDACKn    (SLEEPHOLDACKn),
    .GATEHCLK         (GATEHCLK),
    .SYSPWRDOWNACK    (SYSPWRDOWNACK),
    .DBGPWRDOWNACK    (DBGPWRDOWNACK),
    .DFTSE            (1'b0),

    // 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),
    .PMUHRESETREQ     (PMUHRESETREQ),
    .PMUDBGRESETREQ   (PMUDBGRESETREQ)
   );

  cm0p_ik_rst_ctl u_rst_ctl
  (// Inputs
   .GLOBALRESETn      (nrst_in),
   .FCLK              (FCLK),
   .HCLK              (gated_hclk),
   .DCLK              (gated_dclk),
   .SYSRESETREQ       (cmsdk_SYSRESETREQ),
   .PMUHRESETREQ      (PMUHRESETREQ),
   .PMUDBGRESETREQ    (PMUDBGRESETREQ),
   .HREADY            (HREADY),
   .DFTRSTDISABLE     (1'b0),
   .DFTSE             (1'b0),

   // Outputs
   .PORESETn          (PORESETn),
   .HRESETn           (HRESETn),
   .DBGRESETn         (DBGRESETn),
   .HRESETREQ         (HRESETREQ));

`endif

  // 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;

`endif

  // -------------------------------
  // DMA Controller - ADP engine
  // -------------------------------

  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];

  // DMA controller present
  ADPcontrol_v1_0 u_ADP (
  // Clock and Reset
    .ahb_hclk          (HCLKSYS),
    .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        (dmac_hready),
    .ahb_hresp         (dmac_hresp),
    .ahb_hrdata        (dmac_hrdata),
    .ahb_htrans        (dmac_htrans),
    .ahb_hwrite        (dmac_hwrite),
    .ahb_haddr         (dmac_haddr),
    .ahb_hsize         (dmac_hsize),
    .ahb_hburst        (dmac_hburst),
    .ahb_hmastlock     (dmac_hmastlock),
    .ahb_hprot         (dmac_hprot),
    .ahb_hwdata        (dmac_hwdata)
  );

   cmsdk_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;

  ft1248_streamio_v1_0 #
   (.FT1248_WIDTH (1),
    .FT1248_CLKON(0) )
    u_ftdio_com    (
    .clk              (HCLKSYS),
    .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        ( )
  );
 

//---------------------------------------------------
// System design for example Cortex-M0/Cortex-M0+ MCU
//---------------------------------------------------
  cmsdk_mcu_system
   #(.CLKGATE_PRESENT  (CLKGATE_PRESENT),
     .BE               (BE),
     .BASEADDR_GPIO0   (BASEADDR_GPIO0), // GPIO0 Base Address
     .BASEADDR_GPIO1   (BASEADDR_GPIO1), // GPIO1 Base Address
     .BKPT             (BKPT),       // Number of breakpoint comparators
     .DBG              (DBG),        // Debug configuration
     .NUMIRQ           (NUMIRQ),     // NUMIRQ
     .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
     .RESET_ALL_REGS   (RESET_ALL_REGS), // Do not reset all registers
     .BOOT_MEM_TYPE    (BOOT_MEM_TYPE), // Boot loader memory type
     .INCLUDE_DMA      (INCLUDE_DMA), // Include DMA feature
     .INCLUDE_BITBAND  (INCLUDE_BITBAND), // Include bit band wrapper
     .INCLUDE_JTAG     (INCLUDE_JTAG), // Include JTAG feature
     .BASEADDR_SYSROMTABLE (BASEADDR_SYSROMTABLE) // System ROM Table base address
   )
    u_cmsdk_mcu_system (
    .FCLK             (FCLK),
    .HCLK             (HCLK),
`ifndef CORTEX_M0DESIGNSTART
    .DCLK             (DCLK),
`endif
    .SCLK             (SCLK),
    .HRESETn          (HRESETn),
    .PORESETn         (PORESETn),
`ifdef CORTEX_M0
    .DBGRESETn        (DBGRESETn),
    .RSTBYPASS        (TESTMODE),
`endif

    .PCLK             (PCLK),
    .PCLKG            (PCLKG),
    .PRESETn          (PRESETn),
    .PCLKEN           (PCLKEN),

    // Common AHB signals
    .HADDR            (HADDR),
    .HTRANS           (HTRANS),
    .HSIZE            (HSIZE),
    .HWRITE           (HWRITE),
    .HWDATA           (HWDATA),
    .HREADY           (HREADY),

    // Flash
    .flash_hsel       (flash_hsel),
    .flash_hreadyout  (flash_hreadyout),
    .flash_hrdata     (flash_hrdata),
    .flash_hresp      (flash_hresp),

    // SRAM
    .sram_hsel        (sram_hsel),
    .sram_hreadyout   (sram_hreadyout),
    .sram_hrdata      (sram_hrdata),
    .sram_hresp       (sram_hresp),

    // Optional boot loader
    // Only use if BOOT_MEM_TYPE is not zero
    .boot_hsel        (boot_hsel),
    .boot_hreadyout   (boot_hreadyout),
    .boot_hrdata      (boot_hrdata),
    .boot_hresp       (boot_hresp),

    // Status
    .APBACTIVE        (APBACTIVE),
    .SLEEPING         (SLEEPING),
    .SYSRESETREQ      (SYSRESETREQ),
    .WDOGRESETREQ     (WDOGRESETREQ),
    .LOCKUP           (LOCKUP),
    .LOCKUPRESET      (LOCKUPRESET),
    .PMUENABLE        (PMUENABLE),
    .SLEEPDEEP        (SLEEPDEEP),

`ifdef CORTEX_M0DESIGNSTART
`else  //if using DesignStart CortexM0, remove these signals

    .GATEHCLK         (GATEHCLK),
    .WAKEUP           (WAKEUP),
    .WICENREQ         (WICENREQ),
    .WICENACK         (WICENACK),
    .CDBGPWRUPREQ     (CDBGPWRUPREQ),
    .CDBGPWRUPACK     (CDBGPWRUPACK),
    .SLEEPHOLDREQn    (SLEEPHOLDREQn),
    .SLEEPHOLDACKn    (SLEEPHOLDACKn),

    // Debug
    .nTRST            (i_trst_n),
    .SWDITMS          (i_swditms),
    .SWCLKTCK         (i_swclktck),
    .TDI              (i_tdi),
    .TDO              (i_tdo),
    .nTDOEN           (i_tdoen_n),
    .SWDO             (i_swdo),
    .SWDOEN           (i_swdoen),
`endif

    // 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            (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),


  // DMA Control
 //   .dma_req       (dma230_tie0),
 //   .dma_sreq      (dma230_tie0),
 //   .dma_waitonreq (dma230_tie0),
 //   .dma_stall     (1'b0),
 //   .dma_active    (),
    .dma_done      (dmac_done),
    .dma_err       (dmac_err),
  // AHB-Lite Master Interface
    .dmac_hready        (dmac_hready),
    .dmac_hresp         (dmac_hresp),
    .dmac_hrdata        (dmac_hrdata),
    .dmac_htrans        (dmac_htrans),
    .dmac_hwrite        (dmac_hwrite),
    .dmac_haddr         (dmac_haddr),
    .dmac_hsize         (dmac_hsize),
    .dmac_hburst        (dmac_hburst),
    .dmac_hmastlock     (dmac_hmastlock),
    .dmac_hprot         (dmac_hprot),
    .dmac_hwdata        (dmac_hwdata),
  // APB Slave Interface
    .exp12_psel          ( ),
    .exp13_psel          ( ),
    .exp14_psel          (exp14_psel),
    .exp15_psel          ( ),
    .exp_penable         (exp_penable),
    .exp_pwrite          (exp_pwrite),
    .exp_paddr           (exp_paddr[11:0]),
    .exp_pwdata          (exp_pwdata[31:0]),
    .exp12_prdata        (32'h00000000),
    .exp12_pready        (1'b1),
    .exp12_pslverr       (1'b0),
    .exp13_prdata        (32'h00000000),
    .exp13_pready        (1'b1),
    .exp13_pslverr       (1'b0),
    .exp14_prdata        (exp14_prdata),
    .exp14_pready        (exp14_pready),
    .exp14_pslverr       (exp14_pslverr),
    .exp15_prdata        (32'h00000000),
    .exp15_pready        (1'b1),
    .exp15_pslverr       (1'b0),

    .DFTSE            (1'b0)
  );

//----------------------------------------
// If DMA is present, use SCLK for system HCLK so that
// DMA can run even if processor is in sleep mode.
// Otherwise there is only one master (cpu), so AHB system
// clock can be stopped when DMA take place.

//  assign   HCLKSYS  = (INCLUDE_DMA!=0) ? SCLK : HCLK;
  assign   HCLKSYS  = SCLK;

//----------------------------------------
// Flash memory
//----------------------------------------
cmsdk_ahb_rom
//cmsdk_ahb_ram
  #(.MEM_TYPE(ROM_MEM_TYPE),
    .AW(16),  // 64K bytes flash ROM
//    .AW(13),  // 8K bytes flash ROM -Dhry
///    .AW(10),  // 1K bytes flash ROM - Hello
    .filename("../rtl_sim/image.hex"),
    .WS_N(`ARM_CMSDK_ROM_MEM_WS_N),
    .WS_S(`ARM_CMSDK_ROM_MEM_WS_S)
   ,.BE  (BE)
   )
   u_ahb_rom (
    .HCLK             (HCLKSYS),
    .HRESETn          (HRESETn),
    .HSEL             (flash_hsel),  // AHB inputs
    .HADDR            (HADDR[15:0]),
//    .HADDR            (HADDR[12:0]),
///    .HADDR            (HADDR[ 9:0]),
    .HTRANS           (HTRANS),
    .HSIZE            (HSIZE),
    .HWRITE           (HWRITE),
    .HWDATA           (HWDATA),
    .HREADY           (HREADY),

    .HREADYOUT        (flash_hreadyout), // Outputs
    .HRDATA           (flash_hrdata),
    .HRESP            (flash_hresp)
  );

//----------------------------------------
// Boot loader / Firmware
//----------------------------------------
// Only use if BOOT_MEM_TYPE is not zero
`ifdef SYNTHBOOTROM
ahb_bootrom
//ahb_bootrom__mangled
//  #(.AW(10)  ) // 1K bytes ROM
   u_ahb_bootloader (
    .HCLK             (HCLKSYS),
    .HRESETn          (HRESETn),
    .HSEL             (boot_hsel),  // AHB inputs
    .HADDR            (HADDR[ 9:0]),
    .HTRANS           (HTRANS),
    .HSIZE            (HSIZE),
    .HWRITE           (HWRITE),
    .HWDATA           (HWDATA),
    .HREADY           (HREADY),

    .HREADYOUT        (boot_hreadyout), // Outputs
    .HRDATA           (boot_hrdata),
    .HRESP            (boot_hresp)
  );
  
`else
// Only use if BOOT_MEM_TYPE is not zero
cmsdk_ahb_rom
  #(.MEM_TYPE(BOOT_MEM_TYPE),
//    .AW(12),  // 4K bytes ROM
    .AW(10),  // 1K bytes ROM
    .filename("bootloader.hex"),
    .WS_N(`ARM_CMSDK_BOOT_MEM_WS_N),
    .WS_S(`ARM_CMSDK_BOOT_MEM_WS_S),
    .BE  (BE))
   u_ahb_bootloader (
    .HCLK             (HCLKSYS),
    .HRESETn          (HRESETn),
    .HSEL             (boot_hsel),  // AHB inputs
//    .HADDR            (HADDR[11:0]),
    .HADDR            (HADDR[ 9:0]),
    .HTRANS           (HTRANS),
    .HSIZE            (HSIZE),
    .HWRITE           (HWRITE),
    .HWDATA           (HWDATA),
    .HREADY           (HREADY),

    .HREADYOUT        (boot_hreadyout), // Outputs
    .HRDATA           (boot_hrdata),
    .HRESP            (boot_hresp)
  );
`endif

//----------------------------------------
// SRAM
//----------------------------------------
cmsdk_ahb_ram
  #(.MEM_TYPE(RAM_MEM_TYPE),
    .AW(16),  // 64K bytes SRAM
//    .AW(10),  // 1K bytes SRAM
///    .AW( 9),  // 512 bytes SRAM
    .WS_N(`ARM_CMSDK_RAM_MEM_WS_N),
    .WS_S(`ARM_CMSDK_RAM_MEM_WS_S))
   u_ahb_ram (
    .HCLK             (HCLKSYS),
    .HRESETn          (HRESETn),
    .HSEL             (sram_hsel),  // AHB inputs
    .HADDR            (HADDR[15:0]),
//    .HADDR            (HADDR[ 9:0]),
///    .HADDR            (HADDR[ 8:0]),
    .HTRANS           (HTRANS),
    .HSIZE            (HSIZE),
    .HWRITE           (HWRITE),
    .HWDATA           (HWDATA),
    .HREADY           (HREADY),
Next12
HierarchyFilesModulesSignalsTasksFunctionsHelp

This page: Created:Mon Jul 4 11:27:23 2022
From: ../verilog/cmsdk_mcu_chip.v

Verilog converted to html by v2html 7.30.1.3 (written by Costas Calamvokis).Help