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

Subversion Repositories risc16f84

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /risc16f84
    from Rev 8 to Rev 9
    Reverse comparison

Rev 8 → Rev 9

/web_uploads/temp.sh File deleted
web_uploads/oc_cvs_checkin.sh Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: web_uploads/svn_checkin.sh =================================================================== --- web_uploads/svn_checkin.sh (revision 8) +++ web_uploads/svn_checkin.sh (nonexistent) @@ -1,2834 +0,0 @@ -#!/bin/bash -# AUTOMATICALLY GENERATED SCRIPT -# Scans the cores directory, excludes the projects and subdirectories -# listed below, and generates a script which checks in all of the -# remaining files to the SVN repository -# This should be run and the output piped to a new file something like: -# ./oc_cvs_checkin.sh > checkin_script.sh -# and then probably the execute permission enabled on checkin_script.sh -# Encapsulate the checkins inside this loop we can -# break out of in the event of a problem checking -# one of them in - -# Function to check the return value of each SVN checkin -function check_svn_return_value { if [ $? -gt 1 ]; then echo "Error during checkins - aborting script."; exit 1; fi -} -ALL_DONE="0" -while [ $ALL_DONE = 0 ]; do - pushd "100baset" - popd - pushd "1394ohci" - popd - pushd "2dcoprocessor" - popd - pushd "395_vgs" - popd - pushd "3des_vhdl" - popd - pushd "4bitprocesor" - popd - pushd "6502vhdl" - popd - pushd "68hc05" - popd - pushd "68hc08" - popd - pushd "8051_serial" - popd - pushd "8051_to_ahb_interface" - popd - pushd "8b10b_encdec" - svn import -m "Import from OC" "8b10b_encdec_v1d0.pdf" "http://orsoc.se:4488/svn/8b10b_encdec/8b10b_encdec_v1d0.pdf" - check_svn_return_value - svn import -m "Import from OC" "8b10_dec.vhd" "http://orsoc.se:4488/svn/8b10b_encdec/8b10_dec.vhd" - check_svn_return_value - svn import -m "Import from OC" "8b10_enc.vhd" "http://orsoc.se:4488/svn/8b10b_encdec/8b10_enc.vhd" - check_svn_return_value - svn import -m "Import from OC" "enc_8b10b_TB.vhd" "http://orsoc.se:4488/svn/8b10b_encdec/enc_8b10b_TB.vhd" - check_svn_return_value - svn import -m "Import from OC" "encdec_8b10b_TB.vhd" "http://orsoc.se:4488/svn/8b10b_encdec/encdec_8b10b_TB.vhd" - check_svn_return_value - popd - pushd "8bituartvhdl" - popd - pushd "aacencode" - popd - pushd "acxbrd" - svn import -m "Import from OC" "jopcore.pdf" "http://orsoc.se:4488/svn/acxbrd/jopcore.pdf" - check_svn_return_value - popd - pushd "adaptivefilter" - popd - pushd "adaptive_lms_equalizer" - popd - pushd "adder" - svn import -m "Import from OC" "high-speed-adder-128bits-opencore.v" "http://orsoc.se:4488/svn/adder/high-speed-adder-128bits-opencore.v" - check_svn_return_value - popd - pushd "ae18" - popd - pushd "aemb" - popd - pushd "aes128" - popd - pushd "aes_128_192_256" - svn import -m "Import from OC" "aes_dec.vhdl" "http://orsoc.se:4488/svn/aes_128_192_256/aes_dec.vhdl" - check_svn_return_value - svn import -m "Import from OC" "aes_enc.vhdl" "http://orsoc.se:4488/svn/aes_128_192_256/aes_enc.vhdl" - check_svn_return_value - svn import -m "Import from OC" "aes_pkg.vhdl" "http://orsoc.se:4488/svn/aes_128_192_256/aes_pkg.vhdl" - check_svn_return_value - svn import -m "Import from OC" "aes_top.pdf" "http://orsoc.se:4488/svn/aes_128_192_256/aes_top.pdf" - check_svn_return_value - svn import -m "Import from OC" "key_expansion.vhdl" "http://orsoc.se:4488/svn/aes_128_192_256/key_expansion.vhdl" - check_svn_return_value - popd - pushd "aes_core" - popd - pushd "aes_crypto_core" - popd - pushd "aes_fekete256" - svn import -m "Import from OC" "AES.ZIP" "http://orsoc.se:4488/svn/aes_fekete256/AES.ZIP" - check_svn_return_value - popd - pushd "ahb2wishbone" - popd - pushd "ahbahb" - popd - pushd "ahb_arbiter" - popd - pushd "ahb_system_generator" - popd - pushd "all_digital_fm_receiver" - svn import -m "Import from OC" "architecture.png" "http://orsoc.se:4488/svn/all_digital_fm_receiver/architecture.png" - check_svn_return_value - svn import -m "Import from OC" "fmsquare.jpg" "http://orsoc.se:4488/svn/all_digital_fm_receiver/fmsquare.jpg" - check_svn_return_value - svn import -m "Import from OC" "fmtriangular.jpg" "http://orsoc.se:4488/svn/all_digital_fm_receiver/fmtriangular.jpg" - check_svn_return_value - popd - pushd "alternascope" - svn import -m "Import from OC" "Alternascope_Sept15_2005.rar" "http://orsoc.se:4488/svn/alternascope/Alternascope_Sept15_2005.rar" - check_svn_return_value - svn import -m "Import from OC" "BlockDiagram_small.GIF" "http://orsoc.se:4488/svn/alternascope/BlockDiagram_small.GIF" - check_svn_return_value - svn import -m "Import from OC" "OpenCores.JPG" "http://orsoc.se:4488/svn/alternascope/OpenCores.JPG" - check_svn_return_value - popd - pushd "alu_with_selectable_inputs_and_outputs" - popd - pushd "amba_compliant_fifo_core" - popd - pushd "ambasdram" - popd - pushd "aquarius" - svn import -m "Import from OC" "aquarius.files" "http://orsoc.se:4488/svn/aquarius/aquarius.files" - check_svn_return_value - svn import -m "Import from OC" "aquarius.html" "http://orsoc.se:4488/svn/aquarius/aquarius.html" - check_svn_return_value - svn import -m "Import from OC" "cpublock.gif" "http://orsoc.se:4488/svn/aquarius/cpublock.gif" - check_svn_return_value - svn import -m "Import from OC" "fpgaboard.gif" "http://orsoc.se:4488/svn/aquarius/fpgaboard.gif" - check_svn_return_value - svn import -m "Import from OC" "rtl.gif" "http://orsoc.se:4488/svn/aquarius/rtl.gif" - check_svn_return_value - popd - pushd "aspida" - svn import -m "Import from OC" "aspida_dlx_core.tar.gz" "http://orsoc.se:4488/svn/aspida/aspida_dlx_core.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "aspida.gif" "http://orsoc.se:4488/svn/aspida/aspida.gif" - check_svn_return_value - svn import -m "Import from OC" "faq.tar.gz" "http://orsoc.se:4488/svn/aspida/faq.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "thumb_aspida.gif" "http://orsoc.se:4488/svn/aspida/thumb_aspida.gif" - check_svn_return_value - popd - pushd "asynchronous_clocks" - popd - pushd "ata" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/ata/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "preliminary_ata_core.pdf" "http://orsoc.se:4488/svn/ata/preliminary_ata_core.pdf" - check_svn_return_value - popd - pushd "auto_baud" - svn import -m "Import from OC" "auto_baud.v" "http://orsoc.se:4488/svn/auto_baud/auto_baud.v" - check_svn_return_value - svn import -m "Import from OC" "auto_baud_with_tracking.v" "http://orsoc.se:4488/svn/auto_baud/auto_baud_with_tracking.v" - check_svn_return_value - svn import -m "Import from OC" "b13_safe_09_17_02.zip" "http://orsoc.se:4488/svn/auto_baud/b13_safe_09_17_02.zip" - check_svn_return_value - popd - pushd "a_vhd_16550_uart" - svn import -m "Import from OC" "gh_uart_16550_101307.zip" "http://orsoc.se:4488/svn/a_vhd_16550_uart/gh_uart_16550_101307.zip" - check_svn_return_value - svn import -m "Import from OC" "vhdl_16550_uart_2_2.pdf" "http://orsoc.se:4488/svn/a_vhd_16550_uart/vhdl_16550_uart_2_2.pdf" - check_svn_return_value - popd - pushd "a_vhdl_can_controller" - svn import -m "Import from OC" "can_parts.zip" "http://orsoc.se:4488/svn/a_vhdl_can_controller/can_parts.zip" - check_svn_return_value - popd - pushd "avr_core" - svn import -m "Import from OC" "AVR_Core8F.tar.gz" "http://orsoc.se:4488/svn/avr_core/AVR_Core8F.tar.gz" - check_svn_return_value - popd - pushd "ax8" - popd - pushd "basicdes" - popd - pushd "basicrsa" - popd - pushd "baudgen" - svn import -m "Import from OC" "am_baud_rate_gen.vhd" "http://orsoc.se:4488/svn/baudgen/am_baud_rate_gen.vhd" - check_svn_return_value - popd - pushd "baud_select_uart" - popd - pushd "bc6502" - popd - pushd "big_counter" - popd - pushd "binary_to_bcd" - svn import -m "Import from OC" "b17_test_environment.zip" "http://orsoc.se:4488/svn/binary_to_bcd/b17_test_environment.zip" - check_svn_return_value - svn import -m "Import from OC" "bcd_to_binary.v" "http://orsoc.se:4488/svn/binary_to_bcd/bcd_to_binary.v" - check_svn_return_value - svn import -m "Import from OC" "binary_to_bcd.v" "http://orsoc.se:4488/svn/binary_to_bcd/binary_to_bcd.v" - check_svn_return_value - popd - pushd "bips" - popd - pushd "biquad" - svn import -m "Import from OC" "biquad.pdf" "http://orsoc.se:4488/svn/biquad/biquad.pdf" - check_svn_return_value - svn import -m "Import from OC" "biquad.v" "http://orsoc.se:4488/svn/biquad/biquad.v" - check_svn_return_value - svn import -m "Import from OC" "bqmain.v" "http://orsoc.se:4488/svn/biquad/bqmain.v" - check_svn_return_value - svn import -m "Import from OC" "bquad_blk.gif" "http://orsoc.se:4488/svn/biquad/bquad_blk.gif" - check_svn_return_value - svn import -m "Import from OC" "coefio.v" "http://orsoc.se:4488/svn/biquad/coefio.v" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/biquad/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "multa.v" "http://orsoc.se:4488/svn/biquad/multa.v" - check_svn_return_value - svn import -m "Import from OC" "multb.v" "http://orsoc.se:4488/svn/biquad/multb.v" - check_svn_return_value - svn import -m "Import from OC" "vsource.html" "http://orsoc.se:4488/svn/biquad/vsource.html" - check_svn_return_value - popd - pushd "bluespec-80211atransmitter" - popd - pushd "bluespec-bsp" - popd - pushd "bluespec-convolutional-codec" - popd - pushd "bluespec-fft" - popd - pushd "bluespec-galoisfield" - popd - pushd "bluespec-h264" - svn import -m "Import from OC" "h264.pdf" "http://orsoc.se:4488/svn/bluespec-h264/h264.pdf" - check_svn_return_value - svn import -m "Import from OC" "memo497.pdf" "http://orsoc.se:4488/svn/bluespec-h264/memo497.pdf" - check_svn_return_value - popd - pushd "bluespec-ofdm" - popd - pushd "bluespec-reedsolomon" - popd - pushd "bluetooth" - svn import -m "Import from OC" "BBspec.shtml" "http://orsoc.se:4488/svn/bluetooth/BBspec.shtml" - check_svn_return_value - svn import -m "Import from OC" "Bluetooth_01b.zip" "http://orsoc.se:4488/svn/bluetooth/Bluetooth_01b.zip" - check_svn_return_value - svn import -m "Import from OC" "Bluetooth_02b.zip" "http://orsoc.se:4488/svn/bluetooth/Bluetooth_02b.zip" - check_svn_return_value - svn import -m "Import from OC" "Bluetooth.zip" "http://orsoc.se:4488/svn/bluetooth/Bluetooth.zip" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/bluetooth/index.shtml" - check_svn_return_value - popd - pushd "bluetooth_ver" - popd - pushd "board" - svn import -m "Import from OC" "blockdiagram.jpg" "http://orsoc.se:4488/svn/board/blockdiagram.jpg" - check_svn_return_value - svn import -m "Import from OC" "boardflow.jpg" "http://orsoc.se:4488/svn/board/boardflow.jpg" - check_svn_return_value - svn import -m "Import from OC" "board.shtml" "http://orsoc.se:4488/svn/board/board.shtml" - check_svn_return_value - svn import -m "Import from OC" "coreflow.jpg" "http://orsoc.se:4488/svn/board/coreflow.jpg" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/board/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "led.jpg" "http://orsoc.se:4488/svn/board/led.jpg" - check_svn_return_value - svn import -m "Import from OC" "matrics.gif" "http://orsoc.se:4488/svn/board/matrics.gif" - check_svn_return_value - svn import -m "Import from OC" "power_led.gif" "http://orsoc.se:4488/svn/board/power_led.gif" - check_svn_return_value - svn import -m "Import from OC" "XC95108-PC84.sym" "http://orsoc.se:4488/svn/board/XC95108-PC84.sym" - check_svn_return_value - popd - pushd "boundaries" - popd - pushd "brisc" - popd - pushd "butterfly" - popd - pushd "c16" - popd - pushd "cable" - popd - pushd "cachemodel" - popd - pushd "cam" - popd - pushd "camellia" - svn import -m "Import from OC" "camellia_core_tb.vhd" "http://orsoc.se:4488/svn/camellia/camellia_core_tb.vhd" - check_svn_return_value - svn import -m "Import from OC" "CAMELLIA_CORE.vhd" "http://orsoc.se:4488/svn/camellia/CAMELLIA_CORE.vhd" - check_svn_return_value - svn import -m "Import from OC" "Camellia_doc.pdf" "http://orsoc.se:4488/svn/camellia/Camellia_doc.pdf" - check_svn_return_value - popd - pushd "camellia-vhdl" - popd - pushd "can" - svn import -m "Import from OC" "CAN.gif" "http://orsoc.se:4488/svn/can/CAN.gif" - check_svn_return_value - popd - pushd "cas" - popd - pushd "cdma" - popd - pushd "cereon" - svn import -m "Import from OC" "AssemblerReference.pdf" "http://orsoc.se:4488/svn/cereon/AssemblerReference.pdf" - check_svn_return_value - svn import -m "Import from OC" "CereonArchitectureReferenceManual_Version1.pdf" "http://orsoc.se:4488/svn/cereon/CereonArchitectureReferenceManual_Version1.pdf" - check_svn_return_value - svn import -m "Import from OC" "ProcedureCallingStandards.pdf" "http://orsoc.se:4488/svn/cereon/ProcedureCallingStandards.pdf" - check_svn_return_value - svn import -m "Import from OC" "ProcessorIdentificationScheme.pdf" "http://orsoc.se:4488/svn/cereon/ProcessorIdentificationScheme.pdf" - check_svn_return_value - popd - pushd "cf_cordic" - svn import -m "Import from OC" "cf_cordic.tgz" "http://orsoc.se:4488/svn/cf_cordic/cf_cordic.tgz" - check_svn_return_value - popd - pushd "cf_fft" - svn import -m "Import from OC" "cf_fft_test_large.tgz" "http://orsoc.se:4488/svn/cf_fft/cf_fft_test_large.tgz" - check_svn_return_value - svn import -m "Import from OC" "cf_fft_test.tgz" "http://orsoc.se:4488/svn/cf_fft/cf_fft_test.tgz" - check_svn_return_value - svn import -m "Import from OC" "cf_fft.tgz" "http://orsoc.se:4488/svn/cf_fft/cf_fft.tgz" - check_svn_return_value - popd - pushd "cf_fir" - svn import -m "Import from OC" "cf_fir.tgz" "http://orsoc.se:4488/svn/cf_fir/cf_fir.tgz" - check_svn_return_value - popd - pushd "cf_fp_mul" - svn import -m "Import from OC" "cf_fp_mul.tgz" "http://orsoc.se:4488/svn/cf_fp_mul/cf_fp_mul.tgz" - check_svn_return_value - popd - pushd "cfft" - popd - pushd "cfinterface" - popd - pushd "cf_interleaver" - svn import -m "Import from OC" "cf_interleaver.tgz" "http://orsoc.se:4488/svn/cf_interleaver/cf_interleaver.tgz" - check_svn_return_value - popd - pushd "cf_ldpc" - svn import -m "Import from OC" "cf_ldpc.tgz" "http://orsoc.se:4488/svn/cf_ldpc/cf_ldpc.tgz" - check_svn_return_value - popd - pushd "cf_rca" - svn import -m "Import from OC" "cf_rca.tgz" "http://orsoc.se:4488/svn/cf_rca/cf_rca.tgz" - check_svn_return_value - svn import -m "Import from OC" "rca_tile.png" "http://orsoc.se:4488/svn/cf_rca/rca_tile.png" - check_svn_return_value - popd - pushd "cf_ssp" - svn import -m "Import from OC" "cf_ssp.tgz" "http://orsoc.se:4488/svn/cf_ssp/cf_ssp.tgz" - check_svn_return_value - svn import -m "Import from OC" "ssp_cordic.c" "http://orsoc.se:4488/svn/cf_ssp/ssp_cordic.c" - check_svn_return_value - svn import -m "Import from OC" "ssp_first_order.c" "http://orsoc.se:4488/svn/cf_ssp/ssp_first_order.c" - check_svn_return_value - popd - pushd "cia" - popd - pushd "claw" - popd - pushd "clocklessalu" - popd - pushd "cmpct" - popd - pushd "c-nit_soc" - popd - pushd "color_converter" - popd - pushd "constellation_vga" - popd - pushd "const_encoder" - svn import -m "Import from OC" "Const_enc_oc.doc" "http://orsoc.se:4488/svn/const_encoder/Const_enc_oc.doc" - check_svn_return_value - svn import -m "Import from OC" "const_enc.vhd" "http://orsoc.se:4488/svn/const_encoder/const_enc.vhd" - check_svn_return_value - popd - pushd "cordic" - svn import -m "Import from OC" "cordic.pdf" "http://orsoc.se:4488/svn/cordic/cordic.pdf" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/cordic/index.shtml" - check_svn_return_value - popd - pushd "core_arm" - popd - pushd "cowgirl" - popd - pushd "cpu6502_true_cycle" - popd - pushd "cpu65c02_true_cycle" - popd - pushd "cpu8080" - popd - pushd "cpugen" - svn import -m "Import from OC" "cpugen.jpg" "http://orsoc.se:4488/svn/cpugen/cpugen.jpg" - check_svn_return_value - popd - pushd "cryptopan_core" - popd - pushd "cryptosorter" - svn import -m "Import from OC" "cryptosorter.pdf" "http://orsoc.se:4488/svn/cryptosorter/cryptosorter.pdf" - check_svn_return_value - popd - pushd "csa" - popd - pushd "dallas_one-wire" - popd - pushd "dct" - svn import -m "Import from OC" "dct.shtml" "http://orsoc.se:4488/svn/dct/dct.shtml" - check_svn_return_value - svn import -m "Import from OC" "dct.zip" "http://orsoc.se:4488/svn/dct/dct.zip" - check_svn_return_value - svn import -m "Import from OC" "htmlbook.shtml" "http://orsoc.se:4488/svn/dct/htmlbook.shtml" - check_svn_return_value - svn import -m "Import from OC" "modexp.shtml" "http://orsoc.se:4488/svn/dct/modexp.shtml" - check_svn_return_value - popd - pushd "ddr_sdr" - svn import -m "Import from OC" "ddr_sdr_V1_0.zip" "http://orsoc.se:4488/svn/ddr_sdr/ddr_sdr_V1_0.zip" - check_svn_return_value - svn import -m "Import from OC" "ddr_sdr_V1_1.zip" "http://orsoc.se:4488/svn/ddr_sdr/ddr_sdr_V1_1.zip" - check_svn_return_value - svn import -m "Import from OC" "doc" "http://orsoc.se:4488/svn/ddr_sdr/doc" - check_svn_return_value - svn import -m "Import from OC" "LICENSE.dat" "http://orsoc.se:4488/svn/ddr_sdr/LICENSE.dat" - check_svn_return_value - svn import -m "Import from OC" "vhdl" "http://orsoc.se:4488/svn/ddr_sdr/vhdl" - check_svn_return_value - popd - pushd "ddsgen" - popd - pushd "decoder" - svn import -m "Import from OC" "mp3_decoder.zip" "http://orsoc.se:4488/svn/decoder/mp3_decoder.zip" - check_svn_return_value - popd - pushd "deflatecore" - popd - pushd "des" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/des/index.shtml" - check_svn_return_value - popd - pushd "design_dsp320tmsc10_with_vhdl" - popd - pushd "dfp" - svn import -m "Import from OC" "dfp.gif" "http://orsoc.se:4488/svn/dfp/dfp.gif" - check_svn_return_value - svn import -m "Import from OC" "DFPV10.zip" "http://orsoc.se:4488/svn/dfp/DFPV10.zip" - check_svn_return_value - svn import -m "Import from OC" "V3.zip" "http://orsoc.se:4488/svn/dfp/V3.zip" - check_svn_return_value - popd - pushd "digifilter" - popd - pushd "diogenes" - svn import -m "Import from OC" "diogenes.tar.bz2" "http://orsoc.se:4488/svn/diogenes/diogenes.tar.bz2" - check_svn_return_value - popd - pushd "dirac" - popd - pushd "djpeg" - popd - pushd "dmacontroller" - popd - pushd "dmt_tx" - popd - pushd "dram" - svn import -m "Import from OC" "dram.html" "http://orsoc.se:4488/svn/dram/dram.html" - check_svn_return_value - svn import -m "Import from OC" "dram.shtml" "http://orsoc.se:4488/svn/dram/dram.shtml" - check_svn_return_value - popd - pushd "dualspartainc6713cpci" - svn import -m "Import from OC" "6713_CPU.pdf" "http://orsoc.se:4488/svn/dualspartainc6713cpci/6713_CPU.pdf" - check_svn_return_value - svn import -m "Import from OC" "BotLayer.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/BotLayer.jpg" - check_svn_return_value - svn import -m "Import from OC" "DSP_Front.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/DSP_Front.jpg" - check_svn_return_value - svn import -m "Import from OC" "DSP_near_done_tiny.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/DSP_near_done_tiny.jpg" - check_svn_return_value - svn import -m "Import from OC" "Mid1Layer.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/Mid1Layer.jpg" - check_svn_return_value - svn import -m "Import from OC" "Mid2Layer.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/Mid2Layer.jpg" - check_svn_return_value - svn import -m "Import from OC" "SystemDiagram.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/SystemDiagram.jpg" - check_svn_return_value - svn import -m "Import from OC" "TopLayer.jpg" "http://orsoc.se:4488/svn/dualspartainc6713cpci/TopLayer.jpg" - check_svn_return_value - popd - pushd "dwt2d" - svn import -m "Import from OC" "DIPC1.zip" "http://orsoc.se:4488/svn/dwt2d/DIPC1.zip" - check_svn_return_value - popd - pushd "e123mux" - svn import -m "Import from OC" "Block_Diagram.jpg" "http://orsoc.se:4488/svn/e123mux/Block_Diagram.jpg" - check_svn_return_value - svn import -m "Import from OC" "E123MUX_Core.pdf" "http://orsoc.se:4488/svn/e123mux/E123MUX_Core.pdf" - check_svn_return_value - popd - pushd "e1framer" - popd - pushd "e1framerdeframer" - svn import -m "Import from OC" "e1_framer.zip" "http://orsoc.se:4488/svn/e1framerdeframer/e1_framer.zip" - check_svn_return_value - svn import -m "Import from OC" "fas_insert.vhd" "http://orsoc.se:4488/svn/e1framerdeframer/fas_insert.vhd" - check_svn_return_value - popd - pushd "edatools" - popd - pushd "elevator" - popd - pushd "elphel_353" - popd - pushd "embedded_risc" - svn import -m "Import from OC" "Block_Diagram" "http://orsoc.se:4488/svn/embedded_risc/Block_Diagram" - check_svn_return_value - popd - pushd "embed_z8" - popd - pushd "epp" - svn import -m "Import from OC" "epp.jpg" "http://orsoc.se:4488/svn/epp/epp.jpg" - check_svn_return_value - popd - pushd "epp-interface-v" - popd - pushd "epp-to-wishbone" - popd - pushd "erp" - svn import -m "Import from OC" "ERPTechnicalReport4.pdf" "http://orsoc.se:4488/svn/erp/ERPTechnicalReport4.pdf" - check_svn_return_value - svn import -m "Import from OC" "ERPTechnicalReport5.pdf" "http://orsoc.se:4488/svn/erp/ERPTechnicalReport5.pdf" - check_svn_return_value - svn import -m "Import from OC" "ERPverilogcore.txt" "http://orsoc.se:4488/svn/erp/ERPverilogcore.txt" - check_svn_return_value - popd - pushd "ethdev" - popd - pushd "ethernet_tri_mode" - svn import -m "Import from OC" "ethernet_tri_mode.rel-1-0.tar.gz" "http://orsoc.se:4488/svn/ethernet_tri_mode/ethernet_tri_mode.rel-1-0.tar.gz" - check_svn_return_value - popd - pushd "ethmac10g" - popd - pushd "ethmacvhdl" - popd - pushd "ethswitch" - popd - pushd "eus100lx" - svn import -m "Import from OC" "180px-EUS_B_N.jpg" "http://orsoc.se:4488/svn/eus100lx/180px-EUS_B_N.jpg" - check_svn_return_value - svn import -m "Import from OC" "180px-EUS_T_N.jpg" "http://orsoc.se:4488/svn/eus100lx/180px-EUS_T_N.jpg" - check_svn_return_value - svn import -m "Import from OC" "EUS100LX_BD.gif" "http://orsoc.se:4488/svn/eus100lx/EUS100LX_BD.gif" - check_svn_return_value - popd - pushd "eusfs" - svn import -m "Import from OC" "eusfs-bd.jpg" "http://orsoc.se:4488/svn/eusfs/eusfs-bd.jpg" - check_svn_return_value - svn import -m "Import from OC" "EUSIIa_bottom_tn.jpg" "http://orsoc.se:4488/svn/eusfs/EUSIIa_bottom_tn.jpg" - check_svn_return_value - svn import -m "Import from OC" "EUS_II_topa_tn.jpg" "http://orsoc.se:4488/svn/eusfs/EUS_II_topa_tn.jpg" - check_svn_return_value - popd - pushd "evision" - popd - pushd "extension_pack" - popd - pushd "fac2222m" - svn import -m "Import from OC" "ADC-DAC-AMP.png" "http://orsoc.se:4488/svn/fac2222m/ADC-DAC-AMP.png" - check_svn_return_value - svn import -m "Import from OC" "fac2222m.png" "http://orsoc.se:4488/svn/fac2222m/fac2222m.png" - check_svn_return_value - popd - pushd "fast-crc" - svn import -m "Import from OC" "CRC-generator.tgz" "http://orsoc.se:4488/svn/fast-crc/CRC-generator.tgz" - check_svn_return_value - svn import -m "Import from OC" "CRC_ie3_contest.pdf" "http://orsoc.se:4488/svn/fast-crc/CRC_ie3_contest.pdf" - check_svn_return_value - svn import -m "Import from OC" "CRC.tgz" "http://orsoc.se:4488/svn/fast-crc/CRC.tgz" - check_svn_return_value - svn import -m "Import from OC" "Readme" "http://orsoc.se:4488/svn/fast-crc/Readme" - check_svn_return_value - popd - pushd "fbas_encoder" - svn import -m "Import from OC" "chroma_gen.png" "http://orsoc.se:4488/svn/fbas_encoder/chroma_gen.png" - check_svn_return_value - svn import -m "Import from OC" "connect.png" "http://orsoc.se:4488/svn/fbas_encoder/connect.png" - check_svn_return_value - svn import -m "Import from OC" "fbas_encoder-0.21.tar.gz" "http://orsoc.se:4488/svn/fbas_encoder/fbas_encoder-0.21.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "fbas-encoder_0.31.tar.gz" "http://orsoc.se:4488/svn/fbas_encoder/fbas-encoder_0.31.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "fbas-enc_scrs1.jpg" "http://orsoc.se:4488/svn/fbas_encoder/fbas-enc_scrs1.jpg" - check_svn_return_value - svn import -m "Import from OC" "luma_gen.png" "http://orsoc.se:4488/svn/fbas_encoder/luma_gen.png" - check_svn_return_value - svn import -m "Import from OC" "main.png" "http://orsoc.se:4488/svn/fbas_encoder/main.png" - check_svn_return_value - popd - pushd "fcpu" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/fcpu/*" - check_svn_return_value - popd - pushd "ffr16" - svn import -m "Import from OC" "FFR16.jpg" "http://orsoc.se:4488/svn/ffr16/FFR16.jpg" - check_svn_return_value - popd - pushd "fft_32" - popd - pushd "fftprocessor" - popd - pushd "fht" - svn import -m "Import from OC" "fht_tb.v" "http://orsoc.se:4488/svn/fht/fht_tb.v" - check_svn_return_value - svn import -m "Import from OC" "fht.v" "http://orsoc.se:4488/svn/fht/fht.v" - check_svn_return_value - popd - pushd "fifouart" - svn import -m "Import from OC" "UART_datasheet.pdf" "http://orsoc.se:4488/svn/fifouart/UART_datasheet.pdf" - check_svn_return_value - popd - pushd "filter" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/filter/*" - check_svn_return_value - popd - pushd "firewire" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/firewire/index.shtml" - check_svn_return_value - popd - pushd "fir_filter_generator" - svn import -m "Import from OC" "design-of-high-speed.pdf" "http://orsoc.se:4488/svn/fir_filter_generator/design-of-high-speed.pdf" - check_svn_return_value - svn import -m "Import from OC" "FirGen_V1.0.zip" "http://orsoc.se:4488/svn/fir_filter_generator/FirGen_V1.0.zip" - check_svn_return_value - svn import -m "Import from OC" "FirGen_V1.1.zip" "http://orsoc.se:4488/svn/fir_filter_generator/FirGen_V1.1.zip" - check_svn_return_value - popd - pushd "flha" - popd - pushd "floatingcore" - popd - pushd "floating_point_adder_subtractor" - svn import -m "Import from OC" "addsub.vhd" "http://orsoc.se:4488/svn/floating_point_adder_subtractor/addsub.vhd" - check_svn_return_value - svn import -m "Import from OC" "normalize.vhd" "http://orsoc.se:4488/svn/floating_point_adder_subtractor/normalize.vhd" - check_svn_return_value - svn import -m "Import from OC" "shift.vhd" "http://orsoc.se:4488/svn/floating_point_adder_subtractor/shift.vhd" - check_svn_return_value - popd - pushd "floppyif" - popd - pushd "fmtransmitter" - popd - pushd "fpga" - svn import -m "Import from OC" "docs.jar" "http://orsoc.se:4488/svn/fpga/docs.jar" - check_svn_return_value - svn import -m "Import from OC" "examples.jar" "http://orsoc.se:4488/svn/fpga/examples.jar" - check_svn_return_value - svn import -m "Import from OC" "Fpga.pdf" "http://orsoc.se:4488/svn/fpga/Fpga.pdf" - check_svn_return_value - svn import -m "Import from OC" "fpga_sw.pdf" "http://orsoc.se:4488/svn/fpga/fpga_sw.pdf" - check_svn_return_value - svn import -m "Import from OC" "gpl.txt" "http://orsoc.se:4488/svn/fpga/gpl.txt" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/fpga/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "KRPAN.jar" "http://orsoc.se:4488/svn/fpga/KRPAN.jar" - check_svn_return_value - svn import -m "Import from OC" "KRPAN.zip" "http://orsoc.se:4488/svn/fpga/KRPAN.zip" - check_svn_return_value - svn import -m "Import from OC" "opencores.cer" "http://orsoc.se:4488/svn/fpga/opencores.cer" - check_svn_return_value - svn import -m "Import from OC" "pwm12_8s.v" "http://orsoc.se:4488/svn/fpga/pwm12_8s.v" - check_svn_return_value - svn import -m "Import from OC" "sources.jar" "http://orsoc.se:4488/svn/fpga/sources.jar" - check_svn_return_value - svn import -m "Import from OC" "sshot1.gif" "http://orsoc.se:4488/svn/fpga/sshot1.gif" - check_svn_return_value - popd - pushd "fpgabsp" - popd - pushd "fpgaconfig" - svn import -m "Import from OC" "altera_config.png" "http://orsoc.se:4488/svn/fpgaconfig/altera_config.png" - check_svn_return_value - svn import -m "Import from OC" "fpgaConfig_system_block_diag.gif" "http://orsoc.se:4488/svn/fpgaconfig/fpgaConfig_system_block_diag.gif" - check_svn_return_value - svn import -m "Import from OC" "fpgaConfig.zip" "http://orsoc.se:4488/svn/fpgaconfig/fpgaConfig.zip" - check_svn_return_value - popd - pushd "fpgaproto" - popd - pushd "fpipelines" - popd - pushd "fpu" - svn import -m "Import from OC" "DEADJOE" "http://orsoc.se:4488/svn/fpu/DEADJOE" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/fpu/index.shtml" - check_svn_return_value - popd - pushd "fpu100" - svn import -m "Import from OC" "bug_report_260407.txt" "http://orsoc.se:4488/svn/fpu100/bug_report_260407.txt" - check_svn_return_value - svn import -m "Import from OC" "fpu_doc.pdf" "http://orsoc.se:4488/svn/fpu100/fpu_doc.pdf" - check_svn_return_value - svn import -m "Import from OC" "fpu_v18.zip" "http://orsoc.se:4488/svn/fpu100/fpu_v18.zip" - check_svn_return_value - svn import -m "Import from OC" "fpu_v19.zip" "http://orsoc.se:4488/svn/fpu100/fpu_v19.zip" - check_svn_return_value - popd - pushd "fpu32bit" - popd - pushd "fpuvhdl" - popd - pushd "freetools" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/freetools/*" - check_svn_return_value - popd - pushd "froop" - popd - pushd "fsl2serial" - popd - pushd "gamepads" - svn import -m "Import from OC" "gcpad.png" "http://orsoc.se:4488/svn/gamepads/gcpad.png" - check_svn_return_value - svn import -m "Import from OC" "snespad.png" "http://orsoc.se:4488/svn/gamepads/snespad.png" - check_svn_return_value - svn import -m "Import from OC" "snespad_wire.jpg" "http://orsoc.se:4488/svn/gamepads/snespad_wire.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_gcpad.png" "http://orsoc.se:4488/svn/gamepads/thumb_gcpad.png" - check_svn_return_value - svn import -m "Import from OC" "thumb_snespad.png" "http://orsoc.se:4488/svn/gamepads/thumb_snespad.png" - check_svn_return_value - svn import -m "Import from OC" "thumb_snespad_wire.jpg" "http://orsoc.se:4488/svn/gamepads/thumb_snespad_wire.jpg" - check_svn_return_value - popd - pushd "gcpu" - popd - pushd "generic_fifos" - popd - pushd "generic_fifovhd" - popd - pushd "gh_vhdl_library" - svn import -m "Import from OC" "gh_vhdl_lib_3_34.pdf" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_3_34.pdf" - check_svn_return_value - svn import -m "Import from OC" "gh_vhdl_lib_3_35.pdf" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_3_35.pdf" - check_svn_return_value - svn import -m "Import from OC" "gh_vhdl_lib_3_36.pdf" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_3_36.pdf" - check_svn_return_value - svn import -m "Import from OC" "gh_vhdl_lib_v3_34.zip" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_v3_34.zip" - check_svn_return_value - svn import -m "Import from OC" "gh_vhdl_lib_v3_35.zip" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_v3_35.zip" - check_svn_return_value - svn import -m "Import from OC" "gh_vhdl_lib_v3_36.zip" "http://orsoc.se:4488/svn/gh_vhdl_library/gh_vhdl_lib_v3_36.zip" - check_svn_return_value - popd - pushd "gig_ethernet_mac_core" - popd - pushd "gix96" - popd - pushd "gpio" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/gpio/index.shtml" - check_svn_return_value - popd - pushd "graphicallcd" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/graphicallcd/index.shtml" - check_svn_return_value - popd - pushd "graphiti" - svn import -m "Import from OC" "blockschaltbild.png" "http://orsoc.se:4488/svn/graphiti/blockschaltbild.png" - check_svn_return_value - svn import -m "Import from OC" "flowers.jpg" "http://orsoc.se:4488/svn/graphiti/flowers.jpg" - check_svn_return_value - svn import -m "Import from OC" "graphitib.jpg" "http://orsoc.se:4488/svn/graphiti/graphitib.jpg" - check_svn_return_value - svn import -m "Import from OC" "graphiti.jpg" "http://orsoc.se:4488/svn/graphiti/graphiti.jpg" - check_svn_return_value - svn import -m "Import from OC" "testbild.jpg" "http://orsoc.se:4488/svn/graphiti/testbild.jpg" - check_svn_return_value - svn import -m "Import from OC" "tflowers.jpg" "http://orsoc.se:4488/svn/graphiti/tflowers.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_flowers.jpg" "http://orsoc.se:4488/svn/graphiti/thumb_flowers.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_graphitib.jpg" "http://orsoc.se:4488/svn/graphiti/thumb_graphitib.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_graphiti.jpg" "http://orsoc.se:4488/svn/graphiti/thumb_graphiti.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_testbild.jpg" "http://orsoc.se:4488/svn/graphiti/thumb_testbild.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_tflowers.jpg" "http://orsoc.se:4488/svn/graphiti/thumb_tflowers.jpg" - check_svn_return_value - popd - pushd "gsc" - svn import -m "Import from OC" "btyacc.tar.gz" "http://orsoc.se:4488/svn/gsc/btyacc.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "graphviz-2.8.tar.gz" "http://orsoc.se:4488/svn/gsc/graphviz-2.8.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "gsc-0.1.1.tar.gz" "http://orsoc.se:4488/svn/gsc/gsc-0.1.1.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "gsc.pdf" "http://orsoc.se:4488/svn/gsc/gsc.pdf" - check_svn_return_value - svn import -m "Import from OC" "keystone.tar.gz" "http://orsoc.se:4488/svn/gsc/keystone.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "treecc-0.3.8.tar.gz" "http://orsoc.se:4488/svn/gsc/treecc-0.3.8.tar.gz" - check_svn_return_value - popd - pushd "gup" - svn import -m "Import from OC" "gator_ucomputer_v1.0.zip" "http://orsoc.se:4488/svn/gup/gator_ucomputer_v1.0.zip" - check_svn_return_value - svn import -m "Import from OC" "gup_logo_thumb.jpg" "http://orsoc.se:4488/svn/gup/gup_logo_thumb.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_gup_logo_thumb.jpg" "http://orsoc.se:4488/svn/gup/thumb_gup_logo_thumb.jpg" - check_svn_return_value - popd - pushd "gzip" - popd - pushd "hamming" - popd - pushd "hamming_gen" - svn import -m "Import from OC" "hamming.zip" "http://orsoc.se:4488/svn/hamming_gen/hamming.zip" - check_svn_return_value - popd - pushd "hangyu" - popd - pushd "hasm" - popd - pushd "hdb3" - popd - pushd "hdbn" - popd - pushd "hdlc" - svn import -m "Import from OC" "HDLC_cont.jpg" "http://orsoc.se:4488/svn/hdlc/HDLC_cont.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDLC_cont.ps" "http://orsoc.se:4488/svn/hdlc/HDLC_cont.ps" - check_svn_return_value - svn import -m "Import from OC" "hdlc_fifo.jpg" "http://orsoc.se:4488/svn/hdlc/hdlc_fifo.jpg" - check_svn_return_value - svn import -m "Import from OC" "hdlc_fifo.ps" "http://orsoc.se:4488/svn/hdlc/hdlc_fifo.ps" - check_svn_return_value - svn import -m "Import from OC" "hdlc_project.html" "http://orsoc.se:4488/svn/hdlc/hdlc_project.html" - check_svn_return_value - svn import -m "Import from OC" "hdlc_project.pdf" "http://orsoc.se:4488/svn/hdlc/hdlc_project.pdf" - check_svn_return_value - svn import -m "Import from OC" "hdlc_project.ps" "http://orsoc.se:4488/svn/hdlc/hdlc_project.ps" - check_svn_return_value - svn import -m "Import from OC" "HDLC_top.jpg" "http://orsoc.se:4488/svn/hdlc/HDLC_top.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDLC_top.ps" "http://orsoc.se:4488/svn/hdlc/HDLC_top.ps" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/hdlc/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "wishlogo.ps" "http://orsoc.se:4488/svn/hdlc/wishlogo.ps" - check_svn_return_value - popd - pushd "help" - svn import -m "Import from OC" "exp1pf.gif" "http://orsoc.se:4488/svn/help/exp1pf.gif" - check_svn_return_value - svn import -m "Import from OC" "search.shtml" "http://orsoc.se:4488/svn/help/search.shtml" - check_svn_return_value - popd - pushd "hicovec" - popd - pushd "hierarch_unit" - popd - pushd "hmta" - popd - pushd "houmway" - popd - pushd "hpc-16" - popd - pushd "hpcmemory" - popd - pushd "hssdrc" - popd - pushd "ht_tunnel" - popd - pushd "hwlu" - popd - pushd "i2c" - svn import -m "Import from OC" "Block.gif" "http://orsoc.se:4488/svn/i2c/Block.gif" - check_svn_return_value - svn import -m "Import from OC" "i2c_rev03.pdf" "http://orsoc.se:4488/svn/i2c/i2c_rev03.pdf" - check_svn_return_value - svn import -m "Import from OC" "index_orig.shtml" "http://orsoc.se:4488/svn/i2c/index_orig.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/i2c/index.shtml" - check_svn_return_value - popd - pushd "i2clog" - svn import -m "Import from OC" "Documentation" "http://orsoc.se:4488/svn/i2clog/Documentation" - check_svn_return_value - svn import -m "Import from OC" "front" "http://orsoc.se:4488/svn/i2clog/front" - check_svn_return_value - svn import -m "Import from OC" "I2C_TrafficLogger.v" "http://orsoc.se:4488/svn/i2clog/I2C_TrafficLogger.v" - check_svn_return_value - popd - pushd "i2c_master_slave_core" - popd - pushd "i2c_slave" - svn import -m "Import from OC" "iic_slave_3.v" "http://orsoc.se:4488/svn/i2c_slave/iic_slave_3.v" - check_svn_return_value - popd - pushd "i2c_vhdl" - popd - pushd "i2s" - svn import -m "Import from OC" "dff.vhd" "http://orsoc.se:4488/svn/i2s/dff.vhd" - check_svn_return_value - svn import -m "Import from OC" "ebu_2_i2s.vhd" "http://orsoc.se:4488/svn/i2s/ebu_2_i2s.vhd" - check_svn_return_value - popd - pushd "i2s_interface" - svn import -m "Import from OC" "i2s_interface.zip" "http://orsoc.se:4488/svn/i2s_interface/i2s_interface.zip" - check_svn_return_value - popd - pushd "i2sparalell" - popd - pushd "ic6821" - svn import -m "Import from OC" "VHDL6821.vhd" "http://orsoc.se:4488/svn/ic6821/VHDL6821.vhd" - check_svn_return_value - popd - pushd "icu" - popd - pushd "ide" - popd - pushd "idea" - svn import -m "Import from OC" "block_opmode.tar.gz" "http://orsoc.se:4488/svn/idea/block_opmode.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "control.tar.gz" "http://orsoc.se:4488/svn/idea/control.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "IDEA core block.GIF" "http://orsoc.se:4488/svn/idea/IDEA core block.GIF" - check_svn_return_value - svn import -m "Import from OC" "idea_machine.tar.gz" "http://orsoc.se:4488/svn/idea/idea_machine.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "IDEA mechine block.GIF" "http://orsoc.se:4488/svn/idea/IDEA mechine block.GIF" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/idea/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "keys_generate.tar.gz" "http://orsoc.se:4488/svn/idea/keys_generate.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "Paper_IES2001_sby.PDF" "http://orsoc.se:4488/svn/idea/Paper_IES2001_sby.PDF" - check_svn_return_value - svn import -m "Import from OC" "port_inout.tar.gz" "http://orsoc.se:4488/svn/idea/port_inout.tar.gz" - check_svn_return_value - popd - pushd "iiepci" - svn import -m "Import from OC" "iie_pci_back.jpg" "http://orsoc.se:4488/svn/iiepci/iie_pci_back.jpg" - check_svn_return_value - svn import -m "Import from OC" "iie_pci_diagram.jpg" "http://orsoc.se:4488/svn/iiepci/iie_pci_diagram.jpg" - check_svn_return_value - svn import -m "Import from OC" "iie_pci_front.jpg" "http://orsoc.se:4488/svn/iiepci/iie_pci_front.jpg" - check_svn_return_value - popd - pushd "ima-adpcm" - popd - pushd "interface_vga80x40" - svn import -m "Import from OC" "FPGA_VGA_Electrical_Interface.png" "http://orsoc.se:4488/svn/interface_vga80x40/FPGA_VGA_Electrical_Interface.png" - check_svn_return_value - svn import -m "Import from OC" "if_vga80x40.zip" "http://orsoc.se:4488/svn/interface_vga80x40/if_vga80x40.zip" - check_svn_return_value - svn import -m "Import from OC" "VGA80x40_documentation.pdf" "http://orsoc.se:4488/svn/interface_vga80x40/VGA80x40_documentation.pdf" - check_svn_return_value - popd - pushd "ipchip" - popd - pushd "irda" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/irda/index.shtml" - check_svn_return_value - popd - pushd "iso7816-3" - svn import -m "Import from OC" "iso7816-3.tgz" "http://orsoc.se:4488/svn/iso7816-3/iso7816-3.tgz" - check_svn_return_value - popd - pushd "isp" - popd - pushd "jop" - popd - pushd "jpeg" - svn import -m "Import from OC" "DiagramaCompJPGen.png" "http://orsoc.se:4488/svn/jpeg/DiagramaCompJPGen.png" - check_svn_return_value - svn import -m "Import from OC" "floresconsubsamp211.jpg" "http://orsoc.se:4488/svn/jpeg/floresconsubsamp211.jpg" - check_svn_return_value - svn import -m "Import from OC" "floressinsubsamp.jpg" "http://orsoc.se:4488/svn/jpeg/floressinsubsamp.jpg" - check_svn_return_value - svn import -m "Import from OC" "imagenfrutasQ05PSP.JPG" "http://orsoc.se:4488/svn/jpeg/imagenfrutasQ05PSP.JPG" - check_svn_return_value - svn import -m "Import from OC" "imagenfrutasQ15.jpg" "http://orsoc.se:4488/svn/jpeg/imagenfrutasQ15.jpg" - check_svn_return_value - svn import -m "Import from OC" "imagenfrutasQ31.jpg" "http://orsoc.se:4488/svn/jpeg/imagenfrutasQ31.jpg" - check_svn_return_value - svn import -m "Import from OC" "imagenfrutasQ50.jpg" "http://orsoc.se:4488/svn/jpeg/imagenfrutasQ50.jpg" - check_svn_return_value - svn import -m "Import from OC" "imagenglobosPSPQ15.jpg" "http://orsoc.se:4488/svn/jpeg/imagenglobosPSPQ15.jpg" - check_svn_return_value - svn import -m "Import from OC" "imagenglobosQ15.jpg" "http://orsoc.se:4488/svn/jpeg/imagenglobosQ15.jpg" - check_svn_return_value - popd - pushd "jpegcompression" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/jpegcompression/*" - check_svn_return_value - popd - pushd "jtag" - svn import -m "Import from OC" "Boundary-Scan Architecture.pdf" "http://orsoc.se:4488/svn/jtag/Boundary-Scan Architecture.pdf" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/jtag/index.shtml" - check_svn_return_value - popd - pushd "k68" - popd - pushd "k7_viterbi_decoder" - popd - pushd "kad" - popd - pushd "kcpsm3_interrupt_handling" - popd - pushd "keyboardcontroller" - popd - pushd "keypad_scanner" - svn import -m "Import from OC" "keypad_scanner.v" "http://orsoc.se:4488/svn/keypad_scanner/keypad_scanner.v" - check_svn_return_value - popd - pushd "kiss-board" - popd - pushd "ksystem" - popd - pushd "l8051" - svn import -m "Import from OC" "L8051.tar" "http://orsoc.se:4488/svn/l8051/L8051.tar" - check_svn_return_value - popd - pushd "lcd" - svn import -m "Import from OC" "alliance.shtml" "http://orsoc.se:4488/svn/lcd/alliance.shtml" - check_svn_return_value - svn import -m "Import from OC" "counterc.shtml" "http://orsoc.se:4488/svn/lcd/counterc.shtml" - check_svn_return_value - svn import -m "Import from OC" "counter.shtml" "http://orsoc.se:4488/svn/lcd/counter.shtml" - check_svn_return_value - svn import -m "Import from OC" "counterv.shtml" "http://orsoc.se:4488/svn/lcd/counterv.shtml" - check_svn_return_value - svn import -m "Import from OC" "decoderc.shtml" "http://orsoc.se:4488/svn/lcd/decoderc.shtml" - check_svn_return_value - svn import -m "Import from OC" "decoderv.shtml" "http://orsoc.se:4488/svn/lcd/decoderv.shtml" - check_svn_return_value - svn import -m "Import from OC" "dffresc.shtml" "http://orsoc.se:4488/svn/lcd/dffresc.shtml" - check_svn_return_value - svn import -m "Import from OC" "dffresv.shtml" "http://orsoc.se:4488/svn/lcd/dffresv.shtml" - check_svn_return_value - svn import -m "Import from OC" "dflipflop.shtml" "http://orsoc.se:4488/svn/lcd/dflipflop.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/lcd/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml.old" "http://orsoc.se:4488/svn/lcd/index.shtml.old" - check_svn_return_value - svn import -m "Import from OC" "LCD.ht1.gif" "http://orsoc.se:4488/svn/lcd/LCD.ht1.gif" - check_svn_return_value - svn import -m "Import from OC" "lcd.zip" "http://orsoc.se:4488/svn/lcd/lcd.zip" - check_svn_return_value - svn import -m "Import from OC" "mcc.shtml" "http://orsoc.se:4488/svn/lcd/mcc.shtml" - check_svn_return_value - svn import -m "Import from OC" "mcv.shtml" "http://orsoc.se:4488/svn/lcd/mcv.shtml" - check_svn_return_value - svn import -m "Import from OC" "ramc.shtml" "http://orsoc.se:4488/svn/lcd/ramc.shtml" - check_svn_return_value - svn import -m "Import from OC" "ramv.shtml" "http://orsoc.se:4488/svn/lcd/ramv.shtml" - check_svn_return_value - svn import -m "Import from OC" "struct.shtml" "http://orsoc.se:4488/svn/lcd/struct.shtml" - check_svn_return_value - svn import -m "Import from OC" "test.shtml" "http://orsoc.se:4488/svn/lcd/test.shtml" - check_svn_return_value - popd - pushd "lcd1" - popd - pushd "lcd_controller" - svn import -m "Import from OC" "AP.zip" "http://orsoc.se:4488/svn/lcd_controller/AP.zip" - check_svn_return_value - svn import -m "Import from OC" "CM920TUserGuide.pdf" "http://orsoc.se:4488/svn/lcd_controller/CM920TUserGuide.pdf" - check_svn_return_value - svn import -m "Import from OC" "ColorTFT-LCDController.ppt" "http://orsoc.se:4488/svn/lcd_controller/ColorTFT-LCDController.ppt" - check_svn_return_value - svn import -m "Import from OC" "DUI0146C_LM600.pdf" "http://orsoc.se:4488/svn/lcd_controller/DUI0146C_LM600.pdf" - check_svn_return_value - svn import -m "Import from OC" "tx18d16vm1caa.pdf" "http://orsoc.se:4488/svn/lcd_controller/tx18d16vm1caa.pdf" - check_svn_return_value - popd - pushd "ldpc_decoder_802_3an" - svn import -m "Import from OC" "ldpc_decoder_802_3an.tar.gz" "http://orsoc.se:4488/svn/ldpc_decoder_802_3an/ldpc_decoder_802_3an.tar.gz" - check_svn_return_value - popd - pushd "ldpc_encoder_802_3an" - svn import -m "Import from OC" "ldpc_encoder_802_3an.v.gz" "http://orsoc.se:4488/svn/ldpc_encoder_802_3an/ldpc_encoder_802_3an.v.gz" - check_svn_return_value - popd - pushd "lem1_9min" - svn import -m "Import from OC" "d3_lem1_9min_hw.ucf" "http://orsoc.se:4488/svn/lem1_9min/d3_lem1_9min_hw.ucf" - check_svn_return_value - svn import -m "Import from OC" "Form1.cs" "http://orsoc.se:4488/svn/lem1_9min/Form1.cs" - check_svn_return_value - svn import -m "Import from OC" "lem1_9min_asm.csproj" "http://orsoc.se:4488/svn/lem1_9min/lem1_9min_asm.csproj" - check_svn_return_value - svn import -m "Import from OC" "lem1_9min_defs.vhd" "http://orsoc.se:4488/svn/lem1_9min/lem1_9min_defs.vhd" - check_svn_return_value - svn import -m "Import from OC" "lem1_9min_hw.vhd" "http://orsoc.se:4488/svn/lem1_9min/lem1_9min_hw.vhd" - check_svn_return_value - svn import -m "Import from OC" "lem1_9min.vhd" "http://orsoc.se:4488/svn/lem1_9min/lem1_9min.vhd" - check_svn_return_value - svn import -m "Import from OC" "trinity_talk_041205.pdf" "http://orsoc.se:4488/svn/lem1_9min/trinity_talk_041205.pdf" - check_svn_return_value - popd - pushd "light8080" - popd - pushd "lin-a" - popd - pushd "line_codes" - popd - pushd "linuxvcap" - popd - pushd "llc1394" - popd - pushd "log_anal" - popd - pushd "lowpowerfir" - svn import -m "Import from OC" "FIRLowPowerConsiderations.doc" "http://orsoc.se:4488/svn/lowpowerfir/FIRLowPowerConsiderations.doc" - check_svn_return_value - svn import -m "Import from OC" "fir.zip" "http://orsoc.se:4488/svn/lowpowerfir/fir.zip" - check_svn_return_value - popd - pushd "lpc" - popd - pushd "lpu" - svn import -m "Import from OC" "lpu.zip" "http://orsoc.se:4488/svn/lpu/lpu.zip" - check_svn_return_value - svn import -m "Import from OC" "Mem Driven Processor.doc" "http://orsoc.se:4488/svn/lpu/Mem Driven Processor.doc" - check_svn_return_value - popd - pushd "lq057q3dc02" - popd - pushd "lwmips" - popd - pushd "lwrisc" - svn import -m "Import from OC" "200735153855.bmp" "http://orsoc.se:4488/svn/lwrisc/200735153855.bmp" - check_svn_return_value - svn import -m "Import from OC" "200735153855.JPG" "http://orsoc.se:4488/svn/lwrisc/200735153855.JPG" - check_svn_return_value - svn import -m "Import from OC" "clairisc.JPG" "http://orsoc.se:4488/svn/lwrisc/clairisc.JPG" - check_svn_return_value - svn import -m "Import from OC" "thumb_200735153855.JPG" "http://orsoc.se:4488/svn/lwrisc/thumb_200735153855.JPG" - check_svn_return_value - svn import -m "Import from OC" "thumb_clairisc.JPG" "http://orsoc.se:4488/svn/lwrisc/thumb_clairisc.JPG" - check_svn_return_value - svn import -m "Import from OC" "thumb_we.GIF" "http://orsoc.se:4488/svn/lwrisc/thumb_we.GIF" - check_svn_return_value - svn import -m "Import from OC" "we.GIF" "http://orsoc.se:4488/svn/lwrisc/we.GIF" - check_svn_return_value - popd - pushd "m1_core" - popd - pushd "mac" - popd - pushd "macroblock_motion_detection" - popd - pushd "maf" - popd - pushd "mafa-pc-board" - popd - pushd "man2uart" - svn import -m "Import from OC" "Man2uartopencores.txt" "http://orsoc.se:4488/svn/man2uart/Man2uartopencores.txt" - check_svn_return_value - popd - pushd "manchesterencoderdecoder" - svn import -m "Import from OC" "ME2.vhd" "http://orsoc.se:4488/svn/manchesterencoderdecoder/ME2.vhd" - check_svn_return_value - popd - pushd "marca" - popd - pushd "matrix3x3" - popd - pushd "maxii-evalboard" - svn import -m "Import from OC" "MAXII-Evalboard-V1.00-Designpackage.zip" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard-V1.00-Designpackage.zip" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_a.jpg" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_a.jpg" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_b.jpg" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_b.jpg" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_BOM.xls" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_BOM.xls" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_Gerber&CAM.zip" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_Gerber&CAM.zip" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0.jpg" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0.jpg" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_PCB-Errata.txt" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_PCB-Errata.txt" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_PCB.pdf" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_PCB.pdf" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_Placement.pdf" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_Placement.pdf" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_Protel.zip" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_Protel.zip" - check_svn_return_value - svn import -m "Import from OC" "MAXII-Evalboard_V1.0_Schem.pdf" "http://orsoc.se:4488/svn/maxii-evalboard/MAXII-Evalboard_V1.0_Schem.pdf" - check_svn_return_value - popd - pushd "mb-jpeg" - svn import -m "Import from OC" "mb-jpeg_STEP2_1b.tar.bz2" "http://orsoc.se:4488/svn/mb-jpeg/mb-jpeg_STEP2_1b.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "mb-jpeg_STEP2_2b.tar.bz2" "http://orsoc.se:4488/svn/mb-jpeg/mb-jpeg_STEP2_2b.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "mb-jpeg_STEP7_2.tar.bz2" "http://orsoc.se:4488/svn/mb-jpeg/mb-jpeg_STEP7_2.tar.bz2" - check_svn_return_value - popd - pushd "mcbsp" - popd - pushd "mcpu" - svn import -m "Import from OC" "mcpu_1.06b.zip" "http://orsoc.se:4488/svn/mcpu/mcpu_1.06b.zip" - check_svn_return_value - svn import -m "Import from OC" "mcpu-doc.pdf" "http://orsoc.se:4488/svn/mcpu/mcpu-doc.pdf" - check_svn_return_value - svn import -m "Import from OC" "mcpu.pdf" "http://orsoc.se:4488/svn/mcpu/mcpu.pdf" - check_svn_return_value - popd - pushd "mcu8" - popd - pushd "md5" - popd - pushd "mdct" - svn import -m "Import from OC" "block_diagram.jpg" "http://orsoc.se:4488/svn/mdct/block_diagram.jpg" - check_svn_return_value - popd - pushd "membist" - popd - pushd "mem_ctrl" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/mem_ctrl/index.shtml" - check_svn_return_value - popd - pushd "memorycontroller" - popd - pushd "memory_cores" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/memory_cores/index.shtml" - check_svn_return_value - popd - pushd "memory_sizer" - svn import -m "Import from OC" "b10_safe_12_18_01_dual_path.zip" "http://orsoc.se:4488/svn/memory_sizer/b10_safe_12_18_01_dual_path.zip" - check_svn_return_value - svn import -m "Import from OC" "b10_safe_12_18_01_single_path.zip" "http://orsoc.se:4488/svn/memory_sizer/b10_safe_12_18_01_single_path.zip" - check_svn_return_value - svn import -m "Import from OC" "documentation.shtml" "http://orsoc.se:4488/svn/memory_sizer/documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "download.shtml" "http://orsoc.se:4488/svn/memory_sizer/download.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/memory_sizer/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "memory_sizer_dual_path.v" "http://orsoc.se:4488/svn/memory_sizer/memory_sizer_dual_path.v" - check_svn_return_value - svn import -m "Import from OC" "memory_sizer.v" "http://orsoc.se:4488/svn/memory_sizer/memory_sizer.v" - check_svn_return_value - svn import -m "Import from OC" "people.shtml" "http://orsoc.se:4488/svn/memory_sizer/people.shtml" - check_svn_return_value - popd - pushd "mfpga" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/mfpga/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "mfpga_block.gif" "http://orsoc.se:4488/svn/mfpga/mfpga_block.gif" - check_svn_return_value - svn import -m "Import from OC" "mfpga_block_new.gif" "http://orsoc.se:4488/svn/mfpga/mfpga_block_new.gif" - check_svn_return_value - svn import -m "Import from OC" "micro_orcad.sch" "http://orsoc.se:4488/svn/mfpga/micro_orcad.sch" - check_svn_return_value - svn import -m "Import from OC" "micro_protelbinary.lib" "http://orsoc.se:4488/svn/mfpga/micro_protelbinary.lib" - check_svn_return_value - svn import -m "Import from OC" "micro_protelbinary.sch" "http://orsoc.se:4488/svn/mfpga/micro_protelbinary.sch" - check_svn_return_value - svn import -m "Import from OC" "micro_sch.pdf" "http://orsoc.se:4488/svn/mfpga/micro_sch.pdf" - check_svn_return_value - svn import -m "Import from OC" "xcv50.jpg" "http://orsoc.se:4488/svn/mfpga/xcv50.jpg" - check_svn_return_value - popd - pushd "micore" - popd - pushd "microprocessor" - popd - pushd "milsa" - popd - pushd "milstd1553bbusprotocol" - popd - pushd "mini-acex1k" - popd - pushd "mini_aes" - popd - pushd "minimips" - svn import -m "Import from OC" "miniMIPS.zip" "http://orsoc.se:4488/svn/minimips/miniMIPS.zip" - check_svn_return_value - popd - pushd "minirisc" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/minirisc/index.shtml" - check_svn_return_value - popd - pushd "mips789" - svn import -m "Import from OC" "cal_PI_2.GIF" "http://orsoc.se:4488/svn/mips789/cal_PI_2.GIF" - check_svn_return_value - svn import -m "Import from OC" "MIPS789.bmp" "http://orsoc.se:4488/svn/mips789/MIPS789.bmp" - check_svn_return_value - svn import -m "Import from OC" "pi_2200.GIF" "http://orsoc.se:4488/svn/mips789/pi_2200.GIF" - check_svn_return_value - svn import -m "Import from OC" "topview.GIF" "http://orsoc.se:4488/svn/mips789/topview.GIF" - check_svn_return_value - popd - pushd "mipss" - svn import -m "Import from OC" "s70_32bit_to_9bit.vhd" "http://orsoc.se:4488/svn/mipss/s70_32bit_to_9bit.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_ALU.vhd" "http://orsoc.se:4488/svn/mipss/s70_ALU.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_ctrl_unit.vhd" "http://orsoc.se:4488/svn/mipss/s70_ctrl_unit.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_data_mem_comp.vhd" "http://orsoc.se:4488/svn/mipss/s70_data_mem_comp.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_data_mem.vhd" "http://orsoc.se:4488/svn/mipss/s70_data_mem.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_datapath.vhd" "http://orsoc.se:4488/svn/mipss/s70_datapath.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_Ext_S_Z.vhd" "http://orsoc.se:4488/svn/mipss/s70_Ext_S_Z.vhd" - check_svn_return_value - svn import -m "Import from OC" "s70_inc.vhd" "http://orsoc.se:4488/svn/mipss/s70_inc.vhd" - check_svn_return_value - popd - pushd "mmcfpgaconfig" - popd - pushd "moonshadow" - popd - pushd "most" - svn import -m "Import from OC" "MOST_Core_Compliance_Test_Specification.pdf" "http://orsoc.se:4488/svn/most/MOST_Core_Compliance_Test_Specification.pdf" - check_svn_return_value - svn import -m "Import from OC" "MOSTSpecification.pdf" "http://orsoc.se:4488/svn/most/MOSTSpecification.pdf" - check_svn_return_value - popd - pushd "most_core" - popd - pushd "motion_controller" - popd - pushd "motionestimator" - popd - pushd "motor" - popd - pushd "mp3decoder" - popd - pushd "mpdma" - svn import -m "Import from OC" "BlazeCluster_v0.14.tar.bz2" "http://orsoc.se:4488/svn/mpdma/BlazeCluster_v0.14.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "BlazeCluster_v0.15.tar.bz2" "http://orsoc.se:4488/svn/mpdma/BlazeCluster_v0.15.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "BlazeClusterv0.17.zip" "http://orsoc.se:4488/svn/mpdma/BlazeClusterv0.17.zip" - check_svn_return_value - svn import -m "Import from OC" "BlazeClusterv0.1.zip" "http://orsoc.se:4488/svn/mpdma/BlazeClusterv0.1.zip" - check_svn_return_value - svn import -m "Import from OC" "koblenz8_20070902.zip" "http://orsoc.se:4488/svn/mpdma/koblenz8_20070902.zip" - check_svn_return_value - svn import -m "Import from OC" "mpdma20061020.tar.bz2" "http://orsoc.se:4488/svn/mpdma/mpdma20061020.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "mpdma20061023b.tar.bz2" "http://orsoc.se:4488/svn/mpdma/mpdma20061023b.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "mpdma20061023c.tar.bz2" "http://orsoc.se:4488/svn/mpdma/mpdma20061023c.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "mpdma20061023.tar.bz2" "http://orsoc.se:4488/svn/mpdma/mpdma20061023.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "SoftwareMultiprocessoronFPGA20070608.pdf" "http://orsoc.se:4488/svn/mpdma/SoftwareMultiprocessoronFPGA20070608.pdf" - check_svn_return_value - popd - pushd "mpeg2decoder" - popd - pushd "mpeg4_video_coding" - popd - pushd "mpegencoderdecoder" - popd - pushd "mup" - popd - pushd "ncore" - svn import -m "Import from OC" "CASM.C" "http://orsoc.se:4488/svn/ncore/CASM.C" - check_svn_return_value - svn import -m "Import from OC" "NCORE2.V" "http://orsoc.se:4488/svn/ncore/NCORE2.V" - check_svn_return_value - svn import -m "Import from OC" "NCORE3.V" "http://orsoc.se:4488/svn/ncore/NCORE3.V" - check_svn_return_value - svn import -m "Import from OC" "nCore_doc.pdf" "http://orsoc.se:4488/svn/ncore/nCore_doc.pdf" - check_svn_return_value - svn import -m "Import from OC" "NCORE.tar.bz2" "http://orsoc.se:4488/svn/ncore/NCORE.tar.bz2" - check_svn_return_value - svn import -m "Import from OC" "nCore.v" "http://orsoc.se:4488/svn/ncore/nCore.v" - check_svn_return_value - svn import -m "Import from OC" "SIM.C" "http://orsoc.se:4488/svn/ncore/SIM.C" - check_svn_return_value - popd - pushd "nemo_emotion" - popd - pushd "neot" - popd - pushd "neptune-core" - svn import -m "Import from OC" "triton-block.png" "http://orsoc.se:4488/svn/neptune-core/triton-block.png" - check_svn_return_value - popd - pushd "nnARM" - svn import -m "Import from OC" "Arch118.pdf" "http://orsoc.se:4488/svn/nnARM/Arch118.pdf" - check_svn_return_value - svn import -m "Import from OC" "Architecture111.pdf" "http://orsoc.se:4488/svn/nnARM/Architecture111.pdf" - check_svn_return_value - svn import -m "Import from OC" "Architecture111.pdf.old" "http://orsoc.se:4488/svn/nnARM/Architecture111.pdf.old" - check_svn_return_value - svn import -m "Import from OC" "Architecture_jc.pdf" "http://orsoc.se:4488/svn/nnARM/Architecture_jc.pdf" - check_svn_return_value - svn import -m "Import from OC" "BS.shtml" "http://orsoc.se:4488/svn/nnARM/BS.shtml" - check_svn_return_value - svn import -m "Import from OC" "default.htm" "http://orsoc.se:4488/svn/nnARM/default.htm" - check_svn_return_value - svn import -m "Import from OC" "Documentation.shtml" "http://orsoc.se:4488/svn/nnARM/Documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "Download.shtml" "http://orsoc.se:4488/svn/nnARM/Download.shtml" - check_svn_return_value - svn import -m "Import from OC" "GT.shtml" "http://orsoc.se:4488/svn/nnARM/GT.shtml" - check_svn_return_value - svn import -m "Import from OC" "index1.shtml" "http://orsoc.se:4488/svn/nnARM/index1.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml1" "http://orsoc.se:4488/svn/nnARM/index.shtml1" - check_svn_return_value - svn import -m "Import from OC" "index.shtml.old" "http://orsoc.se:4488/svn/nnARM/index.shtml.old" - check_svn_return_value - svn import -m "Import from OC" "Introduction.shtml" "http://orsoc.se:4488/svn/nnARM/Introduction.shtml" - check_svn_return_value - svn import -m "Import from OC" "News.htm" "http://orsoc.se:4488/svn/nnARM/News.htm" - check_svn_return_value - svn import -m "Import from OC" "News.shtml" "http://orsoc.se:4488/svn/nnARM/News.shtml" - check_svn_return_value - svn import -m "Import from OC" "nnARM.prog" "http://orsoc.se:4488/svn/nnARM/nnARM.prog" - check_svn_return_value - svn import -m "Import from OC" "nnARM_tb01_07_10_1.zip" "http://orsoc.se:4488/svn/nnARM/nnARM_tb01_07_10_1.zip" - check_svn_return_value - svn import -m "Import from OC" "nnARM_tb01_07_19.zip" "http://orsoc.se:4488/svn/nnARM/nnARM_tb01_07_19.zip" - check_svn_return_value - svn import -m "Import from OC" "nnARM_tb01_07_20.zip" "http://orsoc.se:4488/svn/nnARM/nnARM_tb01_07_20.zip" - check_svn_return_value - svn import -m "Import from OC" "nnARM_tb01_09_02.zip" "http://orsoc.se:4488/svn/nnARM/nnARM_tb01_09_02.zip" - check_svn_return_value - svn import -m "Import from OC" "People.htm" "http://orsoc.se:4488/svn/nnARM/People.htm" - check_svn_return_value - svn import -m "Import from OC" "People.shtml" "http://orsoc.se:4488/svn/nnARM/People.shtml" - check_svn_return_value - svn import -m "Import from OC" "PR.shtml" "http://orsoc.se:4488/svn/nnARM/PR.shtml" - check_svn_return_value - svn import -m "Import from OC" "put.JPG" "http://orsoc.se:4488/svn/nnARM/put.JPG" - check_svn_return_value - svn import -m "Import from OC" "sARM01_06_08_1.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_06_08_1.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_06_12_2.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_06_12_2.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_06_15_2.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_06_15_2.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_07_12_2.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_07_12_2.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_07_19_4.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_07_19_4.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_07_20_2.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_07_20_2.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_07_30_4.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_07_30_4.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_08_30_3.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_08_30_3.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_09_02_1.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_09_02_1.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_09_05_2.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_09_05_2.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM01_11_1_3.zip.zip" "http://orsoc.se:4488/svn/nnARM/sARM01_11_1_3.zip.zip" - check_svn_return_value - svn import -m "Import from OC" "sARM_tb.zip" "http://orsoc.se:4488/svn/nnARM/sARM_tb.zip" - check_svn_return_value - svn import -m "Import from OC" "tag3.bmp" "http://orsoc.se:4488/svn/nnARM/tag3.bmp" - check_svn_return_value - svn import -m "Import from OC" "Testbench" "http://orsoc.se:4488/svn/nnARM/Testbench" - check_svn_return_value - svn import -m "Import from OC" "topFrame.htm" "http://orsoc.se:4488/svn/nnARM/topFrame.htm" - check_svn_return_value - svn import -m "Import from OC" "wishlogo.jpg" "http://orsoc.se:4488/svn/nnARM/wishlogo.jpg" - check_svn_return_value - popd - pushd "nocem" - popd - pushd "noise_reduction" - popd - pushd "nonrestoringsquareroot" - popd - pushd "nova" - popd - pushd "npigrctrl" - svn import -m "Import from OC" "demo.png" "http://orsoc.se:4488/svn/npigrctrl/demo.png" - check_svn_return_value - svn import -m "Import from OC" "mpmc4.rar" "http://orsoc.se:4488/svn/npigrctrl/mpmc4.rar" - check_svn_return_value - svn import -m "Import from OC" "npi_eng.vhd" "http://orsoc.se:4488/svn/npigrctrl/npi_eng.vhd" - check_svn_return_value - popd - pushd "oab1" - svn import -m "Import from OC" "index.htm" "http://orsoc.se:4488/svn/oab1/index.htm" - check_svn_return_value - svn import -m "Import from OC" "title_logo.gif" "http://orsoc.se:4488/svn/oab1/title_logo.gif" - check_svn_return_value - svn import -m "Import from OC" "ver01.JPG" "http://orsoc.se:4488/svn/oab1/ver01.JPG" - check_svn_return_value - svn import -m "Import from OC" "ver02.jpg" "http://orsoc.se:4488/svn/oab1/ver02.jpg" - check_svn_return_value - popd - pushd "oberon" - popd - pushd "ocmips" - svn import -m "Import from OC" "fpga.gif" "http://orsoc.se:4488/svn/ocmips/fpga.gif" - check_svn_return_value - svn import -m "Import from OC" "opencores.gif" "http://orsoc.se:4488/svn/ocmips/opencores.gif" - check_svn_return_value - svn import -m "Import from OC" "sim.GIF" "http://orsoc.se:4488/svn/ocmips/sim.GIF" - check_svn_return_value - popd - pushd "ocp_wb_wrapper" - popd - pushd "ocrp-1" - svn import -m "Import from OC" "block.gif" "http://orsoc.se:4488/svn/ocrp-1/block.gif" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/ocrp-1/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "ocrp-1_bill_of_materials.txt" "http://orsoc.se:4488/svn/ocrp-1/ocrp-1_bill_of_materials.txt" - check_svn_return_value - svn import -m "Import from OC" "ocrp-1_gerber.tar.gz" "http://orsoc.se:4488/svn/ocrp-1/ocrp-1_gerber.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "ocrp1.jpg" "http://orsoc.se:4488/svn/ocrp-1/ocrp1.jpg" - check_svn_return_value - svn import -m "Import from OC" "ocrp1ord.pdf" "http://orsoc.se:4488/svn/ocrp-1/ocrp1ord.pdf" - check_svn_return_value - svn import -m "Import from OC" "ocrp-1_sch.pdf" "http://orsoc.se:4488/svn/ocrp-1/ocrp-1_sch.pdf" - check_svn_return_value - svn import -m "Import from OC" "PCB1-72dpi.jpg" "http://orsoc.se:4488/svn/ocrp-1/PCB1-72dpi.jpg" - check_svn_return_value - svn import -m "Import from OC" "PCB2-72dpi.jpg" "http://orsoc.se:4488/svn/ocrp-1/PCB2-72dpi.jpg" - check_svn_return_value - svn import -m "Import from OC" "pic1.jpg" "http://orsoc.se:4488/svn/ocrp-1/pic1.jpg" - check_svn_return_value - svn import -m "Import from OC" "pic2.jpg" "http://orsoc.se:4488/svn/ocrp-1/pic2.jpg" - check_svn_return_value - svn import -m "Import from OC" "pic3.jpg" "http://orsoc.se:4488/svn/ocrp-1/pic3.jpg" - check_svn_return_value - svn import -m "Import from OC" "pic4.jpg" "http://orsoc.se:4488/svn/ocrp-1/pic4.jpg" - check_svn_return_value - svn import -m "Import from OC" "pic7.jpg" "http://orsoc.se:4488/svn/ocrp-1/pic7.jpg" - check_svn_return_value - svn import -m "Import from OC" "xc95288xl_tq144.bsd" "http://orsoc.se:4488/svn/ocrp-1/xc95288xl_tq144.bsd" - check_svn_return_value - svn import -m "Import from OC" "xcv100_tq144.bsd" "http://orsoc.se:4488/svn/ocrp-1/xcv100_tq144.bsd" - check_svn_return_value - svn import -m "Import from OC" "xcv50_tq144.bsd" "http://orsoc.se:4488/svn/ocrp-1/xcv50_tq144.bsd" - check_svn_return_value - popd - pushd "ofdm" - popd - pushd "ofdm-baseband-receiver" - popd - pushd "ofdm_modulator" - popd - pushd "oks8" - popd - pushd "omega" - popd - pushd "opb_i2c" - popd - pushd "opb_isa" - popd - pushd "opb_onewire" - popd - pushd "opb_ps2_keyboard_controller" - popd - pushd "opb_psram_controller" - popd - pushd "opb_udp_transceiver" - popd - pushd "opb_vga_char_display_nodac" - popd - pushd "opb_wb_wrapper" - popd - pushd "open_1394_intellectual_property" - popd - pushd "open8_urisc" - popd - pushd "openarm" - popd - pushd "opencores" - svn import -m "Import from OC" "27dec03_IrishTimes.pdf" "http://orsoc.se:4488/svn/opencores/27dec03_IrishTimes.pdf" - check_svn_return_value - svn import -m "Import from OC" "bottom.jpg" "http://orsoc.se:4488/svn/opencores/bottom.jpg" - check_svn_return_value - svn import -m "Import from OC" "dr_logo_b.gif" "http://orsoc.se:4488/svn/opencores/dr_logo_b.gif" - check_svn_return_value - svn import -m "Import from OC" "logos" "http://orsoc.se:4488/svn/opencores/logos" - check_svn_return_value - svn import -m "Import from OC" "mdl_logo.jpg" "http://orsoc.se:4488/svn/opencores/mdl_logo.jpg" - check_svn_return_value - svn import -m "Import from OC" "ORSoC_logo.jpg" "http://orsoc.se:4488/svn/opencores/ORSoC_logo.jpg" - check_svn_return_value - svn import -m "Import from OC" "press" "http://orsoc.se:4488/svn/opencores/press" - check_svn_return_value - svn import -m "Import from OC" "regionalbreakdown.png" "http://orsoc.se:4488/svn/opencores/regionalbreakdown.png" - check_svn_return_value - svn import -m "Import from OC" "siteranking.png" "http://orsoc.se:4488/svn/opencores/siteranking.png" - check_svn_return_value - svn import -m "Import from OC" "sponsors" "http://orsoc.se:4488/svn/opencores/sponsors" - check_svn_return_value - svn import -m "Import from OC" "thumb_dr_logo_b.gif" "http://orsoc.se:4488/svn/opencores/thumb_dr_logo_b.gif" - check_svn_return_value - svn import -m "Import from OC" "Ultimodule_Logo_Blue.JPG" "http://orsoc.se:4488/svn/opencores/Ultimodule_Logo_Blue.JPG" - check_svn_return_value - popd - pushd "opencpu678085" - popd - pushd "openfire" - popd - pushd "openfire2" - svn import -m "Import from OC" "freertos.zip" "http://orsoc.se:4488/svn/openfire2/freertos.zip" - check_svn_return_value - svn import -m "Import from OC" "targetselection.itb" "http://orsoc.se:4488/svn/openfire2/targetselection.itb" - check_svn_return_value - popd - pushd "openfire_core" - popd - pushd "openh263" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/openh263/index.shtml" - check_svn_return_value - popd - pushd "openriscdevboard" - svn import -m "Import from OC" "altera_dev_brd.zip" "http://orsoc.se:4488/svn/openriscdevboard/altera_dev_brd.zip" - check_svn_return_value - svn import -m "Import from OC" "cyc2-openrisc.zip" "http://orsoc.se:4488/svn/openriscdevboard/cyc2-openrisc.zip" - check_svn_return_value - svn import -m "Import from OC" "fpgaConfigEval_V1_2.zip" "http://orsoc.se:4488/svn/openriscdevboard/fpgaConfigEval_V1_2.zip" - check_svn_return_value - svn import -m "Import from OC" "usbPlusUart.zip" "http://orsoc.se:4488/svn/openriscdevboard/usbPlusUart.zip" - check_svn_return_value - popd - pushd "open_tcpip" - popd - pushd "opentech" - svn import -m "Import from OC" "changes_1_4_0.txt" "http://orsoc.se:4488/svn/opentech/changes_1_4_0.txt" - check_svn_return_value - svn import -m "Import from OC" "changes_1_4_1.txt" "http://orsoc.se:4488/svn/opentech/changes_1_4_1.txt" - check_svn_return_value - svn import -m "Import from OC" "changes_1_5_0.txt" "http://orsoc.se:4488/svn/opentech/changes_1_5_0.txt" - check_svn_return_value - svn import -m "Import from OC" "changes_1_5_1.txt" "http://orsoc.se:4488/svn/opentech/changes_1_5_1.txt" - check_svn_return_value - svn import -m "Import from OC" "changes_1_6_0.txt" "http://orsoc.se:4488/svn/opentech/changes_1_6_0.txt" - check_svn_return_value - svn import -m "Import from OC" "changes_1_6_1.txt" "http://orsoc.se:4488/svn/opentech/changes_1_6_1.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_4_0.txt" "http://orsoc.se:4488/svn/opentech/contents_1_4_0.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_4_1.txt" "http://orsoc.se:4488/svn/opentech/contents_1_4_1.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_5_0.txt" "http://orsoc.se:4488/svn/opentech/contents_1_5_0.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_5_1.txt" "http://orsoc.se:4488/svn/opentech/contents_1_5_1.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_6_0.txt" "http://orsoc.se:4488/svn/opentech/contents_1_6_0.txt" - check_svn_return_value - svn import -m "Import from OC" "contents_1_6_1.txt" "http://orsoc.se:4488/svn/opentech/contents_1_6_1.txt" - check_svn_return_value - svn import -m "Import from OC" "content.txt" "http://orsoc.se:4488/svn/opentech/content.txt" - check_svn_return_value - svn import -m "Import from OC" "covers.zip" "http://orsoc.se:4488/svn/opentech/covers.zip" - check_svn_return_value - svn import -m "Import from OC" "icon.gif" "http://orsoc.se:4488/svn/opentech/icon.gif" - check_svn_return_value - svn import -m "Import from OC" "icon.jpg" "http://orsoc.se:4488/svn/opentech/icon.jpg" - check_svn_return_value - svn import -m "Import from OC" "icon.png" "http://orsoc.se:4488/svn/opentech/icon.png" - check_svn_return_value - svn import -m "Import from OC" "logo_full.jpg" "http://orsoc.se:4488/svn/opentech/logo_full.jpg" - check_svn_return_value - svn import -m "Import from OC" "OpenTech_Info.xls" "http://orsoc.se:4488/svn/opentech/OpenTech_Info.xls" - check_svn_return_value - svn import -m "Import from OC" "OpenTechnologies_small.gif" "http://orsoc.se:4488/svn/opentech/OpenTechnologies_small.gif" - check_svn_return_value - svn import -m "Import from OC" "OT_Contents.zip" "http://orsoc.se:4488/svn/opentech/OT_Contents.zip" - check_svn_return_value - popd - pushd "openverifla" - svn import -m "Import from OC" "verifla_keyboard_protocol_verification_50procent.jpg" "http://orsoc.se:4488/svn/openverifla/verifla_keyboard_protocol_verification_50procent.jpg" - check_svn_return_value - popd - pushd "or1200gct" - popd - pushd "or1k-cf" - popd - pushd "or1k-new" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/or1k-new/index.shtml" - check_svn_return_value - popd - pushd "ovcodec" - svn import -m "Import from OC" "ogg_files.zip" "http://orsoc.se:4488/svn/ovcodec/ogg_files.zip" - check_svn_return_value - popd - pushd "pap" - popd - pushd "pavr" - svn import -m "Import from OC" "pavr032.chm.zip" "http://orsoc.se:4488/svn/pavr/pavr032.chm.zip" - check_svn_return_value - svn import -m "Import from OC" "pavr032-devel.zip" "http://orsoc.se:4488/svn/pavr/pavr032-devel.zip" - check_svn_return_value - svn import -m "Import from OC" "pavr032.html.zip" "http://orsoc.se:4488/svn/pavr/pavr032.html.zip" - check_svn_return_value - svn import -m "Import from OC" "pavr0351-devel.zip" "http://orsoc.se:4488/svn/pavr/pavr0351-devel.zip" - check_svn_return_value - svn import -m "Import from OC" "pavr0351-release-chm.zip" "http://orsoc.se:4488/svn/pavr/pavr0351-release-chm.zip" - check_svn_return_value - svn import -m "Import from OC" "pavr0351-release-html.zip" "http://orsoc.se:4488/svn/pavr/pavr0351-release-html.zip" - check_svn_return_value - svn import -m "Import from OC" "todo.html" "http://orsoc.se:4488/svn/pavr/todo.html" - check_svn_return_value - popd - pushd "pci" - svn import -m "Import from OC" "charact.shtml" "http://orsoc.se:4488/svn/pci/charact.shtml" - check_svn_return_value - svn import -m "Import from OC" "contacts.shtml" "http://orsoc.se:4488/svn/pci/contacts.shtml" - check_svn_return_value - svn import -m "Import from OC" "current_stat.shtml" "http://orsoc.se:4488/svn/pci/current_stat.shtml" - check_svn_return_value - svn import -m "Import from OC" "documentation.shtml" "http://orsoc.se:4488/svn/pci/documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "download.shtml" "http://orsoc.se:4488/svn/pci/download.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/pci/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "links.shtml" "http://orsoc.se:4488/svn/pci/links.shtml" - check_svn_return_value - svn import -m "Import from OC" "PCI_HOST_architecture.jpg" "http://orsoc.se:4488/svn/pci/PCI_HOST_architecture.jpg" - check_svn_return_value - svn import -m "Import from OC" "pci_parity.html" "http://orsoc.se:4488/svn/pci/pci_parity.html" - check_svn_return_value - svn import -m "Import from OC" "pci_prototype.shtml" "http://orsoc.se:4488/svn/pci/pci_prototype.shtml" - check_svn_return_value - svn import -m "Import from OC" "PCIsim.shtml" "http://orsoc.se:4488/svn/pci/PCIsim.shtml" - check_svn_return_value - svn import -m "Import from OC" "pci_snapshots.shtml" "http://orsoc.se:4488/svn/pci/pci_snapshots.shtml" - check_svn_return_value - svn import -m "Import from OC" "PCI_VGA_conn.jpg" "http://orsoc.se:4488/svn/pci/PCI_VGA_conn.jpg" - check_svn_return_value - svn import -m "Import from OC" "PCI_VGA_cristal.jpg" "http://orsoc.se:4488/svn/pci/PCI_VGA_cristal.jpg" - check_svn_return_value - svn import -m "Import from OC" "PCI_VGA_sch.gif" "http://orsoc.se:4488/svn/pci/PCI_VGA_sch.gif" - check_svn_return_value - svn import -m "Import from OC" "PCI_VGA_sch.jpg" "http://orsoc.se:4488/svn/pci/PCI_VGA_sch.jpg" - check_svn_return_value - svn import -m "Import from OC" "PCI_VGA_test_brd.gif" "http://orsoc.se:4488/svn/pci/PCI_VGA_test_brd.gif" - check_svn_return_value - svn import -m "Import from OC" "pcixwin.jpg" "http://orsoc.se:4488/svn/pci/pcixwin.jpg" - check_svn_return_value - svn import -m "Import from OC" "Pic00022.jpg" "http://orsoc.se:4488/svn/pci/Pic00022.jpg" - check_svn_return_value - svn import -m "Import from OC" "Pic00026.jpg" "http://orsoc.se:4488/svn/pci/Pic00026.jpg" - check_svn_return_value - svn import -m "Import from OC" "Pic00027.jpg" "http://orsoc.se:4488/svn/pci/Pic00027.jpg" - check_svn_return_value - svn import -m "Import from OC" "Pic00028.jpg" "http://orsoc.se:4488/svn/pci/Pic00028.jpg" - check_svn_return_value - svn import -m "Import from OC" "Pic00037.jpg" "http://orsoc.se:4488/svn/pci/Pic00037.jpg" - check_svn_return_value - svn import -m "Import from OC" "pics" "http://orsoc.se:4488/svn/pci/pics" - check_svn_return_value - svn import -m "Import from OC" "references.shtml" "http://orsoc.se:4488/svn/pci/references.shtml" - check_svn_return_value - svn import -m "Import from OC" "test_app.shtml" "http://orsoc.se:4488/svn/pci/test_app.shtml" - check_svn_return_value - svn import -m "Import from OC" "testbench.shtml" "http://orsoc.se:4488/svn/pci/testbench.shtml" - check_svn_return_value - svn import -m "Import from OC" "test_board.shtml" "http://orsoc.se:4488/svn/pci/test_board.shtml" - check_svn_return_value - svn import -m "Import from OC" "test_driver.shtml" "http://orsoc.se:4488/svn/pci/test_driver.shtml" - check_svn_return_value - svn import -m "Import from OC" "test_snapshots.shtml" "http://orsoc.se:4488/svn/pci/test_snapshots.shtml" - check_svn_return_value - svn import -m "Import from OC" "thumb_pcixwin.jpg" "http://orsoc.se:4488/svn/pci/thumb_pcixwin.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_Pic00022.jpg" "http://orsoc.se:4488/svn/pci/thumb_Pic00022.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_Pic00026.jpg" "http://orsoc.se:4488/svn/pci/thumb_Pic00026.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_Pic00027.jpg" "http://orsoc.se:4488/svn/pci/thumb_Pic00027.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_Pic00028.jpg" "http://orsoc.se:4488/svn/pci/thumb_Pic00028.jpg" - check_svn_return_value - svn import -m "Import from OC" "thumb_Pic00037.jpg" "http://orsoc.se:4488/svn/pci/thumb_Pic00037.jpg" - check_svn_return_value - svn import -m "Import from OC" "todo_list.shtml" "http://orsoc.se:4488/svn/pci/todo_list.shtml" - check_svn_return_value - popd - pushd "pci32tlite_oc" - popd - pushd "pci-board" - svn import -m "Import from OC" "PCI-Board.jpeg" "http://orsoc.se:4488/svn/pci-board/PCI-Board.jpeg" - check_svn_return_value - svn import -m "Import from OC" "PCI-Board.jpg" "http://orsoc.se:4488/svn/pci-board/PCI-Board.jpg" - check_svn_return_value - svn import -m "Import from OC" "PCI-CARD-SCH-v1.0.pdf" "http://orsoc.se:4488/svn/pci-board/PCI-CARD-SCH-v1.0.pdf" - check_svn_return_value - svn import -m "Import from OC" "PCI-Card-v1.0.pdf" "http://orsoc.se:4488/svn/pci-board/PCI-Card-v1.0.pdf" - check_svn_return_value - popd - pushd "pci_controller" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/pci_controller/*" - check_svn_return_value - popd - pushd "pcie_vera_tb" - popd - pushd "pci_express" - popd - pushd "pci_express_crc" - popd - pushd "pci_ide_controller" - popd - pushd "pci_mini" - svn import -m "Import from OC" "PCI_Mini_IP_core_Datasheet2.0_oc.pdf" "http://orsoc.se:4488/svn/pci_mini/PCI_Mini_IP_core_Datasheet2.0_oc.pdf" - check_svn_return_value - svn import -m "Import from OC" "PCI_mini.zip" "http://orsoc.se:4488/svn/pci_mini/PCI_mini.zip" - check_svn_return_value - popd - pushd "pcix" - popd - pushd "pcmcia" - popd - pushd "performance_counter" - svn import -m "Import from OC" "PeformanceCounterforMicroblazev0.1.zip" "http://orsoc.se:4488/svn/performance_counter/PeformanceCounterforMicroblazev0.1.zip" - check_svn_return_value - popd - pushd "perlilog" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/perlilog/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "old-index.shtml" "http://orsoc.se:4488/svn/perlilog/old-index.shtml" - check_svn_return_value - svn import -m "Import from OC" "Perlilog-0.2.tar.gz" "http://orsoc.se:4488/svn/perlilog/Perlilog-0.2.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "Perlilog-0.3.tar.gz" "http://orsoc.se:4488/svn/perlilog/Perlilog-0.3.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "perlilog-guide-0.2.pdf" "http://orsoc.se:4488/svn/perlilog/perlilog-guide-0.2.pdf" - check_svn_return_value - svn import -m "Import from OC" "perlilog-guide-0.3.pdf" "http://orsoc.se:4488/svn/perlilog/perlilog-guide-0.3.pdf" - check_svn_return_value - svn import -m "Import from OC" "perlilog-guide.pdf" "http://orsoc.se:4488/svn/perlilog/perlilog-guide.pdf" - check_svn_return_value - svn import -m "Import from OC" "perlilog.tar.gz" "http://orsoc.se:4488/svn/perlilog/perlilog.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "perlilog.zip" "http://orsoc.se:4488/svn/perlilog/perlilog.zip" - check_svn_return_value - popd - pushd "phoenix_controller" - popd - pushd "pic8259" - popd - pushd "picoblaze_interrupt_controller" - svn import -m "Import from OC" "Pblaze_IntController-061221.zip" "http://orsoc.se:4488/svn/picoblaze_interrupt_controller/Pblaze_IntController-061221.zip" - check_svn_return_value - popd - pushd "pif2wb" - popd - pushd "pipelined_aes" - popd - pushd "pipelined_dct" - popd - pushd "piranha" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/piranha/*" - check_svn_return_value - popd - pushd "power_inverter" - popd - pushd "ppcnorthbridge" - popd - pushd "ppx16" - popd - pushd "product_code_iterative_decoder" - popd - pushd "profibus_dp" - svn import -m "Import from OC" "vhdl_source_files.zip" "http://orsoc.se:4488/svn/profibus_dp/vhdl_source_files.zip" - check_svn_return_value - popd - pushd "programmabledct" - popd - pushd "project" - svn import -m "Import from OC" "datapath.pdf" "http://orsoc.se:4488/svn/project/datapath.pdf" - check_svn_return_value - svn import -m "Import from OC" "Informations.doc" "http://orsoc.se:4488/svn/project/Informations.doc" - check_svn_return_value - svn import -m "Import from OC" "memories_core_jenerator_implementations.rar" "http://orsoc.se:4488/svn/project/memories_core_jenerator_implementations.rar" - check_svn_return_value - svn import -m "Import from OC" "Readme-Instructions.doc" "http://orsoc.se:4488/svn/project/Readme-Instructions.doc" - check_svn_return_value - svn import -m "Import from OC" "RegFile_SystemC_implementation.rar" "http://orsoc.se:4488/svn/project/RegFile_SystemC_implementation.rar" - check_svn_return_value - svn import -m "Import from OC" "systemC_Implementation.rar" "http://orsoc.se:4488/svn/project/systemC_Implementation.rar" - check_svn_return_value - svn import -m "Import from OC" "Xilinx_project_from_files_from_SystemC_implementation.rar" "http://orsoc.se:4488/svn/project/Xilinx_project_from_files_from_SystemC_implementation.rar" - check_svn_return_value - popd - pushd "ps2" - svn import -m "Import from OC" "documentation.shtml" "http://orsoc.se:4488/svn/ps2/documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "download.shtml" "http://orsoc.se:4488/svn/ps2/download.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/ps2/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "people.shtml" "http://orsoc.se:4488/svn/ps2/people.shtml" - check_svn_return_value - svn import -m "Import from OC" "ps2_keyboard.v" "http://orsoc.se:4488/svn/ps2/ps2_keyboard.v" - check_svn_return_value - svn import -m "Import from OC" "ps2_mouse.v" "http://orsoc.se:4488/svn/ps2/ps2_mouse.v" - check_svn_return_value - svn import -m "Import from OC" "ps2_soc1.zip" "http://orsoc.se:4488/svn/ps2/ps2_soc1.zip" - check_svn_return_value - svn import -m "Import from OC" "ps2_soc2.zip" "http://orsoc.se:4488/svn/ps2/ps2_soc2.zip" - check_svn_return_value - popd - pushd "ps2core" - popd - pushd "ptc" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/ptc/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "ptc_spec.pdf" "http://orsoc.se:4488/svn/ptc/ptc_spec.pdf" - check_svn_return_value - popd - pushd "pyramid_unit" - popd - pushd "quadraturecount" - popd - pushd "r2000" - popd - pushd "radixrsa" - svn import -m "Import from OC" "core.shtml" "http://orsoc.se:4488/svn/radixrsa/core.shtml" - check_svn_return_value - svn import -m "Import from OC" "doc.shtml" "http://orsoc.se:4488/svn/radixrsa/doc.shtml" - check_svn_return_value - svn import -m "Import from OC" "dotty.gif" "http://orsoc.se:4488/svn/radixrsa/dotty.gif" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/radixrsa/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "montgo.jpg" "http://orsoc.se:4488/svn/radixrsa/montgo.jpg" - check_svn_return_value - svn import -m "Import from OC" "RSAAlgorithm.pdf" "http://orsoc.se:4488/svn/radixrsa/RSAAlgorithm.pdf" - check_svn_return_value - svn import -m "Import from OC" "title_logo.gif" "http://orsoc.se:4488/svn/radixrsa/title_logo.gif" - check_svn_return_value - popd - pushd "raggedstone" - svn import -m "Import from OC" "README" "http://orsoc.se:4488/svn/raggedstone/README" - check_svn_return_value - popd - pushd "rc5-72" - popd - pushd "rc5_decoder" - popd - pushd "rfid" - svn import -m "Import from OC" "7Prog.pdf" "http://orsoc.se:4488/svn/rfid/7Prog.pdf" - check_svn_return_value - svn import -m "Import from OC" "TheMultiTagTesterFinal.exe" "http://orsoc.se:4488/svn/rfid/TheMultiTagTesterFinal.exe" - check_svn_return_value - popd - pushd "rijndael" - svn import -m "Import from OC" "dekrip_files" "http://orsoc.se:4488/svn/rijndael/dekrip_files" - check_svn_return_value - svn import -m "Import from OC" "dekrip.htm" "http://orsoc.se:4488/svn/rijndael/dekrip.htm" - check_svn_return_value - svn import -m "Import from OC" "enkrip_files" "http://orsoc.se:4488/svn/rijndael/enkrip_files" - check_svn_return_value - svn import -m "Import from OC" "enkrip.htm" "http://orsoc.se:4488/svn/rijndael/enkrip.htm" - check_svn_return_value - svn import -m "Import from OC" "enkrip.pdf" "http://orsoc.se:4488/svn/rijndael/enkrip.pdf" - check_svn_return_value - popd - pushd "risc16f84" - svn import -m "Import from OC" "b13c_environment.zip" "http://orsoc.se:4488/svn/risc16f84/b13c_environment.zip" - check_svn_return_value - svn import -m "Import from OC" "documentation.shtml" "http://orsoc.se:4488/svn/risc16f84/documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "download.shtml" "http://orsoc.se:4488/svn/risc16f84/download.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/risc16f84/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "people.shtml" "http://orsoc.se:4488/svn/risc16f84/people.shtml" - check_svn_return_value - svn import -m "Import from OC" "risc16f84_clk2x.v" "http://orsoc.se:4488/svn/risc16f84/risc16f84_clk2x.v" - check_svn_return_value - svn import -m "Import from OC" "risc16f84_lite.v" "http://orsoc.se:4488/svn/risc16f84/risc16f84_lite.v" - check_svn_return_value - svn import -m "Import from OC" "risc16f84_small.v" "http://orsoc.se:4488/svn/risc16f84/risc16f84_small.v" - check_svn_return_value - svn import -m "Import from OC" "risc16f84.v" "http://orsoc.se:4488/svn/risc16f84/risc16f84.v" - check_svn_return_value - svn import -m "Import from OC" "srec_to_rs232.pl" "http://orsoc.se:4488/svn/risc16f84/srec_to_rs232.pl" - check_svn_return_value - popd - pushd "risc36" - popd - pushd "risc5x" - svn import -m "Import from OC" "hex_conv.zip" "http://orsoc.se:4488/svn/risc5x/hex_conv.zip" - check_svn_return_value - svn import -m "Import from OC" "risc5x_rel1.0.zip" "http://orsoc.se:4488/svn/risc5x/risc5x_rel1.0.zip" - check_svn_return_value - svn import -m "Import from OC" "risc5x_rel1.1.zip" "http://orsoc.se:4488/svn/risc5x/risc5x_rel1.1.zip" - check_svn_return_value - popd - pushd "risc_core_i" - svn import -m "Import from OC" "risc_core_I.zip" "http://orsoc.se:4488/svn/risc_core_i/risc_core_I.zip" - check_svn_return_value - svn import -m "Import from OC" "RISCCore.pdf" "http://orsoc.se:4488/svn/risc_core_i/RISCCore.pdf" - check_svn_return_value - svn import -m "Import from OC" "vhdl files.zip" "http://orsoc.se:4488/svn/risc_core_i/vhdl files.zip" - check_svn_return_value - svn import -m "Import from OC" "Zusammenfassung.pdf" "http://orsoc.se:4488/svn/risc_core_i/Zusammenfassung.pdf" - check_svn_return_value - popd - pushd "riscmcu" - svn import -m "Import from OC" "BlockDiagram.gif" "http://orsoc.se:4488/svn/riscmcu/BlockDiagram.gif" - check_svn_return_value - popd - pushd "risc_processor_with_os" - popd - pushd "rise" - popd - pushd "rng_lib" - svn import -m "Import from OC" "rng_lib_v10.zip" "http://orsoc.se:4488/svn/rng_lib/rng_lib_v10.zip" - check_svn_return_value - popd - pushd "robot_control_library" - svn import -m "Import from OC" "documentation.zip" "http://orsoc.se:4488/svn/robot_control_library/documentation.zip" - check_svn_return_value - svn import -m "Import from OC" "OPB_PID_v1_00_a.zip" "http://orsoc.se:4488/svn/robot_control_library/OPB_PID_v1_00_a.zip" - check_svn_return_value - svn import -m "Import from OC" "OPB_PS2_Joypad_v1_00_a.zip" "http://orsoc.se:4488/svn/robot_control_library/OPB_PS2_Joypad_v1_00_a.zip" - check_svn_return_value - svn import -m "Import from OC" "Quadrature_Encoder_v1_00_a.zip" "http://orsoc.se:4488/svn/robot_control_library/Quadrature_Encoder_v1_00_a.zip" - check_svn_return_value - svn import -m "Import from OC" "Stepper_Control_v1_00_a.zip" "http://orsoc.se:4488/svn/robot_control_library/Stepper_Control_v1_00_a.zip" - check_svn_return_value - popd - pushd "rosetta" - popd - pushd "rs232_syscon" - svn import -m "Import from OC" "b10_safe_12_18_01_dual_path.zip" "http://orsoc.se:4488/svn/rs232_syscon/b10_safe_12_18_01_dual_path.zip" - check_svn_return_value - svn import -m "Import from OC" "b11_risc16f84_05_03_02.zip" "http://orsoc.se:4488/svn/rs232_syscon/b11_risc16f84_05_03_02.zip" - check_svn_return_value - svn import -m "Import from OC" "b13_safe_09_17_02.zip" "http://orsoc.se:4488/svn/rs232_syscon/b13_safe_09_17_02.zip" - check_svn_return_value - svn import -m "Import from OC" "documentation.shtml" "http://orsoc.se:4488/svn/rs232_syscon/documentation.shtml" - check_svn_return_value - svn import -m "Import from OC" "download.shtml" "http://orsoc.se:4488/svn/rs232_syscon/download.shtml" - check_svn_return_value - svn import -m "Import from OC" "Image4.gif" "http://orsoc.se:4488/svn/rs232_syscon/Image4.gif" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/rs232_syscon/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "people.shtml" "http://orsoc.se:4488/svn/rs232_syscon/people.shtml" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_1_00_source.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_1_00_source.zip" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_1_01_xsoc.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_1_01_xsoc.zip" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon1.doc" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon1.doc" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_autobaud.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_autobaud.zip" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon.htm" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon.htm" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon.pdf" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon.pdf" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_soc1.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_soc1.zip" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_soc2.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_soc2.zip" - check_svn_return_value - svn import -m "Import from OC" "rs232_syscon_soc3.zip" "http://orsoc.se:4488/svn/rs232_syscon/rs232_syscon_soc3.zip" - check_svn_return_value - svn import -m "Import from OC" "srec_to_rs232.pl" "http://orsoc.se:4488/svn/rs232_syscon/srec_to_rs232.pl" - check_svn_return_value - popd - pushd "rs_5_3_gf256" - svn import -m "Import from OC" "ReedSolomon(5,3)Codec.ppt" "http://orsoc.se:4488/svn/rs_5_3_gf256/ReedSolomon(5,3)Codec.ppt" - check_svn_return_value - popd - pushd "rsa" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/rsa/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "rsa" "http://orsoc.se:4488/svn/rsa/rsa" - check_svn_return_value - svn import -m "Import from OC" "RSA.htm" "http://orsoc.se:4488/svn/rsa/RSA.htm" - check_svn_return_value - svn import -m "Import from OC" "RSA.shtml" "http://orsoc.se:4488/svn/rsa/RSA.shtml" - check_svn_return_value - popd - pushd "rs_decoder_31_19_6" - popd - pushd "rsencoder" - svn import -m "Import from OC" "readme.txt" "http://orsoc.se:4488/svn/rsencoder/readme.txt" - check_svn_return_value - svn import -m "Import from OC" "reed_solomon.v" "http://orsoc.se:4488/svn/rsencoder/reed_solomon.v" - check_svn_return_value - svn import -m "Import from OC" "rs_testbench.v" "http://orsoc.se:4488/svn/rsencoder/rs_testbench.v" - check_svn_return_value - popd - pushd "s1_core" - popd - pushd "sardmips" - popd - pushd "sasc" - popd - pushd "sata1a" - popd - pushd "sayeh_processor" - popd - pushd "sbd_sqrt_fp" - popd - pushd "sc2v" - popd - pushd "scarm" - svn import -m "Import from OC" "arm1.JPG" "http://orsoc.se:4488/svn/scarm/arm1.JPG" - check_svn_return_value - svn import -m "Import from OC" "chinese" "http://orsoc.se:4488/svn/scarm/chinese" - check_svn_return_value - svn import -m "Import from OC" "english" "http://orsoc.se:4488/svn/scarm/english" - check_svn_return_value - svn import -m "Import from OC" "images" "http://orsoc.se:4488/svn/scarm/images" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/scarm/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "main.shtml" "http://orsoc.se:4488/svn/scarm/main.shtml" - check_svn_return_value - svn import -m "Import from OC" "src.zip" "http://orsoc.se:4488/svn/scarm/src.zip" - check_svn_return_value - svn import -m "Import from OC" "test" "http://orsoc.se:4488/svn/scarm/test" - check_svn_return_value - svn import -m "Import from OC" "test.zip" "http://orsoc.se:4488/svn/scarm/test.zip" - check_svn_return_value - popd - pushd "scsi_interface" - popd - pushd "sdram" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/sdram/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml2" "http://orsoc.se:4488/svn/sdram/index.shtml2" - check_svn_return_value - svn import -m "Import from OC" "intefacing block diagram.gif" "http://orsoc.se:4488/svn/sdram/intefacing block diagram.gif" - check_svn_return_value - svn import -m "Import from OC" "interfacing_block_diagram.gif" "http://orsoc.se:4488/svn/sdram/interfacing_block_diagram.gif" - check_svn_return_value - svn import -m "Import from OC" "sdram_doc.pdf" "http://orsoc.se:4488/svn/sdram/sdram_doc.pdf" - check_svn_return_value - svn import -m "Import from OC" "sdram.html" "http://orsoc.se:4488/svn/sdram/sdram.html" - check_svn_return_value - svn import -m "Import from OC" "sdram_ip_doc_preliminary.pdf" "http://orsoc.se:4488/svn/sdram/sdram_ip_doc_preliminary.pdf" - check_svn_return_value - popd - pushd "sdram_ctrl" - popd - pushd "sdr_sdram_ctrl" - popd - pushd "serial_div_uu" - svn import -m "Import from OC" "pwm_reader.v" "http://orsoc.se:4488/svn/serial_div_uu/pwm_reader.v" - check_svn_return_value - svn import -m "Import from OC" "serial_divide_uu.v" "http://orsoc.se:4488/svn/serial_div_uu/serial_divide_uu.v" - check_svn_return_value - popd - pushd "serpent_core" - popd - pushd "sfpga" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/sfpga/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "ocrp-2_protel_sch.zip" "http://orsoc.se:4488/svn/sfpga/ocrp-2_protel_sch.zip" - check_svn_return_value - svn import -m "Import from OC" "OCRP-2_sch_preliminary.pdf" "http://orsoc.se:4488/svn/sfpga/OCRP-2_sch_preliminary.pdf" - check_svn_return_value - svn import -m "Import from OC" "sfpga_block.gif" "http://orsoc.se:4488/svn/sfpga/sfpga_block.gif" - check_svn_return_value - popd - pushd "sha1" - svn import -m "Import from OC" "sha1_readme_v01.txt" "http://orsoc.se:4488/svn/sha1/sha1_readme_v01.txt" - check_svn_return_value - svn import -m "Import from OC" "sha1_v01.zip" "http://orsoc.se:4488/svn/sha1/sha1_v01.zip" - check_svn_return_value - popd - pushd "sha_core" - popd - pushd "simpcon" - popd - pushd "simplearm" - popd - pushd "simple-cpu" - popd - pushd "simple_fm_receiver" - popd - pushd "simple_gpio" - popd - pushd "simple_pic" - popd - pushd "simple_spi" - popd - pushd "simple_uart" - svn import -m "Import from OC" "simpleUart.zip" "http://orsoc.se:4488/svn/simple_uart/simpleUart.zip" - check_svn_return_value - popd - pushd "single_clock_divider" - popd - pushd "single_port" - svn import -m "Import from OC" "single_port.tar.gz" "http://orsoc.se:4488/svn/single_port/single_port.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "single_port.zip" "http://orsoc.se:4488/svn/single_port/single_port.zip" - check_svn_return_value - popd - pushd "slave_vme_bridge" - popd - pushd "smallarm" - popd - pushd "smbus_if" - svn import -m "Import from OC" "smbus_if.doc" "http://orsoc.se:4488/svn/smbus_if/smbus_if.doc" - check_svn_return_value - popd - pushd "socbuilder" - popd - pushd "soft_core_risc_microprocessor_design_enabling_the_port_of_an_os" - popd - pushd "sonet" - svn import -m "Import from OC" "blockdia.doc" "http://orsoc.se:4488/svn/sonet/blockdia.doc" - check_svn_return_value - svn import -m "Import from OC" "overview.doc" "http://orsoc.se:4488/svn/sonet/overview.doc" - check_svn_return_value - popd - pushd "spacewire" - svn import -m "Import from OC" "Router.JPG" "http://orsoc.se:4488/svn/spacewire/Router.JPG" - check_svn_return_value - svn import -m "Import from OC" "SpWinterfacewithCODEC.JPG" "http://orsoc.se:4488/svn/spacewire/SpWinterfacewithCODEC.JPG" - check_svn_return_value - popd - pushd "spacewire_if" - popd - pushd "spates" - popd - pushd "spdif_interface" - popd - pushd "spi" - popd - pushd "spi_boot" - popd - pushd "spicc" - popd - pushd "spiflashcontroller" - popd - pushd "spimaster" - svn import -m "Import from OC" "spiMaster.zip" "http://orsoc.se:4488/svn/spimaster/spiMaster.zip" - check_svn_return_value - popd - pushd "spi_slave" - popd - pushd "spi-slave" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/spi-slave/*" - check_svn_return_value - popd - pushd "srl_fifo" - popd - pushd "srtdivision" - popd - pushd "ss_pcm" - popd - pushd "ssram" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/ssram/index.shtml" - check_svn_return_value - popd - pushd "steppermotordrive" - popd - pushd "sts1" - svn import -m "Import from OC" "spe.vhd" "http://orsoc.se:4488/svn/sts1/spe.vhd" - check_svn_return_value - popd - pushd "svmac" - popd - pushd "sxp" - svn import -m "Import from OC" "sxp_block.gif" "http://orsoc.se:4488/svn/sxp/sxp_block.gif" - check_svn_return_value - popd - pushd "system05" - popd - pushd "system09" - svn import -m "Import from OC" "index.html" "http://orsoc.se:4488/svn/system09/index.html" - check_svn_return_value - svn import -m "Import from OC" "System09-oc-6sep03.zip" "http://orsoc.se:4488/svn/system09/System09-oc-6sep03.zip" - check_svn_return_value - svn import -m "Import from OC" "xbasic.s19" "http://orsoc.se:4488/svn/system09/xbasic.s19" - check_svn_return_value - popd - pushd "system11" - svn import -m "Import from OC" "Sys11_X300_5sep03.zip" "http://orsoc.se:4488/svn/system11/Sys11_X300_5sep03.zip" - check_svn_return_value - popd - pushd "system68" - svn import -m "Import from OC" "Sys68-X300-17jan04.zip" "http://orsoc.se:4488/svn/system68/Sys68-X300-17jan04.zip" - check_svn_return_value - popd - pushd "system6801" - svn import -m "Import from OC" "System6801.zip" "http://orsoc.se:4488/svn/system6801/System6801.zip" - check_svn_return_value - svn import -m "Import from OC" "utilities.zip" "http://orsoc.se:4488/svn/system6801/utilities.zip" - check_svn_return_value - popd - pushd "systemcaes" - popd - pushd "systemc_cordic" - popd - pushd "systemcdes" - popd - pushd "systemcmd5" - popd - pushd "systemc_rng" - popd - pushd "t400" - popd - pushd "t48" - popd - pushd "t51" - popd - pushd "t65" - popd - pushd "t80" - popd - pushd "t8000" - popd - pushd "tdm" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/tdm/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "tdm_core.jpg" "http://orsoc.se:4488/svn/tdm/tdm_core.jpg" - check_svn_return_value - svn import -m "Import from OC" "tdm_core.ps" "http://orsoc.se:4488/svn/tdm/tdm_core.ps" - check_svn_return_value - svn import -m "Import from OC" "tdm_ISDN_top.jpg" "http://orsoc.se:4488/svn/tdm/tdm_ISDN_top.jpg" - check_svn_return_value - svn import -m "Import from OC" "tdm_ISDN_top.ps" "http://orsoc.se:4488/svn/tdm/tdm_ISDN_top.ps" - check_svn_return_value - svn import -m "Import from OC" "tdm_project.html" "http://orsoc.se:4488/svn/tdm/tdm_project.html" - check_svn_return_value - svn import -m "Import from OC" "tdm_project.pdf" "http://orsoc.se:4488/svn/tdm/tdm_project.pdf" - check_svn_return_value - svn import -m "Import from OC" "tdm_project.ps" "http://orsoc.se:4488/svn/tdm/tdm_project.ps" - check_svn_return_value - svn import -m "Import from OC" "tdm_top.jpg" "http://orsoc.se:4488/svn/tdm/tdm_top.jpg" - check_svn_return_value - svn import -m "Import from OC" "tdm_top.ps" "http://orsoc.se:4488/svn/tdm/tdm_top.ps" - check_svn_return_value - svn import -m "Import from OC" "wishlogo.ps" "http://orsoc.se:4488/svn/tdm/wishlogo.ps" - check_svn_return_value - popd - pushd "tdm_switch" - svn import -m "Import from OC" "map.dat" "http://orsoc.se:4488/svn/tdm_switch/map.dat" - check_svn_return_value - svn import -m "Import from OC" "ModelSim_Edition.exe" "http://orsoc.se:4488/svn/tdm_switch/ModelSim_Edition.exe" - check_svn_return_value - svn import -m "Import from OC" "stream_0.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_0.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_1.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_1.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_2.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_2.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_3.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_3.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_4.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_4.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_5.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_5.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_6.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_6.dat" - check_svn_return_value - svn import -m "Import from OC" "stream_7.dat" "http://orsoc.se:4488/svn/tdm_switch/stream_7.dat" - check_svn_return_value - svn import -m "Import from OC" "tdm_switch_b.v" "http://orsoc.se:4488/svn/tdm_switch/tdm_switch_b.v" - check_svn_return_value - svn import -m "Import from OC" "TDM_Switch_DS.pdf" "http://orsoc.se:4488/svn/tdm_switch/TDM_Switch_DS.pdf" - check_svn_return_value - svn import -m "Import from OC" "tdm_switch_top_timesim.sdf" "http://orsoc.se:4488/svn/tdm_switch/tdm_switch_top_timesim.sdf" - check_svn_return_value - svn import -m "Import from OC" "tdm_switch_top_timesim.v" "http://orsoc.se:4488/svn/tdm_switch/tdm_switch_top_timesim.v" - check_svn_return_value - svn import -m "Import from OC" "tdm_switch_top.v" "http://orsoc.se:4488/svn/tdm_switch/tdm_switch_top.v" - check_svn_return_value - svn import -m "Import from OC" "testbench_top.v" "http://orsoc.se:4488/svn/tdm_switch/testbench_top.v" - check_svn_return_value - popd - pushd "template" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/template/index.shtml" - check_svn_return_value - popd - pushd "test" - svn import -m "Import from OC" "apple.gif" "http://orsoc.se:4488/svn/test/apple.gif" - check_svn_return_value - svn import -m "Import from OC" "FLEX_w_CMYK_R_LG.jpg" "http://orsoc.se:4488/svn/test/FLEX_w_CMYK_R_LG.jpg" - check_svn_return_value - svn import -m "Import from OC" "include1.ssi" "http://orsoc.se:4488/svn/test/include1.ssi" - check_svn_return_value - svn import -m "Import from OC" "include2.ssi" "http://orsoc.se:4488/svn/test/include2.ssi" - check_svn_return_value - popd - pushd "test1" - svn import -m "Import from OC" "arrow_ltr.gif" "http://orsoc.se:4488/svn/test1/arrow_ltr.gif" - check_svn_return_value - svn import -m "Import from OC" "sed_awk.pdf" "http://orsoc.se:4488/svn/test1/sed_awk.pdf" - check_svn_return_value - popd - pushd "test2" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/test2/*" - check_svn_return_value - popd - pushd "test3" - popd - pushd "test_project" - popd - pushd "test-project" - svn import -m "Import from OC" "vl.bmp" "http://orsoc.se:4488/svn/test-project/vl.bmp" - check_svn_return_value - popd - pushd "tg68" - popd - pushd "tiny64" - popd - pushd "tiny8" - popd - pushd "tlc2" - popd - pushd "toe" - popd - pushd "tone_generator" - popd - pushd "totalcpu" - popd - pushd "trinitor" - popd - pushd "truescalar" - popd - pushd "ts7300_opencore" - svn import -m "Import from OC" "7300stclwp.jpg" "http://orsoc.se:4488/svn/ts7300_opencore/7300stclwp.jpg" - check_svn_return_value - svn import -m "Import from OC" "ts7300_opencore.zip" "http://orsoc.se:4488/svn/ts7300_opencore/ts7300_opencore.zip" - check_svn_return_value - popd - pushd "turbocodes" - svn import -m "Import from OC" "turbo.tar.gz" "http://orsoc.se:4488/svn/turbocodes/turbo.tar.gz" - check_svn_return_value - popd - pushd "tv80" - svn import -m "Import from OC" "tv80_rel1.0.zip" "http://orsoc.se:4488/svn/tv80/tv80_rel1.0.zip" - check_svn_return_value - popd - pushd "twofish" - popd - pushd "twofish_team" - svn import -m "Import from OC" "ciphertext.jpg" "http://orsoc.se:4488/svn/twofish_team/ciphertext.jpg" - check_svn_return_value - svn import -m "Import from OC" "cleartext.jpg" "http://orsoc.se:4488/svn/twofish_team/cleartext.jpg" - check_svn_return_value - svn import -m "Import from OC" "key-mod.jpg" "http://orsoc.se:4488/svn/twofish_team/key-mod.jpg" - check_svn_return_value - svn import -m "Import from OC" "modifiedF.jpg" "http://orsoc.se:4488/svn/twofish_team/modifiedF.jpg" - check_svn_return_value - svn import -m "Import from OC" "peracangan" "http://orsoc.se:4488/svn/twofish_team/peracangan" - check_svn_return_value - svn import -m "Import from OC" "qper.jpg" "http://orsoc.se:4488/svn/twofish_team/qper.jpg" - check_svn_return_value - svn import -m "Import from OC" "s-boxes.jpg" "http://orsoc.se:4488/svn/twofish_team/s-boxes.jpg" - check_svn_return_value - svn import -m "Import from OC" "twofish.jpg" "http://orsoc.se:4488/svn/twofish_team/twofish.jpg" - check_svn_return_value - svn import -m "Import from OC" "twofish.zip" "http://orsoc.se:4488/svn/twofish_team/twofish.zip" - check_svn_return_value - popd - pushd "ualpha" - popd - pushd "uart16550" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/uart16550/index.shtml" - check_svn_return_value - popd - pushd "uart8bit" - popd - pushd "uart_fifo" - popd - pushd "uart_serial" - popd - pushd "ucore" - svn import -m "Import from OC" "ucsys-0.0.1.rar" "http://orsoc.se:4488/svn/ucore/ucsys-0.0.1.rar" - check_svn_return_value - popd - pushd "ultimate_crc" - svn import -m "Import from OC" "ultimate_crc_1_0.zip" "http://orsoc.se:4488/svn/ultimate_crc/ultimate_crc_1_0.zip" - check_svn_return_value - popd - pushd "ultramegasquirt" - popd - pushd "ultravec" - popd - pushd "upcable" - svn import -m "Import from OC" "odd_vhdl.zip" "http://orsoc.se:4488/svn/upcable/odd_vhdl.zip" - check_svn_return_value - svn import -m "Import from OC" "OneDollarDongle.pdf" "http://orsoc.se:4488/svn/upcable/OneDollarDongle.pdf" - check_svn_return_value - svn import -m "Import from OC" "ver1_xc9536xl_vq44_single_side.zip" "http://orsoc.se:4488/svn/upcable/ver1_xc9536xl_vq44_single_side.zip" - check_svn_return_value - popd - pushd "usb11" - popd - pushd "usb1_funct" - popd - pushd "usb_dongle_fpga" - svn import -m "Import from OC" "block_diagram.png" "http://orsoc.se:4488/svn/usb_dongle_fpga/block_diagram.png" - check_svn_return_value - svn import -m "Import from OC" "dongle_block.png" "http://orsoc.se:4488/svn/usb_dongle_fpga/dongle_block.png" - check_svn_return_value - svn import -m "Import from OC" "mini_LR_DSC_0016.jpg" "http://orsoc.se:4488/svn/usb_dongle_fpga/mini_LR_DSC_0016.jpg" - check_svn_return_value - svn import -m "Import from OC" "small_LR_DSC_0016.jpg" "http://orsoc.se:4488/svn/usb_dongle_fpga/small_LR_DSC_0016.jpg" - check_svn_return_value - svn import -m "Import from OC" "usb_dongle.jpg" "http://orsoc.se:4488/svn/usb_dongle_fpga/usb_dongle.jpg" - check_svn_return_value - popd - pushd "usbhost" - svn import -m "Import from OC" "alliance.shtml" "http://orsoc.se:4488/svn/usbhost/alliance.shtml" - check_svn_return_value - svn import -m "Import from OC" "HDL" "http://orsoc.se:4488/svn/usbhost/HDL" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh10.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh10.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh11.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh11.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh12.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh12.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh13.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh13.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh14.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh14.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh15.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh15.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh16.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh16.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh17.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh17.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh18.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh18.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh19.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh19.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh1.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh1.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh20.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh20.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh21.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh21.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.sh22.jpg" "http://orsoc.se:4488/svn/usbhost/HDL.sh22.jpg" - check_svn_return_value - svn import -m "Import from OC" "HDL.shtml" "http://orsoc.se:4488/svn/usbhost/HDL.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.1.gif" "http://orsoc.se:4488/svn/usbhost/index.1.gif" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/usbhost/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "README" "http://orsoc.se:4488/svn/usbhost/README" - check_svn_return_value - popd - pushd "usbhostslave" - svn import -m "Import from OC" "ALDEC_logo.jpg" "http://orsoc.se:4488/svn/usbhostslave/ALDEC_logo.jpg" - check_svn_return_value - svn import -m "Import from OC" "dual_Fairchild_USB_PHY_daughter_card_12001-00Rev-01.zip" "http://orsoc.se:4488/svn/usbhostslave/dual_Fairchild_USB_PHY_daughter_card_12001-00Rev-01.zip" - check_svn_return_value - svn import -m "Import from OC" "NIOSsoftware.zip" "http://orsoc.se:4488/svn/usbhostslave/NIOSsoftware.zip" - check_svn_return_value - svn import -m "Import from OC" "ohs900.zip" "http://orsoc.se:4488/svn/usbhostslave/ohs900.zip" - check_svn_return_value - svn import -m "Import from OC" "usbhostslave.zip" "http://orsoc.se:4488/svn/usbhostslave/usbhostslave.zip" - check_svn_return_value - popd - pushd "usb_phy" - popd - pushd "usucc" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/usucc/*" - check_svn_return_value - popd - pushd "utop_lvl_1" - popd - pushd "verilator" - popd - pushd "vgafb" - popd - pushd "vga_lcd" - svn import -m "Import from OC" "block_diagram.gif" "http://orsoc.se:4488/svn/vga_lcd/block_diagram.gif" - check_svn_return_value - svn import -m "Import from OC" "block_diagram.jpg" "http://orsoc.se:4488/svn/vga_lcd/block_diagram.jpg" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/vga_lcd/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "vga_core.pdf" "http://orsoc.se:4488/svn/vga_lcd/vga_core.pdf" - check_svn_return_value - popd - pushd "vhcg" - svn import -m "Import from OC" "morpheus1.1release.rar" "http://orsoc.se:4488/svn/vhcg/morpheus1.1release.rar" - check_svn_return_value - svn import -m "Import from OC" "morpheus.tar.gz" "http://orsoc.se:4488/svn/vhcg/morpheus.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "Specification.pdf" "http://orsoc.se:4488/svn/vhcg/Specification.pdf" - check_svn_return_value - popd - pushd "vhdl_cpu_emulator" - svn import -m "Import from OC" "vhdl_cpu_emulator_Beta.7z" "http://orsoc.se:4488/svn/vhdl_cpu_emulator/vhdl_cpu_emulator_Beta.7z" - check_svn_return_value - popd - pushd "vhdlmd5" - popd - pushd "vhld_tb" - popd - pushd "video_starter_kit" - svn import -m "Import from OC" "main_designoverview0.0.2.pdf" "http://orsoc.se:4488/svn/video_starter_kit/main_designoverview0.0.2.pdf" - check_svn_return_value - popd - pushd "vip_regs" - popd - pushd "viterbi_decoder" - popd - pushd "viterbi_decoder_k_7_r_1_2" - popd - pushd "vmebus" - popd - pushd "vmm" - popd - pushd "warp" - popd - pushd "wb2hpi" - svn import -m "Import from OC" "BlockTransfer1.jpg" "http://orsoc.se:4488/svn/wb2hpi/BlockTransfer1.jpg" - check_svn_return_value - svn import -m "Import from OC" "BlockTransfer2.jpg" "http://orsoc.se:4488/svn/wb2hpi/BlockTransfer2.jpg" - check_svn_return_value - svn import -m "Import from OC" "DspFill1.jpg" "http://orsoc.se:4488/svn/wb2hpi/DspFill1.jpg" - check_svn_return_value - svn import -m "Import from OC" "DspMemory1.jpg" "http://orsoc.se:4488/svn/wb2hpi/DspMemory1.jpg" - check_svn_return_value - svn import -m "Import from OC" "DspMemory2.jpg" "http://orsoc.se:4488/svn/wb2hpi/DspMemory2.jpg" - check_svn_return_value - svn import -m "Import from OC" "DSPMove1.jpg" "http://orsoc.se:4488/svn/wb2hpi/DSPMove1.jpg" - check_svn_return_value - svn import -m "Import from OC" "Registers.jpg" "http://orsoc.se:4488/svn/wb2hpi/Registers.jpg" - check_svn_return_value - svn import -m "Import from OC" "SistemMemoryFill1.jpg" "http://orsoc.se:4488/svn/wb2hpi/SistemMemoryFill1.jpg" - check_svn_return_value - svn import -m "Import from OC" "SistemMemoryMove1.jpg" "http://orsoc.se:4488/svn/wb2hpi/SistemMemoryMove1.jpg" - check_svn_return_value - svn import -m "Import from OC" "SystemMemory1.jpg" "http://orsoc.se:4488/svn/wb2hpi/SystemMemory1.jpg" - check_svn_return_value - svn import -m "Import from OC" "TestBench051.jpg" "http://orsoc.se:4488/svn/wb2hpi/TestBench051.jpg" - check_svn_return_value - svn import -m "Import from OC" "wb2hpi_hw2.jpg" "http://orsoc.se:4488/svn/wb2hpi/wb2hpi_hw2.jpg" - check_svn_return_value - popd - pushd "wb2npi" - popd - pushd "wb_builder" - svn import -m "Import from OC" "users_manual.pdf" "http://orsoc.se:4488/svn/wb_builder/users_manual.pdf" - check_svn_return_value - popd - pushd "wb_conbus" - popd - pushd "wb_conmax" - svn import -m "Import from OC" "conmax.jpg" "http://orsoc.se:4488/svn/wb_conmax/conmax.jpg" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/wb_conmax/index.shtml" - check_svn_return_value - popd - pushd "wbc_parallel_master" - svn import -m "Import from OC" "wbc_parallel_master-spec_doc-r01.pdf" "http://orsoc.se:4488/svn/wbc_parallel_master/wbc_parallel_master-spec_doc-r01.pdf" - check_svn_return_value - popd - pushd "wb_ddr" - popd - pushd "wb_dma" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/wb_dma/index.shtml" - check_svn_return_value - popd - pushd "wb_flash" - popd - pushd "wbif_68k" - popd - pushd "wb_lpc" - popd - pushd "wb_mcs51" - popd - pushd "wb_rtc" - svn import -m "Import from OC" "ports.jpg" "http://orsoc.se:4488/svn/wb_rtc/ports.jpg" - check_svn_return_value - svn import -m "Import from OC" "structure.jpg" "http://orsoc.se:4488/svn/wb_rtc/structure.jpg" - check_svn_return_value - svn import -m "Import from OC" "wb_rtc.zip" "http://orsoc.se:4488/svn/wb_rtc/wb_rtc.zip" - check_svn_return_value - popd - pushd "wb_tk" - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/wb_tk/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_arbiter.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_arbiter.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_async_master.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_async_master.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_async_slave.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_async_slave.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_bus_resizer.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_bus_resizer.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_extensions.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_extensions.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_out_reg.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_out_reg.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_ram.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_ram.shtml" - check_svn_return_value - svn import -m "Import from OC" "wb_test.shtml" "http://orsoc.se:4488/svn/wb_tk/wb_test.shtml" - check_svn_return_value - popd - pushd "wb_vga" - svn import -m "Import from OC" "accel.shtml" "http://orsoc.se:4488/svn/wb_vga/accel.shtml" - check_svn_return_value - svn import -m "Import from OC" "index.shtml" "http://orsoc.se:4488/svn/wb_vga/index.shtml" - check_svn_return_value - svn import -m "Import from OC" "mouse.shtml" "http://orsoc.se:4488/svn/wb_vga/mouse.shtml" - check_svn_return_value - svn import -m "Import from OC" "palette.shtml" "http://orsoc.se:4488/svn/wb_vga/palette.shtml" - check_svn_return_value - svn import -m "Import from OC" "vga_chip.shtml" "http://orsoc.se:4488/svn/wb_vga/vga_chip.shtml" - check_svn_return_value - svn import -m "Import from OC" "vga_core.shtml" "http://orsoc.se:4488/svn/wb_vga/vga_core.shtml" - check_svn_return_value - svn import -m "Import from OC" "vga_core_v2.shtml" "http://orsoc.se:4488/svn/wb_vga/vga_core_v2.shtml" - check_svn_return_value - popd - pushd "wb_z80" - popd - pushd "wb_zbt" - popd - pushd "wisbone_2_ahb" - popd - pushd "wishbone" - svn import -m "Import from OC" "appnote_01.pdf" "http://orsoc.se:4488/svn/wishbone/appnote_01.pdf" - check_svn_return_value - svn import -m "Import from OC" "flex.pdf" "http://orsoc.se:4488/svn/wishbone/flex.pdf" - check_svn_return_value - svn import -m "Import from OC" "press_release_12_08_2002.pdf" "http://orsoc.se:4488/svn/wishbone/press_release_12_08_2002.pdf" - check_svn_return_value - svn import -m "Import from OC" "soc_bus_comparison.pdf" "http://orsoc.se:4488/svn/wishbone/soc_bus_comparison.pdf" - check_svn_return_value - svn import -m "Import from OC" "wbspec_b1.pdf" "http://orsoc.se:4488/svn/wishbone/wbspec_b1.pdf" - check_svn_return_value - svn import -m "Import from OC" "wbspec_b2.pdf" "http://orsoc.se:4488/svn/wishbone/wbspec_b2.pdf" - check_svn_return_value - svn import -m "Import from OC" "wbspec_b3.pdf" "http://orsoc.se:4488/svn/wishbone/wbspec_b3.pdf" - check_svn_return_value - popd - pushd "wishbone2ahb" - popd - pushd "wishbone_bfm" - popd - pushd "wishbone_checker" - popd - pushd "wishbone_out_port" - popd - pushd "wishbone_to_ahb" - popd - pushd "wlanmac" - popd - pushd "wlan_modem" - popd - pushd "wpf" - popd - pushd "x25_protocol_interface_project" - popd - pushd "x86soc" - popd - pushd "xge_mac" - popd - pushd "xmatchpro" - svn import -m "Import from OC" "open_xmw2.zip" "http://orsoc.se:4488/svn/xmatchpro/open_xmw2.zip" - check_svn_return_value - popd - pushd "xtea" - popd - pushd "yacc" - popd - pushd "yellowstar" - svn import -m "Import from OC" "appendix.pdf" "http://orsoc.se:4488/svn/yellowstar/appendix.pdf" - check_svn_return_value - svn import -m "Import from OC" "processor.v" "http://orsoc.se:4488/svn/yellowstar/processor.v" - check_svn_return_value - svn import -m "Import from OC" "report.pdf" "http://orsoc.se:4488/svn/yellowstar/report.pdf" - check_svn_return_value - svn import -m "Import from OC" "yellowstar_schematics.tar.gz" "http://orsoc.se:4488/svn/yellowstar/yellowstar_schematics.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "yellowstar_symbols.tar.gz" "http://orsoc.se:4488/svn/yellowstar/yellowstar_symbols.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "yellow_star.tar.gz" "http://orsoc.se:4488/svn/yellowstar/yellow_star.tar.gz" - check_svn_return_value - svn import -m "Import from OC" "ys_logo.jpg" "http://orsoc.se:4488/svn/yellowstar/ys_logo.jpg" - check_svn_return_value - popd - pushd "yoda" - svn import -m "Import from OC" "*" "http://orsoc.se:4488/svn/yoda/*" - check_svn_return_value - popd - pushd "z80soc" - svn import -m "Import from OC" "mP5170003.JPG" "http://orsoc.se:4488/svn/z80soc/mP5170003.JPG" - check_svn_return_value - svn import -m "Import from OC" "mP5180007.JPG" "http://orsoc.se:4488/svn/z80soc/mP5180007.JPG" - check_svn_return_value - svn import -m "Import from OC" "thumb_mP5170003.JPG" "http://orsoc.se:4488/svn/z80soc/thumb_mP5170003.JPG" - check_svn_return_value - svn import -m "Import from OC" "thumb_mP5180007.JPG" "http://orsoc.se:4488/svn/z80soc/thumb_mP5180007.JPG" - check_svn_return_value - popd - pushd "zpu" - svn import -m "Import from OC" "compile.PNG" "http://orsoc.se:4488/svn/zpu/compile.PNG" - check_svn_return_value - svn import -m "Import from OC" "simulator2.PNG" "http://orsoc.se:4488/svn/zpu/simulator2.PNG" - check_svn_return_value - svn import -m "Import from OC" "simulator3.PNG" "http://orsoc.se:4488/svn/zpu/simulator3.PNG" - check_svn_return_value - svn import -m "Import from OC" "simulator.PNG" "http://orsoc.se:4488/svn/zpu/simulator.PNG" - check_svn_return_value - svn import -m "Import from OC" "thumb_compile.PNG" "http://orsoc.se:4488/svn/zpu/thumb_compile.PNG" - check_svn_return_value - svn import -m "Import from OC" "thumb_simulator2.PNG" "http://orsoc.se:4488/svn/zpu/thumb_simulator2.PNG" - check_svn_return_value - svn import -m "Import from OC" "thumb_simulator3.PNG" "http://orsoc.se:4488/svn/zpu/thumb_simulator3.PNG" - check_svn_return_value - svn import -m "Import from OC" "thumb_simulator.PNG" "http://orsoc.se:4488/svn/zpu/thumb_simulator.PNG" - check_svn_return_value - popd - ALL_DONE="1" - echo "All checkins done" -done
web_uploads/svn_checkin.sh Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: web_uploads/oc_checkin.sh =================================================================== --- web_uploads/oc_checkin.sh (revision 8) +++ web_uploads/oc_checkin.sh (nonexistent) @@ -1,225 +0,0 @@ -#!/bin/bash -# AUTOMATICALLY GENERATED SCRIPT -# Scans the cores directory, excludes the projects and subdirectories -# listed below, and generates a script which checks in all of the -# remaining files to the SVN repository -# This should be run and the output piped to a new file something like: -# ./oc_cvs_checkin.sh > checkin_script.sh -# and then probably the execute permission enabled on checkin_script.sh -8b10b_encdec -acxbrd -adder -ae68 -aes_128_192_256 -aes_fekete256 -all_digital_fm_receiver -alternascope -aquarius -aspida -ata -auto_baud -a_vhd_16550_uart -a_vhdl_can_controller -avr_core -baudgen -binary_to_bcd -biquad -bluespec-h264 -bluetooth -board -camellia -can -cereon -cf_cordic -cf_fft -cf_fir -cf_fp_mul -cf_interleaver -cf_ldpc -cf_rca -cf_ssp -const_encoder -cordic -cpugen -cryptosorter -dct -ddr_sdr -decoder -des -dfp -diogenes -dram -dualspartainc6713cpci -dwt2d -e123mux -e1framerdeframer -embedded_risc -epp -erp -ethernet_tri_mode -eus100lx -eusfs -fac2222m -fast-crc -fbas_encoder -fcpu -ffr16 -fht -fifouart -filter -firewire -fir_filter_generator -floating_point_adder_subtractor -fpga -fpgaconfig -fpu -fpu100 -freetools -gamepads -gh_vhdl_library -gpio -graphicallcd -graphiti -gsc -gup -hamming_gen -hdlc -help -i2c -i2clog -i2c_slave -i2s -i2s_interface -ic6821 -idea -iiepci -interface_vga80x40 -irda -iso7816-3 -jpeg -jpegcompression -jtag -keypad_scanner -l8051 -lcd -lcd_controller -ldpc_decoder_802_3an -ldpc_encoder_802_3an -lem1_9min -lowpowerfir -lpu -lwrisc -man2uart -manchesterencoderdecoder -maxii-evalboard -mb-jpeg -mcpu -mdct -mem_ctrl -memory_cores -memory_sizer -mfpga -minimips -minirisc -mips789 -mipss -most -mpdma -ncore -neptune-core -nnARM -npigrctrl -oab1 -ocmips -ocrp-1 -opencores -openfire2 -openh263 -openriscdevboard -opentech -openverifla -or1k-new -ovcodec -pavr -pci -pci-board -pci_controller -pci_mini -performance_counter -perlilog -picoblaze_interrupt_controller -piranha -profibus_dp -project -ps2 -ptc -radixrsa -raggedstone -rfid -rijndael -risc16f84 -risc5x -risc_core_i -riscmcu -rng_lib -robot_control_library -rs232_syscon -rs_5_3_gf256 -rsa -rsencoder -scarm -sdram -serial_div_uu -sfpga -sha1 -simple_uart -single_port -smbus_if -sonet -spacewire -spimaster -spi-slave -ssram -sts1 -sxp -system09 -system11 -system68 -system6801 -tdm -tdm_switch -template -test -test1 -test2 -test-project -ts7300_opencore -turbocodes -tv80 -twofish_team -uart16550 -ucore -ultimate_crc -upcable -usb_dongle_fpga -usbhost -usbhostslave -usucc -vga_lcd -vhcg -vhdl_cpu_emulator -video_starter_kit -wb2hpi -wb_builder -wb_conmax -wbc_parallel_master -wb_dma -wb_rtc -wb_tk -wb_vga -wishbone -xmatchpro -yellowstar -yoda -z80soc -zpu Index: web_uploads/documentation.shtml =================================================================== --- web_uploads/documentation.shtml (nonexistent) +++ web_uploads/documentation.shtml (revision 9) @@ -0,0 +1,20 @@ + + +Project: risc16f84

+Overview | +People | +Documentation | +Download | +Opencores Mail list | +Contact me
+

Documentation

+The data sheet for a 16F84A microcontroller from Microchip contains a superset of all of the instruction formats supported in "risc16f84_clk2x.v" For example, the "CLRWDT" instruction is not supported in "risc16f84_clk2x.v" because there is no watch dog timer. Also, ports A and B do not exist in "risc16f84_clk2x.v" so the user should be aware that this is NOT a fully compatible PIC type microcontroller. Much of the existing PIC code WILL NOT RUN on this microcontroller design because of these incompatibilities, and many libraries of code provided with PIC compilers will depend upon features that are not supported in this module. +However, new code which is written specifically for the "risc16f84_clk2x.v" design will run just fine. +

+

Interrupts have not been tested at this time.

+

In order to get up and running with this module, please examine the example code which shows how the module was used during testing. Also, the code is full of good comments, and there is a fairly detailed explanation of the working of the module in the file header.

+

+ + + + Index: web_uploads/risc16f84_clk2x.v =================================================================== --- web_uploads/risc16f84_clk2x.v (nonexistent) +++ web_uploads/risc16f84_clk2x.v (revision 9) @@ -0,0 +1,940 @@ +//--------------------------------------------------------------------------- +// RISC 16F84 "clk2x" core +// +// This file is part of the "risc_16F84" project. +// http://www.opencores.org/cores/risc_16F84 +// +// +// Description: See description below (which suffices for IP core +// specification document.) +// +// Copyright (C) 1999 Sumio Morioka (original VHDL design version) +// Copyright (C) 2001 John Clayton and OPENCORES.ORG (this Verilog version) +// +// NOTE: This source code is free for educational/hobby use only. It cannot +// be used for commercial purposes without the consent of Microchip +// Technology incorporated. +// +// This source file may be used and distributed without restriction provided +// that this copyright statement is not removed from the file and that any +// derivative work contains the original copyright notice and the associated +// disclaimer. +// +// This source file is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This source is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this source. +// If not, download it from http://www.opencores.org/lgpl.shtml +// +//--------------------------------------------------------------------------- +// +// Author: John Clayton +// Date : January 29, 2002 +// +// (NOTE: Date formatted as day/month/year.) +// Update: 29/01/02 copied this file from memory_sizer.v (pared down). +// Translated the module and signal declarations. +// Transformed the instruction wires to lowercase. +// Transformed the addressing wires to lowercase. +// Update: 31/01/02 Translated the instruction decoder. +// Update: 5/02/02 Determined that stack is simply a circular buffer of +// 8 locations, 13 bits per location. Started translating +// "main_efsm" process. Added all code from piccore.vhd +// into this file for eventual translation. Concluded that +// "stack_full_node" is not needed. +// Update: 6/02/02 Translated the "ram_i_node" if/else precedural assignment. +// Update: 7/02/02 Changed all := to <=, changed all '0' to 0 and '1' to 1. +// Replaced all " downto " with ":". +// Finished translating QRESET state. +// Update: 20/02/02 Replaced all instances of Qreset with QRESET_PP. Also +// replaced other state designations with their new names. +// Finished translating Q1, Q2 states. +// Update: 22/02/02 Translated section 2-4-1-1 (aluout register) +// Update: 27/02/02 Replaced all "or" with "||" in if statements +// Replaced all "and" with "&&" in if statements. +// Replaced all "not" with "~" in if statements. +// Finished translating Q3,Q4 states. +// Translated output signal assignments at end of code. +// Translated interrupt trigger processes. +// Update: 28/02/02 Finished translation of WDT and TMR0 prescaler. +// Trimmed line length to 80 characters throughout. +// Prepared to attempt initial syntax checking. +// Cleaned up some naming conventions, and verified that +// all I/O pins have _i or _o appended in the body of the +// code. +// Update: 03/04/02 Changed "progdata_i" to "prog_dat_i" Also changed +// "progadr_o" to "prog_adr_o" +// Update: 04/04/02 Created new file "risc16f84_lite.v" This file is reduced +// and simplified from the original "risc16f84.v" file. +// Specifically, I am removing EEPROM support, and +// consolidating porta and portb I/O pins so that they +// are bidirectional. +// Update: 04/04/02 Created a new file "risc16f84_small.v" This file is +// further reduced and simplified from "risc16f84_lite.v" +// Specifically, I am removing the prescaler, TMR0 and WDT. +// Also, I am removing support for portb interrupts, leaving +// only rb0/int as an interrupt source. This pin will be +// the only way to wake up from the SLEEP instruction... +// Obviously, the CLEARWDT instruction will no longer do +// anything. +// Update: 05/04/02 Removed the "powerdown_o", "startclk_o" and "clk_o" pins +// from the small design. Also removed "rbpu_o", so if you +// want pullups, you have to add them explicitly in the +// constraints file, and option_reg[7] doesn't control them. +// Update: 08/04/02 Decided to modify "risc16f84_small.v" in order to try for +// more performance (only 2 states per instruction!) +// The new file is called "risc16f84_clk2x.v" The resulting +// code was synthesized, but not tested yet. +// Update: 11/04/02 Decided to remove porta and portb from this unit, and add +// instead an auxiliary bus, which is intended to allow I/O +// using an indirect approach, similar to using the FSR. +// However, the aux_adr_o is 16 bits wide, so that larger +// RAM may be accessed indirectly by the processor... The use +// of FSR for this purpose proved undesirable, since any new +// page of RAM contains "holes" to accomodate the registers +// in the first 12 locations (including FSR!) so that large +// contiguous blocks of memory could not be accessed in an +// effective way. This auxiliary bus solves that problem. +// Since this processor is implemented inside of an FPGA, +// and it is not a goal to maintain compatibility with +// existing libraries of code, there is no need to maintain +// porta and portb in the hardware. +// The aux_adr_lo and aux_adr_hi registers are located at +// 88h and 89h, and the aux_dat_io location is decoded at +// 08h. +// Also, changed to using "ram_we_o" instead of "readram_o" +// and "writeram_o" +// Update: 16/04/02 Added clock enable signal, for processor single stepping. +// "aux_dat_io" is only driven when "clk_en_i" is high... +// Update: 17/04/02 Removed "reset_condition" and moved "inc_pc_node" out of +// the clocking area, making it non-registered. In fact, I +// moved everything other than the state machine out of the +// clocked logic section. Changed "aluout_reg" to "aluout" +// since it is no longer registered. +// Update: 26/04/02 Fixed bug in aluout logic. The AND and OR functions were +// coded with logical AND/OR instead of bitwise AND/OR! +// Update: 26/04/02 Changed location of aux_adr_lo and aux_adr_hi registers +// to 05h and 06h, respectively. This was done to save +// code space because when using the aux data bus, no bank +// switching is necessary since they will now reside in the +// same bank. +// Update: 01/05/02 Fixed another bug -- the rrf and rlf instructions were +// coded incorrectly. +// Update: 03/05/02 Fixed another bug -- the carry bit was incorrect (the +// problem was discovered while performing SUBWF X,W where +// W contained 0 and X contained 1. (1-0). The logic for +// the carry bit appears to have been incorrect even in +// the original VHDL code by Sumio Morioka. +// Update: 11/18/02 Fixed bug in PCL addressing mode (near line 791) +// Removed parameters associated with WDT. +// Update: 11/25/02 Re-wrote much of the main FSM. Attempted to generate logic +// to recognize the falling edge of an interrupt, and was +// unsuccessful (not simulation, actual hardware tests.) +// Realized that falling edge interrupt can be equivalent to +// rising edge interrupt with a NOT gate on the signal. Since +// NOTs are practically free inside of an FPGA, decided to +// abandon the negative edge aspect of recognizing interrupts. +// Therefore, removed the "option_reg" since it is no longer +// needed in this design. +// Update: 08/08/03 Fixed a mathematical error, which was introduced by the bug +// fix of 03/05/02. The fix of 03/05/02 correctly generated the +// C bit for subtraction of zero, but unfortunately it introduced +// an error such that all subtraction results were off by 1. +// Obviously, this was unacceptable, and I think it has been fixed +// by the new signals "c_subtract_zero" and "c_dig_subtract_zero" +// +// Description +//--------------------------------------------------------------------------- +// This logic module implements a small RISC microcontroller, with functions +// and instruction set very similar to those of the Microchip 16F84 chip. +// This work is a translation (from VHDL to Verilog) of the "CQPIC" design +// published in 1999 by Sumio Morioka of Japan, and published in the December +// 1999 issue of "Transistor Gijutsu Magazine." The translation was performed +// by John Clayton, without the use of any translation tools. +// +// Original version used as basis for translation: CQPIC version 1.00b +// (December 10, 2000) +// +// Further revisions and re-writing have been completed on this code by John +// Clayton. The interrupt mechanism has been completely re-done, and the +// way in which the program counter is generated is expressed in a new way. +// +// In the comments, a "cycle" is defined as a processor cycle of 2 states. +// Thus, passing through states Q2_PP and Q4_PP completes one cycle. +// The numbers "1-3" and so forth are left from the comments in the original +// source code used as the basis of the translation. +//--------------------------------------------------------------------------- + +`define STATEBIT_SIZE 2 // Size of state machine register (bits) + + +module risc16f84_clk2x ( + prog_dat_i, // [13:0] ROM read data + prog_adr_o, // [12:0] ROM address + ram_dat_i, // [7:0] RAM read data + ram_dat_o, // [7:0] RAM write data + ram_adr_o, // [8:0] RAM address; ram_adr[8:7] indicates RAM-BANK + ram_we_o, // RAM write strobe (H active) + aux_adr_o, // [15:0] Auxiliary address bus + aux_dat_io, // [7:0] Auxiliary data bus (tri-state bidirectional) + aux_we_o, // Auxiliary write strobe (H active) + int0_i, // PORT-B(0) INT + reset_i, // Power-on reset (H active) + clk_en_i, // Clock enable for all clocked logic + clk_i // Clock input +); + + +// You can change the following parameters as you would like +parameter STACK_SIZE_PP = 8; // Size of PC stack +parameter LOG2_STACK_SIZE_PP = 3; // Log_2(stack_size) + +// State definitions for state machine, provided as parameters to allow +// for redefinition of state values by the instantiator if desired. +parameter Q2_PP = 2'b00; // state Q2 +parameter Q4_PP = 2'b01; // state Q4 +parameter QINT_PP = 2'b10; // interrupt state (substitute for Q4) +parameter QSLEEP_PP = 2'b11; // sleep state + + +// I/O declarations + + // program ROM data bus/address bus +input [13:0] prog_dat_i; // ROM read data +output [12:0] prog_adr_o; // ROM address + + // data RAM data bus/address bus/control signals +input [7:0] ram_dat_i; // RAM read data +output [7:0] ram_dat_o; // RAM write data +output [8:0] ram_adr_o; // RAM address; ram_adr[8:7] indicates RAM-BANK +output ram_we_o; // RAM write strobe (H active) + + // auxiliary data bus/address bus/control signals +output [15:0] aux_adr_o; // AUX address bus +inout [7:0] aux_dat_io; // AUX data bus +output aux_we_o; // AUX write strobe (H active) + + // interrupt input +input int0_i; // INT + + // CPU reset +input reset_i; // Power-on reset (H active) + + // CPU clock +input clk_en_i; // Clock enable input +input clk_i; // Clock input + + +// Internal signal declarations + + // User registers +reg [7:0] w_reg; // W +reg [12:0] pc_reg; // PCH/PCL -- Address currently being fetched +reg [12:0] old_pc_reg; // Address fetched previous to this one. +reg [7:0] status_reg; // STATUS +reg [7:0] fsr_reg; // FSR +reg [4:0] pclath_reg; // PCLATH +reg [7:0] intcon_reg; // INTCON +reg [7:0] aux_adr_hi_reg; // AUX address high byte +reg [7:0] aux_adr_lo_reg; // AUX address low byte + + // Internal registers for controlling instruction execution +reg [13:0] inst_reg; // Holds fetched op-code/operand +reg [7:0] aluinp1_reg; // data source (1 of 2) +reg [7:0] aluinp2_reg; // data source (2 of 2) +reg exec_stall_reg; // if H (i.e. after GOTO etc), stall execution. + + // Stack + // stack (array of data-registers) +reg [12:0] stack_reg [STACK_SIZE_PP-1:0]; + // stack pointer +reg [LOG2_STACK_SIZE_PP-1:0] stack_pnt_reg; +wire [12:0] stack_top; // More compatible with sensitivity list than + // "stack_reg[stack_pnt_reg]" + + // Interrupt registers/nodes +wire int_condition; // Indicates that an interrupt should be recognized +wire intrise; // High indicates edge was detected +reg intrise_reg; // detect positive edge of PORT-B inputs + // Synchronizer for interrupt +reg inte_sync_reg; + + // State register +reg [`STATEBIT_SIZE-1:0] state_reg; +reg [`STATEBIT_SIZE-1:0] next_state_node; + + // Result of decoding instruction -- only 1 is active at a time +wire inst_addlw; +wire inst_addwf; +wire inst_andlw; +wire inst_andwf; +wire inst_bcf; +wire inst_bsf; +wire inst_btfsc; +wire inst_btfss; +wire inst_call; +wire inst_clrf; +wire inst_clrw; +wire inst_comf; +wire inst_decf; +wire inst_decfsz; +wire inst_goto; +wire inst_incf; +wire inst_incfsz; +wire inst_iorlw; +wire inst_iorwf; +wire inst_movlw; +wire inst_movf; +wire inst_movwf; +wire inst_retfie; +wire inst_retlw; +wire inst_ret; +wire inst_rlf; +wire inst_rrf; +wire inst_sleep; +wire inst_sublw; +wire inst_subwf; +wire inst_swapf; +wire inst_xorlw; +wire inst_xorwf; + + // Result of calculating RAM access address +wire [8:0] ram_adr_node; // RAM access address + + // These wires indicate accesses to special registers... + // Only 1 is active at a time. +wire addr_pcl; +wire addr_stat; +wire addr_fsr; +wire addr_pclath; +wire addr_intcon; +wire addr_aux_adr_lo; +wire addr_aux_adr_hi; +wire addr_aux_dat; +wire addr_sram; + + // Other output registers (for removing hazards) +reg ram_we_reg; // data-sram write strobe +reg aux_we_reg; // AUX write strobe + + + // Signals used in "main_efsm" procedure + // (Intermediate nodes used for resource sharing.) +wire [7:0] ram_i_node; // result of reading RAM/Special registers +wire [7:0] mask_node; // bit mask for logical operations +wire [8:0] add_node; // result of 8bit addition +wire [4:0] addlow_node; // result of low-4bit addition +wire aluout_zero_node; // H if ALUOUT = 0 + +reg [12:0] next_pc_node; // value of next PC +reg [7:0] aluout; // result of calculation +reg writew_node; // H if destination is W register +reg writeram_node; // H if destination is RAM/Special registers +reg c_subtract_zero; // High for special case of C bit, when subtracting zero +reg c_dig_subtract_zero; // High for special case of C bit, when subtracting zero + +wire next_exec_stall; + +//-------------------------------------------------------------------------- +// Instantiations +//-------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------- +// Functions & Tasks +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Module code +//-------------------------------------------------------------------------- + +// This represents the instruction fetch from program memory. +// inst_reg[13:0] stores the instruction. This happens at the end of Q4. +// So the memory access time is one processor cycle (2 clocks!) minus +// the setup-time of this register, and minus the delay to drive the +// address out onto the prog_adr_o bus. +always @(posedge clk_i) +begin + if (reset_i) inst_reg <= 0; + else if (clk_en_i && (state_reg == Q4_PP)) inst_reg <= prog_dat_i; +end + +// NOTE: There is an extra "15th" bit of inst_reg, which represents an +// interrupt execution cycle. This is included in inst_reg so that when +// an interrupt instruction is executing, it effectively "pre-empts" the +// other instructions. +// The fifteenth bit, inst_reg[14], is set by the interrupt logic. + +// Decode OPcode (see pp.54 of PIC16F84 data sheet) +// only 1 signal of the following signals will be '1' +assign inst_call = (inst_reg[13:11] == 3'b100 ); +assign inst_goto = (inst_reg[13:11] == 3'b101 ); +assign inst_bcf = (inst_reg[13:10] == 4'b0100 ); +assign inst_bsf = (inst_reg[13:10] == 4'b0101 ); +assign inst_btfsc = (inst_reg[13:10] == 4'b0110 ); +assign inst_btfss = (inst_reg[13:10] == 4'b0111 ); +assign inst_movlw = (inst_reg[13:10] == 4'b1100 ); +assign inst_retlw = (inst_reg[13:10] == 4'b1101 ); +assign inst_sublw = (inst_reg[13:9] == 5'b11110 ); +assign inst_addlw = (inst_reg[13:9] == 5'b11111 ); +assign inst_iorlw = (inst_reg[13:8] == 6'b111000 ); +assign inst_andlw = (inst_reg[13:8] == 6'b111001 ); +assign inst_xorlw = (inst_reg[13:8] == 6'b111010 ); +assign inst_subwf = (inst_reg[13:8] == 6'b000010 ); +assign inst_decf = (inst_reg[13:8] == 6'b000011 ); +assign inst_iorwf = (inst_reg[13:8] == 6'b000100 ); +assign inst_andwf = (inst_reg[13:8] == 6'b000101 ); +assign inst_xorwf = (inst_reg[13:8] == 6'b000110 ); +assign inst_addwf = (inst_reg[13:8] == 6'b000111 ); +assign inst_movf = (inst_reg[13:8] == 6'b001000 ); +assign inst_comf = (inst_reg[13:8] == 6'b001001 ); +assign inst_incf = (inst_reg[13:8] == 6'b001010 ); +assign inst_decfsz = (inst_reg[13:8] == 6'b001011 ); +assign inst_rrf = (inst_reg[13:8] == 6'b001100 ); +assign inst_rlf = (inst_reg[13:8] == 6'b001101 ); +assign inst_swapf = (inst_reg[13:8] == 6'b001110 ); +assign inst_incfsz = (inst_reg[13:8] == 6'b001111 ); +assign inst_movwf = (inst_reg[13:7] == 7'b0000001 ); +assign inst_clrw = (inst_reg[13:7] == 7'b0000010 ); +assign inst_clrf = (inst_reg[13:7] == 7'b0000011 ); +assign inst_ret = (inst_reg[13:0] == 14'b00000000001000); +assign inst_retfie = (inst_reg[13:0] == 14'b00000000001001); +assign inst_sleep = (inst_reg[13:0] == 14'b00000001100011); + + +// Calculate RAM access address (see pp.19 of PIC16F84 data sheet) + + // if "d"=0, indirect addressing is used, so RAM address is BANK+FSR + // otherwise, RAM address is BANK+"d" + // (see pp.19 of PIC16F84 data sheet) +assign ram_adr_node = (inst_reg[6:0]==0)?{status_reg[7],fsr_reg[7:0]}: + {status_reg[6:5],inst_reg[6:0]}; + + // check if this is an access to external RAM or not +assign addr_sram = (ram_adr_node[6:0] > 7'b0001011); //0CH-7FH,8CH-FFH + + // check if this is an access to special register or not + // only 1 signal of the following signals will be '1' +assign addr_pcl = (ram_adr_node[6:0] == 7'b0000010); // 02H, 82H +assign addr_stat = (ram_adr_node[6:0] == 7'b0000011); // 03H, 83H +assign addr_fsr = (ram_adr_node[6:0] == 7'b0000100); // 04H, 84H +assign addr_aux_dat = (ram_adr_node[7:0] == 8'b00001000); // 08H +assign addr_pclath = (ram_adr_node[6:0] == 7'b0001010); // 0AH, 8AH +assign addr_intcon = (ram_adr_node[6:0] == 7'b0001011); // 0BH, 8BH +assign addr_aux_adr_lo = (ram_adr_node[7:0] == 8'b00000101); // 05H +assign addr_aux_adr_hi = (ram_adr_node[7:0] == 8'b00000110); // 06H + +// construct bit-mask for logical operations and bit tests +assign mask_node = 1 << inst_reg[9:7]; + +// Create the exec_stall signal, based on the contents of the currently +// executing instruction (inst_reg). next_exec_stall reflects the state +// to assign to exec_stall following the conclusion of the next Q4 state. +// All of these instructions cause an execution stall in the next cycle +// because they modify the program counter, and a new value is presented +// for fetching during the stall cycle, during which time no instruction +// should be executed. +// +// The conditional instructions are given along with their conditions for +// execution. If the conditions are not met, there is no stall and nothing +// to execute. +assign next_exec_stall = ( + inst_goto + || inst_call + || inst_ret + || inst_retlw + || inst_retfie + || ( + (inst_btfsc || inst_decfsz || inst_incfsz) + && aluout_zero_node + ) + || (inst_btfss && ~aluout_zero_node) + || (addr_pcl && writeram_node) + ); +always @(posedge clk_i) +begin + if (reset_i) exec_stall_reg <= 0; + else if (clk_en_i && (state_reg == QINT_PP)) exec_stall_reg <= 1; + else if (clk_en_i && (state_reg == Q4_PP)) + exec_stall_reg <= (next_exec_stall && ~exec_stall_reg); + // exec stall should never be generated during a stall cycle, because + // a stall cycle doesn't execute anything... +end + +assign stack_top = stack_reg[stack_pnt_reg]; +// Formulate the next pc_reg value (the program counter.) +// During stall cycles, the pc is simply incremented... +always @( + pc_reg + or pclath_reg + or aluout + or stack_pnt_reg + or stack_top + or inst_ret + or inst_retlw + or inst_retfie + or inst_goto + or inst_call + or inst_reg + or writeram_node + or addr_pcl + or exec_stall_reg + ) +begin + if (~exec_stall_reg &&(inst_ret || inst_retlw || inst_retfie)) + next_pc_node <= stack_top; + else if (~exec_stall_reg &&(inst_goto || inst_call)) + next_pc_node <= {pclath_reg[4:3],inst_reg[10:0]}; + else if (~exec_stall_reg && (writeram_node && addr_pcl)) + // PCL is data-destination, but update the entire PC. + next_pc_node <= {pclath_reg[4:0],aluout}; + else + next_pc_node <= pc_reg + 1; +end + +// Set the program counter +// If the sleep instruction is executing, then the PC is not allowed to be +// updated, since the processor will "freeze" and the instruction being fetched +// during the sleep instruction must be executed upon wakeup interrupt. +// Obviously, if the PC were to change at the end of the sleep instruction, then +// a different (incorrect) address would be fetched during the sleep time. +always @(posedge clk_i) +begin + if (reset_i) begin + pc_reg <= 0; + old_pc_reg <= 0; + end + else if (clk_en_i && (state_reg == QINT_PP)) + begin + old_pc_reg <= pc_reg; + pc_reg <= 4; + end + else if (clk_en_i && ~inst_sleep && (state_reg == Q4_PP)) + begin + old_pc_reg <= pc_reg; + pc_reg <= next_pc_node; + end +end + +// 1. Intermediate nodes for resource sharing + +// Tri-state drivers instead of a huge selector... It produces smaller +// results, and runs faster. +assign ram_i_node = (addr_sram) ?ram_dat_i:8'bZ; +assign ram_i_node = (addr_pcl) ?pc_reg[7:0]:8'bZ; +assign ram_i_node = (addr_stat) ?status_reg:8'bZ; +assign ram_i_node = (addr_fsr) ?fsr_reg:8'bZ; +assign ram_i_node = (addr_aux_dat) ?aux_dat_io:8'bZ; +assign ram_i_node = (addr_pclath) ?{3'b0,pclath_reg}:8'bZ; +assign ram_i_node = (addr_intcon) ?intcon_reg:8'bZ; +assign ram_i_node = (addr_aux_adr_lo) ?aux_adr_lo_reg:8'bZ; +assign ram_i_node = (addr_aux_adr_hi) ?aux_adr_hi_reg:8'bZ; + +// 1-3. Adder (ALU) +// full 8bit-addition, with carry in/out. +// Note that "temp" and "dtemp" are intended to be thrown away. +// Also, addlow_node[3:0] are thrown away. +// Even though they are assigned, they should never be used. +assign add_node = {1'b0,aluinp1_reg} + + {1'b0,aluinp2_reg}; +// lower 4bit-addition +assign addlow_node = {1'b0,aluinp1_reg[3:0]} + + {1'b0,aluinp2_reg[3:0]}; + +// 1-4. Test if aluout = 0 +assign aluout_zero_node = (aluout == 0)?1:0; + +// 1-5. Determine destination +always @( + inst_reg + or inst_movwf + or inst_bcf + or inst_bsf + or inst_clrf + or inst_movlw + or inst_addlw + or inst_sublw + or inst_andlw + or inst_iorlw + or inst_xorlw + or inst_retlw + or inst_clrw + or inst_movf + or inst_swapf + or inst_addwf + or inst_subwf + or inst_andwf + or inst_iorwf + or inst_xorwf + or inst_decf + or inst_incf + or inst_rlf + or inst_rrf + or inst_decfsz + or inst_incfsz + or inst_comf + ) +begin + if (inst_movwf || inst_bcf || inst_bsf || inst_clrf) + begin + writew_node <= 0; + writeram_node <= 1; + end + else if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw || inst_clrw) + begin + writew_node <= 1; + writeram_node <= 0; + end + else if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_decfsz + || inst_incfsz || inst_comf) + begin + writew_node <= ~inst_reg[7]; // ("d" field of fetched instruction) + writeram_node <= inst_reg[7]; // ("d" field of fetched instruction) + end + else + begin + writew_node <= 0; + writeram_node <= 0; + end +end // End of determine destination logic + + + + +// 2-4-1. Calculation and store result into alu-output register + +always @( + add_node + or aluinp1_reg + or aluinp2_reg + or status_reg + or inst_reg + or inst_movwf + or inst_bcf + or inst_bsf + or inst_btfsc + or inst_btfss + or inst_clrf + or inst_addlw + or inst_sublw + or inst_andlw + or inst_iorlw + or inst_xorlw + or inst_retlw + or inst_clrw + or inst_swapf + or inst_addwf + or inst_subwf + or inst_andwf + or inst_iorwf + or inst_xorwf + or inst_decf + or inst_incf + or inst_rlf + or inst_rrf + or inst_decfsz + or inst_incfsz + or inst_comf + ) +begin + // 2-4-1-1. Set aluout register + // Rotate left + if (inst_rlf) + aluout <= {aluinp1_reg[6:0],status_reg[0]}; + // Rotate right + else if (inst_rrf) + aluout <= {status_reg[0],aluinp1_reg[7:1]}; + // Swap nibbles + else if (inst_swapf) + aluout <= {aluinp1_reg[3:0],aluinp1_reg[7:4]}; + // Logical inversion + else if (inst_comf) + aluout <= ~aluinp1_reg; + // Logical AND, bit clear/bit test + else if ( inst_andlw || inst_andwf || inst_bcf || inst_btfsc + || inst_btfss) + aluout <= (aluinp1_reg & aluinp2_reg); + // Logical OR, bit set + else if (inst_bsf || inst_iorlw || inst_iorwf) + aluout <= (aluinp1_reg | aluinp2_reg); + // Logical XOR + else if (inst_xorlw || inst_xorwf) + aluout <= (aluinp1_reg ^ aluinp2_reg); + // Addition, Subtraction, Increment, Decrement + else if ( inst_addlw || inst_addwf || inst_sublw || inst_subwf + || inst_decf || inst_decfsz || inst_incf || inst_incfsz) + aluout <= add_node[7:0]; + // Pass through + else aluout <= aluinp1_reg; +end + + +// MAIN EFSM: description of register value changes in each clock cycle +always @(posedge clk_i) +begin + // Assign reset (default) values of registers + if (reset_i) + begin + status_reg[7:5] <= 3'b0; + pclath_reg <= 0; // 0 + intcon_reg[7:1] <= 7'b0; + aux_adr_lo_reg <= 0; + aux_adr_hi_reg <= 0; + ram_we_reg <= 0; + status_reg[4] <= 1; // /T0 = 1 + status_reg[3] <= 1; // /PD = 1 + stack_pnt_reg <= 0; // Reset stack pointer + end // End of reset assignments + else if (~exec_stall_reg && clk_en_i) + begin // Execution ceases during a stall cycle. + if (state_reg == Q2_PP) // 2-3. Q2 cycle + begin + // 2-3-1. Read data-RAM and store values to alu-input regs + // 2-3-1-1. Set aluinp1 register (source #1) + if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_bcf + || inst_bsf || inst_btfsc || inst_btfss || inst_decfsz + || inst_incfsz || inst_comf) + + aluinp1_reg <= ram_i_node; // RAM/Special registers + else + if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw) + aluinp1_reg <= inst_reg[7:0]; // Immediate value ("k") + else + if ( inst_clrf || inst_clrw) aluinp1_reg <= 0; // 0 + else aluinp1_reg <= w_reg; // W register + + // 2-3-1-2. Set aluinp2 register (source #2) + c_subtract_zero <= 0; // default to non-special case + c_dig_subtract_zero <= 0; // default to non-special case + if (inst_decf || inst_decfsz) aluinp2_reg <= -1; // for decr. + else if (inst_incf || inst_incfsz) aluinp2_reg <= 1; // for incr. + // -1 * W register (for subtract) + else if (inst_sublw || inst_subwf) + begin + aluinp2_reg <= ~w_reg + 1; + c_subtract_zero <= (w_reg == 0); // Indicate special case + c_dig_subtract_zero <= (w_reg[3:0] == 0); // Indicate special case + end + // operation of BCF: AND with inverted mask ("1..101..1") + // mask for BCF: value of only one position is 0 + else if (inst_bcf) aluinp2_reg <= ~mask_node; + // operation of BSF: OR with mask_node ("0..010..0") + // operation of FSC and FSS: AND with mask_node, compare to 0 + else if (inst_btfsc || inst_btfss || inst_bsf) + aluinp2_reg <= mask_node; + else aluinp2_reg <= w_reg; // W register + + // 2-3-1-3. Set stack pointer register (pop stack) + if (inst_ret || inst_retlw || inst_retfie) + stack_pnt_reg <= stack_pnt_reg - 1; // cycles 3,2,1,0,7,6... + + // 2-4-1-3. Set data-SRAM write enable (hazard-free) + // Set the write enables depending on the destination. + // (These have been implemented as registers to avoid glitches? + // It is not known to me (John Clayton) whether any glitches would + // really occur. It might be possible to generate these signals + // using combinational logic only, without using registers! + ram_we_reg <= (writeram_node && addr_sram); + aux_we_reg <= (writeram_node && addr_aux_dat); + end // End of Q2 state + + //--------------------------------------------------------------------- + + else if (state_reg == QINT_PP) // Interrupt execution (instead of Q4_PP) + begin + // PORT-B0 INT + intcon_reg[1] <= 1; // set INTF + intcon_reg[7] <= 0; // clear GIE + stack_reg[stack_pnt_reg] <= old_pc_reg; // Push old PC + stack_pnt_reg <= stack_pnt_reg + 1; // increment stack pointer + // The old PC is pushed, so that the pre-empted instruction can be + // restarted later, when the retfie is executed. + end + + //--------------------------------------------------------------------- + + else if (state_reg == Q4_PP) // Execution & writing of results. + begin + + if (inst_call) + begin + stack_reg[stack_pnt_reg] <= pc_reg; // Push current PC + stack_pnt_reg <= stack_pnt_reg + 1; // increment stack pointer + end + + if (inst_retfie) // "return from interrupt" instruction + begin + intcon_reg[7] <= 1; // Set GIE + end + + // 2-4-1-2. Set C flag and DC flag + if (inst_addlw || inst_addwf || inst_sublw || inst_subwf) + begin + // c_dig_subtract_zero and c_subtract_zero are used to take care of the + // special case when subtracting zero, where the carry bit should be 1 + // (meaning no borrow). It is explicitly set by these signals during + // that condition. See 16F84 datasheet, page 8 for further information + // about the C bit. + status_reg[1] <= addlow_node[4] || c_dig_subtract_zero; // DC flag + status_reg[0] <= add_node[8] || c_subtract_zero; // C flag + end + else if (inst_rlf) status_reg[0] <= aluinp1_reg[7]; // C flag + else if (inst_rrf) status_reg[0] <= aluinp1_reg[0]; // C flag + + // 2-5-2. Store calculation result into destination, + // 2-5-2-1. Set W register + + if (writew_node) w_reg <= aluout; // write W reg + + // 2-5-2-2. Set data RAM/special registers, + if (writeram_node) + begin + if (addr_stat) + begin + status_reg[7:5] <= aluout[7:5]; // write IRP,RP1,RP0 + // status(4),status(3)...unwritable, see below (/PD,/T0 part) + status_reg[1:0] <= aluout[1:0]; // write DC,C + end + if (addr_fsr) fsr_reg <= aluout; // write FSR + if (addr_pclath) pclath_reg <= aluout[4:0]; // write PCLATH + if (addr_intcon) intcon_reg <= aluout; // write INTCON + if (addr_aux_adr_lo) aux_adr_lo_reg <= aluout; // write AUX low + if (addr_aux_adr_hi) aux_adr_hi_reg <= aluout; // write AUX high + end + + // 2-5-2-3. Set/clear Z flag. + if (addr_stat) status_reg[2] <= aluout[2]; // (dest. is Z flag) + else if ( inst_addlw || inst_addwf || inst_andlw || inst_andwf + || inst_clrf || inst_clrw || inst_comf || inst_decf + || inst_incf || inst_movf || inst_sublw || inst_subwf + || inst_xorlw || inst_xorwf || inst_iorlw || inst_iorwf ) + status_reg[2] <= aluout_zero_node; // Z=1 if result == 0 + + // 2-5-3. Clear RAM write enables (hazard-free) + ram_we_reg <= 0; + aux_we_reg <= 0; + + end // End of Q4 state + end // End of "if (~exec_stall_reg)" +end // End of process + + +// Calculation of next processor state. +// (Not including reset conditions, which are covered by the clocked logic, +// which also includes a "global clock enable." +always @( + state_reg + or inst_sleep + or inte_sync_reg + or exec_stall_reg + or int_condition + ) +begin + case (state_reg) + Q2_PP : if (int_condition) next_state_node <= QINT_PP; + else next_state_node <= Q4_PP; + Q4_PP : if (~exec_stall_reg && inst_sleep) next_state_node <= QSLEEP_PP; + else next_state_node <= Q2_PP; + QINT_PP : next_state_node <= Q2_PP; + QSLEEP_PP : if (inte_sync_reg) next_state_node <= Q2_PP; + else next_state_node <= QSLEEP_PP; + // Default condition provided for convention and completeness + // only. Logically, all of the conditions are already covered. + default : next_state_node <= Q2_PP; + endcase +end + + +// Clocked state transitions, based upon dataflow (non-clocked logic) in +// the previous always block. +always @(posedge clk_i) +begin + if (reset_i) state_reg <= Q2_PP; + else if (clk_en_i) state_reg <= next_state_node; +end // End of process + + +// Detect external interrupt requests +// You can code multiple interrupts if you wish, or use the single interrupt +// provided and simply have the interrupt service routine (ISR) check to find +// out the source of the interrupt, by or-ing together all of the interrupt +// sources and providing a readable register of their values at the time +// the interrupt occurred. +// +// When an interrupt is recognized by the processor, this is signified by +// entering "QINT_PP," which is treated like an executable instruction. +// The interrupt instruction can only be executed when not in a stall condition. +// It simply "pre-empts" the instruction that would have been executed during +// that cycle. Then, when retfie is executed, the pre-empted instruction is +// re-started (the stall cycle of the retfie is when the address of the +// instruction being re-started is fetched.) +// +// I was unable to obtain correct operation for capturing the negative edge, +// so I am discarding it. If one really needs to generate an interrupt on the +// falling edge, just use an inverted version of the signal (the inversion is +// often "free" inside of an FPGA anyhow.) +// +// Upon further testing, I discovered that even the rising edge "trigger" was not +// really truly an edge detection, it was more like a "set-reset" flip flop +// type of behavior. Rather than mess around with it any more, I am implementing +// a clocked "poor man's rising edge detector." +// Capture the rising edge of the interrupt input... This part is self clearing. +// It also means that the interrupt must last longer than one clock cycle in +// order to be properly recognized. (It is "pseudo edge triggered", not a true +// rising edge trigger.) +// When the interrupt is recognized, inte_sync_reg is cleared. + + +always @(posedge clk_i) +begin + if (clk_en_i) intrise_reg <= int0_i; +end // process +assign intrise = (int0_i && ~intrise_reg); + +// The inte_sync_reg signal is used for waking up from SLEEP. +// (this flip flop is also a synchronizer to minimize the +// possibility of metastability due to changes at the input +// occurring at the same time as the processor clock edge...) +// It might be possible to eliminate this step, and issue the interrupt +// directly without this intermediate synchronizer flip-flop. +always @(posedge clk_i) +begin + if (reset_i || (state_reg == QINT_PP)) inte_sync_reg <= 0; + else if (clk_en_i && intrise && intcon_reg[4]) inte_sync_reg <= 1; +end + +// Issue an interrupt when the interrupt is present. +// Also, do not issue an interrupt when there is a stall cycle coming! +assign int_condition = (inte_sync_reg && ~exec_stall_reg && intcon_reg[7]); + // Interrupt must be pending + // Next processor cycle must not be a stall + // GIE bit must be set to issue interrupt + +// Circuit's output signals +assign prog_adr_o = pc_reg; // program ROM address +assign ram_adr_o = ram_adr_node; // data RAM address +assign ram_dat_o = aluout; // data RAM write data +assign ram_we_o = ram_we_reg; // data RAM write enable + +assign aux_adr_o = {aux_adr_hi_reg,aux_adr_lo_reg}; +assign aux_dat_io = (aux_we_reg && clk_en_i)?aluout:{8{1'bZ}}; +assign aux_we_o = aux_we_reg; + +endmodule + + +//`undef STATEBIT_SIZE \ No newline at end of file Index: web_uploads/srec_to_rs232.pl =================================================================== --- web_uploads/srec_to_rs232.pl (nonexistent) +++ web_uploads/srec_to_rs232.pl (revision 9) @@ -0,0 +1,67 @@ +#!/usr/bin/perl -w +print "\nMotorola S-record to rs232_syscon command translator."; +print "\nFilename to translate? "; +$filename = ; +chomp ($filename); +print "\nReading file \"$filename\"\n"; +open (SRECORDFILE,$filename) || + die "\nCan't open \"$filename\" for input.\n"; + +# Handle getting a new extension for the output filename +$i = index($filename,"."); + # If no period is found, simply add the extension to the end. +if ($i < 0) { $i = length($filename); } +substr($filename,$i,4) = ".232"; + +# Open the output file +open (OUTPUTFILE,">".$filename) || + die "\nCan't open \"$filename\" for output.\n"; + +$line_number = 0; +while ($line = ) { + # increment the line number counter + $line_number += 1; + # ignore lines that begin with semicolon + if (index($line,";")==0) { next; } + # Get the position of the start of data + # (Usually there is a colon at the very start of the line...) + $i = index($line,":"); + if ($i < 0) { + print "\nError! No colon found on line: $line_number"; + last; + } + # Get the length of the line + $line_length = hex(substr($line,($i+1),2)); + if ($line_length == 0) { + print "0"; + next; + } + + # Extract the starting address + $line_starting_address = hex(substr($line,($i+3),4)); + + # Extract the data substring - length is in units of bytes, + # but each character is 1/2 byte, so multiply by 2. + $line_data = substr($line,($i+9),($line_length*2)); + + # Send data characters to output file as rs232_syscon commands + # increment by 2 in order to send 1 byte per command... + for ($i=0;$i<($line_length*2);$i+=2) { + $j = $line_starting_address + $i/2; + $j = sprintf "%lx",$j; # Convert address to hexadecimal + $byte = substr($line_data,$i,2); + print OUTPUTFILE "w $j $byte\n"; + } + +# Verbose debug information... +# print "\nline $line_number: starts at $line_starting_address "; +# print "length is $line_length "; +# print "data is $line_data "; + # Print a little period for each line processed... + # (to complement the 0 printed for zero length lines encountered.) + print "."; + } + +#Close all open files +close (SRECORDFILE); +close (OUTPUTFILE); Index: web_uploads/risc16f84_small.v =================================================================== --- web_uploads/risc16f84_small.v (nonexistent) +++ web_uploads/risc16f84_small.v (revision 9) @@ -0,0 +1,862 @@ +//--------------------------------------------------------------------------- +// RISC 16F84 "small" core +// +// This file is part of the "risc_16F84" project. +// http://www.opencores.org/cores/risc_16F84 +// +// +// Description: See description below (which suffices for IP core +// specification document.) +// +// Copyright (C) 1999 Sumio Morioka (original VHDL design version) +// Copyright (C) 2001 John Clayton and OPENCORES.ORG (this Verilog version) +// +// NOTE: This source code is free for educational/hobby use only. It cannot +// be used for commercial purposes without the consent of Microchip +// Technology incorporated. +// +// This source file may be used and distributed without restriction provided +// that this copyright statement is not removed from the file and that any +// derivative work contains the original copyright notice and the associated +// disclaimer. +// +// This source file is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This source is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this source. +// If not, download it from http://www.opencores.org/lgpl.shtml +// +//--------------------------------------------------------------------------- +// +// Author: John Clayton +// Date : January 29, 2002 +// +// (NOTE: Date formatted as day/month/year.) +// Update: 29/01/02 copied this file from memory_sizer.v (pared down). +// Translated the module and signal declarations. +// Transformed the instruction wires to lowercase. +// Transformed the addressing wires to lowercase. +// Update: 31/01/02 Translated the instruction decoder. +// Update: 5/02/02 Determined that stack is simply a circular buffer of +// 8 locations, 13 bits per location. Started translating +// "main_efsm" process. Added all code from piccore.vhd +// into this file for eventual translation. Concluded that +// "stack_full_node" is not needed. +// Update: 6/02/02 Translated the "ram_i_node" if/else precedural assignment. +// Update: 7/02/02 Changed all := to <=, changed all '0' to 0 and '1' to 1. +// Replaced all " downto " with ":". +// Finished translating QRESET state. +// Update: 20/02/02 Replaced all instances of Qreset with QRESET_PP. Also +// replaced other state designations with their new names. +// Finished translating Q1, Q2 states. +// Update: 22/02/02 Translated section 2-4-1-1 (aluout register) +// Update: 27/02/02 Replaced all "or" with "||" in if statements +// Replaced all "and" with "&&" in if statements. +// Replaced all "not" with "~" in if statements. +// Finished translating Q3,Q4 states. +// Translated output signal assignments at end of code. +// Translated interrupt trigger processes. +// Update: 28/02/02 Finished translation of WDT and TMR0 prescaler. +// Trimmed line length to 80 characters throughout. +// Prepared to attempt initial syntax checking. +// Cleaned up some naming conventions, and verified that +// all I/O pins have _i or _o appended in the body of the +// code. +// Update: 03/04/02 Changed "progdata_i" to "prog_dat_i" Also changed +// "progadr_o" to "prog_adr_o" +// Update: 04/04/02 Created new file "risc16f84_lite.v" This file is reduced +// and simplified from the original "risc16f84.v" file. +// Specifically, I am removing EEPROM support, and +// consolidating porta and portb I/O pins so that they +// are bidirectional. +// Update: 04/04/02 Created a new file "risc16f84_small.v" This file is +// further reduced and simplified from "risc16f84_lite.v" +// Specifically, I am removing the prescaler, TMR0 and WDT. +// Also, I am removing support for portb interrupts, leaving +// only rb0/int as an interrupt source. This pin will be +// the only way to wake up from the SLEEP instruction... +// Obviously, the CLEARWDT instruction will no longer do +// anything. +// Update: 05/04/02 Removed the "powerdown_o", "startclk_o" and "clk_o" pins +// from the small design. Also removed "rbpu_o", so if you +// want pullups, you have to add them explicitly in the +// constraints file, and option_reg[7] doesn't control them. +// Update: 26/04/02 Fixed bug in aluout_reg logic, so that bitwise operators +// are used for AND/OR. (They had been wrongly coded using +// logical operators!) +// Update: 01/05/02 Fixed another bug -- the rrf and rlf instructions were +// coded incorrectly. +// Update: 03/05/02 Fixed another bug -- the carry bit was incorrect (the +// problem was discovered while performing SUBWF X,W where +// W contained 0 and X contained 1. (1-0). The logic for +// the carry bit appears to have been incorrect even in +// the original VHDL code by Sumio Morioka. +// Update: 10/30/02 Fixed syntax error pointed out by Cheol-Kyoo Lee, who got +// the source code from opencores.com. Removed semicolon +// from "endcase" statements. +// +// Description +//--------------------------------------------------------------------------- +// This logic module implements a small RISC microcontroller, with functions +// and instruction set very similar to those of the Microchip 16F84 chip. +// This work is a translation (from VHDL to Verilog) of the "CQPIC" design +// published in 1999 by Sumio Morioka of Japan, and published in the December +// 1999 issue of "Transistor Gijutsu Magazine." The translation was performed +// by John Clayton, without the use of any translation tools. +// +// Original version used as basis for translation: CQPIC version 1.00b +// (December 10, 2000) +//--------------------------------------------------------------------------- + +`define STATEBIT_SIZE 3 // Size of state machine register (bits) + + +module risc16f84_small ( + prog_dat_i, // [13:0] ROM read data + prog_adr_o, // [12:0] ROM address + ram_dat_i, // [7:0] RAM read data + ram_dat_o, // [7:0] RAM write data + ram_adr_o, // [8:0] RAM address; ram_adr[8:7] indicates RAM-BANK + readram_o, // RAM read strobe (H active) + writeram_o, // RAM write strobe (H active) + porta_io, // [4:0] PORT-A + portb_io, // [7:0] PORT-B + int0_i, // PORT-B(0) INT + pon_rst_n_i, // Power-on reset (L active) + clk_i // Clock input +); + + +// You can change the following parameters as you would like +parameter STACK_SIZE_PP = 8; // Size of PC stack +parameter LOG2_STACK_SIZE_PP = 3; // Log_2(stack_size) +parameter WDT_SIZE_PP = 255; // Size of watch dog timer (WDT) +parameter WDT_BITS_PP = 8; // Bits needed for watch dog timer (WDT) + +// State definitions for state machine, provided as parameters to allow +// for redefinition of state values by the instantiator if desired. +parameter QRESET_PP = 3'b100; // reset state +parameter Q1_PP = 3'b000; // state Q1 +parameter Q2_PP = 3'b001; // state Q2 +parameter Q3_PP = 3'b011; // state Q3 +parameter Q4_PP = 3'b010; // state Q4 + + +// I/O declarations + + // program ROM data bus/address bus +input [13:0] prog_dat_i; // ROM read data +output [12:0] prog_adr_o; // ROM address + + // data RAM data bus/address bus/control signals +input [7:0] ram_dat_i; // RAM read data +output [7:0] ram_dat_o; // RAM write data +output [8:0] ram_adr_o; // RAM address; ram_adr[8:7] indicates RAM-BANK +output readram_o; // RAM read strobe (H active) +output writeram_o; // RAM write strobe (H active) + + // I/O ports +inout [4:0] porta_io; // PORT-A +inout [7:0] portb_io; // PORT-B + + // PORT-B interrupt input +input int0_i; // PORT-B(0) INT + + // CPU reset +input pon_rst_n_i; // Power-on reset (LOW active) + + // CPU clock +input clk_i; // Clock input + + +// Internal signal declarations + + // User registers +reg [7:0] w_reg; // W +reg [12:0] pc_reg; // PCH/PCL +reg [7:0] status_reg; // STATUS +reg [7:0] fsr_reg; // FSR +reg [4:0] porta_i_sync_reg; // PORTA IN (synchronizer) +reg [4:0] porta_o_reg; // PORTA OUT +reg [7:0] portb_i_sync_reg; // PORTB IN (synchronizer) +reg [7:0] portb_o_reg; // PORTB OUT +reg [4:0] pclath_reg; // PCLATH +reg [7:0] intcon_reg; // INTCON +reg [7:0] option_reg; // OPTION +reg [4:0] trisa_reg; // TRISA +reg [7:0] trisb_reg; // TRISB + + // Internal registers for controlling instruction execution +reg [13:0] inst_reg; // Hold fetched op-code/operand +reg [7:0] aluinp1_reg; // data source (1 of 2) +reg [7:0] aluinp2_reg; // data source (2 of 2) +reg c_in; // Used with ALU data sources. +reg [7:0] aluout_reg; // result of calculation +reg exec_op_reg; // if L (i.e. GOTO instruction etc), stall exec. +reg intstart_reg; // if H (i.e. interrupt), stall instr. exec. +reg sleepflag_reg; // if H, sleeping. + + // Stack + // stack (array of data-registers) +reg [12:0] stack_reg [STACK_SIZE_PP-1:0]; + // stack pointer (binary encoded) +reg [LOG2_STACK_SIZE_PP-1:0] stack_pnt_reg; + + // Interrupt registers/nodes +reg intrise_reg; // detect positive edge of PORT-B inputs +reg intdown_reg; // detect negative edge of PORT-B inputs + +wire rb0_int; // Interrupt trigger + +wire inte; // RB0 interrupt trigger +reg intclr_reg; // CPU; clear intrise_reg and intdown_reg + + // State register +reg [`STATEBIT_SIZE-1:0] state_reg; + + // Result of decoding instruction -- only 1 is active at a time +wire inst_addlw; +wire inst_addwf; +wire inst_andlw; +wire inst_andwf; +wire inst_bcf; +wire inst_bsf; +wire inst_btfsc; +wire inst_btfss; +wire inst_call; +wire inst_clrf; +wire inst_clrw; +wire inst_comf; +wire inst_decf; +wire inst_decfsz; +wire inst_goto; +wire inst_incf; +wire inst_incfsz; +wire inst_iorlw; +wire inst_iorwf; +wire inst_movlw; +wire inst_movf; +wire inst_movwf; +wire inst_retfie; +wire inst_retlw; +wire inst_ret; +wire inst_rlf; +wire inst_rrf; +wire inst_sleep; +wire inst_sublw; +wire inst_subwf; +wire inst_swapf; +wire inst_xorlw; +wire inst_xorwf; + + // Result of calculating RAM access address +wire [8:0] ram_adr_node; // RAM access address + + // These wires indicate accesses to special registers... + // Only 1 is active at a time. +wire addr_pcl; +wire addr_stat; +wire addr_fsr; +wire addr_porta; +wire addr_portb; +wire addr_pclath; +wire addr_intcon; +wire addr_option; +wire addr_trisa; +wire addr_trisb; +wire addr_sram; + + // Other output registers (for removing hazards) +reg writeram_reg; // data-sram write strobe +reg [8:0] ram_adr_reg; // data-sram address + + // Synchronizers +reg inte_sync_reg; +reg reset_condition; + + // Signals used in "main_efsm" procedure + // (Intermediate nodes used for resource sharing.) +reg [7:0] ram_i_node; // result of reading RAM/Special registers +reg [12:0] inc_pc_node; // value of PC + 1 +wire [7:0] mask_node; // bit mask for logical operations +reg [8:0] add_node; // result of 8bit addition +reg [4:0] addlow_node; // result of low-4bit addition +wire temp; // Placeholder wire +wire dtemp; // Placeholder wire +reg aluout_zero_node; // H if ALUOUT = 0 +reg writew_node; // H if destination is W register +reg writeram_node; // H if destination is RAM/Special registers +reg int_node; // H if interrupt request comes + +//-------------------------------------------------------------------------- +// Instantiations +//-------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------- +// Functions & Tasks +//-------------------------------------------------------------------------- + +function [7:0] bitwise_tristate; + input [7:0] port; + input [7:0] tris; + integer k; + begin + for (k=0; k<8; k=k+1) bitwise_tristate[k] <= (tris[k])?1'bZ:port[k]; + end +endfunction + + +//-------------------------------------------------------------------------- +// Module code +//-------------------------------------------------------------------------- + + +// CPU synchronizers +always @(posedge clk_i) +begin + inte_sync_reg <= inte; + reset_condition <= ~pon_rst_n_i; +end + + +// Decode OPcode (see pp.54 of PIC16F84 data sheet) +// only 1 signal of the following signals will be '1' +assign inst_call = (inst_reg[13:11] == 3'b100 ); +assign inst_goto = (inst_reg[13:11] == 3'b101 ); +assign inst_bcf = (inst_reg[13:10] == 4'b0100 ); +assign inst_bsf = (inst_reg[13:10] == 4'b0101 ); +assign inst_btfsc = (inst_reg[13:10] == 4'b0110 ); +assign inst_btfss = (inst_reg[13:10] == 4'b0111 ); +assign inst_movlw = (inst_reg[13:10] == 4'b1100 ); +assign inst_retlw = (inst_reg[13:10] == 4'b1101 ); +assign inst_sublw = (inst_reg[13:9] == 5'b11110 ); +assign inst_addlw = (inst_reg[13:9] == 5'b11111 ); +assign inst_iorlw = (inst_reg[13:8] == 6'b111000 ); +assign inst_andlw = (inst_reg[13:8] == 6'b111001 ); +assign inst_xorlw = (inst_reg[13:8] == 6'b111010 ); +assign inst_subwf = (inst_reg[13:8] == 6'b000010 ); +assign inst_decf = (inst_reg[13:8] == 6'b000011 ); +assign inst_iorwf = (inst_reg[13:8] == 6'b000100 ); +assign inst_andwf = (inst_reg[13:8] == 6'b000101 ); +assign inst_xorwf = (inst_reg[13:8] == 6'b000110 ); +assign inst_addwf = (inst_reg[13:8] == 6'b000111 ); +assign inst_movf = (inst_reg[13:8] == 6'b001000 ); +assign inst_comf = (inst_reg[13:8] == 6'b001001 ); +assign inst_incf = (inst_reg[13:8] == 6'b001010 ); +assign inst_decfsz = (inst_reg[13:8] == 6'b001011 ); +assign inst_rrf = (inst_reg[13:8] == 6'b001100 ); +assign inst_rlf = (inst_reg[13:8] == 6'b001101 ); +assign inst_swapf = (inst_reg[13:8] == 6'b001110 ); +assign inst_incfsz = (inst_reg[13:8] == 6'b001111 ); +assign inst_movwf = (inst_reg[13:7] == 7'b0000001 ); +assign inst_clrw = (inst_reg[13:7] == 7'b0000010 ); +assign inst_clrf = (inst_reg[13:7] == 7'b0000011 ); +assign inst_ret = (inst_reg[13:0] == 14'b00000000001000); +assign inst_retfie = (inst_reg[13:0] == 14'b00000000001001); +assign inst_sleep = (inst_reg[13:0] == 14'b00000001100011); + + +// Calculate RAM access address (see pp.19 of PIC16F84 data sheet) + + // if "d"=0, indirect addressing is used, so RAM address is BANK+FSR + // otherwise, RAM address is BANK+"d" + // (see pp.19 of PIC16F84 data sheet) +assign ram_adr_node = (inst_reg[6:0]==0)?{status_reg[7],fsr_reg[7:0]}: + {status_reg[6:5],inst_reg[6:0]}; + + // check if this is an access to external RAM or not +assign addr_sram = (ram_adr_node[6:0] > 7'b0001011); //0CH-7FH,8CH-FFH + + // check if this is an access to special register or not + // only 1 signal of the following signals will be '1' +assign addr_pcl = (ram_adr_node[6:0] == 7'b0000010); // 02H, 82H +assign addr_stat = (ram_adr_node[6:0] == 7'b0000011); // 03H, 83H +assign addr_fsr = (ram_adr_node[6:0] == 7'b0000100); // 04H, 84H +assign addr_porta = (ram_adr_node[7:0] == 8'b00000101); // 05H +assign addr_portb = (ram_adr_node[7:0] == 8'b00000110); // 06H +assign addr_pclath = (ram_adr_node[6:0] == 7'b0001010); // 0AH, 8AH +assign addr_intcon = (ram_adr_node[6:0] == 7'b0001011); // 0BH, 8BH +assign addr_option = (ram_adr_node[7:0] == 8'b10000001); // 81H +assign addr_trisa = (ram_adr_node[7:0] == 8'b10000101); // 85H +assign addr_trisb = (ram_adr_node[7:0] == 8'b10000110); // 86H + +// construct bit-mask for logical operations and bit tests +assign mask_node = 1 << inst_reg[9:7]; + +// MAIN EFSM: description of register value changes in each clock cycle +always @(posedge clk_i) +begin + // 1. Intermediate nodes for resource sharing + + // This is a long if/else chain. Consider pulling in the decoded signals + // addr_tmr0 etc., and using a case statement instead? + // 1-1. Reading RAM/data sources (see pp.13 of PIC16F84 data sheet) + if (addr_sram) ram_i_node <= ram_dat_i; // data from ext. SRAM + else if (addr_pcl) ram_i_node <= pc_reg[7:0]; // data from pcl + else if (addr_stat) ram_i_node <= status_reg; // data from status + else if (addr_fsr) ram_i_node <= fsr_reg; // data from fsr + else if (addr_porta) + begin + // Logic implements a 2:1 mux for each bit [4:0] of ram_i_node + ram_i_node[4:0] <= ( + (~trisa_reg[4:0] & porta_o_reg[4:0]) + || ( trisa_reg[4:0] & porta_i_sync_reg[4:0]) + ); + ram_i_node[7:5] <= 3'b0; + end + else if (addr_portb) + begin + // Logic implements a 2:1 mux for each bit [7:0] of ram_i_node + ram_i_node[7:0] <= ( + (~trisb_reg[7:0] & portb_o_reg[7:0]) + || ( trisb_reg[7:0] & portb_i_sync_reg[7:0]) + ); + end + else if (addr_pclath) ram_i_node <= {3'b0,pclath_reg}; // pclath (5bit) + else if (addr_intcon) ram_i_node <= intcon_reg; // data from intcon + else if (addr_option) ram_i_node <= option_reg; // data from option + else if (addr_trisa) ram_i_node <= {3'b0,trisa_reg}; // trisa (5bit) + else if (addr_trisb) ram_i_node <= trisb_reg; // data from trisb + else ram_i_node <= 0; + + + // 1-2. PC + 1 + inc_pc_node <= pc_reg + 1; + + // 1-3. Adder (ALU) + // full 8bit-addition, with carry in/out. + {add_node,temp} <= {1'b0,aluinp1_reg,1'b1} + + {1'b0,aluinp2_reg,c_in}; + // lower 4bit-addition + {addlow_node,dtemp} <= {1'b0,aluinp1_reg[3:0],1'b1} + + {1'b0,aluinp2_reg[3:0],c_in}; + + // 1-4. Test if aluout = 0 + aluout_zero_node <= (aluout_reg == 0)?1:0; + + // 1-5. Determine destination + if (intstart_reg) + begin + writew_node <= 0; + writeram_node <= 0; + end + else if (inst_movwf || inst_bcf || inst_bsf || inst_clrf) + begin + writew_node <= 0; + writeram_node <= 1; + end + else if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw || inst_clrw) + begin + writew_node <= 1; + writeram_node <= 0; + end + else if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_decfsz + || inst_incfsz || inst_comf) + begin + writew_node <= ~inst_reg[7]; // ("d" field of fetched instruction) + writeram_node <= inst_reg[7]; // ("d" field of fetched instruction) + end + else + begin + writew_node <= 0; + writeram_node <= 0; + end + + // 1-6. Interrupt request (see pp.17 of PIC16F84 data sheet) + int_node <= intcon_reg[7] // GIE + && (intcon_reg[4] && intcon_reg[1]); // INTE,INTF + + // 2. EFSM body + case (state_reg) + + // 2-1. Reset state (see pp.14 and pp.42 of PIC16F84 data sheet) + QRESET_PP : + begin + pc_reg <= 0; // 0 + status_reg[7:5] <= 3'b0; + pclath_reg <= 0; // 0 + intcon_reg[7:1] <= 7'b0; + option_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisa_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisb_reg <= -1; // Set to all ones, like vhdl (others => 1) + exec_op_reg <= 0; + intclr_reg <= 1; // clear int + intstart_reg <= 0; + writeram_reg <= 0; + sleepflag_reg <= 0; + status_reg[4] <= 1; // /T0 = 1 + status_reg[3] <= 1; // /PD = 1 + stack_pnt_reg <= 0; // Reset stack pointer + + // go to Q1 state if reset signal is de-asserted + if (~reset_condition) state_reg <= Q1_PP; + + end // End of QRESET_PP state + + + // 2-2. Q1 cycle + Q1_PP : + begin + // 2-2-1. Clear external interrupt registers if GIE=0 + if (intcon_reg[7]) intclr_reg <= 0; + else intclr_reg <= 1; // clear interrupt + + // 2-2-2. Read I/O port + porta_i_sync_reg <= porta_io; + portb_i_sync_reg <= portb_io; + + // 2-2-3. Read RAM read address, if not stalled + if (exec_op_reg && ~intstart_reg) ram_adr_reg <= ram_adr_node; + + // 2-2-5. Goto next cycle + if (reset_condition) state_reg <= QRESET_PP; + else + // if in the sleep mode, wait until wake-up trigger comes + if (sleepflag_reg && ~intstart_reg) + begin + if (inte_sync_reg) + begin + // if rb0/inte interrupt comes, then resume execution + sleepflag_reg <= 0; + state_reg <= Q2_PP; + end + end + // if not in sleep mode, or if stalled, continue execution + else state_reg <= Q2_PP; + +// Alternate rendition of 2-2-5... +// // 2-2-5. Goto next cycle +// if (reset_condition) state_reg <= QRESET_PP; // Reset +// else if (~sleepflag_reg) state_reg <= Q2_PP; // Not sleeping, move on +// else if (intstart_reg) state_reg <= Q2_PP; // Stalled, move on +// else if (~inte_sync_reg) state_reg <= Q1_PP; // No wakeup, stay sleeping +// else // Not stalled and wake-up trigger comes... +// begin +// // if rb0/int interrupt comes, then resume execution +// sleepflag_reg <= 0; // Exit sleep mode condition +// state_reg <= Q2_PP; +// end + + + end // End of Q1 state + + // 2-3. Q2 cycle + Q2_PP : + begin + // 2-3-1. Read data-RAM and substitute source values to alu-input regs + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-3-1-1. Set aluinp1 register (source #1) + if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_bcf + || inst_bsf || inst_btfsc || inst_btfss || inst_decfsz + || inst_incfsz || inst_comf) + + aluinp1_reg <= ram_i_node; // RAM/Special registers + else + if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw) + + aluinp1_reg <= inst_reg[7:0]; // Immediate value ("k") + else + if ( inst_clrf || inst_clrw) aluinp1_reg <= 0; // 0 + else aluinp1_reg <= w_reg; // W register + + // 2-3-1-2. Set aluinp2 register (source #2) + if (inst_decf || inst_decfsz) aluinp2_reg <= -1; // for decr. + else if (inst_incf || inst_incfsz) aluinp2_reg <= 1; // for incr. + // -1 * W register (for subtract) + else if (inst_sublw || inst_subwf) aluinp2_reg <= ~w_reg + 1; + // operation of BCF: AND with inverted mask ("1..101..1") + // mask for BCF: value of only one position is 0 + else if (inst_bcf) aluinp2_reg <= ~mask_node; + // operation of BSF: OR with mask_node ("0..010..0") + // operation of FSC and FSS: AND with mask_node, compare to 0 + else if (inst_btfsc || inst_btfss || inst_bsf) + aluinp2_reg <= mask_node; + else aluinp2_reg <= w_reg; // W register + + // 2-3-1-3. Set stack pointer register (pop stack) + if (inst_ret || inst_retlw || inst_retfie) + stack_pnt_reg <= stack_pnt_reg - 1; // cycles 3,2,1,0,7,6... + + // 2-3-1-4. Set ram_adr register (set RAM write address) + ram_adr_reg <= ram_adr_node; // RAM write address + end + + // 2-3-4. Goto next cycle + if (reset_condition) state_reg <= QRESET_PP; + else state_reg <= Q3_PP; + end // End of Q2 state + + // 2-4. Q3 cycle + Q3_PP : + begin + // 2-4-1. Calculation and store result into alu-output register + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-4-1-1. Set aluout register + // Rotate left + if (inst_rlf) + aluout_reg <= {aluinp1_reg[6:0],status_reg[0]}; + // Rotate right + else if (inst_rrf) + aluout_reg <= {status_reg[0],aluinp1_reg[7:1]}; + // Swap nibbles + else if (inst_swapf) + aluout_reg <= {aluinp1_reg[3:0],aluinp1_reg[7:4]}; + // Logical inversion + else if (inst_comf) + aluout_reg <= ~aluinp1_reg; + // Logical AND, bit clear/bit test + else if ( inst_andlw || inst_andwf || inst_bcf || inst_btfsc + || inst_btfss) + aluout_reg <= (aluinp1_reg & aluinp2_reg); + // Logical OR, bit set + else if (inst_bsf || inst_iorlw || inst_iorwf) + aluout_reg <= (aluinp1_reg | aluinp2_reg); + // Logical XOR + else if (inst_xorlw || inst_xorwf) + aluout_reg <= (aluinp1_reg ^ aluinp2_reg); + // Addition, Subtraction, Increment, Decrement + else if ( inst_addlw || inst_addwf || inst_sublw || inst_subwf + || inst_decf || inst_decfsz || inst_incf || inst_incfsz) + aluout_reg <= add_node[7:0]; + // Pass through + else aluout_reg <= aluinp1_reg; + + // 2-4-1-2. Set C flag and DC flag + if (inst_addlw || inst_addwf || inst_sublw || inst_subwf) + begin + status_reg[1] <= addlow_node[4]; // DC flag + status_reg[0] <= add_node[8]; // C flag + end + else if (inst_rlf) status_reg[0] <= aluinp1_reg[7]; // C flag + else if (inst_rrf) status_reg[0] <= aluinp1_reg[0]; // C flag + + // 2-4-1-3. Set data-SRAM write enable (hazard-free) + if (writeram_node && addr_sram) writeram_reg <= 1; + else writeram_reg <= 0; + + end + else writeram_reg <= 0; // If stalled + + // 2-4-2. Check external interrupt and set int. flag + if (~intstart_reg && intcon_reg[7]) // GIE + begin + // PORT-B0 INT + if (inte_sync_reg) + begin + intcon_reg[1] <= 1; // set INTF + intclr_reg <= 1; // clear external int-register + // (intrise_reg and intdown_reg) + end + end + + // 2-4-3. Goto next cycle + if (reset_condition) state_reg <= QRESET_PP; + else state_reg <= Q4_PP; + + end // End of Q3 state + + + // 2-5. Q4 cycle + Q4_PP : + begin + // 2-5-1. Fetch next program-instruction + inst_reg <= prog_dat_i; + + if (~exec_op_reg && ~intstart_reg) // if STALLED (not interrupt) + begin + pc_reg <= inc_pc_node; // increment PC + exec_op_reg <= 1; // end of stall + end + else // if NOT stalled + begin + // (note: if intstart_reg, only stack/pc-operations in this + // else-clause will be performed) + // 2-5-2. Store calculation result into destination, + // set PC and flags, and determine if execute next cycle. + + // 2-5-2-1. Set W register, if not in stall cycle + // (~intstart_reg) and destination is W + + // writew_node == 0 if intstart_reg... + if (writew_node) w_reg <= aluout_reg; // write W reg + + // 2-5-2-2. Set data RAM/special registers, + // if not in stall cycle (~intstart_reg) + if (writeram_node) + begin + if (addr_stat) + begin + status_reg[7:5] <= aluout_reg[7:5]; // write IRP,RP1,RP0 + // status(4),status(3)...unwritable, see below (/PD,/T0 part) + status_reg[1:0] <= aluout_reg[1:0]; // write DC,C + end + if (addr_fsr) fsr_reg <= aluout_reg; // write FSR + if (addr_porta) porta_o_reg <= aluout_reg[4:0]; // write PORT-A + if (addr_portb) portb_o_reg <= aluout_reg; // write PORT-B + if (addr_pclath) pclath_reg <= aluout_reg[4:0]; // write PCLATH + if (addr_intcon) intcon_reg[6:0] <= aluout_reg[6:0]; + // write INTCON (except GIE) + // intcon(7)...see below (GIE part) + if (addr_option) option_reg <= aluout_reg; // write OPTION + if (addr_trisa) trisa_reg <= aluout_reg[4:0]; // write TRISA + if (addr_trisb) trisb_reg <= aluout_reg; // write TRISB + end + + // 2-5-2-3. Set/clear Z flag, if not in stall cycle (~intstart_reg) + if (~intstart_reg) + begin + if (addr_stat) status_reg[2] <= aluout_reg[2]; // (dest. is Z flag) + else if ( inst_addlw || inst_addwf || inst_andlw || inst_andwf + || inst_clrf || inst_clrw || inst_comf || inst_decf + || inst_incf || inst_movf || inst_sublw || inst_subwf + || inst_xorlw || inst_xorwf || inst_iorlw || inst_iorwf ) + status_reg[2] <= aluout_zero_node; // Z=1 if result == 0 + end + + // 2-5-2-4. Set PC and determine whether to execute next cycle or not + // After interrupt-stall cycle ends, jump to interrupt vector + if (intstart_reg) + begin + pc_reg <= 4; // (interrupt vector) + exec_op_reg <= 0; // the next cycle is a stall cycle + end + else if (inst_ret || inst_retlw || inst_retfie) // "return" instr. + begin + pc_reg <= stack_reg[stack_pnt_reg]; + exec_op_reg <= 0; // the next cycle is stall cycle + end + else if (inst_goto || inst_call) // "goto/call" instructions + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= {pclath_reg[4:3],inst_reg[10:0]}; + exec_op_reg <= 0; + end + else if ( ( (inst_btfsc || inst_decfsz || inst_incfsz) + && aluout_zero_node) + || (inst_btfss && ~aluout_zero_node) + ) // bit_test instrcutions + begin + pc_reg <= inc_pc_node; + exec_op_reg <= 0; + // the next cycle is stall cycle, if test conditions are met. + end + else if (writeram_node && addr_pcl) // PCL is data-destination + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= pclath_reg[4:0] & aluout_reg; + exec_op_reg <= 0; + end + else + begin + // this check MUST be located AFTER the above if/else sentences + // check if interrupt trigger comes + if (~int_node) pc_reg <= inc_pc_node; + // if not, the next instr. fetch/exec. will be performed normally + else pc_reg <= pc_reg; + // if so, value of PC must be held + //(will be pushed onto stack at the end of next instruction cycle) + exec_op_reg <= 1; + end + + // 2-5-2-5. Push current PC value into stack, if necessary + if (inst_call || intstart_reg) + // CALL instr. or End of interrupt-stall cycle + begin + stack_reg[stack_pnt_reg] <= pc_reg; // write PC value + stack_pnt_reg <= stack_pnt_reg + 1; // increment stack pointer + end + + // 2-5-2-6. Set GIE bit in intcon register (intcon_reg(7)) + if (~intstart_reg) + begin + if (int_node) // interrupt trigger comes + begin + intcon_reg[7] <= 0; // clear GIE + intstart_reg <= 1; // the next cycle is interrupt-stall cycle + end + else if (inst_retfie) // "return from interrupt" instruction + begin + intcon_reg[7] <= 1; + intstart_reg <= 0; + end + else if (writeram_node && addr_intcon) // destination is GIE + begin + intcon_reg[7] <= aluout_reg[7]; + intstart_reg <= 0; + end + else intstart_reg <= 0; + end + else intstart_reg <= 0; + + // 2-5-2-7. Enter sleep mode if needed. (No need to set /TO and /PD) + if (~intstart_reg && inst_sleep) sleepflag_reg <= 1; + + end // (if not stalled) + + // 2-5-3. Clear data-SRAM write enable (hazard-free) + writeram_reg <= 0; + + // 2-5-6. Goto next cycle + if (reset_condition) state_reg <= QRESET_PP; + else state_reg <= Q1_PP; + end // End of Q4 state + + // 2-6. Illegal states (NEVER REACHED in normal execution) + default : state_reg <= QRESET_PP; // goto reset state + endcase +end // End of process + + +// Detect external interrupt requests +// INT0 I/F +always @(posedge int0_i or posedge intclr_reg) +begin + if (intclr_reg) intrise_reg <= 0; + else intrise_reg <= 1; // catch positive edge +end // process + +always @(negedge int0_i or posedge intclr_reg) +begin + if (intclr_reg) intdown_reg <= 0; + else intdown_reg <= 1; // catch negative edge +end // process +assign rb0_int = option_reg[6]?intrise_reg:intdown_reg; + +// Decode INT triggers +// (do not AND with GIE(intcon_reg(7)), since these signals are +// also used for waking up from SLEEP) +assign inte = intcon_reg[4] && rb0_int; // G0IE and raw-trigger signal + + +// Circuit's output signals +assign prog_adr_o = pc_reg; // program ROM address +assign ram_adr_o = ram_adr_reg; // data RAM address +assign ram_dat_o = aluout_reg; // data RAM write data +assign readram_o = (state_reg[1:0] == Q2_PP[1:0]); // data RAM read enable + //(1 when state_reg = Q2_PP) +assign writeram_o = writeram_reg; // data RAM write enable + +assign porta_io = bitwise_tristate(porta_o_reg, trisa_reg); // PORT-A +assign portb_io = bitwise_tristate(portb_o_reg, trisb_reg); // PORT-B + +endmodule + + +//`undef STATEBIT_SIZE \ No newline at end of file Index: web_uploads/people.shtml =================================================================== --- web_uploads/people.shtml (nonexistent) +++ web_uploads/people.shtml (revision 9) @@ -0,0 +1,13 @@ + + +Project: memory_sizer

+Overview | +People | +Documentation | +Download | +OpenCores Mail list | +Contact me
+

+The People

+John E. Clayton from Scottsdale, Arizona, USA

+ Index: web_uploads/risc16f84_lite.v =================================================================== --- web_uploads/risc16f84_lite.v (nonexistent) +++ web_uploads/risc16f84_lite.v (revision 9) @@ -0,0 +1,1205 @@ +//--------------------------------------------------------------------------- +// RISC 16F84 "light" core +// +// This file is part of the "risc_16F84" project. +// http://www.opencores.org/cores/risc_16F84 +// +// +// Description: See description below (which suffices for IP core +// specification document.) +// +// Copyright (C) 1999 Sumio Morioka (original VHDL design version) +// Copyright (C) 2001 John Clayton and OPENCORES.ORG (this Verilog version) +// +// NOTE: This source code is free for educational/hobby use only. It cannot +// be used for commercial purposes without the consent of Microchip +// Technology incorporated. +// +// This source file may be used and distributed without restriction provided +// that this copyright statement is not removed from the file and that any +// derivative work contains the original copyright notice and the associated +// disclaimer. +// +// This source file is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This source is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this source. +// If not, download it from http://www.opencores.org/lgpl.shtml +// +//--------------------------------------------------------------------------- +// +// Author: John Clayton +// Date : January 29, 2002 +// +// (NOTE: Date formatted as day/month/year.) +// Update: 29/01/02 copied this file from memory_sizer.v (pared down). +// Translated the module and signal declarations. +// Transformed the instruction wires to lowercase. +// Transformed the addressing wires to lowercase. +// Update: 31/01/02 Translated the instruction decoder. +// Update: 5/02/02 Determined that stack is simply a circular buffer of +// 8 locations, 13 bits per location. Started translating +// "main_efsm" process. Added all code from piccore.vhd +// into this file for eventual translation. Concluded that +// "stack_full_node" is not needed. +// Update: 6/02/02 Translated the "ram_i_node" if/else precedural assignment. +// Update: 7/02/02 Changed all := to <=, changed all '0' to 0 and '1' to 1. +// Replaced all " downto " with ":". +// Finished translating QRESET state. +// Update: 20/02/02 Replaced all instances of Qreset with QRESET_PP. Also +// replaced other state designations with their new names. +// Finished translating Q1, Q2 states. +// Update: 22/02/02 Translated section 2-4-1-1 (aluout register) +// Update: 27/02/02 Replaced all "or" with "||" in if statements +// Replaced all "and" with "&&" in if statements. +// Replaced all "not" with "~" in if statements. +// Finished translating Q3,Q4 states. +// Translated output signal assignments at end of code. +// Translated interrupt trigger processes. +// Update: 28/02/02 Finished translation of WDT and TMR0 prescaler. +// Trimmed line length to 80 characters throughout. +// Prepared to attempt initial syntax checking. +// Cleaned up some naming conventions, and verified that +// all I/O pins have _i or _o appended in the body of the +// code. +// Update: 03/04/02 Changed "progdata_i" to "prog_dat_i" Also changed +// "progadr_o" to "prog_adr_o" +// Update: 04/04/02 Created new file "risc16f84_lite.v" This file is reduced +// and simplified from the original "risc16f84.v" file. +// Specifically, I am removing EEPROM support, and +// consolidating porta and portb I/O pins so that they +// are bidirectional. +// Update: 04/26/02 Fixed bug in aluout_reg logic, so that AND/OR type of +// instructions now use bitwise operators (they were wrongly +// coded using logical operators!) +// Update: 05/01/02 Fixed another bug -- the rrf and rlf instructions were +// coded incorrectly. +// Update: 03/05/02 Fixed another bug -- the carry bit was incorrect (the +// problem was discovered while performing SUBWF X,W where +// W contained 0 and X contained 1. (1-0). The logic for +// the carry bit appears to have been incorrect even in +// the original VHDL code by Sumio Morioka. +// Update: 10/30/02 Fixed syntax error pointed out by Cheol-Kyoo Lee, who got +// the source code from opencores.com. Removed semicolon +// from "endcase" statements. +// +// Description +//--------------------------------------------------------------------------- +// This logic module implements a small RISC microcontroller, with functions +// and instruction set very similar to those of the Microchip 16F84 chip. +// This work is a translation (from VHDL to Verilog) of the "CQPIC" design +// published in 1999 by Sumio Morioka of Japan, and published in the December +// 1999 issue of "Transistor Gijutsu Magazine." The translation was performed +// by John Clayton, without the use of any translation tools. +// +// Original version used as basis for translation: CQPIC version 1.00b +// (December 10, 2000) +//--------------------------------------------------------------------------- + +`define STATEBIT_SIZE 3 // Size of state machine register (bits) + + +module risc16f84_lite ( + prog_dat_i, // [13:0] ROM read data + prog_adr_o, // [12:0] ROM address + ram_dat_i, // [7:0] RAM read data + ram_dat_o, // [7:0] RAM write data + ram_adr_o, // [8:0] RAM address; ram_adr[8:7] indicates RAM-BANK + readram_o, // RAM read strobe (H active) + writeram_o, // RAM write strobe (H active) + porta_io, // [4:0] PORT-A + portb_io, // [7:0] PORT-B + rbpu_o, // PORT_B pull-up enable (usually not used) + int0_i, // PORT-B(0) INT + int4_i, // PORT-B(4) INT + int5_i, // PORT-B(5) INT + int6_i, // PORT-B(6) INT + int7_i, // PORT-B(7) INT + t0cki_i, // T0CKI (PORT-A(4)) + wdt_ena_i, // WDT enable (H active) + wdt_clk_i, // WDT clock + wdt_full_o, // WDT-full indicator (H active) + powerdown_o, // SLEEP-mode; if H, you can stop system clock clk_i + startclk_o, // WAKEUP; if H, turn on clk_i for leaving sleep-mode + pon_rst_n_i, // Power-on reset (L active) + mclr_n_i, // Normal reset (L active) + clk_i, // Clock input + clk_o // Clock output (clk_i/4) +); + + +// You can change the following parameters as you would like +parameter STACK_SIZE_PP = 8; // Size of PC stack +parameter LOG2_STACK_SIZE_PP = 3; // Log_2(stack_size) +parameter WDT_SIZE_PP = 255; // Size of watch dog timer (WDT) +parameter WDT_BITS_PP = 8; // Bits needed for watch dog timer (WDT) + +// State definitions for state machine, provided as parameters to allow +// for redefinition of state values by the instantiator if desired. +parameter QRESET_PP = 3'b100; // reset state +parameter Q1_PP = 3'b000; // state Q1 +parameter Q2_PP = 3'b001; // state Q2 +parameter Q3_PP = 3'b011; // state Q3 +parameter Q4_PP = 3'b010; // state Q4 + + +// I/O declarations + + // program ROM data bus/address bus +input [13:0] prog_dat_i; // ROM read data +output [12:0] prog_adr_o; // ROM address + + // data RAM data bus/address bus/control signals +input [7:0] ram_dat_i; // RAM read data +output [7:0] ram_dat_o; // RAM write data +output [8:0] ram_adr_o; // RAM address; ram_adr[8:7] indicates RAM-BANK +output readram_o; // RAM read strobe (H active) +output writeram_o; // RAM write strobe (H active) + + // I/O ports +inout [4:0] porta_io; // PORT-A +inout [7:0] portb_io; // PORT-B +output rbpu_o; // PORT_B pull-up enable (usually not used) + + // PORT-B interrupt input +input int0_i; // PORT-B(0) INT +input int4_i; // PORT-B(4) INT +input int5_i; // PORT-B(5) INT +input int6_i; // PORT-B(6) INT +input int7_i; // PORT-B(7) INT + + // TMR0 Control +input t0cki_i; // T0CKI (PORT-A(4)) + + // Watch Dog Timer Control +input wdt_ena_i; // WDT enable (H active) +input wdt_clk_i; // WDT clock +output wdt_full_o; // WDT-full indicator (H active) + + // CPU clock stop/start indicators +output powerdown_o; // SLEEP-mode; if H, then you can + // stop the system clock clk_i +output startclk_o; // WAKEUP; if H, you should turn on + // clock clk_i for waking up from sleep-mode + // CPU reset +input pon_rst_n_i; // Power-on reset (LOW active) +input mclr_n_i; // Normal reset (LOW active) + + // CPU clock +input clk_i; // Clock input +output clk_o; // Clock output (clk_i/4) + + +// Internal signal declarations + + // User registers +reg [7:0] w_reg; // W +reg [7:0] tmr0_reg; // TMR0 +reg [12:0] pc_reg; // PCH/PCL +reg [7:0] status_reg; // STATUS +reg [7:0] fsr_reg; // FSR +reg [4:0] porta_i_sync_reg; // PORTA IN (synchronizer) +reg [4:0] porta_o_reg; // PORTA OUT +reg [7:0] portb_i_sync_reg; // PORTB IN (synchronizer) +reg [7:0] portb_o_reg; // PORTB OUT +reg [4:0] pclath_reg; // PCLATH +reg [7:0] intcon_reg; // INTCON +reg [7:0] option_reg; // OPTION +reg [4:0] trisa_reg; // TRISA +reg [7:0] trisb_reg; // TRISB + + // Internal registers for controlling instruction execution +reg [13:0] inst_reg; // Hold fetched op-code/operand +reg [7:0] aluinp1_reg; // data source (1 of 2) +reg [7:0] aluinp2_reg; // data source (2 of 2) +reg c_in; // Used with ALU data sources. +reg [7:0] aluout_reg; // result of calculation +reg exec_op_reg; // if L (i.e. GOTO instruction etc), stall exec. +reg intstart_reg; // if H (i.e. interrupt), stall instr. exec. +reg sleepflag_reg; // if H, sleeping. + + // Stack + // stack (array of data-registers) +reg [12:0] stack_reg [STACK_SIZE_PP-1:0]; + // stack pointer (binary encoded) +reg [LOG2_STACK_SIZE_PP-1:0] stack_pnt_reg; + + // WDT register and its control +reg [WDT_BITS_PP-1:0] wdt_reg; // WDT counter +reg wdt_full_reg; // WDT->CPU; hold WDT-full signal until + // CPU is reset +reg wdt_full_node; +wire wdt_init; // Initialize the WDT +reg [2:0] wdt_full_sync_reg; // CPU; synchronizer for wdt_full_reg +reg wdt_clr_reg; // CPU->WDT; request to zero-clear wdt_reg +reg wdt_clr_reqhold_reg; // CPU; hold a clear-request if + // previous request is still processing +reg [1:0] wdt_clr_req_reg; // WDT; synchronizer for wdt_clr_reg +wire wdt_clr_ack; // WDT->CPU; ack to wdt_clr_reg + // (same with wdt_clr_req_reg(1)) +reg wdt_clr_ack_sync_reg; // CPU; synchronizer for wdt_clr_ack +reg wdt_full_clr_reg; // CPU->WDT; request to clear wdt_full_reg +reg [1:0] wdt_fullclr_req_reg; // WDT; synchronizer for wdt_full_clr_reg + + // TMR0 prescaler +wire ps_clk; // clock for prescaler +reg [7:0] pscale_reg; // prescaler (range 0 to 255) +reg ps_full_reg; // clock for TMR0, from prescaler +wire inc_tmr_clk; // clock for TMR0 +reg inc_tmr_hold_reg; // hold TMR0 increment request +reg [7:0] rateval; // Temporary storage value within process + + // Interrupt registers/nodes +reg [4:0] intrise_reg; // detect positive edge of PORT-B inputs +reg [4:0] intdown_reg; // detect negative edge of PORT-B inputs + // Interrupt triggers +wire rb0_int; +wire rb4_int; +wire rb5_int; +wire rb6_int; +wire rb7_int; + +wire rbint; // RB4-7 interrupt trigger +wire inte; // RB0 interrupt trigger +reg [4:0] intclr_reg; // CPU; clear intrise_reg and intdown_reg +wire intclr0; // Individual wires used in sensitivity lists +wire intclr1; // since "simple variables" are OK, +wire intclr2; // but apparently intclr_reg[0] is not a +wire intclr3; // "simple variable or its negation." +wire intclr4; + + // State register +reg [`STATEBIT_SIZE-1:0] state_reg; + + // Result of decoding instruction -- only 1 is active at a time +wire inst_addlw; +wire inst_addwf; +wire inst_andlw; +wire inst_andwf; +wire inst_bcf; +wire inst_bsf; +wire inst_btfsc; +wire inst_btfss; +wire inst_call; +wire inst_clrf; +wire inst_clrw; +wire inst_clrwdt; +wire inst_comf; +wire inst_decf; +wire inst_decfsz; +wire inst_goto; +wire inst_incf; +wire inst_incfsz; +wire inst_iorlw; +wire inst_iorwf; +wire inst_movlw; +wire inst_movf; +wire inst_movwf; +wire inst_retfie; +wire inst_retlw; +wire inst_ret; +wire inst_rlf; +wire inst_rrf; +wire inst_sleep; +wire inst_sublw; +wire inst_subwf; +wire inst_swapf; +wire inst_xorlw; +wire inst_xorwf; + + // Result of calculating RAM access address +wire [8:0] ram_adr_node; // RAM access address + + // These wires indicate accesses to special registers... + // Only 1 is active at a time. +wire addr_tmr0; +wire addr_pcl; +wire addr_stat; +wire addr_fsr; +wire addr_porta; +wire addr_portb; +wire addr_pclath; +wire addr_intcon; +wire addr_option; +wire addr_trisa; +wire addr_trisb; +wire addr_sram; + + // Other output registers (for removing hazards) +reg writeram_reg; // data-sram write strobe +reg [8:0] ram_adr_reg; // data-sram address +reg clk_o_reg; // clock output + + // Synchronizers +reg inte_sync_reg; +reg rbint_sync_reg; +reg [1:0] inc_tmr_sync_reg; +reg mclr_sync_reg; +reg poweron_sync_reg; + + // Signals used in "main_efsm" procedure + // (Intermediate nodes used for resource sharing.) +reg [7:0] ram_i_node; // result of reading RAM/Special registers +reg [12:0] inc_pc_node; // value of PC + 1 +wire [7:0] mask_node; // bit mask for logical operations +reg [8:0] add_node; // result of 8bit addition +reg [4:0] addlow_node; // result of low-4bit addition +wire temp; // Placeholder wire +wire dtemp; // Placeholder wire +reg aluout_zero_node; // H if ALUOUT = 0 +reg writew_node; // H if destination is W register +reg writeram_node; // H if destination is RAM/Special registers +reg int_node; // H if interrupt request comes +reg wdt_rst_node; // H if WDT-reset request comes +reg reset_cond; // H for any reset request (jump to QRESET_PP state) + +//-------------------------------------------------------------------------- +// Instantiations +//-------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------- +// Functions & Tasks +//-------------------------------------------------------------------------- + +function [7:0] bitwise_tristate; + input [7:0] port; + input [7:0] tris; + integer k; + begin + for (k=0; k<8; k=k+1) bitwise_tristate[k] <= (tris[k])?1'bZ:port[k]; + end +endfunction + + +//-------------------------------------------------------------------------- +// Module code +//-------------------------------------------------------------------------- + + +// CPU synchronizers +always @(posedge clk_i) +begin + inte_sync_reg <= inte; + rbint_sync_reg <= rbint; + wdt_clr_ack_sync_reg <= wdt_clr_ack; + mclr_sync_reg <= mclr_n_i; + poweron_sync_reg <= pon_rst_n_i; + inc_tmr_sync_reg[0] <= inc_tmr_clk; + inc_tmr_sync_reg[1] <= inc_tmr_sync_reg[0]; + if (~poweron_sync_reg || ~mclr_sync_reg) + wdt_full_sync_reg <= 3'b0; + else + begin + wdt_full_sync_reg[0] <= wdt_full_reg; + wdt_full_sync_reg[1] <= wdt_full_sync_reg[0]; // (remove meta-stability) + wdt_full_sync_reg[2] <= wdt_full_sync_reg[1]; // (detect positive edge) + end +end + + +// Decode OPcode (see pp.54 of PIC16F84 data sheet) +// only 1 signal of the following signals will be '1' +assign inst_call = (inst_reg[13:11] == 3'b100 ); +assign inst_goto = (inst_reg[13:11] == 3'b101 ); +assign inst_bcf = (inst_reg[13:10] == 4'b0100 ); +assign inst_bsf = (inst_reg[13:10] == 4'b0101 ); +assign inst_btfsc = (inst_reg[13:10] == 4'b0110 ); +assign inst_btfss = (inst_reg[13:10] == 4'b0111 ); +assign inst_movlw = (inst_reg[13:10] == 4'b1100 ); +assign inst_retlw = (inst_reg[13:10] == 4'b1101 ); +assign inst_sublw = (inst_reg[13:9] == 5'b11110 ); +assign inst_addlw = (inst_reg[13:9] == 5'b11111 ); +assign inst_iorlw = (inst_reg[13:8] == 6'b111000 ); +assign inst_andlw = (inst_reg[13:8] == 6'b111001 ); +assign inst_xorlw = (inst_reg[13:8] == 6'b111010 ); +assign inst_subwf = (inst_reg[13:8] == 6'b000010 ); +assign inst_decf = (inst_reg[13:8] == 6'b000011 ); +assign inst_iorwf = (inst_reg[13:8] == 6'b000100 ); +assign inst_andwf = (inst_reg[13:8] == 6'b000101 ); +assign inst_xorwf = (inst_reg[13:8] == 6'b000110 ); +assign inst_addwf = (inst_reg[13:8] == 6'b000111 ); +assign inst_movf = (inst_reg[13:8] == 6'b001000 ); +assign inst_comf = (inst_reg[13:8] == 6'b001001 ); +assign inst_incf = (inst_reg[13:8] == 6'b001010 ); +assign inst_decfsz = (inst_reg[13:8] == 6'b001011 ); +assign inst_rrf = (inst_reg[13:8] == 6'b001100 ); +assign inst_rlf = (inst_reg[13:8] == 6'b001101 ); +assign inst_swapf = (inst_reg[13:8] == 6'b001110 ); +assign inst_incfsz = (inst_reg[13:8] == 6'b001111 ); +assign inst_movwf = (inst_reg[13:7] == 7'b0000001 ); +assign inst_clrw = (inst_reg[13:7] == 7'b0000010 ); +assign inst_clrf = (inst_reg[13:7] == 7'b0000011 ); +assign inst_ret = (inst_reg[13:0] == 14'b00000000001000); +assign inst_retfie = (inst_reg[13:0] == 14'b00000000001001); +assign inst_sleep = (inst_reg[13:0] == 14'b00000001100011); +assign inst_clrwdt = (inst_reg[13:0] == 14'b00000001100100); + + +// Calculate RAM access address (see pp.19 of PIC16F84 data sheet) + + // if "d"=0, indirect addressing is used, so RAM address is BANK+FSR + // otherwise, RAM address is BANK+"d" + // (see pp.19 of PIC16F84 data sheet) +assign ram_adr_node = (inst_reg[6:0]==0)?{status_reg[7],fsr_reg[7:0]}: + {status_reg[6:5],inst_reg[6:0]}; + + // check if this is an access to external RAM or not +assign addr_sram = (ram_adr_node[6:0] > 7'b0001011); //0CH-7FH,8CH-FFH + + // check if this is an access to special register or not + // only 1 signal of the following signals will be '1' +assign addr_tmr0 = (ram_adr_node[7:0] == 8'b00000001); // 01H +assign addr_pcl = (ram_adr_node[6:0] == 7'b0000010); // 02H, 82H +assign addr_stat = (ram_adr_node[6:0] == 7'b0000011); // 03H, 83H +assign addr_fsr = (ram_adr_node[6:0] == 7'b0000100); // 04H, 84H +assign addr_porta = (ram_adr_node[7:0] == 8'b00000101); // 05H +assign addr_portb = (ram_adr_node[7:0] == 8'b00000110); // 06H +assign addr_pclath = (ram_adr_node[6:0] == 7'b0001010); // 0AH, 8AH +assign addr_intcon = (ram_adr_node[6:0] == 7'b0001011); // 0BH, 8BH +assign addr_option = (ram_adr_node[7:0] == 8'b10000001); // 81H +assign addr_trisa = (ram_adr_node[7:0] == 8'b10000101); // 85H +assign addr_trisb = (ram_adr_node[7:0] == 8'b10000110); // 86H + +// construct bit-mask for logical operations and bit tests +assign mask_node = 1 << inst_reg[9:7]; + +// MAIN EFSM: description of register value changes in each clock cycle +always @(posedge clk_i) +begin + // 1. Intermediate nodes for resource sharing + + // This is a long if/else chain. Consider pulling in the decoded signals + // addr_tmr0 etc., and using a case statement instead? + // 1-1. Reading RAM/data sources (see pp.13 of PIC16F84 data sheet) + if (addr_sram) ram_i_node <= ram_dat_i; // data from ext. SRAM + else if (addr_tmr0) ram_i_node <= tmr0_reg; // data from tmr0 + else if (addr_pcl) ram_i_node <= pc_reg[7:0]; // data from pcl + else if (addr_stat) ram_i_node <= status_reg; // data from status + else if (addr_fsr) ram_i_node <= fsr_reg; // data from fsr + else if (addr_porta) + begin + // Logic implements a 2:1 mux for each bit [4:0] of ram_i_node + ram_i_node[4:0] <= ( + (~trisa_reg[4:0] & porta_o_reg[4:0]) + || ( trisa_reg[4:0] & porta_i_sync_reg[4:0]) + ); + ram_i_node[7:5] <= 3'b0; + end + else if (addr_portb) + begin + // Logic implements a 2:1 mux for each bit [7:0] of ram_i_node + ram_i_node[7:0] <= ( + (~trisb_reg[7:0] & portb_o_reg[7:0]) + || ( trisb_reg[7:0] & portb_i_sync_reg[7:0]) + ); + end + else if (addr_pclath) ram_i_node <= {3'b0,pclath_reg}; // pclath (5bit) + else if (addr_intcon) ram_i_node <= intcon_reg; // data from intcon + else if (addr_option) ram_i_node <= option_reg; // data from option + else if (addr_trisa) ram_i_node <= {3'b0,trisa_reg}; // trisa (5bit) + else if (addr_trisb) ram_i_node <= trisb_reg; // data from trisb + else ram_i_node <= 0; + + + // 1-2. PC + 1 + inc_pc_node <= pc_reg + 1; + + + // 1-3. Adder (ALU) + // full 8bit-addition, with carry in/out. + {add_node,temp} <= {1'b0,aluinp1_reg,1'b1} + + {1'b0,aluinp2_reg,c_in}; + // lower 4bit-addition + {addlow_node,dtemp} <= {1'b0,aluinp1_reg[3:0],1'b1} + + {1'b0,aluinp2_reg[3:0],c_in}; + + // 1-4. Test if aluout = 0 + aluout_zero_node <= (aluout_reg == 0)?1:0; + + // 1-5. Determine destination + if (intstart_reg) + begin + writew_node <= 0; + writeram_node <= 0; + end + else if (inst_movwf || inst_bcf || inst_bsf || inst_clrf) + begin + writew_node <= 0; + writeram_node <= 1; + end + else if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw || inst_clrw) + begin + writew_node <= 1; + writeram_node <= 0; + end + else if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_decfsz + || inst_incfsz || inst_comf) + begin + writew_node <= ~inst_reg[7]; // ("d" field of fetched instruction) + writeram_node <= inst_reg[7]; // ("d" field of fetched instruction) + end + else + begin + writew_node <= 0; + writeram_node <= 0; + end + + // 1-6. Interrupt request (see pp.17 of PIC16F84 data sheet) + int_node <= intcon_reg[7] // GIE + && ( + (intcon_reg[3] && intcon_reg[0]) // RBIE,RBIF + || (intcon_reg[4] && intcon_reg[1]) // INTE,INTF + || (intcon_reg[5] && intcon_reg[2]) // T0IE,T0IF + ); + + // 1-7. Reset conditions + wdt_rst_node <= wdt_full_sync_reg[1] && ~wdt_full_sync_reg[2]; // WDT + + // (all of reset triggers) + if (~poweron_sync_reg || ~mclr_sync_reg || wdt_rst_node) reset_cond <= 1; + else reset_cond <= 0; + + // 2. EFSM body + case (state_reg) + + // 2-1. Reset state (see pp.14 and pp.42 of PIC16F84 data sheet) + QRESET_PP : + begin + pc_reg <= 0; // 0 + status_reg[7:5] <= 3'b0; + pclath_reg <= 0; // 0 + intcon_reg[7:1] <= 7'b0; + option_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisa_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisb_reg <= -1; // Set to all ones, like vhdl (others => 1) + tmr0_reg <= 0; // (specification: don't care) + exec_op_reg <= 0; + intclr_reg <= -1; // clear int + intstart_reg <= 0; + writeram_reg <= 0; + sleepflag_reg <= 0; + + // (set /T0 and /PD properly; see pp.42 and pp.46 of data sheet) + if (~poweron_sync_reg) // Power-on Reset + begin + status_reg[4] <= 1; // /T0 = 1 + status_reg[3] <= 1; // /PD = 1 + stack_pnt_reg <= 0; // Reset stack pointer + end + else if (~mclr_sync_reg) // MCLR reset/MCLR wake up from sleep + begin + status_reg[4] <= 1; // /T0 = 1 + // /PD = 1 if normal reset, /PD = 0 if wake up + status_reg[3] <= ~sleepflag_reg; + end + else if (wdt_rst_node) // WDT reset/WDT wake up from sleep + begin + status_reg[4] <= 0; // /T0 = 0 + // /PD = 1 if normal reset, /PD = 0 if wake up + status_reg[3] <= ~sleepflag_reg; + end + + // go to Q1 state if reset signal is de-asserted + if (~reset_cond) state_reg <= Q1_PP; + + end // End of QRESET_PP state + + + // 2-2. Q1 cycle + Q1_PP : + begin + // 2-2-1. Clear external interrupt registers if GIE=0 + if (intcon_reg[7]) intclr_reg <= 0; + else intclr_reg <= 1; // clear interrupt + + // 2-2-2. Read I/O port + porta_i_sync_reg <= porta_io; + portb_i_sync_reg <= portb_io; + + // 2-2-3. Read RAM read address, if not stalled + if (exec_op_reg && ~intstart_reg) ram_adr_reg <= ram_adr_node; + + // 2-2-4. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + // 2-2-5. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else + // if in the sleep mode, wait until wake-up trigger comes + if (sleepflag_reg && ~intstart_reg) + begin + if (inte_sync_reg || rbint_sync_reg) + begin + // if PORT-B interrupts come, then resume execution + // otherwise, if WDT reset/MCLR reset comes, then goto QRESET_PP + sleepflag_reg <= 0; + state_reg <= Q2_PP; + end + end + // if not in sleep mode, or if stalled, continue execution + else state_reg <= Q2_PP; + end // End of Q1 state + + // 2-3. Q2 cycle + Q2_PP : + begin + // 2-3-1. Read data-RAM and substitute source values to alu-input regs + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-3-1-1. Set aluinp1 register (source #1) + if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_bcf + || inst_bsf || inst_btfsc || inst_btfss || inst_decfsz + || inst_incfsz || inst_comf) + + aluinp1_reg <= ram_i_node; // RAM/Special registers + else + if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw) + + aluinp1_reg <= inst_reg[7:0]; // Immediate value ("k") + else + if ( inst_clrf || inst_clrw) aluinp1_reg <= 0; // 0 + else aluinp1_reg <= w_reg; // W register + + // 2-3-1-2. Set aluinp2 register (source #2) + if (inst_decf || inst_decfsz) aluinp2_reg <= -1; // for decr. + else if (inst_incf || inst_incfsz) aluinp2_reg <= 1; // for incr. + // -1 * W register (for subtract) + else if (inst_sublw || inst_subwf) aluinp2_reg <= ~w_reg + 1; + // operation of BCF: AND with inverted mask ("1..101..1") + // mask for BCF: value of only one position is 0 + else if (inst_bcf) aluinp2_reg <= ~mask_node; + // operation of BSF: OR with mask_node ("0..010..0") + // operation of FSC and FSS: AND with mask_node, compare to 0 + else if (inst_btfsc || inst_btfss || inst_bsf) + aluinp2_reg <= mask_node; + else aluinp2_reg <= w_reg; // W register + + // 2-3-1-3. Set stack pointer register (pop stack) + if (inst_ret || inst_retlw || inst_retfie) + stack_pnt_reg <= stack_pnt_reg - 1; // cycles 3,2,1,0,7,6... + + // 2-3-1-4. Set ram_adr register (set RAM write address) + ram_adr_reg <= ram_adr_node; // RAM write address + end + + // 2-3-2. Change clock output + clk_o_reg <= 1; + + // 2-3-3. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + // 2-3-4. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q3_PP; + end // End of Q2 state + + // 2-4. Q3 cycle + Q3_PP : + begin + // 2-4-1. Calculation and store result into alu-output register + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-4-1-1. Set aluout register + // Rotate left + if (inst_rlf) + aluout_reg <= {aluinp1_reg[6:0],status_reg[0]}; + // Rotate right + else if (inst_rrf) + aluout_reg <= {status_reg[0],aluinp1_reg[7:1]}; + // Swap nibbles + else if (inst_swapf) + aluout_reg <= {aluinp1_reg[3:0],aluinp1_reg[7:4]}; + // Logical inversion + else if (inst_comf) + aluout_reg <= ~aluinp1_reg; + // Logical AND, bit clear/bit test + else if ( inst_andlw || inst_andwf || inst_bcf || inst_btfsc + || inst_btfss) + aluout_reg <= (aluinp1_reg & aluinp2_reg); + // Logical OR, bit set + else if (inst_bsf || inst_iorlw || inst_iorwf) + aluout_reg <= (aluinp1_reg | aluinp2_reg); + // Logical XOR + else if (inst_xorlw || inst_xorwf) + aluout_reg <= (aluinp1_reg ^ aluinp2_reg); + // Addition, Subtraction, Increment, Decrement + else if ( inst_addlw || inst_addwf || inst_sublw || inst_subwf + || inst_decf || inst_decfsz || inst_incf || inst_incfsz) + aluout_reg <= add_node[7:0]; + // Pass through + else aluout_reg <= aluinp1_reg; + + // 2-4-1-2. Set C flag and DC flag + if (inst_addlw || inst_addwf || inst_sublw || inst_subwf) + begin + status_reg[1] <= addlow_node[4]; // DC flag + status_reg[0] <= add_node[8]; // C flag + end + else if (inst_rlf) status_reg[0] <= aluinp1_reg[7]; // C flag + else if (inst_rrf) status_reg[0] <= aluinp1_reg[0]; // C flag + + // 2-4-1-3. Set data-SRAM write enable (hazard-free) + if (writeram_node && addr_sram) writeram_reg <= 1; + else writeram_reg <= 0; + + end + else writeram_reg <= 0; // If stalled + + // 2-4-2. Check external interrupt and set int. flag, Incr. TMR0 + if (~intstart_reg && intcon_reg[7]) // GIE + begin + // PORT-B0 INT + if (inte_sync_reg) + begin + intcon_reg[1] <= 1; // set INTF + intclr_reg[0] <= 1; // clear external int-registers + // (intrise_reg(0) and intdown_reg(0)) + end + // PORT-B[4-7] INT + if (rbint_sync_reg) + begin + intcon_reg[0] <= 1; // set RBIF + intclr_reg[4:1] <= -1; // clear external int-registers + // (intrise_reg(4-1) and intdown_reg(4-1)) + end + end + + // Increment TMR0 + if (inc_tmr_hold_reg || (inc_tmr_sync_reg == 2'b01)) // incr. trigger + begin + tmr0_reg <= tmr0_reg + 1; // increment + inc_tmr_hold_reg <= 0; + + // if ~intstart and GIE and T0IE and timer full, then set T0IF + if ( + ~intstart_reg + && intcon_reg[7] + && intcon_reg[5] + && (tmr0_reg == -1) + ) + intcon_reg[2] <= 1; // set T0IF + end + + // 2-4-3. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q4_PP; + + end // End of Q3 state + + + // 2-5. Q4 cycle + Q4_PP : + begin + // 2-5-1. Fetch next program-instruction + inst_reg <= prog_dat_i; + + if (~exec_op_reg && ~intstart_reg) // if STALLED + begin + pc_reg <= inc_pc_node; // increment PC + exec_op_reg <= 1; // end of stall + end + else // if NOT stalled + begin + // (note: if intstart_reg, only stack/pc-operations in this + // else-clause will be performed) + // 2-5-2. Store calculation result into destination, + // set PC and flags, and determine if execute next cycle. + + // 2-5-2-1. Set W register, if not in stall cycle + // (~intstart_reg) and destination is W + + // writew_node == 0 if intstart_reg... + if (writew_node) w_reg <= aluout_reg; // write W reg + + // 2-5-2-2. Set data RAM/special registers, + // if not in stall cycle (~intstart_reg) + if (writeram_node) + begin + if (addr_stat) + begin + status_reg[7:5] <= aluout_reg[7:5]; // write IRP,RP1,RP0 + // status(4),status(3)...unwritable, see below (/PD,/T0 part) + status_reg[1:0] <= aluout_reg[1:0]; // write DC,C + end + if (addr_fsr) fsr_reg <= aluout_reg; // write FSR + if (addr_porta) porta_o_reg <= aluout_reg[4:0]; // write PORT-A + if (addr_portb) portb_o_reg <= aluout_reg; // write PORT-B + if (addr_pclath) pclath_reg <= aluout_reg[4:0]; // write PCLATH + if (addr_intcon) intcon_reg[6:0] <= aluout_reg[6:0]; + // write INTCON (except GIE) + // intcon(7)...see below (GIE part) + if (addr_option) option_reg <= aluout_reg; // write OPTION + if (addr_trisa) trisa_reg <= aluout_reg[4:0]; // write TRISA + if (addr_trisb) trisb_reg <= aluout_reg; // write TRISB + if (addr_tmr0) tmr0_reg <= aluout_reg; // write TMR0 + end + + // 2-5-2-3. Set/clear Z flag, if not in stall cycle (~intstart_reg) + if (~intstart_reg) + begin + if (addr_stat) status_reg[2] <= aluout_reg[2]; // (dest. is Z flag) + else if ( inst_addlw || inst_addwf || inst_andlw || inst_andwf + || inst_clrf || inst_clrw || inst_comf || inst_decf + || inst_incf || inst_movf || inst_sublw || inst_subwf + || inst_xorlw || inst_xorwf || inst_iorlw || inst_iorwf ) + status_reg[2] <= aluout_zero_node; // Z=1 if result == 0 + end + + // 2-5-2-4. Set PC and determine whether to execute next cycle or not + // After interrupt-stall cycle ends, jump to interrupt vector + if (intstart_reg) + begin + pc_reg <= 4; // (interrupt vector) + exec_op_reg <= 0; // the next cycle is a stall cycle + end + else if (inst_ret || inst_retlw || inst_retfie) // "return" instr. + begin + pc_reg <= stack_reg[stack_pnt_reg]; + exec_op_reg <= 0; // the next cycle is stall cycle + end + else if (inst_goto || inst_call) // "goto/call" instructions + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= {pclath_reg[4:3],inst_reg[10:0]}; + exec_op_reg <= 0; + end + else if ( ( (inst_btfsc || inst_decfsz || inst_incfsz) + && aluout_zero_node) + || (inst_btfss && ~aluout_zero_node) + ) // bit_test instrcutions + begin + pc_reg <= inc_pc_node; + exec_op_reg <= 0; + // the next cycle is stall cycle, if test conditions are met. + end + else if (writeram_node && addr_pcl) // PCL is data-destination + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= pclath_reg[4:0] & aluout_reg; + exec_op_reg <= 0; + end + else + begin + // this check MUST be located AFTER the above if/else sentences + // check if interrupt trigger comes + if (~int_node) pc_reg <= inc_pc_node; + // if not, the next instr. fetch/exec. will be performed normally + else pc_reg <= pc_reg; + // if so, value of PC must be held + //(will be pushed onto stack at the end of next instruction cycle) + exec_op_reg <= 1; + end + + // 2-5-2-5. Push current PC value into stack, if necessary + if (inst_call || intstart_reg) + // CALL instr. or End of interrupt-stall cycle + begin + stack_reg[stack_pnt_reg] <= pc_reg; // write PC value + stack_pnt_reg <= stack_pnt_reg + 1; // increment stack pointer + end + + // 2-5-2-6. Set GIE bit in intcon register (intcon_reg(7)) + if (~intstart_reg) + begin + if (int_node) // interrupt trigger comes + begin + intcon_reg[7] <= 0; // clear GIE + intstart_reg <= 1; // the next cycle is interrupt-stall cycle + end + else if (inst_retfie) // "return from interrupt" instruction + begin + intcon_reg[7] <= 1; + intstart_reg <= 0; + end + else if (writeram_node && addr_intcon) // destination is GIE + begin + intcon_reg[7] <= aluout_reg[7]; + intstart_reg <= 0; + end + else intstart_reg <= 0; + end + else intstart_reg <= 0; + + // 2-5-2-7. Set/clear /PD and /TO flags + if (~intstart_reg && inst_sleep && ~wdt_rst_node ) + // SLEEP and no interrupt trigger + begin + sleepflag_reg <= 1; + status_reg[4:3] <= 2'b10; // SLEEP: /T0,/PD = 1,0 + end + else if (~intstart_reg && inst_clrwdt) + // CLRWDT + status_reg[4:3] <= 2'b11; // CLRWDT: /T0,/PD = 1,1 + + end // (if not stalled) + + // 2-5-3. Clear data-SRAM write enable (hazard-free) + writeram_reg <= 0; + + // 2-5-4. Change clock output + clk_o_reg <= 0; + + // 2-5-5. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + // 2-5-6. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q1_PP; + end // End of Q4 state + + // 2-6. Illegal states (NEVER REACHED in normal execution) + default : state_reg <= QRESET_PP; // goto reset state + endcase +end // End of process + + +// TMR0 pre-scaler (see pp.27 of PIC16F84 data sheet) +// select pre-scaler +assign ps_clk = option_reg[5]?(t0cki_i ^ option_reg[4]):clk_o_reg; +// option_reg(5):T0CS +// option_reg(4):T0SE + +// pre-scaler body +always @(posedge ps_clk or negedge pon_rst_n_i) +begin + if (~pon_rst_n_i) + begin + pscale_reg <= 0; + ps_full_reg <= 0; + end + else // Must be ps_clk rising edge... + begin + case (option_reg[2:0]) // select prescaler-full value by PS2-0 + 3'b000 : rateval <= 1; + 3'b001 : rateval <= 3; + 3'b010 : rateval <= 7; + 3'b011 : rateval <= 15; + 3'b100 : rateval <= 31; + 3'b101 : rateval <= 63; + 3'b110 : rateval <= 127; + 3'b111 : rateval <= 255; + default: rateval <= 1; + endcase + + if (pscale_reg >= rateval) + begin + pscale_reg <= 0; + ps_full_reg <= 1; + end + else + begin + pscale_reg <= pscale_reg + 1; + ps_full_reg <= 0; + end + end +end //process + +// select TMR0-increment trigger +assign inc_tmr_clk = option_reg[3]?ps_clk:ps_full_reg; +// option_reg(3):PSA +// ps_full_reg:output of pre-scaler + + +assign wdt_init = ~pon_rst_n_i || ~mclr_n_i; +// WDT timer body +always @(posedge wdt_clk_i or posedge wdt_init) +begin + if (wdt_init) // (async reset) + begin + wdt_reg <= 0; + wdt_full_reg <= 0; + wdt_clr_req_reg <= 2'b0; + wdt_fullclr_req_reg <= 2'b0; + end + else // Must be posedge wdt_clk_i at this point... + begin + // synchronizers + // WDT-clear request (CLRWDT/SLEEP instruction) + // (do not AND with sleepflag_reg, since WDT should be + // cleared at SLEEP instruction) + wdt_clr_req_reg[0] <= wdt_clr_reg; + wdt_clr_req_reg[1] <= wdt_clr_req_reg[0]; + // WDT-full-clear request (after WDT reset) + wdt_fullclr_req_reg[0] <= wdt_full_clr_reg && ~sleepflag_reg; + wdt_fullclr_req_reg[1] <= wdt_fullclr_req_reg[0]; + + // timer/full reg + if (wdt_reg >= WDT_SIZE_PP) wdt_full_node <= 1; // (intermediate node) + else wdt_full_node <= 0; // (intermediate node) + + // wdt_reg(counter) body + if ((wdt_clr_req_reg == 2'b01) || ~wdt_ena_i) wdt_reg <= 0; + else if (wdt_full_node) wdt_reg <= 0; + else wdt_reg <= wdt_reg + 1; + + // wdt_full_reg(interrupt trigger) body + if ((wdt_fullclr_req_reg == 2'b01) || ~wdt_ena_i) wdt_full_reg <= 0; + else if (wdt_full_node) wdt_full_reg <= 1; + end +end // process +assign wdt_clr_ack = wdt_clr_req_reg[1]; // WDT-clear ack signal to CPU +assign wdt_full_o = wdt_full_reg; // WDT-full int. trigger to CPU + + +// WDT controller in CPU-clock line +// (handshake-interface between WDT and CPU-EFSM) +always @(posedge clk_i) +begin + if (~poweron_sync_reg || ~mclr_sync_reg) + begin + wdt_clr_reg <= 0; // WDT clear request register + wdt_clr_reqhold_reg <= 0; // 1 when WDT clear request comes while another + // clear request is still being processed. + wdt_full_clr_reg <= 0; // WDT-full clear request register + end + else + begin + // WDT-clear/hold WDT-clear request + // (handshake) + if (wdt_clr_reg) // still processing clear-operation + // if ack comes, take down the clear request + if (wdt_clr_ack_sync_reg) wdt_clr_reg <= 0; + else if ( wdt_clr_reqhold_reg + || ( (state_reg == Q4_PP) + && exec_op_reg && ~intstart_reg + && (inst_clrwdt || inst_sleep)) ) // clear request comes + begin + if (~wdt_clr_ack_sync_reg) // confirm if ack is 0 + begin + wdt_clr_reg <= 1; + wdt_clr_reqhold_reg <= 0; + end + // (wait until ack becomes 0) +// else wdt_clr_reqhold_reg <= 1; NOTE: This line is "never reached!" + end + + // clear WDT-full (CPU reset request) + // (handshake) + if (wdt_full_clr_reg) wdt_full_clr_reg <= wdt_full_sync_reg[1]; + end +end // process + + +assign intclr0 = intclr_reg[0]; +assign intclr1 = intclr_reg[1]; +assign intclr2 = intclr_reg[2]; +assign intclr3 = intclr_reg[3]; +assign intclr4 = intclr_reg[4]; + +// Detect external interrupt requests +// INT0 I/F +always @(posedge int0_i or posedge intclr0) +begin + if (intclr0) intrise_reg[0] <= 0; + else intrise_reg[0] <= 1; // catch positive edge +end // process + +always @(negedge int0_i or posedge intclr0) +begin + if (intclr0) intdown_reg[0] <= 0; + else intdown_reg[0] <= 1; // catch negative edge +end // process +assign rb0_int = option_reg[6]?intrise_reg[0]:intdown_reg[0]; + +// INT4 I/F +always @(posedge int4_i or posedge intclr1) +begin + if (intclr1) intrise_reg[1] <= 0; + else intrise_reg[1] <= 1; // catch positive edge +end // process + +always @(negedge int4_i or posedge intclr1) +begin + if (intclr1) intdown_reg[1] <= 0; + else intdown_reg[1] <= 1; // catch negative edge +end // process +assign rb4_int = intrise_reg[1] || intdown_reg[1]; + +// INT5 I/F +always @(posedge int5_i or posedge intclr2) +begin + if (intclr2) intrise_reg[2] <= 0; + else intrise_reg[2] <= 1; // catch positive edge +end // process + +always @(negedge int5_i or posedge intclr2) +begin + if (intclr2) intdown_reg[2] <= 0; + else intdown_reg[2] <= 1; // catch negative edge +end // process +assign rb5_int = intrise_reg[2] || intdown_reg[2]; + +// INT6 I/F +always @(posedge int6_i or posedge intclr3) +begin + if (intclr3) intrise_reg[3] <= 0; + else intrise_reg[3] <= 1; // catch positive edge +end // process + +always @(negedge int7_i or posedge intclr3) +begin + if (intclr3) intdown_reg[3] <= 0; + else intdown_reg[3] <= 1; // catch negative edge +end // process +assign rb6_int = intrise_reg[3] || intdown_reg[3]; + +// INT7 I/F +always @(posedge int7_i or posedge intclr4) +begin + if (intclr4) intrise_reg[4] <= 0; + else intrise_reg[4] <= 1; // catch positive edge +end // process + +always @(negedge int7_i or posedge intclr4) +begin + if (intclr4) intdown_reg[4] <= 0; + else intdown_reg[4] <= 1; // catch negative edge +end // process +assign rb7_int = intrise_reg[4] || intdown_reg[4]; + + +// Decode INT triggers +// (do not AND with GIE(intcon_reg(7)), since these signals are +// also used for waking up from SLEEP) +assign inte = intcon_reg[4] && rb0_int; // G0IE and raw-trigger signal +assign rbint = intcon_reg[3] && (rb4_int || rb5_int || rb6_int || rb7_int); // RBIE and raw-trigger signal + +// Circuit's output signals +assign prog_adr_o = pc_reg; // program ROM address +assign ram_adr_o = ram_adr_reg; // data RAM address +assign ram_dat_o = aluout_reg; // data RAM write data +assign readram_o = (state_reg[1:0] == Q2_PP[1:0]); // data RAM read enable + //(1 when state_reg = Q2_PP) +assign writeram_o = writeram_reg; // data RAM write enable + +assign porta_io = bitwise_tristate(porta_o_reg, trisa_reg); // PORT-A +assign portb_io = bitwise_tristate(portb_o_reg, trisb_reg); // PORT-B +assign rbpu_o = option_reg[7]; // RBPU: pull-up enable + +assign clk_o = clk_o_reg; // clock (clk_i/4) output + +assign powerdown_o = sleepflag_reg; // CPU clock stop indicator +assign startclk_o = inte || rbint || wdt_full_reg + || ~mclr_n_i || ~pon_rst_n_i; + // CPU clock start indicator + + +endmodule + + +//`undef STATEBIT_SIZE \ No newline at end of file Index: web_uploads/b13c_environment.zip =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: web_uploads/b13c_environment.zip =================================================================== --- web_uploads/b13c_environment.zip (nonexistent) +++ web_uploads/b13c_environment.zip (revision 9)
web_uploads/b13c_environment.zip Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: web_uploads/download.shtml =================================================================== --- web_uploads/download.shtml (nonexistent) +++ web_uploads/download.shtml (revision 9) @@ -0,0 +1,27 @@ + + +Project: risc16f84

+Overview | +People | +Documentation | +Download | +OpenCores Mail list | +Contact me
+

Download

+

Allright, here are "the goods!"

+ +

Downloads:

+

+

risc16f84_clk2x.v. This file contains the stripped down 16f84 microcontroller: 1 interrupt input, no watch dog timer, no port A and B, plus the Auxiliary bus (which handles much more than Ports A and B), plus it runs at 2 clock cycles per instruction. +

risc16f84_small.v. This file contains the 16f84 Verilog code without EEPROM interface, with only a single interrupt input. +

risc16f84_lite.v. This file contains the 16f84 Verilog code without EEPROM interface. +

risc16f84.v. This file contains the full-blown 16f84 Verilog code. +

+

+b11_risc16f84_05_07_02.zip. +This file contains an example of the risc16f84_clk2x module in use. The top level module is "top.v" It uses tri-state buffers for data buses, except for the Xilinx DPRAM used to implement the 512 byte register file, which has separate data in and data out buses. There is support for hardware breakpoints, single stepping and resetting the processor through "rs232_syscon" commands given through a serial port (see opencores project at rs232_syscon).

+

This entire project fits into a Xilinx XC2S200 chip, taking up only about 950 slices or so, and all 14 of the DPRAM blocks (9 of the DPRAMS for a "pixel" memory for a 128 by 96 pixel display that I implemented with this project. You can remove these from the project, add new registers, create new peripherals -- whatever you like.) +

NOTE: In order to get these examples to work on your own board, you will need to generate a correct BAUD clock on your board -- see the file "serial.v" for details. Also, you will need some "level translating" circuit to change the LVTTL level signals coming out of the Xilinx chip into RS232 levels for connection to your computer's serial port. Be sure to re-assign the IO constraints to match the desired pinouts on your board, and add debug outputs if you like, so that you can view what is happening on a logic analyzer... Or, you could also simulate these modules! +

+ + Index: web_uploads/index.shtml =================================================================== --- web_uploads/index.shtml (nonexistent) +++ web_uploads/index.shtml (revision 9) @@ -0,0 +1,9 @@ + + +Project: risc16f84

+People | +Documentation | +Download | +OpenCores Mail list | +Contact me

Description

The risc16f84 project is intended to provide a small, easy to use microcontroller in Verilog. The original code was VHDL, but I have done a wonderful translation of it into good clean Verilog code. (Well, I think it is wonderful, anyway.) The VHDL code was called "CQPIC" and it was published in 1999 by Sumio Morioka of Japan, in the December 1999 issue of "Transistor Gijutsu Magazine." I did the translation by hand, and then tested the design in actual hardware by running C code on it, and looking for correct behavior. I realize that this is not 100% test coverage, but I have found and fixed several bugs by this method -- including an error in the carry bit logic of the original code! There are four separate versions of the microcontroller presented here. The "original" one is called "risc16f84.v" and it includes all the logic needed to implement the entire 16f84 chip functionality as published in the original article.

However, I have realized over time, that a person using a microcontroller inside of an FPGA does not have the same constraints (i.e. on port sizes, number of pins, multiple functions needed on each pin, etc.) as the original chip designers, and so I have taken liberty in the other three versions, to simplify the logic by removing items that may not be wanted inside of an FPGA or ASIC implementation. For example, there is a version called "risc16f84_lite.v" which has no interface for the EEPROM...

Another version, called "risc16f84_small.v" further eliminates the multiple interrupt sources present on the original chip (since in a PIC there is only one interrupt vector defined, so interrupt service routines must do some "checking" anyway to determine the source of an interrupt - why bother having separate inputs defined? Just make up your own interrupt structure and use it the way you like inside of your chip!)

Finally, the fourth version, called "risc16f84_clk2x.v" further removes the port A and port B interfaces, since you can create as many ports as you like inside of your own chip. Toward this end, "risc16f84_clk2x.v" also includes an "auxiliary" bus interface, allowing the microcontroller to access 64k bytes of registers, ports and hardware peripherals, all defined within their own address space -- not within the limited register space of the PIC microcontrollers. I have used it to address a screen with 12288 pixels, and each pixel has its own address. It is easy to define addresses for the auxiliary bus components in most PIC code generation tools, so this works out nicely.

The code is written in Verilog, and was sythesized into a Xilinx SpartanII XC2S200 chip. Debugging was done in actual hardware, with an HP16500 series logic analyzer, and there are no simulation testbenches for these modules.

+

The design team welcomes any kind of help and feedback on these cores. If you are interested in further development of this project, please contact us.


Current Status:

  • The "risc16f84_clk2x.v" core has been coded completely, synthesized and tested for correct operation (and debugged!) inside a Xilinx XC2S200 chip. The tools used for development were the Xilinx Foundation 3.1i (non-ISE) tools.
  • The original "risc16f84.v" supports execution with 4 clocks per instruction, as in PIC microcontrollers.
  • The "risc16f84_clk2x" version uses only 2 clocks per instruction.
  • The "risc16f84_clk2x.v" core was tested at 49.125 MHz (approx. 25 MIPS), and uses 321 Virtex slices.
  • Xilinx DPRAM blocks were used to implement the processor register space and program ROM. These RAMs are dual-ported, so I have mapped the other port into the "auxiliary bus" space.
  • Debugging is aided by the use of "rs232_syscon.v" which is a hardware "monitor" that allows read/write of addresses on the auxiliary bus.
  • Since the registers and all useful peripherals are present on the auxiliary bus, single stepping and hardware breakpoints are implemented through the rs232_syscon interface (a serial port connects to a terminal window.)
  • I have been downloading C code through the serial port, in the form of rs232_syscon write commands.
  • A PERL script transforms s-record files into rs232_syscon write commands.
  • The cores are parameterized.
  • The code has good comments.

Maintainer(s):

Mailing-list:

Index: web_uploads/risc16f84.v =================================================================== --- web_uploads/risc16f84.v (nonexistent) +++ web_uploads/risc16f84.v (revision 9) @@ -0,0 +1,1292 @@ +//--------------------------------------------------------------------------- +// RISC 16F84 core +// +// This file is part of the "risc_16F84" project. +// http://www.opencores.org/cores/risc_16F84 +// +// +// Description: See description below (which suffices for IP core +// specification document.) +// +// Copyright (C) 1999 Sumio Morioka (original VHDL design version) +// Copyright (C) 2001 John Clayton and OPENCORES.ORG (this Verilog version) +// +// NOTE: This source code is free for educational/hobby use only. It cannot +// be used for commercial purposes without the consent of Microchip +// Technology incorporated. +// +// This source file may be used and distributed without restriction provided +// that this copyright statement is not removed from the file and that any +// derivative work contains the original copyright notice and the associated +// disclaimer. +// +// This source file is free software; you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This source is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public +// License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with this source. +// If not, download it from http://www.opencores.org/lgpl.shtml +// +//--------------------------------------------------------------------------- +// +// Author: John Clayton +// Date : January 29, 2002 +// +// (NOTE: Date formatted as day/month/year.) +// Update: 29/01/02 copied this file from memory_sizer.v (pared down). +// Translated the module and signal declarations. +// Transformed the instruction wires to lowercase. +// Transformed the addressing wires to lowercase. +// Update: 31/01/02 Translated the instruction decoder. +// Update: 5/02/02 Determined that stack is simply a circular buffer of +// 8 locations, 13 bits per location. Started translating +// "main_efsm" process. Added all code from piccore.vhd +// into this file for eventual translation. Concluded that +// "stack_full_node" is not needed. +// Update: 6/02/02 Translated the "ram_i_node" if/else precedural assignment. +// Update: 7/02/02 Changed all := to <=, changed all '0' to 0 and '1' to 1. +// Replaced all " downto " with ":". +// Finished translating QRESET state. +// Update: 20/02/02 Replaced all instances of Qreset with QRESET_PP. Also +// replaced other state designations with their new names. +// Finished translating Q1, Q2 states. +// Update: 22/02/02 Translated section 2-4-1-1 (aluout register) +// Update: 27/02/02 Replaced all "or" with "||" in if statements +// Replaced all "and" with "&&" in if statements. +// Replaced all "not" with "~" in if statements. +// Finished translating Q3,Q4 states. +// Translated output signal assignments at end of code. +// Translated interrupt trigger processes. +// Update: 28/02/02 Finished translation of WDT and TMR0 prescaler. +// Trimmed line length to 80 characters throughout. +// Prepared to attempt initial syntax checking. +// Cleaned up some naming conventions, and verified that +// all I/O pins have _i or _o appended in the body of the +// code. +// Update: 03/04/02 Changed "progdata_i" to "prog_dat_i" Also changed +// "progadr_o" to "prog_adr_o" +// Update: 04/26/02 Fixed bug in aluout_reg logic, whereby the AND/OR type +// operations were coded with logical instead of bitwise +// operators. +// Update: 05/01/02 Fixed another bug -- the rrf and rlf instructions were +// coded incorrectly. +// Update: 05/05/02 Fixed another bug -- the carry bit was incorrect (the +// problem was discovered while performing SUBWF X,W where +// W contained 0 and X contained 1. (1-0). The logic for +// the carry bit appears to have been incorrect even in +// the original VHDL code by Sumio Morioka. +// Update: 10/30/02 Fixed syntax error pointed out by Cheol-Kyoo Lee, who got +// the source code from opencores.com. Removed semicolon +// from "endcase" statements. +// +// Description +//--------------------------------------------------------------------------- +// This logic module implements a small RISC microcontroller, with functions +// and instruction set very similar to those of the Microchip 16F84 chip. +// This work is a translation (from VHDL to Verilog) of the "CQPIC" design +// published in 1999 by Sumio Morioka of Japan, and published in the December +// 1999 issue of "Transistor Gijutsu Magazine." The translation was performed +// by John Clayton, without the use of any translation tools. +// +// Original version used as basis for translation: CQPIC version 1.00b +// (December 10, 2000) +//--------------------------------------------------------------------------- + +`define STATEBIT_SIZE 3 // Size of state machine register (bits) + + +module pic_16f84_core ( + prog_dat_i, // [13:0] ROM read data + prog_adr_o, // [12:0] ROM address + ram_dat_i, // [7:0] RAM read data + ram_dat_o, // [7:0] RAM write data + ram_adr_o, // [8:0] RAM address; ram_adr[8:7] indicates RAM-BANK + readram_o, // RAM read strobe (H active) + writeram_o, // RAM write strobe (H active) + existeeprom_i, // Set to 1 if EEPROM is implemented. + eep_dat_i, // [7:0] EEPROM read data + eep_dat_o, // [7:0] EEPROM write data + eep_adr_o, // [7:0] EEPROM address + rd_eep_req_o, // EEPROM read request (H active) + rd_eep_ack_i, // EEPROM read acknowledge (H active) + wr_eep_req_o, // EEPROM write request (H active) + wr_eep_ack_i, // EEPROM write acknowledge (H active) + porta_i, // [4:0] PORT-A input data + porta_o, // [4:0] PORT-A output data + porta_dir_o, // [4:0] TRISA: PORT-A signal dir. (H:in, L:out) + portb_i, // [7:0] PORT-B input data + portb_o, // [7:0] PORT-B output data + portb_dir_o, // [7:0] TRISB: PORT-B signal dir. (H:in, L:out) + rbpu_o, // PORT_B pull-up enable (usually not used) + int0_i, // PORT-B(0) INT + int4_i, // PORT-B(4) INT + int5_i, // PORT-B(5) INT + int6_i, // PORT-B(6) INT + int7_i, // PORT-B(7) INT + t0cki_i, // T0CKI (PORT-A(4)) + wdt_ena_i, // WDT enable (H active) + wdt_clk_i, // WDT clock + wdt_full_o, // WDT-full indicator (H active) + powerdown_o, // SLEEP-mode; if H, you can stop system clock clk_i + startclk_o, // WAKEUP; if H, turn on clk_i for leaving sleep-mode + pon_rst_n_i, // Power-on reset (L active) + mclr_n_i, // Normal reset (L active) + clk_i, // Clock input + clk_o // Clock output (clk_i/4) +); + + +// You can change the following parameters as you would like +parameter STACK_SIZE_PP = 8; // Size of PC stack +parameter LOG2_STACK_SIZE_PP = 3; // Log_2(stack_size) +parameter WDT_SIZE_PP = 255; // Size of watch dog timer (WDT) +parameter WDT_BITS_PP = 8; // Bits needed for watch dog timer (WDT) + +// State definitions for state machine, provided as parameters to allow +// for redefinition of state values by the instantiator if desired. +parameter QRESET_PP = 3'b100; // reset state +parameter Q1_PP = 3'b000; // state Q1 +parameter Q2_PP = 3'b001; // state Q2 +parameter Q3_PP = 3'b011; // state Q3 +parameter Q4_PP = 3'b010; // state Q4 + + +// I/O declarations + + // program ROM data bus/address bus +input [13:0] prog_dat_i; // ROM read data +output [12:0] prog_adr_o; // ROM address + + // data RAM data bus/address bus/control signals +input [7:0] ram_dat_i; // RAM read data +output [7:0] ram_dat_o; // RAM write data +output [8:0] ram_adr_o; // RAM address; ram_adr[8:7] indicates RAM-BANK +output readram_o; // RAM read strobe (H active) +output writeram_o; // RAM write strobe (H active) + + // EEPROM data bus/address bus +input existeeprom_i; // Set to 1 if EEPROM is implemented. +input [7:0] eep_dat_i; // EEPROM read data +output [7:0] eep_dat_o; // EEPROM write data +output [7:0] eep_adr_o; // EEPROM address +output rd_eep_req_o; // EEPROM read request (H active) +input rd_eep_ack_i; // EEPROM read acknowledge (H active) +output wr_eep_req_o; // EEPROM write request (H active) +input wr_eep_ack_i; // EEPROM write acknowledge (H active) + + // I/O ports +input [4:0] porta_i; // PORT-A input data +output [4:0] porta_o; // PORT-A output data +output [4:0] porta_dir_o; // TRISA: PORT-A signal dir. (H:input, L:output) +input [7:0] portb_i; // PORT-B input data +output [7:0] portb_o; // PORT-B output data +output [7:0] portb_dir_o; // TRISB: PORT-B signal dir. (H:input, L:output) +output rbpu_o; // PORT_B pull-up enable (usually not used) + + // PORT-B interrupt input +input int0_i; // PORT-B(0) INT +input int4_i; // PORT-B(4) INT +input int5_i; // PORT-B(5) INT +input int6_i; // PORT-B(6) INT +input int7_i; // PORT-B(7) INT + + // TMR0 Control +input t0cki_i; // T0CKI (PORT-A(4)) + + // Watch Dog Timer Control +input wdt_ena_i; // WDT enable (H active) +input wdt_clk_i; // WDT clock +output wdt_full_o; // WDT-full indicator (H active) + + // CPU clock stop/start indicators +output powerdown_o; // SLEEP-mode; if H, then you can + // stop the system clock clk_i +output startclk_o; // WAKEUP; if H, you should turn on + // clock clk_i for waking up from sleep-mode + // CPU reset +input pon_rst_n_i; // Power-on reset (LOW active) +input mclr_n_i; // Normal reset (LOW active) + + // CPU clock +input clk_i; // Clock input +output clk_o; // Clock output (clk_i/4) + + +// Internal signal declarations + + // User registers +reg [7:0] w_reg; // W +reg [7:0] tmr0_reg; // TMR0 +reg [12:0] pc_reg; // PCH/PCL +reg [7:0] status_reg; // STATUS +reg [7:0] fsr_reg; // FSR +reg [4:0] porta_i_sync_reg; // PORTA IN (synchronizer) +reg [4:0] porta_o_reg; // PORTA OUT +reg [7:0] portb_i_sync_reg; // PORTB IN (synchronizer) +reg [7:0] portb_o_reg; // PORTB OUT +reg [7:0] eep_dat_reg; // EEPROM DATA +reg [7:0] eep_adr_reg; // EEPROM ADDRESS +reg [4:0] pclath_reg; // PCLATH +reg [7:0] intcon_reg; // INTCON +reg [7:0] option_reg; // OPTION +reg [4:0] trisa_reg; // TRISA +reg [7:0] trisb_reg; // TRISB +reg [4:0] eecon1_reg; // EECON1 + + // Internal registers for controlling instruction execution +reg [13:0] inst_reg; // Hold fetched op-code/operand +reg [7:0] aluinp1_reg; // data source (1 of 2) +reg [7:0] aluinp2_reg; // data source (2 of 2) +reg c_in; // Used with ALU data sources. +reg [7:0] aluout_reg; // result of calculation +reg exec_op_reg; // if L (i.e. GOTO instruction etc), stall exec. +reg intstart_reg; // if H (i.e. interrupt), stall instr. exec. +reg sleepflag_reg; // if H, sleeping. + + // Stack + // stack (array of data-registers) +reg [12:0] stack_reg [STACK_SIZE_PP-1:0]; + // stack pointer (binary encoded) +reg [LOG2_STACK_SIZE_PP-1:0] stack_pnt_reg; + + // WDT register and its control +reg [WDT_BITS_PP-1:0] wdt_reg; // WDT counter +reg wdt_full_reg; // WDT->CPU; hold WDT-full signal until + // CPU is reset +reg wdt_full_node; +wire wdt_init; // Initialize the WDT +reg [2:0] wdt_full_sync_reg; // CPU; synchronizer for wdt_full_reg +reg wdt_clr_reg; // CPU->WDT; request to zero-clear wdt_reg +reg wdt_clr_reqhold_reg; // CPU; hold a clear-request if + // previous request is still processing +reg [1:0] wdt_clr_req_reg; // WDT; synchronizer for wdt_clr_reg +wire wdt_clr_ack; // WDT->CPU; ack to wdt_clr_reg + // (same with wdt_clr_req_reg(1)) +reg wdt_clr_ack_sync_reg; // CPU; synchronizer for wdt_clr_ack +reg wdt_full_clr_reg; // CPU->WDT; request to clear wdt_full_reg +reg [1:0] wdt_fullclr_req_reg; // WDT; synchronizer for wdt_full_clr_reg + + // TMR0 prescaler +wire ps_clk; // clock for prescaler +reg [7:0] pscale_reg; // prescaler (range 0 to 255) +reg ps_full_reg; // clock for TMR0, from prescaler +wire inc_tmr_clk; // clock for TMR0 +reg inc_tmr_hold_reg; // hold TMR0 increment request +reg [7:0] rateval; // Temporary storage value within process + + // Interrupt registers/nodes +reg [4:0] intrise_reg; // detect positive edge of PORT-B inputs +reg [4:0] intdown_reg; // detect negative edge of PORT-B inputs + // Interrupt triggers +wire rb0_int; +wire rb4_int; +wire rb5_int; +wire rb6_int; +wire rb7_int; + +wire rbint; // RB4-7 interrupt trigger +wire inte; // RB0 interrupt trigger +reg [4:0] intclr_reg; // CPU; clear intrise_reg and intdown_reg +wire intclr0; // Individual wires used in sensitivity lists +wire intclr1; // since "simple variables" are OK, +wire intclr2; // but apparently intclr_reg[0] is not a +wire intclr3; // "simple variable or its negation." +wire intclr4; + + // State register +reg [`STATEBIT_SIZE-1:0] state_reg; + + // Result of decoding instruction -- only 1 is active at a time +wire inst_addlw; +wire inst_addwf; +wire inst_andlw; +wire inst_andwf; +wire inst_bcf; +wire inst_bsf; +wire inst_btfsc; +wire inst_btfss; +wire inst_call; +wire inst_clrf; +wire inst_clrw; +wire inst_clrwdt; +wire inst_comf; +wire inst_decf; +wire inst_decfsz; +wire inst_goto; +wire inst_incf; +wire inst_incfsz; +wire inst_iorlw; +wire inst_iorwf; +wire inst_movlw; +wire inst_movf; +wire inst_movwf; +wire inst_retfie; +wire inst_retlw; +wire inst_ret; +wire inst_rlf; +wire inst_rrf; +wire inst_sleep; +wire inst_sublw; +wire inst_subwf; +wire inst_swapf; +wire inst_xorlw; +wire inst_xorwf; + + // Result of calculating RAM access address +wire [8:0] ram_adr_node; // RAM access address + + // These wires indicate accesses to special registers... + // Only 1 is active at a time. +wire addr_tmr0; +wire addr_pcl; +wire addr_stat; +wire addr_fsr; +wire addr_porta; +wire addr_portb; +wire addr_eep_dat; +wire addr_eep_adr; +wire addr_pclath; +wire addr_intcon; +wire addr_option; +wire addr_trisa; +wire addr_trisb; +wire addr_eecon1; +wire addr_eecon2; +wire addr_sram; + + // Other output registers (for removing hazards) +reg writeram_reg; // data-sram write strobe +reg [8:0] ram_adr_reg; // data-sram address +reg clk_o_reg; // clock output + + // Synchronizers +reg inte_sync_reg; +reg rbint_sync_reg; +reg [1:0] inc_tmr_sync_reg; +reg rd_eep_sync_reg; +reg wr_eep_sync_reg; +reg mclr_sync_reg; +reg poweron_sync_reg; + + // Signals used in "main_efsm" procedure + // (Intermediate nodes used for resource sharing.) +reg [7:0] ram_i_node; // result of reading RAM/Special registers +reg [12:0] inc_pc_node; // value of PC + 1 +wire [7:0] mask_node; // bit mask for logical operations +reg [8:0] add_node; // result of 8bit addition +reg [4:0] addlow_node; // result of low-4bit addition +wire temp; // Placeholder wire +wire dtemp; // Placeholder wire +reg aluout_zero_node; // H if ALUOUT = 0 +reg writew_node; // H if destination is W register +reg writeram_node; // H if destination is RAM/Special registers +reg int_node; // H if interrupt request comes +reg wdt_rst_node; // H if WDT-reset request comes +reg reset_cond; // H for any reset request (jump to QRESET_PP state) + +//-------------------------------------------------------------------------- +// Instantiations +//-------------------------------------------------------------------------- + + +//-------------------------------------------------------------------------- +// Functions & Tasks +//-------------------------------------------------------------------------- + +//-------------------------------------------------------------------------- +// Module code +//-------------------------------------------------------------------------- + + +// CPU synchronizers +always @(posedge clk_i) +begin + inte_sync_reg <= inte; + rbint_sync_reg <= rbint; + wdt_clr_ack_sync_reg <= wdt_clr_ack; + mclr_sync_reg <= mclr_n_i; + poweron_sync_reg <= pon_rst_n_i; + rd_eep_sync_reg <= rd_eep_ack_i; + wr_eep_sync_reg <= wr_eep_ack_i; + inc_tmr_sync_reg[0] <= inc_tmr_clk; + inc_tmr_sync_reg[1] <= inc_tmr_sync_reg[0]; + if (~poweron_sync_reg || ~mclr_sync_reg) + wdt_full_sync_reg <= 3'b0; + else + begin + wdt_full_sync_reg[0] <= wdt_full_reg; + wdt_full_sync_reg[1] <= wdt_full_sync_reg[0]; // (remove meta-stability) + wdt_full_sync_reg[2] <= wdt_full_sync_reg[1]; // (detect positive edge) + end +end + + +// Decode OPcode (see pp.54 of PIC16F84 data sheet) +// only 1 signal of the following signals will be '1' +assign inst_call = (inst_reg[13:11] == 3'b100 ); +assign inst_goto = (inst_reg[13:11] == 3'b101 ); +assign inst_bcf = (inst_reg[13:10] == 4'b0100 ); +assign inst_bsf = (inst_reg[13:10] == 4'b0101 ); +assign inst_btfsc = (inst_reg[13:10] == 4'b0110 ); +assign inst_btfss = (inst_reg[13:10] == 4'b0111 ); +assign inst_movlw = (inst_reg[13:10] == 4'b1100 ); +assign inst_retlw = (inst_reg[13:10] == 4'b1101 ); +assign inst_sublw = (inst_reg[13:9] == 5'b11110 ); +assign inst_addlw = (inst_reg[13:9] == 5'b11111 ); +assign inst_iorlw = (inst_reg[13:8] == 6'b111000 ); +assign inst_andlw = (inst_reg[13:8] == 6'b111001 ); +assign inst_xorlw = (inst_reg[13:8] == 6'b111010 ); +assign inst_subwf = (inst_reg[13:8] == 6'b000010 ); +assign inst_decf = (inst_reg[13:8] == 6'b000011 ); +assign inst_iorwf = (inst_reg[13:8] == 6'b000100 ); +assign inst_andwf = (inst_reg[13:8] == 6'b000101 ); +assign inst_xorwf = (inst_reg[13:8] == 6'b000110 ); +assign inst_addwf = (inst_reg[13:8] == 6'b000111 ); +assign inst_movf = (inst_reg[13:8] == 6'b001000 ); +assign inst_comf = (inst_reg[13:8] == 6'b001001 ); +assign inst_incf = (inst_reg[13:8] == 6'b001010 ); +assign inst_decfsz = (inst_reg[13:8] == 6'b001011 ); +assign inst_rrf = (inst_reg[13:8] == 6'b001100 ); +assign inst_rlf = (inst_reg[13:8] == 6'b001101 ); +assign inst_swapf = (inst_reg[13:8] == 6'b001110 ); +assign inst_incfsz = (inst_reg[13:8] == 6'b001111 ); +assign inst_movwf = (inst_reg[13:7] == 7'b0000001 ); +assign inst_clrw = (inst_reg[13:7] == 7'b0000010 ); +assign inst_clrf = (inst_reg[13:7] == 7'b0000011 ); +assign inst_ret = (inst_reg[13:0] == 14'b00000000001000); +assign inst_retfie = (inst_reg[13:0] == 14'b00000000001001); +assign inst_sleep = (inst_reg[13:0] == 14'b00000001100011); +assign inst_clrwdt = (inst_reg[13:0] == 14'b00000001100100); + + +// Calculate RAM access address (see pp.19 of PIC16F84 data sheet) + + // if "d"=0, indirect addressing is used, so RAM address is BANK+FSR + // otherwise, RAM address is BANK+"d" + // (see pp.19 of PIC16F84 data sheet) +assign ram_adr_node = (inst_reg[6:0]==0)?{status_reg[7],fsr_reg[7:0]}: + {status_reg[6:5],inst_reg[6:0]}; + + // check if this is an access to external RAM or not +assign addr_sram = (ram_adr_node[6:0] > 7'b0001011); //0CH-7FH,8CH-FFH + + // check if this is an access to special register or not + // only 1 signal of the following signals will be '1' +assign addr_tmr0 = (ram_adr_node[7:0] == 8'b00000001); // 01H +assign addr_pcl = (ram_adr_node[6:0] == 7'b0000010); // 02H, 82H +assign addr_stat = (ram_adr_node[6:0] == 7'b0000011); // 03H, 83H +assign addr_fsr = (ram_adr_node[6:0] == 7'b0000100); // 04H, 84H +assign addr_porta = (ram_adr_node[7:0] == 8'b00000101); // 05H +assign addr_portb = (ram_adr_node[7:0] == 8'b00000110); // 06H +assign addr_eep_dat = (ram_adr_node[7:0] == 8'b00001000); // 08H +assign addr_eep_adr = (ram_adr_node[7:0] == 8'b00001001); // 09H +assign addr_pclath = (ram_adr_node[6:0] == 7'b0001010); // 0AH, 8AH +assign addr_intcon = (ram_adr_node[6:0] == 7'b0001011); // 0BH, 8BH +assign addr_option = (ram_adr_node[7:0] == 8'b10000001); // 81H +assign addr_trisa = (ram_adr_node[7:0] == 8'b10000101); // 85H +assign addr_trisb = (ram_adr_node[7:0] == 8'b10000110); // 86H +assign addr_eecon1 = (ram_adr_node[7:0] == 8'b10001000); // 88H +assign addr_eecon2 = (ram_adr_node[7:0] == 8'b10001001); // 89H + +// construct bit-mask for logical operations and bit tests +assign mask_node = 1 << inst_reg[9:7]; + +// MAIN EFSM: description of register value changes in each clock cycle +always @(posedge clk_i) +begin + // 1. Intermediate nodes for resource sharing + + // This is a long if/else chain. Consider pulling in the decoded signals + // addr_tmr0 etc., and using a case statement instead? + // 1-1. Reading RAM/data sources (see pp.13 of PIC16F84 data sheet) + if (addr_sram) ram_i_node <= ram_dat_i; // data from ext. SRAM + else if (addr_eep_dat) ram_i_node <= eep_dat_reg; // data from ext. PROM + else if (addr_tmr0) ram_i_node <= tmr0_reg; // data from tmr0 + else if (addr_pcl) ram_i_node <= pc_reg[7:0]; // data from pcl + else if (addr_stat) ram_i_node <= status_reg; // data from status + else if (addr_fsr) ram_i_node <= fsr_reg; // data from fsr + else if (addr_porta) + begin + // Logic implements a 2:1 mux for each bit [4:0] of ram_i_node + ram_i_node[4:0] <= ( + (~trisa_reg[4:0] & porta_o_reg[4:0]) + || ( trisa_reg[4:0] & porta_i_sync_reg[4:0]) + ); + ram_i_node[7:5] <= 3'b0; + end + else if (addr_portb) + begin + // Logic implements a 2:1 mux for each bit [7:0] of ram_i_node + ram_i_node[7:0] <= ( + (~trisb_reg[7:0] & portb_o_reg[7:0]) + || ( trisb_reg[7:0] & portb_i_sync_reg[7:0]) + ); + end + else if (addr_eep_adr) ram_i_node <= eep_adr_reg; // from eeprom + else if (addr_pclath) ram_i_node <= {3'b0,pclath_reg}; // pclath (5bit) + else if (addr_intcon) ram_i_node <= intcon_reg; // data from intcon + else if (addr_option) ram_i_node <= option_reg; // data from option + else if (addr_trisa) ram_i_node <= {3'b0,trisa_reg}; // trisa (5bit) + else if (addr_trisb) ram_i_node <= trisb_reg; // data from trisb + else if (addr_eecon1) ram_i_node <= {3'b0,eecon1_reg}; // eecon1 (5bit) + else ram_i_node <= 0; + + + // 1-2. PC + 1 + inc_pc_node <= pc_reg + 1; + + + // 1-3. Adder (ALU) + // full 8bit-addition, with carry in/out. + {add_node,temp} <= {1'b0,aluinp1_reg,1'b1} + + {1'b0,aluinp2_reg,c_in}; + // lower 4bit-addition + {addlow_node,dtemp} <= {1'b0,aluinp1_reg[3:0],1'b1} + + {1'b0,aluinp2_reg[3:0],c_in}; + + // 1-4. Test if aluout = 0 + aluout_zero_node <= (aluout_reg == 0)?1:0; + + // 1-5. Determine destination + if (intstart_reg) + begin + writew_node <= 0; + writeram_node <= 0; + end + else if (inst_movwf || inst_bcf || inst_bsf || inst_clrf) + begin + writew_node <= 0; + writeram_node <= 1; + end + else if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw || inst_clrw) + begin + writew_node <= 1; + writeram_node <= 0; + end + else if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_decfsz + || inst_incfsz || inst_comf) + begin + writew_node <= ~inst_reg[7]; // ("d" field of fetched instruction) + writeram_node <= inst_reg[7]; // ("d" field of fetched instruction) + end + else + begin + writew_node <= 0; + writeram_node <= 0; + end + + // 1-6. Interrupt request (see pp.17 of PIC16F84 data sheet) + int_node <= intcon_reg[7] // GIE + && ( + (intcon_reg[3] && intcon_reg[0]) // RBIE,RBIF + || (intcon_reg[4] && intcon_reg[1]) // INTE,INTF + || (intcon_reg[5] && intcon_reg[2]) // T0IE,T0IF + || (intcon_reg[6] && eecon1_reg[4]) // EEIE,EEIF(EECON1) + ); + + // 1-7. Reset conditions + wdt_rst_node <= wdt_full_sync_reg[1] && ~wdt_full_sync_reg[2]; // WDT + + // (all of reset triggers) + if (~poweron_sync_reg || ~mclr_sync_reg || wdt_rst_node) reset_cond <= 1; + else reset_cond <= 0; + + // 2. EFSM body + case (state_reg) + + // 2-1. Reset state (see pp.14 and pp.42 of PIC16F84 data sheet) + QRESET_PP : + begin + pc_reg <= 0; // 0 + status_reg[7:5] <= 3'b0; + pclath_reg <= 0; // 0 + intcon_reg[7:1] <= 7'b0; + option_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisa_reg <= -1; // Set to all ones, like vhdl (others => 1) + trisb_reg <= -1; // Set to all ones, like vhdl (others => 1) + tmr0_reg <= 0; // (specification: don't care) + exec_op_reg <= 0; + intclr_reg <= -1; // clear int + intstart_reg <= 0; + writeram_reg <= 0; + sleepflag_reg <= 0; + + // (set /T0 and /PD properly; see pp.42 and pp.46 of data sheet) + // NOTE: Do NOT clear stack pointer for MCLR reset or WDT reset + if (~poweron_sync_reg) // Power-on Reset + begin + status_reg[4] <= 1; // /T0 = 1 + status_reg[3] <= 1; // /PD = 1 + stack_pnt_reg <= 0; // Reset stack pointer + end + else if (~mclr_sync_reg) // MCLR reset/MCLR wake up from sleep + begin + status_reg[4] <= 1; // /T0 = 1 + // /PD = 1 if normal reset, /PD = 0 if wake up + status_reg[3] <= ~sleepflag_reg; + end + else if (wdt_rst_node) // WDT reset/WDT wake up from sleep + begin + status_reg[4] <= 0; // /T0 = 0 + // /PD = 1 if normal reset, /PD = 0 if wake up + status_reg[3] <= ~sleepflag_reg; + end + + // Most bits of eecon1 are set to zero. + eecon1_reg[4] <= 0; + eecon1_reg[2:0] <= 3'b0; + // Except... + // (set WRERR bit in EECON1 properly; + // see pp.33 and pp.34 of data sheet) + if (~poweron_sync_reg) eecon1_reg[3] <= 0; // clear WRERR + else eecon1_reg[3] <= eecon1_reg[1]; // substitute WR into WRERR + + // go to Q1 state if reset signal is de-asserted + if (~reset_cond) state_reg <= Q1_PP; + + end // End of QRESET_PP state + + + // 2-2. Q1 cycle + Q1_PP : + begin + // 2-2-1. Clear external interrupt registers if GIE=0 + if (intcon_reg[7]) intclr_reg <= 0; + else intclr_reg <= 1; // clear interrupt + + // 2-2-2. Read I/O port + porta_i_sync_reg <= porta_i; + portb_i_sync_reg <= portb_i; + + // 2-2-3. Read/Write EEPROM, if necessary + if (~intstart_reg) + begin + if (eecon1_reg[0] && rd_eep_sync_reg) // EEPROM read complete + begin + eep_dat_reg <= eep_dat_i; + eecon1_reg[0] <= 0; // clear EECON1_RD + end + if (eecon1_reg[1] && wr_eep_sync_reg) // writing EEPROM complete + begin + if (intcon_reg[7] && intcon_reg[6]) + eecon1_reg[4] <= 1; // INT (EE write complete) + eecon1_reg[1] <= 0; // clear EECON1_WR + end + if (exec_op_reg) ram_adr_reg <= ram_adr_node; // RAM read address + end + + // 2-2-4. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + + // 2-2-5. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else + // if in the sleep mode, wait until wake-up trigger comes + if (sleepflag_reg && ~intstart_reg) + begin + if (inte_sync_reg || rbint_sync_reg) + begin + // if PORT-B interrupts come, then resume execution + // otherwise, if WDT reset/MCLR reset comes, then goto QRESET_PP + sleepflag_reg <= 0; + state_reg <= Q2_PP; + end + end + // if not in sleep mode, or if stalled, continue execution + else state_reg <= Q2_PP; + + end // End of Q1 state + + // 2-3. Q2 cycle + Q2_PP : + begin + // 2-3-1. Read data-RAM and substitute source values to alu-input regs + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-3-1-1. Set aluinp1 register (source #1) + if ( inst_movf || inst_swapf || inst_addwf || inst_subwf + || inst_andwf || inst_iorwf || inst_xorwf || inst_decf + || inst_incf || inst_rlf || inst_rrf || inst_bcf + || inst_bsf || inst_btfsc || inst_btfss || inst_decfsz + || inst_incfsz || inst_comf) + + aluinp1_reg <= ram_i_node; // RAM/Special registers + else + if ( inst_movlw || inst_addlw || inst_sublw || inst_andlw + || inst_iorlw || inst_xorlw || inst_retlw) + + aluinp1_reg <= inst_reg[7:0]; // Immediate value ("k") + else + if ( inst_clrf || inst_clrw) aluinp1_reg <= 0; // 0 + else aluinp1_reg <= w_reg; // W register + + // 2-3-1-2. Set aluinp2 register (source #2) + if (inst_decf || inst_decfsz) aluinp2_reg <= -1; // for decr. + else if (inst_incf || inst_incfsz) aluinp2_reg <= 1; // for incr. + // -1 * W register (for subtract) + else if (inst_sublw || inst_subwf) aluinp2_reg <= ~w_reg + 1; + // operation of BCF: AND with inverted mask ("1..101..1") + // mask for BCF: value of only one position is 0 + else if (inst_bcf) aluinp2_reg <= ~mask_node; + // operation of BSF: OR with mask_node ("0..010..0") + // operation of FSC and FSS: AND with mask_node, compare to 0 + else if (inst_btfsc || inst_btfss || inst_bsf) + aluinp2_reg <= mask_node; + else aluinp2_reg <= w_reg; // W register + + // 2-3-1-3. Set stack pointer register (pop stack) + if (inst_ret || inst_retlw || inst_retfie) + stack_pnt_reg <= stack_pnt_reg - 1; // cycles 3,2,1,0,7,6... + + // 2-3-1-4. Set ram_adr register (set RAM write address) + ram_adr_reg <= ram_adr_node; // RAM write address + end + + // 2-3-2. Change clock output + clk_o_reg <= 1; + + // 2-3-3. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + // 2-3-4. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q3_PP; + end // End of Q2 state + + // 2-4. Q3 cycle + Q3_PP : + begin + // 2-4-1. Calculation and store result into alu-output register + if (exec_op_reg && ~intstart_reg) // if NOT STALLED + begin + // 2-4-1-1. Set aluout register + // Rotate left + if (inst_rlf) + aluout_reg <= {aluinp1_reg[6:0],status_reg[0]}; + // Rotate right + else if (inst_rrf) + aluout_reg <= {status_reg[0],aluinp1_reg[7:1]}; + // Swap nibbles + else if (inst_swapf) + aluout_reg <= {aluinp1_reg[3:0],aluinp1_reg[7:4]}; + // Logical inversion + else if (inst_comf) + aluout_reg <= ~aluinp1_reg; + // Logical AND, bit clear/bit test + else if ( inst_andlw || inst_andwf || inst_bcf || inst_btfsc + || inst_btfss) + aluout_reg <= (aluinp1_reg & aluinp2_reg); + // Logical OR, bit set + else if (inst_bsf || inst_iorlw || inst_iorwf) + aluout_reg <= (aluinp1_reg | aluinp2_reg); + // Logical XOR + else if (inst_xorlw || inst_xorwf) + aluout_reg <= (aluinp1_reg ^ aluinp2_reg); + // Addition, Subtraction, Increment, Decrement + else if ( inst_addlw || inst_addwf || inst_sublw || inst_subwf + || inst_decf || inst_decfsz || inst_incf || inst_incfsz) + aluout_reg <= add_node[7:0]; + // Pass through + else aluout_reg <= aluinp1_reg; + + // 2-4-1-2. Set C flag and DC flag + if (inst_addlw || inst_addwf || inst_sublw || inst_subwf) + begin + status_reg[1] <= addlow_node[4]; // DC flag + status_reg[0] <= add_node[8]; // C flag + end + else if (inst_rlf) status_reg[0] <= aluinp1_reg[7]; // C flag + else if (inst_rrf) status_reg[0] <= aluinp1_reg[0]; // C flag + + // 2-4-1-3. Set data-SRAM write enable (hazard-free) + if (writeram_node && addr_sram) writeram_reg <= 1; + else writeram_reg <= 0; + + end + else writeram_reg <= 0; // If stalled + + // 2-4-2. Check external interrupt and set int. flag, Incr. TMR0 + if (~intstart_reg && intcon_reg[7]) // GIE + begin + // PORT-B0 INT + if (inte_sync_reg) + begin + intcon_reg[1] <= 1; // set INTF + intclr_reg[0] <= 1; // clear external int-registers + // (intrise_reg(0) and intdown_reg(0)) + end + // PORT-B[4-7] INT + if (rbint_sync_reg) + begin + intcon_reg[0] <= 1; // set RBIF + intclr_reg[4:1] <= -1; // clear external int-registers + // (intrise_reg(4-1) and intdown_reg(4-1)) + end + end + + // Increment TMR0 + if (inc_tmr_hold_reg || (inc_tmr_sync_reg == 2'b01)) // incr. trigger + begin + tmr0_reg <= tmr0_reg + 1; // increment + inc_tmr_hold_reg <= 0; + + // if ~intstart and GIE and T0IE and timer full, then set T0IF + if ( + ~intstart_reg + && intcon_reg[7] + && intcon_reg[5] + && (tmr0_reg == -1) + ) + intcon_reg[2] <= 1; // set T0IF + end + + // 2-4-3. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q4_PP; + + end // End of Q3 state + + + // 2-5. Q4 cycle + Q4_PP : + begin + // 2-5-1. Fetch next program-instruction + inst_reg <= prog_dat_i; + + if (~exec_op_reg && ~intstart_reg) // if STALLED + begin + pc_reg <= inc_pc_node; // increment PC + exec_op_reg <= 1; // end of stall + end + else // if NOT stalled + begin + // (note: if intstart_reg, only stack/pc-operations in this + // else-clause will be performed) + // 2-5-2. Store calculation result into distination, + // set PC and flags, and determine if execute next cycle. + + // 2-5-2-1. Set W register, if not in stall cycle + // (~intstart_reg) and distination is W + + // writew_node == 0 if intstart_reg... + if (writew_node) w_reg <= aluout_reg; // write W reg + + // 2-5-2-2. Set data RAM/special registers, + // if not in stall cycle (~intstart_reg) + if (writeram_node) + begin + if (addr_stat) + begin + status_reg[7:5] <= aluout_reg[7:5]; // write IRP,RP1,RP0 + // status(4),status(3)...unwritable, see below (/PD,/T0 part) + status_reg[1:0] <= aluout_reg[1:0]; // write DC,C + end + if (addr_fsr) fsr_reg <= aluout_reg; // write FSR + if (addr_porta) porta_o_reg <= aluout_reg[4:0]; // write PORT-A + if (addr_portb) portb_o_reg <= aluout_reg; // write PORT-B + if (addr_eep_dat) eep_dat_reg <= aluout_reg; // write EEDATA + if (addr_eep_adr) eep_adr_reg <= aluout_reg; // write EEADR + if (addr_pclath) pclath_reg <= aluout_reg[4:0]; // write PCLATH + if (addr_intcon) intcon_reg[6:0] <= aluout_reg[6:0]; + // write INTCON (except GIE) + // intcon(7)...see below (GIE part) + if (addr_option) option_reg <= aluout_reg; // write OPTION + if (addr_trisa) trisa_reg <= aluout_reg[4:0]; // write TRISA + if (addr_trisb) trisb_reg <= aluout_reg; // write TRISB + if (addr_tmr0) tmr0_reg <= aluout_reg; // write TMR0 + if (addr_eecon1) // write EECON1 + begin + eecon1_reg[4:3] <= aluout_reg[4:3]; + eecon1_reg[2] <= aluout_reg[2] && existeeprom_i; + // (WREN can be set only when EEPROM exists) + if (aluout_reg[2:0] == 3'b110) eecon1_reg[1] <= 1; + // WR: only SET-operation is allowed to user + // if write enabled, write bit, and no current read + if (aluout_reg[1:0] == 2'b01) eecon1_reg[0] <= 1; + // RD: only SET-operation is allowed to user + // if no current write, and read bit + end + end + + // 2-5-2-3. Set/clear Z flag, if not in stall cycle (~intstart_reg) + if (~intstart_reg) + begin + if (addr_stat) status_reg[2] <= aluout_reg[2]; // (dest. is Z flag) + else if ( inst_addlw || inst_addwf || inst_andlw || inst_andwf + || inst_clrf || inst_clrw || inst_comf || inst_decf + || inst_incf || inst_movf || inst_sublw || inst_subwf + || inst_xorlw || inst_xorwf) + status_reg[2] <= aluout_zero_node; // Z=1 if result == 0 + else if (inst_iorlw || inst_iorwf) + // SELECT ONE OF THE FOLLOWING TWO SENTENCES + // IORLW or IORWF instructions: + status_reg[2] <= ~aluout_zero_node; + // Z=1 if result != 0 (PIC16F84 data sheet pp.61-62) + // status_reg[2] <= aluout_zero_node; + // Z=1 if result == 0 (same as the other instructions) + end + + // 2-5-2-4. Set PC and determine whether to execute next cycle or not + // After interrupt-stall cycle ends, jump to interrupt vector + if (intstart_reg) + begin + pc_reg <= 4; // (interrupt vector) + exec_op_reg <= 0; // the next cycle is a stall cycle + end + else if (inst_ret || inst_retlw || inst_retfie) // "return" instr. + begin + pc_reg <= stack_reg[stack_pnt_reg]; + exec_op_reg <= 0; // the next cycle is stall cycle + end + else if (inst_goto || inst_call) // "goto/call" instructions + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= {pclath_reg[4:3],inst_reg[10:0]}; + exec_op_reg <= 0; + end + else if ( ( (inst_btfsc || inst_decfsz || inst_incfsz) + && aluout_zero_node) + || (inst_btfss && ~aluout_zero_node) + ) // bit_test instrcutions + begin + pc_reg <= inc_pc_node; + exec_op_reg <= 0; + // the next cycle is stall cycle, if test conditions are met. + end + else if (writeram_node && addr_pcl) // PCL is data-destination + begin + // (see pp.18 of PIC16F84 data sheet) + pc_reg <= pclath_reg[4:0] & aluout_reg; + exec_op_reg <= 0; + end + else + begin + // this check MUST be located AFTER the above if/else sentences + // check if interrupt trigger comes + if (~int_node) pc_reg <= inc_pc_node; + // if not, the next instr. fetch/exec. will be performed normally + else pc_reg <= pc_reg; + // if so, value of PC must be held + //(will be pushed onto stack at the end of next instruction cycle) + exec_op_reg <= 1; + end + + // 2-5-2-5. Push current PC value into stack, if necessary + if (inst_call || intstart_reg) + // CALL instr. or End of interrupt-stall cycle + begin + stack_reg[stack_pnt_reg] <= pc_reg; // write PC value + stack_pnt_reg <= stack_pnt_reg + 1; // increment stack pointer + end + + // 2-5-2-6. Set GIE bit in intcon register (intcon_reg(7)) + if (~intstart_reg) + begin + if (int_node) // interrupt trigger comes + begin + intcon_reg[7] <= 0; // clear GIE + intstart_reg <= 1; // the next cycle is interrupt-stall cycle + end + else if (inst_retfie) // "return from interrupt" instruction + begin + intcon_reg[7] <= 1; + intstart_reg <= 0; + end + else if (writeram_node && addr_intcon) // destination is GIE + begin + intcon_reg[7] <= aluout_reg[7]; + intstart_reg <= 0; + end + else intstart_reg <= 0; + end + else intstart_reg <= 0; + + // 2-5-2-7. Set/clear /PD and /TO flags + if (~intstart_reg) + if ( inst_clrwdt + || (inst_sleep && (~wdt_rst_node && ~intstart_reg)) ) + // CLRWDT or (SLEEP and no interrupt trigger) + // see pp.46,58 and 66 of PIC16F84 data-sheet + if (inst_sleep) + begin + sleepflag_reg <= 1; + status_reg[4:3] <= 2'b10; // SLEEP: /T0,/PD = 1,0 + end + else status_reg[4:3] <= 2'b11; // CLRWDT: /T0,/PD = 1,1 + + end // (if not stalled) + + // 2-5-3. Clear data-SRAM write enable (hazard-free) + writeram_reg <= 0; + + // 2-5-4. Change clock output + clk_o_reg <= 0; + + // 2-5-5. Check increment-TMR0 request + if (inc_tmr_sync_reg == 2'b01) inc_tmr_hold_reg <= 1; + + // 2-5-6. Goto next cycle + if (reset_cond) state_reg <= QRESET_PP; + else state_reg <= Q1_PP; + end // End of Q4 state + + // 2-6. Illegal states (NEVER REACHED in normal execution) + default : state_reg <= QRESET_PP; // goto reset state + endcase +end // End of process + + +// TMR0 pre-scaler (see pp.27 of PIC16F84 data sheet) +// select pre-scaler +assign ps_clk = option_reg[5]?(t0cki_i ^ option_reg[4]):clk_o_reg; +// option_reg(5):T0CS +// option_reg(4):T0SE + +// pre-scaler body +always @(posedge ps_clk or negedge pon_rst_n_i) +begin + if (~pon_rst_n_i) + begin + pscale_reg <= 0; + ps_full_reg <= 0; + end + else // Must be ps_clk rising edge... + begin + case (option_reg[2:0]) // select prescaler-full value by PS2-0 + 3'b000 : rateval <= 1; + 3'b001 : rateval <= 3; + 3'b010 : rateval <= 7; + 3'b011 : rateval <= 15; + 3'b100 : rateval <= 31; + 3'b101 : rateval <= 63; + 3'b110 : rateval <= 127; + 3'b111 : rateval <= 255; + default: rateval <= 1; + endcase + + if (pscale_reg >= rateval) + begin + pscale_reg <= 0; + ps_full_reg <= 1; + end + else + begin + pscale_reg <= pscale_reg + 1; + ps_full_reg <= 0; + end + end +end //process + +// select TMR0-increment trigger +assign inc_tmr_clk = option_reg[3]?ps_clk:ps_full_reg; +// option_reg(3):PSA +// ps_full_reg:output of pre-scaler + + +assign wdt_init = ~pon_rst_n_i || ~mclr_n_i; +// WDT timer body +always @(posedge wdt_clk_i or posedge wdt_init) +begin + if (wdt_init) // (async reset) + begin + wdt_reg <= 0; + wdt_full_reg <= 0; + wdt_clr_req_reg <= 2'b0; + wdt_fullclr_req_reg <= 2'b0; + end + else // Must be posedge wdt_clk_i at this point... + begin + // synchronizers + // WDT-clear request (CLRWDT/SLEEP instruction) + // (do not AND with sleepflag_reg, since WDT should be + // cleared at SLEEP instruction) + wdt_clr_req_reg[0] <= wdt_clr_reg; + wdt_clr_req_reg[1] <= wdt_clr_req_reg[0]; + // WDT-full-clear request (after WDT reset) + wdt_fullclr_req_reg[0] <= wdt_full_clr_reg && ~sleepflag_reg; + wdt_fullclr_req_reg[1] <= wdt_fullclr_req_reg[0]; + + // timer/full reg + if (wdt_reg >= WDT_SIZE_PP) wdt_full_node <= 1; // (intermediate node) + else wdt_full_node <= 0; // (intermediate node) + + // wdt_reg(counter) body + if ((wdt_clr_req_reg == 2'b01) || ~wdt_ena_i) wdt_reg <= 0; + else if (wdt_full_node) wdt_reg <= 0; + else wdt_reg <= wdt_reg + 1; + + // wdt_full_reg(interrupt trigger) body + if ((wdt_fullclr_req_reg == 2'b01) || ~wdt_ena_i) wdt_full_reg <= 0; + else if (wdt_full_node) wdt_full_reg <= 1; + end +end // process +assign wdt_clr_ack = wdt_clr_req_reg[1]; // WDT-clear ack signal to CPU +assign wdt_full_o = wdt_full_reg; // WDT-full int. trigger to CPU + + +// WDT controller in CPU-clock line +// (handshake-interface between WDT and CPU-EFSM) +always @(posedge clk_i) +begin + if (~poweron_sync_reg || ~mclr_sync_reg) + begin + wdt_clr_reg <= 0; // WDT clear request register + wdt_clr_reqhold_reg <= 0; // 1 when WDT clear request comes while another + // clear request is still being processed. + wdt_full_clr_reg <= 0; // WDT-full clear request register + end + else + begin + // WDT-clear/hold WDT-clear request + // (handshake) + if (wdt_clr_reg) // still processing clear-operation + // if ack comes, take down the clear request + if (wdt_clr_ack_sync_reg) wdt_clr_reg <= 0; + else if ( wdt_clr_reqhold_reg + || ( (state_reg == Q4_PP) + && exec_op_reg && ~intstart_reg + && (inst_clrwdt || inst_sleep)) ) // clear request comes + begin + if (~wdt_clr_ack_sync_reg) // confirm if ack is 0 + begin + wdt_clr_reg <= 1; + wdt_clr_reqhold_reg <= 0; + end + // (wait until ack becomes 0) +// else wdt_clr_reqhold_reg <= 1; NOTE: This line is "never reached!" + end + + // clear WDT-full (CPU reset request) + // (handshake) + if (wdt_full_clr_reg) wdt_full_clr_reg <= wdt_full_sync_reg[1]; + end +end // process + + +assign intclr0 = intclr_reg[0]; +assign intclr1 = intclr_reg[1]; +assign intclr2 = intclr_reg[2]; +assign intclr3 = intclr_reg[3]; +assign intclr4 = intclr_reg[4]; + +// Detect external interrupt requests +// INT0 I/F +always @(posedge int0_i or posedge intclr0) +begin + if (intclr0) intrise_reg[0] <= 0; + else intrise_reg[0] <= 1; // catch positive edge +end // process + +always @(negedge int0_i or posedge intclr0) +begin + if (intclr0) intdown_reg[0] <= 0; + else intdown_reg[0] <= 1; // catch negative edge +end // process +assign rb0_int = option_reg[6]?intrise_reg[0]:intdown_reg[0]; + +// INT4 I/F +always @(posedge int4_i or posedge intclr1) +begin + if (intclr1) intrise_reg[1] <= 0; + else intrise_reg[1] <= 1; // catch positive edge +end // process + +always @(negedge int4_i or posedge intclr1) +begin + if (intclr1) intdown_reg[1] <= 0; + else intdown_reg[1] <= 1; // catch negative edge +end // process +assign rb4_int = intrise_reg[1] || intdown_reg[1]; + +// INT5 I/F +always @(posedge int5_i or posedge intclr2) +begin + if (intclr2) intrise_reg[2] <= 0; + else intrise_reg[2] <= 1; // catch positive edge +end // process + +always @(negedge int5_i or posedge intclr2) +begin + if (intclr2) intdown_reg[2] <= 0; + else intdown_reg[2] <= 1; // catch negative edge +end // process +assign rb5_int = intrise_reg[2] || intdown_reg[2]; + +// INT6 I/F +always @(posedge int6_i or posedge intclr3) +begin + if (intclr3) intrise_reg[3] <= 0; + else intrise_reg[3] <= 1; // catch positive edge +end // process + +always @(negedge int7_i or posedge intclr3) +begin + if (intclr3) intdown_reg[3] <= 0; + else intdown_reg[3] <= 1; // catch negative edge +end // process +assign rb6_int = intrise_reg[3] || intdown_reg[3]; + +// INT7 I/F +always @(posedge int7_i or posedge intclr4) +begin + if (intclr4) intrise_reg[4] <= 0; + else intrise_reg[4] <= 1; // catch positive edge +end // process + +always @(negedge int7_i or posedge intclr4) +begin + if (intclr4) intdown_reg[4] <= 0; + else intdown_reg[4] <= 1; // catch negative edge +end // process +assign rb7_int = intrise_reg[4] || intdown_reg[4]; + + +// Decode INT triggers +// (do not AND with GIE(intcon_reg(7)), since these signals are +// also used for waking up from SLEEP) +assign inte = intcon_reg[4] && rb0_int; // G0IE and raw-trigger signal +assign rbint = intcon_reg[3] && (rb4_int || rb5_int || rb6_int || rb7_int); // RBIE and raw-trigger signal + +// Circuit's output signals +assign prog_adr_o = pc_reg; // program ROM address +assign ram_adr_o = ram_adr_reg; // data RAM address +assign ram_dat_o = aluout_reg; // data RAM write data +assign readram_o = (state_reg[1:0] == Q2_PP[1:0]); // data RAM read enable + //(1 when state_reg = Q2_PP) +assign writeram_o = writeram_reg; // data RAM write enable + +assign eep_adr_o = eep_adr_reg; // EEPROM address +assign eep_dat_o = eep_dat_reg; // EEPROM write data +assign rd_eep_req_o = eecon1_reg[0]; // EEPROM read request +assign wr_eep_req_o = eecon1_reg[1]; // EEPROM write request + +assign porta_o = porta_o_reg; // PORT-A output +assign porta_dir_o = trisa_reg; // PORT-A direction + +assign portb_o = portb_o_reg; // PORT-B output +assign portb_dir_o = trisb_reg; // PORT-B direction +assign rbpu_o = option_reg[7]; // RBPU: pull-up enable + +assign clk_o = clk_o_reg; // clock (clk_i/4) output + +assign powerdown_o = sleepflag_reg; // CPU clock stop indicator +assign startclk_o = inte || rbint || wdt_full_reg + || ~mclr_n_i || ~pon_rst_n_i; + // CPU clock start indicator + + +endmodule + + +//`undef STATEBIT_SIZE \ No newline at end of file

powered by: WebSVN 2.1.0

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