Line 32... |
Line 32... |
//// ////
|
//// ////
|
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
|
|
// CVS Log
|
// CVS Log
|
//
|
//
|
// $Id: dragonball_wbmaster.v,v 1.1.1.1 2002-12-03 09:02:31 rherveille Exp $
|
// $Id: dragonball_wbmaster.v,v 1.2 2002-12-22 16:09:33 rherveille Exp $
|
//
|
//
|
// $Date: 2002-12-03 09:02:31 $
|
// $Date: 2002-12-22 16:09:33 $
|
// $Revision: 1.1.1.1 $
|
// $Revision: 1.2 $
|
// $Author: rherveille $
|
// $Author: rherveille $
|
// $Locker: $
|
// $Locker: $
|
// $State: Exp $
|
// $State: Exp $
|
//
|
//
|
|
// Change History:
|
|
// $Log: not supported by cvs2svn $
|
|
//
|
|
|
|
|
|
|
//
|
//
|
// This core converts a 16bit DragonBall bus interface into a 16bit
|
// This core converts a 16bit DragonBall bus interface into a 16bit
|
Line 52... |
Line 55... |
|
|
// synopsys translate_off
|
// synopsys translate_off
|
`include "timescale.v"
|
`include "timescale.v"
|
// synopsys translate_on
|
// synopsys translate_on
|
|
|
module dragonix_wbmaster(
|
module dragonball_wbmaster(
|
clk, reset_n,
|
clk, reset_n,
|
a, cs_n, d, lwe_n, uwe_n, oe_n, dtack_n, berr,
|
a, cs_n, d, lwe_n, uwe_n, oe_n, dtack_n, berr,
|
clk_o, rst_o, cyc_o, stb_o, adr_o, sel_o, we_o, dat_o, dat_i, ack_i, err_i
|
clk_o, rst_o, cyc_o, stb_o, adr_o, sel_o, we_o, dat_o, dat_i, ack_i, err_i
|
);
|
);
|
|
|
Line 100... |
Line 103... |
|
|
reg cyc_o, stb_o;
|
reg cyc_o, stb_o;
|
reg [adr_hi:1] adr_o;
|
reg [adr_hi:1] adr_o;
|
reg [ 1:0] sel_o;
|
reg [ 1:0] sel_o;
|
reg we_o;
|
reg we_o;
|
reg [ 15:0] dat_o;
|
|
reg dtack;
|
reg dtack;
|
|
reg [ 15:0] sdat_i;
|
|
|
wire cs = !cs_n & !(ack_i | err_i | dtack); // generate active high chip select signal
|
wire cs = !cs_n & !(ack_i | err_i | dtack); // generate active high chip select signal
|
wire lwe = !lwe_n; // generate active high lo_write_enable signal
|
wire lwe = !lwe_n; // generate active high lo_write_enable signal
|
wire uwe = !uwe_n; // generate active high hi_write_enable signal
|
wire uwe = !uwe_n; // generate active high hi_write_enable signal
|
wire oe = !oe_n; // generate active high output enable signal
|
wire oe = !oe_n; // generate active high output enable signal
|
Line 121... |
Line 124... |
cyc_o <= #1 1'b0;
|
cyc_o <= #1 1'b0;
|
stb_o <= #1 1'b0;
|
stb_o <= #1 1'b0;
|
adr_o <= #1 {{adr_hi-1}{1'b0}};
|
adr_o <= #1 {{adr_hi-1}{1'b0}};
|
sel_o <= #1 2'b00;
|
sel_o <= #1 2'b00;
|
we_o <= #1 1'b0;
|
we_o <= #1 1'b0;
|
dat_o <= #1 16'h0;
|
|
dtack <= #1 1'b0;
|
dtack <= #1 1'b0;
|
|
sdat_i <= #1 16'h0;
|
end
|
end
|
else
|
else
|
begin
|
begin
|
cyc_o <= #1 cs; // assert cyc_o when CS asserted
|
cyc_o <= #1 cs; // assert cyc_o when CS asserted
|
stb_o <= #1 cs; // assert stb_o when CS asserted
|
stb_o <= #1 cs; // assert stb_o when CS asserted
|
Line 134... |
Line 137... |
adr_o <= #1 a; // address == external address
|
adr_o <= #1 a; // address == external address
|
sel_o <= #1 oe ? 2'b11 : {uwe, lwe}; // generate select lines;
|
sel_o <= #1 oe ? 2'b11 : {uwe, lwe}; // generate select lines;
|
// read (oe asserted): SEL[1:0] = '11'
|
// read (oe asserted): SEL[1:0] = '11'
|
// write (oe negated): SEL[1:0] = 'uwe, lwe'
|
// write (oe negated): SEL[1:0] = 'uwe, lwe'
|
we_o <= #1 uwe | lwe; // write == uwe OR lwe asserted
|
we_o <= #1 uwe | lwe; // write == uwe OR lwe asserted
|
dat_o <= #1 d; // dat_o == external data
|
|
|
|
dtack <= ack_i & !dtack; // generate DTACK signal
|
dtack <= #1 ack_i & !dtack; // generate DTACK signal
|
|
|
|
sdat_i <= #1 dat_i; // synchronize dat_i
|
end
|
end
|
|
|
assign d = (cs & oe) ? dat_i : 16'hzzzz; // generate databus tri-state buffers
|
assign dat_o = d; // dat_o==external databus (not synchronised!!)
|
|
|
|
assign d = (~cs_n & oe) ? sdat_i : 16'hzzzz; // generate databus tri-state buffers
|
assign dtack_n = !dtack; // generate active low DTACK signal
|
assign dtack_n = !dtack; // generate active low DTACK signal
|
|
|
endmodule
|
endmodule
|
|
|
|
|
No newline at end of file
|
No newline at end of file
|