OpenCores
URL https://opencores.org/ocsvn/yifive/yifive/trunk

Subversion Repositories yifive

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /yifive
    from Rev 19 to Rev 20
    Reverse comparison

Rev 19 → Rev 20

/trunk/caravel_yifive/verilog/rtl/digital_core/src/digital_core.sv
0,0 → 1,521
//////////////////////////////////////////////////////////////////////
//// ////
//// Digital core ////
//// ////
//// This file is part of the YIFive cores project ////
//// http://www.opencores.org/cores/yifive/ ////
//// ////
//// Description ////
//// This is digital core and integrate all the main block ////
//// here. Following block are integrated here ////
//// 1. Risc V Core ////
//// 2. SPI Master ////
//// 3. Wishbone Cross Bar ////
//// ////
//// To Do: ////
//// nothing ////
//// ////
//// Author(s): ////
//// - Dinesh Annayya, dinesha@opencores.org ////
//// ////
//// Revision : ////
//// 0.1 - 16th Feb 2021, Dinesh A ////
//// Initial integration with Risc-V core + ////
//// Wishbone Cross Bar + SPI Master ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer. ////
//// ////
//// This source file is free software; you can redistribute it ////
//// and/or modify it under the terms of the GNU Lesser General ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any ////
//// later version. ////
//// ////
//// This source is distributed in the hope that it will be ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
//// PURPOSE. See the GNU Lesser General Public License for more ////
//// details. ////
//// ////
//// You should have received a copy of the GNU Lesser General ////
//// Public License along with this source; if not, download it ////
//// from http://www.opencores.org/lgpl.shtml ////
//// ////
//////////////////////////////////////////////////////////////////////
 
`include "scr1_arch_description.svh"
`ifdef SCR1_IPIC_EN
`include "scr1_ipic.svh"
`endif // SCR1_IPIC_EN
 
`include "sdrc_define.v"
module digital_core
#(
parameter SDR_DW = 8, // SDR Data Width
parameter SDR_BW = 1, // SDR Byte Width
parameter WB_WIDTH = 32 // WB ADDRESS/DARA WIDTH
) (
input logic clk, // System clock
input logic rtc_clk, // Real-time clock
input logic pwrup_rst_n, // Power-Up Reset
input logic cpu_rst_n, // CPU Reset (Core Reset)
input logic rst_n, // Regular Reset signal
 
`ifdef SCR1_DBG_EN
output logic sys_rst_n_o, // External System Reset output
// (for the processor cluster's components or
// external SOC (could be useful in small
// SCR-core-centric SOCs))
output logic sys_rdc_qlfy_o, // System-to-External SOC Reset Domain Crossing Qualifier
`endif // SCR1_DBG_EN
// Fuses
input logic [`SCR1_XLEN-1:0] fuse_mhartid, // Hart ID
 
