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

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/orpsocv2/boards/xilinx
    from Rev 638 to Rev 655
    Reverse comparison

Rev 638 → Rev 655

/ml501/bench/verilog/orpsoc_testbench.v
162,7 → 162,19
wire sram_flash_we_n;
wire sram_mode;
`endif
`ifdef CFI_FLASH
wire [15:0] flash_dq_io;
wire [23:0] flash_adr_o;
wire flash_adv_n_o;
wire flash_ce_n_o;
wire flash_clk_o;
wire flash_oe_n_o;
wire flash_rst_n_o;
wire flash_wait_i;
wire flash_we_n_o;
`endif // `ifdef CFI_FLASH
 
orpsoc_top dut
(
`ifdef JTAG_DEBUG
198,7 → 210,18
.sram_mode (sram_mode),
.sram_clk_fb (sram_clk_fb),
.sram_flash_data (sram_flash_data),
`endif
`endif // `ifdef XILINX_SSRAM
`ifdef CFI_FLASH
.flash_dq_io (flash_dq_io),
.flash_adr_o (flash_adr_o),
.flash_adv_n_o (flash_adv_n_o),
.flash_ce_n_o (flash_ce_n_o),
.flash_clk_o (flash_clk_o),
.flash_oe_n_o (flash_oe_n_o),
.flash_rst_n_o (flash_rst_n_o),
.flash_wait_i (flash_wait_i),
.flash_we_n_o (flash_we_n_o),
`endif
`ifdef UART0
.uart0_stx_pad_o (uart0_stx_pad_o),
.uart0_srx_pad_i (uart0_srx_pad_i),
492,7 → 515,16
begin
`ifdef VCD_DELAY
#(`VCD_DELAY);
#(`VCD_DELAY);/*#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);#(`VCD_DELAY);
*/
`endif
 
// Delay by x insns
575,7 → 607,36
assign uart0_srx_pad_i = uart0_stx_pad_o;
 
`endif // `ifdef UART0
 
`ifdef CFI_FLASH
wire [35:0] VCC; // Supply Voltage
wire [35:0] VCCQ; // Supply Voltage for I/O Buffers
wire [35:0] VPP; // Optional Supply Voltage for Fast Program & Erase
wire Info; // Activate/Deactivate info device operation
assign Info = 1;
assign VCC = 36'd1700;
assign VCCQ = 36'd1700;
assign VPP = 36'd2000;
 
x28fxxxp30 cfi_flash(flash_adr_o,
flash_dq_io,
flash_we_n_o,
flash_oe_n_o,
flash_ce_n_o,
flash_adv_n_o,
flash_clk_o,
flash_wait_i,
1'b1,
flash_rst_n_o,
VCC,
VCCQ,
VPP,
Info);
`endif // `ifdef CFI_FLASH
endmodule // orpsoc_testbench
 
// Local Variables:
/ml501/rtl/verilog/include/or1200_defines.v
862,7 → 862,7
// 1'b0 - OR1200_EXCEPT_EPH0_P (0x0000_0000)
// 1'b1 - OR1200_EXCEPT_EPH1_P (0xF000_0000)
//
`define OR1200_SR_EPH_DEF 1'b0
`define OR1200_SR_EPH_DEF 1'b1
 
 
//
1814,9 → 1814,12
// comment below. //
// //
///////////////////////////////////////////////////////////////////////////////
// Boot from 0xe0000100
`define OR1200_BOOT_PCREG_DEFAULT 30'h3800003f
`define OR1200_BOOT_ADR 32'he0000100
// Boot from 0xf0000100
`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f
`define OR1200_BOOT_ADR 32'hf0000100
//`define OR1200_BOOT_PCREG_DEFAULT 30'h3c00003f
//`define OR1200_BOOT_ADR 32'hf0000100
// Boot from 0x100
//`define OR1200_BOOT_PCREG_DEFAULT 30'h0000003f
//`define OR1200_BOOT_ADR 32'h00000100
/ml501/rtl/verilog/include/orpsoc-defines.v
51,10 → 51,11
`define JTAG_DEBUG
// `define RAM_WB
// `define XILINX_SSRAM
`define CFI_FLASH
`define XILINX_DDR2
`define UART0
`define GPIO0
`define SPI0
// `define SPI0
`define I2C0
`define I2C1
`define ETH0
/ml501/rtl/verilog/include/orpsoc-params.v
80,8 → 80,15
// ROM
parameter wbs_i_rom0_data_width = 32;
parameter wbs_i_rom0_addr_width = 6;
parameter rom0_wb_adr = 4'hf;
parameter rom0_wb_adr = 4'he;
 
// CFI flash
parameter wbs_i_flash_data_width = 32;
parameter wbs_i_flash_addr_width = 32;
parameter wbs_d_flash_data_width = 32;
parameter wbs_d_flash_addr_width = 32;
parameter flash_wb_adr = 4'hf;
 
// MC0 (SDRAM, or other)
parameter wbs_i_mc0_data_width = 32;
parameter wbs_d_mc0_data_width = 32;
94,9 → 101,14
parameter wbm_eth0_addr_width = 32;
 
// Memory sizing for synthesis (small)
parameter internal_sram_mem_span = 32'h0080_0000;
parameter internal_sram_adr_width_for_span = 23;
//parameter internal_sram_mem_span = 32'h0200_0000; /* 32MB */
//parameter internal_sram_adr_width_for_span = 25;
//parameter internal_sram_mem_span = 32'h0080_0000; /* 8MB */
//parameter internal_sram_adr_width_for_span = 23;
parameter internal_sram_mem_span = 32'h0001_0000; /* 64KB */
parameter internal_sram_adr_width_for_span = 17;
 
 
//////////////////////////////////////////////////////
// //
// Wishbone bus parameters //
119,8 → 131,9
///////////////////////////
parameter ibus_arb_addr_match_width = 4;
// Slave addresses
parameter ibus_arb_slave0_adr = rom0_wb_adr; // FLASH ROM
parameter ibus_arb_slave0_adr = rom0_wb_adr; // ROM
parameter ibus_arb_slave1_adr = 4'h0; // Main memory (SDRAM/FPGA SRAM)
parameter ibus_arb_slave2_adr = flash_wb_adr; // Flash
 
///////////////////////////
// //
133,6 → 146,7
// Slave addresses
parameter dbus_arb_slave0_adr = 4'h0; // Main memory (SDRAM/FPGA SRAM)
parameter dbus_arb_slave1_adr = eth0_wb_adr; // Ethernet 0
parameter dbus_arb_slave2_adr = flash_wb_adr; // Flash
 
///////////////////////////////
// //
/ml501/rtl/verilog/orpsoc_top/orpsoc_top.v
49,6 → 49,11
sram_clk, sram_clk_fb, sram_flash_addr, sram_flash_data,
sram_cen, sram_flash_oe_n, sram_flash_we_n, sram_bw,
sram_adv_ld_n, sram_mode,
`endif
`ifdef CFI_FLASH
flash_dq_io, flash_adr_o, flash_adv_n_o, flash_ce_n_o,
flash_clk_o, flash_oe_n_o, flash_rst_n_o, flash_wait_i,
flash_we_n_o,
`endif
`ifdef UART0
uart0_srx_pad_i, uart0_stx_pad_o,
124,7 → 129,18
output [3:0] sram_bw;
output sram_adv_ld_n;
output sram_mode;
`endif
`endif // `ifdef XILINX_SSRAM
`ifdef CFI_FLASH
inout [15:0] flash_dq_io;
output [23:0] flash_adr_o;
output flash_adv_n_o;
output flash_ce_n_o;
output flash_clk_o;
output flash_oe_n_o;
output flash_rst_n_o;
input flash_wait_i;
output flash_we_n_o;
`endif
`ifdef UART0
input uart0_srx_pad_i;
output uart0_stx_pad_o;
308,6 → 324,20
wire wbs_i_mc0_ack_o;
wire wbs_i_mc0_err_o;
wire wbs_i_mc0_rty_o;
 
// flash instruction bus wires
wire [31:0] wbs_i_flash_adr_i;
wire [wbs_i_flash_data_width-1:0] wbs_i_flash_dat_i;
wire [3:0] wbs_i_flash_sel_i;
wire wbs_i_flash_we_i;
wire wbs_i_flash_cyc_i;
wire wbs_i_flash_stb_i;
wire [2:0] wbs_i_flash_cti_i;
wire [1:0] wbs_i_flash_bte_i;
wire [wbs_i_flash_data_width-1:0] wbs_i_flash_dat_o;
wire wbs_i_flash_ack_o;
wire wbs_i_flash_err_o;
wire wbs_i_flash_rty_o;
// Data bus slave wires //
423,6 → 453,20
wire wbm_eth0_err_i;
wire wbm_eth0_rty_i;
 
// flash slave wires
wire [31:0] wbs_d_flash_adr_i;
wire [wbs_d_flash_data_width-1:0] wbs_d_flash_dat_i;
wire [3:0] wbs_d_flash_sel_i;
wire wbs_d_flash_we_i;
wire wbs_d_flash_cyc_i;
wire wbs_d_flash_stb_i;
wire [2:0] wbs_d_flash_cti_i;
wire [1:0] wbs_d_flash_bte_i;
wire [wbs_d_flash_data_width-1:0] wbs_d_flash_dat_o;
wire wbs_d_flash_ack_o;
wire wbs_d_flash_err_o;
wire wbs_d_flash_rty_o;
 
 
//
479,6 → 523,22
.wbs1_err_o (wbs_i_mc0_err_o),
.wbs1_rty_o (wbs_i_mc0_rty_o),
 
// Slave 2
// Inputs to slave from arbiter
.wbs2_adr_i (wbs_i_flash_adr_i),
.wbs2_dat_i (wbs_i_flash_dat_i),
.wbs2_sel_i (wbs_i_flash_sel_i),
.wbs2_we_i (wbs_i_flash_we_i),
.wbs2_cyc_i (wbs_i_flash_cyc_i),
.wbs2_stb_i (wbs_i_flash_stb_i),
.wbs2_cti_i (wbs_i_flash_cti_i),
.wbs2_bte_i (wbs_i_flash_bte_i),
// Outputs from slave to arbiter
.wbs2_dat_o (wbs_i_flash_dat_o),
.wbs2_ack_o (wbs_i_flash_ack_o),
.wbs2_err_o (wbs_i_flash_err_o),
.wbs2_rty_o (wbs_i_flash_rty_o),
 
// Clock, reset inputs
.wb_clk (wb_clk),
.wb_rst (wb_rst));
485,8 → 545,9
 
defparam arbiter_ibus0.wb_addr_match_width = ibus_arb_addr_match_width;
 
defparam arbiter_ibus0.slave0_adr = ibus_arb_slave0_adr; // FLASH ROM
defparam arbiter_ibus0.slave1_adr = ibus_arb_slave1_adr; // Main memory
defparam arbiter_ibus0.slave0_adr = ibus_arb_slave0_adr; // flash ROM
defparam arbiter_ibus0.slave1_adr = ibus_arb_slave1_adr; // main memory
defparam arbiter_ibus0.slave2_adr = ibus_arb_slave2_adr; // CFI flash
 
//
// Wishbone data bus arbiter
553,19 → 614,32
.wbs1_ack_o (wbs_d_eth0_ack_o),
.wbs1_err_o (wbs_d_eth0_err_o),
.wbs1_rty_o (wbs_d_eth0_rty_o),
 
.wbs2_adr_i (wbs_d_flash_adr_i),
.wbs2_dat_i (wbs_d_flash_dat_i),
.wbs2_sel_i (wbs_d_flash_sel_i),
.wbs2_we_i (wbs_d_flash_we_i),
.wbs2_cyc_i (wbs_d_flash_cyc_i),
.wbs2_stb_i (wbs_d_flash_stb_i),
.wbs2_cti_i (wbs_d_flash_cti_i),
.wbs2_bte_i (wbs_d_flash_bte_i),
.wbs2_dat_o (wbs_d_flash_dat_o),
.wbs2_ack_o (wbs_d_flash_ack_o),
.wbs2_err_o (wbs_d_flash_err_o),
.wbs2_rty_o (wbs_d_flash_rty_o),
.wbs2_adr_i (wbm_b_d_adr_o),
.wbs2_dat_i (wbm_b_d_dat_o),
.wbs2_sel_i (wbm_b_d_sel_o),
.wbs2_we_i (wbm_b_d_we_o),
.wbs2_cyc_i (wbm_b_d_cyc_o),
.wbs2_stb_i (wbm_b_d_stb_o),
.wbs2_cti_i (wbm_b_d_cti_o),
.wbs2_bte_i (wbm_b_d_bte_o),
.wbs2_dat_o (wbm_b_d_dat_i),
.wbs2_ack_o (wbm_b_d_ack_i),
.wbs2_err_o (wbm_b_d_err_i),
.wbs2_rty_o (wbm_b_d_rty_i),
.wbs3_adr_i (wbm_b_d_adr_o),
.wbs3_dat_i (wbm_b_d_dat_o),
.wbs3_sel_i (wbm_b_d_sel_o),
.wbs3_we_i (wbm_b_d_we_o),
.wbs3_cyc_i (wbm_b_d_cyc_o),
.wbs3_stb_i (wbm_b_d_stb_o),
.wbs3_cti_i (wbm_b_d_cti_o),
.wbs3_bte_i (wbm_b_d_bte_o),
.wbs3_dat_o (wbm_b_d_dat_i),
.wbs3_ack_o (wbm_b_d_ack_i),
.wbs3_err_o (wbm_b_d_err_i),
.wbs3_rty_o (wbm_b_d_rty_i),
 
// Clock, reset inputs
.wb_clk (wb_clk),
576,6 → 650,7
defparam arbiter_dbus0.wb_num_slaves = dbus_arb_wb_num_slaves;
defparam arbiter_dbus0.slave0_adr = dbus_arb_slave0_adr;
defparam arbiter_dbus0.slave1_adr = dbus_arb_slave1_adr;
defparam arbiter_dbus0.slave2_adr = dbus_arb_slave2_adr;
 
//
// Wishbone byte-wide bus arbiter
1072,12 → 1147,128
defparam ram_wb0.aw = wb_aw;
defparam ram_wb0.dw = wb_dw;
defparam ram_wb0.mem_size_bytes = (8192*1024); // 8MB
defparam ram_wb0.mem_adr_width = 23; // log2(8192*1024)
defparam ram_wb0.mem_size_bytes = internal_sram_mem_span;
defparam ram_wb0.mem_adr_width = internal_sram_adr_width_for_span;
////////////////////////////////////////////////////////////////////////
`endif // `ifdef RAM_WB
 
`ifdef CFI_FLASH
 
/* Lighweight arbiter between instruction and data busses going
into the CFI controller */
 
wire [31:0] flash_wb_adr_i;
wire [31:0] flash_wb_dat_i;
wire [31:0] flash_wb_dat_o;
wire [3:0] flash_wb_sel_i;
wire flash_wb_cyc_i;
wire flash_wb_stb_i;
wire flash_wb_we_i;
wire flash_wb_ack_o;
 
reg [1:0] flash_mst_sel;
reg [9:0] flash_arb_timeout;
wire flash_arb_reset;
always @(posedge wb_clk)
if (wb_rst)
flash_mst_sel <= 0;
else begin
if (flash_mst_sel==2'b00) begin
/* wait for new access from masters. data takes priority */
if (wbs_d_flash_cyc_i & wbs_d_flash_stb_i)
flash_mst_sel[1] <= 1;
else if (wbs_i_flash_cyc_i & wbs_i_flash_stb_i)
flash_mst_sel[0] <= 1;
end
else begin
if (flash_wb_ack_o | flash_arb_reset)
flash_mst_sel <= 0;
end // else: !if(flash_mst_sel==2'b00)
end // else: !if(wb_rst)
assign flash_wb_adr_i = flash_mst_sel[0] ? wbs_i_flash_adr_i :
wbs_d_flash_adr_i;
assign flash_wb_dat_i = flash_mst_sel[0] ? wbs_i_flash_dat_i :
wbs_d_flash_dat_i;
assign flash_wb_stb_i = flash_mst_sel[0] ? wbs_i_flash_stb_i :
flash_mst_sel[1] ? wbs_d_flash_stb_i : 0;
assign flash_wb_cyc_i = flash_mst_sel[0] ? wbs_i_flash_cyc_i :
flash_mst_sel[1] ? wbs_d_flash_cyc_i : 0;
assign flash_wb_we_i = flash_mst_sel[0] ? wbs_i_flash_we_i :
wbs_d_flash_we_i;
assign flash_wb_sel_i = flash_mst_sel[0] ? wbs_i_flash_sel_i :
wbs_d_flash_sel_i;
 
assign wbs_i_flash_dat_o = flash_wb_dat_o;
assign wbs_d_flash_dat_o = flash_wb_dat_o;
assign wbs_i_flash_ack_o = flash_wb_ack_o & flash_mst_sel[0];
assign wbs_d_flash_ack_o = flash_wb_ack_o & flash_mst_sel[1];
assign wbs_i_flash_err_o = flash_arb_reset & flash_mst_sel[0];
assign wbs_i_flash_rty_o = 0;
assign wbs_d_flash_err_o = flash_arb_reset & flash_mst_sel[1];
assign wbs_d_flash_rty_o = 0;
 
always @(posedge wb_clk)
if (wb_rst)
flash_arb_timeout <= 0;
else if (flash_wb_ack_o)
flash_arb_timeout <= 0;
else if (flash_wb_stb_i & flash_wb_cyc_i)
flash_arb_timeout <= flash_arb_timeout + 1;
 
assign flash_arb_reset = (&flash_arb_timeout);
cfi_ctrl
/* Use the simple flash interface */
#(.cfi_engine("DISABLED"))
cfi_ctrl0
(
.wb_clk_i(wb_clk),
.wb_rst_i(wb_rst | flash_arb_reset),
 
.wb_adr_i(flash_wb_adr_i),
.wb_dat_i(flash_wb_dat_i),
.wb_stb_i(flash_wb_stb_i),
.wb_cyc_i(flash_wb_cyc_i),
.wb_we_i (flash_wb_we_i ),
.wb_sel_i(flash_wb_sel_i),
.wb_dat_o(flash_wb_dat_o),
.wb_ack_o(flash_wb_ack_o),
.wb_err_o(),
.wb_rty_o(),
.flash_dq_io(flash_dq_io),
.flash_adr_o(flash_adr_o),
.flash_adv_n_o(flash_adv_n_o),
.flash_ce_n_o(flash_ce_n_o),
.flash_clk_o(flash_clk_o),
.flash_oe_n_o(flash_oe_n_o),
.flash_rst_n_o(flash_rst_n_o),
.flash_wait_i(flash_wait_i),
.flash_we_n_o(flash_we_n_o),
.flash_wp_n_o()
);
 
`else
 
assign wbs_i_flash_dat_o = 0;
assign wbs_i_flash_ack_o = 0;
assign wbs_i_flash_err_o = 0;
assign wbs_i_flash_rty_o = 0;
 
assign wbs_d_flash_dat_o = 0;
assign wbs_d_flash_ack_o = 0;
assign wbs_d_flash_err_o = 0;
assign wbs_d_flash_rty_o = 0;
`endif // `ifdef CFI_FLASH
`ifdef ETH0
 
//
/ml501/rtl/verilog/arbiter/arbiter_dbus.v
117,7 → 117,7
wbs2_ack_o,
wbs2_err_o,
wbs2_rty_o,
/*
 
// Slave four
// Wishbone Slave interface
wbs3_adr_i,
133,7 → 133,7
wbs3_ack_o,
wbs3_err_o,
wbs3_rty_o,
 
/*
// Slave five
// Wishbone Slave interface
wbs4_adr_i,
450,7 → 450,7
input wbs2_ack_o;
input wbs2_err_o;
input wbs2_rty_o;
/*
 
// Wishbone Slave interface
output [wb_adr_width-1:0] wbs3_adr_i;
465,7 → 465,7
input wbs3_ack_o;
input wbs3_err_o;
input wbs3_rty_o;
 
/*
// Wishbone Slave interface
output [wb_adr_width-1:0] wbs4_adr_i;
870,14 → 870,15
//
// Slave selects
//
assign wb_slave_sel[0] = wbm_adr_o[31:28] == slave0_adr | wbm_adr_o[31:28] == 4'hf; // Special case, point all reads to ROM address to here
assign wb_slave_sel[0] = wbm_adr_o[31:28] == slave0_adr;
assign wb_slave_sel[1] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] == slave1_adr;
assign wb_slave_sel[2] = wbm_adr_o[31:28] == slave2_adr;
// Auto select last slave when others are not selected
assign wb_slave_sel[2] = !(wb_slave_sel_r[0] | wb_slave_sel_r[1]);
assign wb_slave_sel[3] = !(wb_slave_sel_r[0] | wb_slave_sel_r[1]
| wb_slave_sel_r[2]);
 
/*
assign wb_slave_sel[2] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] == slave2_adr;
/*
assign wb_slave_sel[3] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] == slave3_adr;
assign wb_slave_sel[4] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] == slave4_adr;
assign wb_slave_sel[5] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] == slave5_adr;
941,7 → 942,6
assign wbs_err_o_mux_i[0] = wbs0_err_o & wb_slave_sel_r[0];
assign wbs_rty_o_mux_i[0] = wbs0_rty_o & wb_slave_sel_r[0];
 
 
// Slave 1 inputs
assign wbs1_adr_i = wbm_adr_o;
assign wbs1_dat_i = wbm_dat_o;
956,7 → 956,6
assign wbs_err_o_mux_i[1] = wbs1_err_o & wb_slave_sel_r[1];
assign wbs_rty_o_mux_i[1] = wbs1_rty_o & wb_slave_sel_r[1];
 
 
// Slave 2 inputs
assign wbs2_adr_i = wbm_adr_o;
assign wbs2_dat_i = wbm_dat_o;
970,7 → 969,6
assign wbs_ack_o_mux_i[2] = wbs2_ack_o & wb_slave_sel_r[2];
assign wbs_err_o_mux_i[2] = wbs2_err_o & wb_slave_sel_r[2];
assign wbs_rty_o_mux_i[2] = wbs2_rty_o & wb_slave_sel_r[2];
/*
 
// Slave 3 inputs
assign wbs3_adr_i = wbm_adr_o;
985,7 → 983,7
assign wbs_ack_o_mux_i[3] = wbs3_ack_o & wb_slave_sel_r[3];
assign wbs_err_o_mux_i[3] = wbs3_err_o & wb_slave_sel_r[3];
assign wbs_rty_o_mux_i[3] = wbs3_rty_o & wb_slave_sel_r[3];
 
/*
// Slave 4 inputs
assign wbs4_adr_i = wbm_adr_o;
assign wbs4_dat_i = wbm_dat_o;
1188,8 → 1186,8
assign wbm_dat_i = wb_slave_sel_r[0] ? wbs_dat_o_mux_i[0] :
wb_slave_sel_r[1] ? wbs_dat_o_mux_i[1] :
wb_slave_sel_r[2] ? wbs_dat_o_mux_i[2] :
/* wb_slave_sel_r[3] ? wbs_dat_o_mux_i[3] :
wb_slave_sel_r[4] ? wbs_dat_o_mux_i[4] :
wb_slave_sel_r[3] ? wbs_dat_o_mux_i[3] :
/* wb_slave_sel_r[4] ? wbs_dat_o_mux_i[4] :
wb_slave_sel_r[5] ? wbs_dat_o_mux_i[5] :
wb_slave_sel_r[6] ? wbs_dat_o_mux_i[6] :
wb_slave_sel_r[7] ? wbs_dat_o_mux_i[7] :
1208,8 → 1206,8
// Master out acks, or together
assign wbm_ack_i = wbs_ack_o_mux_i[0] |
wbs_ack_o_mux_i[1] |
wbs_ack_o_mux_i[2] /*|
wbs_ack_o_mux_i[3] |
wbs_ack_o_mux_i[2] |
wbs_ack_o_mux_i[3] /*|
wbs_ack_o_mux_i[4] |
wbs_ack_o_mux_i[5] |
wbs_ack_o_mux_i[6] |
1228,8 → 1226,8
 
assign wbm_err_i = wbs_err_o_mux_i[0] |
wbs_err_o_mux_i[1] |
wbs_err_o_mux_i[2] |/*
wbs_err_o_mux_i[3] |
wbs_err_o_mux_i[2] |
wbs_err_o_mux_i[3] |/*
wbs_err_o_mux_i[4] |
wbs_err_o_mux_i[5] |
wbs_err_o_mux_i[6] |
1248,8 → 1246,8
 
assign wbm_rty_i = wbs_rty_o_mux_i[0] |
wbs_rty_o_mux_i[1] |
wbs_rty_o_mux_i[2] /*|
wbs_rty_o_mux_i[3] |
wbs_rty_o_mux_i[2] |
wbs_rty_o_mux_i[3] /*|
wbs_rty_o_mux_i[4] |
wbs_rty_o_mux_i[5] |
wbs_rty_o_mux_i[6] |
/ml501/rtl/verilog/arbiter/arbiter_ibus.v
10,7 → 10,7
/// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2009, 2010 Authors and OPENCORES.ORG ////
//// Copyright (C) 2009, 2010, 2011 Authors and OPENCORES.ORG ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
87,6 → 87,24
wbs1_err_o,
wbs1_rty_o,
 
 
// Slave three
// Wishbone Slave interface
wbs2_adr_i,
wbs2_dat_i,
wbs2_sel_i,
wbs2_we_i,
wbs2_cyc_i,
wbs2_stb_i,
wbs2_cti_i,
wbs2_bte_i,
wbs2_dat_o,
wbs2_ack_o,
wbs2_err_o,
wbs2_rty_o,
wb_clk,
wb_rst
);
97,8 → 115,9
 
parameter wb_addr_match_width = 8;
 
parameter slave0_adr = 8'hf0; // FLASH ROM
parameter slave0_adr = 8'he0; // FLASH ROM
parameter slave1_adr = 8'h00; // Main memory (SDRAM/FPGA SRAM)
parameter slave2_adr = 8'hf0; // External flash
 
`define WB_ARB_ADDR_MATCH_SEL wb_adr_width-1:wb_adr_width-wb_addr_match_width
148,8 → 167,24
input wbs1_err_o;
input wbs1_rty_o;
 
wire [1:0] slave_sel; // One bit per slave
 
// WB Slave 2
output [wb_adr_width-1:0] wbs2_adr_i;
output [wb_dat_width-1:0] wbs2_dat_i;
output [3:0] wbs2_sel_i;
output wbs2_we_i;
output wbs2_cyc_i;
output wbs2_stb_i;
output [2:0] wbs2_cti_i;
output [1:0] wbs2_bte_i;
input [wb_dat_width-1:0] wbs2_dat_o;
input wbs2_ack_o;
input wbs2_err_o;
input wbs2_rty_o;
 
wire [2:0] slave_sel; // One bit per slave
 
reg watchdog_err;
`ifdef ARBITER_IBUS_WATCHDOG
212,6 → 247,10
reg wbs1_ack_o_r;
reg wbs1_err_o_r;
reg wbs1_rty_o_r;
reg [wb_dat_width-1:0] wbs2_dat_o_r;
reg wbs2_ack_o_r;
reg wbs2_err_o_r;
reg wbs2_rty_o_r;
 
wire wbm_ack_i_pre_reg;
 
238,6 → 277,10
wbs1_ack_o_r <= wbs1_ack_o;
wbs1_err_o_r <= wbs1_err_o;
wbs1_rty_o_r <= wbs1_rty_o;
wbs2_dat_o_r <= wbs2_dat_o;
wbs2_ack_o_r <= wbs2_ack_o;
wbs2_err_o_r <= wbs2_err_o;
wbs2_rty_o_r <= wbs2_rty_o;
end // always @ (posedge wb_clk)
 
248,6 → 291,9
assign slave_sel[1] = wbm_adr_o_r[`WB_ARB_ADDR_MATCH_SEL] ==
slave1_adr;
 
