Missing files
authorlekernel <sebastien.bourdeauducq@lekernel.net>
Fri, 2 Oct 2009 23:01:27 +0000 (01:01 +0200)
committerlekernel <sebastien.bourdeauducq@lekernel.net>
Fri, 2 Oct 2009 23:01:27 +0000 (01:01 +0200)
482 files changed:
LICENSE.EGPL [new file with mode: 0644]
LICENSE.FDL [new file with mode: 0644]
LICENSE.GD [new file with mode: 0644]
LICENSE.GPL [new file with mode: 0644]
LICENSE.LATTICE [new file with mode: 0644]
LICENSE.LGPL [new file with mode: 0644]
boards/avnet-sp3aevl/rtl/lm32_include.v [new file with mode: 0644]
boards/avnet-sp3aevl/rtl/setup.v [new file with mode: 0644]
boards/avnet-sp3aevl/rtl/system.v [new file with mode: 0644]
boards/avnet-sp3aevl/sources.mak [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/Makefile.xst [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/common.mak [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/common.ucf [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/load.cmd [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/system.xst [new file with mode: 0644]
boards/avnet-sp3aevl/synthesis/xst.ucf [new file with mode: 0644]
boards/avnet-sp3aevl/test/Makefile [new file with mode: 0644]
boards/avnet-sp3aevl/test/system_tb.v [new file with mode: 0644]
boards/milkymist-one/rtl/ddram.v [new file with mode: 0644]
boards/milkymist-one/rtl/lm32_include.v [new file with mode: 0644]
boards/milkymist-one/rtl/setup.v [new file with mode: 0644]
boards/milkymist-one/rtl/system.v [new file with mode: 0644]
boards/milkymist-one/rtl/vga.v [new file with mode: 0644]
boards/milkymist-one/sources.mak [new file with mode: 0644]
boards/milkymist-one/synthesis/Makefile.precision [new file with mode: 0644]
boards/milkymist-one/synthesis/Makefile.synplify [new file with mode: 0644]
boards/milkymist-one/synthesis/Makefile.xst [new file with mode: 0644]
boards/milkymist-one/synthesis/common.mak [new file with mode: 0644]
boards/milkymist-one/synthesis/common.ucf [new file with mode: 0644]
boards/milkymist-one/synthesis/flash.cmd [new file with mode: 0644]
boards/milkymist-one/synthesis/ioffs.sdc [new file with mode: 0644]
boards/milkymist-one/synthesis/load.cmd [new file with mode: 0644]
boards/milkymist-one/synthesis/precision.tcl [new file with mode: 0644]
boards/milkymist-one/synthesis/precision.ucf [new file with mode: 0644]
boards/milkymist-one/synthesis/synplify.prj [new file with mode: 0644]
boards/milkymist-one/synthesis/synplify.ucf [new file with mode: 0644]
boards/milkymist-one/synthesis/system.xst [new file with mode: 0644]
boards/milkymist-one/synthesis/xst.ucf [new file with mode: 0644]
boards/milkymist-one/test/Makefile [new file with mode: 0644]
boards/milkymist-one/test/system_tb.v [new file with mode: 0644]
boards/xilinx-ml401/rtl/ddram.v [new file with mode: 0644]
boards/xilinx-ml401/rtl/lm32_include.v [new file with mode: 0644]
boards/xilinx-ml401/rtl/setup.v [new file with mode: 0644]
boards/xilinx-ml401/rtl/system.v [new file with mode: 0644]
boards/xilinx-ml401/rtl/vga.v [new file with mode: 0644]
boards/xilinx-ml401/sources.mak [new file with mode: 0644]
boards/xilinx-ml401/synthesis/Makefile.precision [new file with mode: 0644]
boards/xilinx-ml401/synthesis/Makefile.synplify [new file with mode: 0644]
boards/xilinx-ml401/synthesis/Makefile.xst [new file with mode: 0644]
boards/xilinx-ml401/synthesis/common.mak [new file with mode: 0644]
boards/xilinx-ml401/synthesis/common.ucf [new file with mode: 0644]
boards/xilinx-ml401/synthesis/flash.cmd [new file with mode: 0644]
boards/xilinx-ml401/synthesis/ioffs.sdc [new file with mode: 0644]
boards/xilinx-ml401/synthesis/load.cmd [new file with mode: 0644]
boards/xilinx-ml401/synthesis/precision.tcl [new file with mode: 0644]
boards/xilinx-ml401/synthesis/precision.ucf [new file with mode: 0644]
boards/xilinx-ml401/synthesis/synplify.prj [new file with mode: 0644]
boards/xilinx-ml401/synthesis/synplify.ucf [new file with mode: 0644]
boards/xilinx-ml401/synthesis/system.xst [new file with mode: 0644]
boards/xilinx-ml401/synthesis/xst.ucf [new file with mode: 0644]
boards/xilinx-ml401/test/Makefile [new file with mode: 0644]
boards/xilinx-ml401/test/system_tb.v [new file with mode: 0644]
build_bios.sh [new file with mode: 0755]
build_bitstream.sh [new file with mode: 0755]
build_demo.sh [new file with mode: 0755]
build_doc.sh [new file with mode: 0755]
build_sdk.sh [new file with mode: 0755]
clean_all.sh [new file with mode: 0755]
coredoc.inc [new file with mode: 0644]
cores/ac97/doc/LM4550.pdf [new file with mode: 0644]
cores/ac97/doc/Makefile [new file with mode: 0644]
cores/ac97/doc/ac97.tex [new file with mode: 0644]
cores/ac97/doc/ac97_r23.pdf [new file with mode: 0644]
cores/ac97/rtl/ac97.v [new file with mode: 0644]
cores/ac97/rtl/ac97_asfifo.v [new file with mode: 0644]
cores/ac97/rtl/ac97_ctlif.v [new file with mode: 0644]
cores/ac97/rtl/ac97_deframer.v [new file with mode: 0644]
cores/ac97/rtl/ac97_dma.v [new file with mode: 0644]
cores/ac97/rtl/ac97_framer.v [new file with mode: 0644]
cores/ac97/rtl/ac97_graycounter.v [new file with mode: 0644]
cores/ac97/rtl/ac97_transceiver.v [new file with mode: 0644]
cores/ac97/test/Makefile [new file with mode: 0644]
cores/ac97/test/tb_ac97.v [new file with mode: 0644]
cores/aceusb/doc/Makefile [new file with mode: 0644]
cores/aceusb/doc/aceusb.tex [new file with mode: 0644]
cores/aceusb/doc/ds080.pdf [new file with mode: 0644]
cores/aceusb/rtl/aceusb.v [new file with mode: 0644]
cores/aceusb/rtl/aceusb_access.v [new file with mode: 0644]
cores/aceusb/rtl/aceusb_sync.v [new file with mode: 0644]
cores/aceusb/test/Makefile [new file with mode: 0644]
cores/aceusb/test/tb_aceusb.v [new file with mode: 0644]
cores/bram/doc/Makefile [new file with mode: 0644]
cores/bram/doc/bram.tex [new file with mode: 0644]
cores/bram/rtl/bram.v [new file with mode: 0644]
cores/conbus/doc/Makefile [new file with mode: 0644]
cores/conbus/doc/conbus.tex [new file with mode: 0644]
cores/conbus/rtl/conbus.v [new file with mode: 0644]
cores/conbus/rtl/conbus_arb.v [new file with mode: 0644]
cores/conbus/test/Makefile [new file with mode: 0644]
cores/conbus/test/master.v [new file with mode: 0644]
cores/conbus/test/slave.v [new file with mode: 0644]
cores/conbus/test/tb_conbus.v [new file with mode: 0644]
cores/csrbrg/rtl/csrbrg.v [new file with mode: 0644]
cores/csrbrg/test/Makefile [new file with mode: 0644]
cores/csrbrg/test/tb_csrbrg.v [new file with mode: 0644]
cores/fmlarb/rtl/fmlarb.v [new file with mode: 0644]
cores/fmlbrg/doc/Makefile [new file with mode: 0644]
cores/fmlbrg/doc/fmlbrg.tex [new file with mode: 0644]
cores/fmlbrg/rtl/fmlbrg.v [new file with mode: 0644]
cores/fmlbrg/rtl/fmlbrg_datamem.v [new file with mode: 0644]
cores/fmlbrg/test/Makefile [new file with mode: 0644]
cores/fmlbrg/test/tb_fmlbrg.v [new file with mode: 0644]
cores/hpdmc_ddr32/doc/HYB25D256.pdf [new file with mode: 0644]
cores/hpdmc_ddr32/doc/Makefile [new file with mode: 0644]
cores/hpdmc_ddr32/doc/blockdiagram.dia [new file with mode: 0644]
cores/hpdmc_ddr32/doc/blockdiagram.eps [new file with mode: 0644]
cores/hpdmc_ddr32/doc/hpdmc.tex [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc_banktimer.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc_busif.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc_ctlif.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc_datactl.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/hpdmc_mgmt.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_ddrio.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_iddr32.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_iobuf32.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_obuft4.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_oddr32.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/spartan6/hpdmc_oddr4.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/virtex4/hpdmc_ddrio.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/virtex4/hpdmc_iddr32.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/virtex4/hpdmc_idelay8.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/virtex4/hpdmc_oddr32.v [new file with mode: 0644]
cores/hpdmc_ddr32/rtl/virtex4/hpdmc_oddr4.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/Makefile.spartan6 [new file with mode: 0644]
cores/hpdmc_ddr32/test/Makefile.virtex4 [new file with mode: 0644]
cores/hpdmc_ddr32/test/common.mak [new file with mode: 0644]
cores/hpdmc_ddr32/test/ddr.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/ddr_parameters.vh [new file with mode: 0644]
cores/hpdmc_ddr32/test/iddr.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/iddr2.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/idelay.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/iobuf.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/obuft.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/oddr.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/oddr2.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/subtest.vh [new file with mode: 0644]
cores/hpdmc_ddr32/test/tb_hpdmc.v [new file with mode: 0644]
cores/hpdmc_ddr32/test/tb_model.v [new file with mode: 0644]
cores/lm32/README [new file with mode: 0644]
cores/lm32/doc/ds_icon.jpg [new file with mode: 0644]
cores/lm32/doc/lever40.css [new file with mode: 0644]
cores/lm32/doc/lever40_ns.css [new file with mode: 0644]
cores/lm32/doc/lm32.htm [new file with mode: 0644]
cores/lm32/doc/lm32_archman.pdf [new file with mode: 0644]
cores/lm32/rtl/JTAGB.v [new file with mode: 0644]
cores/lm32/rtl/er1.v [new file with mode: 0644]
cores/lm32/rtl/jtag_cores.v [new file with mode: 0644]
cores/lm32/rtl/jtag_lm32.v [new file with mode: 0644]
cores/lm32/rtl/lm32_adder.v [new file with mode: 0644]
cores/lm32/rtl/lm32_addsub.v [new file with mode: 0644]
cores/lm32/rtl/lm32_cpu.v [new file with mode: 0644]
cores/lm32/rtl/lm32_dcache.v [new file with mode: 0644]
cores/lm32/rtl/lm32_debug.v [new file with mode: 0644]
cores/lm32/rtl/lm32_decoder.v [new file with mode: 0644]
cores/lm32/rtl/lm32_functions.v [new file with mode: 0644]
cores/lm32/rtl/lm32_icache.v [new file with mode: 0644]
cores/lm32/rtl/lm32_instruction_unit.v [new file with mode: 0644]
cores/lm32/rtl/lm32_interrupt.v [new file with mode: 0644]
cores/lm32/rtl/lm32_jtag.v [new file with mode: 0644]
cores/lm32/rtl/lm32_load_store_unit.v [new file with mode: 0644]
cores/lm32/rtl/lm32_logic_op.v [new file with mode: 0644]
cores/lm32/rtl/lm32_mc_arithmetic.v [new file with mode: 0644]
cores/lm32/rtl/lm32_monitor.v [new file with mode: 0644]
cores/lm32/rtl/lm32_monitor_ram.v [new file with mode: 0644]
cores/lm32/rtl/lm32_multiplier.v [new file with mode: 0644]
cores/lm32/rtl/lm32_ram.v [new file with mode: 0644]
cores/lm32/rtl/lm32_shifter.v [new file with mode: 0644]
cores/lm32/rtl/lm32_top.v [new file with mode: 0644]
cores/lm32/rtl/lm32_trace.v [new file with mode: 0644]
cores/lm32/rtl/spiprog.v [new file with mode: 0644]
cores/lm32/rtl/typea.v [new file with mode: 0644]
cores/lm32/rtl/typeb.v [new file with mode: 0644]
cores/norflash32/doc/MT28F640J3.pdf [new file with mode: 0644]
cores/norflash32/rtl/norflash32.v [new file with mode: 0644]
cores/norflash8/doc/s29gl032n.pdf [new file with mode: 0644]
cores/norflash8/rtl/norflash8.v [new file with mode: 0644]
cores/norflash8/test/Makefile [new file with mode: 0644]
cores/norflash8/test/tb_norflash8.v [new file with mode: 0644]
cores/pfpu/cleanroms.sh [new file with mode: 0755]
cores/pfpu/doc/Makefile [new file with mode: 0644]
cores/pfpu/doc/architecture.dia [new file with mode: 0644]
cores/pfpu/doc/architecture.eps [new file with mode: 0644]
cores/pfpu/doc/pfpu.tex [new file with mode: 0644]
cores/pfpu/makeroms.sh [new file with mode: 0755]
cores/pfpu/roms/sin.rom [new file with mode: 0644]
cores/pfpu/rtl/pfpu.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_above.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_addrgen.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_alu.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_clz32.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_copy.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_ctlif.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_dma.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_equal.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_f2i.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_faddsub.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_fdiv.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_fmul.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_i2f.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_prog.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_regf.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_seq.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_sincos.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_tpram.v [new file with mode: 0644]
cores/pfpu/rtl/pfpu_vect.v [new file with mode: 0644]
cores/pfpu/scripts/sinrom.c [new file with mode: 0644]
cores/pfpu/test/alu/Makefile [new file with mode: 0644]
cores/pfpu/test/alu/tb_alu.v [new file with mode: 0644]
cores/pfpu/test/clz32/Makefile [new file with mode: 0644]
cores/pfpu/test/clz32/tb_clz32.v [new file with mode: 0644]
cores/pfpu/test/complete/Makefile [new file with mode: 0644]
cores/pfpu/test/complete/tb_pfpu.v [new file with mode: 0644]
cores/pfpu/test/vpi/Makefile [new file with mode: 0644]
cores/pfpu/test/vpi/floatconv.c [new file with mode: 0644]
cores/pfpu/test/vpi/floatconv.o [new file with mode: 0644]
cores/pfpu/test/vpi/floatconv.so [new file with mode: 0755]
cores/sysctl/doc/Makefile [new file with mode: 0644]
cores/sysctl/doc/sysctl.tex [new file with mode: 0644]
cores/sysctl/rtl/sysctl.v [new file with mode: 0644]
cores/tmu/doc/Makefile [new file with mode: 0644]
cores/tmu/doc/architecture.dia [new file with mode: 0644]
cores/tmu/doc/architecture.eps [new file with mode: 0644]
cores/tmu/doc/bilinear.dia [new file with mode: 0644]
cores/tmu/doc/bilinear.eps [new file with mode: 0644]
cores/tmu/doc/carch.dia [new file with mode: 0644]
cores/tmu/doc/carch.eps [new file with mode: 0644]
cores/tmu/doc/comm.dia [new file with mode: 0644]
cores/tmu/doc/comm.eps [new file with mode: 0644]
cores/tmu/doc/dist_12lines.dia [new file with mode: 0644]
cores/tmu/doc/dist_12lines.eps [new file with mode: 0644]
cores/tmu/doc/dist_clamp.dia [new file with mode: 0644]
cores/tmu/doc/dist_clamp.eps [new file with mode: 0644]
cores/tmu/doc/dist_common.dia [new file with mode: 0644]
cores/tmu/doc/dist_common.eps [new file with mode: 0644]
cores/tmu/doc/dist_wrap1.dia [new file with mode: 0644]
cores/tmu/doc/dist_wrap1.eps [new file with mode: 0644]
cores/tmu/doc/dist_wrap2.dia [new file with mode: 0644]
cores/tmu/doc/dist_wrap2.eps [new file with mode: 0644]
cores/tmu/doc/dist_wrap3.dia [new file with mode: 0644]
cores/tmu/doc/dist_wrap3.eps [new file with mode: 0644]
cores/tmu/doc/texel_cache.ods [new file with mode: 0644]
cores/tmu/doc/tmu.tex [new file with mode: 0644]
cores/tmu/rtl/tmu.v [new file with mode: 0644]
cores/tmu/rtl/tmu_addresses.v [new file with mode: 0644]
cores/tmu/rtl/tmu_burst.v [new file with mode: 0644]
cores/tmu/rtl/tmu_clamp.v [new file with mode: 0644]
cores/tmu/rtl/tmu_ctlif.v [new file with mode: 0644]
cores/tmu/rtl/tmu_decay.v [new file with mode: 0644]
cores/tmu/rtl/tmu_divider11.v [new file with mode: 0644]
cores/tmu/rtl/tmu_edgediv.v [new file with mode: 0644]
cores/tmu/rtl/tmu_edgedivops.v [new file with mode: 0644]
cores/tmu/rtl/tmu_edgetrace.v [new file with mode: 0644]
cores/tmu/rtl/tmu_meshgen.v [new file with mode: 0644]
cores/tmu/rtl/tmu_perfcounters.v [new file with mode: 0644]
cores/tmu/rtl/tmu_pixin.v [new file with mode: 0644]
cores/tmu/rtl/tmu_pixout.v [new file with mode: 0644]
cores/tmu/rtl/tmu_reorder.v [new file with mode: 0644]
cores/tmu/rtl/tmu_scandiv.v [new file with mode: 0644]
cores/tmu/rtl/tmu_scandivops.v [new file with mode: 0644]
cores/tmu/rtl/tmu_scantrace.v [new file with mode: 0644]
cores/tmu/test/Makefile [new file with mode: 0644]
cores/tmu/test/lena.jpg [new file with mode: 0644]
cores/tmu/test/tb_tmu.v [new file with mode: 0644]
cores/tmu/test/vpi_images.c [new file with mode: 0644]
cores/uart/doc/Makefile [new file with mode: 0644]
cores/uart/doc/uart.tex [new file with mode: 0644]
cores/uart/rtl/uart.v [new file with mode: 0644]
cores/uart/rtl/uart_transceiver.v [new file with mode: 0644]
cores/vgafb/doc/Makefile [new file with mode: 0644]
cores/vgafb/doc/vgafb.tex [new file with mode: 0644]
cores/vgafb/rtl/vgafb.v [new file with mode: 0644]
cores/vgafb/rtl/vgafb_asfifo.v [new file with mode: 0644]
cores/vgafb/rtl/vgafb_ctlif.v [new file with mode: 0644]
cores/vgafb/rtl/vgafb_fifo64to16.v [new file with mode: 0644]
cores/vgafb/rtl/vgafb_graycounter.v [new file with mode: 0644]
cores/vgafb/rtl/vgafb_pixelfeed.v [new file with mode: 0644]
cores/vgafb/test/Makefile [new file with mode: 0644]
cores/vgafb/test/tb_pixelfeed.v [new file with mode: 0644]
doc/Makefile [new file with mode: 0644]
doc/confslides.tex [new file with mode: 0644]
doc/confslides_overview.tex [new file with mode: 0644]
doc/csr.tex [new file with mode: 0644]
doc/csr_topology.dia [new file with mode: 0644]
doc/csr_topology.eps [new file with mode: 0644]
doc/dipswitches.txt [new file with mode: 0644]
doc/distortionsanofi.eps [new file with mode: 0644]
doc/flow.dia [new file with mode: 0644]
doc/flow.eps [new file with mode: 0644]
doc/fml.tex [new file with mode: 0644]
doc/logo.eps [new file with mode: 0644]
doc/memlatency.dia [new file with mode: 0644]
doc/memlatency.eps [new file with mode: 0644]
doc/microcontroller.dia [new file with mode: 0644]
doc/microcontroller.eps [new file with mode: 0644]
doc/milkdrop.tex [new file with mode: 0644]
doc/milkdrop1.eps [new file with mode: 0644]
doc/milkdrop2.eps [new file with mode: 0644]
doc/milkdrop3.eps [new file with mode: 0644]
doc/ml401.eps [new file with mode: 0644]
doc/paper_overview.bib [new file with mode: 0644]
doc/paper_overview.tex [new file with mode: 0644]
doc/serialdebug.eps [new file with mode: 0644]
doc/soc_architecture.dia [new file with mode: 0644]
doc/soc_architecture.eps [new file with mode: 0644]
doc/swarch.dia [new file with mode: 0644]
doc/swarch.eps [new file with mode: 0644]
doc/system.tex [new file with mode: 0644]
doc/tesselsanofi.eps [new file with mode: 0644]
doc/texelcache.eps [new file with mode: 0644]
doc/tripattern.dia [new file with mode: 0644]
doc/tripattern.eps [new file with mode: 0644]
flash_bios.sh [new file with mode: 0755]
flash_bitstream.sh [new file with mode: 0755]
load_bitstream.sh [new file with mode: 0755]
load_demo.sh [new file with mode: 0755]
presets/Geiss - Cosmic Dust 2 Simplified.milk [new file with mode: 0644]
setup.inc [new file with mode: 0644]
software/baselib/Makefile [new file with mode: 0644]
software/baselib/atof.c [new file with mode: 0644]
software/baselib/board.c [new file with mode: 0644]
software/baselib/cfcard.c [new file with mode: 0644]
software/baselib/cffat.c [new file with mode: 0644]
software/baselib/console.c [new file with mode: 0644]
software/baselib/crc16.c [new file with mode: 0644]
software/baselib/crc32.c [new file with mode: 0644]
software/baselib/divsi3.c [new file with mode: 0644]
software/baselib/irq.S [new file with mode: 0644]
software/baselib/libc.c [new file with mode: 0644]
software/baselib/malloc.c [new file with mode: 0644]
software/baselib/milieu.h [new file with mode: 0644]
software/baselib/softfloat-glue.c [new file with mode: 0644]
software/baselib/softfloat-macros.h [new file with mode: 0644]
software/baselib/softfloat-specialize.h [new file with mode: 0644]
software/baselib/softfloat.c [new file with mode: 0644]
software/baselib/softfloat.h [new file with mode: 0644]
software/baselib/system.c [new file with mode: 0644]
software/baselib/uart-async.c [new file with mode: 0644]
software/baselib/uart.c [new file with mode: 0644]
software/baselib/vsnprintf-nofloat.c [new file with mode: 0644]
software/baselib/vsnprintf.c [new file with mode: 0644]
software/bios/Makefile [new file with mode: 0644]
software/bios/boot.c [new file with mode: 0644]
software/bios/boot.h [new file with mode: 0644]
software/bios/crt0.S [new file with mode: 0644]
software/bios/linker.ld [new file with mode: 0644]
software/bios/main.c [new file with mode: 0644]
software/bios/splash.c [new file with mode: 0644]
software/bios/splash.h [new file with mode: 0644]
software/bios/splash.png [new file with mode: 0644]
software/demo/Makefile [new file with mode: 0644]
software/demo/analyzer.c [new file with mode: 0644]
software/demo/analyzer.h [new file with mode: 0644]
software/demo/apipe.c [new file with mode: 0644]
software/demo/apipe.h [new file with mode: 0644]
software/demo/ast.h [new file with mode: 0644]
software/demo/bandfilters.sce [new file with mode: 0644]
software/demo/brd.c [new file with mode: 0644]
software/demo/brd.h [new file with mode: 0644]
software/demo/color.h [new file with mode: 0644]
software/demo/compiler.c [new file with mode: 0644]
software/demo/compiler.h [new file with mode: 0644]
software/demo/cpustats.c [new file with mode: 0644]
software/demo/cpustats.h [new file with mode: 0644]
software/demo/crt0.S [new file with mode: 0644]
software/demo/eval.c [new file with mode: 0644]
software/demo/eval.h [new file with mode: 0644]
software/demo/hdlcd.c [new file with mode: 0644]
software/demo/hdlcd.h [new file with mode: 0644]
software/demo/isr.c [new file with mode: 0644]
software/demo/line.c [new file with mode: 0644]
software/demo/line.h [new file with mode: 0644]
software/demo/linker.ld [new file with mode: 0644]
software/demo/main.c [new file with mode: 0644]
software/demo/mem.c [new file with mode: 0644]
software/demo/mem.h [new file with mode: 0644]
software/demo/parser.y [new file with mode: 0644]
software/demo/parser_helper.c [new file with mode: 0644]
software/demo/parser_helper.h [new file with mode: 0644]
software/demo/pfpu.c [new file with mode: 0644]
software/demo/pfpu.h [new file with mode: 0644]
software/demo/renderer.c [new file with mode: 0644]
software/demo/renderer.h [new file with mode: 0644]
software/demo/rpipe.c [new file with mode: 0644]
software/demo/rpipe.h [new file with mode: 0644]
software/demo/scanner.h [new file with mode: 0644]
software/demo/scanner.re [new file with mode: 0644]
software/demo/scheduler.c [new file with mode: 0644]
software/demo/scheduler.h [new file with mode: 0644]
software/demo/shell.c [new file with mode: 0644]
software/demo/shell.h [new file with mode: 0644]
software/demo/slowout.c [new file with mode: 0644]
software/demo/slowout.h [new file with mode: 0644]
software/demo/snd.c [new file with mode: 0644]
software/demo/snd.h [new file with mode: 0644]
software/demo/spam.png [new file with mode: 0644]
software/demo/time.c [new file with mode: 0644]
software/demo/time.h [new file with mode: 0644]
software/demo/tmu.c [new file with mode: 0644]
software/demo/tmu.h [new file with mode: 0644]
software/demo/ui.c [new file with mode: 0644]
software/demo/ui.h [new file with mode: 0644]
software/demo/vga.c [new file with mode: 0644]
software/demo/vga.h [new file with mode: 0644]
software/demo/wave.c [new file with mode: 0644]
software/demo/wave.h [new file with mode: 0644]
software/include.mak [new file with mode: 0644]
software/include/board.h [new file with mode: 0644]
software/include/cfcard.h [new file with mode: 0644]
software/include/cffat.h [new file with mode: 0644]
software/include/console.h [new file with mode: 0644]
software/include/crc.h [new file with mode: 0644]
software/include/endian.h [new file with mode: 0644]
software/include/hw/ac97.h [new file with mode: 0644]
software/include/hw/common.h [new file with mode: 0644]
software/include/hw/fmlbrg.h [new file with mode: 0644]
software/include/hw/gpio.h [new file with mode: 0644]
software/include/hw/hpdmc.h [new file with mode: 0644]
software/include/hw/interrupts.h [new file with mode: 0644]
software/include/hw/pfpu.h [new file with mode: 0644]
software/include/hw/sram.h [new file with mode: 0644]
software/include/hw/sysctl.h [new file with mode: 0644]
software/include/hw/systemace.h [new file with mode: 0644]
software/include/hw/tmu.h [new file with mode: 0644]
software/include/hw/uart.h [new file with mode: 0644]
software/include/hw/vga.h [new file with mode: 0644]
software/include/irq.h [new file with mode: 0644]
software/include/libc.h [new file with mode: 0644]
software/include/malloc.h [new file with mode: 0644]
software/include/math.h [new file with mode: 0644]
software/include/stdarg.h [new file with mode: 0644]
software/include/stdio.h [new file with mode: 0644]
software/include/stdlib.h [new file with mode: 0644]
software/include/string.h [new file with mode: 0644]
software/include/system.h [new file with mode: 0644]
software/include/uart.h [new file with mode: 0644]
software/include/version.h [new file with mode: 0644]
software/mathlib/Makefile [new file with mode: 0644]
software/mathlib/acosf.c [new file with mode: 0644]
software/mathlib/asincosf.c [new file with mode: 0644]
software/mathlib/asinf.c [new file with mode: 0644]
software/mathlib/atan2f.c [new file with mode: 0644]
software/mathlib/atanf.c [new file with mode: 0644]
software/mathlib/ceilf.c [new file with mode: 0644]
software/mathlib/cosf.c [new file with mode: 0644]
software/mathlib/coshf.c [new file with mode: 0644]
software/mathlib/cotf.c [new file with mode: 0644]
software/mathlib/expf.c [new file with mode: 0644]
software/mathlib/fabsf.c [new file with mode: 0644]
software/mathlib/floorf.c [new file with mode: 0644]
software/mathlib/frexpf.c [new file with mode: 0644]
software/mathlib/ldexpf.c [new file with mode: 0644]
software/mathlib/log10f.c [new file with mode: 0644]
software/mathlib/logf.c [new file with mode: 0644]
software/mathlib/modff.c [new file with mode: 0644]
software/mathlib/powf.c [new file with mode: 0644]
software/mathlib/sincosf.c [new file with mode: 0644]
software/mathlib/sincoshf.c [new file with mode: 0644]
software/mathlib/sinf.c [new file with mode: 0644]
software/mathlib/sinhf.c [new file with mode: 0644]
software/mathlib/sqrtf.c [new file with mode: 0644]
software/mathlib/tancotf.c [new file with mode: 0644]
software/mathlib/tanf.c [new file with mode: 0644]
software/mathlib/tanhf.c [new file with mode: 0644]
software/update_depend.sh [new file with mode: 0755]
tools/Makefile [new file with mode: 0644]
tools/bin2hex.c [new file with mode: 0644]
tools/crc32.c [new file with mode: 0644]
tools/flterm.c [new file with mode: 0644]
tools/makeraw.c [new file with mode: 0644]
tools/sfl.h [new file with mode: 0644]
tools/xdlanalyze.pl [new file with mode: 0755]

diff --git a/LICENSE.EGPL b/LICENSE.EGPL
new file mode 100644 (file)
index 0000000..004a1a5
--- /dev/null
@@ -0,0 +1,506 @@
+                   EXCEPTION GENERAL PUBLIC LICENSE
+                      Version 2, January 2009
+                       DRAFT 7 - FOR FEEDBACK AND COMMENTS
+ Copyright (C) 2009 Exception License Foundation
+
+Everybody is allowed to copy and distribute verbatim copies of this license
+document, but modifying it in any way is not allowed.
+
+                           Preamble
+
+Licenses for most software and projects used to take away your freedom to
+share and change them, until the "free" licenses were created. That enabled an 
+enormous quantity of free software and open projects to be created, developed, 
+maintained and expanded way beyond what one could have imagined in the 
+beginning. Internet and the contemporary world would not be what it is without 
+the contribution of so many people participating in the "Free, Libre and Open 
+Source" movement (FLOSS) as some have described it.
+
+The original goal of FLOSS is a success, and now using and developing Open
+Source projects is a mark of smart thinking. In a perfect world, that would be
+a great common goal to use and change software freely, and collaborate in
+order to make the world more open and more diverse. In a perfect world, you
+wouldn't need an Exception License. We hope that this Exception License will
+be a sufficient message so that no further abuse are done, and be used more as
+an "art project example" or "theoretical or philosophical tool" for critical
+study of Open Source than a real license used in the real world. Sadly, we
+don't live in a perfect world and some uses are seen by the original Open
+Source Developers as abuses of their Open Source projects.
+
+Some military equipment are naturally using Open Source, for some weapon 
+systems on ships and airplanes. Some missile may actually be running Linux. 
+Some open source database may be used to track population for ethnic 
+cleansing. Also, on a less dramatic but even more real note, some of the 
+people using Open Source are actually working to make it impossible to develop 
+through DRM, software patents, lobbying or Internet censorship.
+
+Using Free, Libre and Open Source Software for some socially negative 
+activities can be seen as an unfair use of a tool for openness and justice. 
+The social cost of these negative activities is not covered by the people 
+committing such negative actions. Worse, Open Source software used for such 
+negative goals is indeed helping such negative projects, often against the own 
+will of the project developers, creators, maintainers and of the whole 
+community. The eGPL can be seen as a way to redistribute the social and human 
+cost of negative actions back to the original perpetrators of such negative  
+actions.
+
+The goal of this license is then to enable the Open Source developers to 
+choose that their project be covered by an Open Source license, and yet retain 
+the right to exclude some entities from the right of using or modifying this 
+software under this license. In such case, the concerned entities should 
+request another licensing scheme from these Open Source developers in order to 
+use the software. The project team can define groups of Exceptions for its 
+project, and can even subscribe to "feeds" of exceptions that will define in 
+time the group of entities that cannot use the project under eGPL. These feeds 
+can be written by Non-Governmental Organization who know which entities have a 
+detrimental social and human impact. By having such list written, that can 
+help reducing the number of entities with detrimental effect on people and 
+societies, giving them strong incentives to cease negative actions.
+
+Of course, the eGPL itself could be used as a tool in order to exclude 
+entities that do not have any negative impact. As a result, a few restrictions 
+apply to the eGPL. For example, you cannot define Exceptions on a specific 
+person or on an ethnic group. You can however define an Exception for a 
+Country or a Geographic region. Another condition is that the eGPL itself is 
+place under eGPL, creating the first recursive license known to us. The 
+Exception License Foundation will then pay attention to the use of the License 
+and revoke the right of using such license for a given project when abuse of 
+the original intent of the eGPL would be witnessed. For example, one could not 
+agree with an Exception that would prevent "All peace organizations of the 
+world" to use one particular Open Source project.
+
+We protect your rights with three steps: (1) copyright the project or 
+software, (2) propose this license which gives legal permission to copy, 
+distribute and/or modify the software or project, (3) enable you to define for 
+your own project the list of exceptions, that is of entities that cannot use 
+this license and should seek another license for this project.
+
+As with any Open Source license, there is no warranty for this free software. 
+If the software is modified by anyone else and then shared, the recipients 
+have to be aware that what they have is not the genuine, original software, so 
+that any issue due to someone else should not affect the original authors' 
+reputation. Also, people modifying the original project must be aware that 
+they cannot introduce new Exceptions, and that their Exception list is Exactly 
+the same as the original project. The reason behind this is that it would be 
+otherwise very easy for someone to take a project and slightly modify it, 
+create a new project, and then remove all the Exceptions from the new project, 
+therefore breaking the original authors intent.
+
+Finally, as with traditional Open Source License, we state again the obvious 
+that all patents affecting a project or software must be licensed for 
+everyone's free use or not licensed at all.
+
+The precise terms and conditions for using, copying, distributing and 
+modifying follow:
+
+
+                   EXCEPTION GENERAL PUBLIC LICENSE
+    TERMS AND CONDITIONS FOR USING, COPYING, DISTRIBUTING AND MODIFYING
+
+0. This License applies to any project, program, software or other work which 
+contains a notice placed by the copyright holder stating it may be used or 
+distributed under the terms of this Exception General Public License. The 
+"Project" below refers to any such project, program, software or work, and a 
+"work based on the Project" means either the Project or any derivative work 
+under copyright law: that is to say, a work containing the Project or a 
+portion of it, either verbatim or with modifications and/or translated into 
+another language. (Hereinafter, translation is included without any limitation 
+in the word "modification".)  Each licensee is addressed as "you".
+
+Activities other than using, copying, distributing and modifying are not 
+covered by this License; they are outside its scope.  The act of running the 
+project is restricted by the terms of this License (referred as "using"), and 
+the output from the Project is covered only if it can be considered as "a work 
+based on the Project" (independently from having been produced by running the 
+Project). Whether that applies to this current Project depends on what the 
+Project does.
+
+1. You may copy and distribute non-modified copies of the Project's source 
+code as you received it, in any medium, provided that you publish on each copy 
+an appropriate and visible copyright notice and disclaimer of warranty; do not 
+modify and preserve all the notices that refer to this License and to the 
+absence of any warranty; and give any other recipients of the Project a copy 
+of this License along with the Project, provided such recipients are not 
+Excepted from the use of such Project.
+
+You may charge a fee for the physical act of providing a copy, and you may at 
+your discretion offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Project or any part of it, thus 
+creating a work based on the Project, and copy and distribute such 
+modifications or work under the terms of Section 1 above, provided that you 
+also meet all of these following conditions:
+
+a) You must change the modified files to carry visible and prominent notices 
+stating that you modified the files and the date of any such modification.
+
+b) You must license any work that you distribute or publish, that in whole or 
+in part contains or is derived from the Project or any parts thereof, under 
+the terms of this License, at no charge to all third parties covered by this 
+License and not Excepted from its use.
+
+c) If the modified program normally has an interactive mode when run, you must
+make it, when started in the most ordinary way, to display or print a notice
+including an appropriate copyright statement and a notice that there is no
+warranty (or else, saying that you provide a warranty yourself) and that users
+may redistribute the Project under these same conditions, and telling the user
+how to visualize a copy of this License. If the original Project itself is
+interactive but does not normally display such an announcement, your work
+based on the Project is not required to display an announcement. If printing
+such an announcement would make another program non-interoperable with your
+own program and that the goal of your modification is to enable
+interoperability, your work based on the Project is not required to display an
+announcement.
+
+d) You must make sure that the Exceptions of this License do not cover any 
+entities or part of entities that may have modified this Project, or used this 
+program against the terms of this License for any activity related to the 
+modification of this Project.
+
+The requirements apply to the modified work in its entirety, not to parts of 
+it. If identifiable parts of that work are not derived from the Project, and 
+can be reasonably distinguished from your modified work, and as such 
+considered independent and separate works in themselves, then this License 
+does not apply to those parts when you distribute them as separate works.
+But when you distribute these same parts as part of a whole which is a work 
+based on the Project, the distribution of the whole must be under this 
+License, whose permissions, obligations and terms for other licensees extend 
+to the entire whole and to each and every part of it regardless of who wrote 
+it.
+
+Thus, it is not the goal of this section to claim rights or contest your 
+rights to work written entirely by you; rather, the goal is to exercise the 
+right to control the distribution of derivative or collective works based on 
+the Project, and make sure that you distribute parts not covered by this 
+License separately from the modified work.
+
+In addition, mere aggregation of another work not based on the Project with 
+the Project (or with a work based on the Project) on a storage space or 
+distribution medium does not put the other work under the scope of this 
+License.
+
+3. You may distribute and copy the Project (or a derivative work, under 
+section 2) in binary code or executable form under the conditions of Sections 
+1 and 2 printed above provided that you are not listed as part or whole of the 
+entities Excepted from its right of use and also do one of the following:
+
+a) Join the whole corresponding machine-readable source code, distributed also 
+under the terms of Section 1 and 2 printed above on a medium usually used for 
+software source-code exchange; or,
+
+b) Join a written offer, valid for at least three years, to give any third
+party at no more price than the cost of performing the physical act of source
+distribution, the corresponding machine-readable copy of the source code, to
+be distributed under the terms of Sections 1 and 2 printed above on a medium
+usually used for software source-code exchange; or,
+
+c) Join the information you received as to the offer to distribute
+corresponding source code. (This option is only allowed for non-commercial
+distribution and only if you obtained the Project in binary or executable form
+with such offer, in accord with Subsection b printed above.)
+
+The source code for a work means the readable text-based form of the work
+which is preferred for making modifications to it. For an executable work,
+complete source code means all the source code for all parts it contains, plus
+any interface definition files, plus the scripts and text rules used to
+control compilation and deployment of the executable. However, as a special
+exception, the distributed source code does not need to include anything that
+is normally distributed (in either binary or source code form) with the major
+components (kernel, standard libraries, compiler) of the operating system on
+which the executable Project runs, unless that component itself accompanies
+the executable. The Project must include any component that is not generally
+available and required for compilation, especially if the given component is
+otherwise only available under NDA (Non Disclosure Agreement) or any other
+restrictive license, and has to be included without any other restriction than
+this License.
+
+If distribution of binary code or executable is made by offering access to
+copy from a given place, then offering equivalent access to obtain the source
+code from the same place counts as distributing the source code and has to
+comply to the same rules, even though third parties are not compelled to copy
+the source code along with the binary code.
+
+4. You may not modify, copy, use, sublicense or distribute the Project except
+as expressly provided under this License. Any attempt otherwise to modify,
+copy, use, sublicense or distribute the Project is void, and will
+automatically terminate your rights under this License. However, parties who
+have received rights or copies from you under this License will not have their
+licenses terminated as long as these parties remain in full compliance with
+this License.
+
+5. You are not required to accept this License, since you did not sign it.
+However, nothing else grants you permission to use, modify, copy or distribute
+the Project or its derivative works. These actions are prohibited by law if
+you do not accept this License and expose you to legal actions. Therefore, by
+using, modifying or distributing the Project (or any derivative work based on
+the Program), you indicate your acceptance of this License to do so, and all
+its terms and conditions, without any restriction, for using, copying,
+distributing or modifying the Project or derivative works based on it.
+
+6. Each time you copy or redistribute the Project (or any derivative work
+based on the Project), the recipient automatically receives a license, this
+License, from the original licensor to distribute, copy, use or modify the
+Project subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein and in
+the Exceptions of this License as governed by its terms and conditions
+presented herein. You are not responsible for enforcing compliance by third
+parties to this License.
+
+7. If, as a consequence of a court judgment, justice decision, administrative
+decision or allegation of patent infringement or for any other reason (not
+limited to patent or legal issues), conditions are imposed on you or any
+entity you're part of (whether by agreement, court order or otherwise) that
+contradict the conditions of this License, they do not excuse you from the
+conditions or terms of this License. If you cannot use or distribute so as to
+satisfy both and simultaneously your obligations under this License and any
+other obligations, then as a direct consequence you may not distribute, modify
+or use the Project at all. For example, if a patent license would not permit
+royalty-free sharing, copy or redistribution of the Project by anybody who
+receive copies directly or indirectly through you, then the only manner you
+could satisfy both the patent license and this License would be to refrain
+entirely from distributing the Project.
+
+If any article or part of the License is held invalid or unenforceable under
+any particular circumstance or decision, by any authority within a country,
+company or any territorial or organizational entity, for everybody within that
+said country, company or any territorial or organizational entity, then the
+License does not apply anymore to anybody or any entity within the
+organizational or geographical zone or area of validity of the decision or of
+applicability of the circumstance. When the License does not apply, that means
+that any right of use, modification, copy, distribution is revoked for any
+person within the area of validity or applicability of the decision or of the
+circumstance, and thus prevents anyone with previous right under this License
+from using, modifying, sharing, copying or distributing the Project and any
+other project governed by this License. The spirit of this License is that if
+any court or organization or territorial power would disagree with the
+Exception List for example and hold it invalid and make a law precedent for a
+particular territory, administrative, then the Exception License Foundation
+cannot accept that the License be changed in its nature and thus would request
+all its users to seek for another compatible license from the Project
+developers and authors. If the license or any part of the License is held
+invalid or unenforceable for the Project only, within a country, company or
+any territorial or organizational entity, then the License does not authorize
+anybody within this entity to use the Project for the Project only.
+
+The purpose of this section is not to induce you to infringe any patents or to
+contest validity of any right claims or to infringe any property right claims;
+this section has the only purpose of protecting the integrity of the free,
+libre and open source distribution system, which is implemented by this public
+license practice. Many people have made generous contributions to the
+multitude of software distributed through that system thanks to the
+consistence application of that system; the author/donor has the decision
+power to decide if he or she is willing to distribute software through any
+other system and a licensee cannot impose that choice or overcome the terms
+and conditions of this License.
+
+This section is intended to make clear and well defined what is believed to be
+a consequence of the rest of this License.
+
+8. If the use and/or distribution of the Project is restricted in certain
+geographical zones or countries either by copyrighted interfaces or by
+patents, the original copyright holder who places the Project under this
+License may add a geographical use and/or distribution limitation excluding
+these countries, so that use and/or distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates the
+limitation as if written in the body of this License. The recipient of the
+Project should make sure that these restrictions are up to date and accurate
+and do not apply to him, his country, the country where computers storing or
+executing the Project may be placed on or the entity he is part of.
+
+9. The Exception License Foundation may publish new versions and/or revised
+versions of the Exception General Public License at variable time intervals.
+Such new versions will be in similar spirit to the present version, but may
+differ in the text or details to address issues, problems or concerns as they
+occur. The Project can adopt a new version of the Exception General Public
+License or keep on using any earlier version.
+
+10. If you wish to use parts of the Project into other free projects whose
+distribution conditions are not governed by this Exception General Public
+License, write to the author to ask for permission.
+
+11. You can use, modify, copy and distribute the Project, provided any
+Exception does not prevent you to use the Project under this License.
+Exceptions are defined by the developers and makers of the Project. All the
+Exceptions are combined together to define the Exception List. Exceptions are
+defined as an exclusion of a certain list of given entities, be it companies,
+governmental components, countries or any organizational or territorial entity
+of any kind. Exceptions can be defined at the beginning of a Project and be
+changed during the whole evolution of the Project. If you can reasonably be
+included in any of the Exceptions for the Project, you are not allowed to use,
+modify, copy, share or distribute the Project under these License terms and
+conditions and should remove the Project from any storage medium you used. If
+you wish to use the Project but are Excepted from it, you should seek another
+alternative license from the Project authors and developers.
+
+12. Exceptions cannot apply to individual people. You cannot use the Project
+in any way that would benefit any of the entities listed in Exception, either
+directly or indirectly. Exceptions cannot apply to ethnic groups or genders.
+Such Exceptions, if defined are automatically said to be null and do not
+apply, whatever wording may be used by the Project, but the remainder of the
+Exception List applies in full force without being affected by any nullified
+Exception.
+
+13. Exceptions are defined either in fixed form as a file, usually named
+"EXCEPTIONS", hereby described as the Exception File, included in the Project
+or as a changeable list (that can be found online, on Internet, or requested
+from the Project developers and authors) and which location should be in the
+Exception File, included in the Project. Having an Exception File within the
+Project does not prevent the Project's authors to define other additional
+Exceptions online. The address of the online Exception List may or may not be
+listed within the Exception File. If no Exceptions File or alike is present
+within the Project, you must assume that all Exceptions are defined online and
+respect the License accordingly. You have to check both the Exception File and
+online in order to verify that this License applies to you. The default online
+server for defining Exceptions is the home web server of the Exception License
+usually located at http://www.eGPL.info. In case of not being able to access
+such server, you must use well known Internet tools and search engine to find
+the location of appropriate Exceptions for the Project.
+
+14. A Project is said to be a Forked Project when it is based on another
+Project and considered a derivative of this other Project. You may create a
+Forked project for any Project provided you're not excepted from this Project.
+The Forked project inherits all the Exceptions from the Parent Project. All
+the Exception requirements applies automatically to any Forked Project of the
+Forked Project, as a Forked Project at the second degree, third degree, or any
+degree, is also considered a Forked Project of the Parent Project. The Parent
+Project may declare at any time that Forked Project may add to the Exception
+List. Such indication is to be written in plain english in the Exception List
+of the Project. By default, any Forked Project cannot and should not add any
+Exception to the Exception List. If such statement allowing Forked Project to
+add Exceptions is present in the Parent Project, you may, as the modifier of a
+Project and thus the creator of a Forked Project, add more exceptions to the
+inherited Exceptions but cannot remove any Exception from the Parent Project
+Exception List. The Parent Project may require the Forked Project to remove
+any exception and you must comply with it. The Forked Project, by being a
+derivative, accepts any Exception removal request and recognize the right of
+the Parent Project to request such removal for the lifetime of the Parent
+Project. Not complying with a request from the Parent Project may lead to
+having the Forked Project listed in the Exception List, and as such, loose all
+rights of use of the original code, parts or sections of the Parent Project.
+In such case of a Forked Project being added to the Exception List of the
+Parent Project, you must delete all parts of the Parent Project from your
+Forked Project. Any Forked Project hereby accepts such requirement, present or
+future, and recognize the right of the Parent Project to request at any time
+that no change to the Exception List be done by any Forked Project.
+
+15. The License is itself a project placed under eGPL License. As such, the 
+Exception License Foundation can define Exceptions for the application of this 
+License. This is said to create the first recursive License where the License 
+apply on itself.
+
+16. When an entity is not granted rights on the Project because of an
+Exception, such entity is called an "Excepted Entity" should seek another
+license (hereby called an "Alternative license") to be granted to it before
+using or redistributing the Project. If you are part of an Excepted Entity,
+you can seek such Alternative license from the Project developers and authors.
+This process is called Resolution. Some hints about who or which online
+resource to contact in order to perform this Resolution can be noted in the
+"EXCEPTIONS" file and you should refer to it when seeking an Alternative
+license. You understand that if you cannot use the Project under this license
+(due to one or several Exceptions), and did not obtain any other License for
+the Project, then you have no right at all to use, modify, copy, share or
+redistribute the Project and should thus remove this Project from any medium,
+support or location that you may have under your command or used to
+temporarily store this Project.
+
+17. This License is automatically converted to Free Software Foundation GNU
+General Public License (GNU GPL) version 2 (two) after 10 (ten) years of no
+activity, no new release or no update on the Exception List of the Project.
+After such period, the GNU GPL is the only license governing the Project. This
+condition applies to the whole Project and does not take in account a
+particular version, release or package of the Project. Any bug fix, new
+version is considered as activity and therefore pushes back the conversion
+date by the duration mentioned above. Any activity in a Forked Project is also
+considered as activity on the Parent Project and therefore affects the
+conversion date as if the activity was in the Parent Project itself.
+
+                           NO WARRANTY
+
+18. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE BY THIS LICENSE, THERE IS
+NO WARRANTY FOR THE PROJECT, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT
+WHEN OTHERWISE STATE IN WRITING THE COPYRIGHT HOLDERS AND/OR ANY OTHER PARTIES
+PROVIDE THE PROJECT "AS IS" WITHOUT ANY WARRANT OF ANY KIND, EITHER IMPLIED OR
+EXPRESSED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS THE
+PERFORMANCE AND QUALITY AND OF THE PROJECT IS WITH YOU. SHOULD THE PROJECT
+PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY CORRECTION, REPAIR OR
+SERVICING. SHOULD THE PROJECT PROVE DANGEROUS, YOU HAVE TO NOTIFY THE ORIGINAL
+AUTHORS AND ANY PERSON THAT MAY HAVE USED OR RECEIVED A COPY THROUGH YOU.
+
+19. 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 PROJECT AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+SPECIAL, GENERAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE
+OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO DATA BEING
+RENDERED INACCURATE OR LOSS OF DATA OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROJECT TO OPERATE WITH ANY OTHER PROGRAMS), EVEN
+IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+PROBLEMS, ISSUES OR DAMAGES BY ANY FORM OF ORAL OR WRITTEN OR OTHER
+COMMUNICATION.
+
+                    END OF TERMS AND CONDITIONS
+
+
+           How to Apply These Terms to Your New Projects
+
+If you make a new project and you want it to be of the greatest possible use
+to the public while not helping entities having a social and human negative
+impact, then you can achieve this by making it free and excepted software
+which most people can redistribute and change under these terms.
+
+The eGPL license was designed to be very close to the spirit of other public
+license while allowing the Exception mechanism.
+
+To achieve that, attach the following notices to your project. It is best to
+attach them at the beginning of each source file to most effectively convey
+the exclusion of warranty; and each source file should have at least the
+"copyright" text and a pointer to where the full license is found.
+
+   <one line to give the program's name and a brief idea of what it does.>
+   Copyright (C) <year> <name of author>
+ This program is free and excepted software; you can use it, redistribute it
+ and/or modify it under the terms of the Exception General Public License as
+ published by the Exception License Foundation; either version 2 of the
+ License, 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 Exception General Public License for more
+ details.
+ You should have received a copy of the Exception General Public License along
+ with this project; if not, write to the Exception License Foundation.
+
+Also add details on how to contact you by electronic and paper mail.
+
+If the program has an interactive mode , make it print a short notice like
+this when it starts:
+
+ Zblahvision version 42, Copyright (C) year name of author 
+ Zblahvision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+
+This is free and excepted software, and you are welcome to use it, modify it
+and/or redistribute it under certain conditions; type `show c' for details.
+
+The prototype commands `show w' and `show c' should show the appropriate parts
+of the Exception General Public License. Follow the same idea if your program
+has a graphical interface.
+
+You should also get your employer or your school, if any, to sign a "copyright
+disclaimer" for the project, if necessary. Here is a sample; alter the names:
+
+ Corpozealous, Inc., hereby disclaims all copyright interest in the program
+ `Zblahvision' (which identify true terror-making managers) written by Paul
+ Kludger.
+
+ <signature of Max Micromanage>, 1 April 2001 Max Micromanage, President of
+ Corporate Relationships
+
+This Exception General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine library,
+you may consider it more useful to permit linking proprietary applications
+with the library. If this is what you want to do, use the Exception Lesser
+General Public License instead of this License.
diff --git a/LICENSE.FDL b/LICENSE.FDL
new file mode 100644 (file)
index 0000000..2f7e03c
--- /dev/null
@@ -0,0 +1,451 @@
+
+                GNU Free Documentation License
+                 Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+     <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense.  It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does.  But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book.  We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License.  Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein.  The "Document", below,
+refers to any such manual or work.  Any member of the public is a
+licensee, and is addressed as "you".  You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject.  (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.)  The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License.  If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant.  The Document may contain zero
+Invariant Sections.  If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License.  A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters.  A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text.  A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification.  Examples of
+transparent image formats include PNG, XCF and JPG.  Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page.  For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language.  (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".)  To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document.  These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License.  You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute.  However, you may accept
+compensation in exchange for copies.  If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover.  Both covers must also clearly and legibly identify
+you as the publisher of these copies.  The front cover must present
+the full title with all words of the title equally prominent and
+visible.  You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it.  In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+   from that of the Document, and from those of previous versions
+   (which should, if there were any, be listed in the History section
+   of the Document).  You may use the same title as a previous version
+   if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+   responsible for authorship of the modifications in the Modified
+   Version, together with at least five of the principal authors of the
+   Document (all of its principal authors, if it has fewer than five),
+   unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+   Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+   adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+   giving the public permission to use the Modified Version under the
+   terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+   and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+   to it an item stating at least the title, year, new authors, and
+   publisher of the Modified Version as given on the Title Page.  If
+   there is no section Entitled "History" in the Document, create one
+   stating the title, year, authors, and publisher of the Document as
+   given on its Title Page, then add an item describing the Modified
+   Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+   public access to a Transparent copy of the Document, and likewise
+   the network locations given in the Document for previous versions
+   it was based on.  These may be placed in the "History" section.
+   You may omit a network location for a work that was published at
+   least four years before the Document itself, or if the original
+   publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+   Preserve the Title of the section, and preserve in the section all
+   the substance and tone of each of the contributor acknowledgements
+   and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+   unaltered in their text and in their titles.  Section numbers
+   or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements".  Such a section
+   may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+   or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant.  To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version.  Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity.  If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy.  If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications".  You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections.  You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers.  In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation 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.  See
+http://www.gnu.org/copyleft/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation.  If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation.  If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works.  A
+public wiki that anybody can edit is an example of such a server.  A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 
+license published by Creative Commons Corporation, a not-for-profit 
+corporation with a principal place of business in San Francisco, 
+California, as well as future copyleft versions of that license 
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in 
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this 
+License, and if all works that were first published under this License 
+somewhere other than this MMC, and subsequently incorporated in whole or 
+in part into the MMC, (1) had no cover texts or invariant sections, and 
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+    Copyright (c)  YEAR  YOUR NAME.
+    Permission is granted to copy, distribute and/or modify this document
+    under the terms of the GNU Free Documentation License, Version 1.3
+    or any later version published by the Free Software Foundation;
+    with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+    A copy of the license is included in the section entitled "GNU
+    Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+    with the Invariant Sections being LIST THEIR TITLES, with the
+    Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
diff --git a/LICENSE.GD b/LICENSE.GD
new file mode 100644 (file)
index 0000000..5e17d03
--- /dev/null
@@ -0,0 +1,53 @@
+     Portions copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
+     2002 by Cold Spring Harbor Laboratory. Funded under Grant
+     P41-RR02188 by the National Institutes of Health. 
+
+     Portions copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002 by
+     Boutell.Com, Inc. 
+
+     Portions relating to GD2 format copyright 1999, 2000, 2001, 2002
+     Philip Warner.
+     
+     Portions relating to PNG copyright 1999, 2000, 2001, 2002 Greg
+     Roelofs. 
+
+     Portions relating to gdttf.c copyright 1999, 2000, 2001, 2002 John  
+     Ellson (ellson@lucent.com).
+   
+     Portions relating to gdft.c copyright 2001, 2002 John Ellson  
+     (ellson@lucent.com).  
+
+     Portions copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007
+                Pierre-Alain Joye (pierre@libgd.org).  
+
+     Portions relating to JPEG and to color quantization copyright 2000,
+     2001, 2002, Doug Becker and copyright (C) 1994, 1995, 1996, 1997,
+     1998, 1999, 2000, 2001, 2002, Thomas G. Lane. This software is
+     based in part on the work of the Independent JPEG Group. See the
+     file README-JPEG.TXT for more information.
+
+     Portions relating to WBMP copyright 2000, 2001, 2002 Maurice
+     Szmurlo and Johan Van den Brande.
+
+     Permission has been granted to copy, distribute and modify gd in
+     any context without fee, including a commercial application,
+     provided that this notice is present in user-accessible supporting
+     documentation.
+
+     This does not affect your ownership of the derived work itself, and 
+     the intent is to assure proper credit for the authors of gd, not to
+     interfere with your productive use of gd. If you have questions,
+     ask. "Derived works" includes all programs that utilize the   
+     library. Credit must be given in user-accessible documentation.
+
+     This software is provided "AS IS." The copyright holders disclaim  
+     all warranties, either express or implied, including but not
+     limited to implied warranties of merchantability and fitness for a
+     particular purpose, with respect to this code and accompanying  
+     documentation.
+
+     Although their code does not appear in gd, the authors wish to thank
+     David Koblas, David Rowley, and Hutchison Avenue Software Corporation
+     for their prior contributions.
+
diff --git a/LICENSE.GPL b/LICENSE.GPL
new file mode 100644 (file)
index 0000000..4432540
--- /dev/null
@@ -0,0 +1,676 @@
+
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), 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 prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                      TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey 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;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+  
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU 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 that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  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.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+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.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                    END OF TERMS AND CONDITIONS
+
+           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 the public, 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
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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 3 of the License, 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, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program 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, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+
diff --git a/LICENSE.LATTICE b/LICENSE.LATTICE
new file mode 100644 (file)
index 0000000..376f57b
--- /dev/null
@@ -0,0 +1,564 @@
+LATTICE SEMICONDUCTOR CORPORATION
+LatticeMico32 System License Agreement
+
+This is a legal agreement between you, the end user, and Lattice Semiconductor 
+Corporation.  By proceeding with the installation or use of the Software, you 
+agree to be bound by the terms of this Agreement.  If you do not agree to the 
+terms of this Agreement, do not use the Software, and promptly return the 
+media package and all accompanying items (including written materials and 
+binders or other containers) to the place you obtained them for a full refund 
+of any applicable license fees.
+
+Lattice Semiconductor Corporation ("Lattice") and the individual or entity 
+acquiring the Software ("Licensee") agree as follows:
+
+1.  DEFINITIONS
+"Software" means the LatticeMico32 System computer program(s) other than the 
+open source programs identified in Section 11 herein in machine-readable form 
+furnished to Licensee by Lattice, in whatever media and by whatever method, 
+which are enabled for use pursuant to Lattice's software protection mechanism, 
+and for which Licensee has paid any applicable license fees.  Software includes 
+any related update or upgrade programs that may be added from time to time.
+
+2.  SOFTWARE LICENSE
+a.  Lattice hereby grants to Licensee a non-exclusive, nontransferable license 
+to use the Software for Licensee's internal purposes only on any computer 
+possessed by Licensee on which the Software is designed to operate, such use 
+to be in accordance with and subject to the terms and conditions of this 
+Agreement.
+
+b.  Pursuant to this Agreement, Licensee may (i) physically transfer any 
+Software from one computer to another provided that the Software is used on 
+only one such computer at a time and (ii) use the Software and any output 
+files generated by the Software for the sole purpose of designing and 
+programming semiconductor components (the "Permitted Use") and (iii) make 
+one (1) copy of the Software for Licensee's own use solely for backup or 
+archive purposes.  Licensee may also merge the Software (or a portion thereof) 
+into any other software to form an updated work; provided that, upon 
+termination of Licensee's license, the Software shall be completely removed 
+from the updated work and treated as if permission to merge had never been 
+granted.  The use of any portion of the Software included in any such updated 
+work remains at all times subject to the terms and conditions of this Agreement.
+
+c.  Licensee shall include Lattice's (and Lattice's suppliers', as applicable) 
+copyrights, trademarks, and other proprietary notices on any copies and merged 
+versions of the Software.
+
+d.  Licensee shall not distribute, copy, transfer, lend, incorporate, modify, 
+or use the Software for any purpose except as expressly provided herein.
+
+e.  If Licensee fails to comply with the provisions of this Agreement, the 
+License is automatically terminated.
+
+f.  Except for the rights expressly granted herein to Licensee, the title and 
+all intellectual property rights in and to the Software and any copy of the 
+Software which may be made by Licensee hereunder remain the sole and exclusive 
+property of Lattice and/or Lattice's licensors.
+
+3.  LIMITED WARRANTY AND REMEDIES
+a.  Lattice warrants to Licensee that the media containing the Software will 
+be free from defects in materials and workmanship under normal use and service 
+for a period of ninety (90) days from the date of delivery.  Lattice further 
+warrants that the Software will substantially conform to Lattice's published 
+specifications for the Software at the time of delivery for a period of ninety 
+(90) days from the date of delivery. 
+
+b.  During the 90-day warranty period, (1) Lattice will replace any Software 
+not meeting the foregoing warranty that is returned to Lattice; or (2) if 
+Lattice is unable to deliver replacement Software which performs substantially 
+in accordance with current program documentation or Software on a media which 
+is free of defects in materials or workmanship, Licensee may terminate this 
+Agreement by returning the Software and any applicable license fee paid by 
+Licensee to Lattice will be refunded.  Any replacement Software or media will 
+be warranted for the remainder of the original warranty period or thirty (30) 
+days, whichever is longer.
+
+c.  Any products which are not returned to Lattice within the warranty period 
+or which have been subject to accident, abuse, misuse, alteration, neglect, or 
+unauthorized repair or installation are not covered by warranty.
+
+4.  WARRANTY DISCLAIMER
+EXCEPT FOR THE ABOVE EXPRESSED LIMITED WARRANTIES, LATTICE MAKES NO WARRANTIES 
+ON THE SOFTWARE, WHETHER EXPRESSED, IMPLIED, STATUTORY, OR IN ANY OTHER 
+PROVISION OF THIS AGREEMENT OR COMMUNICATION WITH LICENSEE, AND LATTICE 
+SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF MERCHANTABILITY OR FITNESS 
+FOR A PARTICULAR PURPOSE.  LATTICE DOES NOT WARRANT THAT THE OPERATION OF 
+THE SOFTWARE BY LICENSEE WILL BE UNINTERRUPTED OR ERROR FREE.  LICENSEE 
+ASSUMES RESPONSIBILITY FOR SELECTION OF THE SOFTWARE TO ACHIEVE ITS INTENDED 
+RESULTS, AND FOR THE PROPER INSTALLATION, USE, AND RESULTS OBTAINED FROM THE 
+SOFTWARE.  EXCEPT FOR THE ABOVE EXPRESSED LIMITED WARRANTIES, LICENSEE ASSUMES 
+THE ENTIRE RISK OF THE SOFTWARE PROVING DEFECTIVE OR FAILING TO PERFORM 
+PROPERLY AND IN SUCH EVENT, LICENSEE SHALL ASSUME THE ENTIRE COST AND RISK 
+OF ANY REPAIR, SERVICE, CORRECTION, OR ANY OTHER LIABILITIES OR DAMAGES CAUSED 
+BY OR ASSOCIATED WITH THE SOFTWARE.  LATTICE'S SOLE LIABILITY, AND LICENSEE'S 
+SOLE REMEDY, IS SET FORTH ABOVE.
+
+5.  SOURCE CODE
+Licensee shall not attempt to reverse translate, decompile or otherwise 
+attempt to derive the source code of the Software.  In the event any source 
+code is explicitly licensed to Licensee as part of the Software, such 
+limitation will not apply to such source code.  Licensee shall not alter or 
+remove from the Software any copyright, trademark or other proprietary 
+notices of Lattice and/or Lattice's licensors.  Any use or attempted use of 
+the Software in violation of the foregoing restrictions is a breach of the 
+Agreement which will cause irreparable harm to Lattice, entitling Lattice to 
+injunctive relief in addition to all legal remedies.
+
+6.  LIMITATION OF LIABILITY
+a.  Licensee agrees that Lattice's entire liability to Licensee and Licensee's 
+sole remedy hereunder for any cause whatsoever, regardless of the form of the 
+action, shall be limited to the price paid to Lattice for the Software.
+
+b.  IN NO EVENT WILL LATTICE OR ANY OF ITS SUPPLIERS BE LIABLE TO LICENSEE 
+OR ANY OTHER PERSON FOR ANY DAMAGES, INCLUDING ANY DIRECT, INDIRECT, 
+INCIDENTAL, CONSEQUENTIAL, OR SPECIAL DAMAGES, INCLUDING EXPENSES, LOST 
+PROFITS, LOST SAVINGS, OR OTHER DAMAGES OF ANY SORT ARISING OUT OF THE USE 
+OF OR INABILITY TO USE THE SOFTWARE, EVEN IF LATTICE HAS BEEN ADVISED OF THE 
+POSSIBILITY OF SUCH DAMAGES.
+
+SOME STATES DO NOT ALLOW THE LIMITATION OR EXCLUSION OF INCIDENTAL OR 
+CONSEQUENTIAL DAMAGES, SO THE ABOVE LIMITATIONS OR EXCLUSIONS MAY NOT 
+APPLY TO YOU.
+
+7.  DEFAULT AND TERMINATION
+This Agreement will continue indefinitely, until and unless terminated; it 
+will terminate automatically in the event Licensee fails to perform any of 
+its obligations hereunder.  Licensee may terminate this Agreement at any time 
+by returning to Lattice the original and all copies of the Software or by 
+destroying the Software together with all copies thereof, including all 
+modifications and merged portions in any form.  Upon termination of this 
+Agreement for any reason, Licensee shall either return to Lattice the original 
+and all copies of the Software, or, upon Lattice's request, destroy such 
+original and copies and provide Lattice with written certification of their 
+destruction.
+
+8.  EXPORT CONTROL
+Licensee shall not export the Software or the direct product thereof without 
+first obtaining any necessary U.S. or other governmental licenses and 
+approvals.  In connection with such export control compliance, Licensee 
+certifies as follows:
+ - that Licensee is not on the Denied Persons List maintained by the U.S. 
+Bureau of Industry and Security;
+
+ - that Licensee is not on the list of Specially Designated Nationals and 
+Blocked Persons maintained by the U.S. Department of the Treasury;
+ - that Licensee is not a citizen or resident of, or an agent of, Cuba, Iran, 
+Iraq, North Korea, Libya, Sudan, or Syria, or any other country to which 
+export of the referenced Software is prohibited; and
+ - that Licensee is legally permitted, under all applicable export and 
+commerce control laws and regulations, to receive the referenced Software.
+
+9.  U.S. GOVERNMENT RESTRICTED RIGHTS
+The Software and any accompanying documentation are provided with RESTRICTED 
+RIGHTS.  Use, duplication, or disclosure by the Government is subject to 
+restrictions as set forth in subparagraph (c)(1)(ii) of The Rights in 
+Technical Data and Computer Software clause at DFARS 252.227-7013 or 
+subparagraphs (c)(1) and (2) of Commercial Computer Software--Restricted 
+Rights at 48 CFR 52.227-19, as applicable.  Contractor/manufacturer is Lattice 
+Semiconductor Corporation, 5555 NE Moore Court, Hillsboro, Oregon 97124 and 
+its licensors.
+
+10.  ADDITIONAL TERMS AND CONDITIONS APPLICABLE TO LATTICE PROGRAMMING HARDWARE
+Lattice programmers, ispDOWNLOAD® cables, and other hardware sold for use in 
+conjunction with Lattice software ("Programming Hardware") are designed and 
+intended for use solely with semiconductor components manufactured by Lattice 
+Semiconductor Corporation.  Programming Hardware is warranted to meet Lattice 
+Specifications only for a period of ninety (90) days; in all other respects 
+the terms and conditions of sale of Programming Hardware shall be Lattice's 
+standard terms and conditions set forth in Lattice's Sales Order 
+Acknowledgement.  Furthermore, Lattice Specifications for the ispDOWNLOAD 
+cable limit its use to low-volume engineering applications only, and not for 
+volume production use.  As with all other Programming Hardware, Lattice shall 
+not be liable for any use of the ispDOWNLOAD cable in production, or use of 
+worn or improperly installed hardware or use with incompatible systems or 
+components.
+
+11.  OPEN SOURCE SOFTWARE
+a.  Your use of the Software is governed by the terms of this Agreement.  
+However, certain separate source code modules identified in Section 11(b) 
+and Section 11(c) below that are installed with, but not integrated with, the 
+Software have been provided by third parties.  By proceeding with the 
+installation and use of such open source code, you are also agreeing to use 
+this code in accordance with the terms of the agreements under which such 
+code has been licensed.  
+
+b.  Certain open source code is licensed under the Eclipse Public License 
+v. 1.0, a copy of which is attached hereto as Appendix A.
+
+c.  Certain open source code is licensed pursuant to the terms of the notice 
+attached hereto as Appendix B.
+
+12.  OPEN SOURCE LICENSE AGREEMENT FOR OUTPUT FILES GENERATED BY THE 
+LATTICEMICO32 SYSTEM 
+By proceeding with the installation and use of the LatticeMico32 System, you 
+are agreeing to use the output files generated by it in accordance with the 
+terms of the Lattice Semiconductor Corporation Open Source License Agreement, 
+a copy of which is attached hereto as Appendix C.
+
+13.  INFORMATION REGARDING PERSONAL DATA
+If you downloaded this Software from our website, we have collected 
+information about you, including your name and contact information, from the 
+information you provided when you registered to use the website.
+
+If you acquired the Software from a source other than our website, we will ask 
+you for certain information, including your name and contact information, as 
+part of the installation procedure.
+
+Some of our Software comes bundled with software from third party providers, 
+including Mentor Graphics Corporation and Synplicity, Inc. If you obtain a 
+license key from us for such Software, we will provide your name, corporate 
+affiliation, address, phone number, fax number, and email address, along with 
+information about the software version you have chosen, to the appropriate 
+third party provider.
+
+14.  GENERAL
+THIS AGREEMENT WILL BE GOVERNED BY THE LAWS OF THE STATE OF OREGON, WITHOUT 
+REGARD TO ITS CONFLICT OF LAWS PROVISIONS.
+
+Licensee may not sublicense, assign, or transfer the License or the Software.
+
+The prevailing party in any legal action or arbitration arising out of this 
+Agreement shall be entitled to reimbursement for reasonable attorneys fees 
+and expenses, in addition to any other rights and remedies such party may have.
+
+This Agreement is the entire agreement between the parties and supersedes any 
+other communications or prior agreements, oral or written, regarding the 
+Software.  
+
+If any provision of this Agreement is held invalid, the remainder of the 
+Agreement shall continue in full force and effect.
+
+Please direct all inquiries, in writing, to Lattice Semiconductor Corporation, 
+5555 N.E. Moore Court, Hillsboro, Oregon 97124.
+©2006-2008 Lattice Semiconductor Corporation.  All rights reserved.
+
+
+Intellectual Property Notice
+
+The software governed by this License Agreement is:
+
+Copyright ©, 1992-2008, Lattice Semiconductor Corporation, All Rights Reserved
+
+
+
+APPENDIX A
+
+Eclipse Public License v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC 
+LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM 
+CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS 
+
+"Contribution" means: 
+
+a) in the case of the initial Contributor, the initial code and documentation 
+distributed under this Agreement, and 
+
+b) in the case of each subsequent Contributor: i) changes to the Program, and 
+ii) additions to the Program; where such changes and/or additions to the 
+Program originate from and are distributed by that particular Contributor. 
+A Contribution 'originates' from a Contributor if it was added to the Program 
+by such Contributor itself or anyone acting on such Contributor's behalf. 
+Contributions do not include additions to the Program which: (i) are separate 
+modules of software distributed in conjunction with the Program under their 
+own license agreement, and (ii) are not derivative works of the Program. 
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents" mean patent claims licensable by a Contributor which are 
+necessarily infringed by the use or sale of its Contribution alone or when 
+combined with the Program. 
+
+"Program" means the Contributions distributed in accordance with this 
+Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, 
+including all Contributors. 
+
+2. GRANT OF RIGHTS 
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants 
+Recipient a non-exclusive, worldwide, royalty-free copyright license to 
+reproduce, prepare derivative works of, publicly display, publicly perform, 
+distribute and sublicense the Contribution of such Contributor, if any, and 
+such derivative works, in source code and object code form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants 
+Recipient a non-exclusive, worldwide, royalty-free patent license under 
+Licensed Patents to make, use, sell, offer to sell, import and otherwise 
+transfer the Contribution of such Contributor, if any, in source code and 
+object code form. This patent license shall apply to the combination of the 
+Contribution and the Program if, at the time the Contribution is added by the 
+Contributor, such addition of the Contribution causes such combination to be 
+covered by the Licensed Patents. The patent license shall not apply to any 
+other combinations which include the Contribution. No hardware per se is 
+licensed hereunder. 
+
+c) Recipient understands that although each Contributor grants the licenses 
+to its Contributions set forth herein, no assurances are provided by any 
+Contributor that the Program does not infringe the patent or other 
+intellectual property rights of any other entity. Each Contributor disclaims 
+any liability to Recipient for claims brought by any other entity based on 
+infringement of intellectual property rights or otherwise. As a condition to 
+exercising the rights and licenses granted hereunder, each Recipient hereby 
+assumes sole responsibility to secure any other intellectual property rights 
+needed, if any. For example, if a third party patent license is required to 
+allow Recipient to distribute the Program, it is Recipient's responsibility to 
+acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient 
+copyright rights in its Contribution, if any, to grant the copyright license 
+set forth in this Agreement. 
+
+3. REQUIREMENTS 
+
+A Contributor may choose to distribute the Program in object code form under 
+its own license agreement, provided that: 
+a) it complies with the terms and conditions of this Agreement; and
+b) its license agreement:
+i) effectively disclaims on behalf of all Contributors all warranties and 
+conditions, express and implied, including warranties or conditions of title 
+and non-infringement, and implied warranties or conditions of merchantability 
+and fitness for a particular purpose; 
+ii) effectively excludes on behalf of all Contributors all liability for 
+damages, including direct, indirect, special, incidental and consequential 
+damages, such as lost profits; 
+iii) states that any provisions which differ from this Agreement are offered 
+by that Contributor alone and not by any other party; and
+iv) states that source code for the Program is available from such 
+Contributor, and informs licensees how to obtain it in a reasonable manner 
+on or through a medium customarily used for software exchange.
+When the Program is made available in source code form:
+a) it must be made available under this Agreement; and 
+b) a copy of this Agreement must be included with each copy of the Program. 
+Contributors may not remove or alter any copyright notices contained within 
+the Program. 
+Each Contributor must identify itself as the originator of its Contribution, 
+if any, in a manner that reasonably allows subsequent Recipients to identify 
+the originator of the Contribution. 
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with 
+respect to end users, business partners and the like. While this license is 
+intended to facilitate the commercial use of the Program, the Contributor 
+who includes the Program in a commercial product offering should do so in a 
+manner which does not create potential liability for other Contributors. 
+Therefore, if a Contributor includes the Program in a commercial product 
+offering, such Contributor ("Commercial Contributor") hereby agrees to defend 
+and indemnify every other Contributor ("Indemnified Contributor") against any 
+losses, damages and costs (collectively "Losses") arising from claims, 
+lawsuits and other legal actions brought by a third party against the 
+Indemnified Contributor to the extent caused by the acts or omissions of such 
+Commercial Contributor in connection with its distribution of the Program in a 
+commercial product offering. The obligations in this section do not apply to 
+any claims or Losses relating to any actual or alleged intellectual property 
+infringement. In order to qualify, an Indemnified Contributor must: a) 
+promptly notify the Commercial Contributor in writing of such claim, and b) 
+allow the Commercial Contributor to control, and cooperate with the Commercial 
+Contributor in, the defense and any related settlement negotiations. The 
+Indemnified Contributor may participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product 
+offering, Product X. That Contributor is then a Commercial Contributor. If 
+that Commercial Contributor then makes performance claims, or offers 
+warranties related to Product X, those performance claims and warranties are 
+such Commercial Contributor's responsibility alone. Under this section, the 
+Commercial Contributor would have to defend claims against the other 
+Contributors related to those performance claims and warranties, and if a 
+court requires any other Contributor to pay any damages as a result, the 
+Commercial Contributor must pay those damages. 
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON 
+AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS 
+OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF 
+TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 
+
+Each Recipient is solely responsible for determining the appropriateness of 
+using and distributing the Program and assumes all risks associated with its 
+exercise of rights under this Agreement , including but not limited to the 
+risks and costs of program errors, compliance with applicable laws, damage to 
+or loss of data, programs or equipment, and unavailability or interruption of 
+operations. 
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY 
+CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 
+LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE 
+EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY 
+OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under 
+applicable law, it shall not affect the validity or enforceability of the 
+remainder of the terms of this Agreement, and without further action by the 
+parties hereto, such provision shall be reformed to the minimum extent 
+necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a 
+cross-claim or counterclaim in a lawsuit) alleging that the Program itself 
+(excluding combinations of the Program with other software or hardware) 
+infringes such Recipient's patent(s), then such Recipient's rights granted 
+under Section 2(b) shall terminate as of the date such litigation is filed. 
+
+All Recipient's rights under this Agreement shall terminate if it fails to 
+comply with any of the material terms or conditions of this Agreement and 
+does not cure such failure in a reasonable period of time after becoming 
+aware of such noncompliance. If all Recipient's rights under this Agreement 
+terminate, Recipient agrees to cease use and distribution of the Program as 
+soon as reasonably practicable. However, Recipient's obligations under this 
+Agreement and any licenses granted by Recipient relating to the Program shall 
+continue and survive. 
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in 
+order to avoid inconsistency the Agreement is copyrighted and may only be 
+modified in the following manner. The Agreement Steward reserves the right 
+to publish new versions (including revisions) of this Agreement from time to 
+time. No one other than the Agreement Steward has the right to modify this 
+Agreement. The Eclipse Foundation is the initial Agreement Steward. The 
+Eclipse Foundation may assign the responsibility to serve as the Agreement 
+Steward to a suitable separate entity. Each new version of the Agreement will 
+be given a distinguishing version number. The Program (including 
+Contributions) may always be distributed subject to the version of the 
+Agreement under which it was received. In addition, after a new version of the 
+Agreement is published, Contributor may elect to distribute the Program 
+(including its Contributions) under the new version. Except as expressly 
+stated in Sections 2(a) and 2(b) above, Recipient receives no rights or 
+licenses to the intellectual property of any Contributor under this Agreement, 
+whether expressly, by implication, estoppel or otherwise. All rights in the 
+Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the 
+intellectual property laws of the United States of America. No party to this 
+Agreement will bring a legal action under this Agreement more than one year 
+after the cause of action arose. Each party waives its rights to a jury trial 
+in any resulting litigation.
+
+APPENDIX B
+
+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. 
+
+APPENDIX C
+
+LATTICE SEMICONDUCTOR CORPORATION OPEN SOURCE LICENSE AGREEMENT
+
+This is a legal agreement between You (Licensee, either a company or an 
+individual), and Lattice Semiconductor Corporation, the Provider (Licensor) 
+of the Software.  The Software subject to this Open Source License Agreement 
+is the output files generated by the Provider's LatticeMico32 System.  By 
+proceeding with the installation, modification, use or distribution in whole 
+or in part of Software that identifies itself as licensed under the Lattice 
+Semiconductor Corporation Open Source License Agreement, You agree to be 
+bound by the terms of this Agreement. If You do not agree to the terms of this 
+Agreement, You are not permitted to use, modify or distribute the Software.
+
+1. The Provider grants to You a personal, non-exclusive right to use and 
+distribute the source code of the Software provided that:
+ - You make distributions free of charge under these license terms
+ - You ensure that the original copyright notices and limitations of liability 
+and warranty sections remain intact.
+
+2. The Provider grants to You a personal, non-exclusive right to modify the 
+source code of the Software and incorporate it with other source code to 
+create a Derivative Work.  At Your discretion, You may distribute this 
+Derivative Work in a form and under terms of Your choosing provided:
+ - You arrange Your design such that the Derivative Work is an identifiable 
+module within Your overall design.
+ - You distribute the source code associated with the modules containing the 
+Derivative Work in a customarily accepted machine-readable format, free of 
+charge under a license agreement that contains these license terms. 
+ - You ensure that the original copyright notices and limitations of liability 
+and warranty sections remain intact.
+ - You clearly identify areas of the source code that You have modified.
+
+3. The Provider grants to You a personal, non-exclusive right to use object 
+code created from the Software or a Derivative Work to physically implement 
+the design in devices such as a programmable logic devices or application 
+specific integrated circuits.  You may distribute these devices without 
+accompanying them with a copy of this license or source code.
+
+4. This Software is provided free of charge.  IN NO EVENT WILL THE PROVIDER 
+OR ANY OF ITS SUPPLIERS BE LIABLE TO YOU OR ANY OTHER PERSON FOR ANY 
+DAMAGES, INCLUDING ANY DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, OR 
+SPECIAL DAMAGES, WHETHER CHARACTERIZED AS EXPENSES, LOST PROFITS, LOST 
+SAVINGS, OR OTHER DAMAGES OF ANY SORT, ARISING OUT OF THE USE OF OR INABILITY 
+TO USE THE SOFTWARE, EVEN IF THE PROVIDER HAS BEEN ADVISED OF THE POSSIBILITY 
+OF SUCH DAMAGES.
+
+5. THE PROVIDER  MAKES NO WARRANTIES WITH RESPECT TO THE SOFTWARE, WHETHER 
+EXPRESSED, IMPLIED, STATUTORY, OR IN ANY OTHER PROVISION OF THIS AGREEMENT OR 
+COMMUNICATION WITH YOU, AND THE PROVIDER SPECIFICALLY DISCLAIMS ANY IMPLIED 
+WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR 
+NON-INFRINGEMNT OF THIRD PARTY RIGHTS. THE PROVIDER DOES NOT WARRANT THAT USE 
+OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE. YOU ASSUME RESPONSIBILITY 
+FOR SELECTION OF THE SOFTWARE TO ACHIEVE ITS INTENDED RESULTS AND FOR THE 
+PROPER INSTALLATION, USE, AND RESULTS OBTAINED FROM THE SOFTWARE. YOU ASSUME 
+THE ENTIRE RISK OF THE SOFTWARE PROVING DEFECTIVE OR FAILING TO PERFORM 
+PROPERLY, AND IN SUCH EVENT, YOU ASSUME THE ENTIRE COST AND RISK OF ANY 
+REPAIR, SERVICE, CORRECTION, OR ANY OTHER LIABILITIES OR DAMAGES CAUSED BY OR 
+ASSOCIATED WITH THE SOFTWARE. THE SOLE LIABILITIES AND REMEDIES ASSOCIATED 
+WITH THE SOFTWARE ARE SET FORTH ABOVE. 
+
+6. Export Control. You agree that neither the Software nor any Derivative 
+Work will be exported, directly or indirectly, into any country or to any 
+person or entity, in violation of laws or regulations of the United States 
+government. This Agreement will be governed by the substantive laws of the 
+State of Oregon, USA.
+
+7. Default and Termination. This Agreement will continue indefinitely, until 
+and unless terminated. You may terminate this Agreement by destroying all 
+copies of the materials to which this Agreement applies.  The Agreement will 
+terminate automatically if due to any event, including court judgment, You 
+fail to perform any of its obligations hereunder. In the event of termination, 
+others that have received software from You under the terms of this Agreement 
+may continue to use it provided they remain in compliance with the terms of 
+this Agreement.
+
+8. Your use of this Software is governed by this Lattice Semiconductor 
+Corporation Open Source License Agreement.  However, depending on your design, 
+the output files generated by the LatticeMico32 System may contain open 
+source code provided by a third party.  Specifically, the output files may 
+contain open source code that is licensed pursuant to the terms attached to 
+the Lattice Semiconductor Corporation LatticeMico32 System License Agreement 
+as Appendix B.  By agreeing to the terms of this Lattice Semiconductor 
+Corporation Open Source License Agreement, you are also agreeing to use such 
+code in accordance with the terms of the agreement under which such code has 
+been licensed, if applicable.
+
+9. From time to time Lattice Semiconductor Corporation may issue revised 
+versions of the Lattice Semiconductor Open Source License Agreement.  
+Revisions will follow the spirit of this version but will contain adjustments 
+and clarifications to address issues and concerns of Lattice and the user 
+community.
+
+©2006-2008 Lattice Semiconductor Corporation. You may freely distribute 
+the text of this Agreement provided you include this copyright notice.  
+However, modifications to the substantive terms herein are not permitted. 
diff --git a/LICENSE.LGPL b/LICENSE.LGPL
new file mode 100644 (file)
index 0000000..cca7fc2
--- /dev/null
@@ -0,0 +1,165 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+  This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+  0. Additional Definitions.
+
+  As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+  "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+  An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+  A "Combined Work" is a work produced by combining or linking an
+Application with the Library.  The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+  The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+  The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+  1. Exception to Section 3 of the GNU GPL.
+
+  You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+  2. Conveying Modified Versions.
+
+  If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+   a) under this License, provided that you make a good faith effort to
+   ensure that, in the event an Application does not supply the
+   function or data, the facility still operates, and performs
+   whatever part of its purpose remains meaningful, or
+
+   b) under the GNU GPL, with none of the additional permissions of
+   this License applicable to that copy.
+
+  3. Object Code Incorporating Material from Library Header Files.
+
+  The object code form of an Application may incorporate material from
+a header file that is part of the Library.  You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+   a) Give prominent notice with each copy of the object code that the
+   Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the object code with a copy of the GNU GPL and this license
+   document.
+
+  4. Combined Works.
+
+  You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+   a) Give prominent notice with each copy of the Combined Work that
+   the Library is used in it and that the Library and its use are
+   covered by this License.
+
+   b) Accompany the Combined Work with a copy of the GNU GPL and this license
+   document.
+
+   c) For a Combined Work that displays copyright notices during
+   execution, include the copyright notice for the Library among
+   these notices, as well as a reference directing the user to the
+   copies of the GNU GPL and this license document.
+
+   d) Do one of the following:
+
+       0) Convey the Minimal Corresponding Source under the terms of this
+       License, and the Corresponding Application Code in a form
+       suitable for, and under terms that permit, the user to
+       recombine or relink the Application with a modified version of
+       the Linked Version to produce a modified Combined Work, in the
+       manner specified by section 6 of the GNU GPL for conveying
+       Corresponding Source.
+
+       1) Use a suitable shared library mechanism for linking with the
+       Library.  A suitable mechanism is one that (a) uses at run time
+       a copy of the Library already present on the user's computer
+       system, and (b) will operate properly with a modified version
+       of the Library that is interface-compatible with the Linked
+       Version.
+
+   e) Provide Installation Information, but only if you would otherwise
+   be required to provide such information under section 6 of the
+   GNU GPL, and only to the extent that such information is
+   necessary to install and execute a modified version of the
+   Combined Work produced by recombining or relinking the
+   Application with a modified version of the Linked Version. (If
+   you use option 4d0, the Installation Information must accompany
+   the Minimal Corresponding Source and Corresponding Application
+   Code. If you use option 4d1, you must provide the Installation
+   Information in the manner specified by section 6 of the GNU GPL
+   for conveying Corresponding Source.)
+
+  5. Combined Libraries.
+
+  You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+   a) Accompany the combined library with a copy of the same work based
+   on the Library, uncombined with any other library facilities,
+   conveyed under the terms of this License.
+
+   b) Give prominent notice with the combined library that part of it
+   is a work based on the Library, and explaining where to find the
+   accompanying uncombined form of the same work.
+
+  6. Revised Versions of the GNU Lesser General Public License.
+
+  The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser 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
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+  If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/boards/avnet-sp3aevl/rtl/lm32_include.v b/boards/avnet-sp3aevl/rtl/lm32_include.v
new file mode 100644 (file)
index 0000000..e33360b
--- /dev/null
@@ -0,0 +1,356 @@
+// =============================================================================
+//                           COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation        TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court                            408-826-6000 (other locations)
+// Hillsboro, OR 97124                     web  : http://www.latticesemi.com/
+// U.S.A                                   email: techsupport@latticesemi.com
+// =============================================================================/
+//                         FILE DETAILS
+// Project          : LatticeMico32
+// File             : lm32_include.v
+// Title            : CPU global macros
+// Version          : 6.1.17
+//                  : Initial Release
+// Version          : 7.0SP2, 3.0
+//                  : No Change
+// Version          : 3.1
+//                  : No Change
+// Version          : 3.2
+//                  : No Change
+// Version          : 3.3
+//                  : Support for extended configuration register
+// =============================================================================
+
+`ifdef LM32_INCLUDE_V
+`else
+`define LM32_INCLUDE_V
+
+//
+// Common configuration options
+//
+
+`define CFG_EBA_RESET 32'h0
+`define CFG_DEBA_RESET 32'h0
+
+`define CFG_PL_MULTIPLY_ENABLED
+`define CFG_PL_BARREL_SHIFT_ENABLED
+`define CFG_SIGN_EXTEND_ENABLED
+`define CFG_MC_DIVIDE_ENABLED
+
+`define CFG_ICACHE_ENABLED
+`define CFG_ICACHE_ASSOCIATIVITY   2
+`define CFG_ICACHE_SETS            256
+`define CFG_ICACHE_BYTES_PER_LINE  16
+`define CFG_ICACHE_BASE_ADDRESS    32'h0
+`define CFG_ICACHE_LIMIT           32'h7fffffff
+
+//`define CFG_DCACHE_ENABLED
+`define CFG_DCACHE_ASSOCIATIVITY   2
+`define CFG_DCACHE_SETS            512
+`define CFG_DCACHE_BYTES_PER_LINE  16
+`define CFG_DCACHE_BASE_ADDRESS    32'h0
+`define CFG_DCACHE_LIMIT           32'h7fffffff
+
+
+//
+// End of common configuration options
+//
+
+`ifdef TRUE
+`else
+`define TRUE    1'b1
+`define FALSE   1'b0
+`define TRUE_N  1'b0
+`define FALSE_N 1'b1
+`endif
+
+// Wishbone configuration
+`define CFG_IWB_ENABLED
+`define CFG_DWB_ENABLED
+
+// Data-path width
+`define LM32_WORD_WIDTH                 32
+`define LM32_WORD_RNG                   (`LM32_WORD_WIDTH-1):0
+`define LM32_SHIFT_WIDTH                5
+`define LM32_SHIFT_RNG                  (`LM32_SHIFT_WIDTH-1):0
+`define LM32_BYTE_SELECT_WIDTH          4
+`define LM32_BYTE_SELECT_RNG            (`LM32_BYTE_SELECT_WIDTH-1):0
+
+// Register file size
+`define LM32_REGISTERS                  32
+`define LM32_REG_IDX_WIDTH              5
+`define LM32_REG_IDX_RNG                (`LM32_REG_IDX_WIDTH-1):0
+
+// Standard register numbers
+`define LM32_RA_REG                     `LM32_REG_IDX_WIDTH'd29
+`define LM32_EA_REG                     `LM32_REG_IDX_WIDTH'd30
+`define LM32_BA_REG                     `LM32_REG_IDX_WIDTH'd31
+
+// Range of Program Counter. Two LSBs are always 0. 
+// `ifdef CFG_ICACHE_ENABLED
+// `define LM32_PC_WIDTH                   (clogb2(`CFG_ICACHE_LIMIT-`CFG_ICACHE_BASE_ADDRESS)-2)
+// `else
+// `ifdef CFG_IWB_ENABLED
+`define LM32_PC_WIDTH                   (`LM32_WORD_WIDTH-2)
+// `else
+// `define LM32_PC_WIDTH                   `LM32_IROM_ADDRESS_WIDTH
+// `endif
+// `endif
+`define LM32_PC_RNG                     (`LM32_PC_WIDTH+2-1):2
+
+// Range of an instruction
+`define LM32_INSTRUCTION_WIDTH          32
+`define LM32_INSTRUCTION_RNG            (`LM32_INSTRUCTION_WIDTH-1):0
+
+// Adder operation
+`define LM32_ADDER_OP_ADD               1'b0
+`define LM32_ADDER_OP_SUBTRACT          1'b1
+
+// Shift direction
+`define LM32_SHIFT_OP_RIGHT             1'b0
+`define LM32_SHIFT_OP_LEFT              1'b1
+
+// Currently always enabled
+`define CFG_BUS_ERRORS_ENABLED
+
+// Derive macro that indicates whether we have single-stepping or not
+`ifdef CFG_ROM_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`else
+`ifdef CFG_HW_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`endif
+`endif
+
+// Derive macro that indicates whether JTAG interface is required
+`ifdef CFG_JTAG_UART_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`endif
+`endif
+
+// Derive macro that indicates whether we have a barrel-shifter or not
+`ifdef CFG_PL_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else // CFG_PL_BARREL_SHIFT_ENABLED
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else
+`define LM32_NO_BARREL_SHIFT
+`endif
+`endif // CFG_PL_BARREL_SHIFT_ENABLED
+
+// Derive macro that indicates whether we have a multiplier or not
+`ifdef CFG_PL_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`else
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`endif
+`endif
+
+// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
+`ifdef CFG_MC_DIVIDE_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+
+// Derive macro that indicates if we are using an EBR register file
+`ifdef CFG_EBR_POSEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+`ifdef CFG_EBR_NEGEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+
+// Revision number
+`define LM32_REVISION                   6'h02
+
+// Logical operations - Function encoded directly in instruction
+`define LM32_LOGIC_OP_RNG               3:0
+
+// Conditions for conditional branches
+`define LM32_CONDITION_WIDTH            3
+`define LM32_CONDITION_RNG              (`LM32_CONDITION_WIDTH-1):0
+`define LM32_CONDITION_E                3'b001
+`define LM32_CONDITION_G                3'b010
+`define LM32_CONDITION_GE               3'b011
+`define LM32_CONDITION_GEU              3'b100
+`define LM32_CONDITION_GU               3'b101
+`define LM32_CONDITION_NE               3'b111
+`define LM32_CONDITION_U1               3'b000
+`define LM32_CONDITION_U2               3'b110
+
+// Size of load or store instruction - Encoding corresponds to opcode
+`define LM32_SIZE_WIDTH                 2
+`define LM32_SIZE_RNG                   1:0
+`define LM32_SIZE_BYTE                  2'b00
+`define LM32_SIZE_HWORD                 2'b11
+`define LM32_SIZE_WORD                  2'b10
+`define LM32_ADDRESS_LSBS_WIDTH         2
+
+// Width and range of a CSR index
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_WIDTH                  5
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_WIDTH                  4
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`define LM32_CSR_WIDTH                  3
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`endif
+`endif
+
+// CSR indices
+`define LM32_CSR_IE                     `LM32_CSR_WIDTH'h0
+`define LM32_CSR_IM                     `LM32_CSR_WIDTH'h1
+`define LM32_CSR_IP                     `LM32_CSR_WIDTH'h2
+`define LM32_CSR_ICC                    `LM32_CSR_WIDTH'h3
+`define LM32_CSR_DCC                    `LM32_CSR_WIDTH'h4
+`define LM32_CSR_CC                     `LM32_CSR_WIDTH'h5
+`define LM32_CSR_CFG                    `LM32_CSR_WIDTH'h6
+`define LM32_CSR_EBA                    `LM32_CSR_WIDTH'h7
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_DC                     `LM32_CSR_WIDTH'h8
+`define LM32_CSR_DEBA                   `LM32_CSR_WIDTH'h9
+`endif
+`define LM32_CSR_CFG2                   `LM32_CSR_WIDTH'ha
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_JTX                    `LM32_CSR_WIDTH'he
+`define LM32_CSR_JRX                    `LM32_CSR_WIDTH'hf
+`endif
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_BP0                    `LM32_CSR_WIDTH'h10
+`define LM32_CSR_BP1                    `LM32_CSR_WIDTH'h11
+`define LM32_CSR_BP2                    `LM32_CSR_WIDTH'h12
+`define LM32_CSR_BP3                    `LM32_CSR_WIDTH'h13
+`define LM32_CSR_WP0                    `LM32_CSR_WIDTH'h18
+`define LM32_CSR_WP1                    `LM32_CSR_WIDTH'h19
+`define LM32_CSR_WP2                    `LM32_CSR_WIDTH'h1a
+`define LM32_CSR_WP3                    `LM32_CSR_WIDTH'h1b
+`endif 
+
+// Values for WPC CSR
+`define LM32_WPC_C_RNG                  1:0
+`define LM32_WPC_C_DISABLED             2'b00
+`define LM32_WPC_C_READ                 2'b01
+`define LM32_WPC_C_WRITE                2'b10
+`define LM32_WPC_C_READ_WRITE           2'b11
+
+// Exception IDs
+`define LM32_EID_WIDTH                  3
+`define LM32_EID_RNG                    (`LM32_EID_WIDTH-1):0
+`define LM32_EID_RESET                  3'h0
+`define LM32_EID_BREAKPOINT             3'd1
+`define LM32_EID_INST_BUS_ERROR         3'h2
+`define LM32_EID_WATCHPOINT             3'd3
+`define LM32_EID_DATA_BUS_ERROR         3'h4
+`define LM32_EID_DIVIDE_BY_ZERO         3'h5
+`define LM32_EID_INTERRUPT              3'h6
+`define LM32_EID_SCALL                  3'h7
+
+// Pipeline result selection mux controls
+
+`define LM32_D_RESULT_SEL_0_RNG          0:0
+`define LM32_D_RESULT_SEL_0_REG_0        1'b0
+`define LM32_D_RESULT_SEL_0_NEXT_PC      1'b1
+
+`define LM32_D_RESULT_SEL_1_RNG          1:0
+`define LM32_D_RESULT_SEL_1_ZERO         2'b00
+`define LM32_D_RESULT_SEL_1_REG_1        2'b01
+`define LM32_D_RESULT_SEL_1_IMMEDIATE    2'b10
+
+`define LM32_USER_OPCODE_WIDTH           11
+`define LM32_USER_OPCODE_RNG             (`LM32_USER_OPCODE_WIDTH-1):0
+
+// Derive a macro to indicate if either of the caches are implemented
+`ifdef CFG_ICACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`else
+`ifdef CFG_DCACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`endif
+`endif
+
+/////////////////////////////////////////////////////
+// Interrupts
+/////////////////////////////////////////////////////
+
+// Always enable interrupts
+`define CFG_INTERRUPTS_ENABLED
+
+// Currently this is fixed to 32 and should not be changed
+`define CFG_INTERRUPTS                  32
+`define LM32_INTERRUPT_WIDTH            `CFG_INTERRUPTS
+`define LM32_INTERRUPT_RNG              (`LM32_INTERRUPT_WIDTH-1):0
+
+/////////////////////////////////////////////////////
+// General
+/////////////////////////////////////////////////////
+
+// Sub-word range types
+`define LM32_BYTE_WIDTH                 8
+`define LM32_BYTE_RNG                   7:0
+`define LM32_HWORD_WIDTH                16
+`define LM32_HWORD_RNG                  15:0
+
+// Word sub-byte indicies
+`define LM32_BYTE_0_RNG                  7:0
+`define LM32_BYTE_1_RNG                  15:8
+`define LM32_BYTE_2_RNG                  23:16
+`define LM32_BYTE_3_RNG                  31:24
+
+// Word sub-halfword indices
+`define LM32_HWORD_0_RNG                 15:0
+`define LM32_HWORD_1_RNG                 31:16
+
+// Use a synchronous reset
+`define CFG_RESET_SENSITIVITY
+
+// V.T. Srce
+`define SRCE
+
+// Whether to include context registers for debug exceptions
+// in addition to standard exception handling registers
+// Bizarre - Removing this increases LUT count!
+`define CFG_DEBUG_EXCEPTIONS_ENABLED
+
+// Wishbone defines 
+// Refer to Wishbone System-on-Chip Interconnection Architecture
+// These should probably be moved to a Wishbone common file
+
+// Wishbone cycle types
+`define LM32_CTYPE_WIDTH                3
+`define LM32_CTYPE_RNG                  (`LM32_CTYPE_WIDTH-1):0
+`define LM32_CTYPE_CLASSIC              3'b000
+`define LM32_CTYPE_CONSTANT             3'b001
+`define LM32_CTYPE_INCREMENTING         3'b010
+`define LM32_CTYPE_END                  3'b111
+
+// Wishbone burst types
+`define LM32_BTYPE_WIDTH                2
+`define LM32_BTYPE_RNG                  (`LM32_BTYPE_WIDTH-1):0
+`define LM32_BTYPE_LINEAR               2'b00
+`define LM32_BTYPE_4_BEAT               2'b01
+`define LM32_BTYPE_8_BEAT               2'b10
+`define LM32_BTYPE_16_BEAT              2'b11
+
+`endif
diff --git a/boards/avnet-sp3aevl/rtl/setup.v b/boards/avnet-sp3aevl/rtl/setup.v
new file mode 100644 (file)
index 0000000..0718c2f
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+/*
+ * System clock frequency in Hz.
+ */
+`define CLOCK_FREQUENCY 64000000
+
+/*
+ * System clock period in ns (must be in sync with CLOCK_FREQUENCY).
+ */
+`define CLOCK_PERIOD 15.625
+
+/*
+ * Default baudrate for the debug UART.
+ */
+`define BAUD_RATE 115200
diff --git a/boards/avnet-sp3aevl/rtl/system.v b/boards/avnet-sp3aevl/rtl/system.v
new file mode 100644 (file)
index 0000000..e4e8131
--- /dev/null
@@ -0,0 +1,517 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module system(
+       input clkin,
+       input resetin,
+       
+       // Boot ROM
+       output [21:0] flash_adr,
+       input [7:0] flash_d,
+       output flash_byte_n,
+       output flash_oe_n,
+       output flash_we_n,
+       output flash_ce_n,
+       output flash_reset_n,
+
+       // UART
+       input uart_rxd,
+       output uart_txd,
+
+       // GPIO
+       input [2:0] btn,    // 3
+       output [3:0] led    //        2 (2 LEDs for UART activity)
+);
+
+//------------------------------------------------------------------
+// Clock and Reset Generation
+//------------------------------------------------------------------
+wire sys_clk;
+
+`ifndef SIMULATION
+DCM_SP #(
+       .CLKDV_DIVIDE(1.5), // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(1), // 1 to 32
+       .CLKFX_MULTIPLY(4), // 2 to 32
+
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(62.5),
+       .CLKOUT_PHASE_SHIFT("NONE"),
+       .CLK_FEEDBACK("NONE"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .FACTORY_JF(16'hF0F0),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("TRUE")
+) clkgen (
+       .CLK0(),
+       .CLK90(),
+       .CLK180(),
+       .CLK270(),
+
+       .CLK2X(),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(sys_clk),
+       .CLKFX180(),
+       .LOCKED(),
+       .CLKFB(),
+       .CLKIN(clkin),
+       .RST(1'b0)
+);
+`else
+assign sys_clk = clkin;
+`endif
+
+`ifndef SIMULATION
+/* Synchronize the reset input */
+reg rst0;
+reg rst1;
+always @(posedge sys_clk) rst0 <= resetin;
+always @(posedge sys_clk) rst1 <= rst0;
+
+/* Debounce it
+ * and generate power-on reset.
+ */
+reg [19:0] rst_debounce;
+reg sys_rst;
+initial rst_debounce <= 20'hFFFFF;
+initial sys_rst <= 1'b1;
+always @(posedge sys_clk) begin
+       if(rst1)
+               rst_debounce <= 20'hFFFFF;
+       else if(rst_debounce != 20'd0)
+               rst_debounce <= rst_debounce - 20'd1;
+       sys_rst <= rst_debounce != 20'd0;
+end
+
+/*
+ * We must release the Flash reset before the system reset
+ * because the Flash needs some time to come out of reset
+ * and the CPU begins fetching instructions from it
+ * as soon as the system reset is released.
+ * From datasheet, minimum reset pulse width is 100ns
+ * and reset-to-read time is 150ns.
+ */
+
+reg [7:0] flash_rstcounter;
+initial flash_rstcounter <= 8'd0;
+always @(posedge sys_clk) begin
+       if(~sys_rst)
+               flash_rstcounter <= 8'd0;
+       else if(~flash_rstcounter[7])
+               flash_rstcounter <= flash_rstcounter + 8'd1;
+end
+
+assign flash_reset_n = ~flash_rstcounter[7];
+
+`else
+wire sys_rst;
+assign sys_rst = resetin;
+`endif
+
+//------------------------------------------------------------------
+// Wishbone master wires
+//------------------------------------------------------------------
+wire [31:0]    cpuibus_adr,
+               cpudbus_adr;
+
+wire [2:0]     cpuibus_cti,
+               cpudbus_cti;
+
+wire [31:0]    cpuibus_dat_r,
+               cpudbus_dat_r,
+               cpudbus_dat_w;
+
+wire [3:0]     cpudbus_sel;
+
+wire           cpudbus_we;
+
+wire           cpuibus_cyc,
+               cpudbus_cyc;
+
+wire           cpuibus_stb,
+               cpudbus_stb;
+
+wire           cpuibus_ack,
+               cpudbus_ack;
+
+//------------------------------------------------------------------
+// Wishbone slave wires
+//------------------------------------------------------------------
+wire [31:0]    brg_adr,
+               norflash_adr,
+               bram_adr,
+               csrbrg_adr;
+
+wire [2:0]     brg_cti,
+               bram_cti;
+
+wire [31:0]    norflash_dat_r,
+               bram_dat_r,
+               bram_dat_w,
+               csrbrg_dat_r,
+               csrbrg_dat_w;
+
+wire [3:0]     bram_sel;
+
+wire           bram_we,
+               csrbrg_we,
+               aceusb_we;
+
+wire           norflash_cyc,
+               bram_cyc,
+               csrbrg_cyc;
+
+wire           norflash_stb,
+               bram_stb,
+               csrbrg_stb;
+
+wire           norflash_ack,
+               bram_ack,
+               csrbrg_ack;
+
+//---------------------------------------------------------------------------
+// Wishbone switch
+//---------------------------------------------------------------------------
+conbus #(
+       .s_addr_w(3),
+       .s0_addr(3'b000),       // norflash     0x00000000
+       .s1_addr(3'b001),       // bram         0x20000000
+       .s2_addr(3'b010),       // free         0x40000000
+       .s3_addr(3'b100),       // CSR bridge   0x80000000
+       .s4_addr(3'b101)        // free         0xa0000000
+) conbus (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       // Master 0
+       .m0_dat_i(32'hx),
+       .m0_dat_o(cpuibus_dat_r),
+       .m0_adr_i(cpuibus_adr),
+       .m0_cti_i(cpuibus_cti),
+       .m0_we_i(1'b0),
+       .m0_sel_i(4'hf),
+       .m0_cyc_i(cpuibus_cyc),
+       .m0_stb_i(cpuibus_stb),
+       .m0_ack_o(cpuibus_ack),
+       // Master 1
+       .m1_dat_i(cpudbus_dat_w),
+       .m1_dat_o(cpudbus_dat_r),
+       .m1_adr_i(cpudbus_adr),
+       .m1_cti_i(cpudbus_cti),
+       .m1_we_i(cpudbus_we),
+       .m1_sel_i(cpudbus_sel),
+       .m1_cyc_i(cpudbus_cyc),
+       .m1_stb_i(cpudbus_stb),
+       .m1_ack_o(cpudbus_ack),
+       // Master 2
+       .m2_dat_i(32'bx),
+       .m2_dat_o(),
+       .m2_adr_i(32'bx),
+       .m2_cti_i(3'bx),
+       .m2_we_i(1'bx),
+       .m2_sel_i(4'bx),
+       .m2_cyc_i(1'b0),
+       .m2_stb_i(1'b0),
+       .m2_ack_o(),
+       // Master 3
+       .m3_dat_i(32'bx),
+       .m3_dat_o(),
+       .m3_adr_i(32'bx),
+       .m3_cti_i(3'bx),
+       .m3_we_i(1'bx),
+       .m3_sel_i(4'bx),
+       .m3_cyc_i(1'b0),
+       .m3_stb_i(1'b0),
+       .m3_ack_o(),
+       // Master 4
+       .m4_dat_i(32'bx),
+       .m4_dat_o(),
+       .m4_adr_i(32'bx),
+       .m4_cti_i(3'bx),
+       .m4_we_i(1'bx),
+       .m4_sel_i(4'bx),
+       .m4_cyc_i(1'b0),
+       .m4_stb_i(1'b0),
+       .m4_ack_o(),
+
+       // Slave 0
+       .s0_dat_i(norflash_dat_r),
+       .s0_adr_o(norflash_adr),
+       .s0_cyc_o(norflash_cyc),
+       .s0_stb_o(norflash_stb),
+       .s0_ack_i(norflash_ack),
+       // Slave 1
+       .s1_dat_i(bram_dat_r),
+       .s1_dat_o(bram_dat_w),
+       .s1_adr_o(bram_adr),
+       .s1_cti_o(bram_cti),
+       .s1_sel_o(bram_sel),
+       .s1_we_o(bram_we),
+       .s1_cyc_o(bram_cyc),
+       .s1_stb_o(bram_stb),
+       .s1_ack_i(bram_ack),
+       // Slave 2
+       .s2_dat_i(32'bx),
+       .s2_dat_o(),
+       .s2_adr_o(),
+       .s2_cti_o(),
+       .s2_sel_o(),
+       .s2_we_o(),
+       .s2_cyc_o(),
+       .s2_stb_o(),
+       .s2_ack_i(1'b0),
+       // Slave 3
+       .s3_dat_i(csrbrg_dat_r),
+       .s3_dat_o(csrbrg_dat_w),
+       .s3_adr_o(csrbrg_adr),
+       .s3_we_o(csrbrg_we),
+       .s3_cyc_o(csrbrg_cyc),
+       .s3_stb_o(csrbrg_stb),
+       .s3_ack_i(csrbrg_ack),
+       // Slave 4
+       .s4_dat_i(32'bx),
+       .s4_dat_o(),
+       .s4_adr_o(),
+       .s4_we_o(),
+       .s4_cyc_o(),
+       .s4_stb_o(),
+       .s4_ack_i(1'b0)
+);
+
+//------------------------------------------------------------------
+// CSR bus
+//------------------------------------------------------------------
+wire [13:0]    csr_a;
+wire           csr_we;
+wire [31:0]    csr_dw;
+wire [31:0]    csr_dr_uart,
+               csr_dr_sysctl;
+
+//---------------------------------------------------------------------------
+// WISHBONE to CSR bridge
+//---------------------------------------------------------------------------
+csrbrg csrbrg(
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .wb_adr_i(csrbrg_adr),
+       .wb_dat_i(csrbrg_dat_w),
+       .wb_dat_o(csrbrg_dat_r),
+       .wb_cyc_i(csrbrg_cyc),
+       .wb_stb_i(csrbrg_stb),
+       .wb_we_i(csrbrg_we),
+       .wb_ack_o(csrbrg_ack),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_do(csr_dw),
+       /* combine all slave->master data lines with an OR */
+       .csr_di(
+                csr_dr_uart
+               |csr_dr_sysctl
+       )
+);
+
+
+//---------------------------------------------------------------------------
+// Interrupts
+//---------------------------------------------------------------------------
+wire gpio_irq;
+wire timer0_irq;
+wire timer1_irq;
+wire uartrx_irq;
+wire uarttx_irq;
+
+wire [31:0] cpu_interrupt_n;
+assign cpu_interrupt_n = {{27{1'b1}},
+       ~uarttx_irq,
+       ~uartrx_irq,
+       ~timer1_irq,
+       ~timer0_irq,
+       ~gpio_irq
+};
+
+//---------------------------------------------------------------------------
+// LM32 CPU
+//---------------------------------------------------------------------------
+lm32_top cpu(
+       .clk_i(sys_clk),
+       .rst_i(sys_rst),
+       .interrupt_n(cpu_interrupt_n),
+
+       .I_ADR_O(cpuibus_adr),
+       .I_DAT_I(cpuibus_dat_r),
+       .I_DAT_O(),
+       .I_SEL_O(),
+       .I_CYC_O(cpuibus_cyc),
+       .I_STB_O(cpuibus_stb),
+       .I_ACK_I(cpuibus_ack),
+       .I_WE_O(),
+       .I_CTI_O(cpuibus_cti),
+       .I_LOCK_O(),
+       .I_BTE_O(),
+       .I_ERR_I(1'b0),
+       .I_RTY_I(1'b0),
+
+       .D_ADR_O(cpudbus_adr),
+       .D_DAT_I(cpudbus_dat_r),
+       .D_DAT_O(cpudbus_dat_w),
+       .D_SEL_O(cpudbus_sel),
+       .D_CYC_O(cpudbus_cyc),
+       .D_STB_O(cpudbus_stb),
+       .D_ACK_I(cpudbus_ack),
+       .D_WE_O (cpudbus_we),
+       .D_CTI_O(cpudbus_cti),
+       .D_LOCK_O(),
+       .D_BTE_O(),
+       .D_ERR_I(1'b0),
+       .D_RTY_I(1'b0)
+);
+
+//---------------------------------------------------------------------------
+// Boot ROM
+//---------------------------------------------------------------------------
+norflash8 #(
+       .adr_width(22)
+) norflash (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .wb_adr_i(norflash_adr),
+       .wb_dat_o(norflash_dat_r),
+       .wb_stb_i(norflash_stb),
+       .wb_cyc_i(norflash_cyc),
+       .wb_ack_o(norflash_ack),
+       
+       .flash_adr(flash_adr),
+       .flash_d(flash_d)
+);
+
+assign flash_byte_n = 1'b0;
+assign flash_oe_n = 1'b0;
+assign flash_we_n = 1'b1;
+assign flash_ce_n = 1'b0;
+
+//---------------------------------------------------------------------------
+// BRAM
+//---------------------------------------------------------------------------
+//
+// On this board, we have 16k of SRAM instead of 4k
+// so that we have space for loading some programs.
+//
+bram #(
+       .adr_width(14)
+) bram (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .wb_adr_i(bram_adr),
+       .wb_dat_o(bram_dat_r),
+       .wb_dat_i(bram_dat_w),
+       .wb_sel_i(bram_sel),
+       .wb_stb_i(bram_stb),
+       .wb_cyc_i(bram_cyc),
+       .wb_ack_o(bram_ack),
+       .wb_we_i(bram_we)
+);
+
+//---------------------------------------------------------------------------
+// UART
+//---------------------------------------------------------------------------
+uart #(
+       .csr_addr(4'h0),
+       .clk_freq(`CLOCK_FREQUENCY),
+       .baud(`BAUD_RATE)
+) uart (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_uart),
+       
+       .rx_irq(uartrx_irq),
+       .tx_irq(uarttx_irq),
+       
+       .uart_rxd(uart_rxd),
+       .uart_txd(uart_txd)
+);
+
+/* LED0 and LED1 are used as TX/RX indicators.
+ * Generate long pulses so we have time to see them
+ */
+reg [18:0] rxcounter;
+reg rxled;
+always @(posedge sys_clk) begin
+       if(~uart_rxd)
+               rxcounter <= {19{1'b1}};
+       else if(rxcounter != 19'd0)
+               rxcounter <= rxcounter - 19'd1;
+       rxled <= rxcounter != 19'd0;
+end
+
+reg [18:0] txcounter;
+reg txled;
+always @(posedge sys_clk) begin
+       if(~uart_txd)
+               txcounter <= {19{1'b1}};
+       else if(txcounter != 19'd0)
+               txcounter <= txcounter - 19'd1;
+       txled <= txcounter != 19'd0;
+end
+
+assign led[0] = txled;
+assign led[1] = rxled;
+
+//---------------------------------------------------------------------------
+// System Controller
+//---------------------------------------------------------------------------
+wire [13:0] gpio_outputs;
+
+sysctl #(
+       .csr_addr(4'h1),
+       .ninputs(3),
+       .noutputs(2),
+       .systemid(32'h53334145) /* S3AE */
+) sysctl (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .gpio_irq(gpio_irq),
+       .timer0_irq(timer0_irq),
+       .timer1_irq(timer1_irq),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_sysctl),
+
+       .gpio_inputs(btn),
+       .gpio_outputs(led[3:2]) /* LED0 and LED1 are used as TX/RX indicators */
+);
+
+endmodule
diff --git a/boards/avnet-sp3aevl/sources.mak b/boards/avnet-sp3aevl/sources.mak
new file mode 100644 (file)
index 0000000..797628a
--- /dev/null
@@ -0,0 +1,26 @@
+BOARD_SRC=$(wildcard $(BOARD_DIR)/*.v)
+
+CONBUS_SRC=$(wildcard $(CORES_DIR)/conbus/rtl/*.v)
+LM32_SRC=                                              \
+       $(CORES_DIR)/lm32/rtl/lm32_cpu.v                \
+       $(CORES_DIR)/lm32/rtl/lm32_instruction_unit.v   \
+       $(CORES_DIR)/lm32/rtl/lm32_decoder.v            \
+       $(CORES_DIR)/lm32/rtl/lm32_load_store_unit.v    \
+       $(CORES_DIR)/lm32/rtl/lm32_adder.v              \
+       $(CORES_DIR)/lm32/rtl/lm32_addsub.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_logic_op.v           \
+       $(CORES_DIR)/lm32/rtl/lm32_shifter.v            \
+       $(CORES_DIR)/lm32/rtl/lm32_multiplier.v         \
+       $(CORES_DIR)/lm32/rtl/lm32_mc_arithmetic.v      \
+       $(CORES_DIR)/lm32/rtl/lm32_interrupt.v          \
+       $(CORES_DIR)/lm32/rtl/lm32_ram.v                \
+       $(CORES_DIR)/lm32/rtl/lm32_icache.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_dcache.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_top.v
+CSRBRG_SRC=$(wildcard $(CORES_DIR)/csrbrg/rtl/*.v)
+NORFLASH_SRC=$(wildcard $(CORES_DIR)/norflash8/rtl/*.v)
+BRAM_SRC=$(wildcard $(CORES_DIR)/bram/rtl/*.v)
+UART_SRC=$(wildcard $(CORES_DIR)/uart/rtl/*.v)
+SYSCTL_SRC=$(wildcard $(CORES_DIR)/sysctl/rtl/*.v)
+
+CORES_SRC=$(CONBUS_SRC) $(LM32_SRC) $(CSRBRG_SRC) $(NORFLASH_SRC) $(BRAM_SRC) $(UART_SRC) $(SYSCTL_SRC)
diff --git a/boards/avnet-sp3aevl/synthesis/Makefile.xst b/boards/avnet-sp3aevl/synthesis/Makefile.xst
new file mode 100644 (file)
index 0000000..460182c
--- /dev/null
@@ -0,0 +1,25 @@
+BOARD_DIR=../rtl
+CORES_DIR=../../../cores
+
+include ../sources.mak
+SRC=$(BOARD_SRC) $(CORES_SRC)
+
+all: build/system.bit
+
+build/system.ucf: common.ucf xst.ucf
+       cat common.ucf xst.ucf > build/system.ucf
+
+build/system.prj: $(SRC)
+       rm -f build/system.prj
+       for i in `echo $^`; do \
+           echo "verilog work ../$$i" >> build/system.prj; \
+       done
+
+build/system.ngc: build/system.prj
+       cd build && xst -ifn ../system.xst
+
+build/system.ngd: build/system.ngc build/system.ucf
+       cd build && ngdbuild -uc system.ucf system.ngc
+
+include common.mak
+
diff --git a/boards/avnet-sp3aevl/synthesis/common.mak b/boards/avnet-sp3aevl/synthesis/common.mak
new file mode 100644 (file)
index 0000000..7f54417
--- /dev/null
@@ -0,0 +1,29 @@
+prom: build/system.mcs
+
+timing: build/system-routed.twr
+
+usage: build/system-routed.xdl
+       ../../../tools/xdlanalyze.pl build/system-routed.xdl 0
+
+load: build/system.bit
+       cd build && impact -batch ../load.cmd
+
+build/system.ncd: build/system.ngd
+       cd build && map system.ngd
+
+build/system-routed.ncd: build/system.ncd
+       cd build && par -ol high -xe n -w system.ncd system-routed.ncd
+
+build/system.bit: build/system-routed.ncd
+       cd build && bitgen -w system-routed.ncd system.bit
+
+build/system-routed.xdl: build/system-routed.ncd
+       cd build && xdl -ncd2xdl system-routed.ncd system-routed.xdl
+
+build/system-routed.twr: build/system-routed.ncd
+       cd build && trce -v 10 system-routed.ncd system.pcf
+
+clean:
+       rm -rf build/*
+
+.PHONY: prom timing usage load clean
diff --git a/boards/avnet-sp3aevl/synthesis/common.ucf b/boards/avnet-sp3aevl/synthesis/common.ucf
new file mode 100644 (file)
index 0000000..60f9568
--- /dev/null
@@ -0,0 +1,69 @@
+CONFIG VCCAUX = "3.3";
+
+# ==== Clock input ====
+NET "clkin" TNM_NET = CLK_16MHZ;
+TIMESPEC TS_CLK_16MHZ = PERIOD CLK_16MHZ 62.50 ns;
+
+NET "clkin" LOC = C10 | IOSTANDARD = LVCMOS33;
+
+# ==== Reset button ====
+NET "resetin" LOC = H4 | IOSTANDARD = LVCMOS33;
+
+# ==== Linear Flash ====
+NET "flash_adr(0)" LOC = P16 | IOSTANDARD = LVCMOS33; # also D15
+NET "flash_adr(1)" LOC = N16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(2)" LOC = L13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(3)" LOC = K13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(4)" LOC = M15 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(5)" LOC = M16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(6)" LOC = L14 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(7)" LOC = L16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(8)" LOC = J12 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(9)" LOC = J13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(10)" LOC = G16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(11)" LOC = F16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(12)" LOC = H13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(13)" LOC = G14 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(14)" LOC = E16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(15)" LOC = F15 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(16)" LOC = G13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(17)" LOC = F14 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(18)" LOC = E14 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(19)" LOC = F13 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(20)" LOC = D16 | IOSTANDARD = LVCMOS33;
+NET "flash_adr(21)" LOC = D15 | IOSTANDARD = LVCMOS33;
+NET "flash_d(0)" LOC = T14 | IOSTANDARD = LVCMOS33;
+NET "flash_d(1)" LOC = R13 | IOSTANDARD = LVCMOS33;
+NET "flash_d(2)" LOC = T13 | IOSTANDARD = LVCMOS33;
+NET "flash_d(3)" LOC = P12 | IOSTANDARD = LVCMOS33;
+NET "flash_d(4)" LOC = N8 | IOSTANDARD = LVCMOS33;
+NET "flash_d(5)" LOC = P7 | IOSTANDARD = LVCMOS33;
+NET "flash_d(6)" LOC = T6 | IOSTANDARD = LVCMOS33;
+NET "flash_d(7)" LOC = T5 | IOSTANDARD = LVCMOS33;
+NET "flash_byte_n" LOC = N14 | IOSTANDARD = LVCMOS33;
+NET "flash_oe_n" LOC = R15 | IOSTANDARD = LVCMOS33;
+NET "flash_we_n" LOC = N13 | IOSTANDARD = LVCMOS33;
+NET "flash_ce_n" LOC = P15 | IOSTANDARD = LVCMOS33;
+NET "flash_reset_n" LOC = T10 | IOSTANDARD = LVCMOS33;
+
+# ==== UART ====
+NET "uart_txd" LOC = B3 | IOSTANDARD = LVCMOS33;
+NET "uart_rxd" LOC = A3 | IOSTANDARD = LVCMOS33;
+
+# ==== Push buttons ====
+NET "btn(0)" LOC = K3 | IOSTANDARD = LVCMOS33;
+NET "btn(1)" LOC = H5 | IOSTANDARD = LVCMOS33;
+NET "btn(2)" LOC = L3 | IOSTANDARD = LVCMOS33;
+
+# ==== LEDs ====
+NET "led(0)" LOC = D14 | IOSTANDARD = LVCMOS33;
+NET "led(1)" LOC = C16 | IOSTANDARD = LVCMOS33;
+NET "led(2)" LOC = C15 | IOSTANDARD = LVCMOS33;
+NET "led(3)" LOC = B15 | IOSTANDARD = LVCMOS33;
+
+# ==== Prohibit Special Pins ====
+CONFIG PROHIBIT = T12;  # FPGA_INIT_B
+CONFIG PROHIBIT = D5;   # FPGA_PUDC
+CONFIG PROHIBIT = P4;   # PSOC_FPGA_M0
+CONFIG PROHIBIT = N4;   # PSOC_FPGA_M1
+CONFIG PROHIBIT = R2;   # PSOC_FPGA_M2
diff --git a/boards/avnet-sp3aevl/synthesis/load.cmd b/boards/avnet-sp3aevl/synthesis/load.cmd
new file mode 100644 (file)
index 0000000..52de4fc
--- /dev/null
@@ -0,0 +1,6 @@
+setMode -bscan
+setCable -p auto
+identify
+assignfile -p 1 -file system.bit
+program -p 1
+quit
diff --git a/boards/avnet-sp3aevl/synthesis/system.xst b/boards/avnet-sp3aevl/synthesis/system.xst
new file mode 100644 (file)
index 0000000..19f8bea
--- /dev/null
@@ -0,0 +1,9 @@
+run
+-ifn system.prj
+-top system
+-ifmt MIXED
+-opt_mode AREA
+-opt_level 2
+-ofn system.ngc
+-p xc3s400a-ft256-4
+-register_balancing yes
diff --git a/boards/avnet-sp3aevl/synthesis/xst.ucf b/boards/avnet-sp3aevl/synthesis/xst.ucf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/boards/avnet-sp3aevl/test/Makefile b/boards/avnet-sp3aevl/test/Makefile
new file mode 100644 (file)
index 0000000..80d2742
--- /dev/null
@@ -0,0 +1,28 @@
+TOPDIR?=$(shell pwd)
+BOARD_DIR=$(TOPDIR)/../rtl
+CORES_DIR=$(TOPDIR)/../../../cores
+
+include ../sources.mak
+
+SIM_SRC=$(TOPDIR)/system_tb.v $(CORES_DIR)/hpdmc_ddr32/test/iddr.v $(CORES_DIR)/hpdmc_ddr32/test/oddr.v $(CORES_DIR)/hpdmc_ddr32/test/idelay.v
+
+SRC=$(SIM_SRC) $(BOARD_SRC) $(CORES_SRC)
+
+all: isim
+
+cversim: $(SRC) bios.rom
+       cver +define+SIMULATION +incdir+$(BOARD_DIR) +incdir+$(CORES_DIR)/lm32/rtl $(SRC)
+
+isim: system bios.rom
+       ./system
+
+system: $(SRC)
+       iverilog -D SIMULATION -I $(BOARD_DIR) -I $(CORES_DIR)/lm32/rtl -o system $(SRC)
+
+bios.rom: ../../../software/bios/bios.bin
+       ../../../tools/bin2hex ../../../software/bios/bios.bin bios.rom 32768
+
+clean:
+       rm -f verilog.log bios.rom system
+
+.PHONY: clean cversim isim
diff --git a/boards/avnet-sp3aevl/test/system_tb.v b/boards/avnet-sp3aevl/test/system_tb.v
new file mode 100644 (file)
index 0000000..4ab16ef
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`timescale 1ns/1ps
+
+module system_tb();
+
+reg sys_clk;
+reg resetin;
+
+initial sys_clk = 1'b0;
+always #5 sys_clk = ~sys_clk;
+
+initial begin
+       resetin = 1'b1;
+       #200 resetin = 1'b0;
+end
+
+wire [21:0] flash_adr;
+reg [31:0] flash_d;
+reg [7:0] flash_d8;
+reg [31:0] flash[0:32767];
+initial $readmemh("bios.rom", flash);
+always @(flash_adr) begin
+       #110;
+       flash_d = flash[flash_adr[21:2]];
+       case(flash_adr[1:0])
+               2'b00: flash_d8 = flash_d[31:24];
+               2'b01: flash_d8 = flash_d[23:16];
+               2'b10: flash_d8 = flash_d[15:8];
+               2'b11: flash_d8 = flash_d[7:0];
+       endcase
+end
+
+system system(
+       .clkin(sys_clk),
+       .resetin(resetin),
+
+       .flash_adr(flash_adr),
+       .flash_d(flash_d8),
+
+       .uart_rxd(),
+       .uart_txd()
+);
+
+endmodule
diff --git a/boards/milkymist-one/rtl/ddram.v b/boards/milkymist-one/rtl/ddram.v
new file mode 100644 (file)
index 0000000..f86becb
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module ddram #(
+       parameter csr_addr = 4'h0
+) (
+       input sys_clk,
+       input sys_clk_n,
+       input sys_rst,
+       
+       /* Configuration interface */
+       input [13:0] csr_a,
+       input csr_we,
+       input [31:0] csr_di,
+       output [31:0] csr_do,
+       
+       /* FML 4x64 interface */
+       input [`SDRAM_DEPTH-1:0] fml_adr,
+       input fml_stb,
+       input fml_we,
+       output fml_ack,
+       input [7:0] fml_sel,
+       input [63:0] fml_di,
+       output [63:0] fml_do,
+       
+       /* DDRAM pads */
+       output sdram_clk_p,
+       output sdram_clk_n,
+       output sdram_cke,
+       output sdram_cs_n,
+       output sdram_we_n,
+       output sdram_cas_n,
+       output sdram_ras_n,
+       output [12:0] sdram_adr,
+       output [1:0] sdram_ba,
+       output [3:0] sdram_dqm,
+       inout [31:0] sdram_dq,
+       inout [3:0] sdram_dqs
+);
+
+`ifndef SIMULATION
+wire dqs_clk_dcm;
+wire dqs_clk_n_dcm;
+wire dqs_clk;
+wire dqs_clk_n;
+wire locked1 = 1'b1;
+
+ODDR2 #(
+       .DDR_ALIGNMENT("NONE"),
+       .INIT(1'b0),
+       .SRTYPE("SYNC")
+) clock_forward_p (
+       .Q(sdram_clk_p),
+       .C0(sys_clk),
+       .C1(sys_clk_n),
+       .CE(1'b1),
+       .D0(1'b1),
+       .D1(1'b0),
+       .R(1'b0),
+       .S(1'b0)
+);
+
+ODDR2 #(
+       .DDR_ALIGNMENT("NONE"),
+       .INIT(1'b0),
+       .SRTYPE("SYNC")
+) clock_forward_n (
+       .Q(sdram_clk_n),
+       .C0(sys_clk),
+       .C1(sys_clk_n),
+       .CE(1'b1),
+       .D0(1'b0),
+       .D1(1'b1),
+       .R(1'b0),
+       .S(1'b0)
+);
+
+wire psen;
+wire psincdec;
+wire psdone;
+wire locked2;
+DCM_SP #(
+       .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(3),               // 1 to 32
+       .CLKFX_MULTIPLY(2),             // 2 to 32
+       
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKOUT_PHASE_SHIFT("VARIABLE"),
+       .CLK_FEEDBACK("1X"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("FALSE")
+) clkgen_dqs (
+       .CLK0(dqs_clk_dcm),
+       .CLK90(),
+       .CLK180(dqs_clk_n_dcm),
+       .CLK270(),
+
+       .CLK2X(),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(),
+       .CLKFX180(),
+       .LOCKED(locked2),
+       .CLKFB(dqs_clk),
+       .CLKIN(sys_clk),
+       .RST(sys_rst),
+       
+       .PSEN(psen),
+       .PSINCDEC(psincdec),
+       .PSDONE(psdone),
+       .PSCLK(sys_clk)
+);
+AUTOBUF b1(
+       .I(dqs_clk_dcm),
+       .O(dqs_clk)
+);
+AUTOBUF b2(
+       .I(dqs_clk_n_dcm),
+       .O(dqs_clk_n)
+);
+`else
+reg dqs_clk;
+wire dqs_clk_n;
+assign sdram_clk_p = sys_clk;
+assign sdram_clk_n = ~sys_clk;
+always @(sys_clk) #2.5 dqs_clk <= sys_clk;
+assign dqs_clk_n = ~dqs_clk;
+wire locked1 = 1'b1;
+wire locked2 = 1'b1;
+`endif
+
+hpdmc #(
+       .csr_addr(csr_addr),
+       .sdram_depth(`SDRAM_DEPTH),
+       .sdram_columndepth(`SDRAM_COLUMNDEPTH)
+) hpdmc (
+       .sys_clk(sys_clk),
+       .sys_clk_n(sys_clk_n),
+       .dqs_clk(dqs_clk),
+       .dqs_clk_n(dqs_clk_n),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_di),
+       .csr_do(csr_do),
+       
+       .fml_adr(fml_adr),
+       .fml_stb(fml_stb),
+       .fml_we(fml_we),
+       .fml_ack(fml_ack),
+       .fml_sel(fml_sel),
+       .fml_di(fml_di),
+       .fml_do(fml_do),
+       
+       .sdram_cke(sdram_cke),
+       .sdram_cs_n(sdram_cs_n),
+       .sdram_we_n(sdram_we_n),
+       .sdram_cas_n(sdram_cas_n),
+       .sdram_ras_n(sdram_ras_n),
+       .sdram_dqm(sdram_dqm),
+       .sdram_adr(sdram_adr),
+       .sdram_ba(sdram_ba),
+       .sdram_dq(sdram_dq),
+       .sdram_dqs(sdram_dqs),
+       
+       .dqs_psen(psen),
+       .dqs_psincdec(psincdec),
+       .dqs_psdone(psdone),
+
+       .pll_stat({locked2, locked1})
+);
+
+endmodule
diff --git a/boards/milkymist-one/rtl/lm32_include.v b/boards/milkymist-one/rtl/lm32_include.v
new file mode 100644 (file)
index 0000000..4c20e9a
--- /dev/null
@@ -0,0 +1,359 @@
+// =============================================================================
+//                           COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation        TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court                            408-826-6000 (other locations)
+// Hillsboro, OR 97124                     web  : http://www.latticesemi.com/
+// U.S.A                                   email: techsupport@latticesemi.com
+// =============================================================================/
+//                         FILE DETAILS
+// Project          : LatticeMico32
+// File             : lm32_include.v
+// Title            : CPU global macros
+// Version          : 6.1.17
+//                  : Initial Release
+// Version          : 7.0SP2, 3.0
+//                  : No Change
+// Version          : 3.1
+//                  : No Change
+// Version          : 3.2
+//                  : No Change
+// Version          : 3.3
+//                  : Support for extended configuration register
+// =============================================================================
+
+`ifdef LM32_INCLUDE_V
+`else
+`define LM32_INCLUDE_V
+
+//
+// Common configuration options
+//
+
+`define CFG_EBA_RESET 32'h0
+`define CFG_DEBA_RESET 32'h0
+
+`define CFG_PL_MULTIPLY_ENABLED
+`define CFG_PL_BARREL_SHIFT_ENABLED
+`define CFG_SIGN_EXTEND_ENABLED
+`define CFG_MC_DIVIDE_ENABLED
+
+// Bug in Mico32/Xst ?
+// CFG_ICACHE_ASSOCIATIVITY=2 => works fine
+// CFG_ICACHE_ASSOCIATIVITY=1 => disaster
+// TODO: try with the expensive synthesizers
+`define CFG_ICACHE_ENABLED
+`define CFG_ICACHE_ASSOCIATIVITY   2
+`define CFG_ICACHE_SETS            512
+`define CFG_ICACHE_BYTES_PER_LINE  16
+`define CFG_ICACHE_BASE_ADDRESS    32'h0
+`define CFG_ICACHE_LIMIT           32'h7fffffff
+
+`define CFG_DCACHE_ENABLED
+`define CFG_DCACHE_ASSOCIATIVITY   2
+`define CFG_DCACHE_SETS            512
+`define CFG_DCACHE_BYTES_PER_LINE  16
+`define CFG_DCACHE_BASE_ADDRESS    32'h0
+`define CFG_DCACHE_LIMIT           32'h7fffffff
+
+//
+// End of common configuration options
+//
+
+`ifdef TRUE
+`else
+`define TRUE    1'b1
+`define FALSE   1'b0
+`define TRUE_N  1'b0
+`define FALSE_N 1'b1
+`endif
+
+// Wishbone configuration
+`define CFG_IWB_ENABLED
+`define CFG_DWB_ENABLED
+
+// Data-path width
+`define LM32_WORD_WIDTH                 32
+`define LM32_WORD_RNG                   (`LM32_WORD_WIDTH-1):0
+`define LM32_SHIFT_WIDTH                5
+`define LM32_SHIFT_RNG                  (`LM32_SHIFT_WIDTH-1):0
+`define LM32_BYTE_SELECT_WIDTH          4
+`define LM32_BYTE_SELECT_RNG            (`LM32_BYTE_SELECT_WIDTH-1):0
+
+// Register file size
+`define LM32_REGISTERS                  32
+`define LM32_REG_IDX_WIDTH              5
+`define LM32_REG_IDX_RNG                (`LM32_REG_IDX_WIDTH-1):0
+
+// Standard register numbers
+`define LM32_RA_REG                     `LM32_REG_IDX_WIDTH'd29
+`define LM32_EA_REG                     `LM32_REG_IDX_WIDTH'd30
+`define LM32_BA_REG                     `LM32_REG_IDX_WIDTH'd31
+
+// Range of Program Counter. Two LSBs are always 0. 
+// `ifdef CFG_ICACHE_ENABLED
+// `define LM32_PC_WIDTH                   (clogb2(`CFG_ICACHE_LIMIT-`CFG_ICACHE_BASE_ADDRESS)-2)
+// `else
+// `ifdef CFG_IWB_ENABLED
+`define LM32_PC_WIDTH                   (`LM32_WORD_WIDTH-2)
+// `else
+// `define LM32_PC_WIDTH                   `LM32_IROM_ADDRESS_WIDTH
+// `endif
+// `endif
+`define LM32_PC_RNG                     (`LM32_PC_WIDTH+2-1):2
+
+// Range of an instruction
+`define LM32_INSTRUCTION_WIDTH          32
+`define LM32_INSTRUCTION_RNG            (`LM32_INSTRUCTION_WIDTH-1):0
+
+// Adder operation
+`define LM32_ADDER_OP_ADD               1'b0
+`define LM32_ADDER_OP_SUBTRACT          1'b1
+
+// Shift direction
+`define LM32_SHIFT_OP_RIGHT             1'b0
+`define LM32_SHIFT_OP_LEFT              1'b1
+
+// Currently always enabled
+`define CFG_BUS_ERRORS_ENABLED
+
+// Derive macro that indicates whether we have single-stepping or not
+`ifdef CFG_ROM_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`else
+`ifdef CFG_HW_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`endif
+`endif
+
+// Derive macro that indicates whether JTAG interface is required
+`ifdef CFG_JTAG_UART_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`endif
+`endif
+
+// Derive macro that indicates whether we have a barrel-shifter or not
+`ifdef CFG_PL_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else // CFG_PL_BARREL_SHIFT_ENABLED
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else
+`define LM32_NO_BARREL_SHIFT
+`endif
+`endif // CFG_PL_BARREL_SHIFT_ENABLED
+
+// Derive macro that indicates whether we have a multiplier or not
+`ifdef CFG_PL_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`else
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`endif
+`endif
+
+// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
+`ifdef CFG_MC_DIVIDE_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+
+// Derive macro that indicates if we are using an EBR register file
+`ifdef CFG_EBR_POSEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+`ifdef CFG_EBR_NEGEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+
+// Revision number
+`define LM32_REVISION                   6'h02
+
+// Logical operations - Function encoded directly in instruction
+`define LM32_LOGIC_OP_RNG               3:0
+
+// Conditions for conditional branches
+`define LM32_CONDITION_WIDTH            3
+`define LM32_CONDITION_RNG              (`LM32_CONDITION_WIDTH-1):0
+`define LM32_CONDITION_E                3'b001
+`define LM32_CONDITION_G                3'b010
+`define LM32_CONDITION_GE               3'b011
+`define LM32_CONDITION_GEU              3'b100
+`define LM32_CONDITION_GU               3'b101
+`define LM32_CONDITION_NE               3'b111
+`define LM32_CONDITION_U1               3'b000
+`define LM32_CONDITION_U2               3'b110
+
+// Size of load or store instruction - Encoding corresponds to opcode
+`define LM32_SIZE_WIDTH                 2
+`define LM32_SIZE_RNG                   1:0
+`define LM32_SIZE_BYTE                  2'b00
+`define LM32_SIZE_HWORD                 2'b11
+`define LM32_SIZE_WORD                  2'b10
+`define LM32_ADDRESS_LSBS_WIDTH         2
+
+// Width and range of a CSR index
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_WIDTH                  5
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_WIDTH                  4
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`define LM32_CSR_WIDTH                  3
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`endif
+`endif
+
+// CSR indices
+`define LM32_CSR_IE                     `LM32_CSR_WIDTH'h0
+`define LM32_CSR_IM                     `LM32_CSR_WIDTH'h1
+`define LM32_CSR_IP                     `LM32_CSR_WIDTH'h2
+`define LM32_CSR_ICC                    `LM32_CSR_WIDTH'h3
+`define LM32_CSR_DCC                    `LM32_CSR_WIDTH'h4
+`define LM32_CSR_CC                     `LM32_CSR_WIDTH'h5
+`define LM32_CSR_CFG                    `LM32_CSR_WIDTH'h6
+`define LM32_CSR_EBA                    `LM32_CSR_WIDTH'h7
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_DC                     `LM32_CSR_WIDTH'h8
+`define LM32_CSR_DEBA                   `LM32_CSR_WIDTH'h9
+`endif
+`define LM32_CSR_CFG2                   `LM32_CSR_WIDTH'ha
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_JTX                    `LM32_CSR_WIDTH'he
+`define LM32_CSR_JRX                    `LM32_CSR_WIDTH'hf
+`endif
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_BP0                    `LM32_CSR_WIDTH'h10
+`define LM32_CSR_BP1                    `LM32_CSR_WIDTH'h11
+`define LM32_CSR_BP2                    `LM32_CSR_WIDTH'h12
+`define LM32_CSR_BP3                    `LM32_CSR_WIDTH'h13
+`define LM32_CSR_WP0                    `LM32_CSR_WIDTH'h18
+`define LM32_CSR_WP1                    `LM32_CSR_WIDTH'h19
+`define LM32_CSR_WP2                    `LM32_CSR_WIDTH'h1a
+`define LM32_CSR_WP3                    `LM32_CSR_WIDTH'h1b
+`endif 
+
+// Values for WPC CSR
+`define LM32_WPC_C_RNG                  1:0
+`define LM32_WPC_C_DISABLED             2'b00
+`define LM32_WPC_C_READ                 2'b01
+`define LM32_WPC_C_WRITE                2'b10
+`define LM32_WPC_C_READ_WRITE           2'b11
+
+// Exception IDs
+`define LM32_EID_WIDTH                  3
+`define LM32_EID_RNG                    (`LM32_EID_WIDTH-1):0
+`define LM32_EID_RESET                  3'h0
+`define LM32_EID_BREAKPOINT             3'd1
+`define LM32_EID_INST_BUS_ERROR         3'h2
+`define LM32_EID_WATCHPOINT             3'd3
+`define LM32_EID_DATA_BUS_ERROR         3'h4
+`define LM32_EID_DIVIDE_BY_ZERO         3'h5
+`define LM32_EID_INTERRUPT              3'h6
+`define LM32_EID_SCALL                  3'h7
+
+// Pipeline result selection mux controls
+
+`define LM32_D_RESULT_SEL_0_RNG          0:0
+`define LM32_D_RESULT_SEL_0_REG_0        1'b0
+`define LM32_D_RESULT_SEL_0_NEXT_PC      1'b1
+
+`define LM32_D_RESULT_SEL_1_RNG          1:0
+`define LM32_D_RESULT_SEL_1_ZERO         2'b00
+`define LM32_D_RESULT_SEL_1_REG_1        2'b01
+`define LM32_D_RESULT_SEL_1_IMMEDIATE    2'b10
+
+`define LM32_USER_OPCODE_WIDTH           11
+`define LM32_USER_OPCODE_RNG             (`LM32_USER_OPCODE_WIDTH-1):0
+
+// Derive a macro to indicate if either of the caches are implemented
+`ifdef CFG_ICACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`else
+`ifdef CFG_DCACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`endif
+`endif
+
+/////////////////////////////////////////////////////
+// Interrupts
+/////////////////////////////////////////////////////
+
+// Always enable interrupts
+`define CFG_INTERRUPTS_ENABLED
+
+// Currently this is fixed to 32 and should not be changed
+`define CFG_INTERRUPTS                  32
+`define LM32_INTERRUPT_WIDTH            `CFG_INTERRUPTS
+`define LM32_INTERRUPT_RNG              (`LM32_INTERRUPT_WIDTH-1):0
+
+/////////////////////////////////////////////////////
+// General
+/////////////////////////////////////////////////////
+
+// Sub-word range types
+`define LM32_BYTE_WIDTH                 8
+`define LM32_BYTE_RNG                   7:0
+`define LM32_HWORD_WIDTH                16
+`define LM32_HWORD_RNG                  15:0
+
+// Word sub-byte indicies
+`define LM32_BYTE_0_RNG                  7:0
+`define LM32_BYTE_1_RNG                  15:8
+`define LM32_BYTE_2_RNG                  23:16
+`define LM32_BYTE_3_RNG                  31:24
+
+// Word sub-halfword indices
+`define LM32_HWORD_0_RNG                 15:0
+`define LM32_HWORD_1_RNG                 31:16
+
+// Use a synchronous reset
+`define CFG_RESET_SENSITIVITY
+
+// V.T. Srce
+`define SRCE
+
+// Whether to include context registers for debug exceptions
+// in addition to standard exception handling registers
+// Bizarre - Removing this increases LUT count!
+`define CFG_DEBUG_EXCEPTIONS_ENABLED
+
+// Wishbone defines 
+// Refer to Wishbone System-on-Chip Interconnection Architecture
+// These should probably be moved to a Wishbone common file
+
+// Wishbone cycle types
+`define LM32_CTYPE_WIDTH                3
+`define LM32_CTYPE_RNG                  (`LM32_CTYPE_WIDTH-1):0
+`define LM32_CTYPE_CLASSIC              3'b000
+`define LM32_CTYPE_CONSTANT             3'b001
+`define LM32_CTYPE_INCREMENTING         3'b010
+`define LM32_CTYPE_END                  3'b111
+
+// Wishbone burst types
+`define LM32_BTYPE_WIDTH                2
+`define LM32_BTYPE_RNG                  (`LM32_BTYPE_WIDTH-1):0
+`define LM32_BTYPE_LINEAR               2'b00
+`define LM32_BTYPE_4_BEAT               2'b01
+`define LM32_BTYPE_8_BEAT               2'b10
+`define LM32_BTYPE_16_BEAT              2'b11
+
+`endif
diff --git a/boards/milkymist-one/rtl/setup.v b/boards/milkymist-one/rtl/setup.v
new file mode 100644 (file)
index 0000000..45c5175
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+/*
+ * Enable or disable some cores.
+ * A complete system would have them all except the debug cores
+ * but when working on a specific part, it's very useful to be
+ * able to cut down synthesis times.
+ */
+
+//`define ENABLE_ISP1362
+//`define ENABLE_CFCARD
+/*
+ * FIXME: clocks in AC97 and VGA are not handled correctly
+ * and cause failure of ISE 11.2.
+ */
+//`define ENABLE_AC97
+//`define ENABLE_VGA
+//`define ENABLE_PFPU
+/*
+ * FIXME: enabling the TMU causes Xst 11.2 with SP6 to fail with
+ * "ERROR:Xst:1706 - Unit <system>:
+ * port <m1_di<10>> of logic node <fmlarb/Mmux_s_do2> has no source"
+ * repeated for other signals in m1_di and fmlarb/Mmux_s_do.
+ */
+//`define ENABLE_TMU
+
+/*
+ * System clock frequency in Hz.
+ */
+`define CLOCK_FREQUENCY 80000000
+
+/*
+ * System clock period in ns (must be in sync with CLOCK_FREQUENCY).
+ */
+`define CLOCK_PERIOD 12.5
+
+/*
+ * Default baudrate for the debug UART.
+ */
+`define BAUD_RATE 115200
+
+/*
+ * SDRAM depth, in bytes (the number of bits you need to address the whole
+ * array with byte granularity)
+ */
+`define SDRAM_DEPTH 26
+
+/*
+ * SDRAM column depth (the number of column address bits)
+ */
+`define SDRAM_COLUMNDEPTH 9
diff --git a/boards/milkymist-one/rtl/system.v b/boards/milkymist-one/rtl/system.v
new file mode 100644 (file)
index 0000000..36ff19d
--- /dev/null
@@ -0,0 +1,1012 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module system(
+       input clkin,
+       input resetin,
+       
+       // Boot ROM
+       output [20:0] flash_adr,
+       input [7:0] flash_d,
+       output flash_byte_n,
+       output flash_oe_n,
+       output flash_we_n,
+       output flash_ce,
+       output flash_ac97_reset_n,
+
+       // UART
+       input uart_rxd,
+       output uart_txd,
+
+       // SD card
+       // TODO
+
+       // DDR SDRAM
+       output sdram_clk_p,
+       output sdram_clk_n,
+       output sdram_cke,
+       output sdram_cs_n,
+       output sdram_we_n,
+       output sdram_cas_n,
+       output sdram_ras_n,
+       output [3:0] sdram_dqm,
+       output [12:0] sdram_adr,
+       output [1:0] sdram_ba,
+       inout [31:0] sdram_dq,
+       inout [3:0] sdram_dqs,
+       
+       // GPIO
+       output [3:0] led,    // 2 GPIO OUT (2 LEDs for UART activity)
+       input [3:0] dipsw,   // 4 GPIO IN
+
+       // VGA
+       output vga_psave_n,
+       output vga_hsync_n,
+       output vga_vsync_n,
+       output vga_sync_n,
+       output vga_blank_n,
+       output [7:0] vga_r,
+       output [7:0] vga_g,
+       output [7:0] vga_b,
+       output vga_clkout,
+       
+       // AC97
+       input ac97_clk,
+       input ac97_sin,
+       output ac97_sout,
+       output ac97_sync
+
+       // TODO
+       // ISP1362
+
+       // Ethernet
+
+       // Video Input
+
+       // DMX512
+
+       // MIDI
+
+       // IR
+);
+
+//------------------------------------------------------------------
+// Clock and Reset Generation
+//------------------------------------------------------------------
+wire sys_clk;
+wire sys_clk_n;
+
+`ifndef SIMULATION
+wire sys_clk_dcm;
+wire sys_clk_n_dcm;
+
+DCM_SP #(
+       .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(3),               // 1 to 32
+       .CLKFX_MULTIPLY(2),             // 2 to 32
+
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKOUT_PHASE_SHIFT("NONE"),
+       .CLK_FEEDBACK("1X"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("TRUE")
+) clkgen_sys (
+       .CLK0(sys_clk_dcm),
+       .CLK90(),
+       .CLK180(sys_clk_n_dcm),
+       .CLK270(),
+
+       .CLK2X(),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(),
+       .CLKFX180(),
+       .LOCKED(),
+       .CLKFB(sys_clk),
+       .CLKIN(clkin),
+       .RST(1'b0),
+       .PSEN(1'b0)
+);
+AUTOBUF b1(
+       .I(sys_clk_dcm),
+       .O(sys_clk)
+);
+AUTOBUF b2(
+       .I(sys_clk_n_dcm),
+       .O(sys_clk_n)
+);
+`else
+assign sys_clk = clkin;
+assign sys_clk_n = ~clkin;
+`endif
+
+`ifndef SIMULATION
+/* Synchronize the reset input */
+reg rst0;
+reg rst1;
+always @(posedge sys_clk) rst0 <= resetin;
+always @(posedge sys_clk) rst1 <= rst0;
+
+/* Debounce it (counter holds reset for 10.49ms),
+ * and generate power-on reset.
+ */
+reg [19:0] rst_debounce;
+reg sys_rst;
+initial rst_debounce <= 20'hFFFFF;
+initial sys_rst <= 1'b1;
+always @(posedge sys_clk) begin
+       if(~rst1) /* reset is active low */
+               rst_debounce <= 20'hFFFFF;
+       else if(rst_debounce != 20'd0)
+               rst_debounce <= rst_debounce - 20'd1;
+       sys_rst <= rst_debounce != 20'd0;
+end
+
+/*
+ * We must release the Flash reset before the system reset
+ * because the Flash needs some time to come out of reset
+ * and the CPU begins fetching instructions from it
+ * as soon as the system reset is released.
+ * From datasheet, minimum reset pulse width is 100ns
+ * and reset-to-read time is 150ns.
+ * The reset is combined with the AC97 reset, which must be held for 1us.
+ * Here we use a 7-bit counter that holds reset
+ * for 1.28us and makes everybody happy.
+ */
+
+reg [7:0] flash_rstcounter;
+initial flash_rstcounter <= 8'd0;
+always @(posedge sys_clk) begin
+       if(~rst1 & ~sys_rst) /* ~sys_rst is for debouncing */
+               flash_rstcounter <= 8'd0;
+       else if(~flash_rstcounter[7])
+               flash_rstcounter <= flash_rstcounter + 8'd1;
+end
+
+assign flash_ac97_reset_n = flash_rstcounter[7];
+
+wire ac97_rst_n;
+assign ac97_rst_n = flash_rstcounter[7];
+
+`else
+wire sys_rst;
+assign sys_rst = ~resetin;
+`endif
+
+//------------------------------------------------------------------
+// Wishbone master wires
+//------------------------------------------------------------------
+wire [31:0]    cpuibus_adr,
+               cpudbus_adr,
+               ac97bus_adr,
+               pfpubus_adr,
+               tmumbus_adr;
+
+wire [2:0]     cpuibus_cti,
+               cpudbus_cti,
+               ac97bus_cti,
+               tmumbus_cti;
+
+wire [31:0]    cpuibus_dat_r,
+               cpudbus_dat_r,
+               cpudbus_dat_w,
+               ac97bus_dat_r,
+               ac97bus_dat_w,
+               pfpubus_dat_w,
+               tmumbus_dat_r;
+
+wire [3:0]     cpudbus_sel;
+
+wire           cpudbus_we,
+               ac97bus_we;
+
+wire           cpuibus_cyc,
+               cpudbus_cyc,
+               ac97bus_cyc,
+               pfpubus_cyc,
+               tmumbus_cyc;
+
+wire           cpuibus_stb,
+               cpudbus_stb,
+               ac97bus_stb,
+               pfpubus_stb,
+               tmumbus_stb;
+
+wire           cpuibus_ack,
+               cpudbus_ack,
+               ac97bus_ack,
+               tmumbus_ack,
+               pfpubus_ack;
+
+//------------------------------------------------------------------
+// Wishbone slave wires
+//------------------------------------------------------------------
+wire [31:0]    brg_adr,
+               norflash_adr,
+               bram_adr,
+               csrbrg_adr,
+               isp1362_adr;
+
+wire [2:0]     brg_cti,
+               bram_cti;
+
+wire [31:0]    brg_dat_r,
+               brg_dat_w,
+               norflash_dat_r,
+               bram_dat_r,
+               bram_dat_w,
+               csrbrg_dat_r,
+               csrbrg_dat_w,
+               isp1362_dat_r,
+               isp1362_dat_w;
+
+wire [3:0]     brg_sel,
+               bram_sel;
+
+wire           brg_we,
+               bram_we,
+               csrbrg_we,
+               isp1362_we;
+
+wire           brg_cyc,
+               norflash_cyc,
+               bram_cyc,
+               csrbrg_cyc,
+               isp1362_cyc;
+
+wire           brg_stb,
+               norflash_stb,
+               bram_stb,
+               csrbrg_stb,
+               isp1362_stb;
+
+wire           brg_ack,
+               norflash_ack,
+               bram_ack,
+               csrbrg_ack,
+               isp1362_ack;
+
+//---------------------------------------------------------------------------
+// Wishbone switch
+//---------------------------------------------------------------------------
+conbus #(
+       .s_addr_w(3),
+       .s0_addr(3'b000),       // norflash     0x00000000
+       .s1_addr(3'b001),       // bram         0x20000000
+       .s2_addr(3'b010),       // FML bridge   0x40000000
+       .s3_addr(3'b100),       // CSR bridge   0x80000000
+       .s4_addr(3'b101)        // isp1362      0xa0000000
+) conbus (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       // Master 0
+       .m0_dat_i(32'hx),
+       .m0_dat_o(cpuibus_dat_r),
+       .m0_adr_i(cpuibus_adr),
+       .m0_cti_i(cpuibus_cti),
+       .m0_we_i(1'b0),
+       .m0_sel_i(4'hf),
+       .m0_cyc_i(cpuibus_cyc),
+       .m0_stb_i(cpuibus_stb),
+       .m0_ack_o(cpuibus_ack),
+       // Master 1
+       .m1_dat_i(cpudbus_dat_w),
+       .m1_dat_o(cpudbus_dat_r),
+       .m1_adr_i(cpudbus_adr),
+       .m1_cti_i(cpudbus_cti),
+       .m1_we_i(cpudbus_we),
+       .m1_sel_i(cpudbus_sel),
+       .m1_cyc_i(cpudbus_cyc),
+       .m1_stb_i(cpudbus_stb),
+       .m1_ack_o(cpudbus_ack),
+       // Master 2
+       .m2_dat_i(ac97bus_dat_w),
+       .m2_dat_o(ac97bus_dat_r),
+       .m2_adr_i(ac97bus_adr),
+       .m2_cti_i(ac97bus_cti),
+       .m2_we_i(ac97bus_we),
+       .m2_sel_i(4'hf),
+       .m2_cyc_i(ac97bus_cyc),
+       .m2_stb_i(ac97bus_stb),
+       .m2_ack_o(ac97bus_ack),
+       // Master 3
+       .m3_dat_i(pfpubus_dat_w),
+       .m3_dat_o(),
+       .m3_adr_i(pfpubus_adr),
+       .m3_cti_i(3'd0),
+       .m3_we_i(1'b1),
+       .m3_sel_i(4'hf),
+       .m3_cyc_i(pfpubus_cyc),
+       .m3_stb_i(pfpubus_stb),
+       .m3_ack_o(pfpubus_ack),
+       // Master 4
+       .m4_dat_i(32'bx),
+       .m4_dat_o(tmumbus_dat_r),
+       .m4_adr_i(tmumbus_adr),
+       .m4_cti_i(tmumbus_cti),
+       .m4_we_i(1'b0),
+       .m4_sel_i(4'hf),
+       .m4_cyc_i(tmumbus_cyc),
+       .m4_stb_i(tmumbus_stb),
+       .m4_ack_o(tmumbus_ack),
+
+       // Slave 0
+       .s0_dat_i(norflash_dat_r),
+       .s0_adr_o(norflash_adr),
+       .s0_cyc_o(norflash_cyc),
+       .s0_stb_o(norflash_stb),
+       .s0_ack_i(norflash_ack),
+       // Slave 1
+       .s1_dat_i(bram_dat_r),
+       .s1_dat_o(bram_dat_w),
+       .s1_adr_o(bram_adr),
+       .s1_cti_o(bram_cti),
+       .s1_sel_o(bram_sel),
+       .s1_we_o(bram_we),
+       .s1_cyc_o(bram_cyc),
+       .s1_stb_o(bram_stb),
+       .s1_ack_i(bram_ack),
+       // Slave 2
+       .s2_dat_i(brg_dat_r),
+       .s2_dat_o(brg_dat_w),
+       .s2_adr_o(brg_adr),
+       .s2_cti_o(brg_cti),
+       .s2_sel_o(brg_sel),
+       .s2_we_o(brg_we),
+       .s2_cyc_o(brg_cyc),
+       .s2_stb_o(brg_stb),
+       .s2_ack_i(brg_ack),
+       // Slave 3
+       .s3_dat_i(csrbrg_dat_r),
+       .s3_dat_o(csrbrg_dat_w),
+       .s3_adr_o(csrbrg_adr),
+       .s3_we_o(csrbrg_we),
+       .s3_cyc_o(csrbrg_cyc),
+       .s3_stb_o(csrbrg_stb),
+       .s3_ack_i(csrbrg_ack),
+       // Slave 4
+       .s4_dat_i(isp1362_dat_r),
+       .s4_dat_o(isp1362_dat_w),
+       .s4_adr_o(isp1362_adr),
+       .s4_we_o(isp1362_we),
+       .s4_cyc_o(isp1362_cyc),
+       .s4_stb_o(isp1362_stb),
+       .s4_ack_i(isp1362_ack)
+);
+
+//------------------------------------------------------------------
+// CSR bus
+//------------------------------------------------------------------
+wire [13:0]    csr_a;
+wire           csr_we;
+wire [31:0]    csr_dw;
+wire [31:0]    csr_dr_uart,
+               csr_dr_sysctl,
+               csr_dr_hpdmc,
+               csr_dr_vga,
+               csr_dr_ac97,
+               csr_dr_pfpu,
+               csr_dr_tmu;
+
+//------------------------------------------------------------------
+// FML master wires
+//------------------------------------------------------------------
+wire [`SDRAM_DEPTH-1:0]        fml_brg_adr,
+                       fml_vga_adr,
+                       fml_tmur_adr,
+                       fml_tmuw_adr;
+
+wire                   fml_brg_stb,
+                       fml_vga_stb,
+                       fml_tmur_stb,
+                       fml_tmuw_stb;
+
+wire                   fml_brg_we;
+
+wire                   fml_brg_ack,
+                       fml_vga_ack,
+                       fml_tmur_ack,
+                       fml_tmuw_ack;
+
+wire [7:0]             fml_brg_sel,
+                       fml_tmuw_sel;
+
+wire [63:0]            fml_brg_dw,
+                       fml_tmuw_dw;
+
+wire [63:0]            fml_brg_dr,
+                       fml_vga_dr,
+                       fml_tmur_dr;
+
+//------------------------------------------------------------------
+// FML slave wires, to memory controller
+//------------------------------------------------------------------
+wire [`SDRAM_DEPTH-1:0] fml_adr;
+wire fml_stb;
+wire fml_we;
+wire fml_ack;
+wire [7:0] fml_sel;
+wire [63:0] fml_dw;
+wire [63:0] fml_dr;
+
+//---------------------------------------------------------------------------
+// FML arbiter
+//---------------------------------------------------------------------------
+fmlarb #(
+       .fml_depth(`SDRAM_DEPTH)
+) fmlarb (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       /* VGA framebuffer (high priority) */
+       .m0_adr(fml_vga_adr),
+       .m0_stb(fml_vga_stb),
+       .m0_we(1'b0),
+       .m0_ack(fml_vga_ack),
+       .m0_sel(8'bx),
+       .m0_di(64'bx),
+       .m0_do(fml_vga_dr),
+       
+       /* WISHBONE bridge */
+       .m1_adr(fml_brg_adr),
+       .m1_stb(fml_brg_stb),
+       .m1_we(fml_brg_we),
+       .m1_ack(fml_brg_ack),
+       .m1_sel(fml_brg_sel),
+       .m1_di(fml_brg_dw),
+       .m1_do(fml_brg_dr),
+       
+       /* TMU, pixel read DMA */
+       .m2_adr(fml_tmur_adr),
+       .m2_stb(fml_tmur_stb),
+       .m2_we(1'b0),
+       .m2_ack(fml_tmur_ack),
+       .m2_sel(8'bx),
+       .m2_di(64'bx),
+       .m2_do(fml_tmur_dr),
+       
+       /* TMU, pixel write DMA */
+       .m3_adr(fml_tmuw_adr),
+       .m3_stb(fml_tmuw_stb),
+       .m3_we(1'b1),
+       .m3_ack(fml_tmuw_ack),
+       .m3_sel(fml_tmuw_sel),
+       .m3_di(fml_tmuw_dw),
+       .m3_do(),
+       
+       .s_adr(fml_adr),
+       .s_stb(fml_stb),
+       .s_we(fml_we),
+       .s_ack(fml_ack),
+       .s_sel(fml_sel),
+       .s_di(fml_dr),
+       .s_do(fml_dw)
+);
+
+//---------------------------------------------------------------------------
+// WISHBONE to CSR bridge
+//---------------------------------------------------------------------------
+csrbrg csrbrg(
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .wb_adr_i(csrbrg_adr),
+       .wb_dat_i(csrbrg_dat_w),
+       .wb_dat_o(csrbrg_dat_r),
+       .wb_cyc_i(csrbrg_cyc),
+       .wb_stb_i(csrbrg_stb),
+       .wb_we_i(csrbrg_we),
+       .wb_ack_o(csrbrg_ack),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_do(csr_dw),
+       /* combine all slave->master data lines with an OR */
+       .csr_di(
+                csr_dr_uart
+               |csr_dr_sysctl
+               |csr_dr_hpdmc
+               |csr_dr_vga
+               |csr_dr_ac97
+               |csr_dr_pfpu
+               |csr_dr_tmu
+       )
+);
+
+//---------------------------------------------------------------------------
+// WISHBONE to FML bridge
+//---------------------------------------------------------------------------
+fmlbrg #(
+       .fml_depth(`SDRAM_DEPTH)
+) fmlbrg (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .wb_adr_i(brg_adr),
+       .wb_cti_i(brg_cti),
+       .wb_dat_o(brg_dat_r),
+       .wb_dat_i(brg_dat_w),
+       .wb_sel_i(brg_sel),
+       .wb_stb_i(brg_stb),
+       .wb_cyc_i(brg_cyc),
+       .wb_ack_o(brg_ack),
+       .wb_we_i(brg_we),
+       
+       .fml_adr(fml_brg_adr),
+       .fml_stb(fml_brg_stb),
+       .fml_we(fml_brg_we),
+       .fml_ack(fml_brg_ack),
+       .fml_sel(fml_brg_sel),
+       .fml_di(fml_brg_dr),
+       .fml_do(fml_brg_dw)
+);
+
+//---------------------------------------------------------------------------
+// Interrupts
+//---------------------------------------------------------------------------
+wire gpio_irq;
+wire timer0_irq;
+wire timer1_irq;
+wire uartrx_irq;
+wire uarttx_irq;
+wire ac97crrequest_irq;
+wire ac97crreply_irq;
+wire ac97dmar_irq;
+wire ac97dmaw_irq;
+wire pfpu_irq;
+wire tmu_irq;
+
+wire [31:0] cpu_interrupt_n;
+assign cpu_interrupt_n = {{21{1'b1}},
+       ~tmu_irq,
+       ~pfpu_irq,
+       ~ac97dmaw_irq,
+       ~ac97dmar_irq,
+       ~ac97crreply_irq,
+       ~ac97crrequest_irq,
+       ~uarttx_irq,
+       ~uartrx_irq,
+       ~timer1_irq,
+       ~timer0_irq,
+       ~gpio_irq
+};
+
+//---------------------------------------------------------------------------
+// LM32 CPU
+//---------------------------------------------------------------------------
+lm32_top cpu(
+       .clk_i(sys_clk),
+       .rst_i(sys_rst),
+       .interrupt_n(cpu_interrupt_n),
+
+       .I_ADR_O(cpuibus_adr),
+       .I_DAT_I(cpuibus_dat_r),
+       .I_DAT_O(),
+       .I_SEL_O(),
+       .I_CYC_O(cpuibus_cyc),
+       .I_STB_O(cpuibus_stb),
+       .I_ACK_I(cpuibus_ack),
+       .I_WE_O(),
+       .I_CTI_O(cpuibus_cti),
+       .I_LOCK_O(),
+       .I_BTE_O(),
+       .I_ERR_I(1'b0),
+       .I_RTY_I(1'b0),
+
+       .D_ADR_O(cpudbus_adr),
+       .D_DAT_I(cpudbus_dat_r),
+       .D_DAT_O(cpudbus_dat_w),
+       .D_SEL_O(cpudbus_sel),
+       .D_CYC_O(cpudbus_cyc),
+       .D_STB_O(cpudbus_stb),
+       .D_ACK_I(cpudbus_ack),
+       .D_WE_O (cpudbus_we),
+       .D_CTI_O(cpudbus_cti),
+       .D_LOCK_O(),
+       .D_BTE_O(),
+       .D_ERR_I(1'b0),
+       .D_RTY_I(1'b0)
+);
+
+//---------------------------------------------------------------------------
+// Boot ROM
+//---------------------------------------------------------------------------
+norflash8 #(
+       .adr_width(21)
+) norflash (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .wb_adr_i(norflash_adr),
+       .wb_dat_o(norflash_dat_r),
+       .wb_stb_i(norflash_stb),
+       .wb_cyc_i(norflash_cyc),
+       .wb_ack_o(norflash_ack),
+       
+       .flash_adr(flash_adr),
+       .flash_d(flash_d)
+
+);
+
+assign flash_byte_n = 1'b0;
+assign flash_oe_n = 1'b0;
+assign flash_we_n = 1'b1;
+assign flash_ce = 1'b1;
+
+//---------------------------------------------------------------------------
+// BRAM
+//---------------------------------------------------------------------------
+bram #(
+       .adr_width(12)
+) bram (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .wb_adr_i(bram_adr),
+       .wb_dat_o(bram_dat_r),
+       .wb_dat_i(bram_dat_w),
+       .wb_sel_i(bram_sel),
+       .wb_stb_i(bram_stb),
+       .wb_cyc_i(bram_cyc),
+       .wb_ack_o(bram_ack),
+       .wb_we_i(bram_we)
+);
+
+//---------------------------------------------------------------------------
+// UART
+//---------------------------------------------------------------------------
+uart #(
+       .csr_addr(4'h0),
+       .clk_freq(`CLOCK_FREQUENCY),
+       .baud(`BAUD_RATE)
+) uart (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_uart),
+       
+       .rx_irq(uartrx_irq),
+       .tx_irq(uarttx_irq),
+       
+       .uart_rxd(uart_rxd),
+       .uart_txd(uart_txd)
+);
+
+/* LED0 and LED1 are used as TX/RX indicators.
+ * Generate long pulses so we have time to see them
+ */
+reg [18:0] rxcounter;
+reg rxled;
+always @(posedge sys_clk) begin
+       if(~uart_rxd)
+               rxcounter <= {19{1'b1}};
+       else if(rxcounter != 19'd0)
+               rxcounter <= rxcounter - 19'd1;
+       rxled <= rxcounter != 19'd0;
+end
+
+reg [18:0] txcounter;
+reg txled;
+always @(posedge sys_clk) begin
+       if(~uart_txd)
+               txcounter <= {19{1'b1}};
+       else if(txcounter != 19'd0)
+               txcounter <= txcounter - 20'd1;
+       txled <= txcounter != 19'd0;
+end
+
+assign led[0] = txled;
+assign led[1] = rxled;
+
+//---------------------------------------------------------------------------
+// System Controller
+//---------------------------------------------------------------------------
+wire [13:0] gpio_outputs;
+
+sysctl #(
+       .csr_addr(4'h1),
+       .ninputs(4),
+       .noutputs(2),
+       .systemid(32'h4D4F4E45) /* MONE */
+) sysctl (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       .gpio_irq(gpio_irq),
+       .timer0_irq(timer0_irq),
+       .timer1_irq(timer1_irq),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_sysctl),
+
+       .gpio_inputs(dipsw),
+       .gpio_outputs(led[3:2]) /* LED0 and LED1 are used as TX/RX indicators. */
+);
+
+//---------------------------------------------------------------------------
+// ISP1362 USB interface
+//---------------------------------------------------------------------------
+`ifdef ENABLE_ISP1362
+isp1362 isp1362(
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .wb_cyc_i(isp1362_cyc),
+       .wb_stb_i(isp1362_stb),
+       .wb_ack_o(isp1362_ack),
+       .wb_adr_i(isp1362_adr),
+       .wb_dat_i(isp1362_dat_w),
+       .wb_dat_o(isp1362_dat_r),
+       .wb_we_i(isp1362_we),
+       
+);
+`else
+assign isp1362_ack = isp1362_cyc & isp1362_stb;
+assign isp1362_dat_r = 32'habadface;
+`endif
+
+//---------------------------------------------------------------------------
+// DDR SDRAM
+//---------------------------------------------------------------------------
+ddram #(
+       .csr_addr(4'h2)
+) ddram (
+       .sys_clk(sys_clk),
+       .sys_clk_n(sys_clk_n),
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_hpdmc),
+
+       .fml_adr(fml_adr),
+       .fml_stb(fml_stb),
+       .fml_we(fml_we),
+       .fml_ack(fml_ack),
+       .fml_sel(fml_sel),
+       .fml_di(fml_dw),
+       .fml_do(fml_dr),
+       
+       .sdram_clk_p(sdram_clk_p),
+       .sdram_clk_n(sdram_clk_n),
+       .sdram_cke(sdram_cke),
+       .sdram_cs_n(sdram_cs_n),
+       .sdram_we_n(sdram_we_n),
+       .sdram_cas_n(sdram_cas_n),
+       .sdram_ras_n(sdram_ras_n),
+       .sdram_dqm(sdram_dqm),
+       .sdram_adr(sdram_adr),
+       .sdram_ba(sdram_ba),
+       .sdram_dq(sdram_dq),
+       .sdram_dqs(sdram_dqs)
+);
+
+//---------------------------------------------------------------------------
+// VGA
+//---------------------------------------------------------------------------
+`ifdef ENABLE_VGA
+vga #(
+       .csr_addr(4'h3),
+       .fml_depth(`SDRAM_DEPTH)
+) vga (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_vga),
+       
+       .fml_adr(fml_vga_adr),
+       .fml_stb(fml_vga_stb),
+       .fml_ack(fml_vga_ack),
+       .fml_di(fml_vga_dr),
+       
+       .vga_psave_n(vga_psave_n),
+       .vga_hsync_n(vga_hsync_n),
+       .vga_vsync_n(vga_vsync_n),
+       .vga_sync_n(vga_sync_n),
+       .vga_blank_n(vga_blank_n),
+       .vga_r(vga_r),
+       .vga_g(vga_g),
+       .vga_b(vga_b),
+       .vga_clkout(vga_clkout)
+);
+`else
+assign csr_dr_vga = 32'd0;
+assign fml_vga_adr = {`SDRAM_DEPTH{1'bx}};
+assign fml_vga_stb = 1'b0;
+assign vga_psave_n = 1'b0;
+assign vga_hsync_n = 1'b0;
+assign vga_vsync_n = 1'b0;
+assign vga_sync_n = 1'b0;
+assign vga_blank_n = 1'b0;
+assign vga_r = 8'd0;
+assign vga_g = 8'd0;
+assign vga_b = 8'd0;
+assign vga_clkout = 1'b0;
+`endif
+
+//---------------------------------------------------------------------------
+// AC97
+//---------------------------------------------------------------------------
+`ifdef ENABLE_AC97
+wire ac97_clk_b;
+AUTOBUF b_ac97(
+       .I(ac97_clk),
+       .O(ac97_clk_b)
+);
+ac97 #(
+       .csr_addr(4'h4)
+) ac97 (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       .ac97_clk(ac97_clk_b),
+       .ac97_rst_n(ac97_rst_n),
+       
+       .ac97_sin(ac97_sin),
+       .ac97_sout(ac97_sout),
+       .ac97_sync(ac97_sync),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_ac97),
+       
+       .crrequest_irq(ac97crrequest_irq),
+       .crreply_irq(ac97crreply_irq),
+       .dmar_irq(ac97dmar_irq),
+       .dmaw_irq(ac97dmaw_irq),
+       
+       .wbm_adr_o(ac97bus_adr),
+       .wbm_cti_o(ac97bus_cti),
+       .wbm_we_o(ac97bus_we),
+       .wbm_cyc_o(ac97bus_cyc),
+       .wbm_stb_o(ac97bus_stb),
+       .wbm_ack_i(ac97bus_ack),
+       .wbm_dat_i(ac97bus_dat_r),
+       .wbm_dat_o(ac97bus_dat_w)
+);
+
+`else
+assign csr_dr_ac97 = 32'd0;
+
+assign ac97crrequest_irq = 1'b0;
+assign ac97crreply_irq = 1'b0;
+assign ac97dmar_irq = 1'b0;
+assign ac97dmaw_irq = 1'b0;
+
+assign ac97_sout = 1'b0;
+assign ac97_sync = 1'b0;
+
+assign ac97bus_adr = 32'bx;
+assign ac97bus_cti = 3'bx;
+assign ac97bus_we = 1'bx;
+assign ac97bus_cyc = 1'b0;
+assign ac97bus_stb = 1'b0;
+assign ac97bus_dat_w = 32'bx;
+`endif
+
+//---------------------------------------------------------------------------
+// Programmable FPU
+//---------------------------------------------------------------------------
+`ifdef ENABLE_PFPU
+pfpu #(
+       .csr_addr(4'h5)
+) pfpu (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_pfpu),
+       
+       .irq(pfpu_irq),
+       
+       .wbm_dat_o(pfpubus_dat_w),
+       .wbm_adr_o(pfpubus_adr),
+       .wbm_cyc_o(pfpubus_cyc),
+       .wbm_stb_o(pfpubus_stb),
+       .wbm_ack_i(pfpubus_ack)
+);
+
+`else
+assign csr_dr_pfpu = 32'd0;
+
+assign pfpu_irq = 1'b0;
+
+assign pfpubus_dat_w = 32'hx;
+assign pfpubus_adr = 32'hx;
+assign pfpubus_cyc = 1'b0;
+assign pfpubus_stb = 1'b0;
+`endif
+
+//---------------------------------------------------------------------------
+// Texture Mapping Unit
+//---------------------------------------------------------------------------
+`ifdef ENABLE_TMU
+tmu #(
+       .csr_addr(4'h6),
+       .fml_depth(`SDRAM_DEPTH)
+) tmu (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_dw),
+       .csr_do(csr_dr_tmu),
+       
+       .irq(tmu_irq),
+       
+       .wbm_adr_o(tmumbus_adr),
+       .wbm_cti_o(tmumbus_cti),
+       .wbm_cyc_o(tmumbus_cyc),
+       .wbm_stb_o(tmumbus_stb),
+       .wbm_ack_i(tmumbus_ack),
+       .wbm_dat_i(tmumbus_dat_r),
+       
+       .fmlr_adr(fml_tmur_adr),
+       .fmlr_stb(fml_tmur_stb),
+       .fmlr_ack(fml_tmur_ack),
+       .fmlr_di(fml_tmur_dr),
+       
+       .fmlw_adr(fml_tmuw_adr),
+       .fmlw_stb(fml_tmuw_stb),
+       .fmlw_ack(fml_tmuw_ack),
+       .fmlw_sel(fml_tmuw_sel),
+       .fmlw_do(fml_tmuw_dw)
+);
+
+`else
+assign csr_dr_tmu = 32'd0;
+
+assign tmu_irq = 1'b0;
+
+assign tmumbus_adr = 32'hx;
+assign tmumbus_cti = 3'bxxx;
+assign tmumbus_cyc = 1'b0;
+assign tmumbus_stb = 1'b0;
+
+assign fml_tmur_adr = {`SDRAM_DEPTH{1'bx}};
+assign fml_tmur_stb = 1'b0;
+
+assign fml_tmuw_adr = {`SDRAM_DEPTH{1'bx}};
+assign fml_tmuw_stb = 1'b0;
+assign fml_tmuw_sel = 8'bx;
+assign fml_tmuw_dw = 64'bx;
+`endif
+
+endmodule
diff --git a/boards/milkymist-one/rtl/vga.v b/boards/milkymist-one/rtl/vga.v
new file mode 100644 (file)
index 0000000..3e063d6
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module vga #(
+       parameter csr_addr = 4'h0,
+       parameter fml_depth = 26
+) (
+       input sys_clk,
+       input sys_rst,
+       
+       /* Configuration interface */
+       input [13:0] csr_a,
+       input csr_we,
+       input [31:0] csr_di,
+       output [31:0] csr_do,
+       
+       /* Framebuffer FML 4x64 interface */
+       output [fml_depth-1:0] fml_adr,
+       output fml_stb,
+       input fml_ack,
+       input [63:0] fml_di,
+       
+       /* VGA pads */
+       output vga_psave_n,
+       output vga_hsync_n,
+       output vga_vsync_n,
+       output vga_sync_n,
+       output vga_blank_n,
+       output [7:0] vga_r,
+       output [7:0] vga_g,
+       output [7:0] vga_b,
+       output vga_clkout
+);
+
+wire vga_clk_dcm;
+wire vga_clk_n_dcm;
+wire vga_clk;
+wire vga_clk_n;
+
+DCM_SP #(
+       .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(8),               // 1 to 32
+       .CLKFX_MULTIPLY(2),             // 2 to 32
+
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKOUT_PHASE_SHIFT("VARIABLE"),
+       .CLK_FEEDBACK("1X"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("FALSE")
+) clkgen_dqs (
+       .CLK0(),
+       .CLK90(),
+       .CLK180(),
+       .CLK270(),
+
+       .CLK2X(),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(vga_clk_dcm),
+       .CLKFX180(vga_clk_n_dcm),
+       .LOCKED(),
+       .CLKFB(vga_clk),
+       .CLKIN(sys_clk),
+       .RST(sys_rst),
+
+       .PSEN(1'b0)
+);
+AUTOBUF b_p(
+       .I(vga_clk_dcm),
+       .O(vga_clk)
+);
+AUTOBUF b_n(
+       .I(vga_clk_n_dcm),
+       .O(vga_clk_n)
+);
+
+ODDR2 #(
+       .DDR_ALIGNMENT("NONE"),
+       .INIT(1'b0),
+       .SRTYPE("SYNC")
+) clock_forward (
+       .Q(vga_clkout),
+       .C0(vga_clk),
+       .C1(vga_clk_n),
+       .CE(1'b1),
+       .D0(1'b1),
+       .D1(1'b0),
+       .R(1'b0),
+       .S(1'b0)
+);
+
+vgafb #(
+       .csr_addr(csr_addr),
+       .fml_depth(fml_depth)
+) vgafb (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_di),
+       .csr_do(csr_do),
+       
+       .fml_adr(fml_adr),
+       .fml_stb(fml_stb),
+       .fml_ack(fml_ack),
+       .fml_di(fml_di),
+       
+       .vga_clk(vga_clk),
+       .vga_psave_n(vga_psave_n),
+       .vga_hsync_n(vga_hsync_n),
+       .vga_vsync_n(vga_vsync_n),
+       .vga_sync_n(vga_sync_n),
+       .vga_blank_n(vga_blank_n),
+       .vga_r(vga_r),
+       .vga_g(vga_g),
+       .vga_b(vga_b)
+);
+
+endmodule
diff --git a/boards/milkymist-one/sources.mak b/boards/milkymist-one/sources.mak
new file mode 100644 (file)
index 0000000..0754a1a
--- /dev/null
@@ -0,0 +1,33 @@
+BOARD_SRC=$(wildcard $(BOARD_DIR)/*.v)
+
+CONBUS_SRC=$(wildcard $(CORES_DIR)/conbus/rtl/*.v)
+LM32_SRC=                                              \
+       $(CORES_DIR)/lm32/rtl/lm32_cpu.v                \
+       $(CORES_DIR)/lm32/rtl/lm32_instruction_unit.v   \
+       $(CORES_DIR)/lm32/rtl/lm32_decoder.v            \
+       $(CORES_DIR)/lm32/rtl/lm32_load_store_unit.v    \
+       $(CORES_DIR)/lm32/rtl/lm32_adder.v              \
+       $(CORES_DIR)/lm32/rtl/lm32_addsub.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_logic_op.v           \
+       $(CORES_DIR)/lm32/rtl/lm32_shifter.v            \
+       $(CORES_DIR)/lm32/rtl/lm32_multiplier.v         \
+       $(CORES_DIR)/lm32/rtl/lm32_mc_arithmetic.v      \
+       $(CORES_DIR)/lm32/rtl/lm32_interrupt.v          \
+       $(CORES_DIR)/lm32/rtl/lm32_ram.v                \
+       $(CORES_DIR)/lm32/rtl/lm32_icache.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_dcache.v             \
+       $(CORES_DIR)/lm32/rtl/lm32_top.v
+FMLARB_SRC=$(wildcard $(CORES_DIR)/fmlarb/rtl/*.v)
+FMLBRG_SRC=$(wildcard $(CORES_DIR)/fmlbrg/rtl/*.v)
+CSRBRG_SRC=$(wildcard $(CORES_DIR)/csrbrg/rtl/*.v)
+NORFLASH_SRC=$(wildcard $(CORES_DIR)/norflash8/rtl/*.v)
+BRAM_SRC=$(wildcard $(CORES_DIR)/bram/rtl/*.v)
+UART_SRC=$(wildcard $(CORES_DIR)/uart/rtl/*.v)
+SYSCTL_SRC=$(wildcard $(CORES_DIR)/sysctl/rtl/*.v)
+HPDMC_SRC=$(wildcard $(CORES_DIR)/hpdmc_ddr32/rtl/*.v) $(wildcard $(CORES_DIR)/hpdmc_ddr32/rtl/spartan6/*.v)
+VGAFB_SRC=$(wildcard $(CORES_DIR)/vgafb/rtl/*.v)
+AC97_SRC=$(wildcard $(CORES_DIR)/ac97/rtl/*.v)
+PFPU_SRC=$(wildcard $(CORES_DIR)/pfpu/rtl/*.v)
+TMU_SRC=$(wildcard $(CORES_DIR)/tmu/rtl/*.v)
+
+CORES_SRC=$(CONBUS_SRC) $(LM32_SRC) $(FMLARB_SRC) $(FMLBRG_SRC) $(CSRBRG_SRC) $(NORFLASH_SRC) $(BRAM_SRC) $(UART_SRC) $(SYSCTL_SRC) $(HPDMC_SRC) $(VGAFB_SRC) $(AC97_SRC) $(PFPU_SRC) $(TMU_SRC)
diff --git a/boards/milkymist-one/synthesis/Makefile.precision b/boards/milkymist-one/synthesis/Makefile.precision
new file mode 100644 (file)
index 0000000..7b3005a
--- /dev/null
@@ -0,0 +1,29 @@
+BOARD_DIR=../rtl
+CORES_DIR=../../../cores
+
+include ../sources.mak
+SRC=$(BOARD_SRC) $(CORES_SRC)
+
+all: build/system.bit
+
+build/system.ucf: common.ucf precision.ucf
+       cat common.ucf precision.ucf > build/system.ucf
+
+build/loadsources.tcl: $(SRC)
+       rm -f build/loadsources.tcl
+       for i in `echo $^`; do \
+           echo "add_input_file ../$$i" >> build/loadsources.tcl; \
+       done
+
+build/milkymist_impl/system.ucf: build/milkymist_impl/system.edf
+
+build/milkymist_impl/system.edf: build/loadsources.tcl build/system.ucf
+       rm -f build/milkymist.psp
+       rm -rf build/milkymist_impl
+       rm -rf build/milkymist_temp*
+       cd build && precision -shell -file ../precision.tcl
+
+build/system.ngd: build/milkymist_impl/system.edf
+       cd build && ngdbuild -uc milkymist_impl/system.ucf milkymist_impl/system.edf
+
+include common.mak
diff --git a/boards/milkymist-one/synthesis/Makefile.synplify b/boards/milkymist-one/synthesis/Makefile.synplify
new file mode 100644 (file)
index 0000000..78672fb
--- /dev/null
@@ -0,0 +1,34 @@
+BOARD_DIR=../rtl
+CORES_DIR=../../../cores
+
+include ../sources.mak
+SRC=$(BOARD_SRC) $(CORES_SRC)
+
+all: build/system.bit
+
+build/system.ucf: common.ucf synplify.ucf
+       cat common.ucf synplify.ucf > build/system.ucf
+
+build/loadsources.tcl: $(SRC)
+       rm -f build/loadsources.tcl
+       for i in `echo $^`; do \
+           echo "add_file -verilog -lib work \"../$$i\"" >> build/loadsources.tcl; \
+       done
+
+build/system.sdc: build/system.ucf
+       cd build && ucf2sdc -osdc system.sdc -iucf system.ucf
+
+build/synplicity.ucf: build/system.edf
+
+# YES ! Synplify is dirty enough to put all its bloated crapware in the script
+# directory rather than in the current directory. Work around this.
+build/synplify.prj: synplify.prj
+       cp synplify.prj build/synplify.prj
+
+build/system.edf: build/loadsources.tcl build/synplify.prj build/system.sdc
+       cd build && synplify_pro -batch synplify.prj
+
+build/system.ngd: build/system.edf build/synplicity.ucf
+       cd build && ngdbuild -uc synplicity.ucf system.edf
+
+include common.mak
diff --git a/boards/milkymist-one/synthesis/Makefile.xst b/boards/milkymist-one/synthesis/Makefile.xst
new file mode 100644 (file)
index 0000000..460182c
--- /dev/null
@@ -0,0 +1,25 @@
+BOARD_DIR=../rtl
+CORES_DIR=../../../cores
+
+include ../sources.mak
+SRC=$(BOARD_SRC) $(CORES_SRC)
+
+all: build/system.bit
+
+build/system.ucf: common.ucf xst.ucf
+       cat common.ucf xst.ucf > build/system.ucf
+
+build/system.prj: $(SRC)
+       rm -f build/system.prj
+       for i in `echo $^`; do \
+           echo "verilog work ../$$i" >> build/system.prj; \
+       done
+
+build/system.ngc: build/system.prj
+       cd build && xst -ifn ../system.xst
+
+build/system.ngd: build/system.ngc build/system.ucf
+       cd build && ngdbuild -uc system.ucf system.ngc
+
+include common.mak
+
diff --git a/boards/milkymist-one/synthesis/common.mak b/boards/milkymist-one/synthesis/common.mak
new file mode 100644 (file)
index 0000000..2da9cc3
--- /dev/null
@@ -0,0 +1,35 @@
+prom: build/system.mcs
+
+timing: build/system-routed.twr
+
+usage: build/system-routed.xdl
+       ../../../tools/xdlanalyze.pl build/system-routed.xdl 0
+
+load: build/system.bit
+       cd build && impact -batch ../load.cmd
+
+flash: build/system.mcs
+       cd build && impact -batch ../flash.cmd
+
+build/system.ncd: build/system.ngd
+       cd build && map -w system.ngd
+
+build/system-routed.ncd: build/system.ncd
+       cd build && par -ol high -w system.ncd system-routed.ncd
+
+build/system.bit: build/system-routed.ncd
+       cd build && bitgen -w system-routed.ncd system.bit
+
+build/system.mcs: build/system.bit
+       cd build && promgen -w -u 0 system
+
+build/system-routed.xdl: build/system-routed.ncd
+       cd build && xdl -ncd2xdl system-routed.ncd system-routed.xdl
+
+build/system-routed.twr: build/system-routed.ncd
+       cd build && trce -v 10 system-routed.ncd system.pcf
+
+clean:
+       rm -rf build/*
+
+.PHONY: prom timing usage load clean
diff --git a/boards/milkymist-one/synthesis/common.ucf b/boards/milkymist-one/synthesis/common.ucf
new file mode 100644 (file)
index 0000000..77accc0
--- /dev/null
@@ -0,0 +1,36 @@
+# ==== Clock input ====
+
+NET "clkin" TNM_NET = "clkin";
+TIMESPEC "TSclkin" = PERIOD "clkin" 12.5 ns HIGH 50% INPUT_JITTER 100 ps;
+
+# ==== Reset button ====
+
+# ==== Linear Flash ====
+
+# ==== UART ====
+
+# ==== SD card ====
+
+# ==== DDR SDRAM ====
+
+# ==== LEDs ====
+
+# ==== DIP switches ====
+
+# ==== VGA output ====
+
+# ==== AC97 ====
+NET "ac97_clk" TNM_NET = "clkac97";
+TIMESPEC "TSclkac97" = PERIOD "clkac97" 80 HIGH 50%;
+
+# ==== ISP1362 USB ====
+
+# ==== Ethernet ====
+
+# ==== Video input ====
+
+# ==== DMX512 ====
+
+# ==== MIDI ====
+
+# ==== IR ====
diff --git a/boards/milkymist-one/synthesis/flash.cmd b/boards/milkymist-one/synthesis/flash.cmd
new file mode 100644 (file)
index 0000000..ad0e8b8
--- /dev/null
@@ -0,0 +1,7 @@
+setMode -bscan
+setCable -p auto
+identify
+assignfile -p 2 -file system.mcs
+erase -p 2
+program -p 2
+quit
diff --git a/boards/milkymist-one/synthesis/ioffs.sdc b/boards/milkymist-one/synthesis/ioffs.sdc
new file mode 100644 (file)
index 0000000..9fd9ced
--- /dev/null
@@ -0,0 +1 @@
+define_global_attribute syn_useioff 1
diff --git a/boards/milkymist-one/synthesis/load.cmd b/boards/milkymist-one/synthesis/load.cmd
new file mode 100644 (file)
index 0000000..7c42f2b
--- /dev/null
@@ -0,0 +1,6 @@
+setMode -bscan
+setCable -p auto
+identify
+assignfile -p 3 -file system.bit
+program -p 3
+quit
diff --git a/boards/milkymist-one/synthesis/precision.tcl b/boards/milkymist-one/synthesis/precision.tcl
new file mode 100644 (file)
index 0000000..90b18f9
--- /dev/null
@@ -0,0 +1,20 @@
+new_project -name "milkymist" -folder "." -createimpl_name "milkymist_impl"
+
+setup_design -manufacturer "Xilinx" -family "VIRTEX-4" -part "4VLX25FF668" -speed "10"
+setup_design -retiming
+setup_design -max_fanout=10000
+setup_design -design "system"
+setup_design -basename "system"
+
+setup_design -compile_for_area=false
+setup_design -compile_for_timing=true
+
+source "loadsources.tcl"
+add_input_file "system.ucf" -exclude="false"
+add_input_file "../ioffs.sdc"
+
+compile
+synthesize
+
+save_impl
+close_project
diff --git a/boards/milkymist-one/synthesis/precision.ucf b/boards/milkymist-one/synthesis/precision.ucf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/boards/milkymist-one/synthesis/synplify.prj b/boards/milkymist-one/synthesis/synplify.prj
new file mode 100644 (file)
index 0000000..5082723
--- /dev/null
@@ -0,0 +1,30 @@
+set_option -vlog_std v2001
+
+source "loadsources.tcl"
+add_file "system.sdc"
+add_file "../ioffs.sdc"
+
+set_option -technology VIRTEX4
+set_option -part XC4VLX25
+set_option -package FF668
+set_option -speed_grade -10
+
+set_option -top_module system
+
+set_option -default_enum_encoding onehot
+set_option -symbolic_fsm_compiler 0
+set_option -resource_sharing 0
+
+set_option -fanout_limit 10000
+set_option -maxfan_hard 0
+set_option -retiming 1
+set_option -pipe 0
+set_option -disable_io_insertion 0
+
+set_option -include_path "../../../../cores/pfpu/rtl/;../../rtl/"
+
+set_option -write_verilog false
+
+set_option -write_apr_constraint true
+
+project -result_file "system.edf"
diff --git a/boards/milkymist-one/synthesis/synplify.ucf b/boards/milkymist-one/synthesis/synplify.ucf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/boards/milkymist-one/synthesis/system.xst b/boards/milkymist-one/synthesis/system.xst
new file mode 100644 (file)
index 0000000..0c1896a
--- /dev/null
@@ -0,0 +1,9 @@
+run
+-ifn system.prj
+-top system
+-ifmt MIXED
+-opt_mode SPEED
+-opt_level 1
+-ofn system.ngc
+-p xc6slx45-fgg484-2
+-register_balancing yes
diff --git a/boards/milkymist-one/synthesis/xst.ucf b/boards/milkymist-one/synthesis/xst.ucf
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/boards/milkymist-one/test/Makefile b/boards/milkymist-one/test/Makefile
new file mode 100644 (file)
index 0000000..d377f02
--- /dev/null
@@ -0,0 +1,28 @@
+TOPDIR?=$(shell pwd)
+BOARD_DIR=$(TOPDIR)/../rtl
+CORES_DIR=$(TOPDIR)/../../../cores
+
+include ../sources.mak
+
+SIM_SRC=$(TOPDIR)/system_tb.v $(CORES_DIR)/hpdmc_ddr32/test/iddr.v $(CORES_DIR)/hpdmc_ddr32/test/oddr.v $(CORES_DIR)/hpdmc_ddr32/test/idelay.v
+
+SRC=$(SIM_SRC) $(BOARD_SRC) $(CORES_SRC)
+
+all: isim
+
+cversim: $(SRC) bios.rom
+       cver +define+SIMULATION +incdir+$(BOARD_DIR) +incdir+$(CORES_DIR)/lm32/rtl $(SRC)
+
+isim: system bios.rom
+       ./system
+
+system: $(SRC)
+       iverilog -D SIMULATION -I $(BOARD_DIR) -I $(CORES_DIR)/lm32/rtl -o system $(SRC)
+
+bios.rom: ../../../software/bios/bios.bin
+       ../../../tools/bin2hex ../../../software/bios/bios.bin bios.rom 32768
+
+clean:
+       rm -f verilog.log system
+
+.PHONY: clean cversim isim
diff --git a/boards/milkymist-one/test/system_tb.v b/boards/milkymist-one/test/system_tb.v
new file mode 100644 (file)
index 0000000..ffc13bd
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`timescale 1ns/1ps
+
+module system_tb();
+
+reg sys_clk;
+reg resetin;
+
+initial sys_clk = 1'b0;
+always #5 sys_clk = ~sys_clk;
+
+initial begin
+       resetin = 1'b0;
+       #200 resetin = 1'b1;
+end
+
+wire [24:0] flash_adr;
+reg [31:0] flash_d;
+reg [31:0] flash[0:32767];
+initial $readmemh("bios.rom", flash);
+always @(flash_adr) #110 flash_d = flash[flash_adr/2];
+
+system system(
+       .clkin(sys_clk),
+       .resetin(resetin),
+
+       .flash_adr(flash_adr),
+       .flash_d(flash_d),
+
+       .uart_rxd(),
+       .uart_txd()
+);
+
+endmodule
diff --git a/boards/xilinx-ml401/rtl/ddram.v b/boards/xilinx-ml401/rtl/ddram.v
new file mode 100644 (file)
index 0000000..82cea81
--- /dev/null
@@ -0,0 +1,203 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module ddram #(
+       parameter csr_addr = 4'h0
+) (
+       input sys_clk,
+       input sys_rst,
+       
+       /* Configuration interface */
+       input [13:0] csr_a,
+       input csr_we,
+       input [31:0] csr_di,
+       output [31:0] csr_do,
+       
+       /* FML 4x64 interface */
+       input [`SDRAM_DEPTH-1:0] fml_adr,
+       input fml_stb,
+       input fml_we,
+       output fml_ack,
+       input [7:0] fml_sel,
+       input [63:0] fml_di,
+       output [63:0] fml_do,
+       
+       /* DDRAM pads */
+       output sdram_clk_p,
+       output sdram_clk_n,
+       input sdram_clk_fb,
+       output sdram_cke,
+       output sdram_cs_n,
+       output sdram_we_n,
+       output sdram_cas_n,
+       output sdram_ras_n,
+       output [12:0] sdram_adr,
+       output [1:0] sdram_ba,
+       output [3:0] sdram_dqm,
+       inout [31:0] sdram_dq,
+       inout [3:0] sdram_dqs
+);
+
+`ifndef SIMULATION
+wire dqs_clk;
+wire idelay_clk;
+wire idelay_clk_buffered;
+wire locked1;
+DCM_PS #(
+       .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(3),               // 1 to 32
+       .CLKFX_MULTIPLY(2),             // 2 to 32
+       
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKOUT_PHASE_SHIFT("NONE"),
+       .CLK_FEEDBACK("1X"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .FACTORY_JF(16'hF0F0),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("FALSE")
+) clkgen_sdram (
+       .CLK0(sdram_clk_p),
+       .CLK90(),
+       .CLK180(sdram_clk_n),
+       .CLK270(),
+
+       .CLK2X(idelay_clk),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(),
+       .CLKFX180(),
+       .LOCKED(locked1),
+       .CLKFB(sdram_clk_fb),
+       .CLKIN(sys_clk),
+       .RST(1'b0)
+);
+
+wire psen;
+wire psincdec;
+wire psdone;
+wire locked2;
+DCM_PS #(
+       .CLKDV_DIVIDE(1.5),             // 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+
+       .CLKFX_DIVIDE(3),               // 1 to 32
+       .CLKFX_MULTIPLY(2),             // 2 to 32
+       
+       .CLKIN_DIVIDE_BY_2("FALSE"),
+       .CLKIN_PERIOD(`CLOCK_PERIOD),
+       .CLKOUT_PHASE_SHIFT("VARIABLE_POSITIVE"),
+       .CLK_FEEDBACK("1X"),
+       .DESKEW_ADJUST("SYSTEM_SYNCHRONOUS"),
+       .DFS_FREQUENCY_MODE("LOW"),
+       .DLL_FREQUENCY_MODE("LOW"),
+       .DUTY_CYCLE_CORRECTION("TRUE"),
+       .FACTORY_JF(16'hF0F0),
+       .PHASE_SHIFT(0),
+       .STARTUP_WAIT("FALSE")
+) clkgen_dqs (
+       .CLK0(dqs_clk),
+       .CLK90(),
+       .CLK180(),
+       .CLK270(),
+
+       .CLK2X(),
+       .CLK2X180(),
+
+       .CLKDV(),
+       .CLKFX(),
+       .CLKFX180(),
+       .LOCKED(locked2),
+       .CLKFB(dqs_clk),
+       .CLKIN(sys_clk),
+       .RST(sys_rst),
+       
+       .PSEN(psen),
+       .PSINCDEC(psincdec),
+       .PSDONE(psdone),
+       .PSCLK(sys_clk)
+);
+
+BUFG idelay_clk_buffer(
+       .I(idelay_clk),
+       .O(idelay_clk_buffered)
+);
+
+IDELAYCTRL idelay_calibration(
+       .RDY(),
+       .REFCLK(idelay_clk_buffered),
+       .RST(1'b0)
+);
+`else
+reg dqs_clk;
+assign sdram_clk_p = sys_clk;
+assign sdram_clk_n = ~sys_clk;
+always @(sys_clk) #2.5 dqs_clk <= sys_clk;
+wire locked1 = 1'b1;
+wire locked2 = 1'b1;
+`endif
+
+hpdmc #(
+       .csr_addr(csr_addr),
+       .sdram_depth(`SDRAM_DEPTH),
+       .sdram_columndepth(`SDRAM_COLUMNDEPTH)
+) hpdmc (
+       .sys_clk(sys_clk),
+       .sys_clk_n(1'b0), /* < not needed on Virtex-4 */
+       .dqs_clk(dqs_clk),
+       .dqs_clk_n(1'b0), /* < not needed on Virtex-4 */
+       .sys_rst(sys_rst),
+
+       .csr_a(csr_a),
+       .csr_we(csr_we),
+       .csr_di(csr_di),
+       .csr_do(csr_do),
+       
+       .fml_adr(fml_adr),
+       .fml_stb(fml_stb),
+       .fml_we(fml_we),
+       .fml_ack(fml_ack),
+       .fml_sel(fml_sel),
+       .fml_di(fml_di),
+       .fml_do(fml_do),
+       
+       .sdram_cke(sdram_cke),
+       .sdram_cs_n(sdram_cs_n),
+       .sdram_we_n(sdram_we_n),
+       .sdram_cas_n(sdram_cas_n),
+       .sdram_ras_n(sdram_ras_n),
+       .sdram_dqm(sdram_dqm),
+       .sdram_adr(sdram_adr),
+       .sdram_ba(sdram_ba),
+       .sdram_dq(sdram_dq),
+       .sdram_dqs(sdram_dqs),
+       
+       .dqs_psen(psen),
+       .dqs_psincdec(psincdec),
+       .dqs_psdone(psdone),
+
+       .pll_stat({locked2, locked1})
+);
+
+endmodule
diff --git a/boards/xilinx-ml401/rtl/lm32_include.v b/boards/xilinx-ml401/rtl/lm32_include.v
new file mode 100644 (file)
index 0000000..4c20e9a
--- /dev/null
@@ -0,0 +1,359 @@
+// =============================================================================
+//                           COPYRIGHT NOTICE
+// Copyright 2006 (c) Lattice Semiconductor Corporation
+// ALL RIGHTS RESERVED
+// This confidential and proprietary software may be used only as authorised by
+// a licensing agreement from Lattice Semiconductor Corporation.
+// The entire notice above must be reproduced on all authorized copies and
+// copies may only be made to the extent permitted by a licensing agreement from
+// Lattice Semiconductor Corporation.
+//
+// Lattice Semiconductor Corporation        TEL : 1-800-Lattice (USA and Canada)
+// 5555 NE Moore Court                            408-826-6000 (other locations)
+// Hillsboro, OR 97124                     web  : http://www.latticesemi.com/
+// U.S.A                                   email: techsupport@latticesemi.com
+// =============================================================================/
+//                         FILE DETAILS
+// Project          : LatticeMico32
+// File             : lm32_include.v
+// Title            : CPU global macros
+// Version          : 6.1.17
+//                  : Initial Release
+// Version          : 7.0SP2, 3.0
+//                  : No Change
+// Version          : 3.1
+//                  : No Change
+// Version          : 3.2
+//                  : No Change
+// Version          : 3.3
+//                  : Support for extended configuration register
+// =============================================================================
+
+`ifdef LM32_INCLUDE_V
+`else
+`define LM32_INCLUDE_V
+
+//
+// Common configuration options
+//
+
+`define CFG_EBA_RESET 32'h0
+`define CFG_DEBA_RESET 32'h0
+
+`define CFG_PL_MULTIPLY_ENABLED
+`define CFG_PL_BARREL_SHIFT_ENABLED
+`define CFG_SIGN_EXTEND_ENABLED
+`define CFG_MC_DIVIDE_ENABLED
+
+// Bug in Mico32/Xst ?
+// CFG_ICACHE_ASSOCIATIVITY=2 => works fine
+// CFG_ICACHE_ASSOCIATIVITY=1 => disaster
+// TODO: try with the expensive synthesizers
+`define CFG_ICACHE_ENABLED
+`define CFG_ICACHE_ASSOCIATIVITY   2
+`define CFG_ICACHE_SETS            512
+`define CFG_ICACHE_BYTES_PER_LINE  16
+`define CFG_ICACHE_BASE_ADDRESS    32'h0
+`define CFG_ICACHE_LIMIT           32'h7fffffff
+
+`define CFG_DCACHE_ENABLED
+`define CFG_DCACHE_ASSOCIATIVITY   2
+`define CFG_DCACHE_SETS            512
+`define CFG_DCACHE_BYTES_PER_LINE  16
+`define CFG_DCACHE_BASE_ADDRESS    32'h0
+`define CFG_DCACHE_LIMIT           32'h7fffffff
+
+//
+// End of common configuration options
+//
+
+`ifdef TRUE
+`else
+`define TRUE    1'b1
+`define FALSE   1'b0
+`define TRUE_N  1'b0
+`define FALSE_N 1'b1
+`endif
+
+// Wishbone configuration
+`define CFG_IWB_ENABLED
+`define CFG_DWB_ENABLED
+
+// Data-path width
+`define LM32_WORD_WIDTH                 32
+`define LM32_WORD_RNG                   (`LM32_WORD_WIDTH-1):0
+`define LM32_SHIFT_WIDTH                5
+`define LM32_SHIFT_RNG                  (`LM32_SHIFT_WIDTH-1):0
+`define LM32_BYTE_SELECT_WIDTH          4
+`define LM32_BYTE_SELECT_RNG            (`LM32_BYTE_SELECT_WIDTH-1):0
+
+// Register file size
+`define LM32_REGISTERS                  32
+`define LM32_REG_IDX_WIDTH              5
+`define LM32_REG_IDX_RNG                (`LM32_REG_IDX_WIDTH-1):0
+
+// Standard register numbers
+`define LM32_RA_REG                     `LM32_REG_IDX_WIDTH'd29
+`define LM32_EA_REG                     `LM32_REG_IDX_WIDTH'd30
+`define LM32_BA_REG                     `LM32_REG_IDX_WIDTH'd31
+
+// Range of Program Counter. Two LSBs are always 0. 
+// `ifdef CFG_ICACHE_ENABLED
+// `define LM32_PC_WIDTH                   (clogb2(`CFG_ICACHE_LIMIT-`CFG_ICACHE_BASE_ADDRESS)-2)
+// `else
+// `ifdef CFG_IWB_ENABLED
+`define LM32_PC_WIDTH                   (`LM32_WORD_WIDTH-2)
+// `else
+// `define LM32_PC_WIDTH                   `LM32_IROM_ADDRESS_WIDTH
+// `endif
+// `endif
+`define LM32_PC_RNG                     (`LM32_PC_WIDTH+2-1):2
+
+// Range of an instruction
+`define LM32_INSTRUCTION_WIDTH          32
+`define LM32_INSTRUCTION_RNG            (`LM32_INSTRUCTION_WIDTH-1):0
+
+// Adder operation
+`define LM32_ADDER_OP_ADD               1'b0
+`define LM32_ADDER_OP_SUBTRACT          1'b1
+
+// Shift direction
+`define LM32_SHIFT_OP_RIGHT             1'b0
+`define LM32_SHIFT_OP_LEFT              1'b1
+
+// Currently always enabled
+`define CFG_BUS_ERRORS_ENABLED
+
+// Derive macro that indicates whether we have single-stepping or not
+`ifdef CFG_ROM_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`else
+`ifdef CFG_HW_DEBUG_ENABLED
+`define LM32_SINGLE_STEP_ENABLED
+`endif
+`endif
+
+// Derive macro that indicates whether JTAG interface is required
+`ifdef CFG_JTAG_UART_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_JTAG_ENABLED
+`else
+`endif
+`endif
+
+// Derive macro that indicates whether we have a barrel-shifter or not
+`ifdef CFG_PL_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else // CFG_PL_BARREL_SHIFT_ENABLED
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_BARREL_SHIFT_ENABLED
+`else
+`define LM32_NO_BARREL_SHIFT
+`endif
+`endif // CFG_PL_BARREL_SHIFT_ENABLED
+
+// Derive macro that indicates whether we have a multiplier or not
+`ifdef CFG_PL_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`else
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MULTIPLY_ENABLED
+`endif
+`endif
+
+// Derive a macro that indicates whether or not the multi-cycle arithmetic unit is required
+`ifdef CFG_MC_DIVIDE_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_MULTIPLY_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+`ifdef CFG_MC_BARREL_SHIFT_ENABLED
+`define LM32_MC_ARITHMETIC_ENABLED
+`endif
+
+// Derive macro that indicates if we are using an EBR register file
+`ifdef CFG_EBR_POSEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+`ifdef CFG_EBR_NEGEDGE_REGISTER_FILE
+`define LM32_EBR_REGISTER_FILE
+`endif
+
+// Revision number
+`define LM32_REVISION                   6'h02
+
+// Logical operations - Function encoded directly in instruction
+`define LM32_LOGIC_OP_RNG               3:0
+
+// Conditions for conditional branches
+`define LM32_CONDITION_WIDTH            3
+`define LM32_CONDITION_RNG              (`LM32_CONDITION_WIDTH-1):0
+`define LM32_CONDITION_E                3'b001
+`define LM32_CONDITION_G                3'b010
+`define LM32_CONDITION_GE               3'b011
+`define LM32_CONDITION_GEU              3'b100
+`define LM32_CONDITION_GU               3'b101
+`define LM32_CONDITION_NE               3'b111
+`define LM32_CONDITION_U1               3'b000
+`define LM32_CONDITION_U2               3'b110
+
+// Size of load or store instruction - Encoding corresponds to opcode
+`define LM32_SIZE_WIDTH                 2
+`define LM32_SIZE_RNG                   1:0
+`define LM32_SIZE_BYTE                  2'b00
+`define LM32_SIZE_HWORD                 2'b11
+`define LM32_SIZE_WORD                  2'b10
+`define LM32_ADDRESS_LSBS_WIDTH         2
+
+// Width and range of a CSR index
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_WIDTH                  5
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_WIDTH                  4
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`else
+`define LM32_CSR_WIDTH                  3
+`define LM32_CSR_RNG                    (`LM32_CSR_WIDTH-1):0
+`endif
+`endif
+
+// CSR indices
+`define LM32_CSR_IE                     `LM32_CSR_WIDTH'h0
+`define LM32_CSR_IM                     `LM32_CSR_WIDTH'h1
+`define LM32_CSR_IP                     `LM32_CSR_WIDTH'h2
+`define LM32_CSR_ICC                    `LM32_CSR_WIDTH'h3
+`define LM32_CSR_DCC                    `LM32_CSR_WIDTH'h4
+`define LM32_CSR_CC                     `LM32_CSR_WIDTH'h5
+`define LM32_CSR_CFG                    `LM32_CSR_WIDTH'h6
+`define LM32_CSR_EBA                    `LM32_CSR_WIDTH'h7
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_DC                     `LM32_CSR_WIDTH'h8
+`define LM32_CSR_DEBA                   `LM32_CSR_WIDTH'h9
+`endif
+`define LM32_CSR_CFG2                   `LM32_CSR_WIDTH'ha
+`ifdef CFG_JTAG_ENABLED
+`define LM32_CSR_JTX                    `LM32_CSR_WIDTH'he
+`define LM32_CSR_JRX                    `LM32_CSR_WIDTH'hf
+`endif
+`ifdef CFG_DEBUG_ENABLED
+`define LM32_CSR_BP0                    `LM32_CSR_WIDTH'h10
+`define LM32_CSR_BP1                    `LM32_CSR_WIDTH'h11
+`define LM32_CSR_BP2                    `LM32_CSR_WIDTH'h12
+`define LM32_CSR_BP3                    `LM32_CSR_WIDTH'h13
+`define LM32_CSR_WP0                    `LM32_CSR_WIDTH'h18
+`define LM32_CSR_WP1                    `LM32_CSR_WIDTH'h19
+`define LM32_CSR_WP2                    `LM32_CSR_WIDTH'h1a
+`define LM32_CSR_WP3                    `LM32_CSR_WIDTH'h1b
+`endif 
+
+// Values for WPC CSR
+`define LM32_WPC_C_RNG                  1:0
+`define LM32_WPC_C_DISABLED             2'b00
+`define LM32_WPC_C_READ                 2'b01
+`define LM32_WPC_C_WRITE                2'b10
+`define LM32_WPC_C_READ_WRITE           2'b11
+
+// Exception IDs
+`define LM32_EID_WIDTH                  3
+`define LM32_EID_RNG                    (`LM32_EID_WIDTH-1):0
+`define LM32_EID_RESET                  3'h0
+`define LM32_EID_BREAKPOINT             3'd1
+`define LM32_EID_INST_BUS_ERROR         3'h2
+`define LM32_EID_WATCHPOINT             3'd3
+`define LM32_EID_DATA_BUS_ERROR         3'h4
+`define LM32_EID_DIVIDE_BY_ZERO         3'h5
+`define LM32_EID_INTERRUPT              3'h6
+`define LM32_EID_SCALL                  3'h7
+
+// Pipeline result selection mux controls
+
+`define LM32_D_RESULT_SEL_0_RNG          0:0
+`define LM32_D_RESULT_SEL_0_REG_0        1'b0
+`define LM32_D_RESULT_SEL_0_NEXT_PC      1'b1
+
+`define LM32_D_RESULT_SEL_1_RNG          1:0
+`define LM32_D_RESULT_SEL_1_ZERO         2'b00
+`define LM32_D_RESULT_SEL_1_REG_1        2'b01
+`define LM32_D_RESULT_SEL_1_IMMEDIATE    2'b10
+
+`define LM32_USER_OPCODE_WIDTH           11
+`define LM32_USER_OPCODE_RNG             (`LM32_USER_OPCODE_WIDTH-1):0
+
+// Derive a macro to indicate if either of the caches are implemented
+`ifdef CFG_ICACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`else
+`ifdef CFG_DCACHE_ENABLED
+`define LM32_CACHE_ENABLED
+`endif
+`endif
+
+/////////////////////////////////////////////////////
+// Interrupts
+/////////////////////////////////////////////////////
+
+// Always enable interrupts
+`define CFG_INTERRUPTS_ENABLED
+
+// Currently this is fixed to 32 and should not be changed
+`define CFG_INTERRUPTS                  32
+`define LM32_INTERRUPT_WIDTH            `CFG_INTERRUPTS
+`define LM32_INTERRUPT_RNG              (`LM32_INTERRUPT_WIDTH-1):0
+
+/////////////////////////////////////////////////////
+// General
+/////////////////////////////////////////////////////
+
+// Sub-word range types
+`define LM32_BYTE_WIDTH                 8
+`define LM32_BYTE_RNG                   7:0
+`define LM32_HWORD_WIDTH                16
+`define LM32_HWORD_RNG                  15:0
+
+// Word sub-byte indicies
+`define LM32_BYTE_0_RNG                  7:0
+`define LM32_BYTE_1_RNG                  15:8
+`define LM32_BYTE_2_RNG                  23:16
+`define LM32_BYTE_3_RNG                  31:24
+
+// Word sub-halfword indices
+`define LM32_HWORD_0_RNG                 15:0
+`define LM32_HWORD_1_RNG                 31:16
+
+// Use a synchronous reset
+`define CFG_RESET_SENSITIVITY
+
+// V.T. Srce
+`define SRCE
+
+// Whether to include context registers for debug exceptions
+// in addition to standard exception handling registers
+// Bizarre - Removing this increases LUT count!
+`define CFG_DEBUG_EXCEPTIONS_ENABLED
+
+// Wishbone defines 
+// Refer to Wishbone System-on-Chip Interconnection Architecture
+// These should probably be moved to a Wishbone common file
+
+// Wishbone cycle types
+`define LM32_CTYPE_WIDTH                3
+`define LM32_CTYPE_RNG                  (`LM32_CTYPE_WIDTH-1):0
+`define LM32_CTYPE_CLASSIC              3'b000
+`define LM32_CTYPE_CONSTANT             3'b001
+`define LM32_CTYPE_INCREMENTING         3'b010
+`define LM32_CTYPE_END                  3'b111
+
+// Wishbone burst types
+`define LM32_BTYPE_WIDTH                2
+`define LM32_BTYPE_RNG                  (`LM32_BTYPE_WIDTH-1):0
+`define LM32_BTYPE_LINEAR               2'b00
+`define LM32_BTYPE_4_BEAT               2'b01
+`define LM32_BTYPE_8_BEAT               2'b10
+`define LM32_BTYPE_16_BEAT              2'b11
+
+`endif
diff --git a/boards/xilinx-ml401/rtl/setup.v b/boards/xilinx-ml401/rtl/setup.v
new file mode 100644 (file)
index 0000000..d57e4db
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+/*
+ * Enable or disable some cores.
+ * A complete system would have them all except the debug cores
+ * but when working on a specific part, it's very useful to be
+ * able to cut down synthesis times.
+ */
+
+`define ENABLE_ACEUSB
+`define ENABLE_AC97
+`define ENABLE_PFPU
+`define ENABLE_TMU
+
+/*
+ * System clock frequency in Hz.
+ */
+`define CLOCK_FREQUENCY 100000000
+
+/*
+ * System clock period in ns (must be in sync with CLOCK_FREQUENCY).
+ */
+`define CLOCK_PERIOD 10
+
+/*
+ * Default baudrate for the debug UART.
+ */
+`define BAUD_RATE 115200
+
+/*
+ * SDRAM depth, in bytes (the number of bits you need to address the whole
+ * array with byte granularity)
+ */
+`define SDRAM_DEPTH 26
+
+/*
+ * SDRAM column depth (the number of column address bits)
+ */
+`define SDRAM_COLUMNDEPTH 9
diff --git a/boards/xilinx-ml401/rtl/system.v b/boards/xilinx-ml401/rtl/system.v
new file mode 100644 (file)
index 0000000..cbd75fc
--- /dev/null
@@ -0,0 +1,998 @@
+/*
+ * Milkymist VJ SoC
+ * Copyright (C) 2007, 2008, 2009 Sebastien Bourdeauducq
+ *
+ * This program is free and excepted software; you can use it, redistribute it
+ * and/or modify it under the terms of the Exception General Public License as
+ * published by the Exception License Foundation; either version 2 of the
+ * License, 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 Exception General Public License for more
+ * details.
+ *
+ * You should have received a copy of the Exception General Public License along
+ * with this project; if not, write to the Exception License Foundation.
+ */
+
+`include "setup.v"
+
+module system(
+       input clkin,
+       input resetin,
+       
+       // Boot ROM
+       output [24:0] flash_adr,
+       input [31:0] flash_d,
+       output flash_byte_n,
+       output flash_oe_n,
+       output flash_we_n,
+       output flash_ce,
+       output flash_ac97_reset_n,
+       
+       output sram_clk,
+       output sram_ce_n,
+       output sram_zz,
+
+       // UART
+       input uart_rxd,
+       output uart_txd,
+
+       // DDR SDRAM
+       output sdram_clk_p,
+       output sdram_clk_n,
+       input sdram_clk_fb,
+       output sdram_cke,
+       output sdram_cs_n,
+       output sdram_we_n,
+       output sdram_cas_n,
+       output sdram_ras_n,
+       output [3:0] sdram_dqm,
+       output [12:0] sdram_adr,
+       output [1:0] sdram_ba,
+       inout [31:0] sdram_dq,
+       inout [3:0] sdram_dqs,
+       
+       // GPIO
+       input [4:0] btn,     // 5
+       output [4:0] btnled, //        5
+       output [3:0] led,    //        2 (2 LEDs for UART activity)
+       input [7:0] dipsw,   // 8
+       output lcd_e,        //        1
+       output lcd_rs,       //        1
+       output lcd_rw,       //        1
+       output [3:0] lcd_d,  //        4
+                            // 13     14
+
+       // VGA
+       output vga_psave_n,
+       output vga_hsync_n,
+       output vga_vsync_n,
+       output vga_sync_n,
+       output vga_blank_n,
+       output [7:0] vga_r,
+       output [7:0] vga_g,
+       output [7:0] vga_b,
+       output vga_clkout,
+       
+       // SystemACE/USB
+       output [6:0] aceusb_a,
+       inout [15:0] aceusb_d,
+       output aceusb_oe_n,
+       output aceusb_we_n,
+       input ace_clkin,
+       output ace_mpce_n,
+       input ace_mpirq,
+       output usb_cs_n,
+       output usb_hpi_reset_n,
+       input usb_hpi_int,
+       
+       // AC97
+       input ac97_clk,
+       input ac97_sin,
+       output ac97_sout,
+       output ac97_sync
+);
+
+//------------------------------------------------------------------
+// Clock and Reset Generation
+//------------------------------------------------------------------
+wire sys_clk;
+
+`ifndef SIMULATION
+BUFG clkbuf(
+       .I(clkin),
+       .O(sys_clk)
+);
+`else
+assign sys_clk = clkin;
+`endif
+
+`ifndef SIMULATION
+/* Synchronize the reset input */
+reg rst0;
+reg rst1;
+always @(posedge sys_clk) rst0 <= resetin;
+always @(posedge sys_clk) rst1 <= rst0;
+
+/* Debounce it (counter holds reset for 10.49ms),
+ * and generate power-on reset.
+ */
+reg [19:0] rst_debounce;
+reg sys_rst;
+initial rst_debounce <= 20'hFFFFF;
+initial sys_rst <= 1'b1;
+always @(posedge sys_clk) begin
+       if(~rst1) /* reset is active low */
+               rst_debounce <= 20'hFFFFF;
+       else if(rst_debounce != 20'd0)
+               rst_debounce <= rst_debounce - 20'd1;
+       sys_rst <= rst_debounce != 20'd0;
+end
+
+/*
+ * We must release the Flash reset before the system reset
+ * because the Flash needs some time to come out of reset
+ * and the CPU begins fetching instructions from it
+ * as soon as the system reset is released.
+ * From datasheet, minimum reset pulse width is 100ns
+ * and reset-to-read time is 150ns.
+ * On the ML401, the reset is combined with the AC97
+ * reset, which must be held for 1us.
+ * Here we use a 7-bit counter that holds reset
+ * for 1.28us and makes everybody happy.
+ */
+
+reg [7:0] flash_rstcounter;
+initial flash_rstcounter <= 8'd0;
+always @(posedge sys_clk) begin
+       if(~rst1 & ~sys_rst) /* ~sys_rst is for debouncing */
+               flash_rstcounter <= 8'd0;
+       else if(~flash_rstcounter[7])
+               flash_rstcounter <= flash_rstcounter + 8'd1;
+end
+
+assign flash_ac97_reset_n = flash_rstcounter[7];
+
+wire ac97_rst_n;
+assign ac97_rst_n = flash_rstcounter[7];
+
+`else
+wire sys_rst;
+assign sys_rst = ~resetin;
+`endif
+
+//------------------------------------------------------------------
+// Wishbone master wires
+//------------------------------------------------------------------
+wire [31:0]    cpuibus_adr,
+               cpudbus_adr,
+               ac97bus_adr,
+               pfpubus_adr,
+               tmumbus_adr;
+
+wire [2:0]     cpuibus_cti,
+               cpudbus_cti,
+               ac97bus_cti,
+               tmumbus_cti;
+
+wire [31:0]    cpuibus_dat_r,
+               cpudbus_dat_r,
+               cpudbus_dat_w,
+               ac97bus_dat_r,
+               ac97bus_dat_w,
+               pfpubus_dat_w,
+               tmumbus_dat_r;
+
+wire [3:0]     cpudbus_sel;
+
+wire           cpudbus_we,
+               ac97bus_we;
+
+wire           cpuibus_cyc,
+               cpudbus_cyc,
+               ac97bus_cyc,
+               pfpubus_cyc,
+               tmumbus_cyc;
+
+wire           cpuibus_stb,
+               cpudbus_stb,
+               ac97bus_stb,
+               pfpubus_stb,
+               tmumbus_stb;
+
+wire           cpuibus_ack,
+               cpudbus_ack,
+               ac97bus_ack,
+               tmumbus_ack,
+               pfpubus_ack;
+
+//------------------------------------------------------------------
+// Wishbone slave wires
+//------------------------------------------------------------------
+wire [31:0]    brg_adr,
+               norflash_adr,
+               bram_adr,
+               csrbrg_adr,
+               aceusb_adr;
+
+wire [2:0]     brg_cti,
+               bram_cti;
+
+wire [31:0]    brg_dat_r,
+               brg_dat_w,
+               norflash_dat_r,
+               bram_dat_r,
+               bram_dat_w,
+               csrbrg_dat_r,
+               csrbrg_dat_w,
+               aceusb_dat_r,
+               aceusb_dat_w;
+
+wire [3:0]     brg_sel,
+               bram_sel;
+
+wire           brg_we,
+               bram_we,
+               csrbrg_we,
+               aceusb_we;
+
+wire           brg_cyc,
+               norflash_cyc,
+               bram_cyc,
+               csrbrg_cyc,
+               aceusb_cyc;
+
+wire           brg_stb,
+               norflash_stb,
+               bram_stb,
+               csrbrg_stb,
+               aceusb_stb;
+
+wire           brg_ack,
+               norflash_ack,
+               bram_ack,
+               csrbrg_ack,
+               aceusb_ack;
+
+//---------------------------------------------------------------------------
+// Wishbone switch
+//---------------------------------------------------------------------------
+conbus #(
+       .s_addr_w(3),
+       .s0_addr(3'b000),       // norflash     0x00000000
+       .s1_addr(3'b001),       // bram         0x20000000
+       .s2_addr(3'b010),       // FML bridge   0x40000000
+       .s3_addr(3'b100),       // CSR bridge   0x80000000
+       .s4_addr(3'b101)        // aceusb       0xa0000000
+) conbus (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+
+       // Master 0
+       .m0_dat_i(32'hx),
+       .m0_dat_o(cpuibus_dat_r),
+       .m0_adr_i(cpuibus_adr),
+       .m0_cti_i(cpuibus_cti),
+       .m0_we_i(1'b0),
+       .m0_sel_i(4'hf),
+       .m0_cyc_i(cpuibus_cyc),
+       .m0_stb_i(cpuibus_stb),
+       .m0_ack_o(cpuibus_ack),
+       // Master 1
+       .m1_dat_i(cpudbus_dat_w),
+       .m1_dat_o(cpudbus_dat_r),
+       .m1_adr_i(cpudbus_adr),
+       .m1_cti_i(cpudbus_cti),
+       .m1_we_i(cpudbus_we),
+       .m1_sel_i(cpudbus_sel),
+       .m1_cyc_i(cpudbus_cyc),
+       .m1_stb_i(cpudbus_stb),
+       .m1_ack_o(cpudbus_ack),
+       // Master 2
+       .m2_dat_i(ac97bus_dat_w),
+       .m2_dat_o(ac97bus_dat_r),
+       .m2_adr_i(ac97bus_adr),
+       .m2_cti_i(ac97bus_cti),
+       .m2_we_i(ac97bus_we),
+       .m2_sel_i(4'hf),
+       .m2_cyc_i(ac97bus_cyc),
+       .m2_stb_i(ac97bus_stb),
+       .m2_ack_o(ac97bus_ack),
+       // Master 3
+       .m3_dat_i(pfpubus_dat_w),
+       .m3_dat_o(),
+       .m3_adr_i(pfpubus_adr),
+       .m3_cti_i(3'd0),
+       .m3_we_i(1'b1),
+       .m3_sel_i(4'hf),
+       .m3_cyc_i(pfpubus_cyc),
+       .m3_stb_i(pfpubus_stb),
+       .m3_ack_o(pfpubus_ack),
+       // Master 4
+       .m4_dat_i(32'bx),
+       .m4_dat_o(tmumbus_dat_r),
+       .m4_adr_i(tmumbus_adr),
+       .m4_cti_i(tmumbus_cti),
+       .m4_we_i(1'b0),
+       .m4_sel_i(4'hf),
+       .m4_cyc_i(tmumbus_cyc),
+       .m4_stb_i(tmumbus_stb),
+       .m4_ack_o(tmumbus_ack),
+
+       // Slave 0
+       .s0_dat_i(norflash_dat_r),
+       .s0_adr_o(norflash_adr),
+       .s0_cyc_o(norflash_cyc),
+       .s0_stb_o(norflash_stb),
+       .s0_ack_i(norflash_ack),
+       // Slave 1
+       .s1_dat_i(bram_dat_r),
+       .s1_dat_o(bram_dat_w),
+       .s1_adr_o(bram_adr),
+       .s1_cti_o(bram_cti),
+       .s1_sel_o(bram_sel),
+       .s1_we_o(bram_we),
+       .s1_cyc_o(bram_cyc),
+       .s1_stb_o(bram_stb),
+       .s1_ack_i(bram_ack),
+       // Slave 2
+       .s2_dat_i(brg_dat_r),
+       .s2_dat_o(brg_dat_w),
+       .s2_adr_o(brg_adr),
+       .s2_cti_o(brg_cti),
+       .s2_sel_o(brg_sel),
+       .s2_we_o(brg_we),
+       .s2_cyc_o(brg_cyc),
+       .s2_stb_o(brg_stb),
+       .s2_ack_i(brg_ack),
+       // Slave 3
+       .s3_dat_i(csrbrg_dat_r),
+       .s3_dat_o(csrbrg_dat_w),
+       .s3_adr_o(csrbrg_adr),
+       .s3_we_o(csrbrg_we),
+       .s3_cyc_o(csrbrg_cyc),
+       .s3_stb_o(csrbrg_stb),
+       .s3_ack_i(csrbrg_ack),
+       // Slave 4
+       .s4_dat_i(aceusb_dat_r),
+       .s4_dat_o(aceusb_dat_w),
+       .s4_adr_o(aceusb_adr),
+       .s4_we_o(aceusb_we),
+       .s4_cyc_o(aceusb_cyc),
+       .s4_stb_o(aceusb_stb),
+       .s4_ack_i(aceusb_ack)
+);
+
+//------------------------------------------------------------------
+// CSR bus
+//------------------------------------------------------------------
+wire [13:0]    csr_a;
+wire           csr_we;
+wire [31:0]    csr_dw;
+wire [31:0]    csr_dr_uart,
+               csr_dr_sysctl,
+               csr_dr_hpdmc,
+               csr_dr_vga,
+               csr_dr_ac97,
+               csr_dr_pfpu,
+               csr_dr_tmu;
+
+//------------------------------------------------------------------
+// FML master wires
+//------------------------------------------------------------------
+wire [`SDRAM_DEPTH-1:0]        fml_brg_adr,
+                       fml_vga_adr,
+                       fml_tmur_adr,
+                       fml_tmuw_adr;
+
+wire                   fml_brg_stb,
+                       fml_vga_stb,
+                       fml_tmur_stb,
+                       fml_tmuw_stb;
+
+wire                   fml_brg_we;
+
+wire                   fml_brg_ack,
+                       fml_vga_ack,
+                       fml_tmur_ack,
+                       fml_tmuw_ack;
+
+wire [7:0]             fml_brg_sel,
+                       fml_tmuw_sel;
+
+wire [63:0]            fml_brg_dw,
+                       fml_tmuw_dw;
+
+wire [63:0]            fml_brg_dr,
+                       fml_vga_dr,
+                       fml_tmur_dr;
+
+//------------------------------------------------------------------
+// FML slave wires, to memory controller
+//------------------------------------------------------------------
+wire [`SDRAM_DEPTH-1:0] fml_adr;
+wire fml_stb;
+wire fml_we;
+wire fml_ack;
+wire [7:0] fml_sel;
+wire [63:0] fml_dw;
+wire [63:0] fml_dr;
+
+//---------------------------------------------------------------------------
+// FML arbiter
+//---------------------------------------------------------------------------
+fmlarb #(
+       .fml_depth(`SDRAM_DEPTH)
+) fmlarb (
+       .sys_clk(sys_clk),
+       .sys_rst(sys_rst),
+       
+       /* VGA framebuffer (high priority) */
+       .m0_adr(fml_vga_adr),
+       .m0_stb(fml_vga_stb),
+       .m0_we(1'b0),
+       .m0_ack(fml_vga_ack),
+       .m0_sel(8'bx),
+       .m0_di(64'bx),
+       .m0_do(fml_vga_dr),
+       
+       /* WISHBONE bridge */
+       .m1_adr(fml_brg_adr),
+       .m1_stb(fml_brg_stb),
+       .m1_we(fml_brg_we),
+       .m1_ack(fml_brg_ack),
+       .m1_sel(fml_brg_sel),
+       .m1_di(fml_brg_dw),
+       .m1_do(fml_brg_dr),
+       
+       /* TMU, pixel read DMA */
+       .m2_adr(fml_tmur_adr),
+       .m2_stb(fml_tmur_stb),
+       .m2_we(1'b0),
+       .m2_ack(fml_tmur_ack),
+       .m2_sel(8'bx),
+       .m2_di(64'bx),
+       .m2_do(fml_tmur_dr),
+       
+       /* TMU, pixel write DMA */
+       .m3_adr(fml_tmuw_adr),
+       .m3_stb(fml_tmuw_stb),
+       .m3_we(1'b1),
+       .m3_ack(fml_tmuw_ack),
+