Line 1... |
Line 1... |
//
|
//
|
// eco32.v -- ECO32 top-level description
|
// eco32.v -- ECO32 top-level description
|
//
|
//
|
|
|
|
|
|
`timescale 1ns/10ps
|
|
`default_nettype none
|
|
|
|
|
module eco32(clk_in,
|
module eco32(clk_in,
|
reset_inout_n,
|
rst_inout_n,
|
sdram_clk,
|
sdram_clk,
|
sdram_fb,
|
sdram_fb,
|
sdram_cke,
|
sdram_cke,
|
sdram_cs_n,
|
sdram_cs_n,
|
sdram_ras_n,
|
sdram_ras_n,
|
Line 57... |
Line 61... |
sw2_n,
|
sw2_n,
|
sw3_n);
|
sw3_n);
|
|
|
// clock and reset
|
// clock and reset
|
input clk_in;
|
input clk_in;
|
inout reset_inout_n;
|
inout rst_inout_n;
|
// SDRAM
|
// SDRAM
|
output sdram_clk;
|
output sdram_clk;
|
input sdram_fb;
|
input sdram_fb;
|
output sdram_cke;
|
output sdram_cke;
|
output sdram_cs_n;
|
output sdram_cs_n;
|
Line 124... |
Line 128... |
input sw1_4;
|
input sw1_4;
|
input sw2_n;
|
input sw2_n;
|
input sw3_n;
|
input sw3_n;
|
|
|
// clk_rst
|
// clk_rst
|
wire clk;
|
wire clk; // system clock
|
wire clk_ok;
|
wire clk_ok; // clock is stable
|
wire reset;
|
wire rst; // system reset
|
// cpu
|
// cpu
|
wire cpu_en;
|
wire bus_stb; // bus strobe
|
wire cpu_wr;
|
wire bus_we; // bus write enable
|
wire [1:0] cpu_size;
|
wire [31:2] bus_addr; // bus address (word address)
|
wire [31:0] cpu_addr;
|
wire [31:0] bus_din; // bus data input, for reads
|
wire [31:0] cpu_data_in;
|
wire [31:0] bus_dout; // bus data output, for writes
|
wire [31:0] cpu_data_out;
|
wire bus_ack; // bus acknowledge
|
wire cpu_wt;
|
wire [15:0] bus_irq; // bus interrupt requests
|
wire [15:0] cpu_irq;
|
|
// ram
|
// ram
|
wire ram_en;
|
wire ram_stb; // ram strobe
|
wire ram_wr;
|
wire [31:0] ram_dout; // ram data output
|
wire [1:0] ram_size;
|
wire ram_ack; // ram acknowledge
|
wire [24:0] ram_addr;
|
|
wire [31:0] ram_data_in;
|
|
wire [31:0] ram_data_out;
|
|
wire ram_wt;
|
|
// rom
|
// rom
|
wire rom_en;
|
wire rom_stb; // rom strobe
|
wire rom_wr;
|
wire [31:0] rom_dout; // rom data output
|
wire [1:0] rom_size;
|
wire rom_ack; // rom acknowledge
|
wire [20:0] rom_addr;
|
// i/o
|
wire [31:0] rom_data_out;
|
wire i_o_stb; // i/o strobe
|
wire rom_wt;
|
|
// tmr0
|
// tmr0
|
wire tmr0_en;
|
wire tmr0_stb; // tmr 0 strobe
|
wire tmr0_wr;
|
wire [31:0] tmr0_dout; // tmr 0 data output
|
wire [3:2] tmr0_addr;
|
wire tmr0_ack; // tmr 0 acknowledge
|
wire [31:0] tmr0_data_in;
|
wire tmr0_irq; // tmr 0 interrupt request
|
wire [31:0] tmr0_data_out;
|
|
wire tmr0_wt;
|
|
wire tmr0_irq;
|
|
// tmr1
|
// tmr1
|
wire tmr1_en;
|
wire tmr1_stb; // tmr 1 strobe
|
wire tmr1_wr;
|
wire [31:0] tmr1_dout; // tmr 1 data output
|
wire [3:2] tmr1_addr;
|
wire tmr1_ack; // tmr 1 acknowledge
|
wire [31:0] tmr1_data_in;
|
wire tmr1_irq; // tmr 1 interrupt request
|
wire [31:0] tmr1_data_out;
|
|
wire tmr1_wt;
|
|
wire tmr1_irq;
|
|
// dsp
|
// dsp
|
wire dsp_en;
|
wire dsp_stb; // dsp strobe
|
wire dsp_wr;
|
wire [15:0] dsp_dout; // dsp data output
|
wire [13:2] dsp_addr;
|
wire dsp_ack; // dsp acknowledge
|
wire [15:0] dsp_data_in;
|
|
wire [15:0] dsp_data_out;
|
|
wire dsp_wt;
|
|
// kbd
|
// kbd
|
wire kbd_en;
|
wire kbd_stb; // kbd strobe
|
wire kbd_wr;
|
wire [7:0] kbd_dout; // kbd data output
|
wire kbd_addr;
|
wire kbd_ack; // kbd acknowledge
|
wire [7:0] kbd_data_in;
|
wire kbd_irq; // kbd interrupt request
|
wire [7:0] kbd_data_out;
|
|
wire kbd_wt;
|
|
wire kbd_irq;
|
|
// ser0
|
// ser0
|
wire ser0_en;
|
wire ser0_stb; // ser 0 strobe
|
wire ser0_wr;
|
wire [7:0] ser0_dout; // ser 0 data output
|
wire [3:2] ser0_addr;
|
wire ser0_ack; // ser 0 acknowledge
|
wire [7:0] ser0_data_in;
|
wire ser0_irq_r; // ser 0 rcv interrupt request
|
wire [7:0] ser0_data_out;
|
wire ser0_irq_t; // ser 0 xmt interrupt request
|
wire ser0_wt;
|
|
wire ser0_irq_r;
|
|
wire ser0_irq_t;
|
|
// ser1
|
// ser1
|
wire ser1_en;
|
wire ser1_stb; // ser 1 strobe
|
wire ser1_wr;
|
wire [7:0] ser1_dout; // ser 1 data output
|
wire [3:2] ser1_addr;
|
wire ser1_ack; // ser 1 acknowledge
|
wire [7:0] ser1_data_in;
|
wire ser1_irq_r; // ser 1 rcv interrupt request
|
wire [7:0] ser1_data_out;
|
wire ser1_irq_t; // ser 1 xmt interrupt request
|
wire ser1_wt;
|
|
wire ser1_irq_r;
|
|
wire ser1_irq_t;
|
|
// dsk
|
// dsk
|
wire dsk_en;
|
wire dsk_stb; // dsk strobe
|
wire dsk_wr;
|
wire [31:0] dsk_dout; // dsk data output
|
wire [19:2] dsk_addr;
|
wire dsk_ack; // dsk acknowledge
|
wire [31:0] dsk_data_in;
|
wire dsk_irq; // dsk interrupt request
|
wire [31:0] dsk_data_out;
|
|
wire dsk_wt;
|
|
wire dsk_irq;
|
|
// fms
|
// fms
|
wire fms_en;
|
wire fms_stb; // fms strobe
|
wire fms_wr;
|
wire [31:0] fms_dout; // fms data output
|
wire [11:2] fms_addr;
|
wire fms_ack; // fms acknowledge
|
wire [31:0] fms_data_in;
|
|
wire [31:0] fms_data_out;
|
|
wire fms_wt;
|
|
// dac
|
// dac
|
wire [15:0] dac_sample_l;
|
wire [15:0] dac_sample_l; // dac sample value, left
|
wire [15:0] dac_sample_r;
|
wire [15:0] dac_sample_r; // dac sample value, right
|
wire dac_next;
|
wire dac_next; // dac next sample request
|
// bio
|
// bio
|
wire bio_en;
|
wire bio_stb; // bio strobe
|
wire bio_wr;
|
wire [31:0] bio_dout; // bio data output
|
wire bio_addr;
|
wire bio_ack; // bio acknowledge
|
wire [31:0] bio_data_in;
|
|
wire [31:0] bio_data_out;
|
//--------------------------------------
|
wire bio_wt;
|
// module instances
|
|
//--------------------------------------
|
|
|
clk_rst clk_rst1(
|
clk_rst clk_rst_1(
|
.clk_in(clk_in),
|
.clk_in(clk_in),
|
.reset_inout_n(reset_inout_n),
|
.rst_inout_n(rst_inout_n),
|
.sdram_clk(sdram_clk),
|
.sdram_clk(sdram_clk),
|
.sdram_fb(sdram_fb),
|
.sdram_fb(sdram_fb),
|
.clk(clk),
|
.clk(clk),
|
.clk_ok(clk_ok),
|
.clk_ok(clk_ok),
|
.reset(reset)
|
.rst(rst)
|
);
|
);
|
|
|
busctrl busctrl1(
|
cpu cpu_1(
|
// cpu
|
.clk(clk),
|
.cpu_en(cpu_en),
|
.rst(rst),
|
.cpu_wr(cpu_wr),
|
.bus_stb(bus_stb),
|
.cpu_size(cpu_size[1:0]),
|
.bus_we(bus_we),
|
.cpu_addr(cpu_addr[31:0]),
|
.bus_addr(bus_addr[31:2]),
|
.cpu_data_in(cpu_data_in[31:0]),
|
.bus_din(bus_din[31:0]),
|
.cpu_data_out(cpu_data_out[31:0]),
|
.bus_dout(bus_dout[31:0]),
|
.cpu_wt(cpu_wt),
|
.bus_ack(bus_ack),
|
// ram
|
.bus_irq(bus_irq[15:0])
|
.ram_en(ram_en),
|
);
|
.ram_wr(ram_wr),
|
|
.ram_size(ram_size[1:0]),
|
|
.ram_addr(ram_addr[24:0]),
|
|
.ram_data_in(ram_data_in[31:0]),
|
|
.ram_data_out(ram_data_out[31:0]),
|
|
.ram_wt(ram_wt),
|
|
// rom
|
|
.rom_en(rom_en),
|
|
.rom_wr(rom_wr),
|
|
.rom_size(rom_size[1:0]),
|
|
.rom_addr(rom_addr[20:0]),
|
|
.rom_data_out(rom_data_out[31:0]),
|
|
.rom_wt(rom_wt),
|
|
// tmr0
|
|
.tmr0_en(tmr0_en),
|
|
.tmr0_wr(tmr0_wr),
|
|
.tmr0_addr(tmr0_addr[3:2]),
|
|
.tmr0_data_in(tmr0_data_in[31:0]),
|
|
.tmr0_data_out(tmr0_data_out[31:0]),
|
|
.tmr0_wt(tmr0_wt),
|
|
// tmr1
|
|
.tmr1_en(tmr1_en),
|
|
.tmr1_wr(tmr1_wr),
|
|
.tmr1_addr(tmr1_addr[3:2]),
|
|
.tmr1_data_in(tmr1_data_in[31:0]),
|
|
.tmr1_data_out(tmr1_data_out[31:0]),
|
|
.tmr1_wt(tmr1_wt),
|
|
// dsp
|
|
.dsp_en(dsp_en),
|
|
.dsp_wr(dsp_wr),
|
|
.dsp_addr(dsp_addr[13:2]),
|
|
.dsp_data_in(dsp_data_in[15:0]),
|
|
.dsp_data_out(dsp_data_out[15:0]),
|
|
.dsp_wt(dsp_wt),
|
|
// kbd
|
|
.kbd_en(kbd_en),
|
|
.kbd_wr(kbd_wr),
|
|
.kbd_addr(kbd_addr),
|
|
.kbd_data_in(kbd_data_in[7:0]),
|
|
.kbd_data_out(kbd_data_out[7:0]),
|
|
.kbd_wt(kbd_wt),
|
|
// ser0
|
|
.ser0_en(ser0_en),
|
|
.ser0_wr(ser0_wr),
|
|
.ser0_addr(ser0_addr[3:2]),
|
|
.ser0_data_in(ser0_data_in[7:0]),
|
|
.ser0_data_out(ser0_data_out[7:0]),
|
|
.ser0_wt(ser0_wt),
|
|
// ser1
|
|
.ser1_en(ser1_en),
|
|
.ser1_wr(ser1_wr),
|
|
.ser1_addr(ser1_addr[3:2]),
|
|
.ser1_data_in(ser1_data_in[7:0]),
|
|
.ser1_data_out(ser1_data_out[7:0]),
|
|
.ser1_wt(ser1_wt),
|
|
// dsk
|
|
.dsk_en(dsk_en),
|
|
.dsk_wr(dsk_wr),
|
|
.dsk_addr(dsk_addr[19:2]),
|
|
.dsk_data_in(dsk_data_in[31:0]),
|
|
.dsk_data_out(dsk_data_out[31:0]),
|
|
.dsk_wt(dsk_wt),
|
|
// fms
|
|
.fms_en(fms_en),
|
|
.fms_wr(fms_wr),
|
|
.fms_addr(fms_addr[11:2]),
|
|
.fms_data_in(fms_data_in[31:0]),
|
|
.fms_data_out(fms_data_out[31:0]),
|
|
.fms_wt(fms_wt),
|
|
// bio
|
|
.bio_en(bio_en),
|
|
.bio_wr(bio_wr),
|
|
.bio_addr(bio_addr),
|
|
.bio_data_in(bio_data_in[31:0]),
|
|
.bio_data_out(bio_data_out[31:0]),
|
|
.bio_wt(bio_wt)
|
|
);
|
|
|
|
cpu cpu1(
|
|
.clk(clk),
|
|
.reset(reset),
|
|
.bus_en(cpu_en),
|
|
.bus_wr(cpu_wr),
|
|
.bus_size(cpu_size[1:0]),
|
|
.bus_addr(cpu_addr[31:0]),
|
|
.bus_data_in(cpu_data_in[31:0]),
|
|
.bus_data_out(cpu_data_out[31:0]),
|
|
.bus_wt(cpu_wt),
|
|
.irq(cpu_irq[15:0])
|
|
);
|
|
|
|
assign cpu_irq[15] = tmr1_irq;
|
|
assign cpu_irq[14] = tmr0_irq;
|
|
assign cpu_irq[13] = 1'b0;
|
|
assign cpu_irq[12] = 1'b0;
|
|
assign cpu_irq[11] = 1'b0;
|
|
assign cpu_irq[10] = 1'b0;
|
|
assign cpu_irq[ 9] = 1'b0;
|
|
assign cpu_irq[ 8] = dsk_irq;
|
|
assign cpu_irq[ 7] = 1'b0;
|
|
assign cpu_irq[ 6] = 1'b0;
|
|
assign cpu_irq[ 5] = 1'b0;
|
|
assign cpu_irq[ 4] = kbd_irq;
|
|
assign cpu_irq[ 3] = ser1_irq_r;
|
|
assign cpu_irq[ 2] = ser1_irq_t;
|
|
assign cpu_irq[ 1] = ser0_irq_r;
|
|
assign cpu_irq[ 0] = ser0_irq_t;
|
|
|
|
ram ram1(
|
ram ram_1(
|
.clk(clk),
|
.clk(clk),
|
.clk_ok(clk_ok),
|
.clk_ok(clk_ok),
|
.reset(reset),
|
.rst(rst),
|
.en(ram_en),
|
.stb(ram_stb),
|
.wr(ram_wr),
|
.we(bus_we),
|
.size(ram_size[1:0]),
|
.addr(bus_addr[24:2]),
|
.addr(ram_addr[24:0]),
|
.data_in(bus_dout[31:0]),
|
.data_in(ram_data_in[31:0]),
|
.data_out(ram_dout[31:0]),
|
.data_out(ram_data_out[31:0]),
|
.ack(ram_ack),
|
.wt(ram_wt),
|
|
.sdram_cke(sdram_cke),
|
.sdram_cke(sdram_cke),
|
.sdram_cs_n(sdram_cs_n),
|
.sdram_cs_n(sdram_cs_n),
|
.sdram_ras_n(sdram_ras_n),
|
.sdram_ras_n(sdram_ras_n),
|
.sdram_cas_n(sdram_cas_n),
|
.sdram_cas_n(sdram_cas_n),
|
.sdram_we_n(sdram_we_n),
|
.sdram_we_n(sdram_we_n),
|
Line 379... |
Line 246... |
.sdram_udqm(sdram_udqm),
|
.sdram_udqm(sdram_udqm),
|
.sdram_ldqm(sdram_ldqm),
|
.sdram_ldqm(sdram_ldqm),
|
.sdram_dq(sdram_dq[15:0])
|
.sdram_dq(sdram_dq[15:0])
|
);
|
);
|
|
|
rom rom1(
|
rom rom_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(rom_en),
|
.stb(rom_stb),
|
.wr(rom_wr),
|
.we(bus_we),
|
.size(rom_size[1:0]),
|
.addr(bus_addr[20:2]),
|
.addr(rom_addr[20:0]),
|
.data_out(rom_dout[31:0]),
|
.data_out(rom_data_out[31:0]),
|
.ack(rom_ack),
|
.wt(rom_wt),
|
|
.ce_n(flash_ce_n),
|
.ce_n(flash_ce_n),
|
.oe_n(flash_oe_n),
|
.oe_n(flash_oe_n),
|
.we_n(flash_we_n),
|
.we_n(flash_we_n),
|
.rst_n(flash_rst_n),
|
.rst_n(flash_rst_n),
|
.byte_n(flash_byte_n),
|
.byte_n(flash_byte_n),
|
.a(flash_a[19:0]),
|
.a(flash_a[19:0]),
|
.d(flash_d[15:0])
|
.d(flash_d[15:0])
|
);
|
);
|
|
|
tmr tmr1_0(
|
tmr tmr_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(tmr0_en),
|
.stb(tmr0_stb),
|
.wr(tmr0_wr),
|
.we(bus_we),
|
.addr(tmr0_addr[3:2]),
|
.addr(bus_addr[3:2]),
|
.data_in(tmr0_data_in[31:0]),
|
.data_in(bus_dout[31:0]),
|
.data_out(tmr0_data_out[31:0]),
|
.data_out(tmr0_dout[31:0]),
|
.wt(tmr0_wt),
|
.ack(tmr0_ack),
|
.irq(tmr0_irq)
|
.irq(tmr0_irq)
|
);
|
);
|
|
|
tmr tmr1_1(
|
tmr tmr_2(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(tmr1_en),
|
.stb(tmr1_stb),
|
.wr(tmr1_wr),
|
.we(bus_we),
|
.addr(tmr1_addr[3:2]),
|
.addr(bus_addr[3:2]),
|
.data_in(tmr1_data_in[31:0]),
|
.data_in(bus_dout[31:0]),
|
.data_out(tmr1_data_out[31:0]),
|
.data_out(tmr1_dout[31:0]),
|
.wt(tmr1_wt),
|
.ack(tmr1_ack),
|
.irq(tmr1_irq)
|
.irq(tmr1_irq)
|
);
|
);
|
|
|
dsp dsp1(
|
dsp dsp_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(dsp_en),
|
.stb(dsp_stb),
|
.wr(dsp_wr),
|
.we(bus_we),
|
.addr(dsp_addr[13:2]),
|
.addr(bus_addr[13:2]),
|
.data_in(dsp_data_in[15:0]),
|
.data_in(bus_dout[15:0]),
|
.data_out(dsp_data_out[15:0]),
|
.data_out(dsp_dout[15:0]),
|
.wt(dsp_wt),
|
.ack(dsp_ack),
|
.hsync(vga_hsync),
|
.hsync(vga_hsync),
|
.vsync(vga_vsync),
|
.vsync(vga_vsync),
|
.r(vga_r[2:0]),
|
.r(vga_r[2:0]),
|
.g(vga_g[2:0]),
|
.g(vga_g[2:0]),
|
.b(vga_b[2:0])
|
.b(vga_b[2:0])
|
);
|
);
|
|
|
kbd kbd1(
|
kbd kbd_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(kbd_en),
|
.stb(kbd_stb),
|
.wr(kbd_wr),
|
.we(bus_we),
|
.addr(kbd_addr),
|
.addr(bus_addr[2]),
|
.data_in(kbd_data_in[7:0]),
|
.data_in(bus_dout[7:0]),
|
.data_out(kbd_data_out[7:0]),
|
.data_out(kbd_dout[7:0]),
|
.wt(kbd_wt),
|
.ack(kbd_ack),
|
.irq(kbd_irq),
|
.irq(kbd_irq),
|
.ps2_clk(ps2_clk),
|
.ps2_clk(ps2_clk),
|
.ps2_data(ps2_data)
|
.ps2_data(ps2_data)
|
);
|
);
|
|
|
ser ser1_0(
|
ser ser_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(ser0_en),
|
.stb(ser0_stb),
|
.wr(ser0_wr),
|
.we(bus_we),
|
.addr(ser0_addr[3:2]),
|
.addr(bus_addr[3:2]),
|
.data_in(ser0_data_in[7:0]),
|
.data_in(bus_dout[7:0]),
|
.data_out(ser0_data_out[7:0]),
|
.data_out(ser0_dout[7:0]),
|
.wt(ser0_wt),
|
.ack(ser0_ack),
|
.irq_r(ser0_irq_r),
|
.irq_r(ser0_irq_r),
|
.irq_t(ser0_irq_t),
|
.irq_t(ser0_irq_t),
|
.rxd(rs232_0_rxd),
|
.rxd(rs232_0_rxd),
|
.txd(rs232_0_txd)
|
.txd(rs232_0_txd)
|
);
|
);
|
|
|
ser ser1_1(
|
ser ser_2(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(ser1_en),
|
.stb(ser1_stb),
|
.wr(ser1_wr),
|
.we(bus_we),
|
.addr(ser1_addr[3:2]),
|
.addr(bus_addr[3:2]),
|
.data_in(ser1_data_in[7:0]),
|
.data_in(bus_dout[7:0]),
|
.data_out(ser1_data_out[7:0]),
|
.data_out(ser1_dout[7:0]),
|
.wt(ser1_wt),
|
.ack(ser1_ack),
|
.irq_r(ser1_irq_r),
|
.irq_r(ser1_irq_r),
|
.irq_t(ser1_irq_t),
|
.irq_t(ser1_irq_t),
|
.rxd(rs232_1_rxd),
|
.rxd(rs232_1_rxd),
|
.txd(rs232_1_txd)
|
.txd(rs232_1_txd)
|
);
|
);
|
|
|
dsk dsk1(
|
assign pbus_a[4:3] = 2'b00;
|
|
|
|
dsk dsk_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(dsk_en),
|
.stb(dsk_stb),
|
.wr(dsk_wr),
|
.we(bus_we),
|
.addr(dsk_addr[19:2]),
|
.addr(bus_addr[19:2]),
|
.data_in(dsk_data_in[31:0]),
|
.data_in(bus_dout[31:0]),
|
.data_out(dsk_data_out[31:0]),
|
.data_out(dsk_dout[31:0]),
|
.wt(dsk_wt),
|
.ack(dsk_ack),
|
.irq(dsk_irq),
|
.irq(dsk_irq),
|
.ata_d(pbus_d[15:0]),
|
.ata_d(pbus_d[15:0]),
|
.ata_a(pbus_a[2:0]),
|
.ata_a(pbus_a[2:0]),
|
.ata_cs0_n(ata_cs0_n),
|
.ata_cs0_n(ata_cs0_n),
|
.ata_cs1_n(ata_cs1_n),
|
.ata_cs1_n(ata_cs1_n),
|
Line 503... |
Line 371... |
.ata_dmarq(ata_dmarq),
|
.ata_dmarq(ata_dmarq),
|
.ata_dmack_n(ata_dmack_n),
|
.ata_dmack_n(ata_dmack_n),
|
.ata_iordy(ata_iordy)
|
.ata_iordy(ata_iordy)
|
);
|
);
|
|
|
fms fms1(
|
fms fms_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(fms_en),
|
.stb(fms_stb),
|
.wr(fms_wr),
|
.we(bus_we),
|
.addr(fms_addr[11:2]),
|
.addr(bus_addr[11:2]),
|
.data_in(fms_data_in[31:0]),
|
.data_in(bus_dout[31:0]),
|
.data_out(fms_data_out[31:0]),
|
.data_out(fms_dout[31:0]),
|
.wt(fms_wt),
|
.ack(fms_ack),
|
.next(dac_next),
|
.next(dac_next),
|
.sample_l(dac_sample_l[15:0]),
|
.sample_l(dac_sample_l[15:0]),
|
.sample_r(dac_sample_r[15:0])
|
.sample_r(dac_sample_r[15:0])
|
);
|
);
|
|
|
dac dac1(
|
dac dac_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.sample_l(dac_sample_l[15:0]),
|
.sample_l(dac_sample_l[15:0]),
|
.sample_r(dac_sample_r[15:0]),
|
.sample_r(dac_sample_r[15:0]),
|
.next(dac_next),
|
.next(dac_next),
|
.mclk(dac_mclk),
|
.mclk(dac_mclk),
|
.sclk(dac_sclk),
|
.sclk(dac_sclk),
|
.lrck(dac_lrck),
|
.lrck(dac_lrck),
|
.sdti(dac_sdti)
|
.sdti(dac_sdti)
|
);
|
);
|
|
|
assign pbus_a[4:3] = 2'b00;
|
assign slot1_cs_n = 1'b1;
|
assign slot1_cs_n = 1;
|
assign slot2_cs_n = 1'b1;
|
assign slot2_cs_n = 1;
|
assign ether_cs_n = 1'b1;
|
assign ether_cs_n = 1;
|
|
|
bio bio_1(
|
bio bio1(
|
.clk(clk),
|
.clk(clk),
|
.rst(rst),
|
.reset(reset),
|
.stb(bio_stb),
|
.en(bio_en),
|
.we(bus_we),
|
.wr(bio_wr),
|
.addr(bus_addr[2]),
|
.addr(bio_addr),
|
.data_in(bus_dout[31:0]),
|
.data_in(bio_data_in[31:0]),
|
.data_out(bio_dout[31:0]),
|
.data_out(bio_data_out[31:0]),
|
.ack(bio_ack),
|
.wt(bio_wt),
|
|
.sw1_1(flash_a[19]),
|
.sw1_1(flash_a[19]),
|
.sw1_2(flash_a[18]),
|
.sw1_2(flash_a[18]),
|
.sw1_3(sw1_3),
|
.sw1_3(sw1_3),
|
.sw1_4(sw1_4),
|
.sw1_4(sw1_4),
|
.sw2_n(sw2_n),
|
.sw2_n(sw2_n),
|
.sw3_n(sw3_n)
|
.sw3_n(sw3_n)
|
);
|
);
|
|
|
|
//--------------------------------------
|
|
// address decoder
|
|
//--------------------------------------
|
|
|
|
// RAM: architectural limit = 512 MB
|
|
// implementation limit = 32 MB
|
|
assign ram_stb =
|
|
(bus_stb == 1 && bus_addr[31:29] == 3'b000
|
|
&& bus_addr[28:25] == 4'b0000) ? 1 : 0;
|
|
|
|
// ROM: architectural limit = 256 MB
|
|
// implementation limit = 2 MB
|
|
assign rom_stb =
|
|
(bus_stb == 1 && bus_addr[31:28] == 4'b0010
|
|
&& bus_addr[27:21] == 7'b0000000) ? 1 : 0;
|
|
|
|
// I/O: architectural limit = 256 MB
|
|
assign i_o_stb =
|
|
(bus_stb == 1 && bus_addr[31:28] == 4'b0011) ? 1 : 0;
|
|
assign tmr0_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h00
|
|
&& bus_addr[19:12] == 8'h00) ? 1 : 0;
|
|
assign tmr1_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h00
|
|
&& bus_addr[19:12] == 8'h01) ? 1 : 0;
|
|
assign dsp_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h01) ? 1 : 0;
|
|
assign kbd_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h02) ? 1 : 0;
|
|
assign ser0_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h03
|
|
&& bus_addr[19:12] == 8'h00) ? 1 : 0;
|
|
assign ser1_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h03
|
|
&& bus_addr[19:12] == 8'h01) ? 1 : 0;
|
|
assign dsk_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h04) ? 1 : 0;
|
|
assign fms_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h05
|
|
&& bus_addr[19:12] == 8'h00) ? 1 : 0;
|
|
assign bio_stb =
|
|
(i_o_stb == 1 && bus_addr[27:20] == 8'h10
|
|
&& bus_addr[19:12] == 8'h00) ? 1 : 0;
|
|
|
|
//--------------------------------------
|
|
// data and acknowledge multiplexers
|
|
//--------------------------------------
|
|
|
|
assign bus_din[31:0] =
|
|
(ram_stb == 1) ? ram_dout[31:0] :
|
|
(rom_stb == 1) ? rom_dout[31:0] :
|
|
(tmr0_stb == 1) ? tmr0_dout[31:0] :
|
|
(tmr1_stb == 1) ? tmr1_dout[31:0] :
|
|
(dsp_stb == 1) ? { 16'h0000, dsp_dout[15:0] } :
|
|
(kbd_stb == 1) ? { 24'h000000, kbd_dout[7:0] } :
|
|
(ser0_stb == 1) ? { 24'h000000, ser0_dout[7:0] } :
|
|
(ser1_stb == 1) ? { 24'h000000, ser1_dout[7:0] } :
|
|
(dsk_stb == 1) ? dsk_dout[31:0] :
|
|
(fms_stb == 1) ? fms_dout[31:0] :
|
|
(bio_stb == 1) ? bio_dout[31:0] :
|
|
32'h00000000;
|
|
|
|
assign bus_ack =
|
|
(ram_stb == 1) ? ram_ack :
|
|
(rom_stb == 1) ? rom_ack :
|
|
(tmr0_stb == 1) ? tmr0_ack :
|
|
(tmr1_stb == 1) ? tmr1_ack :
|
|
(dsp_stb == 1) ? dsp_ack :
|
|
(kbd_stb == 1) ? kbd_ack :
|
|
(ser0_stb == 1) ? ser0_ack :
|
|
(ser1_stb == 1) ? ser1_ack :
|
|
(dsk_stb == 1) ? dsk_ack :
|
|
(fms_stb == 1) ? fms_ack :
|
|
(bio_stb == 1) ? bio_ack :
|
|
0;
|
|
|
|
//--------------------------------------
|
|
// bus interrupt request assignments
|
|
//--------------------------------------
|
|
|
|
assign bus_irq[15] = tmr1_irq;
|
|
assign bus_irq[14] = tmr0_irq;
|
|
assign bus_irq[13] = 0;
|
|
assign bus_irq[12] = 0;
|
|
assign bus_irq[11] = 0;
|
|
assign bus_irq[10] = 0;
|
|
assign bus_irq[ 9] = 0;
|
|
assign bus_irq[ 8] = dsk_irq;
|
|
assign bus_irq[ 7] = 0;
|
|
assign bus_irq[ 6] = 0;
|
|
assign bus_irq[ 5] = 0;
|
|
assign bus_irq[ 4] = kbd_irq;
|
|
assign bus_irq[ 3] = ser1_irq_r;
|
|
assign bus_irq[ 2] = ser1_irq_t;
|
|
assign bus_irq[ 1] = ser0_irq_r;
|
|
assign bus_irq[ 0] = ser0_irq_t;
|
|
|
endmodule
|
endmodule
|
|
|
No newline at end of file
|
No newline at end of file
|