assign slave_sel[2] = wbm_adr_o_r[`WB_ARB_ADDR_MATCH_SEL] ==
slave2_adr;
 
// Slave out assigns
assign wbs0_adr_i = wbm_adr_o_r;
assign wbs0_dat_i = wbm_dat_o_r;
267,25 → 313,39
assign wbs1_cyc_i = wbm_cyc_o_r & slave_sel[1];
assign wbs1_stb_i = wbm_stb_o_r & slave_sel[1];
 
assign wbs2_adr_i = wbm_adr_o_r;
assign wbs2_dat_i = wbm_dat_o_r;
assign wbs2_we_i = wbm_dat_o_r;
assign wbs2_sel_i = wbm_sel_o_r;
assign wbs2_cti_i = wbm_cti_o_r;
assign wbs2_bte_i = wbm_bte_o_r;
assign wbs2_cyc_i = wbm_cyc_o_r & slave_sel[1];
assign wbs2_stb_i = wbm_stb_o_r & slave_sel[1];
 
// Master out assigns
// Don't care about none selected...
assign wbm_dat_i = slave_sel[1] ? wbs1_dat_o_r :
assign wbm_dat_i = slave_sel[2] ? wbs2_dat_o_r :
slave_sel[1] ? wbs1_dat_o_r :
wbs0_dat_o_r ;
assign wbm_ack_i = (slave_sel[0] & wbs0_ack_o_r) |
(slave_sel[1] & wbs1_ack_o_r)
;
(slave_sel[1] & wbs1_ack_o_r) |
(slave_sel[2] & wbs2_ack_o_r);
assign wbm_err_i = (slave_sel[0] & wbs0_err_o_r) |
(slave_sel[1] & wbs1_err_o_r) |
(slave_sel[2] & wbs2_err_o_r) |
watchdog_err;
assign wbm_rty_i = (slave_sel[0] & wbs0_rty_o_r) |
(slave_sel[1] & wbs1_rty_o_r);
(slave_sel[1] & wbs1_rty_o_r) |
(slave_sel[2] & wbs2_rty_o_r);
 
// Non-registered ack
assign wbm_ack_i_pre_reg = (slave_sel[0] & wbs0_ack_o) |
(slave_sel[1] & wbs1_ack_o);
(slave_sel[1] & wbs1_ack_o) |
(slave_sel[2] & wbs2_ack_o);
`else // !`ifdef ARBITER_IBUS_REGISTERING
 
296,6 → 356,10
assign slave_sel[1] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] ==
slave1_adr;
 
