Line 1... |
Line 1... |
|
`timescale 1ns / 1ps
|
//=============================================================================
|
//=============================================================================
|
// (C) 2005-2012 Robert Finch
|
// (C) 2005-2012 Robert Finch
|
// All rights reserved.
|
// All rights reserved.
|
// robfinch@Opencores.org
|
// robfinch@Opencores.org
|
//
|
//
|
Line 94... |
Line 95... |
input cyc_i, // cycle valid
|
input cyc_i, // cycle valid
|
input stb_i, // strobe
|
input stb_i, // strobe
|
output ack_o, // transfer acknowledge
|
output ack_o, // transfer acknowledge
|
input we_i, // write
|
input we_i, // write
|
input [1:0] sel_i, // byte select
|
input [1:0] sel_i, // byte select
|
input [63:0] adr_i, // address
|
input [23:0] adr_i, // address
|
input [15:0] dat_i,
|
input [15:0] dat_i,
|
output reg [15:0] dat_o,
|
output reg [15:0] dat_o,
|
output vol_o, // volatile register selected
|
output vol_o, // volatile register selected
|
input i1, i2, i3, i4, i5, i6, i7,
|
input i1, i2, i3, i4, i5, i6, i7,
|
i8, i9, i10, i11, i12, i13, i14, i15,
|
i8, i9, i10, i11, i12, i13, i14, i15,
|
Line 109... |
Line 110... |
);
|
);
|
|
|
reg [15:0] ie; // interrupt enable register
|
reg [15:0] ie; // interrupt enable register
|
reg ack1;
|
reg ack1;
|
|
|
wire cs = cyc_i && stb_i && adr_i[63:4]==60'hFFFF_FFFF_FFDC_0FF;
|
wire cs = cyc_i && stb_i && adr_i[23:4]==20'hDC_0FF;
|
assign vol_o = cs;
|
assign vol_o = cs;
|
|
|
always @(posedge clk_i)
|
always @(posedge clk_i)
|
ack1 <= cs & !ack_o;
|
ack1 <= cs;
|
assign ack_o = ack1 && cs;
|
assign ack_o = cs ? (we_i ? 1'b1 : ack1) : 1'b0;
|
|
|
// write registers
|
// write registers
|
always @(posedge clk_i)
|
always @(posedge clk_i)
|
if (rst_i)
|
if (rst_i)
|
ie <= 16'h0;
|
ie <= 16'h0;
|