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

Subversion Repositories ahb_m_wishbone_s

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ahb_m_wishbone_s
    from Rev 5 to Rev 6
    Reverse comparison

Rev 5 → Rev 6

/trunk/rtl/AHB2WB.v
0,0 → 1,113
module AHB2WB(
 
//AHB MASTER SIDE
input HCLK,
input HRESETn,
input [31:0] HADDR,
input [31:0] HWDATA,
input HWRITE,
input HSEL,
input [1:0] HTRANS,
input [2:0] HSIZE,
input HREADY,
 
output [31:0] HRDATA,
output HRESP,
output HREADYOUT,
 
//WISHBONE SLAVE SIDE
output wb_clk_o,
output wb_rst_o,
output [31:0] wb_adr_o,
output [31:0] wb_dat_o,
output [3:0] wb_sel_o,
output wb_we_o,
output wb_stb_o,
output wb_cyc_o,
 
input [31:0] wb_dat_i,
input wb_ack_i
 
);
 
/*
Notes!!
1- No burst transfer
2- 32-bit only
3- HREADY is low by default only activated according to the ack_i
hence the core shouldn't be the default peripheral upon reset and should only be addressed during R/W
4- One cycle delay for the AHB master as the AHB data is available only during the second cyle whereas in the WB side it should
be available in the first cycle
*/
//register AHB signals
reg [31:0] rHADDR;
reg rHWRITE;
reg [1:0] rHTRANS;
reg [2:0] rHSIZE;
reg rHSEL;
 
//high priority pull down HREADYOUT before master latches false data
reg _pull_down_HREADYOUT;
 
//helpful signals
wire master_wants_read;
wire master_wants_write;
 
//for use in HREADYOUT
reg r_wb_cyc_o;
always @(posedge HCLK or negedge HRESETn) begin
if(!HRESETn) begin
rHADDR <= 0;
rHWRITE <= 0;
rHTRANS <= 0;
rHSIZE <= 0;
rHSEL <= 0;
end
else if(HREADY) begin
rHADDR <= HADDR;
rHWRITE <= HWRITE;
rHTRANS <= HTRANS;
rHSIZE <= HSIZE;
rHSEL <= HSEL;
end
end
 
assign master_wants_read = rHSEL & rHTRANS[1] & ~rHWRITE;
assign master_wants_write = rHSEL & rHTRANS[1] & rHWRITE;
assign wb_stb_o = master_wants_read | master_wants_write;
assign wb_cyc_o = wb_stb_o;
assign wb_we_o = master_wants_write;
assign wb_dat_o = HWDATA;
assign wb_adr_o = rHADDR;
assign wb_sel_o = {4{wb_stb_o&wb_cyc_o}};
assign wb_clk_o = HCLK;
assign wb_rst_o =!HRESETn;
 
always @(posedge HCLK or negedge HRESETn) begin
 
if(!HRESETn) r_wb_cyc_o <= 0;
else if((r_wb_cyc_o==1)&&(HREADYOUT==1)) r_wb_cyc_o <= 0;
else if(wb_cyc_o) r_wb_cyc_o <= wb_cyc_o;
else r_wb_cyc_o <= 0;
 
end
 
assign HREADYOUT = (r_wb_cyc_o&wb_ack_i)?(1):(0);
assign HRDATA = wb_dat_i;
assign HRESP = 0;
 
 
endmodule

powered by: WebSVN 2.1.0

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