assign slave_sel[2] = wbm_adr_o[`WB_ARB_ADDR_MATCH_SEL] ==
slave2_adr;
 
// Slave out assigns
assign wbs0_adr_i = wbm_adr_o;
assign wbs0_dat_i = wbm_dat_o;
315,21 → 379,34
assign wbs1_cyc_i = wbm_cyc_o & slave_sel[1];
assign wbs1_stb_i = wbm_stb_o & slave_sel[1];
 
assign wbs2_adr_i = wbm_adr_o;
assign wbs2_dat_i = wbm_dat_o;
assign wbs2_we_i = wbm_we_o;
assign wbs2_sel_i = wbm_sel_o;
assign wbs2_cti_i = wbm_cti_o;
assign wbs2_bte_i = wbm_bte_o;
assign wbs2_cyc_i = wbm_cyc_o & slave_sel[2];
assign wbs2_stb_i = wbm_stb_o & slave_sel[2];
 
// Master out assigns
// Don't care about none selected...
assign wbm_dat_i = slave_sel[1] ? wbs1_dat_o :
assign wbm_dat_i = slave_sel[2] ? wbs2_dat_o :
slave_sel[1] ? wbs1_dat_o :
wbs0_dat_o ;
assign wbm_ack_i = (slave_sel[0] & wbs0_ack_o) |
(slave_sel[1] & wbs1_ack_o);
(slave_sel[1] & wbs1_ack_o) |
(slave_sel[2] & wbs2_ack_o);
assign wbm_err_i = (slave_sel[0] & wbs0_err_o) |
(slave_sel[1] & wbs1_err_o) |
(slave_sel[2] & wbs2_err_o) |
watchdog_err;
assign wbm_rty_i = (slave_sel[0] & wbs0_rty_o) |
(slave_sel[1] & wbs1_rty_o);
(slave_sel[1] & wbs1_rty_o) |
(slave_sel[2] & wbs2_rty_o);
 
`endif
/ml501/backend/par/bin/ml501.ucf
272,8 → 272,8
## # IO Pad Locations Constraints for SPI memory
## #------------------------------------------------------------------------------
 
NET spi0_mosi_o LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
NET spi0_ss_o<0> LOC = AC14 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
#NET spi0_mosi_o LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
#NET spi0_ss_o<0> LOC = AC14 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
# These go through the STARTUP_VIRTEX5 block - don't worry about assigning them
# here.
#NET spi0_miso_i LOC = K11 | IOSTANDARD = LVCMOS33 | DRIVE = 6 | SLEW = FAST | TIG;
842,6 → 842,66
#NET sram_mode LOC = AC23 | IOSTANDARD = LVDCI_33;
# NET flash_audio_reset_n LOC = AD10 | IOSTANDARD = LVCMOS33;
 
 
## #------------------------------------------------------------------------------
## # IO Pad Location Constraints / Properties for CFI Flash (shared with SRAM)
## #------------------------------------------------------------------------------
NET flash_adr_o<23> LOC = Y10;
NET flash_adr_o<22> LOC = Y11;
NET flash_adr_o<21> LOC = AA17;
NET flash_adr_o<20> LOC = AB17;
NET flash_adr_o<19> LOC = G14;
NET flash_adr_o<18> LOC = F13;
NET flash_adr_o<17> LOC = H14;
NET flash_adr_o<16> LOC = H13;
NET flash_adr_o<15> LOC = F15;
NET flash_adr_o<14> LOC = G15;
NET flash_adr_o<13> LOC = G12;
NET flash_adr_o<12> LOC = H12;
NET flash_adr_o<11> LOC = G16;
NET flash_adr_o<10> LOC = H16;
NET flash_adr_o<9> LOC = H11;
NET flash_adr_o<8> LOC = G11;
NET flash_adr_o<7> LOC = H17;
NET flash_adr_o<6> LOC = G17;
NET flash_adr_o<5> LOC = G10;
NET flash_adr_o<4> LOC = G9;
NET flash_adr_o<3> LOC = G19;
NET flash_adr_o<2> LOC = H18;
NET flash_adr_o<1> LOC = H9;
NET flash_adr_o<0> LOC = H8;
NET flash_adr_o<*> IOSTANDARD = LVCMOS33;
NET flash_adr_o<*> SLEW = FAST;
NET flash_adr_o<*> DRIVE = 8;
 
 
NET flash_dq_io<15> LOC = AD18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<14> LOC = AC18 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<13> LOC = AB10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<12> LOC = AB9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<11> LOC = AC17 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<10> LOC = AC16 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<9> LOC = AC8 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<8> LOC = AC9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<7> LOC = Y12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<6> LOC = Y13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<5> LOC = AA15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<4> LOC = AB14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<3> LOC = AA12 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<2> LOC = AB11 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<1> LOC = AA13 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_dq_io<0> LOC = AA14 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
 
NET flash_dq_io<*> PULLDOWN;
 
NET flash_adv_n_o LOC = AA20 | IOSTANDARD = LVCMOS33;
NET flash_oe_n_o LOC = AA9 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_we_n_o LOC = AB15 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_ce_n_o LOC = AA10 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_clk_o LOC = AB19 | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST;
NET flash_wait_i LOC = AA19 | IOSTANDARD = LVCMOS33;
NET flash_rst_n_o LOC = AD10 | IOSTANDARD = LVCMOS33;
 
#------------------------------------------------------------------------------
# IO Pad Location Constraints / Properties for TFT VGA LCD Controller
#------------------------------------------------------------------------------
/ml501/backend/par/bin/Makefile
48,8 → 48,12
XILINX_MAP_FLAGS=-logic_opt off
XILINX_AREA_TARGET = speed
TIMING_REPORT_OPTIONS = -u 1000 -e 1000
#
# Board programming generation settings
#
SPI_FLASH_SIZE_KBYTES ?=2048
SPI_BOOTLOADER_SW_OFFSET_HEX ?=1c0000
PLATFORMFLASH_PART ?= xcf32p
 
print-config:
$(Q)echo; echo "\t### Backend make configuration ###"; echo
69,9 → 73,12
PCF_FILE=$(DESIGN_NAME).pcf
BIT_FILE=$(DESIGN_NAME).bit
BIT_FILE_FOR_SPI=$(DESIGN_NAME)_spiboot.bit
BIT_FILE_FOR_PLATFORMFLASH=$(DESIGN_NAME)_platformflash.bit
BATCH_FILE=$(DESIGN_NAME).batch
MCS_FILE=$(DESIGN_NAME).mcs
SPI_MCS_FILE=$(DESIGN_NAME)_spi.mcs
PLATFORMFLASH_MCS_FILE=$(DESIGN_NAME)_platformflash.mcs
 
 
$(NGC_FILE):
$(Q)$(MAKE) -C $(BOARD_SYN_RUN_DIR) $(DESIGN_NAME).ngc
 
102,18 → 109,27
@echo; echo "\t#### Generating .bit file for SPI load ####";
$(Q)bitgen -w $(XILINX_FLAGS) -g StartUpClk:CClk $< $@
 
$(BIT_FILE_FOR_PLATFORMFLASH): $(PARRED_NCD)
@echo; echo "\t#### Generating .bit file for platform flash load ####";
$(Q)bitgen -w $(XILINX_FLAGS) -g StartUpClk:CClk $< $@
 
# Generate MCS with bootloader specified by user, if BOOTLOADER_BIN defined.
ifeq ($(BOOTLOADER_BIN),)
$(MCS_FILE): $(BIT_FILE_FOR_SPI)
$(SPI_MCS_FILE): $(BIT_FILE_FOR_SPI)
@echo; echo "\t#### Generating .mcs file for SPI load ####";
$(Q)promgen -spi -p mcs -w -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $<
else
$(MCS_FILE): $(BIT_FILE_FOR_SPI)
$(SPI_MCS_FILE): $(BIT_FILE_FOR_SPI)
@echo; echo "\t#### Generating .mcs file with bootloader for SPI load ####";
$(Q)promgen -spi -p mcs -w -o $@ -s $(SPI_FLASH_SIZE_KBYTES) -u 0 $< \
-data_file up $(SPI_BOOTLOADER_SW_OFFSET_HEX) $(BOOTLOADER_BIN)
endif
 
$(PLATFORMFLASH_MCS_FILE): $(BIT_FILE_FOR_PLATFORMFLASH)
@echo; echo "\t#### Generating .mcs file for platform flash load ####";
$(Q)promgen -p mcs -w -o $@ -x $(PLATFORMFLASH_PART) -data_width 16 \
-u 0 $<
 
#this target downloads the bitstream to the target fpga
download: $(BIT_FILE) $(BATCH_FILE)
$(Q)impact -batch $(BATCH_FILE)
/ml501/sw/board/include/board.h
11,8 → 11,8
// file, which is compiled and converted into Verilog for inclusion at
// synthesis time. See bootloader/bootloader.S for details on each option.
#ifndef PRELOAD_RAM
#define BOOTROM_SPI_FLASH
//#define BOOTROM_GOTO_RESET
//#define BOOTROM_SPI_FLASH
#define BOOTROM_GOTO_RESET
//#define BOOTROM_LOOP_AT_ZERO
//#define BOOTROM_LOOP_IN_ROM
#else
63,8 → 63,11
//
#define TICKS_PER_SEC 100
 
//
// CFI flash controller base
//
#define CFI_CTRL_BASE 0xf0000000
 
 
//
// UART driver configuration
//
/ml501/syn/xst/bin/Makefile
70,7 → 70,7
OPT_LEVEL ?=2
 
XILINX_FLAGS ?=-intstyle silent
XILINX_XST_FLAGS ?= -power NO -glob_opt AllClockNets -write_timing_constraints NO -cross_clock_analysis NO -slice_utilization_ratio 100 -bram_utilization_ratio 100 -dsp_utilization_ratio 100 -safe_implementation No -fsm_style lut -ram_extract Yes -ram_style Auto -rom_extract Yes -rom_style Auto -auto_bram_packing NO -mux_extract YES -mux_style Auto -decoder_extract YES -priority_extract YES -shreg_extract YES -shift_extract YES -xor_collapse YES -resource_sharing YES -async_to_sync NO -use_dsp48 auto -iobuf YES -max_fanout 100000 -bufg 32 -register_duplication YES -equivalent_register_removal YES -register_balancing No -slice_packing YES -optimize_primitives NO -use_clock_enable Auto -use_sync_set Auto -use_sync_reset Auto -iob Auto -slice_utilization_ratio_maxmargin 5
XILINX_XST_FLAGS ?= -power NO -glob_opt AllClockNets -write_timing_constraints NO -cross_clock_analysis NO -slice_utilization_ratio 100 -bram_utilization_ratio 100 -dsp_utilization_ratio 100 -safe_implementation No -fsm_style lut -ram_extract Yes -ram_style Auto -rom_extract Yes -rom_style Auto -auto_bram_packing NO -mux_extract YES -mux_style Auto -decoder_extract YES -priority_extract YES -shreg_extract YES -shift_extract YES -xor_collapse YES -resource_sharing YES -async_to_sync NO -use_dsp48 auto -iobuf YES -max_fanout 100000 -bufg 32 -register_duplication YES -equivalent_register_removal YES -register_balancing No -slice_packing YES -optimize_primitives NO -use_clock_enable Auto -use_sync_set Auto -use_sync_reset Auto -iob yes -slice_utilization_ratio_maxmargin 5
 
XCF_FILE=$(DESIGN_NAME).xcf
XST_FILE=$(DESIGN_NAME).xst

powered by: WebSVN 2.1.0

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