URL
https://opencores.org/ocsvn/6502vhdl/6502vhdl/trunk
Subversion Repositories 6502vhdl
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 13 to Rev 14
- ↔ Reverse comparison
Rev 13 → Rev 14
/tags/rel/README
File deleted
/tags/rel/vga_lcd/bench/verilog/wb_model_defines.v
File deleted
/tags/rel/vga_lcd/bench/verilog/sync_check.v
File deleted
/tags/rel/vga_lcd/bench/verilog/wb_b3_check.v
File deleted
/tags/rel/vga_lcd/bench/verilog/wb_mast_model.v
File deleted
/tags/rel/vga_lcd/bench/verilog/wb_slv_model.v
File deleted
/tags/rel/vga_lcd/bench/verilog/test_bench_top.v
File deleted
/tags/rel/vga_lcd/bench/verilog/tests.v
File deleted
/tags/rel/vga_lcd/rtl/vhdl/pgen.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/fifo_dc.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/tgen.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/vga.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/counter.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/vtim.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/dpm.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut_tstbench.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/colproc.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/wb_slave.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/wb_master.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/fifo.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/csm_pb.vhd
File deleted
/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut.vhd
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_cur_cregs.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_curproc.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_defines.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_vtim.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/generic_spram.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_wb_master.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_fifo.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_pgen.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_fifo_dc.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_enh_top.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_tgen.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_colproc.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_wb_slave.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/generic_dpram.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_clkgen.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/vga_csm_pb.v
File deleted
/tags/rel/vga_lcd/rtl/verilog/timescale.v
File deleted
/tags/rel/vga_lcd/doc/src/vga_core_enh.doc
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
tags/rel/vga_lcd/doc/src/vga_core_enh.doc
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: tags/rel/vga_lcd/doc/vga_core.pdf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: tags/rel/vga_lcd/doc/vga_core.pdf
===================================================================
--- tags/rel/vga_lcd/doc/vga_core.pdf (revision 13)
+++ tags/rel/vga_lcd/doc/vga_core.pdf (nonexistent)
tags/rel/vga_lcd/doc/vga_core.pdf
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile
===================================================================
--- tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile (revision 13)
+++ tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile (nonexistent)
@@ -1,161 +0,0 @@
-
-all: sim
-SHELL = /bin/sh
-#MS="-s"
-
-##########################################################################
-#
-# DUT Sources
-#
-##########################################################################
-DUT_SRC_DIR=../../../rtl/verilog
-_TARGETS_= $(DUT_SRC_DIR)/generic_dpram.v \
- $(DUT_SRC_DIR)/generic_spram.v \
- $(DUT_SRC_DIR)/csm_spram_bw.v \
- $(DUT_SRC_DIR)/vga_colproc.v \
- $(DUT_SRC_DIR)/vga_csm_pb.v \
- $(DUT_SRC_DIR)/vga_cur_cregs.v \
- $(DUT_SRC_DIR)/vga_curproc.v \
- $(DUT_SRC_DIR)/vga_enh_top.v \
- $(DUT_SRC_DIR)/vga_dvi_top.v \
- $(DUT_SRC_DIR)/vga_fifo.v \
- $(DUT_SRC_DIR)/vga_fifo_dc.v \
- $(DUT_SRC_DIR)/vga_pgen.v \
- $(DUT_SRC_DIR)/vga_tgen.v \
- $(DUT_SRC_DIR)/vga_vtim.v \
- $(DUT_SRC_DIR)/vga_wb_master.v \
- $(DUT_SRC_DIR)/vga_wb_slave.v
-
-
-##########################################################################
-#
-# Test Bench Sources
-#
-##########################################################################
-TB_SRC_DIR=../../../bench/verilog
-_TB_= $(TB_SRC_DIR)/test_bench_top.v \
- $(TB_SRC_DIR)/wb_slv_model.v \
- $(TB_SRC_DIR)/wb_mast_model.v \
- $(TB_SRC_DIR)/sync_check.v \
- $(TB_SRC_DIR)/artsmcl18u_ram/art_hssp_512x24_bw_bist.v \
- $(TB_SRC_DIR)/artsmcl18u_ram/art_hsdp_128x24_bist.v \
- $(TB_SRC_DIR)/bist/rtl/verilog/bist_dp_top.v \
- $(TB_SRC_DIR)/bist/rtl/verilog/bist_sp_top.v \
- $(TB_SRC_DIR)/bist/rtl/verilog/bist_tp_top.v \
- $(TB_SRC_DIR)/bist/rtl/verilog/bist.v \
- $(TB_SRC_DIR)/artsmcl18u_ram/art_hssp_512x24_bw/art_hssp_512x24_bw.v \
- $(TB_SRC_DIR)/artsmcl18u_ram/art_hsdp_128x24/art_hsdp_128x24.v \
- $(TB_SRC_DIR)/wb_b3_check.v
-
-##########################################################################
-#
-# Misc Variables
-#
-##########################################################################
-
-_TOP_=test
-INCDIR="-INCDIR ./$(DUT_SRC_DIR)/ -INCDIR ./$(TB_SRC_DIR)/"
-LOGF=-LOGFILE .nclog
-NCCOMMON=-CDSLIB ncwork/cds.lib -HDLVAR ncwork/hdl.var -NOCOPYRIGHT
-UMC_LIB=/tools/dc_libraries/virtual_silicon/umc_lib.v
-GATE_NETLIST=../../../syn/out/vga_vga_and_clut_ps.v
-
-##########################################################################
-#
-# Make Targets
-#
-##########################################################################
-simw:
- @$(MAKE) -s sim ACCESS="-ACCESS +r" WAVES="-DEFINE WAVES"
-
-ss:
- signalscan -do waves/waves.do -waves waves/waves.trn &
-
-sim:
- @echo ""
- @echo "----- Running NCVLOG ... ----------"
- @$(MAKE) $(MS) vlog \
- TARGETS="$(_TARGETS_)" \
- TB="$(_TB_)" \
- INCDIR=$(INCDIR) \
- WAVES="$(WAVES)" \
- TOP=$(_TOP_)
- @echo ""
- @echo "----- Running NCELAB ... ----------"
- @$(MAKE) $(MS) elab \
- ACCESS="$(ACCESS)" TOP=$(_TOP_)
- @echo ""
- @echo "----- Running NCSIM ... ----------"
- @$(MAKE) $(MS) ncsim \
- TOP=$(_TOP_)
- @echo ""
-
-
-gatew:
- @$(MAKE) -s gate ACCESS="-ACCESS +r " WAVES="-DEFINE WAVES"
-
-gate:
- @echo ""
- @echo "----- Running NCVLOG ... ----------"
- $(MAKE)$(MS) vlog \
- TARGETS="$(UMC_LIB) $(GATE_NETLIST)" \
- TB="$(_TB_)" \
- INCDIR=$(INCDIR) \
- WAVES="$(WAVES)"
- @echo ""
- @echo "----- Running NCELAB ... ----------"
- @$(MAKE) $(MS) elab \
- ACCESS="$(ACCESS)" TOP=$(_TOP_)
- @echo ""
- @echo "----- Running NCSIM ... ----------"
- @$(MAKE) $(MS) ncsim TOP=$(_TOP_)
- @echo ""
-
-
-hal:
- @echo ""
- @echo "----- Running HAL ... ----------"
- hal +incdir+$(DUT_SRC_DIR) \
- -NOP -NOS -nocheck STYVAL:USEPRT:NOBLKN:DLNBLK \
- "$(_TARGETS_)"
- @echo "----- DONE ... ----------"
-
-clean:
- rm -rf ./waves/*.dsn ./waves/*.trn \
- ncwork/worklib/* ncwork/count/* \
- ncwork/worklib/.i* ncwork/count/.i*
-
-##########################################################################
-#
-# NCVLOG
-#
-##########################################################################
-
-vlog:
- ncvlog $(NCCOMMON) $(LOGF) \
- -WORK worklib $(WAVES) $(TARGETS) $(TB) $(INCDIR)
-
-##########################################################################
-#
-# NCELAB
-#
-##########################################################################
-
-elab:
- ncelab $(NCCOMMON) $(LOGF) -APPEND_LOG \
- -WORK worklib $(ACCESS) \
- -NOTIMINGCHECKS \
- worklib.$(TOP)
-
-##########################################################################
-#
-# NCSIM
-#
-##########################################################################
-
-ncsim:
- ncsim $(NCCOMMON) $(LOGF) -APPEND_LOG \
- -EXIT -ERRORMAX 10 worklib.$(TOP)
-
-
-
Index: tags/rel/vga_lcd/syn/bin/read.dc
===================================================================
--- tags/rel/vga_lcd/syn/bin/read.dc (revision 13)
+++ tags/rel/vga_lcd/syn/bin/read.dc (nonexistent)
@@ -1,66 +0,0 @@
-###############################################################################
-#
-# Pre Synthesis Script
-#
-# This script only reads in the design and saves it in a DB file
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-###############################################################################
-
-# ==============================================
-# Setup Design Parameters
-source ../bin/design_spec.dc
-
-# ==============================================
-# Setup Libraries
-source ../bin/lib_spec.dc
-
-# ==============================================
-# Setup IO Files
-
-append log_file ../log/$active_design "_pre.log"
-append pre_comp_db_file ../out/$design_name "_pre.db"
-
-sh rm -f $log_file
-
-# ==============================================
-# Setup Misc Variables
-
-set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
-
-# ==============================================
-# Read Design
-
-echo "+++++++++ Analyzing all design files ..." >> $log_file
-
-foreach module $design_files {
- echo "+++++++++ Reading: $module" >> $log_file
- echo +++++++++ Reading: $module
- set module_file_name ""
- append module_file_name $module ".v"
- analyze -f verilog $module_file_name >> $log_file
- elaborate $module >> $log_file
- }
-
-current_design $active_design
-
-echo "+++++++++ Linking Design ..." >> $log_file
-link >> $log_file
-
-echo "+++++++++ Uniquifying Design ..." >> $log_file
-uniquify >> $log_file
-
-echo "+++++++++ Checking Design ..." >> $log_file
-check_design >> $log_file
-
-# ==============================================
-# Save Design
-echo "+++++++++ Saving Design ..." >> $log_file
-write_file -hierarchy -format db -output $pre_comp_db_file
-
Index: tags/rel/vga_lcd/syn/bin/comp.dc
===================================================================
--- tags/rel/vga_lcd/syn/bin/comp.dc (revision 13)
+++ tags/rel/vga_lcd/syn/bin/comp.dc (nonexistent)
@@ -1,134 +0,0 @@
-###############################################################################
-#
-# Actual Synthesis Script
-#
-# This script does the actual synthesis
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-###############################################################################
-
-# ==============================================
-# Setup Design Parameters
-source ../bin/design_spec.dc
-
-# ==============================================
-# Setup Libraries
-source ../bin/lib_spec.dc
-
-# ==============================================
-# Setup IO Files
-
-append log_file ../log/$active_design "_cmp.log"
-append pre_comp_db_file ../out/$design_name "_pre.db"
-append post_comp_db_file ../out/$design_name ".db"
-append post_syn_verilog_file ../out/$design_name "_ps.v"
-set junk_file /dev/null
-
-sh rm -f $log_file
-
-# ==============================================
-# Setup Misc Variables
-
-set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
-
-# ==============================================
-# Read Design
-
-echo "+++++++++ Reading Design ..." >> $log_file
-read_file $pre_comp_db_file >> $log_file
-
-# ==============================================
-# Operating conditions
-
-echo "+++++++++ Setting up Operation Conditions ..." >> $log_file
-current_design $design_name
-set_operating_conditions WORST >> $log_file
-
-# Turn off automatic wire load selection, as this
-# always (WHY ???) defaults to "zero_load"
-#set auto_wire_load_selection false
-#set_wire_load_mode enclosed >> $log_file
-#set_wire_load_mode top >> $log_file
-#set_wire_load_model -name suggested_40K >> $log_file
-
-# ==============================================
-# Setup Clocks and Resets
-
-echo "+++++++++ Setting up Clocks ..." >> $log_file
-
-set_drive 0 wb_clk_i
-set_drive 0 clk_pclk_i
-
-# !!! WISHBONE Clock !!!
-set clock_period 5
-create_clock -period $clock_period wb_clk_i
-set_clock_skew -uncertainty 0.1 wb_clk_i
-set_clock_transition 0.5 wb_clk_i
-set_dont_touch_network wb_clk_i
-
-# !!! Pixel Clock !!!
-set clock_period2 20
-create_clock -period $clock_period2 clk_pclk_i
-set_clock_skew -uncertainty 0.5 clk_pclk_i
-set_clock_transition 0.9 clk_pclk_i
-set_dont_touch_network clk_pclk_i
-
-# !!! Reset !!!
-set_drive 0 wb_rst_i
-set_dont_touch_network wb_rst_i
-set_drive 0 rst_nreset_i
-set_dont_touch_network rst_nreset_i
-
-# ==============================================
-# Setup IOs
-
-echo "+++++++++ Setting up IOs ..." >> $log_file
-
-# Need to spell out external IOs
-
-set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file
-set_load 0.2 [all_outputs]
-
-set_input_delay -max 2 -clock wb_clk_i [all_inputs]
-set_output_delay -max 2 -clock wb_clk_i [all_outputs]
-
-set_input_delay -max 2 -clock clk_pclk_i [all_inputs]
-set_output_delay -max 2 -clock clk_pclk_i [all_outputs]
-
-# ==============================================
-# Setup Area Constrains
-set_max_area 0.0
-set compile_sequential_area_recovery true
-
-# ==============================================
-# Force Ultra
-set_ultra_optimization -f
-
-# ==============================================
-# Compile Design
-
-echo "+++++++++ Starting Compile ..." >> $log_file
-#compile -map_effort low -area_effort low >> $log_file
-compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file
-
-# ==============================================
-# Write Out the optimized design
-
-echo "+++++++++ Saving Optimized Design ..." >> $log_file
-write_file -hierarchy -format verilog -output $post_syn_verilog_file
-write_file -hierarchy -format db -output $post_comp_db_file
-
-# ==============================================
-# Create Some Basic Reports
-
-echo "+++++++++ Reporting Final Results ..." >> $log_file
-report_timing -nworst 10 >> $log_file
-report_area >> $log_file
-
-
Index: tags/rel/vga_lcd/syn/bin/lib_spec.dc
===================================================================
--- tags/rel/vga_lcd/syn/bin/lib_spec.dc (revision 13)
+++ tags/rel/vga_lcd/syn/bin/lib_spec.dc (nonexistent)
@@ -1,36 +0,0 @@
-###############################################################################
-#
-# Library Specification
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-###############################################################################
-
-# ==============================================
-# Setup Libraries
-
-set search_path [list $search_path . \
- /tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \
- $hdl_src_dir]
-
-set snps [getenv "SYNOPSYS"]
-
-set synthetic_library ""
-append synthetic_library $snps "/libraries/syn/dw01.sldb "
-append synthetic_library $snps "/libraries/syn/dw02.sldb "
-append synthetic_library $snps "/libraries/syn/dw03.sldb "
-append synthetic_library $snps "/libraries/syn/dw04.sldb "
-append synthetic_library $snps "/libraries/syn/dw05.sldb "
-append synthetic_library $snps "/libraries/syn/dw06.sldb "
-append synthetic_library $snps "/libraries/syn/dw07.sldb "
-
-set target_library { umcl18u250t2_typ.db }
-set link_library ""
-append link_library $target_library " " $synthetic_library
-set symbol_library { umcl18u250t2.sdb }
-
Index: tags/rel/vga_lcd/syn/bin/design_spec.dc
===================================================================
--- tags/rel/vga_lcd/syn/bin/design_spec.dc (revision 13)
+++ tags/rel/vga_lcd/syn/bin/design_spec.dc (nonexistent)
@@ -1,27 +0,0 @@
-###############################################################################
-#
-# Design Specification
-#
-# Author: Rudolf Usselmann
-# rudi@asics.ws
-#
-# Revision:
-# 3/7/01 RU Initial Sript
-#
-#
-###############################################################################
-
-# ==============================================
-# Setup Design Parameters
-
-set design_files {ud_cnt ro_cnt vga_fifo_dc vga_fifo vga_colproc vga_vtim vga_pgen vga_wb_master vga_tgen vga_wb_slave vga_csm_pb vga_top vga_vga_and_clut}
-
-
-set design_name vga_vga_and_clut
-set active_design vga_vga_and_clut
-
-# Next Statement defines all clocks and resets in the design
-set special_net {rst clk_i pclk}
-
-set hdl_src_dir ../../rtl/verilog/
-
Index: tags/rel/vga_lcd/software/include/oc_vga_lcd.h
===================================================================
--- tags/rel/vga_lcd/software/include/oc_vga_lcd.h (revision 13)
+++ tags/rel/vga_lcd/software/include/oc_vga_lcd.h (nonexistent)
@@ -1,123 +0,0 @@
-/*
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Include file for OpenCores VGA/LCD Controller ////
-//// ////
-//// File : oc_vga_lcd.h ////
-//// Function: c-include file ////
-//// ////
-//// Authors: Richard Herveille (richard@asics.ws) ////
-//// www.opencores.org ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-//// ////
-//// Copyright (C) 2001 Richard Herveille ////
-//// richard@asics.ws ////
-//// www.asics.ws ////
-//// ////
-//// This source file may be used and distributed without ////
-//// restriction provided that this copyright statement is not ////
-//// removed from the file and that any derivative work contains ////
-//// the original copyright notice and the associated disclaimer.////
-//// ////
-//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
-//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
-//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
-//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
-//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
-//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
-//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
-//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
-//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
-//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
-//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
-//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
-//// POSSIBILITY OF SUCH DAMAGE. ////
-//// ////
-/////////////////////////////////////////////////////////////////////
-*/
-
-/*
- * Definitions for the Opencores VGA/LCD Controller Core
- */
-
-/* --- Register definitions --- */
-
-/* ----- Read-write access */
-
-#define OC_VGA_CTRL 0x000 /* Control register */
-#define OC_VGA_STAT 0x004 /* Status register */
-#define OC_VGA_HTIM 0x008 /* Horizontal Timing register */
-#define OC_VGA_VTIM 0x00c /* Vertical Timing register */
-#define OC_VGA_HVLEN 0x010 /* Horizontal/Vertical length register*/
-#define OC_VGA_VBARA 0x014 /* Video Base Address register A */
-#define OC_VGA_VBARB 0x018 /* Video Base Address register B */
-
-/* ----- Bits definition */
-
-/* ----- Control register */
- /* bits 31-16 are reserved */
-#define OC_VGA_BL (1<<15) /* Blank level bit: */
-#define OC_VGA_CSL (1<<14) /* Composite Sync. level bit */
-#define OC_VGA_VSL (1<<13) /* Vertical Sync. level bit */
-#define OC_VGA_HSL (1<<12) /* Horizontal Sync. level bit */
- /* 0 - Positive */
- /* 1 - Negative */
-#define OC_VGA_PC (1<<11) /* Pseudo Color (only for 8bpp mode) */
- /* 0 - 8bpp gray scale */
- /* 1 - 8bpp pseudo color */
-#define OC_VGA_CD (1<< 9) /* Color Depth */
- /* 00 - 8bits per pixel */
- /* 01 - 16bits per pixel */
- /* 10 - 24bits per pixel */
- /* 11 - reserved */
-#define OC_VGA_VBL (1<< 7) /* Video burst length */
- /* 00 - 1 cycle */
- /* 01 - 2 cycle */
- /* 10 - 4 cycle */
- /* 11 - 8 cycle */
-#define OC_VGA_CBSWE (1<<6) /* CLUT Bank Switch Enable bit */
-#define OC_VGA_VBSWE (1<<5) /* Video Bank Switch Enable bit */
-#define OC_VGA_CBSIE (1<<4) /* CLUT Bank Switch Interrupt enable */
-#define OC_VGA_VBSIE (1<<3) /* Video Bank Switch Interrupt enable */
-#define OC_VGA_HIE (1<<2) /* Horizontal Interrupt enable */
-#define OC_VGA_VIE (1<<1) /* Vertical Interrupt enable */
-#define OC_VGA_VEN (1<<0) /* Video Enable bit */
- /* 1 - Enabled */
- /* 0 - Disabled */
-
-/* ----- Status register */
- /* bits 31-18 are reserved */
-#define OC_VGA_ACMP (1<<17) /* Active CLUT Memory Page */
-#define OC_VGA_AVMP (1<<16) /* Active Video Memory Page */
- /* bits 15-8 are reserved */
-#define OC_VGA_CBSINT (1<<7) /* CLUT Bank Switch Interrupt pending */
-#define OC_VGA_VBSINT (1<<6) /* Bank Switch Interrupt pending */
-#define OC_VGA_HINT (1<<5) /* Horizontal Interrupt pending */
-#define OC_VGA_VINT (1<<4) /* Vertical Interrupt pending */
- /* bits 3-2 are reserved */
-#define OC_VGA_LUINT (1<<1) /* LineFIFO Underrun interrupt pending*/
-#define OC_VGA_SINT (1<<0) /* System Error Interrupt pending */
-
-
-/* ----- Horizontal/Vertical Timing registers */
-
-#define OC_VGA_TSYNC (1<<24) /* Synchronization pulse width */
-#define OC_VGA_TGDEL (1<<16) /* Gate delay time */
-#define OC_VGA_TGATE (1<< 0) /* Gate time */
-
-
-/* ----- Horizontal and Vertcial Length registers */
-
-#define OC_VGA_THLEN (1<<16) /* Horizontal length */
-#define OC_VGA_TVLEN (1<< 0) /* Vertical length */
-
-
-/* bit testing and setting macros */
-
-#define OC_ISSET(reg,bitmask) ((reg)&(bitmask))
-#define OC_ISCLEAR(reg,bitmask) (!(OC_ISSET(reg,bitmask)))
-#define OC_BITSET(reg,bitmask) ((reg)|(bitmask))
-#define OC_BITCLEAR(reg,bitmask) ((reg)|(~(bitmask)))
-#define OC_BITTOGGLE(reg,bitmask) ((reg)^(bitmask))
-#define OC_REGMOVE(reg,value) ((reg)=(value))
\ No newline at end of file
Index: tags/rel/root.bat
===================================================================
--- tags/rel/root.bat (revision 13)
+++ tags/rel/root.bat (nonexistent)
@@ -1,2 +0,0 @@
-
-set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
tags/rel/root.bat
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tags/rel/COPYING
===================================================================
--- tags/rel/COPYING (revision 13)
+++ tags/rel/COPYING (nonexistent)
@@ -1,251 +0,0 @@
-[I have snipped the snail mail address of the FSF because it has
-changed in the past and is likely to change again. The current
-address should be at http://www.gnu.org/]
-
- GNU GENERAL PUBLIC LICENSE
- Version 1, February 1989
-
- Copyright (C) 1989 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The license agreements of most software companies try to keep users
-at the mercy of those companies. By contrast, our General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. The
-General Public License applies to the Free Software Foundation's
-software and to any other program whose authors commit to using it.
-You can use it for your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Specifically, the General Public License is designed to make
-sure that you have the freedom to give away or sell copies of free
-software, that you receive source code or can get it if you want it,
-that you can change the software or use pieces of it in new free
-programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of a such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must tell them their rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any program or other work which
-contains a notice placed by the copyright holder saying it may be
-distributed under the terms of this General Public License. The
-"Program", below, refers to any such program or work, and a "work based
-on the Program" means either the Program or any work containing the
-Program or a portion of it, either verbatim or with modifications. Each
-licensee is addressed as "you".
-
- 1. You may copy and distribute verbatim copies of the Program's source
-code as you receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice and
-disclaimer of warranty; keep intact all the notices that refer to this
-General Public License and to the absence of any warranty; and give any
-other recipients of the Program a copy of this General Public License
-along with the Program. You may charge a fee for the physical act of
-transferring a copy.
-
- 2. You may modify your copy or copies of the Program or any portion of
-it, and copy and distribute such modifications under the terms of Paragraph
-1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating that
- you changed the files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish, that
- in whole or in part contains the Program or any part thereof, either
- with or without modifications, to be licensed at no charge to all
- third parties under the terms of this General Public License (except
- that you may choose to grant warranty protection to some or all
- third parties, at your option).
-
- c) If the modified program normally reads commands interactively when
- run, you must cause it, when started running for such interactive use
- in the simplest and most usual way, to print or display an
- announcement including an appropriate copyright notice and a notice
- that there is no warranty (or else, saying that you provide a
- warranty) and that users may redistribute the program under these
- conditions, and telling the user how to view a copy of this General
- Public License.
-
- d) You may charge a fee for the physical act of transferring a
- copy, and you may at your option offer warranty protection in
- exchange for a fee.
-
-Mere aggregation of another independent work with the Program (or its
-derivative) on a volume of a storage or distribution medium does not bring
-the other work under the scope of these terms.
-
- 3. You may copy and distribute the Program (or a portion or derivative of
-it, under Paragraph 2) in object code or executable form under the terms of
-Paragraphs 1 and 2 above provided that you also do one of the following:
-
- a) accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- b) accompany it with a written offer, valid for at least three
- years, to give any third party free (except for a nominal charge
- for the cost of distribution) a complete machine-readable copy of the
- corresponding source code, to be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- c) accompany it with the information you received as to where the
- corresponding source code may be obtained. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form alone.)
-
-Source code for a work means the preferred form of the work for making
-modifications to it. For an executable file, complete source code means
-all the source code for all modules it contains; but, as a special
-exception, it need not include source code for modules which are standard
-libraries that accompany the operating system on which the executable
-file runs, or for standard header files or definitions files that
-accompany that operating system.
-
- 4. You may not copy, modify, sublicense, distribute or transfer the
-Program except as expressly provided under this General Public License.
-Any attempt otherwise to copy, modify, sublicense, distribute or transfer
-the Program is void, and will automatically terminate your rights to use
-the Program under this License. However, parties who have received
-copies, or rights to use copies, from you under this General Public
-License will not have their licenses terminated so long as such parties
-remain in full compliance.
-
- 5. By copying, distributing or modifying the Program (or any work based
-on the Program) you indicate your acceptance of this license to do so,
-and all its terms and conditions.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the original
-licensor to copy, distribute or modify the Program subject to these
-terms and conditions. You may not impose any further restrictions on the
-recipients' exercise of the rights granted herein.
-
- 7. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of the license which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-the license, you may choose any version ever published by the Free Software
-Foundation.
-
- 8. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- Appendix: How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to humanity, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
- To do so, attach the following notices to the program. It is safest to
-attach them to the start of each source file to most effectively convey
-the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C) 19yy
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 1, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19xx name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than `show w' and `show
-c'; they could even be mouse-clicks or menu items--whatever suits your
-program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- program `Gnomovision' (a program to direct compilers to make passes
- at assemblers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-That's all there is to it!
Index: tags/rel/new/6502vhdl/root.bat
===================================================================
--- tags/rel/new/6502vhdl/root.bat (revision 13)
+++ tags/rel/new/6502vhdl/root.bat (nonexistent)
@@ -1,2 +0,0 @@
-
-set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
tags/rel/new/6502vhdl/root.bat
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tags/rel/new/6502vhdl/COPYING
===================================================================
--- tags/rel/new/6502vhdl/COPYING (revision 13)
+++ tags/rel/new/6502vhdl/COPYING (nonexistent)
@@ -1 +0,0 @@
-/*in subdir not used */
Index: tags/rel/new/6502vhdl/new/readme.txt
===================================================================
--- tags/rel/new/6502vhdl/new/readme.txt (revision 13)
+++ tags/rel/new/6502vhdl/new/readme.txt (nonexistent)
@@ -1 +0,0 @@
-simple readme.txt
Index: tags/rel/new/6502vhdl/NEWS
===================================================================
--- tags/rel/new/6502vhdl/NEWS (revision 13)
+++ tags/rel/new/6502vhdl/NEWS (nonexistent)
@@ -1 +0,0 @@
-/* updated contents */
Index: tags/rel/new/6502vhdl/README
===================================================================
--- tags/rel/new/6502vhdl/README (revision 13)
+++ tags/rel/new/6502vhdl/README (nonexistent)
@@ -1 +0,0 @@
-/* accidently imported the vga_lcd module */
Index: tags/rel/new/readme.txt/6502vhdl/NEWS
===================================================================
--- tags/rel/new/readme.txt/6502vhdl/NEWS (revision 13)
+++ tags/rel/new/readme.txt/6502vhdl/NEWS (nonexistent)
@@ -1 +0,0 @@
-/* updated contents */
Index: tags/rel/new/readme.txt/6502vhdl/README
===================================================================
--- tags/rel/new/readme.txt/6502vhdl/README (revision 13)
+++ tags/rel/new/readme.txt/6502vhdl/README (nonexistent)
@@ -1 +0,0 @@
-/* accidently imported the vga_lcd module */
Index: tags/rel/new/readme.txt/6502vhdl/root.bat
===================================================================
--- tags/rel/new/readme.txt/6502vhdl/root.bat (revision 13)
+++ tags/rel/new/readme.txt/6502vhdl/root.bat (nonexistent)
@@ -1,2 +0,0 @@
-
-set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
tags/rel/new/readme.txt/6502vhdl/root.bat
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: tags/rel/new/readme.txt/6502vhdl/COPYING
===================================================================
--- tags/rel/new/readme.txt/6502vhdl/COPYING (revision 13)
+++ tags/rel/new/readme.txt/6502vhdl/COPYING (nonexistent)
@@ -1 +0,0 @@
-/*in subdir not used */
Index: tags/rel/new/readme.txt/6502vhdl/new/readme.txt
===================================================================
--- tags/rel/new/readme.txt/6502vhdl/new/readme.txt (revision 13)
+++ tags/rel/new/readme.txt/6502vhdl/new/readme.txt (nonexistent)
@@ -1 +0,0 @@
-simple readme.txt
Index: tags/rel/NEWS
===================================================================
--- tags/rel/NEWS (revision 13)
+++ tags/rel/NEWS (nonexistent)
@@ -1,1370 +0,0 @@
-Changes since 1.11.8:
-
-* CVS now knows how to report, as well as record, `P' record types.
-
-* When running the `cvs history' command, clients will now send the
- long-accepted `-e' option, for all records, rather than explicitly requesting
- `P' record types, a request which servers prior to 1.11.7 will reject with a
- fatal error message.
-
-* A problem with locating files requested by case insensitive clients which was
- accidentally introduced in 1.11.6 as part of a fix for a data loss problem
- involving `cvs add's from case insensitive clients has been fixed. The
- relevant error message was `cvs [ aborted]: filE,v is ambiguous;
- could mean FILE,v or file,v'.
-
-* Attempts to use the global `-l' option, removed from both client and server
- as of version 1.11.6, will now elicit a warning rather than a fatal error
- from the server.
-
-Changes from 1.11.7 to 1.11.8:
-
-* A problem in the CVS getpass library that could cause passwords to echo on
- some systems has been fixed.
-
-Changes from 1.11.6 to 1.11.7:
-
-* A segfault that could occur in very rare cases where the stat of a file
- failed during a diff has been fixed.
-
-* Any user with write privleges to the CVSROOT/checkoutlist file could pass
-arbitrary format strings directly through to a printf function. This was
-probably bad and has been fixed. White space at the beginning of error strings
-in checkoutlist is now ignored properly.
-
-* In client/server mode, most messages from CVS now contain the actual
-command name rather than the generic "server".
-
-* A long-standing bug that prevented most client/server updates from being
-logged in the history file has been fixed.
-
-* Updates done via a patch ("P" status) are now logged in the history file
-by default and the corresponding "P" history record type is now documented.
-If you're setting the LogHistory option in your CVSROOT/config file, you may
-want to add "P" to the list of record types.
-
-* CVS now will always compile and its own getpass() function (originally from
-GNULIB) in favor of any system one that may exist. This avoids some problems
-with long passwords on some systems and updates us to POSIX.2 compliance, since
-getpass() was removed from the POSIX.2 specification.
-
-* A bug that allowed a write lock to be created in a directory despite
-there being existing read locks when using LockDir in CVSROOT/config has
-been fixed.
-
-* A bug with short patches (`rdiff -s') which caused rdiff to sometimes report
-differences that did not exist has been fixed.
-
-* Some minor corrections were made to the diff code to keep diff & rdiff from
-printing diff headers with empty change texts when two files have different
-revision numbers but the same content.
-
-* The global '-l' option, which suppressed history logging, has been removed
-from both client and server.
-
-Changes from 1.11.5 to 1.11.6:
-
-* A warning message is now issued if an administrative file contains
-more than one DEFAULT entry.
-
-* An error running a verifymsg script (such as referencing an unset user
-variable or the script not existing) now causes the verification to
-fail.
-
-* Errors in administrative files commands (like unset user variables)
-are no longer reported unless the command is actually executed.
-
-* When a file is initially checked out, its last access time is now set
-to the current time rather than being set to the time the file was last
-checked in like the modification time is.
-
-* The Checkin.prog and Update.prog functionality has been removed. This
-fuctionality previously allowed executables to be specified in the modules file
-to be run at update and checkin time, but users could edit these files on a per
-workspace basis, creating a security hole.
-
-* contrib/rcs2log and src/cvsbug now use the BSD mktemp program to create
-their temp files and directories on systems which provide it.
-
-* Corrected the path in a failed write error message.
-
-* Autoconf and Automake are no longer run automatically unless you run
-configure with --enable-maintainer-mode. Accordingly, noautomake.sh is
-no longer needed and has been removed.
-
-* We've standardized on Automake version 1.7.5 and Autoconf version 2.57 to get
-at a few new macros. Again, this should only really affect developers. See
-the section of the INSTALL file about using the autotools if you are compiling
-CVS yourself.
-
-Changes from 1.11.4 to 1.11.5:
-
-* Fixed a security hole in the CVS server by which users with read only access
-could gain write access. This issue does not affect client builds. The
-Common Vulnerabilities and Exposures project (cve.mitre.org) has assigned the
-name CAN-2003-0015 to this issue. See
- for more
-information.
-
-* Fixed some bugs where revision numbers starting with 0 (like 0.3)
-weren't correctly handled. (CVS doesn't normally use such revision
-numbers, but users may be able to force it to do so and old RCS files
-might.)
-
-Changes from 1.11.3 to 1.11.4:
-
-* Some minor changes to allow the code to compile on Windows platforms.
-
-Changes from 1.11.2 to 1.11.3:
-
-* The tag/rtag code has been fixed to once again lock just a single
-directory at a time.
-
-* There was a bug where certain error conditions could cause the server
-to go into an infinite loop. There was also a bug that caused a
-compressed connection from an older client to hang on shutdown. These
-bugs have been fixed.
-
-* Fixed a bug that caused the server to reject most watch commands.
-
-* When waiting for another user's lock, the message timestamps are now
-in UTC rather than the server's local time.
-
-* The options.h file is no longer used. This fixes a bug that occurred when
-1.11.2 was compiled on Windows platforms.
-
-* We've standardized on Automake version 1.6.3 and Autoconf version 2.53.
-They are cleaner, less bug prone, and will hopfully allow me to start updating
-sanity.sh to use Autotest and Autoshell. Again, this should only really affect
-developers. See the section of the INSTALL file about using the autotools if
-you are compiling CVS yourself.
-
-* Fixed a bug in the log/rlog code when a revision range crosses a
-branch point.
-
-* Fixed a bug where filenames starting with - would be misinterpreted as
-options when using client/server mode.
-
-Changes from 1.11.1p1 to 1.11.2:
-
-* There is a new feature, enabled by RereadLogAfterVerify in CVSROOT/config,
-which tells CVS to reread the log message after running the verifymsg
-script. This allows the verifymsg script to reformat or otherwise
-modify the log message.
-
-* The interpretation of revision ranges using :: in "log" and "rlog"
-has changed: a::b now excludes the log message from revision a but
-includes the log message from revision b. Also, revision ranges that
-cross branch points should now work.
-
-* zlib has been updated to version 1.4. There is a security advisory
-out in regards to 1.3. This should fix that problem.
-
-* The "log" and "rlog" commands now have a -S option to suppress the
-header information when no revisions are selected.
-
-* A serious error that allowed read-only users to tag files has been
-corrected.
-
-* The "annotate" command will no longer annotate binary files unless
-you specify the new -F option.
-
-* The "tag" and "rtag" commands will no longer move or delete branch
-tags unless you use the new -B option. (This prevents accidental
-changes to branch tags that are hard to undo.)
-
-* We've standardized on the 1.5 Automake release for the moment. Again, this
-should only really affect developers. See the section of the INSTALL file
-about using the autotools if you are compiling CVS yourself.
-
-Changes from 1.11.1 to 1.11.1p1:
-
-* Read only access was broken - now fixed.
-
-Changes from 1.11 to 1.11.1:
-
-* There was a locking bug in the tag/rtag code that could lose changes
-made to a file while the tag operation was in progress. This has been
-fixed, but all of the directories being tagged are now locked for the
-entire duration of the tag operation rather than only one directory at a
-time.
-
-* The "cvs diff" command now accepts the -y/--side=by-side and -T/
---initial-tab options. (To use these options with a remote repository,
-both the client and the server must support them.)
-
-* The expansion of the loginfo format string has changed slightly.
-Previously, the expansion was surrounded by single quotes ('); if a file
-name contained a single quote character, the string would not be parsed
-as a single entity by the Unix shell (and it would not be possible to
-parse it unambiguously). Now the expansion is surrounded by double
-quotes (") and any embedded dollar signs ($), backticks (`), backslashes
-(\), and double quotes are preceded by a backslash. This is parsed as a
-single entity by the shell reguardless of content. This change should
-not be noticable unless you're not using a Unix shell or you have
-embedded the format string inside a double quoted string.
-
-* There was a bug in the diff code which sometimes caused conflicts to
-be flagged which shouldn't have been. This has been fixed.
-
-* New "cvs rlog" and "cvs rannotate" commands have been added to get log
-messages and annotations without having to have a checked-out copy.
-
-* Exclusive revision ranges have been added to "cvs log" using ::
-(similar to "cvs admin -o").
-
-* The VMS client now accepts wildcards if you're running VMS 7.x.
-
-* ZLIB has been updated to version 1.1.3, the most current version. This
-includes mostly some optimizations and minor bug fixes.
-
-* The ~/.cvspass file has a slightly modified format. CVSROOTs are now
-stored in a new canonical form - hostnames are now case insensitive and
-port numbers are always stored in the new format. Until a new login for
-a particular CVSROOT is performed with the new version of CVS, new and
-old versions of CVS should interoperate invisibly. After that point, an
-extra login using the old version of CVS may be necessary to continue to
-allow the new and old versions of CVS to interoperate using the same
-~/.cvspass file and CVSROOT. The exception to this rule occurs when the
-CVSROOTs used with the different versions use case insensitively
-different hostnames, for example, "empress", and "empress.2-wit.com".
-
-* A password and a port number may now be specified in CVSROOT for
-pserver connections. The new format is:
-
- :pserver:[[user][:password]@]host[:[port]]/path
-
-Note that passwords specified in a checkout command will be saved in the
-clear in the CVS/Root file in each created directory, so this is not
-recommended, except perhaps when accessing anonymous repositories or the
-like.
-
-* The distribution has been converted to use Automake. This shouldn't
-affect most users except to ease some portability concerns, but if you
-are building from the repository and encounter problems with the
-makefiles, you might try running ./noautomake.sh after a fresh update
--AC.
-
-Changes from 1.10 to 1.11:
-
-* The "cvs update" command has a new -C option to get clean copies from
-the repository, abandoning any local changes.
-
-* The new "cvs version" command gives a short version message. If
-the repository is remote, both the client and server versions are
-reported.
-
-* "cvs admin -t" now works correctly in client/server mode.
-
-* The "cvs history" command output format has changed -- the date
-now includes the year and is given is ISO 8601 format (yyyy-mm-dd).
-Also, the new LogHistory option in CVSROOT/config can be used to
-control what information gets recorded in the log file and code has
-been added to record file removals.
-
-* The buggy PreservePermissions code has been disabled.
-
-* Anonymous read-only access can now be done without requiring a
-password. On the server side, simply give that user (presumably
-`anonymous') an empty password in the CVSROOT/passwd file, and then
-any received password will authenticate successfully.
-
-* There is a new access method :fork: which is similar to :local:
-except that it is implemented via the CVS remote protocol, and thus
-has a somewhat different set of quirks and bugs.
-
-* The -d command line option no longer updates the CVS/Root file. For
-one thing, the CVS 1.9/1.10 behavior never had updated CVS/Root in
-subdirectories, and for another, it didn't seem that popular in
-general. So this change restores the CVS 1.8 behavior (which is also
-the CVS 1.9/1.10 behavior if the environment variable
-CVS_IGNORE_REMOTE_ROOT is set; with this change,
-CVS_IGNORE_REMOTE_ROOT no longer has any effect).
-
-* It is now possible for a single CVS command to recurse into several
-CVS roots. This includes roots which are located on several servers,
-or which are both remote and local. CVS will make connections to as
-many servers as necessary.
-
-* It is now possible to put the CVS lock files in a directory
-set by the new LockDir option in CVSROOT/config. The default
-continues to be to put the lock files in the repository itself.
-
-Changes from 1.9 to 1.10:
-
-* A bug was discovered in the -t/-f wrapper support that can cause
-serious data loss. Because of this (and also the fact that it doesn't
-work at all in client/server mode), the -t/-f wrapper code has been
-disabled until it can be fixed.
-
-* There is a new feature, enabled by TopLevelAdmin in CVSROOT/config,
-which tells CVS to modify the behavior of the "checkout" command. The
-command now creates a CVS directory at the top level of the new
-working directory, in addition to CVS directories created within
-checked-out directories. See the Cederqvist for details.
-
-* There is an optional set of features, enabled by PreservePermissions
-in CVSROOT/config, which allow CVS to store unix-specific file
-information such as permissions, file ownership, and links. See the
-Cederqvist for details.
-
-* One can now authenticate and encrypt using the GSSAPI network
-security interface. For details see the Cederqvist's description of
-specifying :gserver: in CVSROOT, and the -a global option.
-
-* All access to RCS files is now implemented internally rather than by
-calling RCS programs. The main user-visible consequence of this is
-that there is no need to worry about making sure that CVS finds the
-correct version of RCS. The -b global option and the RCSBIN setting
-in CVSROOT/config are still accepted but don't do anything. The
-$RCSBIN internal variable in administrative files is no longer
-accepted.
-
-* There is a new syntax, "cvs admin -orev1::rev2", which collapses the
-revisions between rev1 and rev2 without deleting rev1 or rev2
-themselves.
-
-* There is a new administrative file CVSROOT/config which allows one
-to specify miscellaneous aspects of CVS configuration. Currently
-supported here:
-
- - SystemAuth, allows you to prevent pserver from checking for system
- usernames/passwords.
-
-For more information see the "config" section of cvs.texinfo.
-
-* When setting up the pserver server, one now must specify the
-allowable CVSROOT directories in inetd.conf. See the Password
-authentication server section of cvs.texinfo for details. Note that
-this implies that everyone who is running a pserver server must edit
-inetd.conf when upgrading their CVS.
-
-* The client no longer needs an external patch program (assuming both
-the client and the server have been updated to the new version).
-
-* "cvs admin [options]" will now recurse. In previous versions of
-CVS, it was an error and one needed to specify "cvs admin [options] ."
-to recurse. This change brings admin in line with the other CVS
-commands.
-
-* New "logout" command to remove the password for a remote cvs
-repository from the cvspass file.
-
-* Read-only repository access is implemented for the
-password-authenticated server (other access methods are just governed
-by Unix file permissions, since they require login access to the
-repository machine anyway). See the "Repository" section of
-cvs.texinfo for details, including a discussion of security issues.
-Note that the requirement that read-only users be able to create locks
-and write the history file still applies.
-
-* There is a new administrative file verifymsg which is like editinfo
-but merely validates the message, rather than also getting it from the
-user. It therefore works with client/server CVS or if one uses the -m
-or -F options to commit. See the verifymsg section of cvs.texinfo for
-details.
-
-* The %s format formerly accepted in loginfo has been extended to
-formats such as %{sVv}, so that loginfo scripts have access to the
-version numbers being changed. See the Loginfo section of cvs.texinfo
-for details.
-
-* The postscript documentation (doc/cvs.ps) shipped with CVS is now
-formatted for US letter size instead of A4. This is not because we
-consider this size "better" than A4, but because we believe that the
-US letter version will print better on A4 paper than the other way
-around.
-
-* The "cvs export" command is now logged in the history file and there
-is a "cvs history -x E" command to select history file entries
-produced by export.
-
-* CVS no longer uses the CVS_PASSWORD environment variable. Storing
-passwords in cleartext in an environment variable is a security risk,
-especially since (on BSD variants) any user on the system can display
-any process's environment using 'ps'. Users should use the 'cvs
-login' command instead.
-
-
-Changes from 1.8 to 1.9:
-
-* Windows NT client should now work on Windows 95 as well.
-
-* New option "--help-synonyms" prints a list of all recognized command
-synonyms.
-
-* The "log" command is now implemented internally rather than via the
-RCS "rlog" program. The main user-visible consequence is that
-symbolic branch names now work (for example "cvs log -rbranch1").
-Also, the date formats accepted by -d have changed. They previously
-had been a bewildering variety of poorly-documented date formats. Now
-they are the same as the date formats accepted by the -D options to
-the other CVS commands, which is also a (different) bewildering
-variety of poorly-documented date formats, but at least we are
-consistently bewildering :-).
-
-* Encryption is now supported over a Kerberos client/server
-connection. The new "-x" global option requests it. You must
-configure with the --enable-encryption option in order to enable
-encryption.
-
-* The format of the CVS commit message has changed slightly when
-committing changes on a branch. The tag on which the commit is
-ocurring is now reported correctly in all cases.
-
-* New flag -k in wrappers allows you to specify the keyword expansion
-mode for added files based on their name. For example, you can
-specify that files whose name matches *.exe are binary by default.
-See the Wrappers section of cvs.texinfo for more details.
-
-* Remote CVS with the "-z" option now uses the zlib library (included
-with CVS) to compress all communication between the client and the
-server, rather than invoking gzip on each file separately. This means
-that compression is better and there is no need for an external gzip
-program (except to interoperate with older version of CVS).
-
-* The "cvs rlog" command is deprecated and running it will print a
-warning; use the synonymous "cvs log" command instead. It is
-confusing for rlog to mean the same as log because some other CVS
-commands are in pairs consisting of a plain command which operates on
-a working directory and an "r" command which does not (diff/rdiff;
-tag/rtag).
-
-* "cvs diff" has a bunch of new options, mostly long options. Most of
-these work only if rcsdiff and diff support them, and are named the
-same as the corresponding options to diff.
-
-* The -q and -Q command options to "cvs diff" were removed (use the
-global options instead). This brings "cvs diff" into line with the
-rest of the CVS commands.
-
-* The "annotate" command can now be used to annotate a revision other
-than the head revision on the trunk (see the -r, -D, and -f options in
-the annotate node of cvs.texinfo for details).
-
-* The "tag" command has a new option "-c" which checks that all files
- are not locally modified before tagging.
-
-* The -d command line option now overrides the cvsroot setting stored
-in the CVS/Root file in each working directory, and specifying -d will
-cause CVS/Root to be updated.
-
-* Local (non-client/server) CVS now runs on Windows NT. See
-windows-NT/README for details.
-
-* The CVSROOT variable specification has changed to support more
-access methods. In addition to "pserver," "server" (internal rsh
-client), "ext" (external rsh client), "kserver" (kerberos), and
-"local" (local filesystem access) can now be specified. For more
-details on each method, see cvs.texinfo (there is an index entry for
-:local: and each of the other access methods).
-
-* The "login" command no longer prompts the user for username and
-hostname, since one will have to provide that information via the `-d'
-flag or by setting CVSROOT.
-
-Changes from 1.7 to 1.8:
-
-* New "cvs annotate" command to display the last modification for each
-line of a file, with the revision number, user checking in the
-modification, and date of the modification. For more information see
-the `annotate' node in cvs.texinfo.
-
-* The cvsinit shell script has been replaced by a cvs init command.
-The cvs init command creates some example administrative files which
-are similar to the files found in the examples directory (and copied
-by cvsinit) in previous releases.
-
-* Added the patterns *.olb *.exe _$* *$ to default ignore list.
-
-* There is now a $USER internal variable for *info files.
-
-* There is no longer a separate `mkmodules' program; the functionality
-is now built into `cvs'. If upgrading an old repository, it is OK to
-leave in the lines in the modules file which run mkmodules (the
-mkmodules actions will get done twice, but that is harmless); you will
-probably want to remove them once you are no longer using the old CVS.
-
-* One can now specify user variables in *info files via the
-${=varname} syntax; there is a -s global option to set them. See the
-Variables node in cvs.texinfo for details.
-
-Changes from 1.6 to 1.7:
-
-* The default ignore list has changed slightly: *.obj has been added
-and CVS* has been changed to CVS CVS.adm.
-
-* CVS now supports password authentication when accessing remote
-repositories; this is useful for sites that can't use rsh (because of
-a firewall, for example), and also don't have kerberos. See node
-"Password authenticated" (in "Remote repositories", in
-doc/cvs.texinfo) for more details. Note: This feature requires both
-the client and server to be upgraded.
-
-* Using the -kb option to specify binary files now works--most cases
-did not work before. See the "Binary files" section of
-doc/cvs.texinfo for details.
-
-* New developer communication features. See the "Watches" section of
-doc/cvs.texinfo for details.
-
-* RCS keyword "Name" supported for "cvs update -r " and "cvs
-checkout -r ".
-
-* If there is a group whose name matches a compiled in value which
-defaults to "cvsadmin", only members of that group can use "cvs
-admin". This replaces the CVS_NOADMIN option.
-
-* CVS now sets the modes of files in the repository based on the
-CVSUMASK environment variable or a compiled in value defaulting to
-002. This way other developers will be able to access the files in
-the repository regardless of the umask of the developer creating them.
-
-* The command names in .cvsrc now match the official name of the
-command, not the one (possibly an alias) by which it was invoked. If
-you had previously relied on "cvs di" and "cvs diff" using different
-options, instead use a shell function or alias (for example "alias
-cvsdi='cvs diff -u'"). You also can specify global CVS options (like
-"-z") using the command name "cvs".
-
-Changes from 1.5 to 1.6:
-
-* Del updated the man page to include all of the new features
-of CVS 1.6.
-
-* "cvs tag" now supports a "-r | -D" option for tagging an already
-tagged revision / specific revision of a file.
-
-* There is a "taginfo" file in CVSROOT that supports filtering and
-recording of tag operations.
-
-* Long options support added, including --help and --version options.
-
-* "cvs release" no longer cares whether or not the directory being
-released has an entry in the `modules' file.
-
-* The modules file now takes a -e option which is used instead of -o
-for "cvs export". If your modules file has a -o option which you want
-to be used for "cvs export", change it to specify -e as well as -o.
-
-* "cvs export" now takes a -k option to set RCS keyword expansion.
-This way you can export binary files. If you want the old behavior,
-you need to specify -kv.
-
-* "cvs update", "cvs rdiff", "cvs checkout", "cvs import", "cvs
-release", "cvs rtag", and "cvs tag" used to take -q and -Q options
-after the command name (e.g. "cvs update -q"). This was confusing
-because other commands, such as "cvs ci", did not. So the options
-after the command name have been removed and you must now specify, for
-example, "cvs -q update", which has been supported since CVS 1.3.
-
-* New "wrappers" feature. This allows you to set a hook which
-transforms files on their way in and out of cvs (apparently on the
-NeXT there is some particular usefulness in tarring things up in the
-repository). It also allows you to declare files as merge-by-copy
-which means that instead of trying to merge the file, CVS will merely
-copy the new version. There is a CVSROOT/cvswrappers file and an
-optionsl ~/.cvswrappers file to support this feature.
-
-* You can set CVSROOT to user@host:dir, not just host:dir, if your
-username on the server host is different than on the client host.
-
-* VISUAL is accepted as well as EDITOR.
-
-* $CVSROOT is expanded in *info files.
-
-Changes from 1.4A2 to 1.5:
-
-* Remote implementation. This is very helpful when collaborating on a
-project with someone across a wide-area network. This release can
-also be used locally, like other CVS versions, if you have no need for
-remote access.
-
-Here are some of the features of the remote implementation:
-- It uses reliable transport protocols (TCP/IP) for remote repository
- access, not NFS. NFS is unusable over long distances (and sometimes
- over short distances)
-- It transfers only those files that have changed in the repository or
- the working directory. To save transmission time, it will transfer
- patches when appropriate, and can compress data for transmission.
-- The server never holds CVS locks while waiting for a reply from the client;
- this makes the system robust when used over flaky networks.
-
-The remote features are documented in doc/cvsclient.texi in the CVS
-distribution, but the main doc file, cvs.texinfo, has not yet been
-updated to include the remote features.
-
-* Death support. See src/README-rm-add for more information on this.
-
-* Many speedups, especially from jtc@cygnus.com.
-
-* CVS 1.2 compatibility code has been removed as a speedup. If you
-have working directories checked out by CVS 1.2, CVS 1.3 or 1.4A2 will
-try to convert them, but CVS 1.5 and later will not (if the working
-directory is up to date and contains no extraneous files, you can just
-remove it, and then check out a new working directory). Likewise if
-your repository contains a CVSROOT.adm directory instead of a CVSROOT
-directory, you need to rename it.
-
-Fri Oct 21 20:58:54 1994 Brian Berliner
-
- * Changes between CVS 1.3 and CVS 1.4 Alpha-2
-
- * A new program, "cvsbug", is provided to let you send bug reports
- directly to the CVS maintainers. Please use it instead of sending
- mail to the info-cvs mailing list. If your build fails, you may
- have to invoke "cvsbug" directly from the "src" directory as
- "src/cvsbug.sh".
-
- * A new User's Guide and Tutorial, written by Per Cederqvist
- of Signum Support. See the "doc" directory. A
- PostScript version is included as "doc/cvs.ps".
-
- * The Frequesntly Asked Questions file, FAQ, has been added to the
- release. Unfortunately, its contents are likely out-of-date.
-
- * The "cvsinit" shell script is now installed in the $prefix/bin
- directory like the other programs. You can now create new
- CVS repositories with great ease.
-
- * Index: lines are now printed on output from 'diff' and 'rdiff',
- in order to facilitate application of patches to multiple subdirs.
-
- * Support for a ~/.cvsrc file, which allows you to specify options
- that are always supposed to be given to a specific command. This
- feature shows the non-orthogonality of the option set, since while
- there may be an option to turn something on, the option to turn
- that same thing off may not exist.
-
- * You can now list subdirectories that you wish to ignore in a
- modules listing, such as:
-
- gcc -a gnu/gcc, !gnu/gcc/testsuites
-
- which will check out everything underneath gnu/gcc, except
- everything underneath gnu/gcc/testsuites.
-
- * It is now much harder to accidentally overwrite an existing tag
- name, since attempting to move a tag name will result in a error,
- unless the -F (force) flag is given to the tag subcommands.
-
- * Better error checking on matching of the repository used to
- check code out from against the repository the current cvs
- commnands would use. (Thanks to Mark Baushke )
-
- * Better support for sites with multiple CVSROOT repositories has
- been contributed. The file "CVS/Root" in your working directory
- is created to hold the full path to the CVS repository and a
- simple check is made against your current CVSROOT setting.
-
- * You can now specify an RCS keyword substitution value when you
- import files into the repository.
-
- * Uses a much newer version of Autoconf, and conforms to the GNU
- coding standards much more closely. No, it still doesn't have
- long option names.
-
- * Code cleanup. Many passes through gcc -Wall helped to identify
- a number of questionable constructs. Most arbitrary length limits
- were removed.
-
- * Profiling to determine bottlenecks helped to identify the best
- places to spend time speeding up the code, which was then done. A
- number of performance enhancements in filename matching have sped
- up checkouts.
-
- * Many more contributions have been added to the "contrib"
- directory. See the README file in that directory for more
- information.
-
- * "cvs commit" will try harder to not change the file's
- modification time after the commit. If the file does not change
- as a result of the commit operation, CVS will preserve the
- original modification time, thus speeding up future make-type
- builds.
-
- * "cvs commit" now includes any removed files in the (optional)
- pre-commit checking program that may be invoked. Previously, only
- added and modified files were included.
-
- * It is now possible to commit a file directly onto the trunk at a
- specific revision level by doing "cvs commit -r3.0 file.c", where
- "3.0" specifies the revision you wish to create. The file must be
- up-to-date with the current head of the trunk for this to succeed.
-
- * "cvs commit" will now function with a pre-commit program that
- has arguments specified in the "commitinfo" file.
-
- * The "mkmodules" program will now look within the
- $CVSROOT/CVSROOT/checkoutlist" file for any additional files that
- should be automatically checked out within CVSROOT; mkmodules also
- tries harder to preserve any execute bits the files may have
- originally had.
-
- * "cvs diff" is much more accurate about its exit status now. It
- now returns the maximum exit status of any invoked diff.
-
- * The "-I !" option is now supported for the import and update
- commands correctly. It will properly clear the ignore list now.
-
- * Some problems with "cvs import" handling of .cvsignore have been
- fixed; as well, some rampant recursion problems with import have
- also been fixed.
-
- * "cvs rdiff" (aka "cvs patch") now tries to set the modify time
- of any temporary files it uses to match those specified for the
- particular revision. This allows a more accurate patch image to
- be created.
-
- * "cvs status" has improved revision descriptions. "Working
- revision" is used for the revision of the working file that you
- edit directly; "Repository revision" is the revision of the file
- with the $CVSROOT source repository. Also, the output is clearer
- with regard to sticky and branch revisions.
-
- * CVS no longer dumps core when given a mixture of directories and
- files in sub-directories (as in "cvs ci file1 dir1/file2").
- Instead, arguments are now clumped into their respective directory
- and operated on in chunks, together.
-
- * If the CVSEDITOR environment variable is set, that editor is
- used for log messages instead of the EDITOR environment variable.
- This makes it easy to substitute intelligent programs to make more
- elaborate log messages. Contributed by Mark D Baushke
- (mdb@cisco.com).
-
- * Command argument changes:
- cvs: The "-f" option has been added to ignore
- the ~/.cvsrc file.
- commit: Renamed the "-f logfile" option to the
- "-F logfile" option. Added the "-f"
- option to force a commit of the specified
- files (this disables recursion).
- history: Added "-t timezone" option to force any
- date-specific output into the specified
- timezone.
- import: Added "-d" option to use the file's
- modification time as the time of the
- import. Added "-k sub" option to set the
- default RCS keyword substitution mode for
- newly-created files.
- remove: Added "-f" option to force the file's
- automatic removal if it still exists in
- the working directory (use with caution).
- rtag: Added "-F" option to move the tag if it
- already exists -- new default is to NOT
- move tags automatically.
- tag: Added "-F" option to move the tag if it
- already exists -- new default is to NOT
- move tags automatically.
-
-Tue Apr 7 15:55:25 1992 Brian Berliner (berliner at sun.com)
-
- * Changes between CVS 1.3 Beta-3 and official CVS 1.3!
-
- * A new shell script is provided, "./cvsinit", which can be run at
- install time to help setup your $CVSROOT area. This can greatly
- ease your entry into CVS usage.
-
- * The INSTALL file has been updated to include the machines on
- which CVS has compiled successfully. I think CVS 1.3 is finally
- portable. Thanks to all the Beta testers!
-
- * Support for the "editinfo" file was contributed. This file
- (located in $CVSROOT/CVSROOT) can be used to specify a special
- "editor" to run on a per-directory basis within the repository,
- instead of the usual user's editor. As such, it can verify that
- the log message entered by the user is of the appropriate form
- (contains a bugid and test validation, for example).
-
- * The manual pages cvs(1) and cvs(5) have been updated.
-
- * The "mkmodules" command now informs you when your modules file
- has duplicate entries.
-
- * The "add" command now preserves any per-directory sticky tag when
- you add a new directory to your checked-out sources.
-
- * The "admin" command is now a fully recursive interface to the
- "rcs" program which operates on your checked-out sources. It no
- longer requires you to specify the full path to the RCS file.
-
- * The per-file sticky tags can now be effectively removed with
- "cvs update -A file", even if you had checked out the whole
- directory with a per-directory sticky tag. This allows a great
- deal of flexibility in managing the revisions that your checked-out
- sources are based upon (both per-directory and per-file sticky
- tags).
-
- * The "cvs -n commit" command now works, to show which files are
- out-of-date and will cause the real commit to fail, or which files
- will fail any pre-commit checks. Also, the "cvs -n import ..."
- command will now show you what it would've done without actually
- doing it.
-
- * Doing "cvs commit modules" to checkin the modules file will no
- properly run the "mkmodules" program (assuming you have setup your
- $CVSROOT/CVSROOT/modules file to do so).
-
- * The -t option in the modules file (which specifies a program to
- run when you do a "cvs rtag" operation on a module) now gets the
- symbolic tag as the second argument when invoked.
-
- * When the source repository is locked by another user, that user's
- login name will be displayed as the holder of the lock.
-
- * Doing "cvs checkout module/file.c" now works even if
- module/file.c is in the Attic (has been removed from main-line
- development).
-
- * Doing "cvs commit */Makefile" now works as one would expect.
- Rather than trying to commit everything recursively, it will now
- commit just the files specified.
-
- * The "cvs remove" command is now fully recursive. To schedule a
- file for removal, all you have to do is "rm file" and "cvs rm".
- With no arguments, "cvs rm" will schedule all files that have been
- physically removed for removal from the source repository at the
- next "cvs commit".
-
- * The "cvs tag" command now prints "T file" for each file that was
- tagged by this invocation and "D file" for each file that had the
- tag removed (as with "cvs tag -d").
-
- * The -a option has been added to "cvs rtag" to force it to clean
- up any old, matching tags for files that have been removed (in the
- Attic) that may not have been touched by this tag operation. This
- can help keep a consistent view with your tag, even if you re-use
- it frequently.
-
-Sat Feb 29 16:02:05 1992 Brian Berliner (berliner at sun.com)
-
- * Changes between CVS 1.3 Beta-2 and CVS 1.3 Beta-3
-
- * Many portability fixes, thanks to all the Beta testers! With any
- luck, this Beta release will compile correctly on most anything.
- Hey, what are we without our dreams.
-
- * CVS finally has support for doing isolated development on a
- branch off the current (or previous!) revisions. This is also
- extremely nice for generating patches for previously released
- software while development is progressing on the next release.
- Here's an example of creating a branch to fix a patch with the 2.0
- version of the "foo" module, even though we are already well into
- the 3.0 release. Do:
-
- % cvs rtag -b -rFOO_2_0 FOO_2_0_Patch foo
- % cvs checkout -rFOO_2_0_Patch foo
- % cd foo
- [[ hack away ]]
- % cvs commit
-
- A physical branch will be created in the RCS file only when you
- actually commit the change. As such, forking development at some
- random point in time is extremely light-weight -- requiring just a
- symbolic tag in each file until a commit is done. To fork
- development at the currently checked out sources, do:
-
- % cvs tag -b Personal_Hack
- % cvs update -rPersonal_Hack
- [[ hack away ]]
- % cvs commit
-
- Now, if you decide you want the changes made in the Personal_Hack
- branch to be merged in with other changes made in the main-line
- development, you could do:
-
- % cvs commit # to make Personal_Hack complete
- % cvs update -A # to update sources to main-line
- % cvs update -jPersonal_Hack # to merge Personal_Hack
-
- to update your checked-out sources, or:
-
- % cvs checkout -jPersonal_Hack module
-
- to checkout a fresh copy.
-
- To support this notion of forked development, CVS reserves
- all even-numbered branches for its own use. In addition, CVS
- reserves the ".0" and ".1" branches. So, if you intend to do your
- own branches by hand with RCS, you should use odd-numbered branches
- starting with ".3", as in "1.1.3", "1.1.5", 1.2.9", ....
-
- * The "cvs commit" command now supports a fully functional -r
- option, allowing you to commit your changes to a specific numeric
- revision or symbolic tag with full consistency checks. Numeric
- tags are useful for bringing your sources all up to some revision
- level:
-
- % cvs commit -r2.0
-
- For symbolic tags, you can only commit to a tag that references a
- branch in the RCS file. One created by "cvs rtag -b" or from
- "cvs tag -b" is appropriate (see below).
-
- * Roland Pesch and K. Richard Pixley
- were kind enough to contribute two new manual
- pages for CVS: cvs(1) and cvs(5). Most of the new CVS 1.3 features
- are now documented, with the exception of the new branch support
- added to commit/rtag/tag/checkout/update.
-
- * The -j options of checkout/update have been added. The "cvs join"
- command has been removed.
-
- With one -j option, CVS will merge the changes made between the
- resulting revision and the revision that it is based on (e.g., if
- the tag refers to a branch, CVS will merge all changes made in
- that branch into your working file).
-
- With two -j options, CVS will merge in the changes between the two
- respective revisions. This can be used to "remove" a certain delta
- from your working file. E.g., If the file foo.c is based on
- revision 1.6 and I want to remove the changes made between 1.3 and
- 1.5, I might do:
-
- % cvs update -j1.5 -j1.3 foo.c # note the order...
-
- In addition, each -j option can contain on optional date
- specification which, when used with branches, can limit the chosen
- revision to one within a specific date. An optional date is
- specified by adding a colon (:) to the tag, as in:
-
- -jSymbolic_Tag:Date_Specifier
-
- An example might be what "cvs import" tells you to do when you have
- just imported sources that have conflicts with local changes:
-
- % cvs checkout -jTAG:yesterday -jTAG module
-
- which tells CVS to merge in the changes made to the branch
- specified by TAG in the last 24 hours. If this is not what is
- intended, substitute "yesterday" for whatever format of date that
- is appropriate, like:
-
- % cvs checkout -jTAG:'1 week ago' -jTAG module
-
- * "cvs diff" now supports the special tags "BASE" and "HEAD". So,
- the command:
-
- % cvs diff -u -rBASE -rHEAD
-
- will effectively show the changes made by others (in unidiff
- format) that will be merged into your working sources with your
- next "cvs update" command. "-rBASE" resolves to the revision that
- your working file is based on. "-rHEAD" resolves to the current
- head of the branch or trunk that you are working on.
-
- * The -P option of "cvs checkout" now means to Prune empty
- directories, as with "update". The default is to not remove empty
- directories. However, if you do "checkout" with any -r options, -P
- will be implied. I.e., checking out with a tag will cause empty
- directories to be pruned automatically.
-
- * The new file INSTALL describes how to install CVS, including
- detailed descriptions of interfaces to "configure".
-
- * The example loginfo file in examples/loginfo has been updated to
- use the perl script included in contrib/log.pl. The nice thing
- about this log program is that it records the revision numbers of
- your change in the log message.
-
- Example files for commitinfo and rcsinfo are now included in the
- examples directory.
-
- * All "#if defined(__STDC__) && __STDC__ == 1" lines have been
- changed to be "#if __STDC__" to fix some problems with the former.
-
- * The lib/regex.[ch] files have been updated to the 1.3 release of
- the GNU regex package.
-
- * The ndbm emulation routines included with CVS 1.3 Beta-2 in the
- src/ndbm.[ch] files has been moved into the src/myndbm.[ch] files
- to avoid any conflict with the system header file. If
- you had a previous CVS 1.3 Beta release, you will want to "cvs
- remove ndbm.[ch]" form your copy of CVS as well.
-
- * "cvs add" and "cvs remove" are a bit more verbose, telling you
- what to do to add/remove your file permanently.
-
- * We no longer mess with /dev/tty in "commit" and "add".
-
- * More things are quiet with the -Q option set.
-
- * New src/config.h option: If CVS_BADROOT is set, CVS will not
- allow people really logged in as "root" to commit changes.
-
- * "cvs diff" exits with a status of 0 if there were no diffs, 1 if
- there were diffs, and 2 if there were errors.
-
- * "cvs -n diff" is now supported so that you can still run diffs
- even while in the middle of committing files.
-
- * Handling of the CVS/Entries file is now much more robust.
-
- * The default file ignore list now includes "*.so".
-
- * "cvs import" did not expand '@' in the log message correctly. It
- does now. Also, import now uses the ignore file facility
- correctly.
-
- Import will now tell you whether there were conflicts that need to
- be resolved, and how to resolve them.
-
- * "cvs log" has been changed so that you can "log" things that are
- not a part of the current release (in the Attic).
-
- * If you don't change the editor message on commit, CVS now prompts
- you with the choice:
-
- !)reuse this message unchanged for remaining dirs
-
- which allows you to tell CVS that you have no intention of changing
- the log message for the remainder of the commit.
-
- * It is no longer necessary to have CVSROOT set if you are using
- the -H option to get Usage information on the commands.
-
- * Command argument changes:
- checkout: -P handling changed as described above.
- New -j option (up to 2 can be specified)
- for doing rcsmerge kind of things on
- checkout.
- commit: -r option now supports committing to a
- numeric or symbolic tags, with some
- restrictions. Full consistency checks will
- be done.
- Added "-f logfile" option, which tells
- commit to glean the log message from the
- specified file, rather than invoking the
- editor.
- rtag: Added -b option to create a branch tag,
- useful for creating a patch for a previous
- release, or for forking development.
- tag: Added -b option to create a branch tag,
- useful for creating a patch for a previous
- release, or for forking development.
- update: New -j option (up to 2 can be specified)
- for doing rcsmerge kind of things on
- update.
-
-Thu Jan 9 10:51:35 MST 1992 Jeff Polk (polk at BSDI.COM)
-
- * Changes between CVS 1.3 Beta-1 and CVS 1.3 Beta-2
-
- * Thanks to K. Richard Pixley at Cygnus we now have function
- prototypes in all the files
-
- * Some small changes to configure for portability. There have
- been other portability problems submitted that have not been fixed
- (Brian will be working on those). Additionally all __STDC__
- tests have been modified to check __STDC__ against the constant 1
- (this is what the Second edition of K&R says must be true).
-
- * Lots of additional error checking for forked processes (run_exec)
- (thanks again to K. Richard Pixley)
-
- * Lots of miscellaneous bug fixes - including but certainly not
- limited to:
- various commit core dumps
- various update core dumps
- bogus results from status with numeric sticky tags
- commitprog used freed memory
- Entries file corruption caused by No_Difference
- commit to revision broken (now works if branch exists)
- ignore file processing broken for * and !
- ignore processing didn't handle memory reasonably
- miscellaneous bugs in the recursion processor
- file descriptor leak in ParseInfo
- CVSROOT.adm->CVSROOT rename bug
- lots of lint fixes
-
- * Reformatted all the code in src (with GNU indent) and then
- went back and fixed prototypes, etc since indent gets confused. The
- rationale is that it is better to do it sooner than later and now
- everything is consistent and will hopefully stay that way.
- The basic options to indent were: "-bad -bbb -bap -cdb -d0 -bl -bli0
- -nce -pcs -cs -cli4 -di1 -nbc -psl -lp -i4 -ip4 -c41" and then
- miscellaneous formatting fixes were applied. Note also that the
- "-nfc1" or "-nfca" may be appropriate in files where comments have
- been carefully formatted (e.g, modules.c).
-
-Sat Dec 14 20:35:22 1991 Brian Berliner (berliner at sun.com)
-
- * Changes between CVS 1.2 and CVS 1.3 Beta are described here.
-
- * Lots of portability work. CVS now uses the GNU "configure"
- script to dynamically determine the features provided by your
- system. It probably is not foolproof, but it is better than
- nothing. Please let me know of any portability problems. Some
- file names were changed to fit within 14-characters.
-
- * CVS has a new RCS parser that is much more flexible and
- extensible. It should read all known RCS ",v" format files.
-
- * Most of the commands now are fully recursive, rather than just
- operating on the current directory alone. This includes "commit",
- which makes it real easy to do an "atomic" commit of all the
- changes made to a CVS hierarchy of sources. Most of the commands
- also correctly handle file names that are in directories other than
- ".", including absolute path names. Commands now accept the "-R"
- option to force recursion on (though it is always the default now)
- and the "-l" option to force recursion off, doing just "." and not
- any sub-directories.
-
- * CVS supports many of the features provided with the RCS 5.x
- distribution - including the new "-k" keyword expansion options. I
- recommend using RCS 5.x (5.6 is the current official RCS version)
- and GNU diff 1.15 (or later) distributions with CVS.
-
- * Checking out files with symbolic tags/dates is now "sticky", in
- that CVS remembers the tag/date used for each file (and directory)
- and will use that tag/date automatically on the next "update" call.
- This stickyness also holds for files checked out with the the new
- RCS 5.x "-k" options.
-
- * The "cvs diff" command now recognizes all of the rcsdiff 5.x
- options. Unidiff format is available by installing the GNU
- diff 1.15 distribution.
-
- * The old "CVS.adm" directories created on checkout are now called
- "CVS" directories, to look more like "RCS" and "SCCS". Old CVS.adm
- directories are automagically converted to CVS directories. The
- old "CVSROOT.adm" directory within the source repository is
- automagically changed into a "CVSROOT" directory as well.
-
- * Symbolic links in the source repository are fully supported ONLY
- if you use RCS 5.6 or later and (of course) your system supports
- symlinks.
-
- * A history database has been contributed which maintains the
- history of certain CVS operations, as well as providing a wide array
- of querying options.
-
- * The "cvs" program has a "-n" option which can be used with the
- "update" command to show what would be updated without actually
- doing the update, like: "cvs -n update". All usage statements
- have been cleaned up and made more verbose.
-
- * The module database parsing has been rewritten. The new format
- is compatible with the old format, but with much more
- functionality. It allows modules to be created that grab pieces or
- whole directories from various different parts of your source
- repository. Module-relative specifications are also correctly
- recognized now, like "cvs checkout module/file.c".
-
- * A configurable template can be specified such that on a "commit",
- certain directories can supply a template that the user must fill
- before completing the commit operation.
-
- * A configurable pre-commit checking program can be specified which
- will run to verify that a "commit" can happen. This feature can be
- used to restrict certain users from changing certain pieces of the
- source repository, or denying commits to the entire source
- repository.
-
- * The new "cvs export" command is much like "checkout", but
- establishes defaults suitable for exporting code to others (expands
- out keywords, forces the use of a symbolic tag, and does not create
- "CVS" directories within the checked out sources.
-
- * The new "cvs import" command replaces the deprecated "checkin"
- shell script and is used to import sources into CVS control. It is
- also much faster for the first-time import. Some algorithmic
- improvements have also been made to reduce the number of
- conflicting files on next-time imports.
-
- * The new "cvs admin" command is basically an interface to the
- "rcs" program. (Not yet implemented very well).
-
- * Signal handling (on systems with BSD or POSIX signals) is much
- improved. Interrupting CVS now works with a single interrupt!
-
- * CVS now invokes RCS commands by direct fork/exec rather than
- calling system(3). This improves performance by removing a call to
- the shell to parse the arguments.
-
- * Support for the .cvsignore file has been contributed. CVS will
- now show "unknown" files as "? filename" as the result of an "update"
- command. The .cvsignore file can be used to add files to the
- current list of ignored files so that they won't show up as unknown.
-
- * Command argument changes:
- cvs: Added -l to turn off history logging.
- Added -n to show what would be done without actually
- doing anything.
- Added -q/-Q for quiet and really quiet settings.
- Added -t to show debugging trace.
- add: Added -k to allow RCS 5.x -k options to be specified.
- admin: New command; an interface to rcs(1).
- checkout: Added -A to reset sticky tags/date/options.
- Added -N to not shorten module paths.
- Added -R option to force recursion.
- Changed -p (prune empty directories) to -P option.
- Changed -f option; forcing tags match is now default.
- Added -p option to checkout module to standard output.
- Added -s option to cat the modules db with status.
- Added -d option to checkout in the specified directory.
- Added -k option to use RCS 5.x -k support.
- commit: Removed -a option; use -l instead.
- Removed -f option.
- Added -l option to disable recursion.
- Added -R option to force recursion.
- If no files specified, commit is recursive.
- diff: Now recognizes all RCS 5.x rcsdiff options.
- Added -l option to disable recursion.
- Added -R option to force recursion.
- history: New command; displays info about CVS usage.
- import: Replaces "checkin" shell script; imports sources
- under CVS control. Ignores files on the ignore
- list (see -I option or .cvsignore description above).
- export: New command; like "checkout", but w/special options
- turned on by default to facilitate exporting sources.
- join: Added -B option to join from base of the branch;
- join now defaults to only joining with the top two
- revisions on the branch.
- Added -k option for RCS 5.x -k support.
- log: Supports all RCS 5.x options.
- Added -l option to disable recursion.
- Added -R option to force recursion.
- patch: Changed -f option; forcing tags match is now default.
- Added -c option to force context-style diffs.
- Added -u option to support unidiff-style diffs.
- Added -V option to support RCS specific-version
- keyword expansion formats.
- Added -R option to force recursion.
- remove: No option changes. It's a bit more verbose.
- rtag: Equivalent to the old "cvs tag" command.
- No option changes. It's a lot faster for re-tag.
- status: New output formats with more information.
- Added -l option to disable recursion.
- Added -R option to force recursion.
- Added -v option to show symbolic tags for files.
- tag: Functionality changed to tag checked out files
- rather than modules; use "rtag" command to get the
- old "cvs tag" behaviour.
- update: Added -A to reset sticky tags/date/options.
- Changed -p (prune empty directories) to -P option.
- Changed -f option; forcing tags match is now default.
- Added -p option to checkout module to standard output.
- Added -I option to add files to the ignore list.
- Added -R option to force recursion.
-
- Major Contributors:
-
- * Jeff Polk rewrote most of the grody code of CVS
- 1.2. He made just about everything dynamic (by using malloc),
- added a generic hashed list manager, re-wrote the modules database
- parsing in a compatible - but extended way, generalized directory
- hierarchy recursion for virtually all the commands (including
- commit!), generalized the loginfo file to be used for pre-commit
- checks and commit templates, wrote a new and flexible RCS parser,
- fixed an uncountable number of bugs, and helped in the design of
- future CVS features. If there's anything gross left in CVS, it's
- probably my fault!
-
- * David G. Grubbs contributed the CVS "history" and
- "release" commands. As well as the ever-so-useful "-n" option of
- CVS which tells CVS to show what it would do, without actually
- doing it. He also contributed support for the .cvsignore file.
-
- * Paul Sander, HaL Computer Systems, Inc. wrote and
- contributed the code in lib/sighandle.c. I added support for
- POSIX, BSD, and non-POSIX/non-BSD systems.
-
- * Free Software Foundation contributed the "configure" script and
- other compatibility support in the "lib" directory, which will help
- make CVS much more portable.
-
- * Many others have contributed bug reports and enhancement requests.
- Some have even submitted actual code which I have not had time yet
- to integrate into CVS. Maybe for the next release.
-
- * Thanks to you all!
-
-Wed Feb 6 10:10:58 1991 Brian Berliner (berliner at sun.com)
-
- * Changes from CVS 1.0 Patchlevel 1 to CVS 1.0 Patchlevel 2; also
- known as "Changes from CVS 1.1 to CVS 1.2".
-
- * Major new support with this release is the ability to use the
- recently-posted RCS 5.5 distribution with CVS 1.2. See below for
- other assorted bug-fixes that have been thrown in.
-
- * ChangeLog (new): Added Emacs-style change-log file to CVS 1.2
- release. Chronological description of changes between release.
-
- * README: Small fixes to installation instructions. My email
- address is now "berliner@sun.com".
-
- * src/Makefile: Removed "rcstime.h". Removed "depend" rule.
-
- * src/partime.c: Updated to RCS 5.5 version with hooks for CVS.
- * src/maketime.c: Updated to RCS 5.5 version with hooks for CVS.
- * src/rcstime.h: Removed from the CVS 1.2 distribution.
- Thanks to Paul Eggert for these changes.
-
- * src/checkin.csh: Support for RCS 5.5 parsing.
- Thanks to Paul Eggert for this change.
-
- * src/collect_sets.c (Collect_Sets): Be quieter if "-f" option is
- specified. When checking out files on-top-of other files that CVS
- doesn't know about, run a diff in the hopes that they are really
- the same file before aborting.
-
- * src/commit.c (branch_number): Fix for RCS 5.5 parsing.
- Thanks to Paul Eggert for this change.
-
- * src/commit.c (do_editor): Bug fix - fprintf missing argument
- which sometimes caused core dumps.
-
- * src/modules.c (process_module): Properly NULL-terminate
- update_dir[] in all cases.
-
- * src/no_difference.c (No_Difference): The wrong RCS revision was
- being registered in certain (strange) cases.
-
- * src/patch.c (get_rcsdate): New algorithm. No need to call
- maketime() any longer.
- Thanks to Paul Eggert for this change.
-
- * src/patchlevel.h: Increased patch level to "2".
-
- * src/subr.c (isdir, islink): Changed to compare stat mode bits
- correctly.
-
- * src/tag.c (tag_file): Added support for following symbolic links
- that are in the master source repository when tagging. Made tag
- somewhat quieter in certain cases.
-
- * src/update.c (update_process_lists): Unlink the user's file if it
- was put on the Wlist, meaning that the user's file is not modified
- and its RCS file has been removed by someone else.
-
- * src/update.c (update): Support for "cvs update dir" to correctly
- just update the argument directory "dir".
-
- * src/cvs.h: Fixes for RCS 5.5 parsing.
- * src/version_number.c (Version_Number): Fixes for parsing RCS 5.5
- and older RCS-format files.
- Thanks to Paul Eggert for these changes.
-
- * src/version_number.c (Version_Number): Bug fixes for "-f" option.
- Bug fixes for parsing with certain branch numbers. RCS
- revision/symbol parsing is much more solid now.
-
-Wed Feb 14 10:01:33 1990 Brian Berliner (berliner at sun.com)
-
- * Changes from CVS 1.0 Patchlevel 0 to CVS 1.0 Patchlevel 1; also
- known as "Changes from CVS 1.0 to CVS 1.1".
-
- * src/patch.c (get_rcsdate): Portability fix. Replaced call to
- timelocal() with call to maketime().
-
-Mon Nov 19 23:15:11 1990 Brian Berliner (berliner at prisma.com)
-
- * Sent CVS 1.0 release to comp.sources.unix moderator and FSF.
-
- * Special thanks to Dick Grune for his work on the
- 1986 version of CVS and making it available to the world. Dick's
- version is available on uunet.uu.net in the
- comp.sources.unix/volume6/cvs directory.
Index: trunk/README
===================================================================
--- trunk/README (revision 13)
+++ trunk/README (nonexistent)
@@ -1 +0,0 @@
-/* accidently imported the vga_lcd module */
Index: trunk/current_6502core.zip
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: trunk/current_6502core.zip
===================================================================
--- trunk/current_6502core.zip (revision 13)
+++ trunk/current_6502core.zip (nonexistent)
trunk/current_6502core.zip
Property changes :
Deleted: svn:mime-type
## -1 +0,0 ##
-application/octet-stream
\ No newline at end of property
Index: trunk/root.bat
===================================================================
--- trunk/root.bat (revision 13)
+++ trunk/root.bat (nonexistent)
@@ -1,2 +0,0 @@
-
-rem
trunk/root.bat
Property changes :
Deleted: svn:executable
## -1 +0,0 ##
-*
\ No newline at end of property
Index: trunk/COPYING
===================================================================
--- trunk/COPYING (revision 13)
+++ trunk/COPYING (nonexistent)
@@ -1 +0,0 @@
-/*in subdir not used */
Index: trunk/documentation/readme.txt
===================================================================
--- trunk/documentation/readme.txt (revision 13)
+++ trunk/documentation/readme.txt (nonexistent)
@@ -1 +0,0 @@
-/* this file documents the 6502 addressing modes */
Index: trunk/NEWS
===================================================================
--- trunk/NEWS (revision 13)
+++ trunk/NEWS (nonexistent)
@@ -1 +0,0 @@
-/* updated contents */
Index: 6502vhdl/trunk/current_6502core.zip
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: 6502vhdl/trunk/current_6502core.zip
===================================================================
--- 6502vhdl/trunk/current_6502core.zip (nonexistent)
+++ 6502vhdl/trunk/current_6502core.zip (revision 14)
6502vhdl/trunk/current_6502core.zip
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: 6502vhdl/trunk/root.bat
===================================================================
--- 6502vhdl/trunk/root.bat (nonexistent)
+++ 6502vhdl/trunk/root.bat (revision 14)
@@ -0,0 +1,2 @@
+
+rem
6502vhdl/trunk/root.bat
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 6502vhdl/trunk/documentation/readme.txt
===================================================================
--- 6502vhdl/trunk/documentation/readme.txt (nonexistent)
+++ 6502vhdl/trunk/documentation/readme.txt (revision 14)
@@ -0,0 +1 @@
+/* this file documents the 6502 addressing modes */
Index: 6502vhdl/trunk/README
===================================================================
--- 6502vhdl/trunk/README (nonexistent)
+++ 6502vhdl/trunk/README (revision 14)
@@ -0,0 +1 @@
+/* accidently imported the vga_lcd module */
Index: 6502vhdl/trunk/NEWS
===================================================================
--- 6502vhdl/trunk/NEWS (nonexistent)
+++ 6502vhdl/trunk/NEWS (revision 14)
@@ -0,0 +1 @@
+/* updated contents */
Index: 6502vhdl/trunk/COPYING
===================================================================
--- 6502vhdl/trunk/COPYING (nonexistent)
+++ 6502vhdl/trunk/COPYING (revision 14)
@@ -0,0 +1 @@
+/*in subdir not used */
Index: 6502vhdl/trunk/a
===================================================================
Index: 6502vhdl/trunk
===================================================================
--- 6502vhdl/trunk (nonexistent)
+++ 6502vhdl/trunk (revision 14)
6502vhdl/trunk
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: 6502vhdl/web_uploads
===================================================================
--- 6502vhdl/web_uploads (nonexistent)
+++ 6502vhdl/web_uploads (revision 14)
6502vhdl/web_uploads
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: 6502vhdl/branches
===================================================================
--- 6502vhdl/branches (nonexistent)
+++ 6502vhdl/branches (revision 14)
6502vhdl/branches
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##
Index: 6502vhdl/tags/rel/new/6502vhdl/a
===================================================================
Index: 6502vhdl/tags/rel/new/6502vhdl/COPYING
===================================================================
--- 6502vhdl/tags/rel/new/6502vhdl/COPYING (nonexistent)
+++ 6502vhdl/tags/rel/new/6502vhdl/COPYING (revision 14)
@@ -0,0 +1 @@
+/*in subdir not used */
Index: 6502vhdl/tags/rel/new/6502vhdl/root.bat
===================================================================
--- 6502vhdl/tags/rel/new/6502vhdl/root.bat (nonexistent)
+++ 6502vhdl/tags/rel/new/6502vhdl/root.bat (revision 14)
@@ -0,0 +1,2 @@
+
+set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
6502vhdl/tags/rel/new/6502vhdl/root.bat
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 6502vhdl/tags/rel/new/6502vhdl/new/readme.txt
===================================================================
--- 6502vhdl/tags/rel/new/6502vhdl/new/readme.txt (nonexistent)
+++ 6502vhdl/tags/rel/new/6502vhdl/new/readme.txt (revision 14)
@@ -0,0 +1 @@
+simple readme.txt
Index: 6502vhdl/tags/rel/new/6502vhdl/NEWS
===================================================================
--- 6502vhdl/tags/rel/new/6502vhdl/NEWS (nonexistent)
+++ 6502vhdl/tags/rel/new/6502vhdl/NEWS (revision 14)
@@ -0,0 +1 @@
+/* updated contents */
Index: 6502vhdl/tags/rel/new/6502vhdl/README
===================================================================
--- 6502vhdl/tags/rel/new/6502vhdl/README (nonexistent)
+++ 6502vhdl/tags/rel/new/6502vhdl/README (revision 14)
@@ -0,0 +1 @@
+/* accidently imported the vga_lcd module */
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/a
===================================================================
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/COPYING
===================================================================
--- 6502vhdl/tags/rel/new/readme.txt/6502vhdl/COPYING (nonexistent)
+++ 6502vhdl/tags/rel/new/readme.txt/6502vhdl/COPYING (revision 14)
@@ -0,0 +1 @@
+/*in subdir not used */
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/root.bat
===================================================================
--- 6502vhdl/tags/rel/new/readme.txt/6502vhdl/root.bat (nonexistent)
+++ 6502vhdl/tags/rel/new/readme.txt/6502vhdl/root.bat (revision 14)
@@ -0,0 +1,2 @@
+
+set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
6502vhdl/tags/rel/new/readme.txt/6502vhdl/root.bat
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/new/readme.txt
===================================================================
--- 6502vhdl/tags/rel/new/readme.txt/6502vhdl/new/readme.txt (nonexistent)
+++ 6502vhdl/tags/rel/new/readme.txt/6502vhdl/new/readme.txt (revision 14)
@@ -0,0 +1 @@
+simple readme.txt
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/NEWS
===================================================================
--- 6502vhdl/tags/rel/new/readme.txt/6502vhdl/NEWS (nonexistent)
+++ 6502vhdl/tags/rel/new/readme.txt/6502vhdl/NEWS (revision 14)
@@ -0,0 +1 @@
+/* updated contents */
Index: 6502vhdl/tags/rel/new/readme.txt/6502vhdl/README
===================================================================
--- 6502vhdl/tags/rel/new/readme.txt/6502vhdl/README (nonexistent)
+++ 6502vhdl/tags/rel/new/readme.txt/6502vhdl/README (revision 14)
@@ -0,0 +1 @@
+/* accidently imported the vga_lcd module */
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_mast_model.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_mast_model.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_mast_model.v (revision 14)
@@ -0,0 +1,364 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE Master Model ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_mast_model.v,v 1.1.1.1 2003-12-22 07:54:41 huyvo Exp $
+//
+// $Date: 2003-12-22 07:54:41 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.2 2003/09/23 13:09:25 markom
+// all WB outputs are registered, but just when we dont use cursors
+//
+// Revision 1.1 2001/08/21 05:42:32 rudi
+//
+// - Changed Directory Structure
+// - Added verilog Source Code
+// - Changed IO pin names and defines statements
+//
+//
+//
+//
+
+`include "wb_model_defines.v"
+
+module wb_mast(clk, rst, adr, din, dout, cyc, stb, sel, we, ack, err, rty);
+
+input clk, rst;
+output [31:0] adr;
+input [31:0] din;
+output [31:0] dout;
+output cyc, stb;
+output [3:0] sel;
+output we;
+input ack, err, rty;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+reg [31:0] adr;
+reg [31:0] dout;
+reg cyc, stb;
+reg [3:0] sel;
+reg we;
+
+////////////////////////////////////////////////////////////////////
+//
+// Memory Logic
+//
+
+initial
+ begin
+ //adr = 32'hxxxx_xxxx;
+ //adr = 0;
+ adr = 32'hffff_ffff;
+ dout = 32'hxxxx_xxxx;
+ cyc = 0;
+ stb = 0;
+ sel = 4'hx;
+ we = 1'hx;
+ #1;
+ $display("\nINFO: WISHBONE MASTER MODEL INSTANTIATED (%m)\n");
+ end
+
+////////////////////////////////////////////////////////////////////
+//
+// Write 1 Word Task
+//
+
+task wb_wr1;
+input [31:0] a;
+input [3:0] s;
+input [31:0] d;
+
+begin
+@(posedge clk);
+#1;
+adr = a;
+dout = d;
+cyc = 1;
+stb = 1;
+we=1;
+sel = s;
+
+@(posedge clk);
+while(~ack) @(posedge clk);
+#1;
+cyc=0;
+stb=0;
+adr = 32'hxxxx_xxxx;
+dout = 32'hxxxx_xxxx;
+we = 1'hx;
+sel = 4'hx;
+
+//@(posedge clk);
+end
+endtask
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Write 4 Words Task
+//
+
+task wb_wr4;
+input [31:0] a;
+input [3:0] s;
+input delay;
+input [31:0] d1;
+input [31:0] d2;
+input [31:0] d3;
+input [31:0] d4;
+
+integer delay;
+
+begin
+
+@(posedge clk);
+#1;
+cyc = 1;
+sel = s;
+
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+adr = a;
+dout = d1;
+stb = 1;
+we=1;
+while(~ack) @(posedge clk);
+#2;
+stb=0;
+we=1'bx;
+dout = 32'hxxxx_xxxx;
+
+
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+stb=1;
+adr = a+4;
+dout = d2;
+we=1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+#2;
+stb=0;
+we=1'bx;
+dout = 32'hxxxx_xxxx;
+
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+stb=1;
+adr = a+8;
+dout = d3;
+we=1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+#2;
+stb=0;
+we=1'bx;
+dout = 32'hxxxx_xxxx;
+
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+stb=1;
+adr = a+12;
+dout = d4;
+we=1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+#1;
+stb=0;
+cyc=0;
+
+adr = 32'hxxxx_xxxx;
+dout = 32'hxxxx_xxxx;
+we = 1'hx;
+sel = 4'hx;
+
+end
+endtask
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Read 1 Word Task
+//
+
+task wb_rd1;
+input [31:0] a;
+input [3:0] s;
+output [31:0] d;
+
+begin
+
+@(posedge clk);
+#1;
+adr = a;
+cyc = 1;
+stb = 1;
+we = 0;
+sel = s;
+
+//@(posedge clk);
+while(~ack) @(posedge clk);
+d = din;
+#1;
+cyc=0;
+stb=0;
+//adr = 32'hxxxx_xxxx;
+//adr = 0;
+adr = 32'hffff_ffff;
+dout = 32'hxxxx_xxxx;
+we = 1'hx;
+sel = 4'hx;
+
+end
+endtask
+
+
+////////////////////////////////////////////////////////////////////
+//
+// Read 4 Words Task
+//
+
+
+task wb_rd4;
+input [31:0] a;
+input [3:0] s;
+input delay;
+output [31:0] d1;
+output [31:0] d2;
+output [31:0] d3;
+output [31:0] d4;
+
+integer delay;
+begin
+
+@(posedge clk);
+#1;
+cyc = 1;
+we = 0;
+sel = s;
+repeat(delay) @(posedge clk);
+
+adr = a;
+stb = 1;
+while(~ack) @(posedge clk);
+d1 = din;
+#2;
+stb=0;
+we = 1'hx;
+sel = 4'hx;
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+we = 0;
+sel = s;
+
+adr = a+4;
+stb = 1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+d2 = din;
+#2;
+stb=0;
+we = 1'hx;
+sel = 4'hx;
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+we = 0;
+sel = s;
+
+
+adr = a+8;
+stb = 1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+d3 = din;
+#2;
+stb=0;
+we = 1'hx;
+sel = 4'hx;
+repeat(delay)
+ begin
+ @(posedge clk);
+ #1;
+ end
+we = 0;
+sel = s;
+
+adr = a+12;
+stb = 1;
+@(posedge clk);
+while(~ack) @(posedge clk);
+d4 = din;
+#1;
+stb=0;
+cyc=0;
+we = 1'hx;
+sel = 4'hx;
+adr = 32'hffff_ffff;
+end
+endtask
+
+
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_slv_model.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_slv_model.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_slv_model.v (revision 14)
@@ -0,0 +1,173 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE Slave Model ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/vga_lcd/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_slv_model.v,v 1.1.1.1 2003-12-22 07:54:42 huyvo Exp $
+//
+// $Date: 2003-12-22 07:54:42 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2003/05/07 09:45:28 rherveille
+// Numerous updates and added checks
+//
+// Revision 1.2 2002/02/07 05:38:32 rherveille
+// Added wb_ack delay section to testbench
+//
+// Revision 1.1 2001/08/21 05:42:32 rudi
+//
+// - Changed Directory Structure
+// - Added verilog Source Code
+// - Changed IO pin names and defines statements
+//
+//
+//
+//
+
+`include "wb_model_defines.v"
+
+module wb_slv(clk, rst, adr, din, dout, cyc, stb, sel, we, ack, err, rty);
+
+input clk, rst;
+input [31:0] adr, din;
+output [31:0] dout;
+input cyc, stb;
+input [3:0] sel;
+input we;
+output ack, err, rty;
+
+////////////////////////////////////////////////////////////////////
+//
+// Local Wires
+//
+
+parameter mem_size = 13;
+parameter sz = (1<9000)
+ begin
+ $display("\n\n*************************************\n");
+ $display("ERROR: Watch Dog Counter Expired\n");
+ $display("*************************************\n\n\n");
+ $finish;
+ end
+
+
+always @(posedge int)
+ if(int_warn)
+ begin
+ $display("\n\n*************************************\n");
+ $display("WARNING: Recieved Interrupt (%0t)", $time);
+ $display("*************************************\n\n\n");
+ end
+
+always #2.4 clk = ~clk;
+always #(PCLK_C/2) pclk_i = ~pclk_i;
+
+/////////////////////////////////////////////////////////////////////
+//
+// WISHBONE VGA/LCD IP Core
+//
+
+
+// Module Prototype
+
+`ifdef VGA_12BIT_DVI
+vga_dvi_top #(1'b0, LINE_FIFO_AWIDTH) u0 (
+`else
+vga_enh_top #(1'b0, LINE_FIFO_AWIDTH) u0 (
+`endif
+ .wb_clk_i ( clk ),
+ .wb_rst_i ( 1'b0 ),
+ .rst_i ( rst ),
+ .wb_inta_o ( int ),
+
+ //-- slave signals
+ .wbs_adr_i ( wb_addr_i[11:0] ),
+ .wbs_dat_i ( wb_data_i ),
+ .wbs_dat_o ( wb_data_o ),
+ .wbs_sel_i ( wb_sel_i ),
+ .wbs_we_i ( wb_we_i ),
+ .wbs_stb_i ( wb_stb_i ),
+ .wbs_cyc_i ( wb_cyc_i ),
+ .wbs_ack_o ( wb_ack_o ),
+ .wbs_rty_o ( wb_rty_o ),
+ .wbs_err_o ( wb_err_o ),
+
+ //-- master signals
+ .wbm_adr_o ( wb_addr_o[31:0] ),
+ .wbm_dat_i ( wbm_data_i ),
+ .wbm_sel_o ( wb_sel_o ),
+ .wbm_we_o ( wb_we_o ),
+ .wbm_stb_o ( wb_stb_o ),
+ .wbm_cyc_o ( wb_cyc_o ),
+ .wbm_cti_o ( wb_cti_o ),
+ .wbm_bte_o ( wb_bte_o ),
+ .wbm_ack_i ( wb_ack_i ),
+ .wbm_err_i ( wb_err_i ),
+
+ //-- VGA signals
+ .clk_p_i ( pclk_i )
+ `ifdef VGA_24BIT_DVI
+ , .dvi_hsync_o ( ihsync ),
+ .dvi_vsync_o ( ivsync ),
+ .dvi_de_o ( dvi_de_o ),
+ .dvi_d_o ( dvi_d_o )
+ `endif
+ `ifdef VGA_12BIT_DVI
+ `else
+ , .hsync_pad_o ( hsync ),
+ .vsync_pad_o ( vsync ),
+ .csync_pad_o ( csync ),
+ .blank_pad_o ( blanc ),
+ .r_pad_o ( red ),
+ .g_pad_o ( green ),
+ .b_pad_o ( blue )
+ `endif
+
+ `ifdef VGA_BIST
+ /* BIST signals */
+ , .scanb_rst(1'b1),
+ .scanb_clk(1'b0),
+ .scanb_si (1'b0),
+ .scanb_en (1'b0),
+ .scanb_so ()
+ `endif
+ );
+
+assign pclk = pclk_i;
+
+`ifdef VGA_12BIT_DVI
+assign hsync = !ihsync;
+assign vsync = !ivsync;
+`endif
+
+wb_mast m0( .clk( clk ),
+ .rst( rst ),
+ .adr( wb_addr_i ),
+ .din( wb_data_o ),
+ .dout( wb_data_i ),
+ .cyc( wb_cyc_i ),
+ .stb( wb_stb_i ),
+ .sel( wb_sel_i ),
+ .we( wb_we_i ),
+ .ack( wb_ack_o ),
+ .err( wb_err_o ),
+ .rty( 1'b0 )
+ );
+
+wb_slv #(24) s0(.clk( clk ),
+ .rst( rst ),
+ .adr( {1'b0, wb_addr_o[30:0]} ),
+ .din( 32'h0 ),
+ .dout( wbm_data_i ),
+ .cyc( wb_cyc_o ),
+ .stb( wb_stb_o ),
+ .sel( wb_sel_o ),
+ .we( wb_we_o ),
+ .ack( wb_ack_i ),
+ .err( wb_err_i ),
+ .rty( )
+ );
+
+`include "tests.v"
+
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/tests.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/tests.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/tests.v (revision 14)
@@ -0,0 +1,1554 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Tests Library ////
+//// ////
+//// ////
+//// Authors: Rudolf Usselmann, Richard Herveille ////
+//// rudi@asics.ws, richard@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/vga_lcd/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: tests.v,v 1.1.1.1 2003-12-22 07:54:40 huyvo Exp $
+//
+// $Date: 2003-12-22 07:54:40 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.10 2003/09/23 13:09:25 markom
+// all WB outputs are registered, but just when we dont use cursors
+//
+// Revision 1.9 2003/08/22 07:17:21 rherveille
+// Removed ctrl register's clut and vide bank switch from the register test. As they get reset automatically. This may result to erroneous errors.
+//
+// Revision 1.8 2003/05/07 14:39:19 rherveille
+// Added DVI tests
+//
+// Revision 1.7 2003/05/07 09:45:28 rherveille
+// Numerous updates and added checks
+//
+// Revision 1.6 2003/03/19 12:20:53 rherveille
+// Changed timing section in VGA core, changed testbench accordingly.
+// Fixed bug in 'timing check' test.
+//
+// Revision 1.5 2002/04/20 09:57:55 rherveille
+// Changed testbench to reflect modified VGA timing generator.
+//
+//
+//
+//
+//
+
+
+task show_errors;
+
+begin
+
+$display("\n");
+$display(" +--------------------+");
+$display(" | Total ERRORS: %0d |", error_cnt);
+$display(" +--------------------+");
+
+end
+endtask
+
+
+task reg_test;
+
+reg [31:0] data;
+reg [31:0] pattern;
+integer n;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** Register Test ***");
+$display("*****************************************************\n");
+
+ // Check reset Values
+ $display("Testing Reset Values ...");
+ check( `CTRL, 0, 32'h0000_ffff, "CTRL ");
+ check( `STAT, 0, 32'h0000_0073, "STAT ");
+ check( `HTIM, 0, 32'hffff_ffff, "HTIM ");
+ check( `VTIM, 0, 32'hffff_ffff, "VTIM ");
+ check( `HVLEN, 0, 32'hffff_ffff, "HVLEN");
+ check( `VBARA, 0, 32'hffff_ffff, "VBARA");
+ check( `VBARB, 0, 32'hffff_ffff, "VBARB");
+
+ $display("Testing Pattern R/W ...");
+for(n=0;n<6;n=n+1)
+ begin
+ case(n)
+ 0: pattern = 32'h0000_0000;
+ 1: pattern = 32'hffff_ffff;
+ 2: pattern = 32'haaaa_aaaa;
+ 3: pattern = 32'h5555_5555;
+ 4: pattern = 32'hcccc_cccc;
+ 5: pattern = 32'h3333_3333;
+ endcase
+
+ m0.wb_wr1( `CTRL, 4'hf, pattern );
+ check( `CTRL, pattern, 32'hffff_ff9f, "CTRL ");
+
+ m0.wb_wr1( `HTIM, 4'hf, pattern );
+ check( `HTIM, pattern, 32'hffff_ffff, "HTIM ");
+
+ m0.wb_wr1( `VTIM, 4'hf, pattern );
+ check( `VTIM, pattern, 32'hffff_ffff, "VTIM ");
+
+ m0.wb_wr1( `HVLEN, 4'hf, pattern );
+ check( `HVLEN, pattern, 32'hffff_ffff, "HVLEN");
+
+ m0.wb_wr1( `VBARA, 4'hf, pattern );
+ check( `VBARA, pattern, 32'hffff_fffc, "VBARA");
+
+ m0.wb_wr1( `VBARB, 4'hf, pattern );
+ check( `VBARB, pattern, 32'hffff_fffc, "VBARB");
+
+ end
+
+repeat(10) @(posedge clk);
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+end
+endtask
+
+
+
+task check;
+input [31:0] addr;
+input [31:0] edata;
+input [31:0] mask;
+input [39:0] name;
+
+reg [31:0] data;
+begin
+
+m0.wb_rd1( addr, 4'hf, data );
+if(( (data & mask) != (edata & mask)) | ((^data) === 1'bx) )
+ begin
+ $display("ERROR: %s Reg: Value Mismatch. Expected %h, Got %h (%0t)",
+ name, edata & mask, data, $time);
+ error_cnt = error_cnt + 1;
+ end
+
+end
+endtask
+
+
+
+
+task tim_test;
+
+integer mode;
+
+begin
+$display("\n\n");
+$display("*****************************************************");
+$display("*** Timing Test ***");
+$display("*****************************************************\n");
+
+ s0.fill_mem(0);
+
+ repeat(10) @(posedge clk);
+
+ m0.wb_wr1( `VBARA, 4'hf, 0 );
+ m0.wb_wr1( `VBARB, 4'hf, 0 );
+
+mode = 2;
+for(mode=0;mode<6;mode=mode+1)
+ begin
+
+ // reset core
+ scen = 0;
+ m0.wb_wr1( `CTRL, 4'hf, 32'h0000_0000);
+ repeat(10) @(posedge clk);
+
+ $display("Mode: %0d", mode);
+
+ case(mode)
+ 0:
+ begin
+ thsync = 0;
+ thgdel = 0;
+ thgate = 319; // gate = 320
+ thlen = 345;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 239; // vgate = 240
+ tvlen = 245;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+ end
+
+ 1:
+ begin
+ thsync = 18;
+ thgdel = 18;
+ thgate = 319; // gate = 320
+ thlen = 390;
+
+ tvsync = 18;
+ tvgdel = 18;
+ tvgate = 239; // vgate = 240
+ tvlen = 290;
+
+ hpol = 1;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+ end
+
+ 2:
+ begin
+ thsync = 1;
+ thgdel = 1;
+ thgate = 639; // hgate = 640
+ thlen = 644;
+
+ tvsync = 1;
+ tvgdel = 1;
+ tvgate = 479; // vgate = 480
+ tvlen = 484;
+
+ hpol = 0;
+ vpol = 1;
+ cpol = 0;
+ bpol = 0;
+ end
+
+ 3:
+ begin
+ thsync = 0;
+ thgdel = 2;
+ thgate = 799; // hgate = 800
+ thlen = 804;
+
+ tvsync = 0;
+ tvgdel = 2;
+ tvgate = 599; // vgate = 600
+ tvlen = 604;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 1;
+ bpol = 0;
+ end
+
+ 4:
+ begin
+ thsync = 3;
+ thgdel = 2;
+ thgate = 799; // hgate = 800
+ thlen = 807;
+
+ tvsync = 2;
+ tvgdel = 2;
+ tvgate = 599; // vgate = 600
+ tvlen = 606;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 1;
+ end
+
+ 5:
+ begin
+ thsync = 6;
+ thgdel = 2;
+ thgate = 799; // hgate = 800
+ thlen = 810;
+
+ tvsync = 4;
+ tvgdel = 2;
+ tvgate = 599; // vgate = 600
+ tvlen = 608;
+
+ hpol = 1;
+ vpol = 1;
+ cpol = 1;
+ bpol = 1;
+ end
+ endcase
+
+/*
+ thsync = 0;
+ thgdel = 0;
+ thgate = 64;
+ thlen = 70;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 64;
+ tvlen = 70;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+*/
+
+
+ m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
+ m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
+ m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 16'h0,
+ bpol, cpol,
+ vpol, hpol,
+ 1'b0, // PC
+ 2'h0, // CD
+ 2'h0, // VBL
+ 2'h0, // Reserved
+ 5'h01 // Bank Switch, INT, VideoEn
+ });
+
+ repeat(2) @(posedge vsync);
+ scen = 1;
+ repeat(4) @(posedge vsync);
+ end
+
+scen = 0;
+repeat(10) @(posedge clk);
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+end
+endtask
+
+
+
+
+task pd1_test;
+
+integer mode;
+integer n, p, l;
+reg [31:0] pn;
+reg [31:0] pra, paa, tmp;
+reg [23:0] pd;
+reg [ 1:0] cd;
+reg pc;
+reg [31:0] data;
+reg [31:0] cbar;
+reg [ 7:0] vbl;
+reg [ 5:0] delay;
+
+begin
+
+$display("\n\n");
+$display("*****************************************************");
+$display("*** Pixel Data Test 1 ***");
+$display("*****************************************************\n");
+
+ m0.wb_wr1( `VBARA, 4'hf, 0 );
+ m0.wb_wr1( `VBARB, 4'hf, 123456 );
+
+ cbar = 32'h0000_0800;
+
+ thsync = 0;
+ thgdel = 0;
+ thgate = 320;
+ thlen = 345;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 240;
+ tvlen = 245;
+
+ thsync = 39;
+ thgdel = 124;
+ thgate = 646;
+ thlen = 832;
+
+ tvsync = 2;
+ tvgdel = 25;
+ tvgate = 484;
+ tvlen = 520;
+
+ thsync = 6;
+ thgdel = 20;
+ thgate = 319;
+ thlen = 390;
+
+ tvsync = 1;
+ tvgdel = 8;
+ tvgate = 239;
+ tvlen = 280;
+
+/*
+ thsync = 0;
+ thgdel = 0;
+ thgate = 63;
+ thlen = 70;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 32;
+ tvlen = 36;
+
+ thsync = 119;
+ thgdel = 61;
+ thgate = 805;
+ thlen = 1038;
+
+ tvsync = 5;
+ tvgdel = 20;
+ tvgate = 600;
+ tvlen = 665;
+
+*/
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+
+ m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
+ m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
+ m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
+
+mode = 3;
+vbl = 1;
+delay = 1;
+
+for(delay=0;delay<6;delay=delay+1)
+ begin
+ s0.set_delay(delay);
+for(vbl=0;vbl<4;vbl=vbl+1)
+for(mode=0;mode<4;mode=mode+1)
+ begin
+ // -------------------------------
+ // Turn Off VGA before Mode Change
+
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 16'h0, // Reserved
+ bpol, cpol,
+ vpol, hpol,
+ pc, // 1'b0, // PC
+ cd, // 2'h2, // CD
+ 2'h0, // VBL
+ 1'b0, // CBSWE
+ 1'b0, // VBSWE
+ 1'b0, // CBSIE
+ 1'b0, // VBSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b0 // Video Enable
+ });
+
+ s0.fill_mem(1);
+
+ `ifdef USE_VC
+ // Fill internal Color Lookup Table
+ repeat(10) @(posedge clk);
+ for(n=0;n<512;n=n+1)
+ begin
+ //m0.wb_rd1( 32'h0002_0000 + (n*4), 4'hf, data );
+ data = s0.mem[ cbar[31:2] + n];
+ m0.wb_wr1( 32'h0000_0800 + (n*4), 4'hf, data );
+ end
+ repeat(10) @(posedge clk);
+ `endif
+
+ case(mode)
+ 0:
+ begin
+ cd = 2'h2;
+ pc = 1'b0;
+ end
+ 1:
+ begin
+ cd = 2'h0;
+ pc = 1'b0;
+ end
+ 2:
+ begin
+ cd = 2'h0;
+ pc = 1'b1;
+ end
+ 3:
+ begin
+ cd = 2'h1;
+ pc = 1'b0;
+ end
+ endcase
+
+ //repeat(50) @(posedge clk);
+
+ // -------------------------------
+ // Turn VGA back On ...
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 16'h0, // Reserved
+ bpol, cpol,
+ vpol, hpol,
+ pc, // 1'b0, // PC
+ cd, // 2'h2, // CD
+ vbl[1:0], // VBL
+ 1'b0, // Reserved
+ 1'b0, // CBSWE
+ 1'b0, // VBSWE
+ 1'b0, // BSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b1 // Video Enable
+ });
+
+ $display("VBL: %0d, Mode: %0d", vbl, mode);
+ repeat(2) @(posedge vsync);
+
+ // For Each Line
+ for(l=0;l 10) $stop;
+ end
+
+ @(posedge pclk);
+
+ end
+ end end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+end
+endtask
+
+
+
+task pd2_test;
+
+integer mode;
+integer p, l;
+reg [31:0] pn;
+reg [31:0] pra, paa, tmp;
+reg [23:0] pd;
+reg [ 1:0] cd;
+reg pc;
+reg [31:0] cbar;
+reg [31:0] vbase;
+reg [31:0] cbase;
+reg [31:0] vbara;
+reg [31:0] vbarb;
+reg [ 7:0] bank, vbl;
+reg [ 5:0] delay;
+
+begin
+
+$display("\n\n");
+$display("*****************************************************");
+$display("*** Pixel Data Test 2 ***");
+$display("*****************************************************\n");
+
+ s0.fill_mem(1);
+
+ repeat(10) @(posedge clk);
+
+ vbara = 32'h0000_0000;
+ vbarb = 32'h0040_0000;
+ cbar = 32'h0000_0800;
+
+ m0.wb_wr1( `VBARA, 4'hf, vbara );
+ m0.wb_wr1( `VBARB, 4'hf, vbarb );
+
+ thsync = 6;
+ thgdel = 20;
+ thgate = 319;
+ thlen = 390;
+
+ tvsync = 1;
+ tvgdel = 8;
+ tvgate = 239;
+// tvgate = 240;
+ tvlen = 280;
+
+/*
+ thsync = 0;
+ thgdel = 0;
+ thgate = 63;
+ thlen = 70;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 32;
+ tvlen = 36;
+
+*/
+
+/*
+ thsync = 39;
+ thgdel = 124;
+ thgate = 645;
+ thlen = 832;
+
+ tvsync = 2;
+ tvgdel = 25;
+ tvgate = 483;
+ tvlen = 520;
+*/
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+
+ m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
+ m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
+ m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
+
+
+`ifdef USE_VC
+// Fill internal Color Lookup Table
+repeat(10) @(posedge clk);
+for(n=0;n<512;n=n+1)
+ begin
+ //m0.wb_rd1( 32'h0002_0000 + (n*4), 4'hf, data );
+ data = s0.mem[ cbar[31:2] + n];
+ m0.wb_wr1( 32'h0000_0800 + (n*4), 4'hf, data );
+ end
+repeat(10) @(posedge clk);
+`endif
+
+
+vbl = 3;
+mode = 3;
+delay = 2;
+
+for(delay=0;delay<6;delay=delay+1)
+ begin
+ s0.set_delay(delay);
+for(vbl=0;vbl<4;vbl=vbl+1)
+for(mode=0;mode<=4;mode=mode+1)
+ begin
+
+ m0.wb_wr1( `CTRL, 4'hf, 32'h0);
+ repeat(100) @(posedge clk);
+
+ case(mode)
+ 0:
+ begin
+ cd = 2'h2;
+ pc = 1'b0;
+ end
+
+ 1:
+ begin
+ cd = 2'h0;
+ pc = 1'b0;
+ end
+
+ 2:
+ begin
+ cd = 2'h0;
+ pc = 1'b1;
+ end
+
+ 3:
+ begin
+ cd = 2'h1;
+ pc = 1'b0;
+ end
+
+ 4:
+ begin
+ cd = 2'h3;
+ pc = 1'b0;
+ end
+ endcase
+
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 16'h0, // Reserved
+ bpol, cpol,
+ vpol, hpol,
+ pc, // 1'b0, // PC
+ cd, // 2'h2, // CD
+ vbl[1:0],// VBL
+ 1'b1, // CBSWE
+ 1'b1, // VBSWE
+ 1'b0, // CBSIE
+ 1'b0, // VBSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b1 // Video Enable
+ }
+ );
+
+bank = 0;
+
+//for(bank=0;bank<3;bank=bank+1)
+for(bank=0;bank<2;bank=bank+1)
+ begin
+
+ $display("VBL: %0d, Mode: %0d Screen: %0d", vbl, mode, bank);
+ @(posedge vsync);
+
+ error_cnt=0;
+ // For Each Line
+ for(l=0; l 10) $stop;
+ end
+
+ @(posedge pclk);
+
+ end
+ end
+end end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+end
+endtask
+
+
+
+task ur_test;
+
+integer mode;
+integer n, p, l;
+reg [31:0] pn;
+reg [31:0] pra, paa, tmp;
+reg [23:0] pd;
+reg [1:0] cd;
+reg pc;
+reg [31:0] cbar;
+reg [31:0] data;
+reg [7:0] vbl;
+
+begin
+
+$display("\n\n");
+$display("*****************************************************");
+$display("*** FIFO Underrun Test 1 ***");
+$display("*****************************************************\n");
+
+ s0.delay=15;
+ int_warn = 0;
+
+ m0.wb_wr1( `VBARA, 4'hf, 0 );
+ m0.wb_wr1( `VBARB, 4'hf, 123456 );
+
+ cbar = 32'h0000_0800;
+
+ thsync = 6;
+ thgdel = 20;
+ thgate = 319;
+ thlen = 390;
+
+ tvsync = 1;
+ tvgdel = 8;
+ tvgate = 239;
+ tvlen = 280;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+
+ m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
+ m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
+ m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
+
+ mode = 0;
+
+ // -------------------------------
+ // Turn Off VGA before Mode Change
+
+ m0.wb_wr1( `CTRL, 4'hf, 32'h0000_0000);
+
+ s0.fill_mem(1);
+
+`ifdef USE_VC
+// Fill internal Color Lookup Table
+repeat(10) @(posedge clk);
+for(n=0;n<512;n=n+1)
+ begin
+ //m0.wb_rd1( 32'h0002_0000 + (n*4), 4'hf, data );
+ data = s0.mem[ cbar[31:2] + n];
+ m0.wb_wr1( 32'h0000_0800 + (n*4), 4'hf, data );
+ end
+repeat(10) @(posedge clk);
+`endif
+
+ case(mode)
+ 0:
+ begin
+ cd = 2'h2;
+ pc = 1'b0;
+ end
+ 1:
+ begin
+ cd = 2'h0;
+ pc = 1'b0;
+ end
+ 2:
+ begin
+ cd = 2'h0;
+ pc = 1'b1;
+ end
+ 3:
+ begin
+ cd = 2'h1;
+ pc = 1'b0;
+ end
+ endcase
+
+ // -------------------------------
+ // Turn VGA back On ...
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 16'h0, // Reserved
+ bpol, cpol,
+ vpol, hpol,
+ pc, // 1'b0, // PC
+ cd, // 2'h2, // CD
+ 2'b00, // VBL
+ 1'b0, // Reserved
+ 1'b0, // CBSWE
+ 1'b0, // VBSWE
+ 1'b0, // BSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b1 // Video Enable
+ });
+
+ while(!int) @(posedge clk);
+ m0.wb_rd1( `STAT, 4'hf, data);
+ if(data[1] !== 1'b1)
+ begin
+ $display("ERROR: Did not get Line FIFO Interrupt. (%0t)",
+ $time);
+ end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+m0.wb_wr1( `CTRL, 4'hf, 32'h0000_0000);
+int_warn = 1;
+s0.delay=1;
+repeat(10) @(posedge clk);
+
+end
+endtask
+
+
+//////////////////////////////////////
+//
+// DVI test section
+//
+
+
+task dvi_pd_test;
+
+integer mode;
+integer n, p, l;
+reg [ 2:0] dvi_odf;
+reg [31:0] pn;
+reg [31:0] pra, paa, tmp;
+reg [23:0] pd;
+reg [11:0] pda, pdb;
+reg [ 1:0] cd;
+reg pc;
+reg [31:0] data;
+reg [31:0] cbar;
+reg [ 7:0] vbl;
+reg [ 5:0] delay;
+
+begin
+
+$display("\n\n");
+$display("*****************************************************");
+$display("*** DVI Pixel Data Test ***");
+$display("*****************************************************\n");
+
+ m0.wb_wr1( `VBARA, 4'hf, 0 );
+ m0.wb_wr1( `VBARB, 4'hf, 123456 );
+
+ cbar = 32'h0000_0800;
+
+ thsync = 0;
+ thgdel = 0;
+ thgate = 320;
+ thlen = 345;
+
+ tvsync = 0;
+ tvgdel = 0;
+ tvgate = 240;
+ tvlen = 245;
+
+ thsync = 39;
+ thgdel = 124;
+ thgate = 646;
+ thlen = 832;
+
+ tvsync = 2;
+ tvgdel = 25;
+ tvgate = 484;
+ tvlen = 520;
+
+ thsync = 6;
+ thgdel = 20;
+ thgate = 319;
+ thlen = 390;
+
+ tvsync = 1;
+ tvgdel = 8;
+ tvgate = 239;
+ tvlen = 280;
+
+ hpol = 0;
+ vpol = 0;
+ cpol = 0;
+ bpol = 0;
+
+ m0.wb_wr1( `HTIM, 4'hf, {thsync, thgdel, thgate} );
+ m0.wb_wr1( `VTIM, 4'hf, {tvsync, tvgdel, tvgate} );
+ m0.wb_wr1( `HVLEN, 4'hf, {thlen, tvlen} );
+
+// Choose mode, vbl, and delay
+// These should have been tested & verified by previous tests
+mode = 3;
+vbl = 4;
+delay = 0;
+s0.set_delay(delay);
+
+for(dvi_odf=0; dvi_odf<4;dvi_odf=dvi_odf +1)
+ begin
+ // -------------------------------
+ // Turn Off VGA before Mode Change
+
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 2'h0, // Reserved
+ dvi_odf[1:0],
+ 12'h0, // Reserved
+ bpol,
+ cpol,
+ vpol,
+ hpol,
+ pc, // PC
+ cd, // CD
+ 2'h0, // VBL
+ 1'b0, // CBSWE
+ 1'b0, // VBSWE
+ 1'b0, // CBSIE
+ 1'b0, // VBSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b0 // Video Enable
+ });
+
+ s0.fill_mem(1);
+
+ `ifdef USE_VC
+ // Fill internal Color Lookup Table
+ repeat(10) @(posedge clk);
+ for(n=0;n<512;n=n+1)
+ begin
+ //m0.wb_rd1( 32'h0002_0000 + (n*4), 4'hf, data );
+ data = s0.mem[ cbar[31:2] + n];
+ m0.wb_wr1( 32'h0000_0800 + (n*4), 4'hf, data );
+ end
+ repeat(10) @(posedge clk);
+ `endif
+
+ case(mode)
+ 0:
+ begin
+ cd = 2'h2;
+ pc = 1'b0;
+ end
+ 1:
+ begin
+ cd = 2'h0;
+ pc = 1'b0;
+ end
+ 2:
+ begin
+ cd = 2'h0;
+ pc = 1'b1;
+ end
+ 3:
+ begin
+ cd = 2'h1;
+ pc = 1'b0;
+ end
+ endcase
+
+ //repeat(50) @(posedge clk);
+
+ // -------------------------------
+ // Turn VGA back On ...
+ m0.wb_wr1( `CTRL, 4'hf, {
+ 2'h0, // Reserved
+ dvi_odf[1:0],
+ 12'h0, // Reserved
+ bpol,
+ cpol,
+ vpol,
+ hpol,
+ pc, // PC
+ cd, // CD
+ 2'h0, // VBL
+ 1'b0, // CBSWE
+ 1'b0, // VBSWE
+ 1'b0, // CBSIE
+ 1'b0, // VBSIE
+ 1'b0, // HIE
+ 1'b0, // VIE
+ 1'b1 // Video Enable
+ });
+
+ $display("DVI output data format: %0h", dvi_odf);
+ repeat(2) @(posedge vsync);
+
+ // For Each Line
+ for(l=0;l 10) $stop;
+ end
+
+ @(negedge pclk_i);
+
+ // falling edge data
+ if (pdb !== dvi_d_o)
+ begin
+ $display("ERROR: Pixel Data Mismatch: Expected: %h, Got: %h",
+ pdb, dvi_d_o);
+ $display(" pixel=%0d, line=%0d, (%0t)",p,l,$time);
+ error_cnt = error_cnt + 1;
+ if(error_cnt > 10) $stop;
+ end
+ @(posedge pclk_i);
+`else
+
+ // compare data
+ if ({pdb, pda} !== dvi_d_o)
+ begin
+ $display("ERROR: Pixel Data Mismatch: Expected: %h, Got: %h",
+ {pdb, pda}, dvi_d_o);
+ $display(" pixel=%0d, line=%0d, (%0t)",p,l,$time);
+ error_cnt = error_cnt + 1;
+ if(error_cnt > 10) $stop;
+ end
+
+ @(negedge pclk_i);
+ @(posedge pclk_i);
+`endif
+ end
+ end
+
+show_errors;
+$display("*****************************************************");
+$display("*** Test DONE ... ***");
+$display("*****************************************************\n\n");
+
+end
+endtask
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_model_defines.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_model_defines.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_model_defines.v (revision 14)
@@ -0,0 +1,67 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE Model Definitions ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/wb_dma/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: wb_model_defines.v,v 1.1.1.1 2003-12-22 07:54:41 huyvo Exp $
+//
+// $Date: 2003-12-22 07:54:41 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.2 2003/03/19 12:20:53 rherveille
+// Changed timing section in VGA core, changed testbench accordingly.
+// Fixed bug in 'timing check' test.
+//
+// Revision 1.1 2001/08/21 05:42:32 rudi
+//
+// - Changed Directory Structure
+// - Added verilog Source Code
+// - Changed IO pin names and defines statements
+//
+// Revision 1.1.1.1 2001/03/19 13:12:48 rudi
+// Initial Release
+//
+//
+//
+
+`timescale 1ns / 10ps
+//`timescale 1ns / 1ns
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/sync_check.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/sync_check.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/sync_check.v (revision 14)
@@ -0,0 +1,237 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Top Level Test Bench ////
+//// ////
+//// ////
+//// Author: Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/vga_lcd/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Rudolf Usselmann ////
+//// rudi@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: sync_check.v,v 1.1.1.1 2003-12-22 07:54:39 huyvo Exp $
+//
+// $Date: 2003-12-22 07:54:39 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.5 2003/09/23 13:09:25 markom
+// all WB outputs are registered, but just when we dont use cursors
+//
+// Revision 1.4 2003/05/07 09:45:28 rherveille
+// Numerous updates and added checks
+//
+// Revision 1.3 2003/03/19 12:20:53 rherveille
+// Changed timing section in VGA core, changed testbench accordingly.
+// Fixed bug in 'timing check' test.
+//
+// Revision 1.2 2001/11/15 07:04:15 rherveille
+// Updated testbench for VGA/LCD Core version 2.0
+//
+//
+//
+//
+//
+
+`timescale 1ns / 10ps
+`include "vga_defines.v"
+
+module sync_check( pclk, rst, enable, hsync, vsync, csync, blanc,
+ hpol, vpol, cpol, bpol,
+ thsync, thgdel, thgate, thlen,
+ tvsync, tvgdel, tvgate, tvlen);
+
+input pclk, rst, enable, hsync, vsync, csync, blanc;
+input hpol, vpol, cpol, bpol;
+input [7:0] thsync, thgdel;
+input [15:0] thgate, thlen;
+input [7:0] tvsync, tvgdel;
+input [15:0] tvgate, tvlen;
+
+
+time last_htime;
+reg hvalid;
+time htime;
+time hhtime;
+
+time last_vtime;
+reg vvalid;
+time vtime;
+time vhtime;
+
+wire [31:0] htime_exp;
+wire [31:0] hhtime_exp;
+wire [31:0] vtime_exp;
+wire [31:0] vhtime_exp;
+
+wire hcheck;
+wire vcheck;
+
+wire [31:0] bh_start;
+wire [31:0] bh_end;
+wire [31:0] bv_start;
+wire [31:0] bv_end;
+
+integer bdel1;
+reg bval1;
+reg bval;
+integer bdel2;
+wire bcheck;
+
+//initial hvalid=0;
+//initial vvalid=0;
+
+parameter clk_time = 40;
+
+assign hcheck = enable;
+assign vcheck = enable;
+assign hhtime_exp = (thsync +1) * clk_time;
+assign htime_exp = (thlen +1) * clk_time;
+assign vhtime_exp = (htime_exp * (tvsync +1));
+assign vtime_exp = htime_exp * (tvlen +1);
+
+always @(posedge pclk)
+ if(!rst | !enable)
+ begin
+ hvalid = 0;
+ vvalid = 0;
+ end
+
+// Verify HSYNC Timing
+always @(hsync)
+ if(hcheck)
+ begin
+ if(hsync == ~hpol)
+ begin
+ htime = $time - last_htime;
+ //if(hvalid) $display("HSYNC length time: %0t", htime);
+ if(hvalid & (htime != htime_exp))
+ $display("HSYNC length ERROR: Expected: %0d Got: %0d (%0t)",
+ htime_exp, htime, $time);
+ last_htime = $time;
+ hvalid = 1;
+ end
+
+ if(hsync == hpol)
+ begin
+ hhtime = $time - last_htime;
+ //if(hvalid) $display("HSYNC pulse time: %0t", hhtime);
+ if(hvalid & (hhtime != hhtime_exp))
+ $display("HSYNC Pulse ERROR: Expected: %0d Got: %0d (%0t)",
+ hhtime_exp, hhtime, $time);
+ end
+ end
+
+
+// Verify VSYNC Timing
+always @(vsync)
+ if(vcheck)
+ begin
+ if(vsync == ~vpol)
+ begin
+ vtime = $time - last_vtime;
+ //if(vvalid) $display("VSYNC length time: %0t", vtime);
+ if(vvalid & (vtime != vtime_exp))
+ $display("VSYNC length ERROR: Expected: %0d Got: %0d (%0t)",
+ vtime_exp, vtime, $time);
+ last_vtime = $time;
+ vvalid = 1;
+ end
+
+ if(vsync == vpol)
+ begin
+ vhtime = $time - last_vtime;
+ //if(vvalid) $display("VSYNC pulse time: %0t", vhtime);
+ if(vvalid & (vhtime != vhtime_exp))
+ $display("VSYNC Pulse ERROR: Expected: %0d Got: %0d (%0t)",
+ vhtime_exp, vhtime, $time);
+ end
+ end
+
+`ifdef VGA_12BIT_DVI
+`else
+// Verify BLANC Timing
+//assign bv_start = tvsync + tvgdel + 2;
+//assign bv_end = bv_start + tvgate + 2;
+
+//assign bh_start = thsync + thgdel + 1;
+//assign bh_end = bh_start + thgate + 2;
+assign bv_start = tvsync + tvgdel + 1;
+assign bv_end = bv_start + tvgate + 2;
+
+assign bh_start = thsync + thgdel + 1;
+assign bh_end = bh_start + thgate + 2;
+
+assign bcheck = enable;
+
+always @(vsync)
+ if(vsync == ~vpol)
+ bdel1 = 0;
+
+always @(hsync)
+ if(hsync == ~hpol)
+ bdel1 = bdel1 + 1;
+
+always @(bdel1)
+ bval1 = (bdel1 > bv_start) & (bdel1 < bv_end);
+
+always @(hsync)
+ if(hsync == ~hpol)
+ bdel2 = 0;
+
+always @(posedge pclk)
+ bdel2 = bdel2 + 1;
+
+initial bval = 1;
+always @(bdel2)
+ bval = #1 !(bval1 & (bdel2 > bh_start) & (bdel2 < bh_end));
+
+always @(bval or blanc)
+ #0.01
+ if(enable)
+ if(( (blanc ^ bpol) != bval) & bcheck)
+ $display("BLANK ERROR: Expected: %0d Got: %0d (%0t)",
+ bval, (blanc ^ bpol), $time);
+
+// verify CSYNC
+always @(csync or vsync or hsync)
+ if(enable)
+ if( (csync ^ cpol) != ( (vsync ^ vpol) | (hsync ^ hpol) ) )
+ $display("CSYNC ERROR: Expected: %0d Got: %0d (%0t)",
+ ( (vsync ^ vpol) | (hsync ^ hpol) ), (csync ^ cpol), $time);
+`endif
+
+endmodule
+
Index: 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_b3_check.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_b3_check.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/bench/verilog/wb_b3_check.v (revision 14)
@@ -0,0 +1,199 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE revB.3 Registered Feedback Cycle checker ////
+//// ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@ascis.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/cores/vga_lcd/ ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2003 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+module wb_b3_check (clk_i, cyc_i, stb_i, we_i, cti_i, bte_i, ack_i, err_i, rty_i);
+
+input clk_i;
+input cyc_i;
+input stb_i;
+input [2:0] cti_i;
+input [1:0] bte_i;
+input we_i;
+input ack_i;
+input err_i;
+input rty_i;
+
+
+parameter [2:0] cti_classic = 3'b000;
+parameter [2:0] cti_streaming = 3'b001;
+parameter [2:0] cti_inc_burst = 3'b010;
+parameter [2:0] cti_eob = 3'b111;
+
+// check CTI, BTE
+reg [2:0] pcti; // previous cti
+reg [1:0] pbte; // previous bte
+reg pwe; // previous we
+reg chk;
+
+integer wb_b3_err;
+
+initial
+begin
+ chk = 0;
+ wb_b3_err = 0;
+
+ $display ("**********************************************");
+ $display ("** **");
+ $display ("** WISBONE RevB.3 sanity check instantiated **");
+ $display ("** (C) 2003 Richard Herveille **");
+ $display ("** **");
+ $display ("**********************************************");
+end
+
+
+always @(posedge clk_i)
+ begin
+ pcti <= #1 cti_i;
+ pbte <= #1 bte_i;
+ pwe <= #1 we_i;
+ end
+
+
+always @(posedge clk_i)
+ if (cyc_i) begin
+ chk <= #1 1'b1;
+ end else
+ chk <= #1 1'b0;
+
+
+
+//
+// Check CTI_I
+always @(cti_i)
+ if (chk)
+ if (cyc_i) begin
+ if (ack_i)
+ case (cti_i)
+ cti_eob: ; // ok
+
+ default:
+ if ( (cti_i !== pcti) && (pcti !== cti_eob) ) begin
+ $display("\nWISHBONE revB.3 Burst error. CTI change from %b to %b not allowed. (%t)\n",
+ pcti, cti_i, $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ endcase
+ else
+ if ( (cti_i !== pcti) && (pcti !== cti_eob) ) begin
+ $display("\nWISHBONE revB.3 Burst error. Illegal CTI change during burst transfer. (%t)\n",
+ $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ end else
+ case (pcti)
+ cti_classic: ; //ok
+ cti_eob: ; // ok
+
+ default: begin
+ $display("\nWISHBONE revB.3 Burst error. Cycle negated without EOB (CTI=%b). (%t)\n",
+ pcti, $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ endcase
+
+
+//
+// Check BTE_I
+always @(bte_i)
+ if (chk & cyc_i)
+ if (ack_i) begin
+ if ( (pcti !== cti_eob) && (bte_i !== pbte) ) begin
+ $display("\nWISHBONE revB.3 Burst ERROR. BTE change from %b to %b not allowed. (%t)\n",
+ pbte, bte_i, $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ end else begin
+ $display("\nWISHBONE revB.3 Burst error. Illegal BTE change in burst cycle. (%t)\n",
+ $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+
+//
+// Check WE_I
+always @(we_i)
+ if (chk & cyc_i & stb_i)
+ if (ack_i) begin
+ if ( (pcti !== cti_eob) && (we_i !== pwe)) begin
+ $display("\nWISHBONE revB.3 Burst ERROR. WE change from %b to %b not allowed. (%t)\n",
+ pwe, we_i, $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ end else begin
+ $display("\nWISHBONE revB.3 Burst error. Illegal WE change in burst cycle. (%t)\n",
+ $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+
+
+
+//
+// Check ACK_I, ERR_I, RTY_I
+always @(posedge clk_i)
+if (cyc_i & stb_i)
+ case ({ack_i, err_i, rty_i})
+ 3'b000: ;
+ 3'b001: ;
+ 3'b010: ;
+ 3'b100: ;
+
+ default: begin
+ $display("\n WISHBONE revB.3 ERROR. Either ack(%0b), rty(%0b), or err(%0b) may be asserted. (%t)",
+ ack_i, rty_i, err_i, $time);
+
+ wb_b3_err = wb_b3_err +1;
+ end
+ endcase
+
+//
+// check errors
+always @(wb_b3_err)
+ if (chk && (wb_b3_err > 10) ) begin
+ $display ("**********************************************");
+ $display ("** **");
+ $display ("** More than 10 WISBONE RevB.3 errors found **");
+ $display ("** Simulation stopped **");
+ $display ("** **");
+ $display ("**********************************************");
+ $stop;
+ end
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_vtim.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_vtim.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_vtim.v (revision 14)
@@ -0,0 +1,179 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE rev.B2 compliant VGA/LCD Core; Timing Generator ////
+//// Video Timing Generator ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/projects/vga_lcd ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: vga_vtim.v,v 1.1.1.1 2003-12-22 07:56:45 huyvo Exp $
+//
+// $Date: 2003-12-22 07:56:45 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.8 2003/05/07 09:48:54 rherveille
+// Fixed some Wishbone RevB.3 related bugs.
+// Changed layout of the core. Blocks are located more logically now.
+// Started work on a dual clocked/double edge 12bit output. Commonly used by external devices like DVI transmitters.
+//
+// Revision 1.7 2003/03/19 12:50:45 rherveille
+// Changed timing generator; made it smaller and easier.
+//
+// Revision 1.6 2002/04/20 10:02:39 rherveille
+// Changed video timing generator.
+// Changed wishbone master vertical gate count code.
+// Fixed a potential bug in the wishbone slave (cursor color register readout).
+//
+// Revision 1.5 2002/01/28 03:47:16 rherveille
+// Changed counter-library.
+// Changed vga-core.
+// Added 32bpp mode.
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+
+module vga_vtim(clk, ena, rst, Tsync, Tgdel, Tgate, Tlen, Sync, Gate, Done);
+ // inputs & outputs
+ input clk; // master clock
+ input ena; // count enable
+ input rst; // synchronous active high reset
+
+ input [ 7:0] Tsync; // sync duration
+ input [ 7:0] Tgdel; // gate delay
+ input [15:0] Tgate; // gate length
+ input [15:0] Tlen; // line time / frame time
+
+ output Sync; // synchronization pulse
+ output Gate; // gate
+ output Done; // done with line/frame
+ reg Sync;
+ reg Gate;
+ reg Done;
+
+ //
+ // module body
+ //
+
+ // generate timing statemachine
+ reg [15:0] cnt, cnt_len;
+ wire [16:0] cnt_nxt, cnt_len_nxt;
+ wire cnt_done, cnt_len_done;
+
+ assign cnt_nxt = {1'b0, cnt} -17'h1;
+ assign cnt_done = cnt_nxt[16];
+
+ assign cnt_len_nxt = {1'b0, cnt_len} -17'h1;
+ assign cnt_len_done = cnt_len_nxt[16];
+
+ reg [4:0] state;
+ parameter [4:0] idle_state = 5'b00001;
+ parameter [4:0] sync_state = 5'b00010;
+ parameter [4:0] gdel_state = 5'b00100;
+ parameter [4:0] gate_state = 5'b01000;
+ parameter [4:0] len_state = 5'b10000;
+
+ always @(posedge clk)
+ if (rst)
+ begin
+ state <= #1 idle_state;
+ cnt <= #1 16'h0;
+ cnt_len <= #1 16'b0;
+ Sync <= #1 1'b0;
+ Gate <= #1 1'b0;
+ Done <= #1 1'b0;
+ end
+ else if (ena)
+ begin
+ cnt <= #1 cnt_nxt[15:0];
+ cnt_len <= #1 cnt_len_nxt[15:0];
+
+ Done <= #1 1'b0;
+
+ case (state) // synopsys full_case parallel_case
+ idle_state:
+ begin
+ state <= #1 sync_state;
+ cnt <= #1 Tsync;
+ cnt_len <= #1 Tlen;
+
+ Sync <= #1 1'b1;
+ end
+
+ sync_state:
+ if (cnt_done)
+ begin
+ state <= #1 gdel_state;
+ cnt <= #1 Tgdel;
+
+ Sync <= #1 1'b0;
+ end
+
+ gdel_state:
+ if (cnt_done)
+ begin
+ state <= #1 gate_state;
+ cnt <= #1 Tgate;
+
+ Gate <= #1 1'b1;
+ end
+
+ gate_state:
+ if (cnt_done)
+ begin
+ state <= #1 len_state;
+
+ Gate <= #1 1'b0;
+ end
+
+ len_state:
+ if (cnt_len_done)
+ begin
+ state <= #1 sync_state;
+ cnt <= #1 Tsync;
+ cnt_len <= #1 Tlen;
+
+ Sync <= #1 1'b1;
+ Done <= #1 1'b1;
+ end
+
+ endcase
+ end
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_spram.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_spram.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_spram.v (revision 14)
@@ -0,0 +1,410 @@
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Generic Single-Port Synchronous RAM ////
+//// ////
+//// This file is part of memory library available from ////
+//// http://www.opencores.org/cvsweb.shtml/generic_memories/ ////
+//// ////
+//// Description ////
+//// This block is a wrapper with common single-port ////
+//// synchronous memory interface for different ////
+//// types of ASIC and FPGA RAMs. Beside universal memory ////
+//// interface it also provides a behavioral model of generic ////
+//// single-port synchronous RAM. ////
+//// It also contains a synthesizeable model for FPGAs. ////
+//// It should be used in all OPENCORES designs that want to be ////
+//// portable accross different target technologies and ////
+//// independent of target memory. ////
+//// ////
+//// Supported ASIC RAMs are: ////
+//// - Artisan Single-Port Sync RAM ////
+//// - Avant! Two-Port Sync RAM (*) ////
+//// - Virage Single-Port Sync RAM ////
+//// - Virtual Silicon Single-Port Sync RAM ////
+//// ////
+//// Supported FPGA RAMs are: ////
+//// - Generic FPGA (VENDOR_FPGA) ////
+//// Tested RAMs: Altera, Xilinx ////
+//// Synthesis tools: LeonardoSpectrum, Synplicity ////
+//// - Xilinx (VENDOR_XILINX) ////
+//// - Altera (VENDOR_ALTERA) ////
+//// ////
+//// To Do: ////
+//// - fix avant! two-port ram ////
+//// - add additional RAMs ////
+//// ////
+//// Author(s): ////
+//// - Richard Herveille, richard@asics.ws ////
+//// - Damjan Lampret, lampret@opencores.org ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source is distributed in the hope that it will be ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
+//// PURPOSE. See the GNU Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//
+// CVS Revision History
+//
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2003/03/18 21:45:48 rherveille
+// Added WISHBONE revB.3 Registered Feedback Cycles support
+//
+//
+//
+
+`include "timescale.v"
+
+//`define VENDOR_XILINX
+//`define VENDOR_ALTERA
+`define VENDOR_FPGA
+
+module generic_spram(
+ // Generic synchronous single-port RAM interface
+ clk, rst, ce, we, oe, addr, di, do
+);
+
+ //
+ // Default address and data buses width
+ //
+ parameter aw = 6; //number of address-bits
+ parameter dw = 8; //number of data-bits
+
+ //
+ // Generic synchronous single-port RAM interface
+ //
+ input clk; // Clock, rising edge
+ input rst; // Reset, active high
+ input ce; // Chip enable input, active high
+ input we; // Write enable input, active high
+ input oe; // Output enable input, active high
+ input [aw-1:0] addr; // address bus inputs
+ input [dw-1:0] di; // input data bus
+ output [dw-1:0] do; // output data bus
+
+ //
+ // Module body
+ //
+
+`ifdef VENDOR_FPGA
+ //
+ // Instantiation synthesizeable FPGA memory
+ //
+ // This code has been tested using LeonardoSpectrum and Synplicity.
+ // The code correctly instantiates Altera EABs and Xilinx BlockRAMs.
+ //
+
+ // NOTE:
+ // 'synthesis syn_ramstyle="block_ram"' is a Synplify attribute.
+ // It instructs Synplify to map to BlockRAMs instead of the default SelectRAMs
+
+ reg [dw-1:0] mem [(1<> 2; // 8bpp, 4 pixels per cycle
+ 2'b01: hgate_cnt <= #1 Thgate >> 1; // 16bpp, 2 pixels per cycle
+ 2'b10: hgate_cnt <= #1 Thgate >> 2; // 24bpp, 4/3 pixels per cycle
+ 2'b11: hgate_cnt <= #1 Thgate; // 32bpp, 1 pixel per cycle
+ endcase
+
+ hgate_div_cnt <= 2'b10;
+ end
+ else if (vmem_ack)
+ if (hdone)
+ begin
+ case(ctrl_cd) // synopsys full_case parallel_case
+ 2'b00: hgate_cnt <= #1 Thgate >> 2; // 8bpp, 4 pixels per cycle
+ 2'b01: hgate_cnt <= #1 Thgate >> 1; // 16bpp, 2 pixels per cycle
+ 2'b10: hgate_cnt <= #1 Thgate >> 2; // 24bpp, 4/3 pixels per cycle
+ 2'b11: hgate_cnt <= #1 Thgate; // 32bpp, 1 pixel per cycle
+ endcase
+
+ hgate_div_cnt <= 2'b10;
+ end
+ else //if (vmem_ack)
+ begin
+ hgate_cnt <= #1 hgate_cnt_val[15:0];
+
+ if ( hgate_div_val[2] )
+ hgate_div_cnt <= #1 2'b10;
+ else
+ hgate_div_cnt <= #1 hgate_div_val[1:0];
+ end
+
+ // vgate counter
+ reg [15:0] vgate_cnt;
+ wire [16:0] vgate_cnt_val;
+ wire vdone;
+
+ assign vgate_cnt_val = {1'b0, vgate_cnt} - 17'h1;
+ assign vdone = vgate_cnt_val[16];
+
+ always @(posedge clk_i)
+ if (sclr | ImDoneStrb)
+ vgate_cnt <= #1 Tvgate;
+ else if (hdone)
+ vgate_cnt <= #1 vgate_cnt_val[15:0];
+
+ assign ImDone = hdone & vdone;
+
+ assign ImDoneStrb = ImDone & !dImDone;
+
+ always @(posedge clk_i)
+ begin
+ dImDone <= #1 ImDone;
+ dImDoneStrb <= #1 ImDoneStrb;
+ end
+
+ //
+ // generate addresses
+ //
+
+ // select video memory base address
+ always @(posedge clk_i)
+ if (sclr | dImDoneStrb)
+ if (!sel_VBA)
+ vmemA <= #1 VBAa;
+ else
+ vmemA <= #1 VBAb;
+ else if (vmem_ack)
+ vmemA <= #1 vmemA +30'h1;
+
+
+ ////////////////////////////////////
+ // hardware cursor signals section
+ //
+ always @(posedge clk_i)
+ if (ImDone)
+ cur_acc_sel <= #1 ld_cursor0; // cursor0 has highest priority
+
+ always @(posedge clk_i)
+ if (sclr)
+ begin
+ ld_cursor0 <= #1 1'b0;
+ ld_cursor1 <= #1 1'b0;
+ end
+ else
+ begin
+ ld_cursor0 <= #1 cursor0_ld | (ld_cursor0 & !(cur_done & cur_acc_sel));
+ ld_cursor1 <= #1 cursor1_ld | (ld_cursor1 & !(cur_done & !cur_acc_sel));
+ end
+
+ // select cursor base address
+ always @(posedge clk_i)
+ if (!cur_acc)
+ cursor_ba <= #1 ld_cursor0 ? cursor0_ba : cursor1_ba;
+
+ // generate pattern offset
+ wire [9:0] next_cursor_adr = {1'b0, cursor_adr} + 10'h1;
+ assign cur_done = next_cursor_adr[9] & cur_ack;
+
+ always @(posedge clk_i)
+ if (!cur_acc)
+ cursor_adr <= #1 9'h0;
+ else if (cur_ack)
+ cursor_adr <= #1 next_cursor_adr;
+
+ // generate cursor buffers write enable signals
+ assign cursor1_we = cur_ack & !cur_acc_sel;
+ assign cursor0_we = cur_ack & cur_acc_sel;
+
+
+ //////////////////////////////
+ // generate wishbone signals
+ //
+ assign adr_o = cur_acc ? {cursor_ba, cursor_adr, 2'b00} : {vmemA, 2'b00};
+ wire wb_cycle = vmem_acc & !(burst_done & vmem_ack & !vmem_req) & !ImDone ||
+ cur_acc & !cur_done;
+
+ always @(posedge clk_i or negedge nrst_i)
+ if (!nrst_i)
+ begin
+ cyc_o <= #1 1'b0;
+ stb_o <= #1 1'b0;
+ sel_o <= #1 4'b1111;
+ cti_o <= #1 3'b000;
+ bte_o <= #1 2'b00;
+ we_o <= #1 1'b0;
+ end
+ else
+ if (rst_i)
+ begin
+ cyc_o <= #1 1'b0;
+ stb_o <= #1 1'b0;
+ sel_o <= #1 4'b1111;
+ cti_o <= #1 3'b000;
+ bte_o <= #1 2'b00;
+ we_o <= #1 1'b0;
+ end
+ else
+ begin
+ cyc_o <= #1 wb_cycle;
+ stb_o <= #1 wb_cycle;
+ sel_o <= #1 4'b1111; // only 32bit accesses are supported
+
+ if (wb_cycle) begin
+ if (cur_acc)
+ cti_o <= #1 &next_cursor_adr[8:0] ? 3'b111 : 3'b010;
+ else if (ctrl_vbl == 2'b00)
+ cti_o <= #1 3'b000;
+ else if (vmem_ack)
+ cti_o <= #1 (burst_cnt == 3'h1) ? 3'b111 : 3'b010;
+ end else
+ cti_o <= #1 (ctrl_vbl == 2'b00) ? 3'b000 : 3'b010;
+
+ bte_o <= #1 2'b00; // linear burst
+ we_o <= #1 1'b0; // read only
+ end
+
+ //
+ // video-data buffer (temporary store data read from video memory)
+ wire [4:0] fb_data_fifo_nword;
+// wire fb_data_fifo_full;
+
+ vga_fifo #(4, 32) data_fifo (
+ .clk ( clk_i ),
+ .aclr ( 1'b1 ),
+ .sclr ( sclr ),
+ .d ( dat_i ),
+ .wreq ( vmem_ack ),
+ .q ( fb_data_fifo_q ),
+ .rreq ( fb_data_fifo_rreq ),
+ .nword ( fb_data_fifo_nword ),
+ .empty ( fb_data_fifo_empty ),
+ .full ( ),//fb_data_fifo_full ),
+ .aempty ( ),
+ .afull ( )
+ );
+
+ assign vmem_req = ~fb_data_fifo_nword[4] & ~fb_data_fifo_nword[3];
+
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_fifo_dc.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_fifo_dc.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_fifo_dc.v (revision 14)
@@ -0,0 +1,234 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE rev.B2 compliant VGA/LCD Core; Dual Clocked Fifo ////
+//// ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/projects/vga_lcd ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: vga_fifo_dc.v,v 1.1.1.1 2003-12-22 07:56:43 huyvo Exp $
+//
+// $Date: 2003-12-22 07:56:43 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.6 2003/08/01 11:46:38 rherveille
+// 1) Rewrote vga_fifo_dc. It now uses gray codes and a more elaborate anti-metastability scheme.
+// 2) Changed top level and pixel generator to reflect changes in the fifo.
+// 3) Changed a bug in vga_fifo.
+// 4) Changed pixel generator and wishbone master to reflect changes.
+//
+// Revision 1.5 2003/05/07 09:48:54 rherveille
+// Fixed some Wishbone RevB.3 related bugs.
+// Changed layout of the core. Blocks are located more logically now.
+// Started work on a dual clocked/double edge 12bit output. Commonly used by external devices like DVI transmitters.
+//
+// Revision 1.4 2002/01/28 03:47:16 rherveille
+// Changed counter-library.
+// Changed vga-core.
+// Added 32bpp mode.
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+
+
+/*
+
+ Dual clock FIFO.
+
+ Uses gray codes to move from one clock domain to the other.
+
+ Flags are synchronous to the related clock domain;
+ - empty: synchronous to read_clock
+ - full : synchronous to write_clock
+
+ CLR is available in both clock-domains.
+ Asserting any clr signal resets the entire FIFO.
+ When crossing clock domains the clears are synchronized.
+ Therefore one clock domain can enter or leave the reset state before the other.
+*/
+
+module vga_fifo_dc (rclk, wclk, rclr, wclr, wreq, d, rreq, q, empty, full);
+
+ // parameters
+ parameter AWIDTH = 7; //128 entries
+ parameter DWIDTH = 16; //16bit databus
+
+ // inputs & outputs
+ input rclk; // read clock
+ input wclk; // write clock
+ input rclr; // active high synchronous clear, synchronous to read clock
+ input wclr; // active high synchronous clear, synchronous to write clock
+ input wreq; // write request
+ input [DWIDTH -1:0] d; // data input
+ input rreq; // read request
+ output [DWIDTH -1:0] q; // data output
+
+ output empty; // FIFO is empty, synchronous to read clock
+ reg empty;
+ output full; // FIFO is full, synchronous to write clock
+ reg full;
+
+ // variable declarations
+ reg rrst, wrst, srclr, ssrclr, swclr, sswclr;
+ reg [AWIDTH -1:0] rptr, wptr, rptr_gray, wptr_gray;
+
+ //
+ // module body
+ //
+
+
+ function [AWIDTH:1] bin2gray;
+ input [AWIDTH:1] bin;
+ integer n;
+ begin
+ for (n=1; n
+ vga_csm_pb #(24, 9) clut_mem(
+ .clk_i(wb_clk_i),
+
+ // color processor access
+ .req0_i(cp_clut_req),
+ .ack0_o(cp_clut_ack),
+ .adr0_i(cp_clut_adr),
+ .dat0_i(24'h0),
+ .dat0_o(cp_clut_q),
+ .we0_i(1'b0), // no writes
+
+ // external access
+ .req1_i(ext_clut_req),
+ .ack1_o(ext_clut_ack),
+ .adr1_i(wbs_adr_i[10:2]),
+ .dat1_i(wbs_dat_i[23:0]),
+ .dat1_o(ext_clut_q),
+ .we1_i(wbs_we_i)
+ );
+
+ // hookup pixel and video timing generator
+ vga_pgen pixel_generator (
+ .clk_i ( wb_clk_i ),
+ .ctrl_ven ( ctrl_ven ),
+ .ctrl_HSyncL ( ctrl_hsl ),
+ .Thsync ( Thsync ),
+ .Thgdel ( Thgdel ),
+ .Thgate ( Thgate ),
+ .Thlen ( Thlen ),
+ .ctrl_VSyncL ( ctrl_vsl ),
+ .Tvsync ( Tvsync ),
+ .Tvgdel ( Tvgdel ),
+ .Tvgate ( Tvgate ),
+ .Tvlen ( Tvlen ),
+ .ctrl_CSyncL ( ctrl_csl ),
+ .ctrl_BlankL ( ctrl_bl ),
+ .eoh ( hint ),
+ .eov ( vint ),
+
+ // frame buffer data (from wbm)
+ .fb_data_fifo_rreq ( fb_data_fifo_rreq ),
+ .fb_data_fifo_q ( fb_data_fifo_q ),
+ .fb_data_fifo_empty ( fb_data_fifo_empty ),
+ .ImDoneFifoQ ( ImDoneFifoQ ),
+
+ // clut memory signals
+ .stat_acmp ( stat_acmp ),
+ .clut_req ( cp_clut_req ),
+ .clut_ack ( cp_clut_ack ),
+ .clut_adr ( cp_clut_adr ),
+ .clut_q ( cp_clut_q ),
+ .ctrl_cbsw ( ctrl_cbsw ),
+ .clut_switch ( clut_swint ),
+
+ .cursor_adr ( cursor_adr ), // cursor data address (from wbm)
+ .cursor0_en ( cursor0_en ), // cursor0 enable
+ .cursor0_res ( cursor0_res ), // cursor0 resolution
+ .cursor0_xy ( cursor0_xy ), // cursor0 (x,y)
+ .cc0_adr_o ( cc0_adr_i ), // cursor0 color registers address
+ .cc0_dat_i ( cc0_dat_o ), // cursor0 color registers data
+ .cursor1_en ( cursor1_en ), // cursor1 enable
+ .cursor1_res ( cursor1_res ), // cursor1 resolution
+ .cursor1_xy ( cursor1_xy ), // cursor1 (x,y)
+ .cc1_adr_o ( cc1_adr_i ), // cursor1 color registers address
+ .cc1_dat_i ( cc1_dat_o ), // cursor1 color registers data
+
+ .ctrl_dvi_odf ( ctrl_dvi_odf ),
+ .ctrl_cd ( ctrl_cd ),
+ .ctrl_pc ( ctrl_pc ),
+
+ // line fifo memory signals
+ .line_fifo_wreq ( line_fifo_wreq ),
+ .line_fifo_d ( line_fifo_d ),
+ .line_fifo_full ( line_fifo_full_wr ),
+ .line_fifo_rreq ( line_fifo_rreq ),
+ .line_fifo_q ( line_fifo_q ),
+
+ .pclk_i ( clk_p_i ),
+ `ifdef VGA_12BIT_DVI
+ .dvi_pclk_p_o ( dvi_pclk_p_o ),
+ .dvi_pclk_m_o ( dvi_pclk_m_o ),
+ .dvi_hsync_o ( dvi_hsync_o ),
+ .dvi_vsync_o ( dvi_vsync_o ),
+ .dvi_de_o ( dvi_de_o ),
+ .dvi_d_o ( dvi_d_o ),
+ `endif
+ .pclk_o ( clk_p_o ),
+ .hsync_o ( hsync_pad_o ),
+ .vsync_o ( vsync_pad_o ),
+ .csync_o ( csync_pad_o ),
+ .blank_o ( blank_pad_o ),
+ .r_o ( r_pad_o ),
+ .g_o ( g_pad_o ),
+ .b_o ( b_pad_o )
+
+ );
+
+ // hookup line-fifo
+ wire ctrl_ven_not = ~ctrl_ven;
+ vga_fifo_dc #(LINE_FIFO_AWIDTH, 24) line_fifo (
+ .rclk ( clk_p_i ),
+ .wclk ( wb_clk_i ),
+ .rclr ( 1'b0 ),
+ .wclr ( ctrl_ven_not ),
+ .wreq ( line_fifo_wreq ),
+ .d ( line_fifo_d ),
+ .rreq ( line_fifo_rreq ),
+ .q ( line_fifo_q ),
+ .empty ( line_fifo_empty_rd ),
+ .full ( line_fifo_full_wr )
+ );
+
+ // generate interrupt signal when reading line-fifo while it is empty (line-fifo under-run interrupt)
+ reg luint_pclk, sluint;
+
+ always @(posedge clk_p_i)
+ luint_pclk <= #1 line_fifo_rreq & line_fifo_empty_rd;
+
+ always @(posedge wb_clk_i)
+ if (!ctrl_ven)
+ begin
+ sluint <= #1 1'b0;
+ luint <= #1 1'b0;
+ end
+ else
+ begin
+ sluint <= #1 luint_pclk; // resample at wb_clk_i clock
+ luint <= #1 sluint; // sample again, reduce metastability risk
+ end
+
+endmodule
+
+
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_tgen.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_tgen.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_tgen.v (revision 14)
@@ -0,0 +1,144 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE rev.B2 compliant VGA/LCD Core; Timing Generator ////
+//// Horizontal and Vertical Timing Generator ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/projects/vga_lcd ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: vga_tgen.v,v 1.1.1.1 2003-12-22 07:56:44 huyvo Exp $
+//
+// $Date: 2003-12-22 07:56:44 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.5 2003/05/07 09:48:54 rherveille
+// Fixed some Wishbone RevB.3 related bugs.
+// Changed layout of the core. Blocks are located more logically now.
+// Started work on a dual clocked/double edge 12bit output. Commonly used by external devices like DVI transmitters.
+//
+// Revision 1.4 2002/01/28 03:47:16 rherveille
+// Changed counter-library.
+// Changed vga-core.
+// Added 32bpp mode.
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+
+module vga_tgen(
+ clk, clk_ena, rst,
+ Thsync, Thgdel, Thgate, Thlen, Tvsync, Tvgdel, Tvgate, Tvlen,
+ eol, eof, gate, hsync, vsync, csync, blank
+ );
+
+ // inputs & outputs
+ input clk;
+ input clk_ena;
+ input rst;
+
+ // horizontal timing settings inputs
+ input [ 7:0] Thsync; // horizontal sync pule width (in pixels)
+ input [ 7:0] Thgdel; // horizontal gate delay
+ input [15:0] Thgate; // horizontal gate (number of visible pixels per line)
+ input [15:0] Thlen; // horizontal length (number of pixels per line)
+
+ // vertical timing settings inputs
+ input [ 7:0] Tvsync; // vertical sync pule width (in pixels)
+ input [ 7:0] Tvgdel; // vertical gate delay
+ input [15:0] Tvgate; // vertical gate (number of visible pixels per line)
+ input [15:0] Tvlen; // vertical length (number of pixels per line)
+
+ // outputs
+ output eol; // end of line
+ output eof; // end of frame
+ output gate; // vertical AND horizontal gate (logical AND function)
+
+ output hsync; // horizontal sync pulse
+ output vsync; // vertical sync pulse
+ output csync; // composite sync
+ output blank; // blank signal
+
+ //
+ // variable declarations
+ //
+ wire Hgate, Vgate;
+ wire Hdone;
+
+ //
+ // module body
+ //
+
+ // hookup horizontal timing generator
+ vga_vtim hor_gen(
+ .clk(clk),
+ .ena(clk_ena),
+ .rst(rst),
+ .Tsync(Thsync),
+ .Tgdel(Thgdel),
+ .Tgate(Thgate),
+ .Tlen(Thlen),
+ .Sync(hsync),
+ .Gate(Hgate),
+ .Done(Hdone)
+ );
+
+
+ // hookup vertical timing generator
+ wire vclk_ena = Hdone & clk_ena;
+
+ vga_vtim ver_gen(
+ .clk(clk),
+ .ena(vclk_ena),
+ .rst(rst),
+ .Tsync(Tvsync),
+ .Tgdel(Tvgdel),
+ .Tgate(Tvgate),
+ .Tlen(Tvlen),
+ .Sync(vsync),
+ .Gate(Vgate),
+ .Done(eof)
+ );
+
+ // assign outputs
+ assign eol = Hdone;
+ assign gate = Hgate & Vgate;
+ assign csync = hsync | vsync;
+ assign blank = ~gate;
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_colproc.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_colproc.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_colproc.v (revision 14)
@@ -0,0 +1,510 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE rev.B2 compliant VGA/LCD Core ////
+//// Enhanced Color Processor ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/projects/vga_lcd ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001, 2002 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: vga_colproc.v,v 1.1.1.1 2003-12-22 07:56:41 huyvo Exp $
+//
+// $Date: 2003-12-22 07:56:41 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.8 2003/05/07 09:48:54 rherveille
+// Fixed some Wishbone RevB.3 related bugs.
+// Changed layout of the core. Blocks are located more logically now.
+// Started work on a dual clocked/double edge 12bit output. Commonly used by external devices like DVI transmitters.
+//
+// Revision 1.7 2002/03/04 11:01:59 rherveille
+// Added 64x64pixels 4bpp hardware cursor support.
+//
+// Revision 1.6 2002/02/07 05:42:10 rherveille
+// Fixed some bugs discovered by modified testbench
+// Removed / Changed some strange logic constructions
+// Started work on hardware cursor support (not finished yet)
+// Changed top-level name to vga_enh_top.v
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+
+module vga_colproc(clk, srst, vdat_buffer_di, ColorDepth, PseudoColor,
+ vdat_buffer_empty, vdat_buffer_rreq, rgb_fifo_full,
+ rgb_fifo_wreq, r, g, b,
+ clut_req, clut_ack, clut_offs, clut_q
+ );
+
+ //
+ // inputs & outputs
+ //
+ input clk; // master clock
+ input srst; // synchronous reset
+
+ input [31:0] vdat_buffer_di; // video memory data input
+
+ input [1:0] ColorDepth; // color depth (8bpp, 16bpp, 24bpp)
+ input PseudoColor; // pseudo color enabled (only for 8bpp color depth)
+
+ input vdat_buffer_empty;
+ output vdat_buffer_rreq; // pixel buffer read request
+ reg vdat_buffer_rreq;
+
+ input rgb_fifo_full;
+ output rgb_fifo_wreq;
+ reg rgb_fifo_wreq;
+ output [7:0] r, g, b; // pixel color information
+ reg [7:0] r, g, b;
+
+ output clut_req; // clut request
+ reg clut_req;
+ input clut_ack; // clut acknowledge
+ output [ 7:0] clut_offs; // clut offset
+ reg [7:0] clut_offs;
+ input [23:0] clut_q; // clut data in
+
+ //
+ // variable declarations
+ //
+ reg [31:0] DataBuffer;
+
+ reg [7:0] Ra, Ga, Ba;
+ reg [1:0] colcnt;
+ reg RGBbuf_wreq;
+
+ //
+ // Module body
+ //
+
+ // store word from pixelbuffer / wishbone input
+ always @(posedge clk)
+ if (vdat_buffer_rreq)
+ DataBuffer <= #1 vdat_buffer_di;
+
+ //
+ // generate statemachine
+ //
+ // extract color information from data buffer
+ parameter idle = 7'b000_0000,
+ fill_buf = 7'b000_0001,
+ bw_8bpp = 7'b000_0010,
+ col_8bpp = 7'b000_0100,
+ col_16bpp_a = 7'b000_1000,
+ col_16bpp_b = 7'b001_0000,
+ col_24bpp = 7'b010_0000,
+ col_32bpp = 7'b100_0000;
+
+ reg [6:0] c_state; // synopsys enum_state
+ reg [6:0] nxt_state; // synopsys enum_state
+
+ // next state decoder
+ always @(c_state or vdat_buffer_empty or ColorDepth or PseudoColor or rgb_fifo_full or colcnt or clut_ack)
+ begin : nxt_state_decoder
+ // initial value
+ nxt_state = c_state;
+
+ case (c_state) // synopsis full_case parallel_case
+ // idle state
+ idle:
+ if (!vdat_buffer_empty && !rgb_fifo_full)
+ nxt_state = fill_buf;
+
+ // fill data buffer
+ fill_buf:
+ case (ColorDepth) // synopsis full_case parallel_case
+ 2'b00:
+ if (PseudoColor)
+ nxt_state = col_8bpp;
+ else
+ nxt_state = bw_8bpp;
+
+ 2'b01:
+ nxt_state = col_16bpp_a;
+
+ 2'b10:
+ nxt_state = col_24bpp;
+
+ 2'b11:
+ nxt_state = col_32bpp;
+
+ endcase
+
+ //
+ // 8 bits per pixel
+ //
+ bw_8bpp:
+ if (!rgb_fifo_full && !(|colcnt) )
+ if (!vdat_buffer_empty)
+ nxt_state = fill_buf;
+ else
+ nxt_state = idle;
+
+ col_8bpp:
+ // Do NOT check for rgb_fifo_full here.
+ // In 8bpp pseudo-color mode the color-processor must always finish
+ // the current 4pixel-block(i.e. it runs until colcnt = '11').
+ // This is because of the late clut-response which shuffles all
+ // signals the state-machine depends on.
+ // Because of this we can not do an early video_memory_data fetch,
+ // i.e. we can not jump to the fill_buf state. Instead we always
+ // jump to idle and check for rgb_fifo_full there.
+ //
+ // The addition of the cursor-processors forces us to increase the
+ // rgb-fifo size. The increased rgb-fifo also handles the above
+ // described problem. Thus erradicating the above comment.
+ // We add the early video_memory_data fetch again.
+ if (!(|colcnt))
+ if (!vdat_buffer_empty && !rgb_fifo_full)
+ nxt_state = fill_buf;
+ else
+ nxt_state = idle;
+
+ //
+ // 16 bits per pixel
+ //
+ col_16bpp_a:
+ if (!rgb_fifo_full)
+ nxt_state = col_16bpp_b;
+
+ col_16bpp_b:
+ if (!rgb_fifo_full)
+ if (!vdat_buffer_empty)
+ nxt_state = fill_buf;
+ else
+ nxt_state = idle;
+
+ //
+ // 24 bits per pixel
+ //
+ col_24bpp:
+ if (!rgb_fifo_full)
+ if (colcnt == 2'h1) // (colcnt == 1)
+ nxt_state = col_24bpp; // stay in current state
+ else if (!vdat_buffer_empty)
+ nxt_state = fill_buf;
+ else
+ nxt_state = idle;
+
+ //
+ // 32 bits per pixel
+ //
+ col_32bpp:
+ if (!rgb_fifo_full)
+ if (!vdat_buffer_empty)
+ nxt_state = fill_buf;
+ else
+ nxt_state = idle;
+ endcase
+ end // next state decoder
+
+ // generate state registers
+ always @(posedge clk)
+ if (srst)
+ c_state <= #1 idle;
+ else
+ c_state <= #1 nxt_state;
+
+
+ reg iclut_req;
+ reg ivdat_buf_rreq;
+ reg [7:0] iR, iG, iB, iRa, iGa, iBa;
+
+ // output decoder
+ always @(c_state or vdat_buffer_empty or colcnt or DataBuffer or rgb_fifo_full or clut_ack or clut_q or Ba or Ga or Ra)
+ begin : output_decoder
+
+ // initial values
+ ivdat_buf_rreq = 1'b0;
+ RGBbuf_wreq = 1'b0;
+ iclut_req = 1'b0;
+
+ iR = 'h0;
+ iG = 'h0;
+ iB = 'h0;
+ iRa = 'h0;
+ iGa = 'h0;
+ iBa = 'h0;
+
+ case (c_state) // synopsis full_case parallel_case
+ idle:
+ begin
+ if (!rgb_fifo_full)
+ if (!vdat_buffer_empty)
+ ivdat_buf_rreq = 1'b1;
+
+ // when entering from 8bpp_pseudo_color_mode
+ RGBbuf_wreq = clut_ack;
+
+ iR = clut_q[23:16];
+ iG = clut_q[15: 8];
+ iB = clut_q[ 7: 0];
+ end
+
+ fill_buf:
+ begin
+ // when entering from 8bpp_pseudo_color_mode
+ RGBbuf_wreq = clut_ack;
+
+ iR = clut_q[23:16];
+ iG = clut_q[15: 8];
+ iB = clut_q[ 7: 0];
+ end
+
+ //
+ // 8 bits per pixel
+ //
+ bw_8bpp:
+ begin
+ if (!rgb_fifo_full)
+ begin
+ RGBbuf_wreq = 1'b1;
+
+ if ( (!vdat_buffer_empty) && !(|colcnt) )
+ ivdat_buf_rreq = 1'b1;
+ end
+
+ case (colcnt) // synopsis full_case parallel_case
+ 2'b11:
+ begin
+ iR = DataBuffer[31:24];
+ iG = DataBuffer[31:24];
+ iB = DataBuffer[31:24];
+ end
+
+ 2'b10:
+ begin
+ iR = DataBuffer[23:16];
+ iG = DataBuffer[23:16];
+ iB = DataBuffer[23:16];
+ end
+
+ 2'b01:
+ begin
+ iR = DataBuffer[15:8];
+ iG = DataBuffer[15:8];
+ iB = DataBuffer[15:8];
+ end
+
+ default:
+ begin
+ iR = DataBuffer[7:0];
+ iG = DataBuffer[7:0];
+ iB = DataBuffer[7:0];
+ end
+ endcase
+ end
+
+ col_8bpp:
+ begin
+ // Do NOT check for rgb_fifo_full here.
+ // In 8bpp pseudo-color mode the color-processor must always finish
+ // the current 4pixel-block(i.e. it runs until colcnt = '11').
+ // This is because of the late clut-response which shuffles all
+ // signals the state-machine depends on.
+ // Because of this we can not do an early video_memory_data fetch,
+ // i.e. we can not jump to the fill_buf state. Instead we always
+ // jump to idle and check for rgb_fifo_full there.
+ //
+ // The addition of the cursor-processors forces us to increase the
+ // rgb-fifo size. The increased rgb-fifo also handles the above
+ // described problem. Thus erradicating the above comment.
+ // We add the early video_memory_data fetch again.
+ if (!(|colcnt))
+ if (!vdat_buffer_empty && !rgb_fifo_full)
+ ivdat_buf_rreq = 1'b1;
+
+ RGBbuf_wreq = clut_ack;
+
+ iR = clut_q[23:16];
+ iG = clut_q[15: 8];
+ iB = clut_q[ 7: 0];
+
+ iclut_req = !rgb_fifo_full || (colcnt[1] ^ colcnt[0]);
+ end
+
+ //
+ // 16 bits per pixel
+ //
+ col_16bpp_a:
+ begin
+ if (!rgb_fifo_full)
+ RGBbuf_wreq = 1'b1;
+
+ iR[7:3] = DataBuffer[31:27];
+ iG[7:2] = DataBuffer[26:21];
+ iB[7:3] = DataBuffer[20:16];
+ end
+
+ col_16bpp_b:
+ begin
+ if (!rgb_fifo_full)
+ begin
+ RGBbuf_wreq = 1'b1;
+
+ if (!vdat_buffer_empty)
+ ivdat_buf_rreq = 1'b1;
+ end
+
+ iR[7:3] = DataBuffer[15:11];
+ iG[7:2] = DataBuffer[10: 5];
+ iB[7:3] = DataBuffer[ 4: 0];
+ end
+
+ //
+ // 24 bits per pixel
+ //
+ col_24bpp:
+ begin
+ if (!rgb_fifo_full)
+ begin
+ RGBbuf_wreq = 1'b1;
+
+ if ( (colcnt != 2'h1) && !vdat_buffer_empty)
+ ivdat_buf_rreq = 1'b1;
+ end
+
+
+ case (colcnt) // synopsis full_case parallel_case
+ 2'b11:
+ begin
+ iR = DataBuffer[31:24];
+ iG = DataBuffer[23:16];
+ iB = DataBuffer[15: 8];
+ iRa = DataBuffer[ 7: 0];
+ end
+
+ 2'b10:
+ begin
+ iR = Ra;
+ iG = DataBuffer[31:24];
+ iB = DataBuffer[23:16];
+ iRa = DataBuffer[15: 8];
+ iGa = DataBuffer[ 7: 0];
+ end
+
+ 2'b01:
+ begin
+ iR = Ra;
+ iG = Ga;
+ iB = DataBuffer[31:24];
+ iRa = DataBuffer[23:16];
+ iGa = DataBuffer[15: 8];
+ iBa = DataBuffer[ 7: 0];
+ end
+
+ default:
+ begin
+ iR = Ra;
+ iG = Ga;
+ iB = Ba;
+ end
+ endcase
+ end
+
+ //
+ // 32 bits per pixel
+ //
+ col_32bpp:
+ begin
+ if (!rgb_fifo_full)
+ begin
+ RGBbuf_wreq = 1'b1;
+
+ if (!vdat_buffer_empty)
+ ivdat_buf_rreq = 1'b1;
+ end
+
+ iR[7:0] = DataBuffer[23:16];
+ iG[7:0] = DataBuffer[15:8];
+ iB[7:0] = DataBuffer[7:0];
+ end
+
+ endcase
+ end // output decoder
+
+ // generate output registers
+ always @(posedge clk)
+ begin
+ r <= #1 iR;
+ g <= #1 iG;
+ b <= #1 iB;
+
+ if (RGBbuf_wreq)
+ begin
+ Ra <= #1 iRa;
+ Ba <= #1 iBa;
+ Ga <= #1 iGa;
+ end
+
+ if (srst)
+ begin
+ vdat_buffer_rreq <= #1 1'b0;
+ rgb_fifo_wreq <= #1 1'b0;
+ clut_req <= #1 1'b0;
+ end
+ else
+ begin
+ vdat_buffer_rreq <= #1 ivdat_buf_rreq;
+ rgb_fifo_wreq <= #1 RGBbuf_wreq;
+ clut_req <= #1 iclut_req;
+ end
+ end
+
+ // assign clut offset
+ always @(colcnt or DataBuffer)
+ case (colcnt) // synopsis full_case parallel_case
+ 2'b11: clut_offs = DataBuffer[31:24];
+ 2'b10: clut_offs = DataBuffer[23:16];
+ 2'b01: clut_offs = DataBuffer[15: 8];
+ 2'b00: clut_offs = DataBuffer[ 7: 0];
+ endcase
+
+
+ //
+ // color counter
+ //
+ always @(posedge clk)
+ if (srst)
+ colcnt <= #1 2'b11;
+ else if (RGBbuf_wreq)
+ colcnt <= #1 colcnt -2'h1;
+endmodule
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_wb_slave.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_wb_slave.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/vga_wb_slave.v (revision 14)
@@ -0,0 +1,465 @@
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// WISHBONE rev.B2 compliant enhanced VGA/LCD Core ////
+//// Wishbone slave interface ////
+//// ////
+//// Author: Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// Downloaded from: http://www.opencores.org/projects/vga_lcd ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001, 2002 Richard Herveille ////
+//// richard@asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+
+// CVS Log
+//
+// $Id: vga_wb_slave.v,v 1.1.1.1 2003-12-22 07:56:46 huyvo Exp $
+//
+// $Date: 2003-12-22 07:56:46 $
+// $Revision: 1.1.1.1 $
+// $Author: huyvo $
+// $Locker: $
+// $State: Exp $
+//
+// Change History:
+// $Log: not supported by cvs2svn $
+// Revision 1.12 2003/05/07 09:48:54 rherveille
+// Fixed some Wishbone RevB.3 related bugs.
+// Changed layout of the core. Blocks are located more logically now.
+// Started work on a dual clocked/double edge 12bit output. Commonly used by external devices like DVI transmitters.
+//
+// Revision 1.11 2002/04/20 10:02:39 rherveille
+// Changed video timing generator.
+// Changed wishbone master vertical gate count code.
+// Fixed a potential bug in the wishbone slave (cursor color register readout).
+//
+// Revision 1.10 2002/03/28 04:59:25 rherveille
+// Fixed two small bugs that only showed up when the hardware cursors were disabled
+//
+// Revision 1.9 2002/03/04 16:05:52 rherveille
+// Added hardware cursor support to wishbone master.
+// Added provision to turn-off 3D cursors.
+// Fixed some minor bugs.
+//
+// Revision 1.8 2002/03/04 11:01:59 rherveille
+// Added 64x64pixels 4bpp hardware cursor support.
+//
+// Revision 1.7 2002/02/25 06:13:44 rherveille
+// Fixed dat_o incomplete sensitivity list.
+//
+// Revision 1.6 2002/02/07 05:42:10 rherveille
+// Fixed some bugs discovered by modified testbench
+// Removed / Changed some strange logic constructions
+// Started work on hardware cursor support (not finished yet)
+// Changed top-level name to vga_enh_top.v
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+`include "vga_defines.v"
+
+module vga_wb_slave(
+ clk_i, rst_i, arst_i, adr_i, dat_i, dat_o, sel_i, we_i, stb_i, cyc_i, ack_o, rty_o, err_o, inta_o,
+ wbm_busy, dvi_odf, bl, csl, vsl, hsl, pc, cd, vbl, cbsw, vbsw, ven, avmp, acmp,
+ cursor0_res, cursor0_en, cursor0_xy, cursor0_ba, cursor0_ld, cc0_adr_i, cc0_dat_o,
+ cursor1_res, cursor1_en, cursor1_xy, cursor1_ba, cursor1_ld, cc1_adr_i, cc1_dat_o,
+ vbsint_in, cbsint_in, hint_in, vint_in, luint_in, sint_in,
+ Thsync, Thgdel, Thgate, Thlen, Tvsync, Tvgdel, Tvgate, Tvlen, VBARa, VBARb,
+ clut_acc, clut_ack, clut_q
+ );
+
+ //
+ // inputs & outputs
+ //
+
+ // wishbone slave interface
+ input clk_i;
+ input rst_i;
+ input arst_i;
+ input [11:2] adr_i;
+ input [31:0] dat_i;
+ output [31:0] dat_o;
+ reg [31:0] dat_o;
+ input [ 3:0] sel_i;
+ input we_i;
+ input stb_i;
+ input cyc_i;
+ output ack_o;
+ reg ack_o;
+ output rty_o;
+ reg rty_o;
+ output err_o;
+ reg err_o;
+ output inta_o;
+ reg inta_o;
+
+ // wishbone master controller feedback
+ input wbm_busy; // data transfer in progress
+
+ // control register settings
+ output [1:0] dvi_odf; // DVI output data format
+ output bl; // blanking level
+ output csl; // composite sync level
+ output vsl; // vsync level
+ output hsl; // hsync level
+ output pc; // pseudo color
+ output [1:0] cd; // color depth
+ output [1:0] vbl; // video memory burst length
+ output cbsw; // clut bank switch enable
+ output vbsw; // video memory bank switch enable
+ output ven; // video system enable
+
+ // hardware cursor settings
+ output cursor0_res; // cursor0 resolution
+ output cursor0_en; // cursor0 enable
+ output [31: 0] cursor0_xy; // cursor0 location
+ output [31:11] cursor0_ba; // cursor0 base address
+ output cursor0_ld; // reload cursor0 from video memory
+ input [ 3: 0] cc0_adr_i; // cursor0 color register address
+ output [15: 0] cc0_dat_o; // cursor0 color register data
+ output cursor1_res; // cursor1 resolution
+ output cursor1_en; // cursor1 enable
+ output [31: 0] cursor1_xy; // cursor1 location
+ output [31:11] cursor1_ba; // cursor1 base address
+ output cursor1_ld; // reload cursor1 from video memory
+ input [ 3: 0] cc1_adr_i; // cursor1 color register address
+ output [15: 0] cc1_dat_o; // cursor1 color register data
+
+ reg [31: 0] cursor0_xy;
+ reg [31:11] cursor0_ba;
+ reg cursor0_ld;
+ reg [31: 0] cursor1_xy;
+ reg [31:11] cursor1_ba;
+ reg cursor1_ld;
+
+ // status register inputs
+ input avmp; // active video memory page
+ input acmp; // active clut memory page
+ input vbsint_in; // bank switch interrupt request
+ input cbsint_in; // clut switch interrupt request
+ input hint_in; // hsync interrupt request
+ input vint_in; // vsync interrupt request
+ input luint_in; // line fifo underrun interrupt request
+ input sint_in; // system error interrupt request
+
+ // Horizontal Timing Register
+ output [ 7:0] Thsync;
+ output [ 7:0] Thgdel;
+ output [15:0] Thgate;
+ output [15:0] Thlen;
+
+ // Vertical Timing Register
+ output [ 7:0] Tvsync;
+ output [ 7:0] Tvgdel;
+ output [15:0] Tvgate;
+ output [15:0] Tvlen;
+
+ // video base addresses
+ output [31:2] VBARa;
+ reg [31:2] VBARa;
+ output [31:2] VBARb;
+ reg [31:2] VBARb;
+
+ // color lookup table signals
+ output clut_acc;
+ input clut_ack;
+ input [23:0] clut_q;
+
+
+ //
+ // variable declarations
+ //
+ parameter REG_ADR_HIBIT = 7;
+
+ wire [REG_ADR_HIBIT:0] REG_ADR = adr_i[REG_ADR_HIBIT : 2];
+ wire CLUT_ADR = adr_i[11];
+
+ parameter [REG_ADR_HIBIT : 0] CTRL_ADR = 6'b00_0000;
+ parameter [REG_ADR_HIBIT : 0] STAT_ADR = 6'b00_0001;
+ parameter [REG_ADR_HIBIT : 0] HTIM_ADR = 6'b00_0010;
+ parameter [REG_ADR_HIBIT : 0] VTIM_ADR = 6'b00_0011;
+ parameter [REG_ADR_HIBIT : 0] HVLEN_ADR = 6'b00_0100;
+ parameter [REG_ADR_HIBIT : 0] VBARA_ADR = 6'b00_0101;
+ parameter [REG_ADR_HIBIT : 0] VBARB_ADR = 6'b00_0110;
+ parameter [REG_ADR_HIBIT : 0] C0XY_ADR = 6'b00_1100;
+ parameter [REG_ADR_HIBIT : 0] C0BAR_ADR = 6'b00_1101;
+ parameter [REG_ADR_HIBIT : 0] CCR0_ADR = 6'b01_0???;
+ parameter [REG_ADR_HIBIT : 0] C1XY_ADR = 6'b01_1100;
+ parameter [REG_ADR_HIBIT : 0] C1BAR_ADR = 6'b01_1101;
+ parameter [REG_ADR_HIBIT : 0] CCR1_ADR = 6'b10_0???;
+
+
+ reg [31:0] ctrl, stat, htim, vtim, hvlen;
+ wire hint, vint, vbsint, cbsint, luint, sint;
+ wire hie, vie, vbsie, cbsie;
+ wire acc, acc32, reg_acc, reg_wacc;
+ wire cc0_acc, cc1_acc;
+ wire [31:0] ccr0_dat_o, ccr1_dat_o;
+
+
+ reg [31:0] reg_dato; // data output from registers
+
+ //
+ // Module body
+ //
+
+ assign acc = cyc_i & stb_i;
+ assign acc32 = (sel_i == 4'b1111);
+ assign clut_acc = CLUT_ADR & acc & acc32;
+ assign reg_acc = ~CLUT_ADR & acc & acc32;
+ assign reg_wacc = reg_acc & we_i;
+
+ assign cc0_acc = (REG_ADR == CCR0_ADR) & acc & acc32;
+ assign cc1_acc = (REG_ADR == CCR1_ADR) & acc & acc32;
+
+ always @(posedge clk_i)
+ ack_o <= #1 ((reg_acc & acc32) | clut_ack) & ~(wbm_busy & REG_ADR == CTRL_ADR) & ~ack_o ;
+
+ always @(posedge clk_i)
+ rty_o <= #1 ((reg_acc & acc32) | clut_ack) & (wbm_busy & REG_ADR == CTRL_ADR) & ~rty_o ;
+
+ always @(posedge clk_i)
+ err_o <= #1 acc & ~acc32 & ~err_o;
+
+
+ // generate registers
+ always @(posedge clk_i or negedge arst_i)
+ begin : gen_regs
+ if (!arst_i)
+ begin
+ htim <= #1 0;
+ vtim <= #1 0;
+ hvlen <= #1 0;
+ VBARa <= #1 0;
+ VBARb <= #1 0;
+ cursor0_xy <= #1 0;
+ cursor0_ba <= #1 0;
+ cursor1_xy <= #1 0;
+ cursor1_ba <= #1 0;
+ end
+ else if (rst_i)
+ begin
+ htim <= #1 0;
+ vtim <= #1 0;
+ hvlen <= #1 0;
+ VBARa <= #1 0;
+ VBARb <= #1 0;
+ cursor0_xy <= #1 0;
+ cursor0_ba <= #1 0;
+ cursor1_xy <= #1 0;
+ cursor1_ba <= #1 0;
+ end
+ else if (reg_wacc)
+ case (adr_i) // synopsis full_case parallel_case
+ HTIM_ADR : htim <= #1 dat_i;
+ VTIM_ADR : vtim <= #1 dat_i;
+ HVLEN_ADR : hvlen <= #1 dat_i;
+ VBARA_ADR : VBARa <= #1 dat_i[31: 2];
+ VBARB_ADR : VBARb <= #1 dat_i[31: 2];
+ C0XY_ADR : cursor0_xy <= #1 dat_i[31: 0];
+ C0BAR_ADR : cursor0_ba <= #1 dat_i[31:11];
+ C1XY_ADR : cursor1_xy <= #1 dat_i[31: 0];
+ C1BAR_ADR : cursor1_ba <= #1 dat_i[31:11];
+ endcase
+ end
+
+ always @(posedge clk_i)
+ begin
+ cursor0_ld <= #1 reg_wacc && (adr_i == C0BAR_ADR);
+ cursor1_ld <= #1 reg_wacc && (adr_i == C1BAR_ADR);
+ end
+
+ // generate control register
+ always @(posedge clk_i or negedge arst_i)
+ if (!arst_i)
+ ctrl <= #1 0;
+ else if (rst_i)
+ ctrl <= #1 0;
+ else if (reg_wacc & (REG_ADR == CTRL_ADR) & ~wbm_busy )
+ ctrl <= #1 dat_i;
+ else begin
+ ctrl[6] <= #1 ctrl[6] & !cbsint_in;
+ ctrl[5] <= #1 ctrl[5] & !vbsint_in;
+ end
+
+
+ // generate status register
+ always @(posedge clk_i or negedge arst_i)
+ if (!arst_i)
+ stat <= #1 0;
+ else if (rst_i)
+ stat <= #1 0;
+ else begin
+ `ifdef VGA_HWC1
+ stat[21] <= #1 1'b1;
+ `else
+ stat[21] <= #1 1'b0;
+ `endif
+ `ifdef VGA_HWC0
+ stat[20] <= #1 1'b1;
+ `else
+ stat[20] <= #1 1'b0;
+ `endif
+
+ stat[17] <= #1 acmp;
+ stat[16] <= #1 avmp;
+
+ if (reg_wacc & (REG_ADR == STAT_ADR) )
+ begin
+ stat[7] <= #1 cbsint_in | (stat[7] & !dat_i[7]);
+ stat[6] <= #1 vbsint_in | (stat[6] & !dat_i[6]);
+ stat[5] <= #1 hint_in | (stat[5] & !dat_i[5]);
+ stat[4] <= #1 vint_in | (stat[4] & !dat_i[4]);
+ stat[1] <= #1 luint_in | (stat[3] & !dat_i[1]);
+ stat[0] <= #1 sint_in | (stat[0] & !dat_i[0]);
+ end
+ else
+ begin
+ stat[7] <= #1 stat[7] | cbsint_in;
+ stat[6] <= #1 stat[6] | vbsint_in;
+ stat[5] <= #1 stat[5] | hint_in;
+ stat[4] <= #1 stat[4] | vint_in;
+ stat[1] <= #1 stat[1] | luint_in;
+ stat[0] <= #1 stat[0] | sint_in;
+ end
+ end
+
+
+ // decode control register
+ assign dvi_odf = ctrl[29:28];
+ assign cursor1_res = ctrl[25];
+ assign cursor1_en = ctrl[24];
+ assign cursor0_res = ctrl[23];
+ assign cursor0_en = ctrl[20];
+ assign bl = ctrl[15];
+ assign csl = ctrl[14];
+ assign vsl = ctrl[13];
+ assign hsl = ctrl[12];
+ assign pc = ctrl[11];
+ assign cd = ctrl[10:9];
+ assign vbl = ctrl[8:7];
+ assign cbsw = ctrl[6];
+ assign vbsw = ctrl[5];
+ assign cbsie = ctrl[4];
+ assign vbsie = ctrl[3];
+ assign hie = ctrl[2];
+ assign vie = ctrl[1];
+ assign ven = ctrl[0];
+
+ // decode status register
+ assign cbsint = stat[7];
+ assign vbsint = stat[6];
+ assign hint = stat[5];
+ assign vint = stat[4];
+ assign luint = stat[1];
+ assign sint = stat[0];
+
+ // decode Horizontal Timing Register
+ assign Thsync = htim[31:24];
+ assign Thgdel = htim[23:16];
+ assign Thgate = htim[15:0];
+ assign Thlen = hvlen[31:16];
+
+ // decode Vertical Timing Register
+ assign Tvsync = vtim[31:24];
+ assign Tvgdel = vtim[23:16];
+ assign Tvgate = vtim[15:0];
+ assign Tvlen = hvlen[15:0];
+
+
+ `ifdef VGA_HWC0
+ // hookup cursor0 color registers
+ vga_cur_cregs cregs0(
+ .clk_i(clk_i),
+ .rst_i(rst_i),
+ .arst_i(arst_i),
+ .hsel_i(cc0_acc),
+ .hadr_i(adr_i[4:2]),
+ .hwe_i(we_i),
+ .hdat_i(dat_i),
+ .hdat_o(ccr0_dat_o), // host access
+ .hack_o(),
+ .cadr_i(cc0_adr_i),
+ .cdat_o(cc0_dat_o) // cursor processor access
+ );
+ `else
+ assign ccr0_dat_o = 32'h0;
+ assign cc0_dat_o = 32'h0;
+ `endif
+
+ `ifdef VGA_HWC1
+ // hookup cursor1 color registers
+ vga_cur_cregs cregs1(
+ .clk_i(clk_i),
+ .rst_i(rst_i),
+ .arst_i(arst_i),
+ .hsel_i(cc1_acc),
+ .hadr_i(adr_i[4:2]),
+ .hwe_i(we_i),
+ .hdat_i(dat_i),
+ .hdat_o(ccr1_dat_o), // host access
+ .hack_o(),
+ .cadr_i(cc1_adr_i),
+ .cdat_o(cc1_dat_o) // cursor processor access
+ );
+ `else
+ assign ccr1_dat_o = 32'h0;
+ assign cc1_dat_o = 32'h0;
+ `endif
+
+
+ // assign output
+ always @(REG_ADR or ctrl or stat or htim or vtim or hvlen or VBARa or VBARb or acmp or
+ cursor0_xy or cursor0_ba or cursor1_xy or cursor1_ba or ccr0_dat_o or ccr1_dat_o)
+ casez (REG_ADR) // synopsis full_case parallel_case
+ CTRL_ADR : reg_dato = ctrl;
+ STAT_ADR : reg_dato = stat;
+ HTIM_ADR : reg_dato = htim;
+ VTIM_ADR : reg_dato = vtim;
+ HVLEN_ADR : reg_dato = hvlen;
+ VBARA_ADR : reg_dato = {VBARa, 2'b0};
+ VBARB_ADR : reg_dato = {VBARb, 2'b0};
+ C0XY_ADR : reg_dato = cursor0_xy;
+ C0BAR_ADR : reg_dato = {cursor0_ba, 11'h0};
+ CCR0_ADR : reg_dato = ccr0_dat_o;
+ C1XY_ADR : reg_dato = cursor1_xy;
+ C1BAR_ADR : reg_dato = {cursor1_ba, 11'h0};
+ CCR1_ADR : reg_dato = ccr1_dat_o;
+ default : reg_dato = 32'h0000_0000;
+ endcase
+
+ always @(posedge clk_i)
+ dat_o <= #1 reg_acc ? reg_dato : {8'h0, clut_q};
+
+ // generate interrupt request signal
+ always @(posedge clk_i)
+ inta_o <= #1 (hint & hie) | (vint & vie) | (vbsint & vbsie) | (cbsint & cbsie) | luint | sint;
+endmodule
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_dpram.v
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_dpram.v (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/verilog/generic_dpram.v (revision 14)
@@ -0,0 +1,515 @@
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Generic Dual-Port Synchronous RAM ////
+//// ////
+//// This file is part of memory library available from ////
+//// http://www.opencores.org/cvsweb.shtml/generic_memories/ ////
+//// ////
+//// Description ////
+//// This block is a wrapper with common dual-port ////
+//// synchronous memory interface for different ////
+//// types of ASIC and FPGA RAMs. Beside universal memory ////
+//// interface it also provides behavioral model of generic ////
+//// dual-port synchronous RAM. ////
+//// It also contains a fully synthesizeable model for FPGAs. ////
+//// It should be used in all OPENCORES designs that want to be ////
+//// portable accross different target technologies and ////
+//// independent of target memory. ////
+//// ////
+//// Supported ASIC RAMs are: ////
+//// - Artisan Dual-Port Sync RAM ////
+//// - Avant! Two-Port Sync RAM (*) ////
+//// - Virage 2-port Sync RAM ////
+//// ////
+//// Supported FPGA RAMs are: ////
+//// - Generic FPGA (VENDOR_FPGA) ////
+//// Tested RAMs: Altera, Xilinx ////
+//// Synthesis tools: LeonardoSpectrum, Synplicity ////
+//// - Xilinx (VENDOR_XILINX) ////
+//// - Altera (VENDOR_ALTERA) ////
+//// ////
+//// To Do: ////
+//// - fix Avant! ////
+//// - add additional RAMs (VS etc) ////
+//// ////
+//// Author(s): ////
+//// - Richard Herveille, richard@asics.ws ////
+//// - Damjan Lampret, lampret@opencores.org ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2000 Authors and OPENCORES.ORG ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer. ////
+//// ////
+//// This source file is free software; you can redistribute it ////
+//// and/or modify it under the terms of the GNU Lesser General ////
+//// Public License as published by the Free Software Foundation; ////
+//// either version 2.1 of the License, or (at your option) any ////
+//// later version. ////
+//// ////
+//// This source is distributed in the hope that it will be ////
+//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
+//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
+//// PURPOSE. See the GNU Lesser General Public License for more ////
+//// details. ////
+//// ////
+//// You should have received a copy of the GNU Lesser General ////
+//// Public License along with this source; if not, download it ////
+//// from http://www.opencores.org/lgpl.shtml ////
+//// ////
+//////////////////////////////////////////////////////////////////////
+//
+// CVS Revision History
+//
+// $Log: not supported by cvs2svn $
+// Revision 1.3 2003/03/18 21:45:48 rherveille
+// Added WISHBONE revB.3 Registered Feedback Cycles support
+//
+// Revision 1.4 2002/09/28 08:18:52 rherveille
+// Changed synthesizeable FPGA memory implementation.
+// Fixed some issues with Xilinx BlockRAM
+//
+// Revision 1.3 2001/11/09 00:34:18 samg
+// minor changes: unified with all common rams
+//
+// Revision 1.2 2001/11/08 19:11:31 samg
+// added valid checks to behvioral model
+//
+// Revision 1.1.1.1 2001/09/14 09:57:10 rherveille
+// Major cleanup.
+// Files are now compliant to Altera & Xilinx memories.
+// Memories are now compatible, i.e. drop-in replacements.
+// Added synthesizeable generic FPGA description.
+// Created "generic_memories" cvs entry.
+//
+// Revision 1.1.1.2 2001/08/21 13:09:27 damjan
+// *** empty log message ***
+//
+// Revision 1.1 2001/08/20 18:23:20 damjan
+// Initial revision
+//
+// Revision 1.1 2001/08/09 13:39:33 lampret
+// Major clean-up.
+//
+// Revision 1.2 2001/07/30 05:38:02 lampret
+// Adding empty directories required by HDL coding guidelines
+//
+//
+
+//synopsys translate_off
+`include "timescale.v"
+//synopsys translate_on
+
+`define VENDOR_FPGA
+//`define VENDOR_XILINX
+//`define VENDOR_ALTERA
+
+module generic_dpram(
+ // Generic synchronous dual-port RAM interface
+ rclk, rrst, rce, oe, raddr, do,
+ wclk, wrst, wce, we, waddr, di
+);
+
+ //
+ // Default address and data buses width
+ //
+ parameter aw = 5; // number of bits in address-bus
+ parameter dw = 16; // number of bits in data-bus
+
+ //
+ // Generic synchronous double-port RAM interface
+ //
+ // read port
+ input rclk; // read clock, rising edge trigger
+ input rrst; // read port reset, active high
+ input rce; // read port chip enable, active high
+ input oe; // output enable, active high
+ input [aw-1:0] raddr; // read address
+ output [dw-1:0] do; // data output
+
+ // write port
+ input wclk; // write clock, rising edge trigger
+ input wrst; // write port reset, active high
+ input wce; // write port chip enable, active high
+ input we; // write enable, active high
+ input [aw-1:0] waddr; // write address
+ input [dw-1:0] di; // data input
+
+ //
+ // Module body
+ //
+
+`ifdef VENDOR_FPGA
+ //
+ // Instantiation synthesizeable FPGA memory
+ //
+ // This code has been tested using LeonardoSpectrum and Synplicity.
+ // The code correctly instantiates Altera EABs and Xilinx BlockRAMs.
+ //
+
+ // NOTE:
+ // 'synthesis syn_ramstyle="block_ram"' is a Synplify attribute.
+ // It instructs Synplify to map to BlockRAMs instead of the default SelectRAMs
+
+ reg [dw-1:0] mem [(1<= cursor_x) && (xcnt < (cursor_x + (cursor_res ? 16'h7f : 16'h1f) ));
+ inbox_y <= #1 (ycnt >= cursor_y) && (ycnt < (cursor_y + (cursor_res ? 16'h7f : 16'h1f) ));
+ end
+
+ assign inbox = inbox_x && inbox_y;
+
+ always@(posedge clk)
+ dinbox <= #1 inbox;
+
+ always@(posedge clk)
+ if (didat_wreq)
+ ddinbox <= #1 dinbox;
+
+ always@(posedge clk)
+ dddinbox <= #1 ddinbox;
+
+ //
+ // generate cursor buffer address counter
+ always@(posedge clk)
+ if (!cursor_en || ydone)
+ cbuf_ra <= #1 12'h0;
+ else if (inbox && idat_wreq)
+ cbuf_ra <= #1 cbuf_ra +12'h1;
+
+ always@(posedge clk)
+ dcbuf_ra <= #1 cbuf_ra[2:0];
+
+ assign cbuf_a = cursor_we ? cursor_wadr : cursor_res ? cbuf_ra[11:3] : cbuf_ra[9:1];
+
+ // hookup local cursor memory (generic synchronous single port memory)
+ // cursor memory should never be written to/read from at the same time
+ generic_spram #(9, 32) cbuf(
+ .clk(clk),
+ .rst(1'b0), // no reset
+ .ce(1'b1), // always enable memory
+ .we(cursor_we),
+ .oe(1'b1), // always output data
+ .addr(cbuf_a),
+ .di(cursor_wdat),
+ .do(cbuf_q)
+ );
+
+ //
+ // decode cursor data for 32x32x16bpp mode
+ always@(posedge clk)
+ if (didat_wreq)
+ cdat <= #1 dcbuf_ra[0] ? cbuf_q[31:16] : cbuf_q[15:0];
+
+ always@(posedge clk)
+ dcdat <= #1 cdat;
+
+ //
+ // decode cursor data for 64x64x4bpp mode
+
+ // generate cursor-color address
+ always@(posedge clk)
+ if (didat_wreq)
+ case (dcbuf_ra)
+ 3'b000: cc_adr_o <= cbuf_q[ 3: 0];
+ 3'b001: cc_adr_o <= cbuf_q[ 7: 4];
+ 3'b010: cc_adr_o <= cbuf_q[11: 8];
+ 3'b011: cc_adr_o <= cbuf_q[15:12];
+ 3'b100: cc_adr_o <= cbuf_q[19:16];
+ 3'b101: cc_adr_o <= cbuf_q[23:20];
+ 3'b110: cc_adr_o <= cbuf_q[27:24];
+ 3'b111: cc_adr_o <= cbuf_q[31:28];
+ endcase
+
+ //
+ // generate cursor colors
+ assign cursor_isalpha = cursor_res ? cc_dat_i[15] : dcdat[15];
+ assign cursor_alpha = cursor_res ? cc_dat_i[7:0] : dcdat[7:0];
+ assign cursor_r = {cursor_res ? cc_dat_i[14:10] : dcdat[14:10], 3'h0};
+ assign cursor_g = {cursor_res ? cc_dat_i[ 9: 5] : dcdat[ 9: 5], 3'h0};
+ assign cursor_b = {cursor_res ? cc_dat_i[ 4: 0] : dcdat[ 4: 0], 3'h0};
+
+ //
+ // delay image data
+ always@(posedge clk)
+ didat <= #1 idat;
+
+ always@(posedge clk)
+ if (didat_wreq)
+ ddidat <= #1 didat;
+
+ always@(posedge clk)
+ dddidat <= #1 ddidat;
+
+ always@(posedge clk)
+ begin
+ didat_wreq <= #1 idat_wreq;
+ ddidat_wreq <= #1 didat_wreq;
+ end
+
+ //
+ // generate selection unit
+ always@(posedge clk)
+ dcursor_en <= #1 cursor_en;
+
+ always@(posedge clk)
+ if (didat_wreq)
+ ddcursor_en <= #1 dcursor_en;
+
+ always@(posedge clk)
+ dddcursor_en <= #1 ddcursor_en;
+
+ // Alpha blending:
+ // rgb = (rgb1 * alhpa1) + (rgb2 * alpha2)
+ // We generate an alpha mixer (alpha1 + alpha2 = 1)
+ // rgb = (alpha1)(rgb1) + (1-alpha1)(rgb2)
+ // We always mix to black (rgb2 = 0)
+ // rgb = (alpha1)(rgb1)
+ always@(posedge clk)
+ if (ddidat_wreq)
+ if (!dddcursor_en || !dddinbox)
+ rgb <= #1 dddidat;
+ else if (cursor_isalpha)
+ `ifdef VGA_HWC_3D
+ rgb <= #1 dddidat * cursor_alpha;
+ `else
+ rgb <= #1 dddidat;
+ `endif
+ else
+ rgb <= #1 {cursor_r, cursor_g, cursor_b};
+
+ //
+ // generate write request signal
+ always@(posedge clk)
+ if (rst_i)
+ begin
+ store1 <= #1 1'b0;
+ store2 <= #1 1'b0;
+ end
+ else
+ begin
+ store1 <= #1 didat_wreq | store1;
+ store2 <= #1 (didat_wreq & store1) | store2;
+ end
+
+ // skip 2 idat_wreq signal, to keep in pace with rgb_fifo_full signal
+ always@(posedge clk)
+ rgb_fifo_wreq <= #1 ddidat_wreq & store2;
+
+endmodule
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/counter.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/counter.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/counter.vhd (revision 14)
@@ -0,0 +1,193 @@
+--
+-- Counter.vhd, contains 1) run-once down-counter 2) general purpose up-down riple-carry counter
+--
+-- Author: Richard Herveille
+-- Rev. 1.0 march 7th, 2001
+-- rev. 1.1 april 17th, 2001. Changed ro_cnt nld generation
+-- rev. 1.1 april 26th, 2001. Changed SYNCH_RCO (component ud_cnt) from string to bit. Fixed problems with Synplify
+-- rev. 1.2 may 11th, 2001. Fixed incomplete sensitivity list warning
+-- rev. 1.3 june 18th, 2001. Changed module order, they are now in compilation order.
+-- rev. 1.4 june 27th, 2001. Removed 'SYNCH_RCO' parameter, simplifies conversion to verilog.
+-- Fixed a potential bug in "ro_cnt" where 'rci' was not related to 'cnt_en'.
+-- Changed "val" signal generation from process to "when..else.." statement
+--
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+package count is
+ -- general purpose up-down counter
+ component ud_cnt is
+ generic(
+ SIZE : natural := 8
+ );
+ port(
+ clk : in std_logic; -- master clock
+ nReset : in std_logic := '1'; -- asynchronous active low reset
+ rst : in std_logic := '0'; -- synchronous active high reset
+
+ cnt_en : in std_logic := '1'; -- count enable
+ ud : in std_logic := '0'; -- up / not down
+ nld : in std_logic := '1'; -- synchronous active low load
+ D : in unsigned(SIZE -1 downto 0); -- load counter value
+ Q : out unsigned(SIZE -1 downto 0); -- current counter value
+
+ resD : in unsigned(SIZE -1 downto 0) := (others => '0'); -- initial data after reset
+
+ rci : in std_logic := '1'; -- carry input
+ rco : out std_logic -- carry output
+ );
+ end component ud_cnt;
+
+ -- run-once down-counter
+ component ro_cnt is
+ generic(SIZE : natural := 8);
+ port(
+ clk : in std_logic; -- master clock
+ nReset : in std_logic := '1'; -- asynchronous active low reset
+ rst : in std_logic := '0'; -- synchronous active high reset
+
+ cnt_en : in std_logic := '1'; -- count enable
+ go : in std_logic; -- load counter and start sequence
+ done : out std_logic; -- done counting
+ D : in unsigned(SIZE -1 downto 0); -- load counter value
+ Q : out unsigned(SIZE -1 downto 0); -- current counter value
+
+ ID : in unsigned(SIZE -1 downto 0) := (others => '0') -- initial data after reset
+ );
+ end component ro_cnt;
+end package count;
+
+--
+-- general purpose counter
+--
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity ud_cnt is
+ generic(
+ SIZE : natural := 8
+ );
+ port(
+ clk : in std_logic; -- master clock
+ nReset : in std_logic := '1'; -- asynchronous active low reset
+ rst : in std_logic := '0'; -- synchronous active high reset
+
+ cnt_en : in std_logic := '1'; -- count enable
+ ud : in std_logic := '0'; -- up / not down
+ nld : in std_logic := '1'; -- synchronous active low load
+ D : in unsigned(SIZE -1 downto 0); -- load counter value
+ Q : out unsigned(SIZE -1 downto 0); -- current counter value
+
+ resD : in unsigned(SIZE -1 downto 0) := (others => '0'); -- initial data after reset
+
+ rci : in std_logic := '1'; -- carry input
+ rco : out std_logic -- carry output
+ );
+end entity ud_cnt;
+
+architecture structural of ud_cnt is
+ signal Qi : unsigned(SIZE -1 downto 0);
+ signal val : unsigned(SIZE downto 0);
+begin
+ val <= ( ('0' & Qi) + rci) when (ud = '1') else ( ('0' & Qi) - rci);
+
+ regs: process(clk, nReset, resD)
+ begin
+ if (nReset = '0') then
+ Qi <= resD;
+ elsif (clk'event and clk = '1') then
+ if (rst = '1') then
+ Qi <= resD;
+ else
+ if (nld = '0') then
+ Qi <= D;
+ elsif (cnt_en = '1') then
+ Qi <= val(SIZE -1 downto 0);
+ end if;
+ end if;
+ end if;
+ end process regs;
+
+ -- assign outputs
+ Q <= Qi;
+ rco <= val(SIZE);
+end architecture structural;
+
+
+--
+-- run-once down-counter, counts D+1 cycles before generating 'DONE'
+--
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity ro_cnt is
+ generic(SIZE : natural := 8);
+ port(
+ clk : in std_logic; -- master clock
+ nReset : in std_logic := '1'; -- asynchronous active low reset
+ rst : in std_logic := '0'; -- synchronous active high reset
+
+ cnt_en : in std_logic := '1'; -- count enable
+ go : in std_logic; -- load counter and start sequence
+ done : out std_logic; -- done counting
+ D : in unsigned(SIZE -1 downto 0); -- load counter value
+ Q : out unsigned(SIZE -1 downto 0); -- current counter value
+
+ ID : in unsigned(SIZE -1 downto 0) := (others => '0') -- initial data after reset
+ );
+end entity ro_cnt;
+
+architecture structural of ro_cnt is
+ component ud_cnt is
+ generic(
+ SIZE : natural := 8
+ );
+ port(
+ clk : in std_logic; -- master clock
+ nReset : in std_logic := '1'; -- asynchronous active low reset
+ rst : in std_logic := '0'; -- synchronous active high reset
+
+ cnt_en : in std_logic := '1'; -- count enable
+ ud : in std_logic := '0'; -- up / not down
+ nld : in std_logic := '1'; -- synchronous active low load
+ D : in unsigned(SIZE -1 downto 0); -- load counter value
+ Q : out unsigned(SIZE -1 downto 0); -- current counter value
+
+ resD : in unsigned(SIZE -1 downto 0) := (others => '0'); -- initial data after reset
+
+ rci : in std_logic := '1'; -- carry input
+ rco : out std_logic -- carry output
+ );
+ end component ud_cnt;
+
+ signal rci, rco, nld : std_logic;
+begin
+ gen_ctrl: process(clk, nReset)
+ begin
+ if (nReset = '0') then
+ rci <= '0';
+ elsif (clk'event and clk = '1') then
+ if (rst = '1') then
+ rci <= '0';
+ elsif (cnt_en = '1' ) then
+ rci <= (go or rci) and not rco;
+ end if;
+ end if;
+ end process;
+
+ nld <= not go;
+
+ -- hookup counter
+ cnt : ud_cnt
+ generic map (SIZE => SIZE)
+ port map (clk => clk, nReset => nReset, rst => rst, cnt_en => cnt_en, nld => nld, D => D, Q => Q,
+ resD => ID, rci => rci, rco => rco);
+
+ done <= rco;
+end architecture structural;
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vtim.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vtim.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vtim.vhd (revision 14)
@@ -0,0 +1,107 @@
+--
+-- File vtim.vhd, Video Timing Generator
+-- Project: VGA
+-- Author : Richard Herveille
+-- rev.: 0.1 April 13th, 2001
+-- rev.: 0.2 June 23nd, 2001. Removed unused "rst_strb" signal.
+-- rev.: 0.3 June 29th, 2001. Changed 'gen_go' process to use clock-enable signal.
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+library count;
+use count.count.all;
+
+entity vtim is
+ port(
+ clk : in std_logic; -- master clock
+ ena : in std_logic; -- count enable
+ rst : in std_logic; -- synchronous active high reset
+
+ Tsync : in unsigned(7 downto 0); -- sync duration
+ Tgdel : in unsigned(7 downto 0); -- gate delay
+ Tgate : in unsigned(15 downto 0); -- gate length
+ Tlen : in unsigned(15 downto 0); -- line time / frame time
+
+ Sync : out std_logic; -- synchronization pulse
+ Gate : out std_logic; -- gate
+ Done : out std_logic -- done with line/frame
+ );
+end entity vtim;
+
+architecture structural of vtim is
+ signal Dsync, Dgdel, Dgate, Dlen : std_logic;
+ signal go, drst : std_logic;
+begin
+ -- generate go signal
+ gen_go: process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (rst = '1') then
+ go <= '0';
+ drst <= '1';
+ elsif (ena = '1') then
+ go <= Dlen or (not rst and drst);
+ drst <= rst;
+ end if;
+ end if;
+ end process gen_go;
+-- go <= Dlen or (not rst and drst); does not work => horizontal Dlen counter does not reload
+
+ -- hookup sync counter
+ sync_cnt : ro_cnt generic map (SIZE => 8)
+ port map (clk => clk, rst => rst, cnt_en => ena, go => go, D => Tsync, iD => Tsync, done => Dsync);
+
+ -- hookup gate delay counter
+ gdel_cnt : ro_cnt generic map (SIZE => 8)
+ port map (clk => clk, rst => rst, cnt_en => ena, go => Dsync, D => Tgdel, iD => Tgdel, done => Dgdel);
+
+ -- hookup gate counter
+ gate_cnt : ro_cnt generic map (SIZE => 16)
+ port map (clk => clk, rst => rst, cnt_en => ena, go => Dgdel, D => Tgate, iD => Tgate, done => Dgate);
+
+ -- hookup gate counter
+ len_cnt : ro_cnt generic map (SIZE => 16)
+ port map (clk => clk, rst => rst, cnt_en => ena, go => go, D => Tlen, iD => Tlen, done => Dlen);
+
+ -- generate output signals
+ gen_sync: block
+ signal iSync : std_logic;
+ begin
+ process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (rst = '1') then
+ iSync <= '0';
+ else
+ iSync <= (go or iSync) and not Dsync;
+ end if;
+ end if;
+ end process;
+ Sync <= iSync;
+ end block gen_sync;
+
+ gen_gate: block
+ signal iGate : std_logic;
+ begin
+ process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (rst = '1') then
+ iGate <= '0';
+ else
+ iGate <= (Dgdel or iGate) and not Dgate;
+ end if;
+ end if;
+ end process;
+
+ Gate <= iGate;
+ end block gen_gate;
+
+ Done <= Dlen;
+end architecture structural;
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/dpm.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/dpm.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/dpm.vhd (revision 14)
@@ -0,0 +1,94 @@
+--
+-- File dpm.vhd (dual ported memory)
+-- Author : Richard Herveille
+-- rev. 0.1 May 17th, 2001 : Initial release
+--
+-- fifo_dc uses this entity to implement the dual ported RAM of the fifo.
+-- Change this file to implement target specific RAM blocks.
+--
+-- rev. 0.2 June 29th, 2001. Changed "std_logic_vector(23 downto 0)" into "std_logic_vector(DWIDTH -1 downto 0)" for 'dout'.
+-- Removed rreq input. Removed obsolete "dout" signal
+-- The design now correctly maps to Altera-EABs and Xilinx-BlockRAMs
+
+--
+-- dual ported memory, wrapper for target specific RAM blocks
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity dual_ported_memory is
+ generic(
+ AWIDTH : natural := 8;
+ DWIDTH : natural := 24
+ );
+ port(
+ rclk : in std_logic; -- read clock input
+ wclk : in std_logic; -- write clock input
+
+ D : in std_logic_vector(DWIDTH -1 downto 0); -- Data input
+ waddr : in unsigned(AWIDTH -1 downto 0); -- write clock address input
+ wreq : in std_logic; -- write request
+
+ Q : out std_logic_vector(DWIDTH -1 downto 0); -- Data output
+ raddr : in unsigned(AWIDTH -1 downto 0) -- read clock address input
+ );
+end entity dual_ported_memory;
+
+architecture structural of dual_ported_memory is
+ -- example target specific RAM block, 256entries x 24bit
+ component VSR256X24M2 is
+ port(
+ RCK : in std_logic; -- read clock
+ REN : in std_logic; -- read enable, active low
+ RADR : in std_logic_vector(7 downto 0); -- read address
+
+ WCK : in std_logic; -- write clock
+ WEN : in std_logic; -- write enable, active low
+ WADR : in std_logic_vector(7 downto 0); -- write address
+
+ DI : in std_logic_vector(23 downto 0); -- data input, (synchronous to write clock)
+ DOUT : out std_logic_vector(23 downto 0) -- data output (asynchronous)
+ );
+ end component VSR256X24M2;
+-- signal nrreq, nwreq : std_logic;
+
+ -- generate memory for generic description
+ type mem_type is array (2**AWIDTH -1 downto 0) of std_logic_vector(DWIDTH -1 downto 0);
+ signal mem : mem_type;
+
+begin
+ --
+ -- Change the next section(s) for target specific RAM blocks.
+ -- The functionality as described below must be maintained! Some target specific RAM blocks have an asychronous output.
+ -- Insert registers at the output if necessary
+ --
+ -- generic dual ported memory description
+ --
+ write_mem: process(wclk)
+ begin
+ if (wclk'event and wclk = '1') then
+ if (wreq = '1') then
+ mem(conv_integer(waddr)) <= D; -- store D in memory array
+ end if;
+ end if;
+ end process write_mem;
+
+ read_mem: process(rclk)
+ begin
+ if (rclk'event and rclk = '1') then
+ Q <= mem(conv_integer(raddr));
+ end if;
+ end process read_mem;
+
+ --
+ -- target specific example
+ --
+-- nrreq <= not rreq;
+-- nwreq <= not wreq;
+-- u1: VSR256X24M2 port map(RCK => rclk, REN => nrreq, RADR => std_logic_vector(raddr),
+-- WCK => wclk, WEN => nwreq, WADR => std_logic_vector(waddr),
+-- DI => D, DOUT => Q);
+
+end architecture structural;
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut_tstbench.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut_tstbench.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut_tstbench.vhd (revision 14)
@@ -0,0 +1,415 @@
+--
+-- file: vga_and_clut_tstbench.vhd
+-- project: VGA/LCD controller + Color Lookup Table
+-- author: Richard Herveille
+--
+-- Testbench for VGA controller + CLUT combination
+--
+-- rev 1.0 July 4th, 2001.
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity tst_bench is
+end entity tst_bench;
+
+architecture test of tst_bench is
+ --
+ -- component declarations
+ --
+
+ component vga_and_clut is
+ port(
+ CLK_I : in std_logic; -- wishbone clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ NRESET : in std_logic := '1'; -- asynchronous active low reset
+ INTA_O : out std_logic; -- interrupt request output
+
+ -- slave signals
+ ADR_I : in unsigned(10 downto 2); -- addressbus input (only 32bit databus accesses supported)
+ SDAT_I : in std_logic_vector(31 downto 0); -- Slave databus output
+ SDAT_O : out std_logic_vector(31 downto 0); -- Slave databus input
+ SEL_I : in std_logic_vector(3 downto 0); -- byte select inputs
+ WE_I : in std_logic; -- write enabel input
+ VGA_STB_I : in std_logic; -- vga strobe/select input
+ CLUT_STB_I : in std_logic; -- color-lookup-table strobe/select input
+ CYC_I : in std_logic; -- valid bus cycle input
+ ACK_O : out std_logic; -- bus cycle acknowledge output
+ ERR_O : out std_logic; -- bus cycle error output
+
+ -- master signals
+ ADR_O : out unsigned(31 downto 2); -- addressbus output
+ MDAT_I : in std_logic_vector(31 downto 0); -- Master databus input
+ SEL_O : out std_logic_vector(3 downto 0); -- byte select outputs
+ WE_O : out std_logic; -- write enable output
+ STB_O : out std_logic; -- strobe output
+ CYC_O : out std_logic; -- valid bus cycle output
+ CAB_O : out std_logic; -- continuos address burst output
+ ACK_I : in std_logic; -- bus cycle acknowledge input
+ ERR_I : in std_logic; -- bus cycle error input
+
+ -- VGA signals
+ PCLK : in std_logic; -- pixel clock
+ HSYNC : out std_logic; -- horizontal sync
+ VSYNC : out std_logic; -- vertical sync
+ CSYNC : out std_logic; -- composite sync
+ BLANK : out std_logic; -- blanking signal
+ R,G,B : out std_logic_vector(7 downto 0) -- RGB color signals
+ );
+ end component vga_and_clut;
+
+ component wb_host is
+ generic(
+ RST_LVL : std_logic := '0' -- reset level
+ );
+ port(
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+
+ cyc_o : out std_logic;
+ stb_o : out std_logic;
+ we_o : out std_logic;
+ adr_o : out std_logic_vector(31 downto 0);
+ dat_o : out std_logic_vector(31 downto 0);
+ dat_i : in std_logic_vector(31 downto 0);
+ sel_o : out std_logic_vector(3 downto 0);
+ ack_i : in std_logic;
+ err_i : in std_logic
+ );
+ end component wb_host;
+
+ component vid_mem is
+ generic(
+ ACK_DELAY : natural := 2
+ );
+ port(
+ clk_i : in std_logic;
+ adr_i : in unsigned (15 downto 0);
+ cyc_i : in std_logic;
+ stb_i : in std_logic;
+ dat_o : out std_logic_vector(31 downto 0);
+ ack_o : out std_logic
+ );
+ end component vid_mem;
+
+ --
+ -- signal declarations
+ --
+
+ -- clock & reset
+ signal clk, vga_clk : std_logic := '0';
+ signal rst : std_logic := '1';
+ signal init : std_logic := '0';
+
+ -- wishbone host
+ signal h_cyc_o, h_stb_o, h_we_o : std_logic;
+ signal h_adr_o : unsigned(31 downto 0);
+ signal h_dat_o, h_dat_i : std_logic_vector(31 downto 0);
+ signal h_sel_o : std_logic_vector(3 downto 0);
+ signal h_ack_i, h_err_i : std_logic;
+
+ -- vga master
+ signal vga_adr_o : unsigned(31 downto 2);
+ signal vga_dat_i : std_logic_vector(31 downto 0);
+ signal vga_stb_o, vga_cyc_o, vga_ack_i : std_logic;
+ signal vga_sel_o : std_logic_vector(3 downto 0);
+ signal vga_we_o, vga_err_i : std_logic;
+
+ -- vga
+ signal r, g, b : std_logic_vector(7 downto 0);
+ signal hsync, vsync, csync, blank : std_logic;
+begin
+
+ -- generate clocks
+ clk_block: block
+ begin
+ process(clk)
+ begin
+ clk <= not clk after 2.5 ns; -- 200MHz wishbone clock
+ end process;
+
+ process(vga_clk)
+ begin
+ vga_clk <= not vga_clk after 12.5 ns; -- 40MHz vga clock
+ end process;
+ end block clk_block;
+
+ -- generate reset signal
+ gen_rst: process(init, rst)
+ begin
+ if (init = '0') then
+ rst <= '0' after 100 ns;
+ init <= '1';
+ end if;
+ end process gen_rst;
+
+ --
+ -- hookup vga + clut core
+ --
+ u1: vga_and_clut port map (CLK_I => clk, RST_I => RST, ADR_I => h_adr_o(10 downto 2),
+ SDAT_I => h_dat_o, SDAT_O => h_dat_i, SEL_I => h_sel_o, WE_I => h_we_o, VGA_STB_I => h_adr_o(31),
+ CLUT_STB_I => h_adr_o(30), CYC_I => h_cyc_o, ACK_O => h_ack_i, ERR_O => h_err_i,
+ ADR_O => vga_adr_o, MDAT_I => vga_dat_i, SEL_O => vga_sel_o, WE_O => vga_we_o, STB_O => vga_stb_o,
+ CYC_O => vga_cyc_o, ACK_I => vga_ack_i, ERR_I => vga_err_i,
+ PCLK => vga_clk, HSYNC => hsync, VSYNC => vsync, CSYNC => csync, BLANK => blank, R => r, G => g, B => b);
+
+ --
+ -- hookup wishbone host
+ --
+ u2: wb_host
+ generic map (RST_LVL => '1')
+ port map (clk_i => clk, rst_i => rst, cyc_o => h_cyc_o, stb_o => h_stb_o, we_o => h_we_o, unsigned(adr_o) => h_adr_o,
+ dat_o => h_dat_o, dat_i => h_dat_i, sel_o => h_sel_o, ack_i => h_ack_i, err_i => h_err_i);
+
+ u3: vid_mem
+ generic map (ACK_DELAY => 0)
+ port map (clk_i => clk, adr_i => vga_adr_o(17 downto 2), cyc_i => vga_cyc_o,
+ stb_i => vga_stb_o, dat_o => vga_dat_i, ack_o => vga_ack_i);
+end architecture test;
+
+--
+------------------------------------
+-- Wishbone host behavioral model --
+------------------------------------
+--
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+library std;
+use std.standard.all;
+
+entity wb_host is
+ generic(
+ RST_LVL : std_logic := '1' -- reset level
+ );
+ port(
+ clk_i : in std_logic;
+ rst_i : in std_logic;
+
+ cyc_o : out std_logic;
+ stb_o : out std_logic;
+ we_o : out std_logic;
+ adr_o : out std_logic_vector(31 downto 0);
+ dat_o : out std_logic_vector(31 downto 0);
+ dat_i : in std_logic_vector(31 downto 0);
+ sel_o : out std_logic_vector(3 downto 0);
+ ack_i : in std_logic;
+ err_i : in std_logic
+ );
+end entity wb_host;
+
+architecture behavioral of wb_host is
+ -- type declarations
+ type vector_type is
+ record
+ adr : std_logic_vector(31 downto 0); -- wishbone address output
+ we : std_logic; -- wishbone write enable output
+ dat : std_logic_vector(31 downto 0); -- wishbone data output (write) or input compare value (read)
+ sel : std_logic_vector(3 downto 0); -- wishbone byte select output
+ stop : std_logic; -- last field, stop wishbone activities
+ end record;
+
+ type vector_list is array(0 to 38) of vector_type;
+
+ type states is (chk_stop, gen_cycle);
+
+ -- signal declarations
+ signal state : states;
+ signal cnt : natural := 0;
+ signal cyc, stb : std_logic;
+
+ shared variable vectors : vector_list :=
+ (
+ -- fill clut (adr(30) = '1')
+ (x"40000000",'1',x"00123456","1111",'0'), --0
+ (x"40000004",'1',x"00789abc","1111",'0'),
+ (x"40000008",'1',x"00def010","1111",'0'),
+ (x"4000000C",'1',x"00010203","1111",'0'),
+ (x"40000010",'1',x"00040506","1111",'0'),
+ (x"40000014",'1',x"00070809","1111",'0'),
+ (x"40000018",'1',x"000a0b0c","1111",'0'),
+ (x"4000001C",'1',x"00102030","1111",'0'),
+ (x"40000020",'1',x"00405060","1111",'0'),
+ (x"40000024",'1',x"00708090","1111",'0'),
+ (x"40000028",'1',x"00a0b0c0","1111",'0'),
+ (x"4000002C",'1',x"00112233","1111",'0'),
+ (x"40000030",'1',x"00445566","1111",'0'),
+ (x"40000034",'1',x"00778899","1111",'0'),
+ (x"40000038",'1',x"00aabbcc","1111",'0'),
+ (x"4000003C",'1',x"00ddeeff","1111",'0'),
+
+ -- verify data written
+ (x"40000000",'0',x"00123456","1111",'0'), --16
+ (x"40000004",'0',x"00789abc","1111",'0'),
+ (x"40000008",'0',x"00def010","1111",'0'),
+ (x"4000000C",'0',x"00010203","1111",'0'),
+ (x"40000010",'0',x"00040506","1111",'0'),
+ (x"40000014",'0',x"00070809","1111",'0'),
+ (x"40000018",'0',x"000a0b0c","1111",'0'),
+ (x"4000001C",'0',x"00102030","1111",'0'),
+ (x"40000020",'0',x"00405060","1111",'0'),
+ (x"40000024",'0',x"00708090","1111",'0'),
+ (x"40000028",'0',x"00a0b0c0","1111",'0'),
+ (x"4000002C",'0',x"00112233","1111",'0'),
+ (x"40000030",'0',x"00445566","1111",'0'),
+ (x"40000034",'0',x"00778899","1111",'0'),
+ (x"40000038",'0',x"00aabbcc","1111",'0'),
+ (x"4000003C",'0',x"00ddeeff","1111",'0'),
+
+ -- program vga controller
+ (x"80000008",'1',x"04090018","1111",'0'), --32 program horizontal timing register (25 visible pixels per line)
+ (x"8000000c",'1',x"05010003","1111",'0'), -- program vertical timing register (4 visible lines per frame)
+ (x"80000010",'1',x"00320016","1111",'0'), -- program horizontal/vertical length register (50x50 pixels)
+ (x"80000014",'1',x"10000000","1111",'0'), -- program video base address 0 register (sdram)
+ (x"8000001c",'1',x"10200000","1111",'0'), -- program color lookup table (sram)
+ (x"80000000",'1',x"00000901","1111",'0'), -- program control register (enable video system)
+
+ -- end list
+ (x"00000000",'0',x"00000000","1111",'1') --38 stop testbench
+ );
+
+begin
+ process(clk_i, cnt, ack_i, err_i)
+ variable nxt_state : states;
+ variable icnt : natural;
+ begin
+
+ nxt_state := state;
+ icnt := cnt;
+
+ case state is
+ when chk_stop =>
+ cyc <= '0'; -- no valid bus-cycle
+ stb <= '0'; -- disable strobe output
+ if (vectors(cnt).stop = '0') then
+ nxt_state := gen_cycle;
+ cyc <= '1';
+ stb <= '1';
+ end if;
+
+ when gen_cycle =>
+ cyc <= '1';
+ stb <= '1';
+ if (ack_i = '1') or (err_i = '1') then
+ nxt_state := chk_stop;
+ cyc <= '0';
+ stb <= '0';
+
+ icnt := cnt +1;
+
+ --
+ -- check assertion of ERR_I
+ --
+ if (err_i = '1') then
+ if (clk_i'event and clk_i = '1') then -- display warning only at rising edge of clock
+-- report ("ERR_I asserted at vectorno. ")& cnt
+-- severity warning;
+ report ("ERR_I asserted at vectorno. ") severity error;
+ end if;
+ end if;
+
+ --
+ -- compare DAT_I with expected data during ACK_I assertion
+ --
+ if (vectors(cnt).we = '0') then
+ if (vectors(cnt).dat /= dat_i) then
+ if (clk_i'event and clk_i = '1') then -- display warning only at rising edge of clock
+-- report ("DAT_I not equal to compare value. Expected ")& vectors(cnt).dat_i & (" received ") & dat_i;
+-- severity warning;
+ report ("DAT_I not equal to compare value") severity error;
+ end if;
+ end if;
+ end if;
+
+ end if;
+ end case;
+
+
+ if (clk_i'event and clk_i = '1') then
+ if (rst_i = RST_LVL) then
+ state <= chk_stop;
+ cyc_o <= '0';
+ stb_o <= '0';
+ adr_o <= (others => 'X');
+ dat_o <= (others => 'X');
+ we_o <= 'X';
+ sel_o <= (others => 'X');
+ else
+ state <= nxt_state;
+ cyc_o <= cyc;
+ stb_o <= stb;
+
+ if (cyc = '1') then
+ adr_o <= vectors(cnt).adr;
+ dat_o <= vectors(cnt).dat;
+ we_o <= vectors(cnt).we;
+ sel_o <= vectors(cnt).sel;
+ else
+ adr_o <= (others => 'X');
+ dat_o <= (others => 'X');
+ we_o <= 'X';
+ sel_o <= (others => 'X');
+ end if;
+ end if;
+
+ cnt <= icnt;
+ end if;
+ end process;
+end architecture behavioral;
+
+--
+------------------------
+-- video memory (ROM) --
+------------------------
+--
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity vid_mem is
+ generic(
+ ACK_DELAY : natural := 2
+ );
+ port(
+ clk_i : in std_logic;
+ adr_i : in unsigned (15 downto 0);
+ cyc_i : in std_logic;
+ stb_i : in std_logic;
+ dat_o : out std_logic_vector(31 downto 0);
+ ack_o : out std_logic
+ );
+end entity vid_mem;
+
+architecture behavioral of vid_mem is
+ signal cnt : unsigned(2 downto 0) := conv_unsigned(ACK_DELAY, 3);
+ signal my_ack : std_logic;
+begin
+ with adr_i(15 downto 0) select
+ dat_o <= x"01020304" when x"0000",
+ x"05060708" when x"0001",
+ x"090a0b0c" when x"0002",
+ x"0d0e0f00" when x"0003",
+ x"a5a5a5a5" when others;
+
+ gen_ack: process(clk_i)
+ begin
+ if (clk_i'event and clk_i = '1') then
+ if (my_ack = '1') then
+ cnt <= conv_unsigned(ACK_DELAY, 3);
+ elsif ((cyc_i = '1') and (stb_i = '1')) then
+ cnt <= cnt -1;
+ end if;
+ end if;
+ end process gen_ack;
+
+ my_ack <= '1' when ((cyc_i = '1') and (stb_i = '1') and (cnt = 0)) else '0';
+ ack_o <= my_ack;
+end architecture behavioral;
+
+
+
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/colproc.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/colproc.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/colproc.vhd (revision 14)
@@ -0,0 +1,320 @@
+--
+-- File colproc.vhd, Color Processor
+-- Project: VGA
+-- Author : Richard Herveille. Ideas and thoughts: Sherif Taher Eid
+-- rev.: 0.1 May 1st, 2001
+-- rev.: 0.2 June 23rd, 2001. Removed unused "prev_state" references from statemachine. Removed unused "dWB_Di" signal.
+-- rev.: 1.0 July 6th, 2001. Fixed a bug where the core did not repond correctly to a delayed clut_ack signal in 8bpp_pseudo_color mode.
+-- rev.: 1.1 August 2nd, 2001. Changed 24bpp section in output-decoder. Smaller/faster synthesis results.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity colproc is
+ port(
+ clk : in std_logic; -- master clock
+ ctrl_Ven : in std_logic; -- Video Enable
+
+ pixel_buffer_Di, -- Pixel Buffer data input
+ WB_Di : in std_logic_vector(31 downto 0); -- WISHBONE data input
+
+ ColorDepth : in std_logic_vector(1 downto 0); -- color depth (8bpp, 16bpp, 24bpp)
+ PseudoColor : in std_logic; -- pseudo color enabled (only for 8bpp color depth)
+
+ pixel_buffer_empty : in std_logic;
+ pixel_buffer_rreq : buffer std_logic; -- pixel buffer read request
+
+ RGB_fifo_full : in std_logic;
+ RGB_fifo_wreq : out std_logic;
+ R,G,B : out std_logic_vector(7 downto 0); -- pixel color (to RGB fifo)
+
+ clut_req : out std_logic; -- CLUT access request
+ clut_offs: out unsigned(7 downto 0); -- offset into color lookup table
+ clut_ack : in std_logic -- CLUT data acknowledge
+ );
+end entity colproc;
+
+architecture structural of colproc is
+ signal DataBuffer : std_logic_vector(31 downto 0);
+ signal colcnt : unsigned(1 downto 0);
+ signal RGBbuf_wreq : std_logic;
+begin
+ -- store word from pixelbuffer / wishbone input
+ process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (pixel_buffer_rreq = '1') then
+ DataBuffer <= pixel_buffer_Di;
+ end if;
+ end if;
+ end process;
+
+ -- extract color information from data buffer
+ statemachine: block
+ type states is (idle, fill_buf, bw_8bpp, col_8bpp, col_16bpp_a, col_16bpp_b, col_24bpp);
+ signal c_state : states;
+
+ signal Ra, Ga, Ba : std_logic_vector(7 downto 0);
+ begin
+ gen_nxt_state: process(clk, c_state, pixel_buffer_empty, ColorDepth, PseudoColor, RGB_fifo_full, colcnt, clut_ack)
+ variable nxt_state : states;
+ begin
+
+ -- initial value
+ nxt_state := c_state;
+
+ case c_state is
+ -- idle state
+ when idle =>
+ if (pixel_buffer_empty = '0') then
+ nxt_state := fill_buf;
+ end if;
+
+ when fill_buf =>
+ case ColorDepth is
+ when "00" =>
+ if (PseudoColor = '1') then
+ nxt_state := col_8bpp;
+ else
+ nxt_state := bw_8bpp;
+ end if;
+
+ when "01" =>
+ nxt_state := col_16bpp_a;
+
+ when others =>
+ nxt_state := col_24bpp;
+
+ end case;
+
+ --
+ -- 8 bits per pixel
+ --
+ when bw_8bpp =>
+ if ((RGB_fifo_full = '0') and (colcnt = 0)) then
+ nxt_state := idle;
+ end if;
+
+ when col_8bpp =>
+ if ((RGB_fifo_full = '0') and (colcnt = 0)) then
+ if (clut_ack = '1') then
+ nxt_state := idle;
+ end if;
+ end if;
+
+ --
+ -- 16 bits per pixel
+ --
+ when col_16bpp_a =>
+ if (RGB_fifo_full = '0') then
+ nxt_state := col_16bpp_b;
+ end if;
+
+ when col_16bpp_b =>
+ if (RGB_fifo_full = '0') then
+ nxt_state := idle;
+ end if;
+
+ --
+ -- 24 bits per pixel
+ --
+ when col_24bpp =>
+ if (RGB_fifo_full = '0') then
+ if (colcnt = 1) then
+ nxt_state := col_24bpp; -- stay in current state
+ else
+ nxt_state := idle;
+ end if;
+ end if;
+ end case;
+
+ if (clk'event and clk = '1') then
+ if (ctrl_Ven = '0') then
+ c_state <= idle;
+ else
+ c_state <= nxt_state;
+ end if;
+ end if;
+ end process gen_nxt_state;
+
+ --
+ -- output decoder
+ --
+ gen_odec: process(clk, c_state, pixel_buffer_empty, colcnt, DataBuffer, RGB_fifo_full, clut_ack, WB_Di, Ba, Ga, Ra)
+ variable clut_acc : std_logic;
+ variable pixelbuf_rreq : std_logic;
+ variable iR, iG, iB, iRa, iGa, iBa : std_logic_vector(7 downto 0);
+ begin
+ -- initial values
+ pixelbuf_rreq := '0';
+ RGBbuf_wreq <= '0';
+ clut_acc := '0';
+
+ iR := (others => '0');
+ iG := (others => '0');
+ iB := (others => '0');
+ iRa := (others => '0');
+ iGa := (others => '0');
+ iBa := (others => '0');
+
+ case c_state is
+ when idle =>
+ if (pixel_buffer_empty = '0') then
+ pixelbuf_rreq := '1';
+ end if;
+
+ --
+ -- 8 bits per pixel
+ --
+ when bw_8bpp =>
+ if (RGB_fifo_full = '0') then
+ RGBbuf_wreq <= '1';
+ end if;
+
+ case colcnt is
+ when "11" =>
+ iR := DataBuffer(31 downto 24);
+ iG := iR;
+ iB := iR;
+
+ when "10" =>
+ iR := DataBuffer(23 downto 16);
+ iG := iR;
+ iB := iR;
+
+ when "01" =>
+ iR := DataBuffer(15 downto 8);
+ iG := iR;
+ iB := iR;
+
+ when others =>
+ iR := DataBuffer(7 downto 0);
+ iG := iR;
+ iB := iR;
+ end case;
+
+ when col_8bpp =>
+ if ((RGB_fifo_full = '0') and (clut_ack = '1')) then
+ RGBbuf_wreq <= '1';
+ end if;
+
+ iR := WB_Di(23 downto 16);
+ iG := WB_Di(15 downto 8);
+ iB := WB_Di( 7 downto 0);
+
+ clut_acc := not RGB_fifo_full;
+
+ if ((colcnt = 0) and (clut_ack = '1')) then
+ clut_acc := '0';
+ end if;
+
+ --
+ -- 16 bits per pixel
+ --
+ when col_16bpp_a =>
+ if (RGB_fifo_full = '0') then
+ RGBbuf_wreq <= '1';
+ end if;
+ iR(7 downto 3) := DataBuffer(31 downto 27);
+ iG(7 downto 2) := DataBuffer(26 downto 21);
+ iB(7 downto 3) := DataBuffer(20 downto 16);
+
+ when col_16bpp_b =>
+ if (RGB_fifo_full = '0') then
+ RGBbuf_wreq <= '1';
+ end if;
+ iR(7 downto 3) := DataBuffer(15 downto 11);
+ iG(7 downto 2) := DataBuffer(10 downto 5);
+ iB(7 downto 3) := DataBuffer( 4 downto 0);
+
+ --
+ -- 24 bits per pixel
+ --
+ when col_24bpp =>
+ if (RGB_fifo_full = '0') then
+ RGBbuf_wreq <= '1';
+ end if;
+
+ case colcnt is
+ when "11" =>
+ iR := DataBuffer(31 downto 24);
+ iG := DataBuffer(23 downto 16);
+ iB := DataBuffer(15 downto 8);
+ iRa := DataBuffer( 7 downto 0);
+
+ when "10" =>
+ iR := Ra;
+ iG := DataBuffer(31 downto 24);
+ iB := DataBuffer(23 downto 16);
+ iRa := DataBuffer(15 downto 8);
+ iGa := DataBuffer( 7 downto 0);
+
+ when "01" =>
+ iR := Ra;
+ iG := Ga;
+ iB := DataBuffer(31 downto 24);
+ iRa := DataBuffer(23 downto 16);
+ iGa := DataBuffer(15 downto 8);
+ iBa := DataBuffer( 7 downto 0);
+
+ when others =>
+ iR := Ra;
+ iG := Ga;
+ iB := Ba;
+ end case;
+
+ when others =>
+ null;
+
+ end case;
+
+ if (clk'event and clk = '1') then
+ R <= iR;
+ G <= iG;
+ B <= iB;
+
+ if (RGBbuf_wreq = '1') then
+ Ra <= iRa;
+ Ba <= iBa;
+ Ga <= iGa;
+ end if;
+
+ if (ctrl_Ven = '0') then
+ pixel_buffer_rreq <= '0';
+ RGB_fifo_wreq <= '0';
+ clut_req <= '0';
+ else
+ pixel_buffer_rreq <= pixelbuf_rreq;
+ RGB_fifo_wreq <= RGBbuf_wreq;
+ clut_req <= clut_acc;
+ end if;
+ end if;
+ end process gen_odec;
+
+ -- assign clut offset
+ with colcnt select
+ clut_offs <= unsigned(DataBuffer(31 downto 24)) when "11",
+ unsigned(DataBuffer(23 downto 16)) when "10",
+ unsigned(DataBuffer(15 downto 8)) when "01",
+ unsigned(DataBuffer( 7 downto 0)) when others;
+
+ end block statemachine;
+
+
+ -- color counter
+ gen_colcnt: process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (ctrl_Ven = '0') then
+ colcnt <= (others => '1');
+ elsif (RGBbuf_wreq = '1') then
+ colcnt <= colcnt -1;
+ end if;
+ end if;
+ end process gen_colcnt;
+
+end architecture structural;
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_slave.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_slave.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_slave.vhd (revision 14)
@@ -0,0 +1,185 @@
+--
+-- file: wb_slave.vhd
+-- project: VGA/LCD controller
+-- author: Richard Herveille
+-- rev 1.0 May 10th, 2001
+-- rev 1.1 June 3rd, 2001. Changed WISHBONE ADR_I. Addresses are defined as byte-oriented, instead of databus independent.
+-- rev 1.2 July 15th, 2001. Added CLUT bank switching.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity wb_slave is
+ port (
+ CLK_I : in std_logic;
+ RST_I : in std_logic;
+ NRESET : in std_logic;
+ ADR_I : in unsigned(4 downto 2);
+ DAT_I : in std_logic_vector(31 downto 0);
+ DAT_O : out std_logic_vector(31 downto 0);
+ SEL_I : in std_logic_vector(3 downto 0);
+ WE_I : in std_logic;
+ STB_I : in std_logic;
+ CYC_I : in std_logic;
+ ACK_O : out std_logic;
+ ERR_O : out std_logic;
+ INTA_O : out std_logic;
+
+ -- control register settings
+ BL : out std_logic; -- blanking level
+ CSL : out std_logic; -- composite sync level
+ VSL : out std_logic; -- vsync level
+ HSL : out std_logic; -- hsync level
+ PC : out std_logic; -- pseudo color
+ CD : out std_logic_vector(1 downto 0); -- color depth
+ VBL : out std_logic_vector(1 downto 0); -- burst length
+ CBSW : out std_logic; -- clut bank switching enable
+ VBSW : out std_logic; -- video page bank switching enable
+ Ven : out std_logic; -- video system enable
+
+ -- status register inputs
+ AVMP, -- active video memory page
+ ACMP : in std_logic; -- active clut page
+ bsint_in,
+ hint_in,
+ vint_in,
+ luint_in,
+ sint_in : in std_logic; -- interrupt request signals
+
+ -- Horizontal Timing Register
+ Thsync : out unsigned(7 downto 0);
+ Thgdel : out unsigned(7 downto 0);
+ Thgate : out unsigned(15 downto 0);
+ Thlen : out unsigned(15 downto 0);
+
+ -- Vertical Timing Register
+ Tvsync : out unsigned(7 downto 0);
+ Tvgdel : out unsigned(7 downto 0);
+ Tvgate : out unsigned(15 downto 0);
+ Tvlen : out unsigned(15 downto 0);
+
+ VBARa,
+ VBARb : buffer unsigned(31 downto 2);
+ CBAR : buffer unsigned(31 downto 11)
+);
+end entity wb_slave;
+
+architecture structural of wb_slave is
+ signal ctrl, stat, htim, vtim, hvlen : std_logic_vector(31 downto 0);
+ signal HINT, VINT, BSINT, LUINT, SINT : std_logic;
+ signal HIE, VIE, BSIE : std_logic;
+ signal acc, acc32, reg_acc : std_logic;
+begin
+ acc <= CYC_I and STB_I;
+ acc32 <= SEL_I(3) and SEL_I(2) and SEL_I(1) and SEL_I(0);
+ reg_acc <= acc and acc32 and WE_I;
+ ACK_O <= acc and acc32;
+ ERR_O <= acc and not acc32;
+
+ gen_regs: process(CLK_I, nRESET)
+ begin
+ if (nReset = '0') then
+ ctrl <= (others => '0');
+ htim <= (others => '0');
+ vtim <= (others => '0');
+ hvlen <= (others => '0');
+ VBARa <= (others => '0');
+ VBARb <= (others => '0');
+ CBAR <= (others => '0');
+ elsif(CLK_I'event and CLK_I = '1') then
+ if (RST_I = '1') then
+ ctrl <= (others => '0');
+ htim <= (others => '0');
+ vtim <= (others => '0');
+ hvlen <= (others => '0');
+ VBARa <= (others => '0');
+ VBARb <= (others => '0');
+ CBAR <= (others => '0');
+ elsif (reg_acc = '1') then
+ case ADR_I is
+ when "000" => ctrl <= DAT_I;
+ when "001" => null; -- status register (see gen_stat process)
+ when "010" => htim <= DAT_I;
+ when "011" => vtim <= DAT_I;
+ when "100" => hvlen <= DAT_I;
+ when "101" => VBARa <= unsigned(DAT_I(31 downto 2));
+ when "110" => VBARb <= unsigned(DAT_I(31 downto 2));
+ when "111" => CBAR <= unsigned(DAT_I(31 downto 11));
+
+ when others => null; -- should never happen
+ end case;
+ end if;
+ end if;
+ end process gen_regs;
+
+ -- generate status register
+ gen_stat: process(CLK_I, nRESET)
+ begin
+ if (nReset = '0') then
+ stat <= (others => '0');
+ elsif(CLK_I'event and CLK_I = '1') then
+ if (RST_I = '1') then
+ stat <= (others => '0');
+ else
+ stat(17) <= ACMP;
+ stat(16) <= AVMP;
+ stat( 6) <= bsint_in or (stat(6) and not (reg_acc and WE_I and DAT_I(6)) );
+ stat( 5) <= hint_in or (stat(5) and not (reg_acc and WE_I and DAT_I(5)) );
+ stat( 4) <= vint_in or (stat(4) and not (reg_acc and WE_I and DAT_I(4)) );
+ stat( 1) <= luint_in or (stat(1) and not (reg_acc and WE_I and DAT_I(1)) );
+ stat( 0) <= sint_in or (stat(0) and not (reg_acc and WE_I and DAT_I(0)) );
+ end if;
+ end if;
+ end process gen_stat;
+
+ -- decode control register
+ BL <= ctrl(15);
+ CSL <= ctrl(14);
+ VSL <= ctrl(13);
+ HSL <= ctrl(12);
+ PC <= ctrl(11);
+ CD <= ctrl(10 downto 9);
+ VBL <= ctrl(8 downto 7);
+ CBSW <= ctrl(5);
+ VBSW <= ctrl(4);
+ BSIE <= ctrl(3);
+ HIE <= ctrl(2);
+ VIE <= ctrl(1);
+ Ven <= ctrl(0);
+
+ -- decode status register
+ BSINT <= stat(6);
+ HINT <= stat(5);
+ VINT <= stat(4);
+ LUINT <= stat(1);
+ SINT <= stat(0);
+
+ -- decode Horizontal Timing Register
+ Thsync <= unsigned(htim(31 downto 24));
+ Thgdel <= unsigned(htim(23 downto 16));
+ Thgate <= unsigned(htim(15 downto 0));
+ Thlen <= unsigned(hvlen(31 downto 16));
+
+ -- decode Vertical Timing Register
+ Tvsync <= unsigned(vtim(31 downto 24));
+ Tvgdel <= unsigned(vtim(23 downto 16));
+ Tvgate <= unsigned(vtim(15 downto 0));
+ Tvlen <= unsigned(hvlen(15 downto 0));
+
+
+ -- assign output
+ with ADR_I select
+ DAT_O <= ctrl when "000",
+ stat when "001",
+ htim when "010",
+ vtim when "011",
+ hvlen when "100",
+ std_logic_vector(VBARa & "00") when "101",
+ std_logic_vector(VBARb & "00") when "110",
+ std_logic_vector(CBAR & ACMP & "0000000000") when others;
+
+ -- generate interrupt request signal
+ INTA_O <= (HINT and HIE) or (VINT and VIE) or (BSINT and BSIE) or LUINT or SINT;
+end architecture structural;
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/csm_pb.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/csm_pb.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/csm_pb.vhd (revision 14)
@@ -0,0 +1,179 @@
+--
+-- Wishbone compliant cycle shared memory, priority based selection
+-- author: Richard Herveille
+--
+-- rev.: 1.0 july 12th, 2001. Initial release
+--
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity csm_pb is
+ generic(
+ DWIDTH : natural := 32; -- databus width
+ AWIDTH : natural := 8 -- addressbus width
+ );
+ port(
+ -- SYSCON signals
+ CLK_I : in std_logic; -- wishbone clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ nRESET : in std_logic; -- asynchronous active low reset
+
+ -- wishbone slave0 connections
+ ADR0_I : in unsigned(AWIDTH -1 downto 0); -- address input
+ DAT0_I : in std_logic_vector(DWIDTH -1 downto 0); -- data input
+ DAT0_O : out std_logic_vector(DWIDTH -1 downto 0); -- data output
+ SEL0_I : in std_logic_vector( (DWIDTH/8) -1 downto 0); -- byte select input
+ WE0_I : in std_logic; -- write enable input
+ STB0_I : in std_logic; -- strobe input
+ CYC0_I : in std_logic; -- valid bus cycle input
+ ACK0_O : out std_logic; -- acknowledge output
+ ERR0_O : out std_logic; -- error output
+
+ -- wishbone slave1 connections
+ ADR1_I : in unsigned(AWIDTH -1 downto 0); -- address input
+ DAT1_I : in std_logic_vector(DWIDTH -1 downto 0); -- data input
+ DAT1_O : out std_logic_vector(DWIDTH -1 downto 0); -- data output
+ SEL1_I : in std_logic_vector( (DWIDTH/8) -1 downto 0); -- byte select input
+ WE1_I : in std_logic; -- write enable input
+ STB1_I : in std_logic; -- strobe input
+ CYC1_I : in std_logic; -- valid bus cycle input
+ ACK1_O : out std_logic; -- acknowledge output
+ ERR1_O : out std_logic -- error output
+ );
+end entity csm_pb;
+
+architecture structural of csm_pb is
+ -- function declarations
+ function "and"(L: std_logic_vector; R : std_logic) return std_logic_vector is
+ variable tmp : std_logic_vector(L'range);
+ begin
+ for n in L'range loop
+ tmp(n) := L(n) and R;
+ end loop;
+ return tmp;
+ end function "and";
+
+ function "and"(L: std_logic; R : std_logic_vector) return std_logic_vector is
+ begin
+ return (R and L);
+ end function "and";
+
+ -- define memory array
+ type mem_array is array(2**AWIDTH -1 downto 0) of std_logic_vector(DWIDTH -1 downto 0);
+ signal mem : mem_array;
+
+ -- multiplexor select signal
+ signal wb0_acc, dwb0_acc : std_logic;
+ signal wb1_acc, dwb1_acc : std_logic;
+ signal sel_wb0 : std_logic;
+ signal sel_wb1 : std_logic;
+ signal ack0_pipe, ack1_pipe : std_logic_vector(3 downto 0);
+
+ -- multiplexed memory busses / signals
+ signal mem_adr, mem_radr : unsigned(AWIDTH -1 downto 0);
+ signal mem_dati, mem_dato : std_logic_vector(DWIDTH -1 downto 0);
+ signal mem_we : std_logic;
+
+ -- acknowledge generation
+ signal wb0_ack, wb1_ack : std_logic;
+
+ -- error signal generation
+ signal err0, err1 : std_logic_vector( (DWIDTH/8) -1 downto 0);
+
+begin
+ -- generate multiplexor select signal
+ wb0_acc <= CYC0_I and STB0_I;
+ wb1_acc <= CYC1_I and STB1_I and not sel_wb0;
+
+ process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ dwb0_acc <= wb0_acc and not wb0_ack;
+ dwb1_acc <= wb1_acc and not wb1_ack;
+ end if;
+ end process;
+
+ sel_wb0 <= wb0_acc and not dwb0_acc;
+ sel_wb1 <= wb1_acc and not dwb1_acc;
+
+ gen_ack_pipe: process(CLK_I, nRESET)
+ begin
+ if (nRESET = '0') then
+ ack0_pipe <= (others => '0');
+ ack1_pipe <= (others => '0');
+ elsif (CLK_I'event and CLK_I = '1') then
+ if (RST_I = '1') then
+ ack0_pipe <= (others => '0');
+ ack1_pipe <= (others => '0');
+ else
+ ack0_pipe <= (ack0_pipe(2 downto 0) & sel_wb0) and not wb0_ack;
+ ack1_pipe <= (ack1_pipe(2 downto 0) & sel_wb1) and not wb1_ack;
+ end if;
+ end if;
+ end process gen_ack_pipe;
+
+ -- multiplex memory bus
+-- gen_muxs: process(CLK_I)
+-- begin
+-- if (CLK_I'event and CLK_I = '1') then
+-- if (sel_wb0 = '1') then
+-- mem_adr <= adr0_i;
+-- mem_dati <= dat0_i;
+-- mem_we <= we0_i and cyc0_i and stb0_i and not wb0_ack;
+-- else
+-- mem_adr <= adr1_i;
+-- mem_dati <= dat1_i;
+-- mem_we <= we1_i and cyc1_i and stb1_i and not wb1_ack;
+-- end if;
+-- end if;
+-- end process gen_muxs;
+
+ mem_adr <= adr0_i when (sel_wb0 = '1') else adr1_i;
+ mem_dati <= dat0_i when (sel_wb0 = '1') else dat1_i;
+ mem_we <= (we0_i and cyc0_i and stb0_i) when (sel_wb0 = '1') else (we1_i and cyc1_i and stb1_i);
+
+ -- memory access
+ gen_mem: process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ -- write operation
+ if (mem_we = '1') then
+ mem(conv_integer(mem_adr)) <= mem_dati;
+ end if;
+
+ -- read operation
+ mem_radr <= mem_adr; -- FLEX RAMs require address to be registered with inclock for read operation.
+ mem_dato <= mem(conv_integer(mem_radr));
+ end if;
+ end process gen_mem;
+
+ -- assign DAT_O outputs
+ DAT1_O <= mem_dato;
+ DAT0_O <= mem_dato;
+
+ -- assign ACK_O outputs
+-- gen_ack: process(CLK_I)
+-- begin
+-- if (CLK_I'event and CLK_I = '1') then
+ wb0_ack <= ( (sel_wb0 and WE0_I) or (ack0_pipe(1)) );-- and not wb0_ack;
+ wb1_ack <= ( (sel_wb1 and WE1_I) or (ack1_pipe(1)) );-- and not wb1_ack;
+-- end if;
+-- end process gen_ack;
+ -- ACK outputs
+ ACK0_O <= wb0_ack;
+ ACK1_O <= wb1_ack;
+
+ -- ERR outputs
+ err0 <= (others => '1');
+ ERR0_O <= '1' when ( (SEL0_I /= err0) and (CYC0_I = '1') and (STB0_I = '1') ) else '0';
+
+ err1 <= (others => '1');
+ ERR1_O <= '1' when ( (SEL1_I /= err1) and (CYC1_I = '1') and (STB1_I = '1') ) else '0';
+end architecture;
+
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo.vhd (revision 14)
@@ -0,0 +1,150 @@
+--
+-- File fifo.vhd (universal FIFO)
+-- Author : Richard Herveille
+-- rev.: 0.1 May 04th, 2001
+-- rev.: 0.2 June 16th, 2001. Changed "function bitcount" until it compiled under Xilinx Webpack
+-- rev.: 0.3 June 23nd, 2001. Removed unused "dummy" variable from function bitcount.
+-- rev.: 1.0 June 29th, 2001. Synchronized Q output. Design now correctly maps to Xilinx-BlockRAMs
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity FIFO is
+ generic(
+ DEPTH : natural := 128;
+ WIDTH : natural := 32
+ );
+ port(
+ clk : in std_logic; -- clock input
+ aclr : in std_logic := '1'; -- active low asynchronous clear
+ sclr : in std_logic := '0'; -- active high synchronous clear
+
+ D : in std_logic_vector(WIDTH -1 downto 0); -- Data input
+ wreq : in std_logic; -- write request
+
+ Q : out std_logic_vector(WIDTH -1 downto 0); -- Data output
+ rreq : in std_logic; -- read request
+
+ empty, -- FIFO is empty
+ hfull, -- FIFO is half full
+ full : out std_logic -- FIFO is full
+ );
+end entity FIFO;
+
+architecture structural of FIFO is
+ -- bitcount, return no.of bits required for 'n'
+ function bitcount(n : in natural) return natural is
+ variable tmp : unsigned(32 downto 1);
+ variable cnt : natural;
+ begin
+ tmp := conv_unsigned(n, 32);
+
+-- "while..loop" is not supported by xilinx webpack yet
+-- cnt := 32;
+-- while ( (tmp(cnt) = '0') and (cnt > 0) ) loop
+-- cnt := cnt -1;
+-- end loop;
+
+ -- replaced "while..loop" with "loop..exit" for xilinx web-pack
+-- "loop" is not supported by xilinx webpack yet
+-- cnt := 32;
+-- loop
+-- exit when ( (tmp(cnt) /= '0') or (cnt = 0) );
+-- cnt := cnt -1;
+-- end loop;
+
+ -- same construction as above, now using for..loop
+-- "exit" statement not supported by xilinx webpack yet (what IS supported ?????)
+-- for cnt in 32 downto 1 loop
+-- exit when ( (tmp(cnt) /= '0') or (cnt = 0) );
+-- end loop;
+
+ -- yet another try
+ cnt := 32;
+ for dummy in 32 downto 1 loop
+ if (tmp(cnt) = '0') then
+ cnt := cnt -1;
+ end if;
+ end loop;
+
+ return cnt;
+ end function bitcount;
+
+ constant ADEPTH : natural := bitcount(DEPTH -1); -- 256 entries: range 255 downto 0
+
+ type mem_type is array (DEPTH -1 downto 0) of std_logic_vector(WIDTH -1 downto 0);
+ signal mem : mem_type; -- VHDL '87 syntax
+
+ signal rptr, wptr : unsigned(ADEPTH -1 downto 0);
+ signal fifo_cnt : unsigned(ADEPTH downto 0);
+begin
+ -- read pointer
+ gen_rd_ptr: process(clk, aclr)
+ begin
+ if (aclr = '0') then
+ rptr <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ if (sclr = '1') then
+ rptr <= (others => '0');
+ elsif (rreq = '1') then
+ rptr <= rptr +1;
+ end if;
+ end if;
+ end process gen_rd_ptr;
+
+ -- write pointer
+ gen_wr_ptr: process(clk, aclr)
+ begin
+ if (aclr = '0') then
+ wptr <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ if (sclr = '1') then
+ wptr <= (others => '0');
+ elsif (wreq = '1') then
+ wptr <= wptr +1;
+ end if;
+ end if;
+ end process gen_wr_ptr;
+
+ -- memory array operations
+ gen_mem: process(clk)
+ begin
+ if (clk'event and clk = '1') then
+ if (wreq = '1') then
+ mem(conv_integer(wptr)) <= D; -- store D in memory array
+ end if;
+ Q <= mem(conv_integer(rptr)); -- assign output
+ end if;
+ end process gen_mem;
+
+ -- number of words in fifo
+ gen_fifo_cnt: process(clk, aclr, fifo_cnt, wreq, rreq)
+ variable count : unsigned(ADEPTH downto 0);
+ begin
+ count := fifo_cnt;
+
+ if (wreq = '1') then
+ count := count +1;
+ end if;
+ if (rreq = '1') then
+ count := count -1;
+ end if;
+
+ if (aclr = '0') then
+ fifo_cnt <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ if (sclr = '1') then
+ fifo_cnt <= (others => '0');
+ else
+ fifo_cnt <= count;
+ end if;
+ end if;
+ end process gen_fifo_cnt;
+
+ -- status flags
+ empty <= '1' when (fifo_cnt = 0) else '0';
+ hfull <= fifo_cnt(ADEPTH -1);
+ full <= fifo_cnt(ADEPTH);
+end architecture structural;
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_master.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_master.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/wb_master.vhd (revision 14)
@@ -0,0 +1,387 @@
+--
+-- File wb_master.vhd, WISHBONE MASTER interface (video-memory/clut memory)
+-- Project: VGA
+-- Author : Richard Herveille
+-- rev.: 1.0 May 1st, 2001
+-- rev.: 1.1 June 3rd, 2001. Changed address related sections.
+-- rev.: 1.2 June 23nd, 2001. Removed unused "sel_vba", "vmem_offs" and "bl" signals.
+-- rev.: 1.3 July 6th, 2001. Major bug fixes; core did not respond correctly to delayed ACK_I generation.
+-- rev.: 1.4 July 15th, 2001. Added CLUT bank switching.
+-- Removed multiplier, replaced it by counters
+-- Fixed timing bug.
+-- rev.: 1.5 July 17th, 2001. Fixed a weird condition where to core got stuck during a video memory access, caused by
+-- the image_done timers.
+-- rev.: 1.6 July 31th, 2001. Fixed a bug where the video/clut banks would switch with a 1 frame delay.
+-- Fixed a bug where the data in the RGB-buffer could be overwritten.
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+library count;
+use count.count.all;
+
+entity wb_master is
+ port(
+ -- WISHBONE signals
+ CLK_I : in std_logic; -- master clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ nRESET : in std_logic; -- asynchronous active low reset
+ CYC_O : out std_logic; -- cycle output
+ STB_O : out std_logic; -- strobe output
+ CAB_O : out std_logic; -- Consecutive Address Burst output
+ WE_O : out std_logic; -- write enable output
+ ADR_O : out unsigned(31 downto 2); -- address output
+ SEL_O : out std_logic_vector(3 downto 0); -- Byte Select outputs (only 32bit accesses are supported)
+ ACK_I : in std_logic; -- WISHBONE cycle acknowledge signal
+ ERR_I : in std_logic; -- oops, bus-error
+ DAT_I : in std_logic_vector(31 downto 0); -- WISHBONE data in
+
+ SINT : out std_logic; -- Non recoverable error, interrupt host
+
+ -- control register settings
+ ctrl_Ven : in std_logic; -- video enable bit
+ ctrl_cd : in std_logic_vector(1 downto 0); -- color depth
+ ctrl_pc : in std_logic; -- 8bpp pseudo color/bw
+ ctrl_vbl : in std_logic_vector(1 downto 0); -- burst length
+ ctrl_vbsw : in std_logic; -- enable video bank switching
+ ctrl_cbsw : in std_logic; -- enable clut bank switching
+
+ -- video memory addresses
+ VBAa, -- Video Memory Base Address-A
+ VBAb : in unsigned(31 downto 2); -- Video Memory Base Address-B
+ CBA : in unsigned(31 downto 11); -- CLUT Base Address Register
+
+ Thgate : in unsigned(15 downto 0); -- horizontal visible area (in pixels)
+ Tvgate : in unsigned(15 downto 0); -- vertical visible area (in horizontal lines)
+
+ stat_AVMP : out std_logic; -- active video memory page
+ stat_ACMP : out std_logic; -- active color lookup table
+ bs_req : out std_logic; -- bank-switch request: memory page switched (when enabled). bs_req is always generated
+
+ -- to/from line fifo
+ line_fifo_wreq : out std_logic;
+ line_fifo_d : out std_logic_vector(23 downto 0);
+ line_fifo_full : in std_logic
+ );
+end entity wb_master;
+
+architecture structural of wb_master is
+ --
+ -- component declarations
+ --
+ -- FIFO
+ component FIFO is
+ generic(
+ DEPTH : natural := 128;
+ WIDTH : natural := 32
+ );
+ port(
+ clk : in std_logic; -- clock input
+ aclr : in std_logic := '1'; -- active low asynchronous clear
+ sclr : in std_logic := '0'; -- active high synchronous clear
+
+ D : in std_logic_vector(WIDTH -1 downto 0); -- Data input
+ wreq : in std_logic; -- write request
+
+ Q : out std_logic_vector(WIDTH -1 downto 0); -- Data output
+ rreq : in std_logic; -- read request
+
+ empty, -- FIFO is empty
+ hfull, -- FIFO is half full
+ full : out std_logic -- FIFO is full
+ );
+ end component FIFO;
+
+ -- color processor (convert data from pixel buffer to RGB)
+ component colproc is
+ port(
+ clk : in std_logic; -- master clock
+ ctrl_Ven : in std_logic; -- Video Enable
+
+ pixel_buffer_Di, -- Pixel Buffer data input
+ WB_Di : in std_logic_vector(31 downto 0); -- WISHBONE data input
+
+ ColorDepth : in std_logic_vector(1 downto 0); -- color depth (8bpp, 16bpp, 24bpp)
+ PseudoColor : in std_logic; -- pseudo color enabled (only for 8bpp color depth)
+
+ pixel_buffer_empty : in std_logic;
+ pixel_buffer_rreq : buffer std_logic; -- pixel buffer read request
+
+ RGB_fifo_full : in std_logic;
+ RGB_fifo_wreq : out std_logic;
+ R,G,B : out std_logic_vector(7 downto 0); -- pixel color (to RGB fifo)
+
+ clut_req : out std_logic; -- CLUT access request
+ clut_offs: out unsigned(7 downto 0); -- offset into color lookup table
+ clut_ack : in std_logic -- CLUT data acknowledge
+ );
+ end component colproc;
+
+ signal nVen : std_logic; -- NOT ctrl_Ven (video enable)
+ signal vmem_acc, clut_acc : std_logic; -- video memory access // clut access
+ signal clut_req, clut_ack : std_logic; -- clut access request // clut access acknowledge
+ signal clut_offs : unsigned(7 downto 0); -- clut memory offset
+ signal nvmem_req, vmem_ack : std_logic; -- NOT video memory access request // video memory access acknowledge
+ signal ImDoneStrb, dImDoneStrb : std_logic; -- image done (strobe signal)
+ signal pixelbuf_rreq, pixelbuf_empty, pixelbuf_empty_flush, pixelbuf_flush, pixelbuf_hfull : std_logic;
+ signal pixelbuf_q : std_logic_vector(31 downto 0);
+ signal RGBbuf_rreq, RGBbuf_wreq, RGBbuf_empty, RGBbuf_full, fill_RGBfifo, RGB_fifo_full : std_logic;
+ signal RGBbuf_d : std_logic_vector(23 downto 0);
+begin
+
+
+ --
+ -- WISHBONE block
+ --
+ WB_block: block
+ signal burst_cnt : unsigned(2 downto 0); -- video memory burst access counter
+ signal ImDone, dImDone, burst_done : std_logic; -- Done reading image from video mem // delayed ImDone // completed burst access to video mem
+ signal sel_VBA, sel_CBA : std_logic; -- select video memory base address // select clut base address
+ signal vmemA, clutA : unsigned(31 downto 2); -- video memory address // clut address
+ signal hgate_cnt, vgate_cnt : unsigned(15 downto 0); -- horizontal / vertical pixel counters
+ signal hdone, vdone : std_logic; -- horizontal count done / vertical count done
+ begin
+ --
+ -- wishbone access controller, video memory access request has highest priority (try to keep fifo full)
+ --
+ access_ctrl: process(CLK_I)
+ begin
+ if(CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ vmem_acc <= '0';
+ clut_acc <= '0';
+ else
+ clut_acc <= clut_req and ( (nvmem_req and not vmem_acc) or clut_acc);
+ vmem_acc <= (not nvmem_req or (vmem_acc and not (burst_done and vmem_ack) )) and not clut_acc;
+ end if;
+ end if;
+ end process access_ctrl;
+
+ vmem_ack <= ACK_I and vmem_acc;
+ clut_ack <= ACK_I and clut_acc;
+
+ SINT <= (vmem_acc or clut_acc) and ERR_I; -- Non recoverable error, interrupt host system
+
+ -- select active memory page
+ gen_sel_VBA: process(CLK_I)
+ begin
+ if(CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ sel_VBA <= '0';
+ elsif (ctrl_vbsw = '1') then
+ sel_VBA <= sel_VBA xor ImDoneStrb; -- select next video memory bank when finished reading current bank (and bank switch enabled)
+ end if;
+ end if;
+ end process gen_sel_VBA;
+ stat_AVMP <= sel_VBA; -- assign output
+
+ gen_sel_CBA: process(CLK_I)
+ begin
+ if(CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ sel_CBA <= '0';
+ elsif (ctrl_cbsw = '1') then
+ sel_CBA <= sel_CBA xor ImDoneStrb; -- select next clut when finished reading current video bank
+ end if;
+ end if;
+ end process gen_sel_CBA;
+ stat_ACMP <= sel_CBA; -- assign output
+
+ -- assign bank_switch_request (status register) output
+ bs_req <= ImDoneStrb and ctrl_Ven; -- bank switch request
+
+ -- generate burst counter
+ gen_burst_cnt: process(CLK_I, ctrl_vbl, burst_cnt)
+ variable bl : unsigned(2 downto 0);
+ variable val : unsigned(3 downto 0);
+ begin
+ case ctrl_vbl is
+ when "00" => bl := "000"; -- burst length 1
+ when "01" => bl := "001"; -- burst length 2
+ when "10" => bl := "011"; -- burst length 4
+ when others => bl := "111"; -- burst length 8
+ end case;
+
+ val := ('0' & burst_cnt) -1;
+
+ if (CLK_I'event and CLK_I = '1') then
+ if ( ((burst_done = '1') and (vmem_ack = '1')) or (vmem_acc = '0')) then
+ burst_cnt <= bl;
+ elsif (vmem_ack = '1') then
+ burst_cnt <= val(2 downto 0);
+ end if;
+ end if;
+
+ burst_done <= val(3);
+ end process gen_burst_cnt;
+
+ --
+ -- generate image counters
+ --
+
+ -- hgate counter
+ hgate_count: process(CLK_I, hgate_cnt)
+ variable val : unsigned(16 downto 0);
+ begin
+ val := ('0' & hgate_cnt) -1;
+
+ if (CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ hgate_cnt <= Thgate;
+ elsif (RGBbuf_wreq = '1') then
+ if (hdone = '1') then
+ hgate_cnt <= Thgate;
+ else
+ hgate_cnt <= val(15 downto 0);
+ end if;
+ end if;
+ end if;
+
+ hdone <= val(16);
+ end process hgate_count;
+
+ vgate_count: process(CLK_I, vgate_cnt)
+ variable val : unsigned(16 downto 0);
+ begin
+ val := ('0' & vgate_cnt) -1;
+
+ if (CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ vgate_cnt <= Tvgate;
+ elsif ((hdone = '1') and (RGBbuf_wreq = '1')) then
+ if (ImDone = '1') then
+ vgate_cnt <= Tvgate;
+ else
+ vgate_cnt <= val(15 downto 0);
+ end if;
+ end if;
+ end if;
+
+ vdone <= val(16);
+ end process vgate_count;
+
+ ImDone <= hdone and vdone;
+ ImDoneStrb <= ImDone and not dImDone;
+
+ gen_pix_done: process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ dImDone <= '0';
+ else
+ dImDone <= ImDone;
+ end if;
+
+ dImDoneStrb <= ImDoneStrb;
+ end if;
+ end process gen_pix_done;
+
+ --
+ -- generate addresses
+ --
+ addr: process(CLK_I, sel_VBA, VBAa, VBAb)
+ begin
+ -- select video memory base address
+ if (CLK_I'event and CLK_I = '1') then
+ -- calculate video memory address
+ if ((dImDoneStrb = '1') or (ctrl_Ven = '0')) then
+ if (sel_VBA = '0') then
+ vmemA <= VBAa;
+ else
+ vmemA <= VBAb;
+ end if;
+ elsif (vmem_ack = '1') then
+ vmemA <= vmemA + 1;
+ end if;
+ end if;
+ end process addr;
+
+ -- calculate CLUT address
+ clutA <= (CBA & sel_CBA & clut_offs);
+
+ -- generate wishbone signals
+ gen_wb_sigs: process(CLK_I, nRESET, vmemA, clutA, vmem_acc)
+ begin
+
+ -- assign wishbone address
+ if (vmem_acc = '1') then
+ ADR_O <= vmemA;
+ else
+ ADR_O <= clutA;
+ end if;
+
+ if (nRESET = '0') then
+ CYC_O <= '0';
+ STB_O <= '0';
+ SEL_O <= "1111";
+ CAB_O <= '0';
+ WE_O <= '0';
+ elsif (CLK_I'event and CLK_I = '1') then
+ if (RST_I = '1') then
+ CYC_O <= '0';
+ STB_O <= '0';
+ SEL_O <= "1111";
+ CAB_O <= '0';
+ WE_O <= '0';
+ else
+ CYC_O <= (clut_acc and clut_req and not ACK_I) or (vmem_acc and not (burst_done and vmem_ack and nvmem_req) );
+ STB_O <= (clut_acc and clut_req and not ACK_I) or (vmem_acc and not (burst_done and vmem_ack and nvmem_req) ); -- same as CYC_O; only 1 register+logic needed
+ SEL_O <= "1111"; -- only 32bit accesses are supported
+ CAB_O <= vmem_acc and not (burst_done and vmem_ack and nvmem_req);
+ WE_O <= '0'; -- read only
+ end if;
+ end if;
+ end process gen_wb_sigs;
+ end block WB_block;
+
+
+ nVen <= not ctrl_Ven;
+ pixelbuf_flush <= nVen or ImDoneStrb;
+
+ -- pixel buffer (temporary store data read from video memory)
+ pixel_buf: FIFO generic map (DEPTH => 16, WIDTH => 32)
+ port map(clk => CLK_I, sclr => pixelbuf_flush, D => DAT_I, wreq => vmem_ack, Q => pixelbuf_q, rreq => pixelbuf_rreq,
+ empty => pixelbuf_empty, hfull => pixelbuf_hfull);
+
+ nvmem_req <= not (not pixelbuf_hfull and not ImDoneStrb);
+
+ -- hookup color processor
+ gen_fill_RGBfifo: process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ fill_RGBfifo <= '0';
+ else
+ fill_RGBfifo <= (RGBbuf_empty or fill_RGBfifo) and not RGBbuf_full;
+ end if;
+ end if;
+ end process gen_fill_RGBfifo;
+ RGB_fifo_full <= not (fill_RGBfifo and not RGBbuf_full); -- not fill_RGBfifo or RGBbuf_full
+
+ pixelbuf_empty_flush <= pixelbuf_empty or pixelbuf_flush;
+ color_proc: colproc port map (clk => CLK_I, ctrl_Ven => ctrl_Ven, pixel_buffer_di => pixelbuf_q, WB_Di => DAT_I, ColorDepth => ctrl_CD,
+ PseudoColor => ctrl_PC, pixel_buffer_empty => pixelbuf_empty_flush, pixel_buffer_rreq => pixelbuf_rreq,
+ RGB_fifo_full => RGB_fifo_full, RGB_fifo_wreq => RGBbuf_wreq, R => RGBbuf_d(23 downto 16), G => RGBbuf_d(15 downto 8),
+ B => RGBbuf_d(7 downto 0), clut_req => clut_req, clut_offs => clut_offs, clut_ack => clut_ack);
+
+ -- hookup RGB buffer (temporary station between WISHBONE-clock-domain and pixel-clock-domain)
+ RGB_buf: FIFO generic map (DEPTH => 8, WIDTH => 24)
+ port map (clk => CLK_I, sclr => nVen, D => RGBbuf_d, wreq => RGBbuf_wreq, Q => line_fifo_d, rreq => RGBbuf_rreq,
+ empty => RGBbuf_empty, hfull => RGBbuf_full);
+
+ -- hookup line fifo
+ gen_lfifo_wreq: process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ if (ctrl_Ven = '0') then
+ RGBbuf_rreq <= '0';
+ else
+ RGBbuf_rreq <= not line_fifo_full and not RGBbuf_empty and not RGBbuf_rreq;
+ end if;
+ end if;
+ end process gen_lfifo_wreq;
+ line_fifo_wreq <= RGBbuf_rreq;
+
+end architecture structural;
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga_and_clut.vhd (revision 14)
@@ -0,0 +1,227 @@
+--
+-- file: vga_and_clut.vhd
+-- project: VGA/LCD controller + Color Lookup Table
+-- author: Richard Herveille
+--
+-- rev. 1.0 July 4th, 2001.
+-- rev. 1.1 July 15th, 2001. Changed cycle_shared_memory to csm_pb. The core does not require a CLKx2 clock anymore.
+-- Added CLUT bank switching
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity vga_and_clut is
+ port(
+ CLK_I : in std_logic; -- wishbone clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ NRESET : in std_logic; -- asynchronous active low reset
+ INTA_O : out std_logic; -- interrupt request output
+
+ -- slave signals
+ ADR_I : in unsigned(10 downto 2); -- addressbus input (only 32bit databus accesses supported)
+ SDAT_I : in std_logic_vector(31 downto 0); -- Slave databus output
+ SDAT_O : out std_logic_vector(31 downto 0); -- Slave databus input
+ SEL_I : in std_logic_vector(3 downto 0); -- byte select inputs
+ WE_I : in std_logic; -- write enabel input
+ VGA_STB_I : in std_logic; -- vga strobe/select input
+ CLUT_STB_I : in std_logic; -- color-lookup-table strobe/select input
+ CYC_I : in std_logic; -- valid bus cycle input
+ ACK_O : out std_logic; -- bus cycle acknowledge output
+ ERR_O : out std_logic; -- bus cycle error output
+
+ -- master signals
+ ADR_O : out unsigned(31 downto 2); -- addressbus output
+ MDAT_I : in std_logic_vector(31 downto 0); -- Master databus input
+ SEL_O : out std_logic_vector(3 downto 0); -- byte select outputs
+ WE_O : out std_logic; -- write enable output
+ STB_O : out std_logic; -- strobe output
+ CYC_O : out std_logic; -- valid bus cycle output
+ CAB_O : out std_logic; -- continuos address burst output
+ ACK_I : in std_logic; -- bus cycle acknowledge input
+ ERR_I : in std_logic; -- bus cycle error input
+
+ -- VGA signals
+ PCLK : in std_logic; -- pixel clock
+ HSYNC : out std_logic; -- horizontal sync
+ VSYNC : out std_logic; -- vertical sync
+ CSYNC : out std_logic; -- composite sync
+ BLANK : out std_logic; -- blanking signal
+ R,G,B : out std_logic_vector(7 downto 0) -- RGB color signals
+ );
+end entity vga_and_clut;
+
+architecture structural of vga_and_clut is
+ --
+ -- component declarations
+ --
+ component VGA is
+ port (
+ CLK_I : in std_logic;
+ RST_I : in std_logic;
+ NRESET : in std_logic;
+ INTA_O : out std_logic;
+
+ -- slave signals
+ ADR_I : in unsigned(4 downto 2); -- only 32bit databus accesses supported
+ SDAT_I : in std_logic_vector(31 downto 0);
+ SDAT_O : out std_logic_vector(31 downto 0);
+ SEL_I : in std_logic_vector(3 downto 0);
+ WE_I : in std_logic;
+ STB_I : in std_logic;
+ CYC_I : in std_logic;
+ ACK_O : out std_logic;
+ ERR_O : out std_logic;
+
+ -- master signals
+ ADR_O : out unsigned(31 downto 2);
+ MDAT_I : in std_logic_vector(31 downto 0);
+ SEL_O : out std_logic_vector(3 downto 0);
+ WE_O : out std_logic;
+ STB_O : out std_logic;
+ CYC_O : out std_logic;
+ CAB_O : out std_logic;
+ ACK_I : in std_logic;
+ ERR_I : in std_logic;
+
+ -- VGA signals
+ PCLK : in std_logic; -- pixel clock
+ HSYNC : out std_logic; -- horizontal sync
+ VSYNC : out std_logic; -- vertical sync
+ CSYNC : out std_logic; -- composite sync
+ BLANK : out std_logic; -- blanking signal
+ R,G,B : out std_logic_vector(7 downto 0) -- RGB color signals
+ );
+ end component vga;
+
+ component csm_pb is
+ generic(
+ DWIDTH : natural := 32; -- databus width
+ AWIDTH : natural := 8 -- addressbus width
+ );
+ port(
+ -- SYSCON signals
+ CLK_I : in std_logic; -- wishbone clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ nRESET : in std_logic; -- asynchronous active low reset
+
+ -- wishbone slave0 connections
+ ADR0_I : in unsigned(AWIDTH -1 downto 0); -- address input
+ DAT0_I : in std_logic_vector(DWIDTH -1 downto 0); -- data input
+ DAT0_O : out std_logic_vector(DWIDTH -1 downto 0); -- data output
+ SEL0_I : in std_logic_vector( (DWIDTH/8) -1 downto 0); -- byte select input
+ WE0_I : in std_logic; -- write enable input
+ STB0_I : in std_logic; -- strobe input
+ CYC0_I : in std_logic; -- valid bus cycle input
+ ACK0_O : out std_logic; -- acknowledge output
+ ERR0_O : out std_logic; -- error output
+
+ -- wishbone slave1 connections
+ ADR1_I : in unsigned(AWIDTH -1 downto 0); -- address input
+ DAT1_I : in std_logic_vector(DWIDTH -1 downto 0); -- data input
+ DAT1_O : out std_logic_vector(DWIDTH -1 downto 0); -- data output
+ SEL1_I : in std_logic_vector( (DWIDTH/8) -1 downto 0); -- byte select input
+ WE1_I : in std_logic; -- write enable input
+ STB1_I : in std_logic; -- strobe input
+ CYC1_I : in std_logic; -- valid bus cycle input
+ ACK1_O : out std_logic; -- acknowledge output
+ ERR1_O : out std_logic -- error output
+ );
+ end component csm_pb;
+
+ --
+ -- Signal declarations
+ --
+ signal CBA : unsigned(31 downto 11); -- color lookup table base address
+
+ signal vga_clut_acc : std_logic; -- vga access to color lookup table
+
+ signal empty_data : std_logic_vector(23 downto 0); -- all zeros
+
+ signal vga_ack_o, vga_ack_i, vga_err_o, vga_err_i : std_logic;
+ signal vga_adr_o : unsigned(31 downto 2);
+ signal vga_dat_i, vga_dat_o : std_logic_vector(31 downto 0); -- vga master data input, vga slave data output
+ signal vga_sel_o : std_logic_vector(3 downto 0);
+ signal vga_we_o, vga_stb_o, vga_cyc_o : std_logic;
+
+ signal vga_clut_stb : std_logic;
+
+ signal mem0_dat_o, mem1_dat_o : std_logic_vector(23 downto 0);
+ signal mem0_ack_o, mem0_err_o : std_logic;
+ signal mem1_ack_o, mem1_err_o : std_logic;
+begin
+ --
+ -- capture VGA CBAR access
+ --
+ process(CLK_I, nReset)
+ begin
+ if (nReset = '0') then
+ CBA <= (others => '0');
+ elsif (CLK_I'event and CLK_I = '1') then
+ if (RST_I = '1') then
+ CBA <= (others => '0');
+ elsif ( (SEL_I = "1111") and (CYC_I = '1') and (VGA_STB_I = '1') and (WE_I = '1') and (std_logic_vector(ADR_I(4 downto 2)) = "111") ) then
+ CBA <= unsigned(SDAT_I(31 downto 11));
+ end if;
+ end if;
+ end process;
+
+ -- generate vga_clut_acc. Because CYC_O and STB_O are generated one clock cycle after ADR_O,
+ -- vga_clut_acc may be synchronous.
+ process(CLK_I)
+ begin
+ if (CLK_I'event and CLK_I = '1') then
+ if (vga_adr_o(31 downto 11) = CBA) then
+ vga_clut_acc <= '1';
+ else
+ vga_clut_acc <= '0';
+ end if;
+ end if;
+ end process;
+
+ --
+ -- hookup vga controller
+ --
+ u1: VGA port map (CLK_I => CLK_I, RST_I => RST_I, NRESET => nReset, INTA_O => INTA_O,
+ ADR_I => ADR_I(4 downto 2), SDAT_I => SDAT_I, SDAT_O => vga_dat_o, SEL_I => SEL_I, WE_I => WE_I,
+ STB_I => VGA_STB_I, CYC_I => CYC_I, ACK_O => vga_ack_o, ERR_O => vga_err_o,
+ ADR_O => vga_adr_o, MDAT_I => vga_dat_i, SEL_O => vga_sel_o, WE_O => vga_we_o, STB_O => vga_stb_o,
+ CYC_O => vga_cyc_o, CAB_O => CAB_O, ACK_I => vga_ack_i, ERR_I => vga_err_i,
+ PCLK => PCLK, HSYNC => HSYNC, VSYNC => VSYNC, CSYNC => CSYNC, BLANK => BLANK, R => R, G => G, B => B);
+
+ --
+ -- hookup cycle shared memory
+ --
+ vga_clut_stb <= vga_stb_o when (vga_clut_acc = '1') else '0';
+
+ empty_data <= (others => '0');
+ u2: csm_pb
+ generic map (DWIDTH => 24, AWIDTH => 9)
+ port map (CLK_I => CLK_I, RST_I => RST_I, nRESET => nReset,
+ ADR0_I => vga_adr_o(10 downto 2), DAT0_I => empty_data, DAT0_O => mem0_dat_o, SEL0_I => vga_sel_o(2 downto 0),
+ WE0_I => vga_we_o, STB0_I => vga_clut_stb, CYC0_I => vga_cyc_o, ACK0_O => mem0_ack_o, ERR0_O => mem0_err_o,
+ ADR1_I => ADR_I(10 downto 2), DAT1_I => SDAT_I(23 downto 0), DAT1_O => mem1_dat_o, SEL1_I => SEL_I(2 downto 0),
+ WE1_I => WE_I, STB1_I => CLUT_STB_I, CYC1_I => CYC_I, ACK1_O => mem1_ack_o, ERR1_O => mem1_err_o);
+
+ --
+ -- assign outputs
+ --
+
+ -- wishbone master
+ CYC_O <= '0' when (vga_clut_acc = '1') else vga_cyc_o;
+ STB_O <= '0' when (vga_clut_acc = '1') else vga_stb_o;
+ ADR_O <= vga_adr_o;
+ SEL_O <= vga_sel_o;
+ WE_O <= vga_we_o;
+ vga_dat_i(31 downto 24) <= MDAT_I(31 downto 24);
+ vga_dat_I(23 downto 0) <= mem0_dat_o when (vga_clut_acc = '1') else MDAT_I(23 downto 0);
+ vga_ack_i <= mem0_ack_o when (vga_clut_acc = '1') else ACK_I;
+ vga_err_i <= mem0_err_o when (vga_clut_acc = '1') else ERR_I;
+
+ -- wishbone slave
+ SDAT_O <= (x"00" & mem1_dat_o) when (CLUT_STB_I = '1') else vga_dat_o;
+ ACK_O <= mem1_ack_o when (CLUT_STB_I = '1') else vga_ack_o;
+ ERR_O <= mem1_err_o when (CLUT_STB_I = '1') else vga_err_o;
+end architecture structural;
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo_dc.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo_dc.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/fifo_dc.vhd (revision 14)
@@ -0,0 +1,145 @@
+--
+-- File fifo.vhd (universal FIFO)
+-- Author : Richard Herveille
+-- rev. 0.1 May 04th, 2001 : Initial release
+-- rev. 1.0 May 17th, 2001 : Changed core to use dual_ported_memory entity => wrapper around target specific dual ported RAM.
+--
+-- WARNING: DO NOT CHANGE THIS FILE
+-- CHANGE "DPM.VHD" FOR TARGET SPECIFIC MEMORY BLOCKS
+--
+-- rev. 1.1: June 23nd, 2001. Removed unused "drptr" and "fifo_cnt" signals
+-- rev. 1.2: June 29th, 2001. Changed core to reflect changes in "dpm.vhd".
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity FIFO_DC is
+ generic(
+ DEPTH : natural := 128;
+ DWIDTH : natural := 32
+ );
+ port(
+ rclk : in std_logic; -- read clock input
+ wclk : in std_logic; -- write clock input
+ aclr : in std_logic := '1'; -- active low asynchronous clear
+
+ D : in std_logic_vector(DWIDTH -1 downto 0); -- Data input
+ wreq : in std_logic; -- write request
+
+ Q : out std_logic_vector(DWIDTH -1 downto 0); -- Data output
+ rreq : in std_logic; -- read request
+
+ rd_empty, -- FIFO is empty, synchronous to read clock
+ rd_full, -- FIFO is full, synchronous to read clock
+ wr_empty, -- FIFO is empty, synchronous to write clock
+ wr_full : out std_logic -- FIFO is full, synchronous to write clock
+ );
+end entity FIFO_DC;
+
+architecture structural of FIFO_DC is
+ -- dual ported memory wrapper
+ component dual_ported_memory is
+ generic(
+ AWIDTH : natural := 8;
+ DWIDTH : natural := 32
+ );
+ port(
+ wclk : in std_logic; -- write clock input
+ D : in std_logic_vector(DWIDTH -1 downto 0); -- Data input
+ waddr : in unsigned(AWIDTH -1 downto 0); -- write clock address input
+ wreq : in std_logic; -- write request
+
+ rclk : in std_logic; -- read clock input
+ Q : out std_logic_vector(DWIDTH -1 downto 0); -- Data output
+ raddr : in unsigned(AWIDTH -1 downto 0) -- read clock address input
+ );
+ end component dual_ported_memory;
+
+ -- bitcount, return no.of bits required for 'n'
+ function bitcount(n : in natural) return natural is
+ variable tmp : unsigned(32 downto 1);
+ variable cnt : integer;
+ begin
+ tmp := conv_unsigned(n, 32);
+ cnt := 32;
+
+ while ( (tmp(cnt) = '0') and (cnt > 0) ) loop
+ cnt := cnt -1;
+ end loop;
+
+ return natural(cnt);
+ end function bitcount;
+
+ constant AWIDTH : natural := bitcount(DEPTH -1); -- 256 entries: range 255 downto 0
+
+ signal rptr, wptr : unsigned(AWIDTH -1 downto 0);
+ signal ifull, iempty, wempty, wfull, rempty, rfull : std_logic;
+begin
+ --
+ -- Pointers
+ --
+ -- read pointer
+ gen_rd_ptr: process(rclk, aclr)
+ begin
+ if (aclr = '0') then
+ rptr <= (others => '0');
+ elsif (rclk'event and rclk = '1') then
+ if (rreq = '1') then
+ rptr <= rptr +1;
+ end if;
+ end if;
+ end process gen_rd_ptr;
+
+ -- write pointer
+ gen_wr_ptr: process(wclk, aclr)
+ begin
+ if (aclr = '0') then
+ wptr <= (others => '0');
+ elsif (wclk'event and wclk = '1') then
+ if (wreq = '1') then
+ wptr <= wptr +1;
+ end if;
+ end if;
+ end process gen_wr_ptr;
+
+ -- insert memory block. dual_ported_memory is a wrapper around a target specific dual ported RAM
+ mem: dual_ported_memory generic map(AWIDTH => AWIDTH, DWIDTH => DWIDTH)
+ port map(wclk => wclk, D => D, waddr => wptr, wreq => wreq, rclk => rclk, Q => Q, raddr => rptr);
+
+ --
+ -- status flags
+ --
+ iempty <= '1' when (rptr = wptr) else '0';
+ ifull <= '1' when ( (wptr - rptr) >= (DEPTH -2) ) else '0';
+
+ rd_flags: process(rclk, aclr)
+ begin
+ if (aclr = '0') then
+ rempty <= '1';
+ rfull <= '0';
+ rd_empty <= '1';
+ rd_full <= '0';
+ elsif (rclk'event and rclk = '1') then
+ rempty <= iempty;
+ rfull <= ifull;
+ rd_empty <= rempty;
+ rd_full <= rfull;
+ end if;
+ end process rd_flags;
+
+ wr_flags: process(wclk, aclr)
+ begin
+ if (aclr = '0') then
+ wempty <= '1';
+ wfull <= '0';
+ wr_empty <= '1';
+ wr_full <= '0';
+ elsif (wclk'event and wclk = '1') then
+ wempty <= iempty;
+ wfull <= ifull;
+ wr_empty <= wempty;
+ wr_full <= wfull;
+ end if;
+ end process wr_flags;
+end architecture structural;
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/pgen.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/pgen.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/pgen.vhd (revision 14)
@@ -0,0 +1,134 @@
+--
+-- File pgen.vhd, Video Pixel Generator
+-- Project: VGA
+-- Author : Richard Herveille
+-- rev.: 0.1 April 19th, 2001. Initial release
+-- rev.: 1.0 July 15th, 2001. Removed synchronized registers; static settings don't require synchronization.
+--
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity Pgen is
+ port(
+ mclk : in std_logic; -- master clock
+ pclk : in std_logic; -- pixel clock
+
+ ctrl_Ven : in std_logic; -- VideoEnable signal
+
+ -- horizontal timing settings
+ ctrl_HSyncL : in std_logic; -- horizontal sync pulse polarization level (pos/neg)
+ Thsync : in unsigned(7 downto 0); -- horizontal sync pulse width (in pixels)
+ Thgdel : in unsigned(7 downto 0); -- horizontal gate delay (in pixels)
+ Thgate : in unsigned(15 downto 0); -- horizontal gate (number of visible pixels per line)
+ Thlen : in unsigned(15 downto 0); -- horizontal length (number of pixels per line)
+
+ -- vertical timing settings
+ ctrl_VSyncL : in std_logic; -- vertical sync pulse polarization level (pos/neg)
+ Tvsync : in unsigned(7 downto 0); -- vertical sync width (in lines)
+ Tvgdel : in unsigned(7 downto 0); -- vertical gate delay (in lines)
+ Tvgate : in unsigned(15 downto 0); -- vertical gate (visible number of lines in frame)
+ Tvlen : in unsigned(15 downto 0); -- vertical length (number of lines in frame)
+
+ ctrl_CSyncL : in std_logic; -- composite sync pulse polarization level
+ ctrl_BlankL : in std_logic; -- blank signal polarization level
+
+ -- status outputs
+ eoh, -- end of horizontal
+ eov, -- end of vertical
+ Gate : out std_logic; -- vertical AND horizontal gate (logical AND function)
+
+ -- pixel control outputs
+ Hsync, -- horizontal sync pulse
+ Vsync, -- vertical sync pulse
+ Csync, -- composite sync: Hsync OR Vsync (logical OR function)
+ Blank : out std_logic -- blank signals
+ );
+end entity Pgen;
+
+architecture dataflow of Pgen is
+ --
+ -- Component declarations
+ --
+ component tgen is
+ port(
+ clk : in std_logic;
+ rst : in std_logic;
+
+ -- horizontal timing settings
+ HSyncL : in std_logic; -- horizontal sync pulse polarization level (pos/neg)
+ Thsync : in unsigned(7 downto 0); -- horizontal sync pulse width (in pixels)
+ Thgdel : in unsigned(7 downto 0); -- horizontal gate delay (in pixels)
+ Thgate : in unsigned(15 downto 0); -- horizontal gate (number of visible pixels per line)
+ Thlen : in unsigned(15 downto 0); -- horizontal length (number of pixels per line)
+
+ -- vertical timing settings
+ VSyncL : in std_logic; -- vertical sync pulse polarization level (pos/neg)
+ Tvsync : in unsigned(7 downto 0); -- vertical sync width (in lines)
+ Tvgdel : in unsigned(7 downto 0); -- vertical gate delay (in lines)
+ Tvgate : in unsigned(15 downto 0); -- vertical gate (visible number of lines in frame)
+ Tvlen : in unsigned(15 downto 0); -- vertical length (number of lines in frame)
+
+ CSyncL : in std_logic; -- composite sync pulse polarization level (pos/neg)
+ BlankL : in std_logic; -- blank signal polarization level
+
+ eol, -- end of line
+ eof, -- end of frame
+ gate, -- vertical AND horizontal gate (logical and function)
+
+ Hsync, -- horizontal sync pulse
+ Vsync, -- vertical sync pulse
+ Csync, -- composite sync pulse
+ Blank : out std_logic -- blank signal
+ );
+ end component tgen;
+
+ --
+ -- signals
+ --
+ signal eol, eof : std_logic;
+begin
+ --
+ -- timing block
+ --
+ tblk: block
+ signal nVen : std_logic; -- video enable signal (active low)
+ begin
+ -- synchronize timing/control settings (from master-clock-domain to pixel-clock-domain)
+ sync_settings: process(pclk)
+ begin
+ if (pclk'event and pclk = '1') then
+ nVen <= not ctrl_Ven;
+ end if;
+ end process sync_settings;
+
+ -- hookup video timing generator
+ vtgen: tgen port map (clk => pclk, rst => nVen, HSyncL => ctrl_HSyncL, Thsync => Thsync, Thgdel => Thgdel, Thgate => Thgate, Thlen => Thlen,
+ VsyncL => ctrl_VsyncL, Tvsync => Tvsync, Tvgdel => Tvgdel, Tvgate => Tvgate, Tvlen => Tvlen, CSyncL => ctrl_CSyncL,
+ BlankL => ctrl_BlankL, eol => eol, eof => eof, gate => gate, Hsync => Hsync, Vsync => Vsync, Csync => Csync, Blank => Blank);
+ end block tblk;
+
+ --
+ -- pixel clock
+ --
+ pblk: block
+ signal seol, seof : std_logic; -- synchronized end-of-line, end-of-frame
+ signal dseol, dseof : std_logic; -- delayed synchronized eol, eof
+ begin
+ -- synchronize eol, eof (from pixel-clock-domain to master-clock-domain)
+ sync_eol_eof: process(mclk)
+ begin
+ if (mclk'event and mclk = '1') then
+ seol <= eol;
+ dseol <= seol;
+ seof <= eof;
+ dseof <= seof;
+ eoh <= seol and not dseol;
+ eov <= seof and not dseof;
+ end if;
+ end process sync_eol_eof;
+ end block pblk;
+
+end architecture dataflow;
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/tgen.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/tgen.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/tgen.vhd (revision 14)
@@ -0,0 +1,96 @@
+--
+-- File tgen.vhd, Video Horizontal and Vertical Timing Generator
+-- Project: VGA
+-- Author : Richard Herveille
+-- rev.: 0.1 April 13th, 2001
+--
+--
+--
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity Tgen is
+ port(
+ clk : in std_logic;
+ rst : in std_logic;
+
+ -- horizontal timing settings
+ HSyncL : in std_logic; -- horizontal sync pulse polarization level (pos/neg)
+ Thsync : in unsigned(7 downto 0); -- horizontal sync pulse width (in pixels)
+ Thgdel : in unsigned(7 downto 0); -- horizontal gate delay (in pixels)
+ Thgate : in unsigned(15 downto 0); -- horizontal gate (number of visible pixels per line)
+ Thlen : in unsigned(15 downto 0); -- horizontal length (number of pixels per line)
+
+ -- vertical timing settings
+ VSyncL : in std_logic; -- vertical sync pulse polarization level (pos/neg)
+ Tvsync : in unsigned(7 downto 0); -- vertical sync width (in lines)
+ Tvgdel : in unsigned(7 downto 0); -- vertical gate delay (in lines)
+ Tvgate : in unsigned(15 downto 0); -- vertical gate (visible number of lines in frame)
+ Tvlen : in unsigned(15 downto 0); -- vertical length (number of lines in frame)
+
+ CSyncL : in std_logic; -- composite sync pulse polarization level (pos/neg)
+ BlankL : in std_logic; -- blank signals polarizatio level
+
+ eol, -- end of line
+ eof, -- end of frame
+ gate, -- vertical AND horizontal gate (logical and function)
+
+ Hsync, -- horizontal sync pulse
+ Vsync, -- vertical sync pulse
+ Csync, -- composite sync
+ Blank : out std_logic -- blank signal
+ );
+end entity Tgen;
+
+architecture dataflow of Tgen is
+ --
+ -- Component declarations
+ --
+ component vtim is
+ port(
+ clk : in std_logic; -- master clock
+ ena : in std_logic := '1'; -- count enable
+ rst : in std_logic; -- synchronous active high reset
+
+ Tsync : in unsigned(7 downto 0); -- sync duration
+ Tgdel : in unsigned(7 downto 0); -- gate delay
+ Tgate : in unsigned(15 downto 0); -- gate length
+ Tlen : in unsigned(15 downto 0); -- line time / frame time
+
+ Sync : out std_logic; -- synchronization pulse
+ Gate : out std_logic; -- gate
+ Done : out std_logic -- done with line/frame
+ );
+ end component vtim;
+
+ --
+ -- signals
+ --
+ signal Hgate, Vgate : std_logic;
+ signal Hdone : std_logic;
+ signal iHsync, iVsync, igate : std_logic;
+begin
+ -- hookup horizontal timing generator
+ hor_gen: vtim port map (clk => clk, rst => rst,
+ Tsync => Thsync, Tgdel => Thgdel, Tgate => Thgate, Tlen => Thlen,
+ Sync => iHsync, Gate => Hgate, Done => Hdone);
+
+ -- hookup vertical timing generator
+ ver_gen: vtim port map (clk => clk, ena => Hdone, rst => rst,
+ Tsync => Tvsync, Tgdel => Tvgdel, Tgate => Tvgate, Tlen => Tvlen,
+ Sync => iVsync, Gate => Vgate, Done => eof);
+
+ -- assign outputs
+ eol <= Hdone;
+ igate <= Hgate and Vgate;
+ gate <= igate;
+
+ Hsync <= iHsync xor HsyncL;
+ Vsync <= iVsync xor VsyncL;
+ Csync <= (iHsync or iVsync) xor CsyncL;
+ Blank <= igate xnor BlankL;
+end architecture dataflow;
+
+
Index: 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga.vhd
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga.vhd (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/rtl/vhdl/vga.vhd (revision 14)
@@ -0,0 +1,319 @@
+--
+-- file: vga.vhd
+-- project: VGA/LCD controller
+-- author: Richard Herveille
+--
+-- rev 1.0 May 10th, 2001
+-- rev 1.1 June 3th, 2001. Changed WISHBONE addresses. Addresses are byte oriented, instead of databus-independent
+-- rev 1.2 June 29th, 2001. Many hanges in design to reflect changes in fifo's. Design now correctly maps to Xilinx-BlockRAMs.
+-- rev 1.3 July 15th, 2001. Added CLUT bank switching
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_arith.all;
+
+entity VGA is
+ port (
+ CLK_I : in std_logic;
+ RST_I : in std_logic;
+ NRESET : in std_logic;
+ INTA_O : out std_logic;
+
+ -- slave signals
+ ADR_I : in unsigned(4 downto 2); -- only 32bit databus accesses supported
+ SDAT_I : in std_logic_vector(31 downto 0);
+ SDAT_O : out std_logic_vector(31 downto 0);
+ SEL_I : in std_logic_vector(3 downto 0);
+ WE_I : in std_logic;
+ STB_I : in std_logic;
+ CYC_I : in std_logic;
+ ACK_O : out std_logic;
+ ERR_O : out std_logic;
+
+ -- master signals
+ ADR_O : out unsigned(31 downto 2);
+ MDAT_I : in std_logic_vector(31 downto 0);
+ SEL_O : out std_logic_vector(3 downto 0);
+ WE_O : out std_logic;
+ STB_O : out std_logic;
+ CYC_O : out std_logic;
+ CAB_O : out std_logic;
+ ACK_I : in std_logic;
+ ERR_I : in std_logic;
+
+ -- VGA signals
+ PCLK : in std_logic; -- pixel clock
+ HSYNC : out std_logic; -- horizontal sync
+ VSYNC : out std_logic; -- vertical sync
+ CSYNC : out std_logic; -- composite sync
+ BLANK : out std_logic; -- blanking signal
+ R,G,B : out std_logic_vector(7 downto 0) -- RGB color signals
+ );
+end entity vga;
+
+architecture dataflow of vga is
+ --
+ -- components
+ --
+
+ -- dual clock-fifo. Change the dual-port memory section, depending on the target technology
+ component FIFO_DC is
+ generic(
+ DEPTH : natural := 128;
+ DWIDTH : natural := 32
+ );
+ port(
+ rclk : in std_logic; -- read clock input
+ wclk : in std_logic; -- write clock input
+ aclr : in std_logic := '1'; -- active low asynchronous clear
+
+ D : in std_logic_vector(DWIDTH -1 downto 0); -- Data input
+ wreq : in std_logic; -- write request
+
+ Q : out std_logic_vector(DWIDTH -1 downto 0); -- Data output
+ rreq : in std_logic; -- read request
+
+ rd_empty, -- FIFO is empty, synchronous to read clock
+ rd_full, -- FIFO is full, synchronous to read clock
+ wr_empty, -- FIFO is empty, synchronous to write clock
+ wr_full : out std_logic -- FIFO is full, synchronous to write clock
+ );
+ end component FIFO_DC;
+
+ -- WISHBONE slave block
+ component wb_slave is
+ port (
+ CLK_I : in std_logic;
+ RST_I : in std_logic;
+ NRESET : in std_logic;
+ ADR_I : in unsigned(4 downto 2);
+ DAT_I : in std_logic_vector(31 downto 0);
+ DAT_O : out std_logic_vector(31 downto 0);
+ SEL_I : in std_logic_vector(3 downto 0);
+ WE_I : in std_logic;
+ STB_I : in std_logic;
+ CYC_I : in std_logic;
+ ACK_O : out std_logic;
+ ERR_O : out std_logic;
+ INTA_O : out std_logic;
+
+ -- control register settings
+ BL : out std_logic; -- blanking level
+ CSL : out std_logic; -- composite sync level
+ VSL : out std_logic; -- vsync level
+ HSL : out std_logic; -- hsync level
+ PC : out std_logic; -- pseudo color
+ CD : out std_logic_vector(1 downto 0); -- color depth
+ VBL : out std_logic_vector(1 downto 0); -- burst length
+ CBSW : out std_logic; -- clut bank switching enable
+ VBSW : out std_logic; -- video page bank switching enable
+ Ven : out std_logic; -- video system enable
+
+ -- status register inputs
+ AVMP, -- active video memory page
+ ACMP : in std_logic; -- active clut page
+ bsint_in,
+ hint_in,
+ vint_in,
+ luint_in,
+ sint_in : in std_logic; -- interrupt request signals
+
+ -- Horizontal Timing Register
+ Thsync : out unsigned(7 downto 0);
+ Thgdel : out unsigned(7 downto 0);
+ Thgate : out unsigned(15 downto 0);
+ Thlen : out unsigned(15 downto 0);
+
+ -- Vertical Timing Register
+ Tvsync : out unsigned(7 downto 0);
+ Tvgdel : out unsigned(7 downto 0);
+ Tvgate : out unsigned(15 downto 0);
+ Tvlen : out unsigned(15 downto 0);
+
+ VBARa,
+ VBARb : buffer unsigned(31 downto 2);
+ CBAR : buffer unsigned(31 downto 11)
+ );
+ end component wb_slave;
+
+ -- WISHBONE master block
+ component wb_master is
+ port(
+ -- WISHBONE signals
+ CLK_I : in std_logic; -- master clock input
+ RST_I : in std_logic; -- synchronous active high reset
+ nRESET : in std_logic; -- asynchronous active low reset
+ CYC_O : out std_logic; -- cycle output
+ STB_O : out std_logic; -- strobe output
+ CAB_O : out std_logic; -- Consecutive Address Burst output
+ WE_O : out std_logic; -- write enable output
+ ADR_O : out unsigned(31 downto 2); -- address output
+ SEL_O : out std_logic_vector(3 downto 0); -- Byte Select outputs (only 32bit accesses are supported)
+ ACK_I : in std_logic; -- WISHBONE cycle acknowledge signal
+ ERR_I : in std_logic; -- oops, bus-error
+ DAT_I : in std_logic_vector(31 downto 0); -- WISHBONE data in
+
+ SINT : out std_logic; -- Non recoverable error, interrupt host
+
+ -- control register settings
+ ctrl_Ven : in std_logic; -- video enable bit
+ ctrl_cd : in std_logic_vector(1 downto 0); -- color depth
+ ctrl_pc : in std_logic; -- 8bpp pseudo color/bw
+ ctrl_vbl : in std_logic_vector(1 downto 0); -- burst length
+ ctrl_vbsw : in std_logic; -- enable video bank switching
+ ctrl_cbsw : in std_logic; -- enable clut bank switching
+
+ -- video memory addresses
+ VBAa, -- Video Memory Base Address-A
+ VBAb : in unsigned(31 downto 2); -- Video Memory Base Address-B
+ CBA : in unsigned(31 downto 11); -- CLUT Base Address Register
+
+ Thgate : unsigned(15 downto 0); -- horizontal visible area (in pixels)
+ Tvgate : unsigned(15 downto 0); -- vertical visible area (in horizontal lines)
+
+ stat_AVMP : out std_logic; -- active video memory page
+ stat_ACMP : out std_logic; -- active color lookup table
+ bs_req : out std_logic; -- bank-switch request: memory page switched (when enabled). bs_req is always generated
+
+ -- to/from line fifo
+ line_fifo_wreq : out std_logic;
+ line_fifo_d : out std_logic_vector(23 downto 0);
+ line_fifo_full : in std_logic
+ );
+ end component wb_master;
+
+ -- pixel generator. Generates video and pixel timing.
+ component Pgen is
+ port(
+ mclk : in std_logic; -- master clock
+ pclk : in std_logic; -- pixel clock
+
+ ctrl_Ven : in std_logic; -- VideoEnable signal
+
+ -- horizontal timing settings
+ ctrl_HSyncL : in std_logic; -- horizontal sync pulse polarization level (pos/neg)
+ Thsync : in unsigned(7 downto 0); -- horizontal sync pulse width (in pixels)
+ Thgdel : in unsigned(7 downto 0); -- horizontal gate delay (in pixels)
+ Thgate : in unsigned(15 downto 0); -- horizontal gate (number of visible pixels per line)
+ Thlen : in unsigned(15 downto 0); -- horizontal length (number of pixels per line)
+
+ -- vertical timing settings
+ ctrl_VSyncL : in std_logic; -- vertical sync pulse polarization level (pos/neg)
+ Tvsync : in unsigned(7 downto 0); -- vertical sync width (in lines)
+ Tvgdel : in unsigned(7 downto 0); -- vertical gate delay (in lines)
+ Tvgate : in unsigned(15 downto 0); -- vertical gate (visible number of lines in frame)
+ Tvlen : in unsigned(15 downto 0); -- vertical length (number of lines in frame)
+
+ ctrl_CSyncL : in std_logic; -- composite sync pulse polarization level
+ ctrl_BlankL : in std_logic; -- blank signal polarization level
+
+ -- status outputs
+ eoh, -- end of horizontal
+ eov, -- end of vertical
+ Gate : out std_logic; -- vertical AND horizontal gate (logical AND function)
+
+ -- pixel control outputs
+ Hsync, -- horizontal sync pulse
+ Vsync, -- vertical sync pulse
+ Csync, -- composite sync: Hsync OR Vsync (logical OR function)
+ Blank : out std_logic -- blank signals
+ );
+ end component Pgen;
+
+ --
+ -- signals
+ --
+
+ -- from wb_slave
+ signal ctrl_bl, ctrl_csl, ctrl_vsl, ctrl_hsl, ctrl_pc, ctrl_cbsw, ctrl_vbsw, ctrl_ven : std_logic;
+ signal ctrl_cd, ctrl_vbl : std_logic_vector(1 downto 0);
+ signal Thsync, Thgdel, Tvsync, Tvgdel : unsigned(7 downto 0);
+ signal Thgate, Thlen, Tvgate, Tvlen : unsigned(15 downto 0);
+ signal VBARa, VBARb : unsigned(31 downto 2);
+ signal CBAR : unsigned(31 downto 11);
+
+ -- to wb_slave
+ signal stat_avmp, stat_acmp, bsint, hint, vint, luint, sint : std_logic;
+
+ -- from wb_master
+ signal line_fifo_wreq : std_logic;
+ signal line_fifo_d : std_logic_vector(23 downto 0);
+
+ -- from pixel generator
+ signal cgate : std_logic; -- composite gate signal
+ signal ihsync, ivsync, icsync, iblank : std_logic; -- intermediate horizontal/vertical/composite sync, intermediate blank
+-- signal dhsync, dvsync, dcsync, dblank : std_logic; -- delayed intermedates (needed for fifo synchronization)
+
+ -- from line fifo
+ signal line_fifo_full_wr, line_fifo_empty_rd : std_logic;
+ signal RGB : std_logic_vector(23 downto 0);
+begin
+
+ -- hookup wishbone slave
+ u1: wb_slave port map (CLK_I => CLK_I, RST_I => RST_I, nRESET => nRESET, ADR_I => ADR_I, DAT_I => SDAT_I, DAT_O => SDAT_O,
+ SEL_I => SEL_I, WE_I => WE_I, STB_I => STB_I, CYC_I => CYC_I, ACK_O => ACK_O, ERR_O => ERR_O, INTA_O => INTA_O,
+ BL => ctrl_bl, csl => ctrl_csl, vsl => ctrl_vsl, hsl => ctrl_hsl, pc => ctrl_pc, cd => ctrl_cd, vbl => ctrl_vbl,
+ cbsw => ctrl_cbsw, vbsw => ctrl_vbsw, ven => ctrl_ven, acmp => stat_acmp, avmp => stat_avmp, bsint_in => bsint,
+ hint_in => hint, vint_in => vint, luint_in => luint, sint_in => sint, Thsync => Thsync, Thgdel => Thgdel,
+ Thgate => Thgate, Thlen => Thlen, Tvsync => Tvsync, Tvgdel => Tvgdel, Tvgate => Tvgate, Tvlen => Tvlen,
+ VBARa => VBARa, VBARb => VBARb, CBAR => CBAR);
+
+ -- hookup wishbone master
+ u2: wb_master port map (CLK_I => CLK_I, RST_I => RST_I, nReset => nReset, CYC_O => CYC_O, STB_O => STB_O, CAB_O => CAB_O, WE_O => WE_O,
+ ADR_O => ADR_O, SEL_O => SEL_O, ACK_I => ACK_I, ERR_I => ERR_I, DAT_I => MDAT_I, SINT => sint,
+ ctrl_Ven => ctrl_ven, ctrl_cd => ctrl_cd, ctrl_pc => ctrl_pc, ctrl_vbl => ctrl_vbl, ctrl_cbsw => ctrl_cbsw, ctrl_vbsw => ctrl_vbsw,
+ VBAa => VBARa, VBAb => VBARb, CBA => CBAR, Thgate => Thgate, Tvgate => Tvgate, stat_acmp => stat_acmp, stat_AVMP => stat_avmp,
+ bs_req => bsint, line_fifo_wreq => line_fifo_wreq, line_fifo_d => line_fifo_d, line_fifo_full => line_fifo_full_wr);
+
+ -- hookup pixel and video timing generator
+ u3: pgen port map (mclk => CLK_I, pclk => pclk, ctrl_Ven => ctrl_ven,
+ ctrl_HSyncL => ctrl_hsl, Thsync => Thsync, Thgdel => Thgdel, Thgate => Thgate, Thlen => Thlen, ctrl_VSyncL => ctrl_vsl,
+ Tvsync => Tvsync, Tvgdel => Tvgdel, Tvgate => Tvgate, Tvlen => Tvlen, ctrl_CSyncL => ctrl_csl, ctrl_BlankL => ctrl_bl,
+ eoh => hint, eov => vint, gate => cgate, Hsync => ihsync, Vsync => ivsync, Csync => icsync, Blank => iblank);
+
+ -- delay video control signals 1 clock cycle (dual clock fifo synchronizes output)
+ del_video_sigs: process(pclk)
+ begin
+ if (pclk'event and pclk = '1') then
+ HSYNC <= ihsync;
+ VSYNC <= ivsync;
+ CSYNC <= icsync;
+ BLANK <= iblank;
+ end if;
+ end process del_video_sigs;
+
+ -- hookup line-fifo
+ u4: FIFO_DC generic map (DEPTH => 256, DWIDTH => 24)
+ port map (rclk => pclk, wclk => CLK_I, aclr => ctrl_Ven, D => line_fifo_d, wreq => line_fifo_wreq,
+ q => RGB, rreq => cgate, rd_empty => line_fifo_empty_rd, wr_full => line_fifo_full_wr);
+ R <= RGB(23 downto 16);
+ G <= RGB(15 downto 8);
+ B <= RGB(7 downto 0);
+
+ -- generate interrupt signal when reading line-fifo while it is empty (line-fifo under-run interrupt)
+ luint_blk: block
+ signal luint_pclk, sluint : std_logic;
+ begin
+ gen_luint_pclk: process(pclk)
+ begin
+ if (pclk'event and pclk = '1') then
+ luint_pclk <= cgate and line_fifo_empty_rd;
+ end if;
+ end process gen_luint_pclk;
+
+ process(CLK_I)
+ begin
+ if(CLK_I'event and CLK_I = '1') then
+ sluint <= luint_pclk; -- resample at CLK_I clock
+ luint <= sluint; -- sample again, reduce metastability risk
+ end if;
+ end process;
+ end block luint_blk;
+
+end architecture dataflow;
+
+
+
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/doc/src/vga_core_enh.doc
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: 6502vhdl/tags/rel/vga_lcd/doc/src/vga_core_enh.doc
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/doc/src/vga_core_enh.doc (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/doc/src/vga_core_enh.doc (revision 14)
6502vhdl/tags/rel/vga_lcd/doc/src/vga_core_enh.doc
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: 6502vhdl/tags/rel/vga_lcd/doc/vga_core.pdf
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: 6502vhdl/tags/rel/vga_lcd/doc/vga_core.pdf
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/doc/vga_core.pdf (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/doc/vga_core.pdf (revision 14)
6502vhdl/tags/rel/vga_lcd/doc/vga_core.pdf
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: 6502vhdl/tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/sim/rtl_sim/bin/Makefile (revision 14)
@@ -0,0 +1,161 @@
+
+all: sim
+SHELL = /bin/sh
+#MS="-s"
+
+##########################################################################
+#
+# DUT Sources
+#
+##########################################################################
+DUT_SRC_DIR=../../../rtl/verilog
+_TARGETS_= $(DUT_SRC_DIR)/generic_dpram.v \
+ $(DUT_SRC_DIR)/generic_spram.v \
+ $(DUT_SRC_DIR)/csm_spram_bw.v \
+ $(DUT_SRC_DIR)/vga_colproc.v \
+ $(DUT_SRC_DIR)/vga_csm_pb.v \
+ $(DUT_SRC_DIR)/vga_cur_cregs.v \
+ $(DUT_SRC_DIR)/vga_curproc.v \
+ $(DUT_SRC_DIR)/vga_enh_top.v \
+ $(DUT_SRC_DIR)/vga_dvi_top.v \
+ $(DUT_SRC_DIR)/vga_fifo.v \
+ $(DUT_SRC_DIR)/vga_fifo_dc.v \
+ $(DUT_SRC_DIR)/vga_pgen.v \
+ $(DUT_SRC_DIR)/vga_tgen.v \
+ $(DUT_SRC_DIR)/vga_vtim.v \
+ $(DUT_SRC_DIR)/vga_wb_master.v \
+ $(DUT_SRC_DIR)/vga_wb_slave.v
+
+
+##########################################################################
+#
+# Test Bench Sources
+#
+##########################################################################
+TB_SRC_DIR=../../../bench/verilog
+_TB_= $(TB_SRC_DIR)/test_bench_top.v \
+ $(TB_SRC_DIR)/wb_slv_model.v \
+ $(TB_SRC_DIR)/wb_mast_model.v \
+ $(TB_SRC_DIR)/sync_check.v \
+ $(TB_SRC_DIR)/artsmcl18u_ram/art_hssp_512x24_bw_bist.v \
+ $(TB_SRC_DIR)/artsmcl18u_ram/art_hsdp_128x24_bist.v \
+ $(TB_SRC_DIR)/bist/rtl/verilog/bist_dp_top.v \
+ $(TB_SRC_DIR)/bist/rtl/verilog/bist_sp_top.v \
+ $(TB_SRC_DIR)/bist/rtl/verilog/bist_tp_top.v \
+ $(TB_SRC_DIR)/bist/rtl/verilog/bist.v \
+ $(TB_SRC_DIR)/artsmcl18u_ram/art_hssp_512x24_bw/art_hssp_512x24_bw.v \
+ $(TB_SRC_DIR)/artsmcl18u_ram/art_hsdp_128x24/art_hsdp_128x24.v \
+ $(TB_SRC_DIR)/wb_b3_check.v
+
+##########################################################################
+#
+# Misc Variables
+#
+##########################################################################
+
+_TOP_=test
+INCDIR="-INCDIR ./$(DUT_SRC_DIR)/ -INCDIR ./$(TB_SRC_DIR)/"
+LOGF=-LOGFILE .nclog
+NCCOMMON=-CDSLIB ncwork/cds.lib -HDLVAR ncwork/hdl.var -NOCOPYRIGHT
+UMC_LIB=/tools/dc_libraries/virtual_silicon/umc_lib.v
+GATE_NETLIST=../../../syn/out/vga_vga_and_clut_ps.v
+
+##########################################################################
+#
+# Make Targets
+#
+##########################################################################
+simw:
+ @$(MAKE) -s sim ACCESS="-ACCESS +r" WAVES="-DEFINE WAVES"
+
+ss:
+ signalscan -do waves/waves.do -waves waves/waves.trn &
+
+sim:
+ @echo ""
+ @echo "----- Running NCVLOG ... ----------"
+ @$(MAKE) $(MS) vlog \
+ TARGETS="$(_TARGETS_)" \
+ TB="$(_TB_)" \
+ INCDIR=$(INCDIR) \
+ WAVES="$(WAVES)" \
+ TOP=$(_TOP_)
+ @echo ""
+ @echo "----- Running NCELAB ... ----------"
+ @$(MAKE) $(MS) elab \
+ ACCESS="$(ACCESS)" TOP=$(_TOP_)
+ @echo ""
+ @echo "----- Running NCSIM ... ----------"
+ @$(MAKE) $(MS) ncsim \
+ TOP=$(_TOP_)
+ @echo ""
+
+
+gatew:
+ @$(MAKE) -s gate ACCESS="-ACCESS +r " WAVES="-DEFINE WAVES"
+
+gate:
+ @echo ""
+ @echo "----- Running NCVLOG ... ----------"
+ $(MAKE)$(MS) vlog \
+ TARGETS="$(UMC_LIB) $(GATE_NETLIST)" \
+ TB="$(_TB_)" \
+ INCDIR=$(INCDIR) \
+ WAVES="$(WAVES)"
+ @echo ""
+ @echo "----- Running NCELAB ... ----------"
+ @$(MAKE) $(MS) elab \
+ ACCESS="$(ACCESS)" TOP=$(_TOP_)
+ @echo ""
+ @echo "----- Running NCSIM ... ----------"
+ @$(MAKE) $(MS) ncsim TOP=$(_TOP_)
+ @echo ""
+
+
+hal:
+ @echo ""
+ @echo "----- Running HAL ... ----------"
+ hal +incdir+$(DUT_SRC_DIR) \
+ -NOP -NOS -nocheck STYVAL:USEPRT:NOBLKN:DLNBLK \
+ "$(_TARGETS_)"
+ @echo "----- DONE ... ----------"
+
+clean:
+ rm -rf ./waves/*.dsn ./waves/*.trn \
+ ncwork/worklib/* ncwork/count/* \
+ ncwork/worklib/.i* ncwork/count/.i*
+
+##########################################################################
+#
+# NCVLOG
+#
+##########################################################################
+
+vlog:
+ ncvlog $(NCCOMMON) $(LOGF) \
+ -WORK worklib $(WAVES) $(TARGETS) $(TB) $(INCDIR)
+
+##########################################################################
+#
+# NCELAB
+#
+##########################################################################
+
+elab:
+ ncelab $(NCCOMMON) $(LOGF) -APPEND_LOG \
+ -WORK worklib $(ACCESS) \
+ -NOTIMINGCHECKS \
+ worklib.$(TOP)
+
+##########################################################################
+#
+# NCSIM
+#
+##########################################################################
+
+ncsim:
+ ncsim $(NCCOMMON) $(LOGF) -APPEND_LOG \
+ -EXIT -ERRORMAX 10 worklib.$(TOP)
+
+
+
Index: 6502vhdl/tags/rel/vga_lcd/syn/bin/read.dc
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/syn/bin/read.dc (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/syn/bin/read.dc (revision 14)
@@ -0,0 +1,66 @@
+###############################################################################
+#
+# Pre Synthesis Script
+#
+# This script only reads in the design and saves it in a DB file
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+###############################################################################
+
+# ==============================================
+# Setup Design Parameters
+source ../bin/design_spec.dc
+
+# ==============================================
+# Setup Libraries
+source ../bin/lib_spec.dc
+
+# ==============================================
+# Setup IO Files
+
+append log_file ../log/$active_design "_pre.log"
+append pre_comp_db_file ../out/$design_name "_pre.db"
+
+sh rm -f $log_file
+
+# ==============================================
+# Setup Misc Variables
+
+set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
+
+# ==============================================
+# Read Design
+
+echo "+++++++++ Analyzing all design files ..." >> $log_file
+
+foreach module $design_files {
+ echo "+++++++++ Reading: $module" >> $log_file
+ echo +++++++++ Reading: $module
+ set module_file_name ""
+ append module_file_name $module ".v"
+ analyze -f verilog $module_file_name >> $log_file
+ elaborate $module >> $log_file
+ }
+
+current_design $active_design
+
+echo "+++++++++ Linking Design ..." >> $log_file
+link >> $log_file
+
+echo "+++++++++ Uniquifying Design ..." >> $log_file
+uniquify >> $log_file
+
+echo "+++++++++ Checking Design ..." >> $log_file
+check_design >> $log_file
+
+# ==============================================
+# Save Design
+echo "+++++++++ Saving Design ..." >> $log_file
+write_file -hierarchy -format db -output $pre_comp_db_file
+
Index: 6502vhdl/tags/rel/vga_lcd/syn/bin/comp.dc
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/syn/bin/comp.dc (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/syn/bin/comp.dc (revision 14)
@@ -0,0 +1,134 @@
+###############################################################################
+#
+# Actual Synthesis Script
+#
+# This script does the actual synthesis
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+###############################################################################
+
+# ==============================================
+# Setup Design Parameters
+source ../bin/design_spec.dc
+
+# ==============================================
+# Setup Libraries
+source ../bin/lib_spec.dc
+
+# ==============================================
+# Setup IO Files
+
+append log_file ../log/$active_design "_cmp.log"
+append pre_comp_db_file ../out/$design_name "_pre.db"
+append post_comp_db_file ../out/$design_name ".db"
+append post_syn_verilog_file ../out/$design_name "_ps.v"
+set junk_file /dev/null
+
+sh rm -f $log_file
+
+# ==============================================
+# Setup Misc Variables
+
+set hdlin_enable_vpp true ;# Important - this enables 'ifdefs
+
+# ==============================================
+# Read Design
+
+echo "+++++++++ Reading Design ..." >> $log_file
+read_file $pre_comp_db_file >> $log_file
+
+# ==============================================
+# Operating conditions
+
+echo "+++++++++ Setting up Operation Conditions ..." >> $log_file
+current_design $design_name
+set_operating_conditions WORST >> $log_file
+
+# Turn off automatic wire load selection, as this
+# always (WHY ???) defaults to "zero_load"
+#set auto_wire_load_selection false
+#set_wire_load_mode enclosed >> $log_file
+#set_wire_load_mode top >> $log_file
+#set_wire_load_model -name suggested_40K >> $log_file
+
+# ==============================================
+# Setup Clocks and Resets
+
+echo "+++++++++ Setting up Clocks ..." >> $log_file
+
+set_drive 0 wb_clk_i
+set_drive 0 clk_pclk_i
+
+# !!! WISHBONE Clock !!!
+set clock_period 5
+create_clock -period $clock_period wb_clk_i
+set_clock_skew -uncertainty 0.1 wb_clk_i
+set_clock_transition 0.5 wb_clk_i
+set_dont_touch_network wb_clk_i
+
+# !!! Pixel Clock !!!
+set clock_period2 20
+create_clock -period $clock_period2 clk_pclk_i
+set_clock_skew -uncertainty 0.5 clk_pclk_i
+set_clock_transition 0.9 clk_pclk_i
+set_dont_touch_network clk_pclk_i
+
+# !!! Reset !!!
+set_drive 0 wb_rst_i
+set_dont_touch_network wb_rst_i
+set_drive 0 rst_nreset_i
+set_dont_touch_network rst_nreset_i
+
+# ==============================================
+# Setup IOs
+
+echo "+++++++++ Setting up IOs ..." >> $log_file
+
+# Need to spell out external IOs
+
+set_driving_cell -cell NAND2D2 -pin Z [all_inputs] >> $junk_file
+set_load 0.2 [all_outputs]
+
+set_input_delay -max 2 -clock wb_clk_i [all_inputs]
+set_output_delay -max 2 -clock wb_clk_i [all_outputs]
+
+set_input_delay -max 2 -clock clk_pclk_i [all_inputs]
+set_output_delay -max 2 -clock clk_pclk_i [all_outputs]
+
+# ==============================================
+# Setup Area Constrains
+set_max_area 0.0
+set compile_sequential_area_recovery true
+
+# ==============================================
+# Force Ultra
+set_ultra_optimization -f
+
+# ==============================================
+# Compile Design
+
+echo "+++++++++ Starting Compile ..." >> $log_file
+#compile -map_effort low -area_effort low >> $log_file
+compile -map_effort high -area_effort high -boundary_optimization -auto_ungroup >> $log_file
+
+# ==============================================
+# Write Out the optimized design
+
+echo "+++++++++ Saving Optimized Design ..." >> $log_file
+write_file -hierarchy -format verilog -output $post_syn_verilog_file
+write_file -hierarchy -format db -output $post_comp_db_file
+
+# ==============================================
+# Create Some Basic Reports
+
+echo "+++++++++ Reporting Final Results ..." >> $log_file
+report_timing -nworst 10 >> $log_file
+report_area >> $log_file
+
+
Index: 6502vhdl/tags/rel/vga_lcd/syn/bin/lib_spec.dc
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/syn/bin/lib_spec.dc (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/syn/bin/lib_spec.dc (revision 14)
@@ -0,0 +1,36 @@
+###############################################################################
+#
+# Library Specification
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+###############################################################################
+
+# ==============================================
+# Setup Libraries
+
+set search_path [list $search_path . \
+ /tools/dc_libraries/virtual_silicon/UMCL18U250D2_2.2/design_compiler/ \
+ $hdl_src_dir]
+
+set snps [getenv "SYNOPSYS"]
+
+set synthetic_library ""
+append synthetic_library $snps "/libraries/syn/dw01.sldb "
+append synthetic_library $snps "/libraries/syn/dw02.sldb "
+append synthetic_library $snps "/libraries/syn/dw03.sldb "
+append synthetic_library $snps "/libraries/syn/dw04.sldb "
+append synthetic_library $snps "/libraries/syn/dw05.sldb "
+append synthetic_library $snps "/libraries/syn/dw06.sldb "
+append synthetic_library $snps "/libraries/syn/dw07.sldb "
+
+set target_library { umcl18u250t2_typ.db }
+set link_library ""
+append link_library $target_library " " $synthetic_library
+set symbol_library { umcl18u250t2.sdb }
+
Index: 6502vhdl/tags/rel/vga_lcd/syn/bin/design_spec.dc
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/syn/bin/design_spec.dc (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/syn/bin/design_spec.dc (revision 14)
@@ -0,0 +1,27 @@
+###############################################################################
+#
+# Design Specification
+#
+# Author: Rudolf Usselmann
+# rudi@asics.ws
+#
+# Revision:
+# 3/7/01 RU Initial Sript
+#
+#
+###############################################################################
+
+# ==============================================
+# Setup Design Parameters
+
+set design_files {ud_cnt ro_cnt vga_fifo_dc vga_fifo vga_colproc vga_vtim vga_pgen vga_wb_master vga_tgen vga_wb_slave vga_csm_pb vga_top vga_vga_and_clut}
+
+
+set design_name vga_vga_and_clut
+set active_design vga_vga_and_clut
+
+# Next Statement defines all clocks and resets in the design
+set special_net {rst clk_i pclk}
+
+set hdl_src_dir ../../rtl/verilog/
+
Index: 6502vhdl/tags/rel/vga_lcd/software/include/oc_vga_lcd.h
===================================================================
--- 6502vhdl/tags/rel/vga_lcd/software/include/oc_vga_lcd.h (nonexistent)
+++ 6502vhdl/tags/rel/vga_lcd/software/include/oc_vga_lcd.h (revision 14)
@@ -0,0 +1,123 @@
+/*
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Include file for OpenCores VGA/LCD Controller ////
+//// ////
+//// File : oc_vga_lcd.h ////
+//// Function: c-include file ////
+//// ////
+//// Authors: Richard Herveille (richard@asics.ws) ////
+//// www.opencores.org ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+//// ////
+//// Copyright (C) 2001 Richard Herveille ////
+//// richard@asics.ws ////
+//// www.asics.ws ////
+//// ////
+//// This source file may be used and distributed without ////
+//// restriction provided that this copyright statement is not ////
+//// removed from the file and that any derivative work contains ////
+//// the original copyright notice and the associated disclaimer.////
+//// ////
+//// THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY ////
+//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED ////
+//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS ////
+//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR ////
+//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, ////
+//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES ////
+//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE ////
+//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR ////
+//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ////
+//// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ////
+//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT ////
+//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE ////
+//// POSSIBILITY OF SUCH DAMAGE. ////
+//// ////
+/////////////////////////////////////////////////////////////////////
+*/
+
+/*
+ * Definitions for the Opencores VGA/LCD Controller Core
+ */
+
+/* --- Register definitions --- */
+
+/* ----- Read-write access */
+
+#define OC_VGA_CTRL 0x000 /* Control register */
+#define OC_VGA_STAT 0x004 /* Status register */
+#define OC_VGA_HTIM 0x008 /* Horizontal Timing register */
+#define OC_VGA_VTIM 0x00c /* Vertical Timing register */
+#define OC_VGA_HVLEN 0x010 /* Horizontal/Vertical length register*/
+#define OC_VGA_VBARA 0x014 /* Video Base Address register A */
+#define OC_VGA_VBARB 0x018 /* Video Base Address register B */
+
+/* ----- Bits definition */
+
+/* ----- Control register */
+ /* bits 31-16 are reserved */
+#define OC_VGA_BL (1<<15) /* Blank level bit: */
+#define OC_VGA_CSL (1<<14) /* Composite Sync. level bit */
+#define OC_VGA_VSL (1<<13) /* Vertical Sync. level bit */
+#define OC_VGA_HSL (1<<12) /* Horizontal Sync. level bit */
+ /* 0 - Positive */
+ /* 1 - Negative */
+#define OC_VGA_PC (1<<11) /* Pseudo Color (only for 8bpp mode) */
+ /* 0 - 8bpp gray scale */
+ /* 1 - 8bpp pseudo color */
+#define OC_VGA_CD (1<< 9) /* Color Depth */
+ /* 00 - 8bits per pixel */
+ /* 01 - 16bits per pixel */
+ /* 10 - 24bits per pixel */
+ /* 11 - reserved */
+#define OC_VGA_VBL (1<< 7) /* Video burst length */
+ /* 00 - 1 cycle */
+ /* 01 - 2 cycle */
+ /* 10 - 4 cycle */
+ /* 11 - 8 cycle */
+#define OC_VGA_CBSWE (1<<6) /* CLUT Bank Switch Enable bit */
+#define OC_VGA_VBSWE (1<<5) /* Video Bank Switch Enable bit */
+#define OC_VGA_CBSIE (1<<4) /* CLUT Bank Switch Interrupt enable */
+#define OC_VGA_VBSIE (1<<3) /* Video Bank Switch Interrupt enable */
+#define OC_VGA_HIE (1<<2) /* Horizontal Interrupt enable */
+#define OC_VGA_VIE (1<<1) /* Vertical Interrupt enable */
+#define OC_VGA_VEN (1<<0) /* Video Enable bit */
+ /* 1 - Enabled */
+ /* 0 - Disabled */
+
+/* ----- Status register */
+ /* bits 31-18 are reserved */
+#define OC_VGA_ACMP (1<<17) /* Active CLUT Memory Page */
+#define OC_VGA_AVMP (1<<16) /* Active Video Memory Page */
+ /* bits 15-8 are reserved */
+#define OC_VGA_CBSINT (1<<7) /* CLUT Bank Switch Interrupt pending */
+#define OC_VGA_VBSINT (1<<6) /* Bank Switch Interrupt pending */
+#define OC_VGA_HINT (1<<5) /* Horizontal Interrupt pending */
+#define OC_VGA_VINT (1<<4) /* Vertical Interrupt pending */
+ /* bits 3-2 are reserved */
+#define OC_VGA_LUINT (1<<1) /* LineFIFO Underrun interrupt pending*/
+#define OC_VGA_SINT (1<<0) /* System Error Interrupt pending */
+
+
+/* ----- Horizontal/Vertical Timing registers */
+
+#define OC_VGA_TSYNC (1<<24) /* Synchronization pulse width */
+#define OC_VGA_TGDEL (1<<16) /* Gate delay time */
+#define OC_VGA_TGATE (1<< 0) /* Gate time */
+
+
+/* ----- Horizontal and Vertcial Length registers */
+
+#define OC_VGA_THLEN (1<<16) /* Horizontal length */
+#define OC_VGA_TVLEN (1<< 0) /* Vertical length */
+
+
+/* bit testing and setting macros */
+
+#define OC_ISSET(reg,bitmask) ((reg)&(bitmask))
+#define OC_ISCLEAR(reg,bitmask) (!(OC_ISSET(reg,bitmask)))
+#define OC_BITSET(reg,bitmask) ((reg)|(bitmask))
+#define OC_BITCLEAR(reg,bitmask) ((reg)|(~(bitmask)))
+#define OC_BITTOGGLE(reg,bitmask) ((reg)^(bitmask))
+#define OC_REGMOVE(reg,value) ((reg)=(value))
\ No newline at end of file
Index: 6502vhdl/tags/rel/a
===================================================================
Index: 6502vhdl/tags/rel/COPYING
===================================================================
--- 6502vhdl/tags/rel/COPYING (nonexistent)
+++ 6502vhdl/tags/rel/COPYING (revision 14)
@@ -0,0 +1,251 @@
+[I have snipped the snail mail address of the FSF because it has
+changed in the past and is likely to change again. The current
+address should be at http://www.gnu.org/]
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 1, February 1989
+
+ Copyright (C) 1989 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The license agreements of most software companies try to keep users
+at the mercy of those companies. By contrast, our General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. The
+General Public License applies to the Free Software Foundation's
+software and to any other program whose authors commit to using it.
+You can use it for your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Specifically, the General Public License is designed to make
+sure that you have the freedom to give away or sell copies of free
+software, that you receive source code or can get it if you want it,
+that you can change the software or use pieces of it in new free
+programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of a such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must tell them their rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any program or other work which
+contains a notice placed by the copyright holder saying it may be
+distributed under the terms of this General Public License. The
+"Program", below, refers to any such program or work, and a "work based
+on the Program" means either the Program or any work containing the
+Program or a portion of it, either verbatim or with modifications. Each
+licensee is addressed as "you".
+
+ 1. You may copy and distribute verbatim copies of the Program's source
+code as you receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice and
+disclaimer of warranty; keep intact all the notices that refer to this
+General Public License and to the absence of any warranty; and give any
+other recipients of the Program a copy of this General Public License
+along with the Program. You may charge a fee for the physical act of
+transferring a copy.
+
+ 2. You may modify your copy or copies of the Program or any portion of
+it, and copy and distribute such modifications under the terms of Paragraph
+1 above, provided that you also do the following:
+
+ a) cause the modified files to carry prominent notices stating that
+ you changed the files and the date of any change; and
+
+ b) cause the whole of any work that you distribute or publish, that
+ in whole or in part contains the Program or any part thereof, either
+ with or without modifications, to be licensed at no charge to all
+ third parties under the terms of this General Public License (except
+ that you may choose to grant warranty protection to some or all
+ third parties, at your option).
+
+ c) If the modified program normally reads commands interactively when
+ run, you must cause it, when started running for such interactive use
+ in the simplest and most usual way, to print or display an
+ announcement including an appropriate copyright notice and a notice
+ that there is no warranty (or else, saying that you provide a
+ warranty) and that users may redistribute the program under these
+ conditions, and telling the user how to view a copy of this General
+ Public License.
+
+ d) You may charge a fee for the physical act of transferring a
+ copy, and you may at your option offer warranty protection in
+ exchange for a fee.
+
+Mere aggregation of another independent work with the Program (or its
+derivative) on a volume of a storage or distribution medium does not bring
+the other work under the scope of these terms.
+
+ 3. You may copy and distribute the Program (or a portion or derivative of
+it, under Paragraph 2) in object code or executable form under the terms of
+Paragraphs 1 and 2 above provided that you also do one of the following:
+
+ a) accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ b) accompany it with a written offer, valid for at least three
+ years, to give any third party free (except for a nominal charge
+ for the cost of distribution) a complete machine-readable copy of the
+ corresponding source code, to be distributed under the terms of
+ Paragraphs 1 and 2 above; or,
+
+ c) accompany it with the information you received as to where the
+ corresponding source code may be obtained. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form alone.)
+
+Source code for a work means the preferred form of the work for making
+modifications to it. For an executable file, complete source code means
+all the source code for all modules it contains; but, as a special
+exception, it need not include source code for modules which are standard
+libraries that accompany the operating system on which the executable
+file runs, or for standard header files or definitions files that
+accompany that operating system.
+
+ 4. You may not copy, modify, sublicense, distribute or transfer the
+Program except as expressly provided under this General Public License.
+Any attempt otherwise to copy, modify, sublicense, distribute or transfer
+the Program is void, and will automatically terminate your rights to use
+the Program under this License. However, parties who have received
+copies, or rights to use copies, from you under this General Public
+License will not have their licenses terminated so long as such parties
+remain in full compliance.
+
+ 5. By copying, distributing or modifying the Program (or any work based
+on the Program) you indicate your acceptance of this license to do so,
+and all its terms and conditions.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the original
+licensor to copy, distribute or modify the Program subject to these
+terms and conditions. You may not impose any further restrictions on the
+recipients' exercise of the rights granted herein.
+
+ 7. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of the license which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+the license, you may choose any version ever published by the Free Software
+Foundation.
+
+ 8. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to humanity, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest to
+attach them to the start of each source file to most effectively convey
+the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+
+ Copyright (C) 19yy
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19xx name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, the
+commands you use may be called something other than `show w' and `show
+c'; they could even be mouse-clicks or menu items--whatever suits your
+program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ program `Gnomovision' (a program to direct compilers to make passes
+ at assemblers) written by James Hacker.
+
+ , 1 April 1989
+ Ty Coon, President of Vice
+
+That's all there is to it!
Index: 6502vhdl/tags/rel/root.bat
===================================================================
--- 6502vhdl/tags/rel/root.bat (nonexistent)
+++ 6502vhdl/tags/rel/root.bat (revision 14)
@@ -0,0 +1,2 @@
+
+set CVSROOT=:pserver:huyvo@cvs.opencores.org:/home/oc/cvs
6502vhdl/tags/rel/root.bat
Property changes :
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: 6502vhdl/tags/rel/NEWS
===================================================================
--- 6502vhdl/tags/rel/NEWS (nonexistent)
+++ 6502vhdl/tags/rel/NEWS (revision 14)
@@ -0,0 +1,1370 @@
+Changes since 1.11.8:
+
+* CVS now knows how to report, as well as record, `P' record types.
+
+* When running the `cvs history' command, clients will now send the
+ long-accepted `-e' option, for all records, rather than explicitly requesting
+ `P' record types, a request which servers prior to 1.11.7 will reject with a
+ fatal error message.
+
+* A problem with locating files requested by case insensitive clients which was
+ accidentally introduced in 1.11.6 as part of a fix for a data loss problem
+ involving `cvs add's from case insensitive clients has been fixed. The
+ relevant error message was `cvs [ aborted]: filE,v is ambiguous;
+ could mean FILE,v or file,v'.
+
+* Attempts to use the global `-l' option, removed from both client and server
+ as of version 1.11.6, will now elicit a warning rather than a fatal error
+ from the server.
+
+Changes from 1.11.7 to 1.11.8:
+
+* A problem in the CVS getpass library that could cause passwords to echo on
+ some systems has been fixed.
+
+Changes from 1.11.6 to 1.11.7:
+
+* A segfault that could occur in very rare cases where the stat of a file
+ failed during a diff has been fixed.
+
+* Any user with write privleges to the CVSROOT/checkoutlist file could pass
+arbitrary format strings directly through to a printf function. This was
+probably bad and has been fixed. White space at the beginning of error strings
+in checkoutlist is now ignored properly.
+
+* In client/server mode, most messages from CVS now contain the actual
+command name rather than the generic "server".
+
+* A long-standing bug that prevented most client/server updates from being
+logged in the history file has been fixed.
+
+* Updates done via a patch ("P" status) are now logged in the history file
+by default and the corresponding "P" history record type is now documented.
+If you're setting the LogHistory option in your CVSROOT/config file, you may
+want to add "P" to the list of record types.
+
+* CVS now will always compile and its own getpass() function (originally from
+GNULIB) in favor of any system one that may exist. This avoids some problems
+with long passwords on some systems and updates us to POSIX.2 compliance, since
+getpass() was removed from the POSIX.2 specification.
+
+* A bug that allowed a write lock to be created in a directory despite
+there being existing read locks when using LockDir in CVSROOT/config has
+been fixed.
+
+* A bug with short patches (`rdiff -s') which caused rdiff to sometimes report
+differences that did not exist has been fixed.
+
+* Some minor corrections were made to the diff code to keep diff & rdiff from
+printing diff headers with empty change texts when two files have different
+revision numbers but the same content.
+
+* The global '-l' option, which suppressed history logging, has been removed
+from both client and server.
+
+Changes from 1.11.5 to 1.11.6:
+
+* A warning message is now issued if an administrative file contains
+more than one DEFAULT entry.
+
+* An error running a verifymsg script (such as referencing an unset user
+variable or the script not existing) now causes the verification to
+fail.
+
+* Errors in administrative files commands (like unset user variables)
+are no longer reported unless the command is actually executed.
+
+* When a file is initially checked out, its last access time is now set
+to the current time rather than being set to the time the file was last
+checked in like the modification time is.
+
+* The Checkin.prog and Update.prog functionality has been removed. This
+fuctionality previously allowed executables to be specified in the modules file
+to be run at update and checkin time, but users could edit these files on a per
+workspace basis, creating a security hole.
+
+* contrib/rcs2log and src/cvsbug now use the BSD mktemp program to create
+their temp files and directories on systems which provide it.
+
+* Corrected the path in a failed write error message.
+
+* Autoconf and Automake are no longer run automatically unless you run
+configure with --enable-maintainer-mode. Accordingly, noautomake.sh is
+no longer needed and has been removed.
+
+* We've standardized on Automake version 1.7.5 and Autoconf version 2.57 to get
+at a few new macros. Again, this should only really affect developers. See
+the section of the INSTALL file about using the autotools if you are compiling
+CVS yourself.
+
+Changes from 1.11.4 to 1.11.5:
+
+* Fixed a security hole in the CVS server by which users with read only access
+could gain write access. This issue does not affect client builds. The
+Common Vulnerabilities and Exposures project (cve.mitre.org) has assigned the
+name CAN-2003-0015 to this issue. See
+ for more
+information.
+
+* Fixed some bugs where revision numbers starting with 0 (like 0.3)
+weren't correctly handled. (CVS doesn't normally use such revision
+numbers, but users may be able to force it to do so and old RCS files
+might.)
+
+Changes from 1.11.3 to 1.11.4:
+
+* Some minor changes to allow the code to compile on Windows platforms.
+
+Changes from 1.11.2 to 1.11.3:
+
+* The tag/rtag code has been fixed to once again lock just a single
+directory at a time.
+
+* There was a bug where certain error conditions could cause the server
+to go into an infinite loop. There was also a bug that caused a
+compressed connection from an older client to hang on shutdown. These
+bugs have been fixed.
+
+* Fixed a bug that caused the server to reject most watch commands.
+
+* When waiting for another user's lock, the message timestamps are now
+in UTC rather than the server's local time.
+
+* The options.h file is no longer used. This fixes a bug that occurred when
+1.11.2 was compiled on Windows platforms.
+
+* We've standardized on Automake version 1.6.3 and Autoconf version 2.53.
+They are cleaner, less bug prone, and will hopfully allow me to start updating
+sanity.sh to use Autotest and Autoshell. Again, this should only really affect
+developers. See the section of the INSTALL file about using the autotools if
+you are compiling CVS yourself.
+
+* Fixed a bug in the log/rlog code when a revision range crosses a
+branch point.
+
+* Fixed a bug where filenames starting with - would be misinterpreted as
+options when using client/server mode.
+
+Changes from 1.11.1p1 to 1.11.2:
+
+* There is a new feature, enabled by RereadLogAfterVerify in CVSROOT/config,
+which tells CVS to reread the log message after running the verifymsg
+script. This allows the verifymsg script to reformat or otherwise
+modify the log message.
+
+* The interpretation of revision ranges using :: in "log" and "rlog"
+has changed: a::b now excludes the log message from revision a but
+includes the log message from revision b. Also, revision ranges that
+cross branch points should now work.
+
+* zlib has been updated to version 1.4. There is a security advisory
+out in regards to 1.3. This should fix that problem.
+
+* The "log" and "rlog" commands now have a -S option to suppress the
+header information when no revisions are selected.
+
+* A serious error that allowed read-only users to tag files has been
+corrected.
+
+* The "annotate" command will no longer annotate binary files unless
+you specify the new -F option.
+
+* The "tag" and "rtag" commands will no longer move or delete branch
+tags unless you use the new -B option. (This prevents accidental
+changes to branch tags that are hard to undo.)
+
+* We've standardized on the 1.5 Automake release for the moment. Again, this
+should only really affect developers. See the section of the INSTALL file
+about using the autotools if you are compiling CVS yourself.
+
+Changes from 1.11.1 to 1.11.1p1:
+
+* Read only access was broken - now fixed.
+
+Changes from 1.11 to 1.11.1:
+
+* There was a locking bug in the tag/rtag code that could lose changes
+made to a file while the tag operation was in progress. This has been
+fixed, but all of the directories being tagged are now locked for the
+entire duration of the tag operation rather than only one directory at a
+time.
+
+* The "cvs diff" command now accepts the -y/--side=by-side and -T/
+--initial-tab options. (To use these options with a remote repository,
+both the client and the server must support them.)
+
+* The expansion of the loginfo format string has changed slightly.
+Previously, the expansion was surrounded by single quotes ('); if a file
+name contained a single quote character, the string would not be parsed
+as a single entity by the Unix shell (and it would not be possible to
+parse it unambiguously). Now the expansion is surrounded by double
+quotes (") and any embedded dollar signs ($), backticks (`), backslashes
+(\), and double quotes are preceded by a backslash. This is parsed as a
+single entity by the shell reguardless of content. This change should
+not be noticable unless you're not using a Unix shell or you have
+embedded the format string inside a double quoted string.
+
+* There was a bug in the diff code which sometimes caused conflicts to
+be flagged which shouldn't have been. This has been fixed.
+
+* New "cvs rlog" and "cvs rannotate" commands have been added to get log
+messages and annotations without having to have a checked-out copy.
+
+* Exclusive revision ranges have been added to "cvs log" using ::
+(similar to "cvs admin -o").
+
+* The VMS client now accepts wildcards if you're running VMS 7.x.
+
+* ZLIB has been updated to version 1.1.3, the most current version. This
+includes mostly some optimizations and minor bug fixes.
+
+* The ~/.cvspass file has a slightly modified format. CVSROOTs are now
+stored in a new canonical form - hostnames are now case insensitive and
+port numbers are always stored in the new format. Until a new login for
+a particular CVSROOT is performed with the new version of CVS, new and
+old versions of CVS should interoperate invisibly. After that point, an
+extra login using the old version of CVS may be necessary to continue to
+allow the new and old versions of CVS to interoperate using the same
+~/.cvspass file and CVSROOT. The exception to this rule occurs when the
+CVSROOTs used with the different versions use case insensitively
+different hostnames, for example, "empress", and "empress.2-wit.com".
+
+* A password and a port number may now be specified in CVSROOT for
+pserver connections. The new format is:
+
+ :pserver:[[user][:password]@]host[:[port]]/path
+
+Note that passwords specified in a checkout command will be saved in the
+clear in the CVS/Root file in each created directory, so this is not
+recommended, except perhaps when accessing anonymous repositories or the
+like.
+
+* The distribution has been converted to use Automake. This shouldn't
+affect most users except to ease some portability concerns, but if you
+are building from the repository and encounter problems with the
+makefiles, you might try running ./noautomake.sh after a fresh update
+-AC.
+
+Changes from 1.10 to 1.11:
+
+* The "cvs update" command has a new -C option to get clean copies from
+the repository, abandoning any local changes.
+
+* The new "cvs version" command gives a short version message. If
+the repository is remote, both the client and server versions are
+reported.
+
+* "cvs admin -t" now works correctly in client/server mode.
+
+* The "cvs history" command output format has changed -- the date
+now includes the year and is given is ISO 8601 format (yyyy-mm-dd).
+Also, the new LogHistory option in CVSROOT/config can be used to
+control what information gets recorded in the log file and code has
+been added to record file removals.
+
+* The buggy PreservePermissions code has been disabled.
+
+* Anonymous read-only access can now be done without requiring a
+password. On the server side, simply give that user (presumably
+`anonymous') an empty password in the CVSROOT/passwd file, and then
+any received password will authenticate successfully.
+
+* There is a new access method :fork: which is similar to :local:
+except that it is implemented via the CVS remote protocol, and thus
+has a somewhat different set of quirks and bugs.
+
+* The -d command line option no longer updates the CVS/Root file. For
+one thing, the CVS 1.9/1.10 behavior never had updated CVS/Root in
+subdirectories, and for another, it didn't seem that popular in
+general. So this change restores the CVS 1.8 behavior (which is also
+the CVS 1.9/1.10 behavior if the environment variable
+CVS_IGNORE_REMOTE_ROOT is set; with this change,
+CVS_IGNORE_REMOTE_ROOT no longer has any effect).
+
+* It is now possible for a single CVS command to recurse into several
+CVS roots. This includes roots which are located on several servers,
+or which are both remote and local. CVS will make connections to as
+many servers as necessary.
+
+* It is now possible to put the CVS lock files in a directory
+set by the new LockDir option in CVSROOT/config. The default
+continues to be to put the lock files in the repository itself.
+
+Changes from 1.9 to 1.10:
+
+* A bug was discovered in the -t/-f wrapper support that can cause
+serious data loss. Because of this (and also the fact that it doesn't
+work at all in client/server mode), the -t/-f wrapper code has been
+disabled until it can be fixed.
+
+* There is a new feature, enabled by TopLevelAdmin in CVSROOT/config,
+which tells CVS to modify the behavior of the "checkout" command. The
+command now creates a CVS directory at the top level of the new
+working directory, in addition to CVS directories created within
+checked-out directories. See the Cederqvist for details.
+
+* There is an optional set of features, enabled by PreservePermissions
+in CVSROOT/config, which allow CVS to store unix-specific file
+information such as permissions, file ownership, and links. See the
+Cederqvist for details.
+
+* One can now authenticate and encrypt using the GSSAPI network
+security interface. For details see the Cederqvist's description of
+specifying :gserver: in CVSROOT, and the -a global option.
+
+* All access to RCS files is now implemented internally rather than by
+calling RCS programs. The main user-visible consequence of this is
+that there is no need to worry about making sure that CVS finds the
+correct version of RCS. The -b global option and the RCSBIN setting
+in CVSROOT/config are still accepted but don't do anything. The
+$RCSBIN internal variable in administrative files is no longer
+accepted.
+
+* There is a new syntax, "cvs admin -orev1::rev2", which collapses the
+revisions between rev1 and rev2 without deleting rev1 or rev2
+themselves.
+
+* There is a new administrative file CVSROOT/config which allows one
+to specify miscellaneous aspects of CVS configuration. Currently
+supported here:
+
+ - SystemAuth, allows you to prevent pserver from checking for system
+ usernames/passwords.
+
+For more information see the "config" section of cvs.texinfo.
+
+* When setting up the pserver server, one now must specify the
+allowable CVSROOT directories in inetd.conf. See the Password
+authentication server section of cvs.texinfo for details. Note that
+this implies that everyone who is running a pserver server must edit
+inetd.conf when upgrading their CVS.
+
+* The client no longer needs an external patch program (assuming both
+the client and the server have been updated to the new version).
+
+* "cvs admin [options]" will now recurse. In previous versions of
+CVS, it was an error and one needed to specify "cvs admin [options] ."
+to recurse. This change brings admin in line with the other CVS
+commands.
+
+* New "logout" command to remove the password for a remote cvs
+repository from the cvspass file.
+
+* Read-only repository access is implemented for the
+password-authenticated server (other access methods are just governed
+by Unix file permissions, since they require login access to the
+repository machine anyway). See the "Repository" section of
+cvs.texinfo for details, including a discussion of security issues.
+Note that the requirement that read-only users be able to create locks
+and write the history file still applies.
+
+* There is a new administrative file verifymsg which is like editinfo
+but merely validates the message, rather than also getting it from the
+user. It therefore works with client/server CVS or if one uses the -m
+or -F options to commit. See the verifymsg section of cvs.texinfo for
+details.
+
+* The %s format formerly accepted in loginfo has been extended to
+formats such as %{sVv}, so that loginfo scripts have access to the
+version numbers being changed. See the Loginfo section of cvs.texinfo
+for details.
+
+* The postscript documentation (doc/cvs.ps) shipped with CVS is now
+formatted for US letter size instead of A4. This is not because we
+consider this size "better" than A4, but because we believe that the
+US letter version will print better on A4 paper than the other way
+around.
+
+* The "cvs export" command is now logged in the history file and there
+is a "cvs history -x E" command to select history file entries
+produced by export.
+
+* CVS no longer uses the CVS_PASSWORD environment variable. Storing
+passwords in cleartext in an environment variable is a security risk,
+especially since (on BSD variants) any user on the system can display
+any process's environment using 'ps'. Users should use the 'cvs
+login' command instead.
+
+
+Changes from 1.8 to 1.9:
+
+* Windows NT client should now work on Windows 95 as well.
+
+* New option "--help-synonyms" prints a list of all recognized command
+synonyms.
+
+* The "log" command is now implemented internally rather than via the
+RCS "rlog" program. The main user-visible consequence is that
+symbolic branch names now work (for example "cvs log -rbranch1").
+Also, the date formats accepted by -d have changed. They previously
+had been a bewildering variety of poorly-documented date formats. Now
+they are the same as the date formats accepted by the -D options to
+the other CVS commands, which is also a (different) bewildering
+variety of poorly-documented date formats, but at least we are
+consistently bewildering :-).
+
+* Encryption is now supported over a Kerberos client/server
+connection. The new "-x" global option requests it. You must
+configure with the --enable-encryption option in order to enable
+encryption.
+
+* The format of the CVS commit message has changed slightly when
+committing changes on a branch. The tag on which the commit is
+ocurring is now reported correctly in all cases.
+
+* New flag -k in wrappers allows you to specify the keyword expansion
+mode for added files based on their name. For example, you can
+specify that files whose name matches *.exe are binary by default.
+See the Wrappers section of cvs.texinfo for more details.
+
+* Remote CVS with the "-z" option now uses the zlib library (included
+with CVS) to compress all communication between the client and the
+server, rather than invoking gzip on each file separately. This means
+that compression is better and there is no need for an external gzip
+program (except to interoperate with older version of CVS).
+
+* The "cvs rlog" command is deprecated and running it will print a
+warning; use the synonymous "cvs log" command instead. It is
+confusing for rlog to mean the same as log because some other CVS
+commands are in pairs consisting of a plain command which operates on
+a working directory and an "r" command which does not (diff/rdiff;
+tag/rtag).
+
+* "cvs diff" has a bunch of new options, mostly long options. Most of
+these work only if rcsdiff and diff support them, and are named the
+same as the corresponding options to diff.
+
+* The -q and -Q command options to "cvs diff" were removed (use the
+global options instead). This brings "cvs diff" into line with the
+rest of the CVS commands.
+
+* The "annotate" command can now be used to annotate a revision other
+than the head revision on the trunk (see the -r, -D, and -f options in
+the annotate node of cvs.texinfo for details).
+
+* The "tag" command has a new option "-c" which checks that all files
+ are not locally modified before tagging.
+
+* The -d command line option now overrides the cvsroot setting stored
+in the CVS/Root file in each working directory, and specifying -d will
+cause CVS/Root to be updated.
+
+* Local (non-client/server) CVS now runs on Windows NT. See
+windows-NT/README for details.
+
+* The CVSROOT variable specification has changed to support more
+access methods. In addition to "pserver," "server" (internal rsh
+client), "ext" (external rsh client), "kserver" (kerberos), and
+"local" (local filesystem access) can now be specified. For more
+details on each method, see cvs.texinfo (there is an index entry for
+:local: and each of the other access methods).
+
+* The "login" command no longer prompts the user for username and
+hostname, since one will have to provide that information via the `-d'
+flag or by setting CVSROOT.
+
+Changes from 1.7 to 1.8:
+
+* New "cvs annotate" command to display the last modification for each
+line of a file, with the revision number, user checking in the
+modification, and date of the modification. For more information see
+the `annotate' node in cvs.texinfo.
+
+* The cvsinit shell script has been replaced by a cvs init command.
+The cvs init command creates some example administrative files which
+are similar to the files found in the examples directory (and copied
+by cvsinit) in previous releases.
+
+* Added the patterns *.olb *.exe _$* *$ to default ignore list.
+
+* There is now a $USER internal variable for *info files.
+
+* There is no longer a separate `mkmodules' program; the functionality
+is now built into `cvs'. If upgrading an old repository, it is OK to
+leave in the lines in the modules file which run mkmodules (the
+mkmodules actions will get done twice, but that is harmless); you will
+probably want to remove them once you are no longer using the old CVS.
+
+* One can now specify user variables in *info files via the
+${=varname} syntax; there is a -s global option to set them. See the
+Variables node in cvs.texinfo for details.
+
+Changes from 1.6 to 1.7:
+
+* The default ignore list has changed slightly: *.obj has been added
+and CVS* has been changed to CVS CVS.adm.
+
+* CVS now supports password authentication when accessing remote
+repositories; this is useful for sites that can't use rsh (because of
+a firewall, for example), and also don't have kerberos. See node
+"Password authenticated" (in "Remote repositories", in
+doc/cvs.texinfo) for more details. Note: This feature requires both
+the client and server to be upgraded.
+
+* Using the -kb option to specify binary files now works--most cases
+did not work before. See the "Binary files" section of
+doc/cvs.texinfo for details.
+
+* New developer communication features. See the "Watches" section of
+doc/cvs.texinfo for details.
+
+* RCS keyword "Name" supported for "cvs update -r " and "cvs
+checkout -r ".
+
+* If there is a group whose name matches a compiled in value which
+defaults to "cvsadmin", only members of that group can use "cvs
+admin". This replaces the CVS_NOADMIN option.
+
+* CVS now sets the modes of files in the repository based on the
+CVSUMASK environment variable or a compiled in value defaulting to
+002. This way other developers will be able to access the files in
+the repository regardless of the umask of the developer creating them.
+
+* The command names in .cvsrc now match the official name of the
+command, not the one (possibly an alias) by which it was invoked. If
+you had previously relied on "cvs di" and "cvs diff" using different
+options, instead use a shell function or alias (for example "alias
+cvsdi='cvs diff -u'"). You also can specify global CVS options (like
+"-z") using the command name "cvs".
+
+Changes from 1.5 to 1.6:
+
+* Del updated the man page to include all of the new features
+of CVS 1.6.
+
+* "cvs tag" now supports a "-r | -D" option for tagging an already
+tagged revision / specific revision of a file.
+
+* There is a "taginfo" file in CVSROOT that supports filtering and
+recording of tag operations.
+
+* Long options support added, including --help and --version options.
+
+* "cvs release" no longer cares whether or not the directory being
+released has an entry in the `modules' file.
+
+* The modules file now takes a -e option which is used instead of -o
+for "cvs export". If your modules file has a -o option which you want
+to be used for "cvs export", change it to specify -e as well as -o.
+
+* "cvs export" now takes a -k option to set RCS keyword expansion.
+This way you can export binary files. If you want the old behavior,
+you need to specify -kv.
+
+* "cvs update", "cvs rdiff", "cvs checkout", "cvs import", "cvs
+release", "cvs rtag", and "cvs tag" used to take -q and -Q options
+after the command name (e.g. "cvs update -q"). This was confusing
+because other commands, such as "cvs ci", did not. So the options
+after the command name have been removed and you must now specify, for
+example, "cvs -q update", which has been supported since CVS 1.3.
+
+* New "wrappers" feature. This allows you to set a hook which
+transforms files on their way in and out of cvs (apparently on the
+NeXT there is some particular usefulness in tarring things up in the
+repository). It also allows you to declare files as merge-by-copy
+which means that instead of trying to merge the file, CVS will merely
+copy the new version. There is a CVSROOT/cvswrappers file and an
+optionsl ~/.cvswrappers file to support this feature.
+
+* You can set CVSROOT to user@host:dir, not just host:dir, if your
+username on the server host is different than on the client host.
+
+* VISUAL is accepted as well as EDITOR.
+
+* $CVSROOT is expanded in *info files.
+
+Changes from 1.4A2 to 1.5:
+
+* Remote implementation. This is very helpful when collaborating on a
+project with someone across a wide-area network. This release can
+also be used locally, like other CVS versions, if you have no need for
+remote access.
+
+Here are some of the features of the remote implementation:
+- It uses reliable transport protocols (TCP/IP) for remote repository
+ access, not NFS. NFS is unusable over long distances (and sometimes
+ over short distances)
+- It transfers only those files that have changed in the repository or
+ the working directory. To save transmission time, it will transfer
+ patches when appropriate, and can compress data for transmission.
+- The server never holds CVS locks while waiting for a reply from the client;
+ this makes the system robust when used over flaky networks.
+
+The remote features are documented in doc/cvsclient.texi in the CVS
+distribution, but the main doc file, cvs.texinfo, has not yet been
+updated to include the remote features.
+
+* Death support. See src/README-rm-add for more information on this.
+
+* Many speedups, especially from jtc@cygnus.com.
+
+* CVS 1.2 compatibility code has been removed as a speedup. If you
+have working directories checked out by CVS 1.2, CVS 1.3 or 1.4A2 will
+try to convert them, but CVS 1.5 and later will not (if the working
+directory is up to date and contains no extraneous files, you can just
+remove it, and then check out a new working directory). Likewise if
+your repository contains a CVSROOT.adm directory instead of a CVSROOT
+directory, you need to rename it.
+
+Fri Oct 21 20:58:54 1994 Brian Berliner
+
+ * Changes between CVS 1.3 and CVS 1.4 Alpha-2
+
+ * A new program, "cvsbug", is provided to let you send bug reports
+ directly to the CVS maintainers. Please use it instead of sending
+ mail to the info-cvs mailing list. If your build fails, you may
+ have to invoke "cvsbug" directly from the "src" directory as
+ "src/cvsbug.sh".
+
+ * A new User's Guide and Tutorial, written by Per Cederqvist
+ of Signum Support. See the "doc" directory. A
+ PostScript version is included as "doc/cvs.ps".
+
+ * The Frequesntly Asked Questions file, FAQ, has been added to the
+ release. Unfortunately, its contents are likely out-of-date.
+
+ * The "cvsinit" shell script is now installed in the $prefix/bin
+ directory like the other programs. You can now create new
+ CVS repositories with great ease.
+
+ * Index: lines are now printed on output from 'diff' and 'rdiff',
+ in order to facilitate application of patches to multiple subdirs.
+
+ * Support for a ~/.cvsrc file, which allows you to specify options
+ that are always supposed to be given to a specific command. This
+ feature shows the non-orthogonality of the option set, since while
+ there may be an option to turn something on, the option to turn
+ that same thing off may not exist.
+
+ * You can now list subdirectories that you wish to ignore in a
+ modules listing, such as:
+
+ gcc -a gnu/gcc, !gnu/gcc/testsuites
+
+ which will check out everything underneath gnu/gcc, except
+ everything underneath gnu/gcc/testsuites.
+
+ * It is now much harder to accidentally overwrite an existing tag
+ name, since attempting to move a tag name will result in a error,
+ unless the -F (force) flag is given to the tag subcommands.
+
+ * Better error checking on matching of the repository used to
+ check code out from against the repository the current cvs
+ commnands would use. (Thanks to Mark Baushke )
+
+ * Better support for sites with multiple CVSROOT repositories has
+ been contributed. The file "CVS/Root" in your working directory
+ is created to hold the full path to the CVS repository and a
+ simple check is made against your current CVSROOT setting.
+
+ * You can now specify an RCS keyword substitution value when you
+ import files into the repository.
+
+ * Uses a much newer version of Autoconf, and conforms to the GNU
+ coding standards much more closely. No, it still doesn't have
+ long option names.
+
+ * Code cleanup. Many passes through gcc -Wall helped to identify
+ a number of questionable constructs. Most arbitrary length limits
+ were removed.
+
+ * Profiling to determine bottlenecks helped to identify the best
+ places to spend time speeding up the code, which was then done. A
+ number of performance enhancements in filename matching have sped
+ up checkouts.
+
+ * Many more contributions have been added to the "contrib"
+ directory. See the README file in that directory for more
+ information.
+
+ * "cvs commit" will try harder to not change the file's
+ modification time after the commit. If the file does not change
+ as a result of the commit operation, CVS will preserve the
+ original modification time, thus speeding up future make-type
+ builds.
+
+ * "cvs commit" now includes any removed files in the (optional)
+ pre-commit checking program that may be invoked. Previously, only
+ added and modified files were included.
+
+ * It is now possible to commit a file directly onto the trunk at a
+ specific revision level by doing "cvs commit -r3.0 file.c", where
+ "3.0" specifies the revision you wish to create. The file must be
+ up-to-date with the current head of the trunk for this to succeed.
+
+ * "cvs commit" will now function with a pre-commit program that
+ has arguments specified in the "commitinfo" file.
+
+ * The "mkmodules" program will now look within the
+ $CVSROOT/CVSROOT/checkoutlist" file for any additional files that
+ should be automatically checked out within CVSROOT; mkmodules also
+ tries harder to preserve any execute bits the files may have
+ originally had.
+
+ * "cvs diff" is much more accurate about its exit status now. It
+ now returns the maximum exit status of any invoked diff.
+
+ * The "-I !" option is now supported for the import and update
+ commands correctly. It will properly clear the ignore list now.
+
+ * Some problems with "cvs import" handling of .cvsignore have been
+ fixed; as well, some rampant recursion problems with import have
+ also been fixed.
+
+ * "cvs rdiff" (aka "cvs patch") now tries to set the modify time
+ of any temporary files it uses to match those specified for the
+ particular revision. This allows a more accurate patch image to
+ be created.
+
+ * "cvs status" has improved revision descriptions. "Working
+ revision" is used for the revision of the working file that you
+ edit directly; "Repository revision" is the revision of the file
+ with the $CVSROOT source repository. Also, the output is clearer
+ with regard to sticky and branch revisions.
+
+ * CVS no longer dumps core when given a mixture of directories and
+ files in sub-directories (as in "cvs ci file1 dir1/file2").
+ Instead, arguments are now clumped into their respective directory
+ and operated on in chunks, together.
+
+ * If the CVSEDITOR environment variable is set, that editor is
+ used for log messages instead of the EDITOR environment variable.
+ This makes it easy to substitute intelligent programs to make more
+ elaborate log messages. Contributed by Mark D Baushke
+ (mdb@cisco.com).
+
+ * Command argument changes:
+ cvs: The "-f" option has been added to ignore
+ the ~/.cvsrc file.
+ commit: Renamed the "-f logfile" option to the
+ "-F logfile" option. Added the "-f"
+ option to force a commit of the specified
+ files (this disables recursion).
+ history: Added "-t timezone" option to force any
+ date-specific output into the specified
+ timezone.
+ import: Added "-d" option to use the file's
+ modification time as the time of the
+ import. Added "-k sub" option to set the
+ default RCS keyword substitution mode for
+ newly-created files.
+ remove: Added "-f" option to force the file's
+ automatic removal if it still exists in
+ the working directory (use with caution).
+ rtag: Added "-F" option to move the tag if it
+ already exists -- new default is to NOT
+ move tags automatically.
+ tag: Added "-F" option to move the tag if it
+ already exists -- new default is to NOT
+ move tags automatically.
+
+Tue Apr 7 15:55:25 1992 Brian Berliner (berliner at sun.com)
+
+ * Changes between CVS 1.3 Beta-3 and official CVS 1.3!
+
+ * A new shell script is provided, "./cvsinit", which can be run at
+ install time to help setup your $CVSROOT area. This can greatly
+ ease your entry into CVS usage.
+
+ * The INSTALL file has been updated to include the machines on
+ which CVS has compiled successfully. I think CVS 1.3 is finally
+ portable. Thanks to all the Beta testers!
+
+ * Support for the "editinfo" file was contributed. This file
+ (located in $CVSROOT/CVSROOT) can be used to specify a special
+ "editor" to run on a per-directory basis within the repository,
+ instead of the usual user's editor. As such, it can verify that
+ the log message entered by the user is of the appropriate form
+ (contains a bugid and test validation, for example).
+
+ * The manual pages cvs(1) and cvs(5) have been updated.
+
+ * The "mkmodules" command now informs you when your modules file
+ has duplicate entries.
+
+ * The "add" command now preserves any per-directory sticky tag when
+ you add a new directory to your checked-out sources.
+
+ * The "admin" command is now a fully recursive interface to the
+ "rcs" program which operates on your checked-out sources. It no
+ longer requires you to specify the full path to the RCS file.
+
+ * The per-file sticky tags can now be effectively removed with
+ "cvs update -A file", even if you had checked out the whole
+ directory with a per-directory sticky tag. This allows a great
+ deal of flexibility in managing the revisions that your checked-out
+ sources are based upon (both per-directory and per-file sticky
+ tags).
+
+ * The "cvs -n commit" command now works, to show which files are
+ out-of-date and will cause the real commit to fail, or which files
+ will fail any pre-commit checks. Also, the "cvs -n import ..."
+ command will now show you what it would've done without actually
+ doing it.
+
+ * Doing "cvs commit modules" to checkin the modules file will no
+ properly run the "mkmodules" program (assuming you have setup your
+ $CVSROOT/CVSROOT/modules file to do so).
+
+ * The -t option in the modules file (which specifies a program to
+ run when you do a "cvs rtag" operation on a module) now gets the
+ symbolic tag as the second argument when invoked.
+
+ * When the source repository is locked by another user, that user's
+ login name will be displayed as the holder of the lock.
+
+ * Doing "cvs checkout module/file.c" now works even if
+ module/file.c is in the Attic (has been removed from main-line
+ development).
+
+ * Doing "cvs commit */Makefile" now works as one would expect.
+ Rather than trying to commit everything recursively, it will now
+ commit just the files specified.
+
+ * The "cvs remove" command is now fully recursive. To schedule a
+ file for removal, all you have to do is "rm file" and "cvs rm".
+ With no arguments, "cvs rm" will schedule all files that have been
+ physically removed for removal from the source repository at the
+ next "cvs commit".
+
+ * The "cvs tag" command now prints "T file" for each file that was
+ tagged by this invocation and "D file" for each file that had the
+ tag removed (as with "cvs tag -d").
+
+ * The -a option has been added to "cvs rtag" to force it to clean
+ up any old, matching tags for files that have been removed (in the
+ Attic) that may not have been touched by this tag operation. This
+ can help keep a consistent view with your tag, even if you re-use
+ it frequently.
+
+Sat Feb 29 16:02:05 1992 Brian Berliner (berliner at sun.com)
+
+ * Changes between CVS 1.3 Beta-2 and CVS 1.3 Beta-3
+
+ * Many portability fixes, thanks to all the Beta testers! With any
+ luck, this Beta release will compile correctly on most anything.
+ Hey, what are we without our dreams.
+
+ * CVS finally has support for doing isolated development on a
+ branch off the current (or previous!) revisions. This is also
+ extremely nice for generating patches for previously released
+ software while development is progressing on the next release.
+ Here's an example of creating a branch to fix a patch with the 2.0
+ version of the "foo" module, even though we are already well into
+ the 3.0 release. Do:
+
+ % cvs rtag -b -rFOO_2_0 FOO_2_0_Patch foo
+ % cvs checkout -rFOO_2_0_Patch foo
+ % cd foo
+ [[ hack away ]]
+ % cvs commit
+
+ A physical branch will be created in the RCS file only when you
+ actually commit the change. As such, forking development at some
+ random point in time is extremely light-weight -- requiring just a
+ symbolic tag in each file until a commit is done. To fork
+ development at the currently checked out sources, do:
+
+ % cvs tag -b Personal_Hack
+ % cvs update -rPersonal_Hack
+ [[ hack away ]]
+ % cvs commit
+
+ Now, if you decide you want the changes made in the Personal_Hack
+ branch to be merged in with other changes made in the main-line
+ development, you could do:
+
+ % cvs commit # to make Personal_Hack complete
+ % cvs update -A # to update sources to main-line
+ % cvs update -jPersonal_Hack # to merge Personal_Hack
+
+ to update your checked-out sources, or:
+
+ % cvs checkout -jPersonal_Hack module
+
+ to checkout a fresh copy.
+
+ To support this notion of forked development, CVS reserves
+ all even-numbered branches for its own use. In addition, CVS
+ reserves the ".0" and ".1" branches. So, if you intend to do your
+ own branches by hand with RCS, you should use odd-numbered branches
+ starting with ".3", as in "1.1.3", "1.1.5", 1.2.9", ....
+
+ * The "cvs commit" command now supports a fully functional -r
+ option, allowing you to commit your changes to a specific numeric
+ revision or symbolic tag with full consistency checks. Numeric
+ tags are useful for bringing your sources all up to some revision
+ level:
+
+ % cvs commit -r2.0
+
+ For symbolic tags, you can only commit to a tag that references a
+ branch in the RCS file. One created by "cvs rtag -b" or from
+ "cvs tag -b" is appropriate (see below).
+
+ * Roland Pesch and K. Richard Pixley
+ were kind enough to contribute two new manual
+ pages for CVS: cvs(1) and cvs(5). Most of the new CVS 1.3 features
+ are now documented, with the exception of the new branch support
+ added to commit/rtag/tag/checkout/update.
+
+ * The -j options of checkout/update have been added. The "cvs join"
+ command has been removed.
+
+ With one -j option, CVS will merge the changes made between the
+ resulting revision and the revision that it is based on (e.g., if
+ the tag refers to a branch, CVS will merge all changes made in
+ that branch into your working file).
+
+ With two -j options, CVS will merge in the changes between the two
+ respective revisions. This can be used to "remove" a certain delta
+ from your working file. E.g., If the file foo.c is based on
+ revision 1.6 and I want to remove the changes made between 1.3 and
+ 1.5, I might do:
+
+ % cvs update -j1.5 -j1.3 foo.c # note the order...
+
+ In addition, each -j option can contain on optional date
+ specification which, when used with branches, can limit the chosen
+ revision to one within a specific date. An optional date is
+ specified by adding a colon (:) to the tag, as in:
+
+ -jSymbolic_Tag:Date_Specifier
+
+ An example might be what "cvs import" tells you to do when you have
+ just imported sources that have conflicts with local changes:
+
+ % cvs checkout -jTAG:yesterday -jTAG module
+
+ which tells CVS to merge in the changes made to the branch
+ specified by TAG in the last 24 hours. If this is not what is
+ intended, substitute "yesterday" for whatever format of date that
+ is appropriate, like:
+
+ % cvs checkout -jTAG:'1 week ago' -jTAG module
+
+ * "cvs diff" now supports the special tags "BASE" and "HEAD". So,
+ the command:
+
+ % cvs diff -u -rBASE -rHEAD
+
+ will effectively show the changes made by others (in unidiff
+ format) that will be merged into your working sources with your
+ next "cvs update" command. "-rBASE" resolves to the revision that
+ your working file is based on. "-rHEAD" resolves to the current
+ head of the branch or trunk that you are working on.
+
+ * The -P option of "cvs checkout" now means to Prune empty
+ directories, as with "update". The default is to not remove empty
+ directories. However, if you do "checkout" with any -r options, -P
+ will be implied. I.e., checking out with a tag will cause empty
+ directories to be pruned automatically.
+
+ * The new file INSTALL describes how to install CVS, including
+ detailed descriptions of interfaces to "configure".
+
+ * The example loginfo file in examples/loginfo has been updated to
+ use the perl script included in contrib/log.pl. The nice thing
+ about this log program is that it records the revision numbers of
+ your change in the log message.
+
+ Example files for commitinfo and rcsinfo are now included in the
+ examples directory.
+
+ * All "#if defined(__STDC__) && __STDC__ == 1" lines have been
+ changed to be "#if __STDC__" to fix some problems with the former.
+
+ * The lib/regex.[ch] files have been updated to the 1.3 release of
+ the GNU regex package.
+
+ * The ndbm emulation routines included with CVS 1.3 Beta-2 in the
+ src/ndbm.[ch] files has been moved into the src/myndbm.[ch] files
+ to avoid any conflict with the system header file. If
+ you had a previous CVS 1.3 Beta release, you will want to "cvs
+ remove ndbm.[ch]" form your copy of CVS as well.
+
+ * "cvs add" and "cvs remove" are a bit more verbose, telling you
+ what to do to add/remove your file permanently.
+
+ * We no longer mess with /dev/tty in "commit" and "add".
+
+ * More things are quiet with the -Q option set.
+
+ * New src/config.h option: If CVS_BADROOT is set, CVS will not
+ allow people really logged in as "root" to commit changes.
+
+ * "cvs diff" exits with a status of 0 if there were no diffs, 1 if
+ there were diffs, and 2 if there were errors.
+
+ * "cvs -n diff" is now supported so that you can still run diffs
+ even while in the middle of committing files.
+
+ * Handling of the CVS/Entries file is now much more robust.
+
+ * The default file ignore list now includes "*.so".
+
+ * "cvs import" did not expand '@' in the log message correctly. It
+ does now. Also, import now uses the ignore file facility
+ correctly.
+
+ Import will now tell you whether there were conflicts that need to
+ be resolved, and how to resolve them.
+
+ * "cvs log" has been changed so that you can "log" things that are
+ not a part of the current release (in the Attic).
+
+ * If you don't change the editor message on commit, CVS now prompts
+ you with the choice:
+
+ !)reuse this message unchanged for remaining dirs
+
+ which allows you to tell CVS that you have no intention of changing
+ the log message for the remainder of the commit.
+
+ * It is no longer necessary to have CVSROOT set if you are using
+ the -H option to get Usage information on the commands.
+
+ * Command argument changes:
+ checkout: -P handling changed as described above.
+ New -j option (up to 2 can be specified)
+ for doing rcsmerge kind of things on
+ checkout.
+ commit: -r option now supports committing to a
+ numeric or symbolic tags, with some
+ restrictions. Full consistency checks will
+ be done.
+ Added "-f logfile" option, which tells
+ commit to glean the log message from the
+ specified file, rather than invoking the
+ editor.
+ rtag: Added -b option to create a branch tag,
+ useful for creating a patch for a previous
+ release, or for forking development.
+ tag: Added -b option to create a branch tag,
+ useful for creating a patch for a previous
+ release, or for forking development.
+ update: New -j option (up to 2 can be specified)
+ for doing rcsmerge kind of things on
+ update.
+
+Thu Jan 9 10:51:35 MST 1992 Jeff Polk (polk at BSDI.COM)
+
+ * Changes between CVS 1.3 Beta-1 and CVS 1.3 Beta-2
+
+ * Thanks to K. Richard Pixley at Cygnus we now have function
+ prototypes in all the files
+
+ * Some small changes to configure for portability. There have
+ been other portability problems submitted that have not been fixed
+ (Brian will be working on those). Additionally all __STDC__
+ tests have been modified to check __STDC__ against the constant 1
+ (this is what the Second edition of K&R says must be true).
+
+ * Lots of additional error checking for forked processes (run_exec)
+ (thanks again to K. Richard Pixley)
+
+ * Lots of miscellaneous bug fixes - including but certainly not
+ limited to:
+ various commit core dumps
+ various update core dumps
+ bogus results from status with numeric sticky tags
+ commitprog used freed memory
+ Entries file corruption caused by No_Difference
+ commit to revision broken (now works if branch exists)
+ ignore file processing broken for * and !
+ ignore processing didn't handle memory reasonably
+ miscellaneous bugs in the recursion processor
+ file descriptor leak in ParseInfo
+ CVSROOT.adm->CVSROOT rename bug
+ lots of lint fixes
+
+ * Reformatted all the code in src (with GNU indent) and then
+ went back and fixed prototypes, etc since indent gets confused. The
+ rationale is that it is better to do it sooner than later and now
+ everything is consistent and will hopefully stay that way.
+ The basic options to indent were: "-bad -bbb -bap -cdb -d0 -bl -bli0
+ -nce -pcs -cs -cli4 -di1 -nbc -psl -lp -i4 -ip4 -c41" and then
+ miscellaneous formatting fixes were applied. Note also that the
+ "-nfc1" or "-nfca" may be appropriate in files where comments have
+ been carefully formatted (e.g, modules.c).
+
+Sat Dec 14 20:35:22 1991 Brian Berliner (berliner at sun.com)
+
+ * Changes between CVS 1.2 and CVS 1.3 Beta are described here.
+
+ * Lots of portability work. CVS now uses the GNU "configure"
+ script to dynamically determine the features provided by your
+ system. It probably is not foolproof, but it is better than
+ nothing. Please let me know of any portability problems. Some
+ file names were changed to fit within 14-characters.
+
+ * CVS has a new RCS parser that is much more flexible and
+ extensible. It should read all known RCS ",v" format files.
+
+ * Most of the commands now are fully recursive, rather than just
+ operating on the current directory alone. This includes "commit",
+ which makes it real easy to do an "atomic" commit of all the
+ changes made to a CVS hierarchy of sources. Most of the commands
+ also correctly handle file names that are in directories other than
+ ".", including absolute path names. Commands now accept the "-R"
+ option to force recursion on (though it is always the default now)
+ and the "-l" option to force recursion off, doing just "." and not
+ any sub-directories.
+
+ * CVS supports many of the features provided with the RCS 5.x
+ distribution - including the new "-k" keyword expansion options. I
+ recommend using RCS 5.x (5.6 is the current official RCS version)
+ and GNU diff 1.15 (or later) distributions with CVS.
+
+ * Checking out files with symbolic tags/dates is now "sticky", in
+ that CVS remembers the tag/date used for each file (and directory)
+ and will use that tag/date automatically on the next "update" call.
+ This stickyness also holds for files checked out with the the new
+ RCS 5.x "-k" options.
+
+ * The "cvs diff" command now recognizes all of the rcsdiff 5.x
+ options. Unidiff format is available by installing the GNU
+ diff 1.15 distribution.
+
+ * The old "CVS.adm" directories created on checkout are now called
+ "CVS" directories, to look more like "RCS" and "SCCS". Old CVS.adm
+ directories are automagically converted to CVS directories. The
+ old "CVSROOT.adm" directory within the source repository is
+ automagically changed into a "CVSROOT" directory as well.
+
+ * Symbolic links in the source repository are fully supported ONLY
+ if you use RCS 5.6 or later and (of course) your system supports
+ symlinks.
+
+ * A history database has been contributed which maintains the
+ history of certain CVS operations, as well as providing a wide array
+ of querying options.
+
+ * The "cvs" program has a "-n" option which can be used with the
+ "update" command to show what would be updated without actually
+ doing the update, like: "cvs -n update". All usage statements
+ have been cleaned up and made more verbose.
+
+ * The module database parsing has been rewritten. The new format
+ is compatible with the old format, but with much more
+ functionality. It allows modules to be created that grab pieces or
+ whole directories from various different parts of your source
+ repository. Module-relative specifications are also correctly
+ recognized now, like "cvs checkout module/file.c".
+
+ * A configurable template can be specified such that on a "commit",
+ certain directories can supply a template that the user must fill
+ before completing the commit operation.
+
+ * A configurable pre-commit checking program can be specified which
+ will run to verify that a "commit" can happen. This feature can be
+ used to restrict certain users from changing certain pieces of the
+ source repository, or denying commits to the entire source
+ repository.
+
+ * The new "cvs export" command is much like "checkout", but
+ establishes defaults suitable for exporting code to others (expands
+ out keywords, forces the use of a symbolic tag, and does not create
+ "CVS" directories within the checked out sources.
+
+ * The new "cvs import" command replaces the deprecated "checkin"
+ shell script and is used to import sources into CVS control. It is
+ also much faster for the first-time import. Some algorithmic
+ improvements have also been made to reduce the number of
+ conflicting files on next-time imports.
+
+ * The new "cvs admin" command is basically an interface to the
+ "rcs" program. (Not yet implemented very well).
+
+ * Signal handling (on systems with BSD or POSIX signals) is much
+ improved. Interrupting CVS now works with a single interrupt!
+
+ * CVS now invokes RCS commands by direct fork/exec rather than
+ calling system(3). This improves performance by removing a call to
+ the shell to parse the arguments.
+
+ * Support for the .cvsignore file has been contributed. CVS will
+ now show "unknown" files as "? filename" as the result of an "update"
+ command. The .cvsignore file can be used to add files to the
+ current list of ignored files so that they won't show up as unknown.
+
+ * Command argument changes:
+ cvs: Added -l to turn off history logging.
+ Added -n to show what would be done without actually
+ doing anything.
+ Added -q/-Q for quiet and really quiet settings.
+ Added -t to show debugging trace.
+ add: Added -k to allow RCS 5.x -k options to be specified.
+ admin: New command; an interface to rcs(1).
+ checkout: Added -A to reset sticky tags/date/options.
+ Added -N to not shorten module paths.
+ Added -R option to force recursion.
+ Changed -p (prune empty directories) to -P option.
+ Changed -f option; forcing tags match is now default.
+ Added -p option to checkout module to standard output.
+ Added -s option to cat the modules db with status.
+ Added -d option to checkout in the specified directory.
+ Added -k option to use RCS 5.x -k support.
+ commit: Removed -a option; use -l instead.
+ Removed -f option.
+ Added -l option to disable recursion.
+ Added -R option to force recursion.
+ If no files specified, commit is recursive.
+ diff: Now recognizes all RCS 5.x rcsdiff options.
+ Added -l option to disable recursion.
+ Added -R option to force recursion.
+ history: New command; displays info about CVS usage.
+ import: Replaces "checkin" shell script; imports sources
+ under CVS control. Ignores files on the ignore
+ list (see -I option or .cvsignore description above).
+ export: New command; like "checkout", but w/special options
+ turned on by default to facilitate exporting sources.
+ join: Added -B option to join from base of the branch;
+ join now defaults to only joining with the top two
+ revisions on the branch.
+ Added -k option for RCS 5.x -k support.
+ log: Supports all RCS 5.x options.
+ Added -l option to disable recursion.
+ Added -R option to force recursion.
+ patch: Changed -f option; forcing tags match is now default.
+ Added -c option to force context-style diffs.
+ Added -u option to support unidiff-style diffs.
+ Added -V option to support RCS specific-version
+ keyword expansion formats.
+ Added -R option to force recursion.
+ remove: No option changes. It's a bit more verbose.
+ rtag: Equivalent to the old "cvs tag" command.
+ No option changes. It's a lot faster for re-tag.
+ status: New output formats with more information.
+ Added -l option to disable recursion.
+ Added -R option to force recursion.
+ Added -v option to show symbolic tags for files.
+ tag: Functionality changed to tag checked out files
+ rather than modules; use "rtag" command to get the
+ old "cvs tag" behaviour.
+ update: Added -A to reset sticky tags/date/options.
+ Changed -p (prune empty directories) to -P option.
+ Changed -f option; forcing tags match is now default.
+ Added -p option to checkout module to standard output.
+ Added -I option to add files to the ignore list.
+ Added -R option to force recursion.
+
+ Major Contributors:
+
+ * Jeff Polk rewrote most of the grody code of CVS
+ 1.2. He made just about everything dynamic (by using malloc),
+ added a generic hashed list manager, re-wrote the modules database
+ parsing in a compatible - but extended way, generalized directory
+ hierarchy recursion for virtually all the commands (including
+ commit!), generalized the loginfo file to be used for pre-commit
+ checks and commit templates, wrote a new and flexible RCS parser,
+ fixed an uncountable number of bugs, and helped in the design of
+ future CVS features. If there's anything gross left in CVS, it's
+ probably my fault!
+
+ * David G. Grubbs contributed the CVS "history" and
+ "release" commands. As well as the ever-so-useful "-n" option of
+ CVS which tells CVS to show what it would do, without actually
+ doing it. He also contributed support for the .cvsignore file.
+
+ * Paul Sander, HaL Computer Systems, Inc. wrote and
+ contributed the code in lib/sighandle.c. I added support for
+ POSIX, BSD, and non-POSIX/non-BSD systems.
+
+ * Free Software Foundation contributed the "configure" script and
+ other compatibility support in the "lib" directory, which will help
+ make CVS much more portable.
+
+ * Many others have contributed bug reports and enhancement requests.
+ Some have even submitted actual code which I have not had time yet
+ to integrate into CVS. Maybe for the next release.
+
+ * Thanks to you all!
+
+Wed Feb 6 10:10:58 1991 Brian Berliner (berliner at sun.com)
+
+ * Changes from CVS 1.0 Patchlevel 1 to CVS 1.0 Patchlevel 2; also
+ known as "Changes from CVS 1.1 to CVS 1.2".
+
+ * Major new support with this release is the ability to use the
+ recently-posted RCS 5.5 distribution with CVS 1.2. See below for
+ other assorted bug-fixes that have been thrown in.
+
+ * ChangeLog (new): Added Emacs-style change-log file to CVS 1.2
+ release. Chronological description of changes between release.
+
+ * README: Small fixes to installation instructions. My email
+ address is now "berliner@sun.com".
+
+ * src/Makefile: Removed "rcstime.h". Removed "depend" rule.
+
+ * src/partime.c: Updated to RCS 5.5 version with hooks for CVS.
+ * src/maketime.c: Updated to RCS 5.5 version with hooks for CVS.
+ * src/rcstime.h: Removed from the CVS 1.2 distribution.
+ Thanks to Paul Eggert for these changes.
+
+ * src/checkin.csh: Support for RCS 5.5 parsing.
+ Thanks to Paul Eggert for this change.
+
+ * src/collect_sets.c (Collect_Sets): Be quieter if "-f" option is
+ specified. When checking out files on-top-of other files that CVS
+ doesn't know about, run a diff in the hopes that they are really
+ the same file before aborting.
+
+ * src/commit.c (branch_number): Fix for RCS 5.5 parsing.
+ Thanks to Paul Eggert for this change.
+
+ * src/commit.c (do_editor): Bug fix - fprintf missing argument
+ which sometimes caused core dumps.
+
+ * src/modules.c (process_module): Properly NULL-terminate
+ update_dir[] in all cases.
+
+ * src/no_difference.c (No_Difference): The wrong RCS revision was
+ being registered in certain (strange) cases.
+
+ * src/patch.c (get_rcsdate): New algorithm. No need to call
+ maketime() any longer.
+ Thanks to Paul Eggert for this change.
+
+ * src/patchlevel.h: Increased patch level to "2".
+
+ * src/subr.c (isdir, islink): Changed to compare stat mode bits
+ correctly.
+
+ * src/tag.c (tag_file): Added support for following symbolic links
+ that are in the master source repository when tagging. Made tag
+ somewhat quieter in certain cases.
+
+ * src/update.c (update_process_lists): Unlink the user's file if it
+ was put on the Wlist, meaning that the user's file is not modified
+ and its RCS file has been removed by someone else.
+
+ * src/update.c (update): Support for "cvs update dir" to correctly
+ just update the argument directory "dir".
+
+ * src/cvs.h: Fixes for RCS 5.5 parsing.
+ * src/version_number.c (Version_Number): Fixes for parsing RCS 5.5
+ and older RCS-format files.
+ Thanks to Paul Eggert for these changes.
+
+ * src/version_number.c (Version_Number): Bug fixes for "-f" option.
+ Bug fixes for parsing with certain branch numbers. RCS
+ revision/symbol parsing is much more solid now.
+
+Wed Feb 14 10:01:33 1990 Brian Berliner (berliner at sun.com)
+
+ * Changes from CVS 1.0 Patchlevel 0 to CVS 1.0 Patchlevel 1; also
+ known as "Changes from CVS 1.0 to CVS 1.1".
+
+ * src/patch.c (get_rcsdate): Portability fix. Replaced call to
+ timelocal() with call to maketime().
+
+Mon Nov 19 23:15:11 1990 Brian Berliner (berliner at prisma.com)
+
+ * Sent CVS 1.0 release to comp.sources.unix moderator and FSF.
+
+ * Special thanks to Dick Grune for his work on the
+ 1986 version of CVS and making it available to the world. Dick's
+ version is available on uunet.uu.net in the
+ comp.sources.unix/volume6/cvs directory.
Index: 6502vhdl/tags/rel/README
===================================================================
--- 6502vhdl/tags/rel/README (nonexistent)
+++ 6502vhdl/tags/rel/README (revision 14)
@@ -0,0 +1,114 @@
+ CVS Kit
+
+ Copyright (c) 1993-1994 Brian Berliner
+ Copyright (c) 1992 Brian Berliner and Jeff Polk
+ Copyright (c) 1989-1992, Brian Berliner
+ All Rights Reserved
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 1, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+-------------------------------------------------------------------------------
+
+Welcome to CVS!
+
+If you have problems or think you have found a bug in CVS, see the
+section BUGS in the CVS manual (also known as Version Management with
+CVS by Per Cederqvist et al, or cvs.texinfo--see below for details).
+
+If you are thinking of submitting changes to CVS, see the
+file HACKING.
+
+Please consult the INSTALL file for information on tested
+configurations. If you have a comment about an already tested
+configuration, or have tried CVS on a new configuration, please let us
+know as described in INSTALL. Free software only works if we all help
+out.
+
+Finally, we cannot guarantee that this release will not completely wipe out
+all of your work from your system. We do some simple testing before each
+release, but you are completely on your own. We recommend testing this
+release on a source repository that is not critical to your work. THIS
+SOFTWARE IS SUPPLIED COMPLETELY "AS IS". NO WARRANTY....
+
+Thanks for your support!
+
+ -The CVS Team
+
+-------------------------------------------------------------------------------
+
+What Is CVS?
+
+CVS is a version control system, which allows you to keep old versions
+of files (usually source code), keep a log of who, when, and why
+changes occurred, etc., like RCS or SCCS. It handles multiple
+developers, multiple directories, triggers to enable/log/control
+various operations, and can work over a wide area network. The
+following tasks are not included; they can be done in conjunction with
+CVS but will tend to require some script-writing and software other
+than CVS: bug-tracking, build management (that is, make and make-like
+tools), and automated testing.
+
+And a whole lot more. See the manual for more information.
+
+-------------------------------------------------------------------------------
+
+Notes to people upgrading from a previous release of CVS:
+
+See the NEWS file for a description of features new in this version.
+
+See the Compatibility section of the manual for information on
+compatibility between CVS versions. The quick summary is that as long
+as you not using the optional watch features, there are no
+compatibility problems with CVS 1.5 or later.
+
+-------------------------------------------------------------------------------
+
+Installation:
+
+Please read the INSTALL file for installation instructions. Brief summary:
+
+ $ ./configure
+ $ make
+ (run the regression tests if desired)
+ $ make install
+ (create a repository if you don't already have one)
+
+The documentation is in the doc subdirectory. cvs.texinfo is the main
+manual; cvs.info* and cvs.ps are the info and postscript versions,
+respectively, generated from cvs.texinfo. The postscript version is
+for US letter size paper; we do this not because we consider this size
+"better" than A4, but because we believe that the US letter version
+will print better on A4 paper than the other way around. If you want a
+version formatted for A4, add the line @afourpaper near the start of
+cvs.texinfo and re-generate cvs.ps using TeX.
+
+-------------------------------------------------------------------------------
+
+* How do I get up-to-date information and information about other
+versions of CVS?
+
+On the web, http://www.loria.fr/~molli/cvs-index.html.
+
+See also
+ http://www.cvshome.org
+
+The mailing list for CVS is info-cvs@gnu.org. Send
+subscription and removal requests for that list to
+info-cvs-request@gnu.org.
+
+The newsgroup for CVS (and other configuration management systems) is
+comp.software.config-mgmt. There is not yet a CVS-specific newsgroup,
+but perhaps if comp.software.config-mgmt gets enough CVS discussion,
+then it will be possible to create one.
+
+-------------------------------------------------------------------------------
+
+Credits: See the AUTHORS file.
Index: 6502vhdl/tags
===================================================================
--- 6502vhdl/tags (nonexistent)
+++ 6502vhdl/tags (revision 14)
6502vhdl/tags
Property changes :
Added: svn:mergeinfo
## -0,0 +0,0 ##