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

Subversion Repositories System09

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /System09/branches/mkfiles_rev1/rtl/System09_BurchED_B3
    from Rev 26 to Rev 66
    Reverse comparison

Rev 26 → Rev 66

/System09_BurchED_B3.ucf
0,0 → 1,321
#### UCF file created by Project Navigator
#
# PIN DEFINITION FOR BURCHED SPARTAN2 B3
# XC2S200.
#
# B3 Connector J3
# B5-X300 Connector C
#
#NET "b5_clk" LOC = "p185"; #pin 2 (Global clock input)
NET "bus_addr<0>" LOC = "p181"; #pin 3
NET "bus_addr<1>" LOC = "p187"; #pin 4
NET "bus_addr<2>" LOC = "p188"; #pin 5
NET "bus_addr<3>" LOC = "p189"; #pin 6
NET "bus_addr<4>" LOC = "p191"; #pin 7
NET "bus_addr<5>" LOC = "p192"; #pin 8
NET "bus_addr<6>" LOC = "p193"; #pin 9
NET "bus_addr<7>" LOC = "p194"; #pin 10
NET "bus_addr<8>" LOC = "p195"; #pin 11
NET "bus_addr<9>" LOC = "p199"; #pin 12
NET "bus_addr<10>" LOC = "p200"; #pin 13
NET "bus_addr<11>" LOC = "p201"; #pin 14
NET "bus_addr<12>" LOC = "p202"; #pin 15
NET "bus_addr<13>" LOC = "p203"; #pin 16
NET "bus_addr<14>" LOC = "p204"; #pin 17
NET "bus_addr<15>" LOC = "p205"; #pin 18
NET "bus_csn" LOC = "p206"; #pin 19
#
# B3 Connector J4
# B5-X300 Connector D
#
#NET "GCK2" LOC = "p182"; #pin 2 (Global clock input)
NET "bus_clk" LOC = "p160"; #pin 3
NET "bus_reset" LOC = "p161"; #pin 4
#NET "bus_hold" LOC = "p162"; #pin 5
#NET "bus_irq" LOC = "p163"; #pin 6
NET "bus_addr<16>" LOC = "p164"; #pin 7
NET "bus_addr<17>" LOC = "p165"; #pin 8
NET "bus_addr<18>" LOC = "p166"; #pin 9
NET "bus_addr<19>" LOC = "p167"; #pin 10
NET "bus_data<0>" LOC = "p168"; #pin 11
NET "bus_data<1>" LOC = "p172"; #pin 12
NET "bus_data<2>" LOC = "p173"; #pin 13
NET "bus_data<3>" LOC = "p174"; #pin 14
NET "bus_data<4>" LOC = "p175"; #pin 15
NET "bus_data<5>" LOC = "p176"; #pin 16
NET "bus_data<6>" LOC = "p178"; #pin 17
NET "bus_data<7>" LOC = "p179"; #pin 18
NET "bus_rw" LOC = "p180"; #pin 19
#
# Connector J3
#
# For B5-Compact-Flash:
#
#NET "GCK3" LOC = "P185"; #J2-2 (Global Clock input)
#NET "IO" LOC = "P181"; #J2-3
#NET "IO" LOC = "P187"; #J2-4
#NET "IO" LOC = "P188"; #J2-5
#NET "cf_a<2>" LOC = "P189"; #J2-6
#NET "cf_a<1>" LOC = "P191"; #J2-7
#NET "cf_a<0>" LOC = "P192"; #J2-8
#NET "cf_d<0>" LOC = "P193"; #J2-9
#NET "cf_d<1>" LOC = "P194"; #J2-10
#NET "cf_d<2>" LOC = "P195"; #J2-11
#NET "cf_cs16_n" LOC = "P199"; #J2-12
#NET "cf_d<10>" LOC = "P200"; #J2-13
#NET "cf_d<9>" LOC = "P201"; #J2-14
#NET "cf_d<8>" LOC = "P202"; #J2-15
#NET "cf_pdiag" LOC = "P203"; #J2-16
#NET "cf_dase" LOC = "P204"; #J2-17
#NET "cf_iordy" LOC = "P205"; #J2-18
#NET "cf_rst_n" LOC = "P206"; #J2-19
#
# Connector J4
#
# For B5-Compact-Flash:
#
#NET "GCK2" LOC = "P182"; #J1-2 (Global Clock Input)
#NET "IO" LOC = "P160"; #J1-3
#NET "cf_intrq" LOC = "P161"; #J1-4
#NET "cf_wr_n" LOC = "P162"; #J1-5
#NET "cf_rd_n" LOC = "P163"; #J1-6
#NET "cf_cs1_n" LOC = "P164"; #J1-7
#NET "cf_d<15>" LOC = "P165"; #J1-8
#NET "cf_d<14>" LOC = "P166"; #J1-9
#NET "cf_d<13>" LOC = "P167"; #J1-10
#NET "cf_d<12>" LOC = "P168"; #J1-11
#NET "cf_d<11>" LOC = "P172"; #J1-12
#NET "cf_present" LOC = "P173"; #J1-13
#NET "cf_d<3>" LOC = "P174"; #J1-14
#NET "cf_d<4>" LOC = "P175"; #J1-15
#NET "cf_d<5>" LOC = "P176"; #J1-16
#NET "cf_d<6>" LOC = "P178"; #J1-17
#NET "cf_d<7>" LOC = "P179"; #J1-18
#NET "cf_cs0_n" LOC = "P180"; #J1-19
#
# Connector J6
#
# For modified B3-SRAM
# Note: B3-SRAM must be fitted to J6/J9
#
NET "ram_data<0>" LOC = "p133"; #J2-2 (I/O - not a global clock input)
NET "ram_data<1>" LOC = "p134"; #J2-3
NET "ram_data<2>" LOC = "p135"; #J2-4
NET "ram_data<3>" LOC = "p136"; #J2-5
NET "ram_data<4>" LOC = "p138"; #J2-6
NET "ram_data<5>" LOC = "p139"; #J2-7
NET "ram_data<6>" LOC = "p140"; #J2-8
NET "ram_data<7>" LOC = "p141"; #J2-9
NET "ram_data<8>" LOC = "p142"; #J2-10
NET "ram_data<9>" LOC = "p146"; #J2-11
NET "ram_data<10>" LOC = "p147"; #J2-12
NET "ram_data<11>" LOC = "p148"; #J2-13
NET "ram_data<12>" LOC = "p149"; #J2-14
NET "ram_data<13>" LOC = "p150"; #J2-15
NET "ram_data<14>" LOC = "p151"; #J2-16
NET "ram_data<15>" LOC = "p152"; #J2-17
NET "ram_wrun" LOC = "p153"; #J2-18
NET "ram_wrln" LOC = "p154"; #J2-19
#
# Connector J9
#
# For modified B3-SRAM
# Note: B3-SRAM must be fitted to J6/J9
#
NET "ram_addr<0>" LOC = "p108"; #J1-2 (I/O - not a global clock input)
NET "ram_addr<1>" LOC = "p109"; #J1-3
NET "ram_addr<2>" LOC = "p110"; #J1-4
NET "ram_addr<3>" LOC = "p111"; #J1-5
NET "ram_addr<4>" LOC = "p112"; #J1-6
NET "ram_addr<5>" LOC = "p113"; #J1-7
NET "ram_addr<6>" LOC = "p114"; #J1-8
NET "ram_addr<7>" LOC = "p115"; #J1-9
NET "ram_csn" LOC = "p119"; #J1-10
NET "ram_addr<8>" LOC = "p120"; #J1-11
NET "ram_addr<9>" LOC = "p121"; #J1-12
NET "ram_addr<10>" LOC = "p122"; #J1-13
NET "ram_addr<11>" LOC = "p123"; #J1-14
NET "ram_addr<12>" LOC = "p125"; #J1-15
NET "ram_addr<13>" LOC = "p126"; #J1-16
NET "ram_addr<14>" LOC = "p127"; #J1-17
NET "ram_addr<15>" LOC = "p129"; #J1-18
NET "ram_addr<16>" LOC = "p132"; #J1-19
#
# Connector J10
#
#
NET "SysClk" LOC = "p77"; #pin 2 (GCK1 - global clock input)
NET "led" LOC = "p49"; #pin 3 (LED output)
#NET "uart_csn" LOC = "p57"; #pin 4
#NET "test_rw" LOC = "p58"; #pin 5
#NET "test_d0" LOC = "p59"; #pin 6
#NET "test_d1" LOC = "p60"; #pin 7
NET "reset_n" LOC = "p61"; #pin 8 (Test Input button)
#NET "test_cc<0>" LOC = "p67"; #pin 11
#NET "test_cc<1>" LOC = "p68"; #pin 12
#NET "test_cc<2>" LOC = "p69"; #pin 13
#NET "test_cc<3>" LOC = "p70"; #pin 14
#NET "test_cc<4>" LOC = "p71"; #pin 15
#NET "test_cc<5>" LOC = "p73"; #pin 16
#NET "test_cc<6>" LOC = "p74"; #pin 17
#NET "test_cc<7>" LOC = "p75"; #pin 18
#NET "IO" LOC = "p81"; #pin 19
#
# Connector J11
#
#NET "GCK0" LOC = "p80"; #pin 2 (Global Clock input)
NET "porta<0>" LOC = "p82"; #pin 3
NET "porta<1>" LOC = "p83"; #pin 4
NET "porta<2>" LOC = "p84"; #pin 5
NET "porta<3>" LOC = "p86"; #pin 6
NET "porta<4>" LOC = "p87"; #pin 7
NET "porta<5>" LOC = "p88"; #pin 8
NET "porta<6>" LOC = "p89"; #pin 9
NET "porta<7>" LOC = "p90"; #pin 10
NET "portb<0>" LOC = "p94"; #pin 11
NET "portb<1>" LOC = "p95"; #pin 12
NET "portb<2>" LOC = "p96"; #pin 13
NET "portb<3>" LOC = "p97"; #pin 14
NET "portb<4>" LOC = "p98"; #pin 15
NET "portb<5>" LOC = "p99"; #pin 16
NET "portb<6>" LOC = "p100"; #pin 17
NET "portb<7>" LOC = "p101"; #pin 18
NET "timer_out" LOC = "p102"; #pin 19
#
# Connector J8
#
# B3-FPGA-CPU-IO Module
#
#NET "aux_clock" LOC = "p24"; #J1-2 (Note this is an I/O pad ... not a clock input)
#NET "buzzer" LOC = "p27"; #J1-3
#NET "mouse_clock" LOC = "p29"; #J1-4
#NET "mouse_data" LOC = "p30"; #J1-5
NET "cts_n" LOC = "p31"; #J1-6
NET "rts_n" LOC = "p33"; #J1-7
NET "txbit" LOC = "p34"; #J1-8
NET "rxbit" LOC = "p35"; #J1-9
NET "kb_clock" LOC = "p36"; #J1-10
NET "kb_data" LOC = "p37"; #J1-11
NET "v_drive" LOC = "p41"; #J1-12
NET "h_drive" LOC = "p42"; #J1-13
NET "blue_lo" LOC = "p43"; #J1-14
NET "blue_hi" LOC = "p44"; #J1-15
NET "green_lo" LOC = "p45"; #J1-16
NET "green_hi" LOC = "p46"; #J1-17
NET "red_lo" LOC = "p47"; #J1-18
NET "red_hi" LOC = "p48"; #J1-19
#
# Connector J5
#
# Printer port
#
#NET "strobe_n" LOC = "p3"; #J5-1
#NET "autofd_n" LOC = "p4"; #J5-2
#NET "pd<0>" LOC = "p5"; #J5-3
#NET "fault_n" LOC = "p6"; #J5-4
#NET "pd<1>" LOC = "p7"; #J5-5
#NET "init_n" LOC = "p8"; #J5-6
#NET "pd<2>" LOC = "p9"; #J5-7
#NET "selin" LOC = "p10"; #J5-8
#NET "pd<3>" LOC = "p14"; #J5-9
#NET "pd<4>" LOC = "p15"; #J5-11
#NET "pd<5>" LOC = "p16"; #J5-13
#NET "pd<6>" LOC = "p17"; #J5-15
#NET "pd<7>" LOC = "p18"; #J5-17
#NET "ack" LOC = "p20"; #J5-19
#NET "busy" LOC = "p21"; #J5-21
#NET "pe" LOC = "p22"; #J5-23
#NET "sel" LOC = "p23"; #J5-25
#
# Timing Groups
#
INST "ram_addr<0>" TNM = "ram_addr";
INST "ram_addr<1>" TNM = "ram_addr";
INST "ram_addr<2>" TNM = "ram_addr";
INST "ram_addr<3>" TNM = "ram_addr";
INST "ram_addr<4>" TNM = "ram_addr";
INST "ram_addr<5>" TNM = "ram_addr";
INST "ram_addr<6>" TNM = "ram_addr";
INST "ram_addr<7>" TNM = "ram_addr";
INST "ram_addr<8>" TNM = "ram_addr";
INST "ram_addr<9>" TNM = "ram_addr";
INST "ram_addr<10>" TNM = "ram_addr";
INST "ram_addr<11>" TNM = "ram_addr";
INST "ram_addr<12>" TNM = "ram_addr";
INST "ram_addr<13>" TNM = "ram_addr";
INST "ram_addr<14>" TNM = "ram_addr";
INST "ram_addr<15>" TNM = "ram_addr";
INST "ram_addr<16>" TNM = "ram_addr";
#
INST "ram_data<0>" TNM = "ram_data";
INST "ram_data<1>" TNM = "ram_data";
INST "ram_data<2>" TNM = "ram_data";
INST "ram_data<3>" TNM = "ram_data";
INST "ram_data<4>" TNM = "ram_data";
INST "ram_data<5>" TNM = "ram_data";
INST "ram_data<6>" TNM = "ram_data";
INST "ram_data<7>" TNM = "ram_data";
INST "ram_data<8>" TNM = "ram_data";
INST "ram_data<9>" TNM = "ram_data";
INST "ram_data<10>" TNM = "ram_data";
INST "ram_data<11>" TNM = "ram_data";
INST "ram_data<12>" TNM = "ram_data";
INST "ram_data<13>" TNM = "ram_data";
INST "ram_data<14>" TNM = "ram_data";
INST "ram_data<15>" TNM = "ram_data";
#
INST "ram_wrln" TNM = "ram_wr";
INST "ram_wrun" TNM = "ram_wr";
#INST "ram_csn" TNM = "ram_cs";
#
#
# Timing Constraints
#
NET "SysClk" TNM_NET = "SysClk";
TIMESPEC "TS_SysClk" = PERIOD "SysClk" 20 ns HIGH 50 %;
#TIMEGRP "ram_cs" OFFSET = OUT 40 ns AFTER "SysClk";
TIMEGRP "ram_wr" OFFSET = OUT 40 ns AFTER "SysClk";
TIMEGRP "ram_addr" OFFSET = OUT 40 ns AFTER "SysClk";
TIMEGRP "ram_data" OFFSET = OUT 40 ns AFTER "SysClk";
TIMEGRP "ram_data" OFFSET = IN 15 ns BEFORE "SysClk";
#
# Fast I/O Pins
#
NET "ram_addr<0>" FAST;
NET "ram_addr<1>" FAST;
NET "ram_addr<2>" FAST;
NET "ram_addr<3>" FAST;
NET "ram_addr<4>" FAST;
NET "ram_addr<5>" FAST;
NET "ram_addr<6>" FAST;
NET "ram_addr<7>" FAST;
NET "ram_addr<8>" FAST;
NET "ram_addr<9>" FAST;
NET "ram_addr<10>" FAST;
NET "ram_addr<11>" FAST;
NET "ram_addr<12>" FAST;
NET "ram_addr<13>" FAST;
NET "ram_addr<14>" FAST;
NET "ram_addr<15>" FAST;
NET "ram_addr<16>" FAST;
#
NET "ram_wrln" FAST;
NET "ram_wrun" FAST;
NET "ram_csn" FAST;
#
NET "ram_data<0>" FAST;
NET "ram_data<1>" FAST;
NET "ram_data<2>" FAST;
NET "ram_data<3>" FAST;
NET "ram_data<4>" FAST;
NET "ram_data<5>" FAST;
NET "ram_data<6>" FAST;
NET "ram_data<7>" FAST;
NET "ram_data<8>" FAST;
NET "ram_data<9>" FAST;
NET "ram_data<10>" FAST;
NET "ram_data<11>" FAST;
NET "ram_data<12>" FAST;
NET "ram_data<13>" FAST;
NET "ram_data<14>" FAST;
NET "ram_data<15>" FAST;
/System09_BurchED_B3.ise Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
System09_BurchED_B3.ise Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: System09_BurchED_B3.vhd =================================================================== --- System09_BurchED_B3.vhd (nonexistent) +++ System09_BurchED_B3.vhd (revision 66) @@ -0,0 +1,1191 @@ +--===========================================================================---- +-- +-- S Y N T H E Z I A B L E System09 - SOC. +-- +-- www.OpenCores.Org - September 2003 +-- This core adheres to the GNU public license +-- +-- File name : System09.vhd +-- +-- Purpose : Top level file for 6809 compatible system on a chip +-- Designed with Xilinx XC2S200 Spartan 2+ FPGA. +-- Implemented With BurchED B3 FPGA board, +-- B3-SRAM module and B3-FPGA-CPU-IO module +-- +-- Dependencies : ieee.Std_Logic_1164 +-- ieee.std_logic_unsigned +-- ieee.std_logic_arith +-- ieee.numeric_std +-- +-- Uses : +-- cpu09 (cpu09.vhd) CPU core +-- mon_rom (sys09bug_rom2k_b4.vhd) Monitor ROM +-- dat_ram (datram.vhd) Dynamic Address Translation +-- acia_6850 (ACIA_6850.vhd) ACIA / MiniUART +-- (ACIA_RX.vhd) +-- (ACIA_TX.vhd) +-- ACIA_Clock (ACIA_Clock.vhd) ACIA Baud Clock Divider +-- keyboard (keyboard.vhd) PS/2 Keyboard Interface +-- vdu8 (vdu8.vhd) 80 x 25 Video Display +-- timer (timer.vhd) Timer module +-- trap (trap.vhd) Bus Trap interrupt +-- ioport (ioport.vhd) Parallel I/O port. +-- +-- Author : John E. Kent +-- dilbert57@opencores.org +-- Memory Map : +-- +-- $E000 - ACIA (SWTPc) +-- $E010 - Reserved for FD1771 FDC (SWTPc) +-- $E020 - Keyboard +-- $E030 - VDU +-- $E040 - Compact Flash +-- $E050 - Timer +-- $E060 - Bus trap +-- $E070 - Parallel I/O +-- $E080 - Reserved for 6821 PIA (?) (SWTPc) +-- $E090 - Reserved for 6840 PTM (?) (SWTPc) +-- $E0A0 +-- $E0B0 +-- $E0C0 - Trace logic +-- +--===========================================================================---- +-- +-- Revision History: +--===========================================================================-- +-- Version 0.1 - 20 March 2003 +-- Version 0.2 - 30 March 2003 +-- Version 0.3 - 29 April 2003 +-- Version 0.4 - 29 June 2003 +-- +-- Version 0.5 - 19 July 2003 +-- prints out "Hello World" +-- +-- Version 0.6 - 5 September 2003 +-- Runs SBUG +-- +-- Version 1.0- 6 Sep 2003 - John Kent +-- Inverted SysClk +-- Initial release to Open Cores +-- +-- Version 1.1 - 17 Jan 2004 - John Kent +-- Updated miniUart. +-- +-- Version 1.2 - 25 Jan 2004 - John Kent +-- removed signals "test_alu" and "test_cc" +-- Trap hardware re-instated. +-- +-- Version 1.3 - 11 Feb 2004 - John Kent +-- Designed forked off to produce System09_VDU +-- Added VDU component +-- VDU runs at 25MHz and divides the clock by 2 for the CPU +-- UART Runs at 57.6 Kbps +-- +-- Version 1.4 - 21 Nov 2004 - John Kent +-- Changes to make compatible with Spartan3 starter kit version +-- Designed to run with a 50MHz clock input. +-- the VDU divides 50 MHz to generate a +-- 25 MHz VDU Pixel Clock and a 12.5 MHz CPU clock +-- Changed Monitor ROM signals to make it look like +-- a standard 2K memory block +-- Re-assigned I/O port assignments so it is possible to run KBUG9 +-- $E000 - ACIA +-- $E010 - Keyboard +-- $E020 - VDU +-- $E030 - Compact Flash +-- $E040 - Timer +-- $E050 - Bus trap +-- $E060 - Parallel I/O +-- +-- Version 1.5 - 3rd February 2007 - John Kent +-- Changed VDU8 to use external clock divider +-- renamed miniUART to ACIA_6850 +-- Memory decoding of ROM & IO now uses DAT +-- +-- Version 1.6 - 7th Februaury 2007 - John Kent +-- Made ACIA Clock generator an external component +-- Added Generics to VDU and Keyboard +-- Changed decoding +-- +-- Version 1.7 - 20th May 2007 - John Kent +-- Added 4 wait states to CF access +-- Removed DAT memory map control of ROM & IO +-- to allow for full use of RAM as a RAM disk. +-- Mapped in all 16 bits of the CF data bus. +-- +-- Version 1.8 - 1st July 2007 - John Kent +-- Copied B5-X300 top level to B3 version. +-- +--=========================================================================== +-- +library ieee; + use ieee.std_logic_1164.all; + use IEEE.STD_LOGIC_ARITH.ALL; + use IEEE.STD_LOGIC_UNSIGNED.ALL; + use ieee.numeric_std.all; +library unisim; + use unisim.vcomponents.all; + +entity System09 is + port( + SysClk : in Std_Logic; -- System Clock input + Reset_n : in Std_logic; -- Master Reset input (active low) + LED : out std_logic; -- Diagnostic LED Flasher + + -- Memory Interface signals + ram_csn : out Std_Logic; + ram_wrln : out Std_Logic; + ram_wrun : out Std_Logic; + ram_addr : out Std_Logic_Vector(16 downto 0); + ram_data : inout Std_Logic_Vector(15 downto 0); + + -- Stuff on the peripheral board + + -- PS/2 Keyboard + kb_clock : inout Std_logic; + kb_data : inout Std_Logic; + + -- PS/2 Mouse interface +-- mouse_clock : in Std_Logic; +-- mouse_data : in Std_Logic; + + -- Uart Interface + rxbit : in Std_Logic; + txbit : out Std_Logic; + rts_n : out Std_Logic; + cts_n : in Std_Logic; + + -- CRTC output signals + v_drive : out Std_Logic; + h_drive : out Std_Logic; + blue_lo : out std_logic; + blue_hi : out std_logic; + green_lo : out std_logic; + green_hi : out std_logic; + red_lo : out std_logic; + red_hi : out std_logic; +-- buzzer : out std_logic; + +-- Compact Flash +-- cf_rst_n : out std_logic; +-- cf_cs0_n : out std_logic; +-- cf_cs1_n : out std_logic; +-- cf_rd_n : out std_logic; +-- cf_wr_n : out std_logic; +-- cf_cs16_n : out std_logic; +-- cf_a : out std_logic_vector(2 downto 0); +-- cf_d : inout std_logic_vector(15 downto 0); +-- cf_d : inout std_logic_vector(7 downto 0); + +-- Parallel I/O port + porta : inout std_logic_vector(7 downto 0); + portb : inout std_logic_vector(7 downto 0); + +-- CPU bus + bus_clk : out std_logic; + bus_reset : out std_logic; + bus_rw : out std_logic; + bus_csn : out std_logic; + bus_addr : out std_logic_vector(19 downto 0); + bus_data : inout std_logic_vector(7 downto 0); + +-- timer + timer_out : out std_logic + ); +end System09; + +------------------------------------------------------------------------------- +-- Architecture for System09 +------------------------------------------------------------------------------- +architecture rtl of System09 is + ----------------------------------------------------------------------------- + -- constants + ----------------------------------------------------------------------------- + constant SYS_Clock_Frequency : integer := 50000000; -- FPGA System Clock + constant PIX_Clock_Frequency : integer := 25000000; -- VGA Pixel Clock + constant CPU_Clock_Frequency : integer := 12500000; -- CPU Clock + constant BAUD_Rate : integer := 57600; -- Baud Rate + constant ACIA_Clock_Frequency : integer := BAUD_Rate * 16; + + type hold_state_type is ( hold_release_state, hold_request_state ); + + ----------------------------------------------------------------------------- + -- Signals + ----------------------------------------------------------------------------- + -- Monitor ROM + signal rom_data_out : Std_Logic_Vector(7 downto 0); + signal rom_cs : std_logic; + + -- UART Interface signals + signal uart_data_out : Std_Logic_Vector(7 downto 0); + signal uart_cs : Std_Logic; + signal uart_irq : Std_Logic; + signal uart_clk : Std_Logic; + signal DCD_n : Std_Logic; + + -- timer + signal timer_data_out : std_logic_vector(7 downto 0); + signal timer_cs : std_logic; + signal timer_irq : std_logic; + + -- trap + signal trap_cs : std_logic; + signal trap_data_out : std_logic_vector(7 downto 0); + signal trap_irq : std_logic; + + + -- trace +-- signal trace_cs : std_logic; +-- signal trace_data_out : std_logic_vector(7 downto 0); +-- signal trace_irq : std_logic; +-- signal bank_cs : std_logic; +-- signal bank_data_out : std_logic_vector(7 downto 0); + + -- Parallel I/O port + signal ioport_data_out : std_logic_vector(7 downto 0); + signal ioport_cs : std_logic; + + -- compact flash port +-- signal cf_data_out : std_logic_vector(7 downto 0); +-- signal cf_cs : std_logic; +-- signal cf_rd : std_logic; +-- signal cf_wr : std_logic; +-- signal cf_hold : std_logic; +-- signal cf_release : std_logic; +-- signal cf_count : std_logic_vector(3 downto 0); +-- signal cf_hold_state : hold_state_type; + + -- keyboard port + signal keyboard_data_out : std_logic_vector(7 downto 0); + signal keyboard_cs : std_logic; + signal keyboard_irq : std_logic; + + -- RAM + signal ram_cs : std_logic; -- memory chip select + signal ram_wrl : std_logic; -- memory write lower + signal ram_wru : std_logic; -- memory write upper + signal ram_data_out : std_logic_vector(7 downto 0); + + -- CPU Interface signals + signal cpu_reset : Std_Logic; + signal cpu_clk : Std_Logic; + signal cpu_rw : std_logic; + signal cpu_vma : std_logic; + signal cpu_halt : std_logic; + signal cpu_hold : std_logic; + signal cpu_firq : std_logic; + signal cpu_irq : std_logic; + signal cpu_nmi : std_logic; + signal cpu_addr : std_logic_vector(15 downto 0); + signal cpu_data_in : std_logic_vector(7 downto 0); + signal cpu_data_out : std_logic_vector(7 downto 0); + + -- Dynamic address translation + signal dat_cs : std_logic; + signal dat_addr : std_logic_vector(7 downto 0); + + -- Video Display Unit + signal pix_clk : std_logic; + signal vdu_cs : std_logic; + signal vdu_data_out : std_logic_vector(7 downto 0); + signal vga_red : std_logic; + signal vga_green : std_logic; + signal vga_blue : std_logic; + + -- external bus I/O + signal bus_cs : std_logic; + + -- Flashing Led test signals + signal countL : std_logic_vector(23 downto 0); + signal clock_div : std_logic_vector(1 downto 0); + +----------------------------------------------------------------- +-- +-- CPU09 CPU core +-- +----------------------------------------------------------------- + +component cpu09 + port ( + clk: in std_logic; + rst: in std_logic; + rw: out std_logic; -- Asynchronous memory interface + vma: out std_logic; + address: out std_logic_vector(15 downto 0); + data_in: in std_logic_vector(7 downto 0); + data_out: out std_logic_vector(7 downto 0); + halt: in std_logic; + hold: in std_logic; + irq: in std_logic; + nmi: in std_logic; + firq: in std_logic + ); +end component; + + +---------------------------------------- +-- +-- SBUG Block RAM Monitor ROM +-- +---------------------------------------- +component mon_rom + port ( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + addr : in std_logic_vector (10 downto 0); + wdata : in std_logic_vector (7 downto 0); + rdata : out std_logic_vector (7 downto 0) + ); +end component; + + +---------------------------------------- +-- +-- Dynamic Address Translation Registers +-- +---------------------------------------- +component dat_ram + port ( + clk: in std_logic; + rst: in std_logic; + cs: in std_logic; + rw: in std_logic; + addr_lo: in std_logic_vector(3 downto 0); + addr_hi: in std_logic_vector(3 downto 0); + data_in: in std_logic_vector(7 downto 0); + data_out: out std_logic_vector(7 downto 0) + ); +end component; + +----------------------------------------------------------------- +-- +-- 6850 ACIA/UART +-- +----------------------------------------------------------------- + +component ACIA_6850 + port ( + clk : in Std_Logic; -- System Clock + rst : in Std_Logic; -- Reset input (active high) + cs : in Std_Logic; -- miniUART Chip Select + rw : in Std_Logic; -- Read / Not Write + irq : out Std_Logic; -- Interrupt + Addr : in Std_Logic; -- Register Select + DataIn : in Std_Logic_Vector(7 downto 0); -- Data Bus In + DataOut : out Std_Logic_Vector(7 downto 0); -- Data Bus Out + RxC : in Std_Logic; -- Receive Baud Clock + TxC : in Std_Logic; -- Transmit Baud Clock + RxD : in Std_Logic; -- Receive Data + TxD : out Std_Logic; -- Transmit Data + DCD_n : in Std_Logic; -- Data Carrier Detect + CTS_n : in Std_Logic; -- Clear To Send + RTS_n : out Std_Logic ); -- Request To send +end component; + +----------------------------------------------------------------- +-- +-- ACIA Clock divider +-- +----------------------------------------------------------------- + +component ACIA_Clock + generic ( + SYS_Clock_Frequency : integer := SYS_Clock_Frequency; + ACIA_Clock_Frequency : integer := ACIA_Clock_Frequency + ); + port ( + clk : in Std_Logic; -- System Clock Input + ACIA_clk : out Std_logic -- ACIA Clock output + ); +end component; + +---------------------------------------- +-- +-- Timer module +-- +---------------------------------------- + +component timer + port ( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + addr : in std_logic; + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + irq : out std_logic; + timer_in : in std_logic; + timer_out : out std_logic + ); +end component; + +------------------------------------------------------------ +-- +-- Bus Trap logic +-- +------------------------------------------------------------ + +component trap + port ( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + vma : in std_logic; + addr : in std_logic_vector(15 downto 0); + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + irq : out std_logic + ); +end component; + +------------------------------------------------------------ +-- +-- Bus Trace logic +-- +------------------------------------------------------------ +--component trace is +-- port ( +-- clk : in std_logic; +-- rst : in std_logic; +-- rs : in std_logic; -- register select +-- bs : in std_logic; -- bank select +-- rw : in std_logic; +-- vma : in std_logic; +-- addr : in std_logic_vector(15 downto 0); +-- data_in : in std_logic_vector(7 downto 0); +-- reg_data_out : out std_logic_vector(7 downto 0); +-- buff_data_out : out std_logic_vector(7 downto 0); +-- cpu_data_in : in std_logic_vector(7 downto 0); +-- irq : out std_logic +-- ); +--end component; + +---------------------------------------- +-- +-- Dual 8 bit Parallel I/O module +-- +---------------------------------------- +component ioport + port ( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + addr : in std_logic_vector(1 downto 0); + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + porta_io : inout std_logic_vector(7 downto 0); + portb_io : inout std_logic_vector(7 downto 0) + ); +end component; + +---------------------------------------- +-- +-- PS/2 Keyboard +-- +---------------------------------------- + +component keyboard + generic( + KBD_Clock_Frequency : integer := CPU_Clock_Frequency + ); + port( + clk : in std_logic; + rst : in std_logic; + cs : in std_logic; + rw : in std_logic; + addr : in std_logic; + data_in : in std_logic_vector(7 downto 0); + data_out : out std_logic_vector(7 downto 0); + irq : out std_logic; + kbd_clk : inout std_logic; + kbd_data : inout std_logic + ); +end component; + +---------------------------------------- +-- +-- Video Display Unit. +-- +---------------------------------------- +component vdu8_mono + generic( + VDU_CLOCK_FREQUENCY : integer := CPU_Clock_Frequency; -- HZ + VGA_CLOCK_FREQUENCY : integer := PIX_Clock_Frequency; -- HZ + VGA_HOR_CHARS : integer := 80; -- CHARACTERS + VGA_VER_CHARS : integer := 25; -- CHARACTERS + VGA_PIXELS_PER_CHAR : integer := 8; -- PIXELS + VGA_LINES_PER_CHAR : integer := 16; -- LINES + VGA_HOR_BACK_PORCH : integer := 40; -- PIXELS + VGA_HOR_SYNC : integer := 96; -- PIXELS + VGA_HOR_FRONT_PORCH : integer := 24; -- PIXELS + VGA_VER_BACK_PORCH : integer := 13; -- LINES + VGA_VER_SYNC : integer := 1; -- LINES + VGA_VER_FRONT_PORCH : integer := 36 -- LINES + ); + port( + -- control register interface + vdu_clk : in std_logic; -- CPU Clock - 12.5MHz + vdu_rst : in std_logic; + vdu_cs : in std_logic; + vdu_rw : in std_logic; + vdu_addr : in std_logic_vector(2 downto 0); + vdu_data_in : in std_logic_vector(7 downto 0); + vdu_data_out : out std_logic_vector(7 downto 0); + + -- vga port connections + vga_clk : in std_logic; -- VGA Pixel Clock - 25 MHz + vga_red_o : out std_logic; + vga_green_o : out std_logic; + vga_blue_o : out std_logic; + vga_hsync_o : out std_logic; + vga_vsync_o : out std_logic + ); +end component; + + +component BUFG + port ( + i: in std_logic; + o: out std_logic + ); +end component; + +begin + ----------------------------------------------------------------------------- + -- Instantiation of internal components + ----------------------------------------------------------------------------- + +---------------------------------------- +-- +-- CPU09 CPU Core +-- +---------------------------------------- +my_cpu : cpu09 port map ( + clk => cpu_clk, + rst => cpu_reset, + rw => cpu_rw, + vma => cpu_vma, + address => cpu_addr(15 downto 0), + data_in => cpu_data_in, + data_out => cpu_data_out, + halt => cpu_halt, + hold => cpu_hold, + irq => cpu_irq, + nmi => cpu_nmi, + firq => cpu_firq + ); + +---------------------------------------- +-- +-- SBUG / KBUG / SYS09BUG Monitor ROM +-- +---------------------------------------- +my_rom : mon_rom port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => rom_cs, + rw => '1', + addr => cpu_addr(10 downto 0), + wdata => cpu_data_out, + rdata => rom_data_out + ); + +---------------------------------------- +-- +-- Dynamic Address Translation Registers +-- +---------------------------------------- +my_dat : dat_ram port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => dat_cs, + rw => cpu_rw, + addr_hi => cpu_addr(15 downto 12), + addr_lo => cpu_addr(3 downto 0), + data_in => cpu_data_out, + data_out => dat_addr(7 downto 0) + ); + +---------------------------------------- +-- +-- ACIA/UART Serial interface +-- +---------------------------------------- +my_ACIA : ACIA_6850 port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => uart_cs, + rw => cpu_rw, + irq => uart_irq, + Addr => cpu_addr(0), + Datain => cpu_data_out, + DataOut => uart_data_out, + RxC => uart_clk, + TxC => uart_clk, + RxD => rxbit, + TxD => txbit, + DCD_n => dcd_n, + CTS_n => cts_n, + RTS_n => rts_n + ); + +---------------------------------------- +-- +-- ACIA Clock +-- +---------------------------------------- +my_ACIA_Clock : ACIA_Clock + generic map( + SYS_Clock_Frequency => SYS_Clock_Frequency, + ACIA_Clock_Frequency => ACIA_Clock_Frequency + ) + port map( + clk => SysClk, + acia_clk => uart_clk + ); + +---------------------------------------- +-- +-- PS/2 Keyboard Interface +-- +---------------------------------------- +my_keyboard : keyboard + generic map ( + KBD_Clock_Frequency => CPU_Clock_frequency + ) + port map( + clk => cpu_clk, + rst => cpu_reset, + cs => keyboard_cs, + rw => cpu_rw, + addr => cpu_addr(0), + data_in => cpu_data_out(7 downto 0), + data_out => keyboard_data_out(7 downto 0), + irq => keyboard_irq, + kbd_clk => kb_clock, + kbd_data => kb_data + ); + +---------------------------------------- +-- +-- Video Display Unit instantiation +-- +---------------------------------------- +my_vdu : vdu8_mono + generic map( + VDU_CLOCK_FREQUENCY => CPU_Clock_Frequency, -- HZ + VGA_CLOCK_FREQUENCY => PIX_Clock_Frequency, -- HZ + VGA_HOR_CHARS => 80, -- CHARACTERS + VGA_VER_CHARS => 25, -- CHARACTERS + VGA_PIXELS_PER_CHAR => 8, -- PIXELS + VGA_LINES_PER_CHAR => 16, -- LINES + VGA_HOR_BACK_PORCH => 40, -- PIXELS + VGA_HOR_SYNC => 96, -- PIXELS + VGA_HOR_FRONT_PORCH => 24, -- PIXELS + VGA_VER_BACK_PORCH => 13, -- LINES + VGA_VER_SYNC => 1, -- LINES + VGA_VER_FRONT_PORCH => 36 -- LINES + ) + port map( + + -- Control Registers + vdu_clk => cpu_clk, -- 12.5 MHz System Clock in + vdu_rst => cpu_reset, + vdu_cs => vdu_cs, + vdu_rw => cpu_rw, + vdu_addr => cpu_addr(2 downto 0), + vdu_data_in => cpu_data_out, + vdu_data_out => vdu_data_out, + + -- vga port connections + vga_clk => pix_clk, -- 25 MHz VDU pixel clock + vga_red_o => vga_red, + vga_green_o => vga_green, + vga_blue_o => vga_blue, + vga_hsync_o => h_drive, + vga_vsync_o => v_drive + ); + +---------------------------------------- +-- +-- Timer Module +-- +---------------------------------------- +my_timer : timer port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => timer_cs, + rw => cpu_rw, + addr => cpu_addr(0), + data_in => cpu_data_out, + data_out => timer_data_out, + irq => timer_irq, + timer_in => CountL(5), + timer_out => timer_out + ); + +---------------------------------------- +-- +-- Bus Trap Interrupt logic +-- +---------------------------------------- +my_trap : trap port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => trap_cs, + rw => cpu_rw, + vma => cpu_vma, + addr => cpu_addr, + data_in => cpu_data_out, + data_out => trap_data_out, + irq => trap_irq + ); + +---------------------------------------- +-- +-- Bus Trace logic +-- +---------------------------------------- +--my_trace : trace port map ( +-- clk => SysClk, +-- rst => cpu_reset, +-- rs => trace_cs, +-- bs => bank_cs, +-- rw => cpu_rw, +-- vma => cpu_vma, +-- addr => cpu_addr, +-- data_in => cpu_data_out, +-- reg_data_out => trace_data_out, +-- buff_data_out => bank_data_out, +-- cpu_data_in => cpu_data_in, +-- irq => trace_irq +-- ); + + +---------------------------------------- +-- +-- Parallel I/O Port +-- +---------------------------------------- +my_ioport : ioport port map ( + clk => cpu_clk, + rst => cpu_reset, + cs => ioport_cs, + rw => cpu_rw, + addr => cpu_addr(1 downto 0), + data_in => cpu_data_out, + data_out => ioport_data_out, + porta_io => porta, + portb_io => portb + ); + +-- +-- 12.5 MHz CPU clock +-- +cpu_clk_buffer : BUFG port map( + i => clock_div(1), + o => cpu_clk + ); + +-- +-- 25 MHz VGA Pixel clock +-- +vga_clk_buffer : BUFG port map( + i => clock_div(0), + o => pix_clk + ); + +---------------------------------------------------------------------- +-- +-- Process to decode memory map +-- +---------------------------------------------------------------------- + +mem_decode: process( cpu_clk, Reset_n, dat_addr, + cpu_addr, cpu_rw, cpu_vma, + rom_data_out, + ram_data_out, +-- cf_data_out, + timer_data_out, + trap_data_out, + ioport_data_out, + uart_data_out, + keyboard_data_out, + vdu_data_out, +-- trace_data_out, + bus_data ) +variable decode_addr : std_logic_vector(4 downto 0); +begin + decode_addr := dat_addr(3 downto 0) & cpu_addr(11); +-- decode_addr := cpu_addr(15 downto 11); + + if cpu_addr( 15 downto 8 ) = "11111111" then + cpu_data_in <= rom_data_out; + rom_cs <= cpu_vma; -- read ROM + dat_cs <= cpu_vma; -- write DAT + ram_cs <= '0'; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + else + case decode_addr is + -- + -- SBUG/KBUG/SYS09BUG Monitor ROM $F800 - $FFFF + -- + when "11111" => -- $F800 - $FFFF + cpu_data_in <= rom_data_out; + rom_cs <= cpu_vma; -- read ROM + dat_cs <= '0'; + ram_cs <= '0'; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- IO Devices $E000 - $E7FF + -- + when "11100" => -- $E000 - $E7FF + rom_cs <= '0'; + dat_cs <= '0'; + ram_cs <= '0'; + case cpu_addr(7 downto 4) is + -- + -- UART / ACIA $E000 + -- + when "0000" => -- $E000 + cpu_data_in <= uart_data_out; + uart_cs <= cpu_vma; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- WD1771 FDC sites at $E010-$E01F + -- + + -- + -- Keyboard port $E020 - $E02F + -- + when "0010" => -- $E020 + cpu_data_in <= keyboard_data_out; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= cpu_vma; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- VDU port $E030 - $E03F + -- + when "0011" => -- $E030 + cpu_data_in <= vdu_data_out; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= cpu_vma; + bus_cs <= '0'; +-- trace_cs <= '0'; + + + -- + -- Compact Flash $E040 - $E04F + -- +-- when "0100" => -- $E040 +-- cpu_data_in <= cf_data_out; +-- uart_cs <= '0'; +-- cf_cs <= cpu_vma; +-- timer_cs <= '0'; +-- trap_cs <= '0'; +-- ioport_cs <= '0'; +-- keyboard_cs <= '0'; +-- vdu_cs <= '0'; +-- bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- Timer $E050 - $E05F + -- + when "0101" => -- $E050 + cpu_data_in <= timer_data_out; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= cpu_vma; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- Bus Trap Logic $E060 - $E06F + -- +-- when "0110" => -- $E060 +-- cpu_data_in <= trap_data_out; +-- uart_cs <= '0'; +-- cf_cs <= '0'; +-- timer_cs <= '0'; +-- trap_cs <= cpu_vma; +-- ioport_cs <= '0'; +-- keyboard_cs <= '0'; +-- vdu_cs <= '0'; +-- bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- I/O port $E070 - $E07F + -- + when "0111" => -- $E070 + cpu_data_in <= ioport_data_out; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= cpu_vma; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + + -- + -- Bus Trace Logic $E0C00 - $E0CF + -- +-- when "1100" => -- $E0C0 +-- cpu_data_in <= trace_data_out; +-- uart_cs <= '0'; +-- keyboard_cs <= '0'; +-- timer_cs <= '0'; +-- vdu_cs <= '0'; +-- ioport_cs <= '0'; +-- cf_cs <= '0'; +-- trap_cs <= '0'; +-- trace_cs <= cpu_vma; + + + when others => -- $E080 to $E7FF + cpu_data_in <= bus_data; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= cpu_vma; +-- trace_cs <= '0'; + end case; + -- + -- Everything else is RAM + -- + when others => + cpu_data_in <= ram_data_out; + rom_cs <= '0'; + dat_cs <= '0'; + ram_cs <= cpu_vma; + uart_cs <= '0'; +-- cf_cs <= '0'; + timer_cs <= '0'; + trap_cs <= '0'; + ioport_cs <= '0'; + keyboard_cs <= '0'; + vdu_cs <= '0'; + bus_cs <= '0'; +-- trace_cs <= '0'; + end case; + end if; +end process; + + +-- +-- B5-SRAM Control +-- Processes to read and write memory based on bus signals +-- +ram_process: process( cpu_clk, Reset_n, + cpu_addr, cpu_rw, cpu_vma, cpu_data_out, + dat_addr, + ram_cs, ram_wrl, ram_wru, ram_data_out ) +begin + ram_csn <= not( ram_cs and Reset_n ); + ram_wrl <= (not cpu_addr(0)) and (not cpu_rw) and cpu_clk; + ram_wrln <= not (ram_wrl); + ram_wru <= cpu_addr(0) and (not cpu_rw) and cpu_clk; + ram_wrun <= not (ram_wru); + ram_addr(16 downto 11) <= dat_addr(5 downto 0); + ram_addr(10 downto 0) <= cpu_addr(11 downto 1); + + if ram_wrl = '1' then + ram_data(7 downto 0) <= cpu_data_out; + else + ram_data(7 downto 0) <= "ZZZZZZZZ"; + end if; + + if ram_wru = '1' then + ram_data(15 downto 8) <= cpu_data_out; + else + ram_data(15 downto 8) <= "ZZZZZZZZ"; + end if; + + if cpu_addr(0) = '1' then + ram_data_out <= ram_data(15 downto 8); + else + ram_data_out <= ram_data(7 downto 0); + end if; +end process; + +-- +-- Compact Flash Control +-- +--compact_flash: process( Reset_n, +-- cpu_addr, cpu_rw, cpu_vma, cpu_data_out, +-- cf_cs, cf_rd, cf_wr, cf_d ) +--begin +-- cf_rst_n <= Reset_n; +-- cf_cs0_n <= not( cf_cs ) or cpu_addr(3); +-- cf_cs1_n <= not( cf_cs and cpu_addr(3)); +-- cf_cs16_n <= '1'; +-- cf_wr <= cf_cs and (not cpu_rw); +-- cf_rd <= cf_cs and cpu_rw; +-- cf_wr_n <= not cf_wr; +-- cf_rd_n <= not cf_rd; +-- cf_a <= cpu_addr(2 downto 0); +-- if cf_wr = '1' then +-- cf_d(7 downto 0) <= cpu_data_out; +-- else +-- cf_d(7 downto 0) <= "ZZZZZZZZ"; +-- end if; +-- cf_data_out <= cf_d(7 downto 0); +-- cf_d(15 downto 8) <= "ZZZZZZZZ"; +--end process; + +-- +-- Hold CF access for a few cycles +-- +--cf_hold_proc: process( cpu_clk, Reset_n ) +--begin +-- if Reset_n = '0' then +-- cf_release <= '0'; +-- cf_count <= "0000"; +-- cf_hold_state <= hold_release_state; +-- elsif cpu_clk'event and cpu_clk='0' then +-- case cf_hold_state is +-- when hold_release_state => +-- cf_release <= '0'; +-- if cf_cs = '1' then +-- cf_count <= "0011"; +-- cf_hold_state <= hold_request_state; +-- end if; +-- +-- when hold_request_state => +-- cf_count <= cf_count - "0001"; +-- if cf_count = "0000" then +-- cf_release <= '1'; +-- cf_hold_state <= hold_release_state; +-- end if; +-- when others => +-- null; +-- end case; +-- end if; +--end process; + +-- +-- Interrupts and other bus control signals +-- +interrupts : process( Reset_n, +-- cf_cs, cf_hold, cf_release, + uart_irq, + trap_irq, + timer_irq, keyboard_irq + ) +begin +-- cf_hold <= cf_cs and (not cf_release); + cpu_reset <= not Reset_n; -- CPU reset is active high + cpu_irq <= uart_irq or keyboard_irq; + cpu_nmi <= trap_irq; + cpu_firq <= timer_irq; + cpu_halt <= '0'; +-- cpu_hold <= cf_hold; + cpu_hold <= '0'; +end process; + +-- +-- CPU bus signals +-- +my_bus : process( cpu_clk, cpu_reset, cpu_rw, cpu_addr, cpu_data_out, bus_cs ) +begin + bus_clk <= cpu_clk; + bus_reset <= cpu_reset; + bus_rw <= cpu_rw; + bus_csn <= not bus_cs; + bus_addr <= dat_addr(7 downto 0) & cpu_addr(11 downto 0); + if( cpu_rw = '1' ) then + bus_data <= "ZZZZZZZZ"; + else + bus_data <= cpu_data_out; + end if; +end process; + + -- + -- flash led to indicate code is working + -- +my_LED_Flasher: process (cpu_clk, CountL ) +begin + if(cpu_clk'event and cpu_clk = '0') then + countL <= countL + 1; + end if; + LED <= countL(23); + dcd_n <= '0'; +end process; + +-- +-- Clock divider +-- +my_clock_divider: process( SysClk ) +begin + if SysClk'event and SysClk='0' then + clock_div <= clock_div + "01"; + end if; +end process; +-- +-- Assign VDU VGA colour output +-- only 8 colours are handled. +-- +my_vga_out: process( vga_red, vga_green, vga_blue ) +begin + red_lo <= vga_red; + red_hi <= vga_red; + green_lo <= vga_green; + green_hi <= vga_green; + blue_lo <= vga_blue; + blue_hi <= vga_blue; +end process; + +end rtl; --===================== End of architecture =======================--

powered by: WebSVN 2.1.0

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