OpenCores
URL https://opencores.org/ocsvn/6809_6309_compatible_core/6809_6309_compatible_core/trunk

Subversion Repositories 6809_6309_compatible_core

[/] [6809_6309_compatible_core/] [trunk/] [syn/] [lattice/] [CC3_top.v] - Diff between revs 7 and 10

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 7 Rev 10
Line 10... Line 10...
module CC3_top(
module CC3_top(
        input wire clk40_i,
        input wire clk40_i,
        /* CPU Bus */
        /* CPU Bus */
        output wire cpuclk_o,
        output wire cpuclk_o,
        output wire reset_o,
        output wire reset_o,
        output wire [15:0] addr_o,
        output wire [18:0] addr_o,
        output wire oen_o,
        output wire oen_o,
        output wire wen_o,
        output wire wen_o,
        output wire cen_o,
        output wire cen_o,
        output wire [7:0] data_io,
        inout wire [15:0] data_io,
        output wire [5:0] state_o,
        output wire [5:0] state_o,
        /* Debug */
        /* Debug */
        output wire [7:0] leds_o,
        output wire [7:0] leds_o,
        /* VGA output */
        /* VGA output */
        output wire hsync_o,
        output wire hsync_o,
        output wire vsync_o,
        output wire vsync_o,
        output wire red_o,
        output wire red_o,
        output wire green_o,
        output wire green_o,
        output wire blue_o
        output wire blue_o,
 
        /* logic analyzer probe */
 
        output wire [5:0] laddr_o,
 
        output wire loen_o,
 
        output wire lwen_o,
 
        output wire lcen_o,
 
        output wire [7:0] ldata_io
 
 
        );
        );
 
 
reg cpu_clk, clk_div2;
reg cpu_clk, clk_div2;
reg [3:0] reset_cnt;
reg [3:0] reset_cnt;
Line 36... Line 42...
/* CPU IO */
/* CPU IO */
wire [15:0] cpu0_addr_o, cpu1_addr_o;
wire [15:0] cpu0_addr_o, cpu1_addr_o;
wire [7:0] cpu0_data_in, cpu0_data_out, cpu1_data_in, cpu1_data_out;
wire [7:0] cpu0_data_in, cpu0_data_out, cpu1_data_in, cpu1_data_out;
wire cpu0_we, cpu0_oe, cpu1_we, cpu1_oe, cpu_reset;
wire cpu0_we, cpu0_oe, cpu1_we, cpu1_oe, cpu_reset;
wire [5:0] cpu0_state;
wire [5:0] cpu0_state;
 
/* Memory */
 
wire bios_en, video_en, extram_en;
 
wire [7:0] data_from_bios, data_from_video;
 
 
 
assign bios_en = cpu0_addr_o[15:12] == 4'hf;
 
assign video_en = cpu0_addr_o[15:12] == 4'he;
 
assign extram_en = !(bios_en | video_en);
 
 
 
assign cpu0_data_in = bios_en ? data_from_bios:
 
                     video_en ? data_from_video:data_io[7:0];
 
 
 
