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

Subversion Repositories pit

[/] [pit/] [trunk/] [rtl/] [verilog/] [pit_wb_bus.v] - Diff between revs 9 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 9 Rev 10
Line 35... Line 35...
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
 
 
module pit_wb_bus #(parameter ARST_LVL = 1'b0,    // asynchronous reset level
module pit_wb_bus #(parameter ARST_LVL = 1'b0,    // asynchronous reset level
                    parameter DWIDTH = 16)
                    parameter DWIDTH = 16,
 
                    parameter SINGLE_CYCLE = 1'b0)
  (
  (
  // Wishbone Signals
  // Wishbone Signals
  output reg  [DWIDTH-1:0] wb_dat_o,     // databus output
  output reg  [DWIDTH-1:0] wb_dat_o,     // databus output
  output reg               wb_ack_o,     // bus cycle acknowledge output
  output                   wb_ack_o,     // bus cycle acknowledge output
  input                    wb_clk_i,     // master clock input
  input                    wb_clk_i,     // master clock input
  input                    wb_rst_i,     // synchronous active high reset
  input                    wb_rst_i,     // synchronous active high reset
  input                    arst_i,       // asynchronous reset
  input                    arst_i,       // asynchronous reset
  input             [ 2:0] wb_adr_i,     // lower address bits
  input             [ 2:0] wb_adr_i,     // lower address bits
  input       [DWIDTH-1:0] wb_dat_i,     // databus input
  input       [DWIDTH-1:0] wb_dat_i,     // databus input
Line 59... Line 60...
  input             [47:0] read_regs     // status register bits
  input             [47:0] read_regs     // status register bits
  );
  );
 
 
 
 
  // registers
  // registers
 
  reg    bus_wait_state;  // Holdoff wb_ack_o for one clock to add wait state
 
 
  // Wires
  // Wires
  wire   eight_bit_bus;
  wire   eight_bit_bus;
 
  wire   wb_wacc;         // WISHBONE Write Strobe
 
 
  //
  //
  // module body
  // module body
  //
  //
 
 
Line 74... Line 77...
 
 
  assign async_rst_b = arst_i ^ ARST_LVL;
  assign async_rst_b = arst_i ^ ARST_LVL;
  assign sync_reset = wb_rst_i;
  assign sync_reset = wb_rst_i;
 
 
  // generate wishbone signals
  // generate wishbone signals
  wire wb_wacc = wb_cyc_i & wb_stb_i & wb_we_i & wb_ack_o;
  assign wb_wacc = wb_cyc_i && wb_stb_i && wb_we_i && (wb_ack_o || SINGLE_CYCLE);
 
  assign wb_ack_o = SINGLE_CYCLE ? wb_cyc_i && wb_stb_i : bus_wait_state;
 
 
  // generate acknowledge output signal
  // generate acknowledge output signal, By using register all accesses takes two cycles.
  always @(posedge wb_clk_i)
  //  Accesses in back to back clock cycles are not possable.
    wb_ack_o <=  wb_cyc_i & wb_stb_i & ~wb_ack_o; // because timing is always honored
  always @(posedge wb_clk_i or negedge async_rst_b)
 
    if (!async_rst_b)
 
      bus_wait_state <=  1'b0;
 
    else if (sync_reset)
 
      bus_wait_state <=  1'b0;
 
    else
 
      bus_wait_state <=  wb_cyc_i && wb_stb_i && !bus_wait_state;
 
 
  // assign data read bus -- DAT_O
  // assign data read bus -- DAT_O
  always @(posedge wb_clk_i)
  always @(posedge wb_clk_i)
    case ({eight_bit_bus, wb_adr_i}) // synopsys parallel_case
    case ({eight_bit_bus, wb_adr_i}) // synopsys parallel_case
      // 8 bit Bus, 8 bit Granularity
      // 8 bit Bus, 8 bit Granularity

powered by: WebSVN 2.1.0

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