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_in,
|
rst_in,
|
sdram_ck_p,
|
sdram_ck_p,
|
sdram_ck_n,
|
sdram_ck_n,
|
sdram_cke,
|
sdram_cke,
|
sdram_cs_n,
|
sdram_cs_n,
|
sdram_ras_n,
|
sdram_ras_n,
|
Line 50... |
Line 54... |
lcd_rs,
|
lcd_rs,
|
spi_ss_b,
|
spi_ss_b,
|
fpga_init_b);
|
fpga_init_b);
|
// clock and reset
|
// clock and reset
|
input clk_in;
|
input clk_in;
|
input reset_in;
|
input rst_in;
|
// SDRAM
|
// SDRAM
|
output sdram_ck_p;
|
output sdram_ck_p;
|
output sdram_ck_n;
|
output sdram_ck_n;
|
output sdram_cke;
|
output sdram_cke;
|
output sdram_cs_n;
|
output sdram_cs_n;
|
Line 112... |
Line 116... |
wire ddr_clk_90;
|
wire ddr_clk_90;
|
wire ddr_clk_180;
|
wire ddr_clk_180;
|
wire ddr_clk_270;
|
wire ddr_clk_270;
|
wire ddr_clk_ok;
|
wire ddr_clk_ok;
|
wire clk;
|
wire clk;
|
wire reset;
|
wire rst;
|
// cpu
|
// cpu
|
wire cpu_en;
|
wire bus_stb;
|
wire cpu_wr;
|
wire bus_we;
|
wire [1:0] cpu_size;
|
wire [31:2] bus_addr;
|
wire [31:0] cpu_addr;
|
wire [31:0] bus_din;
|
wire [31:0] cpu_data_in;
|
wire [31:0] bus_dout;
|
wire [31:0] cpu_data_out;
|
wire bus_ack;
|
wire cpu_wt;
|
wire [15:0] bus_irq;
|
wire [15:0] cpu_irq;
|
|
// ram
|
// ram
|
wire ram_en;
|
wire ram_stb;
|
wire ram_wr;
|
wire [31:0] ram_dout;
|
wire [1:0] ram_size;
|
wire ram_ack;
|
wire [25: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;
|
wire rom_wr;
|
wire [31:0] rom_dout;
|
wire [1:0] rom_size;
|
wire rom_ack;
|
wire [23:0] rom_addr;
|
// i/o
|
wire [31:0] rom_data_out;
|
wire i_o_stb;
|
wire rom_wt;
|
|
// tmr0
|
// tmr0
|
wire tmr0_en;
|
wire tmr0_stb;
|
wire tmr0_wr;
|
wire [31:0] tmr0_dout;
|
wire [3:2] tmr0_addr;
|
wire tmr0_ack;
|
wire [31:0] tmr0_data_in;
|
|
wire [31:0] tmr0_data_out;
|
|
wire tmr0_wt;
|
|
wire tmr0_irq;
|
wire tmr0_irq;
|
// tmr1
|
// tmr1
|
wire tmr1_en;
|
wire tmr1_stb;
|
wire tmr1_wr;
|
wire [31:0] tmr1_dout;
|
wire [3:2] tmr1_addr;
|
wire tmr1_ack;
|
wire [31:0] tmr1_data_in;
|
|
wire [31:0] tmr1_data_out;
|
|
wire tmr1_wt;
|
|
wire tmr1_irq;
|
wire tmr1_irq;
|
// dsp
|
// dsp
|
wire dsp_en;
|
wire dsp_stb;
|
wire dsp_wr;
|
wire [15:0] dsp_dout;
|
wire [13:2] dsp_addr;
|
wire dsp_ack;
|
wire [15:0] dsp_data_in;
|
|
wire [15:0] dsp_data_out;
|
|
wire dsp_wt;
|
|
// kbd
|
// kbd
|
wire kbd_en;
|
wire kbd_stb;
|
wire kbd_wr;
|
wire [7:0] kbd_dout;
|
wire kbd_addr;
|
wire kbd_ack;
|
wire [7:0] kbd_data_in;
|
|
wire [7:0] kbd_data_out;
|
|
wire kbd_wt;
|
|
wire kbd_irq;
|
wire kbd_irq;
|
// ser0
|
// ser0
|
wire ser0_en;
|
wire ser0_stb;
|
wire ser0_wr;
|
wire [7:0] ser0_dout;
|
wire [3:2] ser0_addr;
|
wire ser0_ack;
|
wire [7:0] ser0_data_in;
|
|
wire [7:0] ser0_data_out;
|
|
wire ser0_wt;
|
|
wire ser0_irq_r;
|
wire ser0_irq_r;
|
wire ser0_irq_t;
|
wire ser0_irq_t;
|
// ser1
|
// ser1
|
wire ser1_en;
|
wire ser1_stb;
|
wire ser1_wr;
|
wire [7:0] ser1_dout;
|
wire [3:2] ser1_addr;
|
wire ser1_ack;
|
wire [7:0] ser1_data_in;
|
|
wire [7:0] ser1_data_out;
|
|
wire ser1_wt;
|
|
wire ser1_irq_r;
|
wire ser1_irq_r;
|
wire ser1_irq_t;
|
wire ser1_irq_t;
|
// fms
|
// fms
|
wire fms_en;
|
wire fms_stb;
|
wire fms_wr;
|
wire [31:0] fms_dout;
|
wire [11:2] fms_addr;
|
wire fms_ack;
|
wire [31:0] fms_data_in;
|
|
wire [31:0] fms_data_out;
|
|
wire fms_wt;
|
|
// spi
|
// spi
|
wire [15:0] dac_sample_l;
|
wire [15:0] dac_sample_l;
|
wire [15:0] dac_sample_r;
|
wire [15:0] dac_sample_r;
|
wire dac_next;
|
wire dac_next;
|
// bio
|
// bio
|
wire bio_en;
|
wire bio_stb;
|
wire bio_wr;
|
wire [31:0] bio_dout;
|
wire bio_addr;
|
wire bio_ack;
|
wire [31:0] bio_data_in;
|
|
wire [31:0] bio_data_out;
|
|
wire bio_wt;
|
|
wire spi_en;
|
wire spi_en;
|
|
|
clk_rst clk_rst1(
|
//--------------------------------------
|
|
// module instances
|
|
//--------------------------------------
|
|
|
|
clk_rst clk_rst_1(
|
.clk_in(clk_in),
|
.clk_in(clk_in),
|
.reset_in(reset_in),
|
.rst_in(rst_in),
|
.ddr_clk_0(ddr_clk_0),
|
.ddr_clk_0(ddr_clk_0),
|
.ddr_clk_90(ddr_clk_90),
|
.ddr_clk_90(ddr_clk_90),
|
.ddr_clk_180(ddr_clk_180),
|
.ddr_clk_180(ddr_clk_180),
|
.ddr_clk_270(ddr_clk_270),
|
.ddr_clk_270(ddr_clk_270),
|
.ddr_clk_ok(ddr_clk_ok),
|
.ddr_clk_ok(ddr_clk_ok),
|
.clk(clk),
|
.clk(clk),
|
.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[25: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[23: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),
|
|
// 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] = 1'b0; //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(
|
.ddr_clk_0(ddr_clk_0),
|
.ddr_clk_0(ddr_clk_0),
|
.ddr_clk_90(ddr_clk_90),
|
.ddr_clk_90(ddr_clk_90),
|
.ddr_clk_180(ddr_clk_180),
|
.ddr_clk_180(ddr_clk_180),
|
.ddr_clk_270(ddr_clk_270),
|
.ddr_clk_270(ddr_clk_270),
|
.ddr_clk_ok(ddr_clk_ok),
|
.ddr_clk_ok(ddr_clk_ok),
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(ram_en),
|
.stb(ram_stb),
|
.wr(ram_wr),
|
.we(bus_we),
|
.size(ram_size[1:0]),
|
.addr(bus_addr[25:2]),
|
.addr(ram_addr[25: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_ck_p(sdram_ck_p),
|
.sdram_ck_p(sdram_ck_p),
|
.sdram_ck_n(sdram_ck_n),
|
.sdram_ck_n(sdram_ck_n),
|
.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),
|
Line 361... |
Line 238... |
.sdram_udqs(sdram_udqs),
|
.sdram_udqs(sdram_udqs),
|
.sdram_ldqs(sdram_ldqs),
|
.sdram_ldqs(sdram_ldqs),
|
.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[23:2]),
|
.addr(rom_addr[23:0]),
|
.data_out(rom_dout[31:0]),
|
.data_out(rom_data_out[31:0]),
|
.ack(rom_ack),
|
.wt(rom_wt),
|
|
.spi_en(spi_en),
|
.spi_en(spi_en),
|
.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),
|
.byte_n(flash_byte_n),
|
.byte_n(flash_byte_n),
|
.a(flash_a[23:0]),
|
.a(flash_a[23: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),
|
.r(vga_r),
|
.g(vga_g),
|
.g(vga_g),
|
.b(vga_b)
|
.b(vga_b)
|
);
|
);
|
|
|
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)
|
);
|
);
|
|
|
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])
|
);
|
);
|
|
|
spi spi1(
|
spi spi_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.spi_en(spi_en),
|
.spi_en(spi_en),
|
.dac_sample_l(dac_sample_l[15:0]),
|
.dac_sample_l(dac_sample_l[15:0]),
|
.dac_sample_r(dac_sample_r[15:0]),
|
.dac_sample_r(dac_sample_r[15:0]),
|
.dac_next(dac_next),
|
.dac_next(dac_next),
|
.spi_sck(spi_sck),
|
.spi_sck(spi_sck),
|
Line 493... |
Line 369... |
.amp_cs_n(amp_cs_n),
|
.amp_cs_n(amp_cs_n),
|
.amp_shdn(amp_shdn),
|
.amp_shdn(amp_shdn),
|
.ad_conv(ad_conv)
|
.ad_conv(ad_conv)
|
);
|
);
|
|
|
bio bio1(
|
bio bio_1(
|
.clk(clk),
|
.clk(clk),
|
.reset(reset),
|
.rst(rst),
|
.en(bio_en),
|
.stb(bio_stb),
|
.wr(bio_wr),
|
.we(bus_we),
|
.addr(bio_addr),
|
.addr(bus_addr[2]),
|
.data_in(bio_data_in[31:0]),
|
.data_in(bus_dout[31:0]),
|
.data_out(bio_data_out[31:0]),
|
.data_out(bio_dout[31:0]),
|
.wt(bio_wt),
|
.ack(bio_ack),
|
.spi_en(spi_en),
|
.spi_en(spi_en),
|
.sw(sw[3:0]),
|
.sw(sw[3:0]),
|
.led(led[7:0]),
|
.led(led[7:0]),
|
.lcd_e(lcd_e),
|
.lcd_e(lcd_e),
|
.lcd_rw(lcd_rw),
|
.lcd_rw(lcd_rw),
|
.lcd_rs(lcd_rs),
|
.lcd_rs(lcd_rs),
|
.spi_ss_b(spi_ss_b),
|
.spi_ss_b(spi_ss_b),
|
.fpga_init_b(fpga_init_b)
|
.fpga_init_b(fpga_init_b)
|
);
|
);
|
|
|
|
//--------------------------------------
|
|
// address decoder
|
|
//--------------------------------------
|
|
|
|
// RAM: architectural limit = 512 MB
|
|
// implementation limit = 64 MB
|
|
assign ram_stb =
|
|
(bus_stb == 1 && bus_addr[31:29] == 3'b000
|
|
&& bus_addr[28:26] == 3'b000) ? 1 : 0;
|
|
|
|
// ROM: architectural limit = 256 MB
|
|
// implementation limit = 16 MB
|
|
assign rom_stb =
|
|
(bus_stb == 1 && bus_addr[31:28] == 4'b0010
|
|
&& bus_addr[27:24] == 4'b0000) ? 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 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] } :
|
|
(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 :
|
|
(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] = 1'b0;
|
|
assign bus_irq[12] = 1'b0;
|
|
assign bus_irq[11] = 1'b0;
|
|
assign bus_irq[10] = 1'b0;
|
|
assign bus_irq[ 9] = 1'b0;
|
|
assign bus_irq[ 8] = 1'b0; //dsk_irq;
|
|
assign bus_irq[ 7] = 1'b0;
|
|
assign bus_irq[ 6] = 1'b0;
|
|
assign bus_irq[ 5] = 1'b0;
|
|
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
|