`ifdef SCR1_DBG_EN
input logic [31:0] fuse_idcode, // TAPC IDCODE
`endif // SCR1_DBG_EN
// IRQ
`ifdef SCR1_IPIC_EN
input logic [SCR1_IRQ_LINES_NUM-1:0] irq_lines, // IRQ lines to IPIC
`else // SCR1_IPIC_EN
input logic ext_irq, // External IRQ input
`endif // SCR1_IPIC_EN
input logic soft_irq, // Software IRQ input
 
`ifdef SCR1_DBG_EN
// -- JTAG I/F
input logic trst_n,
input logic tck,
input logic tms,
input logic tdi,
output logic tdo,
output logic tdo_en,
`endif // SCR1_DBG_EN
input logic wbd_ext_stb_i, // strobe/request
input logic [WB_WIDTH-1:0] wbd_ext_adr_i, // address
input logic wbd_ext_we_i, // write
input logic [WB_WIDTH-1:0] wbd_ext_dat_i, // data output
input logic [3:0] wbd_ext_sel_i, // byte enable
output logic [WB_WIDTH-1:0] wbd_ext_dat_o, // data input
output logic wbd_ext_ack_o, // acknowlegement
output logic wbd_ext_err_o, // error
 
/* Interface to SDRAMs */
output logic sdr_cke, // SDRAM CKE
output logic sdr_cs_n, // SDRAM Chip Select
output logic sdr_ras_n, // SDRAM ras
output logic sdr_cas_n, // SDRAM cas
output logic sdr_we_n, // SDRAM write enable
output logic [SDR_BW-1:0] sdr_dqm, // SDRAM Data Mask
output logic [1:0] sdr_ba, // SDRAM Bank Enable
output logic [12:0] sdr_addr, // SDRAM Address
input logic [SDR_DW-1:0] pad_sdr_din, // SDRA Data Input
output logic [SDR_DW-1:0] sdr_dout, // SDRA Data output
output logic [SDR_BW-1:0] sdr_den_n, // SDRAM Data Output enable
input sdram_pad_clk,// Sdram clock loop back from pad
 
// SPI Master I/F
output logic spim_clk,
output logic spim_csn0,
output logic spim_csn1,
output logic spim_csn2,
output logic spim_csn3,
output logic [1:0] spim_mode,
input logic [3:0] spim_sdi, // SPI Master out
output logic [3:0] spim_sdo, // SPI Master out
output logic spi_en_tx // SPI Pad directional control
 
//inout tri [3:0] spim_sdio // SPI Master in/out
);
 
//---------------------------------------------------
// Local Parameter Declaration
// --------------------------------------------------
 
 
//---------------------------------------------------------------------
// Wishbone Risc V Instruction Memory Interface
//---------------------------------------------------------------------
logic wbd_riscv_imem_stb_i; // strobe/request
logic [WB_WIDTH-1:0] wbd_riscv_imem_adr_i; // address
logic wbd_riscv_imem_we_i; // write
logic [WB_WIDTH-1:0] wbd_riscv_imem_dat_i; // data output
logic [3:0] wbd_riscv_imem_sel_i; // byte enable
logic [WB_WIDTH-1:0] wbd_riscv_imem_dat_o; // data input
logic wbd_riscv_imem_ack_o; // acknowlegement
logic wbd_riscv_imem_err_o; // error
 
//---------------------------------------------------------------------
// RISC V Wishbone Data Memory Interface
//---------------------------------------------------------------------
logic wbd_riscv_dmem_stb_i; // strobe/request
logic [WB_WIDTH-1:0] wbd_riscv_dmem_adr_i; // address
logic wbd_riscv_dmem_we_i; // write
logic [WB_WIDTH-1:0] wbd_riscv_dmem_dat_i; // data output
logic [3:0] wbd_riscv_dmem_sel_i; // byte enable
logic [WB_WIDTH-1:0] wbd_riscv_dmem_dat_o; // data input
logic wbd_riscv_dmem_ack_o; // acknowlegement
logic wbd_riscv_dmem_err_o; // error
 
//---------------------------------------------------------------------
// SPI Master Wishbone Interface
//---------------------------------------------------------------------
logic wbd_spim_stb_o; // strobe/request
logic [WB_WIDTH-1:0] wbd_spim_adr_o; // address
logic wbd_spim_we_o; // write
logic [WB_WIDTH-1:0] wbd_spim_dat_o; // data output
logic [3:0] wbd_spim_sel_o; // byte enable
logic wbd_spim_cyc_o ;
logic [WB_WIDTH-1:0] wbd_spim_dat_i; // data input
logic wbd_spim_ack_i; // acknowlegement
logic wbd_spim_err_i; // error
 
//---------------------------------------------------------------------
// SPI Master Wishbone Interface
//---------------------------------------------------------------------
logic wbd_sdram_stb_o ;
logic [WB_WIDTH-1:0] wbd_sdram_addr_o;
logic wbd_sdram_we_o ; // 1 - Write, 0 - Read
logic [WB_WIDTH-1:0] wbd_sdram_dat_o ;
logic [WB_WIDTH/8-1:0] wbd_sdram_sel_o ; // Byte enable
logic wbd_sdram_cyc_o ;
logic [2:0] wbd_sdram_cti_o ;
logic [WB_WIDTH-1:0] wbd_sdram_dat_i ;
logic wbd_sdram_ack_i ;
 
//---------------------------------------------------------------------
// Global Register Wishbone Interface
//---------------------------------------------------------------------
logic wbd_glbl_stb_o; // strobe/request
logic [WB_WIDTH-1:0] wbd_glbl_addr_o; // address
logic wbd_glbl_we_o; // write
logic [WB_WIDTH-1:0] wbd_glbl_dat_o; // data output
logic [3:0] wbd_glbl_sel_o; // byte enable
logic wbd_glbl_cyc_o ;
logic [WB_WIDTH-1:0] wbd_glbl_dat_i; // data input
logic wbd_glbl_ack_i; // acknowlegement
logic wbd_glbl_err_i; // error
//------------------------------------------------
// Configuration Parameter
//------------------------------------------------
logic [1:0] cfg_sdr_width ; // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
logic [1:0] cfg_colbits ; // 2'b00 - 8 Bit column address,
logic sdr_init_done ; // Indicate SDRAM Initialisation Done
logic [3:0] cfg_sdr_tras_d ; // Active to precharge delay
logic [3:0] cfg_sdr_trp_d ; // Precharge to active delay
logic [3:0] cfg_sdr_trcd_d ; // Active to R/W delay
logic cfg_sdr_en ; // Enable SDRAM controller
logic [1:0] cfg_req_depth ; // Maximum Request accepted by SDRAM controller
logic [12:0] cfg_sdr_mode_reg ;
logic [2:0] cfg_sdr_cas ; // SDRAM CAS Latency
logic [3:0] cfg_sdr_trcar_d ; // Auto-refresh period
logic [3:0] cfg_sdr_twr_d ; // Write recovery delay
logic [`SDR_RFSH_TIMER_W-1 : 0] cfg_sdr_rfsh ;
logic [`SDR_RFSH_ROW_CNT_W -1 : 0] cfg_sdr_rfmax ;
 
//-----------------------------------------------------------
// SPI I/F
// ////////////////////////////////////////////////////
logic spim_sdo0 ; // SPI Master Data Out[0]
logic spim_sdo1 ; // SPI Master Data Out[1]
logic spim_sdo2 ; // SPI Master Data Out[2]
logic spim_sdo3 ; // SPI Master Data Out[3]
logic spim_sdi0 ; // SPI Master Data In[0]
logic spim_sdi1 ; // SPI Master Data In[1]
logic spim_sdi2 ; // SPI Master Data In[2]
logic spim_sdi3 ; // SPI Master Data In[3]
 
//`ifdef VERILATOR // Verilator has limited support for bi-di pad
assign spim_sdi0 = spim_sdi[0];
assign spim_sdi1 = spim_sdi[1];
assign spim_sdi2 = spim_sdi[2];
assign spim_sdi3 = spim_sdi[3];
assign spim_sdo = {spim_sdo3,spim_sdo2,spim_sdo1,spim_sdo0};
//`else
// assign spim_sdi0 = spim_sdio[0];
// assign spim_sdi1 = spim_sdio[1];
// assign spim_sdi2 = spim_sdio[2];
// assign spim_sdi3 = spim_sdio[3];
//
// assign spim_sdio[0] = (spi_en_tx) ? spim_sdo0 : 1'bz;
// assign spim_sdio[1] = (spi_en_tx) ? spim_sdo1 : 1'bz;
// assign spim_sdio[2] = (spi_en_tx) ? spim_sdo2 : 1'bz;
// assign spim_sdio[3] = (spi_en_tx) ? spim_sdo3 : 1'bz;
//
//`endif
//------------------------------------------------------------------------------
// RISC V Core instance
//------------------------------------------------------------------------------
scr1_top_wb u_riscv_top (
// Reset
.pwrup_rst_n (pwrup_rst_n ),
.rst_n (rst_n ),
.cpu_rst_n (cpu_rst_n ),
`ifdef SCR1_DBG_EN
.sys_rst_n_o (sys_rst_n_o ),
.sys_rdc_qlfy_o (sys_rdc_qlfy_o ),
`endif // SCR1_DBG_EN
 
// Clock
.clk (clk ),
.rtc_clk (rtc_clk ),
 
// Fuses
.fuse_mhartid (fuse_mhartid ),
`ifdef SCR1_DBG_EN
.fuse_idcode (`SCR1_TAP_IDCODE ),
`endif // SCR1_DBG_EN
 
// IRQ
`ifdef SCR1_IPIC_EN
.irq_lines ('0 ), // TODO - Interrupts
`else // SCR1_IPIC_EN
.ext_irq ('0 ), // TODO - Interrupts
`endif // SCR1_IPIC_EN
.soft_irq ('0 ), // TODO - Interrupts
 
// DFT
.test_mode (1'b0 ),
.test_rst_n (1'b1 ),
 
`ifdef SCR1_DBG_EN
// JTAG
.trst_n (trst_n ),
.tck (tck ),
.tms (tms ),
.tdi (tdi ),
.tdo (tdo ),
.tdo_en (tdo_en ),
`endif // SCR1_DBG_EN
 
// Instruction memory interface
.wbd_imem_stb_o (wbd_riscv_imem_stb_i ),
.wbd_imem_adr_o (wbd_riscv_imem_adr_i ),
.wbd_imem_we_o (wbd_riscv_imem_we_i ),
.wbd_imem_dat_o (wbd_riscv_imem_dat_i ),
.wbd_imem_sel_o (wbd_riscv_imem_sel_i ),
.wbd_imem_dat_i (wbd_riscv_imem_dat_o ),
.wbd_imem_ack_i (wbd_riscv_imem_ack_o ),
.wbd_imem_err_i (wbd_riscv_imem_err_o ),
 
// Data memory interface
.wbd_dmem_stb_o (wbd_riscv_dmem_stb_i ),
.wbd_dmem_adr_o (wbd_riscv_dmem_adr_i ),
.wbd_dmem_we_o (wbd_riscv_dmem_we_i ),
.wbd_dmem_dat_o (wbd_riscv_dmem_dat_i ),
.wbd_dmem_sel_o (wbd_riscv_dmem_sel_i ),
.wbd_dmem_dat_i (wbd_riscv_dmem_dat_o ),
.wbd_dmem_ack_i (wbd_riscv_dmem_ack_o ),
.wbd_dmem_err_i (wbd_riscv_dmem_err_o )
);
 
/*********************************************************
* SPI Master
* This is an implementation of an SPI master that is controlled via an AXI bus.
* It has FIFOs for transmitting and receiving data.
* It supports both the normal SPI mode and QPI mode with 4 data lines.
* *******************************************************/
 
spim_top
#(
`ifndef SYNTHESIS
.WB_WIDTH (WB_WIDTH)
`endif
) u_spi_master
(
.mclk (clk ),
.rst_n (rst_n ),
 
.wbd_stb_i (wbd_spim_stb_o ),
.wbd_adr_i (wbd_spim_adr_o ),
.wbd_we_i (wbd_spim_we_o ),
.wbd_dat_i (wbd_spim_dat_o ),
.wbd_sel_i (wbd_spim_sel_o ),
.wbd_dat_o (wbd_spim_dat_i ),
.wbd_ack_o (wbd_spim_ack_i ),
.wbd_err_o (wbd_spim_err_i ),
 
.events_o ( ), // TODO - Need to connect to intr ?
 
.spi_clk (spim_clk ),
.spi_csn0 (spim_csn0 ),
.spi_csn1 (spim_csn1 ),
.spi_csn2 (spim_csn2 ),
.spi_csn3 (spim_csn3 ),
.spi_mode (spim_mode ),
.spi_sdo0 (spim_sdo0 ),
.spi_sdo1 (spim_sdo1 ),
.spi_sdo2 (spim_sdo2 ),
.spi_sdo3 (spim_sdo3 ),
.spi_sdi0 (spim_sdi0 ),
.spi_sdi1 (spim_sdi1 ),
.spi_sdi2 (spim_sdi2 ),
.spi_sdi3 (spim_sdi3 ),
.spi_en_tx (spi_en_tx )
);
 
 
sdrc_top #(.APP_AW(WB_WIDTH),
.APP_DW(WB_WIDTH),
.APP_BW(4),
.SDR_DW(8),
.SDR_BW(1))
u_sdram_ctrl (
.cfg_sdr_width (cfg_sdr_width ),
.cfg_colbits (cfg_colbits ),
// WB bus
.wb_rst_i (rst_n ),
.wb_clk_i (clk ),
.wb_stb_i (wbd_sdram_stb_o ),
.wb_addr_i (wbd_sdram_addr_o ),
.wb_we_i (wbd_sdram_we_o ),
.wb_dat_i (wbd_sdram_dat_o ),
.wb_sel_i (wbd_sdram_sel_o ),
.wb_cyc_i (wbd_sdram_cyc_o ),
.wb_cti_i (wbd_sdram_cti_o ),
.wb_ack_o (wbd_sdram_ack_i ),
.wb_dat_o (wbd_sdram_dat_i ),
 
/* Interface to SDRAMs */
.sdram_clk (sdram_clk ),
.sdram_resetn (sdram_resetn ),
.sdr_cs_n (sdr_cs_n ),
.sdr_cke (sdr_cke ),
.sdr_ras_n (sdr_ras_n ),
.sdr_cas_n (sdr_cas_n ),
.sdr_we_n (sdr_we_n ),
.sdr_dqm (sdr_dqm ),
.sdr_ba (sdr_ba ),
.sdr_addr (sdr_addr ),
.pad_sdr_din (pad_sdr_din ),
.sdr_dout (sdr_dout ),
.sdr_den_n (sdr_den_n ),
.sdram_pad_clk (sdram_pad_clk ),
/* Parameters */
.sdr_init_done (sdr_init_done ),
.cfg_req_depth (cfg_req_depth ), //how many req. buffer should hold
.cfg_sdr_en (cfg_sdr_en ),
.cfg_sdr_mode_reg (cfg_sdr_mode_reg ),
.cfg_sdr_tras_d (cfg_sdr_tras_d ),
.cfg_sdr_trp_d (cfg_sdr_trp_d ),
.cfg_sdr_trcd_d (cfg_sdr_trcd_d ),
.cfg_sdr_cas (cfg_sdr_cas ),
.cfg_sdr_trcar_d (cfg_sdr_trcar_d ),
.cfg_sdr_twr_d (cfg_sdr_twr_d ),
.cfg_sdr_rfsh (cfg_sdr_rfsh ),
.cfg_sdr_rfmax (cfg_sdr_rfmax )
);
 
 
//------------------------------
// RISC Data Memory Map
// 0x0000_0000 to 0x0FFF_FFFF - SPI FLASH MEMORY
// 0x1000_0000 to 0x1000_00FF - SPI REGISTER
// 0x2000_0000 to 0x2FFF_FFFF - SDRAM
// 0x3000_0000 to 0x3000_00FF - GLOBAL REGISTER
//-----------------------------
//
wire [3:0] wbd_riscv_imem_tar_id = (wbd_riscv_imem_adr_i[31:28] == 4'b0000 ) ? 4'b0001 :
(wbd_riscv_imem_adr_i[31:28] == 4'b0001 ) ? 4'b0001 :
(wbd_riscv_imem_adr_i[31:28] == 4'b0010 ) ? 4'b0010 :
(wbd_riscv_imem_adr_i[31:28] == 4'b0011 ) ? 4'b0011 : 4'b0001;
 
wire [3:0] wbd_riscv_dmem_tar_id = (wbd_riscv_dmem_adr_i[31:28] == 4'b0000 ) ? 4'b0001 :
(wbd_riscv_dmem_adr_i[31:28] == 4'b0001 ) ? 4'b0001 :
(wbd_riscv_dmem_adr_i[31:28] == 4'b0010 ) ? 4'b0010 :
(wbd_riscv_dmem_adr_i[31:28] == 4'b0011 ) ? 4'b0011 : 4'b0001;
 
wire [3:0] wbd_ext_tar_id = (wbd_ext_adr_i[31:28] == 4'b0000 ) ? 4'b0001 :
(wbd_ext_adr_i[31:28] == 4'b0001 ) ? 4'b0001 :
(wbd_ext_adr_i[31:28] == 4'b0010 ) ? 4'b0010 :
(wbd_ext_adr_i[31:28] == 4'b0011 ) ? 4'b0011 : 4'b0001;
wb_crossbar #(
.WB_SLAVE(3),
.WB_MASTER(3),
.D_WD(32),
.BE_WD(4),
.ADR_WD(32),
.TAR_WD(4)
) u_wb_crossbar(
 
.rst_n (rst_n ),
.clk (clk ),
 
 
// Master Interface Signal
.wbd_taddr_master ({wbd_ext_tar_id,
wbd_riscv_dmem_tar_id,
wbd_riscv_imem_tar_id}),
.wbd_din_master ({wbd_ext_dat_i,
wbd_riscv_dmem_dat_i,
wbd_riscv_imem_dat_i}),
.wbd_dout_master ({wbd_ext_dat_o,
wbd_riscv_dmem_dat_o,
wbd_riscv_imem_dat_o}),
.wbd_adr_master ({wbd_ext_adr_i,
wbd_riscv_dmem_adr_i,
wbd_riscv_imem_adr_i} ),
.wbd_be_master ({wbd_ext_sel_i,
wbd_riscv_dmem_sel_i,
wbd_riscv_imem_sel_i}),
.wbd_we_master ({wbd_ext_we_i,
wbd_riscv_dmem_we_i,
wbd_riscv_imem_we_i}),
.wbd_ack_master ({wbd_ext_ack_o,
wbd_riscv_dmem_ack_o,
wbd_riscv_imem_ack_o}),
.wbd_stb_master ({wbd_ext_stb_i,
wbd_riscv_dmem_stb_i,
wbd_riscv_imem_stb_i}),
.wbd_cyc_master ({wbd_ext_stb_i,
wbd_riscv_dmem_stb_i,
wbd_riscv_imem_stb_i}),
.wbd_err_master ({wbd_ext_err_o,
wbd_riscv_dmem_err_o,
wbd_riscv_imem_err_o}),
.wbd_rty_master ( ),
// Slave Interface Signal
.wbd_din_slave ({wbd_glbl_dat_o,
wbd_sdram_dat_o,
wbd_spim_dat_o} ),
.wbd_dout_slave ({wbd_glbl_dat_i,
wbd_sdram_dat_i,
wbd_spim_dat_i} ),
.wbd_adr_slave ({wbd_glbl_addr_o,
wbd_sdram_addr_o,
wbd_spim_adr_o} ),
.wbd_be_slave ({wbd_glbl_sel_o,
wbd_sdram_sel_o,
wbd_spim_sel_o} ),
.wbd_we_slave ({wbd_glbl_we_o,
wbd_sdram_we_o,
wbd_spim_we_o} ),
.wbd_ack_slave ({wbd_glbl_ack_i,
wbd_sdram_ack_i,
wbd_spim_ack_i} ),
.wbd_stb_slave ({wbd_glbl_stb_o,
wbd_sdram_stb_o,
wbd_spim_stb_o} ),
.wbd_cyc_slave ({wbd_glbl_cyc_o,
wbd_sdram_cyc_o,
wbd_spim_cyc_o} ),
.wbd_err_slave (3'b0 ),
.wbd_rty_slave (3'b0 )
);
 
 
 
endmodule : digital_core
/trunk/caravel_yifive/verilog/rtl/digital_core/filelist_rtl.f
0,0 → 1,56
 
+incdir+../sdram_ctrl/src/defs
+incdir+../syntacore/scr1/src/includes
 
../spi_master/src/spim_top.sv
../spi_master/src/spim_regs.sv
../spi_master/src/spim_clkgen.sv
../spi_master/src/spim_ctrl.sv
../spi_master/src/spim_rx.sv
../spi_master/src/spim_tx.sv
 
../sdram_ctrl/src/top/sdrc_top.v
../sdram_ctrl/src/wb2sdrc/wb2sdrc.v
../lib/async_fifo.sv
../sdram_ctrl/src/core/sdrc_core.v
../sdram_ctrl/src/core/sdrc_bank_ctl.v
../sdram_ctrl/src/core/sdrc_bank_fsm.v
../sdram_ctrl/src/core/sdrc_bs_convert.v
../sdram_ctrl/src/core/sdrc_req_gen.v
../sdram_ctrl/src/core/sdrc_xfr_ctl.v
 
../lib/wb_crossbar.v
./src/digital_core.sv
 
 
../syntacore/scr1/src/core/pipeline/scr1_pipe_hdu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_tdu.sv
../syntacore/scr1/src/core/pipeline/scr1_ipic.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_csr.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_exu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_ialu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_idu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_ifu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_lsu.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_mprf.sv
../syntacore/scr1/src/core/pipeline/scr1_pipe_top.sv
../syntacore/scr1/src/core/primitives/scr1_reset_cells.sv
../syntacore/scr1/src/core/primitives/scr1_cg.sv
../syntacore/scr1/src/core/scr1_clk_ctrl.sv
../syntacore/scr1/src/core/scr1_tapc_shift_reg.sv
../syntacore/scr1/src/core/scr1_tapc.sv
../syntacore/scr1/src/core/scr1_tapc_synchronizer.sv
../syntacore/scr1/src/core/scr1_core_top.sv
../syntacore/scr1/src/core/scr1_dm.sv
../syntacore/scr1/src/core/scr1_dmi.sv
../syntacore/scr1/src/core/scr1_scu.sv
 
../syntacore/scr1/src/top/scr1_dmem_router.sv
../syntacore/scr1/src/top/scr1_dp_memory.sv
../syntacore/scr1/src/top/scr1_tcm.sv
../syntacore/scr1/src/top/scr1_timer.sv
../syntacore/scr1/src/top/scr1_dmem_wb.sv
../syntacore/scr1/src/top/scr1_imem_wb.sv
../syntacore/scr1/src/top/scr1_top_wb.sv
../lib/sync_fifo.sv
 
trunk/caravel_yifive/verilog/rtl/digital_core/filelist_rtl.f Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/caravel_yifive/verilog/rtl/digital_core/run_modelsim =================================================================== --- trunk/caravel_yifive/verilog/rtl/digital_core/run_modelsim (nonexistent) +++ trunk/caravel_yifive/verilog/rtl/digital_core/run_modelsim (revision 20) @@ -0,0 +1,3 @@ +vlib work +vlog -f filelist_rtl.f +vsim -c digital_core -suppress vsim-3999 -do "exit"
trunk/caravel_yifive/verilog/rtl/digital_core/run_modelsim Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/caravel_yifive/verilog/rtl/lib/sync_fifo.sv =================================================================== --- trunk/caravel_yifive/verilog/rtl/lib/sync_fifo.sv (revision 19) +++ trunk/caravel_yifive/verilog/rtl/lib/sync_fifo.sv (revision 20) @@ -51,7 +51,8 @@ parameter W = 8; parameter D = 4; - parameter AW = (D == 4) ? 2 : + parameter AW = (D == 2) ? 1 : + (D == 4) ? 2 : (D == 8) ? 3 : (D == 16) ? 4 : (D == 32) ? 5 :
/trunk/caravel_yifive/verilog/rtl/lib/wb_crossbar.v
6,7 → 6,7
//// http://www.opencores.org/cores/yifive/ ////
//// ////
//// Description ////
//// This module does the WBbone crossbar network ////
//// This module does the Wishone crossbar network ////
//// ////
//// To Do: ////
//// nothing ////
47,7 → 47,7
//////////////////////////////////////////////////////////////////////
 
/**********************************************
Web-bone cross bar M-Master By S-Slave
Wish-bone cross bar M-Master By S-Slave
**********************************************/
 
module wb_crossbar (
/trunk/caravel_yifive/verilog/rtl/sdram_ctrl/src/core/sdrc_core.v
268,7 → 268,7
// This module takes requests from the app, chops them to burst booundaries
// if wrap=0, decodes the bank and passe the request to bank_ctl
 
sdrc_req_gen #(.SDR_DW(SDR_DW) , .SDR_BW(SDR_BW)) u_req_gen (
sdrc_req_gen #(.SDR_DW(SDR_DW) , .SDR_BW(SDR_BW),.APP_AW(APP_AW)) u_req_gen (
.clk (clk ),
.reset_n (reset_n ),
.cfg_colbits (cfg_colbits ),
/trunk/caravel_yifive/verilog/rtl/sdram_ctrl/src/top/sdrc_top.v
91,7 → 91,10
sdr_dqm ,
sdr_ba ,
sdr_addr ,
sdr_dq ,
pad_sdr_din ,
sdr_dout ,
sdr_den_n ,
sdram_pad_clk ,
/* Parameters */
sdr_init_done ,
108,15 → 111,14
cfg_sdr_rfmax
);
parameter APP_AW = 26; // Application Address Width
parameter APP_AW = 32; // Application Address Width
parameter APP_DW = 32; // Application Data Width
parameter APP_BW = 4; // Application Byte Width
parameter APP_RW = 9; // Application Request Width
 
parameter SDR_DW = 16; // SDR Data Width
parameter SDR_BW = 2; // SDR Byte Width
parameter SDR_DW = 8; // SDR Data Width
parameter SDR_BW = 1; // SDR Byte Width
parameter dw = 32; // data width
parameter tw = 8; // tag id width
parameter bl = 9; // burst_lenght_width
 
137,11 → 139,11
 
input wb_stb_i ;
output wb_ack_o ;
input [APP_AW-1:0] wb_addr_i ;
input [APP_AW-1:0] wb_addr_i ;
input wb_we_i ; // 1 - Write, 0 - Read
input [dw-1:0] wb_dat_i ;
input [dw/8-1:0] wb_sel_i ; // Byte enable
output [dw-1:0] wb_dat_o ;
input [APP_DW-1:0] wb_dat_i ;
input [APP_DW/8-1:0] wb_sel_i ; // Byte enable
output [APP_DW-1:0] wb_dat_o ;
input wb_cyc_i ;
input [2:0] wb_cti_i ;
 
156,7 → 158,10
output [SDR_BW-1:0] sdr_dqm ; // SDRAM Data Mask
output [1:0] sdr_ba ; // SDRAM Bank Enable
output [12:0] sdr_addr ; // SDRAM Address
inout [SDR_DW-1:0] sdr_dq ; // SDRA Data Input/output
input sdram_pad_clk ; // Sdram clock loop back from pad
input [SDR_DW-1:0] pad_sdr_din ; // SDRA Data Input
output [SDR_DW-1:0] sdr_dout ; // SDRAM Data Output
output [SDR_BW-1:0] sdr_den_n ; // SDRAM Data Output enable
 
//------------------------------------------------
// Configuration Parameter
183,13 → 188,13
wire app_req_wr_n ; // 0 - Write, 1 -> Read
wire app_req_ack ; // SDRAM request Accepted
wire app_busy_n ; // 0 -> sdr busy
wire [dw/8-1:0] app_wr_en_n ; // Active low sdr byte-wise write data valid
wire [APP_DW/8-1:0] app_wr_en_n ; // Active low sdr byte-wise write data valid
wire app_wr_next_req ; // Ready to accept the next write
wire app_rd_valid ; // sdr read valid
wire app_last_rd ; // Indicate last Read of Burst Transfer
wire app_last_wr ; // Indicate last Write of Burst Transfer
wire [dw-1:0] app_wr_data ; // sdr write data
wire [dw-1:0] app_rd_data ; // sdr read data
wire [APP_DW-1:0] app_wr_data ; // sdr write data
wire [APP_DW-1:0] app_rd_data ; // sdr read data
 
/****************************************
* These logic has to be implemented using Pads
199,15 → 204,15
wire [SDR_BW-1:0] sdr_den_n ; // SDRAM Data Output enable
 
 
assign sdr_dq = (&sdr_den_n == 1'b0) ? sdr_dout : {SDR_DW{1'bz}};
assign pad_sdr_din = sdr_dq;
//assign sdr_dq = (&sdr_den_n == 1'b0) ? sdr_dout : {SDR_DW{1'bz}};
//assign pad_sdr_din = sdr_dq;
 
// sdram pad clock is routed back through pad
// SDRAM Clock from Pad, used for registering Read Data
wire #(1.0) sdram_pad_clk = sdram_clk;
//wire #(1.0) sdram_pad_clk = sdram_clk;
 
/************** Ends Here **************************/
wb2sdrc #(.dw(dw),.tw(tw),.bl(bl)) u_wb2sdrc (
wb2sdrc #(.dw(APP_DW),.tw(tw),.bl(bl),.APP_AW(APP_AW)) u_wb2sdrc (
// WB bus
.wb_rst_i (wb_rst_i ) ,
.wb_clk_i (wb_clk_i ) ,
242,7 → 247,7
);
 
 
sdrc_core #(.SDR_DW(SDR_DW) , .SDR_BW(SDR_BW)) u_sdrc_core (
sdrc_core #(.SDR_DW(SDR_DW) , .SDR_BW(SDR_BW),.APP_AW(APP_AW)) u_sdrc_core (
.clk (sdram_clk ) ,
.pad_clk (sdram_pad_clk ) ,
.reset_n (sdram_resetn ) ,
/trunk/caravel_yifive/verilog/rtl/sdram_ctrl/src/wb2sdrc/wb2sdrc.v
121,7 → 121,7
input sdram_clk ; // sdram clock
input sdram_resetn ; // sdram reset
output sdr_req ; // SDRAM request
output [APP_AW-1:0] sdr_req_addr ; // SDRAM Request Address
output [APP_AW-1:0] sdr_req_addr ; // SDRAM Request Address
output [bl-1:0] sdr_req_len ;
output sdr_req_wr_n ; // 0 - Write, 1 -> Read
input sdr_req_ack ; // SDRAM request Accepted
/trunk/caravel_yifive/verilog/rtl/spi_master/src/spim_top.sv
53,14 → 53,14
input logic rst_n,
 
 
output logic wbd_stb_i, // strobe/request
output logic [WB_WIDTH-1:0] wbd_adr_i, // address
output logic wbd_we_i, // write
output logic [WB_WIDTH-1:0] wbd_dat_i, // data output
output logic [3:0] wbd_sel_i, // byte enable
input logic [WB_WIDTH-1:0] wbd_dat_o, // data input
input logic wbd_ack_o, // acknowlegement
input logic wbd_err_o, // error
input logic wbd_stb_i, // strobe/request
input logic [WB_WIDTH-1:0] wbd_adr_i, // address
input logic wbd_we_i, // write
input logic [WB_WIDTH-1:0] wbd_dat_i, // data output
input logic [3:0] wbd_sel_i, // byte enable
output logic [WB_WIDTH-1:0] wbd_dat_o, // data input
output logic wbd_ack_o, // acknowlegement
output logic wbd_err_o, // error
 
output logic [1:0] events_o,
 
/trunk/caravel_yifive/verilog/rtl/syntacore/scr1/src/top/scr1_dmem_wb.sv
337,6 → 337,7
 
 
wire [SCR1_WB_WIDTH+SCR1_WB_WIDTH+3+4:0] req_fifo_din = {hbel_in,hwrite_in,hwidth_in,haddr_in,hwdata_in};
wire [SCR1_WB_WIDTH+SCR1_WB_WIDTH+3+4:0] req_fifo_dout;
 
sync_fifo #(
.W(SCR1_WB_WIDTH+SCR1_WB_WIDTH+3+1+4), // Data Width
363,6 → 364,7
wire [SCR1_WB_WIDTH-1:0] hwdata_out;
wire [3:0] hbel_out;
 
 
assign {hbel_out,hwrite_out,hwidth_out,haddr_out,hwdata_out} = req_fifo_dout;
 
always_ff @(posedge clk) begin

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.