cvw/wallypipelinedsoc.sv

93 lines
4.1 KiB
Systemverilog
Raw Normal View History

2021-01-15 04:37:51 +00:00
///////////////////////////////////////////
2021-01-29 06:07:17 +00:00
// wally-pipelinedsoc.sv
2021-01-15 04:37:51 +00:00
//
// Written: David_Harris@hmc.edu 6 November 2020
// Modified:
//
2023-01-12 12:35:44 +00:00
// Purpose: System on chip including pipelined processor and uncore memories/peripherals
2021-01-15 04:37:51 +00:00
//
2023-01-14 13:57:50 +00:00
// Documentation: RISC-V System on Chip Design (Figure 6.20)
//
2023-01-11 23:15:08 +00:00
// A component of the CORE-V-WALLY configurable RISC-V project.
2021-01-15 04:37:51 +00:00
//
// Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University
//
// SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1
//
// Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file
// except in compliance with the License, or, at your option, the Apache License version 2.0. You
// may obtain a copy of the License at
//
// https://solderpad.org/licenses/SHL-2.1/
//
// Unless required by applicable law or agreed to in writing, any work distributed under the
// License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
////////////////////////////////////////////////////////////////////////////////////////////////
2021-01-15 04:37:51 +00:00
2023-01-27 23:47:36 +00:00
import cvw::*; // global CORE-V-Wally parameters
2021-01-15 04:37:51 +00:00
2021-01-29 06:07:17 +00:00
module wallypipelinedsoc (
2023-01-12 12:35:44 +00:00
input logic clk,
2023-01-14 13:57:50 +00:00
input logic reset_ext, // external asynchronous reset pin
output logic reset, // reset synchronized to clk to prevent races on release
// AHB Interface
2023-01-27 23:47:36 +00:00
input logic [AHBW-1:0] HRDATAEXT,
2023-01-12 12:35:44 +00:00
input logic HREADYEXT, HRESPEXT,
output logic HSELEXT,
2021-01-30 04:43:48 +00:00
// outputs to external memory, shared with uncore memory
2023-01-12 12:35:44 +00:00
output logic HCLK, HRESETn,
2023-01-27 23:47:36 +00:00
output logic [PA_BITS-1:0] HADDR,
output logic [AHBW-1:0] HWDATA,
output logic [XLEN/8-1:0] HWSTRB,
2023-01-12 12:35:44 +00:00
output logic HWRITE,
output logic [2:0] HSIZE,
output logic [2:0] HBURST,
output logic [3:0] HPROT,
output logic [1:0] HTRANS,
output logic HMASTLOCK,
output logic HREADY,
2021-01-29 06:07:17 +00:00
// I/O Interface
2023-01-14 13:57:50 +00:00
input logic TIMECLK, // optional for CLINT MTIME counter
input logic [31:0] GPIOPinsIn, // inputs from GPIO
output logic [31:0] GPIOPinsOut, // output values for GPIO
output logic [31:0] GPIOPinsEn, // output enables for GPIO
input logic UARTSin, // UART serial data input
output logic UARTSout, // UART serial data output
input logic SDCCmdIn, // SDC Command input
output logic SDCCmdOut, // SDC Command output
output logic SDCCmdOE, // SDC Command output enable
input logic [3:0] SDCDatIn, // SDC data input
output logic SDCCLK // SDC clock
2021-01-15 05:25:56 +00:00
);
2021-01-15 04:37:51 +00:00
2021-01-30 04:43:48 +00:00
// Uncore signals
2023-01-27 23:47:36 +00:00
logic [AHBW-1:0] HRDATA; // from AHB mux in uncore
2023-01-14 13:57:50 +00:00
logic HRESP; // response from AHB
logic MTimerInt, MSwInt; // timer and software interrupts from CLINT
logic [63:0] MTIME_CLINT; // from CLINT to CSRs
logic MExtInt,SExtInt; // from PLIC
2022-07-05 15:51:35 +00:00
2021-10-25 17:05:41 +00:00
// synchronize reset to SOC clock domain
synchronizer resetsync(.clk, .d(reset_ext), .q(reset));
2021-01-15 04:37:51 +00:00
// instantiate processor and internal memories
wallypipelinedcore core(.clk, .reset,
.MTimerInt, .MExtInt, .SExtInt, .MSwInt, .MTIME_CLINT,
2022-07-05 15:51:35 +00:00
.HRDATA, .HREADY, .HRESP, .HCLK, .HRESETn, .HADDR, .HWDATA, .HWSTRB,
.HWRITE, .HSIZE, .HBURST, .HPROT, .HTRANS, .HMASTLOCK
2021-10-20 20:49:18 +00:00
);
2021-01-15 04:37:51 +00:00
// instantiate uncore if a bus interface exists
2023-01-29 02:35:53 +00:00
if (BUS_SUPPORTED) begin : uncore
2022-08-25 15:35:24 +00:00
uncore uncore(.HCLK, .HRESETn, .TIMECLK,
.HADDR, .HWDATA, .HWSTRB, .HWRITE, .HSIZE, .HBURST, .HPROT, .HTRANS, .HMASTLOCK, .HRDATAEXT,
2022-08-25 22:36:47 +00:00
.HREADYEXT, .HRESPEXT, .HRDATA, .HREADY, .HRESP, .HSELEXT,
2022-08-25 15:35:24 +00:00
.MTimerInt, .MSwInt, .MExtInt, .SExtInt, .GPIOPinsIn, .GPIOPinsOut, .GPIOPinsEn, .UARTSin,
2022-08-25 22:36:47 +00:00
.UARTSout, .MTIME_CLINT,
.SDCCmdOut, .SDCCmdOE, .SDCCmdIn, .SDCDatIn, .SDCCLK);
2022-08-25 15:35:24 +00:00
end
endmodule