wire debug_data;
 
 
/* Module io */
/* Module io */
 
 
assign addr_o = cpu0_addr_o;
assign addr_o = { 3'b000, cpu0_addr_o };
assign data_io = cpu0_we ? cpu0_data_out:cpu0_data_in;
assign data_io = { 8'hzz, cpu0_we ? cpu0_data_out:8'hzz };
/*
 
assign hsync_o = 0;
 
assign vsync_o = 0;
 
assign red_o = 0;
 
assign green_o = 0;
 
assign blue_o = 0;
 
*/
 
assign leds_o = leds_r;
assign leds_o = leds_r;
 
 
assign oen_o = !cpu0_oe;
assign oen_o = !cpu0_oe;
assign wen_o = cpu0_we & (cpu0_addr_o[15:12] == 4'h0);
assign wen_o = !cpu0_we;
assign cen_o = !(cpu0_oe | cpu0_we);
assign cen_o = !extram_en;// !(extram_en & (cpu0_oe | cpu0_we));
assign cpuclk_o = cpu_clk;
assign cpuclk_o = cpu_clk;
assign reset_o = cpu_reset;
assign reset_o = cpu_reset;
assign state_o = cpu0_state;
assign state_o = /*{ bios_en, video_en, extram_en };*/cpu0_state;
 
/* logic analyzer probe */
 
assign laddr_o = cpu0_addr_o[5:0]; //debug_data[15:9];
 
assign ldata_io = data_io[7:0];//cpu0_we ? cpu0_data_out:cpu0_data_in;//debug_data[7:0];
 
assign loen_o = !cpu0_oe;
 
assign lwen_o = !cpu0_we;
 
assign lcen_o = ! (extram_en & (cpu0_oe | cpu0_we));
 
 
 
`ifdef SERIAL_DEBUG
 
reg [7:0] div;
 
 
always @(posedge clk40_i)
always @(posedge clk40_i)
        cpu_clk <= !cpu_clk;
        begin
 
                if (!cpu_reset)
 
                        begin
 
                                if (div == 65)
 
                                        div <= 0;
 
                                else
 
                                        div <= div + 1;
 
                        end
 
        end
 
 
 
always @(posedge clk40_i)
 
        if (div < 8'h2)
 
                cpu_clk <= 1'b1;
 
        else
 
                cpu_clk <= 1'b0;
 
`else
 
 
 
reg div;
 
 
 
always @(posedge clk40_i)
 
        div <= ~div;
 
 
 
always @(posedge div)
 
        cpu_clk <= ~cpu_clk;
 
 
 
`endif
assign cpu_reset = reset_cnt != 4'd14;
assign cpu_reset = reset_cnt != 4'd14;
 
 
always @(posedge cpu_clk)
always @(posedge clk40_i)
        begin
        begin
                if (reset_cnt != 4'd14)
                if (reset_cnt != 4'd14)
                        reset_cnt <= reset_cnt + 4'h1;
                        reset_cnt <= reset_cnt + 4'h1;
                if (cpu0_we)
                if (cpu0_we)
                        leds_r <= cpu0_data_out;
                        leds_r <= cpu0_data_out[7:0];
        end
        end
 
 
 
 
MC6809_cpu cpu0(
MC6809_cpu cpu0(
        .cpu_clk(cpu_clk),
        .cpu_clk(cpu_clk),
Line 81... Line 127...
        .cpu_state_o(cpu0_state),
        .cpu_state_o(cpu0_state),
        .cpu_we_o(cpu0_we),
        .cpu_we_o(cpu0_we),
        .cpu_oe_o(cpu0_oe),
        .cpu_oe_o(cpu0_oe),
        .cpu_addr_o(cpu0_addr_o),
        .cpu_addr_o(cpu0_addr_o),
        .cpu_data_i(cpu0_data_in),
        .cpu_data_i(cpu0_data_in),
        .cpu_data_o(cpu0_data_out)
        .cpu_data_o(cpu0_data_out),
 
        .debug_clk(clk40_i),
 
        .debug_data_o(debug_data)
        );
        );
 
 
/* Memory */
/* Memory */
 
 
wire bios_en, video_en;
 
wire [7:0] data_from_bios, data_from_video;
 
 
 
assign bios_en = cpu0_addr_o[15:12] == 4'hf;
 
assign video_en = cpu0_addr_o[15:12] == 4'h0;
 
 
 
assign cpu0_data_in = bios_en ? data_from_bios:
 
                     video_en ? data_from_video:8'hzz;
 
 
 
bios2k bios(
bios2k bios(
        .DataInA(cpu0_data_out[7:0]),
        .DataInA(cpu0_data_out[7:0]),
        .DataInB(cpu1_data_out[7:0]),
        .DataInB(cpu1_data_out[7:0]),
        .AddressA(cpu0_addr_o[10:0]),
        .AddressA(cpu0_addr_o[10:0]),

powered by: WebSVN 2.1.0

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