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

Subversion Repositories amber

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /amber/trunk/hw/vlog/system
    from Rev 36 to Rev 38
    Reverse comparison

Rev 36 → Rev 38

/system.v
655,7 → 655,11
// -------------------------------------------------------------
// The clock crossing fifo for virtex-6 is insode the bridge
// module
wb_xv6_ddr3_bridge u_wb_xv6_ddr3_bridge (
wb_xv6_ddr3_bridge #(
.WB_DWIDTH ( WB_DWIDTH ),
.WB_SWIDTH ( WB_SWIDTH )
)
u_wb_xv6_ddr3_bridge (
.i_sys_clk ( sys_clk ),
.i_ddr_clk ( xv6_ddr3_clk ),
 
/wb_xv6_ddr3_bridge.v
43,8 → 43,10
//////////////////////////////////////////////////////////////////
 
 
module wb_xv6_ddr3_bridge
(
module wb_xv6_ddr3_bridge #(
parameter WB_DWIDTH = 32,
parameter WB_SWIDTH = 4
)(
input i_sys_clk,
input i_ddr_clk,
 
52,10 → 54,10
 
// Wishbone Ports
input [31:0] i_wb_adr,
input [3:0] i_wb_sel,
input [WB_SWIDTH-1:0] i_wb_sel,
input i_wb_we,
output [31:0] o_wb_dat,
input [31:0] i_wb_dat,
output [WB_DWIDTH-1:0] o_wb_dat,
input [WB_DWIDTH-1:0] i_wb_dat,
input i_wb_cyc,
input i_wb_stb,
output o_wb_ack,
80,34 → 82,38
 
);
wire start_write;
wire start_read;
wire busy;
reg read_busy = 1'd0;
wire start_write;
wire start_read;
wire busy;
reg read_busy = 1'd0;
 
wire cmd_en;
wire [2:0] cmd_instr;
wire [26:0] cmd_addr;
wire cmd_full;
wire wr_full;
wire rd_valid;
wire [26:0] ddr_cmd_byte_addr;
wire [31:0] ddr_wr_data;
wire [31:0] ddr_rd_data;
wire [3:0] ddr_wr_mask;
wire [7:0] wr_mask64;
wire [1:0] ddr_wr_addr_32;
wire ddr_addr2;
reg ddr_addr2_r = 1'd0;
wire ddr_wr_en;
reg ddr_wr_en_r = 1'd0;
wire ddr_rd_valid;
reg ddr_rd_valid_r = 1'd0;
wire cmd_en;
wire [2:0] cmd_instr;
wire [26:0] cmd_addr;
wire cmd_full;
wire wr_full;
wire rd_valid;
wire [26:0] ddr_cmd_byte_addr;
wire [WB_DWIDTH-1:0] ddr_wr_data;
wire [WB_DWIDTH-1:0] ddr_rd_data;
wire [WB_SWIDTH-1:0] ddr_wr_mask;
wire [7:0] wr_mask64;
wire [1:0] ddr_wr_addr_32;
wire ddr_addr2;
reg ddr_addr2_r = 1'd0;
wire ddr_addr4;
reg ddr_addr4_r = 1'd0;
wire ddr_wr_en;
reg ddr_wr_en_r = 1'd0;
wire ddr_rd_valid;
reg ddr_rd_valid_r = 1'd0;
reg ddr_rd_valid_r2 = 1'd0;
 
reg cmd_en_r = 'd0;
reg [2:0] cmd_instr_r = 'd0;
reg [26:0] cmd_addr_r = 'd0;
reg [11:0] phy_init_count = 'd0;
reg cmd_en_r = 'd0;
reg [2:0] cmd_instr_r = 'd0;
reg [26:0] cmd_addr_r = 'd0;
reg [11:0] phy_init_count = 'd0;
reg [63:0] ddr_rd_data_r = 'd0;
 
 
assign o_wb_err = 'd0;
114,13 → 120,36
assign o_wb_ack = i_wb_stb && ( start_write || rd_valid );
assign o_ddr_cmd_byte_addr = {ddr_cmd_byte_addr[26:3], 3'd0};
assign ddr_addr2 = ddr_cmd_byte_addr[2];
assign ddr_addr4 = ddr_cmd_byte_addr[4];
 
assign o_ddr_wr_en = ddr_wr_en | ddr_wr_en_r;
assign o_ddr_wr_end = ddr_wr_en_r;
assign o_ddr_wr_data = ddr_wr_en_r ? 64'h0 : {2{ddr_wr_data}};
assign o_ddr_wr_mask = ddr_wr_en_r ? 8'hff : wr_mask64;
assign wr_mask64 = ddr_wr_addr_32[0] ? {ddr_wr_mask, 4'hf} : {4'hf, ddr_wr_mask} ;
 
generate
if (WB_DWIDTH == 128) begin : wb128
reg [63:0] ddr_wr_data_r = 'd0;
reg [7:0] ddr_wr_mask_r = 'd0;
always @(posedge i_ddr_clk)
begin
ddr_wr_data_r <= ddr_wr_data[127:64];
ddr_wr_mask_r <= ddr_wr_mask[15:8];
end
assign o_ddr_wr_data = ddr_wr_en_r ? ddr_wr_data_r : ddr_wr_data[63:00];
assign o_ddr_wr_mask = ddr_wr_en_r ? ddr_wr_mask_r : ddr_wr_mask[7:0] ;
assign ddr_rd_valid = ddr_rd_valid_r && !ddr_rd_valid_r2;
assign ddr_rd_data = {i_ddr_rd_data, ddr_rd_data_r} ;
end
else begin : wb32
assign o_ddr_wr_data = ddr_wr_en_r ? 64'h0 : {2{ddr_wr_data}};
assign o_ddr_wr_mask = ddr_wr_en_r ? 8'hff : wr_mask64;
assign wr_mask64 = ddr_wr_addr_32[0] ? {ddr_wr_mask, 4'hf} : {4'hf, ddr_wr_mask} ;
assign ddr_rd_valid = i_ddr_rd_valid && !ddr_rd_valid_r;
assign ddr_rd_data = ddr_addr2_r ? i_ddr_rd_data[63:32] : i_ddr_rd_data[31:00];
end
endgenerate
 
assign start_write = i_wb_stb && i_wb_we && !busy;
assign start_read = i_wb_stb && !i_wb_we && !busy;
assign busy = cmd_full | wr_full | read_busy;
129,10 → 158,12
assign cmd_instr = start_write ? 3'd0 : 3'd1;
assign cmd_addr = i_mem_ctrl ? {2'd0, i_wb_adr[24:0]} : i_wb_adr[26:0];
 
assign ddr_rd_valid = i_ddr_rd_valid && !ddr_rd_valid_r;
assign ddr_rd_data = ddr_addr2_r ? i_ddr_rd_data[63:32] : i_ddr_rd_data[31:00];
 
 
always @( posedge i_ddr_clk )
ddr_rd_data_r <= i_ddr_rd_data;
// Delay the phy_init_done signal.
// The memory model issues an error if
// it is accesses striaght away after
169,14 → 200,18
begin
ddr_wr_en_r <= ddr_wr_en;
ddr_rd_valid_r <= i_ddr_rd_valid;
if ( o_ddr_cmd_en )
ddr_rd_valid_r2 <= ddr_rd_valid_r;
if ( o_ddr_cmd_en )
begin
ddr_addr2_r <= ddr_addr2;
ddr_addr4_r <= ddr_addr4;
end
end
 
ddr3_afifo#(
.ADDR_WIDTH ( 27 ),
.DATA_WIDTH ( 32 )
.DATA_WIDTH ( WB_DWIDTH )
)
u_ddr3_afifo (
.i_sys_clk ( i_sys_clk ),

powered by: WebSVN 2.1.0

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