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

Subversion Repositories zx_ula

[/] [zx_ula/] [branches/] [xilinx/] [spectrum_48k_for_digilent_spartan3_starter_kit/] [spectrum48k_tld.v] - Diff between revs 8 and 9

Only display areas with differences | Details | Blame | View Log

Rev 8 Rev 9
`timescale 1ns / 1ps
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
// Company:        Dept. Architecture and Computing Technology. University of Seville
// Company:        Dept. Architecture and Computing Technology. University of Seville
// Engineer:       Miguel Angel Rodriguez Jodar. rodriguj@atc.us.es
// Engineer:       Miguel Angel Rodriguez Jodar. rodriguj@atc.us.es
// 
// 
// Create Date:    19:13:39 4-Apr-2012 
// Create Date:    19:13:39 4-Apr-2012 
// Design Name:    ZX Spectrum
// Design Name:    ZX Spectrum
// Module Name:    tld_spartan3_sp48k
// Module Name:    tld_spartan3_sp48k
// Project Name: 
// Project Name: 
// Target Devices: 
// Target Devices: 
// Tool versions: 
// Tool versions: 
// Description: 
// Description: 
//
//
// Dependencies: 
// Dependencies: 
//
//
// Revision: 
// Revision: 
// Revision 1.00 - File Created
// Revision 1.00 - File Created
// Additional Comments: GPL License policies apply to the contents of this file.
// Additional Comments: GPL License policies apply to the contents of this file.
//
//
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
module tld_spartan3_sp48k (
module tld_spartan3_sp48k (
    input clk50,
    input clk50,
         input reset,
         input reset,
    output r,
    output r,
    output g,
    output g,
    output b,
    output b,
    output i,
    output i,
    output csync,
    output csync,
        // ULA I/O 
        // ULA I/O 
         input ear,
         input ear,
         output audio_out,
         output audio_out,
         output [7:0] kbd_rows,
         output [7:0] kbd_rows,
         input [4:0] kbd_columns,
         input [4:0] kbd_columns,
        // diagnostics
        // diagnostics
         output [7:0] leds,
         output [7:0] leds,
        // SRAM memory
        // SRAM memory
         output [17:0] sa,
         output [17:0] sa,
         inout [7:0] sd1,
         inout [7:0] sd1,
         output sramce1,
         output sramce1,
         output sramub1,
         output sramub1,
         output sramlb1,
         output sramlb1,
         output sramoe,
         output sramoe,
         output sramwe
         output sramwe
    );
    );
 
 
        // CPU signals
        // CPU signals
        wire [15:0] a;
        wire [15:0] a;
        wire [7:0] cpudout;
        wire [7:0] cpudout;
        wire [7:0] cpudin;
        wire [7:0] cpudin;
        wire clkcpu;
        wire clkcpu;
        wire mreq_n;
        wire mreq_n;
        wire iorq_n;
        wire iorq_n;
        wire wr_n;
        wire wr_n;
        wire rd_n;
        wire rd_n;
        wire rfsh_n;
        wire rfsh_n;
        wire int_n;
        wire int_n;
 
 
        // VRAM signals
        // VRAM signals
        wire [13:0] va;
        wire [13:0] va;
        wire [7:0] vramdin;
        wire [7:0] vramdin;
        wire [7:0] vramdout;
        wire [7:0] vramdout;
        wire vramoe;
        wire vramoe;
        wire vramcs;
        wire vramcs;
        wire vramwe;
        wire vramwe;
 
 
        // I/O
        // I/O
        wire mic;
        wire mic;
        wire spk;
        wire spk;
        assign audio_out = spk;
        assign audio_out = spk;
 
 
        // ULA data bus
        // ULA data bus
        wire [7:0] uladout;
        wire [7:0] uladout;
        wire [7:0] uladin;
        wire [7:0] uladin;
 
 
        // SRAM data bus
        // SRAM data bus
        wire [7:0] sramdout;
        wire [7:0] sramdout;
        wire [7:0] sramdin;
        wire [7:0] sramdin;
 
 
        // ROM data bus
        // ROM data bus
        wire [7:0] romdout;
        wire [7:0] romdout;
 
 
        wire sram_cs = a[15] & !mreq_n;
        wire sram_cs = a[15] & !mreq_n;
        wire ula_cs = !a[0] & !iorq_n;
        wire ula_cs = !a[0] & !iorq_n;
        wire vram_cs = !a[15] & a[14] & !mreq_n;
        wire vram_cs = !a[15] & a[14] & !mreq_n;
        wire port255_cs = !iorq_n && a[7:0]==8'hFF && !rd_n;
        wire port255_cs = !iorq_n && a[7:0]==8'hFF && !rd_n;
        wire rom_cs = !a[15] & !a[14] & !mreq_n & !rd_n;
        wire rom_cs = !a[15] & !a[14] & !mreq_n & !rd_n;
 
 
        /////////////////////////////////////
        /////////////////////////////////////
        // Master clock (14MHz) generation
        // Master clock (14MHz) generation
        /////////////////////////////////////
        /////////////////////////////////////
        wire clk28mhz;
        wire clk28mhz;
   master_clock clock28mhz (
   master_clock clock28mhz (
    .CLKIN_IN(clk50),
    .CLKIN_IN(clk50),
    .CLKFX_OUT(clk28mhz),
    .CLKFX_OUT(clk28mhz),
    .CLKIN_IBUFG_OUT(),
    .CLKIN_IBUFG_OUT(),
    .CLK0_OUT()
    .CLK0_OUT()
    );
    );
        reg clk14 = 0;
        reg clk14 = 0;
        always @(posedge clk28mhz) begin
        always @(posedge clk28mhz) begin
                clk14 = !clk14;
                clk14 = !clk14;
        end
        end
        wire clkula = clk14;
        wire clkula = clk14;
        wire clkmem = clk28mhz;
        wire clkmem = clk28mhz;
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // ROM
   // ROM
   /////////////////////////////////////        
   /////////////////////////////////////        
        rom the_rom (
        rom the_rom (
                .clka(clkmem),
                .clka(clkmem),
                .ena(rom_cs),
                .ena(rom_cs),
                .addra(a[13:0]),
                .addra(a[13:0]),
                .douta(romdout)
                .douta(romdout)
        );
        );
 
 
//   /////////////////////////////////////
 
//   // VRAM (first 16K of RAM)
 
//   /////////////////////////////////////      
 
//      vram lower_ram (
 
//              .clka(clkmem),
 
//              .addra(va),
 
//              .dina(vramdin),
 
//              .douta(vramdout),
 
//              .ena(vramcs),
 
//              .wea(vramwe)
 
//      );
 
 
 
//   /////////////////////////////////////
 
//   // SRAM (top 32K of RAM). External SRAM chip
 
//   /////////////////////////////////////      
 
//   ram32k upper_ram (
 
//              .a(a[14:0]),
 
//              .cs_n(!sram_cs),
 
//              .oe_n(rd_n),
 
//              .we_n(wr_n),
 
//              .din(sramdin),
 
//              .dout(sramdout),
 
//              .sa(sa),
 
//              .sd(sd1),
 
//              .sramce(sramce1),
 
//              .sramub(sramub1),
 
//              .sramlb(sramlb1),
 
//              .sramoe(sramoe),
 
//              .sramwe(sramwe)
 
//      );
 
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // VRAM and upper RAM banks
   // VRAM and upper RAM banks
   /////////////////////////////////////        
   /////////////////////////////////////        
   ram_controller vram_and_upper_ram (
   ram_controller vram_and_upper_ram (
                .clk(clkmem),
                .clk(clkmem),
                // Bank 1 (VRAM)
                // Bank 1 (VRAM)
                .a1({2'b00,va}),
                .a1({2'b00,va}),
                .cs1_n(!vramcs),
                .cs1_n(!vramcs),
                .oe1_n(!vramoe),
                .oe1_n(!vramoe),
                .we1_n(!vramwe),
                .we1_n(!vramwe),
                .din1(vramdin),
                .din1(vramdin),
                .dout1(vramdout),
                .dout1(vramdout),
                // Bank 2 (upper RAM)
                // Bank 2 (upper RAM)
                .a2({1'b0,a[14:0]}),
                .a2({1'b0,a[14:0]}),
                .cs2_n(!sram_cs),
                .cs2_n(!sram_cs),
                .oe2_n(rd_n),
                .oe2_n(rd_n),
                .we2_n(wr_n),
                .we2_n(wr_n),
                .din2(sramdin),
                .din2(sramdin),
                .dout2(sramdout),
                .dout2(sramdout),
                // Outputs to actual SRAM on board
                // Outputs to actual SRAM on board
                .sa(sa),
                .sa(sa),
                .sd(sd1),
                .sd(sd1),
                .sramce(sramce1),
                .sramce(sramce1),
                .sramub(sramub1),
                .sramub(sramub1),
                .sramlb(sramlb1),
                .sramlb(sramlb1),
                .sramoe(sramoe),
                .sramoe(sramoe),
                .sramwe(sramwe)
                .sramwe(sramwe)
        );
        );
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // The ULA
   // The ULA
   /////////////////////////////////////        
   /////////////////////////////////////        
        ula the_ula (
        ula the_ula (
                .clk14(clkula),
                .clk14(clkula),
                .a(a),
                .a(a),
                .din(uladin),
                .din(uladin),
                .dout(uladout),
                .dout(uladout),
                .mreq_n(mreq_n),
                .mreq_n(mreq_n),
                .iorq_n(iorq_n),
                .iorq_n(iorq_n),
                .rd_n(rd_n),
                .rd_n(rd_n),
                .wr_n(wr_n),
                .wr_n(wr_n),
                .rfsh_n(rfsh_n),
                .rfsh_n(rfsh_n),
                .clkcpu(clkcpu),
                .clkcpu(clkcpu),
                .msk_int_n(int_n),
                .msk_int_n(int_n),
                .va(va),
                .va(va),
                .vramdout(vramdout),
                .vramdout(vramdout),
                .vramdin(vramdin),
                .vramdin(vramdin),
                .vramoe(vramoe),
                .vramoe(vramoe),
                .vramcs(vramcs),
                .vramcs(vramcs),
                .vramwe(vramwe),
                .vramwe(vramwe),
                .ear(ear),
                .ear(ear),
                .mic(mic),
                .mic(mic),
                .spk(spk),
                .spk(spk),
                .kbrows(kbd_rows),
                .kbrows(kbd_rows),
                .kbcolumns(kbd_columns),
                .kbcolumns(kbd_columns),
                .r(r),
                .r(r),
                .g(g),
                .g(g),
                .b(b),
                .b(b),
                .i(i),
                .i(i),
                .csync(csync)
                .csync(csync)
        );
        );
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // The CPU Z80A
   // The CPU Z80A
   /////////////////////////////////////        
   /////////////////////////////////////        
   tv80n cpu (
   tv80n cpu (
                // Outputs
                // Outputs
                .m1_n(),
                .m1_n(),
                .mreq_n(mreq_n),
                .mreq_n(mreq_n),
                .iorq_n(iorq_n),
                .iorq_n(iorq_n),
                .rd_n(rd_n),
                .rd_n(rd_n),
                .wr_n(wr_n),
                .wr_n(wr_n),
                .rfsh_n(rfsh_n),
                .rfsh_n(rfsh_n),
                .halt_n(),
                .halt_n(),
                .busak_n(),
                .busak_n(),
                .A(a),
                .A(a),
                .dout(cpudout),
                .dout(cpudout),
                // Inputs
                // Inputs
                .reset_n(!reset),
                .reset_n(!reset),
                .clk(clkcpu),
                .clk(clkcpu),
                .wait_n(1'b1),
                .wait_n(1'b1),
                .int_n(int_n),
                .int_n(int_n),
                .nmi_n(1'b1),
                .nmi_n(1'b1),
                .busrq_n(1'b1),
                .busrq_n(1'b1),
                .di(cpudin)
                .di(cpudin)
   );
   );
 
 
//   T80s cpu (
 
//              // Outputs
 
//              .M1_n(),
 
//              .MREQ_n(mreq_n),
 
//              .IORQ_n(iorq_n),
 
//              .RD_n(rd_n),
 
//              .WR_n(wr_n),
 
//              .RFSH_n(rfsh_n),
 
//              .HALT_n(),
 
//              .BUSAK_n(),
 
//              .A(a),
 
//              .DO(cpudout), 
 
//              // Inputs
 
//              .RESET_n(!reset),
 
//              .CLK_n(clkcpu),
 
//              .WAIT_n(1'b1),
 
//              .INT_n(int_n),
 
//              .NMI_n(1'b1),
 
//              .BUSRQ_n(1'b1),
 
//              .DI(cpudin)
 
//   );
 
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // Connecting all togther
   // Connecting all togther
   /////////////////////////////////////        
   /////////////////////////////////////        
        assign sramdin = cpudout;
        assign sramdin = cpudout;
        assign uladin = cpudout;
        assign uladin = cpudout;
        assign cpudin = (rom_cs)? romdout :
        assign cpudin = (rom_cs)? romdout :
                        (ula_cs | vram_cs | port255_cs)? uladout :
                        (ula_cs | vram_cs | port255_cs)? uladout :
                                                 (sram_cs)? sramdout :
                                                 (sram_cs)? sramdout :
                                                            8'hFF;
                                                            8'hFF;
 
 
   /////////////////////////////////////
   /////////////////////////////////////
   // Diagnostics
   // Diagnostics
   /////////////////////////////////////        
   /////////////////////////////////////        
        reg [7:0] rLeds = 8'b10000000;
        reg [7:0] rLeds = 8'b10000000;
        assign leds = rLeds;
        assign leds = rLeds;
        reg [1:0] cntleds = 2'b00;
        reg [1:0] cntleds = 2'b00;
        always @(posedge int_n) begin
        always @(posedge int_n) begin
                cntleds <= cntleds + 1;
                cntleds <= cntleds + 1;
                if (cntleds == 2'b11) begin
                if (cntleds == 2'b11) begin
                        rLeds <= { rLeds[0], rLeds[7:1] };
                        rLeds <= { rLeds[0], rLeds[7:1] };
                end
                end
        end
        end
 
 
endmodule
endmodule
 
 

powered by: WebSVN 2.1.0

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