From efc98f83bc3d4e265cc4043fd2c5964f124994ad Mon Sep 17 00:00:00 2001 From: torlus Date: Mon, 3 Mar 2014 21:04:21 +0000 Subject: [PATCH] First full HDL version --- FPGA_quartus_GE/DSP/DSP.vhd | 79 + FPGA_quartus_GE/DSP/DSP.vhd.bak | 79 + FPGA_quartus_GE/DSP/dsp56k.zip | Bin 0 -> 39208 bytes FPGA_quartus_GE/DSP/src/adgen_stage.vhd | 216 + FPGA_quartus_GE/DSP/src/constants_pkg.vhd | 62 + FPGA_quartus_GE/DSP/src/decode_stage.vhd | 1221 ++ FPGA_quartus_GE/DSP/src/exec_stage_alu.vhd | 603 + .../DSP/src/exec_stage_bit_modify.vhd | 79 + FPGA_quartus_GE/DSP/src/exec_stage_branch.vhd | 117 + .../DSP/src/exec_stage_cc_flag_calc.vhd | 75 + FPGA_quartus_GE/DSP/src/exec_stage_cr_mod.vhd | 72 + FPGA_quartus_GE/DSP/src/exec_stage_loops.vhd | 200 + FPGA_quartus_GE/DSP/src/fetch_stage.vhd | 60 + FPGA_quartus_GE/DSP/src/mem_control.vhd | 1519 +++ FPGA_quartus_GE/DSP/src/memory_management.vhd | 206 + FPGA_quartus_GE/DSP/src/parameter_pkg.vhd | 10 + FPGA_quartus_GE/DSP/src/pipeline.vhd | 968 ++ FPGA_quartus_GE/DSP/src/reg_file.vhd | 679 + FPGA_quartus_GE/DSP/src/types_pkg.vhd | 167 + .../FalconIO_SDCard_IDE_CF.vhd | 971 ++ .../FalconIO_SDCard_IDE_CF.vhd.bak | 971 ++ .../FalconIO_SDCard_IDE_CF_pgk.vhd | 406 + .../FalconIO_SDCard_IDE_CF_pgk.vhd.bak | 406 + .../WF5380/wf5380_control.vhd | 631 + .../WF5380/wf5380_pkg.vhd | 139 + .../WF5380/wf5380_registers.vhd | 265 + .../WF5380/wf5380_soc_top.vhd | 300 + .../WF5380/wf5380_top.vhd | 275 + .../WF_FDC1772_IP/wf1772ip_am_detector.vhd | 253 + .../WF_FDC1772_IP/wf1772ip_control.vhd | 1463 +++ .../WF_FDC1772_IP/wf1772ip_crc_logic.vhd | 162 + .../WF_FDC1772_IP/wf1772ip_digital_pll.vhd | 426 + .../WF_FDC1772_IP/wf1772ip_pkg.vhd | 232 + .../WF_FDC1772_IP/wf1772ip_registers.vhd | 264 + .../WF_FDC1772_IP/wf1772ip_top.vhd | 154 + .../WF_FDC1772_IP/wf1772ip_top_soc.vhd | 333 + .../WF_FDC1772_IP/wf1772ip_transceiver.vhd | 517 + .../WF_MFP68901_IP/wf68901ip_gpio.vhd | 141 + .../WF_MFP68901_IP/wf68901ip_interrupts.vhd | 391 + .../WF_MFP68901_IP/wf68901ip_pkg.vhd | 263 + .../WF_MFP68901_IP/wf68901ip_timers.vhd | 533 + .../WF_MFP68901_IP/wf68901ip_top.vhd | 213 + .../WF_MFP68901_IP/wf68901ip_top_soc.vhd | 309 + .../WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd | 191 + .../WF_MFP68901_IP/wf68901ip_usart_rx.vhd | 590 + .../WF_MFP68901_IP/wf68901ip_usart_top.vhd | 238 + .../WF_MFP68901_IP/wf68901ip_usart_tx.vhd | 387 + .../WF_SDC_IF/sd-card-interface.vhd | 228 + .../WF_SDC_IF/sd-card-interface_soc.vhd | 240 + .../WF_SDC_IF/sd-card-interface_soc.vhd.bak | 239 + .../WF_SND2149_IP/wf2149ip_pkg.vhd | 84 + .../WF_SND2149_IP/wf2149ip_top.vhd | 170 + .../WF_SND2149_IP/wf2149ip_top_soc.vhd | 229 + .../WF_SND2149_IP/wf2149ip_wave.vhd | 533 + .../WF_UART6850_IP/wf6850ip_ctrl_status.vhd | 244 + .../wf6850ip_ctrl_status.vhd.bak | 244 + .../WF_UART6850_IP/wf6850ip_receive.vhd | 415 + .../WF_UART6850_IP/wf6850ip_receive.vhd.bak | 415 + .../WF_UART6850_IP/wf6850ip_top.vhd | 135 + .../WF_UART6850_IP/wf6850ip_top_soc.vhd | 255 + .../WF_UART6850_IP/wf6850ip_top_soc.vhd.bak | 252 + .../WF_UART6850_IP/wf6850ip_transmit.vhd | 339 + .../WF_UART6850_IP/wf6850ip_transmit.vhd.bak | 339 + .../FalconIO_SDCard_IDE_CF/dcfifo0.bsf | 95 + .../FalconIO_SDCard_IDE_CF/dcfifo0.cmp | 28 + .../FalconIO_SDCard_IDE_CF/dcfifo0.qip | 5 + .../FalconIO_SDCard_IDE_CF/dcfifo0.vhd | 202 + .../FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak | 202 + .../FalconIO_SDCard_IDE_CF/dcfifo1.bsf | 95 + .../FalconIO_SDCard_IDE_CF/dcfifo1.cmp | 28 + .../FalconIO_SDCard_IDE_CF/dcfifo1.qip | 5 + .../FalconIO_SDCard_IDE_CF/dcfifo1.vhd | 202 + .../FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak | 202 + .../Interrupt_Handler/interrupt_handler.tdf | 478 + .../Interrupt_Handler/interrupt_handler.v | 3615 ++++++ FPGA_quartus_GE/PLLJ_PLLSPE_INFO.txt | 20 + FPGA_quartus_GE/UNUSED | 27 + FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd | 75 + FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd.bak | 75 + FPGA_quartus_GE/Video/DDR_CTR.tdf | 659 + FPGA_quartus_GE/Video/DDR_CTR.tdf.bak | 660 + FPGA_quartus_GE/Video/DDR_CTR.v | 1095 ++ FPGA_quartus_GE/Video/DDR_CTR_BLITTER.tdf.bak | 352 + FPGA_quartus_GE/Video/UNUSED | 267 + .../Video/VIDEO_MOD_MUX_CLUTCTR.tdf | 675 + .../Video/VIDEO_MOD_MUX_CLUTCTR.tdf.bak | 675 + FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.v | 1500 +++ FPGA_quartus_GE/Video/Video.bdf | 10651 ++++++++++++++++ FPGA_quartus_GE/Video/altddio_bidir0.bsf | 99 + FPGA_quartus_GE/Video/altddio_bidir0.inc | 30 + FPGA_quartus_GE/Video/altddio_bidir0.ppf | 16 + FPGA_quartus_GE/Video/altddio_bidir0.qip | 7 + FPGA_quartus_GE/Video/altddio_bidir0.vhd | 172 + FPGA_quartus_GE/Video/altddio_out0.bsf | 64 + FPGA_quartus_GE/Video/altddio_out0.inc | 25 + FPGA_quartus_GE/Video/altddio_out0.ppf | 11 + FPGA_quartus_GE/Video/altddio_out0.qip | 7 + FPGA_quartus_GE/Video/altddio_out0.vhd | 136 + FPGA_quartus_GE/Video/altddio_out1.bsf | 64 + FPGA_quartus_GE/Video/altddio_out1.inc | 25 + FPGA_quartus_GE/Video/altddio_out1.ppf | 11 + FPGA_quartus_GE/Video/altddio_out1.qip | 7 + FPGA_quartus_GE/Video/altddio_out1.vhd | 146 + FPGA_quartus_GE/Video/altddio_out2.bsf | 64 + FPGA_quartus_GE/Video/altddio_out2.inc | 25 + FPGA_quartus_GE/Video/altddio_out2.ppf | 11 + FPGA_quartus_GE/Video/altddio_out2.qip | 7 + FPGA_quartus_GE/Video/altddio_out2.vhd | 136 + FPGA_quartus_GE/Video/altdpram0.bsf | 173 + FPGA_quartus_GE/Video/altdpram0.inc | 31 + FPGA_quartus_GE/Video/altdpram0.qip | 6 + FPGA_quartus_GE/Video/altdpram0.vhd | 273 + FPGA_quartus_GE/Video/altdpram1.bsf | 173 + FPGA_quartus_GE/Video/altdpram1.inc | 31 + FPGA_quartus_GE/Video/altdpram1.qip | 6 + FPGA_quartus_GE/Video/altdpram1.vhd | 273 + FPGA_quartus_GE/Video/altdpram2.bsf | 173 + FPGA_quartus_GE/Video/altdpram2.inc | 31 + FPGA_quartus_GE/Video/altdpram2.qip | 6 + FPGA_quartus_GE/Video/altdpram2.vhd | 273 + FPGA_quartus_GE/Video/lpm_bustri0.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri0.inc | 24 + FPGA_quartus_GE/Video/lpm_bustri0.qip | 6 + FPGA_quartus_GE/Video/lpm_bustri0.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri1.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri1.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri1.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri2.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri2.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri2.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri3.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri3.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri3.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri4.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri4.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri4.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri5.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri5.inc | 24 + FPGA_quartus_GE/Video/lpm_bustri5.qip | 6 + FPGA_quartus_GE/Video/lpm_bustri5.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri6.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri6.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri6.vhd | 107 + FPGA_quartus_GE/Video/lpm_bustri7.bsf | 56 + FPGA_quartus_GE/Video/lpm_bustri7.qip | 5 + FPGA_quartus_GE/Video/lpm_bustri7.vhd | 107 + FPGA_quartus_GE/Video/lpm_compare1.bsf | 54 + FPGA_quartus_GE/Video/lpm_compare1.inc | 24 + FPGA_quartus_GE/Video/lpm_compare1.qip | 6 + FPGA_quartus_GE/Video/lpm_compare1.vhd | 127 + FPGA_quartus_GE/Video/lpm_constant0.bsf | 42 + FPGA_quartus_GE/Video/lpm_constant0.qip | 5 + FPGA_quartus_GE/Video/lpm_constant0.vhd | 108 + FPGA_quartus_GE/Video/lpm_constant1.bsf | 42 + FPGA_quartus_GE/Video/lpm_constant1.inc | 23 + FPGA_quartus_GE/Video/lpm_constant1.qip | 6 + FPGA_quartus_GE/Video/lpm_constant1.vhd | 108 + FPGA_quartus_GE/Video/lpm_constant2.bsf | 42 + FPGA_quartus_GE/Video/lpm_constant2.qip | 5 + FPGA_quartus_GE/Video/lpm_constant2.vhd | 108 + FPGA_quartus_GE/Video/lpm_constant3.bsf | 42 + FPGA_quartus_GE/Video/lpm_constant3.qip | 5 + FPGA_quartus_GE/Video/lpm_constant3.vhd | 108 + FPGA_quartus_GE/Video/lpm_constant4.bsf | 42 + FPGA_quartus_GE/Video/lpm_constant4.inc | 23 + FPGA_quartus_GE/Video/lpm_constant4.qip | 6 + FPGA_quartus_GE/Video/lpm_constant4.vhd | 108 + FPGA_quartus_GE/Video/lpm_ff0.bsf | 63 + FPGA_quartus_GE/Video/lpm_ff0.qip | 5 + FPGA_quartus_GE/Video/lpm_ff0.vhd | 127 + FPGA_quartus_GE/Video/lpm_ff1.bsf | 56 + FPGA_quartus_GE/Video/lpm_ff1.qip | 5 + FPGA_quartus_GE/Video/lpm_ff1.vhd | 122 + FPGA_quartus_GE/Video/lpm_ff2.bsf | 56 + FPGA_quartus_GE/Video/lpm_ff2.qip | 5 + FPGA_quartus_GE/Video/lpm_ff2.vhd | 122 + FPGA_quartus_GE/Video/lpm_ff3.bsf | 56 + FPGA_quartus_GE/Video/lpm_ff3.qip | 5 + FPGA_quartus_GE/Video/lpm_ff3.vhd | 122 + FPGA_quartus_GE/Video/lpm_ff4.bsf | 56 + FPGA_quartus_GE/Video/lpm_ff4.inc | 24 + FPGA_quartus_GE/Video/lpm_ff4.qip | 6 + FPGA_quartus_GE/Video/lpm_ff4.vhd | 122 + FPGA_quartus_GE/Video/lpm_ff5.bsf | 56 + FPGA_quartus_GE/Video/lpm_ff5.inc | 24 + FPGA_quartus_GE/Video/lpm_ff5.qip | 6 + FPGA_quartus_GE/Video/lpm_ff5.vhd | 122 + FPGA_quartus_GE/Video/lpm_ff6.bsf | 63 + FPGA_quartus_GE/Video/lpm_ff6.inc | 25 + FPGA_quartus_GE/Video/lpm_ff6.qip | 6 + FPGA_quartus_GE/Video/lpm_ff6.vhd | 127 + FPGA_quartus_GE/Video/lpm_fifoDZ.bsf | 79 + FPGA_quartus_GE/Video/lpm_fifoDZ.qip | 5 + FPGA_quartus_GE/Video/lpm_fifoDZ.vhd | 178 + FPGA_quartus_GE/Video/lpm_fifo_dc0.bsf | 102 + FPGA_quartus_GE/Video/lpm_fifo_dc0.inc | 30 + FPGA_quartus_GE/Video/lpm_fifo_dc0.qip | 6 + FPGA_quartus_GE/Video/lpm_fifo_dc0.vhd | 203 + FPGA_quartus_GE/Video/lpm_latch1.bsf | 53 + FPGA_quartus_GE/Video/lpm_latch1.qip | 5 + FPGA_quartus_GE/Video/lpm_latch1.vhd | 110 + FPGA_quartus_GE/Video/lpm_mux0.bsf | 83 + FPGA_quartus_GE/Video/lpm_mux0.inc | 28 + FPGA_quartus_GE/Video/lpm_mux0.qip | 6 + FPGA_quartus_GE/Video/lpm_mux0.vhd | 251 + FPGA_quartus_GE/Video/lpm_mux1.bsf | 111 + FPGA_quartus_GE/Video/lpm_mux1.inc | 32 + FPGA_quartus_GE/Video/lpm_mux1.qip | 6 + FPGA_quartus_GE/Video/lpm_mux1.vhd | 271 + FPGA_quartus_GE/Video/lpm_mux2.bsf | 167 + FPGA_quartus_GE/Video/lpm_mux2.inc | 40 + FPGA_quartus_GE/Video/lpm_mux2.qip | 6 + FPGA_quartus_GE/Video/lpm_mux2.vhd | 311 + FPGA_quartus_GE/Video/lpm_mux3.bsf | 60 + FPGA_quartus_GE/Video/lpm_mux3.qip | 5 + FPGA_quartus_GE/Video/lpm_mux3.vhd | 115 + FPGA_quartus_GE/Video/lpm_mux4.bsf | 60 + FPGA_quartus_GE/Video/lpm_mux4.qip | 5 + FPGA_quartus_GE/Video/lpm_mux4.vhd | 125 + FPGA_quartus_GE/Video/lpm_mux5.bsf | 74 + FPGA_quartus_GE/Video/lpm_mux5.inc | 27 + FPGA_quartus_GE/Video/lpm_mux5.qip | 6 + FPGA_quartus_GE/Video/lpm_mux5.vhd | 373 + FPGA_quartus_GE/Video/lpm_mux6.bsf | 111 + FPGA_quartus_GE/Video/lpm_mux6.inc | 32 + FPGA_quartus_GE/Video/lpm_mux6.qip | 6 + FPGA_quartus_GE/Video/lpm_mux6.vhd | 335 + FPGA_quartus_GE/Video/lpm_muxDZ.bsf | 76 + FPGA_quartus_GE/Video/lpm_muxDZ.qip | 5 + FPGA_quartus_GE/Video/lpm_muxDZ.vhd | 377 + FPGA_quartus_GE/Video/lpm_muxDZ2.bsf | 60 + FPGA_quartus_GE/Video/lpm_muxDZ2.qip | 5 + FPGA_quartus_GE/Video/lpm_muxDZ2.vhd | 115 + FPGA_quartus_GE/Video/lpm_muxVDM.bsf | 158 + FPGA_quartus_GE/Video/lpm_muxVDM.qip | 5 + FPGA_quartus_GE/Video/lpm_muxVDM.vhd | 2225 ++++ FPGA_quartus_GE/Video/lpm_shiftreg0.bsf | 70 + FPGA_quartus_GE/Video/lpm_shiftreg0.inc | 26 + FPGA_quartus_GE/Video/lpm_shiftreg0.qip | 6 + FPGA_quartus_GE/Video/lpm_shiftreg0.vhd | 135 + FPGA_quartus_GE/Video/lpm_shiftreg1.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg1.qip | 5 + FPGA_quartus_GE/Video/lpm_shiftreg1.vhd | 125 + FPGA_quartus_GE/Video/lpm_shiftreg2.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg2.qip | 5 + FPGA_quartus_GE/Video/lpm_shiftreg2.vhd | 125 + FPGA_quartus_GE/Video/lpm_shiftreg3.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg3.inc | 24 + FPGA_quartus_GE/Video/lpm_shiftreg3.qip | 6 + FPGA_quartus_GE/Video/lpm_shiftreg3.vhd | 125 + FPGA_quartus_GE/Video/lpm_shiftreg4.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg4.inc | 24 + FPGA_quartus_GE/Video/lpm_shiftreg4.qip | 6 + FPGA_quartus_GE/Video/lpm_shiftreg4.vhd | 125 + FPGA_quartus_GE/Video/lpm_shiftreg5.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg5.inc | 24 + FPGA_quartus_GE/Video/lpm_shiftreg5.qip | 6 + FPGA_quartus_GE/Video/lpm_shiftreg5.vhd | 125 + FPGA_quartus_GE/Video/lpm_shiftreg6.bsf | 56 + FPGA_quartus_GE/Video/lpm_shiftreg6.inc | 24 + FPGA_quartus_GE/Video/lpm_shiftreg6.qip | 6 + FPGA_quartus_GE/Video/lpm_shiftreg6.vhd | 125 + FPGA_quartus_GE/Video/mux41_0.v | 30 + FPGA_quartus_GE/Video/mux41_0.vhd | 52 + FPGA_quartus_GE/Video/mux41_1.v | 30 + FPGA_quartus_GE/Video/mux41_1.vhd | 52 + FPGA_quartus_GE/Video/mux41_2.v | 31 + FPGA_quartus_GE/Video/mux41_2.vhd | 54 + FPGA_quartus_GE/Video/mux41_3.v | 31 + FPGA_quartus_GE/Video/mux41_3.vhd | 54 + FPGA_quartus_GE/Video/mux41_4.v | 31 + FPGA_quartus_GE/Video/mux41_4.vhd | 54 + FPGA_quartus_GE/Video/mux41_5.v | 31 + FPGA_quartus_GE/Video/mux41_5.vhd | 54 + FPGA_quartus_GE/Video/video.v | 1288 ++ FPGA_quartus_GE/Video/video.vhd | 1755 +++ FPGA_quartus_GE/ahdl2v/DDR_CTR.tdf | 662 + FPGA_quartus_GE/ahdl2v/DDR_CTR.v | 1095 ++ .../ahdl2v/VIDEO_MOD_MUX_CLUTCTR.tdf | 684 + .../ahdl2v/VIDEO_MOD_MUX_CLUTCTR.v | 1474 +++ FPGA_quartus_GE/ahdl2v/interrupt_handler.tdf | 478 + FPGA_quartus_GE/ahdl2v/interrupt_handler.v | 3578 ++++++ FPGA_quartus_GE/ahdl2v/lpm_bustri.tdf | 78 + FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.inc | 24 + FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.tdf | 72 + FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.v | 78 + FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.inc | 24 + FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.tdf | 72 + FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.inc | 24 + FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.tdf | 72 + FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.v | 99 + FPGA_quartus_GE/ahdl2v/xport.exe | Bin 0 -> 566272 bytes FPGA_quartus_GE/altddio_out0.bsf | 64 + FPGA_quartus_GE/altddio_out0.inc | 25 + FPGA_quartus_GE/altddio_out0.ppf | 11 + FPGA_quartus_GE/altddio_out0.qip | 7 + FPGA_quartus_GE/altddio_out0.vhd | 146 + FPGA_quartus_GE/altddio_out3.bsf | 64 + FPGA_quartus_GE/altddio_out3.inc | 25 + FPGA_quartus_GE/altddio_out3.ppf | 11 + FPGA_quartus_GE/altddio_out3.qip | 7 + FPGA_quartus_GE/altddio_out3.vhd | 146 + FPGA_quartus_GE/altpll0.bsf | 117 + FPGA_quartus_GE/altpll0.inc | 27 + FPGA_quartus_GE/altpll0.ppf | 13 + FPGA_quartus_GE/altpll0.qip | 7 + FPGA_quartus_GE/altpll0.vhd | 477 + FPGA_quartus_GE/altpll1.bsf | 100 + FPGA_quartus_GE/altpll1.inc | 26 + FPGA_quartus_GE/altpll1.ppf | 12 + FPGA_quartus_GE/altpll1.qip | 7 + FPGA_quartus_GE/altpll1.vhd | 423 + FPGA_quartus_GE/altpll2.bsf | 117 + FPGA_quartus_GE/altpll2.inc | 27 + FPGA_quartus_GE/altpll2.ppf | 13 + FPGA_quartus_GE/altpll2.qip | 7 + FPGA_quartus_GE/altpll2.vhd | 477 + FPGA_quartus_GE/altpll3.bsf | 105 + FPGA_quartus_GE/altpll3.inc | 26 + FPGA_quartus_GE/altpll3.ppf | 12 + FPGA_quartus_GE/altpll3.qip | 7 + FPGA_quartus_GE/altpll3.vhd | 445 + FPGA_quartus_GE/altpll4.bsf | 125 + FPGA_quartus_GE/altpll4.inc | 31 + FPGA_quartus_GE/altpll4.mif | 174 + FPGA_quartus_GE/altpll4.ppf | 17 + FPGA_quartus_GE/altpll4.qip | 7 + FPGA_quartus_GE/altpll4.tdf | 298 + FPGA_quartus_GE/altpll_reconfig0.bsf | 162 + FPGA_quartus_GE/altpll_reconfig0.qip | 5 + FPGA_quartus_GE/altpll_reconfig1.bsf | 162 + FPGA_quartus_GE/altpll_reconfig1.inc | 39 + FPGA_quartus_GE/altpll_reconfig1.qip | 6 + FPGA_quartus_GE/altpll_reconfig1.tdf | 144 + .../altpll_reconfig1_pllrcfg_bju.tdf | 583 + .../altpll_reconfig1_pllrcfg_t4q.tdf | 582 + FPGA_quartus_GE/firebee1.bdf | 5837 +++++++++ FPGA_quartus_GE/firebee1.done | 1 + FPGA_quartus_GE/firebee1.qpf | 30 + FPGA_quartus_GE/firebee1.qsf | 852 ++ FPGA_quartus_GE/firebee1.qws | Bin 0 -> 1252 bytes FPGA_quartus_GE/firebee1.rbf | Bin 0 -> 416499 bytes FPGA_quartus_GE/firebee1.sdc | 179 + FPGA_quartus_GE/firebee1.v | 698 + FPGA_quartus_GE/firebee1.vhd | 861 ++ .../firebee1_assignment_defaults.qdf | 687 + FPGA_quartus_GE/firebee1_description.txt | 0 FPGA_quartus_GE/lpm_bustri_BYT.bsf | 56 + FPGA_quartus_GE/lpm_bustri_BYT.inc | 24 + FPGA_quartus_GE/lpm_bustri_BYT.qip | 6 + FPGA_quartus_GE/lpm_bustri_BYT.vhd | 107 + FPGA_quartus_GE/lpm_bustri_LONG.bsf | 56 + FPGA_quartus_GE/lpm_bustri_LONG.inc | 24 + FPGA_quartus_GE/lpm_bustri_LONG.qip | 6 + FPGA_quartus_GE/lpm_bustri_LONG.vhd | 107 + FPGA_quartus_GE/lpm_bustri_WORD.bsf | 56 + FPGA_quartus_GE/lpm_bustri_WORD.inc | 24 + FPGA_quartus_GE/lpm_bustri_WORD.qip | 6 + FPGA_quartus_GE/lpm_bustri_WORD.vhd | 107 + FPGA_quartus_GE/lpm_counter0.bsf | 49 + FPGA_quartus_GE/lpm_counter0.qip | 5 + FPGA_quartus_GE/lpm_counter0.vhd | 126 + FPGA_quartus_GE/lpm_latch0.bsf | 53 + FPGA_quartus_GE/lpm_latch0.qip | 5 + FPGA_quartus_GE/lpm_latch0.vhd | 110 + FPGA_quartus_GE/mux41.v | 74 + FPGA_quartus_GE/mux41.vhd | 90 + 367 files changed, 85885 insertions(+) create mode 100644 FPGA_quartus_GE/DSP/DSP.vhd create mode 100644 FPGA_quartus_GE/DSP/DSP.vhd.bak create mode 100644 FPGA_quartus_GE/DSP/dsp56k.zip create mode 100644 FPGA_quartus_GE/DSP/src/adgen_stage.vhd create mode 100644 FPGA_quartus_GE/DSP/src/constants_pkg.vhd create mode 100644 FPGA_quartus_GE/DSP/src/decode_stage.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_alu.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_bit_modify.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_branch.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_cc_flag_calc.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_cr_mod.vhd create mode 100644 FPGA_quartus_GE/DSP/src/exec_stage_loops.vhd create mode 100644 FPGA_quartus_GE/DSP/src/fetch_stage.vhd create mode 100644 FPGA_quartus_GE/DSP/src/mem_control.vhd create mode 100644 FPGA_quartus_GE/DSP/src/memory_management.vhd create mode 100644 FPGA_quartus_GE/DSP/src/parameter_pkg.vhd create mode 100644 FPGA_quartus_GE/DSP/src/pipeline.vhd create mode 100644 FPGA_quartus_GE/DSP/src/reg_file.vhd create mode 100644 FPGA_quartus_GE/DSP/src/types_pkg.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_control.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_pkg.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_registers.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_soc_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_am_detector.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_control.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_crc_logic.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_digital_pll.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_pkg.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_registers.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top_soc.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_transceiver.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_gpio.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_interrupts.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_pkg.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_timers.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top_soc.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_rx.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_tx.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_pkg.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_wave.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.bsf create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.cmp create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.qip create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.bsf create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.cmp create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.qip create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd create mode 100644 FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak create mode 100644 FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.tdf create mode 100644 FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.v create mode 100644 FPGA_quartus_GE/PLLJ_PLLSPE_INFO.txt create mode 100644 FPGA_quartus_GE/UNUSED create mode 100644 FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd create mode 100644 FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd.bak create mode 100644 FPGA_quartus_GE/Video/DDR_CTR.tdf create mode 100644 FPGA_quartus_GE/Video/DDR_CTR.tdf.bak create mode 100644 FPGA_quartus_GE/Video/DDR_CTR.v create mode 100644 FPGA_quartus_GE/Video/DDR_CTR_BLITTER.tdf.bak create mode 100644 FPGA_quartus_GE/Video/UNUSED create mode 100644 FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.tdf create mode 100644 FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.tdf.bak create mode 100644 FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.v create mode 100644 FPGA_quartus_GE/Video/Video.bdf create mode 100644 FPGA_quartus_GE/Video/altddio_bidir0.bsf create mode 100644 FPGA_quartus_GE/Video/altddio_bidir0.inc create mode 100644 FPGA_quartus_GE/Video/altddio_bidir0.ppf create mode 100644 FPGA_quartus_GE/Video/altddio_bidir0.qip create mode 100644 FPGA_quartus_GE/Video/altddio_bidir0.vhd create mode 100644 FPGA_quartus_GE/Video/altddio_out0.bsf create mode 100644 FPGA_quartus_GE/Video/altddio_out0.inc create mode 100644 FPGA_quartus_GE/Video/altddio_out0.ppf create mode 100644 FPGA_quartus_GE/Video/altddio_out0.qip create mode 100644 FPGA_quartus_GE/Video/altddio_out0.vhd create mode 100644 FPGA_quartus_GE/Video/altddio_out1.bsf create mode 100644 FPGA_quartus_GE/Video/altddio_out1.inc create mode 100644 FPGA_quartus_GE/Video/altddio_out1.ppf create mode 100644 FPGA_quartus_GE/Video/altddio_out1.qip create mode 100644 FPGA_quartus_GE/Video/altddio_out1.vhd create mode 100644 FPGA_quartus_GE/Video/altddio_out2.bsf create mode 100644 FPGA_quartus_GE/Video/altddio_out2.inc create mode 100644 FPGA_quartus_GE/Video/altddio_out2.ppf create mode 100644 FPGA_quartus_GE/Video/altddio_out2.qip create mode 100644 FPGA_quartus_GE/Video/altddio_out2.vhd create mode 100644 FPGA_quartus_GE/Video/altdpram0.bsf create mode 100644 FPGA_quartus_GE/Video/altdpram0.inc create mode 100644 FPGA_quartus_GE/Video/altdpram0.qip create mode 100644 FPGA_quartus_GE/Video/altdpram0.vhd create mode 100644 FPGA_quartus_GE/Video/altdpram1.bsf create mode 100644 FPGA_quartus_GE/Video/altdpram1.inc create mode 100644 FPGA_quartus_GE/Video/altdpram1.qip create mode 100644 FPGA_quartus_GE/Video/altdpram1.vhd create mode 100644 FPGA_quartus_GE/Video/altdpram2.bsf create mode 100644 FPGA_quartus_GE/Video/altdpram2.inc create mode 100644 FPGA_quartus_GE/Video/altdpram2.qip create mode 100644 FPGA_quartus_GE/Video/altdpram2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri0.inc create mode 100644 FPGA_quartus_GE/Video/lpm_bustri0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri3.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri3.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri3.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri4.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri4.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri4.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri5.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri5.inc create mode 100644 FPGA_quartus_GE/Video/lpm_bustri5.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri5.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri6.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri6.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri6.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_bustri7.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_bustri7.qip create mode 100644 FPGA_quartus_GE/Video/lpm_bustri7.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_compare1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_compare1.inc create mode 100644 FPGA_quartus_GE/Video/lpm_compare1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_compare1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_constant0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_constant0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_constant0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_constant1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_constant1.inc create mode 100644 FPGA_quartus_GE/Video/lpm_constant1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_constant1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_constant2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_constant2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_constant2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_constant3.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_constant3.qip create mode 100644 FPGA_quartus_GE/Video/lpm_constant3.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_constant4.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_constant4.inc create mode 100644 FPGA_quartus_GE/Video/lpm_constant4.qip create mode 100644 FPGA_quartus_GE/Video/lpm_constant4.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff3.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff3.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff3.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff4.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff4.inc create mode 100644 FPGA_quartus_GE/Video/lpm_ff4.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff4.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff5.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff5.inc create mode 100644 FPGA_quartus_GE/Video/lpm_ff5.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff5.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_ff6.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_ff6.inc create mode 100644 FPGA_quartus_GE/Video/lpm_ff6.qip create mode 100644 FPGA_quartus_GE/Video/lpm_ff6.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_fifoDZ.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_fifoDZ.qip create mode 100644 FPGA_quartus_GE/Video/lpm_fifoDZ.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_fifo_dc0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_fifo_dc0.inc create mode 100644 FPGA_quartus_GE/Video/lpm_fifo_dc0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_fifo_dc0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_latch1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_latch1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_latch1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux0.inc create mode 100644 FPGA_quartus_GE/Video/lpm_mux0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux1.inc create mode 100644 FPGA_quartus_GE/Video/lpm_mux1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux2.inc create mode 100644 FPGA_quartus_GE/Video/lpm_mux2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux3.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux3.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux3.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux4.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux4.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux4.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux5.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux5.inc create mode 100644 FPGA_quartus_GE/Video/lpm_mux5.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux5.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_mux6.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_mux6.inc create mode 100644 FPGA_quartus_GE/Video/lpm_mux6.qip create mode 100644 FPGA_quartus_GE/Video/lpm_mux6.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ.qip create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_muxDZ2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_muxVDM.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_muxVDM.qip create mode 100644 FPGA_quartus_GE/Video/lpm_muxVDM.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg0.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg0.inc create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg0.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg0.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg1.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg1.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg1.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg2.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg2.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg2.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg3.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg3.inc create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg3.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg3.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg4.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg4.inc create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg4.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg4.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg5.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg5.inc create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg5.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg5.vhd create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg6.bsf create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg6.inc create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg6.qip create mode 100644 FPGA_quartus_GE/Video/lpm_shiftreg6.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_0.v create mode 100644 FPGA_quartus_GE/Video/mux41_0.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_1.v create mode 100644 FPGA_quartus_GE/Video/mux41_1.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_2.v create mode 100644 FPGA_quartus_GE/Video/mux41_2.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_3.v create mode 100644 FPGA_quartus_GE/Video/mux41_3.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_4.v create mode 100644 FPGA_quartus_GE/Video/mux41_4.vhd create mode 100644 FPGA_quartus_GE/Video/mux41_5.v create mode 100644 FPGA_quartus_GE/Video/mux41_5.vhd create mode 100644 FPGA_quartus_GE/Video/video.v create mode 100644 FPGA_quartus_GE/Video/video.vhd create mode 100644 FPGA_quartus_GE/ahdl2v/DDR_CTR.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/DDR_CTR.v create mode 100644 FPGA_quartus_GE/ahdl2v/VIDEO_MOD_MUX_CLUTCTR.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/VIDEO_MOD_MUX_CLUTCTR.v create mode 100644 FPGA_quartus_GE/ahdl2v/interrupt_handler.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/interrupt_handler.v create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.inc create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.v create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.inc create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.inc create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.tdf create mode 100644 FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.v create mode 100644 FPGA_quartus_GE/ahdl2v/xport.exe create mode 100644 FPGA_quartus_GE/altddio_out0.bsf create mode 100644 FPGA_quartus_GE/altddio_out0.inc create mode 100644 FPGA_quartus_GE/altddio_out0.ppf create mode 100644 FPGA_quartus_GE/altddio_out0.qip create mode 100644 FPGA_quartus_GE/altddio_out0.vhd create mode 100644 FPGA_quartus_GE/altddio_out3.bsf create mode 100644 FPGA_quartus_GE/altddio_out3.inc create mode 100644 FPGA_quartus_GE/altddio_out3.ppf create mode 100644 FPGA_quartus_GE/altddio_out3.qip create mode 100644 FPGA_quartus_GE/altddio_out3.vhd create mode 100644 FPGA_quartus_GE/altpll0.bsf create mode 100644 FPGA_quartus_GE/altpll0.inc create mode 100644 FPGA_quartus_GE/altpll0.ppf create mode 100644 FPGA_quartus_GE/altpll0.qip create mode 100644 FPGA_quartus_GE/altpll0.vhd create mode 100644 FPGA_quartus_GE/altpll1.bsf create mode 100644 FPGA_quartus_GE/altpll1.inc create mode 100644 FPGA_quartus_GE/altpll1.ppf create mode 100644 FPGA_quartus_GE/altpll1.qip create mode 100644 FPGA_quartus_GE/altpll1.vhd create mode 100644 FPGA_quartus_GE/altpll2.bsf create mode 100644 FPGA_quartus_GE/altpll2.inc create mode 100644 FPGA_quartus_GE/altpll2.ppf create mode 100644 FPGA_quartus_GE/altpll2.qip create mode 100644 FPGA_quartus_GE/altpll2.vhd create mode 100644 FPGA_quartus_GE/altpll3.bsf create mode 100644 FPGA_quartus_GE/altpll3.inc create mode 100644 FPGA_quartus_GE/altpll3.ppf create mode 100644 FPGA_quartus_GE/altpll3.qip create mode 100644 FPGA_quartus_GE/altpll3.vhd create mode 100644 FPGA_quartus_GE/altpll4.bsf create mode 100644 FPGA_quartus_GE/altpll4.inc create mode 100644 FPGA_quartus_GE/altpll4.mif create mode 100644 FPGA_quartus_GE/altpll4.ppf create mode 100644 FPGA_quartus_GE/altpll4.qip create mode 100644 FPGA_quartus_GE/altpll4.tdf create mode 100644 FPGA_quartus_GE/altpll_reconfig0.bsf create mode 100644 FPGA_quartus_GE/altpll_reconfig0.qip create mode 100644 FPGA_quartus_GE/altpll_reconfig1.bsf create mode 100644 FPGA_quartus_GE/altpll_reconfig1.inc create mode 100644 FPGA_quartus_GE/altpll_reconfig1.qip create mode 100644 FPGA_quartus_GE/altpll_reconfig1.tdf create mode 100644 FPGA_quartus_GE/altpll_reconfig1_pllrcfg_bju.tdf create mode 100644 FPGA_quartus_GE/altpll_reconfig1_pllrcfg_t4q.tdf create mode 100644 FPGA_quartus_GE/firebee1.bdf create mode 100644 FPGA_quartus_GE/firebee1.done create mode 100644 FPGA_quartus_GE/firebee1.qpf create mode 100644 FPGA_quartus_GE/firebee1.qsf create mode 100644 FPGA_quartus_GE/firebee1.qws create mode 100644 FPGA_quartus_GE/firebee1.rbf create mode 100644 FPGA_quartus_GE/firebee1.sdc create mode 100644 FPGA_quartus_GE/firebee1.v create mode 100644 FPGA_quartus_GE/firebee1.vhd create mode 100644 FPGA_quartus_GE/firebee1_assignment_defaults.qdf create mode 100644 FPGA_quartus_GE/firebee1_description.txt create mode 100644 FPGA_quartus_GE/lpm_bustri_BYT.bsf create mode 100644 FPGA_quartus_GE/lpm_bustri_BYT.inc create mode 100644 FPGA_quartus_GE/lpm_bustri_BYT.qip create mode 100644 FPGA_quartus_GE/lpm_bustri_BYT.vhd create mode 100644 FPGA_quartus_GE/lpm_bustri_LONG.bsf create mode 100644 FPGA_quartus_GE/lpm_bustri_LONG.inc create mode 100644 FPGA_quartus_GE/lpm_bustri_LONG.qip create mode 100644 FPGA_quartus_GE/lpm_bustri_LONG.vhd create mode 100644 FPGA_quartus_GE/lpm_bustri_WORD.bsf create mode 100644 FPGA_quartus_GE/lpm_bustri_WORD.inc create mode 100644 FPGA_quartus_GE/lpm_bustri_WORD.qip create mode 100644 FPGA_quartus_GE/lpm_bustri_WORD.vhd create mode 100644 FPGA_quartus_GE/lpm_counter0.bsf create mode 100644 FPGA_quartus_GE/lpm_counter0.qip create mode 100644 FPGA_quartus_GE/lpm_counter0.vhd create mode 100644 FPGA_quartus_GE/lpm_latch0.bsf create mode 100644 FPGA_quartus_GE/lpm_latch0.qip create mode 100644 FPGA_quartus_GE/lpm_latch0.vhd create mode 100644 FPGA_quartus_GE/mux41.v create mode 100644 FPGA_quartus_GE/mux41.vhd diff --git a/FPGA_quartus_GE/DSP/DSP.vhd b/FPGA_quartus_GE/DSP/DSP.vhd new file mode 100644 index 0000000..26f8e2e --- /dev/null +++ b/FPGA_quartus_GE/DSP/DSP.vhd @@ -0,0 +1,79 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Tue Sep 08 16:24:57 2009 + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + + +-- Entity Declaration + +ENTITY DSP IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + nRSTO : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nSRCS : INOUT STD_LOGIC; + nSRBLE : OUT STD_LOGIC; + nSRBHE : OUT STD_LOGIC; + nSRWE : OUT STD_LOGIC; + nSROE : OUT STD_LOGIC; + DSP_INT : OUT STD_LOGIC; + DSP_TA : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0); + IO : INOUT STD_LOGIC_VECTOR(17 downto 0); + SRD : INOUT STD_LOGIC_VECTOR(15 downto 0) + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END DSP; + + +-- Architecture Body + +ARCHITECTURE DSP_architecture OF DSP IS + + +BEGIN + nSRCS <= '0' when nFB_CS2 = '0' and FB_ADR(27 downto 24) = x"4" else '1'; --nFB_CS3; + nSRBHE <= '0' when FB_ADR(0 downto 0) = "0" else '1'; + nSRBLE <= '1' when FB_ADR(0 downto 0) = "0" and FB_SIZE1 = '0' and FB_SIZE0 = '1' else '0'; + nSRWE <= '0' when nFB_WR = '0' and nSRCS = '0' and MAIN_CLK = '0' else '1'; + nSROE <= '0' when nFB_OE = '0' and nSRCS = '0' else '1'; + DSP_INT <= '0'; + DSP_TA <= '0'; + IO(17 downto 0) <= FB_ADR(18 downto 1); + SRD(15 downto 0) <= FB_AD(31 downto 16) when nFB_WR = '0' and nSRCS = '0' else "ZZZZZZZZZZZZZZZZ"; + FB_AD(31 downto 16) <= SRD(15 downto 0) when nFB_OE = '0' and nSRCS = '0' else "ZZZZZZZZZZZZZZZZ"; + + +END DSP_architecture; diff --git a/FPGA_quartus_GE/DSP/DSP.vhd.bak b/FPGA_quartus_GE/DSP/DSP.vhd.bak new file mode 100644 index 0000000..2d4811a --- /dev/null +++ b/FPGA_quartus_GE/DSP/DSP.vhd.bak @@ -0,0 +1,79 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Tue Sep 08 16:24:57 2009 + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + + +-- Entity Declaration + +ENTITY DSP IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + nRSTO : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nSRCS : OUT STD_LOGIC; + nSRBLE : OUT STD_LOGIC; + nSRBHE : OUT STD_LOGIC; + nSRWE : OUT STD_LOGIC; + nSROE : OUT STD_LOGIC; + DSP_INT : OUT STD_LOGIC; + DSP_TA : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0); + IO : INOUT STD_LOGIC_VECTOR(17 downto 0); + SRD : INOUT STD_LOGIC_VECTOR(15 downto 0) + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END DSP; + + +-- Architecture Body + +ARCHITECTURE DSP_architecture OF DSP IS + + +BEGIN + nSRCS <= '0' when nFB_CS2 = '0' and FB_ADR(27 downto 24) = x"4" else '1'; --nFB_CS3; + nSRBHE <= '0' when FB_ADR(0 downto 0) = "0" else '1'; + nSRBLE <= '1' when FB_ADR(0 downto 0) = "0" and FB_SIZE1 = '0' and FB_SIZE0 = '1' else '0'; + nSRWE <= '0' when nFB_WR = '0' and nSRCS = '0' and MAIN_CLK = '0' else '1'; + nSROE <= '0' when nFB_OE = '0' and nSRCS = '0' else '1'; + DSP_INT <= '0'; + DSP_TA <= '0'; + IO(17 downto 0) <= FB_ADR(18 downto 1); + SRD(15 downto 0) <= FB_AD(31 downto 16) when nFB_WR = '0' and nSRCS = '0' else "ZZZZZZZZZZZZZZZZ"; + FB_AD(31 downto 16) <= SRD(15 downto 0) when nFB_OE = '0' and nSRCS = '0' else "ZZZZZZZZZZZZZZZZ"; + + +END DSP_architecture; diff --git a/FPGA_quartus_GE/DSP/dsp56k.zip b/FPGA_quartus_GE/DSP/dsp56k.zip new file mode 100644 index 0000000000000000000000000000000000000000..6522299f5635ba5560150e498fbbdf0fde8328f5 GIT binary patch literal 39208 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%0DHs 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 jK{+bOV*50vsqm6_UbnR=_}C~*X)JJ% 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 literal 0 HcmV?d00001 diff --git a/FPGA_quartus_GE/DSP/src/adgen_stage.vhd b/FPGA_quartus_GE/DSP/src/adgen_stage.vhd new file mode 100644 index 0000000..1ff7e59 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/adgen_stage.vhd @@ -0,0 +1,216 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity adgen_stage is port( + activate_adgen : in std_logic; + activate_x_mem : in std_logic; + activate_y_mem : in std_logic; + activate_l_mem : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + optional_ea_word : in std_logic_vector(23 downto 0); + register_file : in register_file_type; + adgen_mode_a : in adgen_mode_type; + adgen_mode_b : in adgen_mode_type; + address_out_x : out unsigned(BW_ADDRESS-1 downto 0); + address_out_y : out unsigned(BW_ADDRESS-1 downto 0); + wr_R_port_A_valid : out std_logic; + wr_R_port_A : out addr_wr_port_type; + wr_R_port_B_valid : out std_logic; + wr_R_port_B : out addr_wr_port_type +); +end entity; + + +architecture rtl of adgen_stage is + + signal address_out_x_int : unsigned(BW_ADDRESS-1 downto 0); + + +begin + + address_out_x <= address_out_x_int; + + address_generator_X: process(activate_adgen, instr_word, register_file, adgen_mode_a) is + variable r_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable n_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable m_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable op1 : unsigned(BW_ADDRESS-1 downto 0); + variable op2 : unsigned(BW_ADDRESS-1 downto 0); + variable addr_mod : unsigned(BW_ADDRESS-1 downto 0); + variable new_r_reg : unsigned(BW_ADDRESS-1 downto 0); + variable new_r_reg_interm : unsigned(BW_ADDRESS-1 downto 0); + variable modulo_bitmask : std_logic_vector(BW_ADDRESS-1 downto 0); + variable bit_set : std_logic; + begin + r_reg_local := register_file.addr_r(to_integer(unsigned(instr_word(10 downto 8)))); + n_reg_local := register_file.addr_n(to_integer(unsigned(instr_word(10 downto 8)))); + m_reg_local := register_file.addr_m(to_integer(unsigned(instr_word(10 downto 8)))); + + -- select the operands for the calculation + case adgen_mode_a is + -- (Rn) - Nn + when POST_MIN_N => addr_mod := unsigned(- signed(n_reg_local)); + -- (Rn) + Nn + when POST_PLUS_N => addr_mod := n_reg_local; + -- (Rn)- + when POST_MIN_1 => addr_mod := (others => '1'); -- -1 + -- (Rn)+ + when POST_PLUS_1 => addr_mod := to_unsigned(1, BW_ADDRESS); + -- (Rn) + when NOP => addr_mod := (others => '0'); + -- (Rn + Nn) + when INDEXED_N => addr_mod := n_reg_local; + -- -(Rn) + when PRE_MIN_1 => addr_mod := (others => '1'); -- - 1 + -- absolute address (appended to instruction word) + when ABSOLUTE => addr_mod := (others => '0'); + when IMMEDIATE => addr_mod := (others => '0'); + end case; + + op1 := r_reg_local; + op2 := addr_mod; + -- linear addressing + if m_reg_local = 2**BW_ADDRESS-1 then + op1 := r_reg_local; + op2 := addr_mod; + -- bit reverse operation + elsif m_reg_local = 0 then + -- reverse the input to the adder bit wise + -- so we just need to use a single adder + for i in 0 to BW_ADDRESS-1 loop + op1(BW_ADDRESS - 1 - i) := r_reg_local(i); + op2(BW_ADDRESS - 1 - i) := addr_mod(i); + end loop; + -- modulo arithmetic + else + bit_set := '0'; + for i in BW_ADDRESS-1 downto 0 loop + if m_reg_local(i) = '1' then + bit_set := '1'; + end if; + if bit_set = '1' then + modulo_bitmask(i) := '0'; + else + modulo_bitmask(i) := '1'; + end if; + end loop; + end if; + + new_r_reg_interm := op1 + op2; + + new_r_reg := new_r_reg_interm; + -- linear addressing + if m_reg_local = 2**BW_ADDRESS-1 then + new_r_reg := new_r_reg_interm; + -- bit reverse operation + elsif m_reg_local = 0 then + for i in 0 to BW_ADDRESS-1 loop + new_r_reg(BW_ADDRESS - 1 - i) := new_r_reg_interm(i); + end loop; + else + + end if; + + -- store the updated register in the global register file + -- do not store when we do nothing or there is nothing to update + -- LUA instructions DO NOT UPDATE the source register!! + if (adgen_mode_a = NOP or adgen_mode_a = ABSOLUTE or adgen_mode_a = IMMEDIATE or instr_array = INSTR_LUA) then + wr_R_port_A_valid <= '0'; + else + wr_R_port_A_valid <= '1'; + end if; + wr_R_port_A.reg_number <= unsigned(instr_word(10 downto 8)); + wr_R_port_A.reg_value <= new_r_reg; + + -- select the output of the AGU + case adgen_mode_a is + -- (Rn) - Nn + when POST_MIN_N => address_out_x_int <= r_reg_local; + -- (Rn) + Nn + when POST_PLUS_N => address_out_x_int <= r_reg_local; + -- (Rn)- + when POST_MIN_1 => address_out_x_int <= r_reg_local; + -- (Rn)+ + when POST_PLUS_1 => address_out_x_int <= r_reg_local; + -- (Rn) + when NOP => address_out_x_int <= r_reg_local; + -- (Rn + Nn) + when INDEXED_N => address_out_x_int <= new_r_reg; + -- -(Rn) + when PRE_MIN_1 => address_out_x_int <= new_r_reg; + -- absolute address (appended to instruction word) + when ABSOLUTE => address_out_x_int <= unsigned(optional_ea_word(BW_ADDRESS-1 downto 0)); + when IMMEDIATE => address_out_x_int <= r_reg_local; -- Done externally, value never used + end case; + -- LUA instructions only use the updated address! + if instr_array = INSTR_LUA then + address_out_x_int <= new_r_reg; + end if; + + end process address_generator_X; + + address_generator_Y: process(activate_adgen, activate_x_mem, activate_y_mem, activate_l_mem, instr_word, + register_file, adgen_mode_b, address_out_x_int) is + variable r_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable n_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable m_reg_local : unsigned(BW_ADDRESS-1 downto 0); + variable op2 : unsigned(BW_ADDRESS-1 downto 0); + variable new_r_reg : unsigned(BW_ADDRESS-1 downto 0); + begin + r_reg_local := register_file.addr_r(to_integer(unsigned((not instr_word(10)) & instr_word(14 downto 13)))); + n_reg_local := register_file.addr_n(to_integer(unsigned((not instr_word(10)) & instr_word(14 downto 13)))); + m_reg_local := register_file.addr_m(to_integer(unsigned((not instr_word(10)) & instr_word(14 downto 13)))); + + -- select the operands for the calculation + case adgen_mode_b is + -- (Rn) + Nn + when POST_PLUS_N => op2 := n_reg_local; + -- (Rn)- + when POST_MIN_1 => op2 := (others => '1'); -- -1 + -- (Rn)+ + when POST_PLUS_1 => op2 := to_unsigned(1, BW_ADDRESS); + -- (Rn) + when others => op2 := (others => '0'); + end case; + + new_r_reg := r_reg_local + op2; + -- TODO: USE modifier register! + + -- store the updated register in the global register file + -- do not store when we do nothing or there is nothing to update + if adgen_mode_b = NOP then + wr_R_port_B_valid <= '0'; + else + wr_R_port_B_valid <= '1'; + end if; + wr_R_port_B.reg_number <= unsigned((not instr_word(10)) & instr_word(14 downto 13)); + wr_R_port_B.reg_value <= new_r_reg; + + -- the address for the y memory is calculated in the first AGU if the x memory is not accessed! + -- so use the other output as address output for the y memory! + -- Furthermore, use the same address for L memory accesses (X and Y memory access the same address!) + if (activate_y_mem = '1' and activate_x_mem = '0') or activate_l_mem = '1' then + address_out_y <= address_out_x_int; + -- in any other case use the locally computed value + else + -- select the output of the AGU + case adgen_mode_b is + -- (Rn) + Nn + when POST_PLUS_N => address_out_y <= r_reg_local; + -- (Rn)- + when POST_MIN_1 => address_out_y <= r_reg_local; + -- (Rn)+ + when POST_PLUS_1 => address_out_y <= r_reg_local; + -- (Rn) + when others => address_out_y <= r_reg_local; + end case; + end if; + end process address_generator_Y; + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/constants_pkg.vhd b/FPGA_quartus_GE/DSP/src/constants_pkg.vhd new file mode 100644 index 0000000..4b8122d --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/constants_pkg.vhd @@ -0,0 +1,62 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; + + +package constants_pkg is + + ------------------------- + -- Flags in CCR register + ------------------------- + constant C_FLAG : natural := 0; + constant V_FLAG : natural := 1; + constant Z_FLAG : natural := 2; + constant N_FLAG : natural := 3; + constant U_FLAG : natural := 4; + constant E_FLAG : natural := 5; + constant L_FLAG : natural := 6; + constant S_FLAG : natural := 7; + + ------------------- + -- Pipeline stages + ------------------- + constant ST_FETCH : natural := 0; + constant ST_FETCH2 : natural := 1; + constant ST_DECODE : natural := 2; + constant ST_ADGEN : natural := 3; + constant ST_EXEC : natural := 4; + + ---------------------- + -- Activation signals + ---------------------- + constant ACT_ADGEN : natural := 0; -- Run the address generator + constant ACT_ALU : natural := 1; -- Activation of ALU results in modification of the status register + constant ACT_EXEC_BRA : natural := 2; -- Branch (in execute stage) + constant ACT_EXEC_CR_MOD : natural := 3; -- Control Register Modification (in execute stage) + constant ACT_EXEC_LOOP : natural := 4; -- Loop instruction (REP, DO) + constant ACT_X_MEM_RD : natural := 5; -- Init read from X memory + constant ACT_Y_MEM_RD : natural := 6; -- Init read from Y memory + constant ACT_P_MEM_RD : natural := 7; -- Init read from P memory + constant ACT_X_MEM_WR : natural := 8; -- Init write to X memory + constant ACT_Y_MEM_WR : natural := 9; -- Init write to Y memory + constant ACT_P_MEM_WR : natural := 10; -- Init write to P memory + constant ACT_REG_RD : natural := 11; -- Read from register (6 bit addressing) + constant ACT_REG_WR : natural := 12; -- Write to register (6 bit addressing) + constant ACT_IMM_8BIT : natural := 13; -- 8 bit immediate operand (in instruction word) + constant ACT_IMM_12BIT : natural := 14; -- 12 bit immediate operand (in instruction word) + constant ACT_IMM_LONG : natural := 15; -- 24 bit immediate operant (in optional instruction word) + constant ACT_X_BUS_RD : natural := 16; -- Read data via X-bus (from x0,x1,a,b) + constant ACT_X_BUS_WR : natural := 17; -- Write data via X-bus (to x0,x1,a,b) + constant ACT_Y_BUS_RD : natural := 18; -- Read data via Y-bus (from y0,y1,a,b) + constant ACT_Y_BUS_WR : natural := 19; -- Write data via Y-bus (to y0,y1,a,b) + constant ACT_L_BUS_RD : natural := 20; -- Read data via L-bus (from a10, b10,x,y,a,b,ab,ba) + constant ACT_L_BUS_WR : natural := 21; -- Write data via L-bus (to a10, b10,x,y,a,b,ab,ba) + constant ACT_BIT_MOD_WR : natural := 22; -- Bit modify write (to set for BSET, BCLR, BCHG) + constant ACT_REG_WR_CC : natural := 23; -- Write to register file conditionally (Tcc) + constant ACT_ALU_WR_CC : natural := 24; -- Write ALU result conditionally (Tcc) + constant ACT_NORM : natural := 25; -- NORM instruction needs special handling + +end package constants_pkg; diff --git a/FPGA_quartus_GE/DSP/src/decode_stage.vhd b/FPGA_quartus_GE/DSP/src/decode_stage.vhd new file mode 100644 index 0000000..0c62149 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/decode_stage.vhd @@ -0,0 +1,1221 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity decode_stage is port( + activate_dec : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + dble_word_instr : out std_logic; + instr_array : out instructions_type; + act_array : out std_logic_vector(NUM_ACT_SIGNALS-1 downto 0); + reg_wr_addr : out std_logic_vector(5 downto 0); + reg_rd_addr : out std_logic_vector(5 downto 0); + x_bus_rd_addr : out std_logic_vector(1 downto 0); + x_bus_wr_addr : out std_logic_vector(1 downto 0); + y_bus_rd_addr : out std_logic_vector(1 downto 0); + y_bus_wr_addr : out std_logic_vector(1 downto 0); + l_bus_addr : out std_logic_vector(2 downto 0); + adgen_mode_a : out adgen_mode_type; + adgen_mode_b : out adgen_mode_type; + alu_ctrl : out alu_ctrl_type +); +end entity; + + +architecture rtl of decode_stage is + + signal instr_array_int : instructions_type; +-- signal activate_pm_int : std_logic; + type adgen_bittype_type is (NOP, SINGLE_X, SINGLE_X_SHORT, DOUBLE_X_Y); + -- SINGLE_X : MMMRRR + -- SINGLE_X_SHORT : MMRRR + -- DOUBLE_X_Y : mmrrMMRRR + signal adgen_bittype : adgen_bittype_type; + + signal ea_extension_available : std_logic; + + signal alu_tcc_decoded : std_logic; + signal alu_div_decoded : std_logic; + signal alu_norm_decoded : std_logic; + +begin + + + -- output the decoded instruction + instr_array <= instr_array_int; + + -- calculate whether this is a double word instruction + dble_word_instr <= '1' when ea_extension_available = '1' or + instr_array_int = INSTR_DO or + instr_array_int = INSTR_JCLR or + instr_array_int = INSTR_JSCLR or + instr_array_int = INSTR_JSET or + instr_array_int = INSTR_JSSET else + '0'; + + alu_instruction_decoder: process(instr_word, activate_dec, alu_tcc_decoded, + alu_div_decoded, alu_norm_decoded) is + variable instr_word_var : std_logic_vector(23 downto 0); + begin + if activate_dec = '1' then + instr_word_var := instr_word; + else + instr_word_var := (others => '0'); + end if; + + alu_ctrl.mul_op1 <= (others => '0'); + alu_ctrl.mul_op2 <= (others => '0'); + alu_ctrl.rotate <= '0'; + alu_ctrl.div_instr <= '0'; + alu_ctrl.norm_instr <= '0'; + alu_ctrl.shift_src <= '0'; + alu_ctrl.shift_src_sign <= (others => '0'); + alu_ctrl.shift_mode <= ZEROS; + alu_ctrl.add_src_stage_1 <= (others => '0'); + alu_ctrl.add_src_stage_2 <= (others => '0'); + alu_ctrl.add_src_sign <= (others => '0'); + alu_ctrl.logic_function <= (others => '0'); + alu_ctrl.word_24_update <= '0'; + alu_ctrl.rounding_used <= (others => '0'); + alu_ctrl.store_result <= '0'; + for i in 0 to 7 loop -- by default do not touch any of the ccr flags (L;E;U;N;Z;V;C) + alu_ctrl.ccr_flags_ctrl(i) <= DONT_TOUCH; + end loop; + alu_ctrl.dst_accu <= instr_word_var(3); -- default value for all alu operations + + -- check wether instruction that allows parallel moves + -- has to be decoded, then it is an ALU operation in the 8 LSBs + -- Only exceptions are DIV, NORM, and Tcc + if instr_word_var(23 downto 20) /= "0000" then + -- ABS + if instr_word_var(7 downto 4) = "0010" and instr_word_var(2 downto 0) = "110" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- source/dst are the same register + alu_ctrl.shift_src_sign <= "10"; -- the sign of the operand depends on the operand + -- negative operand will negate the content of the accu as + -- needed by the ABS instruction + alu_ctrl.add_src_stage_2 <= "00"; -- select zero + alu_ctrl.store_result <= '1'; -- store the result + -- set all flags but carry + for i in 1 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ADC + if instr_word_var(7 downto 5) = "001" and instr_word_var(2 downto 0) = "001" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_1 <= "01" & instr_word_var(4); -- X or Y + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "10"; -- add carry to result of addition + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ADD + if instr_word_var(7) = '0' and instr_word_var(2 downto 0) = "000" and instr_word_var(6 downto 4) /= "000" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ADDL + if instr_word_var(7 downto 4) = "0001" and instr_word_var(2 downto 0) = "010" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_LEFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) (here: A,B) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ADDR + if instr_word_var(7 downto 4) = "0000" and instr_word_var(2 downto 0) = "010" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_RIGHT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 5) & '1'; -- source register (JJJ encoding) (here: A,B) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- AND / OR / EOR + if instr_word_var(7 downto 6) = "01" and (instr_word_var(2 downto 0) = "110" or -- and + instr_word_var(2 downto 0) = "010" or -- or + instr_word_var(2 downto 0) = "011") then -- eor + alu_ctrl.logic_function <= instr_word_var(2 downto 0); -- 000: none, 110: and, 010: or, 011: eor, 111: not + alu_ctrl.word_24_update <= '1'; -- only accumulator bits 47 downto 24 affected? + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) (here: A,B) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set following flags + alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; + end if; + -- ASL + if instr_word_var(7 downto 4) = "0011" and instr_word_var(2 downto 0) = "010" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_LEFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as operand + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ASR + if instr_word_var(7 downto 4) = "0010" and instr_word_var(2 downto 0) = "010" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_RIGHT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as operand + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set following flags +-- alu_ctrl.ccr_flags_ctrl(S_FLAG) <= MODIFY; +-- alu_ctrl.ccr_flags_ctrl(E_FLAG) <= MODIFY; +-- alu_ctrl.ccr_flags_ctrl(U_FLAG) <= MODIFY; +-- alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; +-- alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; +-- alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; +-- alu_ctrl.ccr_flags_ctrl(C_FLAG) <= MODIFY; + -- set all flags, V-flag will be cleared due to shifting + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- CLR + if instr_word_var(7 downto 4) = "0001" and instr_word_var(2 downto 0) = "011" then + -- Read accu + alu_ctrl.shift_mode <= ZEROS; + -- Read S + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as operand + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set following flags + alu_ctrl.ccr_flags_ctrl(S_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(E_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(U_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; + end if; + -- CMP + if instr_word_var(7) = '0' and instr_word_var(6 downto 5) /= "01" and + instr_word_var(2 downto 0) = "101" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + if instr_word_var(6) = '1' then + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) x0,x1,y0,y1 + else + alu_ctrl.add_src_stage_1 <= "001"; -- select opposite accu (JJJ encoding) + end if; + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.store_result <= '0'; -- do not store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- CMPM + if instr_word_var(7) = '0' and instr_word_var(6 downto 5) /= "01" and + instr_word_var(2 downto 0) = "111" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "10"; -- with the sign dependant sign (magnitude!) + -- Read S + if instr_word_var(6) = '1' then + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) x0,x1,y0,y1 + else + alu_ctrl.add_src_stage_1 <= "001"; -- select opposite accu (JJJ encoding) + end if; + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "10"; -- with sign dependant sign (magnitude!) + alu_ctrl.store_result <= '0'; -- do not store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- LSL + if instr_word_var(7 downto 4) = "0011" and instr_word_var(2 downto 0) = "011" then + alu_ctrl.word_24_update <= '1'; + -- Read accu + alu_ctrl.shift_mode <= SHIFT_LEFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as second operand + -- set N,Z,V,C flags + for i in 0 to 3 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- LSR + if instr_word_var(7 downto 4) = "0010" and instr_word_var(2 downto 0) = "011" then + alu_ctrl.word_24_update <= '1'; + -- Read accu + alu_ctrl.shift_mode <= SHIFT_RIGHT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as second operand + -- set N,Z,V,C flags + for i in 0 to 3 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- MPY, MPYR, MAC, MACR + if instr_word_var(7) = '1' then + case instr_word_var(6 downto 4) is + when "000" => alu_ctrl.mul_op1 <= "00"; alu_ctrl.mul_op2 <= "00"; -- x0,x0 + when "001" => alu_ctrl.mul_op1 <= "10"; alu_ctrl.mul_op2 <= "10"; -- y0,y0 + when "010" => alu_ctrl.mul_op1 <= "01"; alu_ctrl.mul_op2 <= "00"; -- x1,x0 + when "011" => alu_ctrl.mul_op1 <= "11"; alu_ctrl.mul_op2 <= "10"; -- y1,y0 + when "100" => alu_ctrl.mul_op1 <= "00"; alu_ctrl.mul_op2 <= "11"; -- x0,y1 + when "101" => alu_ctrl.mul_op1 <= "10"; alu_ctrl.mul_op2 <= "00"; -- y0,x0 + when "110" => alu_ctrl.mul_op1 <= "01"; alu_ctrl.mul_op2 <= "10"; -- x1,y0 + when others => alu_ctrl.mul_op1 <= "11"; alu_ctrl.mul_op2 <= "01"; -- y1,x1 + end case; + alu_ctrl.store_result <= '1'; -- store result in accu + alu_ctrl.add_src_stage_2 <= "10"; -- select mul out for adder! + alu_ctrl.add_src_sign <= '0' & instr_word_var(2); -- select +/- + alu_ctrl.rounding_used <= '0' & instr_word_var(0); -- rounding is determined by that bit! + if instr_word_var(1) = '0' then -- MPY(R) + alu_ctrl.shift_mode <= ZEROS; + else -- MAC(R) + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + end if; + -- set all flags but carry! + for i in 1 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- NEG + if instr_word_var(7 downto 4) = "0011" and instr_word_var(2 downto 0) = "110" then + -- Read accu + alu_ctrl.shift_mode <= ZEROS; +-- alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to +-- alu_ctrl.shift_src_sign <= "01"; -- with negative sign + -- Read Accu + alu_ctrl.add_src_stage_1 <= "000"; -- source register equal to dst_register + alu_ctrl.add_src_stage_2 <= "01"; -- select register as operand + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags but carry! + for i in 1 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- NOT + if instr_word_var(7 downto 4) = "0001" and instr_word_var(2 downto 0) = "111" then + alu_ctrl.word_24_update <= '1'; + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.logic_function <= instr_word_var(2 downto 0); -- select not operation + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set following flags + alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; + end if; + -- RND + if instr_word_var(7 downto 4) = "0001" and instr_word_var(2 downto 0) = "001" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "01"; -- normal rounding needed + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as second operand + -- set all flags but carry! + for i in 1 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- ROL + if instr_word_var(7 downto 4) = "0011" and instr_word_var(2 downto 0) = "111" then + alu_ctrl.word_24_update <= '1'; + alu_ctrl.rotate <= '1'; + -- Read accu + alu_ctrl.shift_mode <= SHIFT_LEFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as second operand + -- set the following flags + alu_ctrl.ccr_flags_ctrl(C_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; + alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; + end if; + -- ROR + if instr_word_var(7 downto 4) = "0010" and instr_word_var(2 downto 0) = "111" then + alu_ctrl.word_24_update <= '1'; + alu_ctrl.rotate <= '1'; + -- Read accu + alu_ctrl.shift_mode <= SHIFT_RIGHT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as second operand + -- set the following flags + alu_ctrl.ccr_flags_ctrl(C_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= CLEAR; + alu_ctrl.ccr_flags_ctrl(Z_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(N_FLAG) <= MODIFY; + end if; + -- SBC + if instr_word_var(7 downto 5) = "001" and instr_word_var(2 downto 0) = "101" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) X,Y + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.rounding_used <= "11"; -- subtract carry + alu_ctrl.store_result <= '1'; -- store the result + -- set all flags! + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- SUB + if instr_word_var(7) = '0' and instr_word_var(2 downto 0) = "100" then + -- Read accu + alu_ctrl.shift_mode <= NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.store_result <= '1'; -- store the result + -- set all flags! + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- SUBL + if instr_word_var(7 downto 4) = "0001" and instr_word_var(2 downto 0) = "110" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_LEFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.store_result <= '1'; -- store the result + -- set all flags! + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- SUBR + if instr_word_var(7 downto 4) = "0000" and instr_word_var(2 downto 0) = "110" then + -- Read accu + alu_ctrl.shift_mode <= SHIFT_RIGHT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with normal sign + -- Read S + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 5) & '1'; -- source register (JJJ encoding) + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "01"; -- with negative sign + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.store_result <= '1'; -- store the result + -- set all flags! + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + -- TFR + if instr_word_var(7) = '0' and instr_word_var(6 downto 5) /= "01" and + instr_word_var(6 downto 4) /= "001" and instr_word_var(2 downto 0) = "001" then + -- do not read accu + alu_ctrl.shift_mode <= ZEROS; + -- Read S + if instr_word_var(6) = '1' then + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + else + alu_ctrl.add_src_stage_1 <= "001"; -- B,A or A,B (depending on dest. accu) + end if; + alu_ctrl.add_src_stage_2 <= "01"; -- select the register source + alu_ctrl.add_src_sign <= "00"; -- with positive sign + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.store_result <= '1'; -- store the result + -- do not set any flag at all! + end if; + -- TST + if instr_word_var(7 downto 4) = "0000" and instr_word_var(2 downto 0) = "011" then + -- do not read accu + alu_ctrl.shift_mode <= NO_SHIFT; -- no shift + alu_ctrl.shift_src <= instr_word_var(3); -- read source accu + alu_ctrl.shift_src_sign <= "00"; -- sign unchanged + -- Read S + alu_ctrl.add_src_stage_2 <= "00"; -- select zero + alu_ctrl.add_src_sign <= "00"; -- with positive sign + alu_ctrl.rounding_used <= "00"; -- no rounding needed + alu_ctrl.store_result <= '0'; -- do not store the result + -- set all flags but carry! + for i in 1 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + end if; + end if; -- Parallel move ALU instructions + + -- Tcc + if alu_tcc_decoded = '1' then + -- Read source + if instr_word_var(6) = '1' then + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + else + alu_ctrl.add_src_stage_1 <= "001"; -- B,A or A,B (depending on dest. accu) + end if; + alu_ctrl.add_src_stage_2 <= "01"; -- select the registers as source + -- The .store_result flag is generated in the execute stage + -- depending on the condition codes + -- do not set any flag at all! + end if; +--mul_op1 : std_logic_vector(1 downto 0); -- x0,x1,y0,y1 +--mul_op2 : std_logic_vector(1 downto 0); -- x0,x1,y0,y1 +--shift_src : std_logic; -- a,b +--shift_src_sign : std_logic_vector(1 downto 0); -- 00: pos, 01: neg, 10: sign dependant, 11: reserved +--shift_mode : alu_shift_mode; +--add_src_stage_1 : std_logic_vector(2 downto 0); -- x0,x1,y0,y1,x,y,a,b +--add_src_stage_2 : std_logic_vector(1 downto 0); -- 00: 0 , 01: add_src_1, 10: mul_result, 11: reserved +--add_src_sign : std_logic_vector(1 downto 0); -- 00: pos, 01: neg, 10: sign dependant, 11: div instruction! +--logic_function : std_logic_vector(2 downto 0); -- 000: none, 110: and, 010: or, 011: eor, 111: not +--word_24_update : std_logic; -- only accumulator bits 47 downto 24 affected? +--rounding_used : std_logic_vector(1 downto 0); -- 00: no rounding, 01: rounding, 10: add carry, 11: subtract carry +--store_result : std_logic; -- 0: do not update accumulator, 1: update accumulator +--dst_accu : std_logic; -- 0: a, 1: b + -- DIV + if alu_div_decoded = '1' then + alu_ctrl.store_result <= '1'; -- do store the result + -- shifter operation + alu_ctrl.shift_mode <= SHIFT_LEFT; -- shift left + alu_ctrl.shift_src <= instr_word_var(3); -- read source accu + alu_ctrl.div_instr <= '1'; -- this is THE div instruction, special handling needed + -- source operand loading + alu_ctrl.add_src_stage_1 <= instr_word_var(6 downto 4); -- source register (JJJ encoding) + alu_ctrl.add_src_stage_2 <= "01"; -- select the registers as source + alu_ctrl.add_src_sign <= "11"; -- div instruction, sign dependant on D[55] XOR S[23] + -- if 1: positive, if 0: negative + alu_ctrl.ccr_flags_ctrl(C_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(V_FLAG) <= MODIFY; + alu_ctrl.ccr_flags_ctrl(L_FLAG) <= MODIFY; + end if; + -- NORM + if alu_norm_decoded = '1' then + -- set all alu-ctrl signals to ASL/ASR already here + -- depending on the condition code registers the flags + -- will be completed in the execute stage + alu_ctrl.norm_instr <= '1'; + -- Read accu + --alu_ctrl.shift_mode <= SHIFT_RIGHT/SHIFT_LEFT/NO_SHIFT; + alu_ctrl.shift_src <= instr_word_var(3); -- accumulate to the same register we want to write to + alu_ctrl.shift_src_sign <= "00"; -- with the original sign + -- Read S + alu_ctrl.add_src_stage_2 <= "00"; -- select zero as operand + alu_ctrl.add_src_sign <= "00"; -- with original sign + alu_ctrl.store_result <= '1'; -- store the result + alu_ctrl.rounding_used <= "00"; -- no rounding needed + -- set all flags, V-flag will be cleared due to shifting + for i in 0 to 7 loop + alu_ctrl.ccr_flags_ctrl(i) <= MODIFY; + end loop; + + end if; + end process; + + + instruction_decoder: process(instr_word, activate_dec) is + variable instr_word_var : std_logic_vector(23 downto 0); + procedure activate_AGU is + begin + -- check for immediate long addressing + if instr_word_var(13 downto 8) = "110100" then + act_array(ACT_IMM_LONG) <= '1'; + act_array(ACT_X_MEM_RD) <= '0'; -- No memory accesses for Immediate addressing! + act_array(ACT_Y_MEM_RD) <= '0'; + act_array(ACT_X_MEM_WR) <= '0'; + act_array(ACT_Y_MEM_WR) <= '0'; + else + act_array(ACT_ADGEN) <= '1'; + end if; + end procedure activate_AGU; + begin + instr_array_int <= INSTR_NOP; + act_array <= (others => '0'); + adgen_bittype <= NOP; + reg_rd_addr <= (others => '0'); + reg_wr_addr <= (others => '0'); + x_bus_rd_addr <= (others => '0'); + x_bus_wr_addr <= (others => '0'); + y_bus_rd_addr <= (others => '0'); + y_bus_wr_addr <= (others => '0'); + l_bus_addr <= instr_word_var(19) & instr_word_var(17 downto 16); + + alu_tcc_decoded <= '0'; + alu_div_decoded <= '0'; + alu_norm_decoded <= '0'; + + -- in case the decoding is not activated we insert a nop + if activate_dec = '1' then + instr_word_var := instr_word; + else + instr_word_var := (others => '0'); + end if; + + if instr_word_var(23 downto 16) = X"00" then + case instr_word_var(15 downto 0) is + when X"0000" => instr_array_int <= INSTR_NOP; + when X"0004" => instr_array_int <= INSTR_RTI; act_array(ACT_EXEC_BRA) <= '1'; + when X"0005" => instr_array_int <= INSTR_ILLEGAL; + when X"0006" => instr_array_int <= INSTR_SWI; + when X"000C" => instr_array_int <= INSTR_RTS; act_array(ACT_EXEC_BRA) <= '1'; + when X"0084" => instr_array_int <= INSTR_RESET; + when X"0086" => instr_array_int <= INSTR_WAIT; + when X"0087" => instr_array_int <= INSTR_STOP; + when X"008C" => instr_array_int <= INSTR_ENDDO; + act_array(ACT_EXEC_LOOP) <= '1'; + when others => + act_array(ACT_EXEC_CR_MOD) <= '1'; -- modify control register + if instr_word_var(7 downto 2) = "101110" then + instr_array_int <= INSTR_ANDI; + elsif instr_word_var(7 downto 2) = "111110" then + instr_array_int <= INSTR_ORI; + end if; + end case; + end if; + --------------------------------------------------------- + -- DIV and NORM + --------------------------------------------------------- + if instr_word_var(23 downto 16) = X"01" then + -- DIV + if instr_word_var(15 downto 6) = "1000000001" and instr_word_var(2 downto 0) = "000" then + alu_div_decoded <= '1'; + act_array(ACT_ALU) <= '1'; -- force ALU to update status register + end if; + -- NORM + if instr_word_var(15 downto 11) = "11011" and instr_word_var(7 downto 4) = "0001" and + instr_word_var(2 downto 0) = "101" then + alu_norm_decoded <= '1'; + act_array(ACT_NORM) <= '1'; -- NORM instruction decoded, + -- special handling in exec-stage is caused + act_array(ACT_REG_RD) <= '1'; + reg_rd_addr <= instr_word_var(13 downto 12) & '0' & instr_word_var(10 downto 8); -- Write same Rn + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= instr_word_var(13 downto 12) & '0' & instr_word_var(10 downto 8); -- Write same Rn + end if; + end if; + --------------------------------------------------------- + -- Tcc + --------------------------------------------------------- + if instr_word_var(23 downto 16) = X"02" or instr_word_var(23 downto 16) = X"03" then + -- Tcc S1, D1 S2, D2 (ALU/Reg file) + if instr_word_var(16) = '0' and instr_word_var(11 downto 7) = "00000" and + instr_word_var(2 downto 0) = "000" then + act_array(ACT_ALU_WR_CC) <= '1'; + alu_tcc_decoded <= '1'; + -- Tcc S1, D1 S2, D2 (ALU/Reg file) + elsif instr_word_var(16) = '1' and instr_word_var(11) = '0' and + instr_word_var(7) = '0' then + act_array(ACT_ALU_WR_CC) <= '1'; + alu_tcc_decoded <= '1'; + act_array(ACT_REG_WR_CC) <= '1'; + reg_rd_addr <= "010" & instr_word_var(10 downto 8); -- Read Rn + reg_wr_addr <= "010" & instr_word_var( 2 downto 0); -- Write to other Rn + end if; + end if; + --------------------------------------------------------- + -- MOVEC and LUA instruction with registers + --------------------------------------------------------- + if instr_word_var(23 downto 16) = X"04" then + act_array(ACT_REG_WR) <= '1'; + -- LUA instruction + if instr_word_var(15 downto 13) = "010" and instr_word_var(7 downto 4) = "0001" then + instr_array_int <= INSTR_LUA; + act_array(ACT_ADGEN) <= '1'; + adgen_bittype <= SINGLE_X_SHORT; + reg_wr_addr <= instr_word_var(5 downto 0); + end if; + -- MOVEC instruction (S1, D2) or (S2, D1) + if instr_word_var(14) = '1' and instr_word_var(7 downto 5) = "101" then + instr_array_int <= INSTR_MOVEC; + act_array(ACT_REG_RD) <= '1'; + -- Write D1 + if instr_word_var(15) = '1' then + reg_wr_addr <= instr_word_var(5 downto 0); + reg_rd_addr <= instr_word_var(13 downto 8); + -- Read S1 + else + reg_wr_addr <= instr_word_var(13 downto 8); + reg_rd_addr <= instr_word_var(5 downto 0); + end if; + end if; + end if; + ------------------------------------------------------------------------- + -- MOVEC instruction with memory access/absolute address + ------------------------------------------------------------------------- + if instr_word_var(23 downto 16) = X"05" and + instr_word_var(7) = '0' and instr_word_var(5) = '1' then + + instr_array_int <= INSTR_MOVEC; + -- read from memory, write to register + if instr_word_var(15) = '1' then + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= instr_word_var(5 downto 0); + -- X Memory read? + if instr_word_var(6) = '0' then + act_array(ACT_X_MEM_RD) <= '1'; + -- Y Memory read? + else + act_array(ACT_Y_MEM_RD) <= '1'; + end if; + -- write to memory, read register + else + act_array(ACT_REG_RD) <= '1'; + reg_rd_addr <= instr_word_var(5 downto 0); + -- X Memory write? + if instr_word_var(6) = '0' then + act_array(ACT_X_MEM_WR) <= '1'; + -- Y Memory write? + else + act_array(ACT_Y_MEM_WR) <= '1'; + end if; + end if; + -- AGU needed? + if instr_word_var(14) = '1' then + -- detect whether two word instruction! + adgen_bittype <= SINGLE_X; + -- check for immediate long addressing + if instr_word_var(13 downto 8) = "110100" then + act_array(ACT_IMM_LONG) <= '1'; + act_array(ACT_X_MEM_RD) <= '0'; -- No memory accesses for Immediate addressing! + act_array(ACT_Y_MEM_RD) <= '0'; + act_array(ACT_X_MEM_WR) <= '0'; + act_array(ACT_Y_MEM_WR) <= '0'; + else + act_array(ACT_ADGEN) <= '1'; + end if; + else + -- X:/Y:aa short is done in the adgen-stage automatically + end if; + end if; + ------------------------------------------------------------------------- + -- MOVEC instruction with immediate + ------------------------------------------------------------------------- + if instr_word_var(23 downto 16) = X"05" and instr_word_var(7 downto 5) = "101" then + instr_array_int <= INSTR_MOVEC; + act_array(ACT_IMM_8BIT) <= '1'; + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= instr_word_var(5 downto 0); + end if; + --------------------------------- + -- REP or DO loop? + --------------------------------- + if instr_word_var(23 downto 16) = X"06" then + -- Instruction encoding is the same for both except of this bit + if instr_word_var(5) = '1' then + instr_array_int <= INSTR_REP; + else + instr_array_int <= INSTR_DO; + end if; + act_array(ACT_EXEC_LOOP) <= '1'; + -- Init reading of loop counter from memory + if instr_word_var(15) = '0' and instr_word_var(7) = '0' then + -- X/Y: ea? + if instr_word_var(14) = '1' then + act_array(ACT_ADGEN) <= '1'; + end if; + -- X/Y: aa? + -- Done automatically in the ADGEN stage by testing whether the ADGEN unit activated or not! + -- If not the absolute address stored in the instruction word is used. + ------- + -- only a single memory access is required + adgen_bittype <= SINGLE_X; + -- X/Y as source? + if instr_word_var(6) = '0' then + act_array(ACT_X_MEM_RD) <= '1'; + else + act_array(ACT_Y_MEM_RD) <= '1'; + end if; + elsif instr_word_var(15) = '1' and instr_word_var(7) = '0' then + -- S (register as source) + reg_rd_addr <= instr_word_var(13 downto 8); + act_array(ACT_REG_RD) <= '1'; + -- #xxx ,12 bit immediate + elsif instr_word_var(7 downto 6) = "10" and instr_word_var(4) = '0' then + act_array(ACT_IMM_12BIT) <= '1'; + end if; + end if; + -------------------------------- + -- MOVEM (Program memory move) + -------------------------------- + if instr_word_var(23 downto 16) = X"07" then + -- read memory, write reg + if instr_word_var(15) = '1' then + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= instr_word_var(5 downto 0); + act_array(ACT_P_MEM_RD) <= '1'; + -- read reg, write memory + elsif instr_word_var(15) = '0' then + act_array(ACT_REG_RD) <= '1'; + reg_rd_addr <= instr_word_var(5 downto 0); + act_array(ACT_P_MEM_WR) <= '1'; + end if; + -- AGU needed? + if instr_word_var(14) = '1' and instr_word_var(7 downto 6) = "10" then + adgen_bittype <= SINGLE_X; + -- activate AGU and test whether immediate data is used + activate_AGU; + elsif instr_word_var(14) = '0' and instr_word_var(7 downto 6) = "00" then + -- X:/Y:aa short is done in the adgen-stage automatically + end if; + end if; + -------------------------------- + -- MOVEP (Peripheral memory move) + -------------------------------- + if instr_word_var(23 downto 16) = "0000100-" then + -- TODO?? Why parallel moves in software model?? + case instr_word_var(15 downto 0) is +-- when "-1------1-------" => instr_array_int(INSTR_MOVEP) <= '1'; +-- when "-1------01------" => instr_array_int(INSTR_MOVEP) <= '1'; +-- when "-1------00------" => instr_array_int(INSTR_MOVEP) <= '1'; + when others => + end case; + end if; + -- BSET, BCLR, BCHG, BTST, JCLR, JSET, JSCLR, JSSET, JMP, JCC, JSCC, JSR + if instr_word_var(23 downto 16) = X"0A" or instr_word_var(23 downto 16) = X"0B" then + + reg_rd_addr <= instr_word_var(13 downto 8); + reg_wr_addr <= instr_word_var(13 downto 8); + + if instr_word_var(16) = '0' then + if instr_word_var(7) = '0' and instr_word_var(5) = '0' then + instr_array_int <= INSTR_BCLR; + elsif instr_word_var(7) = '0' and instr_word_var(5) = '1' then + instr_array_int <= INSTR_BSET; + elsif instr_word_var(7) = '1' and instr_word_var(5) = '0' then + instr_array_int <= INSTR_JCLR; + elsif instr_word_var(7) = '1' and instr_word_var(5) = '1' then + instr_array_int <= INSTR_JSET; + end if; + elsif instr_word_var(16) = '1' then + if instr_word_var(7) = '0' and instr_word_var(5) = '0' then + instr_array_int <= INSTR_BCHG; + elsif instr_word_var(7) = '0' and instr_word_var(5) = '1' then + instr_array_int <= INSTR_BTST; + elsif instr_word_var(7) = '1' and instr_word_var(5) = '0' then + instr_array_int <= INSTR_JSCLR; + elsif instr_word_var(7) = '1' and instr_word_var(5) = '1' then + instr_array_int <= INSTR_JSSET; + end if; + end if; + if instr_word_var(7) = '1' then + act_array(ACT_EXEC_BRA) <= '1'; + end if; + + -- memory access? + if instr_word_var(15) = '0' then + -- X: + if instr_word_var(6) = '0' then + act_array(ACT_X_MEM_RD) <= '1'; + -- if not a jump instruction and not BTST write back the result + if instr_word_var(7) = '0' and not(instr_word_var(16) = '1' and instr_word_var(5) = '1') then + act_array(ACT_X_MEM_WR) <= '1'; + end if; + -- Y: + else + act_array(ACT_Y_MEM_RD) <= '1'; + -- if not a jump instruction and not BTST write back the result + if instr_word_var(7) = '0' and not(instr_word_var(16) = '1' and instr_word_var(5) = '1') then + act_array(ACT_Y_MEM_WR) <= '1'; + end if; + end if; + end if; + + case instr_word_var(15 downto 14) is + -- X:/Y: aa + when "00" => + + -- X:/Y: ea + when "01" => + act_array(ACT_ADGEN) <= '1'; + adgen_bittype <= SINGLE_X; + + -- X:/Y: pp + -- TODO! + when "10" => + + when others => -- "11" + if instr_word_var(7 downto 0) = "10000000" then + -- JMP/JSR ea + act_array(ACT_EXEC_BRA) <= '1'; + act_array(ACT_ADGEN) <= '1'; + adgen_bittype <= SINGLE_X; + if instr_word_var(16) = '0' then + instr_array_int <= INSTR_JMP; + elsif instr_word_var(16) = '1' then + instr_array_int <= INSTR_JSR; + end if; + elsif instr_word_var(7 downto 4) = "1010" then + -- JCC/JSCC ea + act_array(ACT_EXEC_BRA) <= '1'; + act_array(ACT_ADGEN) <= '1'; + adgen_bittype <= SINGLE_X; + if instr_word_var(16) = '0' then + instr_array_int <= INSTR_JCC; + elsif instr_word_var(16) = '1' then + instr_array_int <= INSTR_JSCC; + end if; + -- JSCLR,JSET,JCLR,JSSET,BTST,BCLR,BSET,BCHG S/D + else + act_array(ACT_REG_RD) <= '1'; + -- if not a jump instruction and not BTST write back the result + if instr_word_var(7) = '0' and not(instr_word_var(16) = '1' and instr_word_var(5) = '1') then + act_array(ACT_REG_WR) <= '1'; + end if; + end if; + end case; + end if; + -- JMP xxx (absoulute short) + if instr_word_var(23 downto 16) = X"0C" then + if instr_word_var(15 downto 12) = "0000" then + instr_array_int <= INSTR_JMP; + act_array(ACT_EXEC_BRA) <= '1'; + end if; + end if; + -- JSR xxx (absolute short) + if instr_word_var(23 downto 16) = X"0D" then + if instr_word_var(15 downto 12) = "0000" then + instr_array_int <= INSTR_JSR; + act_array(ACT_EXEC_BRA) <= '1'; + end if; + end if; + -- JCC xxx (absolute short) + if instr_word_var(23 downto 16) = X"0E" then + instr_array_int <= INSTR_JCC; + act_array(ACT_EXEC_BRA) <= '1'; + end if; + -- JSCC xxx (absolute short) + if instr_word_var(23 downto 16) = X"0F" then + instr_array_int <= INSTR_JSCC; + act_array(ACT_EXEC_BRA) <= '1'; + end if; + + ------------------------------------------------ + -- PARALLEL MOVE SECTION!! + ------------------------------------------------ + -- Here are the ALU operations that allow for parallel moves + if instr_word_var(23 downto 20) /= "0000" then + act_array(ACT_ALU) <= '1'; -- force ALU to update status register + end if; + -- PM: I + if instr_word_var(23 downto 21) = "001" and instr_word_var(20 downto 18) /= "000" then + act_array(ACT_IMM_8BIT) <= '1'; + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= '0' & instr_word_var(20 downto 16); + end if; + -- PM: R + if instr_word_var(23 downto 18) = "001000" then + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= '0' & instr_word_var(12 downto 8); + act_array(ACT_REG_RD) <= '1'; + reg_rd_addr <= '0' & instr_word_var(17 downto 13); + end if; + -- PM: U + if instr_word_var(23 downto 13) = "00100000010" then + act_array(ACT_ADGEN) <= '1'; + adgen_bittype <= SINGLE_X_SHORT; + end if; + -- PM: X or PM:Y + if instr_word_var(23 downto 22) = "01" and + -- Check whether L: type parallel move. If so do not enter this branch! + not (instr_word_var(21 downto 20) = "00" and instr_word_var(18) = '0') then + -- read memory, write reg + if instr_word_var(15) = '1' then + act_array(ACT_REG_WR) <= '1'; + reg_wr_addr <= '0' & instr_word_var(21 downto 20) & instr_word_var(18 downto 16); -- TODO: CHECK!! + -- X Memory read? + if instr_word_var(19) = '0' then + act_array(ACT_X_MEM_RD) <= '1'; + -- Y Memory read? + else + act_array(ACT_Y_MEM_RD) <= '1'; + end if; + -- read reg, write memory + elsif instr_word_var(15) = '0' then + act_array(ACT_REG_RD) <= '1'; + reg_rd_addr <= '0' & instr_word_var(21 downto 20) & instr_word_var(18 downto 16); -- TODO: CHECK!! + -- X Memory write? + if instr_word_var(19) = '0' then + act_array(ACT_X_MEM_WR) <= '1'; + -- Y Memory write? + else + act_array(ACT_Y_MEM_WR) <= '1'; + end if; + end if; + -- AGU needed? + if instr_word_var(14) = '1' then + -- detect whether two word instruction! + adgen_bittype <= SINGLE_X; + -- activate AGU and test whether immediate data is used + activate_AGU; + else + -- X:/Y:aa short is done in the adgen-stage automatically + end if; + end if; + -- PM: X:R or R:Y (Class I) + if instr_word_var(23 downto 20) = "0001" then + adgen_bittype <= SINGLE_X; + -- X:R + if instr_word_var(14) = '0' then + x_bus_rd_addr <= instr_word_var(19 downto 18); + x_bus_wr_addr <= instr_word_var(19 downto 18); + y_bus_rd_addr <= '1' & instr_word_var(17); + y_bus_wr_addr <= '0' & instr_word_var(16); -- TODO: Check encoding, manual uses three fs! + -- S2,D2 in any case! + act_array(ACT_Y_BUS_RD) <= '1'; + act_array(ACT_Y_BUS_WR) <= '1'; + -- Write D1? + if instr_word_var(15) = '1' then + act_array(ACT_X_MEM_RD) <= '1'; + act_array(ACT_X_BUS_WR) <= '1'; + else + -- Read S1? + act_array(ACT_X_MEM_WR) <= '1'; + act_array(ACT_X_BUS_RD) <= '1'; + end if; + -- R:Y + elsif instr_word_var(14) = '1' then + x_bus_rd_addr <= '1' & instr_word_var(19); + x_bus_wr_addr <= '0' & instr_word_var(18); + y_bus_rd_addr <= instr_word_var(17 downto 16); + y_bus_wr_addr <= instr_word_var(17 downto 16); + -- S1,D1 in any case! + act_array(ACT_X_BUS_RD) <= '1'; + act_array(ACT_X_BUS_WR) <= '1'; + -- Write D1? + if instr_word_var(15) = '1' then + act_array(ACT_Y_MEM_RD) <= '1'; + act_array(ACT_Y_BUS_WR) <= '1'; + else + -- Read S1? + act_array(ACT_Y_MEM_WR) <= '1'; + act_array(ACT_Y_BUS_RD) <= '1'; + end if; + + end if; + -- detect whether two word instruction! + adgen_bittype <= SINGLE_X; + -- activate AGU and test whether immediate data is used + activate_AGU; + end if; + -- PM: X:R or R:Y (Class II) + if instr_word_var(23 downto 17) = "0000100" and instr_word_var(14) = '0' then + act_array(ACT_REG_RD) <= '1'; + -- X:R + if instr_word_var(15) = '0' then + reg_rd_addr <= "00111" & instr_word_var(16); -- read A or B + act_array(ACT_X_MEM_WR) <= '1'; -- and store it in X memory + x_bus_rd_addr <= "00"; -- read x0 + x_bus_wr_addr <= '1' & instr_word_var(16); -- and write to A or B + act_array(ACT_X_BUS_RD) <= '1'; + act_array(ACT_X_BUS_WR) <= '1'; + -- R:Y + elsif instr_word_var(15) = '1' then + reg_rd_addr <= "00111" & instr_word_var(16); -- read A or B + act_array(ACT_Y_MEM_WR) <= '1'; -- and store it in Y memory + y_bus_rd_addr <= "00"; -- read y0 + y_bus_wr_addr <= '1' & instr_word_var(16); -- and write to A or B + act_array(ACT_Y_BUS_RD) <= '1'; + act_array(ACT_Y_BUS_WR) <= '1'; + end if; + -- detect whether two word instruction! + adgen_bittype <= SINGLE_X; + -- activate AGU and test whether immediate data is used + activate_AGU; + end if; + -- PM: L: + l_bus_addr <= instr_word_var(19) & instr_word_var(17 downto 16); + if instr_word_var(23 downto 20) = "0100" and instr_word_var(18) = '0' then + -- Read S? + if instr_word_var(15) = '0' then + act_array(ACT_L_BUS_RD) <= '1'; + act_array(ACT_X_MEM_WR) <= '1'; + act_array(ACT_Y_MEM_WR) <= '1'; + else -- Write D + act_array(ACT_L_BUS_WR) <= '1'; + act_array(ACT_X_MEM_RD) <= '1'; + act_array(ACT_Y_MEM_RD) <= '1'; + end if; + if instr_word_var(14) = '1' then + adgen_bittype <= SINGLE_X; + activate_AGU; + else + -- L:aa automatically performed in ADGEN stage + end if; + end if; + -- PM: X: Y: + if instr_word_var(23) = '1' then + adgen_bittype <= DOUBLE_X_Y; + -- No immediate value allowed, so activate in any case! + act_array(ACT_ADGEN) <= '1'; + -- S1, X: + if instr_word_var(15) = '0' then + act_array(ACT_X_BUS_RD) <= '1'; + x_bus_rd_addr <= instr_word_var(19 downto 18); + act_array(ACT_X_MEM_WR) <= '1'; + -- X:, D1 + else + act_array(ACT_X_BUS_WR) <= '1'; + x_bus_wr_addr <= instr_word_var(19 downto 18); + act_array(ACT_X_MEM_RD) <= '1'; + end if; + -- S2, Y: + if instr_word_var(22) = '0' then + act_array(ACT_Y_BUS_RD) <= '1'; + y_bus_rd_addr <= instr_word_var(17 downto 16); + act_array(ACT_Y_MEM_WR) <= '1'; + -- Y:, D2 + else + act_array(ACT_Y_BUS_WR) <= '1'; + y_bus_wr_addr <= instr_word_var(17 downto 16); + act_array(ACT_Y_MEM_RD) <= '1'; + end if; + end if; + end process; + + adgen_decoder: process(adgen_bittype, instr_word) is + begin + adgen_mode_a <= NOP; + adgen_mode_b <= NOP; + ea_extension_available <= '0'; + + case adgen_bittype is + when SINGLE_X => + case instr_word(13 downto 11) is + when "000" => adgen_mode_a <= POST_MIN_N; + when "001" => adgen_mode_a <= POST_PLUS_N; + when "010" => adgen_mode_a <= POST_MIN_1; + when "011" => adgen_mode_a <= POST_PLUS_1; + when "100" => adgen_mode_a <= NOP; + when "101" => adgen_mode_a <= INDEXED_N; + when "111" => adgen_mode_a <= PRE_MIN_1; + when "110" => + if instr_word(10 downto 8) = "000" then + adgen_mode_a <= ABSOLUTE; + ea_extension_available <= '1'; + elsif instr_word(10 downto 8) = "100" then + adgen_mode_a <= IMMEDIATE; + ea_extension_available <= '1'; + else + adgen_mode_a <= NOP; -- INVALID OPCODE! + end if; + when others => + end case; + when SINGLE_X_SHORT => + case instr_word(12 downto 11) is + when "00" => adgen_mode_a <= POST_MIN_N; + when "01" => adgen_mode_a <= POST_PLUS_N; + when "10" => adgen_mode_a <= POST_MIN_1; + when "11" => adgen_mode_a <= POST_PLUS_1; + when others => + end case; + when DOUBLE_X_Y => + case instr_word(12 downto 11) is + when "00" => adgen_mode_a <= NOP; + when "01" => adgen_mode_a <= POST_PLUS_N; + when "10" => adgen_mode_a <= POST_MIN_1; + when "11" => adgen_mode_a <= POST_PLUS_1; + when others => + end case; + case instr_word(21 downto 20) is + when "00" => adgen_mode_b <= NOP; + when "01" => adgen_mode_b <= POST_PLUS_N; + when "10" => adgen_mode_b <= POST_MIN_1; + when "11" => adgen_mode_b <= POST_PLUS_1; + when others => + end case; + when others => + end case; + end process adgen_decoder; + +end architecture rtl; + diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_alu.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_alu.vhd new file mode 100644 index 0000000..9f3c3b9 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_alu.vhd @@ -0,0 +1,603 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_alu is port( + alu_activate : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + alu_ctrl : in alu_ctrl_type; + register_file : in register_file_type; + addr_r_in : in unsigned(BW_ADDRESS-1 downto 0); + addr_r_out : out unsigned(BW_ADDRESS-1 downto 0); + modify_accu : out std_logic; + dst_accu : out std_logic; + modified_accu : out signed(55 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) +); +end entity; + +architecture rtl of exec_stage_alu is + + signal alu_shifter_out : signed(55 downto 0); + signal alu_shifter_carry_out : std_logic; + signal alu_shifter_overflow_out : std_logic; + + signal alu_logic_conj : signed(55 downto 0); + signal alu_multiplier_out : signed(55 downto 0); + signal alu_src_op : signed(55 downto 0); + signal alu_add_result : signed(56 downto 0); + signal alu_add_carry_out : std_logic; + signal alu_post_adder_result : signed(56 downto 0); + + signal scaling_mode : std_logic_vector(1 downto 0); + + signal modified_accu_int : signed(55 downto 0); + + signal norm_instr_asl : std_logic; + signal norm_instr_asr : std_logic; + signal norm_instr_nop : std_logic; + signal norm_update_ccr : std_logic; + +begin + + + -- store calculated value? + modify_accu <= alu_ctrl.store_result; + modified_accu <= modified_accu_int; + -- for the norm instruction we first need to determine whether we have to + -- update the CCR register or not + modify_sr <= alu_activate when alu_ctrl.norm_instr = '0' else + norm_update_ccr; + dst_accu <= alu_ctrl.dst_accu; + + scaling_mode <= register_file.sr(11 downto 10); + + + calcule_ccr_flags: process(register_file, alu_ctrl, alu_shifter_carry_out, + alu_post_adder_result, modified_accu_int, alu_add_carry_out) is + begin + -- by default do not modify the flags in the status register + modified_sr <= register_file.sr; + + -- Carry flag generation + ------------------------- + case alu_ctrl.ccr_flags_ctrl(C_FLAG) is + when CLEAR => modified_sr(C_FLAG) <= '0'; + when SET => modified_sr(C_FLAG) <= '1'; + when MODIFY => + -- the carry flag can stem from the shifter or from the post adder + -- in case we shift and add only a zero to the shift result (ASL, ASR, LSL, LSR, ROL, ROR) + -- take the carry flag from the shifter, else from the post adder + if (alu_ctrl.shift_mode = SHIFT_LEFT or alu_ctrl.shift_mode = SHIFT_RIGHT) and + alu_ctrl.add_src_stage_2 = "00" then -- add zero after shifting? + modified_sr(C_FLAG) <= alu_shifter_carry_out; + elsif alu_ctrl.div_instr = '1' then + modified_sr(C_FLAG) <= not std_logic(alu_post_adder_result(55)); + else +-- modified_sr(C_FLAG) <= std_logic(alu_post_adder_result(57)); + modified_sr(C_FLAG) <= alu_add_carry_out; + end if; + when others => -- Don't touch + end case; + + -- Overflow flag generation + ---------------------------- + case alu_ctrl.ccr_flags_ctrl(V_FLAG) is + when CLEAR => modified_sr(V_FLAG) <= '0'; + when SET => modified_sr(V_FLAG) <= '1'; + when MODIFY => + -- There are two sources for the overflow flag: + -- 1) + -- in case the result cannot be represented using 56 bits set + -- the overflow flag. this is the case when the two MSBs of + -- the 57 bit result are different + -- 2) + -- The shifter circuit performs a 56 bit left shift. In case the + -- two MSBs of the operand are different set the overflow flag as well + if (alu_ctrl.div_instr = '0' and alu_post_adder_result(56) /= alu_post_adder_result(55)) or + (alu_ctrl.shift_mode = SHIFT_LEFT and alu_ctrl.word_24_update = '0' and + alu_shifter_overflow_out = '1' ) then + modified_sr(V_FLAG) <= '1'; + else + modified_sr(V_FLAG) <= '0'; + end if; + when others => -- Don't touch + end case; + + -- Zero flag generation + ---------------------------- + case alu_ctrl.ccr_flags_ctrl(Z_FLAG) is + when CLEAR => modified_sr(Z_FLAG) <= '0'; + when SET => modified_sr(Z_FLAG) <= '1'; + when MODIFY => + -- in case the result is zero set this flag + -- distinguish between 24 bit and 56 bit ALU operations + -- 24 bit instructions are LSL, LSR, ROR, ROL, OR, EOR, NOT, AND + if (alu_ctrl.word_24_update = '1' and modified_accu_int(47 downto 24) = 0) or + (alu_ctrl.word_24_update = '0' and modified_accu_int(55 downto 0) = 0) then + modified_sr(Z_FLAG) <= '1'; + else + modified_sr(Z_FLAG) <= '0'; + end if; + when others => -- Don't touch + end case; + + -- Negative flag generation + ---------------------------- + case alu_ctrl.ccr_flags_ctrl(N_FLAG) is + when CLEAR => modified_sr(N_FLAG) <= '0'; + when SET => modified_sr(N_FLAG) <= '1'; + when MODIFY => + -- in case the result is negative set this flag + -- distinguish between 24 bit and 56 bit ALU operations + -- 24 bit instructions are LSL, LSR, ROR, ROL, OR, EOR, NOT, AND + if alu_ctrl.word_24_update = '1' then + modified_sr(N_FLAG) <= std_logic(modified_accu_int(47)); + else + modified_sr(N_FLAG) <= std_logic(modified_accu_int(55)); + end if; + when others => -- Don't touch + end case; + + -- Unnormalized flag generation + ---------------------------- + case alu_ctrl.ccr_flags_ctrl(U_FLAG) is + when CLEAR => modified_sr(U_FLAG) <= '0'; + when SET => modified_sr(U_FLAG) <= '1'; + when MODIFY => + -- Set unnormalized bit according to the scaling mode + if (scaling_mode = "00" and alu_post_adder_result(47) = alu_post_adder_result(46)) or + (scaling_mode = "01" and alu_post_adder_result(48) = alu_post_adder_result(47)) or + (scaling_mode = "10" and alu_post_adder_result(46) = alu_post_adder_result(45)) then + modified_sr(U_FLAG) <= '1'; + else + modified_sr(U_FLAG) <= '0'; + end if; + when others => -- Don't touch + end case; + + -- Extension flag generation + ---------------------------- + case alu_ctrl.ccr_flags_ctrl(E_FLAG) is + when CLEAR => modified_sr(E_FLAG) <= '0'; + when SET => modified_sr(E_FLAG) <= '1'; + when MODIFY => + -- Set extension flag by default + modified_sr(E_FLAG) <= '1'; + -- Clear extension flag according to the scaling mode + case scaling_mode is + when "00" => + if alu_post_adder_result(55 downto 47) = "111111111" or alu_post_adder_result(55 downto 47) = "000000000" then + modified_sr(E_FLAG) <= '0'; + end if; + when "01" => + if alu_post_adder_result(55 downto 48) = "11111111" or alu_post_adder_result(55 downto 48) = "00000000" then + modified_sr(E_FLAG) <= '0'; + end if; + when "10" => + if alu_post_adder_result(55 downto 46) = "1111111111" or alu_post_adder_result(55 downto 46) = "0000000000" then + modified_sr(E_FLAG) <= '0'; + end if; + when others => + modified_sr(E_FLAG) <= '0'; + end case; + when others => -- Don't touch + end case; + + -- Limit flag generation (equals overflow flag generaton!) + -- Clearing of the Limit flag has to be done by the user! + ----------------------------------------------------------- + case alu_ctrl.ccr_flags_ctrl(L_FLAG) is + when CLEAR => modified_sr(L_FLAG) <= '0'; + when SET => modified_sr(L_FLAG) <= '1'; + when MODIFY => + -- There are two sources for the overflow flag: + -- 1) + -- in case the result cannot be represented using 56 bits set + -- the overflow flag. this is the case when the two MSBs of + -- the 57 bit result are different + -- 2) + -- The shifter circuit performs a 56 bit left shift. In case the + -- two MSBs of the operand are different set the overflow flag as well + if (alu_ctrl.div_instr = '0' and alu_post_adder_result(56) /= alu_post_adder_result(55)) or + (alu_ctrl.shift_mode = SHIFT_LEFT and alu_ctrl.word_24_update = '0' and + alu_shifter_overflow_out = '1' ) then + modified_sr(L_FLAG) <= '1'; + end if; + when others => -- Don't touch + end case; + + -- Scaling flag generation (DSP56002 and up) + -------------------------------------------- + -- Scaling flag is not generated in the ALU, but when A or B are read to the XDB or YDB + + end process; + + + src_operand_select: process(register_file, alu_ctrl) is + begin + -- decoding according similar to JJJ representation + case alu_ctrl.add_src_stage_1 is + when "000" => + -- select depending on destination accu + if alu_ctrl.dst_accu = '0' then + alu_src_op <= register_file.a; + else + alu_src_op <= register_file.b; + end if; + when "001" => -- A,B or B,A + -- select depending on destination accu + if alu_ctrl.dst_accu = '0' then + alu_src_op <= register_file.b; + else + alu_src_op <= register_file.a; + end if; + when "010" => -- X + alu_src_op(55 downto 48) <= (others => register_file.x1(23)); + alu_src_op(47 downto 0) <= register_file.x1 & register_file.x0; + when "011" => -- Y + alu_src_op(55 downto 48) <= (others => register_file.y1(23)); + alu_src_op(47 downto 0) <= register_file.y1 & register_file.y0; + when "100" => -- x0 + alu_src_op(55 downto 48) <= (others => register_file.x0(23)); + alu_src_op(47 downto 24) <= register_file.x0; + alu_src_op(23 downto 0) <= (others => '0'); + when "101" => -- y0 + alu_src_op(55 downto 48) <= (others => register_file.y0(23)); + alu_src_op(47 downto 24) <= register_file.y0; + alu_src_op(23 downto 0) <= (others => '0'); + when "110" => -- x1 + alu_src_op(55 downto 48) <= (others => register_file.x1(23)); + alu_src_op(47 downto 24) <= register_file.x1; + alu_src_op(23 downto 0) <= (others => '0'); + when "111" => -- y1 + alu_src_op(55 downto 48) <= (others => register_file.y1(23)); + alu_src_op(47 downto 24) <= register_file.y1; + alu_src_op(23 downto 0) <= (others => '0'); + when others => + end case; + end process; + + alu_logical_functions: process(alu_ctrl, alu_src_op, alu_shifter_out) is + begin + alu_logic_conj <= alu_shifter_out; + case alu_ctrl.logic_function is + when "110" => + alu_logic_conj(47 downto 24) <= alu_shifter_out(47 downto 24) and alu_src_op(47 downto 24); + when "010" => + alu_logic_conj(47 downto 24) <= alu_shifter_out(47 downto 24) or alu_src_op(47 downto 24); + when "011" => + alu_logic_conj(47 downto 24) <= alu_shifter_out(47 downto 24) xor alu_src_op(47 downto 24); + when "111" => + alu_logic_conj(47 downto 24) <= not alu_shifter_out(47 downto 24); + when others => + end case; + end process; + + alu_adder : process(alu_ctrl, alu_src_op, alu_multiplier_out, alu_shifter_out) is + variable add_src_op_1 : signed(56 downto 0); + variable add_src_op_2 : signed(56 downto 0); + variable carry_const : signed(56 downto 0); + variable alu_shifter_out_57 : signed(56 downto 0); + variable alu_add_result_58 : signed(57 downto 0); + variable alu_add_result_interm : signed(56 downto 0); + variable invert_carry_flag : std_logic; + begin + + -- by default do not invert the carry + invert_carry_flag := '0'; + + -- determine whether to use multiplier output, the operand defined above, or zeros! + -- resizing is done here already. Like that we can see whether an overflow + -- occurs due to negating the source operand + case alu_ctrl.add_src_stage_2 is + when "00" => add_src_op_1 := (others => '0'); + when "10" => add_src_op_1 := resize(alu_multiplier_out, 57); + when others => add_src_op_1 := resize(alu_src_op, 57); + end case; + + -- determine the sign for the 1st operand! + case alu_ctrl.add_src_sign is + -- normal operation + when "00" => add_src_op_1 := add_src_op_1; + -- negative sign + when "01" => add_src_op_1 := - add_src_op_1; + invert_carry_flag := not invert_carry_flag; + -- change according to sign + -- performs - | accu | for the CMPM instruction + when "10" => + -- we subtract in any case, so invert the carry! + invert_carry_flag := not invert_carry_flag; + if add_src_op_1(55) = '0' then + add_src_op_1 := - add_src_op_1; + else + add_src_op_1 := add_src_op_1; + end if; + -- div instruction! + -- sign dependant of D[55] XOR S[23], if 1 => positive , if 0 => negative + -- add_src_op_1 holds S[23] (sign extension!) + when others => + if (alu_ctrl.shift_src = '0' and add_src_op_1(55) /= register_file.a(55)) or + (alu_ctrl.shift_src = '1' and add_src_op_1(55) /= register_file.b(55)) then + add_src_op_1 := add_src_op_1; + else + add_src_op_1 := - add_src_op_1; +-- invert_carry_flag := not invert_carry_flag; + end if; + end case; + + alu_shifter_out_57 := resize(alu_shifter_out, 57); + + -- determine the sign for the 2nd operand (coming from the shifter)! + case alu_ctrl.shift_src_sign is + -- negative sign + when "01" => + add_src_op_2 := - alu_shifter_out_57; + -- change according to sign + -- this allows to build the magnitude (ABS, CMPM) + when "10" => + if alu_shifter_out(55) = '1' then + add_src_op_2 := - alu_shifter_out_57; + else + add_src_op_2 := alu_shifter_out_57; + end if; + when others => + add_src_op_2 := alu_shifter_out_57; + end case; + + -- determine whether carry flag has to be added or subtracted + if alu_ctrl.rounding_used = "10" then + -- add carry flag + carry_const(0) := register_file.sr(C_FLAG); + elsif alu_ctrl.rounding_used = "11" then + -- subtract carry flag + carry_const := (others => register_file.sr(0)); -- carry flag + else + carry_const := (others => '0'); + end if; + + -- add the values and calculate the carry bit + alu_add_result_interm := ('0' & add_src_op_1(55 downto 0)) + + ('0' & add_src_op_2(55 downto 0)) + + ('0' & carry_const(55 downto 0)); + + -- here pops the new carry out of the adder + if invert_carry_flag = '0' then + alu_add_carry_out <= alu_add_result_interm(56); + else + alu_add_carry_out <= not alu_add_result_interm(56); + end if; + + -- calculate the last bit (56), in order to test for overflow later on + alu_add_result(55 downto 0) <= alu_add_result_interm(55 downto 0); +-- alu_add_result(56) <= add_src_op_1(56) xor add_src_op_2(56) xor alu_add_result_interm(56); + alu_add_result(56) <= add_src_op_1(56) xor add_src_op_2(56) + xor carry_const(56) xor alu_add_result_interm(56); + + end process alu_adder; + + + -- Adder after the normal arithmetic adder + -- This adder is responsible for +-- -- 1) carry addition +-- -- 2) carry subtration + -- 3) convergent rounding + alu_post_adder: process(alu_add_result, scaling_mode, alu_ctrl) is + variable post_adder_constant : signed(56 downto 0); + variable testing_constant : signed(24 downto 0); + begin + -- by default add nothing + post_adder_constant := (others => '0'); + + case alu_ctrl.rounding_used is + -- rounding dependant on scaling bits + when "01" => + case scaling_mode is + -- no scaling + when "00" => testing_constant := alu_add_result(23 downto 0) & '0'; + -- scale down + when "01" => testing_constant := alu_add_result(24 downto 0); + -- scale up + when "10" => testing_constant := alu_add_result(22 downto 0) & "00"; + when others => + testing_constant := alu_add_result(23 downto 0) & '0'; + end case; + + -- Special case! + if testing_constant(24) = '1' and testing_constant(23 downto 0) = X"000000" then + -- add depending on bit left to the rounding position + case scaling_mode is + -- no scaling + when "00" => post_adder_constant(23) := alu_add_result(24); + -- scale down + when "01" => post_adder_constant(24) := alu_add_result(25); + -- scale up + when "10" => post_adder_constant(22) := alu_add_result(23); + when others => + end case; + else -- testing_constant /= X"1000000" + -- add rounding constant depending on scaling mode + -- results in round up if MSB of testing constant is set, else nothing happens + case scaling_mode is + -- no scaling + when "00" => post_adder_constant(23) := '1'; + -- scale down + when "01" => post_adder_constant(24) := '1'; + -- scale up + when "10" => post_adder_constant(22) := '1'; + when others => + end case; + end if; + -- no rounding + when others => + post_adder_constant := (others => '0'); + + end case; + + -- Add the result of the first adder to the constant (e.g., carry flag) + alu_post_adder_result <= alu_add_result + post_adder_constant; + + -- When rounding is used set 24 LSBs to zero! + if alu_ctrl.rounding_used = "01" then + alu_post_adder_result(23 downto 0) <= (others => '0'); + end if; + end process; + + + + alu_select_new_accu: process(alu_post_adder_result, alu_logic_conj, alu_ctrl) is + begin + if alu_ctrl.logic_function /= "000" then + modified_accu_int <= alu_logic_conj; + else + modified_accu_int <= alu_post_adder_result(55 downto 0); + end if; + end process; + + + -- contains the 24*24 bit fractional multiplier + alu_multiplier : process(register_file, alu_ctrl) is + variable src_op1: signed(23 downto 0); + variable src_op2: signed(23 downto 0); + variable mul_result_interm : signed(47 downto 0); + begin + -- select source operands for multiplication + case alu_ctrl.mul_op1 is + when "00" => src_op1 := register_file.x0; + when "01" => src_op1 := register_file.x1; + when "10" => src_op1 := register_file.y0; + when others => src_op1 := register_file.y1; + end case; + case alu_ctrl.mul_op2 is + when "00" => src_op2 := register_file.x0; + when "01" => src_op2 := register_file.x1; + when "10" => src_op2 := register_file.y0; + when others => src_op2 := register_file.y1; + end case; + + -- perform integer multiplication + mul_result_interm := src_op1 * src_op2; + + -- sign extension of result + alu_multiplier_out(55 downto 48) <= (others => mul_result_interm(47)); + -- convert from two's complement representation to fractional format + -- signed integer multiplication delivers twice the sign bit, but only one is needed for the + -- fractional multiplication, so remove one and append a zero to the result + alu_multiplier_out(47 downto 0) <= mul_result_interm(46 downto 0) & '0'; + + end process alu_multiplier; + + + -- contains the data shifter + alu_shifter: process(register_file, alu_ctrl, norm_instr_asl, norm_instr_asr) is + variable src_accu : signed(55 downto 0); + variable shift_to_perform : alu_shift_mode; + begin + -- read source accumulator + if alu_ctrl.shift_src = '0' then + src_accu := register_file.a; + else + src_accu := register_file.b; + end if; + + alu_shifter_carry_out <= '0'; + alu_shifter_overflow_out <= '0'; + + -- NORM instruction determines the shift value just + -- in time, so overwrite the flag from the alu_ctrl + -- for this instruction by the calculated value + if alu_ctrl.norm_instr = '0' then + shift_to_perform := alu_ctrl.shift_mode; + else + if norm_instr_asl = '1' then + shift_to_perform := SHIFT_LEFT; + elsif norm_instr_asr = '1' then + shift_to_perform := SHIFT_RIGHT; + else + shift_to_perform := NO_SHIFT; + end if; + end if; + + case shift_to_perform is + when NO_SHIFT => + alu_shifter_out <= src_accu; + when SHIFT_LEFT => + -- ASL, ADDL, DIV? + if alu_ctrl.word_24_update = '0' then + -- special handling for div instruction required + if alu_ctrl.div_instr = '1' then + alu_shifter_out <= src_accu(54 downto 0) & register_file.sr(C_FLAG); + else + alu_shifter_out <= src_accu(54 downto 0) & '0'; + end if; + alu_shifter_carry_out <= src_accu(55); + -- detect overflow that results from left shifting + -- Needed for ASL, ADDL, DIV instructions + if src_accu(55) /= src_accu(54) then + alu_shifter_overflow_out <= '1'; + end if; + -- LSL/ROL? + elsif alu_ctrl.word_24_update = '1' then + alu_shifter_out(55 downto 48) <= src_accu(55 downto 48); + alu_shifter_out(23 downto 0) <= src_accu(23 downto 0); + alu_shifter_carry_out <= src_accu(47); + if alu_ctrl.rotate = '0' then -- LSL ? + alu_shifter_out(47 downto 24) <= src_accu(46 downto 24) & '0'; + else -- ROL ? + alu_shifter_out(47 downto 24) <= src_accu(46 downto 24) & register_file.sr(C_FLAG); + end if; + end if; + when SHIFT_RIGHT => + -- ASR? + if alu_ctrl.word_24_update = '0' then + alu_shifter_out <= src_accu(55) & src_accu(55 downto 1); + alu_shifter_carry_out <= src_accu(0); + -- LSR/ROR? + elsif alu_ctrl.word_24_update = '1' then + alu_shifter_out(55 downto 48) <= src_accu(55 downto 48); + alu_shifter_out(23 downto 0) <= src_accu(23 downto 0); + alu_shifter_carry_out <= src_accu(24); + if alu_ctrl.rotate = '0' then -- LSR + alu_shifter_out(47 downto 24) <= '0' & src_accu(47 downto 25); + else -- ROR + alu_shifter_out(47 downto 24) <= register_file.sr(C_FLAG) & src_accu(47 downto 25); + end if; + end if; + when ZEROS => + alu_shifter_out <= (others => '0'); + end case; + end process alu_shifter; + + + -- Special handling for NORM instruction + -- Determine which case occurs (see User's Manual for more information) + norm_instr_logic: process(register_file, addr_r_in) is + begin + norm_instr_asl <= '0'; + norm_instr_asr <= '0'; + + -- Either left shift + if register_file.sr(E_FLAG) = '0' and + register_file.sr(U_FLAG) = '1' and + register_file.sr(Z_FLAG) = '0' then + norm_instr_asl <= '1'; + norm_update_ccr <= '1'; + addr_r_out <= addr_r_in - 1; + -- Or right shift + elsif register_file.sr(E_FLAG) = '1' then + norm_instr_asr <= '1'; + norm_update_ccr <= '1'; + addr_r_out <= addr_r_in + 1; + -- Or do nothing! + else + norm_update_ccr <= '0'; + addr_r_out <= addr_r_in; + end if; + end process; + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_bit_modify.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_bit_modify.vhd new file mode 100644 index 0000000..68fecbb --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_bit_modify.vhd @@ -0,0 +1,79 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_bit_modify is port( + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + src_operand : in std_logic_vector(23 downto 0); + register_file : in register_file_type; + dst_operand : out std_logic_vector(23 downto 0); + bit_cond_met : out std_logic; + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) +); +end entity; + + +architecture rtl of exec_stage_bit_modify is + + signal operand_bit : std_logic; + signal src_operand_32 : std_logic_vector(31 downto 0); + +begin + + -- this is just a helper signal to prevent the simulator + -- to stop when accessing a bit > 23. + src_operand_32 <= "00000000" & src_operand; + -- read the bit we want to test (and modify) + operand_bit <= src_operand_32(to_integer(unsigned(instr_word(4 downto 0)))); + + -- modify the Carry flag only for the bit modify instructions! + modify_sr <= '1' when instr_array = INSTR_BCLR or instr_array = INSTR_BSET or instr_array = INSTR_BCHG or instr_array = INSTR_BTST else '0'; + modified_sr <= register_file.sr(15 downto 1) & operand_bit; + + bit_operation: process(instr_word, instr_array, src_operand, operand_bit) is + variable new_bit : std_logic; + begin + -- do nothing by default! + dst_operand <= src_operand; + bit_cond_met <= '0'; + + -- determine which bit to write + if instr_array = INSTR_BCLR then + new_bit := '0'; + elsif instr_array = INSTR_BSET then + new_bit := '1'; + else -- BCHG + new_bit := not operand_bit; + end if; + + if instr_array = INSTR_BCLR or instr_array = INSTR_BSET or instr_array = INSTR_BCHG then + dst_operand(to_integer(unsigned(instr_word(4 downto 0)))) <= new_bit; + end if; + + + -- check for the jump instructions whether condition is met or not! + if instr_array = INSTR_JCLR or instr_array = INSTR_JSCLR then + if operand_bit = '0' then + bit_cond_met <= '1'; + else + bit_cond_met <= '0'; + end if; + end if; + if instr_array = INSTR_JSET or instr_array = INSTR_JSSET then + if operand_bit = '0' then + bit_cond_met <= '0'; + else + bit_cond_met <= '1'; + end if; + end if; + + end process; + + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_branch.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_branch.vhd new file mode 100644 index 0000000..9b07913 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_branch.vhd @@ -0,0 +1,117 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_branch is port( + activate_exec_bra : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + jump_address : in unsigned(BW_ADDRESS-1 downto 0); + bit_cond_met : in std_logic; + cc_flag_set : in std_logic; + push_stack : out push_stack_type; + pop_stack : out pop_stack_type; + modify_pc : out std_logic; + modified_pc : out unsigned(BW_ADDRESS-1 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) +); +end entity; + + +architecture rtl of exec_stage_branch is + + signal branch_condition_met : std_logic; + signal modify_pc_int : std_logic; + +begin + + modify_pc_int <= '1' when activate_exec_bra = '1' and branch_condition_met = '1' else '0'; + modify_pc <= modify_pc_int; + + calculate_branch_condition : process(instr_word, instr_array, register_file, bit_cond_met) + begin + branch_condition_met <= '0'; + + -- unconditional jumps + if instr_array = INSTR_JMP or + instr_array = INSTR_JSR or + instr_array = INSTR_RTI or + instr_array = INSTR_RTS then + -- jump always + branch_condition_met <= '1'; + end if; + -- then see whether the branch condition is satisfied + if instr_array = INSTR_JCC or instr_array = INSTR_JSCC then + branch_condition_met <= cc_flag_set; + end if; + -- jmp that is executed according to a certain bit condition + if instr_array = INSTR_JCLR or instr_array = INSTR_JSCLR or + instr_array = INSTR_JSET or instr_array = INSTR_JSSET then + branch_condition_met <= bit_cond_met; + end if; + end process calculate_branch_condition; + + + calculate_branch_target : process(instr_array, instr_word, jump_address) + begin + modified_pc <= jump_address; + + -- address calculation is the same for the following instructions + if instr_array = INSTR_JMP or + instr_array = INSTR_JCC or + instr_array = INSTR_JSCC or + instr_array = INSTR_JSR then + if instr_word(18) = '1' then + -- short jump address included in opcode (bits 11 downto 0) + modified_pc(11 downto 0) <= unsigned(instr_word(11 downto 0)); + elsif instr_word(18) = '0' then + -- effective address defined by opcode and coming from address generator unit + modified_pc <= jump_address; + end if; + end if; + + -- jump address contains the obligatory address of the second + -- instruction word + if instr_array = INSTR_JCLR or + instr_array = INSTR_JSET or + instr_array = INSTR_JSCLR or + instr_array = INSTR_JSSET then + modified_pc <= jump_address; + end if; + + -- target address is stored on the stack + if instr_array = INSTR_RTS or + instr_array = INSTR_RTI then + modified_pc <= unsigned(register_file.current_ssh); + end if; + end process calculate_branch_target; + + -- Subroutine functions need to store PC and SR on the stack + push_stack.valid <= '1' when modify_pc_int = '1' and (instr_array = INSTR_JSCC or instr_array = INSTR_JSR or + instr_array = INSTR_JSCLR or instr_array = INSTR_JSSET) else '0'; + push_stack.content <= PC_AND_SR; + -- pc is set externally! + push_stack.pc <= (others => '0'); + + -- RTI/RTS instructions need to read from the stack + pop_stack.valid <= '1' when modify_pc_int = '1' and (instr_array = INSTR_RTI or instr_array = INSTR_RTS) else '0'; + + -- some instructions require to set the SR + calculate_status_register : process(instr_array) + begin + modify_sr <= '0'; + modified_sr <= (others => '0'); + if instr_array = INSTR_RTI then + modify_sr <= '1'; + modified_sr <= register_file.current_ssl; + end if; + end process calculate_status_register; + + +end architecture rtl; diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_cc_flag_calc.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_cc_flag_calc.vhd new file mode 100644 index 0000000..63a0b2c --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_cc_flag_calc.vhd @@ -0,0 +1,75 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_cc_flag_calc is port( + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + cc_flag_set : out std_logic +); +end entity; + + +architecture rtl of exec_stage_cc_flag_calc is + + +begin + + calculate_cc_flag : process(instr_word, instr_array, register_file) + + variable cc_select : std_logic_vector(3 downto 0); + + procedure calculate_cc_flag(cc: std_logic_vector(3 downto 0)) is + variable c_flag : std_logic := register_file.ccr(0); + variable v_flag : std_logic := register_file.ccr(1); + variable z_flag : std_logic := register_file.ccr(2); + variable n_flag : std_logic := register_file.ccr(3); + variable u_flag : std_logic := register_file.ccr(4); + variable e_flag : std_logic := register_file.ccr(5); + variable l_flag : std_logic := register_file.ccr(6); + + begin + if (cc = "0000" and c_flag = '0') or -- CC: carry clear + (cc = "1000" and c_flag = '1') or -- CS: carry set + (cc = "0101" and e_flag = '0') or -- EC: extension clear + (cc = "1010" and z_flag = '1') or -- EQ: equal + (cc = "1101" and e_flag = '1') or -- ES: extension set + (cc = "0001" and (n_flag = v_flag)) or -- GE: greater than or equal + (cc = "0001" and ((n_flag xor v_flag) or z_flag) = '0') or -- GT: greater than + (cc = "0110" and l_flag = '0') or -- LC: limit clear + (cc = "1111" and ((n_flag xor v_flag) or z_flag ) = '1') or -- LE: less or equal + (cc = "1110" and l_flag = '1') or -- LS: limit set + (cc = "1001" and (n_flag /= v_flag)) or -- LT: less than + (cc = "1011" and n_flag = '1') or -- MI: minus + (cc = "0010" and z_flag = '0') or -- NE: not equal + (cc = "1100" and (( not u_flag and not e_flag) or z_flag) = '1') or -- NR: normalized + (cc = "0011" and n_flag = '0') or -- PL: plus + (cc = "0100" and (( not u_flag and not e_flag ) or z_flag) = '0') -- NN: not normalized + then + cc_flag_set <= '1'; + end if; + end procedure; + + begin + + cc_flag_set <= '0'; + + -- Rip the flags we have to test for from the instruction word + if (instr_array = INSTR_JCC and instr_word(18) = '0') or + (instr_array = INSTR_JSCC) then + cc_select := instr_word(3 downto 0); + else + cc_select := instr_word(15 downto 12); + end if; + + calculate_cc_flag(cc_select); + + end process; + + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_cr_mod.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_cr_mod.vhd new file mode 100644 index 0000000..c236db7 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_cr_mod.vhd @@ -0,0 +1,72 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_cr_mod is port ( + activate_exec_cr_mod : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0); + modify_omr : out std_logic; + modified_omr : out std_logic_vector(7 downto 0) +); +end exec_stage_cr_mod; + + +architecture rtl of exec_stage_cr_mod is + +begin + + process(activate_exec_cr_mod, instr_word, instr_array, register_file) is + variable imm8 : std_logic_vector(7 downto 0); + variable op8 : std_logic_vector(7 downto 0); + variable res8 : std_logic_vector(7 downto 0); + begin + modify_sr <= '0'; + modify_omr <= '0'; + modified_sr <= (others => '0'); + modified_omr <= (others => '0'); + + imm8 := instr_word(15 downto 8); + if instr_word(1 downto 0) = "00" then + -- read MR + op8 := register_file.mr; + elsif instr_word(1 downto 0) = "01" then + -- read CCR + op8 := register_file.ccr; + else -- instr_word(1 downto 0) = "10" + -- read OMR + op8 := register_file.omr; + end if; + + if instr_array = INSTR_ANDI then + res8 := imm8 and op8; + else -- instr_array = INSTR_ORI + res8 := imm8 or op8; + end if; + + -- only write the result when activated + if activate_exec_cr_mod = '1' then + if instr_word(1 downto 0) = "00" then + -- update MR + modify_sr <= '1'; + modified_sr <= res8 & register_file.ccr; + elsif instr_word(1 downto 0) = "01" then + -- update CCR + modify_sr <= '1'; + modified_sr <= register_file.mr & res8; + elsif instr_word(1 downto 0) = "10" then + -- update OMR + modify_omr <= '1'; + modified_omr <= res8; + end if; + end if; + end process; + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/exec_stage_loops.vhd b/FPGA_quartus_GE/DSP/src/exec_stage_loops.vhd new file mode 100644 index 0000000..cc32692 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/exec_stage_loops.vhd @@ -0,0 +1,200 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity exec_stage_loop is port( + clk, rst : in std_logic; + activate_exec_loop : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + loop_iterations : in unsigned(15 downto 0); + loop_address : in unsigned(BW_ADDRESS-1 downto 0); + loop_start_address: in unsigned(BW_ADDRESS-1 downto 0); + register_file : in register_file_type; + fetch_perform_enddo: in std_logic; + memory_stall : in std_logic; + push_stack : out push_stack_type; + pop_stack : out pop_stack_type; + stall_rep : out std_logic; + stall_do : out std_logic; + decrement_lc : out std_logic; + modify_lc : out std_logic; + modified_lc : out unsigned(15 downto 0); + modify_la : out std_logic; + modified_la : out unsigned(15 downto 0); + modify_pc : out std_logic; + modified_pc : out unsigned(BW_ADDRESS-1 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) +); +end entity; + + +architecture rtl of exec_stage_loop is + + signal rep_loop_polling : std_logic; + signal do_loop_polling : std_logic; + signal enddo_polling : std_logic; + signal lc_temp : unsigned(15 downto 0); + signal rf_lc_eq_1 : std_logic; + signal memory_stall_t : std_logic; + +begin + + modified_pc <= loop_start_address; + + + -- loop counter in register file equal to 1? + rf_lc_eq_1 <= '1' when register_file.lc = 1 else '0'; + + process(activate_exec_loop, instr_array, register_file, fetch_perform_enddo, + rep_loop_polling, loop_iterations, rf_lc_eq_1, loop_start_address) is + begin + stall_rep <= '0'; + stall_do <= '0'; + + modify_la <= '0'; + modify_lc <= '0'; + modify_pc <= '0'; + modify_sr <= '0'; + modified_la <= loop_address; + modified_lc <= loop_iterations; -- default + -- set the loop flag LF (bit 15) of Status register + modified_sr(15) <= '1'; + modified_sr(14 downto 0) <= register_file.sr(14 downto 0); + + push_stack.valid <= '0'; -- push PC and SR on the stack + push_stack.pc <= loop_start_address; + push_stack.content <= LA_AND_LC; + + pop_stack.valid <= '0'; + decrement_lc <= '0'; + ------------------ + -- DO instruction + ------------------ + if activate_exec_loop = '1' and instr_array = INSTR_DO then + -- first instruction of the do loop instruction? + if do_loop_polling = '0' then + stall_do <= '1'; + modify_lc <= '1'; -- store the new loop counter + modify_la <= '1'; -- store the new loop address + push_stack.valid <= '1'; -- push LA and LC on the stack + push_stack.content <= LA_AND_LC; + else -- second clock cycle of the do loop instruction ? + push_stack.valid <= '1'; -- push PC and SR on the stack + push_stack.pc <= loop_start_address; + push_stack.content <= PC_AND_SR; + -- set the PC to the first instruction of the loop + -- the already fetched instruction are flushed from the pipeline + -- this prevents problems, when the loop consists of only one or two instructions + modify_pc <= '1'; + -- set the loop flag + modify_sr <= '1'; + end if; + end if; + ----------------------------------------------- + -- ENDDO instruction / loop end in fetch stage + ----------------------------------------------- + if (activate_exec_loop = '1' and instr_array = INSTR_ENDDO) or fetch_perform_enddo = '1' or enddo_polling = '1' then + pop_stack.valid <= '1'; + if enddo_polling = '0' then + -- only restore the LF from the stack + modified_sr(15) <= register_file.current_ssl(15); + modify_sr <= '1'; + stall_do <= '1'; -- stall one clock cycle + else + -- restore loop counter and loop address in second clock cycle + modified_lc <= unsigned(register_file.current_ssl); + modify_lc <= '1'; + modified_la <= unsigned(register_file.current_ssh); + modify_la <= '1'; + end if; + end if; + ------------------- + -- REP instruction + ------------------- + if activate_exec_loop = '1' and instr_array = INSTR_REP then + -- only do something when there are more than 1 iterations + -- the first execution is already on the way + if loop_iterations /= 1 then + stall_rep <= '1'; -- stall the fetch and decode stages + modify_lc <= '1'; -- store the loop counter + modified_lc <= loop_iterations - 1; + end if; + end if; + + -- keep processing the single instruction + if rep_loop_polling = '1' then + stall_rep <= '1'; + -- if the REP instruction cause a stall do not modify the lc! + if memory_stall_t = '0' then + if rf_lc_eq_1 = '0' then + decrement_lc <= '1'; + -- when the instruction to repeat caused a memory stall + -- do not continue! + else + -- finish the REP instruction by restoring the LC + stall_rep <= '0'; + modify_lc <= '1'; + modified_lc <= lc_temp; + end if; + end if; + end if; + end process; + + + -- process that allows to remember that we are processing a REP/DO instruction + -- even though the REP instruction is not available in the pipeline anymore + -- also store the old loop counter + process(clk) is + begin + if rising_edge(clk) then + if rst = '1' then + rep_loop_polling <= '0'; + do_loop_polling <= '0'; + enddo_polling <= '0'; + lc_temp <= (others => '0'); + memory_stall_t <= '0'; + else + memory_stall_t <= memory_stall; + + if activate_exec_loop = '1' and instr_array = INSTR_REP then + -- only do something when there are more than 1 iterations + -- the first execution is already on the way + if loop_iterations /= 1 then + rep_loop_polling <= '1'; + lc_temp <= register_file.lc; + end if; + end if; + -- test whether the REP instruction has been executed + if rep_loop_polling = '1' and rf_lc_eq_1 = '1' and memory_stall_t = '0' then + rep_loop_polling <= '0'; + end if; + + -- do loop execution takes two clock cycles + -- in the first clock cycle we store loop address and loop counter on the stack + -- in the second clock cycle we store programm counter and status register on the stack + if activate_exec_loop = '1' and instr_array = INSTR_DO then + do_loop_polling <= '1'; + end if; + -- clear the flag immediately again (only two cycles execution time!) + if do_loop_polling = '1' then + do_loop_polling <= '0'; + end if; + + -- ENDDO instructions take two clock cycles as well! + if (activate_exec_loop = '1' and instr_array = INSTR_ENDDO) or fetch_perform_enddo = '1' then + enddo_polling <= '1'; + end if; + if enddo_polling = '1' then + enddo_polling <= '0'; + end if; + end if; + end if; + end process; + +end architecture; diff --git a/FPGA_quartus_GE/DSP/src/fetch_stage.vhd b/FPGA_quartus_GE/DSP/src/fetch_stage.vhd new file mode 100644 index 0000000..6b22f09 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/fetch_stage.vhd @@ -0,0 +1,60 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; + + +entity fetch_stage is port( + + pc_old : in unsigned(BW_ADDRESS-1 downto 0); + pc_new : out unsigned(BW_ADDRESS-1 downto 0); + modify_pc : in std_logic; + modified_pc : in unsigned(BW_ADDRESS-1 downto 0); + register_file : in register_file_type; + decrement_lc : out std_logic; + perform_enddo : out std_logic + +); +end fetch_stage; + + +architecture rtl of fetch_stage is + + +begin + + pc_calculation: process(pc_old, modify_pc, modified_pc, register_file) is + begin + decrement_lc <= '0'; + perform_enddo <= '0'; + + -- by default increment pc by one + pc_new <= pc_old + 1; + if modify_pc = '1' then + pc_new <= modified_pc; + end if; + -- Loop Flag set? + if register_file.sr(15) = '1' then + if register_file.la = pc_old then + -- Loop not finished? + -- => start from the beginning if necessary + if register_file.lc /= 1 then + -- if the last address was LA and the loop is not finished yet, we have to + -- read now from the beginning of the loop again + pc_new <= unsigned(register_file.current_ssh(BW_ADDRESS-1 downto 0)); + -- decrement loop counter + decrement_lc <= '1'; + else + -- loop done! + -- => tell the loop controller in the exec stage to perform the enddo operation + -- (without flushing of the pipeline!) + perform_enddo <= '1'; + end if; + end if; + end if; + end process pc_calculation; + +end architecture rtl; + diff --git a/FPGA_quartus_GE/DSP/src/mem_control.vhd b/FPGA_quartus_GE/DSP/src/mem_control.vhd new file mode 100644 index 0000000..091fcf0 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/mem_control.vhd @@ -0,0 +1,1519 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; + +entity mem_control is + generic( + mem_type : memory_type := P_MEM + ); + port( + clk, rst : in std_logic; + rd_addr : in unsigned(BW_ADDRESS-1 downto 0); + rd_en : in std_logic; + data_out : out std_logic_vector(23 downto 0); + data_out_valid : out std_logic; + wr_addr : in unsigned(BW_ADDRESS-1 downto 0); + wr_en : in std_logic; + wr_accomplished : out std_logic; + data_in : in std_logic_vector(23 downto 0) + ); +end entity mem_control; + + +architecture rtl of mem_control is + + signal int_mem_rd_addr : std_logic_vector(7 downto 0); + type int_mem_type is array(0 to 255) of std_logic_vector(23 downto 0); + signal int_mem : int_mem_type; + signal int_pmem : int_mem_type := ( +-- ABS begin +--X"0000B9", +--X"56F400", +--X"200000", +--X"200026", +--X"56F400", +--X"E00000", +--X"200026", +--X"56F400", +--X"000000", +--X"200026", +--X"52F400", +--X"000080", +--X"200026", +-- ABS end + +-- ADC begin +--X"46F400", +--X"000000", +--X"47F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"200039", +--X"47F400", +--X"800000", +--X"53F400", +--X"000080", +--X"200039", +-- ADC end + +-- ADD begin +--X"46F400", +--X"000000", +--X"47F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"200038", +--X"47F400", +--X"800000", +--X"53F400", +--X"000080", +--X"200038", +-- ADD end + +-- ADDL begin +--X"56F400", +--X"000055", +--X"20001B", +--X"51F400", +--X"000055", +--X"0000B9", +--X"20001A", +--X"56F400", +--X"0000AA", +--X"20001A", +--X"53F400", +--X"000080", +--X"20001A", +-- ADDL end + +-- ADDR begin +--X"56F400", +--X"000055", +--X"20001B", +--X"51F400", +--X"000055", +--X"0000B9", +--X"20000A", +--X"56F400", +--X"0000AA", +--X"20000A", +--X"53F400", +--X"000080", +--X"20000A", +-- ADDR end + +-- AND begin +--X"46F400", +--X"000FFF", +--X"57F400", +--X"FFFFFF", +--X"0000B9", +--X"20005E", +--X"46F400", +--X"FFF000", +--X"57F400", +--X"FFFFFF", +--X"0000B9", +--X"20005E", +--X"46F400", +--X"000000", +--X"57F400", +--X"FFFFFF", +--X"0000B9", +--X"20005E", +-- AND end + +-- EOR begin +--X"46F400", +--X"000FFF", +--X"57F400", +--X"FF00FF", +--X"0000B9", +--X"20005B", +--X"46F400", +--X"FFFFFF", +--X"57F400", +--X"FFFFFF", +--X"0000B9", +--X"20005B", +-- EOR end + +-- OR begin +--X"46F400", +--X"000FFF", +--X"57F400", +--X"FF00FF", +--X"0000B9", +--X"20005A", +--X"46F400", +--X"000000", +--X"57F400", +--X"000000", +--X"0000B9", +--X"20005A", +-- OR end + +-- NOT begin +--X"46F400", +--X"000FFF", +--X"57F400", +--X"7F00FF", +--X"0000B9", +--X"20001F", +--X"46F400", +--X"000000", +--X"57F400", +--X"FFFFFF", +--X"0000B9", +--X"20001F", +-- NOT end + +-- ASL begin +--X"20001B", +--X"51F400", +--X"0000A5", +--X"55F400", +--X"0000A5", +--X"53F400", +--X"0000A5", +--X"0000B9", +--X"20003A", +-- ASL end + +-- ASR begin +--X"20001B", +--X"51F400", +--X"0000A5", +--X"55F400", +--X"0000A5", +--X"53F400", +--X"0000A5", +--X"0000B9", +--X"20002A", +-- ASR end + +-- CLR begin +--X"0000B9", +--X"56F400", +--X"200000", +--X"200013", +--X"56F400", +--X"E00000", +--X"0000B9", +--X"0001F9", +--X"200013", +-- CLR end + +-- CMP begin +--X"2F2000", +--X"262400", +--X"0000B9", +--X"20005D", +--X"2F2000", +--X"262000", +--X"0000B9", +--X"20005D", +--X"2F2400", +--X"262000", +--X"0000B9", +--X"20005D", +--X"57F400", +--X"800AAA", +--X"262000", +--X"0000B9", +--X"20005D", +--X"46F400", +--X"800AAA", +--X"2F2000", +--X"0000B9", +--X"20005D", +-- CMP end + +-- CMPM begin +--X"2F2000", +--X"262400", +--X"0000B9", +--X"20005F", +--X"2F2000", +--X"262000", +--X"0000B9", +--X"20005F", +--X"2F2400", +--X"262000", +--X"0000B9", +--X"20005F", +--X"57F400", +--X"800AAA", +--X"262000", +--X"0000B9", +--X"20005F", +--X"46F400", +--X"800AAA", +--X"2F2000", +--X"0000B9", +--X"20005F", +-- CMPM end + +-- DIV begin +--X"00FEB9", +--X"44F400", +--X"600000", +--X"56F400", +--X"200000", +--X"0618A0", +--X"018040", +--X"210E00", +-- DIV end + +-- LSL begin +--X"0000B9", +--X"56F400", +--X"200000", +--X"56F400", +--X"AAAAAA", +--X"50F400", +--X"BCDEFA", +--X"0618A0", +--X"200033", +-- LSL end + +-- LSR begin +--X"0000B9", +--X"56F400", +--X"200000", +--X"56F400", +--X"AAAAAA", +--X"50F400", +--X"BCDEFA", +--X"0618A0", +--X"200023", +-- LSR end + +-- MPY begin +--X"0000B9", +--X"44F400", +--X"200000", +--X"46F400", +--X"400000", +--X"2000D0", +--X"44F400", +--X"E00000", +--X"46F400", +--X"B9999A", +--X"2000D0", +--X"44F400", +--X"E66666", +--X"46F400", +--X"466666", +--X"2000D0", +--X"44F400", +--X"E66666", +--X"46F400", +--X"466666", +--X"2000D4", +-- MPY end + +-- MAC begin +--X"0000B9", +--X"200013", +--X"2A8000", +--X"44F400", +--X"200000", +--X"46F400", +--X"400000", +--X"2000D6", +--X"44F400", +--X"E00000", +--X"46F400", +--X"B9999A", +--X"2000D2", +--X"44F400", +--X"E66666", +--X"46F400", +--X"466666", +--X"2000D2", +--X"44F400", +--X"E66666", +--X"46F400", +--X"466666", +--X"2000D6", +-- MAC end + +-- MACR begin +--X"0000B9", +--X"200013", +--X"2E1000", +--X"44F400", +--X"123456", +--X"46F400", +--X"123456", +--X"2000D3", +--X"56F400", +--X"100001", +--X"44F400", +--X"123456", +--X"46F400", +--X"123456", +--X"2000D3", +--X"2E1000", +--X"50F400", +--X"800000", +--X"44F400", +--X"123456", +--X"46F400", +--X"123456", +--X"2000D3", +-- MACR end + +-- MPYR begin +--X"0000B9", +--X"46F400", +--X"654321", +--X"200095", +-- MPYR end + +-- NEG begin +--X"0000B9", +--X"56F400", +--X"654321", +--X"200036", +--X"200013", +--X"52F400", +--X"000080", +--X"200036", +--X"56F400", +--X"800000", +--X"200036", +-- NEG end + +-- NORM begin +X"200013", +X"2C0100", +X"200003", +X"062FA0", +X"01DB15", +X"200013", +X"2EFF00", +X"2A8400", +X"200003", +X"062FA0", +X"01D915", +X"200013", +X"062FA0", +X"01DA15", +-- NORM end + +-- RND begin +--X"0000B9", +--X"54F400", +--X"123456", +--X"50F400", +--X"789ABC", +--X"200011", +--X"54F400", +--X"123456", +--X"50F400", +--X"800000", +--X"200011", +--X"54F400", +--X"123455", +--X"50F400", +--X"800000", +--X"200011", +-- RND end + +-- ROR begin +--X"0000B9", +--X"56F400", +--X"AAAAAA", +--X"50F400", +--X"BCDEFA", +--X"0618A0", +--X"200027", +-- ROR end + +-- ROL begin +--X"0000B9", +--X"56F400", +--X"AAAAAA", +--X"50F400", +--X"BCDEFA", +--X"0618A0", +--X"200037", +-- ROL end + + +-- SUB begin +--X"46F400", +--X"000000", +--X"47F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"20003C", +--X"47F400", +--X"800000", +--X"53F400", +--X"000080", +--X"20003C", +--X"20001B", +--X"53F400", +--X"000080", +--X"47F400", +--X"000001", +--X"20007C", +-- SUB end + +-- SUBL begin +--X"50F400", +--X"000000", +--X"54F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"20001E", +--X"54F400", +--X"800000", +--X"53F400", +--X"000080", +--X"20001E", +--X"20001B", +--X"53F400", +--X"000080", +--X"54F400", +--X"000001", +--X"20001E", +-- SUBL end + +-- SUBR begin +--X"50F400", +--X"000000", +--X"54F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"20000E", +--X"54F400", +--X"800000", +--X"53F400", +--X"000080", +--X"20000E", +--X"20001B", +--X"53F400", +--X"000080", +--X"54F400", +--X"000001", +--X"20000E", +-- SUBR end + +-- SBC begin +--X"46F400", +--X"000000", +--X"47F400", +--X"000001", +--X"20001B", +--X"51F400", +--X"000001", +--X"0000B9", +--X"0001F9", +--X"20003D", +--X"47F400", +--X"800000", +--X"53F400", +--X"000080", +--X"20003D", +--X"20001B", +--X"53F400", +--X"000080", +--X"47F400", +--X"000001", +--X"20003D", +-- SBC end + +-- TCC begin +--X"311400", +--X"44F400", +--X"ABCDEF", +--X"57F400", +--X"123456", +--X"0000B9", +--X"038143", +--X"03014A", +--X"0004F9", +--X"03A143", +--X"03214A", +-- TCC end + +-- TFR begin +--X"56F400", +--X"ABCDEF", +--X"57F400", +--X"123456", +--X"21EE09", +--X"44F400", +--X"555555", +--X"47F400", +--X"AAAAAA", +--X"21C441", +--X"21E679", +-- TFR end + +-- TST begin +--X"20001B", +--X"20000B", +--X"0000B9", +--X"0001F9", +--X"53F400", +--X"000080", +--X"20000B", +--X"53F400", +--X"00007F", +--X"20000B", +-- TST end + + +--X"2AFF00", +--X"54F400", +--X"FFFFFF", +--X"50F400", +--X"FFFFF2", +--X"200026", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +--X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +X"000000", +--X"44F400", +--X"100010", +--X"45F400", +--X"100011", +--X"0B5880", +--X"000017", +--X"46F400", +--X"100026", +--X"47F400", +--X"100027", +--X"425800", +--X"435800", +--X"420A00", +--X"431F00", +--X"437000", +--X"0000A0", +--X"427000", +--X"00004F", +-- X"42F800", +-- X"43F800", +-- X"428A00", +-- X"439F00", +-- "001100000100100000000000", -- 0 move #72,r0 +-- "001110000000100000000000", -- 1 move #8,n0 +-- "000001010000000010100000", -- 2 move #0,m0 +-- "000001010001000010100001", -- 3 move #16,m1 +-- "000001101110000100100000", -- 4 rep m1 +-- "010001001100100000000000", -- 5 move x:(r0)+n0,x0 +-- "000000000000000000000000", -- 6 +-- "000000000000000000000000", -- 7 +-- "000000000000000000000000", -- 8 +-- "000000000000000000000000", -- 9 +-- "000000000000000000000000", -- 10 +-- "000000000000000000000000", -- 11 +-- "000000000000000000000000", -- 12 +-- "000000000000000000000000", -- 13 +-- "000000000000000000000000", -- 14 +-- "000000000000000000000000", -- 15 +-- "000000000000000000000000", -- 16 +-- "000000000000000000000000", -- 17 +-- "000000000000000000000000", -- 18 +-- "000000000000000000000000", -- 19 +-- "000010101101101010000000", -- 20 -- JMP (r2)+ +-- "000000000000000000000000", -- 20 +-- "000000000000000000000000", -- 21 +-- "000000000000000000000000", -- 22 + "000000000000000000000000", -- 23 + "000000000000000000000000", -- 24 + "000000000000000000000000", -- 25 + "000000000000000000000000", -- 26 + "000000000000000000000000", -- 27 + "000000000000000000000000", -- 28 + "000000000000000000000000", -- 29 + "000000000000000000000000", -- 30 + "000000000000000000000000", -- 31 +-- "000000000000000000000000", -- 32 +-- "000011010000000000000000", -- 32 -- JSR #0 + "000010111111000010000000", -- 32 -- JSR absolute + "000000000000000001000000", -- 33 -- #64 + "000000000000000000000000", -- 34 + "000000000000000000000000", -- 35 + "000000000000000000000000", -- 36 + "000000000000000000000000", -- 37 + "000000000000000000000000", -- 38 + "000000000000000000000000", -- 39 + "000000000000000000000000", -- 40 + "000000000000000000000000", -- 41 + "000000000000000000000000", -- 42 + "000000000000000000000000", -- 43 + "000000000000000000000000", -- 44 + "000000000000000000000000", -- 45 + "000000000000000000000000", -- 46 + "000000000000000000000000", -- 47 + "000000000000000000000000", -- 48 + "000000000000000000000000", -- 49 + "000000000000000000000000", -- 50 + "000000000000000000000000", -- 51 + "000000000000000000000000", -- 52 + "000000000000000000000000", -- 53 + "000000000000000000000000", -- 54 + "000000000000000000000000", -- 55 + "000000000000000000000000", -- 56 + "000000000000000000000000", -- 57 + "000000000000000000000000", -- 58 + "000000000000000000000000", -- 59 + "000000000000000000000000", -- 60 + "000000000000000000000000", -- 61 + "000000000000000000000000", -- 62 + "000000000000000000000000", -- 63 + "000000000000000000000000", -- 64 + "000000000000000000000000", -- 65 + "000000000000000000000000", -- 66 + "000000000000000000000000", -- 67 + "000000000000000000000000", -- 68 + "000000000000000000000000", -- 69 + "000000000000000000000100", -- 70 -- RTI + "000000000000000000000000", -- 71 + "000000000000000000000000", -- 72 + "000000000000000000000000", -- 73 + "000000000000000000000000", -- 74 + "000000000000000000000000", -- 75 + "000000000000000000000000", -- 76 + "000000000000000000000000", -- 77 + "000000000000000000000000", -- 78 + "000000000000000000000000", -- 79 + "000000000000000000000000", -- 80 + "000000000000000000000000", -- 81 + "000000000000000000000000", -- 82 + "000000000000000000000000", -- 83 + "000000000000000000000000", -- 84 + "000000000000000000000000", -- 85 + "000000000000000000000000", -- 86 + "000000000000000000000000", -- 87 + "000000000000000000000000", -- 88 + "000000000000000000000000", -- 89 + "000000000000000000000000", -- 90 + "000000000000000000000000", -- 91 + "000000000000000000000000", -- 92 + "000000000000000000000000", -- 93 + "000000000000000000000000", -- 94 + "000000000000000000000000", -- 95 + "000000000000000000000000", -- 96 + "000000000000000000000000", -- 97 + "000000000000000000000000", -- 98 + "000000000000000000000000", -- 99 + "000000000000000000000000", -- 100 + "000000000000000000000000", -- 101 + "000000000000000000000000", -- 102 + "000000000000000000000000", -- 103 + "000000000000000000000000", -- 104 + "000000000000000000000000", -- 105 + "000000000000000000000000", -- 106 + "000000000000000000000000", -- 107 + "000000000000000000000000", -- 108 + "000000000000000000000000", -- 109 + "000000000000000000000000", -- 110 + "000000000000000000000000", -- 111 + "000000000000000000000000", -- 112 + "000000000000000000000000", -- 113 + "000000000000000000000000", -- 114 + "000000000000000000000000", -- 115 + "000000000000000000000000", -- 116 + "000000000000000000000000", -- 117 + "000000000000000000000000", -- 118 + "000000000000000000000000", -- 119 + "000000000000000000000000", -- 120 + "000000000000000000000000", -- 121 + "000000000000000000000000", -- 122 + "000000000000000000000000", -- 123 + "000000000000000000000000", -- 124 + "000000000000000000000000", -- 125 + "000000000000000000000000", -- 126 + "000000000000000000000000", -- 127 + "000000000000000000000000", -- 128 + "000000000000000000000000", -- 129 + "000000000000000000000000", -- 130 + "000000000000000000000000", -- 131 + "000000000000000000000000", -- 132 + "000000000000000000000000", -- 133 + "000000000000000000000000", -- 134 + "000000000000000000000000", -- 135 + "000000000000000000000000", -- 136 + "000000000000000000000000", -- 137 + "000000000000000000000000", -- 138 + "000000000000000000000000", -- 139 + "000000000000000000000000", -- 140 + "000000000000000000000000", -- 141 + "000000000000000000000000", -- 142 + "000000000000000000000000", -- 143 + "000000000000000000000000", -- 144 + "000000000000000000000000", -- 145 + "000000000000000000000000", -- 146 + "000000000000000000000000", -- 147 + "000000000000000000000000", -- 148 + "000000000000000000000000", -- 149 + "000000000000000000000000", -- 150 + "000000000000000000000000", -- 151 + "000000000000000000000000", -- 152 + "000000000000000000000000", -- 153 + "000000000000000000000000", -- 154 + "000000000000000000000000", -- 155 + "000000000000000000000000", -- 156 + "000000000000000000000000", -- 157 + "000000000000000000000000", -- 158 + "000000000000000000000000", -- 159 + "000000000000000000000000", -- 160 + "000000000000000000000000", -- 161 + "000000000000000000000000", -- 162 + "000000000000000000000000", -- 163 + "000000000000000000000000", -- 164 + "000000000000000000000000", -- 165 + "000000000000000000000000", -- 166 + "000000000000000000000000", -- 167 + "000000000000000000000000", -- 168 + "000000000000000000000000", -- 169 + "000000000000000000000000", -- 170 + "000000000000000000000000", -- 171 + "000000000000000000000000", -- 172 + "000000000000000000000000", -- 173 + "000000000000000000000000", -- 174 + "000000000000000000000000", -- 175 + "000000000000000000000000", -- 176 + "000000000000000000000000", -- 177 + "000000000000000000000000", -- 178 + "000000000000000000000000", -- 179 + "000000000000000000000000", -- 180 + "000000000000000000000000", -- 181 + "000000000000000000000000", -- 182 + "000000000000000000000000", -- 183 + "000000000000000000000000", -- 184 + "000000000000000000000000", -- 185 + "000000000000000000000000", -- 186 + "000000000000000000000000", -- 187 + "000000000000000000000000", -- 188 + "000000000000000000000000", -- 189 + "000000000000000000000000", -- 190 + "000000000000000000000000", -- 191 + "000000000000000000000000", -- 192 + "000000000000000000000000", -- 193 + "000000000000000000000000", -- 194 + "000000000000000000000000", -- 195 + "000000000000000000000000", -- 196 + "000000000000000000000000", -- 197 + "000000000000000000000000", -- 198 + "000000000000000000000000", -- 199 + "000000000000000000000000", -- 200 + "000000000000000000000000", -- 201 + "000000000000000000000000", -- 202 + "000000000000000000000000", -- 203 + "000000000000000000000000", -- 204 + "000000000000000000000000", -- 205 + "000000000000000000000000", -- 206 + "000000000000000000000000", -- 207 + "000000000000000000000000", -- 208 + "000000000000000000000000", -- 209 + "000000000000000000000000", -- 210 + "000000000000000000000000", -- 211 + "000000000000000000000000", -- 212 + "000000000000000000000000", -- 213 + "000000000000000000000000", -- 214 + "000000000000000000000000", -- 215 + "000000000000000000000000", -- 216 + "000000000000000000000000", -- 217 + "000000000000000000000000", -- 218 + "000000000000000000000000", -- 219 + "000000000000000000000000", -- 220 + "000000000000000000000000", -- 221 + "000000000000000000000000", -- 222 + "000000000000000000000000", -- 223 + "000000000000000000000000", -- 224 + "000000000000000000000000", -- 225 + "000000000000000000000000", -- 226 + "000000000000000000000000", -- 227 + "000000000000000000000000", -- 228 + "000000000000000000000000", -- 229 + "000000000000000000000000", -- 230 + "000000000000000000000000", -- 231 + "000000000000000000000000", -- 232 + "000000000000000000000000", -- 233 + "000000000000000000000000", -- 234 + "000000000000000000000000", -- 235 + "000000000000000000000000", -- 236 + "000000000000000000000000", -- 237 + "000000000000000000000000", -- 238 + "000000000000000000000000", -- 239 + "000000000000000000000000", -- 240 + "000000000000000000000000", -- 241 + "000000000000000000000000", -- 242 + "000000000000000000000000", -- 243 + "000000000000000000000000", -- 244 + "000000000000000000000000", -- 245 + "000000000000000000000000", -- 246 + "000000000000000000000000", -- 247 + "000000000000000000000000", -- 248 + "000000000000000000000000", -- 249 + "000000000000000000000000", -- 250 + "000000000000000000000000", -- 251 + "000000000000000000000000", -- 252 + "000000000000000000000000", -- 253 + "000000000000000000000000", -- 254 + "000000000000000000000000"); -- 255 + signal int_xmem : int_mem_type := ( +-- when "11------10000000" => instr_array(JMP_INSTR) <= '1'; +-- "000000000000111011111001", -- 0 -- ORI #$0E, CCR + "000000000000000000001100", -- 0 -- REP + "000000000000000000000101", -- 1 -- ORI #$0E, MR + "000000000000111011111010", -- 2 -- ORI #$0E, OMR + "000000000000100010111010", -- 3 -- ANDI #$08, OMR +-- "000010101111000010000000", -- 1 -- JMP absolute +-- "000000000000000000011111", -- 2 -- #31 +-- "000011000000000000010000", -- 3 -- JMP #16 + "000000000000000000000000", -- 4 + "000000000000000000000000", -- 5 + "000000000000000000000000", -- 6 + "000000000000000000000000", -- 7 + "000000000000000000000000", -- 8 + "000000000000000000000000", -- 9 + "000000000000000000000000", -- 10 + "000000000000000000000000", -- 11 + "000000000000000000000000", -- 12 + "000000000000000000000000", -- 13 + "000000000000000000000000", -- 14 + "000000000000000000000000", -- 15 + "000000000000000000000000", -- 16 +-- "000000000000000000000000", -- 17 + "000010101101010110100000", -- 17 -- JCC (r5)- + "000000000000000000000000", -- 18 + "000000000000000000000000", -- 19 + "000010101101101010000000", -- 20 -- JMP (r2)+ + "000000000000000000000000", -- 21 + "000000000000000000000000", -- 22 + "000000000000000000000000", -- 23 + "000000000000000000000000", -- 24 + "000000000000000000000000", -- 25 + "000000000000000000000000", -- 26 + "000000000000000000000000", -- 27 + "000000000000000000000000", -- 28 + "000000000000000000000000", -- 29 + "000000000000000000000000", -- 30 + "000000000000000000000000", -- 31 +-- "000000000000000000000000", -- 32 +-- "000011010000000000000000", -- 32 -- JSR #0 + "000010111111000010000000", -- 32 -- JSR absolute + "000000000000000001000000", -- 33 -- #64 + "000000000000000000000000", -- 34 + "000000000000000000000000", -- 35 + "000000000000000000000000", -- 36 + "000000000000000000000000", -- 37 + "000000000000000000000000", -- 38 + "000000000000000000000000", -- 39 + "000000000000000000000000", -- 40 + "000000000000000000000000", -- 41 + "000000000000000000000000", -- 42 + "000000000000000000000000", -- 43 + "000000000000000000000000", -- 44 + "000000000000000000000000", -- 45 + "000000000000000000000000", -- 46 + "000000000000000000000000", -- 47 + "000000000000000000000000", -- 48 + "000000000000000000000000", -- 49 + "000000000000000000000000", -- 50 + "000000000000000000000000", -- 51 + "000000000000000000000000", -- 52 + "000000000000000000000000", -- 53 + "000000000000000000000000", -- 54 + "000000000000000000000000", -- 55 + "000000000000000000000000", -- 56 + "000000000000000000000000", -- 57 + "000000000000000000000000", -- 58 + "000000000000000000000000", -- 59 + "000000000000000000000000", -- 60 + "000000000000000000000000", -- 61 + "000000000000000000000000", -- 62 + "000000000000000000000000", -- 63 + "000000000000000000000000", -- 64 + "000000000000000000000000", -- 65 + "000000000000000000000000", -- 66 + "000000000000000000000000", -- 67 + "000000000000000000000000", -- 68 + "000000000000000000000000", -- 69 + "000000000000000000000100", -- 70 -- RTI + "000000000000000000000000", -- 71 + "000000000000000000000000", -- 72 + "000000000000000000000000", -- 73 + "000000000000000000000000", -- 74 + "000000000000000000000000", -- 75 + "000000000000000000000000", -- 76 + "000000000000000000000000", -- 77 + "000000000000000000000000", -- 78 + "000000000000000000000000", -- 79 + "000000000000000000000000", -- 80 + "000000000000000000000000", -- 81 + "000000000000000000000000", -- 82 + "000000000000000000000000", -- 83 + "000000000000000000000000", -- 84 + "000000000000000000000000", -- 85 + "000000000000000000000000", -- 86 + "000000000000000000000000", -- 87 + "000000000000000000000000", -- 88 + "000000000000000000000000", -- 89 + "000000000000000000000000", -- 90 + "000000000000000000000000", -- 91 + "000000000000000000000000", -- 92 + "000000000000000000000000", -- 93 + "000000000000000000000000", -- 94 + "000000000000000000000000", -- 95 + "000000000000000000000000", -- 96 + "000000000000000000000000", -- 97 + "000000000000000000000000", -- 98 + "000000000000000000000000", -- 99 + "000000000000000000000000", -- 100 + "000000000000000000000000", -- 101 + "000000000000000000000000", -- 102 + "000000000000000000000000", -- 103 + "000000000000000000000000", -- 104 + "000000000000000000000000", -- 105 + "000000000000000000000000", -- 106 + "000000000000000000000000", -- 107 + "000000000000000000000000", -- 108 + "000000000000000000000000", -- 109 + "000000000000000000000000", -- 110 + "000000000000000000000000", -- 111 + "000000000000000000000000", -- 112 + "000000000000000000000000", -- 113 + "000000000000000000000000", -- 114 + "000000000000000000000000", -- 115 + "000000000000000000000000", -- 116 + "000000000000000000000000", -- 117 + "000000000000000000000000", -- 118 + "000000000000000000000000", -- 119 + "000000000000000000000000", -- 120 + "000000000000000000000000", -- 121 + "000000000000000000000000", -- 122 + "000000000000000000000000", -- 123 + "000000000000000000000000", -- 124 + "000000000000000000000000", -- 125 + "000000000000000000000000", -- 126 + "000000000000000000000000", -- 127 + "000000000000000000000000", -- 128 + "000000000000000000000000", -- 129 + "000000000000000000000000", -- 130 + "000000000000000000000000", -- 131 + "000000000000000000000000", -- 132 + "000000000000000000000000", -- 133 + "000000000000000000000000", -- 134 + "000000000000000000000000", -- 135 + "000000000000000000000000", -- 136 + "000000000000000000000000", -- 137 + "000000000000000000000000", -- 138 + "000000000000000000000000", -- 139 + "000000000000000000000000", -- 140 + "000000000000000000000000", -- 141 + "000000000000000000000000", -- 142 + "000000000000000000000000", -- 143 + "000000000000000000000000", -- 144 + "000000000000000000000000", -- 145 + "000000000000000000000000", -- 146 + "000000000000000000000000", -- 147 + "000000000000000000000000", -- 148 + "000000000000000000000000", -- 149 + "000000000000000000000000", -- 150 + "000000000000000000000000", -- 151 + "000000000000000000000000", -- 152 + "000000000000000000000000", -- 153 + "000000000000000000000000", -- 154 + "000000000000000000000000", -- 155 + "000000000000000000000000", -- 156 + "000000000000000000000000", -- 157 + "000000000000000000000000", -- 158 + "000000000000000000000000", -- 159 + "000000000000000000000000", -- 160 + "000000000000000000000000", -- 161 + "000000000000000000000000", -- 162 + "000000000000000000000000", -- 163 + "000000000000000000000000", -- 164 + "000000000000000000000000", -- 165 + "000000000000000000000000", -- 166 + "000000000000000000000000", -- 167 + "000000000000000000000000", -- 168 + "000000000000000000000000", -- 169 + "000000000000000000000000", -- 170 + "000000000000000000000000", -- 171 + "000000000000000000000000", -- 172 + "000000000000000000000000", -- 173 + "000000000000000000000000", -- 174 + "000000000000000000000000", -- 175 + "000000000000000000000000", -- 176 + "000000000000000000000000", -- 177 + "000000000000000000000000", -- 178 + "000000000000000000000000", -- 179 + "000000000000000000000000", -- 180 + "000000000000000000000000", -- 181 + "000000000000000000000000", -- 182 + "000000000000000000000000", -- 183 + "000000000000000000000000", -- 184 + "000000000000000000000000", -- 185 + "000000000000000000000000", -- 186 + "000000000000000000000000", -- 187 + "000000000000000000000000", -- 188 + "000000000000000000000000", -- 189 + "000000000000000000000000", -- 190 + "000000000000000000000000", -- 191 + "000000000000000000000000", -- 192 + "000000000000000000000000", -- 193 + "000000000000000000000000", -- 194 + "000000000000000000000000", -- 195 + "000000000000000000000000", -- 196 + "000000000000000000000000", -- 197 + "000000000000000000000000", -- 198 + "000000000000000000000000", -- 199 + "000000000000000000000000", -- 200 + "000000000000000000000000", -- 201 + "000000000000000000000000", -- 202 + "000000000000000000000000", -- 203 + "000000000000000000000000", -- 204 + "000000000000000000000000", -- 205 + "000000000000000000000000", -- 206 + "000000000000000000000000", -- 207 + "000000000000000000000000", -- 208 + "000000000000000000000000", -- 209 + "000000000000000000000000", -- 210 + "000000000000000000000000", -- 211 + "000000000000000000000000", -- 212 + "000000000000000000000000", -- 213 + "000000000000000000000000", -- 214 + "000000000000000000000000", -- 215 + "000000000000000000000000", -- 216 + "000000000000000000000000", -- 217 + "000000000000000000000000", -- 218 + "000000000000000000000000", -- 219 + "000000000000000000000000", -- 220 + "000000000000000000000000", -- 221 + "000000000000000000000000", -- 222 + "000000000000000000000000", -- 223 + "000000000000000000000000", -- 224 + "000000000000000000000000", -- 225 + "000000000000000000000000", -- 226 + "000000000000000000000000", -- 227 + "000000000000000000000000", -- 228 + "000000000000000000000000", -- 229 + "000000000000000000000000", -- 230 + "000000000000000000000000", -- 231 + "000000000000000000000000", -- 232 + "000000000000000000000000", -- 233 + "000000000000000000000000", -- 234 + "000000000000000000000000", -- 235 + "000000000000000000000000", -- 236 + "000000000000000000000000", -- 237 + "000000000000000000000000", -- 238 + "000000000000000000000000", -- 239 + "000000000000000000000000", -- 240 + "000000000000000000000000", -- 241 + "000000000000000000000000", -- 242 + "000000000000000000000000", -- 243 + "000000000000000000000000", -- 244 + "000000000000000000000000", -- 245 + "000000000000000000000000", -- 246 + "000000000000000000000000", -- 247 + "000000000000000000000000", -- 248 + "000000000000000000000000", -- 249 + "000000000000000000000000", -- 250 + "000000000000000000000000", -- 251 + "000000000000000000000000", -- 252 + "000000000000000000000000", -- 253 + "000000000000000000000000", -- 254 + "000000000000000000000000"); -- 255 + signal int_ymem : int_mem_type := ( +-- when "11------10000000" => instr_array(JMP_INSTR) <= '1'; +-- "000000000000111011111001", -- 0 -- ORI #$0E, CCR + "000000000000000000000001", -- 0 -- REP + "000000000000000000000010", -- 1 -- ORI #$0E, MR + "000000000000000000000011", -- 2 -- ORI #$0E, OMR + "000000000000000000000100", -- 3 -- ANDI #$08, OMR +-- "000010101111000010000000", -- 1 -- JMP absolute +-- "000000000000000000011111", -- 2 -- #31 +-- "000011000000000000010000", -- 3 -- JMP #16 + "000000000000000000000101", -- 4 + "000000000000000000000110", -- 5 + "000000000000000000000111", -- 6 + "000000000000000000001000", -- 7 + "000000000000000000001001", -- 8 + "000000000000000000001010", -- 9 + "000000000000000000001011", -- 10 + "000000000000000000001100", -- 11 + "000000000000000000001101", -- 12 + "000000000000000000001110", -- 13 + "000000000000000000001111", -- 14 + "000000000000000000010000", -- 15 + "000000000000000000010001", -- 16 +-- "000000000000000000000000", -- 17 + "000010101101010110100000", -- 17 -- JCC (r5)- + "000000000000000000000000", -- 18 + "000000000000000000000000", -- 19 + "000010101101101010000000", -- 20 -- JMP (r2)+ + "000000000000000000000000", -- 21 + "000000000000000000000000", -- 22 + "000000000000000000000000", -- 23 + "000000000000000000000000", -- 24 + "000000000000000000000000", -- 25 + "000000000000000000000000", -- 26 + "000000000000000000000000", -- 27 + "000000000000000000000000", -- 28 + "000000000000000000000000", -- 29 + "000000000000000000000000", -- 30 + "000000000000000000000000", -- 31 +-- "000000000000000000000000", -- 32 +-- "000011010000000000000000", -- 32 -- JSR #0 + "000010111111000010000000", -- 32 -- JSR absolute + "000000000000000001000000", -- 33 -- #64 + "000000000000000000000000", -- 34 + "000000000000000000000000", -- 35 + "000000000000000000000000", -- 36 + "000000000000000000000000", -- 37 + "000000000000000000000000", -- 38 + "000000000000000000000000", -- 39 + "000000000000000000000000", -- 40 + "000000000000000000000000", -- 41 + "000000000000000000000000", -- 42 + "000000000000000000000000", -- 43 + "000000000000000000000000", -- 44 + "000000000000000000000000", -- 45 + "000000000000000000000000", -- 46 + "000000000000000000000000", -- 47 + "000000000000000000000000", -- 48 + "000000000000000000000000", -- 49 + "000000000000000000000000", -- 50 + "000000000000000000000000", -- 51 + "000000000000000000000000", -- 52 + "000000000000000000000000", -- 53 + "000000000000000000000000", -- 54 + "000000000000000000000000", -- 55 + "000000000000000000000000", -- 56 + "000000000000000000000000", -- 57 + "000000000000000000000000", -- 58 + "000000000000000000000000", -- 59 + "000000000000000000000000", -- 60 + "000000000000000000000000", -- 61 + "000000000000000000000000", -- 62 + "000000000000000000000000", -- 63 + "000000000000000000000000", -- 64 + "000000000000000000000000", -- 65 + "000000000000000000000000", -- 66 + "000000000000000000000000", -- 67 + "000000000000000000000000", -- 68 + "000000000000000000000000", -- 69 + "000000000000000000000100", -- 70 -- RTI + "000000000000000000000000", -- 71 + "000000000000000000000000", -- 72 + "000000000000000000000000", -- 73 + "000000000000000000000000", -- 74 + "000000000000000000000000", -- 75 + "000000000000000000000000", -- 76 + "000000000000000000000000", -- 77 + "000000000000000000000000", -- 78 + "000000000000000000000000", -- 79 + "000000000000000000000000", -- 80 + "000000000000000000000000", -- 81 + "000000000000000000000000", -- 82 + "000000000000000000000000", -- 83 + "000000000000000000000000", -- 84 + "000000000000000000000000", -- 85 + "000000000000000000000000", -- 86 + "000000000000000000000000", -- 87 + "000000000000000000000000", -- 88 + "000000000000000000000000", -- 89 + "000000000000000000000000", -- 90 + "000000000000000000000000", -- 91 + "000000000000000000000000", -- 92 + "000000000000000000000000", -- 93 + "000000000000000000000000", -- 94 + "000000000000000000000000", -- 95 + "000000000000000000000000", -- 96 + "000000000000000000000000", -- 97 + "000000000000000000000000", -- 98 + "000000000000000000000000", -- 99 + "000000000000000000000000", -- 100 + "000000000000000000000000", -- 101 + "000000000000000000000000", -- 102 + "000000000000000000000000", -- 103 + "000000000000000000000000", -- 104 + "000000000000000000000000", -- 105 + "000000000000000000000000", -- 106 + "000000000000000000000000", -- 107 + "000000000000000000000000", -- 108 + "000000000000000000000000", -- 109 + "000000000000000000000000", -- 110 + "000000000000000000000000", -- 111 + "000000000000000000000000", -- 112 + "000000000000000000000000", -- 113 + "000000000000000000000000", -- 114 + "000000000000000000000000", -- 115 + "000000000000000000000000", -- 116 + "000000000000000000000000", -- 117 + "000000000000000000000000", -- 118 + "000000000000000000000000", -- 119 + "000000000000000000000000", -- 120 + "000000000000000000000000", -- 121 + "000000000000000000000000", -- 122 + "000000000000000000000000", -- 123 + "000000000000000000000000", -- 124 + "000000000000000000000000", -- 125 + "000000000000000000000000", -- 126 + "000000000000000000000000", -- 127 + "000000000000000000000000", -- 128 + "000000000000000000000000", -- 129 + "000000000000000000000000", -- 130 + "000000000000000000000000", -- 131 + "000000000000000000000000", -- 132 + "000000000000000000000000", -- 133 + "000000000000000000000000", -- 134 + "000000000000000000000000", -- 135 + "000000000000000000000000", -- 136 + "000000000000000000000000", -- 137 + "000000000000000000000000", -- 138 + "000000000000000000000000", -- 139 + "000000000000000000000000", -- 140 + "000000000000000000000000", -- 141 + "000000000000000000000000", -- 142 + "000000000000000000000000", -- 143 + "000000000000000000000000", -- 144 + "000000000000000000000000", -- 145 + "000000000000000000000000", -- 146 + "000000000000000000000000", -- 147 + "000000000000000000000000", -- 148 + "000000000000000000000000", -- 149 + "000000000000000000000000", -- 150 + "000000000000000000000000", -- 151 + "000000000000000000000000", -- 152 + "000000000000000000000000", -- 153 + "000000000000000000000000", -- 154 + "000000000000000000000000", -- 155 + "000000000000000000000000", -- 156 + "000000000000000000000000", -- 157 + "000000000000000000000000", -- 158 + "000000000000000000000000", -- 159 + "000000000000000000000000", -- 160 + "000000000000000000000000", -- 161 + "000000000000000000000000", -- 162 + "000000000000000000000000", -- 163 + "000000000000000000000000", -- 164 + "000000000000000000000000", -- 165 + "000000000000000000000000", -- 166 + "000000000000000000000000", -- 167 + "000000000000000000000000", -- 168 + "000000000000000000000000", -- 169 + "000000000000000000000000", -- 170 + "000000000000000000000000", -- 171 + "000000000000000000000000", -- 172 + "000000000000000000000000", -- 173 + "000000000000000000000000", -- 174 + "000000000000000000000000", -- 175 + "000000000000000000000000", -- 176 + "000000000000000000000000", -- 177 + "000000000000000000000000", -- 178 + "000000000000000000000000", -- 179 + "000000000000000000000000", -- 180 + "000000000000000000000000", -- 181 + "000000000000000000000000", -- 182 + "000000000000000000000000", -- 183 + "000000000000000000000000", -- 184 + "000000000000000000000000", -- 185 + "000000000000000000000000", -- 186 + "000000000000000000000000", -- 187 + "000000000000000000000000", -- 188 + "000000000000000000000000", -- 189 + "000000000000000000000000", -- 190 + "000000000000000000000000", -- 191 + "000000000000000000000000", -- 192 + "000000000000000000000000", -- 193 + "000000000000000000000000", -- 194 + "000000000000000000000000", -- 195 + "000000000000000000000000", -- 196 + "000000000000000000000000", -- 197 + "000000000000000000000000", -- 198 + "000000000000000000000000", -- 199 + "000000000000000000000000", -- 200 + "000000000000000000000000", -- 201 + "000000000000000000000000", -- 202 + "000000000000000000000000", -- 203 + "000000000000000000000000", -- 204 + "000000000000000000000000", -- 205 + "000000000000000000000000", -- 206 + "000000000000000000000000", -- 207 + "000000000000000000000000", -- 208 + "000000000000000000000000", -- 209 + "000000000000000000000000", -- 210 + "000000000000000000000000", -- 211 + "000000000000000000000000", -- 212 + "000000000000000000000000", -- 213 + "000000000000000000000000", -- 214 + "000000000000000000000000", -- 215 + "000000000000000000000000", -- 216 + "000000000000000000000000", -- 217 + "000000000000000000000000", -- 218 + "000000000000000000000000", -- 219 + "000000000000000000000000", -- 220 + "000000000000000000000000", -- 221 + "000000000000000000000000", -- 222 + "000000000000000000000000", -- 223 + "000000000000000000000000", -- 224 + "000000000000000000000000", -- 225 + "000000000000000000000000", -- 226 + "000000000000000000000000", -- 227 + "000000000000000000000000", -- 228 + "000000000000000000000000", -- 229 + "000000000000000000000000", -- 230 + "000000000000000000000000", -- 231 + "000000000000000000000000", -- 232 + "000000000000000000000000", -- 233 + "000000000000000000000000", -- 234 + "000000000000000000000000", -- 235 + "000000000000000000000000", -- 236 + "000000000000000000000000", -- 237 + "000000000000000000000000", -- 238 + "000000000000000000000000", -- 239 + "000000000000000000000000", -- 240 + "000000000000000000000000", -- 241 + "000000000000000000000000", -- 242 + "000000000000000000000000", -- 243 + "000000000000000000000000", -- 244 + "000000000000000000000000", -- 245 + "000000000000000000000000", -- 246 + "000000000000000000000000", -- 247 + "000000000000000000000000", -- 248 + "000000000000000000000000", -- 249 + "000000000000000000000000", -- 250 + "000000000000000000000000", -- 251 + "000000000000000000000000", -- 252 + "000000000000000000000000", -- 253 + "000000000000000000000000", -- 254 + "000000000000000000000000"); -- 255 + +begin + +-- int_mem <= int_pmem when mem_type = P_MEM else +-- int_xmem when mem_type = X_MEM else +-- int_ymem when mem_type = Y_MEM; + + wr_accomplished <= wr_en; + + PMEM_GEN: if mem_type = P_MEM generate + data_out <= int_pmem(to_integer(unsigned(int_mem_rd_addr))); + process(clk) is + begin + if rising_edge(clk) then +-- if rst = '1' then +-- data_out_valid <= '0'; +-- int_mem_rd_addr <= (others => '0'); +-- else + int_mem_rd_addr <= std_logic_vector(rd_addr(7 downto 0)); + data_out_valid <= rd_en; + if wr_en = '1' then + int_pmem(to_integer(wr_addr)) <= data_in; + end if; +-- end if; + end if; + end process; + end generate; + + XMEM_GEN: if mem_type = X_MEM generate + data_out <= int_xmem(to_integer(unsigned(int_mem_rd_addr))); + process(clk) is + begin + if rising_edge(clk) then +-- if rst = '1' then +-- data_out_valid <= '0'; +-- int_mem_rd_addr <= (others => '0'); +-- else + int_mem_rd_addr <= std_logic_vector(rd_addr(7 downto 0)); + data_out_valid <= rd_en; + if wr_en = '1' then + int_xmem(to_integer(wr_addr)) <= data_in; + end if; +-- end if; + end if; + end process; + end generate; + + YMEM_GEN: if mem_type = Y_MEM generate + data_out <= int_ymem(to_integer(unsigned(int_mem_rd_addr))); + process(clk) is + begin + if rising_edge(clk) then +-- if rst = '1' then +-- data_out_valid <= '0'; +-- int_mem_rd_addr <= (others => '0'); +-- else + int_mem_rd_addr <= std_logic_vector(rd_addr(7 downto 0)); + data_out_valid <= rd_en; + if wr_en = '1' then + int_ymem(to_integer(wr_addr)) <= data_in; + end if; +-- end if; + end if; + end process; + end generate; +-- process(clk, rst) is +-- begin +-- if rising_edge(clk) then +-- if rst = '1' then +-- data_out_valid <= '0'; +-- int_mem_rd_addr <= (others => '0'); +-- else +-- int_mem_rd_addr <= std_logic_vector(rd_addr(7 downto 0)); +-- data_out_valid <= rd_en; +-- if wr_en = '1' then +-- if mem_type = P_MEM then +-- int_pmem(to_integer(wr_addr)) <= data_in; +-- elsif mem_type = X_MEM then +-- int_xmem(to_integer(wr_addr)) <= data_in; +-- elsif mem_type = Y_MEM then +-- int_ymem(to_integer(wr_addr)) <= data_in; +-- end if; +-- end if; +-- end if; +-- end if; +-- end process; + +end architecture rtl; + diff --git a/FPGA_quartus_GE/DSP/src/memory_management.vhd b/FPGA_quartus_GE/DSP/src/memory_management.vhd new file mode 100644 index 0000000..6a25ac8 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/memory_management.vhd @@ -0,0 +1,206 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity memory_management is port ( + clk, rst : in std_logic; + stall_flags : in std_logic_vector(PIPELINE_DEPTH-1 downto 0); + memory_stall : out std_logic; + data_rom_enable: in std_logic; + pmem_ctrl_in : in mem_ctrl_type_in; + pmem_ctrl_out : out mem_ctrl_type_out; + xmem_ctrl_in : in mem_ctrl_type_in; + xmem_ctrl_out : out mem_ctrl_type_out; + ymem_ctrl_in : in mem_ctrl_type_in; + ymem_ctrl_out : out mem_ctrl_type_out +); +end memory_management; + + +architecture rtl of memory_management is + + + component mem_control is + generic( + mem_type : memory_type + ); + port( + clk, rst : in std_logic; + rd_addr : in unsigned(BW_ADDRESS-1 downto 0); + rd_en : in std_logic; + data_out : out std_logic_vector(23 downto 0); + data_out_valid : out std_logic; + wr_addr : in unsigned(BW_ADDRESS-1 downto 0); + wr_en : in std_logic; + wr_accomplished : out std_logic; + data_in : in std_logic_vector(23 downto 0) + ); + end component mem_control; + + signal pmem_data_out : std_logic_vector(23 downto 0); + signal pmem_data_out_valid : std_logic; + + signal pmem_rd_addr : unsigned(BW_ADDRESS-1 downto 0); + signal pmem_rd_en : std_logic; + + signal xmem_rd_en : std_logic; + signal xmem_data_out : std_logic_vector(23 downto 0); + signal xmem_data_out_valid : std_logic; + signal xmem_rd_polling : std_logic; + + signal ymem_rd_en : std_logic; + signal ymem_data_out : std_logic_vector(23 downto 0); + signal ymem_data_out_valid : std_logic; + signal ymem_rd_polling : std_logic; + + signal pmem_stall_buffer : std_logic_vector(23 downto 0); + signal pmem_stall_buffer_valid : std_logic; + signal xmem_stall_buffer : std_logic_vector(23 downto 0); + signal ymem_stall_buffer : std_logic_vector(23 downto 0); + + signal stall_flags_d : std_logic_vector(PIPELINE_DEPTH-1 downto 0); + +begin + + -- here it is necessary to store the output of the pmem/xmem/ymem when the pipeline enters a stall + -- when the pipeline wakes up, this temporal result is inserted into the pipeline + stall_buffer: process(clk) is + begin + if rising_edge(clk) then + if rst = '1' then + pmem_stall_buffer <= (others => '0'); + pmem_stall_buffer_valid <= '0'; + xmem_stall_buffer <= (others => '0'); + ymem_stall_buffer <= (others => '0'); + stall_flags_d <= (others => '0'); + else + stall_flags_d <= stall_flags; + if stall_flags(ST_FETCH2) = '1' and stall_flags_d(ST_FETCH2) = '0' then + if pmem_data_out_valid = '1' then + pmem_stall_buffer <= pmem_data_out; + pmem_stall_buffer_valid <= '1'; + end if; + end if; + if stall_flags(ST_FETCH2) = '0' and stall_flags_d(ST_FETCH2) = '1' then + pmem_stall_buffer_valid <= '0'; + end if; + + + end if; + end if; + end process stall_buffer; + + memory_stall <= '1' when ( xmem_rd_en = '1' or (xmem_rd_polling = '1' and xmem_data_out_valid = '0') ) or + ( ymem_rd_en = '1' or (ymem_rd_polling = '1' and ymem_data_out_valid = '0') ) else + '0'; + + ------------------------------- + -- PMEM CONTROLLER + ------------------------------- + inst_pmem_ctrl : mem_control + generic map( + mem_type => P_MEM + ) + port map( + clk => clk, + rst => rst, + rd_addr => pmem_ctrl_in.rd_addr, + rd_en => pmem_ctrl_in.rd_en, + data_out => pmem_data_out, + data_out_valid => pmem_data_out_valid, + wr_addr => pmem_ctrl_in.wr_addr, + wr_en => pmem_ctrl_in.wr_en, + data_in => pmem_ctrl_in.data_in + ); + + -- In case we wake up from a stall use the buffered value + pmem_ctrl_out.data_out <= pmem_stall_buffer when stall_flags(ST_FETCH2) = '0' and + stall_flags_d(ST_FETCH2) = '1' and + pmem_stall_buffer_valid = '1' else + pmem_data_out; + + pmem_ctrl_out.data_out_valid <= pmem_stall_buffer_valid when stall_flags(ST_FETCH2) = '0' and + stall_flags_d(ST_FETCH2) = '1' else + '0' when stall_flags(ST_FETCH2) = '1' else + pmem_data_out_valid; + + ------------------------------- + -- XMEM CONTROLLER + ------------------------------- + inst_xmem_ctrl : mem_control + generic map( + mem_type => X_MEM + ) + port map( + clk => clk, + rst => rst, + rd_addr => xmem_ctrl_in.rd_addr, + rd_en => xmem_rd_en, + data_out => xmem_data_out, + data_out_valid => xmem_data_out_valid, + wr_addr => xmem_ctrl_in.wr_addr, + wr_en => xmem_ctrl_in.wr_en, + data_in => xmem_ctrl_in.data_in + ); + + xmem_rd_en <= '1' when xmem_rd_polling = '0' and xmem_ctrl_in.rd_en = '1' else '0'; + + xmem_ctrl_out.data_out <= xmem_data_out; + xmem_ctrl_out.data_out_valid <= xmem_data_out_valid; + + ------------------------------- + -- YMEM CONTROLLER + ------------------------------- + inst_ymem_ctrl : mem_control + generic map( + mem_type => Y_MEM + ) + port map( + clk => clk, + rst => rst, + rd_addr => ymem_ctrl_in.rd_addr, + rd_en => ymem_rd_en, + data_out => ymem_data_out, + data_out_valid => ymem_data_out_valid, + wr_addr => ymem_ctrl_in.wr_addr, + wr_en => ymem_ctrl_in.wr_en, + data_in => ymem_ctrl_in.data_in + ); + + ymem_rd_en <= '1' when ymem_rd_polling = '0' and ymem_ctrl_in.rd_en = '1' else '0'; + + ymem_ctrl_out.data_out <= ymem_data_out; + ymem_ctrl_out.data_out_valid <= ymem_data_out_valid; + + mem_stall_control: process(clk) is + begin + if rising_edge(clk) then + if rst = '1' then + xmem_rd_polling <= '0'; + ymem_rd_polling <= '0'; + else + if xmem_rd_en = '1' then + xmem_rd_polling <= '1'; + end if; + + if xmem_data_out_valid = '1' then + xmem_rd_polling <= '0'; + end if; + + if ymem_rd_en = '1' then + ymem_rd_polling <= '1'; + end if; + + if ymem_data_out_valid = '1' then + ymem_rd_polling <= '0'; + end if; + + end if; + end if; + end process; +end architecture; + diff --git a/FPGA_quartus_GE/DSP/src/parameter_pkg.vhd b/FPGA_quartus_GE/DSP/src/parameter_pkg.vhd new file mode 100644 index 0000000..9e3c301 --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/parameter_pkg.vhd @@ -0,0 +1,10 @@ + +package parameter_pkg is + + constant BW_ADDRESS : natural := 16; + + constant PIPELINE_DEPTH : natural := 5; + + constant NUM_ACT_SIGNALS : natural := 26; + +end package; diff --git a/FPGA_quartus_GE/DSP/src/pipeline.vhd b/FPGA_quartus_GE/DSP/src/pipeline.vhd new file mode 100644 index 0000000..5b5a98e --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/pipeline.vhd @@ -0,0 +1,968 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity pipeline is port ( + clk, rst : in std_logic; + register_file_out : out register_file_type + +); +end pipeline; + +-- TODOs: +-- External memory accesses +-- ROM tables +-- Reading from SSH flag has to modify stack pointer +-- Memory access (x,y,p) and talling accordingly +-- Address Generator: ring buffers are not yet supported + +-- List of BUGS: +-- - Reading from address one clock cycle after writing to the same address might result in corrupted data!! +-- - SBC instruction has errorneous carry flag calculation + +-- List of probable issues: +-- - Reading from XMEM/YMEM with stalls probably results in corrupted data +-- - ENDDO instruction probably has to flush the pipeline afterwards +-- - Writing to memory occurs twice, when stalls occur + +-- Things to optimize: +-- - RTS/RTI could be executed in the ADGEN Stage already +-- - DO loops always flush the pipeline. This is necessary in case we have a very short loop. +-- The single instruction of the loop then has passed the fetch stage already without the branch + + +architecture rtl of pipeline is + + signal pipeline_regs : pipeline_type; + signal stall_flags : std_logic_vector(PIPELINE_DEPTH-1 downto 0); + + component fetch_stage is port( + pc_old : in unsigned(BW_ADDRESS-1 downto 0); + pc_new : out unsigned(BW_ADDRESS-1 downto 0); + modify_pc : in std_logic; + modified_pc : in unsigned(BW_ADDRESS-1 downto 0); + register_file : in register_file_type; + decrement_lc : out std_logic; + perform_enddo : out std_logic + ); + end component fetch_stage; + + signal pc_old, pc_new : unsigned(BW_ADDRESS-1 downto 0); + signal fetch_modify_pc : std_logic; + signal fetch_modified_pc : unsigned(BW_ADDRESS-1 downto 0); + signal fetch_perform_enddo: std_logic; + signal fetch_decrement_lc: std_logic; + + + component decode_stage is port( + activate_dec : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + dble_word_instr : out std_logic; + instr_array : out instructions_type; + act_array : out std_logic_vector(NUM_ACT_SIGNALS-1 downto 0); + reg_wr_addr : out std_logic_vector(5 downto 0); + reg_rd_addr : out std_logic_vector(5 downto 0); + x_bus_rd_addr : out std_logic_vector(1 downto 0); + x_bus_wr_addr : out std_logic_vector(1 downto 0); + y_bus_rd_addr : out std_logic_vector(1 downto 0); + y_bus_wr_addr : out std_logic_vector(1 downto 0); + l_bus_addr : out std_logic_vector(2 downto 0); + adgen_mode_a : out adgen_mode_type; + adgen_mode_b : out adgen_mode_type; + alu_ctrl : out alu_ctrl_type + ); + end component decode_stage; + + signal dec_activate : std_logic; + signal dec_instr_word : std_logic_vector(23 downto 0); + signal dec_dble_word_instr : std_logic; + signal dec_instr_array : instructions_type; + signal dec_act_array : std_logic_vector(NUM_ACT_SIGNALS-1 downto 0); + signal dec_reg_wr_addr : std_logic_vector(5 downto 0); + signal dec_reg_rd_addr : std_logic_vector(5 downto 0); + signal dec_x_bus_wr_addr : std_logic_vector(1 downto 0); + signal dec_x_bus_rd_addr : std_logic_vector(1 downto 0); + signal dec_y_bus_wr_addr : std_logic_vector(1 downto 0); + signal dec_y_bus_rd_addr : std_logic_vector(1 downto 0); + signal dec_l_bus_addr : std_logic_vector(2 downto 0); + signal dec_adgen_mode_a : adgen_mode_type; + signal dec_adgen_mode_b : adgen_mode_type; + signal dec_alu_ctrl : alu_ctrl_type; + + component adgen_stage is port( + activate_adgen : in std_logic; + activate_x_mem : in std_logic; + activate_y_mem : in std_logic; + activate_l_mem : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + optional_ea_word : in std_logic_vector(23 downto 0); + register_file : in register_file_type; + adgen_mode_a : in adgen_mode_type; + adgen_mode_b : in adgen_mode_type; + address_out_x : out unsigned(BW_ADDRESS-1 downto 0); + address_out_y : out unsigned(BW_ADDRESS-1 downto 0); + wr_R_port_A_valid : out std_logic; + wr_R_port_A : out addr_wr_port_type; + wr_R_port_B_valid : out std_logic; + wr_R_port_B : out addr_wr_port_type + ); + end component adgen_stage; + + signal adgen_activate : std_logic; + signal adgen_activate_x_mem : std_logic; + signal adgen_activate_y_mem : std_logic; + signal adgen_activate_l_mem : std_logic; + signal adgen_instr_word : std_logic_vector(23 downto 0); + signal adgen_instr_array : instructions_type; + signal adgen_optional_ea_word : std_logic_vector(23 downto 0); + signal adgen_register_file : register_file_type; + signal adgen_mode_a : adgen_mode_type; + signal adgen_mode_b : adgen_mode_type; + signal adgen_address_out_x : unsigned(BW_ADDRESS-1 downto 0); + signal adgen_address_out_y : unsigned(BW_ADDRESS-1 downto 0); + signal adgen_wr_R_port_A_valid : std_logic; + signal adgen_wr_R_port_A : addr_wr_port_type; + signal adgen_wr_R_port_B_valid : std_logic; + signal adgen_wr_R_port_B : addr_wr_port_type; + + component exec_stage_bit_modify is port( + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + src_operand : in std_logic_vector(23 downto 0); + register_file : in register_file_type; + dst_operand : out std_logic_vector(23 downto 0); + bit_cond_met : out std_logic; + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) + ); + end component exec_stage_bit_modify; + + signal exec_bit_modify_instr_word : std_logic_vector(23 downto 0); + signal exec_bit_modify_instr_array : instructions_type; + signal exec_bit_modify_src_operand : std_logic_vector(23 downto 0); + signal exec_bit_modify_dst_operand : std_logic_vector(23 downto 0); + signal exec_bit_modify_bit_cond_met : std_logic; + signal exec_bit_modify_modify_sr : std_logic; + signal exec_bit_modify_modified_sr : std_logic_vector(15 downto 0); + + component exec_stage_branch is port( + activate_exec_bra : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + jump_address : in unsigned(BW_ADDRESS-1 downto 0); + bit_cond_met : in std_logic; + cc_flag_set : in std_logic; + push_stack : out push_stack_type; + pop_stack : out pop_stack_type; + modify_pc : out std_logic; + modified_pc : out unsigned(BW_ADDRESS-1 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) + ); + end component exec_stage_branch; + + signal exec_bra_activate : std_logic; + signal exec_bra_instr_word : std_logic_vector(23 downto 0); + signal exec_bra_instr_array : instructions_type; + signal exec_bra_jump_address : unsigned(BW_ADDRESS-1 downto 0); + signal exec_bra_bit_cond_met : std_logic; + signal exec_bra_push_stack : push_stack_type; + signal exec_bra_pop_stack : pop_stack_type; + signal exec_bra_modify_pc : std_logic; + signal exec_bra_modified_pc : unsigned(BW_ADDRESS-1 downto 0); + signal exec_bra_modify_sr : std_logic; + signal exec_bra_modified_sr : std_logic_vector(15 downto 0); + + component exec_stage_cr_mod is port( + activate_exec_cr_mod : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0); + modify_omr : out std_logic; + modified_omr : out std_logic_vector(7 downto 0) + ); + end component exec_stage_cr_mod; + + signal exec_cr_mod_activate : std_logic; + signal exec_cr_mod_instr_word : std_logic_vector(23 downto 0); + signal exec_cr_mod_instr_array : instructions_type; + signal exec_cr_mod_modify_sr : std_logic; + signal exec_cr_mod_modified_sr : std_logic_vector(15 downto 0); + signal exec_cr_mod_modify_omr : std_logic; + signal exec_cr_mod_modified_omr : std_logic_vector(7 downto 0); + + component exec_stage_loop is port( + clk, rst : in std_logic; + activate_exec_loop : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + loop_iterations : in unsigned(15 downto 0); + loop_address : in unsigned(BW_ADDRESS-1 downto 0); + loop_start_address: in unsigned(BW_ADDRESS-1 downto 0); + register_file : in register_file_type; + fetch_perform_enddo: in std_logic; + memory_stall : in std_logic; + push_stack : out push_stack_type; + pop_stack : out pop_stack_type; + stall_rep : out std_logic; + stall_do : out std_logic; + decrement_lc : out std_logic; + modify_lc : out std_logic; + modified_lc : out unsigned(15 downto 0); + modify_la : out std_logic; + modified_la : out unsigned(15 downto 0); + modify_pc : out std_logic; + modified_pc : out unsigned(BW_ADDRESS-1 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) + ); + end component exec_stage_loop; + + signal exec_loop_activate : std_logic; + signal exec_loop_instr_word : std_logic_vector(23 downto 0); + signal exec_loop_instr_array : instructions_type; + signal exec_loop_iterations : unsigned(15 downto 0); + signal exec_loop_address : unsigned(BW_ADDRESS-1 downto 0); + signal exec_loop_start_address : unsigned(BW_ADDRESS-1 downto 0); + signal exec_loop_register_file : register_file_type; + signal exec_loop_push_stack : push_stack_type; + signal exec_loop_pop_stack : pop_stack_type; + signal exec_loop_stall_rep : std_logic; + signal exec_loop_stall_do : std_logic; + signal exec_loop_decrement_lc : std_logic; + signal exec_loop_modify_lc : std_logic; + signal exec_loop_modified_lc : unsigned(15 downto 0); + signal exec_loop_modify_la : std_logic; + signal exec_loop_modified_la : unsigned(BW_ADDRESS-1 downto 0); + signal exec_loop_modify_pc : std_logic; + signal exec_loop_modified_pc : unsigned(BW_ADDRESS-1 downto 0); + signal exec_loop_modify_sr : std_logic; + signal exec_loop_modified_sr : std_logic_vector(BW_ADDRESS-1 downto 0); + + component exec_stage_alu is port( + alu_activate : in std_logic; + instr_word : in std_logic_vector(23 downto 0); + alu_ctrl : in alu_ctrl_type; + register_file : in register_file_type; + addr_r_in : in unsigned(BW_ADDRESS-1 downto 0); + addr_r_out : out unsigned(BW_ADDRESS-1 downto 0); + modify_accu : out std_logic; + dst_accu : out std_logic; + modified_accu : out signed(55 downto 0); + modify_sr : out std_logic; + modified_sr : out std_logic_vector(15 downto 0) + ); + end component exec_stage_alu; + + signal exec_alu_activate : std_logic; + signal exec_alu_instr_word : std_logic_vector(23 downto 0); + signal exec_alu_ctrl : alu_ctrl_type; + signal exec_alu_addr_r_in : unsigned(BW_ADDRESS-1 downto 0); + signal exec_alu_addr_r_out : unsigned(BW_ADDRESS-1 downto 0); + signal exec_alu_modify_accu : std_logic; + signal exec_alu_dst_accu : std_logic; + signal exec_alu_modified_accu : signed(55 downto 0); + signal exec_alu_modify_sr : std_logic; + signal exec_alu_modified_sr : std_logic_vector(15 downto 0); + + signal exec_imm_8bit : std_logic_vector(23 downto 0); + signal exec_imm_12bit : std_logic_vector(23 downto 0); + signal exec_src_operand : std_logic_vector(23 downto 0); + signal exec_dst_operand : std_logic_vector(23 downto 0); + + component exec_stage_cc_flag_calc is port( + instr_word : in std_logic_vector(23 downto 0); + instr_array : in instructions_type; + register_file : in register_file_type; + cc_flag_set : out std_logic + ); + end component exec_stage_cc_flag_calc; + + signal exec_cc_flag_calc_instr_word : std_logic_vector(23 downto 0); + signal exec_cc_flag_calc_instr_array : instructions_type; + signal exec_cc_flag_set : std_logic; + + component reg_file is port( + clk, rst : in std_logic; + register_file : out register_file_type; + wr_R_port_A_valid : in std_logic; + wr_R_port_A : in addr_wr_port_type; + wr_R_port_B_valid : in std_logic; + wr_R_port_B : in addr_wr_port_type; + alu_wr_valid : in std_logic; + alu_wr_addr : in std_logic; + alu_wr_data : in signed(55 downto 0); + reg_wr_addr : in std_logic_vector(5 downto 0); + reg_wr_addr_valid : in std_logic; + reg_wr_data : in std_Logic_vector(23 downto 0); + reg_rd_addr : in std_logic_vector(5 downto 0); + reg_rd_data : out std_Logic_vector(23 downto 0); + X_bus_rd_addr : in std_logic_vector(1 downto 0); + X_bus_data_out : out std_logic_vector(23 downto 0); + X_bus_wr_addr : in std_logic_vector(1 downto 0); + X_bus_wr_valid : in std_logic; + X_bus_data_in : in std_logic_vector(23 downto 0); + Y_bus_rd_addr : in std_logic_vector(1 downto 0); + Y_bus_data_out : out std_logic_vector(23 downto 0); + Y_bus_wr_addr : in std_logic_vector(1 downto 0); + Y_bus_wr_valid : in std_logic; + Y_bus_data_in : in std_logic_vector(23 downto 0); + L_bus_rd_addr : in std_logic_vector(2 downto 0); + L_bus_rd_valid : in std_logic; + L_bus_wr_addr : in std_logic_vector(2 downto 0); + L_bus_wr_valid : in std_logic; + push_stack : in push_stack_type; + pop_stack : in pop_stack_type; + set_sr : in std_logic; + new_sr : in std_logic_vector(15 downto 0); + set_omr : in std_logic; + new_omr : in std_logic_vector(7 downto 0); + set_lc : in std_logic; + new_lc : in unsigned(15 downto 0); + dec_lc : in std_logic; + set_la : in std_logic; + new_la : in unsigned(BW_ADDRESS-1 downto 0) + ); + end component reg_file; + + signal register_file : register_file_type; + signal rf_wr_R_port_A_valid : std_logic; + signal rf_wr_R_port_B_valid : std_logic; + signal rf_reg_wr_addr : std_logic_vector(5 downto 0); + signal rf_reg_wr_addr_valid : std_logic; + signal rf_reg_wr_data : std_logic_vector(23 downto 0); + signal rf_reg_rd_addr : std_logic_vector(5 downto 0); + signal rf_reg_rd_data : std_logic_vector(23 downto 0); + signal rf_X_bus_rd_addr : std_logic_vector(1 downto 0); + signal rf_X_bus_data_out : std_logic_vector(23 downto 0); + signal rf_X_bus_wr_addr : std_logic_vector(1 downto 0); + signal rf_X_bus_wr_valid : std_logic; + signal rf_X_bus_data_in : std_logic_vector(23 downto 0); + signal rf_Y_bus_rd_addr : std_logic_vector(1 downto 0); + signal rf_Y_bus_data_out : std_logic_vector(23 downto 0); + signal rf_Y_bus_wr_addr : std_logic_vector(1 downto 0); + signal rf_Y_bus_wr_valid : std_logic; + signal rf_Y_bus_data_in : std_logic_vector(23 downto 0); + signal rf_L_bus_rd_addr : std_logic_vector(2 downto 0); + signal rf_L_bus_rd_valid : std_logic; + signal rf_L_bus_wr_addr : std_logic_vector(2 downto 0); + signal rf_L_bus_wr_valid : std_logic; + signal push_stack : push_stack_type; + signal pop_stack : pop_stack_type; + signal rf_set_sr : std_logic; + signal rf_new_sr : std_logic_vector(15 downto 0); + signal rf_set_omr : std_logic; + signal rf_new_omr : std_logic_vector(7 downto 0); + signal rf_dec_lc : std_logic; + signal rf_set_lc : std_logic; + signal rf_new_lc : unsigned(15 downto 0); + signal rf_set_la : std_logic; + signal rf_new_la : unsigned(BW_ADDRESS-1 downto 0); + signal rf_alu_wr_valid : std_logic; + + component memory_management is port ( + clk, rst : in std_logic; + stall_flags : in std_logic_vector(PIPELINE_DEPTH-1 downto 0); + memory_stall : out std_logic; + data_rom_enable: in std_logic; + pmem_ctrl_in : in mem_ctrl_type_in; + pmem_ctrl_out : out mem_ctrl_type_out; + xmem_ctrl_in : in mem_ctrl_type_in; + xmem_ctrl_out : out mem_ctrl_type_out; + ymem_ctrl_in : in mem_ctrl_type_in; + ymem_ctrl_out : out mem_ctrl_type_out + ); + end component memory_management; + + signal memory_stall : std_logic; + signal pmem_ctrl_in : mem_ctrl_type_in; + signal pmem_ctrl_out : mem_ctrl_type_out; + signal xmem_ctrl_in : mem_ctrl_type_in; + signal xmem_ctrl_out : mem_ctrl_type_out; + signal ymem_ctrl_in : mem_ctrl_type_in; + signal ymem_ctrl_out : mem_ctrl_type_out; + + signal pmem_data_out : std_logic_vector(23 downto 0); + signal pmem_data_out_valid : std_logic; + signal xmem_data_out : std_logic_vector(23 downto 0); + signal xmem_data_out_valid : std_logic; + signal ymem_data_out : std_logic_vector(23 downto 0); + signal ymem_data_out_valid : std_logic; + +begin + register_file_out <= register_file; + + -- merge all stall sources + stall_flags(ST_FETCH) <= '1' when exec_loop_stall_rep = '1' or + memory_stall = '1' or + exec_loop_stall_do = '1' else '0'; + stall_flags(ST_FETCH2) <= '1' when exec_loop_stall_rep = '1' or + memory_stall = '1' or + exec_loop_stall_do = '1' else '0'; + stall_flags(ST_DECODE) <= '1' when exec_loop_stall_rep = '1' or + memory_stall = '1' or + exec_loop_stall_do = '1' else '0'; + stall_flags(ST_ADGEN) <= exec_loop_stall_do; +-- stall_flags(ST_ADGEN) <= '1' when memory_stall = '1' or +-- exec_loop_stall_do = '1' else '0'; +-- stall_flags(ST_EXEC) <= '0'; + stall_flags(ST_EXEC) <= exec_loop_stall_do; +-- stall_flags(ST_EXEC) <= '1' when memory_stall = '1' or +-- exec_loop_stall_do = '1' else '0'; + + shift_pipeline: process(clk, rst) is + procedure flush_pipeline_stage(stage: natural) is + begin + pipeline_regs(stage).pc <= (others => '1'); + pipeline_regs(stage).instr_word <= (others => '0'); + pipeline_regs(stage).act_array <= (others => '0'); + pipeline_regs(stage).instr_array <= INSTR_NOP; + pipeline_regs(stage).dble_word_instr <= '0'; + pipeline_regs(stage).dec_activate <= '0'; + pipeline_regs(stage).adgen_mode_a <= NOP; + pipeline_regs(stage).adgen_mode_b <= NOP; + pipeline_regs(stage).reg_wr_addr <= (others => '0'); + pipeline_regs(stage).reg_rd_addr <= (others => '0'); + pipeline_regs(stage).x_bus_rd_addr <= (others => '0'); + pipeline_regs(stage).x_bus_wr_addr <= (others => '0'); + pipeline_regs(stage).y_bus_rd_addr <= (others => '0'); + pipeline_regs(stage).y_bus_wr_addr <= (others => '0'); + pipeline_regs(stage).l_bus_addr <= (others => '0'); + pipeline_regs(stage).adgen_address_x <= (others => '0'); + pipeline_regs(stage).adgen_address_y <= (others => '0'); + pipeline_regs(stage).RAM_out_x <= (others => '0'); + pipeline_regs(stage).RAM_out_y <= (others => '0'); + pipeline_regs(stage).alu_ctrl.store_result <= '0'; + end procedure flush_pipeline_stage; + begin + if rising_edge(clk) then + if rst = '1' then + for i in 0 to PIPELINE_DEPTH-1 loop + flush_pipeline_stage(i); + end loop; + else + -- shift the pipeline registers when no stall applies + for i in 1 to PIPELINE_DEPTH-1 loop + if stall_flags(i) = '0' then + -- do not copy the pipeline registers from a stalled pipeline stage + -- for REP we do not flush +-- if stall_flags(i-1) = '1' then + if (stall_flags(i-1) = '1' and exec_loop_stall_rep = '0') or + (i = ST_ADGEN and memory_stall = '1' and exec_loop_stall_rep = '1') then + flush_pipeline_stage(i); + else + pipeline_regs(i) <= pipeline_regs(i-1); + end if; + end if; + end loop; + -- FETCH Pipeline Registers + if stall_flags(ST_FETCH) = '0' then + pipeline_regs(ST_FETCH).pc <= pc_new; + pipeline_regs(ST_FETCH).dec_activate <= '1'; + end if; + + -- FETCH2 Pipeline Registers + if stall_flags(ST_FETCH2) = '0' then + -- Normal pipeline operation? + -- Buffering of RAM output when stalling is performed in the memory management + if pmem_data_out_valid = '1' then + pipeline_regs(ST_FETCH2).instr_word <= pmem_data_out; + end if; + end if; + + -- DECODE Pipeline registers + if stall_flags(ST_DECODE) = '0' then + pipeline_regs(ST_DECODE).act_array <= dec_act_array; + pipeline_regs(ST_DECODE).instr_array <= dec_instr_array; + pipeline_regs(ST_DECODE).dble_word_instr <= dec_dble_word_instr; + pipeline_regs(ST_DECODE).reg_wr_addr <= dec_reg_wr_addr; + pipeline_regs(ST_DECODE).reg_rd_addr <= dec_reg_rd_addr; + pipeline_regs(ST_DECODE).x_bus_wr_addr <= dec_x_bus_wr_addr; + pipeline_regs(ST_DECODE).x_bus_rd_addr <= dec_x_bus_rd_addr; + pipeline_regs(ST_DECODE).y_bus_wr_addr <= dec_y_bus_wr_addr; + pipeline_regs(ST_DECODE).y_bus_rd_addr <= dec_y_bus_rd_addr; + pipeline_regs(ST_DECODE).l_bus_addr <= dec_l_bus_addr; + pipeline_regs(ST_DECODE).adgen_mode_a <= dec_adgen_mode_a; + pipeline_regs(ST_DECODE).adgen_mode_b <= dec_adgen_mode_b; + pipeline_regs(ST_DECODE).alu_ctrl <= dec_alu_ctrl; + end if; + + -- ADGEN Pipeline registers + if stall_flags(ST_ADGEN) = '0' then + pipeline_regs(ST_ADGEN).adgen_address_x <= adgen_address_out_x; + pipeline_regs(ST_ADGEN).adgen_address_y <= adgen_address_out_y; + end if; + if xmem_data_out_valid = '1' then + pipeline_regs(ST_ADGEN).RAM_out_x <= xmem_data_out; + end if; + if ymem_data_out_valid = '1' then + pipeline_regs(ST_ADGEN).RAM_out_y <= ymem_data_out; + end if; + + -- EXEC Pipeline stuff + if exec_bra_modify_pc = '1' or exec_loop_modify_pc = '1' then + -- clear the following pipeline stages, + -- since we modified the pc. + -- Do not flush ST_FETCH - it will hold the correct pc. + flush_pipeline_stage(ST_FETCH2); + flush_pipeline_stage(ST_DECODE); + flush_pipeline_stage(ST_ADGEN); + end if; + end if; + end if; + end process shift_pipeline; + + ------------------------------- + -- FETCH STAGE INSTANTIATION + ------------------------------- + inst_fetch_stage: fetch_stage port map( + pc_old => pc_old, + pc_new => pc_new, + modify_pc => fetch_modify_pc, + modified_pc => fetch_modified_pc, + register_file => register_file, + decrement_lc => fetch_decrement_lc, + perform_enddo => fetch_perform_enddo + ); + + pc_old <= pipeline_regs(ST_FETCH).pc; + + fetch_modify_pc <= '1' when exec_bra_modify_pc = '1' or exec_loop_modify_pc = '1' else '0'; + fetch_modified_pc <= exec_bra_modified_pc when exec_bra_modify_pc = '1' else + exec_loop_modified_pc; + + ------------------------------- + -- DECODE STAGE INSTANTIATION + ------------------------------- + inst_decode_stage : decode_stage port map( + activate_dec => dec_activate, + instr_word => dec_instr_word, + dble_word_instr => dec_dble_word_instr, + instr_array => dec_instr_array, + act_array => dec_act_array, + reg_wr_addr => dec_reg_wr_addr, + reg_rd_addr => dec_reg_rd_addr, + x_bus_wr_addr => dec_x_bus_wr_addr, + x_bus_rd_addr => dec_x_bus_rd_addr, + y_bus_wr_addr => dec_y_bus_wr_addr, + y_bus_rd_addr => dec_y_bus_rd_addr, + l_bus_addr => dec_l_bus_addr, + adgen_mode_a => dec_adgen_mode_a, + adgen_mode_b => dec_adgen_mode_b, + alu_ctrl => dec_alu_ctrl + ); + + dec_instr_word <= pipeline_regs(ST_DECODE-1).instr_word; + -- do not decode, when we have no valid instruction. This can happen when + -- 1) the pipeline just started its operation + -- 2) the pipeline was flushed due to a jump + -- 3) we are processing a instruction that consists of two words + dec_activate <= '1' when pipeline_regs(ST_DECODE-1).dec_activate = '1' and pipeline_regs(ST_DECODE).dble_word_instr = '0' else '0'; + + ------------------------------- + -- AGU STAGE INSTANTIATION + ------------------------------- + inst_adgen_stage: adgen_stage port map( + activate_adgen => adgen_activate, + activate_x_mem => adgen_activate_x_mem, + activate_y_mem => adgen_activate_y_mem, + activate_l_mem => adgen_activate_l_mem, + instr_word => adgen_instr_word, + instr_array => adgen_instr_array, + optional_ea_word => adgen_optional_ea_word, + register_file => register_file, + adgen_mode_a => adgen_mode_a, + adgen_mode_b => adgen_mode_b, + address_out_x => adgen_address_out_x, + address_out_y => adgen_address_out_y, + wr_R_port_A_valid => adgen_wr_R_port_A_valid, + wr_R_port_A => adgen_wr_R_port_A, + wr_R_port_B_valid => adgen_wr_R_port_B_valid, + wr_R_port_B => adgen_wr_R_port_B + ); + + adgen_activate <= pipeline_regs(ST_ADGEN-1).act_array(ACT_ADGEN); + adgen_activate_x_mem <= '1' when pipeline_regs(ST_ADGEN-1).act_array(ACT_X_MEM_RD) = '1' or + pipeline_regs(ST_ADGEN-1).act_array(ACT_X_MEM_WR) = '1' else '0'; + adgen_activate_y_mem <= '1' when pipeline_regs(ST_ADGEN-1).act_array(ACT_Y_MEM_RD) = '1' or + pipeline_regs(ST_ADGEN-1).act_array(ACT_Y_MEM_WR) = '1' else '0'; + adgen_activate_l_mem <= '1' when pipeline_regs(ST_ADGEN-1).act_array(ACT_L_BUS_RD) = '1' or + pipeline_regs(ST_ADGEN-1).act_array(ACT_L_BUS_WR) = '1' else '0'; + adgen_instr_word <= pipeline_regs(ST_ADGEN-1).instr_word; + adgen_instr_array <= pipeline_regs(ST_ADGEN-1).instr_array; + adgen_optional_ea_word <= pipeline_regs(ST_ADGEN-2).instr_word; + adgen_mode_a <= pipeline_regs(ST_ADGEN-1).adgen_mode_a; + adgen_mode_b <= pipeline_regs(ST_ADGEN-1).adgen_mode_b; + + ------------------------------- + -- EXECUTE STAGE INSTANTIATIONS + ------------------------------- + inst_exec_stage_alu: exec_stage_alu port map( + alu_activate => exec_alu_activate, + instr_word => exec_alu_instr_word, + alu_ctrl => exec_alu_ctrl, + register_file => register_file, + addr_r_in => exec_alu_addr_r_in, + addr_r_out => exec_alu_addr_r_out, + modify_accu => exec_alu_modify_accu, + dst_accu => exec_alu_dst_accu, + modified_accu => exec_alu_modified_accu, + modify_sr => exec_alu_modify_sr, + modified_sr => exec_alu_modified_sr + ); + + exec_alu_activate <= pipeline_regs(ST_EXEC-1).act_array(ACT_ALU); + exec_alu_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_alu_ctrl <= pipeline_regs(ST_EXEC-1).alu_ctrl; + + exec_alu_addr_r_in <= unsigned(rf_reg_rd_data(BW_ADDRESS-1 downto 0)); + + inst_exec_stage_bit_modify: exec_stage_bit_modify port map( + instr_word => exec_bit_modify_instr_word, + instr_array => exec_bit_modify_instr_array, + src_operand => exec_bit_modify_src_operand, + register_file => register_file, + dst_operand => exec_bit_modify_dst_operand, + bit_cond_met => exec_bit_modify_bit_cond_met, + modify_sr => exec_bit_modify_modify_sr, + modified_sr => exec_bit_modify_modified_sr + ); + + exec_bit_modify_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_bit_modify_instr_array <= pipeline_regs(ST_EXEC-1).instr_array; + exec_bit_modify_src_operand <= exec_src_operand; + + -- Writing to the register file using the 6 bit addressing scheme + -- sources are: + -- 1) X-RAM output + -- 2) Y-RAM output + -- 3) register file itself + -- 4) short immediate value (8 bit stored in instruction word) + -- 5) long immediate value (from optional effective address extension) + -- 5) address generated by the address generation unit (LUA instr) + exec_src_operand <= pipeline_regs(ST_EXEC-1).RAM_out_x when pipeline_regs(ST_EXEC-1).act_array(ACT_X_MEM_RD) = '1' else + pipeline_regs(ST_EXEC-1).RAM_out_y when pipeline_regs(ST_EXEC-1).act_array(ACT_Y_MEM_RD) = '1' else + rf_reg_rd_data when pipeline_regs(ST_EXEC-1).act_array(ACT_REG_RD) = '1' else + exec_imm_8bit when pipeline_regs(ST_EXEC-1).act_array(ACT_IMM_8BIT) = '1' else + exec_imm_12bit when pipeline_regs(ST_EXEC-1).act_array(ACT_IMM_12BIT) = '1' else + pipeline_regs(ST_EXEC-2).instr_word when pipeline_regs(ST_EXEC-1).act_array(ACT_IMM_LONG) = '1' else + std_logic_vector(resize(pipeline_regs(ST_EXEC-1).adgen_address_x, 24)); -- for LUA instr. + + -- Destination for the register file using the 6 bit addressing scheme. + -- Either read the bit modified version of the read value + -- or use the modified Rn in case of a NORM instruction +-- exec_dst_operand <= exec_bit_modify_dst_operand; + exec_dst_operand <= exec_bit_modify_dst_operand when pipeline_regs(ST_EXEC-1).act_array(ACT_NORM) = '0' else + std_logic_vector(resize(exec_alu_addr_r_out,24)); + + -- Unit to check whether cc (in Jcc, JScc, Tcc, ...) is true + inst_exec_stage_cc_flag_calc: exec_stage_cc_flag_calc port map( + instr_word => exec_cc_flag_calc_instr_word, + instr_array => exec_cc_flag_calc_instr_array, + register_file => register_file, + cc_flag_set => exec_cc_flag_set + ); + + exec_cc_flag_calc_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_cc_flag_calc_instr_array <= pipeline_regs(ST_EXEC-1).instr_array; + + + inst_exec_stage_branch : exec_stage_branch port map( + activate_exec_bra => exec_bra_activate, + instr_word => exec_bra_instr_word, + instr_array => exec_bra_instr_array, + register_file => register_file, + jump_address => exec_bra_jump_address, + bit_cond_met => exec_bra_bit_cond_met, + cc_flag_set => exec_cc_flag_set, + push_stack => exec_bra_push_stack, + pop_stack => exec_bra_pop_stack, + modify_pc => exec_bra_modify_pc, + modified_pc => exec_bra_modified_pc, + modify_sr => exec_bra_modify_sr, + modified_sr => exec_bra_modified_sr + ); + + exec_bra_activate <= pipeline_regs(ST_EXEC-1).act_array(ACT_EXEC_BRA); + exec_bra_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_bra_instr_array <= pipeline_regs(ST_EXEC-1).instr_array; + exec_bra_jump_address <= pipeline_regs(ST_EXEC-1).adgen_address_x when pipeline_regs(ST_EXEC-1).dble_word_instr = '0' else + unsigned(pipeline_regs(ST_EXEC-2).instr_word(BW_ADDRESS-1 downto 0)); + exec_bra_bit_cond_met <= exec_bit_modify_bit_cond_met; + + inst_exec_stage_cr_mod : exec_stage_cr_mod port map( + activate_exec_cr_mod => exec_cr_mod_activate, + instr_word => exec_cr_mod_instr_word, + instr_array => exec_cr_mod_instr_array, + register_file => register_file, + modify_sr => exec_cr_mod_modify_sr, + modified_sr => exec_cr_mod_modified_sr, + modify_omr => exec_cr_mod_modify_omr, + modified_omr => exec_cr_mod_modified_omr + ); + + exec_cr_mod_activate <= pipeline_regs(ST_EXEC-1).act_array(ACT_EXEC_CR_MOD); + exec_cr_mod_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_cr_mod_instr_array <= pipeline_regs(ST_EXEC-1).instr_array; + + inst_exec_stage_loop: exec_stage_loop port map( + clk => clk, + rst => rst, + activate_exec_loop => exec_loop_activate, + instr_word => exec_loop_instr_word, + instr_array => exec_loop_instr_array, + loop_iterations => exec_loop_iterations, + loop_address => exec_loop_address, + loop_start_address => exec_loop_start_address, + register_file => register_file, + fetch_perform_enddo=> fetch_perform_enddo, + memory_stall => memory_stall, + push_stack => exec_loop_push_stack, + pop_stack => exec_loop_pop_stack, + stall_rep => exec_loop_stall_rep, + stall_do => exec_loop_stall_do, + modify_lc => exec_loop_modify_lc, + decrement_lc => exec_loop_decrement_lc, + modified_lc => exec_loop_modified_lc, + modify_la => exec_loop_modify_la, + modified_la => exec_loop_modified_la, + modify_pc => exec_loop_modify_pc, + modified_pc => exec_loop_modified_pc, + modify_sr => exec_loop_modify_sr, + modified_sr => exec_loop_modified_sr + ); + + exec_loop_activate <= pipeline_regs(ST_EXEC-1).act_array(ACT_EXEC_LOOP); + exec_loop_instr_word <= pipeline_regs(ST_EXEC-1).instr_word; + exec_loop_instr_array <= pipeline_regs(ST_EXEC-1).instr_array; + exec_loop_iterations <= unsigned(exec_src_operand(15 downto 0)); + -- from which source is our operand? + -- - XMEM + -- - YMEM + -- - Any register + -- - Immediate (from instruction word) +-- exec_src_operand <= unsigned(pipeline_regs(ST_EXEC-1).RAM_out_x(BW_ADDRESS-1 downto 0)) when +-- pipeline_regs(ST_EXEC-1).act_array(ACT_X_MEM_RD) = '1' else +-- unsigned(pipeline_regs(ST_EXEC-1).RAM_out_y(BW_ADDRESS-1 downto 0)) when +-- pipeline_regs(ST_EXEC-1).act_array(ACT_Y_MEM_RD) = '1' else +-- unsigned(rf_reg_rd_data(15 downto 0)) when +-- pipeline_regs(ST_EXEC-1).act_array(ACT_REG_RD) = '1' else +-- "00000000" & unsigned(pipeline_regs(ST_EXEC-1).instr_word(15 downto 8)); + + -- Loop address is given by the second instruction word of the DO instruction. + -- This address is available one previous stage within the pipeline + exec_loop_address <= unsigned(pipeline_regs(ST_EXEC-2).instr_word(BW_ADDRESS-1 downto 0)) - 1; + -- one more stage before we find the programm counter of the first instruction to be executed in a DO loop + exec_loop_start_address <= unsigned(pipeline_regs(ST_EXEC-3).pc); + + -- For the 8 bit immediate is can be either a fractional (registers x0,x1,y0,y1,a,b) or an unsigned (the rest) + exec_imm_8bit(23 downto 16) <= (others => '0') when rf_reg_wr_addr(5 downto 2) /= "0001" and rf_reg_wr_addr(5 downto 1) /= "00111" else + pipeline_regs(ST_EXEC-1).instr_word(15 downto 8); + exec_imm_8bit(15 downto 8) <= (others => '0'); + exec_imm_8bit( 7 downto 0) <= (others => '0') when rf_reg_wr_addr(5 downto 2) = "0001" or rf_reg_wr_addr(5 downto 1) = "00111" else + pipeline_regs(ST_EXEC-1).instr_word(15 downto 8); + -- The 12 bit immediate stems from the instruction word + exec_imm_12bit(23 downto 12) <= (others => '0'); + exec_imm_12bit(11 downto 0) <= pipeline_regs(ST_EXEC-1).instr_word(3 downto 0) & pipeline_regs(ST_EXEC-1).instr_word(15 downto 8); + ----------------- + -- REGISTER FILE + ----------------- + inst_reg_file: reg_file port map( + clk => clk, + rst => rst, + register_file => register_file, + wr_R_port_A_valid => rf_wr_R_port_A_valid, + wr_R_port_A => adgen_wr_R_port_A, + wr_R_port_B_valid => rf_wr_R_port_B_valid, + wr_R_port_B => adgen_wr_R_port_B, + reg_wr_addr => rf_reg_wr_addr, + reg_wr_addr_valid => rf_reg_wr_addr_valid, + reg_wr_data => rf_reg_wr_data, + reg_rd_addr => rf_reg_rd_addr, + reg_rd_data => rf_reg_rd_data, + alu_wr_valid => rf_alu_wr_valid, + alu_wr_addr => exec_alu_dst_accu, + alu_wr_data => exec_alu_modified_accu, + X_bus_rd_addr => rf_X_bus_rd_addr, + X_bus_data_out => rf_X_bus_data_out, + X_bus_wr_addr => rf_X_bus_wr_addr , + X_bus_wr_valid => rf_X_bus_wr_valid, + X_bus_data_in => rf_X_bus_data_in , + Y_bus_rd_addr => rf_Y_bus_rd_addr , + Y_bus_data_out => rf_Y_bus_data_out, + Y_bus_wr_addr => rf_Y_bus_wr_addr , + Y_bus_wr_valid => rf_Y_bus_wr_valid, + Y_bus_data_in => rf_Y_bus_data_in , + L_bus_rd_addr => rf_L_bus_rd_addr , + L_bus_rd_valid => rf_L_bus_rd_valid, + L_bus_wr_addr => rf_L_bus_wr_addr , + L_bus_wr_valid => rf_L_bus_wr_valid, + push_stack => push_stack, + pop_stack => pop_stack, + set_sr => rf_set_sr, + new_sr => rf_new_sr, + set_omr => rf_set_omr, + new_omr => rf_new_omr, + set_la => rf_set_la, + new_la => rf_new_la, + dec_lc => rf_dec_lc, + set_lc => rf_set_lc, + new_lc => rf_new_lc + ); + + ----------------- + -- BUSES (X,Y,L) + ----------------- + rf_X_bus_wr_valid <= pipeline_regs(ST_EXEC-1).act_array(ACT_X_BUS_WR); + rf_X_bus_wr_addr <= pipeline_regs(ST_EXEC-1).x_bus_wr_addr; + rf_X_bus_rd_addr <= pipeline_regs(ST_EXEC-1).x_bus_rd_addr; + rf_X_bus_data_in <= rf_X_bus_data_out when pipeline_regs(ST_EXEC-1).act_array(ACT_X_BUS_RD) = '1' else + pipeline_regs(ST_EXEC-1).RAM_out_x; -- when pipeline_regs(ST_EXEC-1).act_array(ACT_X_MEM_RD) = '1' else + + rf_Y_bus_wr_valid <= pipeline_regs(ST_EXEC-1).act_array(ACT_Y_BUS_WR); + rf_Y_bus_wr_addr <= pipeline_regs(ST_EXEC-1).y_bus_wr_addr; + rf_Y_bus_rd_addr <= pipeline_regs(ST_EXEC-1).y_bus_rd_addr; + rf_Y_bus_data_in <= rf_Y_bus_data_out when pipeline_regs(ST_EXEC-1).act_array(ACT_Y_BUS_RD) = '1' else + pipeline_regs(ST_EXEC-1).RAM_out_y; -- when pipeline_regs(ST_EXEC-1).act_array(ACT_Y_MEM_RD) = '1' else + + rf_L_bus_wr_valid <= pipeline_regs(ST_EXEC-1).act_array(ACT_L_BUS_WR); + rf_L_bus_rd_valid <= pipeline_regs(ST_EXEC-1).act_array(ACT_L_BUS_RD); + rf_L_bus_wr_addr <= pipeline_regs(ST_EXEC-1).l_bus_addr; -- equal to bits in instruction word + rf_L_bus_rd_addr <= pipeline_regs(ST_EXEC-1).l_bus_addr; -- could be simplified by taking these bits.. + + -- writing to the R registers within the ADGEN stage has to be prevented when + -- 1) a jump is currently being executed (which is detected in the exec stage) + -- 2) stall cycles occur. In this case the write will happen in the last cycle, when we stop stalling. + -- 3) a memory access results in a stall (e.g. caused by the instruction to REP) + rf_wr_R_port_A_valid <= '0' when stall_flags(ST_ADGEN) = '1' or + exec_bra_modify_pc = '1' or + memory_stall = '1' else + adgen_wr_R_port_A_valid; + rf_wr_R_port_B_valid <= '0' when stall_flags(ST_ADGEN) = '1' or + exec_bra_modify_pc = '1' or + memory_stall = '1' else + adgen_wr_R_port_B_valid; + + + rf_reg_wr_addr <= pipeline_regs(ST_EXEC-1).reg_wr_addr; + -- can be set due to + -- 1) normal write operation (e.g., move) + -- 2) conditional move (Tcc) + rf_reg_wr_addr_valid <= '1' when pipeline_regs(ST_EXEC-1).act_array(ACT_REG_WR) = '1' else + exec_cc_flag_set when pipeline_regs(ST_EXEC-1).act_array(ACT_REG_WR_CC) = '1' else '0'; + rf_reg_wr_data <= exec_dst_operand; + + rf_reg_rd_addr <= pipeline_regs(ST_EXEC-1).reg_rd_addr; + + -- Writing from the ALU can depend on the condition code (Tcc) instruction + rf_alu_wr_valid <= exec_cc_flag_set when pipeline_regs(ST_EXEC-1).act_array(ACT_ALU_WR_CC) = '1' else + exec_alu_modify_accu; + + push_stack.valid <= '1' when exec_bra_push_stack.valid = '1' or exec_loop_push_stack.valid = '1' else '0'; + push_stack.content <= exec_bra_push_stack.content when exec_bra_push_stack.valid = '1' else + exec_loop_push_stack.content; + -- for jump to subroutine store the pc of the subsequent instruction + push_stack.pc <= pipeline_regs(ST_EXEC-2).pc when exec_bra_push_stack.valid = '1' and pipeline_regs(ST_EXEC-1).dble_word_instr = '0' else + pipeline_regs(ST_EXEC-3).pc when exec_bra_push_stack.valid = '1' and pipeline_regs(ST_EXEC-1).dble_word_instr = '1' else + exec_loop_push_stack.pc when exec_loop_push_stack.valid = '1' else + (others => '0'); + + pop_stack.valid <= '1' when exec_bra_pop_stack.valid = '1' or exec_loop_pop_stack.valid = '1' else '0'; + + rf_set_sr <= '1' when exec_bra_modify_sr = '1' or + exec_cr_mod_modify_sr = '1' or + exec_loop_modify_sr = '1' or + exec_alu_modify_sr = '1' or + exec_bit_modify_modify_sr = '1' else '0'; + rf_new_sr <= exec_bra_modified_sr when exec_bra_modify_sr = '1' else + exec_cr_mod_modified_sr when exec_cr_mod_modify_sr = '1' else + exec_loop_modified_sr when exec_loop_modify_sr = '1' else + exec_alu_modified_sr when exec_alu_modify_sr = '1' else + exec_bit_modify_modified_sr; -- when exec_bit_modify_modify_sr = '1' else + + rf_set_omr <= exec_cr_mod_modify_omr; + rf_new_omr <= exec_cr_mod_modified_omr; + rf_set_lc <= exec_loop_modify_lc; + rf_new_lc <= exec_loop_modified_lc; + rf_set_la <= exec_loop_modify_la; + rf_new_la <= exec_loop_modified_la; + + rf_dec_lc <= '1' when exec_loop_decrement_lc = '1' or fetch_decrement_lc = '1' else '0'; + + --------------------- + -- MEMORY MANAGEMENT + --------------------- + MMU_inst: memory_management port map ( + clk => clk, + rst => rst, + stall_flags => stall_flags, + memory_stall => memory_stall, + data_rom_enable => register_file.omr(2), + pmem_ctrl_in => pmem_ctrl_in, + pmem_ctrl_out => pmem_ctrl_out, + xmem_ctrl_in => xmem_ctrl_in, + xmem_ctrl_out => xmem_ctrl_out, + ymem_ctrl_in => ymem_ctrl_in, + ymem_ctrl_out => ymem_ctrl_out + ); + + ------------------ + -- Program Memory + ------------------ + pmem_ctrl_in.rd_addr <= pc_new; + pmem_ctrl_in.rd_en <= '1' when stall_flags(ST_FETCH) = '0' else '0'; + -- TODO: Writing to PMEM! + pmem_ctrl_in.wr_addr <= (others => '0'); + pmem_ctrl_in.wr_en <= '0'; + pmem_ctrl_in.data_in <= (others => '0'); + + pmem_data_out <= pmem_ctrl_out.data_out; + pmem_data_out_valid <= pmem_ctrl_out.data_out_valid; + + + ------------------ + -- X Memory + ------------------ + -- Either take the result of the AGU or use the short absolute value stored in the instruction word + xmem_ctrl_in.rd_addr <= adgen_address_out_x when pipeline_regs(ST_ADGEN-1).act_array(ACT_ADGEN) = '1' else + "0000000000" & unsigned(pipeline_regs(ST_ADGEN-1).instr_word(13 downto 8)); + xmem_ctrl_in.rd_en <= '1' when pipeline_regs(ST_ADGEN-1).act_array(ACT_X_MEM_RD) = '1' else '0'; + -- Either take the result of the AGU or use the absolute value stored in the instruction word + xmem_ctrl_in.wr_addr <= pipeline_regs(ST_EXEC-1).adgen_address_x when pipeline_regs(ST_EXEC-1).act_array(ACT_ADGEN) = '1' else + "0000000000" & unsigned(pipeline_regs(ST_EXEC-1).instr_word(13 downto 8)); + xmem_ctrl_in.wr_en <= '1' when pipeline_regs(ST_EXEC-1).act_array(ACT_X_MEM_WR) = '1' else '0'; + xmem_ctrl_in.data_in <= rf_X_bus_data_out when pipeline_regs(ST_EXEC-1).act_array(ACT_X_BUS_RD) = '1' or + pipeline_regs(ST_EXEC-1).act_array(ACT_L_BUS_RD) = '1' else + exec_dst_operand; + + xmem_data_out <= xmem_ctrl_out.data_out; + xmem_data_out_valid <= xmem_ctrl_out.data_out_valid; + + ------------------ + -- Y Memory + ------------------ + -- Either take the result of the AGU or use the absolute value stored in the instruction word + ymem_ctrl_in.rd_addr <= adgen_address_out_y when pipeline_regs(ST_ADGEN-1).act_array(ACT_ADGEN) = '1' else + "0000000000" & unsigned(pipeline_regs(ST_ADGEN-1).instr_word(13 downto 8)); + ymem_ctrl_in.rd_en <= '1' when pipeline_regs(ST_ADGEN-1).act_array(ACT_Y_MEM_RD) = '1' else '0'; + -- Either take the result of the AGU or use the absolute value stored in the instruction word + ymem_ctrl_in.wr_addr <= pipeline_regs(ST_EXEC-1).adgen_address_y when pipeline_regs(ST_EXEC-1).act_array(ACT_ADGEN) = '1' else + "0000000000" & unsigned(pipeline_regs(ST_EXEC-1).instr_word(13 downto 8)); + ymem_ctrl_in.wr_en <= '1' when pipeline_regs(ST_EXEC-1).act_array(ACT_Y_MEM_WR) = '1' else '0'; + ymem_ctrl_in.data_in <= rf_Y_bus_data_out when pipeline_regs(ST_EXEC-1).act_array(ACT_Y_BUS_RD) = '1' or + pipeline_regs(ST_EXEC-1).act_array(ACT_L_BUS_RD) = '1' else + exec_dst_operand; + + ymem_data_out <= ymem_ctrl_out.data_out; + ymem_data_out_valid <= ymem_ctrl_out.data_out_valid; + + +end architecture rtl; diff --git a/FPGA_quartus_GE/DSP/src/reg_file.vhd b/FPGA_quartus_GE/DSP/src/reg_file.vhd new file mode 100644 index 0000000..7f3244c --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/reg_file.vhd @@ -0,0 +1,679 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; +use work.types_pkg.all; +use work.constants_pkg.all; + +entity reg_file is port( + clk, rst : in std_logic; + register_file : out register_file_type; + wr_R_port_A_valid : in std_logic; + wr_R_port_A : in addr_wr_port_type; + wr_R_port_B_valid : in std_logic; + wr_R_port_B : in addr_wr_port_type; + alu_wr_valid : in std_logic; + alu_wr_addr : in std_logic; + alu_wr_data : in signed(55 downto 0); + reg_wr_addr : in std_logic_vector(5 downto 0); + reg_wr_addr_valid : in std_logic; + reg_wr_data : in std_Logic_vector(23 downto 0); + reg_rd_addr : in std_logic_vector(5 downto 0); + reg_rd_data : out std_Logic_vector(23 downto 0); + X_bus_rd_addr : in std_logic_vector(1 downto 0); + X_bus_data_out : out std_logic_vector(23 downto 0); + X_bus_wr_addr : in std_logic_vector(1 downto 0); + X_bus_wr_valid : in std_logic; + X_bus_data_in : in std_logic_vector(23 downto 0); + Y_bus_rd_addr : in std_logic_vector(1 downto 0); + Y_bus_data_out : out std_logic_vector(23 downto 0); + Y_bus_wr_addr : in std_logic_vector(1 downto 0); + Y_bus_wr_valid : in std_logic; + Y_bus_data_in : in std_logic_vector(23 downto 0); + L_bus_rd_addr : in std_logic_vector(2 downto 0); + L_bus_rd_valid : in std_logic; + L_bus_wr_addr : in std_logic_vector(2 downto 0); + L_bus_wr_valid : in std_logic; + push_stack : in push_stack_type; + pop_stack : in pop_stack_type; + set_sr : in std_logic; + new_sr : in std_logic_vector(15 downto 0); + set_omr : in std_logic; + new_omr : in std_logic_vector(7 downto 0); + dec_lc : in std_logic; + set_lc : in std_logic; + new_lc : in unsigned(15 downto 0); + set_la : in std_logic; + new_la : in unsigned(BW_ADDRESS-1 downto 0) +); +end entity; + + +architecture rtl of reg_file is + + signal addr_r : addr_array; + signal addr_m : addr_array; + signal addr_n : addr_array; + + signal loop_address : unsigned(BW_ADDRESS-1 downto 0); + signal loop_counter : unsigned(15 downto 0); + + -- condition code register + signal ccr : std_logic_vector(7 downto 0); + -- mode register + signal mr : std_logic_vector(7 downto 0); + -- status register = mode register + condition code register + signal sr : std_logic_vector(15 downto 0); + -- operation mode register + signal omr : std_logic_vector(7 downto 0); + + signal stack_pointer : unsigned(5 downto 0); + signal system_stack_ssh : stack_array_type; + signal system_stack_ssl : stack_array_type; + + signal x0 : signed(23 downto 0); + signal x1 : signed(23 downto 0); + signal y0 : signed(23 downto 0); + signal y1 : signed(23 downto 0); + + signal a0 : signed(23 downto 0); + signal a1 : signed(23 downto 0); + signal a2 : signed(7 downto 0); + + signal b0 : signed(23 downto 0); + signal b1 : signed(23 downto 0); + signal b2 : signed(7 downto 0); + + signal limited_a1 : signed(23 downto 0); + signal limited_b1 : signed(23 downto 0); + signal limited_a0 : signed(23 downto 0); + signal limited_b0 : signed(23 downto 0); + signal set_limiting_flag : std_logic; + signal X_bus_rd_limited_a : std_logic; + signal X_bus_rd_limited_b : std_logic; + signal Y_bus_rd_limited_a : std_logic; + signal Y_bus_rd_limited_b : std_logic; + signal reg_rd_limited_a : std_logic; + signal reg_rd_limited_b : std_logic; + signal rd_limited_a : std_logic; + signal rd_limited_b : std_logic; + +begin + + + + sr <= mr & ccr; + + register_file.addr_r <= addr_r; + register_file.addr_n <= addr_n; + register_file.addr_m <= addr_m; + register_file.lc <= loop_counter; + register_file.la <= loop_address; + register_file.ccr <= ccr; + register_file.mr <= mr; + register_file.sr <= sr; + register_file.omr <= omr; + register_file.stack_pointer <= stack_pointer; + register_file.current_ssh <= system_stack_ssh(to_integer(stack_pointer(3 downto 0))); + register_file.current_ssl <= system_stack_ssl(to_integer(stack_pointer(3 downto 0))); + register_file.a <= a2 & a1 & a0; + register_file.b <= b2 & b1 & b0; + register_file.x0 <= x0; + register_file.x1 <= x1; + register_file.y0 <= y0; + register_file.y1 <= y1; + + + global_register_file: process(clk) is + variable stack_pointer_plus_1 : unsigned(3 downto 0); + variable reg_addr : integer range 0 to 7; + begin + if rising_edge(clk) then + if rst = '1' then + addr_r <= (others => (others => '0')); + addr_n <= (others => (others => '0')); + addr_m <= (others => (others => '1')); + ccr <= (others => '0'); + mr <= (others => '0'); + omr <= (others => '0'); + system_stack_ssl <= (others => (others => '0')); + system_stack_ssh <= (others => (others => '0')); + stack_pointer <= (others => '0'); + loop_counter <= (others => '0'); + loop_address <= (others => '0'); + x0 <= (others => '0'); + x1 <= (others => '0'); + y0 <= (others => '0'); + y1 <= (others => '0'); + a0 <= (others => '0'); + a1 <= (others => '0'); + a2 <= (others => '0'); + b0 <= (others => '0'); + b1 <= (others => '0'); + b2 <= (others => '0'); + else + reg_addr := to_integer(unsigned(reg_wr_addr(2 downto 0))); + ----------------------------------------------------------------------- + -- General write port to register file using 6 bit addressing scheme + ----------------------------------------------------------------------- + if reg_wr_addr_valid = '1' then + case reg_wr_addr(5 downto 3) is + -- X0, X1, Y0, Y1 + when "000" => + case reg_wr_addr(2 downto 0) is + when "100" => + x0 <= signed(reg_wr_data); + when "101" => + x1 <= signed(reg_wr_data); + when "110" => + y0 <= signed(reg_wr_data); + when "111" => + y1 <= signed(reg_wr_data); + when others => + end case; + + -- A0, B0, A2, B2, A1, B1, A, B + when "001" => + case reg_wr_addr(2 downto 0) is + when "000" => + a0 <= signed(reg_wr_data); + when "001" => + b0 <= signed(reg_wr_data); + when "010" => + a2 <= signed(reg_wr_data(7 downto 0)); + when "011" => + b2 <= signed(reg_wr_data(7 downto 0)); + when "100" => + a1 <= signed(reg_wr_data); + when "101" => + b1 <= signed(reg_wr_data); + when "110" => + a2 <= (others => reg_wr_data(23)); + a1 <= signed(reg_wr_data); + a0 <= (others => '0'); + when "111" => + b2 <= (others => reg_wr_data(23)); + b1 <= signed(reg_wr_data); + b0 <= (others => '0'); + when others => + end case; + + -- R0-R7 + when "010" => + addr_r(reg_addr) <= unsigned(reg_wr_data(BW_ADDRESS-1 downto 0)); + + -- N0-N7 + when "011" => + addr_n(reg_addr) <= unsigned(reg_wr_data(BW_ADDRESS-1 downto 0)); + + -- M0-M7 + when "100" => + addr_m(reg_addr) <= unsigned(reg_wr_data(BW_ADDRESS-1 downto 0)); + + -- SR, OMR, SP, SSH, SSL, LA, LC + when "111" => + case reg_wr_addr(2 downto 0) is + -- SR + when "001" => + mr <= reg_wr_data(15 downto 8); + ccr <= reg_wr_data( 7 downto 0); + + -- OMR + when "010" => + omr <= reg_wr_data(7 downto 0); + + -- SP + when "011" => + stack_pointer <= unsigned(reg_wr_data(5 downto 0)); + + -- SSH + when "100" => + system_stack_ssh(to_integer(stack_pointer_plus_1)) <= reg_wr_data(BW_ADDRESS-1 downto 0); + -- increase stack after writing + stack_pointer(3 downto 0) <= stack_pointer_plus_1; + -- test whether stack is full, if so set the stack error flag (SE) + if stack_pointer(3 downto 0) = "1111" then + stack_pointer(4) <= '1'; + end if; + + -- SSL + when "101" => + system_stack_ssl(to_integer(stack_pointer)) <= reg_wr_data(BW_ADDRESS-1 downto 0); + + -- LA + when "110" => + loop_address <= unsigned(reg_wr_data(BW_ADDRESS-1 downto 0)); + + -- LC + when "111" => + loop_counter <= unsigned(reg_wr_data(15 downto 0)); + + when others => + end case; + when others => + end case; + end if; + + ---------------- + -- X BUS Write + ---------------- + if X_bus_wr_valid = '1' then + case X_bus_wr_addr is + when "00" => + x0 <= signed(X_bus_data_in); + when "01" => + x1 <= signed(X_bus_data_in); + when "10" => + a2 <= (others => X_bus_data_in(23)); + a1 <= signed(X_bus_data_in); + a0 <= (others => '0'); + when others => + b2 <= (others => X_bus_data_in(23)); + b1 <= signed(X_bus_data_in); + b0 <= (others => '0'); + end case; + end if; + ---------------- + -- Y BUS Write + ---------------- + if Y_bus_wr_valid = '1' then + case Y_bus_wr_addr is + when "00" => + y0 <= signed(Y_bus_data_in); + when "01" => + y1 <= signed(Y_bus_data_in); + when "10" => + a2 <= (others => Y_bus_data_in(23)); + a1 <= signed(Y_bus_data_in); + a0 <= (others => '0'); + when others => + b2 <= (others => Y_bus_data_in(23)); + b1 <= signed(Y_bus_data_in); + b0 <= (others => '0'); + end case; + end if; + ------------------ + -- L BUS Write + ------------------ + if L_bus_wr_valid = '1' then + case L_bus_wr_addr is + -- A10 + when "000" => + a1 <= signed(X_bus_data_in); + a0 <= signed(Y_bus_data_in); + -- B10 + when "001" => + b1 <= signed(X_bus_data_in); + b0 <= signed(Y_bus_data_in); + -- X + when "010" => + x1 <= signed(X_bus_data_in); + x0 <= signed(Y_bus_data_in); + -- Y + when "011" => + y1 <= signed(X_bus_data_in); + y0 <= signed(Y_bus_data_in); + -- A + when "100" => + a2 <= (others => X_bus_data_in(23)); + a1 <= signed(X_bus_data_in); + a0 <= signed(Y_bus_data_in); + -- B + when "101" => + b2 <= (others => X_bus_data_in(23)); + b1 <= signed(X_bus_data_in); + b0 <= signed(Y_bus_data_in); + -- AB + when "110" => + a2 <= (others => X_bus_data_in(23)); + a1 <= signed(X_bus_data_in); + a0 <= (others => '0'); + b2 <= (others => Y_bus_data_in(23)); + b1 <= signed(Y_bus_data_in); + b0 <= (others => '0'); + -- BA + when others => + a2 <= (others => Y_bus_data_in(23)); + a1 <= signed(Y_bus_data_in); + a0 <= (others => '0'); + b2 <= (others => X_bus_data_in(23)); + b1 <= signed(X_bus_data_in); + b0 <= (others => '0'); + end case; + end if; + + --------------------- + -- STATUS REGISTERS + --------------------- + if set_sr = '1' then + ccr <= new_sr( 7 downto 0); + mr <= new_sr(15 downto 8); + end if; + if set_omr = '1' then + omr <= new_omr; + end if; + -- data limiter active? + -- listing this statement after the set_sr test results + -- in the correct behaviour for ALU operations with parallel move + if set_limiting_flag = '1' then + ccr(6) <= '1'; + end if; + + -------------------- + -- LOOP REGISTERS + -------------------- + if set_la = '1' then + loop_address <= new_la; + end if; + if set_lc = '1' then + loop_counter <= new_lc; + end if; + if dec_lc = '1' then + loop_counter <= loop_counter - 1; + end if; + + --------------------- + -- ADDRESS REGISTER + --------------------- + if wr_R_port_A_valid = '1' then + addr_r(to_integer(wr_R_port_A.reg_number)) <= wr_R_port_A.reg_value; + end if; + if wr_R_port_B_valid = '1' then + addr_r(to_integer(wr_R_port_B.reg_number)) <= wr_R_port_B.reg_value; + end if; + + ------------------------- + -- ALU ACCUMULATOR WRITE + ------------------------- + if alu_wr_valid = '1' then + if alu_wr_addr = '0' then + a2 <= alu_wr_data(55 downto 48); + a1 <= alu_wr_data(47 downto 24); + a0 <= alu_wr_data(23 downto 0); + else + b2 <= alu_wr_data(55 downto 48); + b1 <= alu_wr_data(47 downto 24); + b0 <= alu_wr_data(23 downto 0); + end if; + end if; + + --------------------- + -- STACK CONTROLLER + --------------------- + stack_pointer_plus_1 := stack_pointer(3 downto 0) + 1; + if push_stack.valid = '1' then + -- increase stack after writing + stack_pointer(3 downto 0) <= stack_pointer_plus_1; + -- test whether stack is full, if so set the stack error flag (SE) + if stack_pointer(3 downto 0) = "1111" then + stack_pointer(4) <= '1'; + end if; + case push_stack.content is + when PC => + system_stack_ssh(to_integer(stack_pointer_plus_1)) <= std_logic_vector(push_stack.pc); + + when PC_AND_SR => + system_stack_ssh(to_integer(stack_pointer_plus_1)) <= std_logic_vector(push_stack.pc); + system_stack_ssl(to_integer(stack_pointer_plus_1)) <= SR; + + when LA_AND_LC => + system_stack_ssh(to_integer(stack_pointer_plus_1)) <= std_logic_vector(loop_address); + system_stack_ssl(to_integer(stack_pointer_plus_1)) <= std_logic_vector(loop_counter); + + end case; + end if; + + -- decrease stack pointer + if pop_stack.valid = '1' then + stack_pointer(3 downto 0) <= stack_pointer(3 downto 0) - 1; + -- if stack is empty set the underflow flag (bit 5, UF) and the stack error flag (bit 4, SE) + if stack_pointer(3 downto 0) = "0000" then + stack_pointer(5) <= '1'; + stack_pointer(4) <= '1'; + end if; + end if; + end if; + end if; + end process; + + + x_bus_rd_port: process(X_bus_rd_addr,x0,x1,a1,b1,limited_a1,limited_b1, + L_bus_rd_addr,L_bus_rd_valid,y1) is + begin + X_bus_rd_limited_a <= '0'; + X_bus_rd_limited_b <= '0'; + case X_bus_rd_addr is + when "00" => X_bus_data_out <= std_logic_vector(x0); + when "01" => X_bus_data_out <= std_logic_vector(x1); + when "10" => X_bus_data_out <= std_logic_vector(limited_a1); X_bus_rd_limited_a <= '1'; + when others => X_bus_data_out <= std_logic_vector(limited_b1); X_bus_rd_limited_b <= '1'; + end case; + if L_bus_rd_valid = '1' then + case L_bus_rd_addr is + when "000" => X_bus_data_out <= std_logic_vector(a1); + when "001" => X_bus_data_out <= std_logic_vector(b1); + when "010" => X_bus_data_out <= std_logic_vector(x1); + when "011" => X_bus_data_out <= std_logic_vector(y1); + when "100" => X_bus_data_out <= std_logic_vector(limited_a1); X_bus_rd_limited_a <= '1'; + when "101" => X_bus_data_out <= std_logic_vector(limited_b1); X_bus_rd_limited_b <= '1'; + when "110" => X_bus_data_out <= std_logic_vector(limited_a1); X_bus_rd_limited_a <= '1'; + when others => X_bus_data_out <= std_logic_vector(limited_b1); X_bus_rd_limited_b <= '1'; + end case; + end if; + end process x_bus_rd_port; + + y_bus_rd_port: process(Y_bus_rd_addr,y0,y1,a1,b1,limited_a1,limited_b1, + L_bus_rd_addr,L_bus_rd_valid,a0,b0,x0,limited_a0,limited_b0) is + begin + Y_bus_rd_limited_a <= '0'; + Y_bus_rd_limited_b <= '0'; + case Y_bus_rd_addr is + when "00" => Y_bus_data_out <= std_logic_vector(y0); + when "01" => Y_bus_data_out <= std_logic_vector(y1); + when "10" => Y_bus_data_out <= std_logic_vector(limited_a1); Y_bus_rd_limited_a <= '1'; + when others => Y_bus_data_out <= std_logic_vector(limited_b1); Y_bus_rd_limited_b <= '1'; + end case; + if L_bus_rd_valid = '1' then + case L_bus_rd_addr is + when "000" => Y_bus_data_out <= std_logic_vector(a0); + when "001" => Y_bus_data_out <= std_logic_vector(b0); + when "010" => Y_bus_data_out <= std_logic_vector(x0); + when "011" => Y_bus_data_out <= std_logic_vector(y0); + when "100" => Y_bus_data_out <= std_logic_vector(limited_a0); Y_bus_rd_limited_a <= '1'; + when "101" => Y_bus_data_out <= std_logic_vector(limited_b0); Y_bus_rd_limited_b <= '1'; + when "110" => Y_bus_data_out <= std_logic_vector(limited_b1); Y_bus_rd_limited_b <= '1'; + when others => Y_bus_data_out <= std_logic_vector(limited_a1); Y_bus_rd_limited_a <= '1'; + end case; + end if; + end process y_bus_rd_port; + + + reg_rd_port: process(reg_rd_addr, x0,x1,y0,y1,a0,a1,a2,b0,b1,b2, + omr,ccr,mr,addr_r,addr_n,addr_m,stack_pointer, + loop_address,loop_counter,system_stack_ssl,system_stack_ssh) is + variable reg_addr : integer range 0 to 7; + begin + reg_addr := to_integer(unsigned(reg_rd_addr(2 downto 0))); + reg_rd_data <= (others => '0'); + reg_rd_limited_a <= '0'; + reg_rd_limited_b <= '0'; + + case reg_rd_addr(5 downto 3) is + -- X0, X1, Y0, Y1 + when "000" => + case reg_rd_addr(2 downto 0) is + when "100" => + reg_rd_data <= std_logic_vector(x0); + when "101" => + reg_rd_data <= std_logic_vector(x1); + when "110" => + reg_rd_data <= std_logic_vector(y0); + when "111" => + reg_rd_data <= std_logic_vector(y1); + when others => + end case; + + -- A0, B0, A2, B2, A1, B1, A, B + when "001" => + case reg_rd_addr(2 downto 0) is + when "000" => + reg_rd_data <= std_logic_vector(a0); + when "001" => + reg_rd_data <= std_logic_vector(b0); + when "010" => + -- MSBs are read as zero! + reg_rd_data(23 downto 8) <= (others => '0'); + reg_rd_data(7 downto 0) <= std_logic_vector(a2); + when "011" => + -- MSBs are read as zero! + reg_rd_data(23 downto 8) <= (others => '0'); + reg_rd_data(7 downto 0) <= std_logic_vector(b2); + when "100" => + reg_rd_data <= std_logic_vector(a1); + when "101" => + reg_rd_data <= std_logic_vector(b1); + when "110" => + reg_rd_data <= std_logic_vector(limited_a1); + reg_rd_limited_a <= '1'; + when "111" => + reg_rd_data <= std_logic_vector(limited_b1); + reg_rd_limited_b <= '1'; + when others => + end case; + + -- R0-R7 + when "010" => + reg_rd_data <= std_logic_vector(resize(addr_r(reg_addr), 24)); + + -- N0-N7 + when "011" => + reg_rd_data <= std_logic_vector(resize(addr_n(reg_addr), 24)); + + -- M0-M7 + when "100" => + reg_rd_data <= std_logic_vector(resize(addr_m(reg_addr), 24)); + + -- SR, OMR, SP, SSH, SSL, LA, LC + when "111" => + case reg_wr_addr(2 downto 0) is + -- SR + when "001" => + reg_rd_data(23 downto 16) <= (others => '0'); + reg_rd_data(15 downto 0) <= mr & ccr; + + -- OMR + when "010" => + reg_rd_data(23 downto 8) <= (others => '0'); + reg_rd_data( 7 downto 0) <= omr; + + -- SP + when "011" => + reg_rd_data(23 downto 6) <= (others => '0'); + reg_rd_data(5 downto 0) <= std_logic_vector(stack_pointer); + + -- SSH + when "100" => +-- TODO! +-- system_stack_ssh(to_integer(stack_pointer_plus_1)) <= reg_wr_data(BW_ADDRESS-1 downto 0); +-- -- increase stack after writing +-- stack_pointer(3 downto 0) <= stack_pointer_plus_1; +-- -- test whether stack is full, if so set the stack error flag (SE) +-- if stack_pointer(3 downto 0) = "1111" then +-- stack_pointer(4) <= '1'; +-- end if; + + -- SSL + when "101" => + reg_rd_data <= (others => '0'); + reg_rd_data(BW_ADDRESS-1 downto 0) <= std_logic_vector(system_stack_ssl(to_integer(stack_pointer))); + + -- LA + when "110" => + reg_rd_data <= (others => '0'); + reg_rd_data(BW_ADDRESS-1 downto 0) <= std_logic_vector(loop_address); + + -- LC + when "111" => + reg_rd_data <= (others => '0'); + reg_rd_data(15 downto 0) <= std_logic_vector(loop_counter); + + when others => + end case; + when others => + end case; + end process; + + rd_limited_a <= '1' when reg_rd_limited_a = '1' or X_bus_rd_limited_a = '1' or Y_bus_rd_limited_a = '1' else '0'; + rd_limited_b <= '1' when reg_rd_limited_b = '1' or X_bus_rd_limited_b = '1' or Y_bus_rd_limited_b = '1' else '0'; + + data_shifter_limiter: process(a2,a1,a0,b2,b1,b0,sr,rd_limited_a,rd_limited_b) is + variable scaled_a : signed(55 downto 0); + variable scaled_b : signed(55 downto 0); + begin + + set_limiting_flag <= '0'; + ----------------- + -- DATA SCALING + ----------------- + -- test against scaling bits S1, S0 + case sr(11 downto 10) is + -- scale down (right shift) + when "01" => + scaled_a := a2(7) & a2 & a1 & a0(23 downto 1); + scaled_b := b2(7) & b2 & b1 & b0(23 downto 1); + -- scale up (arithmetic left shift) + when "10" => + scaled_a := a2(6 downto 0) & a1 & a0 & '0'; + scaled_b := b2(6 downto 0) & b1 & b0 & '0'; + -- "00" do not scale! + when others => + scaled_a := a2 & a1 & a0; + scaled_b := b2 & b1 & b0; + end case; + + -- only sign extension stored in a2? + -- Yes: No limiting needed! + if scaled_a(55 downto 47) = "111111111" or scaled_a(55 downto 47) = "000000000" then + limited_a1 <= scaled_a(47 downto 24); + limited_a0 <= scaled_a(23 downto 0); + else + -- positive value in a? + if scaled_a(55) = '0' then + limited_a1 <= X"7FFFFF"; + limited_a0 <= X"FFFFFF"; + -- negative value in a? + else + limited_a1 <= X"800000"; + limited_a0 <= X"000000"; + end if; + -- set the limit flag in the status register + if rd_limited_a = '1' then + set_limiting_flag <= '1'; + end if; + end if; + -- only sign extension stored in b2? + -- Yes: No limiting needed! + if scaled_b(55 downto 47) = "111111111" or scaled_b(55 downto 47) = "000000000" then + limited_b1 <= scaled_b(47 downto 24); + limited_b0 <= scaled_b(23 downto 0); + else + -- positive value in b? + if scaled_b(55) = '0' then + limited_b1 <= X"7FFFFF"; + limited_b0 <= X"FFFFFF"; + -- negative value in b? + else + limited_b1 <= X"800000"; + limited_b0 <= X"000000"; + end if; + -- set the limit flag in the status register + if rd_limited_b = '1' then + set_limiting_flag <= '1'; + end if; + end if; + + end process; + + +end architecture rtl; diff --git a/FPGA_quartus_GE/DSP/src/types_pkg.vhd b/FPGA_quartus_GE/DSP/src/types_pkg.vhd new file mode 100644 index 0000000..131f7fa --- /dev/null +++ b/FPGA_quartus_GE/DSP/src/types_pkg.vhd @@ -0,0 +1,167 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +library work; +use work.parameter_pkg.all; + + + +package types_pkg is + + -- the different addressing modes + type adgen_mode_type is (NOP, POST_MIN_N, POST_PLUS_N, POST_MIN_1, POST_PLUS_1, INDEXED_N, PRE_MIN_1, ABSOLUTE, IMMEDIATE); + ------------------------ + -- Decoded instructions + ------------------------ + type instructions_type is ( + INSTR_NOP , + INSTR_RTI , + INSTR_ILLEGAL , + INSTR_SWI , + INSTR_RTS , + INSTR_RESET , + INSTR_WAIT , + INSTR_STOP , + INSTR_ENDDO , + INSTR_ANDI , + INSTR_ORI , + INSTR_DIV , + INSTR_NORM , + INSTR_LUA , + INSTR_MOVEC , + INSTR_REP , + INSTR_DO , + INSTR_MOVEM , + INSTR_MOVEP , + INSTR_PM_MOVEM, + INSTR_BCLR , + INSTR_BSET , + INSTR_JCLR , + INSTR_JSET , + INSTR_JMP , + INSTR_JCC , + INSTR_BCHG , + INSTR_BTST , + INSTR_JSCLR , + INSTR_JSSET , + INSTR_JSR , + INSTR_JSCC ); + + type addr_array is array(0 to 7) of unsigned(BW_ADDRESS-1 downto 0); + + type alu_shift_mode is (NO_SHIFT, SHIFT_LEFT, SHIFT_RIGHT, ZEROS); + type alu_ccr_flag is (DONT_TOUCH, CLEAR, MODIFY, SET); + type alu_ccr_flag_array is array(7 downto 0) of alu_ccr_flag; + + type alu_ctrl_type is record + mul_op1 : std_logic_vector(1 downto 0); -- x0,x1,y0,y1 + mul_op2 : std_logic_vector(1 downto 0); -- x0,x1,y0,y1 + shift_src : std_logic; -- a,b + shift_src_sign : std_logic_vector(1 downto 0); -- 00: pos, 01: neg, 10: sign dependant, 11: reserved + shift_mode : alu_shift_mode; + rotate : std_logic; -- 0: logical shift, 1: rotate shift + add_src_stage_1 : std_logic_vector(2 downto 0); -- x0,x1,y0,y1,x,y,a,b + add_src_stage_2 : std_logic_vector(1 downto 0); -- 00: 0 , 01: add_src_1, 10: mul_result, 11: reserved + add_src_sign : std_logic_vector(1 downto 0); -- 00: pos, 01: neg, 10: sign dependant, 11: reserved + logic_function : std_logic_vector(2 downto 0); -- 000: none, 001: and, 010: or, 011: eor, 100: not + word_24_update : std_logic; -- only accumulator bits 47 downto 24 affected? + rounding_used : std_logic_vector(1 downto 0); -- 00: no rounding, 01: rounding, 10: add carry, 11: subtract carry + store_result : std_logic; -- 0: do not update accumulator, 1: update accumulator + dst_accu : std_logic; -- 0: a, 1: b + div_instr : std_logic; -- DIV instruction? Special ALU operations needed! + norm_instr : std_logic; -- NORM instruction? Special ALU operations needed! + ccr_flags_ctrl : alu_ccr_flag_array; + end record; + + type pipeline_signals is record + instr_word: std_logic_vector(23 downto 0); + pc : unsigned(BW_ADDRESS-1 downto 0); + dble_word_instr : std_logic; + instr_array : instructions_type; + act_array : std_logic_vector(NUM_ACT_SIGNALS-1 downto 0); + dec_activate : std_logic; + adgen_mode_a : adgen_mode_type; + adgen_mode_b : adgen_mode_type; + reg_wr_addr : std_logic_vector(5 downto 0); + reg_rd_addr : std_logic_vector(5 downto 0); + x_bus_rd_addr : std_logic_vector(1 downto 0); + x_bus_wr_addr : std_logic_vector(1 downto 0); + y_bus_rd_addr : std_logic_vector(1 downto 0); + y_bus_wr_addr : std_logic_vector(1 downto 0); + l_bus_addr : std_logic_vector(2 downto 0); + adgen_address_x : unsigned(BW_ADDRESS-1 downto 0); + adgen_address_y : unsigned(BW_ADDRESS-1 downto 0); + RAM_out_x : std_logic_vector(23 downto 0); + RAM_out_y : std_logic_vector(23 downto 0); + alu_ctrl : alu_ctrl_type; + end record; + + type pipeline_type is array(0 to PIPELINE_DEPTH-1) of pipeline_signals; + + + type register_file_type is record + a : signed(55 downto 0); + b : signed(55 downto 0); + x0 : signed(23 downto 0); + x1 : signed(23 downto 0); + y0 : signed(23 downto 0); + y1 : signed(23 downto 0); + la : unsigned(BW_ADDRESS-1 downto 0); + lc : unsigned(15 downto 0); + addr_r : addr_array; + addr_n : addr_array; + addr_m : addr_array; + ccr : std_logic_vector(7 downto 0); + mr : std_logic_vector(7 downto 0); + sr : std_logic_vector(15 downto 0); + omr : std_logic_vector(7 downto 0); + stack_pointer : unsigned(5 downto 0); +-- system_stack_ssh : stack_array_type; +-- system_stack_ssl : stack_array_type; + current_ssh : std_logic_vector(BW_ADDRESS-1 downto 0); + current_ssl : std_logic_vector(BW_ADDRESS-1 downto 0); + + end record; + + type addr_wr_port_type is record +-- write_valid : std_logic; + reg_number : unsigned(2 downto 0); + reg_value : unsigned(15 downto 0); + end record; + + type mem_ctrl_type_in is record + rd_addr : unsigned(BW_ADDRESS-1 downto 0); + rd_en : std_logic; + wr_addr : unsigned(BW_ADDRESS-1 downto 0); + wr_en : std_logic; + data_in : std_logic_vector(23 downto 0); + end record; + + type mem_ctrl_type_out is record + data_out : std_logic_vector(23 downto 0); + data_out_valid : std_logic; + end record; + + type memory_type is (X_MEM, Y_MEM, P_MEM); + --------------- + -- STACK TYPES + --------------- + type stack_array_type is array(0 to 15) of std_logic_vector(BW_ADDRESS-1 downto 0); + + type push_stack_content_type is (PC, PC_AND_SR, LA_AND_LC); + + type push_stack_type is record + valid : std_logic; + pc : unsigned(BW_ADDRESS-1 downto 0); + content : push_stack_content_type; + end record; + +-- type pop_stack_content_type is (PC, PC_AND_SR, SR, LA_AND_LC); + +-- type pop_stack_type is std_logic; + type pop_stack_type is record + valid : std_logic; +-- content : pop_stack_content_type; + end record; + +end package types_pkg; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd new file mode 100644 index 0000000..b2b8dbb --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd @@ -0,0 +1,971 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Tue Sep 08 16:24:20 2009 + +library work; +use work.FalconIO_SDCard_IDE_CF_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +-- Entity Declaration + + +-- Entity Declaration + +ENTITY FalconIO_SDCard_IDE_CF IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + CLK2M : IN STD_LOGIC; + CLK500k : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + LP_BUSY : IN STD_LOGIC; + nACSI_DRQ : IN STD_LOGIC; + nACSI_INT : IN STD_LOGIC; + nSCSI_DRQ : IN STD_LOGIC; + nSCSI_MSG : IN STD_LOGIC; + MIDI_IN : IN STD_LOGIC; + RxD : IN STD_LOGIC; + CTS : IN STD_LOGIC; + RI : IN STD_LOGIC; + DCD : IN STD_LOGIC; + AMKB_RX : IN STD_LOGIC; + PIC_AMKB_RX : IN STD_LOGIC; + IDE_RDY : IN STD_LOGIC; + IDE_INT : IN STD_LOGIC; + WP_CS_CARD : IN STD_LOGIC; + nINDEX : IN STD_LOGIC; + TRACK00 : IN STD_LOGIC; + nRD_DATA : IN STD_LOGIC; + nDCHG : IN STD_LOGIC; + SD_DATA0 : IN STD_LOGIC; + SD_DATA1 : IN STD_LOGIC; + SD_DATA2 : IN STD_LOGIC; + SD_CARD_DEDECT : IN STD_LOGIC; + SD_WP : IN STD_LOGIC; + nDACK0 : IN STD_LOGIC; + nFB_WR : INOUT STD_LOGIC; + WP_CF_CARD : IN STD_LOGIC; + nWP : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + HD_DD : IN STD_LOGIC; + nSCSI_C_D : IN STD_LOGIC; + nSCSI_I_O : IN STD_LOGIC; + CLK2M4576 : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + VSYNC : IN STD_LOGIC; + HSYNC : IN STD_LOGIC; + DSP_INT : IN STD_LOGIC; + nBLANK : IN STD_LOGIC; + FDC_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + ACP_CONF : IN STD_LOGIC_VECTOR(31 downto 24); + nIDE_CS1 : OUT STD_LOGIC; + nIDE_CS0 : OUT STD_LOGIC; + LP_STR : OUT STD_LOGIC; + LP_DIR : OUT STD_LOGIC; + nACSI_ACK : OUT STD_LOGIC; + nACSI_RESET : OUT STD_LOGIC; + nACSI_CS : OUT STD_LOGIC; + ACSI_DIR : OUT STD_LOGIC; + ACSI_A1 : OUT STD_LOGIC; + nSCSI_ACK : OUT STD_LOGIC; + nSCSI_ATN : OUT STD_LOGIC; + SCSI_DIR : OUT STD_LOGIC; + SD_CLK : OUT STD_LOGIC; + YM_QA : OUT STD_LOGIC; + YM_QC : OUT STD_LOGIC; + YM_QB : OUT STD_LOGIC; + nSDSEL : OUT STD_LOGIC; + STEP : OUT STD_LOGIC; + MOT_ON : OUT STD_LOGIC; + nRP_LDS : OUT STD_LOGIC; + nRP_UDS : OUT STD_LOGIC; + nROM4 : OUT STD_LOGIC; + nROM3 : OUT STD_LOGIC; + nCF_CS1 : OUT STD_LOGIC; + nCF_CS0 : OUT STD_LOGIC; + nIDE_RD : INOUT STD_LOGIC; + nIDE_WR : INOUT STD_LOGIC; + AMKB_TX : OUT STD_LOGIC; + IDE_RES : OUT STD_LOGIC; + DTR : OUT STD_LOGIC; + RTS : OUT STD_LOGIC; + TxD : OUT STD_LOGIC; + MIDI_OLR : OUT STD_LOGIC; + MIDI_TLR : OUT STD_LOGIC; + nDREQ0 : OUT STD_LOGIC; + DSA_D : OUT STD_LOGIC; + nMFP_INT : OUT STD_LOGIC; + FALCON_IO_TA : OUT STD_LOGIC; + STEP_DIR : OUT STD_LOGIC; + WR_DATA : OUT STD_LOGIC; + WR_GATE : OUT STD_LOGIC; + DMA_DRQ : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0); + LP_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + ACSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + SCSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + SCSI_PAR : INOUT STD_LOGIC; + nSCSI_SEL : INOUT STD_LOGIC; + nSCSI_BUSY : INOUT STD_LOGIC; + nSCSI_RST : INOUT STD_LOGIC; + SD_CD_DATA3 : INOUT STD_LOGIC; + SD_CDM_D1 : INOUT STD_LOGIC + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END FalconIO_SDCard_IDE_CF; + + +-- Architecture Body + +ARCHITECTURE FalconIO_SDCard_IDE_CF_architecture OF FalconIO_SDCard_IDE_CF IS +-- system +signal SYS_CLK : STD_LOGIC; +signal RESETn : STD_LOGIC; +signal FB_B0 : STD_LOGIC; -- UPPER BYT BEI 16BIT BUS +signal FB_B1 : STD_LOGIC; -- LOWER BYT BEI 16BIT BUS +signal BYT : STD_LOGIC; -- WENN BYT -> 1 +signal LONG : STD_LOGIC; -- WENN -> 1 +-- KEYBOARD MIDI +signal ACIA_CS_I : STD_LOGIC; +signal IRQ_KEYBDn : STD_LOGIC; +signal IRQ_MIDIn : STD_LOGIC; +signal KEYB_RxD : STD_LOGIC; +signal AMKB_REG : STD_LOGIC_VECTOR(4 downto 0); +signal MIDI_OUT : STD_LOGIC; +signal DATA_OUT_ACIA_I : STD_LOGIC_VECTOR(7 downto 0); +signal DATA_OUT_ACIA_II : STD_LOGIC_VECTOR(7 downto 0); +-- MFP +signal MFP_CS : STD_LOGIC; +signal MFP_INTACK : STD_LOGIC; +signal LDS : STD_LOGIC; +signal DTACK_OUT_MFPn : STD_LOGIC; +signal IRQ_ACIAn : STD_LOGIC; +signal DINTn : STD_LOGIC; +signal DATA_OUT_MFP : STD_LOGIC_VECTOR(7 downto 0); +signal TDO : STD_LOGIC; +-- SOUND +signal SNDCS : STD_LOGIC; +signal SNDCS_I : STD_LOGIC; +signal SNDIR_I : STD_LOGIC; +signal LP_DIR_X : STD_LOGIC; +signal DA_OUT_X : STD_LOGIC_VECTOR(7 downto 0); +signal LP_D_X : STD_LOGIC_VECTOR(7 downto 0); +-- DIV +signal SUB_BUS : STD_LOGIC; -- SUB BUS MIT ROM-PORT, CF UND IDE +signal ROM_CS : STD_LOGIC; +-- DMA UND FLOPPY +signal DMA_DATEN_CS : STD_LOGIC; +signal DMA_MODUS_CS : STD_LOGIC; +signal DMA_MODUS : STD_LOGIC_VECTOR(15 downto 0); +signal WDC_BSL_CS : STD_LOGIC; +signal WDC_BSL : STD_LOGIC_VECTOR(1 DOWNTO 0); +signal HD_DD_OUT : STD_LOGIC; +signal FDCS_In : STD_LOGIC; +signal CA0 : STD_LOGIC; +signal CA1 : STD_LOGIC; +signal CA2 : STD_LOGIC; +signal FDINT : STD_LOGIC; +signal FDRQ : STD_LOGIC; +signal CD_OUT_FDC : STD_LOGIC_VECTOR(7 downto 0); +signal CD_IN_FDC : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_TOP_CS : STD_LOGIC; +signal DMA_TOP : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_HIGH_CS : STD_LOGIC; +signal DMA_HIGH : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_MID_CS : STD_LOGIC; +signal DMA_MID : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_LOW_CS : STD_LOGIC; +signal DMA_LOW : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_DIRM_CS : STD_LOGIC; +signal DMA_ADR_CS : STD_LOGIC; +signal DMA_STATUS : STD_LOGIC_VECTOR(2 downto 0); +signal DMA_DIR_OLD : STD_LOGIC; +signal DMA_BYT_CNT_CS : STD_LOGIC; +signal DMA_BYT_CNT : STD_LOGIC_VECTOR(31 downto 0); +signal CLR_FIFO : STD_LOGIC; +signal DMA_DRQ_I : STD_LOGIC; +signal DMA_DRQ_REG : STD_LOGIC_VECTOR(1 downto 0); +signal DMA_DRQQ : STD_LOGIC; +signal DMA_DRQ_Q : STD_LOGIC; +signal RDF_DOUT : STD_LOGIC_VECTOR(31 downto 0); +signal RDF_AZ : STD_LOGIC_VECTOR(9 downto 0); +signal RDF_RDE : STD_LOGIC; +signal RDF_WRE : STD_LOGIC; +signal RDF_DIN : STD_LOGIC_VECTOR(7 downto 0); +signal WRF_DOUT : STD_LOGIC_VECTOR(7 downto 0); +signal WRF_AZ : STD_LOGIC_VECTOR(9 downto 0); +signal WRF_RDE : STD_LOGIC; +signal WRF_WRE : STD_LOGIC; +signal nFDC_WR : STD_LOGIC; +type FCF_STATES is( FCF_IDLE, FCF_T0, FCF_T1, FCF_T2, FCF_T3, FCF_T6, FCF_T7); +signal FCF_STATE : FCF_STATES; +signal NEXT_FCF_STATE : FCF_STATES; +signal DMA_REQ : STD_LOGIC; +signal FDC_CS : STD_LOGIC; +signal FCF_CS : STD_LOGIC; +signal FCF_APH : STD_LOGIC; +signal DMA_AZ_CS : STD_LOGIC; +signal DMA_ACTIV : STD_LOGIC; +signal DMA_ACTIV_NEW : STD_LOGIC; +signal FDC_OUT : STD_LOGIC_VECTOR(7 downto 0); +-- SCSI +signal SCSI_CS : STD_LOGIC; +signal SCSI_CSn : STD_LOGIC; +signal SCSI_DOUT : STD_LOGIC_VECTOR(7 downto 0); +signal nSCSI_DACK : STD_LOGIC; +signal SCSI_DRQ : STD_LOGIC; +signal SCSI_INT : STD_LOGIC; +signal DB_OUTn : STD_LOGIC_VECTOR(7 downto 0); +signal DB_EN : STD_LOGIC; +signal DBP_OUTn : STD_LOGIC; +signal DBP_EN : STD_LOGIC; +signal RST_OUTn : STD_LOGIC; +signal RST_EN : STD_LOGIC; +signal BSY_OUTn : STD_LOGIC; +signal BSY_EN : STD_LOGIC; +signal SEL_OUTn : STD_LOGIC; +signal SEL_EN : STD_LOGIC; +-- IDE +signal nnIDE_RES : STD_LOGIC; +signal IDE_CF_CS : STD_LOGIC; +signal IDE_CF_TA : STD_LOGIC; +signal NEXT_nIDE_RD : STD_LOGIC; +signal NEXT_nIDE_WR : STD_LOGIC; +type CMD_STATES is( IDLE, T1, T6, T7); +signal CMD_STATE : CMD_STATES; +signal NEXT_CMD_STATE : CMD_STATES; + + +BEGIN +LONG <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else '0'; +BYT <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' else '0'; +FB_B0 <= '1' when FB_ADR(0) = '0' or BYT = '0' else '0'; +FB_B1 <= '1' when FB_ADR(0) = '1' or BYT = '0' else '0'; + +FALCON_IO_TA <= '1' when SNDCS = '1' or DTACK_OUT_MFPn = '0' or ACIA_CS_I = '1' or DMA_MODUS_CS ='1' + or DMA_ADR_CS = '1' or DMA_DIRM_CS = '1' or DMA_BYT_CNT_CS = '1' or FCF_CS = '1' or IDE_CF_TA = '1' else '0'; +SUB_BUS <= '1' when nFB_WR = '1' and ROM_CS = '1' ELSE + '1' when nFB_WR = '1' and IDE_CF_CS = '1' ELSE + '1' when nFB_WR = '0' and nIDE_WR = '0' ELSE '0'; +nRP_UDS <= '0' when SUB_BUS = '1' and FB_B0 = '1' else '1'; +nRP_LDS <= '0' when SUB_BUS = '1' and FB_B1 = '1' else '1'; +nDREQ0 <= '0'; +---------------------------------------------------------------------------- +-- SD +---------------------------------------------------------------------------- +SD_CLK <= 'Z'; +SD_CD_DATA3 <= 'Z'; +SD_CDM_D1 <= 'Z'; +---------------------------------------------------------------------------- +-- IDE +---------------------------------------------------------------------------- +CMD_REG: process(nRSTO, MAIN_CLK, CMD_STATE, NEXT_CMD_STATE) + begin + if nRSTO = '0' then + CMD_STATE <= IDLE; + elsif rising_edge(MAIN_CLK) then + CMD_STATE <= NEXT_CMD_STATE; -- go to next + nIDE_RD <= NEXT_nIDE_RD; -- go to next + nIDE_WR <= NEXT_nIDE_WR; -- go to next + else + CMD_STATE <= CMD_STATE; -- halten + nIDE_RD <= nIDE_RD; -- halten + nIDE_WR <= nIDE_WR; -- halten + end if; + end process CMD_REG; + + CMD_DECODER: process(CMD_STATE, NEXT_CMD_STATE, NEXT_nIDE_RD, NEXT_nIDE_WR, IDE_RDY, IDE_CF_TA) + begin + case CMD_STATE is + when IDLE => + IDE_CF_TA <= '0'; + if IDE_CF_CS = '1' then + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T1; + else + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= IDLE; + end if; + when T1 => + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T6; + when T6 => + IF IDE_RDY = '1' then + IDE_CF_TA <= '1'; + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= T7; + else + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T6; + end if; + when T7 => + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= IDLE; + end case; + end process CMD_DECODER; + +IDE_RES <= not nnIDE_RES and nRSTO; +IDE_CF_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 7) = x"0" else '0'; -- FFF0'0000/80 +nCF_CS0 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"0" else -- FFFO'0000-FFF0'001F + '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"2" else '1'; -- FFFO'0040-FFF0'005F +nCF_CS1 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"1" else -- FFF0'0020-FFF0'003F + '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"3" else '1'; -- FFFO'0060-FFF0'007F +nIDE_CS0 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"2" else -- FFF0'0040-FFF0'005F + '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"0" else '1'; -- FFFO'0000-FFF0'001F +nIDE_CS1 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"3" else -- FFF0'0060-FFF0'007F + '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"1" else '1'; -- FFFO'0020-FFF0'003F +----------------------------------------------------------------------------------------------------------------------------------------- +-- ACSI, SCSI UND FLOPPY WD1772 +------------------------------------------------------------------------------------------------------------------------------------------- +-- daten read fifo + RDF: dcfifo0 + port map( + aclr => CLR_FIFO, + data => RDF_DIN, + rdclk => MAIN_CLK, + rdreq => RDF_RDE, + wrclk => FDC_CLK, + wrreq => RDF_WRE, + q => RDF_DOUT, + wrusedw => RDF_AZ + ); +FCF_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"0020110" and LONG = '1' else '0'; -- F002'0110 LONG ONLY +FCF_APH <= '1' when FB_ALE = '1' and FB_AD(31 downto 0) = x"F0020110" and LONG = '1' else '0'; -- ADRESSPHASE F0020110 LONG ONLY +RDF_RDE <= '1' when FCF_APH = '1' and nFB_WR = '1' else '0'; -- AKTIVIEREN IN ADRESSPHASE +FB_AD <= RDF_DOUT(7 downto 0) & RDF_DOUT(15 downto 8) & RDF_DOUT(23 downto 16) & RDF_DOUT(31 downto 24) when FCF_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +RDF_DIN <= CD_OUT_FDC when DMA_MODUS(7) = '1' else SCSI_DOUT; +-- daten write fifo + WRF: dcfifo1 + port map( + aclr => CLR_FIFO, + data => FB_AD(7 downto 0) & FB_AD(15 downto 8) & FB_AD(23 downto 16) & FB_AD(31 downto 24), + rdclk => FDC_CLK, + rdreq => WRF_RDE, + wrclk => MAIN_CLK, + wrreq => WRF_WRE, + q => WRF_DOUT, + rdusedw => WRF_AZ + ); +CD_IN_FDC <= WRF_DOUT when DMA_ACTIV = '1' and DMA_MODUS(8) = '1' else FB_AD(23 downto 16); -- BEI DMA WRITE <-FIFO SONST <-FB +DMA_AZ_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"002010C" else '0'; -- F002'010C LONG +FB_AD <= DMA_DRQ_Q & DMA_DRQ_REG & IDE_INT & FDINT & SCSI_INT & RDF_AZ & "0" & DMA_STATUS & "00" & WRF_AZ when DMA_AZ_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +DMA_DRQ_Q <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0'; +-- FIFO WRITE: GENAU 1 MAIN_CLK ------------------------------------------------------------------------- + process(MAIN_CLK, nRSTO, WRF_WRE, nFB_WR, FCF_APH) + begin + if nRSTO = '0' THEN + WRF_WRE <= '0'; + elsif rising_edge(MAIN_CLK) then + IF FCF_APH = '1' and nFB_WR = '0' then + WRF_WRE <= '1'; + else + WRF_WRE <= '0'; + end if; + else + WRF_WRE <= WRF_WRE; + end if; + END PROCESS; + +FCF_REG: process(nRSTO, FDC_CLK, FCF_STATE, NEXT_FCF_STATE, DMA_ACTIV) + begin + if nRSTO = '0' then + FCF_STATE <= FCF_IDLE; + DMA_ACTIV <= '0'; + elsif rising_edge(FDC_CLK) then + FCF_STATE <= NEXT_FCF_STATE; -- go to next + DMA_ACTIV <= DMA_ACTIV_NEW; + else + FCF_STATE <= FCF_STATE; -- halten + DMA_ACTIV <= DMA_ACTIV; + end if; + end process FCF_REG; + +FDC_REG: process(nRSTO, FDC_CLK, FDC_OUT, FDCS_In, CD_OUT_FDC) + begin + if nRSTO = '0' then + FDC_OUT <= x"00"; + elsif rising_edge(FDC_CLK) and FDCS_In = '0' then + FDC_OUT <= CD_OUT_FDC; -- set + else + FDC_OUT <= FDC_OUT; -- halten + end if; + end process FDC_REG; + +DMA_REQ <= '1' when ((DMA_DRQ_I = '1' and DMA_MODUS(7) = '1') or (SCSI_DRQ = '1' and DMA_MODUS(7) = '0')) and DMA_STATUS(1) = '1' and DMA_MODUS(6) = '0' and CLR_FIFO = '0' else '0'; +FDC_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and FB_B1 = '1' else '0'; +SCSI_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and FB_B1 = '1' else '0'; + + FCF_DECODER: process(FCF_STATE, NEXT_FCF_STATE, DMA_REQ,FDC_CS, RDF_WRE, WRF_RDE, SCSI_DRQ, nSCSI_DACK, DMA_MODUS, DMA_ACTIV, FDCS_In,SCSI_CS, SCSI_CSn) + begin + case FCF_STATE is + when FCF_IDLE => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + WRF_RDE <= '0'; + nSCSI_DACK <= '1'; + if DMA_REQ = '1' or FDC_CS = '1' or SCSI_CS = '1' then + DMA_ACTIV_NEW <= DMA_REQ; + NEXT_FCF_STATE <= FCF_T0; + else + DMA_ACTIV_NEW <= '0'; + NEXT_FCF_STATE <= FCF_IDLE; + end if; + when FCF_T0 => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + nSCSI_DACK <= '1'; + DMA_ACTIV_NEW <= DMA_REQ; + WRF_RDE <= DMA_MODUS(8) and DMA_REQ; -- WRITE -> READ FROM FIFO + if DMA_REQ = '0' and DMA_ACTIV = '1' THEN -- spike? + NEXT_FCF_STATE <= FCF_IDLE; -- ja -> zum start + else + NEXT_FCF_STATE <= FCF_T1; + end if; + when FCF_T1 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T2; + when FCF_T2 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T3; + when FCF_T3 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T6; + when FCF_T6 => + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + RDF_WRE <= not DMA_MODUS(8) and DMA_ACTIV; -- READ -> WRITE IN FIFO + NEXT_FCF_STATE <= FCF_T7; + when FCF_T7 => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + WRF_RDE <= '0'; + nSCSI_DACK <= '1'; + DMA_ACTIV_NEW <= '0'; + if FDC_CS = '1' and DMA_REQ = '0' then + NEXT_FCF_STATE <= FCF_T7; + else + NEXT_FCF_STATE <= FCF_IDLE; + end if; + end case; + end process FCF_DECODER; + + I_FDC: WF1772IP_TOP_SOC + port map( + CLK => FDC_CLK, + RESETn => nRSTO, + CSn => FDCS_In, + RWn => nFDC_WR, + A1 => CA2, + A0 => CA1, + DATA_IN => CD_IN_FDC, + DATA_OUT => CD_OUT_FDC, +-- DATA_EN => CD_EN_FDC, + RDn => nRD_DATA, + TR00n => TRACK00, + IPn => nINDEX, + WPRTn => nWP, + DDEn => '0', -- Fixed to MFM. + HDTYPE => HD_DD_OUT, + MO => MOT_ON, + WG => WR_GATE, + WD => WR_DATA, + STEP => STEP, + DIRC => STEP_DIR, + DRQ => DMA_DRQ_I, + INTRQ => FDINT + ); +DMA_DATEN_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C302" else '0'; -- F8604/2 +DMA_MODUS_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C303" else '0'; -- F8606/2 +WDC_BSL_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C307" else '0'; -- F860E/2 +HD_DD_OUT <= HD_DD WHEN ACP_CONF(29) = '0' ELSE WDC_BSL(0); +nFDC_WR <= (not DMA_MODUS(8)) when DMA_ACTIV = '1' else nFB_WR; +CA0 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(0); +CA1 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(1); +CA2 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(2); +FB_AD(23 downto 16) <= "0000" & (not DMA_STATUS(1)) & "0" & WDC_BSL(1) & HD_DD when WDC_BSL_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(31 downto 24) <= "00000000" when DMA_DATEN_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= FDC_OUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and nFB_OE = '0' else + SCSI_DOUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and nFB_OE = '0' else + DMA_BYT_CNT(16 downto 9) when DMA_DATEN_CS = '1' and DMA_MODUS(4) = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +--- WDC BSL REGISTER ------------------------------------------------------- + process(MAIN_CLK, nRSTO, WDC_BSL_CS, WDC_BSL, nFB_WR, FB_B0, FB_B1) + begin + if nRSTO = '0' THEN + WDC_BSL <= "00"; + elsif rising_edge(MAIN_CLK) and WDC_BSL_CS = '1' and nFB_WR = '0' then + IF FB_B0 = '1' THEN + WDC_BSL(1 DOWNTO 0) <= FB_AD(25 DOWNTO 24); + else + WDC_BSL(1 DOWNTO 0) <= WDC_BSL(1 DOWNTO 0); + end if; + end if; + END PROCESS; +--- DMA MODUS REGISTER ------------------------------------------------------- + process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, nFB_WR, FB_B0, FB_B1) + begin + if nRSTO = '0' THEN + DMA_MODUS <= x"0000"; + elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '1' and nFB_WR = '0' then + IF FB_B0 = '1' THEN + DMA_MODUS(15 downto 8) <= FB_AD(31 downto 24); + else + DMA_MODUS(15 downto 8) <= DMA_MODUS(15 downto 8); + end if; + IF FB_B1 = '1' THEN + DMA_MODUS(7 downto 0) <= FB_AD(23 downto 16); + else + DMA_MODUS(7 downto 0) <= DMA_MODUS(7 downto 0); + end if; + else + DMA_MODUS <= DMA_MODUS; + end if; + END PROCESS; +-- BYT COUNTER, SECTOR COUNTER ---------------------------------------------------- + process(MAIN_CLK, nRSTO, DMA_DATEN_CS, DMA_BYT_CNT_CS, DMA_BYT_CNT, nFB_WR, FB_B0, FB_B1, DMA_MODUS, CLR_FIFO) + begin + if nRSTO = '0' or CLR_FIFO = '1' THEN + DMA_BYT_CNT <= x"00000000"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_DATEN_CS = '1' and nFB_WR = '0' and DMA_MODUS(4) = '1' and FB_B1 = '1' then + DMA_BYT_CNT(31 downto 17) <= "000000000000000"; + DMA_BYT_CNT(16 downto 9) <= FB_AD(23 downto 16); + DMA_BYT_CNT(8 downto 0) <= "000000000"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_BYT_CNT_CS = '1' then + DMA_BYT_CNT <= FB_AD; + else + DMA_BYT_CNT <= DMA_BYT_CNT; + end if; + END PROCESS; +-------------------------------------------------------------------- +FB_AD(31 downto 16) <= "0000000000000" & DMA_STATUS when DMA_MODUS_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ"; +DMA_STATUS(0) <= '1'; -- DMA OK +DMA_STATUS(1) <= '1' when DMA_BYT_CNT /= 0 and DMA_BYT_CNT(31) = '0' else '0'; -- WENN byts UND NICHT MINUS +DMA_STATUS(2) <= '0' when DMA_DRQ_I = '1' or SCSI_DRQ = '1' else '0'; +DMA_DRQQ <= '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '0' and RDF_AZ > 15 and DMA_MODUS(6) = '0' else + '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '1' and WRF_AZ < 512 and DMA_MODUS(6) = '0' else '0'; +DMA_DRQ <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0'; +-- DMA REQUEST: SPIKES AUSFILTERN ------------------------------------------ + process(FDC_CLK, nRSTO, DMA_DRQ_REG) + begin + if nRSTO = '0' THEN + DMA_DRQ_REG <= "00"; + elsif rising_edge(FDC_CLK) then + DMA_DRQ_REG(0) <= DMA_DRQQ; + DMA_DRQ_REG(1) <= DMA_DRQ_REG(0) and DMA_DRQQ; + else + DMA_DRQ_REG <= DMA_DRQ_REG; + end if; + END PROCESS; +-- DMA ADRESSE ------------------------------------------------------ + process(MAIN_CLK, nRSTO, DMA_TOP_CS, DMA_TOP, nFB_WR, DMA_ADR_CS) + begin + if nRSTO = '0' THEN + DMA_TOP <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_TOP_CS = '1' or DMA_ADR_CS = '1') then + DMA_TOP <= FB_AD(31 downto 24); + else + DMA_TOP <= DMA_TOP; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_HIGH_CS, DMA_HIGH, nFB_WR, DMA_ADR_CS) + begin + if nRSTO = '0' THEN + DMA_HIGH <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_HIGH_CS = '1' or DMA_ADR_CS = '1') then + DMA_HIGH <= FB_AD(23 downto 16); + else + DMA_HIGH <= DMA_HIGH; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_MID_CS, DMA_MID, nFB_WR) + begin + DMA_MID <= DMA_MID; + if nRSTO = '0' THEN + DMA_MID <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then + if DMA_MID_CS = '1' then + DMA_MID <= FB_AD(23 downto 16); + elsif DMA_ADR_CS = '1' then + DMA_MID <= FB_AD(15 downto 8); + end if; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_LOW_CS, DMA_LOW, nFB_WR) + begin + DMA_LOW <= DMA_LOW; + if nRSTO = '0' THEN + DMA_LOW <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then + if DMA_LOW_CS = '1'then + DMA_LOW <= FB_AD(23 downto 16); + elsif DMA_ADR_CS = '1' then + DMA_LOW <= FB_AD(7 downto 0); + end if; + end if; + END PROCESS; +-------------------------------------------------------------------------------------------- +DMA_TOP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B0 = '1' else '0'; -- F8608/2 +DMA_HIGH_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B1 = '1' else '0'; -- F8609/2 +DMA_MID_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C305" and FB_B1 = '1' else '0'; -- F860B/2 +DMA_LOW_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C306" and FB_B1 = '1' else '0'; -- F860D/2 +FB_AD(31 downto 24) <= DMA_TOP when DMA_TOP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_HIGH when DMA_HIGH_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_MID when DMA_MID_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_LOW when DMA_LOW_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +-- DIRECTZUGRIFF +DMA_DIRM_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20100" else '0'; -- F002'0100 WORD +DMA_ADR_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20104" else '0'; -- F002'0104 LONG +DMA_BYT_CNT_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20108" else '0'; -- F002'0108 LONG +FB_AD <= DMA_TOP & DMA_HIGH & DMA_MID & DMA_LOW when DMA_ADR_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +FB_AD(31 downto 16) <= DMA_MODUS when DMA_DIRM_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ"; +FB_AD <= DMA_BYT_CNT when DMA_BYT_CNT_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +-- DMA RW TOGGLE ------------------------------------------ + process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, DMA_DIR_OLD) + begin + if nRSTO = '0' THEN + DMA_DIR_OLD <= '0'; + elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '0' then + DMA_DIR_OLD <= DMA_MODUS(8); + else + DMA_DIR_OLD <= DMA_DIR_OLD; + end if; + END PROCESS; +CLR_FIFO <= DMA_MODUS(8) xor DMA_DIR_OLD; +-- SCSI ---------------------------------------------------------------------------------- + I_SCSI: WF5380_TOP_SOC + port map( + CLK => FDC_CLK, + RESETn => nRSTO, + ADR => CA2 & CA1 & CA0, + DATA_IN => CD_IN_FDC, + DATA_OUT => SCSI_DOUT, + --DATA_EN : out bit; + -- Bus and DMA controls: + CSn => '1', --SCSI_CSn, ABGESCHALTET + RDn => (not nFDC_WR) or (not SCSI_CS), + WRn => nFDC_WR or (not SCSI_CS), + EOPn => '1', + DACKn => nSCSI_DACK, + DRQ => SCSI_DRQ, + INT => SCSI_INT, +-- READY => + -- SCSI bus: + DB_INn => SCSI_D, + DB_OUTn => DB_OUTn, + DB_EN => DB_EN, + DBP_INn => SCSI_PAR, + DBP_OUTn => DBP_OUTn, + DBP_EN => DBP_EN, -- wenn 1 dann output + RST_INn => nSCSI_RST, + RST_OUTn => RST_OUTn, + RST_EN => RST_EN, + BSY_INn => nSCSI_BUSY, + BSY_OUTn => BSY_OUTn, + BSY_EN => BSY_EN, + SEL_INn => nSCSI_SEL, + SEL_OUTn => SEL_OUTn, + SEL_EN => SEL_EN, + ACK_INn => '1', + ACK_OUTn => nSCSI_ACK, +-- ACK_EN => ACK_EN, + ATN_INn => '1', + ATN_OUTn => nSCSI_ATN, +-- ATN_EN => ATN_EN, + REQ_INn => nSCSI_DRQ, +-- REQ_OUTn => REQ_OUTn, +-- REQ_EN => REQ_EN, + IOn_IN => nSCSI_I_O, +-- IOn_OUT => IOn_OUT, +-- IO_EN => IO_EN, + CDn_IN => nSCSI_C_D, +-- CDn_OUT => CDn_OUT, +-- CD_EN => CD_EN, + MSG_INn => nSCSI_MSG +-- MSG_OUTn => MSG_OUTn, +-- MSG_EN => MSG_EN + ); +-- SCSI ACSI --------------------------------------------------------------- +SCSI_D <= DB_OUTn when DB_EN = '1' else "ZZZZZZZZ"; +SCSI_DIR <= '1'; --'0' when DB_EN = '1' else '1'; --ABGESCHALTET +SCSI_PAR <= DBP_OUTn when DBP_EN = '1' else 'Z'; +nSCSI_RST <= RST_OUTn when RST_EN = '1' else 'Z'; +nSCSI_BUSY <= BSY_OUTn when BSY_EN = '1' else 'Z'; +nSCSI_SEL <= SEL_OUTn when SEL_EN = '1' else 'Z'; +ACSI_DIR <= '0'; +ACSI_D <= "ZZZZZZZZ"; +nACSI_CS <= '1'; +ACSI_A1 <= CA1; +nACSI_RESET <= nRSTO; +nACSI_ACK <= '1'; +---------------------------------------------------------------------------- +-- ROM-PORT TA KOMMT FROM DEFAULT TA = 16 BUSCYCLEN = 500ns +---------------------------------------------------------------------------- +ROM_CS <= '1' when nFB_CS1 = '0' and nFB_WR = '1' and FB_ADR(19 downto 17) = x"5" else '0'; -- FFF A'0000/2'0000 +nROM4 <= '0' when ROM_CS = '1' and FB_ADR(16) = '0' else '1'; +nROM3 <= '0' when ROM_CS = '1' and FB_ADR(16) = '1' else '1'; +---------------------------------------------------------------------------- +-- ACIA KEYBOARD +---------------------------------------------------------------------------- + I_ACIA_KEYBOARD: WF6850IP_TOP_SOC + port map( + CLK => MAIN_CLK, + RESETn => nRSTO, + + CS2n => FB_ADR(2), + CS1 => '1', + CS0 => ACIA_CS_I, + E => ACIA_CS_I, + RWn => nFB_WR, + RS => FB_ADR(1), + + DATA_IN => FB_AD(31 downto 24), + DATA_OUT => DATA_OUT_ACIA_I, +-- DATA_EN => DATA_EN_ACIA_I, + + TXCLK => CLK500k, + RXCLK => CLK500k, + RXDATA => KEYB_RxD, + + CTSn => '0', + DCDn => '0', + + IRQn => IRQ_KEYBDn, + TXDATA => AMKB_TX + --RTSn => -- Not used. + ); +ACIA_CS_I <= '1' when nFB_CS1 = '0'and FB_ADR(19 downto 3) = x"1FF80" else '0'; -- FFC00-FFC07 FFC00/8 +KEYB_RxD <= '1' when AMKB_REG(3) = '1' or PIC_AMKB_RX = '0' else '0'; -- TASTATUR DATEN VOM PIC(PS2) OR NORMAL +FB_AD(31 downto 24) <= DATA_OUT_ACIA_I when ACIA_CS_I = '1' and FB_ADR(2) = '0' and nFB_OE = '0' else "ZZZZZZZZ"; +-- AMKB_TX: SPIKES AUSFILTERN ------------------------------------------ + process(CLK2M, AMKB_RX, AMKB_REG) + begin + if rising_edge(CLK2M) then + IF AMKB_RX = '0' THEN + IF AMKB_REG < 16 THEN + AMKB_REG <= "00000"; + ELSE + AMKB_REG <= AMKB_REG - 1; + END IF; + ELSE + IF AMKB_REG > 15 THEN + AMKB_REG <= "11111"; + ELSE + AMKB_REG <= AMKB_REG + 1; + END IF; + END IF; + ELSE + AMKB_REG <= AMKB_REG; + end if; + END PROCESS; +---------------------------------------------------------------------------- +-- ACIA MIDI +---------------------------------------------------------------------------- + I_ACIA_MIDI: WF6850IP_TOP_SOC + port map( + CLK => MAIN_CLK, + RESETn => nRSTO, + + CS2n => '0', + CS1 => FB_ADR(2), + CS0 => ACIA_CS_I, + E => ACIA_CS_I, + RWn => nFB_WR, + RS => FB_ADR(1), + + DATA_IN => FB_AD(31 downto 24), + DATA_OUT => DATA_OUT_ACIA_II, +-- DATA_EN => DATA_EN_ACIA_II, + + TXCLK => CLK500k, + RXCLK => CLK500k, + RXDATA => MIDI_IN, + CTSn => '0', + DCDn => '0', + + IRQn => IRQ_MIDIn, + TXDATA => MIDI_OUT + --RTSn => -- Not used. + ); +MIDI_TLR <= MIDI_OUT; +MIDI_OLR <= MIDI_OUT; +FB_AD(31 downto 24) <= DATA_OUT_ACIA_II when ACIA_CS_I = '1' and FB_ADR(2) = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +---------------------------------------------------------------------------- +-- MFP +---------------------------------------------------------------------------- + I_MFP: WF68901IP_TOP_SOC + port map( + -- System control: + CLK => MAIN_CLK, + RESETn => nRSTO, + -- Asynchronous bus control: + DSn => not LDS, + CSn => not MFP_CS, + RWn => nFB_WR, + DTACKn => DTACK_OUT_MFPn, + -- Data and Adresses: + RS => FB_ADR(5 downto 1), + DATA_IN => FB_AD(23 downto 16), + DATA_OUT => DATA_OUT_MFP, +-- DATA_EN => DATA_EN_MFP, + GPIP_IN(7) => not DMA_DRQ_Q, + GPIP_IN(6) => not RI, + GPIP_IN(5) => DINTn, + GPIP_IN(4) => IRQ_ACIAn, + GPIP_IN(3) => DSP_INT, + GPIP_IN(2) => not CTS, + GPIP_IN(1) => not DCD, + GPIP_IN(0) => LP_BUSY, + -- GPIP_OUT =>, -- Not used; all GPIPs are direction input. + -- GPIP_EN =>, -- Not used; all GPIPs are direction input. + -- Interrupt control: + IACKn => not MFP_INTACK, + IEIn => '0', + -- IEOn =>, -- Not used. + IRQn => nMFP_INT, + -- Timers and timer control: + XTAL1 => CLK2M4576, + TAI => '0', + TBI => nBLANK, + -- TAO =>, + -- TBO =>, + -- TCO =>, + TDO => TDO, + -- Serial I/O control: + RC => TDO, + TC => TDO, + SI => RxD, + SO => TxD + -- SO_EN => MFP_SO_EN + -- DMA control: + -- RRn =>, + -- TRn => + ); + +MFP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 6) = x"3FE8" else '0'; -- FFA00/40 +MFP_INTACK <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20000" else '0'; --F002'0000 +LDS <= '1' when MFP_CS = '1' or MFP_INTACK = '1' else '0'; +FB_AD(23 downto 16) <= DATA_OUT_MFP when MFP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(31 downto 10) <= "0000000000000000000000" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZ"; +FB_AD(9 downto 2) <= DATA_OUT_MFP when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(1 downto 0) <= "00" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZ"; +DINTn <= '0' when IDE_INT = '1' AND ACP_CONF(28) = '1' else + '0' when FDINT = '1' else + '0' when SCSI_INT = '1' AND ACP_CONF(28) = '1' else '1'; +-- TASTATUR UND KEYBOARD INTERRUPT: SPIKES AUSFILTERN ------------------------------------------ + process(MAIN_CLK,nRSTO,IRQ_ACIAn,IRQ_KEYBDn,IRQ_MIDIn) + begin + if nRSTO = '0' THEN + IRQ_ACIAn <= '1'; + elsif rising_edge(MAIN_CLK) then + IRQ_ACIAn <= IRQ_KEYBDn and IRQ_MIDIn; + else + IRQ_ACIAn <= IRQ_ACIAn; + end if; + END PROCESS; +---------------------------------------------------------------------------- +-- Sound +---------------------------------------------------------------------------- + I_SOUND: WF2149IP_TOP_SOC + port map( + SYS_CLK => MAIN_CLK, + RESETn => nRSTO, + + WAV_CLK => CLK2M, + SELn => '1', + + BDIR => SNDIR_I, + BC2 => '1', + BC1 => SNDCS_I, + + A9n => '0', + A8 => '1', + DA_IN => FB_AD(31 downto 24), + DA_OUT => DA_OUT_X, + + IO_A_IN => x"00", -- All port pins are dedicated outputs. + IO_A_OUT(7) => nnIDE_RES, + IO_A_OUT(6) => LP_DIR_X, + IO_A_OUT(5) => LP_STR, + IO_A_OUT(4) => DTR, + IO_A_OUT(3) => RTS, +-- IO_A_OUT(2) => FDD_D1SEL, + IO_A_OUT(1) => DSA_D, + IO_A_OUT(0) => nSDSEL, + -- IO_A_EN =>, -- Not required. + IO_B_IN => LP_D, + IO_B_OUT => LP_D_X, + -- IO_B_EN => IO_B_EN, + + OUT_A => YM_QA, + OUT_B => YM_QB, + OUT_C => YM_QC + ); + +SNDCS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"3E200" else '0'; -- 8800-8803 F8800/4 +SNDCS_I <= '1' when SNDCS = '1' and FB_ADR (1 downto 1) = "0" else '0'; +SNDIR_I <= '1' when SNDCS = '1' and nFB_WR = '0' else '0'; +FB_AD(31 downto 24) <= DA_OUT_X when SNDCS_I = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +LP_D <= LP_D_X when LP_DIR_X = '0' else "ZZZZZZZZ"; +LP_DIR <= LP_DIR_X; + +END FalconIO_SDCard_IDE_CF_architecture; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak new file mode 100644 index 0000000..a339eda --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd.bak @@ -0,0 +1,971 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Tue Sep 08 16:24:20 2009 + +library work; +use work.FalconIO_SDCard_IDE_CF_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +-- Entity Declaration + + +-- Entity Declaration + +ENTITY FalconIO_SDCard_IDE_CF IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + CLK2M : IN STD_LOGIC; + CLK500k : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + LP_BUSY : IN STD_LOGIC; + nACSI_DRQ : IN STD_LOGIC; + nACSI_INT : IN STD_LOGIC; + nSCSI_DRQ : IN STD_LOGIC; + nSCSI_MSG : IN STD_LOGIC; + MIDI_IN : IN STD_LOGIC; + RxD : IN STD_LOGIC; + CTS : IN STD_LOGIC; + RI : IN STD_LOGIC; + DCD : IN STD_LOGIC; + AMKB_RX : IN STD_LOGIC; + PIC_AMKB_RX : IN STD_LOGIC; + IDE_RDY : IN STD_LOGIC; + IDE_INT : IN STD_LOGIC; + WP_CS_CARD : IN STD_LOGIC; + nINDEX : IN STD_LOGIC; + TRACK00 : IN STD_LOGIC; + nRD_DATA : IN STD_LOGIC; + nDCHG : IN STD_LOGIC; + SD_DATA0 : IN STD_LOGIC; + SD_DATA1 : IN STD_LOGIC; + SD_DATA2 : IN STD_LOGIC; + SD_CARD_DEDECT : IN STD_LOGIC; + SD_WP : IN STD_LOGIC; + nDACK0 : IN STD_LOGIC; + nFB_WR : INOUT STD_LOGIC; + WP_CF_CARD : IN STD_LOGIC; + nWP : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + HD_DD : IN STD_LOGIC; + nSCSI_C_D : IN STD_LOGIC; + nSCSI_I_O : IN STD_LOGIC; + CLK2M4576 : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + VSYNC : IN STD_LOGIC; + HSYNC : IN STD_LOGIC; + DSP_INT : IN STD_LOGIC; + nBLANK : IN STD_LOGIC; + FDC_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + ACP_CONF : IN STD_LOGIC_VECTOR(31 downto 24); + nIDE_CS1 : OUT STD_LOGIC; + nIDE_CS0 : OUT STD_LOGIC; + LP_STR : OUT STD_LOGIC; + LP_DIR : OUT STD_LOGIC; + nACSI_ACK : OUT STD_LOGIC; + nACSI_RESET : OUT STD_LOGIC; + nACSI_CS : OUT STD_LOGIC; + ACSI_DIR : OUT STD_LOGIC; + ACSI_A1 : OUT STD_LOGIC; + nSCSI_ACK : OUT STD_LOGIC; + nSCSI_ATN : OUT STD_LOGIC; + SCSI_DIR : OUT STD_LOGIC; + SD_CLK : OUT STD_LOGIC; + YM_QA : OUT STD_LOGIC; + YM_QC : OUT STD_LOGIC; + YM_QB : OUT STD_LOGIC; + nSDSEL : OUT STD_LOGIC; + STEP : OUT STD_LOGIC; + MOT_ON : OUT STD_LOGIC; + nRP_LDS : OUT STD_LOGIC; + nRP_UDS : OUT STD_LOGIC; + nROM4 : OUT STD_LOGIC; + nROM3 : OUT STD_LOGIC; + nCF_CS1 : OUT STD_LOGIC; + nCF_CS0 : OUT STD_LOGIC; + nIDE_RD : INOUT STD_LOGIC; + nIDE_WR : INOUT STD_LOGIC; + AMKB_TX : OUT STD_LOGIC; + IDE_RES : OUT STD_LOGIC; + DTR : OUT STD_LOGIC; + RTS : OUT STD_LOGIC; + TxD : OUT STD_LOGIC; + MIDI_OLR : OUT STD_LOGIC; + MIDI_TLR : OUT STD_LOGIC; + nDREQ0 : OUT STD_LOGIC; + DSA_D : OUT STD_LOGIC; + nMFP_INT : OUT STD_LOGIC; + FALCON_IO_TA : OUT STD_LOGIC; + STEP_DIR : OUT STD_LOGIC; + WR_DATA : OUT STD_LOGIC; + WR_GATE : OUT STD_LOGIC; + DMA_DRQ : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0); + LP_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + ACSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + SCSI_D : INOUT STD_LOGIC_VECTOR(7 downto 0); + SCSI_PAR : INOUT STD_LOGIC; + nSCSI_SEL : INOUT STD_LOGIC; + nSCSI_BUSY : INOUT STD_LOGIC; + nSCSI_RST : INOUT STD_LOGIC; + SD_CD_DATA3 : INOUT STD_LOGIC; + SD_CDM_D1 : INOUT STD_LOGIC + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END FalconIO_SDCard_IDE_CF; + + +-- Architecture Body + +ARCHITECTURE FalconIO_SDCard_IDE_CF_architecture OF FalconIO_SDCard_IDE_CF IS +-- system +signal SYS_CLK : STD_LOGIC; +signal RESETn : STD_LOGIC; +signal FB_B0 : STD_LOGIC; -- UPPER BYT BEI 16BIT BUS +signal FB_B1 : STD_LOGIC; -- LOWER BYT BEI 16BIT BUS +signal BYT : STD_LOGIC; -- WENN BYT -> 1 +signal LONG : STD_LOGIC; -- WENN -> 1 +-- KEYBOARD MIDI +signal ACIA_CS_I : STD_LOGIC; +signal IRQ_KEYBDn : STD_LOGIC; +signal IRQ_MIDIn : STD_LOGIC; +signal KEYB_RxD : STD_LOGIC; +signal AMKB_REG : STD_LOGIC_VECTOR(4 downto 0); +signal MIDI_OUT : STD_LOGIC; +signal DATA_OUT_ACIA_I : STD_LOGIC_VECTOR(7 downto 0); +signal DATA_OUT_ACIA_II : STD_LOGIC_VECTOR(7 downto 0); +-- MFP +signal MFP_CS : STD_LOGIC; +signal MFP_INTACK : STD_LOGIC; +signal LDS : STD_LOGIC; +signal DTACK_OUT_MFPn : STD_LOGIC; +signal IRQ_ACIAn : STD_LOGIC; +signal DINTn : STD_LOGIC; +signal DATA_OUT_MFP : STD_LOGIC_VECTOR(7 downto 0); +signal TDO : STD_LOGIC; +-- SOUND +signal SNDCS : STD_LOGIC; +signal SNDCS_I : STD_LOGIC; +signal SNDIR_I : STD_LOGIC; +signal LP_DIR_X : STD_LOGIC; +signal DA_OUT_X : STD_LOGIC_VECTOR(7 downto 0); +signal LP_D_X : STD_LOGIC_VECTOR(7 downto 0); +-- DIV +signal SUB_BUS : STD_LOGIC; -- SUB BUS MIT ROM-PORT, CF UND IDE +signal ROM_CS : STD_LOGIC; +-- DMA UND FLOPPY +signal DMA_DATEN_CS : STD_LOGIC; +signal DMA_MODUS_CS : STD_LOGIC; +signal DMA_MODUS : STD_LOGIC_VECTOR(15 downto 0); +signal WDC_BSL_CS : STD_LOGIC; +signal WDC_BSL : STD_LOGIC_VECTOR(1 DOWNTO 0); +signal HD_DD_OUT : STD_LOGIC; +signal FDCS_In : STD_LOGIC; +signal CA0 : STD_LOGIC; +signal CA1 : STD_LOGIC; +signal CA2 : STD_LOGIC; +signal FDINT : STD_LOGIC; +signal FDRQ : STD_LOGIC; +signal CD_OUT_FDC : STD_LOGIC_VECTOR(7 downto 0); +signal CD_IN_FDC : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_TOP_CS : STD_LOGIC; +signal DMA_TOP : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_HIGH_CS : STD_LOGIC; +signal DMA_HIGH : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_MID_CS : STD_LOGIC; +signal DMA_MID : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_LOW_CS : STD_LOGIC; +signal DMA_LOW : STD_LOGIC_VECTOR(7 downto 0); +signal DMA_DIRM_CS : STD_LOGIC; +signal DMA_ADR_CS : STD_LOGIC; +signal DMA_STATUS : STD_LOGIC_VECTOR(2 downto 0); +signal DMA_DIR_OLD : STD_LOGIC; +signal DMA_BYT_CNT_CS : STD_LOGIC; +signal DMA_BYT_CNT : STD_LOGIC_VECTOR(31 downto 0); +signal CLR_FIFO : STD_LOGIC; +signal DMA_DRQ_I : STD_LOGIC; +signal DMA_DRQ_REG : STD_LOGIC_VECTOR(1 downto 0); +signal DMA_DRQQ : STD_LOGIC; +signal DMA_DRQ_Q : STD_LOGIC; +signal RDF_DOUT : STD_LOGIC_VECTOR(31 downto 0); +signal RDF_AZ : STD_LOGIC_VECTOR(9 downto 0); +signal RDF_RDE : STD_LOGIC; +signal RDF_WRE : STD_LOGIC; +signal RDF_DIN : STD_LOGIC_VECTOR(7 downto 0); +signal WRF_DOUT : STD_LOGIC_VECTOR(7 downto 0); +signal WRF_AZ : STD_LOGIC_VECTOR(9 downto 0); +signal WRF_RDE : STD_LOGIC; +signal WRF_WRE : STD_LOGIC; +signal nFDC_WR : STD_LOGIC; +type FCF_STATES is( FCF_IDLE, FCF_T0, FCF_T1, FCF_T2, FCF_T3, FCF_T6, FCF_T7); +signal FCF_STATE : FCF_STATES; +signal NEXT_FCF_STATE : FCF_STATES; +signal DMA_REQ : STD_LOGIC; +signal FDC_CS : STD_LOGIC; +signal FCF_CS : STD_LOGIC; +signal FCF_APH : STD_LOGIC; +signal DMA_AZ_CS : STD_LOGIC; +signal DMA_ACTIV : STD_LOGIC; +signal DMA_ACTIV_NEW : STD_LOGIC; +signal FDC_OUT : STD_LOGIC_VECTOR(7 downto 0); +-- SCSI +signal SCSI_CS : STD_LOGIC; +signal SCSI_CSn : STD_LOGIC; +signal SCSI_DOUT : STD_LOGIC_VECTOR(7 downto 0); +signal nSCSI_DACK : STD_LOGIC; +signal SCSI_DRQ : STD_LOGIC; +signal SCSI_INT : STD_LOGIC; +signal DB_OUTn : STD_LOGIC_VECTOR(7 downto 0); +signal DB_EN : STD_LOGIC; +signal DBP_OUTn : STD_LOGIC; +signal DBP_EN : STD_LOGIC; +signal RST_OUTn : STD_LOGIC; +signal RST_EN : STD_LOGIC; +signal BSY_OUTn : STD_LOGIC; +signal BSY_EN : STD_LOGIC; +signal SEL_OUTn : STD_LOGIC; +signal SEL_EN : STD_LOGIC; +-- IDE +signal nnIDE_RES : STD_LOGIC; +signal IDE_CF_CS : STD_LOGIC; +signal IDE_CF_TA : STD_LOGIC; +signal NEXT_nIDE_RD : STD_LOGIC; +signal NEXT_nIDE_WR : STD_LOGIC; +type CMD_STATES is( IDLE, T1, T6, T7); +signal CMD_STATE : CMD_STATES; +signal NEXT_CMD_STATE : CMD_STATES; + + +BEGIN +LONG <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '0' else '0'; +BYT <= '1' when FB_SIZE1 = '0' and FB_SIZE0 = '1' else '0'; +FB_B0 <= '1' when FB_ADR(0) = '0' or BYT = '0' else '0'; +FB_B1 <= '1' when FB_ADR(0) = '1' or BYT = '0' else '0'; + +FALCON_IO_TA <= '1' when SNDCS = '1' or DTACK_OUT_MFPn = '0' or ACIA_CS_I = '1' or DMA_MODUS_CS ='1' + or DMA_ADR_CS = '1' or DMA_DIRM_CS = '1' or DMA_BYT_CNT_CS = '1' or FCF_CS = '1' or IDE_CF_TA = '1' else '0'; +SUB_BUS <= '1' when nFB_WR = '1' and ROM_CS = '1' ELSE + '1' when nFB_WR = '1' and IDE_CF_CS = '1' ELSE + '1' when nFB_WR = '0' and nIDE_WR = '0' ELSE '0'; +nRP_UDS <= '0' when SUB_BUS = '1' and FB_B0 = '1' else '1'; +nRP_LDS <= '0' when SUB_BUS = '1' and FB_B1 = '1' else '1'; +nDREQ0 <= '0'; +---------------------------------------------------------------------------- +-- SD +---------------------------------------------------------------------------- +SD_CLK <= 'Z'; +SD_CD_DATA3 <= 'Z'; +SD_CDM_D1 <= 'Z'; +---------------------------------------------------------------------------- +-- IDE +---------------------------------------------------------------------------- +CMD_REG: process(nRSTO, MAIN_CLK, CMD_STATE, NEXT_CMD_STATE) + begin + if nRSTO = '0' then + CMD_STATE <= IDLE; + elsif rising_edge(MAIN_CLK) then + CMD_STATE <= NEXT_CMD_STATE; -- go to next + nIDE_RD <= NEXT_nIDE_RD; -- go to next + nIDE_WR <= NEXT_nIDE_WR; -- go to next + else + CMD_STATE <= CMD_STATE; -- halten + nIDE_RD <= nIDE_RD; -- halten + nIDE_WR <= nIDE_WR; -- halten + end if; + end process CMD_REG; + + CMD_DECODER: process(CMD_STATE, NEXT_CMD_STATE, NEXT_nIDE_RD, NEXT_nIDE_WR, IDE_RDY, IDE_CF_TA) + begin + case CMD_STATE is + when IDLE => + IDE_CF_TA <= '0'; + if IDE_CF_CS = '1' then + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T1; + else + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= IDLE; + end if; + when T1 => + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T6; + when T6 => + IF IDE_RDY = '1' then + IDE_CF_TA <= '1'; + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= T7; + else + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= not nFB_WR; + NEXT_nIDE_WR <= nFB_WR; + NEXT_CMD_STATE <= T6; + end if; + when T7 => + IDE_CF_TA <= '0'; + NEXT_nIDE_RD <= '1'; + NEXT_nIDE_WR <= '1'; + NEXT_CMD_STATE <= IDLE; + end case; + end process CMD_DECODER; + +IDE_RES <= not nnIDE_RES and nRSTO; +IDE_CF_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 7) = x"0" else '0'; -- FFF0'0000/80 +nCF_CS0 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"0" else -- FFFO'0000-FFF0'001F + '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"2" else '1'; -- FFFO'0040-FFF0'005F +nCF_CS1 <= '0' when ACP_CONF(31) = '0' and FB_ADR(19 downto 5) = x"1" else -- FFF0'0020-FFF0'003F + '0' when ACP_CONF(31) = '1' and FB_ADR(19 downto 5) = x"3" else '1'; -- FFFO'0060-FFF0'007F +nIDE_CS0 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"2" else -- FFF0'0040-FFF0'005F + '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"0" else '1'; -- FFFO'0000-FFF0'001F +nIDE_CS1 <= '0' when ACP_CONF(30) = '0' and FB_ADR(19 downto 5) = x"3" else -- FFF0'0060-FFF0'007F + '0' when ACP_CONF(30) = '1' and FB_ADR(19 downto 5) = x"1" else '1'; -- FFFO'0020-FFF0'003F +----------------------------------------------------------------------------------------------------------------------------------------- +-- ACSI, SCSI UND FLOPPY WD1772 +------------------------------------------------------------------------------------------------------------------------------------------- +-- daten read fifo + RDF: dcfifo0 + port map( + aclr => CLR_FIFO, + data => RDF_DIN, + rdclk => MAIN_CLK, + rdreq => RDF_RDE, + wrclk => FDC_CLK, + wrreq => RDF_WRE, + q => RDF_DOUT, + wrusedw => RDF_AZ + ); +FCF_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"0020110" and LONG = '1' else '0'; -- F002'0110 LONG ONLY +FCF_APH <= '1' when FB_ALE = '1' and FB_AD(31 downto 0) = x"F0020110" and LONG = '1' else '0'; -- ADRESSPHASE F0020110 LONG ONLY +RDF_RDE <= '1' when FCF_APH = '1' and nFB_WR = '1' else '0'; -- AKTIVIEREN IN ADRESSPHASE +FB_AD <= RDF_DOUT(7 downto 0) & RDF_DOUT(15 downto 8) & RDF_DOUT(23 downto 16) & RDF_DOUT(31 downto 24) when FCF_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +RDF_DIN <= CD_OUT_FDC when DMA_MODUS(7) = '1' else SCSI_DOUT; +-- daten write fifo + WRF: dcfifo1 + port map( + aclr => CLR_FIFO, + data => FB_AD(7 downto 0) & FB_AD(15 downto 8) & FB_AD(23 downto 16) & FB_AD(31 downto 24), + rdclk => FDC_CLK, + rdreq => WRF_RDE, + wrclk => MAIN_CLK, + wrreq => WRF_WRE, + q => WRF_DOUT, + rdusedw => WRF_AZ + ); +CD_IN_FDC <= WRF_DOUT when DMA_ACTIV = '1' and DMA_MODUS(8) = '1' else FB_AD(23 downto 16); -- BEI DMA WRITE <-FIFO SONST <-FB +DMA_AZ_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"002010C" else '0'; -- F002'010C LONG +FB_AD <= DMA_DRQ_Q & DMA_DRQ_REG & IDE_INT & FDINT & SCSI_INT & RDF_AZ & "0" & DMA_STATUS & "00" & WRF_AZ when DMA_AZ_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +DMA_DRQ_Q <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0'; +-- FIFO WRITE: GENAU 1 MAIN_CLK ------------------------------------------------------------------------- + process(MAIN_CLK, nRSTO, WRF_WRE, nFB_WR, FCF_APH) + begin + if nRSTO = '0' THEN + WRF_WRE <= '0'; + elsif rising_edge(MAIN_CLK) then + IF FCF_APH = '1' and nFB_WR = '0' then + WRF_WRE <= '1'; + else + WRF_WRE <= '0'; + end if; + else + WRF_WRE <= WRF_WRE; + end if; + END PROCESS; + +FCF_REG: process(nRSTO, FDC_CLK, FCF_STATE, NEXT_FCF_STATE, DMA_ACTIV) + begin + if nRSTO = '0' then + FCF_STATE <= FCF_IDLE; + DMA_ACTIV <= '0'; + elsif rising_edge(FDC_CLK) then + FCF_STATE <= NEXT_FCF_STATE; -- go to next + DMA_ACTIV <= DMA_ACTIV_NEW; + else + FCF_STATE <= FCF_STATE; -- halten + DMA_ACTIV <= DMA_ACTIV; + end if; + end process FCF_REG; + +FDC_REG: process(nRSTO, FDC_CLK, FDC_OUT, FDCS_In, CD_OUT_FDC) + begin + if nRSTO = '0' then + FDC_OUT <= x"00"; + elsif rising_edge(FDC_CLK) and FDCS_In = '0' then + FDC_OUT <= CD_OUT_FDC; -- set + else + FDC_OUT <= FDC_OUT; -- halten + end if; + end process FDC_REG; + +DMA_REQ <= '1' when ((DMA_DRQ_I = '1' and DMA_MODUS(7) = '1') or (SCSI_DRQ = '1' and DMA_MODUS(7) = '0')) and DMA_STATUS(1) = '1' and DMA_MODUS(6) = '0' and CLR_FIFO = '0' else '0'; +FDC_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and FB_B1 = '1' else '0'; +SCSI_CS <= '1' when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and FB_B1 = '1' else '0'; + + FCF_DECODER: process(FCF_STATE, NEXT_FCF_STATE, DMA_REQ,FDC_CS, RDF_WRE, WRF_RDE, SCSI_DRQ, nSCSI_DACK, DMA_MODUS, DMA_ACTIV, FDCS_In,SCSI_CS, SCSI_CSn) + begin + case FCF_STATE is + when FCF_IDLE => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + WRF_RDE <= '0'; + nSCSI_DACK <= '1'; + if DMA_REQ = '1' or FDC_CS = '1' or SCSI_CS = '1' then + DMA_ACTIV_NEW <= DMA_REQ; + NEXT_FCF_STATE <= FCF_T0; + else + DMA_ACTIV_NEW <= '0'; + NEXT_FCF_STATE <= FCF_IDLE; + end if; + when FCF_T0 => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + nSCSI_DACK <= '1'; + DMA_ACTIV_NEW <= DMA_REQ; + WRF_RDE <= DMA_MODUS(8) and DMA_REQ; -- WRITE -> READ FROM FIFO + if DMA_REQ = '0' and DMA_ACTIV = '1' THEN -- spike? + NEXT_FCF_STATE <= FCF_IDLE; -- ja -> zum start + else + NEXT_FCF_STATE <= FCF_T1; + end if; + when FCF_T1 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T2; + when FCF_T2 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T3; + when FCF_T3 => + RDF_WRE <= '0'; + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + NEXT_FCF_STATE <= FCF_T6; + when FCF_T6 => + WRF_RDE <= '0'; + DMA_ACTIV_NEW <= DMA_ACTIV; + SCSI_CSn <= not SCSI_CS; + FDCS_In <= DMA_MODUS(4) or DMA_MODUS(3); + nSCSI_DACK <= DMA_MODUS(7) and DMA_ACTIV; + RDF_WRE <= not DMA_MODUS(8) and DMA_ACTIV; -- READ -> WRITE IN FIFO + NEXT_FCF_STATE <= FCF_T7; + when FCF_T7 => + SCSI_CSn <= '1'; + FDCS_In <= '1'; + RDF_WRE <= '0'; + WRF_RDE <= '0'; + nSCSI_DACK <= '1'; + DMA_ACTIV_NEW <= '0'; + if FDC_CS = '1' and DMA_REQ = '0' then + NEXT_FCF_STATE <= FCF_T7; + else + NEXT_FCF_STATE <= FCF_IDLE; + end if; + end case; + end process FCF_DECODER; + + I_FDC: WF1772IP_TOP_SOC + port map( + CLK => FDC_CLK, + RESETn => nRSTO, + CSn => FDCS_In, + RWn => nFDC_WR, + A1 => CA2, + A0 => CA1, + DATA_IN => CD_IN_FDC, + DATA_OUT => CD_OUT_FDC, +-- DATA_EN => CD_EN_FDC, + RDn => nRD_DATA, + TR00n => TRACK00, + IPn => nINDEX, + WPRTn => nWP, + DDEn => '0', -- Fixed to MFM. + HDTYPE => HD_DD_OUT, + MO => MOT_ON, + WG => WR_GATE, + WD => WR_DATA, + STEP => STEP, + DIRC => STEP_DIR, + DRQ => DMA_DRQ_I, + INTRQ => FDINT + ); +DMA_DATEN_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C302" else '0'; -- F8604/2 +DMA_MODUS_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C303" else '0'; -- F8606/2 +WDC_BSL_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C307" else '0'; -- F860E/2 +HD_DD_OUT <= HD_DD WHEN ACP_CONF(29) = '0' ELSE WDC_BSL(0); +nFDC_WR <= (not DMA_MODUS(8)) when DMA_ACTIV = '1' else nFB_WR; +CA0 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(0); +CA1 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(1); +CA2 <= '1' when DMA_ACTIV = '1' ELSE DMA_MODUS(2); +FB_AD(23 downto 16) <= "0000" & (not DMA_STATUS(1)) & "0" & WDC_BSL(1) & HD_DD when WDC_BSL_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(31 downto 24) <= "00000000" when DMA_DATEN_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= FDC_OUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "00" and nFB_OE = '0' else + SCSI_DOUT when DMA_DATEN_CS = '1' and DMA_MODUS(4 downto 3) = "01" and nFB_OE = '0' else + DMA_BYT_CNT(16 downto 9) when DMA_DATEN_CS = '1' and DMA_MODUS(4) = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +--- WDC BSL REGISTER ------------------------------------------------------- + process(MAIN_CLK, nRSTO, WDC_BSL_CS, WDC_BSL, nFB_WR, FB_B0, FB_B1) + begin + if nRSTO = '0' THEN + WDC_BSL <= "00"; + elsif rising_edge(MAIN_CLK) and WDC_BSL_CS = '1' and nFB_WR = '0' then + IF FB_B0 = '1' THEN + WDC_BSL(1 DOWNTO 0) <= FB_AD(25 DOWNTO 24); + else + WDC_BSL(1 DOWNTO 0) <= WDC_BSL(1 DOWNTO 0); + end if; + end if; + END PROCESS; +--- DMA MODUS REGISTER ------------------------------------------------------- + process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, nFB_WR, FB_B0, FB_B1) + begin + if nRSTO = '0' THEN + DMA_MODUS <= x"0000"; + elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '1' and nFB_WR = '0' then + IF FB_B0 = '1' THEN + DMA_MODUS(15 downto 8) <= FB_AD(31 downto 24); + else + DMA_MODUS(15 downto 8) <= DMA_MODUS(15 downto 8); + end if; + IF FB_B1 = '1' THEN + DMA_MODUS(7 downto 0) <= FB_AD(23 downto 16); + else + DMA_MODUS(7 downto 0) <= DMA_MODUS(7 downto 0); + end if; + else + DMA_MODUS <= DMA_MODUS; + end if; + END PROCESS; +-- BYT COUNTER, SECTOR COUNTER ---------------------------------------------------- + process(MAIN_CLK, nRSTO, DMA_DATEN_CS, DMA_BYT_CNT_CS, DMA_BYT_CNT, nFB_WR, FB_B0, FB_B1, DMA_MODUS, CLR_FIFO) + begin + if nRSTO = '0' or CLR_FIFO = '1' THEN + DMA_BYT_CNT <= x"00000000"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_DATEN_CS = '1' and nFB_WR = '0' and DMA_MODUS(4) = '1' and FB_B1 = '1' then + DMA_BYT_CNT(31 downto 17) <= "000000000000000"; + DMA_BYT_CNT(16 downto 9) <= FB_AD(23 downto 16); + DMA_BYT_CNT(8 downto 0) <= "000000000"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and DMA_BYT_CNT_CS = '1' then + DMA_BYT_CNT <= FB_AD; + else + DMA_BYT_CNT <= DMA_BYT_CNT; + end if; + END PROCESS; +-------------------------------------------------------------------- +FB_AD(31 downto 16) <= "0000000000000" & DMA_STATUS when DMA_MODUS_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ"; +DMA_STATUS(0) <= '1'; -- DMA OK +DMA_STATUS(1) <= '1' when DMA_BYT_CNT /= 0 and DMA_BYT_CNT(31) = '0' else '0'; -- WENN byts UND NICHT MINUS +DMA_STATUS(2) <= '0' when DMA_DRQ_I = '1' or SCSI_DRQ = '1' else '0'; +DMA_DRQQ <= '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '0' and RDF_AZ > 15 and DMA_MODUS(6) = '0' else + '1' when DMA_STATUS(1) = '1' and DMA_MODUS(8) = '1' and WRF_AZ < 512 and DMA_MODUS(6) = '0' else '0'; +DMA_DRQ <= '1' when DMA_DRQ_REG = "11" and DMA_MODUS(6) = '0' else '0'; +-- DMA REQUEST: SPIKES AUSFILTERN ------------------------------------------ + process(FDC_CLK, nRSTO, DMA_DRQ_REG) + begin + if nRSTO = '0' THEN + DMA_DRQ_REG <= "00"; + elsif rising_edge(FDC_CLK) then + DMA_DRQ_REG(0) <= DMA_DRQQ; + DMA_DRQ_REG(1) <= DMA_DRQ_REG(0) and DMA_DRQQ; + else + DMA_DRQ_REG <= DMA_DRQ_REG; + end if; + END PROCESS; +-- DMA ADRESSE ------------------------------------------------------ + process(MAIN_CLK, nRSTO, DMA_TOP_CS, DMA_TOP, nFB_WR, DMA_ADR_CS) + begin + if nRSTO = '0' THEN + DMA_TOP <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_TOP_CS = '1' or DMA_ADR_CS = '1') then + DMA_TOP <= FB_AD(31 downto 24); + else + DMA_TOP <= DMA_TOP; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_HIGH_CS, DMA_HIGH, nFB_WR, DMA_ADR_CS) + begin + if nRSTO = '0' THEN + DMA_HIGH <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' and (DMA_HIGH_CS = '1' or DMA_ADR_CS = '1') then + DMA_HIGH <= FB_AD(23 downto 16); + else + DMA_HIGH <= DMA_HIGH; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_MID_CS, DMA_MID, nFB_WR) + begin + DMA_MID <= DMA_MID; + if nRSTO = '0' THEN + DMA_MID <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then + if DMA_MID_CS = '1' then + DMA_MID <= FB_AD(23 downto 16); + elsif DMA_ADR_CS = '1' then + DMA_MID <= FB_AD(15 downto 8); + end if; + end if; + END PROCESS; + process(MAIN_CLK, nRSTO, DMA_LOW_CS, DMA_LOW, nFB_WR) + begin + DMA_LOW <= DMA_LOW; + if nRSTO = '0' THEN + DMA_LOW <= x"00"; + elsif rising_edge(MAIN_CLK) and nFB_WR = '0' then + if DMA_LOW_CS = '1'then + DMA_LOW <= FB_AD(23 downto 16); + elsif DMA_ADR_CS = '1' then + DMA_LOW <= FB_AD(7 downto 0); + end if; + end if; + END PROCESS; +-------------------------------------------------------------------------------------------- +DMA_TOP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B0 = '1' else '0'; -- F8608/2 +DMA_HIGH_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C304" and FB_B1 = '1' else '0'; -- F8609/2 +DMA_MID_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C305" and FB_B1 = '1' else '0'; -- F860B/2 +DMA_LOW_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 1) = x"7C306" and FB_B1 = '1' else '0'; -- F860D/2 +FB_AD(31 downto 24) <= DMA_TOP when DMA_TOP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_HIGH when DMA_HIGH_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_MID when DMA_MID_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(23 downto 16) <= DMA_LOW when DMA_LOW_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +-- DIRECTZUGRIFF +DMA_DIRM_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20100" else '0'; -- F002'0100 WORD +DMA_ADR_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20104" else '0'; -- F002'0104 LONG +DMA_BYT_CNT_CS <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20108" else '0'; -- F002'0108 LONG +FB_AD <= DMA_TOP & DMA_HIGH & DMA_MID & DMA_LOW when DMA_ADR_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +FB_AD(31 downto 16) <= DMA_MODUS when DMA_DIRM_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZ"; +FB_AD <= DMA_BYT_CNT when DMA_BYT_CNT_CS = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ"; +-- DMA RW TOGGLE ------------------------------------------ + process(MAIN_CLK, nRSTO, DMA_MODUS_CS, DMA_MODUS, DMA_DIR_OLD) + begin + if nRSTO = '0' THEN + DMA_DIR_OLD <= '0'; + elsif rising_edge(MAIN_CLK) and DMA_MODUS_CS = '0' then + DMA_DIR_OLD <= DMA_MODUS(8); + else + DMA_DIR_OLD <= DMA_DIR_OLD; + end if; + END PROCESS; +CLR_FIFO <= DMA_MODUS(8) xor DMA_DIR_OLD; +-- SCSI ---------------------------------------------------------------------------------- + I_SCSI: WF5380_TOP_SOC + port map( + CLK => FDC_CLK, + RESETn => nRSTO, + ADR => CA2 & CA1 & CA0, + DATA_IN => CD_IN_FDC, + DATA_OUT => SCSI_DOUT, + --DATA_EN : out bit; + -- Bus and DMA controls: + CSn => '1', --SCSI_CSn, ABGESCHALTET + RDn => (not nFDC_WR) or (not SCSI_CS), + WRn => nFDC_WR or (not SCSI_CS), + EOPn => '1', + DACKn => nSCSI_DACK, + DRQ => SCSI_DRQ, + INT => SCSI_INT, +-- READY => + -- SCSI bus: + DB_INn => SCSI_D, + DB_OUTn => DB_OUTn, + DB_EN => DB_EN, + DBP_INn => SCSI_PAR, + DBP_OUTn => DBP_OUTn, + DBP_EN => DBP_EN, -- wenn 1 dann output + RST_INn => nSCSI_RST, + RST_OUTn => RST_OUTn, + RST_EN => RST_EN, + BSY_INn => nSCSI_BUSY, + BSY_OUTn => BSY_OUTn, + BSY_EN => BSY_EN, + SEL_INn => nSCSI_SEL, + SEL_OUTn => SEL_OUTn, + SEL_EN => SEL_EN, + ACK_INn => '1', + ACK_OUTn => nSCSI_ACK, +-- ACK_EN => ACK_EN, + ATN_INn => '1', + ATN_OUTn => nSCSI_ATN, +-- ATN_EN => ATN_EN, + REQ_INn => nSCSI_DRQ, +-- REQ_OUTn => REQ_OUTn, +-- REQ_EN => REQ_EN, + IOn_IN => nSCSI_I_O, +-- IOn_OUT => IOn_OUT, +-- IO_EN => IO_EN, + CDn_IN => nSCSI_C_D, +-- CDn_OUT => CDn_OUT, +-- CD_EN => CD_EN, + MSG_INn => nSCSI_MSG +-- MSG_OUTn => MSG_OUTn, +-- MSG_EN => MSG_EN + ); +-- SCSI ACSI --------------------------------------------------------------- +SCSI_D <= DB_OUTn when DB_EN = '1' else "ZZZZZZZZ"; +SCSI_DIR <= '1'; --'0' when DB_EN = '1' else '1'; --ABGESCHALTET +SCSI_PAR <= DBP_OUTn when DBP_EN = '1' else 'Z'; +nSCSI_RST <= RST_OUTn when RST_EN = '1' else 'Z'; +nSCSI_BUSY <= BSY_OUTn when BSY_EN = '1' else 'Z'; +nSCSI_SEL <= SEL_OUTn when SEL_EN = '1' else 'Z'; +ACSI_DIR <= '0'; +ACSI_D <= "ZZZZZZZZ"; +nACSI_CS <= '1'; +ACSI_A1 <= CA1; +nACSI_RESET <= nRSTO; +nACSI_ACK <= '1'; +---------------------------------------------------------------------------- +-- ROM-PORT TA KOMMT FROM DEFAULT TA = 16 BUSCYCLEN = 500ns +---------------------------------------------------------------------------- +ROM_CS <= '1' when nFB_CS1 = '0' and nFB_WR = '1' and FB_ADR(19 downto 17) = x"5" else '0'; -- FFF A'0000/2'0000 +nROM4 <= '0' when ROM_CS = '1' and FB_ADR(16) = '0' else '1'; +nROM3 <= '0' when ROM_CS = '1' and FB_ADR(16) = '1' else '1'; +---------------------------------------------------------------------------- +-- ACIA KEYBOARD +---------------------------------------------------------------------------- + I_ACIA_KEYBOARD: WF6850IP_TOP_SOC + port map( + CLK => MAIN_CLK, + RESETn => nRSTO, + + CS2n => FB_ADR(2), + CS1 => '1', + CS0 => ACIA_CS_I, + E => ACIA_CS_I, + RWn => nFB_WR, + RS => FB_ADR(1), + + DATA_IN => FB_AD(31 downto 24), + DATA_OUT => DATA_OUT_ACIA_I, +-- DATA_EN => DATA_EN_ACIA_I, + + TXCLK => CLK500k, + RXCLK => CLK500k, + RXDATA => KEYB_RxD, + + CTSn => '0', + DCDn => '0', + + IRQn => IRQ_KEYBDn, + TXDATA => AMKB_TX + --RTSn => -- Not used. + ); +ACIA_CS_I <= '1' when nFB_CS1 = '0'and FB_ADR(19 downto 3) = x"1FF80" else '0'; -- FFC00-FFC07 FFC00/8 +KEYB_RxD <= '1' when AMKB_REG(3) = '1' or PIC_AMKB_RX = '0' else '0'; -- TASTATUR DATEN VOM PIC(PS2) OR NORMAL +FB_AD(31 downto 24) <= DATA_OUT_ACIA_I when ACIA_CS_I = '1' and FB_ADR(2) = '0' and nFB_OE = '0' else "ZZZZZZZZ"; +-- AMKB_TX: SPIKES AUSFILTERN ------------------------------------------ + process(CLK2M, AMKB_RX, AMKB_REG) + begin + if rising_edge(CLK2M) then + IF AMKB_RX = '0' THEN + IF AMKB_REG < 16 THEN + AMKB_REG <= "00000"; + ELSE + AMKB_REG <= AMKB_REG - 1; + END IF; + ELSE + IF AMKB_REG > 15 THEN + AMKB_REG <= "11111"; + ELSE + AMKB_REG <= AMKB_REG + 1; + END IF; + END IF; + ELSE + AMKB_REG <= AMKB_REG; + end if; + END PROCESS; +---------------------------------------------------------------------------- +-- ACIA MIDI +---------------------------------------------------------------------------- + I_ACIA_MIDI: WF6850IP_TOP_SOC + port map( + CLK => MAIN_CLK, + RESETn => nRSTO, + + CS2n => '0', + CS1 => FB_ADR(2), + CS0 => ACIA_CS_I, + E => ACIA_CS_I, + RWn => nFB_WR, + RS => FB_ADR(1), + + DATA_IN => FB_AD(31 downto 24), + DATA_OUT => DATA_OUT_ACIA_II, +-- DATA_EN => DATA_EN_ACIA_II, + + TXCLK => CLK500k, + RXCLK => CLK500k, + RXDATA => MIDI_IN, + CTSn => '0', + DCDn => '0', + + IRQn => IRQ_MIDIn, + TXDATA => MIDI_OUT + --RTSn => -- Not used. + ); +MIDI_TLR <= MIDI_OUT; +MIDI_OLR <= MIDI_OUT; +FB_AD(31 downto 24) <= DATA_OUT_ACIA_II when ACIA_CS_I = '1' and FB_ADR(2) = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +---------------------------------------------------------------------------- +-- MFP +---------------------------------------------------------------------------- + I_MFP: WF68901IP_TOP_SOC + port map( + -- System control: + CLK => MAIN_CLK, + RESETn => nRSTO, + -- Asynchronous bus control: + DSn => not LDS, + CSn => not MFP_CS, + RWn => nFB_WR, + DTACKn => DTACK_OUT_MFPn, + -- Data and Adresses: + RS => FB_ADR(5 downto 1), + DATA_IN => FB_AD(23 downto 16), + DATA_OUT => DATA_OUT_MFP, +-- DATA_EN => DATA_EN_MFP, + GPIP_IN(7) => not DMA_DRQ_Q, + GPIP_IN(6) => not RI, + GPIP_IN(5) => DINTn, + GPIP_IN(4) => IRQ_ACIAn, + GPIP_IN(3) => DSP_INT, + GPIP_IN(2) => not CTS, + GPIP_IN(1) => not DCD, + GPIP_IN(0) => LP_BUSY, + -- GPIP_OUT =>, -- Not used; all GPIPs are direction input. + -- GPIP_EN =>, -- Not used; all GPIPs are direction input. + -- Interrupt control: + IACKn => not MFP_INTACK, + IEIn => '0', + -- IEOn =>, -- Not used. + IRQn => nMFP_INT, + -- Timers and timer control: + XTAL1 => CLK2M4576, + TAI => '0', + TBI => nBLANK, + -- TAO =>, + -- TBO =>, + -- TCO =>, + TDO => TDO, + -- Serial I/O control: + RC => TDO, + TC => TDO, + SI => RxD, + SO => TxD + -- SO_EN => MFP_SO_EN + -- DMA control: + -- RRn =>, + -- TRn => + ); + +MFP_CS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 6) = x"3FE8" else '0'; -- FFA00/40 +MFP_INTACK <= '1' when nFB_CS2 = '0' and FB_ADR(26 downto 0) = x"20000" else '0'; --F002'0000 +LDS <= '1' when MFP_CS = '1' or MFP_INTACK = '1' else '0'; +FB_AD(23 downto 16) <= DATA_OUT_MFP when MFP_CS = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(31 downto 10) <= "0000000000000000000000" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZZZZZZZZZZZZZZZ"; +FB_AD(9 downto 2) <= DATA_OUT_MFP when MFP_INTACK = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +FB_AD(1 downto 0) <= "00" when MFP_INTACK = '1' and nFB_OE = '0' else "ZZ"; +DINTn <= '0' when IDE_INT = '1' AND ACP_CONFIG[28] = '1' else + '0' when FDINT = '1' else + '0' when SCSI_INT = '1' AND ACP_CONFIG[28] = '1' else '1'; +-- TASTATUR UND KEYBOARD INTERRUPT: SPIKES AUSFILTERN ------------------------------------------ + process(MAIN_CLK,nRSTO,IRQ_ACIAn,IRQ_KEYBDn,IRQ_MIDIn) + begin + if nRSTO = '0' THEN + IRQ_ACIAn <= '1'; + elsif rising_edge(MAIN_CLK) then + IRQ_ACIAn <= IRQ_KEYBDn and IRQ_MIDIn; + else + IRQ_ACIAn <= IRQ_ACIAn; + end if; + END PROCESS; +---------------------------------------------------------------------------- +-- Sound +---------------------------------------------------------------------------- + I_SOUND: WF2149IP_TOP_SOC + port map( + SYS_CLK => MAIN_CLK, + RESETn => nRSTO, + + WAV_CLK => CLK2M, + SELn => '1', + + BDIR => SNDIR_I, + BC2 => '1', + BC1 => SNDCS_I, + + A9n => '0', + A8 => '1', + DA_IN => FB_AD(31 downto 24), + DA_OUT => DA_OUT_X, + + IO_A_IN => x"00", -- All port pins are dedicated outputs. + IO_A_OUT(7) => nnIDE_RES, + IO_A_OUT(6) => LP_DIR_X, + IO_A_OUT(5) => LP_STR, + IO_A_OUT(4) => DTR, + IO_A_OUT(3) => RTS, +-- IO_A_OUT(2) => FDD_D1SEL, + IO_A_OUT(1) => DSA_D, + IO_A_OUT(0) => nSDSEL, + -- IO_A_EN =>, -- Not required. + IO_B_IN => LP_D, + IO_B_OUT => LP_D_X, + -- IO_B_EN => IO_B_EN, + + OUT_A => YM_QA, + OUT_B => YM_QB, + OUT_C => YM_QC + ); + +SNDCS <= '1' when nFB_CS1 = '0' and FB_ADR(19 downto 2) = x"3E200" else '0'; -- 8800-8803 F8800/4 +SNDCS_I <= '1' when SNDCS = '1' and FB_ADR (1 downto 1) = "0" else '0'; +SNDIR_I <= '1' when SNDCS = '1' and nFB_WR = '0' else '0'; +FB_AD(31 downto 24) <= DA_OUT_X when SNDCS_I = '1' and nFB_OE = '0' else "ZZZZZZZZ"; +LP_D <= LP_D_X when LP_DIR_X = '0' else "ZZZZZZZZ"; +LP_DIR <= LP_DIR_X; + +END FalconIO_SDCard_IDE_CF_architecture; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd new file mode 100644 index 0000000..edef447 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd @@ -0,0 +1,406 @@ +---------------------------------------------------------------------- +---- ---- +---- Atari Coldfire IP Core ---- +---- ---- +---- This file is part of the Atari Coldfire project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- 1.0 Initial Release, 20090925. +-- + +library ieee; +use ieee.std_logic_1164.all; + +package FalconIO_SDCard_IDE_CF_PKG is + component WF25915IP_TOP_V1_SOC -- GLUE. + port ( + -- Clock system: + GL_CLK : in std_logic; -- Originally 8MHz. + GL_CLK_016 : in std_logic; -- One sixteenth of GL_CLK. + + -- Core address select: + GL_ROMSEL_FC_E0n : in std_logic; + EN_RAM_14MB : in std_logic; + -- Adress decoder outputs: + GL_ROM_6n : out std_logic; -- STE. + GL_ROM_5n : out std_logic; -- STE. + GL_ROM_4n : out std_logic; -- ST. + GL_ROM_3n : out std_logic; -- ST. + GL_ROM_2n : out std_logic; + GL_ROM_1n : out std_logic; + GL_ROM_0n : out std_logic; + + GL_ACIACS : out std_logic; + GL_MFPCSn : out std_logic; + GL_SNDCSn : out std_logic; + GL_FCSn : out std_logic; + + GL_STE_SNDCS : out std_logic; -- STE: Sound chip select. + GL_STE_SNDIR : out std_logic; -- STE: Data flow direction control. + + GL_STE_RTCCSn : out std_logic; --STE only. + GL_STE_RTC_WRn : out std_logic; --STE only. + GL_STE_RTC_RDn : out std_logic; --STE only. + + -- 6800 peripheral control, + GL_VPAn : out std_logic; + GL_VMAn : in std_logic; + + GL_DMA_SYNC : in std_logic; + GL_DEVn : out std_logic; + GL_RAMn : out std_logic; + GL_DMAn : out std_logic; + + -- Interrupt system: + -- Comment out GL_AVECn for CPUs which do not provide the VMAn signal. + GL_AVECn : out std_logic; + GL_STE_FDINT : in std_logic; -- Floppy disk interrupt; STE only. + GL_STE_HDINTn : in std_logic; -- Hard disk interrupt; STE only. + GL_MFPINTn : in std_logic; -- ST. + GL_STE_EINT3n : in std_logic; --STE only. + GL_STE_EINT5n : in std_logic; --STE only. + GL_STE_EINT7n : in std_logic; --STE only. + GL_STE_DINTn : out std_logic; -- Disk interrupt (floppy or hard disk); STE only. + GL_IACKn : out std_logic; -- ST. + GL_STE_IPL2n : out std_logic; --STE only. + GL_STE_IPL1n : out std_logic; --STE only. + GL_STE_IPL0n : out std_logic; --STE only. + + -- Video timing: + GL_BLANKn : out std_logic; + GL_DE : out std_logic; + GL_MULTISYNC : in std_logic_vector(3 downto 2); + GL_VIDEO_HIMODE : out std_logic; + GL_HSYNC_INn : in std_logic; + GL_HSYNC_OUTn : out std_logic; + GL_VSYNC_INn : in std_logic; + GL_VSYNC_OUTn : out std_logic; + GL_SYNC_OUT_EN : out std_logic; + + -- Bus arstd_logicration control: + GL_RDY_INn : in std_logic; + GL_RDY_OUTn : out std_logic; + GL_BRn : out std_logic; + GL_BGIn : in std_logic; + GL_BGOn : out std_logic; + GL_BGACK_INn : in std_logic; + GL_BGACK_OUTn : out std_logic; + + -- Adress and data bus: + GL_ADDRESS : in std_logic_vector(23 downto 1); + -- ST: put the data bus to 1 downto 0. + -- STE: put the data out bus to 15 downto 0. + GL_DATA_IN : in std_logic_vector(7 downto 0); + GL_DATA_OUT : out std_logic_vector(15 downto 0); + GL_DATA_EN : out std_logic; + + -- Asynchronous bus control: + GL_RWn_IN : in std_logic; + GL_RWn_OUT : out std_logic; + GL_AS_INn : in std_logic; + GL_AS_OUTn : out std_logic; + GL_UDS_INn : in std_logic; + GL_UDS_OUTn : out std_logic; + GL_LDS_INn : in std_logic; + GL_LDS_OUTn : out std_logic; + GL_DTACK_INn : in std_logic; + GL_DTACK_OUTn : out std_logic; + GL_CTRL_EN : out std_logic; + + -- System control: + GL_RESETn : in std_logic; + GL_BERRn : out std_logic; + + -- Processor function codes: + GL_FC : in std_logic_vector(2 downto 0); + + -- STE enhancements: + GL_STE_FDDS : out std_logic; -- Floppy type select (HD or DD). + GL_STE_FCCLK : out std_logic; -- Floppy controller clock select. + GL_STE_JOY_RHn : out std_logic; -- Read only FF9202 high byte. + GL_STE_JOY_RLn : out std_logic; -- Read only FF9202 low byte. + GL_STE_JOY_WL : out std_logic; -- Write only FF9202 low byte. + GL_STE_JOY_WEn : out std_logic; -- Write only FF9202 output enable. + GL_STE_BUTTONn : out std_logic; -- Read only FF9000 low byte. + GL_STE_PAD0Xn : in std_logic; -- Counter input for the Paddle 0X. + GL_STE_PAD0Yn : in std_logic; -- Counter input for the Paddle 0Y. + GL_STE_PAD1Xn : in std_logic; -- Counter input for the Paddle 1X. + GL_STE_PAD1Yn : in std_logic; -- Counter input for the Paddle 1Y. + GL_STE_PADRSTn : out std_logic; -- Paddle monoflops reset. + GL_STE_PENn : in std_logic; -- Input of the light pen. + GL_STE_SCCn : out std_logic; -- Select signal for the STE or TT SCC chip. + GL_STE_CPROGn : out std_logic -- Select signal for the STE's cache processor. + ); + end component WF25915IP_TOP_V1_SOC; + + component WF5380_TOP_SOC + port ( + CLK : in std_logic; + RESETn : in std_logic; + ADR : in std_logic_vector(2 downto 0); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + CSn : in std_logic; + RDn : in std_logic; + WRn : in std_logic; + EOPn : in std_logic; + DACKn : in std_logic; + DRQ : out std_logic; + INT : out std_logic; + READY : out std_logic; + DB_INn : in std_logic_vector(7 downto 0); + DB_OUTn : out std_logic_vector(7 downto 0); + DB_EN : out std_logic; + DBP_INn : in std_logic; + DBP_OUTn : out std_logic; + DBP_EN : out std_logic; + RST_INn : in std_logic; + RST_OUTn : out std_logic; + RST_EN : out std_logic; + BSY_INn : in std_logic; + BSY_OUTn : out std_logic; + BSY_EN : out std_logic; + SEL_INn : in std_logic; + SEL_OUTn : out std_logic; + SEL_EN : out std_logic; + ACK_INn : in std_logic; + ACK_OUTn : out std_logic; + ACK_EN : out std_logic; + ATN_INn : in std_logic; + ATN_OUTn : out std_logic; + ATN_EN : out std_logic; + REQ_INn : in std_logic; + REQ_OUTn : out std_logic; + REQ_EN : out std_logic; + IOn_IN : in std_logic; + IOn_OUT : out std_logic; + IO_EN : out std_logic; + CDn_IN : in std_logic; + CDn_OUT : out std_logic; + CD_EN : out std_logic; + MSG_INn : in std_logic; + MSG_OUTn : out std_logic; + MSG_EN : out std_logic + ); + end component WF5380_TOP_SOC; + + component WF1772IP_TOP_SOC -- FDC. + port ( + CLK : in std_logic; -- 16MHz clock! + RESETn : in std_logic; + CSn : in std_logic; + RWn : in std_logic; + A1, A0 : in std_logic; + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + RDn : in std_logic; + TR00n : in std_logic; + IPn : in std_logic; + WPRTn : in std_logic; + DDEn : in std_logic; + HDTYPE : in std_logic; -- '0' = DD disks, '1' = HD disks. + MO : out std_logic; + WG : out std_logic; + WD : out std_logic; + STEP : out std_logic; + DIRC : out std_logic; + DRQ : out std_logic; + INTRQ : out std_logic + ); + end component WF1772IP_TOP_SOC; + + component WF68901IP_TOP_SOC -- MFP. + port ( -- System control: + CLK : in std_logic; + RESETn : in std_logic; + + -- Asynchronous bus control: + DSn : in std_logic; + CSn : in std_logic; + RWn : in std_logic; + DTACKn : out std_logic; + + -- Data and Adresses: + RS : in std_logic_vector(5 downto 1); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + GPIP_IN : in std_logic_vector(7 downto 0); + GPIP_OUT : out std_logic_vector(7 downto 0); + GPIP_EN : out std_logic_vector(7 downto 0); + + -- Interrupt control: + IACKn : in std_logic; + IEIn : in std_logic; + IEOn : out std_logic; + IRQn : out std_logic; + + -- Timers and timer control: + XTAL1 : in std_logic; -- Use an oszillator instead of a quartz. + TAI : in std_logic; + TBI : in std_logic; + TAO : out std_logic; + TBO : out std_logic; + TCO : out std_logic; + TDO : out std_logic; + + -- Serial I/O control: + RC : in std_logic; + TC : in std_logic; + SI : in std_logic; + SO : out std_logic; + SO_EN : out std_logic; + + -- DMA control: + RRn : out std_logic; + TRn : out std_logic + ); + end component WF68901IP_TOP_SOC; + + component WF2149IP_TOP_SOC -- Sound. + port( + + SYS_CLK : in std_logic; -- Read the inforation in the header! + RESETn : in std_logic; + + WAV_CLK : in std_logic; -- Read the inforation in the header! + SELn : in std_logic; + + BDIR : in std_logic; + BC2, BC1 : in std_logic; + + A9n, A8 : in std_logic; + DA_IN : in std_logic_vector(7 downto 0); + DA_OUT : out std_logic_vector(7 downto 0); + DA_EN : out std_logic; + + IO_A_IN : in std_logic_vector(7 downto 0); + IO_A_OUT : out std_logic_vector(7 downto 0); + IO_A_EN : out std_logic; + IO_B_IN : in std_logic_vector(7 downto 0); + IO_B_OUT : out std_logic_vector(7 downto 0); + IO_B_EN : out std_logic; + + OUT_A : out std_logic; -- Analog (PWM) outputs. + OUT_B : out std_logic; + OUT_C : out std_logic + ); + end component WF2149IP_TOP_SOC; + + component WF6850IP_TOP_SOC -- ACIA. + port ( + CLK : in std_logic; + RESETn : in std_logic; + + CS2n, CS1, CS0 : in std_logic; + E : in std_logic; + RWn : in std_logic; + RS : in std_logic; + + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + + TXCLK : in std_logic; + RXCLK : in std_logic; + RXDATA : in std_logic; + CTSn : in std_logic; + DCDn : in std_logic; + + IRQn : out std_logic; + TXDATA : out std_logic; + RTSn : out std_logic + ); + end component WF6850IP_TOP_SOC; + + component WF_SD_CARD + port ( + RESETn : in std_logic; + CLK : in std_logic; + ACSI_A1 : in std_logic; + ACSI_CSn : in std_logic; + ACSI_ACKn : in std_logic; + ACSI_INTn : out std_logic; + ACSI_DRQn : out std_logic; + ACSI_D_IN : in std_logic_vector(7 downto 0); + ACSI_D_OUT : out std_logic_vector(7 downto 0); + ACSI_D_EN : out std_logic; + MC_DO : in std_logic; + MC_PIO_DMAn : in std_logic; + MC_RWn : in std_logic; + MC_CLR_CMD : in std_logic; + MC_DONE : out std_logic; + MC_GOT_CMD : out std_logic; + MC_D_IN : in std_logic_vector(7 downto 0); + MC_D_OUT : out std_logic_vector(7 downto 0); + MC_D_EN : out std_logic + ); + end component WF_SD_CARD; + + component dcfifo0 + PORT ( + aclr : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); + end component dcfifo0; + + component dcfifo1 + PORT ( + aclr : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + rdusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); + end component; + + +end FalconIO_SDCard_IDE_CF_PKG; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak new file mode 100644 index 0000000..4f42cf2 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd.bak @@ -0,0 +1,406 @@ +---------------------------------------------------------------------- +---- ---- +---- Atari Coldfire IP Core ---- +---- ---- +---- This file is part of the Atari Coldfire project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- 1.0 Initial Release, 20090925. +-- + +library ieee; +use ieee.std_logic_1164.all; + +package FalconIO_SDCard_IDE_CF_PKG is + component WF25915IP_TOP_V1_SOC -- GLUE. + port ( + -- Clock system: + GL_CLK : in std_logic; -- Originally 8MHz. + GL_CLK_016 : in std_logic; -- One sixteenth of GL_CLK. + + -- Core address select: + GL_ROMSEL_FC_E0n : in std_logic; + EN_RAM_14MB : in std_logic; + -- Adress decoder outputs: + GL_ROM_6n : out std_logic; -- STE. + GL_ROM_5n : out std_logic; -- STE. + GL_ROM_4n : out std_logic; -- ST. + GL_ROM_3n : out std_logic; -- ST. + GL_ROM_2n : out std_logic; + GL_ROM_1n : out std_logic; + GL_ROM_0n : out std_logic; + + GL_ACIACS : out std_logic; + GL_MFPCSn : out std_logic; + GL_SNDCSn : out std_logic; + GL_FCSn : out std_logic; + + GL_STE_SNDCS : out std_logic; -- STE: Sound chip select. + GL_STE_SNDIR : out std_logic; -- STE: Data flow direction control. + + GL_STE_RTCCSn : out std_logic; --STE only. + GL_STE_RTC_WRn : out std_logic; --STE only. + GL_STE_RTC_RDn : out std_logic; --STE only. + + -- 6800 peripheral control, + GL_VPAn : out std_logic; + GL_VMAn : in std_logic; + + GL_DMA_SYNC : in std_logic; + GL_DEVn : out std_logic; + GL_RAMn : out std_logic; + GL_DMAn : out std_logic; + + -- Interrupt system: + -- Comment out GL_AVECn for CPUs which do not provide the VMAn signal. + GL_AVECn : out std_logic; + GL_STE_FDINT : in std_logic; -- Floppy disk interrupt; STE only. + GL_STE_HDINTn : in std_logic; -- Hard disk interrupt; STE only. + GL_MFPINTn : in std_logic; -- ST. + GL_STE_EINT3n : in std_logic; --STE only. + GL_STE_EINT5n : in std_logic; --STE only. + GL_STE_EINT7n : in std_logic; --STE only. + GL_STE_DINTn : out std_logic; -- Disk interrupt (floppy or hard disk); STE only. + GL_IACKn : out std_logic; -- ST. + GL_STE_IPL2n : out std_logic; --STE only. + GL_STE_IPL1n : out std_logic; --STE only. + GL_STE_IPL0n : out std_logic; --STE only. + + -- Video timing: + GL_BLANKn : out std_logic; + GL_DE : out std_logic; + GL_MULTISYNC : in std_logic_vector(3 downto 2); + GL_VIDEO_HIMODE : out std_logic; + GL_HSYNC_INn : in std_logic; + GL_HSYNC_OUTn : out std_logic; + GL_VSYNC_INn : in std_logic; + GL_VSYNC_OUTn : out std_logic; + GL_SYNC_OUT_EN : out std_logic; + + -- Bus arstd_logicration control: + GL_RDY_INn : in std_logic; + GL_RDY_OUTn : out std_logic; + GL_BRn : out std_logic; + GL_BGIn : in std_logic; + GL_BGOn : out std_logic; + GL_BGACK_INn : in std_logic; + GL_BGACK_OUTn : out std_logic; + + -- Adress and data bus: + GL_ADDRESS : in std_logic_vector(23 downto 1); + -- ST: put the data bus to 1 downto 0. + -- STE: put the data out bus to 15 downto 0. + GL_DATA_IN : in std_logic_vector(7 downto 0); + GL_DATA_OUT : out std_logic_vector(15 downto 0); + GL_DATA_EN : out std_logic; + + -- Asynchronous bus control: + GL_RWn_IN : in std_logic; + GL_RWn_OUT : out std_logic; + GL_AS_INn : in std_logic; + GL_AS_OUTn : out std_logic; + GL_UDS_INn : in std_logic; + GL_UDS_OUTn : out std_logic; + GL_LDS_INn : in std_logic; + GL_LDS_OUTn : out std_logic; + GL_DTACK_INn : in std_logic; + GL_DTACK_OUTn : out std_logic; + GL_CTRL_EN : out std_logic; + + -- System control: + GL_RESETn : in std_logic; + GL_BERRn : out std_logic; + + -- Processor function codes: + GL_FC : in std_logic_vector(2 downto 0); + + -- STE enhancements: + GL_STE_FDDS : out std_logic; -- Floppy type select (HD or DD). + GL_STE_FCCLK : out std_logic; -- Floppy controller clock select. + GL_STE_JOY_RHn : out std_logic; -- Read only FF9202 high byte. + GL_STE_JOY_RLn : out std_logic; -- Read only FF9202 low byte. + GL_STE_JOY_WL : out std_logic; -- Write only FF9202 low byte. + GL_STE_JOY_WEn : out std_logic; -- Write only FF9202 output enable. + GL_STE_BUTTONn : out std_logic; -- Read only FF9000 low byte. + GL_STE_PAD0Xn : in std_logic; -- Counter input for the Paddle 0X. + GL_STE_PAD0Yn : in std_logic; -- Counter input for the Paddle 0Y. + GL_STE_PAD1Xn : in std_logic; -- Counter input for the Paddle 1X. + GL_STE_PAD1Yn : in std_logic; -- Counter input for the Paddle 1Y. + GL_STE_PADRSTn : out std_logic; -- Paddle monoflops reset. + GL_STE_PENn : in std_logic; -- Input of the light pen. + GL_STE_SCCn : out std_logic; -- Select signal for the STE or TT SCC chip. + GL_STE_CPROGn : out std_logic -- Select signal for the STE's cache processor. + ); + end component WF25915IP_TOP_V1_SOC; + + component WF5380_TOP_SOC + port ( + CLK : in std_logic; + RESETn : in std_logic; + ADR : in std_logic_vector(2 downto 0); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + CSn : in std_logic; + RDn : in std_logic; + WRn : in std_logic; + EOPn : in std_logic; + DACKn : in std_logic; + DRQ : out std_logic; + INT : out std_logic; + READY : out std_logic; + DB_INn : in std_logic_vector(7 downto 0); + DB_OUTn : out std_logic_vector(7 downto 0); + DB_EN : out std_logic; + DBP_INn : in std_logic; + DBP_OUTn : out std_logic; + DBP_EN : out std_logic; + RST_INn : in std_logic; + RST_OUTn : out std_logic; + RST_EN : out std_logic; + BSY_INn : in std_logic; + BSY_OUTn : out std_logic; + BSY_EN : out std_logic; + SEL_INn : in std_logic; + SEL_OUTn : out std_logic; + SEL_EN : out std_logic; + ACK_INn : in std_logic; + ACK_OUTn : out std_logic; + ACK_EN : out std_logic; + ATN_INn : in std_logic; + ATN_OUTn : out std_logic; + ATN_EN : out std_logic; + REQ_INn : in std_logic; + REQ_OUTn : out std_logic; + REQ_EN : out std_logic; + IOn_IN : in std_logic; + IOn_OUT : out std_logic; + IO_EN : out std_logic; + CDn_IN : in std_logic; + CDn_OUT : out std_logic; + CD_EN : out std_logic; + MSG_INn : in std_logic; + MSG_OUTn : out std_logic; + MSG_EN : out std_logic + ); + end component WF5380_TOP_SOC; + + component WF1772IP_TOP_SOC -- FDC. + port ( + CLK : in std_logic; -- 16MHz clock! + RESETn : in std_logic; + CSn : in std_logic; + RWn : in std_logic; + A1, A0 : in std_logic; + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + RDn : in std_logic; + TR00n : in std_logic; + IPn : in std_logic; + WPRTn : in std_logic; + DDEn : in std_logic; + HDTYPE : in std_logic; -- '0' = DD disks, '1' = HD disks. + MO : out std_logic; + WG : out std_logic; + WD : out std_logic; + STEP : out std_logic; + DIRC : out std_logic; + DRQ : out std_logic; + INTRQ : out std_logic + ); + end component WF1772IP_TOP_SOC; + + component WF68901IP_TOP_SOC -- MFP. + port ( -- System control: + CLK : in std_logic; + RESETn : in std_logic; + + -- Asynchronous bus control: + DSn : in std_logic; + CSn : in std_logic; + RWn : in std_logic; + DTACKn : out std_logic; + + -- Data and Adresses: + RS : in std_logic_vector(5 downto 1); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + GPIP_IN : in std_logic_vector(7 downto 0); + GPIP_OUT : out std_logic_vector(7 downto 0); + GPIP_EN : out std_logic_vector(7 downto 0); + + -- Interrupt control: + IACKn : in std_logic; + IEIn : in std_logic; + IEOn : out std_logic; + IRQn : out std_logic; + + -- Timers and timer control: + XTAL1 : in std_logic; -- Use an oszillator instead of a quartz. + TAI : in std_logic; + TBI : in std_logic; + TAO : out std_logic; + TBO : out std_logic; + TCO : out std_logic; + TDO : out std_logic; + + -- Serial I/O control: + RC : in std_logic; + TC : in std_logic; + SI : in std_logic; + SO : out std_logic; + SO_EN : out std_logic; + + -- DMA control: + RRn : out std_logic; + TRn : out std_logic + ); + end component WF68901IP_TOP_SOC; + + component WF2149IP_TOP_SOC -- Sound. + port( + + SYS_CLK : in std_logic; -- Read the inforation in the header! + RESETn : in std_logic; + + WAV_CLK : in std_logic; -- Read the inforation in the header! + SELn : in std_logic; + + BDIR : in std_logic; + BC2, BC1 : in std_logic; + + A9n, A8 : in std_logic; + DA_IN : in std_logic_vector(7 downto 0); + DA_OUT : out std_logic_vector(7 downto 0); + DA_EN : out std_logic; + + IO_A_IN : in std_logic_vector(7 downto 0); + IO_A_OUT : out std_logic_vector(7 downto 0); + IO_A_EN : out std_logic; + IO_B_IN : in std_logic_vector(7 downto 0); + IO_B_OUT : out std_logic_vector(7 downto 0); + IO_B_EN : out std_logic; + + OUT_A : out std_logic; -- Analog (PWM) outputs. + OUT_B : out std_logic; + OUT_C : out std_logic + ); + end component WF2149IP_TOP_SOC; + + component WF6850IP_TOP_SOC -- ACIA. + port ( + CLK : in std_logic; + RESETn : in std_logic; + + CS2n, CS1, CS0 : in std_logic; + E : in std_logic; + RWn : in std_logic; + RS : in std_logic; + + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out std_logic; + + TXCLK : in std_logic; + RXCLK : in std_logic; + RXDATA : in std_logic; + CTSn : in std_logic; + DCDn : in std_logic; + + IRQn : out std_logic; + TXDATA : out std_logic; + RTSn : out std_logic + ); + end component WF6850IP_TOP_SOC; + + component WF_SD_CARD + port ( + RESETn : in std_logic; + CLK : in std_logic; + ACSI_A1 : in std_logic; + ACSI_CSn : in std_logic; + ACSI_ACKn : in std_logic; + ACSI_INTn : out std_logic; + ACSI_DRQn : out std_logic; + ACSI_D_IN : in std_logic_vector(7 downto 0); + ACSI_D_OUT : out std_logic_vector(7 downto 0); + ACSI_D_EN : out std_logic; + MC_DO : in std_logic; + MC_PIO_DMAn : in std_logic; + MC_RWn : in std_logic; + MC_CLR_CMD : in std_logic; + MC_DONE : out std_logic; + MC_GOT_CMD : out std_logic; + MC_D_IN : in std_logic_vector(7 downto 0); + MC_D_OUT : out std_logic_vector(7 downto 0); + MC_D_EN : out std_logic + ); + end component WF_SD_CARD; + + component dcfifo0 + PORT ( + aclr : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + end component dcfifo0; + + component dcfifo1 + PORT ( + aclr : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + rdusedw : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + end component; + + +end FalconIO_SDCard_IDE_CF_PKG; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_control.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_control.vhd new file mode 100644 index 0000000..4453332 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_control.vhd @@ -0,0 +1,631 @@ +---------------------------------------------------------------------- +---- ---- +---- WF5380 IP Core ---- +---- ---- +---- Description: ---- +---- This model provides an asynchronous SCSI interface compa- ---- +---- tible to the DP5380 from National Semiconductor and others. ---- +---- ---- +---- This file is the 5380's system controller. ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K9A 2009/06/20 WF +-- Initial Release. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF5380_CONTROL is + port ( + -- System controls: + CLK : in bit; + RESETn : in bit; -- System reset. + + -- System controls: + BSY_INn : in bit; -- SCSI BSY_INn bit. + BSY_OUTn : out bit; -- SCSI BSY_INn bit. + DATA_EN : out bit; -- Enable the SCSI data lines. + SEL_INn : in bit; -- SCSI SEL_INn bit. + ARB_EN : in bit; -- Arbitration enable. + BSY_DISn : in bit; -- BSY monitoring enable. + RSTn : in bit; -- SCSI reset. + + ARB : out bit; -- Arbitration flag. + AIP : out bit; -- Arbitration in progress flag. + LA : out bit; -- Lost arbitration flag. + + ACK_INn : in bit; + ACK_OUTn : out bit; + REQ_INn : in bit; + REQ_OUTn : out bit; + + DACKn : in bit; -- Data acknowledge. + READY : out bit; + DRQ : out bit; -- Data request. + + TARG : in bit; -- Target mode indicator. + BLK : in bit; -- Block mode indicator. + PINT_EN : in bit; -- Parity interrupt enable. + SPER : in bit; -- Parity error. + SER_ID : in bit; -- SER matches ODR bits. + RPI : in bit; -- Reset interrupts. + DMA_EN : in bit; -- DMA mode enable. + SDS : in bit; -- Start DMA send, write only. + SDT : in bit; -- Start DMA target receive, write only. + SDI : in bit; -- Start DMA initiator receive, write only. + EOP_EN : in bit; -- EOP interrupt enable. + EOPn : in bit; -- End of process indicator. + PHSM : in bit; -- Phase match flag. + + INT : out bit; -- Interrupt. + IDR_WR : out bit; -- Write input data register during DMA. + ODR_WR : out bit; -- Write output data register, during DMA. + CHK_PAR : out bit; -- Check Parity during DMA operation. + BSY_ERR : out bit; -- Busy monitoring error. + DMA_SND : out bit; -- Indicates direction of target DMA. + DMA_ACTIVE : out bit -- DMA is active. + ); +end entity WF5380_CONTROL; + +architecture BEHAVIOUR of WF5380_CONTROL is +type CTRL_STATES is (IDLE, WAIT_800ns, WAIT_2200ns, DMA_SEND, DMA_TARG_RCV, DMA_INIT_RCV); +type DMA_STATES is (IDLE, DMA_STEP_1, DMA_STEP_2, DMA_STEP_3, DMA_STEP_4); +signal CTRL_STATE : CTRL_STATES; +signal NEXT_CTRL_STATE : CTRL_STATES; +signal DMA_STATE : DMA_STATES; +signal NEXT_DMA_STATE : DMA_STATES; +signal BUS_FREE : bit; +signal DELAY_800ns : boolean; +signal DELAY_2200ns : boolean; +signal DMA_ACTIVE_I : bit; +signal EOP_In : bit; +begin + IN_BUFFER: process + -- This buffer shall prevent some signals against + -- setup hold effects and thus the state machine + -- against unpredictable behaviour. + begin + wait until CLK = '1' and CLK' event; + EOP_In <= EOPn; + end process IN_BUFFER; + + STATE_REGISTERS: process(RESETn, CLK) + -- This is the controller's state machine register. + variable BSY_LOCK : boolean; + begin + if RESETn = '0' then + CTRL_STATE <= IDLE; + DMA_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if RSTn = '0' then -- SCSI reset. + CTRL_STATE <= IDLE; + DMA_STATE <= IDLE; + else + CTRL_STATE <= NEXT_CTRL_STATE; + DMA_STATE <= NEXT_DMA_STATE; + end if; + -- + if DMA_EN = '0' then + DMA_STATE <= IDLE; + end if; + end if; + end process STATE_REGISTERS; + + CTRL_DECODER: process(CTRL_STATE, ARB_EN, BUS_FREE, DELAY_800ns, SEL_INn, DMA_ACTIVE_I, SDS, SDT, SDI) + -- This is the controller's state machine decoder. + variable BSY_LOCK : boolean; + begin + -- Defaults. + DMA_SND <= '0'; + -- + case CTRL_STATE is + when IDLE => + if ARB_EN = '1' and BUS_FREE = '1' then + NEXT_CTRL_STATE <= WAIT_800ns; + else + NEXT_CTRL_STATE <= IDLE; + end if; + when WAIT_800ns => + if DELAY_800ns = true then + NEXT_CTRL_STATE <= WAIT_2200ns; + else + NEXT_CTRL_STATE <= WAIT_800ns; + end if; + when WAIT_2200ns => + -- In this state the delay is provided by the + -- microprocessor and is at least 2.2us. The + -- delay is released by deasserting SELn. + if SEL_INn = '1' and SDS = '1' then + NEXT_CTRL_STATE <= DMA_SEND; + elsif SEL_INn = '1' and SDT = '1' then + NEXT_CTRL_STATE <= DMA_TARG_RCV; + elsif SEL_INn = '1' and SDI = '1' then + NEXT_CTRL_STATE <= DMA_INIT_RCV; + else + NEXT_CTRL_STATE <= WAIT_2200ns; + end if; + when DMA_SEND => + if DMA_ACTIVE_I = '0' then + NEXT_CTRL_STATE <= IDLE; + else + NEXT_CTRL_STATE <= DMA_SEND; + end if; + -- + DMA_SND <= '1'; + when DMA_TARG_RCV => + if DMA_ACTIVE_I = '0' then + NEXT_CTRL_STATE <= IDLE; + else + NEXT_CTRL_STATE <= DMA_TARG_RCV; + end if; + when DMA_INIT_RCV => + if DMA_ACTIVE_I = '0' then + NEXT_CTRL_STATE <= IDLE; + else + NEXT_CTRL_STATE <= DMA_INIT_RCV; + end if; + end case; + end process CTRL_DECODER; + + DMA_DECODER: process(CTRL_STATE, DMA_STATE, TARG, BLK, DACKn, REQ_INn, ACK_INn) + -- This is the DMA state machine decoder. + begin + -- Defaults: + IDR_WR <= '0'; + ODR_WR <= '0'; + CHK_PAR <= '0'; + -- + case DMA_STATE is + when IDLE => + if CTRL_STATE = DMA_SEND then + NEXT_DMA_STATE <= DMA_STEP_1; + elsif CTRL_STATE = DMA_INIT_RCV then + NEXT_DMA_STATE <= DMA_STEP_1; + elsif CTRL_STATE = DMA_TARG_RCV then + NEXT_DMA_STATE <= DMA_STEP_1; + else + NEXT_DMA_STATE <= IDLE; + end if; + when DMA_STEP_1 => + -- Initiator modes: + if CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for DACKn asserted. + ODR_WR <= '1'; + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for DACKn asserted. + ODR_WR <= '1'; + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '0' and REQ_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for REQn asserted. + IDR_WR <= '1'; + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '1' and REQ_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for REQn asserted. + IDR_WR <= '1'; + -- Target modes: + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for DACKn asserted. + ODR_WR <= '1'; + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for DACKn asserted. + ODR_WR <= '1'; + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '0' and ACK_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for ACKn asserted. + IDR_WR <= '1'; + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '1' and ACK_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_2; -- Wait for ACKn asserted. + IDR_WR <= '1'; + else + NEXT_DMA_STATE <= DMA_STEP_1; + end if; + when DMA_STEP_2 => + -- Initiator modes: + if CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for DACKn deasserted. + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for DACKn deasserted. + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '0' and REQ_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for REQn deasserted. + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '1' and REQ_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for REQn deasserted. + -- Target modes: + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for DACKn deasserted. + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for DACKn deasserted. + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '0' and ACK_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for ACKn deasserted. + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '1' and ACK_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_3; -- Wait for ACKn deasserted. + else + NEXT_DMA_STATE <= DMA_STEP_2; + end if; + when DMA_STEP_3 => + -- Initiator modes: + if CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' and REQ_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait REQn asserted. + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and REQ_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait REQn asserted. + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '0' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait DACKn asserted. + CHK_PAR <= '1'; + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '1' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait DACKn asserted. + CHK_PAR <= '1'; + -- Target modes: + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' and ACK_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait ACKn asserted. + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '1' and ACK_INn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait ACKn asserted. + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '0' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait DACKn asserted. + CHK_PAR <= '1'; + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '1' and DACKn = '0' then + NEXT_DMA_STATE <= DMA_STEP_4; -- Wait DACKn asserted. + CHK_PAR <= '1'; + else + NEXT_DMA_STATE <= DMA_STEP_3; + end if; + when DMA_STEP_4 => + -- Initiator modes: + if CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' and REQ_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait REQn deasserted. + elsif CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and REQ_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait REQn deasserted. + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '0' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait DACKn deasserted. + elsif CTRL_STATE = DMA_INIT_RCV and BLK = '1' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait DACKn deasserted. + -- Target modes: + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' and ACK_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait ACKn deasserted. + elsif CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '1' and ACK_INn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait ACKn deasserted. + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '0' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait DACKn deasserted. + elsif CTRL_STATE = DMA_TARG_RCV and BLK = '1' and DACKn = '1' then + NEXT_DMA_STATE <= DMA_STEP_1; -- Wait DACKn deasserted. + else + NEXT_DMA_STATE <= DMA_STEP_4; + end if; + end case; + end process DMA_DECODER; + + P_REQn: process(DMA_STATE, CTRL_STATE, TARG, BLK) + -- This logic controls the REQn output in target mode. + begin + if DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_TARG_RCV and BLK = '0' then + REQ_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_TARG_RCV and BLK = '1' then + REQ_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' then + REQ_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '1' then + REQ_OUTn <= '0'; + else + REQ_OUTn <= '1'; + end if; + end process P_REQn; + + P_ACKn: process(DMA_STATE, CTRL_STATE, TARG, BLK) + -- This logic controls the ACKn output in initiator mode. + begin + if DMA_STATE = DMA_STEP_2 and CTRL_STATE = DMA_INIT_RCV and BLK = '0' then + ACK_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_2 and CTRL_STATE = DMA_INIT_RCV and BLK = '1' then + ACK_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_4 and CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' then + ACK_OUTn <= '0'; + elsif DMA_STATE = DMA_STEP_4 and CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' then + ACK_OUTn <= '0'; + else + ACK_OUTn <= '1'; + end if; + end process P_ACKn; + + P_READY: process(DMA_STATE, CTRL_STATE, TARG, BLK) + -- This logic controls the READY output in initiator and target block mode. + begin + if DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '1' then + READY <= '1'; + elsif DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_TARG_RCV and BLK = '1' then + READY <= '1'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' then + READY <= '1'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_INIT_RCV and BLK = '1' then + READY <= '1'; + else + READY <= '0'; + end if; + end process P_READY; + + P_DRQ: process(RESETn, CLK) + -- This flip flop controls the DRQ flag during all initiator and all target modes + -- for both block mode and non block mode operation. + variable LOCK : boolean; + begin + if RESETn = '0' then + DRQ <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + -- Initiator modes: + if DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '0' then + DRQ <= '1'; + elsif DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_SEND and TARG = '0' and BLK = '1' and LOCK = false then + DRQ <= '1'; + LOCK := true; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_INIT_RCV and BLK = '0' then + DRQ <= '1'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_INIT_RCV and BLK = '1' then + DRQ <= '1'; + LOCK := true; + -- Target modes: + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '0' then + DRQ <= '1'; + elsif DMA_STATE = DMA_STEP_3 and CTRL_STATE = DMA_SEND and TARG = '1' and BLK = '1' then + DRQ <= '1'; + LOCK := true; + elsif DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_TARG_RCV and BLK = '0' then + DRQ <= '1'; + elsif DMA_STATE = DMA_STEP_1 and CTRL_STATE = DMA_TARG_RCV and BLK = '1' then + DRQ <= '1'; + LOCK := true; + elsif DACKn = '0' and LOCK = false then + DRQ <= '0'; + elsif EOPn = '0' and DACKn = '0' then + DRQ <= '0'; + LOCK := false; + end if; + end if; + end process P_DRQ; + + P_BUSFREE: process(RESETn, CLK) + -- This is the logic for the bus free signal. + -- A bus free is valid if the BSY_INn signal is + -- at least 437.5ns inactive ans SEL_INn is inactive. + -- The delay are 7 clock cycles of 16MHz. + variable TMP : std_logic_vector(2 downto 0); + begin + if RESETn = '0' then + BUS_FREE <= '0'; + TMP := "000"; + elsif CLK = '1' and CLK' event then + if BSY_INn = '1' and TMP < x"111" then + TMP := TMP + '1'; + elsif BSY_INn = '0' then + TMP := "000"; + end if; + -- + if RSTn = '0' then -- SCSI reset. + BUS_FREE <= '0'; + elsif SEL_INn = '1' and TMP = "111" then + BUS_FREE <= '1'; + else + BUS_FREE <= '0'; + end if; + end if; + end process P_BUSFREE; + + DELAY_800: process(RESETn, CLK) + -- This is the delay of 812.5ns. + -- It is derived from 13 16MHz clock cycles. + variable TMP : std_logic_vector(3 downto 0); + begin + if RESETn = '0' then + DELAY_800ns <= false; + TMP := x"0"; + elsif CLK = '1' and CLK' event then + if CTRL_STATE /= WAIT_800ns then + TMP := x"0"; + elsif TMP <= x"D" then + TMP := TMP + '1'; + end if; + -- + if TMP = x"D" then + DELAY_800ns <= true; + else + DELAY_800ns <= false; + end if; + end if; + end process DELAY_800; + + P_ARB: process(RESETn, CLK) + -- This flip flop controls the ARB flag read back + -- by the microcontroller. + begin + if RESETn = '0' then + ARB <= '0'; + elsif CLK = '1' and CLK' event then + if CTRL_STATE /= WAIT_800ns and NEXT_CTRL_STATE = WAIT_800ns then + ARB <= '1'; + elsif ARB_EN = '0' then + ARB <= '0'; + end if; + end if; + end process P_ARB; + + P_AIP: process(RESETn, CLK) + -- This flip flop controls the AIP flag read back + -- by the microcontroller. + begin + if RESETn = '0' then + AIP <= '0'; + elsif CLK = '1' and CLK' event then + if CTRL_STATE = WAIT_800ns and NEXT_CTRL_STATE /= WAIT_800ns then + AIP <= '1'; + elsif ARB_EN = '0' then + AIP <= '0'; + end if; + end if; + end process P_AIP; + + P_BSY: process + -- This flip flop controls the BSYn output + -- to the SCSI bus. + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + BSY_OUTn <= '1'; + elsif CTRL_STATE = WAIT_800ns and NEXT_CTRL_STATE /= WAIT_800ns then + BSY_OUTn <= '0'; + elsif ARB_EN = '0' then + BSY_OUTn <= '1'; + end if; + end process P_BSY; + + P_DATA_EN: process(RESETn, CLK) + -- This flip flop controls the data enable + -- of the SCSI bus. + begin + if RESETn = '0' then + DATA_EN <= '0'; + elsif CLK = '1' and CLK' event then + if CTRL_STATE = WAIT_800ns and NEXT_CTRL_STATE /= WAIT_800ns then + DATA_EN <= '1'; + elsif ARB_EN = '0' then + DATA_EN <= '0'; + end if; + end if; + end process P_DATA_EN; + + P_LA: process(RESETn, CLK) + -- This flip flop controls the LA + -- (lost arbitration) flag. + begin + if RESETn = '0' then + LA <= '0'; + elsif CLK = '1' and CLK' event then + if (CTRL_STATE = WAIT_800ns or CTRL_STATE = WAIT_2200ns) and SEL_INn = '0' then + LA <= '1'; + elsif ARB_EN = '0' then + LA <= '0'; + end if; + end if; + end process P_LA; + + P_DMA_ACTIVE: process(RESETn, CLK, DMA_ACTIVE_I) + -- This is the Flip Flop indicating if there is DMA + -- operation. + begin + if RESETn = '0' then + DMA_ACTIVE_I <= '0'; + elsif CLK = '1' and CLK' event then + if DMA_EN = '1' and SDS = '1' then + DMA_ACTIVE_I <= '1'; -- Start DMA send. + elsif DMA_EN = '1' and SDT = '1' then + DMA_ACTIVE_I <= '1'; -- Start DMA target receive. + elsif DMA_EN = '1' and SDI = '1' then + DMA_ACTIVE_I <= '1'; -- Start DMA initiator receive. + elsif DMA_EN = '0' then + DMA_ACTIVE_I <= '0'; -- Halt DMA via DMA flag in MR2. + elsif EOP_In = '0' then + DMA_ACTIVE_I <= '0'; -- Halt DMA via EOPn. + elsif PHSM = '0' then + DMA_ACTIVE_I <= '0'; -- Halt DMA via phase mismatch. + end if; + end if; + -- + DMA_ACTIVE <= DMA_ACTIVE_I; + end process P_DMA_ACTIVE; + + INTERRUPTS: process(RESETn, CLK) + -- This is the logic for all DP5380's interrupt sources. + -- A busy interrupt occurs if the BSY_INn signal is at + -- least 437.5ns inactive. The delay are 7 clock cycles + -- of 16MHz. This logic also provides the respective + -- error flags for the BSR. + variable TMP : std_logic_vector(2 downto 0); + begin + if RESETn = '0' then + INT <= '0'; + BSY_ERR <= '0'; + TMP := "000"; + elsif CLK = '1' and CLK' event then + if SPER = '1' and PINT_EN = '1' then + INT <= '1'; -- Parity interrupt. + elsif RPI = '0' then -- Reset interrupts. + INT <= '0'; + end if; + -- + if EOP_In = '0' and CTRL_STATE = DMA_SEND then + BSY_ERR <= '1'; -- End of DMA error. + elsif EOP_In = '0' and CTRL_STATE = DMA_TARG_RCV then + BSY_ERR <= '1'; -- End of DMA error. + elsif EOP_In = '0' and CTRL_STATE = DMA_INIT_RCV then + BSY_ERR <= '1'; -- End of DMA error. + elsif DMA_EN = '0' then -- Reset error. + INT <= '0'; + end if; + -- + if EOP_EN = '1' and EOP_In = '0' and CTRL_STATE = DMA_SEND then + INT <= '1'; -- End of DMA interrupt. + elsif EOP_EN = '1' and EOP_In = '0' and CTRL_STATE = DMA_TARG_RCV then + INT <= '1'; -- End of DMA interrupt. + elsif EOP_EN = '1' and EOP_In = '0' and CTRL_STATE = DMA_INIT_RCV then + INT <= '1'; -- End of DMA interrupt. + elsif DMA_EN = '0' then -- Reset interrupt. + INT <= '0'; + end if; + + -- + if PHSM = '0' then + INT <= '1'; -- Phase mismatch interrupt. + elsif DMA_EN = '0' then -- Reset interrupts. + INT <= '0'; + end if; + -- + if SEL_INn = '0' and BSY_INn = '1' and SER_ID = '1' then + INT <= '1'; -- (Re)Selection interrupt. + elsif RPI = '1' then -- Reset interrupts. + INT <= '0'; + end if; + -- + if BSY_INn = '1' and TMP < x"111" then + TMP := TMP + '1'; -- Bus settle delay. + elsif BSY_INn = '0' then + TMP := "000"; + end if; + -- + if BSY_DISn = '1' and BSY_INn = '1' and TMP = x"111" then + INT <= '1'; -- Busy monitoring interrupt. + BSY_ERR <= '1'; + elsif RPI = '1' then -- Reset interrupts. + INT <= '0'; + BSY_ERR <= '0'; + end if; + -- + end if; + end process INTERRUPTS; +end BEHAVIOUR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_pkg.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_pkg.vhd new file mode 100644 index 0000000..57cf305 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_pkg.vhd @@ -0,0 +1,139 @@ +---------------------------------------------------------------------- +---- ---- +---- WF5380 IP Core ---- +---- ---- +---- Description: ---- +---- This model provides an asynchronous SCSI interface compa- ---- +---- tible to the DP5380 from National Semiconductor and others. ---- +---- ---- +---- This file is the package file of the ip core. ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K9A 2009/06/20 WF +-- Initial Release. + +library ieee; +use ieee.std_logic_1164.all; + +package WF5380_PKG is + component WF5380_REGISTERS + port ( + CLK : in bit; + RESETn : in bit; + ADR : in bit_vector(2 downto 0); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + CSn : in bit; + RDn : in bit; + WRn : in bit; + RSTn : in bit; + RST : out bit; + ARB_EN : out bit; + DMA_ACTIVE : in bit; + DMA_EN : out bit; + BSY_DISn : out bit; + EOP_EN : out bit; + PINT_EN : out bit; + SPER : out bit; + TARG : out bit; + BLK : out bit; + DMA_DIS : in bit; + IDR_WR : in bit; + ODR_WR : in bit; + CHK_PAR : in bit; + AIP : in bit; + ARB : in bit; + LA : in bit; + CSD : in bit_vector(7 downto 0); + CSB : in bit_vector(7 downto 0); + BSR : in bit_vector(7 downto 0); + ODR_OUT : out bit_vector(7 downto 0); + ICR_OUT : out bit_vector(7 downto 0); + TCR_OUT : out bit_vector(3 downto 0); + SER_OUT : out bit_vector(7 downto 0); + SDS : out bit; + SDT : out bit; + SDI : out bit; + RPI : out bit + ); + end component; + + component WF5380_CONTROL + port ( + CLK : in bit; + RESETn : in bit; + BSY_INn : in bit; + BSY_OUTn : out bit; + DATA_EN : out bit; + SEL_INn : in bit; + ARB_EN : in bit; + BSY_DISn : in bit; + RSTn : in bit; + ARB : out bit; + AIP : out bit; + LA : out bit; + ACK_INn : in bit; + ACK_OUTn : out bit; + REQ_INn : in bit; + REQ_OUTn : out bit; + DACKn : in bit; + READY : out bit; + DRQ : out bit; + TARG : in bit; + BLK : in bit; + PINT_EN : in bit; + SPER : in bit; + SER_ID : in bit; + RPI : in bit; + DMA_EN : in bit; + SDS : in bit; + SDT : in bit; + SDI : in bit; + EOP_EN : in bit; + EOPn : in bit; + PHSM : in bit; + INT : out bit; + IDR_WR : out bit; + ODR_WR : out bit; + CHK_PAR : out bit; + BSY_ERR : out bit; + DMA_SND : out bit; + DMA_ACTIVE : out bit + ); + end component; +end WF5380_PKG; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_registers.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_registers.vhd new file mode 100644 index 0000000..2c21c12 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_registers.vhd @@ -0,0 +1,265 @@ +---------------------------------------------------------------------- +---- ---- +---- WF5380 IP Core ---- +---- ---- +---- Description: ---- +---- This model provides an asynchronous SCSI interface compa- ---- +---- tible to the DP5380 from National Semiconductor and others. ---- +---- ---- +---- This file is the 5380's register model. ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Register description (for more information see the DP5380 ---- +---- data sheet: ---- +---- ODR (address 0) Output data register, write only. ---- +---- CSD (address 0) Current SCSI data, read only. ---- +---- ICR (address 1) Initiator command register, read/write. ---- +---- MR2 (address 2) Mode register 2, read/write. ---- +---- TCR (address 3) Target command register, read/write. ---- +---- SER (address 4) Select enable register, write only. ---- +---- CSB (address 4) Current SCSI bus status, read only. ---- +---- BSR (address 5) Start DMA send, write only. ---- +---- SDS (address 5) Bus and status, read only. ---- +---- SDT (address 6) Start DMA target receive, write only. ---- +---- IDR (address 6) Input data register, read only. ---- +---- SDI (address 7) Start DMA initiator recive, write only. ---- +---- RPI (address 7) Reset parity / interrupts, read only. ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K9A 2009/06/20 WF +-- Initial Release. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF5380_REGISTERS is + port ( + -- System controls: + CLK : in bit; + RESETn : in bit; -- System reset. + + -- Address and data: + ADR : in bit_vector(2 downto 0); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + -- Bus and DMA controls: + CSn : in bit; + RDn : in bit; + WRn : in bit; + + -- Core controls: + RSTn : in bit; -- SCSI reset. + RST : out bit; -- Programmed SCSI reset. + ARB_EN : out bit; -- Arbitration enable. + DMA_ACTIVE : in bit; -- DMA is running. + DMA_EN : out bit; -- DMA mode enable. + BSY_DISn : out bit; -- BSY monitoring enable. + EOP_EN : out bit; -- EOP interrupt enable. + PINT_EN : out bit; -- Parity interrupt enable. + SPER : out bit; -- Parity error. + TARG : out bit; -- Target mode. + BLK : out bit; -- Block DMA mode. + DMA_DIS : in bit; -- Reset the DMA_EN by this signal. + IDR_WR : in bit; -- Write input data register during DMA. + ODR_WR : in bit; -- Write output data register, during DMA. + CHK_PAR : in bit; -- Check Parity during DMA operation. + AIP : in bit; -- Arbitration in progress. + ARB : in bit; -- Arbitration. + LA : in bit; -- Lost arbitration. + + CSD : in bit_vector(7 downto 0); -- SCSI data. + CSB : in bit_vector(7 downto 0); -- Current SCSI bus status. + BSR : in bit_vector(7 downto 0); -- Bus and status. + + ODR_OUT : out bit_vector(7 downto 0); -- This is the ODR register. + ICR_OUT : out bit_vector(7 downto 0); -- This is the ICR register. + TCR_OUT : out bit_vector(3 downto 0); -- This is the TCR register. + SER_OUT : out bit_vector(7 downto 0); -- This is the SER register. + + SDS : out bit; -- Start DMA send, write only. + SDT : out bit; -- Start DMA target receive, write only. + SDI : out bit; -- Start DMA initiator receive, write only. + RPI : out bit + ); +end entity WF5380_REGISTERS; + +architecture BEHAVIOUR of WF5380_REGISTERS is +signal ICR : bit_vector(7 downto 0); -- Initiator command register, read/write. +signal IDR : bit_vector(7 downto 0); -- Input data register. +signal MR2 : bit_vector(7 downto 0); -- Mode register 2, read/write. +signal ODR : bit_vector(7 downto 0); -- Output data register, write only. +signal SER : bit_vector(7 downto 0); -- Select enable register, write only. +signal TCR : bit_vector(3 downto 0); -- Target command register, read/write. +begin + REGISTERS: process(RESETn, CLK) + -- This process reflects all registers in the 5380. + variable BSY_LOCK : boolean; + begin + if RESETn = '0' then + ODR <= (others => '0'); + ICR <= (others => '0'); + MR2 <= (others => '0'); + TCR <= (others => '0'); + SER <= (others => '0'); + BSY_LOCK := false; + elsif CLK = '1' and CLK' event then + if RSTn = '0' then -- SCSI reset. + ODR <= (others => '0'); + ICR(6 downto 0) <= (others => '0'); + MR2(7) <= '0'; + MR2(5 downto 0) <= (others => '0'); + TCR <= (others => '0'); + SER <= (others => '0'); + BSY_LOCK := false; + elsif ADR = "000" and CSn = '0' and WRn = '0' then + ODR <= DATA_IN; + elsif ADR = "001" and CSn = '0' and WRn = '0' then + ICR <= DATA_IN; + elsif ADR = "010" and CSn = '0' and WRn = '0' then + MR2 <= DATA_IN; + elsif ADR = "011" and CSn = '0' and WRn = '0' then + TCR <= DATA_IN(3 downto 0); + elsif ADR = "100" and CSn = '0' and WRn = '0' then + SER <= DATA_IN; + end if; + -- + if ODR_WR = '1' then + ODR <= DATA_IN; + end if; + -- + -- This reset function is edge triggered on the 'Monitor Busy' + -- MR2(2). + if MR2(2) = '1' and BSY_LOCK = false then + ICR(5 downto 0) <= "000000"; + BSY_LOCK := true; + elsif MR2(2) = '0' then + BSY_LOCK := false; + end if; + -- + if DMA_DIS = '1' then + MR2(1) <= '0'; + end if; + end if; + end process REGISTERS; + + IDR_REGISTER: process(RESETn, CLK) + begin + if RESETn = '0' then + IDR <= x"00"; + elsif CLK = '1' and CLK' event then + if RSTn = '0' or ICR(7) = '1' then + IDR <= x"00"; -- SCSI reset. + elsif IDR_WR = '1' then + IDR <= CSD; + end if; + end if; + end process IDR_REGISTER; + + PARITY: process(RESETn, CLK) + -- This is the parity generating logic with it's related + -- error generation. + variable PAR_VAR : bit; + variable LOCK : boolean; + begin + if RESETn = '0' then + SPER <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + -- Parity checked during 'Read from CSD' + -- (registered I/O and selection/reselection): + if ADR = "000" and CSn = '0' and RDn = '0' and LOCK = false then + for i in 1 to 7 loop + PAR_VAR := CSD(i) xor CSD(i-1); + end loop; + SPER <= not PAR_VAR; + LOCK := true; + end if; + -- + -- Parity checking during DMA operation: + if DMA_ACTIVE = '1' and CHK_PAR = '1' then + for i in 1 to 7 loop + PAR_VAR := IDR(i) xor IDR(i-1); + end loop; + SPER <= not PAR_VAR; + LOCK := true; + end if; + -- + -- Reset parity flag: + if MR2(5) <= '0' then -- MR2(5) = PCHK (disabled). + SPER <= '0'; + elsif ADR = "111" and CSn = '0' and RDn = '0' then -- Reset parity/interrupts. + SPER <= '0'; + LOCK := false; + end if; + end if; + end process PARITY; + + DATA_EN <= '1' when ADR < "101" and CSn = '0' and WRn = '0' else '0'; + + SDS <= '1' when ADR = "101" and CSn = '0' and WRn = '0' else '0'; + SDT <= '1' when ADR = "110" and CSn = '0' and WRn = '0' else '0'; + SDI <= '1' when ADR = "111" and CSn = '0' and WRn = '0' else '0'; + + ICR_OUT <= ICR; + TCR_OUT <= TCR; + SER_OUT <= SER; + ODR_OUT <= ODR; + + ARB_EN <= MR2(0); + DMA_EN <= MR2(1); + BSY_DISn <= MR2(2); + EOP_EN <= MR2(3); + PINT_EN <= MR2(4); + TARG <= MR2(6); + BLK <= MR2(7); + + RST <= ICR(7); + + -- Readback, unused bit positions are read back zero. + DATA_OUT <= CSD when ADR = "000" and CSn = '0' and RDn = '0' else -- Current SCSI data. + ICR(7) & AIP & LA & ICR(4 downto 0) when ADR = "001" and CSn = '0' and RDn = '0' else + MR2 when ADR = "010" and CSn = '0' and RDn = '0' else + x"0" & TCR when ADR = "011" and CSn = '0' and RDn = '0' else + CSB when ADR = "100" and CSn = '0' and RDn = '0' else -- Current SCSI bus status. + BSR when ADR = "101" and CSn = '0' and RDn = '0' else -- Bus and status. + IDR when ADR = "110" and CSn = '0' and RDn = '0' else x"00"; -- Input data register. + + RPI <= '1' when ADR = "111" and CSn = '0' and RDn = '0' else '0'; -- Reset parity/interrupts. +end BEHAVIOUR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_soc_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_soc_top.vhd new file mode 100644 index 0000000..abc0400 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_soc_top.vhd @@ -0,0 +1,300 @@ +---------------------------------------------------------------------- +---- ---- +---- WF5380 IP Core ---- +---- ---- +---- Description: ---- +---- This model provides an asynchronous SCSI interface compa- ---- +---- tible to the DP5380 from National Semiconductor and others. ---- +---- ---- +---- Some remarks to the required input clock: ---- +---- This core is provided for a 16MHz input clock. To use other ---- +---- frequencies, it is necessary to modify the following proces- ---- +---- ses in the control file section: ---- +---- P_BUSFREE, DELAY_800, INTERRUPTS. ---- +---- ---- +---- This file is the top level file without tree state buses for ---- +---- use in 'systems on chip' designs. ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K9A 2009/06/20 WF +-- Initial Release. +-- + +library work; +use work.wf5380_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF5380_TOP_SOC is + port ( + -- System controls: + CLK : in bit; -- Use a 16MHz Clock. + RESETn : in bit; + + -- Address and data: + ADR : in bit_vector(2 downto 0); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + -- Bus and DMA controls: + CSn : in bit; + RDn : in bit; + WRn : in bit; + EOPn : in bit; + DACKn : in bit; + DRQ : out bit; + INT : out bit; + READY : out bit; + + -- SCSI bus: + DB_INn : in bit_vector(7 downto 0); + DB_OUTn : out bit_vector(7 downto 0); + DB_EN : out bit; + DBP_INn : in bit; + DBP_OUTn : out bit; + DBP_EN : out bit; + RST_INn : in bit; + RST_OUTn : out bit; + RST_EN : out bit; + BSY_INn : in bit; + BSY_OUTn : out bit; + BSY_EN : out bit; + SEL_INn : in bit; + SEL_OUTn : out bit; + SEL_EN : out bit; + ACK_INn : in bit; + ACK_OUTn : out bit; + ACK_EN : out bit; + ATN_INn : in bit; + ATN_OUTn : out bit; + ATN_EN : out bit; + REQ_INn : in bit; + REQ_OUTn : out bit; + REQ_EN : out bit; + IOn_IN : in bit; + IOn_OUT : out bit; + IO_EN : out bit; + CDn_IN : in bit; + CDn_OUT : out bit; + CD_EN : out bit; + MSG_INn : in bit; + MSG_OUTn : out bit; + MSG_EN : out bit + ); +end entity WF5380_TOP_SOC; + +architecture STRUCTURE of WF5380_TOP_SOC is +signal ACK_OUT_CTRLn : bit; +signal AIP : bit; +signal ARB : bit; +signal ARB_EN : bit; +signal BLK : bit; +signal BSR : bit_vector(7 downto 0); +signal BSY_DISn : bit; +signal BSY_ERR : bit; +signal BSY_OUT_CTRLn : bit; +signal CHK_PAR : bit; +signal CSD : bit_vector(7 downto 0); +signal CSB : bit_vector(7 downto 0); +signal DATA_EN_CTRL : bit; +signal DB_EN_I : bit; +signal DMA_ACTIVE : bit; +signal DMA_EN : bit; +signal DMA_DIS : bit; +signal DMA_SND : bit; +signal DRQ_I : bit; +signal EDMA : bit; +signal EOP_EN : bit; +signal ICR : bit_vector(7 downto 0); +signal IDR_WR : bit; +signal INT_I : bit; +signal LA : bit; +signal ODR : bit_vector(7 downto 0); +signal ODR_WR : bit; +signal PCHK : bit; +signal PHSM : bit; +signal PINT_EN : bit; +signal REQ_OUT_CTRLn : bit; +signal RPI : bit; +signal RST : bit; +signal SDI : bit; +signal SDS : bit; +signal SDT : bit; +signal SER : bit_vector(7 downto 0); +signal SER_ID : bit; +signal SPER : bit; +signal TARG : bit; +signal TCR : bit_vector(3 downto 0); +begin + EDMA <= '1' when EOPn = '0' and DACKn = '0' and RDn = '0' else + '1' when EOPn = '0' and DACKn = '0' and WRn = '0' else '0'; + + PHSM <= '1' when DMA_ACTIVE = '0' else -- Always true, if there is no DMA. + '1' when DMA_ACTIVE = '1' and REQ_INn = '0' and CDn_In = TCR(1) and IOn_IN = TCR(0) and MSG_INn = TCR(2) else '0'; -- Phasematch. + + DMA_DIS <= '1' when DMA_ACTIVE = '1' and BSY_INn = '1' else '0'; + + SER_ID <= '1' when SER /= x"00" and SER = not CSD else '0'; + + DRQ <= DRQ_I; + INT <= INT_I; + + -- Pay attention: the SCSI bus is driven with inverted signals. + ACK_OUTn <= ACK_OUT_CTRLn when DMA_ACTIVE = '1' else not ICR(4); -- Valid in initiator mode. + REQ_OUTn <= REQ_OUT_CTRLn when DMA_ACTIVE = '1' else not TCR(3); -- Valid in Target mode. + BSY_OUTn <= '0' when BSY_OUT_CTRLn = '0' and TARG = '0' else -- Valid in initiator mode. + '0' when ICR(3) = '1' else '1'; + ATN_OUTn <= not ICR(1); -- Valid in initiator mode. + SEL_OUTn <= not ICR(2); -- Valid in initiator mode. + IOn_OUT <= not TCR(0); -- Valid in Target mode. + CDn_OUT <= not TCR(1); -- Valid in Target mode. + MSG_OUTn <= not TCR(2); -- Valid in Target mode. + RST_OUTn <= not RST; + + DB_OUTn <= not ODR; + DBP_OUTn <= not SPER; + + CSD <= not DB_INn; + CSB <= not RST_INn & not BSY_INn & not REQ_INn & not MSG_INn & not CDn_IN & not IOn_IN & not SEL_INn & not DBP_INn; + BSR <= EDMA & DRQ_I & SPER & INT_I & PHSM & BSY_ERR & not ATN_INn & not ACK_INn; + + -- Hi impedance control: + ATN_EN <= '1' when TARG = '0' else '0'; -- Initiator mode. + SEL_EN <= '1' when TARG = '0' else '0'; -- Initiator mode. + BSY_EN <= '1' when TARG = '0' else '0'; -- Initiator mode. + ACK_EN <= '1' when TARG = '0' else '0'; -- Initiator mode. + IO_EN <= '1' when TARG = '1' else '0'; -- Target mode. + CD_EN <= '1' when TARG = '1' else '0'; -- Target mode. + MSG_EN <= '1' when TARG = '1' else '0'; -- Target mode. + REQ_EN <= '1' when TARG = '1' else '0'; -- Target mode. + RST_EN <= '1' when RST = '1' else '0'; -- Open drain control. + + -- Data enables: + DB_EN_I <= '1' when DATA_EN_CTRL = '1' else -- During Arbitration. + '1' when ICR(0) = '1' and TARG = '1' and DMA_SND = '1' else -- Target 'Send' mode. + '1' when ICR(0) = '1' and TARG = '0' and IOn_IN = '0' and PHSM = '1' else + '1' when ICR(6) = '1' else '0'; -- Test mode enable. + + DB_EN <= DB_EN_I; + DBP_EN <= DB_EN_I; + + I_REGISTERS: WF5380_REGISTERS + port map( + CLK => CLK, + RESETn => RESETn, + ADR => ADR, + DATA_IN => DATA_IN, + DATA_OUT => DATA_OUT, + DATA_EN => DATA_EN, + CSn => CSn, + RDn => RDn, + WRn => WRn, + RSTn => RST_INn, + RST => RST, + ARB_EN => ARB_EN, + DMA_ACTIVE => DMA_ACTIVE, + DMA_EN => DMA_EN, + BSY_DISn => BSY_DISn, + EOP_EN => EOP_EN, + PINT_EN => PINT_EN, + SPER => SPER, + TARG => TARG, + BLK => BLK, + DMA_DIS => DMA_DIS, + IDR_WR => IDR_WR, + ODR_WR => ODR_WR, + CHK_PAR => CHK_PAR, + AIP => AIP, + ARB => ARB, + LA => LA, + CSD => CSD, + CSB => CSB, + BSR => BSR, + ODR_OUT => ODR, + ICR_OUT => ICR, + TCR_OUT => TCR, + SER_OUT => SER, + SDS => SDS, + SDT => SDT, + SDI => SDI, + RPI => RPI + ); + + I_CONTROL: WF5380_CONTROL + port map( + CLK => CLK, + RESETn => RESETn, + BSY_INn => BSY_INn, + BSY_OUTn => BSY_OUT_CTRLn, + DATA_EN => DATA_EN_CTRL, + SEL_INn => SEL_INn, + ARB_EN => ARB_EN, + BSY_DISn => BSY_DISn, + RSTn => RST_INn, + ARB => ARB, + AIP => AIP, + LA => LA, + ACK_INn => ACK_INn, + ACK_OUTn => ACK_OUT_CTRLn, + REQ_INn => REQ_INn, + REQ_OUTn => REQ_OUT_CTRLn, + DACKn => DACKn, + READY => READY, + DRQ => DRQ_I, + TARG => TARG, + BLK => BLK, + PINT_EN => PINT_EN, + SPER => SPER, + SER_ID => SER_ID, + RPI => RPI, + DMA_EN => DMA_EN, + SDS => SDS, + SDT => SDT, + SDI => SDI, + EOP_EN => EOP_EN, + EOPn => EOPn, + PHSM => PHSM, + INT => INT_I, + IDR_WR => IDR_WR, + ODR_WR => ODR_WR, + CHK_PAR => CHK_PAR, + BSY_ERR => BSY_ERR, + DMA_SND => DMA_SND, + DMA_ACTIVE => DMA_ACTIVE + ); +end STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_top.vhd new file mode 100644 index 0000000..bfb31fb --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF5380/wf5380_top.vhd @@ -0,0 +1,275 @@ +---------------------------------------------------------------------- +---- ---- +---- WF5380 IP Core ---- +---- ---- +---- Description: ---- +---- This model provides an asynchronous SCSI interface compa- ---- +---- tible to the DP5380 from National Semiconductor and others. ---- +---- ---- +---- This file is the top level file with tree state buses. ---- +---- ---- +---- ---- +---- ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2009 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K9A 2009/06/20 WF +-- Initial Release. +-- + +library work; +use work.wf5380_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF5380_TOP is + port ( + -- System controls: + CLK : in bit; + RESETn : in bit; + + -- Address and data: + ADR : in std_logic_vector(2 downto 0); + DATA : inout std_logic_vector(7 downto 0); + + -- Bus and DMA controls: + CSn : in bit; + RDn : in bit; + WRn : in bit; + EOPn : in bit; + DACKn : in bit; + DRQ : out bit; + INT : out bit; + READY : out bit; + + -- SCSI bus: + DBn : inout std_logic_vector(7 downto 0); + DBPn : inout std_logic; + RSTn : inout std_logic; + BSYn : inout std_logic; + SELn : inout std_logic; + ACKn : inout std_logic; + ATNn : inout std_logic; + REQn : inout std_logic; + IOn : inout std_logic; + CDn : inout std_logic; + MSGn : inout std_logic + ); +end entity WF5380_TOP; + +architecture STRUCTURE of WF5380_TOP is +component WF5380_TOP_SOC + port ( + -- System controls: + CLK : in bit; + RESETn : in bit; + ADR : in bit_vector(2 downto 0); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + CSn : in bit; + RDn : in bit; + WRn : in bit; + EOPn : in bit; + DACKn : in bit; + DRQ : out bit; + INT : out bit; + READY : out bit; + DB_INn : in bit_vector(7 downto 0); + DB_OUTn : out bit_vector(7 downto 0); + DB_EN : out bit; + DBP_INn : in bit; + DBP_OUTn : out bit; + DBP_EN : out bit; + RST_INn : in bit; + RST_OUTn : out bit; + RST_EN : out bit; + BSY_INn : in bit; + BSY_OUTn : out bit; + BSY_EN : out bit; + SEL_INn : in bit; + SEL_OUTn : out bit; + SEL_EN : out bit; + ACK_INn : in bit; + ACK_OUTn : out bit; + ACK_EN : out bit; + ATN_INn : in bit; + ATN_OUTn : out bit; + ATN_EN : out bit; + REQ_INn : in bit; + REQ_OUTn : out bit; + REQ_EN : out bit; + IOn_IN : in bit; + IOn_OUT : out bit; + IO_EN : out bit; + CDn_IN : in bit; + CDn_OUT : out bit; + CD_EN : out bit; + MSG_INn : in bit; + MSG_OUTn : out bit; + MSG_EN : out bit + ); +end component; +-- +signal ADR_IN : bit_vector(2 downto 0); +signal DATA_IN : bit_vector(7 downto 0); +signal DATA_OUT : bit_vector(7 downto 0); +signal DATA_EN : bit; +signal DB_INn : bit_vector(7 downto 0); +signal DB_OUTn : bit_vector(7 downto 0); +signal DB_EN : bit; +signal DBP_INn : bit; +signal DBP_OUTn : bit; +signal DBP_EN : bit; +signal RST_INn : bit; +signal RST_OUTn : bit; +signal RST_EN : bit; +signal BSY_INn : bit; +signal BSY_OUTn : bit; +signal BSY_EN : bit; +signal SEL_INn : bit; +signal SEL_OUTn : bit; +signal SEL_EN : bit; +signal ACK_INn : bit; +signal ACK_OUTn : bit; +signal ACK_EN : bit; +signal ATN_INn : bit; +signal ATN_OUTn : bit; +signal ATN_EN : bit; +signal REQ_INn : bit; +signal REQ_OUTn : bit; +signal REQ_EN : bit; +signal IOn_IN : bit; +signal IOn_OUT : bit; +signal IO_EN : bit; +signal CDn_IN : bit; +signal CDn_OUT : bit; +signal CD_EN : bit; +signal MSG_INn : bit; +signal MSG_OUTn : bit; +signal MSG_EN : bit; +begin + ADR_IN <= To_BitVector(ADR); + + DATA_IN <= To_BitVector(DATA); + DATA <= To_StdLogicVector(DATA_OUT) when DATA_EN = '1' else (others => 'Z'); + + DB_INn <= To_BitVector(DBn); + DBn <= To_StdLogicVector(DB_OUTn) when DB_EN = '1' else (others => 'Z'); + + DBP_INn <= To_Bit(DBPn); + + RST_INn <= To_Bit(RSTn); + BSY_INn <= To_Bit(BSYn); + SEL_INn <= To_Bit(SELn); + ACK_INn <= To_Bit(ACKn); + ATN_INn <= To_Bit(ATNn); + REQ_INn <= To_Bit(REQn); + IOn_IN <= To_Bit(IOn); + CDn_IN <= To_Bit(CDn); + MSG_INn <= To_Bit(MSGn); + + DBPn <= '1' when DBP_OUTn = '1' and DBP_EN = '1' else + '0' when DBP_OUTn = '0' and DBP_EN = '1' else 'Z'; + RSTn <= '1' when RST_OUTn = '1' and RST_EN = '1'else + '0' when RST_OUTn = '0' and RST_EN = '1' else 'Z'; + BSYn <= '1' when BSY_OUTn = '1' and BSY_EN = '1' else + '0' when BSY_OUTn = '0' and BSY_EN = '1' else 'Z'; + SELn <= '1' when SEL_OUTn = '1' and SEL_EN = '1' else + '0' when SEL_OUTn = '0' and SEL_EN = '1' else 'Z'; + ACKn <= '1' when ACK_OUTn = '1' and ACK_EN = '1' else + '0' when ACK_OUTn = '0' and ACK_EN = '1' else 'Z'; + ATNn <= '1' when ATN_OUTn = '1' and ATN_EN = '1' else + '0' when ATN_OUTn = '0' and ATN_EN = '1' else 'Z'; + REQn <= '1' when REQ_OUTn = '1' and REQ_EN = '1' else + '0' when REQ_OUTn = '0' and REQ_EN = '1' else 'Z'; + IOn <= '1' when IOn_OUT = '1' and IO_EN = '1' else + '0' when IOn_OUT = '0' and IO_EN = '1' else 'Z'; + CDn <= '1' when CDn_OUT = '1' and CD_EN = '1' else + '0' when CDn_OUT = '0' and CD_EN = '1' else 'Z'; + MSGn <= '1' when MSG_OUTn = '1' and MSG_EN = '1' else + '0' when MSG_OUTn = '0' and MSG_EN = '1' else 'Z'; + + I_5380: WF5380_TOP_SOC + port map( + CLK => CLK, + RESETn => RESETn, + ADR => ADR_IN, + DATA_IN => DATA_IN, + DATA_OUT => DATA_OUT, + DATA_EN => DATA_EN, + CSn => CSn, + RDn => RDn, + WRn => WRn, + EOPn => EOPn, + DACKn => DACKn, + DRQ => DRQ, + INT => INT, + READY => READY, + DB_INn => DB_INn, + DB_OUTn => DB_OUTn, + DB_EN => DB_EN, + DBP_INn => DBP_INn, + DBP_OUTn => DBP_OUTn, + DBP_EN => DBP_EN, + RST_INn => RST_INn, + RST_OUTn => RST_OUTn, + RST_EN => RST_EN, + BSY_INn => BSY_INn, + BSY_OUTn => BSY_OUTn, + BSY_EN => BSY_EN, + SEL_INn => SEL_INn, + SEL_OUTn => SEL_OUTn, + SEL_EN => SEL_EN, + ACK_INn => ACK_INn, + ACK_OUTn => ACK_OUTn, + ACK_EN => ACK_EN, + ATN_INn => ATN_INn, + ATN_OUTn => ATN_OUTn, + ATN_EN => ATN_EN, + REQ_INn => REQ_INn, + REQ_OUTn => REQ_OUTn, + REQ_EN => REQ_EN, + IOn_IN => IOn_IN, + IOn_OUT => IOn_OUT, + IO_EN => IO_EN, + CDn_IN => CDn_IN, + CDn_OUT => CDn_OUT, + CD_EN => CD_EN, + MSG_INn => MSG_INn, + MSG_OUTn => MSG_OUTn, + MSG_EN => MSG_EN + ); +end STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_am_detector.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_am_detector.vhd new file mode 100644 index 0000000..10a86f9 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_am_detector.vhd @@ -0,0 +1,253 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- Address mark detector file. This part detects the address ---- +---- mark in the incoming data stream in FM and also in MFM mode ---- +---- and provides therewith synchronisation information for the ---- +---- control state machine and for the data separator in the ---- +---- transceiver unit. ---- +---- ---- +------------------------------- Some theory ------------------------------------- +---- Frequency modulation FM: ---- +---- The frequency modulation works as follows: ---- +---- 1. every first pulse of the clock and data line is a clock. ---- +---- 2. every second pulse is a data. ---- +---- 3. a logic 1 is represented by two consecutive pulses (clock and data). ---- +---- 4. a logic 0 is represented by one clock pulse and no data pulse. ---- +---- 5. Hence there are a maximum of two pulses per data bit. ---- +---- 6. one clock and one data pulse come together in one bit cell. ---- +---- 7. the duration of a bit cell in FM is 4 microseconds. ---- +---- 8. an ID address mark is represented as data FE with clock C7. ---- +---- 9. a DATA address mark is represented as data FB with clock C7. ---- +---- Examples: ---- +---- Binary data 1 1 0 0 1 0 1 1 is represented in FM as follows: ---- +---- 1111101011101111 ---- +---- the FE data 1 1 1 1 1 1 1 0 is represented as follows: ---- +---- 1111111111111110 ---- +---- with C7 clock mask 1 1 0 0 0 1 1 1 which masks the clock pulses there ---- +---- results: 1111010101111110 this is the ID address mark. ---- +---- the FB data 1 1 1 1 1 0 1 1 is represented as follows: ---- +---- 1111111111101111 ---- +---- with C7 clock mask 1 1 0 0 0 1 1 1 which masks the clock pulses there ---- +---- results: 1111010101101111 this is the DATA address mark. ---- +---- the F8 data 1 1 1 1 1 0 0 0 is represented as follows: ---- +---- 1111111111101010 ---- +---- with C7 clock mask 1 1 0 0 0 1 1 1 which masks the clock pulses there ---- +---- results: 1111010101101010 this is the deleted DATA mark. ---- +---- ---- +---- ---- +---- Modified frequency modulation MFM: ---- +---- The modified frequency modulation works as follows: ---- +---- 1. every first pulse of the clock and data line is a clock. ---- +---- 2. every second pulse is a data. ---- +---- 3. a logic 1 is represented by no clock but a data pulse. ---- +---- 4. a logic 0 is represented by a clock pulse and no data pulse if ---- +---- following a 0. ---- +---- 5. a logic 0 is represented by no pulse if following a 1. ---- +---- 6. Hence there are a maximum of one pulse per data bit. ---- +---- 7. one clock and one data pulse form together one bit cell. ---- +---- 8. the duration of a bit cell in MFM is 2 microseconds. ---- +---- 9. an address mark sync is represented as data A1 with missing clock ---- +---- pulse between bit 4 and 5. ---- +---- Examples: ---- +---- Binary data FE 1 1 1 1 1 1 1 0 is represented in MFM as follows: ---- +---- 0101010101010100 this is the ID address mark. ---- +---- Binary data FB 1 1 1 1 1 0 1 1 is represented in MFM as follows: ---- +---- 0101010101000101 this is the DATA address mark. ---- +---- Binary data F8 1 1 1 1 1 0 0 0 is represented in MFM as follows: ---- +---- 0101010101001010 this is the deleted DATA address mark. ---- +---- the A1 data 1 0 1 0 0 0 0 1 is represented as follows: ---- +---- 0100010010101001 ---- +---- with the missing clock pulse between bits 4 and 5 there results: ---- +---- results: 0100010010001001 this is the address mark sync. ---- +---- ---- +---- Both MFM and FM are during read and write shifted with most significant ---- +---- bit (MSB) first. During the FM address marks are written without a ---- +---- SYNC pulse the MFM coded data requires a synchronisation (A1 with ---- +---- missing clock pulse because at the beginning of the data stream it is ---- +---- not defined wether a clock pulse or a data pulse appears first. In FM ---- +---- coding the first pulse is in any case a clock pulse. ---- +--------------------------------------------------------------------------------- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_AM_DETECTOR is + port( + -- System control + CLK : in bit; + RESETn : in bit; + + -- Controls: + DDEn : in bit; + + -- Serial data and clock: + DATA : in bit; + DATA_STRB : in bit; + + -- Address mark detector: + ID_AM : out bit; -- ID address mark strobe. + DATA_AM : out bit; -- Data address mark strobe. + DDATA_AM : out bit -- Deleted data address mark strobe. + ); +end WF1772IP_AM_DETECTOR; + +architecture BEHAVIOR of WF1772IP_AM_DETECTOR is +signal SHIFT : bit_vector(15 downto 0); +signal SYNC : boolean; +signal ID_AM_I : bit; +signal DATA_AM_I : bit; +signal DDATA_AM_I : bit; +begin + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT <= (others => '0'); + elsif CLK = '1' and CLK' event then + if DATA_STRB = '1' then + -- MSB first leads to a shift left operation. + SHIFT <= SHIFT(14 downto 0) & DATA; + elsif DDEn = '0' and SHIFT = "0100010010001001" then -- This is the synchronisation in MFM. + SHIFT <= (others => '0'); + end if; + end if; + end process SHIFTREG; + + MFM_SYNCLOCK: process(RESETn, CLK) + -- The SYNC pulse is generated in MFM mode only when the sync character + -- appears in the shift register (A1 sync mark, see file header). + -- After the sync character is detected, the sync time counter is loaded + -- with a value of 17. During counting the following 17 read clock pulses + -- down, the SYNC is true. After exactly 16 pulses the address mark is + -- detected if the pattern in the shift register fits one of the address + -- marks. The address mark pulses are valid for one read clock cycle until + -- SYNC goes low again. This mechanism is used to detect the correct address + -- marks in the MFM data stream during the type III read track command. + -- This is an improvement over the original WD1772 chip. + variable TMP : std_logic_vector(4 downto 0); + begin + if RESETn = '0' then + TMP := "00000"; + elsif CLK = '1' and CLK' event then + if SHIFT = "0100010010001001" and DDEn = '0' then + TMP := "10001"; -- Load sync time counter. + elsif DATA_STRB = '1' and TMP > "00000" then + TMP := TMP - '1'; + end if; + end if; + case TMP is + when "00000" => SYNC <= false; + when others => SYNC <= true; + end case; + end process MFM_SYNCLOCK; + + -- The addressmark is nominally valid for one data pulse cycle (1us, 2us, 4us). + -- The pulse is shorter due to the fact that the detected address marks change the + -- state of the control state machine and so clear the address mark shift register... + ID_AM_I <= '1' when DDEn = '1' and SHIFT = "1111010101111110" else + '1' when DDEn = '0' and SHIFT = "0101010101010100" and SYNC = true else '0'; + DATA_AM_I <= '1' when DDEn = '1' and SHIFT = "1111010101101111" else + -- Normal data address mark... + '1' when DDEn = '0' and SHIFT = "0101010101000101" and SYNC = true else '0'; + DDATA_AM_I <= '1' when DDEn = '1' and SHIFT = "1111010101101010" else + -- ... and deleted address mark in MFM mode: + '1' when DDEn = '0' and SHIFT = "0101010101001010" and SYNC = true else '0'; + + ADRMARK_STROBES: process(RESETn, CLK) + -- ... nevertheless The controller and the transceiver require ID address mark strobes + -- and DATA address mark strobes. Therefore this process provides these strobe + -- signals independant of any 'feedbacks' like pulse shortening by the controller + -- state machine itself. + variable ID_AM_LOCK, DATA_AM_LOCK, DDATA_AM_LOCK : boolean; + begin + if RESETn = '0' then + ID_AM_LOCK := false; + DATA_AM_LOCK := false; + ID_AM <= '0'; + DATA_AM <= '0'; + elsif CLK = '1' and CLK' event then + -- ID address mark: + if ID_AM_I = '1' and ID_AM_LOCK = false then + ID_AM <= '1'; + ID_AM_LOCK := true; + elsif ID_AM_I = '0' then + ID_AM <= '0'; + ID_AM_LOCK := false; + else + ID_AM <= '0'; + end if; + -- Data address mark: + if DATA_AM_I = '1' and DATA_AM_LOCK = false then + DATA_AM <= '1'; + DATA_AM_LOCK := true; + elsif DATA_AM_I = '0' then + DATA_AM <= '0'; + DATA_AM_LOCK := false; + else + DATA_AM <= '0'; + end if; + -- Deleted data address mark: + if DDATA_AM_I = '1' and DDATA_AM_LOCK = false then + DDATA_AM <= '1'; + DDATA_AM_LOCK := true; + elsif DDATA_AM_I = '0' then + DDATA_AM <= '0'; + DDATA_AM_LOCK := false; + else + DDATA_AM <= '0'; + end if; + end if; + end process ADRMARK_STROBES; +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_control.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_control.vhd new file mode 100644 index 0000000..ce4c346 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_control.vhd @@ -0,0 +1,1463 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- This is file the control unit providing all signals for the ---- +---- data processing units like registers, addressmark detector, ---- +---- data separator, CRC redundancy checker or transceiver. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Fixed the polarity of the precompensation flag. +-- The flag is no active '0'. Thanks to Jorma +-- Oksanen for the information. +-- Revision 2K8A 2008/02/26 WF +-- Fixed a bug in the 6ms delay. Thanks to Lyndon Amsdon. +-- Revision 2K8B 2008/12/24 WF +-- Bugfixes to avoid hanging state machine. +-- Changed DELAY_30MS to DELAY_15MS, which is the correct value. Thanks to L. Amsdon for the information. +-- Removed CRC_BUSY. +-- Fixed a bug in the Delay for the state T2_VERIFY_AM. +-- Revision 2K9A 2009/06/20 WF +-- Fix to provide correct LOST_DATA_TR00 flag during seek command. + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_CONTROL is + port( + -- System control: + CLK : in bit; + RESETn : in bit; + + -- Chip control signals: + A1, A0 : in bit; + RWn : in bit; + CSn : in bit; + DDEn : in bit; + + -- Registers: + DR : in bit_vector(7 downto 0); -- Data register. + CMD : in std_logic_vector(7 downto 0); -- Command register. + DSR : in std_logic_vector(7 downto 0); -- Shift register. + TR : in std_logic_vector(7 downto 0); -- Track register. + SR : in std_logic_vector(7 downto 0); -- Sector register. + + -- Status flags: + MO : buffer bit; -- Motor on status flag. + WR_PR : out bit; -- Write protect status flag. + SPINUP_RECTYPE : out bit; -- Spin up / record type status flag. + SEEK_RNF : out bit; -- Seek error / record not found status flag. + CRC_ERRFLAG : out bit; -- CRC status flag. + LOST_DATA_TR00 : out bit; -- Status flag indicates lost data or track 00 position. + DRQ : out bit; -- Data request. + DRQ_IPn : out bit; -- Data request status flag. + BUSY : buffer bit; -- BUSY status flag. + + -- Address mark detector controls: + AM_2_DISK : out bit; -- Enables / disables the address mark detector. + ID_AM : in bit; -- Address mark of the ID field + DATA_AM : in bit; -- Address mark of the data field + DDATA_AM : in bit; -- Address mark of a deleted data field + + -- CRC unit controls: + CRC_ERR : in bit; -- CRC decoder's error. + CRC_PRES : out bit; -- Preset CRC during write operations. + + -- Track register controls: + TR_PRES : out bit; -- Set x"FF". + TR_CLR : out bit; -- Clear. + TR_INC : out bit; -- Increment. + TR_DEC : out bit; -- Decrement. + + -- Sector register control: + SR_LOAD : out bit; -- Load. + SR_INC : out bit; -- Increment. + -- The TRACK_NR is required during the type III command + -- 'Read Address'. TRACK_NR is the content of the TRACKMEM. + TRACK_NR : out std_logic_vector(7 downto 0); + + -- DATA register control: + DR_CLR : out bit; -- Clear. + DR_LOAD : out bit; -- LOAD. + + -- Shift register control: + SHFT_LOAD_ND : out bit; -- Load normal data. + SHFT_LOAD_SD : out bit; -- Load special data. + + -- Transceiver controls: + CRC_2_DISK : out bit; -- Cause the Transceiver to write out CRC data. + DSR_2_DISK : out bit; -- Cause the Transceiver to write normal data. + FF_2_DISK : out bit; -- Cause the Transceiver to write x"FF" bytes. + PRECOMP_EN : out bit; -- Enables the write precompensation. + + -- Miscellaneous Controls: + DATA_STRB : in bit; -- Data strobe (read and write operation) + WPRTn : in bit; -- Write protect flag + IPn : in bit; -- Index pulse flag + TRACK00n : in bit; -- Track zero flag + DISK_RWn : out bit; -- This signal reflects the data direction. + DIRC : out bit; -- Step direction control. + STEP : out bit; -- Step pulse. + WG : out bit; -- Write gate control. + INTRQ : out bit -- Interrupt request flag. + ); +end WF1772IP_CONTROL; + +architecture BEHAVIOR of WF1772IP_CONTROL is +-- The control state machine for the three command types I, II and III +-- (10 commands) has 73 states: +type CMD_STATES is( IDLE, INIT, SPINUP, DELAY_15MS, DECODE, T1_SEEK_RESTORE, T1_STEPPING, + T1_LOAD_SHFT, T1_COMP_TR_DSR, T1_CHECK_DIR, T1_HEAD_CTRL, T1_STEP, T1_TRAP, T1_STEP_DELAY, + T1_SPINDOWN, T1_SCAN_TRACK, T1_SCAN_CRC, T1_VERIFY_DELAY, T1_VERIFY_CRC, T2_RD_WR_SECT, + T2_INIT, T2_SCAN_TRACK, T2_SCAN_SECT, T2_SCAN_LEN, T2_VERIFY_CRC_1, T2_VERIFY_AM, T2_FIRSTBYTE, + T2_LOAD_DATA, T2_NEXTBYTE, T2_VERIFY_DRQ_1, T2_RDSTAT, T2_VERIFY_CRC_2, + T2_MULTISECT, T2_DELAY_B2, T2_SET_DRQ, T2_DELAY_B8, T2_VERIFY_DRQ_2, + T2_DELAY_B1, T2_CHECK_MODE, T2_DELAY_B11, T2_WR_LEADIN, T2_WR_AM, + T2_LOAD_SHFT, T2_WR_BYTE, T2_VERIFY_DRQ_3, T2_DATALOST, T2_WRSTAT, T2_WR_CRC, + T2_WR_FF, T3_WR, T3_DELAY_B3, T3_VERIFY_DRQ, T3_CHECK_INDEX_1, T3_LOAD_SHFT, + T3_WR_DATA, T3_CHECK_INDEX_2, T3_DATALOST, T3_RD_TRACK, T3_SHIFT, + T3_CHECK_INDEX_3, T3_DETECT_AM, T3_CHECK_BYTE, T3_CHECK_DR, T3_LOAD_DATA_1, + T3_SET_DRQ_1, T3_RD_ADR, T3_VERIFY_AM, T3_SHIFT_ADR, T3_LOAD_DATA_2, + T3_SET_DRQ_2, T3_CHECK_RD, T3_LOAD_SR, T3_VERIFY_CRC); +signal CMD_STATE : CMD_STATES; +signal NEXT_CMD_STATE : CMD_STATES; +signal DATA_WR : boolean; +signal DATA_RD : boolean; +signal CMD_WR : boolean; +signal STAT_RD : boolean; +signal DELAY : boolean; +signal DRQ_I : bit; +signal INDEX_CNT : boolean; +signal DIR : bit; +signal INDEX_MARK : bit; +signal STEP_TRAP : boolean; +signal TYPE_IV_BREAK : boolean; +signal BYTE_RDY : boolean; +signal SECT_LEN : std_logic_vector(10 downto 0); +signal TRACKMEM : std_logic_vector(7 downto 0); +signal T3_TRADR : boolean; +signal T3_DATATYPE : bit_vector(7 downto 0); +begin + -- The Forced interrupt stops any command at the end of an internal micro instruction. + -- Forced interrupt waits until ALU operations in progress are complete (CRC calculations, + -- compares etc.). the TYPE_IV_BREAK controls this behavior. + TYPE_IV_BREAK <= true when CMD(7 downto 4) = x"D" and DELAY = true else false; + + CMD_REG: process(RESETn, CLK) + begin + if RESETn = '0' then + CMD_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if TYPE_IV_BREAK = true then + CMD_STATE <= IDLE; -- Forced interrupt break. + else + CMD_STATE <= NEXT_CMD_STATE; -- Normal operation. + end if; + end if; + end process CMD_REG; + + CMD_DECODER: process(CMD_STATE, CMD, DSR, TR, SR, INDEX_CNT, IPn, INDEX_MARK, DELAY, DIR, MO, CMD_WR, DRQ_I, + DDEn, CRC_ERR, TRACK00n, STEP_TRAP, ID_AM, DATA_AM, DDATA_AM, WPRTn, SECT_LEN, BYTE_RDY, + T3_TRADR) + begin + case CMD_STATE is + -------------------------------------------------------------------- + ------------------ type1, -2, -3 command stuff --------------------- + -------------------------------------------------------------------- + when IDLE => + -- The write access to the command register indicates a new command. + -- Any command received (type1, -2 or -3 but not type4): + if CMD_WR = true and CMD /= x"FF" and CMD(7 downto 4) /= "1101" then + NEXT_CMD_STATE <= INIT; + else + NEXT_CMD_STATE <= IDLE; -- No CMD detected. + end if; + when INIT => + -- The process goes on when the CMD_WR flag is released. + if CMD_WR = false and CMD(3) = '0' and MO = '0' then + -- Do not enter the SPINUP sequence + -- when the motor is already on (MO = '1'). + NEXT_CMD_STATE <= SPINUP; + elsif CMD_WR = false then + -- Proceed with the DELAY_15MS when the motor was + -- already on or when the SPINUP sequence is + -- disabled (CMD(3) = '1'). + NEXT_CMD_STATE <= DELAY_15MS; + else + NEXT_CMD_STATE <= INIT; + end if; + when SPINUP => + if INDEX_CNT = true then -- proceed after 6 revolutions + NEXT_CMD_STATE <= DELAY_15MS; + else + NEXT_CMD_STATE <= SPINUP; + end if; + when DELAY_15MS => + if CMD(7) = '0' then -- No delay for type1 commands. + NEXT_CMD_STATE <= DECODE; + elsif CMD(7) = '1' and CMD(2) = '0' then -- Delay for type2 and -3 disabled. + NEXT_CMD_STATE <= DECODE; + elsif CMD(7) = '1' and CMD(2) = '1' and DELAY = true then -- Delay enabled by CMD(2). + NEXT_CMD_STATE <= DECODE; + else + NEXT_CMD_STATE <= DELAY_15MS; + end if; + when DECODE => + case CMD(7 downto 5) is + when "000" => -- 'restore', 'seek'. + NEXT_CMD_STATE <= T1_SEEK_RESTORE; + when "001" |"010" | "011" => -- 'step', 'step in', 'step out'. + NEXT_CMD_STATE <= T1_STEPPING; + when "100" | "101" => -- 'read sector', 'write sector' + NEXT_CMD_STATE <= T2_RD_WR_SECT; + when "110" => -- 'read address'. + -- "110" is also used by the 'force interrupt'. + -- There will result no wrong encoding because + -- the 'force intterrupt' is predecoded in IDLE. + NEXT_CMD_STATE <= T3_RD_ADR; + when "111" => -- 'read track', 'write track'. + case CMD(4) is + when '0' => NEXT_CMD_STATE <= T3_RD_TRACK; + when '1' => NEXT_CMD_STATE <= T3_WR; + when others => NEXT_CMD_STATE <= T3_WR; -- Dummy for U, X, Z, W, H, L, -. + end case; + when others => + -- The following NEXT_CMD_STATE is chosen to compile fine with + -- the Xilinx ISE not to produce a latch. + NEXT_CMD_STATE <= IDLE; -- Never true due to IDLE preselection. + end case; + -------------------------------------------------------------------- + ------------------ special type1 command stuff --------------------- + -------------------------------------------------------------------- + when T1_SEEK_RESTORE => + -- In this state, the data register and the track register are updated, if the + -- command is a RESTORE. The update is done further down with the track register + -- and the data register controls. + NEXT_CMD_STATE <= T1_LOAD_SHFT; + when T1_STEPPING => + if CMD(4) = '1' then -- '1' means update track register. + NEXT_CMD_STATE <= T1_CHECK_DIR; + else + NEXT_CMD_STATE <= T1_HEAD_CTRL; + end if; + when T1_LOAD_SHFT => + NEXT_CMD_STATE <= T1_COMP_TR_DSR; + when T1_COMP_TR_DSR => + if DSR = TR then + NEXT_CMD_STATE <= T1_VERIFY_DELAY; + else + -- The direction control is done further down. + NEXT_CMD_STATE <= T1_CHECK_DIR; + end if; + when T1_CHECK_DIR => + -- Track register modifications are done in + -- statements further down. + -- The delay is to provide the timing of the WD1772 which is DIR to step = + -- 24us in MFM mode and 48us in FM mode. + if DELAY = true then + NEXT_CMD_STATE <= T1_HEAD_CTRL; + else + NEXT_CMD_STATE <= T1_CHECK_DIR; + end if; + when T1_HEAD_CTRL => + if TRACK00n = '0' and DIR = '0' then + NEXT_CMD_STATE <= T1_VERIFY_DELAY; + else + NEXT_CMD_STATE <= T1_STEP; + end if; + when T1_STEP => + NEXT_CMD_STATE <= T1_TRAP; + when T1_TRAP => + if STEP_TRAP = true then + NEXT_CMD_STATE <= IDLE; -- Break due to seek error. + else + NEXT_CMD_STATE <= T1_STEP_DELAY; + end if; + when T1_STEP_DELAY => + -- The delay in here is according to the CMD(1 downto 0) as follows: + -- "11" = 3ms, "10" = 2ms, "01" = 12ms, "00" = 6ms. + if DELAY = true then + case CMD(7 downto 5) is + when "001" | "010" | "011" => -- STEP - STEP IN - STEP OUT. + NEXT_CMD_STATE <= T1_VERIFY_DELAY; + when others => -- Seek or restore command. + NEXT_CMD_STATE <= T1_LOAD_SHFT; + end case; + else + NEXT_CMD_STATE <= T1_STEP_DELAY; + end if; + when T1_VERIFY_DELAY => + if CMD(2) = '0' then -- No verify. + NEXT_CMD_STATE <= IDLE; + else + if DELAY = true then -- Wait, if verify is active. + NEXT_CMD_STATE <= T1_SPINDOWN; + else + NEXT_CMD_STATE <= T1_VERIFY_DELAY; + end if; + end if; + when T1_SPINDOWN => -- Detect ID address mark in here. + if INDEX_CNT = true then + NEXT_CMD_STATE <= IDLE; -- Break due to timeout. + elsif ID_AM = '1' then -- Addressmark found. + NEXT_CMD_STATE <= T1_SCAN_TRACK; + else + NEXT_CMD_STATE <= T1_SPINDOWN; + end if; + when T1_SCAN_TRACK => + if DELAY = true then + -- Track found if shift register (DSR) equals track register (TR). + if DSR = TR then + NEXT_CMD_STATE <= T1_SCAN_CRC; + else + NEXT_CMD_STATE <= T1_SPINDOWN; + end if; + else + NEXT_CMD_STATE <= T1_SCAN_TRACK; + end if; + when T1_SCAN_CRC => + -- Scan the rest of the data header for correct CRC generation (3 Bytes). + -- Sector number side select byte and data length byte. + if DELAY = true then + NEXT_CMD_STATE <= T1_VERIFY_CRC; + else + NEXT_CMD_STATE <= T1_SCAN_CRC; + end if; + when T1_VERIFY_CRC => + -- The CRC logic starts during T1_SPINDOWN (missing clock transitions). + if DELAY = true then + if CRC_ERR = '1' then + NEXT_CMD_STATE <= T1_SPINDOWN; -- CRC error. + else + NEXT_CMD_STATE <= IDLE; -- Operation finished. + end if; + else + NEXT_CMD_STATE <= T1_VERIFY_CRC; -- Wait until CRC logic is ready. + end if; + -------------------------------------------------------------------- + ------------------ special type2 command stuff --------------------- + -------------------------------------------------------------------- + when T2_RD_WR_SECT => + if CMD(7 downto 5) = "101" and WPRTn = '0' then + NEXT_CMD_STATE <= IDLE; -- Break due to write protected disk. + else + NEXT_CMD_STATE <= T2_INIT; + end if; + when T2_INIT => + if INDEX_CNT = true then + NEXT_CMD_STATE <= IDLE; -- Break due to timeout. + elsif ID_AM = '0' then + NEXT_CMD_STATE <= T2_INIT; -- Wait for address mark. + else -- INDEX_CNT = false and ID_AM = '1' -> ID address mark detected + NEXT_CMD_STATE <= T2_SCAN_TRACK; + end if; + when T2_SCAN_TRACK => + -- Track found if shift register (DSR) equals track register (TR). + if DELAY = true then + if DSR = TR then + NEXT_CMD_STATE <= T2_SCAN_SECT; + else + NEXT_CMD_STATE <= T2_INIT; + end if; + else + NEXT_CMD_STATE <= T2_SCAN_TRACK; + end if; + when T2_SCAN_SECT => + -- Sector found if shift register (DSR) equals sector register (SR). + if DELAY = true then + if DSR = SR then + NEXT_CMD_STATE <= T2_SCAN_LEN; + else + NEXT_CMD_STATE <= T2_INIT; + end if; + else + NEXT_CMD_STATE <= T2_SCAN_SECT; + end if; + when T2_SCAN_LEN => + if DELAY = true then + NEXT_CMD_STATE <= T2_VERIFY_CRC_1; + else + NEXT_CMD_STATE <= T2_SCAN_LEN; + end if; + when T2_VERIFY_CRC_1 => + -- The CRC logic starts after T2_INIT (missing clock transitions). + if DELAY = true then + if CRC_ERR = '1' then + NEXT_CMD_STATE <= T2_INIT; -- CRC error. + elsif CRC_ERR = '0' and CMD(7 downto 5) = "101" then + NEXT_CMD_STATE <= T2_DELAY_B2; -- Comand is a write. + else -- Command is a read. + NEXT_CMD_STATE <= T2_VERIFY_AM; + end if; + else + NEXT_CMD_STATE <= T2_VERIFY_CRC_1; -- Wait until CRC logic is ready. + end if; + when T2_VERIFY_AM => + if DATA_AM = '1' or DDATA_AM = '1' then -- Data address mark detected, go on. + NEXT_CMD_STATE <= T2_FIRSTBYTE; + elsif DELAY = false then -- Stay in this state. + NEXT_CMD_STATE <= T2_VERIFY_AM; + else + NEXT_CMD_STATE <= T2_INIT; -- No addressmark detected. + end if; + when T2_FIRSTBYTE => + if DELAY = true then + NEXT_CMD_STATE <= T2_LOAD_DATA; + else + NEXT_CMD_STATE <= T2_FIRSTBYTE; + end if; + when T2_LOAD_DATA => + NEXT_CMD_STATE <= T2_NEXTBYTE; + when T2_NEXTBYTE => + if DELAY = true then + NEXT_CMD_STATE <= T2_VERIFY_DRQ_1; + else + NEXT_CMD_STATE <= T2_NEXTBYTE; + end if; + when T2_VERIFY_DRQ_1 => + NEXT_CMD_STATE <= T2_RDSTAT; + when T2_RDSTAT => + if SECT_LEN = "00000000000" then + NEXT_CMD_STATE <= T2_VERIFY_CRC_2; + else + NEXT_CMD_STATE <= T2_LOAD_DATA; + end if; + when T2_VERIFY_CRC_2 => + -- The CRC logic starts after T2_VERIFY_AM (missing clock transitions). + if DELAY = true then + if CRC_ERR = '1' then + NEXT_CMD_STATE <= IDLE; -- Break due to CRC error. + else + NEXT_CMD_STATE <= T2_MULTISECT; + end if; + else + NEXT_CMD_STATE <= T2_VERIFY_CRC_2; -- Wait until CRC logic is ready. + end if; + when T2_MULTISECT => + if CMD(4) = '1' then + NEXT_CMD_STATE <= T2_RD_WR_SECT; + else + NEXT_CMD_STATE <= IDLE; -- Operation finished. + end if; + when T2_DELAY_B2 => + if DELAY = true then + NEXT_CMD_STATE <= T2_SET_DRQ; + else + NEXT_CMD_STATE <= T2_DELAY_B2; + end if; + when T2_SET_DRQ => + NEXT_CMD_STATE <= T2_DELAY_B8; + when T2_DELAY_B8 => + if DELAY = true then + NEXT_CMD_STATE <= T2_VERIFY_DRQ_2; + else + NEXT_CMD_STATE <= T2_DELAY_B8; + end if; + when T2_VERIFY_DRQ_2 => + if DRQ_I = '0' then + NEXT_CMD_STATE <= T2_DELAY_B1; + else + NEXT_CMD_STATE <= IDLE; -- Break due to lost data (no new data by host). + end if; + when T2_DELAY_B1 => + if DELAY = true then + NEXT_CMD_STATE <= T2_CHECK_MODE; + else + NEXT_CMD_STATE <= T2_DELAY_B1; + end if; + when T2_CHECK_MODE => + if DDEn = '1' then -- FM mode + NEXT_CMD_STATE <= T2_WR_LEADIN; + else + NEXT_CMD_STATE <= T2_DELAY_B11; + end if; + when T2_DELAY_B11 => + if DELAY = true then + NEXT_CMD_STATE <= T2_WR_LEADIN; + else + NEXT_CMD_STATE <= T2_DELAY_B11; + end if; + when T2_WR_LEADIN => + if DELAY = true then + NEXT_CMD_STATE <= T2_WR_AM; + else + NEXT_CMD_STATE <= T2_WR_LEADIN; + end if; + when T2_WR_AM => -- Write data address mark. + if DELAY = true then + NEXT_CMD_STATE <= T2_LOAD_SHFT; + else + NEXT_CMD_STATE <= T2_WR_AM; + end if; + when T2_LOAD_SHFT => + NEXT_CMD_STATE <= T2_WR_BYTE; + when T2_WR_BYTE => + if DELAY = true then + NEXT_CMD_STATE <= T2_VERIFY_DRQ_3; + else + NEXT_CMD_STATE <= T2_WR_BYTE; + end if; + when T2_VERIFY_DRQ_3 => + if DRQ_I = '0' then + NEXT_CMD_STATE <= T2_WRSTAT; + else + NEXT_CMD_STATE <= T2_DATALOST; + end if; + when T2_DATALOST => + if DELAY = true then + NEXT_CMD_STATE <= T2_WRSTAT; + else + NEXT_CMD_STATE <= T2_DATALOST; + end if; + when T2_WRSTAT => + if SECT_LEN = "00000000000" then + NEXT_CMD_STATE <= T2_WR_CRC; -- Write operation finished. + else + NEXT_CMD_STATE <= T2_LOAD_SHFT; + end if; + when T2_WR_CRC => + if DELAY = true then + NEXT_CMD_STATE <= T2_WR_FF; + else + NEXT_CMD_STATE <= T2_WR_CRC; + end if; + when T2_WR_FF => + if DELAY = true then + NEXT_CMD_STATE <= T2_MULTISECT; + else + NEXT_CMD_STATE <= T2_WR_FF; + end if; + -------------------------------------------------------------------- + ---------------- type3 write track command stuff ------------------- + -------------------------------------------------------------------- + when T3_WR => + if WPRTn = '0' then + NEXT_CMD_STATE <= IDLE; -- Break due to write protected disk. + else + NEXT_CMD_STATE <= T3_DELAY_B3; + end if; + when T3_DELAY_B3 => + if DELAY = true then + NEXT_CMD_STATE <= T3_VERIFY_DRQ; + else + NEXT_CMD_STATE <= T3_DELAY_B3; + end if; + when T3_VERIFY_DRQ => + if DRQ_I = '0' then + NEXT_CMD_STATE <= T3_CHECK_INDEX_1; + else + NEXT_CMD_STATE <= IDLE; -- Break due to lost data (no new data by host). + end if; + when T3_CHECK_INDEX_1 => + if IPn = '0' then + NEXT_CMD_STATE <= T3_LOAD_SHFT; + else + NEXT_CMD_STATE <= T3_CHECK_INDEX_1; + end if; + when T3_LOAD_SHFT => + NEXT_CMD_STATE <= T3_WR_DATA; + when T3_WR_DATA => + if DELAY = true then + NEXT_CMD_STATE <= T3_CHECK_INDEX_2; + else + NEXT_CMD_STATE <= T3_WR_DATA; + end if; + when T3_CHECK_INDEX_2 => + if INDEX_MARK = '1' then + NEXT_CMD_STATE <= IDLE; -- End of track reached. + elsif DRQ_I = '0' then -- New data has been loaded. + NEXT_CMD_STATE <= T3_LOAD_SHFT; -- Fetch new data. + else + NEXT_CMD_STATE <= T3_DATALOST; -- Fill in nullbyte. + end if; + when T3_DATALOST => + if DELAY = true then + NEXT_CMD_STATE <= T3_CHECK_INDEX_2; + else + NEXT_CMD_STATE <= T3_DATALOST; + end if; + -------------------------------------------------------------------- + --------------- type3 read track command stuff -------------------- + -------------------------------------------------------------------- + when T3_RD_TRACK => + -- wait for index pulse: + if IPn = '0' then + NEXT_CMD_STATE <= T3_SHIFT; + else + NEXT_CMD_STATE <= T3_RD_TRACK; + end if; + when T3_SHIFT => + if DELAY = true then + NEXT_CMD_STATE <= T3_CHECK_INDEX_3; + else + NEXT_CMD_STATE <= T3_SHIFT; + end if; + when T3_CHECK_INDEX_3 => + if INDEX_MARK = '1' then + NEXT_CMD_STATE <= IDLE; -- End of track reached. + else + NEXT_CMD_STATE <= T3_DETECT_AM; + end if; + when T3_DETECT_AM => -- Detect for ID address mark. + if ID_AM = '1' then + NEXT_CMD_STATE <= T3_CHECK_DR; + else + NEXT_CMD_STATE <= T3_CHECK_BYTE; + end if; + when T3_CHECK_BYTE => + if BYTE_RDY = true then + NEXT_CMD_STATE <= T3_CHECK_DR; + else + NEXT_CMD_STATE <= T3_SHIFT; + end if; + when T3_CHECK_DR => + NEXT_CMD_STATE <= T3_LOAD_DATA_1; + when T3_LOAD_DATA_1 => + NEXT_CMD_STATE <= T3_SET_DRQ_1; + when T3_SET_DRQ_1 => + NEXT_CMD_STATE <= T3_SHIFT; + -------------------------------------------------------------------- + ---------------- type3 read address command stuff ------------------ + -------------------------------------------------------------------- + when T3_RD_ADR => + -- check for 6 index holes + if INDEX_CNT = true then + NEXT_CMD_STATE <= IDLE; -- Break due to timeout. + else + NEXT_CMD_STATE <= T3_VERIFY_AM; + end if; + when T3_VERIFY_AM => -- Check for existing ID address mark + if ID_AM = '1' then + NEXT_CMD_STATE <= T3_SHIFT_ADR; + else + NEXT_CMD_STATE <= T3_RD_ADR; + end if; + when T3_SHIFT_ADR => + if DELAY = true then + NEXT_CMD_STATE <= T3_LOAD_DATA_2; + else + NEXT_CMD_STATE <= T3_SHIFT_ADR; + end if; + when T3_LOAD_DATA_2 => + NEXT_CMD_STATE <= T3_SET_DRQ_2; + when T3_SET_DRQ_2 => + NEXT_CMD_STATE <= T3_CHECK_RD; + when T3_CHECK_RD => + if T3_TRADR = true then + NEXT_CMD_STATE <= T3_LOAD_SR; + else + NEXT_CMD_STATE <= T3_SHIFT_ADR; + end if; + when T3_LOAD_SR => + NEXT_CMD_STATE <= T3_VERIFY_CRC; + when T3_VERIFY_CRC => + -- The CRC logic starts during T3_VERIFY_AM (missing clock transitions). + if DELAY = true then + NEXT_CMD_STATE <= IDLE; -- Operation finished (with or without CRC error). + else + NEXT_CMD_STATE <= T3_VERIFY_CRC; -- Wait until CRC logic is ready. + end if; + end case; + end process CMD_DECODER; + + P_DELAY: process(RESETn, CLK, CMD_STATE, T3_DATATYPE, DDEn, CMD) + -- This process is responsible to control the DELAY signal in the different command + -- states of the main state machine. These states finish, if the signal DELAY is + -- asserted. The condition for asserted DELAY is the correct number of data strobes + -- which are supervised by the DATA_STRB inputs. + -- Another condition is a time delay required in the following states: + -- In DELAY_15MS there is a delay of 30ms. + -- In T1_STEP_PULSE the delay is according to the CMD(1 downto 0) as follows: + -- "11" = 3ms, "10" = 2ms, "01" = 12ms, "00" = 6ms. + -- In T1_VERIFY_DELAY there is a delay of 30ms. + variable DELCNT : std_logic_vector(19 downto 0); + begin + if RESETn = '0' then + DELCNT := (others => '0'); + elsif CLK = '1' and CLK' event then + -- Reset the delay right after it occurs: + if DELAY = true then + DELCNT := (others => '0'); + elsif DATA_AM = '1' or DDATA_AM = '1' then -- Reset in command state T2_VERIFY_AM. + DELCNT := (others => '0'); + else + case CMD_STATE is + -- Time delays work on CLK edges. + when DELAY_15MS | T1_CHECK_DIR | T1_STEP_DELAY | T1_VERIFY_DELAY => + DELCNT := DELCNT + '1'; + -- Bit count delays work on data strobes. + -- Read from disk operation: + when T1_SCAN_TRACK | T1_SCAN_CRC | T1_VERIFY_CRC | T2_SCAN_TRACK | T2_SCAN_SECT | + T2_SCAN_LEN | T2_VERIFY_CRC_1 | T2_VERIFY_AM | T2_FIRSTBYTE | + T2_NEXTBYTE | T2_VERIFY_CRC_2 | T3_SHIFT | T3_SHIFT_ADR | T3_VERIFY_CRC => + if DATA_STRB = '1' then + DELCNT := DELCNT + '1'; + end if; + -- Write to disk operation: + when T2_DELAY_B2 | T2_DELAY_B8 | T2_WR_LEADIN | + T2_WR_AM | T2_DELAY_B1 |T2_DELAY_B11 | T2_WR_BYTE | T2_DATALOST | + T2_WR_CRC | T2_WR_FF | T3_DELAY_B3 | T3_WR_DATA | T3_DATALOST => + if DATA_STRB = '1' then + DELCNT := DELCNT + '1'; + end if; + when others => + DELCNT := (others => '0'); -- Clear the delay counter if not used. + end case; + end if; + end if; + + case CMD_STATE is + when DELAY_15MS | T1_VERIFY_DELAY => + case DELCNT is + --when x"75300" => DELAY <= true; -- 30ms + when x"3A980" => DELAY <= true; -- 15ms, thanks to L. Amsdon. + when others => DELAY <= false; + end case; + when T1_CHECK_DIR => + if DDEn = '1' and DELCNT = x"00300" then -- 48us in FM + DELAY <= true; + elsif DDEn = '0' and DELCNT = x"00180" then -- 24us in MFM. + DELAY <= true; + else + DELAY <= false; + end if; + when T1_STEP_DELAY => + if CMD(1 downto 0) = "11" and DELCNT >= x"0BB80" then -- 3ms + DELAY <= true; + elsif CMD(1 downto 0) = "10" and DELCNT >= x"07D00" then -- 2ms + DELAY <= true; + elsif CMD(1 downto 0) = "01" and DELCNT >= x"2EE00" then -- 12ms + DELAY <= true; + elsif CMD(1 downto 0) = "00" and DELCNT >= x"17700" then -- 6ms + DELAY <= true; + else + DELAY <= false; + end if; + when T1_SCAN_TRACK | T2_SCAN_TRACK | T2_SCAN_LEN | T2_FIRSTBYTE | T2_NEXTBYTE | + T2_WR_BYTE | T2_DATALOST | T2_WR_FF | T3_DATALOST | T3_SHIFT_ADR => + case DELCNT is + when x"00008" => DELAY <= true; -- The delay in this case is 8 bit times. + when others => DELAY <= false; + end case; + when T1_SCAN_CRC => + case DELCNT is + when x"00018" => DELAY <= true; -- Scan for 3 bytes. + when others => DELAY <= false; + end case; + when T2_WR_AM => + if DDEn = '1' and DELCNT = x"00008" then -- Wait for 8 address mark bits (FM mode). + DELAY <= true; + elsif DDEn = '0' and DELCNT = x"00020" then -- Wait for 32 sync and address mark bits (MFM mode). + DELAY <= true; + else + DELAY <= false; + end if; + when T2_VERIFY_AM => + if DDEn = '1' and DELCNT >= x"00148" then -- FM mode. + DELAY <= true; -- (11+6+1)+1 = 19 Byte Times, plus 10 Byte times uncertainty. + elsif DDEn = '0' and DELCNT >= x"00188" then -- MFM mode. + DELAY <= true; -- (22+12+3+1)+1 = 39 Byte Times, plus 10 Byte times uncertainty. + else + DELAY <= false; + end if; + when T2_WR_LEADIN => + if DDEn = '1' and DELCNT = x"00030" then -- Scan for 48 zero bits in FM mode. + DELAY <= true; + elsif DDEn = '0' and DELCNT = x"00060" then -- Scan for 96 zero bits in MFM mode. + DELAY <= true; + else + DELAY <= false; + end if; + when T2_DELAY_B1 => + case DELCNT is + when x"00008" => DELAY <= true; -- Delay is 1 byte. + when others => DELAY <= false; + end case; + when T3_DELAY_B3 => + case DELCNT is + when x"00018" => DELAY <= true; -- Delay is 3 bytes. + when others => DELAY <= false; + end case; + when T2_DELAY_B8 => + case DELCNT is + when x"00040" => DELAY <= true; -- Delay is 8 bytes. + when others => DELAY <= false; + end case; + when T2_DELAY_B11 => + case DELCNT is + when x"00058" => DELAY <= true; -- Delay is 11 bytes. + when others => DELAY <= false; + end case; + when T2_VERIFY_CRC_2 => + -- In this state the original WD1772 state machine causes the CRC data to appear 1 byte + -- too early. The reason is the construction of the states T2_LOAD_DATA and T2_NEXTBYTE + -- where the length counter and the DRQ flag are serviced in T2_LOAD_DATA. Therefore the + -- delay is only 1 byte instead of 2. + case DELCNT is + when x"00008" => DELAY <= true; -- Scan for 2 bytes but wait only 1 byte. + when others => DELAY <= false; + end case; + when T1_VERIFY_CRC | T2_SCAN_SECT | T2_VERIFY_CRC_1 | T2_DELAY_B2 | T2_WR_CRC | T3_VERIFY_CRC => + case DELCNT is + when x"00010" => DELAY <= true; -- Scan for 2 bytes (e. g. side and sector in T2_SCAN_SECT). + when others => DELAY <= false; + end case; + when T3_WR_DATA => + if T3_DATATYPE = x"F7" and DELCNT = x"00010" then -- Wait for 16 CRC bits. + DELAY <= true; + elsif T3_DATATYPE /= x"F7" and DELCNT = x"00008" then -- Wait for 8 data bits. + DELAY <= true; + else + DELAY <= false; + end if; + when T3_SHIFT => + case DELCNT is + when x"00001" => DELAY <= true; -- Scan just one data bit. + when others => DELAY <= false; + end case; + when others => + DELAY <= false; + end case; + end process P_DELAY; + + INDEX_COUNTER: process(RESETn, CLK, CMD_STATE) + -- This process is intended to control some command states via the index pulse behavior. + -- In the original WD177x there is foreseen a delay of several index pulses (about 1s). + -- It is achieved by counting the index pulses of the disk. This encounters problems, + -- if the disk is not inserted. For this reason there is additionally to the index counter + -- a timeout which is active if there are no index pulses. + variable CNT : std_logic_vector(3 downto 0); + variable TIMEOUT : std_logic_vector(27 downto 0); + variable LOCK : boolean; + begin + if RESETn = '0' then + CNT := x"0"; + TIMEOUT := (others => '0'); + LOCK := false; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + -- Be aware that there must sometimes checked several states for the presence of IPn! + when SPINUP | T1_SPINDOWN | T1_SCAN_TRACK | T1_SCAN_CRC | T1_VERIFY_CRC | + T2_INIT | T2_SCAN_TRACK | T2_SCAN_SECT |T2_SCAN_LEN | T2_VERIFY_CRC_1 | T3_RD_ADR | T3_VERIFY_AM => + if IPn = '0' and LOCK = false then -- Count the index pulses. + CNT := CNT + '1'; + LOCK := true; + elsif IPn = '1' then + LOCK := false; + end if; + -- + if TIMEOUT < x"17FFFFF" then -- Timeout of about 1.5s. + TIMEOUT := TIMEOUT + '1'; + end if; + when others => + CNT := x"0"; + TIMEOUT := (others => '0'); + end case; + end if; + -- + if CMD_STATE = SPINUP and (CNT = "110" or TIMEOUT = x"17FFFFF") then -- 6 pulses or timeout. + INDEX_CNT <= true; + elsif CMD_STATE = T1_SPINDOWN and (CNT = "110" or TIMEOUT = x"17FFFFF") then -- 6 pulses or timeout. + INDEX_CNT <= true; + elsif CMD_STATE = T2_INIT and (CNT = "101" or TIMEOUT = x"17FFFFF") then -- 5 pulses or timeout. + INDEX_CNT <= true; + elsif CMD_STATE = T3_RD_ADR and (CNT = "110" or TIMEOUT = x"17FFFFF") then -- 6 pulses or timeout. + INDEX_CNT <= true; + else + INDEX_CNT <= false; + end if; + end process INDEX_COUNTER; + + P_INDEX_MARK: process + -- This process controls the occurence of an index pulse during read track + -- and write track commands. The flag INDEX_MARK is cleared at the + -- beginning of these two commands during the first check for an index + -- pulse and is set right after the next index pulse occurs, which means + -- track processing has completed. + variable LOCK: boolean; + begin + wait until CLK = '1' and CLK' event; + if CMD_STATE = T3_RD_TRACK and IPn = '0' then + INDEX_MARK <= '0'; -- Reset the flag. + LOCK := true; + elsif CMD_STATE = T3_CHECK_INDEX_1 and IPn = '0' then + INDEX_MARK <= '0'; -- Reset the flag. + LOCK := true; + elsif IPn = '0' and LOCK = false then + INDEX_MARK <= '1'; -- Index pulse has passed. + LOCK := true; + elsif IPn = '1' then + LOCK := false; + end if; + end process P_INDEX_MARK; + + P_T3_DATATYPE: process(RESETn, CLK) + -- In type 3 write track command, it is necessary to store the information, which data + -- has to be written to disk (in command state T3_WR_DATA. This information is sampled + -- in the command state T3_LOAD_SHFT which preceeds the command state T3_WR_DATA. + begin + if RESETn = '0' then + T3_DATATYPE <= x"00"; + elsif CLK = '1' and CLK' event then + if CMD_STATE = T3_LOAD_SHFT then + T3_DATATYPE <= DR; + end if; + end if; + end process P_T3_DATATYPE; + + CNT_T3BYTES: process(RESETn, CLK, CMD_STATE) + -- This process counts the bytes read in the type III read address + -- command during the command states T3_SHIFT_ADR, T3_LOAD_DATA2, + -- T3_SET_DRQ_2 and T3_CHECK_RD. + variable CNT : std_logic_vector(2 downto 0); + begin + if RESETn = '0' then + CNT := "000"; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when T3_VERIFY_AM => + CNT := "000"; -- Clear the counter right befor the count operation. + when T3_SET_DRQ_2 => + CNT := CNT + '1'; -- Increment after each read cycle. + when others => + null; + end case; + end if; + case CNT is + when "100" => T3_TRADR <= true; + when others => T3_TRADR <= false; + end case; + end process CNT_T3BYTES; + + BYTEASMBLY: process(RESETn, CLK) + -- This process controls the condition in the CMD_STATE T3_CHECK_DR. + -- Therefore the bits shifted into the DSR in command state T3_SHIFT are counted. + -- The count condition is entering the command state T3_CHECK_INDEX_3. The clear + -- condition is either the command state IDLE or the command state T3_CHECK_DR. + variable CNT : std_logic_vector(3 downto 0); + begin + if RESETn = '0' then + CNT := x"0"; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when IDLE => CNT := x"0"; + when T3_CHECK_INDEX_3 => CNT := CNT + '1'; + when T3_CHECK_DR => CNT := (others => '0'); + when others => null; + end case; + end if; + case CNT is + when x"8" => BYTE_RDY <= true; + when others => BYTE_RDY <= false; + end case; + end process BYTEASMBLY; + + P_DIR: process(RESETn, CLK, DIR) + -- This portion of code is responsible to control the right stepping + -- direction in type I commands. + begin + if RESETn = '0' then + DIR <= '0'; + elsif CLK = '1' and CLK' event then + if CMD_STATE = DECODE and CMD(7 downto 5) = "010" then -- Step in. + DIR <= '1'; + elsif CMD_STATE = DECODE and CMD(7 downto 5) = "011" then -- Step out. + DIR <= '0'; + elsif CMD_STATE = T1_COMP_TR_DSR and DSR > TR then -- Seek. + DIR <= '1'; + elsif CMD_STATE = T1_COMP_TR_DSR and DSR < TR then -- Seek. + DIR <= '0'; + end if; + end if; + DIRC <= DIR; -- Copy signal to the output. + end process P_DIR; + + P_DRQ: process(RESETn, CLK, DRQ_I) + begin + if RESETn = '0' then + DRQ_I <= '0'; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when INIT => + DRQ_I <= '0'; + when T2_LOAD_DATA | T2_SET_DRQ | T2_LOAD_SHFT => + DRQ_I <= '1'; + when T3_WR | T3_LOAD_SHFT | T3_SET_DRQ_1 | T3_SET_DRQ_2 => + DRQ_I <= '1'; + when others => + null; + end case; + -- The data request bit is also cleared by reading or writing the + -- data register (direct memory access operation). + if (DATA_RD = true or DATA_WR = true) then + DRQ_I <= '0'; + end if; + end if; + -- + DRQ <= DRQ_I; -- Copy to entity. + -- + end process P_DRQ; + + -- The DRQ_IPn detects the index pulse during type I commands and a forced interrupt or + -- DRQ during type II and III commands. + -- The index pulse flag is active high and can be used for the detection of an inserted disk. + DRQ_IPn <= not IPn when CMD(7) = '0' else + not IPn when CMD(7 downto 4) = x"D" and BUSY = '0' else DRQ_I; + + P_BUSY: process(RESETn, CLK) + begin + if RESETn = '0' then + BUSY <= '0'; + elsif CLK = '1' and CLK' event then + -- During forced interrupt, the busy flag is reset when the command + -- state machine enters the IDLE state. + if CMD_STATE = INIT then + BUSY <= '1'; -- set BUSY flag for all command types I ... III. + elsif CMD_STATE = IDLE then + BUSY <= '0'; -- Reset BUSY after entering IDLE in any case. + end if; + end if; + end process P_BUSY; + + P_SEEK_RNF: process(RESETn, CLK) + -- Seek error or record not found error flag. + begin + if RESETn = '0' then + SEEK_RNF <= '0'; + elsif CLK = '1' and CLK' event then + if CMD_STATE = INIT then + SEEK_RNF <= '0'; -- Clear the flag for all command types I ... III. + elsif CMD_STATE = T1_TRAP and STEP_TRAP = true then + SEEK_RNF <= '1'; -- Seek error (SEEK). + elsif CMD_STATE = T1_SPINDOWN and INDEX_CNT = true then + SEEK_RNF <= '1'; -- Seek error (SEEK). + elsif CMD_STATE = T2_INIT and INDEX_CNT = true then + SEEK_RNF <= '1'; -- Record not found (RNF). + elsif CMD_STATE = T3_RD_ADR and INDEX_CNT = true then + SEEK_RNF <= '1'; -- Record not found (RNF). + end if; + end if; + end process P_SEEK_RNF; + + P_INTRQ: process(RESETn, CLK) + begin + if RESETn = '0' then + INTRQ <= '0'; + elsif CLK = '1' and CLK' event then + -- Interrupt reset conditions: + if STAT_RD = true and CMD /= x"D8" then + -- No clear during immediately forced interrupt. + INTRQ <= '0'; -- Clear the flag when status register is read. + elsif CMD_WR = true and CMD = x"D0" then + -- Clear with the next write access to the command register after the + -- forced interrupt x"D0" was written. + INTRQ <= '0'; + elsif CMD_STATE = INIT and CMD(7 downto 6) /= "11" then + INTRQ <= '0'; -- Clear the flag for type I and type II commands during start of execution. + -- Interrupt set conditions. + elsif CMD = x"D8" and CMD_STATE = IDLE then + INTRQ <= '1'; -- Force interrupt immediately (after the break took affect). + elsif CMD = x"D4" and IPn = '0' and CMD_STATE = IDLE then + INTRQ <= '1'; -- Force interrupt on next index pulse (after the break took affect). + elsif CMD_STATE = T1_TRAP and STEP_TRAP = true then + INTRQ <= '1'; -- Indicate interrupt request due to seek error. + elsif CMD_STATE = T1_VERIFY_DELAY and CMD(2) = '0' then + INTRQ <= '1'; -- Indicate interrupt: command finished or interrupted. + elsif CMD_STATE = T1_SPINDOWN and INDEX_CNT = true then + INTRQ <= '1'; -- Indicate interrupt request, reason: seek error. + elsif CMD_STATE = T1_VERIFY_CRC and CRC_ERR = '0' then + INTRQ <= '1'; -- Indicate interrupt request; command correct, no CRC error. + elsif CMD_STATE = T2_RD_WR_SECT and CMD(7 downto 5) = "101" and WPRTn = '0' then + INTRQ <= '1'; -- Indicate interrupt request because disk is write protected. + elsif CMD_STATE = T2_INIT and INDEX_CNT = true then + INTRQ <= '1'; -- Indicate interrupt request, reason: timeout. + elsif CMD_STATE = T2_VERIFY_CRC_2 and DELAY = true and CRC_ERR = '1' then + INTRQ <= '1'; -- Indicate interrupt request due to CRC error. + elsif CMD_STATE = T2_MULTISECT and CMD(4) = '0' then + INTRQ <= '1'; -- Indicate interrupt request, command correct finished. + elsif CMD_STATE = T2_VERIFY_DRQ_2 and DRQ_I = '1' then + INTRQ <= '1'; -- Indicate interrupt request, reason: lost data. + elsif CMD_STATE = T3_WR and WPRTn = '0' then + INTRQ <= '1'; -- Indicate interrupt request, reason: disk is write protected. + elsif CMD_STATE = T3_VERIFY_DRQ and DRQ_I = '1' then + INTRQ <= '1'; -- Indicate interrupt request due to lost data. + elsif CMD_STATE = T3_CHECK_INDEX_2 and INDEX_MARK = '1' then + INTRQ <= '1'; -- Indicate interrupt request, reason: command finished correctly. + elsif CMD_STATE = T3_CHECK_INDEX_3 and INDEX_MARK = '1' then + INTRQ <= '1'; -- Indicate interrupt request, reason: command finished correctly. + elsif CMD_STATE = T3_RD_ADR and INDEX_CNT = true then + INTRQ <= '1'; -- Indicate interrupt request because record was not found. + elsif CMD_STATE = T3_VERIFY_CRC then + INTRQ <= '1'; -- Indicate interrupt request; command finished with or without CRC error. + end if; + end if; + end process P_INTRQ; + + P_LOST_DATA_TR00: process(RESETn, CLK) + -- Logic for the status bit number 2: + -- The TRACK00 flag is used to detect wether a floppy disk drive + -- is connected or not. + begin + if RESETn = '0' then + LOST_DATA_TR00 <= '0'; + elsif CLK = '1' and CLK' event then + if CMD(7 downto 4) = x"D" and BUSY = '0' then -- Forced interrupt. + LOST_DATA_TR00 <= not TRACK00n; + elsif CMD_STATE = INIT then + LOST_DATA_TR00 <= '0'; + elsif CMD_STATE = T1_VERIFY_DELAY then + LOST_DATA_TR00 <= not TRACK00n; + elsif CMD_STATE = T2_VERIFY_DRQ_1 and DRQ_I = '1' then + LOST_DATA_TR00 <= '1'; + elsif CMD_STATE = T2_VERIFY_DRQ_2 and DRQ_I = '1' then + LOST_DATA_TR00 <= '1'; + elsif CMD_STATE = T2_VERIFY_DRQ_3 and DRQ_I = '1' then + LOST_DATA_TR00 <= '1'; + elsif CMD_STATE = T3_VERIFY_DRQ and DRQ_I = '1' then + LOST_DATA_TR00 <= '1'; + elsif CMD_STATE = T3_DATALOST then + LOST_DATA_TR00 <= '1'; + elsif CMD_STATE = T3_CHECK_DR and DRQ_I = '1' then + LOST_DATA_TR00 <= '1'; + end if; + end if; + end process P_LOST_DATA_TR00; + + MOTORSWITCH: process(RESETn, CLK) + variable INDEXCNT : std_logic_vector(3 downto 0); + variable LOCK : boolean; + begin + if RESETn = '0' then + MO <= '0'; + INDEXCNT := x"0"; + LOCK := false; + elsif CLK = '1' and CLK' event then + if CMD_STATE /= IDLE then + INDEXCNT := x"9"; -- Initialise the index counter. + LOCK := false; + elsif LOCK = false and IPn = '0' and INDEXCNT > x"0" then + INDEXCNT := INDEXCNT - '1'; -- Count the index pulses in the IDLE state. + LOCK := true; + elsif IPn = '1' then + LOCK := false; + end if; + -- + if CMD_STATE = INIT and CMD_WR = false then + MO <= '1'; -- Start the motor for all command types I ... III in this state. + elsif INDEXCNT = x"0" then + MO <= '0'; -- The motor stops after 9 index pulses in idle state. + end if; + end if; + end process MOTORSWITCH; + + WRITE_PROTECT: process(RESETn, CLK) + begin + if RESETn = '0' then + WR_PR <= '0'; + elsif CLK = '1' and CLK' event then + if CMD_STATE = INIT and CMD(7) = '1' then + WR_PR <= '0'; -- Clear the flag for type II and type III commands. + elsif CMD_STATE = T2_RD_WR_SECT and WPRTn = '0' then + WR_PR <= '1'; + elsif CMD_STATE = T3_WR and WPRTn = '0' then + WR_PR <= '1'; + end if; + end if; + end process WRITE_PROTECT; + + RECTYPE_SPINUP: process(RESETn, CLK) + begin + if RESETn = '0' then + SPINUP_RECTYPE <= '0'; + elsif CLK = '1' and CLK' event then + if CMD_STATE = INIT then + SPINUP_RECTYPE <= '0'; -- Clear the flag for type II...III commands. + elsif CMD_STATE = SPINUP and CMD(7) = '0' and INDEX_CNT = true then + SPINUP_RECTYPE <= '1'; -- SPINUP SEQUENCE for type I commands has finished. + elsif CMD_STATE = T2_VERIFY_AM and (DATA_AM = '1' or DDATA_AM = '1') then + case DSR is + when x"F8" => SPINUP_RECTYPE <= '1'; -- Deleted data address mark. + when x"FB" => SPINUP_RECTYPE <= '0'; -- Normal data address mark. + when others => null; -- Forbidden, should never appear. + end case; + end if; + end if; + end process RECTYPE_SPINUP; + + WRITEGATE: process(RESETn, CLK) + begin + if RESETn = '0' then + WG <= '0'; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when T2_WR_LEADIN | T3_LOAD_SHFT => + WG <= '1'; + when T2_MULTISECT | IDLE => + WG <= '0'; + when others => + null; + end case; + end if; + end process WRITEGATE; + + RESTORE_TRAP: process(RESETn, CLK) + -- This process is responsible to supervise the RESTORE command. + -- If after 255 stepping pulses no TRACK00n was not detected, the + -- RESTORE command is terminated and the interrupt request and the + -- seek error are set. + variable STEP_CNT : std_logic_vector(7 downto 0); + begin + if RESETn = '0' then + STEP_CNT := (others => '0'); + elsif CLK = '1' and CLK' event then + if CMD_STATE = IDLE then + STEP_CNT := x"00"; + elsif CMD(7 downto 4) /= "0000" then -- No RESTORE command. + STEP_CNT := x"00"; + elsif CMD_STATE = T1_STEP and STEP_CNT < x"FF" then + STEP_CNT := STEP_CNT + '1'; + end if; + end if; + -- + case STEP_CNT is + when x"FF" => STEP_TRAP <= true; + when others => STEP_TRAP <= false; + end case; + end process RESTORE_TRAP; + + STEPPULSE: process(RESETn, CLK) + -- The step pulse duration is in the original WD1772 4us in MFM mode and 8 us. + -- in FM mode This process is responsible to provide the correct pulse lengths. + variable CNT : std_logic_vector(7 downto 0); + begin + if RESETn = '0' then + CNT := (others => '0'); + elsif CLK = '1' and CLK' event then + if CMD_STATE = T1_STEP then + case DDEn is + when '1' => CNT := x"80"; --Start counter for FM step pulse. + when '0' => CNT := x"40"; --Start counter for MFM step pulse. + end case; + elsif CNT > x"00" then + CNT := CNT -1; -- Count 63 or 127 CLK cycles ... + end if; + case CNT is + when x"00" => STEP <= '0'; + when others => STEP <= '1'; --...result in 3.875us or 7.75us pulse. + end case; + end if; + end process STEPPULSE; + + TRACK_MEM: process(RESETn, CLK, TRACKMEM) + -- This process is necessary to store the actual track number in the + -- type III command 'read address' because the track number is written + -- to the sector register some byte times after the detection of the + -- track number from disk. + begin + if RESETn = '0' then + TRACKMEM <= x"00"; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when IDLE => + TRACKMEM <= x"00"; -- Clear the Track memory. + when T3_LOAD_DATA_2 => + TRACKMEM <= DSR; -- Store the actual track number. + when others => + null; + end case; + end if; + TRACK_NR <= TRACKMEM; -- Output the TRACKMEM. + end process TRACK_MEM; + + SECT_LENGTH: process(RESETn, CLK, SECT_LEN) + -- This process supervises the read sector and write sector + -- commands. If the sector read or write are equal to the + -- sector length, the commands read sector and write sector + -- are ready. + begin + if RESETn = '0' then + SECT_LEN <= "00000000000"; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when T2_SCAN_LEN => + -- Bring in the correct sector length. + case DSR(1 downto 0) is + when "00" => SECT_LEN <= "00010000000"; -- 128 Byte per sector. + when "01" => SECT_LEN <= "00100000000"; -- 256 Byte per sector. + when "10" => SECT_LEN <= "01000000000"; -- 512 Byte per sector. + when "11" => SECT_LEN <= "10000000000"; -- 1024 Byte per sector. + when others => SECT_LEN <= "10000000000"; -- Dummy for U, X, Z, W, H, L, -. + end case; + when T2_LOAD_DATA | T2_LOAD_SHFT => + SECT_LEN <= SECT_LEN - '1'; + when others => + null; + end case; + end if; + end process SECT_LENGTH; + + P_CRC_ERR: process(RESETn, CLK) + -- This code checks the CRC status in the right command states + -- and sets or resets the CRC error status flag. + begin + if RESETn = '0' then + CRC_ERRFLAG <= '0'; + elsif CLK = '1' and CLK' event then + case CMD_STATE is + when INIT => + if CMD(7) = '0' then + CRC_ERRFLAG <= '0'; -- Reset for type I commands only. + end if; + when T1_VERIFY_CRC | T2_VERIFY_CRC_1 => + if CRC_ERR = '1' and DELAY = true then + CRC_ERRFLAG <= '1'; -- Set CRC error flag... + elsif CRC_ERR = '0' and DELAY = true then + CRC_ERRFLAG <= '0'; -- ... or reset CRC error flag. + end if; + when T2_VERIFY_CRC_2 | T3_VERIFY_CRC => + if CRC_ERR = '1' and DELAY = true then + -- Set CRC error flag but no reset in here. + -- The CRC is already reset by the previous checks. + CRC_ERRFLAG <= '1'; + end if; + when others => + null; + end case; + end if; + end process P_CRC_ERR; + + CMD_WR <= true when CSn = '0' and A1 = '0' and A0 = '0' and RWn = '0' else false; -- Command register write. + STAT_RD <= true when CSn = '0' and A1 = '0' and A0 = '0' and RWn = '1' else false; -- Status register read. + DATA_WR <= true when CSn = '0' and A1 = '1' and A0 = '1' and RWn = '0' else false; -- Data register write. + DATA_RD <= true when CSn = '0' and A1 = '1' and A0 = '1' and RWn = '1' else false; -- Data register read. + + -- Track register arithmetics controls: + TR_PRES <= '1' when CMD_STATE = T1_SEEK_RESTORE and CMD(7 downto 4) = "0000" else '0'; -- Restore command. + TR_CLR <= '1' when CMD_STATE = T1_HEAD_CTRL and TRACK00n = '0' and DIR = '0' else '0'; + TR_INC <= '1' when CMD_STATE = T1_CHECK_DIR and DELAY = true and DIR = '1' else '0'; + TR_DEC <= '1' when CMD_STATE = T1_CHECK_DIR and DELAY = true and DIR = '0' else '0'; + + -- Sector register arithmetics: + SR_INC <= '1' when CMD_STATE = T2_MULTISECT and CMD(4) = '1' else '0'; -- Multi sector enabled. + SR_LOAD <= '1' when CMD_STATE = T3_LOAD_SR else '0'; + + -- Data register arithmetics controls: + DR_CLR <= '1' when CMD_STATE = T1_SEEK_RESTORE and CMD(7 downto 4) = "0000" else '0'; -- Restore command. + DR_LOAD <= '1' when CMD_STATE = T2_LOAD_DATA else + '1' when CMD_STATE = T3_LOAD_DATA_1 else + '1' when CMD_STATE = T3_LOAD_DATA_2 else '0'; + + -- Shift register arithmetics controls: + -- During type I and type II commands all characters are allowed as data. + -- During the type III write track command, there are some special characters + -- which may not appear as normal data. See the register file for more information. + SHFT_LOAD_SD <= '1' when CMD_STATE = T3_LOAD_SHFT else '0'; -- Special data. + SHFT_LOAD_ND <= '1' when CMD_STATE = T1_LOAD_SHFT else + '1' when CMD_STATE = T2_LOAD_SHFT else '0'; -- Normal data. + + P_CRC_PRES: process(RESETn, CLK) + -- CRC preset during write sector and write track commands. + variable LOCK : boolean; + begin + if RESETn = '0' then + CRC_PRES <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + -- In write track command, the CRC is initialised at the beginning of the + -- first A1 data and released during shifting the CRC out. + if CMD_STATE = T2_WR_AM and LOCK = false then + CRC_PRES <= '1'; -- Write sector command. + LOCK := true; + elsif CMD_STATE = T3_LOAD_SHFT and DR = x"F5" and LOCK = false then -- x"F5" means write A1. + CRC_PRES <= '1'; -- Write track command. + LOCK := true; + elsif CMD_STATE = T2_WR_CRC then + CRC_PRES <= '0'; -- Write sector command. + LOCK := false; + elsif CMD_STATE = T3_LOAD_SHFT and DR = x"F7" then + CRC_PRES <= '0'; -- Write track command. + LOCK := false; + else + CRC_PRES <= '0'; + end if; + end if; + end process P_CRC_PRES; + + -- Write control signals: + AM_2_DISK <= '1' when CMD_STATE = T2_WR_AM else '0'; + FF_2_DISK <= '1' when CMD_STATE = T2_WR_FF else '0'; + DSR_2_DISK <= '1' when CMD_STATE = T2_WR_BYTE else + '1' when CMD_STATE = T3_WR_DATA and T3_DATATYPE /= x"F7" else '0'; -- not during CRC. + CRC_2_DISK <= '1' when CMD_STATE = T2_WR_CRC else + '1' when CMD_STATE = T3_WR_DATA and T3_DATATYPE = x"F7" else '0'; + + -- Write precompensation control: + PRECOMP_EN <= '1' when CMD(7 downto 4) = x"A" and CMD(1) = '0' else -- Write single sector. + '1' when CMD(7 downto 4) = x"B" and CMD(1) = '0' else -- Write multiple sector. + '1' when CMD(7 downto 4) = x"F" and CMD(1) = '0' else '0'; -- Write track. + + -- Disk data flow direction: + DISK_RWn <= -- Write sector command: + '0' when CMD_STATE = T2_WR_LEADIN else + '0' when CMD_STATE = T2_WR_AM else + '0' when CMD_STATE = T2_LOAD_SHFT else + '0' when CMD_STATE = T2_WR_BYTE else + '0' when CMD_STATE = T2_VERIFY_DRQ_3 else + '0' when CMD_STATE = T2_DATALOST else + '0' when CMD_STATE = T2_WRSTAT else + '0' when CMD_STATE = T2_WR_CRC else + '0' when CMD_STATE = T2_WR_FF else + -- Write track command: + '0' when CMD_STATE = T3_LOAD_SHFT else + '0' when CMD_STATE = T3_WR_DATA else + '0' when CMD_STATE = T3_CHECK_INDEX_2 else + '0' when CMD_STATE = T3_DATALOST else '1'; +end BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_crc_logic.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_crc_logic.vhd new file mode 100644 index 0000000..54b2060 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_crc_logic.vhd @@ -0,0 +1,162 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- The CRC cyclic redundancy checker unit. Further description ---- +---- see below. ---- +---- ---- +---- Working principle of the CRC generator and verify unit: ---- +---- During read operation: ---- +---- The CRC generator is switched on via after the detection of ---- +---- the address ID of the data ID mark. The CRC generation last ---- +---- in case of the address ID until the lenght byte is read. ---- +---- In case of generation after the data address mark the CRC ---- +---- generator is activated until the last data byte is read. ---- +---- The number of data bytes to be read depends on the LENGHT ---- +---- information in the header file. After generation of the CRC ---- +---- the CRC_GEN is switched off and the VERIFY procedure begins ---- +---- by activating CRC_VERIFY. The previously generated CRC is ---- +---- then compared (serially) with the two consecutive read CRC ---- +---- bytes. The CRC error appeas, when the comparision fails. ---- +---- During write operation: ---- +---- The CRC generator is switched on via after the detection of ---- +---- the address ID of the data ID mark. The CRC generation last ---- +---- in case of the address ID until the lenght byte is read. ---- +---- In case of generation after the data address mark the CRC ---- +---- generator is activated until the last data byte is read. ---- +---- The number of data bytes to be read depends on the LENGHT ---- +---- information in the header file. After the generation of the ---- +---- two CRC bytes, the write out process begins by activating ---- +---- CRC_SHFTOUT. The CRC data appears in this case serially on ---- +---- the CRC_SDOUT. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- CRC_SHIFT has now synchronous reset to meeet preset behaviour. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_CRC_LOGIC is + port( + -- System control + CLK : in bit; + RESETn : in bit; + DISK_RWn : in bit; + + -- Preset controls: + DDEn : in bit; + ID_AM : in bit; + DATA_AM : in Bit; + DDATA_AM : in Bit; + + -- CRC unit: + SD : in bit; -- Serial data input. + CRC_STRB : in bit; -- Data strobe. + CRC_2_DISK : in bit; -- Forces the unit to flush the CRC remainder. + CRC_PRES : in bit; -- Presets the CRC unit during write to disk. + CRC_SDOUT : out bit; -- Serial data output. + CRC_ERR : out bit -- Indicates CRC error. + ); +end WF1772IP_CRC_LOGIC; + +architecture BEHAVIOR of WF1772IP_CRC_LOGIC is +signal CRC_SHIFT : bit_vector(15 downto 0); +begin + P_CRC: process + -- The shift register is initialised with appropriate values in HD or DD mode. + -- In theory the shift register should be preset to ones. Due to a latency of one byte + -- in FM mode or 4 bytes in MFM mode it is necessary to preset the shift register with + -- the CRC values of this ID address mark, data address mark and the A1 sync bytes. The + -- latency is caused by the addressmark detector which needs one or 4 byte time(s) for + -- detection. The CRC unit therefore starts with every detection of an address mark and + -- ends if the CRC unit is flushed. + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + CRC_SHIFT <= (others => '1'); + elsif CRC_2_DISK = '1' then + if CRC_STRB = '1' then + CRC_SHIFT <= CRC_SHIFT(14 downto 0) & '0'; + end if; + elsif CRC_PRES = '1' then -- Preset during write sector or write track command. + CRC_SHIFT <= x"FFFF"; + elsif DDEn = '1' and ID_AM = '1' then -- DD mode and ID address mark detected. + CRC_SHIFT <= x"EF21"; -- The CRC-CCITT for data x"FE" is x"EF21" + elsif DDEn = '1' and DATA_AM = '1' then -- DD mode and data address mark detected. + CRC_SHIFT <= x"BF84"; -- The CRC-CCITT for data x"FB" is x"BF84" + elsif DDEn = '1' and DDATA_AM = '1' then -- DD mode and deleted data address mark detected. + CRC_SHIFT <= x"8FE7"; -- The CRC-CCITT for data x"F8" is x"8FE7" + elsif DDEn = '0' and ID_AM = '1' then -- HD mode and ID address mark detected. + CRC_SHIFT <= x"B230"; -- The CRC-CCITT for data x"A1A1A1FE" is x"B230" + elsif DDEn = '0' and DATA_AM = '1' then -- HD mode and data address mark detected. + CRC_SHIFT <= x"E295"; -- The CRC-CCITT for data x"A1A1A1FB" is x"E295" + elsif DDEn = '0' and DDATA_AM = '1' then -- HD mode and deleted data address mark detected. + CRC_SHIFT <= x"D2F6"; -- The CRC-CCITT for data x"A1A1A1F8" is x"D2F6" + elsif CRC_STRB = '1' then + -- CRC-CCITT (xFFFF): + -- the polynomial is G(x) = x^16 + x^12 + x^5 + 1 + -- In this mode the CRC is encoded. In read from disk mode, the encoding works as CRC + -- verification. In this operating condition the ID or the data field is compared + -- against the CRC checksum. if there are no errors, the shift register's value is + -- x"0000" after the last bit of the checksum is shifted in. In write to disk mode the + -- CRC linear feedback shift register (lfsr) works to generate the CRC remainder of the + -- ID or data field. + CRC_SHIFT <= CRC_SHIFT(14 downto 12) & (CRC_SHIFT(15) xor CRC_SHIFT(11) xor SD) & + CRC_SHIFT(10 downto 5) & (CRC_SHIFT(15) xor CRC_SHIFT(4) xor SD) & + CRC_SHIFT(3 downto 0) & (CRC_SHIFT(15) xor SD); + end if; + end process P_CRC; + + CRC_SDOUT <= CRC_SHIFT(15); + CRC_ERR <= '0' when CRC_SHIFT = x"0000" else '1'; +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_digital_pll.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_digital_pll.vhd new file mode 100644 index 0000000..95ce08c --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_digital_pll.vhd @@ -0,0 +1,426 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- The digital PLL is responsible to detect the incoming serial ---- +---- data stream and provide a system clock synchronous signal ---- +---- containing the data and clock information. ---- +---- To understand how the code works in detail refer to the free ---- +---- US patent no. 4,780,844. ---- +---- ---- +---- Attention: The settings for TOP and BOTTOM, which control ---- +---- the PLL frequency and for PHASE_CORR which control the PLL ---- +---- phase are rather critical for a good read condition! To test ---- +---- the PLL in the WD1772 compatible core do the following: ---- +---- Sample on an oscilloscope on one channel the falling edge of ---- +---- the RDn pulse and on the other channel the PLL_DSTRB. The ---- +---- RDn must be located exactly between the PLL_DSTRB pulses. ---- +---- Otherwise, the parameters TOP, BOTTOM and PHASE_CORR have to ---- +---- be optimized. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release: the MFM portion for HD and DD floppies is tested. +-- The FM mode (DDEn = '1') is not completely tested due to lack of FM +-- drives. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K7B 2006/12/29 WF +-- Introduced several improvements based on a very good examination +-- of the pll code by Jean Louis-Guerin. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K8B 2008/12/24 WF +-- Improvement of the INPORT process. +-- Bugfix of the FREQ_AMOUNT counter: now stops if its value is zero. +-- Several changes concerning the PLL parameters to improve the +-- stability of the PLL. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_DIGITAL_PLL is + generic( + -- The valid range of the period counter of the PLL is given by the TOP and BOTTOM + -- limits. The counter range is therefore BOTTOM <= counter value <= TOP. + -- The generic PHASE_CORR is responsible fo the center setting of PLL_DSTRB concerning + -- the RDn period. + -- The nominal frequency setting is 128. So it is recommended to use TOP and BOTTOM + -- settings symmetrically around 128. If TOP = BOTTOM = 128, the frequency control + -- is disabled. TOP + PHASE_CORR may not exceed a value of 255. BOTTOM - PHASE_CORR + -- may not drop below zero. + TOP : integer range 0 to 255 := 152; -- +18.0% + BOTTOM : integer range 0 to 255 := 104; -- -18.0% + PHASE_CORR : integer range 0 to 128 := 75 + ); + port( + -- System control + CLK : in bit; -- 16MHz clock. + RESETn : in bit; + + -- Controls + DDEn : in bit; -- Double density enable. + HDTYPE : in bit; -- This control is '1' when HD disks are inserted. + DISK_RWn : in bit; -- Read write control. + + -- Data and clock lines + RDn : in bit; -- Read signal from the disk. + PLL_D : out bit; -- Synchronous read signal. + PLL_DSTRB : out bit -- Read strobe. + ); +end WF1772IP_DIGITAL_PLL; + +architecture BEHAVIOR of WF1772IP_DIGITAL_PLL is +signal RD_In : bit; +signal UP, DOWN : bit; +signal PHASE_DECREASE : bit; +signal PHASE_INCREASE : bit; +signal HI_STOP, LOW_STOP : bit; +signal PER_CNT : std_logic_vector(7 downto 0); +signal ADDER_IN : std_logic_vector(7 downto 0); +signal ADDER_MSBs : bit_vector(2 downto 0); +signal RD_PULSE : bit; +signal ROLL_OVER : bit; +signal HISTORY_REG : bit_vector(1 downto 0); +signal ERROR_HISTORY : integer range 0 to 2; +begin + INPORT: process + -- This process is necessary due to the poor quality of the rising + -- edge of RDn. Let it work on the negative clock edge. + begin + wait until CLK = '0' and CLK' event; + RD_In <= RDn; + end process INPORT; + + EDGEDETECT: process(RESETn, CLK) + -- This process forms a falling edge detector for the incoming + -- data read port. The output (RD_PULSE) goes high for exactly + -- one clock period after the RDn is low and the positive + -- clock edge is detected. + variable LOCK : boolean; + begin + if RESETn = '0' then + RD_PULSE <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + if DISK_RWn = '0' then -- Disable detector in write mode. + RD_PULSE <= '0'; + elsif RD_In = '0' and LOCK = false then + RD_PULSE <= '1'; -- READ_PULSE is inverted against RDn + LOCK := true; + elsif RD_In = '1' then + LOCK := false; + RD_PULSE <= '0'; + else + RD_PULSE <= '0'; + end if; + end if; + end process EDGEDETECT; + + PERIOD_CNT: process(RESETn, CLK) + -- This process provides the nominal variable added to the adder. To achieve a good + -- settling time of the PLL in all cases, the period counter is controlled via the DDEn + -- and HDTYPE flags respective to its added value. Be aware, that in case of adding "10" + -- or "11", the TOP value may be exceeded or the period counter may drop below the BOTTOM + -- value. The higher the value added, the faster will be the settling time of phase locked + -- loop . + begin + if RESETn = '0' then + PER_CNT <= "10000000"; -- Initial value is 128. + elsif CLK = '1' and CLK' event then + if UP = '1' then + PER_CNT <= PER_CNT + '1'; + elsif DOWN = '1' then + PER_CNT <= PER_CNT - '1'; + end if; + end if; + end process PERIOD_CNT; + + HI_STOP <= '1' when PER_CNT >= TOP else '0'; + LOW_STOP <= '1' when PER_CNT <= BOTTOM else '0'; + + ADDER_IN <= -- This DISK_RWn = '0' implementation keeps the last phase information + -- of the PLL in read from disk mode. It should be a good solution concer- + -- ning alternative read write cycles. + "10000000" when DISK_RWn = '0' else -- Nominal value for write to disk. + PER_CNT + PHASE_CORR when PHASE_INCREASE = '1' else -- Phase lags. + PER_CNT - PHASE_CORR when PHASE_DECREASE = '1' else -- Phase leeds. + PER_CNT; -- No phase correction; + + ADDER: process(RESETn, CLK, DDEn, HDTYPE) + -- Clock adjustment: The clock cycle is 62.5ns for the 16MHz system clock. + -- The offset (LSBs) of the adder input is chosen to be conform with the required + -- rollover period in the different DDEn and HDTYPE modi as follows: + -- With a nominal adder input term of 128: + -- The adder rolls over every 4us for DDEn = 1 and HDTYPE = 0. + -- The adder rolls over every 2us for DDEn = 1 and HDTYPE = 1. + -- The adder rolls over every 2us for DDEn = 0 and HDTYPE = 0. + -- The adder rolls over every 1us for DDEn = 0 and HDTYPE = 1. + -- The given times are the half of a data period time in MFM or FM. + variable ADDER_DATA : std_logic_vector(12 downto 0); + begin + if RESETn = '0' then + ADDER_DATA := (others => '0'); + elsif CLK = '1' and CLK' event then + ADDER_DATA := ADDER_DATA + ADDER_IN; + end if; + -- + case DDEn & HDTYPE is + when "01" => -- MFM mode using HD disks, results in 1us inspection period: + ADDER_MSBs <= To_BitVector(ADDER_DATA(10 downto 8)); + when "00" => -- MFM mode using DD disks, results in 2us inspection period: + ADDER_MSBs <= To_BitVector(ADDER_DATA(11 downto 9)); + when "11" => -- FM mode using HD disks, results in 2us inspection period: + ADDER_MSBs <= To_BitVector(ADDER_DATA(11 downto 9)); + when "10" => -- FM mode using DD disks, results in 4us inspection period: + ADDER_MSBs <= To_BitVector(ADDER_DATA(12 downto 10)); + end case; + end process ADDER; + + ROLLOVER: process(RESETn, CLK) + -- This process forms a falling edge detector for the detection + -- of the adder's rollover time. The output goes low for exactly + -- one clock period after the rollover is detected and the positive + -- clock edge appears. + variable LOCK : boolean; + begin + if RESETn = '0' then + ROLL_OVER <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + if ADDER_MSBs /= "111" and LOCK = false then + ROLL_OVER <= '1'; + LOCK := true; + elsif ADDER_MSBs = "111" then + LOCK := false; + ROLL_OVER <= '0'; + else + ROLL_OVER <= '0'; + end if; + end if; + end process ROLLOVER; + PLL_DSTRB <= ROLL_OVER; + + DATA_FLIP_FLOP: process(RESETn, CLK, RD_PULSE) + -- This flip-flop is responsible for 'catching' the read pulses of the + -- serial data input. + begin + if RESETn = '0' then + PLL_D <= '0'; -- Asynchronous reset. + elsif CLK = '1' and CLK' event then + if RD_PULSE = '1' then + PLL_D <= '1'; -- Read pulse detected. + elsif ROLL_OVER = '1' then + PLL_D <= '0'; + end if; + end if; + end process DATA_FLIP_FLOP; + + WIN_HISTORY: process(RESETn, CLK) + begin + if RESETn = '0' then + HISTORY_REG <= "00"; + elsif CLK = '1' and CLK' event then + if RD_PULSE = '1' then + HISTORY_REG <= ADDER_MSBs(2) & HISTORY_REG(1); + end if; + end if; + end process WIN_HISTORY; + + -- Error history: + -- This signal indicates the number of consequtive levels of the adder's + -- MSB and the history register as shown in the following table. The default + -- setting of 0 was added to compile with the Xilinx ISE. + ERROR_HISTORY <= 2 when ADDER_MSBs(2) = '0' and HISTORY_REG = "00" else -- Speed strongly up. + 1 when ADDER_MSBs(2) = '0' and HISTORY_REG = "01" else -- Speed up. + 0 when ADDER_MSBs(2) = '0' and HISTORY_REG = "10" else -- o.k. + 0 when ADDER_MSBs(2) = '0' and HISTORY_REG = "11" else -- Now adjusted. + 0 when ADDER_MSBs(2) = '1' and HISTORY_REG = "00" else -- Now adjusted. + 0 when ADDER_MSBs(2) = '1' and HISTORY_REG = "01" else -- o.k. + 1 when ADDER_MSBs(2) = '1' and HISTORY_REG = "10" else -- Slow down. + 2 when ADDER_MSBs(2) = '1' and HISTORY_REG = "11" else 0; -- Slow strongly down. + + FREQUENCY_DECODER: process(RESETn, CLK, HI_STOP, LOW_STOP) + -- The frequency decoder controls the period of the data inspection window respective to the + -- ERROR_HISTORY for the 11 bit adder is as follows: + -- ERROR_HISTORY = 0: + -- -> no correction necessary <- + -- ERROR_HISTORY = 1: + -- MSBs input: 7 6 5 4 3 2 1 0 + -- Correction output: -3 -2 -1 0 0 +1 +2 +3 + -- ERROR_HISTORY = 2: + -- MSBs input: 7 6 5 4 3 2 1 0 + -- Correction output: -4 -3 -2 -1 +1 +2 +3 +4 + -- The most significant bit of the FREQ_AMOUNT controls incrementation or decrementation + -- of the adder (0 is up). + variable FREQ_AMOUNT: std_logic_vector(3 downto 0); + begin + if RESETn = '0' then + FREQ_AMOUNT := "0000"; + elsif CLK = '1' and CLK' event then + if RD_PULSE = '1' then -- Load the frequency amount register. + case ERROR_HISTORY is + when 2 => + case ADDER_MSBs is + when "000" => FREQ_AMOUNT := "0100"; + when "001" => FREQ_AMOUNT := "0011"; + when "010" => FREQ_AMOUNT := "0010"; + when "011" => FREQ_AMOUNT := "0001"; + when "100" => FREQ_AMOUNT := "1001"; + when "101" => FREQ_AMOUNT := "1010"; + when "110" => FREQ_AMOUNT := "1011"; + when "111" => FREQ_AMOUNT := "1100"; + end case; + when 1 => + case ADDER_MSBs is + when "000" => FREQ_AMOUNT := "0011"; + when "001" => FREQ_AMOUNT := "0010"; + when "010" => FREQ_AMOUNT := "0001"; + when "011" => FREQ_AMOUNT := "0000"; + when "100" => FREQ_AMOUNT := "1000"; + when "101" => FREQ_AMOUNT := "1001"; + when "110" => FREQ_AMOUNT := "1010"; + when "111" => FREQ_AMOUNT := "1011"; + end case; + when others => + FREQ_AMOUNT := "0000"; + end case; + elsif FREQ_AMOUNT(2 downto 0) > "000" then + FREQ_AMOUNT := FREQ_AMOUNT - '1'; -- Modify the frequency amount register. + end if; + end if; + -- + if FREQ_AMOUNT(3) = '0' and FREQ_AMOUNT(2 downto 0) /= "000" and HI_STOP = '0' then + -- FREQ_AMOUNT(3) = '0' means Frequency is too low. Count up when counter is not at HI_STOP. + UP <= '1'; + DOWN <= '0'; + elsif FREQ_AMOUNT(3) = '1' and FREQ_AMOUNT (2 downto 0) /= "000" and LOW_STOP = '0' then + -- FREQ_AMOUNT(3) = '1' means Frequency is too high. Count down when counter is not at LOW_STOP. + UP <= '0'; + DOWN <= '1'; + else + UP <= '0'; + DOWN <= '0'; + end if; + end process FREQUENCY_DECODER; + + PHASE_DECODER: process(RESETn, CLK) + -- The phase decoder depends on the value of ADDER_MSBs. If the phase leeds, the most significant bit + -- of PHASE_AMOUNT indicates with a '0', that the next rollover should appear earlier. In case of a + -- phase lag, the next rollover should come later (indicated by a '1' of the most significant bit of + -- PHASE_AMOUNT). + -- This implementation gives the freedom to adjust the phase amount individually for every mode + -- depending on DDEn and HDTYPE. + variable PHASE_AMOUNT: std_logic_vector(5 downto 0); + begin + if RESETn = '0' then + PHASE_AMOUNT := "000000"; + elsif CLK = '1' and CLK' event then + if RD_PULSE = '1' and DDEn = '1' and HDTYPE = '0' then -- FM mode, single density. + case ADDER_MSBs is -- Multiplier: 4. + when "000" => PHASE_AMOUNT := "010000"; + when "001" => PHASE_AMOUNT := "001101"; + when "010" => PHASE_AMOUNT := "001000"; + when "011" => PHASE_AMOUNT := "000100"; + when "100" => PHASE_AMOUNT := "100100"; + when "101" => PHASE_AMOUNT := "101000"; + when "110" => PHASE_AMOUNT := "101100"; + when "111" => PHASE_AMOUNT := "110000"; + end case; + elsif RD_PULSE = '1' and DDEn = '1' and HDTYPE = '1' then -- FM mode, double density + case ADDER_MSBs is -- Multiplier: 2. + when "000" => PHASE_AMOUNT := "001000"; + when "001" => PHASE_AMOUNT := "000110"; + when "010" => PHASE_AMOUNT := "000100"; + when "011" => PHASE_AMOUNT := "000010"; + when "100" => PHASE_AMOUNT := "100010"; + when "101" => PHASE_AMOUNT := "100100"; + when "110" => PHASE_AMOUNT := "100110"; + when "111" => PHASE_AMOUNT := "101000"; + end case; + elsif RD_PULSE = '1' and DDEn = '0' and HDTYPE = '0' then -- MFM mode, single density + case ADDER_MSBs is -- Multiplier: 2. + when "000" => PHASE_AMOUNT := "000110"; + when "001" => PHASE_AMOUNT := "000100"; + when "010" => PHASE_AMOUNT := "000011"; + when "011" => PHASE_AMOUNT := "000010"; + when "100" => PHASE_AMOUNT := "100010"; + when "101" => PHASE_AMOUNT := "100011"; + when "110" => PHASE_AMOUNT := "100100"; + when "111" => PHASE_AMOUNT := "100110"; + end case; + elsif RD_PULSE = '1' and DDEn = '0' and HDTYPE = '1' then -- MFM mode, double density. + case ADDER_MSBs is -- Multiplier: 1. + when "000" => PHASE_AMOUNT := "000100"; + when "001" => PHASE_AMOUNT := "000011"; + when "010" => PHASE_AMOUNT := "000010"; + when "011" => PHASE_AMOUNT := "000001"; + when "100" => PHASE_AMOUNT := "100001"; + when "101" => PHASE_AMOUNT := "100010"; + when "110" => PHASE_AMOUNT := "100011"; + when "111" => PHASE_AMOUNT := "100100"; + end case; + else -- Modify phase amount register: + if PHASE_AMOUNT(4 downto 0) > x"0" then + PHASE_AMOUNT := PHASE_AMOUNT - 1; + end if; + end if; + end if; + -- + if PHASE_AMOUNT(5) = '0' and PHASE_AMOUNT(4 downto 0) > x"0" then + -- PHASE_AMOUNT(5) = '0' means, that the phase leeds. + PHASE_INCREASE <= '1'; -- Speed phase up, accelerate next rollover. + PHASE_DECREASE <= '0'; + elsif PHASE_AMOUNT(5) = '1' and PHASE_AMOUNT(4 downto 0) > x"0" then + -- PHASE_AMOUNT(5) = '1' means, that the phase lags. + PHASE_INCREASE <= '0'; + PHASE_DECREASE <= '1'; -- Speed phase down, delay of next rollover. + else + PHASE_INCREASE <= '0'; + PHASE_DECREASE <= '0'; + end if; + end process PHASE_DECODER; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_pkg.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_pkg.vhd new file mode 100644 index 0000000..b365b3d --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_pkg.vhd @@ -0,0 +1,232 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- This is the package file containing the component ---- +---- declarations. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Removed CRC_BUSY. + + +library ieee; +use ieee.std_logic_1164.all; + +package WF1772IP_PKG is +-- component declarations: +component WF1772IP_AM_DETECTOR + port( + CLK : in bit; + RESETn : in bit; + DDEn : in bit; + DATA : in bit; + DATA_STRB : in bit; + ID_AM : out bit; + DATA_AM : out bit; + DDATA_AM : out bit + ); +end component; + +component WF1772IP_CONTROL + port( + CLK : in bit; + RESETn : in bit; + A1, A0 : in bit; + RWn : in bit; + CSn : in bit; + DDEn : in bit; + DR : in bit_vector(7 downto 0); + CMD : in std_logic_vector(7 downto 0); + DSR : in std_logic_vector(7 downto 0); + TR : in std_logic_vector(7 downto 0); + SR : in std_logic_vector(7 downto 0); + MO : out bit; + WR_PR : out bit; + SPINUP_RECTYPE : out bit; + SEEK_RNF : out bit; + CRC_ERRFLAG : out bit; + LOST_DATA_TR00 : out bit; + DRQ : out bit; + DRQ_IPn : out bit; + BUSY : out bit; + AM_2_DISK : out bit; + ID_AM : in bit; + DATA_AM : in bit; + DDATA_AM : in bit; + CRC_ERR : in bit; + CRC_PRES : out bit; + TR_PRES : out bit; + TR_CLR : out bit; + TR_INC : out bit; + TR_DEC : out bit; + SR_LOAD : out bit; + SR_INC : out bit; + TRACK_NR : out std_logic_vector(7 downto 0); + DR_CLR : out bit; + DR_LOAD : out bit; + SHFT_LOAD_SD : out bit; + SHFT_LOAD_ND : out bit; + CRC_2_DISK : out bit; + DSR_2_DISK : out bit; + FF_2_DISK : out bit; + PRECOMP_EN : out bit; + DATA_STRB : in bit; + DISK_RWn : out bit; + WPRTn : in bit; + TRACK00n : in bit; + IPn : in bit; + DIRC : out bit; + STEP : out bit; + WG : out bit; + INTRQ : out bit + ); +end component; + +component WF1772IP_CRC_LOGIC + port( + CLK : in bit; + RESETn : in bit; + DDEn : in bit; + DISK_RWn : in bit; + ID_AM : in bit; + DATA_AM : in bit; + DDATA_AM : in bit; + SD : in bit; + CRC_STRB : in bit; + CRC_2_DISK : in bit; + CRC_PRES : in bit; + CRC_SDOUT : out bit; + CRC_ERR : out bit + ); +end component; + +component WF1772IP_DIGITAL_PLL + port( + CLK : in bit; + RESETn : in bit; + DDEn : in bit; + HDTYPE : in bit; + DISK_RWn : in bit; + RDn : in bit; + PLL_D : out bit; + PLL_DSTRB : out bit + ); +end component; + +component WF1772IP_REGISTERS + port( + CLK : in bit; + RESETn : in bit; + CSn : in bit; + ADR : in bit_vector(1 downto 0); + RWn : in bit; + DATA_IN : in std_logic_vector (7 downto 0); + DATA_OUT : out std_logic_vector (7 downto 0); + DATA_EN : out bit; + CMD : out std_logic_vector(7 downto 0); + SR : out std_logic_vector(7 downto 0); + TR : out std_logic_vector(7 downto 0); + DSR : out std_logic_vector(7 downto 0); + DR : out bit_vector(7 downto 0); + SD_R : in bit; + DATA_STRB : in bit; + DR_CLR : in bit; + DR_LOAD : in bit; + TR_PRES : in bit; + TR_CLR : in bit; + TR_INC : in bit; + TR_DEC : in bit; + TRACK_NR : in std_logic_vector(7 downto 0); + SR_LOAD : in bit; + SR_INC : in bit; + SHFT_LOAD_SD : in bit; + SHFT_LOAD_ND : in bit; + MOTOR_ON : in bit; + WRITE_PROTECT : in bit; + SPINUP_RECTYPE : in bit; + SEEK_RNF : in bit; + CRC_ERRFLAG : in bit; + LOST_DATA_TR00 : in bit; + DRQ : in bit; + DRQ_IPn : in bit; + BUSY : in bit; + DDEn : in bit + ); +end component; + +component WF1772IP_TRANSCEIVER + port( + CLK : in bit; + RESETn : in bit; + DDEn : in bit; + HDTYPE : in bit; + ID_AM : in bit; + DATA_AM : in bit; + DDATA_AM : in bit; + SHFT_LOAD_SD : in bit; + DR : in bit_vector(7 downto 0); + PRECOMP_EN : in bit; + AM_TYPE : in bit; + AM_2_DISK : in bit; + CRC_2_DISK : in bit; + DSR_2_DISK : in bit; + FF_2_DISK : in bit; + SR_SDOUT : in std_logic; + CRC_SDOUT : in bit; + WRn : out bit; + PLL_DSTRB : in bit; + PLL_D : in bit; + WDATA : out bit; + DATA_STRB : out bit; + SD_R : out bit + ); +end component; +end WF1772IP_PKG; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_registers.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_registers.vhd new file mode 100644 index 0000000..7556fe5 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_registers.vhd @@ -0,0 +1,264 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- This file models all the five WD1772 registers: DATA-, ---- +---- COMMAND-, SECTOR-, TRACK- and STATUS register as also the ---- +---- shift register. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_REGISTERS is + port( + -- System control: + CLK : in bit; + RESETn : in bit; + + -- Bus interface: + CSn : in bit; + ADR : in bit_vector(1 downto 0); + RWn : in bit; + DATA_IN : in std_logic_vector (7 downto 0); + DATA_OUT : out std_logic_vector (7 downto 0); + DATA_EN : out bit; + + -- FDC data: + CMD : out std_logic_vector(7 downto 0); -- Command register. + SR : out std_logic_vector(7 downto 0); -- Sector register. + TR : out std_logic_vector(7 downto 0); -- Track register. + DSR : out std_logic_vector(7 downto 0); -- Data shift register. + DR : out bit_vector(7 downto 0); -- Data register. + + -- Serial data and clock strobes (in and out): + DATA_STRB : in bit; -- Strobe for the incoming data. + SD_R : in bit; -- Serial data input. + + -- DATA register control: + DR_CLR : in bit; -- Clear. + DR_LOAD : in bit; -- LOAD. + + -- Track register controls: + TR_PRES : in bit; -- Set x"FF". + TR_CLR : in bit; -- Clear. + TR_INC : in bit; -- Increment. + TR_DEC : in bit; -- Decrement. + + -- Sector register control: + TRACK_NR : in std_logic_vector(7 downto 0); + SR_LOAD : in bit; -- Load. + SR_INC : in bit; -- Increment. + + -- Shift register control: + SHFT_LOAD_SD : in bit; + SHFT_LOAD_ND : in bit; + + -- Status register stuff + MOTOR_ON : in bit; + WRITE_PROTECT : in bit; + SPINUP_RECTYPE : in bit; -- Disk is on speed / data mark status. + SEEK_RNF : in bit; -- Seek error / record not found status flag. + CRC_ERRFLAG : in bit; -- CRC status flag. + LOST_DATA_TR00 : in bit; + DRQ : in bit; + DRQ_IPn : in bit; + BUSY : in bit; + + -- Others: + DDEn : in bit + ); +end WF1772IP_REGISTERS; + +architecture BEHAVIOR of WF1772IP_REGISTERS is +-- Remark: In the original data sheet 'WD17X-00' there is the following statement: +-- "After any register is written to, the same register cannot be read from until +-- 16us in MFM or 32us in FMMM have elapsed." If this is a hint for a hardware read +-- lock ... this lock is not implemented in this code. +signal SHIFT_REG : std_logic_vector(7 downto 0); +signal DATA_REG : std_logic_vector(7 downto 0); +signal COMMAND_REG : std_logic_vector(7 downto 0); +signal SECTOR_REG : std_logic_vector(7 downto 0); +signal TRACK_REG : std_logic_vector(7 downto 0); +signal STATUS_REG : bit_vector(7 downto 0); +signal SD_R_I : std_logic; +begin + -- Type conversion To_Std_Logic: + SD_R_I <= '1' when SD_R = '1' else '0'; + + P_SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if SHFT_LOAD_ND = '1' then + SHIFT_REG <= DATA_REG; -- Load data register stuff. + elsif SHFT_LOAD_SD = '1' and DDEn = '1' then + SHIFT_REG <= DATA_REG; -- Normal data in FM mode. + elsif SHFT_LOAD_SD = '1' and DDEn = '0' then -- MFM mode: + case DATA_REG is + when x"F5" => SHIFT_REG <= x"A1"; -- Special character. + when x"F6" => SHIFT_REG <= x"C2"; -- Special character. + when others => SHIFT_REG <= DATA_REG; -- Normal MFM data. + end case; + elsif DATA_STRB = '1' then -- Shift left during read from disk or write to disk. + SHIFT_REG <= SHIFT_REG(6 downto 0) & SD_R_I; -- for write operation SD_R_I is a dummy. + end if; + end if; + end process P_SHIFTREG; + DSR <= SHIFT_REG; + + DATAREG: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if CSn = '0' and ADR = "11" and RWn = '0' then + DATA_REG <= DATA_IN; -- Write bus data to register + elsif DR_LOAD = '1' and DRQ = '0' then + DATA_REG <= SHIFT_REG; -- Correct data loaded to shift register. + elsif DR_LOAD = '1' and DRQ = '1' then + DATA_REG <= x"00"; -- Dummy byte due to lost data loaded to shift register. + elsif DR_CLR = '1' then + DATA_REG <= (others => '0'); + end if; + end if; + end process DATAREG; + -- Data register buffered for further data processing. + DR <= To_BitVector(DATA_REG); + + SECTORREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SECTOR_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if CSn = '0' and ADR = "10" and RWn = '0' and BUSY = '0' then + SECTOR_REG <= DATA_IN; -- Write to register when device is not busy. + elsif SR_LOAD = '1' then + -- Load the track number to the sector register in the type III command + -- 'Read Address'. + SECTOR_REG <= TRACK_NR; + elsif SR_INC = '1' then + SECTOR_REG <= SECTOR_REG + '1'; + end if; + end if; + end process SECTORREG; + SR <= SECTOR_REG; + + TRACKREG: process(RESETn, CLK) + begin + if RESETn = '0' then + TRACK_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if CSn = '0' and ADR = "01" and RWn = '0' and BUSY = '0' then + TRACK_REG <= DATA_IN; -- Write to register when device is busy. + elsif TR_PRES = '1' then + TRACK_REG <= (others => '1'); -- Preset the track register. + elsif TR_CLR = '1' then + TRACK_REG <= (others => '0'); -- Reset the track register. + elsif TR_INC = '1' then + TRACK_REG <= TRACK_REG + '1'; -- Increment register contents. + elsif TR_DEC = '1' then + TRACK_REG <= TRACK_REG - '1'; -- Decrement register contents. + end if; + end if; + end process TRACKREG; + TR <= TRACK_REG; + + COMMANDREG: process(RESETn, CLK) + -- The command register is write only. + begin + if RESETn = '0' then + COMMAND_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if CSn = '0' and ADR = "00" and RWn = '0' and BUSY = '0' then + COMMAND_REG <= DATA_IN; -- Write to register when device is not busy. + -- Write 'force interrupt' to register even when device is busy: + elsif CSn = '0' and ADR = "00" and RWn = '0' and DATA_IN(7 downto 4) = x"D" then + COMMAND_REG <= DATA_IN; + end if; + end if; + end process COMMANDREG; + CMD <= COMMAND_REG; + + STATUSREG: process(RESETn, CLK) + -- The status register is read only to the data bus. + begin + -- Status register wiring: + if RESETn = '0' then + STATUS_REG <= x"00"; + elsif CLK = '1' and CLK' event then + STATUS_REG(7) <= MOTOR_ON; + STATUS_REG(6) <= WRITE_PROTECT; + STATUS_REG(5) <= SPINUP_RECTYPE; + STATUS_REG(4) <= SEEK_RNF; + STATUS_REG(3) <= CRC_ERRFLAG; + STATUS_REG(2) <= LOST_DATA_TR00; + STATUS_REG(1) <= DRQ_IPn; + STATUS_REG(0) <= BUSY; + end if; + end process STATUSREG; + -- Read from track, sector or data register: + -- The register data after writing to the track register is valid at least + -- after 32us in FM mode and after 16us in MFM mode. + -- Read from status register. This register is read only: + -- Be aware, that the status register data bits 7 to 1 after writing + -- the command regsiter are valid at least after 64us in FM mode or 32us in MFM mode and + -- the bit 0 (BUSY) is valid after 48us in FM mode or 24us in MFM mode. + DATA_OUT <= TRACK_REG when CSn = '0' and ADR = "01" and RWn = '1' else + SECTOR_REG when CSn = '0' and ADR = "10" and RWn = '1' else + DATA_REG when CSn = '0' and ADR = "11" and RWn = '1' else + To_StdLogicVector(STATUS_REG) when CSn = '0' and ADR = "00" and RWn = '1' else (others => '0'); + DATA_EN <= '1' when CSn = '0' and RWn = '1' else '0'; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top.vhd new file mode 100644 index 0000000..71ef3f3 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top.vhd @@ -0,0 +1,154 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- This is the top level file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - Test of the FM portion of the code (if there is any need). ---- +---- - Test of the read track command. ---- +---- - Test of the read address command. ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release: the MFM portion for HD and DD floppies is tested. +-- The FM mode (DDEn = '1') is not completely tested due to the lack +-- of FM drives. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Fixed the polarity of the precompensation flag. +-- The flag is no active '0'. Thanks to Jorma +-- Oksanen for the information. +-- Revision 2K7B 2006/12/29 WF +-- Introduced several improvements based on a very good examination +-- of the pll code by Jean Louis-Guerin. +-- Revision 2K8B 2008/12/24 WF +-- Rewritten this top level file as a wrapper for the top_soc file. + +library work; +use work.WF1772IP_PKG.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_TOP is + port ( + CLK : in bit; -- 16MHz clock! + MRn : in bit; + CSn : in bit; + RWn : in bit; + A1, A0 : in bit; + DATA : inout std_logic_vector(7 downto 0); + RDn : in bit; + TR00n : in bit; + IPn : in bit; + WPRTn : in bit; + DDEn : in bit; + HDTYPE : in bit; -- '0' = DD disks, '1' = HD disks. + MO : out bit; + WG : out bit; + WD : out bit; + STEP : out bit; + DIRC : out bit; + DRQ : out bit; + INTRQ : out bit + ); +end entity WF1772IP_TOP; + +architecture STRUCTURE of WF1772IP_TOP is +component WF1772IP_TOP_SOC + port ( + CLK : in bit; + RESETn : in bit; + CSn : in bit; + RWn : in bit; + A1, A0 : in bit; + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + RDn : in bit; + TR00n : in bit; + IPn : in bit; + WPRTn : in bit; + DDEn : in bit; + HDTYPE : in bit; + MO : out bit; + WG : out bit; + WD : out bit; + STEP : out bit; + DIRC : out bit; + DRQ : out bit; + INTRQ : out bit + ); +end component; +signal DATA_OUT : std_logic_vector(7 downto 0); +signal DATA_EN : bit; +begin + DATA <= DATA_OUT when DATA_EN = '1' else (others => 'Z'); + + I_1772: WF1772IP_TOP_SOC + port map( + CLK => CLK, + RESETn => MRn, + CSn => CSn, + RWn => RWn, + A1 => A1, + A0 => A0, + DATA_IN => DATA, + DATA_OUT => DATA_OUT, + DATA_EN => DATA_EN, + RDn => RDn, + TR00n => TR00n, + IPn => IPn, + WPRTn => WPRTn, + DDEn => DDEn, + HDTYPE => HDTYPE, + MO => MO, + WG => WG, + WD => WD, + STEP => STEP, + DIRC => DIRC, + DRQ => DRQ, + INTRQ => INTRQ + ); +end architecture STRUCTURE; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top_soc.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top_soc.vhd new file mode 100644 index 0000000..9cfd111 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top_soc.vhd @@ -0,0 +1,333 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- Top level file for use in systems on programmable chips. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - Test of the FM portion of the code (if there is any need). ---- +---- - Test of the read track command. ---- +---- - Test of the read address command. ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release: the MFM portion for HD and DD floppies is tested. +-- The FM mode (DDEn = '1') is not completely tested due to the lack +-- of FM drives. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Fixed the polarity of the precompensation flag. +-- The flag is no active '0'. Thanks to Jorma Oksanen for the information. +-- Top level file provided for SOC (systems on programmable chips). +-- Revision 2K7B 2006/12/29 WF +-- Introduced several improvements based on a very good examination +-- of the pll code by Jean Louis-Guerin. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K8B 2008/12/24 WF +-- Bugfixes in the controller due to hanging state machine. +-- Removed CRC_BUSY. +-- + +library work; +use work.WF1772IP_PKG.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_TOP_SOC is + port ( + CLK : in bit; -- 16MHz clock! + RESETn : in bit; + CSn : in bit; + RWn : in bit; + A1, A0 : in bit; + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + RDn : in bit; + TR00n : in bit; + IPn : in bit; + WPRTn : in bit; + DDEn : in bit; + HDTYPE : in bit; -- '0' = DD disks, '1' = HD disks. + MO : out bit; + WG : out bit; + WD : out bit; + STEP : out bit; + DIRC : out bit; + DRQ : out bit; + INTRQ : out bit + ); +end entity WF1772IP_TOP_SOC; + +architecture STRUCTURE of WF1772IP_TOP_SOC is +signal DATA_OUT_REG : std_logic_vector(7 downto 0); +signal DATA_EN_REG : bit; +signal CMD_I : std_logic_vector(7 downto 0); +signal DR_I : bit_vector(7 downto 0); +signal DSR_I : std_logic_vector(7 downto 0); +signal TR_I : std_logic_vector(7 downto 0); +signal SR_I : std_logic_vector(7 downto 0); +signal ID_AM_I : bit; +signal DATA_AM_I : bit; +signal DDATA_AM_I : bit; +signal AM_TYPE_I : bit; +signal AM_2_DISK_I : bit; +signal DATA_STRB_I : bit; +signal BUSY_I : bit; +signal DRQ_I : bit; +signal DRQ_IPn_I : bit; +signal LD_TR00_I : bit; +signal SP_RT_I : bit; +signal SEEK_RNF_I : bit; +signal WR_PR_I : bit; +signal MO_I : bit; +signal PLL_DSTRB_I : bit; +signal PLL_D_I : bit; +signal CRC_SD_I : bit; +signal CRC_ERR_I : bit; +signal CRC_PRES_I : bit; +signal CRC_ERRFLAG_I : bit; +signal SD_R_I : bit; +signal CRC_SDOUT_I : bit; +signal SHFT_LOAD_SD_I : bit; +signal SHFT_LOAD_ND_I : bit; +signal WR_In : bit; +signal TR_PRES_I : bit; +signal TR_CLR_I : bit; +signal TR_INC_I : bit; +signal TR_DEC_I : bit; +signal SR_LOAD_I : bit; +signal SR_INC_I : bit; +signal DR_CLR_I : bit; +signal DR_LOAD_I : bit; +signal TRACK_NR_I : std_logic_vector(7 downto 0); +signal CRC_2_DISK_I : bit; +signal DSR_2_DISK_I : bit; +signal FF_2_DISK_I : bit; +signal PRECOMP_EN_I : bit; +signal DISK_RWn_I : bit; +signal WDATA_I : bit; +begin + -- Three state data bus: + DATA_OUT <= DATA_OUT_REG when DATA_EN_REG = '1' else (others => '0'); + DATA_EN <= DATA_EN_REG; + + -- Some signals copied to the outputs: + WD <= not WR_In; + MO <= MO_I; + DRQ <= DRQ_I; + + -- Write deleted data address mark in MFM mode in 'Write Sector' command in + -- case of asserted command bit 0. + AM_TYPE_I <= '0' when CMD_I(7 downto 5) = "101" and CMD_I(0) = '1' else '1'; + + -- The CRC unit is used during read from disk and write to disk. + -- This is the data multiplexer for the data stream to encode. + CRC_SD_I <= SD_R_I when DISK_RWn_I = '1' else WDATA_I; + + I_CONTROL: WF1772IP_CONTROL + port map( + CLK => CLK, + RESETn => RESETn, + A1 => A0, + A0 => A1, + RWn => RWn, + CSn => CSn, + DDEn => DDEn, + DR => DR_I, + CMD => CMD_I, + DSR => DSR_I, + TR => TR_I, + SR => SR_I, + MO => MO_I, + WR_PR => WR_PR_I, + SPINUP_RECTYPE => SP_RT_I, + SEEK_RNF => SEEK_RNF_I, + CRC_ERRFLAG => CRC_ERRFLAG_I, + LOST_DATA_TR00 => LD_TR00_I, + DRQ => DRQ_I, + DRQ_IPn => DRQ_IPn_I, + BUSY => BUSY_I, + AM_2_DISK => AM_2_DISK_I, + ID_AM => ID_AM_I, + DATA_AM => DATA_AM_I, + DDATA_AM => DDATA_AM_I, + CRC_ERR => CRC_ERR_I, + CRC_PRES => CRC_PRES_I, + TR_PRES => TR_PRES_I, + TR_CLR => TR_CLR_I, + TR_INC => TR_INC_I, + TR_DEC => TR_DEC_I, + SR_LOAD => SR_LOAD_I, + SR_INC => SR_INC_I, + TRACK_NR => TRACK_NR_I, + DR_CLR => DR_CLR_I, + DR_LOAD => DR_LOAD_I, + SHFT_LOAD_SD => SHFT_LOAD_SD_I, + SHFT_LOAD_ND => SHFT_LOAD_ND_I, + CRC_2_DISK => CRC_2_DISK_I, + DSR_2_DISK => DSR_2_DISK_I, + FF_2_DISK => FF_2_DISK_I, + PRECOMP_EN => PRECOMP_EN_I, + DATA_STRB => DATA_STRB_I, + DISK_RWn => DISK_RWn_I, + WPRTn => WPRTn, + TRACK00n => TR00n, + IPn => IPn, + DIRC => DIRC, + STEP => STEP, + WG => WG, + INTRQ => INTRQ + ); + + I_REGISTERS: WF1772IP_REGISTERS + port map( + CLK => CLK, + RESETn => RESETn, + CSn => CSn, + ADR(1) => A1, + ADR(0) => A0, + RWn => RWn, + DATA_IN => DATA_IN, + DATA_OUT => DATA_OUT_REG, + DATA_EN => DATA_EN_REG, + CMD => CMD_I, + TR => TR_I, + SR => SR_I, + DSR => DSR_I, + DR => DR_I, + SD_R => SD_R_I, + DATA_STRB => DATA_STRB_I, + DR_CLR => DR_CLR_I, + DR_LOAD => DR_LOAD_I, + TR_PRES => TR_PRES_I, + TR_CLR => TR_CLR_I, + TR_INC => TR_INC_I, + TR_DEC => TR_DEC_I, + TRACK_NR => TRACK_NR_I, + SR_LOAD => SR_LOAD_I, + SR_INC => SR_INC_I, + SHFT_LOAD_SD => SHFT_LOAD_SD_I, + SHFT_LOAD_ND => SHFT_LOAD_ND_I, + MOTOR_ON => MO_I, + WRITE_PROTECT => WR_PR_I, + SPINUP_RECTYPE => SP_RT_I, + SEEK_RNF => SEEK_RNF_I, + CRC_ERRFLAG => CRC_ERRFLAG_I, + LOST_DATA_TR00 => LD_TR00_I, + DRQ => DRQ_I, + DRQ_IPn => DRQ_IPn_I, + BUSY => BUSY_I, + DDEn => DDEn + ); + + I_DIGITAL_PLL: WF1772IP_DIGITAL_PLL + port map( + CLK => CLK, + RESETn => RESETn, + DDEn => DDEn, + HDTYPE => HDTYPE, + DISK_RWn => DISK_RWn_I, + RDn => RDn, + PLL_D => PLL_D_I, + PLL_DSTRB => PLL_DSTRB_I + ); + + I_AM_DETECTOR: WF1772IP_AM_DETECTOR + port map( + CLK => CLK, + RESETn => RESETn, + DDEn => DDEn, + DATA => PLL_D_I, + DATA_STRB => PLL_DSTRB_I, + ID_AM => ID_AM_I, + DATA_AM => DATA_AM_I, + DDATA_AM => DDATA_AM_I + ); + + I_CRC_LOGIC: WF1772IP_CRC_LOGIC + port map( + CLK => CLK, + RESETn => RESETn, + DDEn => DDEn, + DISK_RWn => DISK_RWn_I, + ID_AM => ID_AM_I, + DATA_AM => DATA_AM_I, + DDATA_AM => DDATA_AM_I, + SD => CRC_SD_I, + CRC_STRB => DATA_STRB_I, + CRC_2_DISK => CRC_2_DISK_I, + CRC_PRES => CRC_PRES_I, + CRC_SDOUT => CRC_SDOUT_I, + CRC_ERR => CRC_ERR_I + ); + + I_TRANSCEIVER: WF1772IP_TRANSCEIVER + port map( + CLK => CLK, + RESETn => RESETn, + DDEn => DDEn, + HDTYPE => HDTYPE, + ID_AM => ID_AM_I, + DATA_AM => DATA_AM_I, + DDATA_AM => DDATA_AM_I, + SHFT_LOAD_SD => SHFT_LOAD_SD_I, + DR => DR_I, + PRECOMP_EN => PRECOMP_EN_I, + AM_TYPE => AM_TYPE_I, + AM_2_DISK => AM_2_DISK_I, + CRC_2_DISK => CRC_2_DISK_I, + DSR_2_DISK => DSR_2_DISK_I, + FF_2_DISK => FF_2_DISK_I, + SR_SDOUT => DSR_I(7), + CRC_SDOUT => CRC_SDOUT_I, + WRn => WR_In, + WDATA => WDATA_I, + PLL_DSTRB => PLL_DSTRB_I, + PLL_D => PLL_D_I, + DATA_STRB => DATA_STRB_I, + SD_R => SD_R_I + ); +end architecture STRUCTURE; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_transceiver.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_transceiver.vhd new file mode 100644 index 0000000..c836716 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_transceiver.vhd @@ -0,0 +1,517 @@ +---------------------------------------------------------------------- +---- ---- +---- WD1772 compatible floppy disk controller IP Core. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Floppy disk controller with all features of the Western ---- +---- Digital WD1772-02 controller. ---- +---- ---- +---- The transceiver unit contains on the one hand the receiver ---- +---- part which strips off the clock signal from the data stream ---- +---- and on the other hand the transmitter unit which provides in ---- +---- the different modes (FM and MFM) all functions which are ---- +---- necessary to send data, CRC bytes, 'FF', '00' or the address ---- +---- marks. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2006A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/05 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- MFM_In and MASK_SHFT have now synchronous reset to meet preset requirement. +-- + + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF1772IP_TRANSCEIVER is + port( + -- System control + CLK : in bit; -- must be 16MHz + RESETn : in bit; + + -- Data and Control: + HDTYPE : in bit; -- Floppy type HD or DD. + DDEn : in bit; -- Double density select (FM or MFM). + ID_AM : in bit; -- ID addressmark strobe. + DATA_AM : in Bit; -- Data addressmark strobe. + DDATA_AM : in Bit; -- Deleted data addressmark strobe. + SHFT_LOAD_SD : in bit; -- Indication for shift register load time. + DR : in bit_vector(7 downto 0); -- Content of the data register. + + -- Data strobes: + PLL_DSTRB : in bit; -- Clock strobe for RD serial data input. + DATA_STRB : buffer bit; + + -- Data strobe and data for the CRC during write operation: + WDATA : buffer bit; + + -- Encoder (logic to disk): + PRECOMP_EN : in bit; -- control signal for MFM write precompensation. + AM_TYPE : in bit; -- Write deleted address mark in MFM mode when 0. + AM_2_DISK : in bit; + DSR_2_DISK : in bit; + FF_2_DISK : in bit; + CRC_2_DISK : in bit; + SR_SDOUT : in std_logic; -- encoder's data input from the shift register (serial). + CRC_SDOUT : in bit; -- encoder's data input from the CRC unit (serial). + WRn : out bit; -- write output for the MFM drive containing clock and data. + + -- Decoder (disk to logic): + PLL_D : in bit; -- Serial data input. + SD_R : out bit -- Serial (decoded) data output. + ); +end WF1772IP_TRANSCEIVER; + +architecture BEHAVIOR of WF1772IP_TRANSCEIVER is +type MFM_STATES is (A_00, B_01, C_10); +type PRECOMP_VALUES is (EARLY, NOMINAL, LATE); +type DEC_STATES is (CLK_PHASE, DATA_PHASE); + +signal MFM_STATE : MFM_STATES; +signal NEXT_MFM_STATE : MFM_STATES; +signal PRECOMP : PRECOMP_VALUES; +signal DEC_STATE : DEC_STATES; +signal NEXT_DEC_STATE : DEC_STATES; + +signal FM_In : bit; + +signal CLKMASK : bit; -- Control for suppression of FM clock transitions. + +signal MFM_10_STRB : bit; +signal MFM_01_STRB : bit; + +signal WR_CNT : std_logic_vector(3 downto 0); +signal MFM_In : bit; + +signal AM_SHFT : bit_vector(31 downto 0); + +begin + -- ####################### encoder stuff ########################### + ADRMARK: process(RESETn, CLK) + -- This process provides the address mark data for both FM and MFM in + -- write to disk mode. In FM only one byte is written where in MFM + -- 3 sync bytes x"A1" and one data address mark is written. + -- In this process only the data address mark is provided. The only way + -- writing the ID address mark is the write track command. + begin + if RESETn = '0' then + AM_SHFT <= (others => '0'); + elsif CLK = '1' and CLK' event then + if AM_2_DISK = '1' and DATA_STRB = '1' then + AM_SHFT <= AM_SHFT (30 downto 0) & '0'; -- Shift out. + elsif AM_2_DISK = '0' and DDEn = '1' and AM_TYPE = '0' then -- FM mode. + AM_SHFT <= x"F8000000"; -- Load deleted FM address mark. + elsif AM_2_DISK = '0' and DDEn = '1' and AM_TYPE = '1' then -- FM mode. + AM_SHFT <= x"FB000000"; -- Load normal FM address mark. + elsif AM_2_DISK = '0' and DDEn = '0' and AM_TYPE = '0' then -- MFM mode deleted data mark. + AM_SHFT <= x"A1A1A1F8"; -- Load MFM syncs and address mark. + elsif AM_2_DISK = '0' and DDEn = '0' and AM_TYPE = '1' then -- Default: MFM mode normal data mark. + AM_SHFT <= x"A1A1A1FB"; -- Load MFM syncs and address mark. + end if; + end if; + end process ADRMARK; + + -- Input multiplexer: + WDATA <= AM_SHFT(31) when AM_2_DISK = '1' else -- Address mark data data. + To_Bit(SR_SDOUT) when DSR_2_DISK = '1' else -- Shift register data. + CRC_SDOUT when CRC_2_DISK = '1' else -- CRC data. + '1' when FF_2_DISK = '1' else '0'; -- Write zeros is default. + + -- Output multiplexer: + WRn <= '0' when FM_In = '0' and DDEn = '1' else -- FM portion. + '0' when MFM_In = '0' and DDEn = '0' else '1'; -- MFM portion and default. + + CLK_MASK: process(CLK) + -- This part of software controls the suppression of the clock pulses + -- during transmission of several FM special characters. During writing + -- 'normal' data to the disk, only 8 mask bits of the shift register are + -- used. During writing MFM sync and address mark bits, the register is + -- used with 32 mask bits. + variable MASK_SHFT : bit_vector(23 downto 0); + variable LOCK : boolean; + begin + if CLK = '1' and CLK' event then + if RESETn = '0' then + MASK_SHFT := (others => '1'); + LOCK := false; + -- Load the mask shift register just in time when the shift register is + -- loaded with valid data from the data register. + elsif SHFT_LOAD_SD = '1' and DDEn = '1' then -- FM mode. + case DR is + when x"F8" | x"F9" | x"FA" | x"FB" | x"FE" => MASK_SHFT := x"C7FFFF"; + when x"FC" => MASK_SHFT := x"D7FFFF"; + when x"F5" | x"F6" => MASK_SHFT := (others => '0'); -- Not allowed. + when others => MASK_SHFT := x"FFFFFF"; -- Normal data. + end case; + elsif SHFT_LOAD_SD = '1' and DDEn = '0' then -- MFM mode. + case DR is + when x"F5" => MASK_SHFT := x"FBFFFF"; -- Suppress clock pulse between bits 4 and 5. + when x"F6" => MASK_SHFT := x"F7FFFF"; -- Suppress clock pulse between bits 3 and 4. + when others => MASK_SHFT := x"FFFFFF"; -- Normal data. + end case; + elsif AM_2_DISK = '1' and DDEn = '1' and LOCK = false then -- FM mode. + MASK_SHFT := x"C7FFFF"; -- Load just once per AM_2_DISK rising edge. + LOCK := true; + elsif AM_2_DISK = '1' and DDEn = '0' and LOCK = false then -- MFM mode. + MASK_SHFT := x"FBFBFB"; -- Three syncs with suppressed clock pulse then transparent mask. + LOCK := true; + elsif DATA_STRB = '1' then -- shift as long as transmission is active + -- The Shift register is shifted left. After shifting the clockmasks out it is + -- transparent due to the '1's filled up from the left. + MASK_SHFT := MASK_SHFT(22 downto 0) & '1'; -- Shift left. + elsif AM_2_DISK = '0' then + LOCK := false; -- Release the lock after address mark has been written. + end if; + end if; + CLKMASK <= MASK_SHFT(23); + end process CLK_MASK; + + FM_ENCODER: process (RESETn, DATA_STRB, CLK) + -- For DD type floppies the data rate is 125kBps. Therefore there are 128 16-MHz clocks cycles + -- per FM bit. + -- For HD type floppies the data rate is 250kBps. Therefore there are 64 16-MHz clocks cycles + -- per FM bit. + -- The FM write pulse width is 1.375us for DD and 0.750us HD type floppies. + -- This process provides the FM encoded signal. The first pulse is in any case the clock + -- pulse and the second pulse is due to data. The FM encoding is very simple and therefore + -- self explaining. + variable CNT : std_logic_vector(7 downto 0); + begin + if RESETn = '0' then + FM_In <= '1'; + CNT := x"00"; + elsif CLK = '1' and CLK' event then + -- In case of HD type floppies the counter reaches a value of b"0100000" + -- In case of DD type floppies the counter reaches a value of b"1000000" + if DATA_STRB = '1' then + CNT := x"00"; + else + CNT := CNT + '1'; + end if; + -- The flux reversal pulses are centered between the DATA_STRB pulses. + -- In detail: the clock pulse appears in the middle of the first half + -- of the DATA_STRB period and the data pulse appears in the middle of + -- the second half. + case HDTYPE is + when '0' => -- DD type floppies: + if CNT > "00010101" and CNT <= "00101011" then + FM_In <= not CLKMASK; -- FM clock. + elsif CNT > "01010101" and CNT <= "01101011" then + FM_In <= not WDATA; -- FM data. + else + FM_In <= '1'; + end if; + when '1' => -- HD type floppies: + if CNT > "00001010" and CNT <= "00010110" then + FM_In <= not CLKMASK; -- FM clock. + elsif CNT > "00101010" and CNT <= "00110110" then + FM_In <= not WDATA; -- FM data. + else + FM_In <= '1'; + end if; + end case; + end if; + end process FM_ENCODER; + + MFM_ENCODE_REG: process(RESETn, CLK) + -- This process is the first portion of the more complicated MFM encoder. It can be interpreted + -- as a Moore machine. This part is the current state register. + begin + if RESETn = '0' then + MFM_STATE <= A_00; + elsif CLK = '1' and CLK' event then + MFM_STATE <= NEXT_MFM_STATE; + end if; + end process MFM_ENCODE_REG; + + MFM_ENCODE_LOGIC: process(MFM_STATE, WDATA, DATA_STRB) + -- Rules for Encoding: + -- transitions are never located at the mid point of a 'zero'. + -- transistions are always located at the mid point of a '1'. + -- no transitions at the borders of a '1'. + -- transitions appear between two adjacent 'zeros'. + -- states are as follows: + -- A_00: idle state, no transition. + -- B_01: transistion between the MFM clock edges. + -- C_10: transition on the leading MFM clock edges. + -- The timing of the MFM output is done in the process MFM_WR_OUT. + begin + case MFM_STATE is + when A_00 => + if WDATA = '0' and DATA_STRB = '1' then + NEXT_MFM_STATE <= C_10; + elsif WDATA = '1' and DATA_STRB = '1' then + NEXT_MFM_STATE <= B_01; + else + NEXT_MFM_STATE <= A_00; -- Stay, if there is no strobe. + end if; + when C_10 => + if WDATA = '0' and DATA_STRB = '1' then + NEXT_MFM_STATE <= C_10; + elsif WDATA = '1' and DATA_STRB = '1' then + NEXT_MFM_STATE <= B_01; + else + NEXT_MFM_STATE <= C_10; -- Stay, if there is no strobe. + end if; + when B_01 => + if WDATA = '0' and DATA_STRB = '1' then + NEXT_MFM_STATE <= A_00; + elsif WDATA = '1' and DATA_STRB = '1' then + NEXT_MFM_STATE <= B_01; + else + NEXT_MFM_STATE <= B_01; -- Stay, if there is no strobe. + end if; + end case; + end process MFM_ENCODE_LOGIC; + + MFM_PRECOMPENSATION: process(RESETn, CLK) + -- The write pattern is adjusted in the MFM write timing process as follows: + -- after DATA_STRB (the duty cycle of this strobe is exactly one CLK) the + -- incoming data is bufferd in WRITEPATTERN. After the following DATA_STRB + -- the WDATA is shifted through WRITEPATTERN. After further DATA_STRBs the + -- WRITEPATTERN consists of previous, current and next WDATA like this: + -- WRITEPATTERN(3) is the second previous WDATA. + -- WRITEPATTERN(2) is the previous WDATA. + -- WRITEPATTERN(1) is the current WDATA to be sent. + -- WRITEPATTERN(0) is the next WDATA to be sent. + variable WRITEPATTERN : bit_vector(3 downto 0); + begin + if RESETn = '0' then + PRECOMP <= NOMINAL; + WRITEPATTERN := "0000"; + elsif CLK = '1' and CLK' event then + if DATA_STRB = '1' then + WRITEPATTERN := WRITEPATTERN(2 downto 0) & WDATA; -- shift left + end if; + if PRECOMP_EN = '0' then + PRECOMP <= NOMINAL; -- no precompensation + else + case WRITEPATTERN is + when "1110" | "0110" => PRECOMP <= EARLY; + when "1011" | "0011" => PRECOMP <= LATE; + when "0001" => PRECOMP <= EARLY; + when "1000" => PRECOMP <= LATE; + when others => PRECOMP <= NOMINAL; + end case; + end if; + end if; + end process MFM_PRECOMPENSATION; + + MFM_STROBES: process (RESETn, DATA_STRB, CLK) + -- For the MFM frequency is 250 kBps for DD type floppies, there are 64 + -- 16 MHz clock cycles per MFM bit and for HD type floppies, which have + -- 500 kBps there are 32 16MHz clock pulses for one MFM bit. + -- The MFM state machine (Moore) switches on the DATA_STRB. + -- During one cycle there are the two further strobes MFM_10_STRB and + -- MFM_01_STRB which control the MFM output in the process MFM_WR_OUT. + -- The strobes are centered in the middle of the first half and in the + -- middle of the second half of the DATA_STRB cycle. + variable CNT : std_logic_vector(5 downto 0); + begin + if RESETn = '0' then + CNT := "000000"; + elsif CLK = '1' and CLK' event then + if DATA_STRB = '1' then + CNT := (others => '0'); + else + CNT := CNT + '1'; + end if; + if HDTYPE = '1' then + case CNT is + -- encoder timing for MFM and HD type floppies. + when "000100" => MFM_10_STRB <= '1'; MFM_01_STRB <= '0'; -- Pulse centered in the first half. + when "010100" => MFM_10_STRB <= '0'; MFM_01_STRB <= '1'; -- Pulse centered in the second half. + when others => MFM_10_STRB <= '0'; MFM_01_STRB <= '0'; + end case; + else + case CNT is + -- encoder timing for MFM and DD type floppies. + when "001010" => MFM_10_STRB <= '1'; MFM_01_STRB <= '0'; -- Pulse centered in the first half. + when "101000" => MFM_10_STRB <= '0'; MFM_01_STRB <= '1'; -- Pulse centered in the second half. + when others => MFM_10_STRB <= '0'; MFM_01_STRB <= '0'; + end case; + end if; + end if; + end process MFM_STROBES; + + -- MFM_WR_TIMING generates the timing for the write pulses which are + -- required by a MFM device like floppy disk drive. The pulse timing + -- meets the timing of the MFM data with pulse width of 700ns +/- 100ns + -- depending on write precompensation. + -- The original WD1772 (CLK = 8MHz) data timing was as follows: + -- The output is asserted as long as CNT is active; in detail + -- this are 4,5; 5,5 or 6,5 CLK cycles depending on the write + -- precompensation. + -- The new design which works with a 16MHz clock requires the following + -- timing: 9; 11 or 13 CLK cycles depending on the writeprecompensation + -- for DD floppies and 5; 6 or 7 CLK cycles depending on the write + -- precompensation for HD floppies. + -- To meet the timing requirements of half clocks + -- the WRn is controlled by the following three processes where the one + -- syncs on the positive clock edge and the other on the negative. + -- For more information on the WTn timing see the datasheet of the + -- WD177x floppy disc controller. + + MFM_WR_TIMING: process(RESETn, CLK) + variable CLKMASK_MFM : bit; + begin + if RESETn = '0' then + WR_CNT <= x"F"; + elsif CLK = '1' and CLK' event then + if DATA_STRB = '1' then + -- The CLKMASK_MFM is synchronised to DATA_STRB. This brings one strobe latency. + -- The timing in connection with the data is correct because the MFM encoder state machine + -- causes the data to be 1 DATA_STRB late too. + CLKMASK_MFM := CLKMASK; + end if; + if MFM_STATE = C_10 and MFM_10_STRB = '1' and CLKMASK_MFM = '1' then + WR_CNT <= x"0"; + elsif MFM_STATE = B_01 and MFM_01_STRB = '1' then + WR_CNT <= x"0"; + elsif WR_CNT < x"F" then + WR_CNT <= WR_CNT + '1'; + end if; + end if; + end process MFM_WR_TIMING; + + MFM_WR_OUT: process + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + MFM_In <= '1'; + else + case HDTYPE is + when '1' => -- HD type. + if PRECOMP = EARLY and WR_CNT > x"0" and WR_CNT <= x"9" then + MFM_In <= '0'; -- 9,0 clock cycles for WRn --> early timing + elsif PRECOMP = NOMINAL and WR_CNT > x"0" and WR_CNT <= x"8" then + MFM_In <= '0'; -- 8,0 clock cycles for WRn --> nominal timing + elsif PRECOMP = LATE and WR_CNT > x"0" and WR_CNT <= x"7" then + MFM_In <= '0'; -- 7,0 clock cycles for WRn --> late timing + else + MFM_In <= '1'; + end if; + when '0' => -- DD type. + if PRECOMP = EARLY and WR_CNT > x"0" and WR_CNT <= x"D" then + MFM_In <= '0'; -- 13,0 clock cycles for WRn --> early timing + elsif PRECOMP = NOMINAL and WR_CNT > x"0" and WR_CNT <= x"B" then + MFM_In <= '0'; -- 11,0 clock cycles for WRn --> nominal timing + elsif PRECOMP = LATE and WR_CNT > x"0" and WR_CNT <= x"9" then + MFM_In <= '0'; -- 9,0 clock cycles for WRn --> late timing + else + MFM_In <= '1'; + end if; + end case; + end if; + end process MFM_WR_OUT; + + -- ####################### Decoder stuff ########################### + -- The decoding of the serial FM or MFM encoded data stream + -- is done in the following two processes (Moore machine). + -- The decoder works in principle like a simple toggle Flip-Flop. + -- It is important to synchronise it in a way, that the clock + -- pulses are separated from the data pulses. The principle + -- works for both FM and MFM data due to the digital phase + -- locked loop, which delivers the serial data and the clock + -- strobe. In general this decoder can be understood as the + -- data separator where the digital phase locked loop provides + -- the FM or the MFM decoding. The data separation lives from + -- the fact, that FM and also MFM encoded signals consist of a + -- mixture of alternating data and clock pulses. + -- FM works as follows: + -- every first pulse of the FM signal is a clock pulse and every + -- second pulse is a logic '1' of the data. A missing second + -- pulse represents a logic '0' of the data. + -- MFM works as follows: + -- every first pulse of the MFM signal is a clock pulse. The coding + -- principle causes clock pulses to be absent in some conditions. + -- Every second pulse is a logic '1' of the data. A missing second + -- pulse represents a logic '0' of the data. + -- So FM and MFM compared, the data is represented directly by the + -- second pulses and the data separator has to look only for these. + -- The missing MFM clock pulses do not cause a problem because the + -- digital PLL used in conjunction with this data separator fills + -- up the clock pulses and delivers a PLL_DSTRB containing aequidistant + -- clock strobes and data strobes. + + DEC_REG: process(RESETn, CLK) + begin + if RESETn = '0' then + DEC_STATE <= CLK_PHASE; + elsif CLK = '1' and CLK' event then + DEC_STATE <= NEXT_DEC_STATE; + end if; + end process DEC_REG; + + DEC_LOGIC: process(DEC_STATE, ID_AM, DATA_AM, DDATA_AM, PLL_DSTRB, PLL_D) + begin + case DEC_STATE is + when CLK_PHASE => + if PLL_DSTRB = '1' then + NEXT_DEC_STATE <= DATA_PHASE; + else + NEXT_DEC_STATE <= CLK_PHASE; + end if; + DATA_STRB <= '0'; -- Inactive during clock pulse time. + SD_R <= '0'; -- Inactive during clock pulse time. + when DATA_PHASE => + if ID_AM = '1' or DATA_AM = '1' or DDATA_AM = '1' then + -- Here the state machine is synchronised + -- to separate data and clock pulses correctly. + NEXT_DEC_STATE <= CLK_PHASE; + elsif PLL_DSTRB = '1' then + NEXT_DEC_STATE <= CLK_PHASE; + else + NEXT_DEC_STATE <= DATA_PHASE; + end if; + -- During the data phase valid data appears at SD. + -- The data is valid during DATA_STRB. + DATA_STRB <= PLL_DSTRB; + SD_R <= PLL_D; + end case; + end process DEC_LOGIC; +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_gpio.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_gpio.vhd new file mode 100644 index 0000000..7660aa2 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_gpio.vhd @@ -0,0 +1,141 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This are the SUSKA MFP IP core's general purpose I/Os. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_GPIO is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + + -- Timer controls: + AER_4 : out bit; + AER_3 : out bit; + + GPIP_IN : in bit_vector(7 downto 0); + GPIP_OUT : out bit_vector(7 downto 0); + GPIP_OUT_EN : buffer bit_vector(7 downto 0); + GP_INT : out bit_vector(7 downto 0) + ); +end entity WF68901IP_GPIO; + +architecture BEHAVIOR of WF68901IP_GPIO is +signal GPDR : bit_vector(7 downto 0); +signal DDR : bit_vector(7 downto 0); +signal AER : bit_vector(7 downto 0); +signal GPDR_I : bit_vector(7 downto 0); +begin + -- These two bits control the timers A and B pulse width operation and the + -- timers A and B event count operation. + AER_4 <= AER(4); + AER_3 <= AER(3); + -- This statement provides 8 XOR units setting the desired interrupt polarity. + -- While the level control is done here, the edge triggering is provided by + -- the interrupt control hardware. The level control is individually for each + -- GPIP port pin. The interrupt edge trigger unit must operate in any case on + -- the low to high transistion of the respective port pin. + GP_INT <= AER xnor GPIP_IN; + + GPIO_REGISTERS: process(RESETn, CLK) + begin + if RESETn = '0' then + GPDR <= (others => '0'); + DDR <= (others => '0'); + AER <= (others => '0'); + elsif CLK = '1' and CLK' event then + if CSn = '0' and DSn = '0' and RWn = '0' then + case RS is + when "00000" => GPDR <= DATA_IN; + when "00001" => AER <= DATA_IN; + when "00010" => DDR <= DATA_IN; + when others => null; + end case; + end if; + end if; + end process GPIO_REGISTERS; + GPIP_OUT <= GPDR; -- Port outputs. + GPIP_OUT_EN <= DDR; -- The DDR is capable to control bitwise the GPIP. + DATA_OUT_EN <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS <= "00010" else '0'; + DATA_OUT <= DDR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00010" else + AER when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00001" else + GPDR_I when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00000" else (others => '0'); + + P_GPDR: process(GPIP_IN, GPIP_OUT_EN, GPDR) + -- Read back control: Read the port pins, if the data direction is configured as input. + -- Read the respective GPDR register bit, if the data direction is configured as output. + begin + for i in 7 downto 0 loop + if GPIP_OUT_EN(i) = '1' then -- Port is configured output. + GPDR_I(i) <= GPDR(i); + else + GPDR_I(i) <= GPIP_IN(i); -- Port is configured input. + end if; + end loop; + end process P_GPDR; +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_interrupts.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_interrupts.vhd new file mode 100644 index 0000000..91417f8 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_interrupts.vhd @@ -0,0 +1,391 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the SUSKA MFP IP core interrupt logic file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/06/03 WF +-- Fixed Pending register logic. +-- Revision 2K9A 2009/06/20 WF +-- Fixed interrupt polarity for TA_I and TB_I. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_INTERRUPTS is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + + -- Interrupt control: + IACKn : in bit; + IEIn : in bit; + IEOn : out bit; + IRQn : out bit; + + -- Interrupt sources: + GP_INT : in bit_vector(7 downto 0); + + AER_4 : in bit; + AER_3 : in bit; + TAI : in bit; + TBI : in bit; + TA_PWM : in bit; + TB_PWM : in bit; + TIMER_A_INT : in bit; + TIMER_B_INT : in bit; + TIMER_C_INT : in bit; + TIMER_D_INT : in bit; + + RCV_ERR : in bit; + TRM_ERR : in bit; + RCV_BUF_F : in bit; + TRM_BUF_E : in bit + ); +end entity WF68901IP_INTERRUPTS; + +architecture BEHAVIOR of WF68901IP_INTERRUPTS is +-- Interrupt state machine: +type INT_STATES is (SCAN, REQUEST, VECTOR_OUT); +signal INT_STATE : INT_STATES; +-- The registers: +signal IERA : bit_vector(7 downto 0); +signal IERB : bit_vector(7 downto 0); +signal IPRA : bit_vector(7 downto 0); +signal IPRB : bit_vector(7 downto 0); +signal ISRA : bit_vector(7 downto 0); +signal ISRB : bit_vector(7 downto 0); +signal IMRA : bit_vector(7 downto 0); +signal IMRB : bit_vector(7 downto 0); +signal VR : bit_vector(7 downto 3); +-- Interconnect: +signal VECT_NUMBER : bit_vector(7 downto 0); +signal INT_SRC : bit_vector(15 downto 0); +signal INT_SRC_EDGE : bit_vector(15 downto 0); +signal INT_ENA : bit_vector(15 downto 0); +signal INT_MASK : bit_vector(15 downto 0); +signal INT_PENDING : bit_vector(15 downto 0); +signal INT_SERVICE : bit_vector(15 downto 0); +signal INT_PASS : bit_vector(15 downto 0); +signal INT_OUT : bit_vector(15 downto 0); +signal GP_INT_4 : bit; +signal GP_INT_3 : bit; +begin + -- Interrupt source for the GPI_4 and GPI_3 is normally the respective port pin. + -- But when the timers operate in their PWM modes, the GPI_4 and GPI_3 are associated + -- to timer A and timer B. + -- The xor logic provides polarity control for the interrupt transition. Be aware, + -- that the PWM signals cause an interrupt on the opposite transition like the + -- respective GPIP port pins (with the same AER settings). + --GP_INT_4 <= GP_INT(4) when TA_PWM = '0' else TAI xor AER_4; + --GP_INT_3 <= GP_INT(3) when TB_PWM = '0' else TBI xor AER_3; + GP_INT_4 <= GP_INT(4) when TA_PWM = '0' else TAI xnor AER_4; -- This should be correct. + GP_INT_3 <= GP_INT(3) when TB_PWM = '0' else TBI xnor AER_3; + + + -- Interrupt source priority sorted (15 = highest): + INT_SRC <= GP_INT(7 downto 6) & TIMER_A_INT & RCV_BUF_F & RCV_ERR & TRM_BUF_E & TRM_ERR & TIMER_B_INT & + GP_INT(5) & GP_INT_4 & TIMER_C_INT & TIMER_D_INT & GP_INT_3 & GP_INT(2 downto 0); + + INT_ENA <= IERA & IERB; + INT_MASK <= IMRA & IMRB; + INT_PENDING <= IPRA & IPRB; + INT_SERVICE <= ISRA & ISRB; + INT_OUT <= INT_PENDING and INT_MASK; -- Masking: + + -- Enable the daisy chain, if there is no pending interrupt and + -- the interrupt state machine is not in service. + IEOn <= '0' when INT_OUT = x"0000" and INT_STATE = SCAN else '1'; + + -- Interrupt request: + IRQn <= '0' when INT_OUT /= x"0000" and INT_STATE = REQUEST else '1'; + + EDGE_ENA: process(RESETn, CLK) + -- These are the 16 edge detectors of the 16 interrupt input sources. This + -- process also provides the disabling or enabling via the IERA and IERB registers. + variable LOCK : bit_vector(15 downto 0); + begin + if RESETn = '0' then + INT_SRC_EDGE <= x"0000"; + LOCK := x"0000"; + elsif CLK = '1' and CLK' event then + for i in 15 downto 0 loop + if INT_SRC(i) = '1' and INT_ENA(i) = '1' and LOCK(i) = '0' then + LOCK(i) := '1'; + INT_SRC_EDGE(i) <= '1'; + elsif INT_SRC(i) = '0' then + LOCK(i) := '0'; + INT_SRC_EDGE(i) <= '0'; + else + INT_SRC_EDGE(i) <= '0'; + end if; + end loop; + end if; + end process EDGE_ENA; + + INT_REGISTERS: process(RESETn, CLK) + begin + if RESETn = '0' then + IERA <= (others => '0'); + IERB <= (others => '0'); + IPRA <= (others => '0'); + IPRB <= (others => '0'); + ISRA <= (others => '0'); + ISRB <= (others => '0'); + IMRA <= (others => '0'); + IMRB <= (others => '0'); + elsif CLK = '1' and CLK' event then + if CSn = '0' and DSn = '0' and RWn = '0' then + case RS is + when "00011" => IERA <= DATA_IN; -- Enable A. + when "00100" => IERB <= DATA_IN; -- Enable B. + when "00101" => + -- Only a '0' can be written to the pending register. + for i in 7 downto 0 loop + if DATA_IN(i) = '0' then + IPRA(i) <= '0'; -- Pending A. + end if; + end loop; + when "00110" => + -- Only a '0' can be written to the pending register. + for i in 7 downto 0 loop + if DATA_IN(i) = '0' then + IPRB(i) <= '0'; -- Pending B. + end if; + end loop; + when "00111" => + -- Only a '0' can be written to the in service register. + for i in 7 downto 0 loop + if DATA_IN(i) = '0' then + ISRA(i) <= '0'; -- In Service A. + end if; + end loop; + when "01000" => + -- Only a '0' can be written to the in service register. + for i in 7 downto 0 loop + if DATA_IN(i) = '0' then + ISRB(i) <= '0'; -- In Service B. + end if; + end loop; + when "01001" => IMRA <= DATA_IN; -- Mask A. + when "01010" => IMRB <= DATA_IN; -- Mask B. + when "01011" => VR <= DATA_IN(7 downto 3); -- Vector register. + when others => null; + end case; + end if; + + -- Pending register: + -- set and clear bit logic. + for i in 15 downto 8 loop + if INT_SRC_EDGE(i) = '1' then + IPRA(i-8) <= '1'; + elsif INT_ENA(i) = '0' then + IPRA(i-8) <= '0'; -- Clear by disabling the channel. + elsif INT_PASS(i) = '1' then + IPRA(i-8) <= '0'; -- Clear by passing the interrupt. + end if; + end loop; + for i in 7 downto 0 loop + if INT_SRC_EDGE(i) = '1' then + IPRB(i) <= '1'; + elsif INT_ENA(i) = '0' then + IPRB(i) <= '0'; -- Clear by disabling the channel. + elsif INT_PASS(i) = '1' then + IPRB(i) <= '0'; -- Clear by passing the interrupt. + end if; + end loop; + + -- In-Service register: + -- Set bit logic, VR(3) is the service register enable. + for i in 15 downto 8 loop + if INT_OUT(i) = '1' and INT_PASS(i) = '1' and VR(3) = '1' then + ISRA(i-8) <= '1'; + end if; + end loop; + for i in 7 downto 0 loop + if INT_OUT(i) = '1' and INT_PASS(i) = '1' and VR(3) = '1' then + ISRB(i) <= '1'; + end if; + end loop; + end if; + end process INT_REGISTERS; + DATA_OUT_EN <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS > "00010" and RS <= "01011" else '1' when INT_STATE = VECTOR_OUT else '0'; + + DATA_OUT <= IERA when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00011" else + IERB when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00100" else + IPRA when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00101" else + IPRB when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00110" else + ISRA when CSn = '0' and DSn = '0' and RWn = '1' and RS = "00111" else + ISRB when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01000" else + IMRA when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01001" else + IMRB when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01010" else + VR & "000" when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01011" else + VECT_NUMBER when INT_STATE = VECTOR_OUT else x"00"; + + P_INT_STATE : process(RESETn, CLK) + begin + if RESETn = '0' then + INT_STATE <= SCAN; + elsif CLK = '1' and CLK' event then + case INT_STATE is + when SCAN => + INT_PASS <= x"0000"; + -- Automatic End of Interrupt mode. Service register disabled. + -- The MFP does not respond for an interrupt acknowledge cycle for an uninitialized + -- vector number (VR(7 downto 4) = x"0"). + if INT_OUT /= x"0000" and VR(7 downto 4) /= x"0" and VR(3) = '0' and IEIn = '0' then + INT_STATE <= REQUEST; -- Non masked interrupt is pending. + -- The following 16 are the Software end of interrupt mode. Service register enabled. + -- The MFP does not respond for an interrupt acknowledge cycle for an uninitialized + -- vector number (VR(7 downto 4) = x"0"). The interrupts are prioritized. + elsif INT_OUT /= x"0000" and VR(7 downto 4) /= x"0" and VR(3) = '1' and IEIn = '0' then + if INT_OUT (15) = '1' and INT_SERVICE(15) = '0' then + INT_STATE <= REQUEST; + elsif INT_OUT (14) = '1' and INT_SERVICE(15 downto 14) = "00" then + INT_STATE <= REQUEST; + elsif INT_OUT (13) = '1' and INT_SERVICE(15 downto 13) = "000" then + INT_STATE <= REQUEST; + elsif INT_OUT (12) = '1' and INT_SERVICE(15 downto 12) = x"0" then + INT_STATE <= REQUEST; + elsif INT_OUT (11) = '1' and INT_SERVICE(15 downto 11) = x"0" & '0' then + INT_STATE <= REQUEST; + elsif INT_OUT (10) = '1' and INT_SERVICE(15 downto 10) = x"0" & "00" then + INT_STATE <= REQUEST; + elsif INT_OUT (9) = '1' and INT_SERVICE(15 downto 9) = x"0" & "000" then + INT_STATE <= REQUEST; + elsif INT_OUT (8) = '1' and INT_SERVICE(15 downto 8) = x"00" then + INT_STATE <= REQUEST; + elsif INT_OUT (7) = '1' and INT_SERVICE(15 downto 7) = x"00" & '0' then + INT_STATE <= REQUEST; + elsif INT_OUT (6) = '1' and INT_SERVICE(15 downto 6) = x"00" & "00" then + INT_STATE <= REQUEST; + elsif INT_OUT (5) = '1' and INT_SERVICE(15 downto 5) = x"00" & "000" then + INT_STATE <= REQUEST; + elsif INT_OUT (4) = '1' and INT_SERVICE(15 downto 4) = x"000" then + INT_STATE <= REQUEST; + elsif INT_OUT (3) = '1' and INT_SERVICE(15 downto 3) = x"000" & '0' then + INT_STATE <= REQUEST; + elsif INT_OUT (2) = '1' and INT_SERVICE(15 downto 2) = x"000" & "00" then + INT_STATE <= REQUEST; + elsif INT_OUT (1) = '1' and INT_SERVICE(15 downto 1) = x"000" & "000" then + INT_STATE <= REQUEST; + elsif INT_OUT (0) = '1' and INT_SERVICE(15 downto 0) = x"0000" then + INT_STATE <= REQUEST; + else + INT_STATE <= SCAN; -- Wait for interrupt. + end if; + else + INT_STATE <= SCAN; + end if; + when REQUEST => + if IACKn = '0' and DSn = '0' then -- Vectored interrupt mode. + INT_STATE <= VECTOR_OUT; -- Non masked interrupt is pending. + if INT_OUT(15) = '1' then + INT_PASS(15) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"F"; -- GPI 7. + elsif INT_OUT(14) = '1' then + INT_PASS(14) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"E"; -- GPI 6. + elsif INT_OUT(13) = '1' then + INT_PASS(13) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"D"; -- TIMER A. + elsif INT_OUT(12) = '1' then + INT_PASS(12) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"C"; -- Receive buffer full. + elsif INT_OUT(11) = '1' then + INT_PASS(11) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"B"; -- Receiver error. + elsif INT_OUT(10) = '1' then + INT_PASS(10) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"A"; -- Transmit buffer empty. + elsif INT_OUT(9) = '1' then + INT_PASS(9) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"9"; -- Transmit error. + elsif INT_OUT(8) = '1' then + INT_PASS(8) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"8"; -- Timer B. + elsif INT_OUT(7) = '1' then + INT_PASS(7) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"7"; -- GPI 5. + elsif INT_OUT(6) = '1' then + INT_PASS(6) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"6"; -- GPI 4. + elsif INT_OUT(5) = '1' then + INT_PASS(5) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"5"; -- Timer C. + elsif INT_OUT(4) = '1' then + INT_PASS(4) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"4"; -- Timer D. + elsif INT_OUT(3) = '1' then + INT_PASS(3) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"3"; -- GPI 3. + elsif INT_OUT(2) = '1' then + INT_PASS(2) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"2"; -- GPI 2. + elsif INT_OUT(1) = '1' then + INT_PASS(1) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"1"; -- GPI 1. + elsif INT_OUT(0) = '1' then + INT_PASS(0) <= '1'; VECT_NUMBER <= VR(7 downto 4) & x"0"; -- GPI 0. + end if; + -- Polled interrupt mode: End of interrupt by writing to the pending registers. + elsif CSn = '0' and DSn = '0' and RWn = '0' and (RS = "00101" or RS = "00110") then + INT_STATE <= SCAN; + else + INT_STATE <= REQUEST; -- Wait. + end if; + when VECTOR_OUT => + INT_PASS <= x"0000"; + if DSn = '1' or IACKn = '1' then + INT_STATE <= SCAN; -- Finished. + else + INT_STATE <= VECTOR_OUT; -- Wait for processor to read the vector. + end if; + end case; + end if; + end process P_INT_STATE; +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_pkg.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_pkg.vhd new file mode 100644 index 0000000..73c0cdc --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_pkg.vhd @@ -0,0 +1,263 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the package file containing the component ---- +---- declarations. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; + +package WF68901IP_PKG is +component WF68901IP_USART_TOP + port ( CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + RC : in bit; + TC : in bit; + SI : in bit; + SO : out bit; + SO_EN : out bit; + RX_ERR_INT : out bit; + RX_BUFF_INT : out bit; + TX_ERR_INT : out bit; + TX_BUFF_INT : out bit; + RRn : out bit; + TRn : out bit + ); +end component; + +component WF68901IP_USART_CTRL + port ( + CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + RX_SAMPLE : in bit; + RX_DATA : in bit_vector(7 downto 0); + TX_DATA : out bit_vector(7 downto 0); + SCR_OUT : out bit_vector(7 downto 0); + BF : in bit; + BE : in bit; + FE : in bit; + OE : in bit; + UE : in bit; + PE : in bit; + M_CIP : in bit; + FS_B : in bit; + TX_END : in bit; + CL : out bit_vector(1 downto 0); + ST : out bit_vector(1 downto 0); + FS_CLR : out bit; + RSR_READ : out bit; + TSR_READ : out bit; + UDR_READ : out bit; + UDR_WRITE : out bit; + LOOPBACK : out bit; + SDOUT_EN : out bit; + SD_LEVEL : out bit; + CLK_MODE : out bit; + RE : out bit; + TE : out bit; + P_ENA : out bit; + P_EOn : out bit; + SS : out bit; + BR : out bit + ); +end component; + +component WF68901IP_USART_TX + port ( + CLK : in bit; + RESETn : in bit; + SCR : in bit_vector(7 downto 0); + TX_DATA : in bit_vector(7 downto 0); + SDATA_OUT : out bit; + TXCLK : in bit; + CL : in bit_vector(1 downto 0); + ST : in bit_vector(1 downto 0); + TE : in bit; + BR : in bit; + P_ENA : in bit; + P_EOn : in bit; + UDR_WRITE : in bit; + TSR_READ : in bit; + CLK_MODE : in bit; + TX_END : out bit; + UE : out bit; + BE : out bit + ); +end component; + +component WF68901IP_USART_RX + port ( + CLK : in bit; + RESETn : in bit; + SCR : in bit_vector(7 downto 0); + RX_SAMPLE : out bit; + RX_DATA : out bit_vector(7 downto 0); + RXCLK : in bit; + SDATA_IN : in bit; + CL : in bit_vector(1 downto 0); + ST : in bit_vector(1 downto 0); + P_ENA : in bit; + P_EOn : in bit; + CLK_MODE : in bit; + RE : in bit; + FS_CLR : in bit; + SS : in bit; + RSR_READ : in bit; + UDR_READ : in bit; + M_CIP : out bit; + FS_B : out bit; + BF : out bit; + OE : out bit; + PE : out bit; + FE : out bit + ); +end component; + +component WF68901IP_INTERRUPTS + port ( + CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + IACKn : in bit; + IEIn : in bit; + IEOn : out bit; + IRQn : out bit; + GP_INT : in bit_vector(7 downto 0); + AER_4 : in bit; + AER_3 : in bit; + TAI : in bit; + TBI : in bit; + TA_PWM : in bit; + TB_PWM : in bit; + TIMER_A_INT : in bit; + TIMER_B_INT : in bit; + TIMER_C_INT : in bit; + TIMER_D_INT : in bit; + RCV_ERR : in bit; + TRM_ERR : in bit; + RCV_BUF_F : in bit; + TRM_BUF_E : in bit + ); +end component; + +component WF68901IP_GPIO + port ( + CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + AER_4 : out bit; + AER_3 : out bit; + GPIP_IN : in bit_vector(7 downto 0); + GPIP_OUT : out bit_vector(7 downto 0); + GPIP_OUT_EN : out bit_vector(7 downto 0); + GP_INT : out bit_vector(7 downto 0) + ); +end component; + +component WF68901IP_TIMERS + port ( + CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + XTAL1 : in bit; + TAI : in bit; + TBI : in bit; + AER_4 : in bit; + AER_3 : in bit; + TA_PWM : out bit; + TB_PWM : out bit; + TAO : out bit; + TBO : out bit; + TCO : out bit; + TDO : out bit; + TIMER_A_INT : out bit; + TIMER_B_INT : out bit; + TIMER_C_INT : out bit; + TIMER_D_INT : out bit + ); +end component; + +end WF68901IP_PKG; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_timers.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_timers.vhd new file mode 100644 index 0000000..b339af5 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_timers.vhd @@ -0,0 +1,533 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the SUSKA MFP IP core timers logic file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K7A 2006/12/28 WF +-- The timer is modified to work on the CLK instead +-- of XTAL1. This modification is done to provide +-- a synchronous design. +-- Revision 2K8A 2008/02/29 WF +-- Fixed a serious prescaler bug. +-- Revision 2K9A 20090620 WF +-- Introduced timer readback registers. +-- TIMER_x_INT is now a strobe. +-- Minor improvements. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_TIMERS is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + + -- Timers and timer control: + XTAL1 : in bit; -- Use an oszillator instead of a quartz. + TAI : in bit; + TBI : in bit; + AER_4 : in bit; + AER_3 : in bit; + TA_PWM : out bit; -- Indicates, that timer A is in PWM mode (used in Interrupt logic). + TB_PWM : out bit; -- Indicates, that timer B is in PWM mode (used in Interrupt logic). + TAO : buffer bit; + TBO : buffer bit; + TCO : buffer bit; + TDO : buffer bit; + TIMER_A_INT : out bit; + TIMER_B_INT : out bit; + TIMER_C_INT : out bit; + TIMER_D_INT : out bit + ); +end entity WF68901IP_TIMERS; + +architecture BEHAVIOR of WF68901IP_TIMERS is +signal XTAL1_S : bit; +signal XTAL_STRB : bit; +signal TACR : bit_vector(4 downto 0); -- Timer A control register. +signal TBCR : bit_vector(4 downto 0); -- Timer B control register. +signal TCDCR : bit_vector(5 downto 0); -- Timer C and D control register. +signal TADR : bit_vector(7 downto 0); -- Timer A data register. +signal TBDR : bit_vector(7 downto 0); -- Timer B data register. +signal TCDR : bit_vector(7 downto 0); -- Timer C data register. +signal TDDR : bit_vector(7 downto 0); -- Timer D data register. +signal TIMER_A : std_logic_vector(7 downto 0); -- Timer A count register. +signal TIMER_B : std_logic_vector(7 downto 0); -- Timer B count register. +signal TIMER_C : std_logic_vector(7 downto 0); -- Timer C count register. +signal TIMER_D : std_logic_vector(7 downto 0); -- Timer D count register. +signal TIMER_R_A : bit_vector(7 downto 0); -- Timer A readback register. +signal TIMER_R_B : bit_vector(7 downto 0); -- Timer B readback register. +signal TIMER_R_C : bit_vector(7 downto 0); -- Timer C readback register. +signal TIMER_R_D : bit_vector(7 downto 0); -- Timer D readback register. +signal A_CNTSTRB : bit; +signal B_CNTSTRB : bit; +signal C_CNTSTRB : bit; +signal D_CNTSTRB : bit; +signal TAI_I : bit; +signal TBI_I : bit; +signal TAI_STRB : bit; -- Strobe for the event counter mode. +signal TBI_STRB : bit; -- Strobe for the event counter mode. +signal TAO_I : bit; -- Timer A output signal. +signal TBO_I : bit; -- Timer A output signal. +begin + SYNC: process + -- This process provides a 'clean' XTAL1. + -- Without this sync, the edge detector for + -- XTAL_STRB does not work properly. + begin + wait until CLK = '1' and CLK' event; + XTAL1_S <= XTAL1; + -- Polarity control for the event counter and the PWM mode: + TAI_I <= TAI xnor AER_4; + TBI_I <= TBI xnor AER_3; + end process SYNC; + + -- Output enables for timer A and timer B: + -- The outputs are held low for asserted reset flags in the control registers TACR + -- and TBCR but also during a write operation to these registers. + TAO <= '0' when TACR(4) = '1' else + '0' when CSn = '0' and DSn = '0' and RWn = '0' and RS = "01100" else TAO_I; + TBO <= '0' when TBCR(4) = '1' else + '0' when CSn = '0' and DSn = '0' and RWn = '0' and RS = "01101" else TBO_I; + + -- Control outputs for the PWM modi of the timers A and B. These + -- controls are used in the interrupt logic to select the interrupt + -- sources GPIP4 or TAI repective GPIP3 or TBI. + TA_PWM <= '1' when TACR(3 downto 0) > x"8" else '0'; + TB_PWM <= '1' when TBCR(3 downto 0) > x"8" else '0'; + + TIMER_REGISTERS: process(RESETn, CLK) + begin + if RESETn = '0' then + TACR <= (others => '0'); + TBCR <= (others => '0'); + TCDCR <= (others => '0'); + -- TADR <= Do not clear during reset! + -- TBDR <= Do not clear during reset! + -- TCDR <= Do not clear during reset! + -- TDDR <= Do not clear during reset! + elsif CLK = '1' and CLK' event then + if CSn = '0' and DSn = '0' and RWn = '0' then + case RS is + when "01100" => TACR <= DATA_IN(4 downto 0); + when "01101" => TBCR <= DATA_IN(4 downto 0); + when "01110" => TCDCR <= DATA_IN(6 downto 4) & DATA_IN(2 downto 0); + when "01111" => TADR <= DATA_IN; + when "10000" => TBDR <= DATA_IN; + when "10001" => TCDR <= DATA_IN; + when "10010" => TDDR <= DATA_IN; + when others => null; + end case; + end if; + end if; + end process TIMER_REGISTERS; + + TIMER_READBACK : process(RESETn, CLK) + -- This process provides the readback information for the + -- timers A to D. The information read is the information + -- last clocked into the timer read register when the DSn + -- pin had last gone high prior to the current read cycle. + variable READ_A : boolean; + variable READ_B : boolean; + variable READ_C : boolean; + variable READ_D : boolean; + begin + if RESETn = '0' then + TIMER_R_A <= x"00"; + TIMER_R_B <= x"00"; + TIMER_R_C <= x"00"; + TIMER_R_D <= x"00"; + elsif CLK = '1' and CLK' event then + if DSn = '0' and RS = "01111" then + READ_A := true; + elsif DSn = '0' and RS = "10000" then + READ_B := true; + elsif DSn = '0' and RS = "10001" then + READ_C := true; + elsif DSn = '0' and RS = "10010" then + READ_D := true; + elsif DSn = '1' and READ_A = true then + TIMER_R_A <= To_BitVector(TIMER_A); + READ_A := false; + elsif DSn = '1' and READ_B = true then + TIMER_R_B <= To_BitVector(TIMER_B); + READ_B := false; + elsif DSn = '1' and READ_C = true then + TIMER_R_C <= To_BitVector(TIMER_C); + READ_C := false; + elsif DSn = '1' and READ_D = true then + TIMER_R_D <= To_BitVector(TIMER_D); + READ_D := false; + end if; + end if; + end process TIMER_READBACK; + + DATA_OUT_EN <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS > "01011" and RS <= "10010" else '0'; + DATA_OUT <= "000" & TACR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01100" else + "000" & TBCR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01101" else + '0' & TCDCR(5 downto 3) & '0' & TCDCR(2 downto 0) when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01110" else + TIMER_R_A when CSn = '0' and DSn = '0' and RWn = '1' and RS = "01111" else + TIMER_R_B when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10000" else + TIMER_R_C when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10001" else + TIMER_R_D when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10010" else (others => '0'); + + XTAL_STROBE: process(RESETn, CLK) + -- This process provides a strobe with 1 clock cycle + -- (CLK) length after every rising edge of XTAL1. + variable LOCK : boolean; + begin + if RESETn = '0' then + XTAL_STRB <= '0'; + elsif CLK = '1' and CLK' event then + if XTAL1_S = '1' and LOCK = false then + XTAL_STRB <= '1'; + LOCK := true; + elsif XTAL1_S = '0' then + XTAL_STRB <= '0'; + LOCK := false; + else + XTAL_STRB <= '0'; + end if; + end if; + end process XTAL_STROBE; + + TAI_STROBE: process(RESETn, CLK) + variable LOCK : boolean; + begin + if RESETn = '0' then + TAI_STRB <= '0'; + elsif CLK = '1' and CLK' event then + if TAI_I = '1' and XTAL_STRB = '1' and LOCK = false then + LOCK := true; + TAI_STRB <= '1'; + elsif TAI_I = '0' then + LOCK := false; + TAI_STRB <= '0'; + else + TAI_STRB <= '0'; + end if; + end if; + end process TAI_STROBE; + + TBI_STROBE: process(RESETn, CLK) + variable LOCK : boolean; + begin + if RESETn = '0' then + TBI_STRB <= '0'; + elsif CLK = '1' and CLK' event then + if TBI_I = '1' and XTAL_STRB = '1' and LOCK = false then + LOCK := true; + TBI_STRB <= '1'; + elsif TBI_I = '0' then + LOCK := false; + TBI_STRB <= '0'; + else + TBI_STRB <= '0'; + end if; + end if; + end process TBI_STROBE; + + PRESCALE_A: process + -- The prescalers work even if the RESETn is asserted. + variable PRESCALE : std_logic_vector(7 downto 0); + begin + wait until CLK = '1' and CLK' event; + A_CNTSTRB <= '0'; + if PRESCALE > x"00" and XTAL_STRB = '1' then + PRESCALE := PRESCALE - '1'; + elsif XTAL_STRB = '1' then + case TACR(2 downto 0) is + when "111" => PRESCALE := x"C7"; -- Prescaler = 200. + when "110" => PRESCALE := x"63"; -- Prescaler = 100. + when "101" => PRESCALE := x"3F"; -- Prescaler = 64. + when "100" => PRESCALE := x"31"; -- Prescaler = 50. + when "011" => PRESCALE := x"0F"; -- Prescaler = 16. + when "010" => PRESCALE := x"09"; -- Prescaler = 10. + when "001" => PRESCALE := x"03"; -- Prescaler = 4. + when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode. + end case; + A_CNTSTRB <= '1'; + end if; + end process PRESCALE_A; + + PRESCALE_B: process + -- The prescalers work even if the RESETn is asserted. + variable PRESCALE : std_logic_vector(7 downto 0); + begin + wait until CLK = '1' and CLK' event; + B_CNTSTRB <= '0'; + if PRESCALE > x"00" and XTAL_STRB = '1' then + PRESCALE := PRESCALE - '1'; + elsif XTAL_STRB = '1' then + case TBCR(2 downto 0) is + when "111" => PRESCALE := x"C7"; -- Prescaler = 200. + when "110" => PRESCALE := x"63"; -- Prescaler = 100. + when "101" => PRESCALE := x"3F"; -- Prescaler = 64. + when "100" => PRESCALE := x"31"; -- Prescaler = 50. + when "011" => PRESCALE := x"0F"; -- Prescaler = 16. + when "010" => PRESCALE := x"09"; -- Prescaler = 10. + when "001" => PRESCALE := x"03"; -- Prescaler = 4. + when "000" => PRESCALE := x"00"; -- Timer stopped or event count mode. + end case; + B_CNTSTRB <= '1'; + end if; + end process PRESCALE_B; + + PRESCALE_C: process + -- The prescalers work even if the RESETn is asserted. + variable PRESCALE : std_logic_vector(7 downto 0); + begin + wait until CLK = '1' and CLK' event; + C_CNTSTRB <= '0'; + if PRESCALE > x"00" and XTAL_STRB = '1' then + PRESCALE := PRESCALE - '1'; + elsif XTAL_STRB = '1' then + case TCDCR(5 downto 3) is + when "111" => PRESCALE := x"C7"; -- Prescaler = 200. + when "110" => PRESCALE := x"63"; -- Prescaler = 100. + when "101" => PRESCALE := x"3F"; -- Prescaler = 64. + when "100" => PRESCALE := x"31"; -- Prescaler = 50. + when "011" => PRESCALE := x"0F"; -- Prescaler = 16. + when "010" => PRESCALE := x"09"; -- Prescaler = 10. + when "001" => PRESCALE := x"03"; -- Prescaler = 4. + when "000" => PRESCALE := x"00"; -- Timer stopped. + end case; + C_CNTSTRB <= '1'; + end if; + end process PRESCALE_C; + + PRESCALE_D: process + -- The prescalers work even if the RESETn is asserted. + variable PRESCALE : std_logic_vector(7 downto 0); + begin + wait until CLK = '1' and CLK' event; + D_CNTSTRB <= '0'; + if PRESCALE > x"00" and XTAL_STRB = '1' then + PRESCALE := PRESCALE - '1'; + elsif XTAL_STRB = '1' then + case TCDCR(2 downto 0) is + when "111" => PRESCALE := x"C7"; -- Prescaler = 200. + when "110" => PRESCALE := x"63"; -- Prescaler = 100. + when "101" => PRESCALE := x"3F"; -- Prescaler = 64. + when "100" => PRESCALE := x"31"; -- Prescaler = 50. + when "011" => PRESCALE := x"0F"; -- Prescaler = 16. + when "010" => PRESCALE := x"09"; -- Prescaler = 10. + when "001" => PRESCALE := x"03"; -- Prescaler = 4. + when "000" => PRESCALE := x"00"; -- Timer stopped. + end case; + D_CNTSTRB <= '1'; + end if; + end process PRESCALE_D; + + TIMERA: process(RESETn, CLK) + begin + if RESETn = '0' then + -- Do not clear the timer registers during system reset. + TAO_I <= '0'; + TIMER_A_INT <= '0'; + elsif CLK = '1' and CLK' event then + TIMER_A_INT <= '0'; + -- + if CSn = '0' and DSn = '0' and RWn = '0' and RS = "01111" and TACR(3 downto 0) = x"0" then + -- The timer is reloaded simultaneously to it's timer data register, if it is off. + -- The loading works asynchronous due to the possibly low XTAL1 clock. + TIMER_A <= To_StdLogicVector(DATA_IN); + else + case TACR(3 downto 0) is + when x"0" => -- Timer is off. + TAO_I <= '0'; + when x"1" | x"2" | x"3" | x"4" | x"5" | x"6" | x"7" => -- Delay counter mode. + if A_CNTSTRB = '1' and TIMER_A /= x"01" then -- Count. + TIMER_A <= TIMER_A - '1'; + elsif A_CNTSTRB = '1' and TIMER_A = x"01" then -- Reload. + TIMER_A <= To_StdLogicVector(TADR); + TAO_I <= not TAO_I; -- Toggle the timer A output pin. + TIMER_A_INT <= '1'; + end if; + when x"8" => -- Event count operation. + if TAI_STRB = '1' and TIMER_A /= x"01" then -- Count. + TIMER_A <= TIMER_A - '1'; + elsif TAI_STRB = '1' and TIMER_A = x"01" then -- Reload. + TIMER_A <= To_StdLogicVector(TADR); + TAO_I <= not TAO_I; -- Toggle the timer A output pin. + TIMER_A_INT <= '1'; + end if; + when x"9" | x"A" | x"B" | x"C" | x"D" | x"E" | x"F" => -- PWM mode. + if TAI_I = '1' and A_CNTSTRB = '1' and TIMER_A /= x"01" then -- Count. + TIMER_A <= TIMER_A - '1'; + elsif TAI_I = '1' and A_CNTSTRB = '1' and TIMER_A = x"01" then -- Reload. + TIMER_A <= To_StdLogicVector(TADR); + TAO_I <= not TAO_I; -- Toggle the timer A output pin. + TIMER_A_INT <= '1'; + end if; + end case; + end if; + end if; + end process TIMERA; + + TIMERB: process(RESETn, CLK) + begin + if RESETn = '0' then + -- Do not clear the timer registers during system reset. + TBO_I <= '0'; + TIMER_B_INT <= '0'; + elsif CLK = '1' and CLK' event then + TIMER_B_INT <= '0'; + -- + if CSn = '0' and DSn = '0' and RWn = '0' and RS = "10000" and TBCR(3 downto 0) = x"0" then + -- The timer is reloaded simultaneously to it's timer data register, if it is off. + -- The loading works asynchronous due to the possibly low XTAL1 clock. + TIMER_B <= To_StdLogicVector(DATA_IN); + else + case TBCR(3 downto 0) is + when x"0" => -- Timer is off. + TBO_I <= '0'; + when x"1" | x"2" | x"3" | x"4" | x"5" | x"6" | x"7" => -- Delay counter mode. + if B_CNTSTRB = '1' and TIMER_B /= x"01" then -- Count. + TIMER_B <= TIMER_B - '1'; + elsif B_CNTSTRB = '1' and TIMER_B = x"01" then -- Reload. + TIMER_B <= To_StdLogicVector(TBDR); + TBO_I <= not TBO_I; -- Toggle the timer B output pin. + TIMER_B_INT <= '1'; + end if; + when x"8" => -- Event count operation. + if TBI_STRB = '1' and TIMER_B /= x"01" then -- Count. + TIMER_B <= TIMER_B - '1'; + elsif TBI_STRB = '1' and TIMER_B = x"01" then -- Reload. + TIMER_B <= To_StdLogicVector(TBDR); + TBO_I <= not TBO_I; -- Toggle the timer B output pin. + TIMER_B_INT <= '1'; + end if; + when x"9" | x"A" | x"B" | x"C" | x"D" | x"E" | x"F" => -- PWM mode. + if TBI_I = '1' and B_CNTSTRB = '1' and TIMER_B /= x"01" then -- Count. + TIMER_B <= TIMER_B - '1'; + elsif TBI_I = '1' and B_CNTSTRB = '1' and TIMER_B = x"01" then -- Reload. + TIMER_B <= To_StdLogicVector(TBDR); + TBO_I <= not TBO_I; -- Toggle the timer B output pin. + TIMER_B_INT <= '1'; + end if; + end case; + end if; + end if; + end process TIMERB; + + TIMERC: process(RESETn, CLK) + begin + if RESETn = '0' then + -- Do not clear the timer registers during system reset. + TCO <= '0'; + TIMER_C_INT <= '0'; + elsif CLK = '1' and CLK' event then + TIMER_C_INT <= '0'; + -- + if CSn = '0' and DSn = '0' and RWn = '0' and RS = "10001" and TCDCR(5 downto 3) = "000" then + -- The timer is reloaded simultaneously to it's timer data register, if it is off. + -- The loading works asynchronous due to the possibly low XTAL1 clock. + TIMER_C <= To_StdLogicVector(DATA_IN); + else + case TCDCR(5 downto 3) is + when "000" => -- Timer is off. + TCO <= '0'; + when others => -- Delay counter mode. + if C_CNTSTRB = '1' and TIMER_C /= x"01" then -- Count. + TIMER_C <= TIMER_C - '1'; + elsif C_CNTSTRB = '1' and TIMER_C = x"01" then -- Reload. + TIMER_C <= To_StdLogicVector(TCDR); + TCO <= not TCO; -- Toggle the timer C output pin. + TIMER_C_INT <= '1'; + end if; + end case; + end if; + end if; + end process TIMERC; + + TIMERD: process(RESETn, CLK) + begin + if RESETn = '0' then + -- Do not clear the timer registers during system reset. + TDO <= '0'; + TIMER_D_INT <= '0'; + elsif CLK = '1' and CLK' event then + TIMER_D_INT <= '0'; + -- + if CSn = '0' and DSn = '0' and RWn = '0' and RS = "10010" and TCDCR(2 downto 0) = "000" then + -- The timer is reloaded simultaneously to it's timer data register, if it is off. + -- The loading works asynchronous due to the possibly low XTAL1 clock. + TIMER_D <= To_StdLogicVector(DATA_IN); + else + case TCDCR(2 downto 0) is + when "000" => -- Timer is off. + TDO <= '0'; + when others => -- Delay counter mode. + if D_CNTSTRB = '1' and TIMER_D /= x"01" then -- Count. + TIMER_D <= TIMER_D - '1'; + elsif D_CNTSTRB = '1' and TIMER_D = x"01" then -- Reload. + TIMER_D <= To_StdLogicVector(TDDR); + TDO <= not TDO; -- Toggle the timer D output pin. + TIMER_D_INT <= '1'; + end if; + end case; + end if; + end if; + end process TIMERD; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top.vhd new file mode 100644 index 0000000..783ba56 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top.vhd @@ -0,0 +1,213 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the SUSKA MFP IP core top level file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K7A 2006/12/28 WF +-- The timer is modified to work on the CLK instead +-- of XTAL1. This modification is done to provide +-- a synchronous design. +-- Revision 2K8B 2008/12/24 WF +-- Rewritten this top level file as a wrapper for the top_soc file. +-- + +use work.wf68901ip_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_TOP is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + DTACKn : out std_logic; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA : inout std_logic_vector(7 downto 0); + GPIP : inout std_logic_vector(7 downto 0); + + -- Interrupt control: + IACKn : in bit; + IEIn : in bit; + IEOn : out bit; + IRQn : out std_logic; + + -- Timers and timer control: + XTAL1 : in bit; -- Use an oszillator instead of a quartz. + TAI : in bit; + TBI : in bit; + TAO : out bit; + TBO : out bit; + TCO : out bit; + TDO : out bit; + + -- Serial I/O control: + RC : in bit; + TC : in bit; + SI : in bit; + SO : out std_logic; + + -- DMA control: + RRn : out bit; + TRn : out bit + ); +end entity WF68901IP_TOP; + +architecture STRUCTURE of WF68901IP_TOP is +component WF68901IP_TOP_SOC + port(CLK : in bit; + RESETn : in bit; + DSn : in bit; + CSn : in bit; + RWn : in bit; + DTACKn : out bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + GPIP_IN : in bit_vector(7 downto 0); + GPIP_OUT : out bit_vector(7 downto 0); + GPIP_EN : out bit_vector(7 downto 0); + IACKn : in bit; + IEIn : in bit; + IEOn : out bit; + IRQn : out bit; + XTAL1 : in bit; + TAI : in bit; + TBI : in bit; + TAO : out bit; + TBO : out bit; + TCO : out bit; + TDO : out bit; + RC : in bit; + TC : in bit; + SI : in bit; + SO : out bit; + SO_EN : out bit; + RRn : out bit; + TRn : out bit + ); +end component; +-- +signal DTACK_In : bit; +signal IRQ_In : bit; +signal DATA_OUT : std_logic_vector(7 downto 0); +signal DATA_EN : bit; +signal GPIP_IN : bit_vector(7 downto 0); +signal GPIP_OUT : bit_vector(7 downto 0); +signal GPIP_EN : bit_vector(7 downto 0); +signal SO_I : bit; +signal SO_EN : bit; +begin + DTACKn <= '0' when DTACK_In = '0' else 'Z'; -- Open drain. + IRQn <= '0' when IRQ_In = '0' else 'Z'; -- Open drain. + + DATA <= DATA_OUT when DATA_EN = '1' else (others => 'Z'); + + GPIP_IN <= To_BitVector(GPIP); + + P_GPIP_OUT: process(GPIP_OUT, GPIP_EN) + begin + for i in 7 downto 0 loop + if GPIP_EN(i) = '1' then + case GPIP_OUT(i) is + when '0' => GPIP(i) <= '0'; + when others => GPIP(i) <= '1'; + end case; + else + GPIP(i) <= 'Z'; + end if; + end loop; + end process P_GPIP_OUT; + + SO <= '0' when SO_I = '0' and SO_EN = '1' else + '1' when SO_I = '1' and SO_EN = '1' else 'Z'; + + I_MFP: WF68901IP_TOP_SOC + port map(CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + DTACKn => DTACK_In, + RS => RS, + DATA_IN => DATA, + DATA_OUT => DATA_OUT, + DATA_EN => DATA_EN, + GPIP_IN => GPIP_IN, + GPIP_OUT => GPIP_OUT, + GPIP_EN => GPIP_EN, + IACKn => IACKn, + IEIn => IEIn, + IEOn => IEOn, + IRQn => IRQ_In, + XTAL1 => XTAL1, + TAI => TAI, + TBI => TBI, + TAO => TAO, + TBO => TBO, + TCO => TCO, + TDO => TDO, + RC => RC, + TC => TC, + SI => SI, + SO => SO_I, + SO_EN => SO_EN, + RRn => RRn, + TRn => TRn + ); +end architecture STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top_soc.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top_soc.vhd new file mode 100644 index 0000000..1e559d9 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top_soc.vhd @@ -0,0 +1,309 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the SUSKA MFP IP core top level file. ---- +---- Top level file for use in systems on programmable chips. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Top level file provided for SOC (systems on programmable chips). +-- Revision 2K7A 2006/12/28 WF +-- The timer is modified to work on the CLK instead +-- of XTAL1. This modification is done to provide +-- a synchronous design. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- DTACK_OUTn has now synchronous reset to meet preset requirement. +-- +-- + +use work.wf68901ip_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_TOP_SOC is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + DTACKn : out bit; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + GPIP_IN : in bit_vector(7 downto 0); + GPIP_OUT : out bit_vector(7 downto 0); + GPIP_EN : out bit_vector(7 downto 0); + + -- Interrupt control: + IACKn : in bit; + IEIn : in bit; + IEOn : out bit; + IRQn : out bit; + + -- Timers and timer control: + XTAL1 : in bit; -- Use an oszillator instead of a quartz. + TAI : in bit; + TBI : in bit; + TAO : out bit; + TBO : out bit; + TCO : out bit; + TDO : out bit; + + -- Serial I/O control: + RC : in bit; + TC : in bit; + SI : in bit; + SO : out bit; + SO_EN : out bit; + + -- DMA control: + RRn : out bit; + TRn : out bit + ); +end entity WF68901IP_TOP_SOC; + +architecture STRUCTURE of WF68901IP_TOP_SOC is +signal DATA_IN_I : bit_vector(7 downto 0); +signal DTACK_In : bit; +signal DTACK_LOCK : boolean; +signal DTACK_OUTn : bit; +signal RX_ERR_INT_I : bit; +signal TX_ERR_INT_I : bit; +signal RX_BUFF_INT_I : bit; +signal TX_BUFF_INT_I : bit; +signal DATA_OUT_USART_I : bit_vector(7 downto 0); +signal DATA_OUT_EN_USART_I : bit; +signal DATA_OUT_INT_I : bit_vector(7 downto 0); +signal DATA_OUT_EN_INT_I : bit; +signal DATA_OUT_GPIO_I : bit_vector(7 downto 0); +signal DATA_OUT_EN_GPIO_I : bit; +signal DATA_OUT_TIMERS_I : bit_vector(7 downto 0); +signal DATA_OUT_EN_TIMERS_I : bit; +signal SO_I : bit; +signal SO_EN_I : bit; +signal GPIP_IN_I : bit_vector(7 downto 0); +signal GPIP_OUT_I : bit_vector(7 downto 0); +signal GPIP_EN_I : bit_vector(7 downto 0); +signal GP_INT_I : bit_vector(7 downto 0); +signal TIMER_A_INT_I : bit; +signal TIMER_B_INT_I : bit; +signal TIMER_C_INT_I : bit; +signal TIMER_D_INT_I : bit; +signal IRQ_In : bit; +signal AER_4_I : bit; +signal AER_3_I : bit; +signal TA_PWM_I : bit; +signal TB_PWM_I : bit; +begin + -- Interrupt request (open drain): + IRQn <= IRQ_In; + + -- Serial data output: + SO <= SO_I; + SO_EN <= SO_EN_I and RESETn; + + -- General purpose port: + GPIP_IN_I <= GPIP_IN; + GPIP_OUT <= GPIP_OUT_I; + GPIP_EN <= GPIP_EN_I; + + DATA_IN_I <= To_BitVector(DATA_IN); + DATA_EN <= DATA_OUT_EN_USART_I or DATA_OUT_EN_INT_I or DATA_OUT_EN_GPIO_I or DATA_OUT_EN_TIMERS_I; + -- Output data multiplexer: + DATA_OUT <= To_StdLogicVector(DATA_OUT_USART_I) when DATA_OUT_EN_USART_I = '1' else + To_StdLogicVector(DATA_OUT_INT_I) when DATA_OUT_EN_INT_I = '1' else + To_StdLogicVector(DATA_OUT_GPIO_I) when DATA_OUT_EN_GPIO_I = '1' else + To_StdLogicVector(DATA_OUT_TIMERS_I) when DATA_OUT_EN_TIMERS_I = '1' else (others => '1'); + + -- Data acknowledge handshake is provided by the following statement and the consecutive two + -- processes. For more information refer to the M68000 family reference manual. + DTACK_In <= '0' when CSn = '0' and DSn = '0' and RS <= "10111" else -- Read and write operation. + '0' when IACKn = '0' and DSn = '0' and IEIn = '0' else '1'; -- Interrupt vector data acknowledge. + + P_DTACK_LOCK: process + -- This process releases a data acknowledge detect, one rising clock + -- edge after the DTACK_In occured. This is necessary to ensure write + -- data to registers for there is one rising clock edge required. + begin + wait until CLK = '1' and CLK' event; + if DTACK_In = '0' then + DTACK_LOCK <= false; + else + DTACK_LOCK <= true; + end if; + end process P_DTACK_LOCK; + + DTACK_OUT: process + -- The DTACKn port pin is released on the falling clock edge after the data + -- acknowledge detect (DTACK_LOCK) is asserted. The DTACKn is deasserted + -- immediately when there is no further register access DTACK_In = '1'; + begin + wait until CLK = '0' and CLK' event; + if RESETn = '0' then + DTACK_OUTn <= '1'; + elsif DTACK_In = '1' then + DTACK_OUTn <= '1'; + elsif DTACK_LOCK = false then + DTACK_OUTn <= '0'; + end if; + end process DTACK_OUT; + DTACKn <= '0' when DTACK_OUTn = '0' else '1'; + + I_USART: WF68901IP_USART_TOP + port map( + CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_OUT_USART_I, + DATA_OUT_EN => DATA_OUT_EN_USART_I, + RC => RC, + TC => TC, + SI => SI, + SO => SO_I, + SO_EN => SO_EN_I, + RX_ERR_INT => RX_ERR_INT_I, + RX_BUFF_INT => RX_BUFF_INT_I, + TX_ERR_INT => TX_ERR_INT_I, + TX_BUFF_INT => TX_BUFF_INT_I, + RRn => RRn, + TRn => TRn + ); + + I_INTERRUPTS: WF68901IP_INTERRUPTS + port map( + CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_OUT_INT_I, + DATA_OUT_EN => DATA_OUT_EN_INT_I, + IACKn => IACKn, + IEIn => IEIn, + IEOn => IEOn, + IRQn => IRQ_In, + GP_INT => GP_INT_I, + AER_4 => AER_4_I, + AER_3 => AER_3_I, + TAI => TAI, + TBI => TBI, + TA_PWM => TA_PWM_I, + TB_PWM => TB_PWM_I, + TIMER_A_INT => TIMER_A_INT_I, + TIMER_B_INT => TIMER_B_INT_I, + TIMER_C_INT => TIMER_C_INT_I, + TIMER_D_INT => TIMER_D_INT_I, + RCV_ERR => RX_ERR_INT_I, + TRM_ERR => TX_ERR_INT_I, + RCV_BUF_F => RX_BUFF_INT_I, + TRM_BUF_E => TX_BUFF_INT_I + ); + + I_GPIO: WF68901IP_GPIO + port map( + CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_OUT_GPIO_I, + DATA_OUT_EN => DATA_OUT_EN_GPIO_I, + AER_4 => AER_4_I, + AER_3 => AER_3_I, + GPIP_IN => GPIP_IN_I, + GPIP_OUT => GPIP_OUT_I, + GPIP_OUT_EN => GPIP_EN_I, + GP_INT => GP_INT_I + ); + + I_TIMERS: WF68901IP_TIMERS + port map( + CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_OUT_TIMERS_I, + DATA_OUT_EN => DATA_OUT_EN_TIMERS_I, + XTAL1 => XTAL1, + AER_4 => AER_4_I, + AER_3 => AER_3_I, + TAI => TAI, + TBI => TBI, + TAO => TAO, + TBO => TBO, + TCO => TCO, + TDO => TDO, + TA_PWM => TA_PWM_I, + TB_PWM => TB_PWM_I, + TIMER_A_INT => TIMER_A_INT_I, + TIMER_B_INT => TIMER_B_INT_I, + TIMER_C_INT => TIMER_C_INT_I, + TIMER_D_INT => TIMER_D_INT_I + ); +end architecture STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd new file mode 100644 index 0000000..8e7c3cc --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd @@ -0,0 +1,191 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This is the SUSKA MFP IP core USART control file. ---- +---- ---- +---- Control unit and status logic. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_USART_CTRL is + port ( + -- System Control: + CLK : in bit; + RESETn : in bit; + + -- Bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + + -- USART data register + RX_SAMPLE : in bit; + RX_DATA : in bit_vector(7 downto 0); + TX_DATA : out bit_vector(7 downto 0); + SCR_OUT : out bit_vector(7 downto 0); + + -- USART control inputs: + BF : in bit; + BE : in bit; + FE : in bit; + OE : in bit; + UE : in bit; + PE : in bit; + M_CIP : in bit; + FS_B : in bit; + TX_END : in bit; + + -- USART control outputs: + CL : out bit_vector(1 downto 0); + ST : out bit_vector(1 downto 0); + FS_CLR : out bit; + UDR_WRITE : out bit; + UDR_READ : out bit; + RSR_READ : out bit; + TSR_READ : out bit; + LOOPBACK : out bit; + SDOUT_EN : out bit; + SD_LEVEL : out bit; + CLK_MODE : out bit; + RE : out bit; + TE : out bit; + P_ENA : out bit; + P_EOn : out bit; + SS : out bit; + BR : out bit + ); +end entity WF68901IP_USART_CTRL; + +architecture BEHAVIOR of WF68901IP_USART_CTRL is +signal SCR : bit_vector(7 downto 0); -- Synchronous data register. +signal UCR : bit_vector(7 downto 1); -- USART control register. +signal RSR : bit_vector(7 downto 0); -- Receiver status register. +signal TSR : bit_vector(7 downto 0); -- Transmitter status register. +signal UDR : bit_vector(7 downto 0); -- USART data register. +begin + USART_REGISTERS: process(RESETn, CLK) + begin + if RESETn = '0' then + SCR <= (others => '0'); + UCR <= (others => '0'); + RSR <= (others => '0'); + -- TSR and UDR are not cleared during an asserted RESETn + elsif CLK = '1' and CLK' event then + -- Loading via receiver shift register + -- has priority over data buss access: + if RX_SAMPLE = '1' then + UDR <= RX_DATA; + elsif CSn = '0' and DSn = '0' and RWn = '0' then + case RS is + when "10011" => SCR <= DATA_IN; + when "10100" => UCR <= DATA_IN(7 downto 1); + when "10101" => RSR(1 downto 0) <= DATA_IN(1 downto 0); -- Only the two LSB are read/write. + when "10110" => TSR(5) <= DATA_IN(5); TSR(3 downto 0) <= DATA_IN(3 downto 0); + when "10111" => UDR <= DATA_IN; + when others => null; + end case; + end if; + RSR(7 downto 2) <= BF & OE & PE & FE & FS_B & M_CIP; + TSR(7 downto 6) <= BE & UE; + TSR(4) <= TX_END; + TX_DATA <= UDR; + end if; + end process USART_REGISTERS; + DATA_OUT_EN <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS >= "10011" and RS <= "10111" else '0'; + DATA_OUT <= SCR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10011" else + UCR & '0' when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10100" else + RSR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10101" else + TSR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10110" else + UDR when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10111" else x"00"; + + UDR_WRITE <= '1' when CSn = '0' and DSn = '0' and RWn = '0' and RS = "10111" else '0'; + UDR_READ <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10111" else '0'; + RSR_READ <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10101" else '0'; + TSR_READ <= '1' when CSn = '0' and DSn = '0' and RWn = '1' and RS = "10110" else '0'; + FS_CLR <= '1' when CSn = '0' and DSn = '0' and RWn = '0' and RS = "10011" else '0'; + + RE <= '1' when RSR(0) = '1' else -- Receiver enable. + '1' when TSR(5) = '1' and TX_END = '1' else '0'; -- Auto Turnaround. + SS <= RSR(1); -- Synchronous strip enable. + BR <= TSR(3); -- Send break. + TE <= TSR(0); -- Transmitter enable. + + SCR_OUT <= SCR; + + CLK_MODE <= UCR(7); -- Clock mode. + CL <= UCR(6 downto 5); -- Character length. + ST <= UCR(4 downto 3); -- Start/Stop configuration. + P_ENA <= UCR(2); -- Parity enable. + P_EOn <= UCR(1); -- Even or odd parity. + + SOUT_CONFIG: process + begin + wait until CLK = '1' and CLK' event; + -- Do not change the output configuration until the transmitter is disabled and + -- current character has been transmitted (TX_END = '1'). + if TX_END = '1' then + case TSR(2 downto 1) is + when "00" => LOOPBACK <= '0'; SD_LEVEL <= '0'; SDOUT_EN <= '0'; + when "01" => LOOPBACK <= '0'; SD_LEVEL <= '0'; SDOUT_EN <= '1'; + when "10" => LOOPBACK <= '0'; SD_LEVEL <= '1'; SDOUT_EN <= '1'; + when "11" => LOOPBACK <= '1'; SD_LEVEL <= '1'; SDOUT_EN <= '1'; + end case; + end if; + end process SOUT_CONFIG; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_rx.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_rx.vhd new file mode 100644 index 0000000..eb00a11 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_rx.vhd @@ -0,0 +1,590 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This is the SUSKA MFP IP core USART receiver file. ---- +---- ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- Process P_STARTBIT has now synchronous reset to meet preset requirement. +-- Process P_SAMPLE has now synchronous reset to meet preset requirement. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_USART_RX is + port ( + CLK : in bit; + RESETn : in bit; + + SCR : in bit_vector(7 downto 0); -- Synchronous character. + RX_SAMPLE : buffer bit; -- Flag indicating valid shift register data. + RX_DATA : out bit_vector(7 downto 0); -- Received data. + + RXCLK : in bit; -- Receiver clock. + SDATA_IN : in bit; -- Serial data input. + + CL : in bit_vector(1 downto 0); -- Character length. + ST : in bit_vector(1 downto 0); -- Start and stop bit configuration. + P_ENA : in bit; -- Parity enable. + P_EOn : in bit; -- Even or odd parity. + CLK_MODE : in bit; -- Clock mode configuration bit. + RE : in bit; -- Receiver enable. + FS_CLR : in bit; -- Clear the Found/Search flag for resynchronisation purpose. + SS : in bit; -- Synchronous strip enable. + UDR_READ : in bit; -- Flag indicating reading the data register. + RSR_READ : in bit; -- Flag indicating reading the receiver status register. + + M_CIP : out bit; -- Match/Character in progress. + FS_B : buffer bit; -- Find/Search or Break detect flag. + BF : out bit; -- Buffer full. + OE : out bit; -- Overrun error. + PE : out bit; -- Parity error. + FE : out bit -- Framing error. + ); +end entity WF68901IP_USART_RX; + +architecture BEHAVIOR of WF68901IP_USART_RX is +type RCV_STATES is (IDLE, WAIT_START, SAMPLE, PARITY, STOP1, STOP2, SYNC); +signal RCV_STATE, RCV_NEXT_STATE : RCV_STATES; +signal SDATA_DIV16 : bit; +signal SDATA_IN_I : bit; +signal SDATA_EDGE : bit; +signal SHIFT_REG : bit_vector(7 downto 0); +signal CLK_STRB : bit; +signal CLK_2_STRB : bit; +signal BITCNT : std_logic_vector(2 downto 0); +signal BREAK : boolean; +signal RDRF : bit; +signal STARTBIT : boolean; +begin + BF <= RDRF; -- Buffer full = Receiver Data Register Full. + RX_SAMPLE <= '1' when RCV_STATE = SYNC and ST /= "00" else -- Asynchronous mode: + -- Synchronous modes: + '1' when RCV_STATE = SYNC and ST = "00" and SS = '0' else + '1' when RCV_STATE = SYNC and ST = "00" and SS = '1' and SHIFT_REG /= SCR else '0'; + + -- Data multiplexer for the received data: + RX_DATA <= "000" & SHIFT_REG(7 downto 3) when RX_SAMPLE = '1' and CL = "11" else -- 5 databits. + "00" & SHIFT_REG(7 downto 2) when RX_SAMPLE = '1' and CL = "10" else -- 6 databits. + '0' & SHIFT_REG(7 downto 1) when RX_SAMPLE = '1' and CL = "01" else -- 6 databits. + SHIFT_REG when RX_SAMPLE = '1' and CL = "00" else x"00"; -- 8 databits. + + P_SAMPLE: process + -- This process provides the 'valid transition logic' of the originally MC68901. For further + -- details see the 'M68000 FAMILY REFERENCE MANUAL'. + variable LOW_FLT : std_logic_vector(1 downto 0); + variable HI_FLT : std_logic_vector(1 downto 0); + variable CLK_LOCK : boolean; + variable EDGE_LOCK : boolean; + variable TIMER : std_logic_vector(2 downto 0); + variable TIMER_LOCK : boolean; + variable NEW_SDATA : bit; + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' or RE = '0' then + -- The reset condition assumes the SDATA_IN logic high. Otherwise + -- one not valid SDATA_EDGE pulse occurs during system startup. + CLK_LOCK := true; + EDGE_LOCK := true; + HI_FLT := "11"; + LOW_FLT := "11"; + SDATA_EDGE <= '0'; + NEW_SDATA := '1'; + -- Positive or negative edge detector for the incoming data. + -- Any transition must be valid for at least three receiver clock + -- cycles. The TIMER locking inhibits detecting four receiver + -- clock cycles after a valid transition. + elsif RXCLK = '1' and SDATA_IN = '0' and CLK_LOCK = false and LOW_FLT > "00" then + CLK_LOCK := true; + EDGE_LOCK := false; + HI_FLT := "00"; + LOW_FLT := LOW_FLT - '1'; + elsif RXCLK = '1' and SDATA_IN = '1' and CLK_LOCK = false and HI_FLT < "11" then + CLK_LOCK := true; + EDGE_LOCK := false; + LOW_FLT := "11"; + HI_FLT := HI_FLT + '1'; + elsif RXCLK = '1' and EDGE_LOCK = false and LOW_FLT = "00" then + EDGE_LOCK := true; + SDATA_EDGE <= '1'; -- Falling edge detected. + NEW_SDATA := '0'; + elsif RXCLK = '1' and EDGE_LOCK = false and HI_FLT = "11" then + EDGE_LOCK := true; + SDATA_EDGE <= '1'; -- Rising edge detected. + NEW_SDATA := '1'; + elsif RXCLK = '1' and CLK_LOCK = false then + CLK_LOCK := true; + SDATA_EDGE <= '0'; + elsif RXCLK = '0' then + CLK_LOCK := false; + end if; + -- + if RESETn = '0' or RE = '0' then + -- The reset condition assumes the SDATA_IN logic high. Otherwise + -- one not valid SDATA_EDGE pulse occurs during system startup. + TIMER := "111"; + TIMER_LOCK := true; + SDATA_DIV16 <= '1'; + -- The timer controls the SDATA in a way, that after a detected valid + -- Transistion, the serial data is sampled on the 8th receiver clock + -- edge after the initial valid transition occured. + elsif RXCLK = '1' and SDATA_EDGE = '1' and TIMER_LOCK = false then + TIMER_LOCK := true; + TIMER := "000"; -- Resynchronisation. + elsif RXCLK = '1' and TIMER = "011" and TIMER_LOCK = false then + TIMER_LOCK := true; + SDATA_DIV16 <= NEW_SDATA; -- Scan the new data. + TIMER := TIMER + '1'; -- Timing is active. + elsif RXCLK = '1' and TIMER < "111" and TIMER_LOCK = false then + TIMER_LOCK := true; + TIMER := TIMER + '1'; -- Timing is active. + elsif RXCLK = '0' then + TIMER_LOCK := false; + end if; + end process P_SAMPLE; + + P_START_BIT: process(CLK) + -- This is the valid start bit logic of the original MC68901 multi function + -- port's USART receiver. + variable TMP : std_logic_vector(2 downto 0); + variable LOCK : boolean; + begin + if CLK = '1' and CLK' event then + if RESETn = '0' then + TMP := "000"; + LOCK := true; + elsif RE = '0' or RCV_STATE /= IDLE then -- Start bit logic disabled. + TMP := "000"; + LOCK := true; + elsif SDATA_EDGE = '1' then + TMP := "000"; -- (Re)-Initialize. + LOCK := false; -- Start counting. + elsif RXCLK = '1' and SDATA_IN = '0' and TMP < "111" and LOCK = false then + LOCK := true; + TMP := TMP + '1'; -- Count 8 low bits to declare start condition valid. + elsif RXCLK = '0' then + LOCK := false; + end if; + end if; + + case TMP is + when "111" => STARTBIT <= true; + when others => STARTBIT <= false; + end case; + end process P_START_BIT; + + SDATA_IN_I <= SDATA_IN when CLK_MODE = '0' else -- Clock div by 1 mode. + SDATA_IN when ST = "00" else SDATA_DIV16; -- Synchronous mode. + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(4 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CLK_MODE = '0' then -- Divider off. + if RXCLK = '1' and STRB_LOCK = false then + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif RXCLK = '0' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + CLK_2_STRB <= '0'; -- No 1 1/2 stop bits in no div by 16 mode. + elsif SDATA_EDGE = '1' then +CLK_DIVCNT := "01100"; -- Div by 16 mode. + CLK_STRB <= '0'; -- Default. + CLK_2_STRB <= '0'; -- Default. + else + CLK_STRB <= '0'; -- Default. + CLK_2_STRB <= '0'; -- Default. + if CLK_DIVCNT > "00000" and RXCLK = '1' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_LOCK := true; + if CLK_DIVCNT = "01000" then + -- This strobe is asserted at half of the clock cycle. + -- It is used for the stop bit timing. + CLK_2_STRB <= '1'; + end if; + elsif CLK_DIVCNT = "00000" then + CLK_DIVCNT := "10000"; -- Div by 16 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + end if; + elsif RXCLK = '0' then + CLK_LOCK := false; + STRB_LOCK := false; + end if; + end if; + end process CLKDIV; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if RE = '0' then + SHIFT_REG <= x"00"; + elsif RCV_STATE = SAMPLE and CLK_STRB = '1' then + SHIFT_REG <= SDATA_IN_I & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_M_CIP: process(RESETn, CLK) + -- In Synchronous mode this flag indicates wether a synchronous character M_CIP = '1' + -- or another character (M_CIP = '0') is transferred to the receive buffer. + -- In asynchronous mode the flag indicates sampling condition. + begin + if RESETn = '0' then + M_CIP <= '0'; + elsif CLK = '0' and CLK' event then + if RE = '0' then + M_CIP <= '0'; + elsif ST = "00" then -- Synchronous mode. + if RCV_STATE = SYNC and SHIFT_REG = SCR and RDRF = '0' then + M_CIP <= '1'; -- SCR transferred. + elsif RCV_STATE = SYNC and RDRF = '0' then + M_CIP <= '0'; -- No SCR transferred. + end if; + else -- Asynchronous mode. + case RCV_STATE is + when SAMPLE | PARITY | STOP1 | STOP2 => M_CIP <= '1'; -- Sampling. + when others => M_CIP <= '0'; -- No Sampling. + end case; + end if; + end if; + end process P_M_CIP; + + BREAK_DETECT: process(RESETn, CLK) + -- A break condition occurs, if there is no STOP1 bit and the + -- shift register contains zero data. + begin + if RESETn = '0' then + BREAK <= false; + elsif CLK = '1' and CLK' event then + if RE = '0' then + BREAK <= false; + elsif CLK_STRB = '1' then + if RCV_STATE = STOP1 and SDATA_IN_I = '0' and SHIFT_REG = x"00" then + BREAK <= true; -- Break detected (empty shift register and no stop bit). + elsif RCV_STATE = STOP1 and SDATA_IN_I = '1' then + BREAK <= false; -- UPDATE. + elsif RCV_STATE = STOP1 and SDATA_IN_I = '0' and SHIFT_REG /= x"00" then + BREAK <= false; -- UPDATE, but framing error. + end if; + end if; + end if; + end process BREAK_DETECT; + + P_FS_B: process(RESETn, CLK) + -- In the synchronous mode, this process provides the flag detecting the synchronous + -- character. In the asynchronous mode, the flag indicates a break condition. + variable FS_B_I : bit; + variable FIRST_READ : boolean; + begin + if RESETn = '0' then + FS_B <= '0'; + FIRST_READ := false; + FS_B_I := '0'; + elsif CLK = '0' and CLK' event then + if RE = '0' then + FS_B <= '0'; + FS_B_I := '0'; + else + if ST = "00" then -- Synchronous operation. + if FS_CLR = '1' then + FS_B <= '0'; -- Clear during writing to the SCR. + elsif SHIFT_REG = SCR then + FS_B <= '1'; -- SCR detected. + end if; + else -- Asynchronous operation. + if RX_SAMPLE = '1' and BREAK = true then -- Break condition detected. + FS_B_I := '1'; -- Update. + elsif RX_SAMPLE = '1' then -- No break condition. + FS_B_I := '0'; -- Update. + elsif RSR_READ = '1' and FS_B_I = '1' then + -- If a break condition was detected, the concerning flag is + -- set when the valid data word in the receiver data + -- register is read. Thereafter the break flag is reset + -- and the break condition disappears after a second read + -- (in time) of the receiver status register. + if FIRST_READ = false then + FS_B <= '1'; + FIRST_READ := true; + else + FS_B <= '0'; + FIRST_READ := false; + end if; + end if; + end if; + end if; + end if; + end process P_FS_B; + + P_BITCNT: process + begin + wait until CLK = '1' and CLK' event; + if RCV_STATE = SAMPLE and CLK_STRB = '1' and ST /= "00" then -- Asynchronous mode. + BITCNT <= BITCNT + '1'; + elsif RCV_STATE = SAMPLE and CLK_STRB = '1' and ST = "00" and FS_B = '1' then -- Synchronous mode. + BITCNT <= BITCNT + '1'; -- Count, if matched data found (FS_B = '1'). + elsif RCV_STATE /= SAMPLE then + BITCNT <= (others => '0'); + end if; + end process P_BITCNT; + + BUFFER_FULL: process(RESETn, CLK) + -- Receive data register full flag. + begin + if RESETn = '0' then + RDRF <= '0'; + elsif CLK = '1' and CLK' event then + if RE = '0' then + RDRF <= '0'; + elsif RX_SAMPLE = '1' then + RDRF <= '1'; -- Data register is full until now! + elsif UDR_READ = '1' then + RDRF <= '0'; -- After reading the data register ... + end if; + end if; + end process BUFFER_FULL; + + OVERRUN: process(RESETn, CLK) + variable OE_I : bit; + variable FIRST_READ : boolean; + begin + if RESETn = '0' then + OE_I := '0'; + OE <= '0'; + FIRST_READ := false; + elsif CLK = '1' and CLK' event then + if RESETn = '0' then + OE_I := '0'; + OE <= '0'; + FIRST_READ := false; + elsif CLK_STRB = '1' and RCV_STATE = SYNC and BREAK = false then + -- Overrun appears if RDRF is '1' in this state and there + -- is no break condition. + OE_I := RDRF; + end if; + if RSR_READ = '1' and OE_I = '1' then + -- if an overrun was detected, the concerning flag is + -- set when the valid data word in the receiver data + -- register is read. Thereafter the RDRF flag is reset + -- and the overrun disappears (OE_I goes low) after + -- a second read (in time) of the receiver data register. + if FIRST_READ = false then + OE <= '1'; + FIRST_READ := true; + else + OE <= '0'; + FIRST_READ := false; + end if; + end if; + end if; + end process OVERRUN; + + PARITY_TEST: process(RESETn, CLK) + variable PAR_TMP : bit; + variable P_ERR : bit; + begin + if RESETn = '0' then + PE <= '0'; + elsif CLK = '1' and CLK' event then + if RE = '0' then + PE <= '0'; + elsif RX_SAMPLE = '1' then + PE <= P_ERR; -- Update on load shift register to data register. + elsif CLK_STRB = '1' then -- Sample parity on clock strobe. + P_ERR := '0'; -- Initialise. + if RCV_STATE = PARITY then + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if P_ENA = '1' and P_EOn = '1' then -- Even parity. + P_ERR := PAR_TMP xor SDATA_IN_I; + elsif P_ENA = '1' and P_EOn = '0' then -- Odd parity. + P_ERR := not PAR_TMP xor SDATA_IN_I; + elsif P_ENA = '0' then -- No parity. + P_ERR := '0'; + end if; + end if; + end if; + end if; + end process PARITY_TEST; + + FRAME_ERR: process(RESETn, CLK) + -- This module detects a framing error + -- during stop bit 1 and stop bit 2. + variable FE_I: bit; + begin + if RESETn = '0' then + FE_I := '0'; + FE <= '0'; + elsif CLK = '1' and CLK' event then + if RE = '0' then + FE_I := '0'; + FE <= '0'; + elsif CLK_STRB = '1' then + if RCV_STATE = STOP1 and SDATA_IN_I = '0' and SHIFT_REG /= x"00" then + FE_I := '1'; + elsif RCV_STATE = STOP2 and SDATA_IN_I = '0' and SHIFT_REG /= x"00" then + FE_I := '1'; + elsif RCV_STATE = STOP1 or RCV_STATE = STOP2 then + FE_I := '0'; -- Error resets when correct data appears. + end if; + end if; + if RCV_STATE = SYNC then + FE <= FE_I; -- Update the FE every SYNC time. + end if; + end if; + end process FRAME_ERR; + + RCV_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + RCV_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if RE = '0' then + RCV_STATE <= IDLE; + else + RCV_STATE <= RCV_NEXT_STATE; + end if; + end if; + end process RCV_STATEREG; + + RCV_STATEDEC: process(RCV_STATE, SDATA_IN_I, BITCNT, CLK_STRB, STARTBIT, + CLK_2_STRB, ST, CLK_MODE, CL, P_ENA, SHIFT_REG) + begin + case RCV_STATE is + when IDLE => + if ST = "00" then + RCV_NEXT_STATE <= SAMPLE; -- Synchronous mode. + elsif SDATA_IN_I = '0' and CLK_MODE = '0' then + RCV_NEXT_STATE <= SAMPLE; -- Startbit detected in div by 1 mode. + elsif STARTBIT = true and CLK_MODE = '1' then + RCV_NEXT_STATE <= WAIT_START; -- Startbit detected in div by 16 mode. + else + RCV_NEXT_STATE <= IDLE; -- No startbit; sleep well :-) + end if; + when WAIT_START => + -- This state delays the sample process by one CLK_STRB pulse + -- to eliminate the start bit. + if CLK_STRB = '1' then + RCV_NEXT_STATE <= SAMPLE; + else + RCV_NEXT_STATE <= WAIT_START; + end if; + when SAMPLE => + if CLK_STRB = '1' then + if CL = "11" and BITCNT < "100" then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 5 data bits. + elsif CL = "10" and BITCNT < "101" then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 6 data bits. + elsif CL = "01" and BITCNT < "110" then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 7 data bits. + elsif CL = "00" and BITCNT < "111" then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 8 data bits. + elsif ST = "00" and P_ENA = '0' then -- Synchronous mode (no stop bits). + RCV_NEXT_STATE <= IDLE; -- No parity check enabled. + elsif P_ENA = '0' then + RCV_NEXT_STATE <= STOP1; -- No parity check enabled. + else + RCV_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + RCV_NEXT_STATE <= SAMPLE; -- Stay in sample mode. + end if; + when PARITY => + if CLK_STRB = '1' then + if ST = "00" then -- Synchronous mode (no stop bits). + RCV_NEXT_STATE <= IDLE; + else + RCV_NEXT_STATE <= STOP1; + end if; + else + RCV_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' then + if SHIFT_REG > x"00" and SDATA_IN_I = '0' then -- No Stop bit after non zero data. + RCV_NEXT_STATE <= SYNC; -- Framing error detected. + elsif ST = "11" or ST = "10" then + RCV_NEXT_STATE <= STOP2; -- More than one stop bits selected. + else + RCV_NEXT_STATE <= SYNC; -- One stop bit selected. + end if; + else + RCV_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_2_STRB = '1' and ST = "10" then + RCV_NEXT_STATE <= SYNC; -- One and a half stop bits selected. + elsif CLK_STRB = '1' then + RCV_NEXT_STATE <= SYNC; -- Two stop bits selected. + else + RCV_NEXT_STATE <= STOP2; + end if; + when SYNC => + RCV_NEXT_STATE <= IDLE; + end case; + end process RCV_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_top.vhd new file mode 100644 index 0000000..fd06bf1 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_top.vhd @@ -0,0 +1,238 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- MC68901 compatible multi function port core. ---- +---- ---- +---- This is the SUSKA MFP IP core USART top level file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +use work.wf68901ip_pkg.all; + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_USART_TOP is + port ( -- System control: + CLK : in bit; + RESETn : in bit; + + -- Asynchronous bus control: + DSn : in bit; + CSn : in bit; + RWn : in bit; + + -- Data and Adresses: + RS : in bit_vector(5 downto 1); + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_OUT_EN : out bit; + + -- Serial I/O control: + RC : in bit; -- Receiver clock. + TC : in bit; -- Transmitter clock. + SI : in bit; -- Serial input. + SO : out bit; -- Serial output. + SO_EN : out bit; -- Serial output enable. + + -- Interrupt channels: + RX_ERR_INT : out bit; -- Receiver errors. + RX_BUFF_INT : out bit; -- Receiver buffer full. + TX_ERR_INT : out bit; -- Transmitter errors. + TX_BUFF_INT : out bit; -- Transmitter buffer empty. + + -- DMA control: + RRn : out bit; + TRn : out bit + ); +end entity WF68901IP_USART_TOP; + +architecture STRUCTURE of WF68901IP_USART_TOP is + signal BF_I : bit; + signal BE_I : bit; + signal FE_I : bit; + signal OE_I : bit; + signal UE_I : bit; + signal PE_I : bit; + signal LOOPBACK_I : bit; + signal SD_LEVEL_I : bit; + signal SDATA_IN_I : bit; + signal SDATA_OUT_I : bit; + signal RXCLK_I : bit; + signal CLK_MODE_I : bit; + signal SCR_I : bit_vector(7 downto 0); + signal RX_SAMPLE_I : bit; + signal RX_DATA_I : bit_vector(7 downto 0); + signal TX_DATA_I : bit_vector(7 downto 0); + signal CL_I : bit_vector(1 downto 0); + signal ST_I : bit_vector(1 downto 0); + signal P_ENA_I : bit; + signal P_EOn_I : bit; + signal RE_I : bit; + signal TE_I : bit; + signal FS_CLR_I : bit; + signal SS_I : bit; + signal M_CIP_I : bit; + signal FS_B_I : bit; + signal BR_I : bit; + signal UDR_READ_I : bit; + signal UDR_WRITE_I : bit; + signal RSR_READ_I : bit; + signal TSR_READ_I : bit; + signal TX_END_I : bit; +begin + SO <= SDATA_OUT_I when TE_I = '1' else SD_LEVEL_I; + -- Loopback mode: + SDATA_IN_I <= SDATA_OUT_I when LOOPBACK_I = '1' and TE_I = '1' else -- Loopback, transmitter enabled. + '1' when LOOPBACK_I = '1' and TE_I = '0' else SI; -- Loopback, transmitter disabled. + + RXCLK_I <= TC when LOOPBACK_I = '1' else RC; + RRn <= '0' when BF_I = '1' and PE_I = '0' and FE_I = '0' else '1'; + TRn <= not BE_I; + + -- Interrupt sources: + RX_ERR_INT <= OE_I or PE_I or FE_I or FS_B_I; + RX_BUFF_INT <= BF_I; + TX_ERR_INT <= UE_I or TX_END_I; + TX_BUFF_INT <= BE_I; + + I_USART_CTRL: WF68901IP_USART_CTRL + port map( + CLK => CLK, + RESETn => RESETn, + DSn => DSn, + CSn => CSn, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN, + DATA_OUT => DATA_OUT, + DATA_OUT_EN => DATA_OUT_EN, + LOOPBACK => LOOPBACK_I, + SDOUT_EN => SO_EN, + SD_LEVEL => SD_LEVEL_I, + CLK_MODE => CLK_MODE_I, + RE => RE_I, + TE => TE_I, + P_ENA => P_ENA_I, + P_EOn => P_EOn_I, + BF => BF_I, + BE => BE_I, + FE => FE_I, + OE => OE_I, + UE => UE_I, + PE => PE_I, + M_CIP => M_CIP_I, + FS_B => FS_B_I, + SCR_OUT => SCR_I, + TX_DATA => TX_DATA_I, + RX_SAMPLE => RX_SAMPLE_I, + RX_DATA => RX_DATA_I, + SS => SS_I, + BR => BR_I, + CL => CL_I, + ST => ST_I, + FS_CLR => FS_CLR_I, + UDR_READ => UDR_READ_I, + UDR_WRITE => UDR_WRITE_I, + RSR_READ => RSR_READ_I, + TSR_READ => TSR_READ_I, + TX_END => TX_END_I + ); + + I_USART_RECEIVE: WF68901IP_USART_RX + port map ( + CLK => CLK, + RESETn => RESETn, + SCR => SCR_I, + RX_SAMPLE => RX_SAMPLE_I, + RX_DATA => RX_DATA_I, + CL => CL_I, + ST => ST_I, + P_ENA => P_ENA_I, + P_EOn => P_EOn_I, + CLK_MODE => CLK_MODE_I, + RE => RE_I, + FS_CLR => FS_CLR_I, + SS => SS_I, + RXCLK => RXCLK_I, + SDATA_IN => SDATA_IN_I, + RSR_READ => RSR_READ_I, + UDR_READ => UDR_READ_I, + M_CIP => M_CIP_I, + FS_B => FS_B_I, + BF => BF_I, + OE => OE_I, + PE => PE_I, + FE => FE_I + ); + + I_USART_TRANSMIT: WF68901IP_USART_TX + port map ( + CLK => CLK, + RESETn => RESETn, + SCR => SCR_I, + TX_DATA => TX_DATA_I, + SDATA_OUT => SDATA_OUT_I, + TXCLK => TC, + CL => CL_I, + ST => ST_I, + TE => TE_I, + BR => BR_I, + P_ENA => P_ENA_I, + P_EOn => P_EOn_I, + UDR_WRITE => UDR_WRITE_I, + TSR_READ => TSR_READ_I, + CLK_MODE => CLK_MODE_I, + TX_END => TX_END_I, + UE => UE_I, + BE => BE_I + ); +end architecture STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_tx.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_tx.vhd new file mode 100644 index 0000000..8de27f3 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_tx.vhd @@ -0,0 +1,387 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI MFP compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This is the SUSKA MFP IP core USART transmitter file. ---- +---- ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- TDRE has now synchronous reset to meet preset requirement. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF68901IP_USART_TX is + port ( + CLK : in bit; + RESETn : in bit; + + SCR : in bit_vector(7 downto 0); -- Synchronous character. + TX_DATA : in bit_vector(7 downto 0); -- Normal data. + + SDATA_OUT : out bit; -- Serial data output. + TXCLK : in bit; -- Transmitter clock. + + CL : in bit_vector(1 downto 0); -- Character length. + ST : in bit_vector(1 downto 0); -- Start and stop bit configuration. + TE : in bit; -- Transmitter enable. + BR : in bit; -- BREAK character send enable (all '0' without stop bit). + P_ENA : in bit; -- Parity enable. + P_EOn : in bit; -- Even or odd parity. + UDR_WRITE : in bit; -- Flag indicating writing the data register. + TSR_READ : in bit; -- Flag indicating reading the transmitter status register. + CLK_MODE : in bit; -- Transmitter clock mode. + + TX_END : out bit; -- End of transmission flag. + UE : out bit; -- Underrun Flag. + BE : out bit -- Buffer empty flag. + ); +end entity WF68901IP_USART_TX; + +architecture BEHAVIOR of WF68901IP_USART_TX is +type TR_STATES is (IDLE, CHECK_BREAK, LOAD_SHFT, START, SHIFTOUT, PARITY, STOP1, STOP2); +signal TR_STATE, TR_NEXT_STATE : TR_STATES; +signal CLK_STRB : bit; +signal CLK_2_STRB : bit; +signal SHIFT_REG : bit_vector(7 downto 0); +signal BITCNT : std_logic_vector(2 downto 0); +signal PARITY_I : bit; +signal TDRE : bit; +signal BREAK : bit; +begin + BE <= TDRE; -- Buffer empty flag. + + -- The default condition in this statement is to ensure + -- to cover all possibilities for example if there is a + -- one hot decoding of the state machine with wrong states + -- (e.g. not one of the given here). + SDATA_OUT <= '0' when BREAK = '1' else + '1' when TR_STATE = IDLE else + '1' when TR_STATE = LOAD_SHFT else + '0' when TR_STATE = START else + SHIFT_REG(0) when TR_STATE = SHIFTOUT else + PARITY_I when TR_STATE = PARITY else + '1' when TR_STATE = STOP1 else + '1' when TR_STATE = STOP2 else '1'; + + P_BREAK : process(RESETn, CLK) + -- This process is responsible to control the BREAK signal. After the break request + -- is asserted via BR, the break character will be sent after the current transmission has + -- finished. The BREAK character is sent until the BR is disabled. + variable LOCK : boolean; + begin + if RESETn = '0' then + BREAK <= '0'; + elsif CLK = '1' and CLK' event then + -- Break is only available in the asynchronous mode (ST /= "00"). + -- The LOCK mechanism is reponsible for sending the BREAK character just once. + if TE = '1' and BR = '1' and ST /= "00" and TR_STATE = IDLE and LOCK = false then + BREAK <= '1'; -- Break for the case that there is no current transmission. + LOCK := true; + elsif BR = '1' and ST /= "00" and TR_STATE = STOP1 then + BREAK <= '0'; -- Break character sent. + elsif BR = '0' then + BREAK <= '0'; + LOCK := false; + else + BREAK <= '0'; + end if; + end if; + end process P_BREAK; + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(4 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CLK_MODE = '0' then -- Divider off. + if TXCLK = '0' and STRB_LOCK = false then -- Works on negative TXCLK edge. + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif TXCLK = '1' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + CLK_2_STRB <= '0'; -- No 1 1/2 stop bits in no div by 16 mode. + elsif TR_STATE = IDLE then + CLK_DIVCNT := "10000"; -- Div by 16 mode. + CLK_STRB <= '0'; + else + CLK_STRB <= '0'; -- Default. + CLK_2_STRB <= '0'; -- Default. + -- Works on negative TXCLK edge: + if CLK_DIVCNT > "00000" and TXCLK = '0' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_LOCK := true; + if CLK_DIVCNT = "01000" then + -- This strobe is asserted at half of the clock cycle. + -- It is used for the stop bit timing. + CLK_2_STRB <= '1'; + end if; + elsif CLK_DIVCNT = "00000" then + CLK_DIVCNT := "10000"; -- Div by 16 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + end if; + elsif TXCLK = '1' then + CLK_LOCK := false; + STRB_LOCK := false; + end if; + end if; + end process CLKDIV; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if TR_STATE = LOAD_SHFT and TDRE = '1' then -- Lost data ... + case ST is + when "00" => -- Synchronous mode. + SHIFT_REG <= SCR; -- Send the synchronous character. + when others => -- Asynchronous mode. + SHIFT_REG <= x"5A"; -- Load the shift register with a mark (underrun). + end case; + elsif TR_STATE = LOAD_SHFT then + -- Load 'normal' data if there is no break condition: + case CL is + when "11" => SHIFT_REG <= "000" & TX_DATA(4 downto 0); -- 5 databits. + when "10" => SHIFT_REG <= "00" & TX_DATA(5 downto 0); -- 6 databits. + when "01" => SHIFT_REG <= '0' & TX_DATA(6 downto 0); -- 7 databits. + when "00" => SHIFT_REG <= TX_DATA; -- 8 databits. + end case; + elsif TR_STATE = SHIFTOUT and CLK_STRB = '1' then + SHIFT_REG <= '0' & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_BITCNT: process + -- Counter for the data bits transmitted. + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = SHIFTOUT and CLK_STRB = '1' then + BITCNT <= BITCNT + '1'; + elsif TR_STATE /= SHIFTOUT then + BITCNT <= "000"; + end if; + end process P_BITCNT; + + BUFFER_EMPTY: process + -- Transmit data register empty flag. + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + TDRE <= '1'; + elsif TE = '0' then + TDRE <= '1'; + elsif TR_STATE = START and BREAK = '0' then + -- Data has been loaded to the shift register, + -- thus data register is free again. + -- If the BREAK flag is enabled, the BE flag + -- respective TDRE flag cannot be set. + TDRE <= '1'; + elsif UDR_WRITE = '1' then + TDRE <= '0'; + end if; + end process BUFFER_EMPTY; + + UNDERRUN: process(RESETn, CLK) + variable LOCK : boolean; + begin + if RESETn = '0' then + UE <= '0'; + LOCK := false; + elsif CLK = '1' and CLK' event then + if TE = '0' then + UE <= '0'; + LOCK := false; + elsif CLK_STRB = '1' and TR_STATE = START then + -- Underrun appears if TDRE is '0' at the end of this state. + UE <= TDRE; -- Never true for enabled BREAK flag. See alos process BUFFER_EMPTY. + LOCK := true; + elsif CLK_STRB = '1' then + LOCK := false; -- Disables clearing UE one transmit clock cycle. + elsif TSR_READ = '1' and LOCK = false then + UE <= '0'; + end if; + end if; + end process UNDERRUN; + + P_TX_END: process(RESETn, CLK) + begin + if RESETn = '0' then + TX_END <= '0'; + elsif CLK = '1' and CLK' event then + if TE = '1' then -- Transmitter enabled. + TX_END <= '0'; + elsif TE = '0' and TR_STATE = IDLE then + TX_END <= '1'; + end if; + end if; + end process P_TX_END; + + PARITY_GEN: process + variable PAR_TMP : bit; + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = START then -- Calculate the parity during the start phase. + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if P_ENA = '1' and P_EOn = '1' then -- Even parity. + PARITY_I <= PAR_TMP; + elsif P_ENA = '1' and P_EOn = '0' then -- Odd parity. + PARITY_I <= not PAR_TMP; + else -- No parity. + PARITY_I <= '0'; + end if; + end if; + end process PARITY_GEN; + + TR_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + TR_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + TR_STATE <= TR_NEXT_STATE; + end if; + end process TR_STATEREG; + + TR_STATEDEC: process(TR_STATE, CLK_STRB, CLK_2_STRB, BITCNT, TDRE, BREAK, TE, ST, P_ENA, CL, BR) + begin + case TR_STATE is + when IDLE => + -- This IDLE state is just one clock cycle and is required to give the + -- break process time to set the BREAK flag. + TR_NEXT_STATE <= CHECK_BREAK; + when CHECK_BREAK => + if BREAK = '1' then -- Send break character. + -- Do not load any data to the shift register, go directly + -- to the START state. + TR_NEXT_STATE <= START; + -- Start enabled transmitter, if the data register is not empty. + -- Do not send any further data for the case of an asserted BR flag. + elsif TE = '1' and TDRE = '0' and BR = '0' then + TR_NEXT_STATE <= LOAD_SHFT; + else + TR_NEXT_STATE <= IDLE; -- Go back, scan for BREAK. + end if; + when LOAD_SHFT => + TR_NEXT_STATE <= START; + when START => -- Send the start bit. + if CLK_STRB = '1' then + TR_NEXT_STATE <= SHIFTOUT; + else + TR_NEXT_STATE <= START; + end if; + when SHIFTOUT => + if CLK_STRB = '1' then + if BITCNT < "100" and CL = "11" then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 5 data bits. + elsif BITCNT < "101" and CL = "10" then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 6 data bits. + elsif BITCNT < "110" and CL = "01" then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 7 data bits. + elsif BITCNT < "111" and CL = "00" then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 8 data bits. + elsif P_ENA = '0' and BREAK = '1' then + TR_NEXT_STATE <= IDLE; -- Break condition, no parity check enabled, no stop bits. + elsif P_ENA = '0' and ST = "00" then + TR_NEXT_STATE <= IDLE; -- Synchronous mode, no parity check enabled. + elsif P_ENA = '0' then + TR_NEXT_STATE <= STOP1; -- Asynchronous mode, no parity check enabled. + else + TR_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + TR_NEXT_STATE <= SHIFTOUT; + end if; + when PARITY => + if CLK_STRB = '1' then + if ST = "00" then -- Synchronous mode (no stop bits). + TR_NEXT_STATE <= IDLE; + elsif BREAK = '1' then -- No stop bits during break condition. + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP1; + end if; + else + TR_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' and (ST = "11" or ST = "10") then + TR_NEXT_STATE <= STOP2; -- More than one stop bits selected. + elsif CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; -- One stop bits selected. + else + TR_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_2_STRB = '1' and ST = "10" then + TR_NEXT_STATE <= IDLE; -- One and a half stop bits selected. + elsif CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; -- Two stop bits detected. + else + TR_NEXT_STATE <= STOP2; + end if; + end case; + end process TR_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface.vhd new file mode 100644 index 0000000..685fc02 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface.vhd @@ -0,0 +1,228 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI IP Core peripheral Add-On ---- +---- ---- +---- This file is part of the FPGA-ATARI project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This hardware provides an interface to connect to a SD-Card. ---- +---- ---- +---- This interface is based on the project 'SatanDisk' of ---- +---- Miroslav Nohaj 'Jookie'. The code is an interpretation of ---- +---- the original code, written in VERILOG. It is provided for ---- +---- the use in a system on programmable chips (SOPC). ---- +---- ---- +---- Timing: Use a clock frequency of 16MHz for this component. ---- +---- Use the same clock frequency for the connected AVR ---- +---- microcontroller. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2007 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +---- This hardware works with the original ATARI ---- +---- hard dik driver. ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 1.0 2007/01/05 WF +-- Initial Release. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF_SD_CARD is + port ( + -- System: + RESETn : in bit; + CLK : in bit; -- 16MHz, see above. + + -- ACSI section: + ACSI_A1 : in bit; + ACSI_CSn : in bit; + ACSI_ACKn : in bit; + ACSI_INTn : out bit; + ACSI_DRQn : out bit; + ACSI_D : inout std_logic_vector(7 downto 0); + + -- Microcontroller interface: + MC_D : inout std_logic_vector(7 downto 0); + MC_DO : in bit; + MC_PIO_DMAn : in bit; + MC_RWn : in bit; + MC_CLR_CMD : in bit; + MC_DONE : out bit; + MC_GOT_CMD : out bit + ); +end WF_SD_CARD; + +architecture BEHAVIOR of WF_SD_CARD is +signal DATA_REG : std_logic_vector(7 downto 0); +signal D0_REG : bit; +signal INT_REG : bit; +signal DRQ_REG : bit; +signal DONE_REG : bit; +signal GOT_CMD_REG : bit; +signal HOLD : bit; +signal PREV_CSn : bit; +signal PREV_ACKn : bit; +begin + MC_D <= DATA_REG when MC_RWn = '0' and DONE_REG = '1' else (others => 'Z'); + ACSI_D <= DATA_REG when MC_RWn = '1' and (ACSI_CSn = '0' or ACSI_ACKn = '0' or HOLD = '1') else (others => 'Z'); + ACSI_INTn <= INT_REG; + ACSI_DRQn <= DRQ_REG; + MC_DONE <= DONE_REG; + MC_GOT_CMD <= GOT_CMD_REG; + + P_DATA: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= (others => '0'); + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_RWn = '1' then + DATA_REG <= MC_D; -- Read from AVR to ACSI. + end if; + -- + if PREV_CSn = '0' and ACSI_CSn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D; -- Write from ACSI to AVR. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D; -- Write from ACSI to AVR. + end if; + end if; + end process P_DATA; + + P_SYNC: process + begin + wait until CLK = '1' and CLK' event; + PREV_CSn <= ACSI_CSn; + PREV_ACKn <= ACSI_ACKn; + end process P_SYNC; + + P_INT_DRQ: process(RESETn, CLK) + begin + if RESETn = '0' then + INT_REG <= '1'; -- No interrupt. + DRQ_REG <= '1'; -- No data request. + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_PIO_DMAn = '1' then -- Positive MC_DO edge. + INT_REG <= '0'; -- Release an interrupt. + DRQ_REG <= '1'; + elsif D0_REG = '0' and MC_DO = '1' then + INT_REG <= '1'; + DRQ_REG <= '0'; -- Release a data request. + end if; + -- + if MC_CLR_CMD = '1' then -- Clear done. + INT_REG <= '1'; -- Restore INT_REG. + DRQ_REG <= '1'; -- Restore DRQ_REG. + end if; + -- + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + if ACSI_CSn = '0' then + INT_REG <= '1'; + end if; + -- + if ACSI_ACKn = '0' then + DRQ_REG <= '1'; + end if; + end if; + end if; + end process P_INT_DRQ; + + P_HOLD: process(RESETn, CLK) + begin + if RESETn = '0' then + HOLD <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + HOLD <= '1'; + elsif PREV_CSn = '1' and ACSI_CSn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_ACKn = '1' and ACSI_ACKn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_CSn = '0' and ACSI_CSn = '1' then -- Rising edge. + HOLD <= '1'; + elsif PREV_ACKn = '0' and ACSI_ACKn = '1' then -- Rising edge. + HOLD <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + HOLD <= '0'; + end if; + end if; + end process P_HOLD; + + P_DONE: process(RESETn, CLK) + begin + if RESETn = '0' then + DONE_REG <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + DONE_REG <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + DONE_REG <= '0'; + elsif D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + DONE_REG <= '0'; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + DONE_REG <= '0'; + end if; + end if; + end process P_DONE; + + P_DO_REG: process(RESETn, CLK) + begin + if RESETn = '0' then + D0_REG <= '0'; + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + D0_REG <= MC_DO; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + D0_REG <= MC_DO; + end if; + end if; + end process P_DO_REG; + + P_GOT_CMD: process(RESETn, CLK) + begin + if RESETn = '0' then + GOT_CMD_REG <= '0'; + elsif CLK = '1' and CLK' event then + if PREV_CSn = '0' and ACSI_CSn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif MC_CLR_CMD = '1' then -- Clear done. + GOT_CMD_REG <= '0'; + end if; + end if; + end process P_GOT_CMD; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd new file mode 100644 index 0000000..b1dfe91 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd @@ -0,0 +1,240 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI IP Core peripheral Add-On ---- +---- ---- +---- This file is part of the FPGA-ATARI project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This hardware provides an interface to connect to a SD-Card. ---- +---- ---- +---- This interface is based on the project 'SatanDisk' of ---- +---- Miroslav Nohaj 'Jookie'. The code is an interpretation of ---- +---- the original code, written in VERILOG. It is provided for ---- +---- the use in a system on programmable chips (SOPC). ---- +---- ---- +---- Timing: Use a clock frequency of 16MHz for this component. ---- +---- Use the same clock frequency for the connected AVR ---- +---- microcontroller. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2007 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +---- This hardware works with the original ATARI ---- +---- hard dik driver. ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K7A 2007/01/05 WF +-- Initial Release. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF_SD_CARD is + port ( + -- System: + RESETn : in bit; + CLK : in bit; -- 16MHz, see above. + + -- ACSI section: + ACSI_A1 : in bit; + ACSI_CSn : in bit; + ACSI_ACKn : in bit; + ACSI_INTn : out bit; + ACSI_DRQn : out bit; + ACSI_D_IN : in std_logic_vector(7 downto 0); + ACSI_D_OUT : out std_logic_vector(7 downto 0); + ACSI_D_EN : out bit; + + -- Microcontroller interface: + MC_DO : in bit; + MC_PIO_DMAn : in bit; + MC_RWn : in bit; + MC_CLR_CMD : in bit; + MC_DONE : out bit; + MC_GOT_CMD : out bit; + MC_D_IN : in std_logic_vector(7 downto 0); + MC_D_OUT : out std_logic_vector(7 downto 0); + MC_D_EN : out bit + ); +end WF_SD_CARD; + +architecture BEHAVIOR of WF_SD_CARD is +signal DATA_REG : std_logic_vector(7 downto 0); +signal D0_REG : bit; +signal INT_REG : bit; +signal DRQ_REG : bit; +signal DONE_REG : bit; +signal GOT_CMD_REG : bit; +signal HOLD : bit; +signal PREV_CSn : bit; +signal PREV_ACKn : bit; +begin + MC_D_OUT <= DATA_REG when MC_RWn = '0' and DONE_REG = '1' else (others => '0'); + MC_D_EN <= '1' when MC_RWn = '0' and DONE_REG = '1' else '0'; + ACSI_D_OUT <= DATA_REG when MC_RWn = '1' and (ACSI_CSn = '0' or ACSI_ACKn = '0' or HOLD = '1') else (others => '0'); +--ACSI_D_EN <= '1' when MC_RWn = '1' and (ACSI_CSn = '0' or ACSI_ACKn = '0' or HOLD = '1') else '0'; +ACSI_D_EN <= '0'; -- Disabled. +--ACSI_INTn <= INT_REG; +ACSI_INTn <= '1'; -- Disabled. +--ACSI_DRQn <= DRQ_REG; +ACSI_DRQn <= '1'; -- Disabled. + MC_DONE <= DONE_REG; + MC_GOT_CMD <= GOT_CMD_REG; + + P_DATA: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= (others => '0'); + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_RWn = '1' then + DATA_REG <= MC_D_IN; -- Read from AVR to ACSI. + end if; + -- + if PREV_CSn = '0' and ACSI_CSn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D_IN; -- Write from ACSI to AVR. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D_IN; -- Write from ACSI to AVR. + end if; + end if; + end process P_DATA; + + P_SYNC: process + begin + wait until CLK = '1' and CLK' event; + PREV_CSn <= ACSI_CSn; + PREV_ACKn <= ACSI_ACKn; + end process P_SYNC; + + P_INT_DRQ: process(RESETn, CLK) + begin + if RESETn = '0' then + INT_REG <= '1'; -- No interrupt. + DRQ_REG <= '1'; -- No data request. + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_PIO_DMAn = '1' then -- Positive MC_DO edge. + INT_REG <= '0'; -- Release an interrupt. + DRQ_REG <= '1'; + elsif D0_REG = '0' and MC_DO = '1' then + INT_REG <= '1'; + DRQ_REG <= '0'; -- Release a data request. + end if; + -- + if MC_CLR_CMD = '1' then -- Clear done. + INT_REG <= '1'; -- Restore INT_REG. + DRQ_REG <= '1'; -- Restore DRQ_REG. + end if; + -- + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + if ACSI_CSn = '0' then + INT_REG <= '1'; + end if; + -- + if ACSI_ACKn = '0' then + DRQ_REG <= '1'; + end if; + end if; + end if; + end process P_INT_DRQ; + + P_HOLD: process(RESETn, CLK) + begin + if RESETn = '0' then + HOLD <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + HOLD <= '1'; + elsif PREV_CSn = '1' and ACSI_CSn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_ACKn = '1' and ACSI_ACKn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_CSn = '0' and ACSI_CSn = '1' then -- Rising edge. + HOLD <= '1'; + elsif PREV_ACKn = '0' and ACSI_ACKn = '1' then -- Rising edge. + HOLD <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + HOLD <= '0'; + end if; + end if; + end process P_HOLD; + + P_DONE: process(RESETn, CLK) + begin + if RESETn = '0' then + DONE_REG <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + DONE_REG <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + DONE_REG <= '0'; + elsif D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + DONE_REG <= '0'; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + DONE_REG <= '0'; + end if; + end if; + end process P_DONE; + + P_DO_REG: process(RESETn, CLK) + begin + if RESETn = '0' then + D0_REG <= '0'; + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + D0_REG <= MC_DO; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + D0_REG <= MC_DO; + end if; + end if; + end process P_DO_REG; + + P_GOT_CMD: process(RESETn, CLK) + begin + if RESETn = '0' then + GOT_CMD_REG <= '0'; + elsif CLK = '1' and CLK' event then +-- ?? ACSI_CSn doppelt! +if PREV_CSn = '0' and ACSI_CSn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif MC_CLR_CMD = '1' then -- Clear done. + GOT_CMD_REG <= '0'; + end if; + end if; + end process P_GOT_CMD; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd.bak new file mode 100644 index 0000000..0200dea --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SDC_IF/sd-card-interface_soc.vhd.bak @@ -0,0 +1,239 @@ +---------------------------------------------------------------------- +---- ---- +---- ATARI IP Core peripheral Add-On ---- +---- ---- +---- This file is part of the FPGA-ATARI project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- This hardware provides an interface to connect to a SD-Card. ---- +---- ---- +---- This interface is based on the project 'SatanDisk' of ---- +---- Miroslav Nohaj 'Jookie'. The code is an interpretation of ---- +---- the original code, written in VERILOG. It is provided for ---- +---- the use in a system on programmable chips (SOPC). ---- +---- ---- +---- Timing: Use a clock frequency of 16MHz for this component. ---- +---- Use the same clock frequency for the connected AVR ---- +---- microcontroller. ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2007 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +---- This hardware works with the original ATARI ---- +---- hard dik driver. ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K7A 2007/01/05 WF +-- Initial Release. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF_SD_CARD is + port ( + -- System: + RESETn : in bit; + CLK : in bit; -- 16MHz, see above. + + -- ACSI section: + ACSI_A1 : in bit; + ACSI_CSn : in bit; + ACSI_ACKn : in bit; + ACSI_INTn : out bit; + ACSI_DRQn : out bit; + ACSI_D_IN : in std_logic_vector(7 downto 0); + ACSI_D_OUT : out std_logic_vector(7 downto 0); + ACSI_D_EN : out bit; + + -- Microcontroller interface: + MC_DO : in bit; + MC_PIO_DMAn : in bit; + MC_RWn : in bit; + MC_CLR_CMD : in bit; + MC_DONE : out bit; + MC_GOT_CMD : out bit; + MC_D_IN : in std_logic_vector(7 downto 0); + MC_D_OUT : out std_logic_vector(7 downto 0); + MC_D_EN : out bit + ); +end WF_SD_CARD; + +architecture BEHAVIOR of WF_SD_CARD is +signal DATA_REG : std_logic_vector(7 downto 0); +signal D0_REG : bit; +signal INT_REG : bit; +signal DRQ_REG : bit; +signal DONE_REG : bit; +signal GOT_CMD_REG : bit; +signal HOLD : bit; +signal PREV_CSn : bit; +signal PREV_ACKn : bit; +begin + MC_D_OUT <= DATA_REG when MC_RWn = '0' and DONE_REG = '1' else (others => '0'); + MC_D_EN <= '1' when MC_RWn = '0' and DONE_REG = '1' else '0'; + ACSI_D_OUT <= DATA_REG when MC_RWn = '1' and (ACSI_CSn = '0' or ACSI_ACKn = '0' or HOLD = '1') else (others => '0'); +-- ???: +--ACSI_D_EN <= '1' when MC_RWn = '1' and (ACSI_CSn = '0' or ACSI_ACKn = '0' or HOLD = '1') else '0'; +ACSI_D_EN <= '0'; + ACSI_INTn <= INT_REG; + ACSI_DRQn <= DRQ_REG; + MC_DONE <= DONE_REG; + MC_GOT_CMD <= GOT_CMD_REG; + + P_DATA: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= (others => '0'); + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_RWn = '1' then + DATA_REG <= MC_D_IN; -- Read from AVR to ACSI. + end if; + -- + if PREV_CSn = '0' and ACSI_CSn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D_IN; -- Write from ACSI to AVR. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and MC_RWn = '0' and DONE_REG = '0' then + DATA_REG <= ACSI_D_IN; -- Write from ACSI to AVR. + end if; + end if; + end process P_DATA; + + P_SYNC: process + begin + wait until CLK = '1' and CLK' event; + PREV_CSn <= ACSI_CSn; + PREV_ACKn <= ACSI_ACKn; + end process P_SYNC; + + P_INT_DRQ: process(RESETn, CLK) + begin + if RESETn = '0' then + INT_REG <= '1'; -- No interrupt. + DRQ_REG <= '1'; -- No data request. + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' and MC_PIO_DMAn = '1' then -- Positive MC_DO edge. + INT_REG <= '0'; -- Release an interrupt. + DRQ_REG <= '1'; + elsif D0_REG = '0' and MC_DO = '1' then + INT_REG <= '1'; + DRQ_REG <= '0'; -- Release a data request. + end if; + -- + if MC_CLR_CMD = '1' then -- Clear done. + INT_REG <= '1'; -- Restore INT_REG. + DRQ_REG <= '1'; -- Restore DRQ_REG. + end if; + -- + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + if ACSI_CSn = '0' then + INT_REG <= '1'; + end if; + -- + if ACSI_ACKn = '0' then + DRQ_REG <= '1'; + end if; + end if; + end if; + end process P_INT_DRQ; + + P_HOLD: process(RESETn, CLK) + begin + if RESETn = '0' then + HOLD <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + HOLD <= '1'; + elsif PREV_CSn = '1' and ACSI_CSn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_ACKn = '1' and ACSI_ACKn = '1' then -- If signal is high. + HOLD <= '0'; + elsif PREV_CSn = '0' and ACSI_CSn = '1' then -- Rising edge. + HOLD <= '1'; + elsif PREV_ACKn = '0' and ACSI_ACKn = '1' then -- Rising edge. + HOLD <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + HOLD <= '0'; + end if; + end if; + end process P_HOLD; + + P_DONE: process(RESETn, CLK) + begin + if RESETn = '0' then + DONE_REG <= '0'; + elsif CLK = '1' and CLK' event then + if (PREV_CSn = '0' and ACSI_CSn = '0') or (PREV_ACKn = '0' and ACSI_ACKn = '0') then + DONE_REG <= '1'; + elsif MC_CLR_CMD = '1' then -- Clear done. + DONE_REG <= '0'; + elsif D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + DONE_REG <= '0'; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + DONE_REG <= '0'; + end if; + end if; + end process P_DONE; + + P_DO_REG: process(RESETn, CLK) + begin + if RESETn = '0' then + D0_REG <= '0'; + elsif CLK = '1' and CLK' event then + if D0_REG = '0' and MC_DO = '1' then -- Positive MC_DO edge. + D0_REG <= MC_DO; + elsif D0_REG = '1' and MC_DO = '0' then -- Negative MC_DO edge. + D0_REG <= MC_DO; + end if; + end if; + end process P_DO_REG; + + P_GOT_CMD: process(RESETn, CLK) + begin + if RESETn = '0' then + GOT_CMD_REG <= '0'; + elsif CLK = '1' and CLK' event then +-- ?? ACSI_CSn doppelt! +--if PREV_CSn = '0' and ACSI_CSn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif PREV_ACKn = '0' and ACSI_ACKn = '0' and ACSI_CSn = '0' and ACSI_A1 = '0' then + GOT_CMD_REG <= '1'; -- If command was received. + elsif MC_CLR_CMD = '1' then -- Clear done. + GOT_CMD_REG <= '0'; + end if; + end if; + end process P_GOT_CMD; +end architecture BEHAVIOR; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_pkg.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_pkg.vhd new file mode 100644 index 0000000..9d048de --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_pkg.vhd @@ -0,0 +1,84 @@ +---------------------------------------------------------------------- +---- ---- +---- YM2149 compatible sound generator. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Model of the ST or STE's YM2149 sound generator. ---- +---- ---- +---- This is the package file containing the component ---- +---- declarations. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; + +package WF2149IP_PKG is +type BUSCYCLES is (INACTIVE, R_READ, R_WRITE, ADDRESS); + +component WF2149IP_WAVE + port( + RESETn : in bit; + SYS_CLK : in bit; + + WAV_STRB : in bit; + + ADR : in bit_vector(3 downto 0); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + + BUSCYCLE : in BUSCYCLES; + CTRL_REG : in bit_vector(5 downto 0); + + OUT_A : out bit; + OUT_B : out bit; + OUT_C : out bit + ); +end component; +end WF2149IP_PKG; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top.vhd new file mode 100644 index 0000000..3f5024a --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top.vhd @@ -0,0 +1,170 @@ +---------------------------------------------------------------------- +---- ---- +---- YM2149 compatible sound generator. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Model of the ST or STE's YM2149 sound generator. ---- +---- This IP core of the sound generator differs slightly from ---- +---- the original. Firstly it is a synchronous design without any ---- +---- latches (like assumed in the original chip). This required ---- +---- the introduction of a system adequate clock. In detail this ---- +---- SYS_CLK should on the one hand be fast enough to meet the ---- +---- timing requirements of the system's bus cycle and should one ---- +---- the other hand drive the PWM modules correctly. To meet both ---- +---- a SYS_CLK of 16MHz or above is recommended. ---- +---- Secondly, the original chip has an implemented DA converter. ---- +---- This feature is not possible in today's FPGAs. Therefore the ---- +---- converter is replaced by pulse width modulators. This solu- ---- +---- tion is very simple in comparison to other approaches like ---- +---- external DA converters with wave tables etc. The soltution ---- +---- with the pulse width modulators is probably not as accurate ---- +---- DAs with wavetables. For a detailed descrition of the hard- ---- +---- ware PWM filter look at the end of the wave file, where the ---- +---- pulse width modulators can be found. ---- +---- For a proper operation it is required, that the wave clock ---- +---- is lower than the system clock. A good choice is for example ---- +---- 2MHz for the wave clock and 16MHz for the system clock. ---- +---- ---- +---- Main module file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8B 2008/12/24 WF +-- Rewritten this top level file as a wrapper for the top_soc file. +-- + +library ieee; +use ieee.std_logic_1164.all; +use work.wf2149ip_pkg.all; + +entity WF2149IP_TOP is + port( + + SYS_CLK : in bit; -- Read the inforation in the header! + RESETn : in bit; + + WAV_CLK : in bit; -- Read the inforation in the header! + SELn : in bit; + + BDIR : in bit; + BC2, BC1 : in bit; + + A9n, A8 : in bit; + DA : inout std_logic_vector(7 downto 0); + + IO_A : inout std_logic_vector(7 downto 0); + IO_B : inout std_logic_vector(7 downto 0); + + OUT_A : out bit; -- Analog (PWM) outputs. + OUT_B : out bit; + OUT_C : out bit + ); +end WF2149IP_TOP; + +architecture STRUCTURE of WF2149IP_TOP is +component WF2149IP_TOP_SOC + port( + SYS_CLK : in bit; + RESETn : in bit; + WAV_CLK : in bit; + SELn : in bit; + BDIR : in bit; + BC2, BC1 : in bit; + A9n, A8 : in bit; + DA_IN : in std_logic_vector(7 downto 0); + DA_OUT : out std_logic_vector(7 downto 0); + DA_EN : out bit; + IO_A_IN : in bit_vector(7 downto 0); + IO_A_OUT : out bit_vector(7 downto 0); + IO_A_EN : out bit; + IO_B_IN : in bit_vector(7 downto 0); + IO_B_OUT : out bit_vector(7 downto 0); + IO_B_EN : out bit; + OUT_A : out bit; + OUT_B : out bit; + OUT_C : out bit + ); +end component; +-- +signal DA_OUT : std_logic_vector(7 downto 0); +signal DA_EN : bit; +signal IO_A_IN : bit_vector(7 downto 0); +signal IO_A_OUT : bit_vector(7 downto 0); +signal IO_A_EN : bit; +signal IO_B_IN : bit_vector(7 downto 0); +signal IO_B_OUT : bit_vector(7 downto 0); +signal IO_B_EN : bit; +begin + IO_A_IN <= To_BitVector(IO_A); + IO_B_IN <= To_BitVector(IO_B); + + IO_A <= To_StdLogicVector(IO_A_OUT) when IO_A_EN = '1' else (others => 'Z'); + IO_B <= To_StdLogicVector(IO_B_OUT) when IO_B_EN = '1' else (others => 'Z'); + + DA <= DA_OUT when DA_EN = '1' else (others => 'Z'); + + I_SOUND: WF2149IP_TOP_SOC + port map(SYS_CLK => SYS_CLK, + RESETn => RESETn, + WAV_CLK => WAV_CLK, + SELn => SELn, + BDIR => BDIR, + BC2 => BC2, + BC1 => BC1, + A9n => A9n, + A8 => A8, + DA_IN => DA, + DA_OUT => DA_OUT, + DA_EN => DA_EN, + IO_A_IN => IO_A_IN, + IO_A_OUT => IO_A_OUT, + IO_A_EN => IO_A_EN, + IO_B_IN => IO_B_IN, + IO_B_OUT => IO_B_OUT, + IO_B_EN => IO_B_EN, + OUT_A => OUT_A, + OUT_B => OUT_B, + OUT_C => OUT_C + ); +end STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd new file mode 100644 index 0000000..77ea5ef --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd @@ -0,0 +1,229 @@ +---------------------------------------------------------------------- +---- ---- +---- YM2149 compatible sound generator. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Model of the ST or STE's YM2149 sound generator. ---- +---- This IP core of the sound generator differs slightly from ---- +---- the original. Firstly it is a synchronous design without any ---- +---- latches (like assumed in the original chip). This required ---- +---- the introduction of a system adequate clock. In detail this ---- +---- SYS_CLK should on the one hand be fast enough to meet the ---- +---- timing requirements of the system's bus cycle and should one ---- +---- the other hand drive the PWM modules correctly. To meet both ---- +---- a SYS_CLK of 16MHz or above is recommended. ---- +---- Secondly, the original chip has an implemented DA converter. ---- +---- This feature is not possible in today's FPGAs. Therefore the ---- +---- converter is replaced by pulse width modulators. This solu- ---- +---- tion is very simple in comparison to other approaches like ---- +---- external DA converters with wave tables etc. The soltution ---- +---- with the pulse width modulators is probably not as accurate ---- +---- DAs with wavetables. For a detailed descrition of the hard- ---- +---- ware PWM filter look at the end of the wave file, where the ---- +---- pulse width modulators can be found. ---- +---- For a proper operation it is required, that the wave clock ---- +---- is lower than the system clock. A good choice is for example ---- +---- 2MHz for the wave clock and 16MHz for the system clock. ---- +---- ---- +---- Main module file. ---- +---- Top level file for use in systems on programmable chips. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Top level file provided for SOC (systems on programmable chips). +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use work.wf2149ip_pkg.all; + +entity WF2149IP_TOP_SOC is + port( + + SYS_CLK : in bit; -- Read the inforation in the header! + RESETn : in bit; + + WAV_CLK : in bit; -- Read the inforation in the header! + SELn : in bit; + + BDIR : in bit; + BC2, BC1 : in bit; + + A9n, A8 : in bit; + DA_IN : in std_logic_vector(7 downto 0); + DA_OUT : out std_logic_vector(7 downto 0); + DA_EN : out bit; + + IO_A_IN : in bit_vector(7 downto 0); + IO_A_OUT : out bit_vector(7 downto 0); + IO_A_EN : out bit; + IO_B_IN : in bit_vector(7 downto 0); + IO_B_OUT : out bit_vector(7 downto 0); + IO_B_EN : out bit; + + OUT_A : out bit; -- Analog (PWM) outputs. + OUT_B : out bit; + OUT_C : out bit + ); +end WF2149IP_TOP_SOC; + +architecture STRUCTURE of WF2149IP_TOP_SOC is +signal BUSCYCLE : BUSCYCLES; +signal DATA_OUT_I : std_logic_vector(7 downto 0); +signal DATA_EN_I : bit; +signal WAV_STRB : bit; +signal ADR_I : bit_vector(3 downto 0); +signal CTRL_REG : bit_vector(7 downto 0); +signal PORT_A : bit_vector(7 downto 0); +signal PORT_B : bit_vector(7 downto 0); +begin + P_WAVSTRB: process(RESETn, SYS_CLK) + variable LOCK : boolean; + variable TMP : bit; + begin + if RESETn = '0' then + LOCK := false; + TMP := '0'; + elsif SYS_CLK = '1' and SYS_CLK' event then + if WAV_CLK = '1' and LOCK = false then + LOCK := true; + TMP := not TMP; -- Divider by 2. + case SELn is + when '1' => WAV_STRB <= '1'; + when others => WAV_STRB <= TMP; + end case; + elsif WAV_CLK = '0' then + LOCK := false; + WAV_STRB <= '0'; + else + WAV_STRB <= '0'; + end if; + end if; + end process P_WAVSTRB; + + with BDIR & BC2 & BC1 select + BUSCYCLE <= INACTIVE when "000" | "010" | "101", + ADDRESS when "001" | "100" | "111", + R_READ when "011", + R_WRITE when "110"; + + ADDRESSLATCH: process(RESETn, SYS_CLK) + -- This process is responsible to store the desired register + -- address. The default (after reset) is channel A fine tone + -- adjustment. + begin + if RESETn = '0' then + ADR_I <= (others => '0'); + elsif SYS_CLK = '1' and SYS_CLK' event then + if BUSCYCLE = ADDRESS and A9n = '0' and A8 = '1' and DA_IN(7 downto 4) = x"0" then + ADR_I <= To_BitVector(DA_IN(3 downto 0)); + end if; + end if; + end process ADDRESSLATCH; + + P_CTRL_REG: process(RESETn, SYS_CLK) + -- THIS is the Control register for the mixer and for the I/O ports. + begin + if RESETn = '0' then + CTRL_REG <= x"00"; + elsif SYS_CLK = '1' and SYS_CLK' event then + if BUSCYCLE = R_WRITE and ADR_I = x"7" then + CTRL_REG <= To_BitVector(DA_IN); + end if; + end if; + end process P_CTRL_REG; + + DIG_PORTS: process(RESETn, SYS_CLK) + begin + if RESETn = '0' then + PORT_A <= x"00"; + PORT_B <= x"00"; + elsif SYS_CLK = '1' and SYS_CLK' event then + if BUSCYCLE = R_WRITE and ADR_I = x"E" then + PORT_A <= To_BitVector(DA_IN); + elsif BUSCYCLE = R_WRITE and ADR_I = x"F" then + PORT_B <= To_BitVector(DA_IN); + end if; + end if; + end process DIG_PORTS; + -- Set port direction to input or to output: + IO_A_EN <= '1' when CTRL_REG(6) = '1' else '0'; + IO_B_EN <= '1' when CTRL_REG(7) = '1' else '0'; + IO_A_OUT <= PORT_A; + IO_B_OUT <= PORT_B; + + I_PSG_WAVE: WF2149IP_WAVE + port map( + RESETn => RESETn, + SYS_CLK => SYS_CLK, + + WAV_STRB => WAV_STRB, + + ADR => ADR_I, + DATA_IN => DA_IN, + DATA_OUT => DATA_OUT_I, + DATA_EN => DATA_EN_I, + + BUSCYCLE => BUSCYCLE, + CTRL_REG => CTRL_REG(5 downto 0), + + OUT_A => OUT_A, + OUT_B => OUT_B, + OUT_C => OUT_C + ); + + -- Read the ports and registers: + DA_EN <= '1' when DATA_EN_I = '1' else + '1' when BUSCYCLE = R_READ and ADR_I = x"7" else + '1' when BUSCYCLE = R_READ and ADR_I = x"E" else + '1' when BUSCYCLE = R_READ and ADR_I = x"F" else '0'; + + DA_OUT <= DATA_OUT_I when DATA_EN_I = '1' else -- WAV stuff. + To_StdLogicVector(IO_A_IN) when BUSCYCLE = R_READ and ADR_I = x"E" else + To_StdLogicVector(IO_B_IN) when BUSCYCLE = R_READ and ADR_I = x"F" else + To_StdLogicVector(CTRL_REG) when BUSCYCLE = R_READ and ADR_I = x"7" else (others => '0'); + +end STRUCTURE; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_wave.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_wave.vhd new file mode 100644 index 0000000..d829f9b --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_wave.vhd @@ -0,0 +1,533 @@ +---------------------------------------------------------------------- +---- ---- +---- YM2149 compatible sound generator. ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- Model of the ST or STE's YM2149 sound generator. ---- +---- ---- +---- Waveform generator. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- NOISE_OUT has now synchronous reset to meet preset requirement. +-- Fixed a bug in the envelope generator. Thanks to Lyndon Amsdon finding it. +-- Correction of the schematic given in the end of this file. + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use work.wf2149ip_pkg.all; + +entity WF2149IP_WAVE is + port( + RESETn : in bit; + SYS_CLK : in bit; + + WAV_STRB : in bit; + + ADR : in bit_vector(3 downto 0); + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + + BUSCYCLE : in BUSCYCLES; + CTRL_REG : in bit_vector(5 downto 0); + + OUT_A : out bit; + OUT_B : out bit; + OUT_C : out bit + ); +end entity WF2149IP_WAVE; + +architecture BEHAVIOR of WF2149IP_WAVE is +signal FREQUENCY_A : std_logic_vector(11 downto 0); +signal FREQUENCY_B : std_logic_vector(11 downto 0); +signal FREQUENCY_C : std_logic_vector(11 downto 0); +signal NOISE_FREQ : std_logic_vector(4 downto 0); +signal LEVEL_A : std_logic_vector(4 downto 0); +signal LEVEL_B : std_logic_vector(4 downto 0); +signal LEVEL_C : std_logic_vector(4 downto 0); +signal ENV_FREQ : std_logic_vector(15 downto 0); +signal ENV_SHAPE : std_logic_vector(3 downto 0); +signal ENV_RESET : boolean; +signal ENV_STRB : bit; +signal OSC_A_OUT : bit; +signal OSC_B_OUT : bit; +signal OSC_C_OUT : bit; +signal NOISE_OUT : bit; +signal AUDIO_A : bit; +signal AUDIO_B : bit; +signal AUDIO_C : bit; +signal VOL_ENV : std_logic_vector(4 downto 0); +signal AMPLITUDE_A : std_logic_vector(4 downto 0); +signal AMPLITUDE_B : std_logic_vector(4 downto 0); +signal AMPLITUDE_C : std_logic_vector(4 downto 0); +signal VOLUME_A : std_logic_vector(7 downto 0); +signal VOLUME_B : std_logic_vector(7 downto 0); +signal VOLUME_C : std_logic_vector(7 downto 0); +signal PWM_RAMP : std_logic_vector(7 downto 0); +begin + REGISTERS: process(RESETn, SYS_CLK) + -- This process is responsible for initialisation + -- and write access to the configuration registers. + begin + if RESETn = '0' then + FREQUENCY_A <= x"000"; + FREQUENCY_B <= x"000"; + FREQUENCY_C <= x"000"; + NOISE_FREQ <= "00000"; + LEVEL_A <= "00000"; + LEVEL_B <= "00000"; + LEVEL_C <= "00000"; + ENV_FREQ <= (others => '0'); + ENV_SHAPE <= "0000"; + elsif SYS_CLK = '1' and SYS_CLK' event then + ENV_RESET <= false; -- Initialize signal. + if BUSCYCLE = R_WRITE then + case ADR is + when x"0" => FREQUENCY_A(7 downto 0) <= DATA_IN; + when x"1" => FREQUENCY_A(11 downto 8) <= DATA_IN(3 downto 0); + when x"2" => FREQUENCY_B(7 downto 0) <= DATA_IN; + when x"3" => FREQUENCY_B(11 downto 8) <= DATA_IN(3 downto 0); + when x"4" => FREQUENCY_C(7 downto 0) <= DATA_IN; + when x"5" => FREQUENCY_C(11 downto 8) <= DATA_IN(3 downto 0); + when x"6" => NOISE_FREQ <= DATA_IN(4 downto 0); + when x"8" => LEVEL_A <= DATA_IN(4 downto 0); + when x"9" => LEVEL_B <= DATA_IN(4 downto 0); + when x"A" => LEVEL_C <= DATA_IN(4 downto 0); + when x"B" => ENV_FREQ(7 downto 0) <= DATA_IN; + when x"C" => ENV_FREQ(15 downto 8) <= DATA_IN; + ENV_RESET <= true; -- Initialize the envelope generator. + when x"D" => ENV_SHAPE <= DATA_IN(3 downto 0); + when others => null; + end case; + end if; + end if; + end process REGISTERS; + + -- Read back the configuration registers: + DATA_OUT <= FREQUENCY_A(7 downto 0) when BUSCYCLE = R_READ and ADR = x"0" else + "0000" & FREQUENCY_A(11 downto 8) when BUSCYCLE = R_READ and ADR = x"1" else + FREQUENCY_B(7 downto 0) when BUSCYCLE = R_READ and ADR = x"2" else + "0000" & FREQUENCY_B(11 downto 8) when BUSCYCLE = R_READ and ADR = x"3" else + FREQUENCY_C(7 downto 0) when BUSCYCLE = R_READ and ADR = x"4" else + "0000" & FREQUENCY_C(11 downto 8) when BUSCYCLE = R_READ and ADR = x"5" else + "000" & NOISE_FREQ when BUSCYCLE = R_READ and ADR = x"6" else + "000" & LEVEL_A when BUSCYCLE = R_READ and ADR = x"8" else + "000" & LEVEL_B when BUSCYCLE = R_READ and ADR = x"9" else + "000" & LEVEL_C when BUSCYCLE = R_READ and ADR = x"A" else + ENV_FREQ(7 downto 0) when BUSCYCLE = R_READ and ADR = x"B" else + ENV_FREQ(15 downto 8) when BUSCYCLE = R_READ and ADR = x"C" else + x"0" & ENV_SHAPE when BUSCYCLE = R_READ and ADR = x"D" else (others => '0'); + DATA_EN <= '1' when BUSCYCLE = R_READ and ADR >= x"0" and ADR <= x"6" else + '1' when BUSCYCLE = R_READ and ADR >= x"8" and ADR <= x"D" else '0'; + + MUSICGENERATOR: process(RESETn, SYS_CLK) + variable CLK_DIV : std_logic_vector(2 downto 0); + variable CNT_CH_A : std_logic_vector(11 downto 0); + variable CNT_CH_B : std_logic_vector(11 downto 0); + variable CNT_CH_C : std_logic_vector(11 downto 0); + begin + if RESETn = '0' then + CLK_DIV := "000"; + CNT_CH_A := (others => '0'); + CNT_CH_B := (others => '0'); + CNT_CH_C := (others => '0'); + OSC_A_OUT <= '0'; + OSC_B_OUT <= '0'; + OSC_C_OUT <= '0'; + elsif SYS_CLK = '1' and SYS_CLK' event then + if WAV_STRB = '1' then + -- Divider by 8 for the oscillators brings in connection + -- with the toggle flip flops CH_x_OUT the required divider + -- ratio of 16. + CLK_DIV := CLK_DIV + '1'; + + if CLK_DIV = "000" then + if FREQUENCY_A = x"000" then + CNT_CH_A := (others => '0'); + OSC_A_OUT <= '0'; + elsif CNT_CH_A = x"000" then + CNT_CH_A := FREQUENCY_A - '1' ; + OSC_A_OUT <= not OSC_A_OUT; + else + CNT_CH_A := CNT_CH_A - '1'; + end if; + + if FREQUENCY_B = x"000" then + CNT_CH_B := (others => '0'); + OSC_B_OUT <= '0'; + elsif CNT_CH_B = x"000" then + CNT_CH_B := FREQUENCY_B - '1' ; + OSC_B_OUT <= not OSC_B_OUT; + else + CNT_CH_B := CNT_CH_B - '1'; + end if; + + if FREQUENCY_C = x"000" then + CNT_CH_C := (others => '0'); + OSC_C_OUT <= '0'; + elsif CNT_CH_C = x"000" then + CNT_CH_C := FREQUENCY_C - '1' ; + OSC_C_OUT <= not OSC_C_OUT; + else + CNT_CH_C := CNT_CH_C - '1'; + end if; + end if; + end if; + end if; + end process MUSICGENERATOR; + + NOISEGENERATOR: process + -- The noise shift polynomial is taken from a template of Kazuhiro TSUJIKAWA's + -- (ESE Artists' factory) approach for a 2149 equivalent. But the implementation + -- is done in another way. + -- LFSR (linear feedback shift register polynomial: f(x) = x^17 + x^14 + 1. + variable CLK_DIV : std_logic_vector(3 downto 0); + variable CNT_NOISE : std_logic_vector(4 downto 0); + variable N_SHFT : std_logic_vector(16 downto 0); + begin + wait until SYS_CLK = '1' and SYS_CLK' event; + if RESETn = '0' then + CLK_DIV := x"0"; + CNT_NOISE := (others => '1'); -- Preset the polynomial shift register. + NOISE_OUT <= '1'; + elsif WAV_STRB = '1' then + -- Divider by 16 for the noise generator. + CLK_DIV := CLK_DIV + '1'; + if CLK_DIV = x"0" then + -- Noise frequency counter. + if NOISE_FREQ = "00000" then + CNT_NOISE := (others => '0'); + elsif CNT_NOISE = "00000" then + CNT_NOISE := NOISE_FREQ - '1' ; + N_SHFT := N_SHFT(15 downto 14) & not(N_SHFT(16) xor N_SHFT(13)) & + N_SHFT(12 downto 0) & not N_SHFT(16); + else + CNT_NOISE := CNT_NOISE - '1'; + end if; + end if; + end if; + NOISE_OUT <= To_Bit(N_SHFT(16)); + end process NOISEGENERATOR; + + ENVELOPE_PERIOD: process(RESETn, SYS_CLK) + -- The envelope period is controlled by the Envelope Frequency and the divider ratio which is + -- 256/32 = 8. For further information see the original data sheet. + variable ENV_CLK : std_logic_vector(18 downto 0); + variable LOCK : boolean; + begin + if RESETn = '0' then + ENV_STRB <= '0'; + ENV_CLK := (others => '0'); + LOCK := false; + elsif SYS_CLK = '1' and SYS_CLK' event then + if WAV_STRB = '1' and LOCK = false then + LOCK := true; + if ENV_FREQ = x"0000" then + ENV_STRB <= '0'; + elsif ENV_CLK = x"0000" & "000" then + ENV_CLK := (ENV_FREQ & "111") - '1' ; + ENV_STRB <= '1'; + else + ENV_CLK := ENV_CLK - '1'; + ENV_STRB <= '0'; + end if; + elsif WAV_STRB = '0' then + LOCK := false; + ENV_STRB <= '0'; + else + ENV_STRB <= '0'; + end if; + end if; + end process ENVELOPE_PERIOD; + + ENVELOPE: process(RESETn, SYS_CLK) + -- Envelope shapes: + -- case ENV_SHAPE: + -- + -- 0 0 x x \___ + -- + -- 0 1 x x /|___ + -- + -- 1 0 0 0 _|\|\|\|\| + -- + -- 1 0 0 1 \___ + -- + -- 1 0 1 0 \/\/ + -- ___ + -- 1 0 1 1 \| + -- + -- 1 1 0 0 /|/|/|/| + -- ___ + -- 1 1 0 1 / + -- + -- 1 1 1 0 /\/\ + -- + -- 1 1 1 1 /|___ + -- + variable ENV_STOP : boolean; + variable ENV_UP_DNn : bit; + begin + if RESETn = '0' then + VOL_ENV <= (others => '0'); + ENV_UP_DNn := '0'; + ENV_STOP := false; + elsif SYS_CLK = '1' and SYS_CLK' event then + if ENV_RESET = true then + ENV_STOP := false; + case ENV_SHAPE is + when "1011" | "1010" | "1001" | "1000" | "0011" | "0010" | "0001" | "0000" => + VOL_ENV <= "11111"; -- Start on top. + ENV_UP_DNn := '0'; + when others => + VOL_ENV <= "00000"; -- Start at bottom. + ENV_UP_DNn := '1'; + end case; + elsif ENV_STRB = '1' then + case ENV_SHAPE is + when "1001" | "0011" | "0010" | "0001" | "0000" => + if VOL_ENV > "00000" then + VOL_ENV <= VOL_ENV - '1'; + end if; + when "1111" | "0111" | "0110" | "0101" | "0100" => + if VOL_ENV < "11111" and ENV_STOP = false then + VOL_ENV <= VOL_ENV + '1'; + else + VOL_ENV <= "00000"; + ENV_STOP := true; + end if; + when "1000" => + VOL_ENV <= VOL_ENV - '1'; + when "1110" | "1010" => + if ENV_UP_DNn = '0' then + VOL_ENV <= VOL_ENV - '1'; + else + VOL_ENV <= VOL_ENV + '1'; + end if; + -- + if VOL_ENV = "00001" then + ENV_UP_DNn := '1'; + elsif VOL_ENV = "11110" then + ENV_UP_DNn := '0'; + end if; + when "1011" => + if VOL_ENV > "00000" and ENV_STOP = false then + VOL_ENV <= VOL_ENV - '1'; + else + VOL_ENV <= "11111"; + ENV_STOP := true; + end if; + when "1100" => + VOL_ENV <= VOL_ENV + '1'; + when "1101" => + if VOL_ENV < "11111" then + VOL_ENV <= VOL_ENV + '1'; + end if; + when others => null; -- Covers U, X, Z, W, H, L, -. + end case; + end if; + end if; + end process ENVELOPE; + + --MIXER: + -- The mixer controls are dependant on the mixer settings and the output of the + -- audio data for all three channels. The noise generator and the square wave + -- generators A, B and C are mixed together by a simple boolean OR. + AUDIO_A <= (OSC_A_OUT and not CTRL_REG(0)) or (NOISE_OUT and not CTRL_REG(3)); + AUDIO_B <= (OSC_B_OUT and not CTRL_REG(1)) or (NOISE_OUT and not CTRL_REG(4)); + AUDIO_C <= (OSC_C_OUT and not CTRL_REG(2)) or (NOISE_OUT and not CTRL_REG(5)); + + --LEVEL (e.g. volume control): + -- The linear amplitude for the DA converters of channel A, B or C are fixed + -- (LEVEL(3 downto 0)) or delivered by the envelope generator. + -- The following behavior is taken from the 2149 IP core of Mike J (www.fpgaarcade.com): + -- "make sure level 31 (env) = level 15 (tone)" + -- Thus there is a resulting & '1' modeling if LEVEL amplitudes are selected. + AMPLITUDE_A <= LEVEL_A(3 downto 0) & '1' when LEVEL_A(4) = '0' and AUDIO_A = '1' else + VOL_ENV when LEVEL_A(4) = '1' and AUDIO_A = '1' else "00000"; + AMPLITUDE_B <= LEVEL_B(3 downto 0) & '1' when LEVEL_B(4) = '0' and AUDIO_B = '1' else + VOL_ENV when LEVEL_B(4) = '1' and AUDIO_B = '1' else "00000"; + AMPLITUDE_C <= LEVEL_C(3 downto 0) & '1' when LEVEL_C(4) = '0' and AUDIO_C = '1' else + VOL_ENV when LEVEL_C(4) = '1' and AUDIO_C = '1' else "00000"; + + -- The values for the logarithmic DA converter volume controls are taken from the linear + -- mixer of Mike J's 2149 IP core (www.fpgaarcade.com). + with AMPLITUDE_A select + VOLUME_A <= x"FF" when "11111", + x"D9" when "11110", + x"BA" when "11101", + x"9F" when "11100", + x"88" when "11011", + x"74" when "11010", + x"63" when "11001", + x"54" when "11000", + x"48" when "10111", + x"3D" when "10110", + x"34" when "10101", + x"2C" when "10100", + x"25" when "10011", + x"1F" when "10010", + x"1A" when "10001", + x"16" when "10000", + x"13" when "01111", + x"10" when "01110", + x"0D" when "01101", + x"0B" when "01100", + x"09" when "01011", + x"08" when "01010", + x"07" when "01001", + x"06" when "01000", + x"05" when "00111", + x"04" when "00110", + x"03" when "00101", + x"03" when "00100", + x"02" when "00011", + x"02" when "00010", + x"01" when "00001", + x"00" when others; -- Also covers U, X, Z, W, H, L, -. + + with AMPLITUDE_B select + VOLUME_B <= x"FF" when "11111", + x"D9" when "11110", + x"BA" when "11101", + x"9F" when "11100", + x"88" when "11011", + x"74" when "11010", + x"63" when "11001", + x"54" when "11000", + x"48" when "10111", + x"3D" when "10110", + x"34" when "10101", + x"2C" when "10100", + x"25" when "10011", + x"1F" when "10010", + x"1A" when "10001", + x"16" when "10000", + x"13" when "01111", + x"10" when "01110", + x"0D" when "01101", + x"0B" when "01100", + x"09" when "01011", + x"08" when "01010", + x"07" when "01001", + x"06" when "01000", + x"05" when "00111", + x"04" when "00110", + x"03" when "00101", + x"03" when "00100", + x"02" when "00011", + x"02" when "00010", + x"01" when "00001", + x"00" when others; -- Also covers U, X, Z, W, H, L, -. + + with AMPLITUDE_C select + VOLUME_C <= x"FF" when "11111", + x"D9" when "11110", + x"BA" when "11101", + x"9F" when "11100", + x"88" when "11011", + x"74" when "11010", + x"63" when "11001", + x"54" when "11000", + x"48" when "10111", + x"3D" when "10110", + x"34" when "10101", + x"2C" when "10100", + x"25" when "10011", + x"1F" when "10010", + x"1A" when "10001", + x"16" when "10000", + x"13" when "01111", + x"10" when "01110", + x"0D" when "01101", + x"0B" when "01100", + x"09" when "01011", + x"08" when "01010", + x"07" when "01001", + x"06" when "01000", + x"05" when "00111", + x"04" when "00110", + x"03" when "00101", + x"03" when "00100", + x"02" when "00011", + x"02" when "00010", + x"01" when "00001", + x"00" when others; -- Also covers U, X, Z, W, H, L, -. + + DA_CONVERSION: process + -- The DA conversion for the three analog outputs is originally performed by a built in DA converter. + -- For this is not possible in current FPGA designs, the converter is replaced by three PWM units + -- operating at a frequency which is 100 times higher than the highest noise or music frequency which + -- is 2MHz/16 = 125kHz. So the PWM frequency requires about 12.5MHz or more. The design is done for + -- a PWM frequency of 16MHz). + begin + wait until SYS_CLK = '1' and SYS_CLK' event; + PWM_RAMP <= PWM_RAMP + '1'; + end process DA_CONVERSION; + OUT_A <= '0' when VOLUME_A = x"00" else '1' when PWM_RAMP < VOLUME_A else '0'; + OUT_B <= '0' when VOLUME_B = x"00" else '1' when PWM_RAMP < VOLUME_B else '0'; + OUT_C <= '0' when VOLUME_C = x"00" else '1' when PWM_RAMP < VOLUME_C else '0'; + -- + -- To obtain proper analog output it is necessary to install analog RC filters to the pulse width + -- outputs. An example is given for the direct wiring of the three analog outputs and for a system + -- clock frequency of 16MHz. The output circuitry looks in this case as follows: + -- + -- OUT_A ---------|1kOhm|-----------| |\ e.g. LM741 + -- |----------------------|+\ || + -- OUT_B ---------|1kOhm|-----------| | OP------||--- Analog Signal + -- | |-----|-/ | || + -- OUT_C ---------|1kOhm|-----------| | |/ | 4u7 + -- | |__________| + -- | + -- --- 10nF. + -- --- + -- | + -- | + -- --- + -- WF. +end architecture BEHAVIOR; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd new file mode 100644 index 0000000..e60cc43 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd @@ -0,0 +1,244 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- Control unit and status logic. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- CTRL_REG has now synchronous reset to meet preset requirements. +-- Process P_DCD has now synchronous reset to meet preset requirements. +-- IRQ_In has now synchronous reset to meet preset requirement. +-- Revision 2K9B 2009/12/24 WF +-- Fixed the interrupt logic. +-- Introduced a minor RTSn correction. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_CTRL_STATUS is + port ( + CLK : in bit; + RESETn : in bit; + + CS : in bit_vector(2 downto 0); -- Active if "011". + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + -- Status register stuff: + RDRF : in bit; -- Receive data register full. + TDRE : in bit; -- Transmit data register empty. + DCDn : in bit; -- Data carrier detect. + CTSn : in bit; -- Clear to send. + FE : in bit; -- Framing error. + OVR : in bit; -- Overrun error. + PE : in bit; -- Parity error. + + -- Control register stuff: + MCLR : buffer bit; -- Master clear (high active). + RTSn : out bit; -- Request to send. + CDS : out bit_vector(1 downto 0); -- Clock control. + WS : out bit_vector(2 downto 0); -- Word select. + TC : out bit_vector(1 downto 0); -- Transmit control. + IRQn : out bit -- Interrupt request. + ); +end entity WF6850IP_CTRL_STATUS; + +architecture BEHAVIOR of WF6850IP_CTRL_STATUS is +signal CTRL_REG : bit_vector(7 downto 0); +signal STATUS_REG : bit_vector(7 downto 0); +signal RIE : bit; +signal IRQ_I : bit; +signal CTS_In : bit; +signal DCD_In : bit; +signal DCD_FLAGn : bit; +begin + P_SAMPLE: process + begin + wait until CLK = '0' and CLK' event; + CTS_In <= CTSn; -- Sample CTSn on the negative clock edge. + DCD_In <= DCDn; -- Sample DCDn on the negative clock edge. + end process P_SAMPLE; + + STATUS_REG(7) <= IRQ_I; + STATUS_REG(6) <= PE; + STATUS_REG(5) <= OVR; + STATUS_REG(4) <= FE; + STATUS_REG(3) <= CTS_In; -- Reflexion of the input pin. + STATUS_REG(2) <= DCD_FLAGn; + STATUS_REG(1) <= TDRE and not CTS_In; -- No TDRE for CTSn = '1'. + STATUS_REG(0) <= RDRF and not DCD_In; -- DCDn = '1' indicates empty. + + DATA_OUT <= STATUS_REG when CS = "011" and RWn = '1' and RS = '0' and E = '1' else (others => '0'); + DATA_EN <= '1' when CS = "011" and RWn = '1' and RS = '0' and E = '1' else '0'; + + MCLR <= '1' when CTRL_REG(1 downto 0) = "11" else '0'; + RTSn <= '0' when CTRL_REG(6 downto 5) /= "10" else '1'; + + CDS <= CTRL_REG(1 downto 0); + WS <= CTRL_REG(4 downto 2); + TC <= CTRL_REG(6 downto 5); + RIE <= CTRL_REG(7); + + P_IRQ: process + variable DCD_OVR_LOCK : boolean; + variable DCD_LOCK : boolean; + variable DCD_TRANS : boolean; + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + DCD_OVR_LOCK := false; + IRQn <= '1'; + IRQ_I <= '0'; + elsif CS = "011" and RWn = '1' and RS = '0' and E = '1' then + DCD_OVR_LOCK := false; -- Enable reset by reading the status. + end if; + + -- Clear interrupts when disabled. + if CTRL_REG(7) = '0' then + IRQn <= '1'; + IRQ_I <= '0'; + elsif CTRL_REG(6 downto 5) /= "01" then + IRQn <= '1'; + IRQ_I <= '0'; + end if; + + -- Transmitter interrupt: + if TDRE = '1' and CTRL_REG(6 downto 5) = "01" and CTS_In = '0' then + IRQn <= '0'; + IRQ_I <= '1'; + elsif CS = "011" and RWn = '0' and RS = '1' and E = '1' then + IRQn <= '1'; -- Clear by writing to the transmit data register. + end if; + + -- Receiver interrupts: + if RDRF = '1' and RIE = '1' and DCD_In = '0' then + IRQn <= '0'; + IRQ_I <= '1'; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + IRQn <= '1'; -- Clear by reading the receive data register. + end if; + + if OVR = '1' and RIE = '1' then + IRQn <= '0'; + IRQ_I <= '1'; + DCD_OVR_LOCK := true; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and DCD_OVR_LOCK = false then + IRQn <= '1'; -- Clear by reading the receive data register after the status. + end if; + + if DCD_In = '1' and RIE = '1' and DCD_TRANS = false then + IRQn <= '0'; + IRQ_I <= '1'; + -- DCD_TRANS is used to detect a low to high transition of DCDn. + DCD_TRANS := true; + DCD_OVR_LOCK := true; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and DCD_OVR_LOCK = false then + IRQn <= '1'; -- Clear by reading the receive data register after the status. + elsif DCD_In = '0' then + DCD_TRANS := false; + end if; + + -- The reset of the IRQ status flag: + -- Clear by writing to the transmit data register. + -- Clear by reading the receive data register. + if CS = "011" and RS = '1' and E = '1' then + IRQ_I <= '0'; + end if; + end process P_IRQ; + + CONTROL: process + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + CTRL_REG <= "01000000"; + elsif CS = "011" and RWn = '0' and RS = '0' and E = '1' then + CTRL_REG <= DATA_IN; + end if; + end process CONTROL; + + P_DCD: process + -- This process is some kind of tricky. Refer to the MC6850 data + -- sheet for more information. + variable READ_LOCK : boolean; + variable DCD_RELEASE : boolean; + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + DCD_FLAGn <= '0'; -- This interrupt source must initialise low. + READ_LOCK := true; + DCD_RELEASE := false; + elsif MCLR = '1' then + DCD_FLAGn <= DCD_In; + READ_LOCK := true; + elsif DCD_In = '1' then + DCD_FLAGn <= '1'; + elsif CS = "011" and RWn = '1' and RS = '0' and E = '1' then + READ_LOCK := false; -- Un-READ_LOCK if receiver data register is read. + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and READ_LOCK = false then + -- Clear if receiver status register read access. + -- After data register has ben read and READ_LOCK again. + DCD_RELEASE := true; + READ_LOCK := true; + DCD_FLAGn <= DCD_In; + elsif DCD_In = '0' and DCD_RELEASE = true then + DCD_FLAGn <= '0'; + DCD_RELEASE := false; + end if; + end process P_DCD; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd.bak new file mode 100644 index 0000000..a0ea9e4 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd.bak @@ -0,0 +1,244 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- Control unit and status logic. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9A 2009/06/20 WF +-- CTRL_REG has now synchronous reset to meet preset requirements. +-- Process P_DCD has now synchronous reset to meet preset requirements. +-- IRQ_In has now synchronous reset to meet preset requirement. +-- Revision 2K9B 2009/12/24 WF +-- Fixed the interrupt logic. +-- Introduced a minor RTSn correction. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_CTRL_STATUS is + port ( + CLK : in bit; + RESETn : in bit; + + CS : in bit_vector(2 downto 0); -- Active if "011". + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + -- Status register stuff: + RDRF : in bit; -- Receive data register full. + TDRE : in bit; -- Transmit data register empty. + DCDn : in bit; -- Data carrier detect. + CTSn : in bit; -- Clear to send. + FE : in bit; -- Framing error. + OVR : in bit; -- Overrun error. + PE : in bit; -- Parity error. + + -- Control register stuff: + MCLR : buffer bit; -- Master clear (high active). + RTSn : out bit; -- Request to send. + CDS : out bit_vector(1 downto 0); -- Clock control. + WS : out bit_vector(2 downto 0); -- Word select. + TC : out bit_vector(1 downto 0); -- Transmit control. + IRQn : out bit -- Interrupt request. + ); +end entity WF6850IP_CTRL_STATUS; + +architecture BEHAVIOR of WF6850IP_CTRL_STATUS is +signal CTRL_REG : bit_vector(7 downto 0); +signal STATUS_REG : bit_vector(7 downto 0); +signal RIE : bit; +signal IRQ_I : bit; +signal CTS_In : bit; +signal DCD_In : bit; +signal DCD_FLAGn : bit; +begin + P_SAMPLE: process + begin + wait until CLK = '0' and CLK' event; + CTS_In <= CTSn; -- Sample CTSn on the negative clock edge. + DCD_In <= DCDn; -- Sample DCDn on the negative clock edge. + end process P_SAMPLE; + + STATUS_REG(7) <= IRQ_I; + STATUS_REG(6) <= PE; + STATUS_REG(5) <= OVR; + STATUS_REG(4) <= FE; + STATUS_REG(3) <= CTS_In; -- Reflexion of the input pin. + STATUS_REG(2) <= DCD_FLAGn; + STATUS_REG(1) <= TDRE and not CTS_In; -- No TDRE for CTSn = '1'. + STATUS_REG(0) <= RDRF and not DCD_In; -- DCDn = '1' indicates empty. + + DATA_OUT <= STATUS_REG when CS = "011" and RWn = '1' and RS = '0' and E = '1' else (others => '0'); + DATA_EN <= '1' when CS = "011" and RWn = '1' and RS = '0' and E = '1' else '0'; + + MCLR <= '1' when CTRL_REG(1 downto 0) = "11" else '0'; + RTSn <= '0' when CTRL_REG(6 downto 5) /= "10" else '1'; + + CDS <= CTRL_REG(1 downto 0); + WS <= CTRL_REG(4 downto 2); + TC <= CTRL_REG(6 downto 5); + RIE <= CTRL_REG(7); + + P_IRQ: process + variable DCD_OVR_LOCK : boolean; + variable DCD_LOCK : boolean; + variable DCD_TRANS : boolean; + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + DCD_OVR_LOCK := false; + IRQn <= '1'; + IRQ_I <= '0'; + elsif CS = "011" and RWn = '1' and RS = '0' and E = '1' then + DCD_OVR_LOCK := false; -- Enable reset by reading the status. + end if; + +-- Clear interrupts when disabled. +if CTRL_REG(7) = '0' then + IRQn <= '1'; + IRQ_I <= '0'; +elsif CTRL_REG(6 downto 5) /= "01" then + IRQn <= '1'; + IRQ_I <= '0'; +end if; + + -- Transmitter interrupt: + if TDRE = '1' and CTRL_REG(6 downto 5) = "01" and CTS_In = '0' then + IRQn <= '0'; + IRQ_I <= '1'; + elsif CS = "011" and RWn = '0' and RS = '1' and E = '1' then + IRQn <= '1'; -- Clear by writing to the transmit data register. + end if; + + -- Receiver interrupts: + if RDRF = '1' and RIE = '1' and DCD_In = '0' then + IRQn <= '0'; + IRQ_I <= '1'; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + IRQn <= '1'; -- Clear by reading the receive data register. + end if; + + if OVR = '1' and RIE = '1' then + IRQn <= '0'; + IRQ_I <= '1'; + DCD_OVR_LOCK := true; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and DCD_OVR_LOCK = false then + IRQn <= '1'; -- Clear by reading the receive data register after the status. + end if; + + if DCD_In = '1' and RIE = '1' and DCD_TRANS = false then + IRQn <= '0'; + IRQ_I <= '1'; + -- DCD_TRANS is used to detect a low to high transition of DCDn. + DCD_TRANS := true; + DCD_OVR_LOCK := true; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and DCD_OVR_LOCK = false then + IRQn <= '1'; -- Clear by reading the receive data register after the status. + elsif DCD_In = '0' then + DCD_TRANS := false; + end if; + + -- The reset of the IRQ status flag: + -- Clear by writing to the transmit data register. + -- Clear by reading the receive data register. + if CS = "011" and RS = '1' and E = '1' then + IRQ_I <= '0'; + end if; + end process P_IRQ; + + CONTROL: process + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + CTRL_REG <= "01000000"; + elsif CS = "011" and RWn = '0' and RS = '0' and E = '1' then + CTRL_REG <= DATA_IN; + end if; + end process CONTROL; + + P_DCD: process + -- This process is some kind of tricky. Refer to the MC6850 data + -- sheet for more information. + variable READ_LOCK : boolean; + variable DCD_RELEASE : boolean; + begin + wait until CLK = '1' and CLK' event; + if RESETn = '0' then + DCD_FLAGn <= '0'; -- This interrupt source must initialise low. + READ_LOCK := true; + DCD_RELEASE := false; + elsif MCLR = '1' then + DCD_FLAGn <= DCD_In; + READ_LOCK := true; + elsif DCD_In = '1' then + DCD_FLAGn <= '1'; + elsif CS = "011" and RWn = '1' and RS = '0' and E = '1' then + READ_LOCK := false; -- Un-READ_LOCK if receiver data register is read. + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' and READ_LOCK = false then + -- Clear if receiver status register read access. + -- After data register has ben read and READ_LOCK again. + DCD_RELEASE := true; + READ_LOCK := true; + DCD_FLAGn <= DCD_In; + elsif DCD_In = '0' and DCD_RELEASE = true then + DCD_FLAGn <= '0'; + DCD_RELEASE := false; + end if; + end process P_DCD; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd new file mode 100644 index 0000000..755e018 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd @@ -0,0 +1,415 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- 6850's receiver unit. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_RECEIVE is + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + + RXCLK : in bit; + RXDATA : in bit; + + RDRF : buffer bit; + OVR : out bit; + PE : out bit; + FE : out bit + ); +end entity WF6850IP_RECEIVE; + +architecture BEHAVIOR of WF6850IP_RECEIVE is +type RCV_STATES is (IDLE, WAIT_START, SAMPLE, PARITY, STOP1, STOP2, SYNC); +signal RCV_STATE, RCV_NEXT_STATE : RCV_STATES; +signal RXDATA_I : bit; +signal RXDATA_S : bit; +signal DATA_REG : bit_vector(7 downto 0); +signal SHIFT_REG : bit_vector(7 downto 0); +signal CLK_STRB : bit; +signal BITCNT : std_logic_vector(2 downto 0); +begin + P_SAMPLE: process + -- This filter provides a synchronisation to the system + -- clock, even for random baud rates of the received data + -- stream. + variable FLT_TMP : integer range 0 to 2; + begin + wait until CLK = '1' and CLK' event; + -- + RXDATA_I <= RXDATA; + -- + if RXDATA_I = '1' and FLT_TMP < 2 then + FLT_TMP := FLT_TMP + 1; + elsif RXDATA_I = '1' then + RXDATA_S <= '1'; + elsif RXDATA_I = '0' and FLT_TMP > 0 then + FLT_TMP := FLT_TMP - 1; + elsif RXDATA_I = '0' then + RXDATA_S <= '0'; + end if; + end process P_SAMPLE; + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(6 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CDS = "00" then -- Divider off. + if RXCLK = '1' and STRB_LOCK = false then + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif RXCLK = '0' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + elsif RCV_STATE = IDLE then + -- Preset the CLKDIV with the start delays. + if CDS = "01" then + CLK_DIVCNT := "0001000"; -- Half of div by 16 mode. + elsif CDS = "10" then + CLK_DIVCNT := "0100000"; -- Half of div by 64 mode. + end if; + CLK_STRB <= '0'; + else + if CLK_DIVCNT > "0000000" and RXCLK = '1' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_STRB <= '0'; + CLK_LOCK := true; + elsif CDS = "01" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "0010000"; -- Div by 16 mode. + -- + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif CDS = "10" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "1000000"; -- Div by 64 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif RXCLK = '0' then + CLK_LOCK := false; + STRB_LOCK := false; + CLK_STRB <= '0'; + else + CLK_STRB <= '0'; + end if; + end if; + end process CLKDIV; + + DATAREG: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + DATA_REG <= x"00"; + elsif RCV_STATE = SYNC and WS(2) = '0' and RDRF = '0' then -- 7 bit data. + -- Transfer from shift- to data register only if + -- data register is empty (RDRF = '0'). + DATA_REG <= '0' & SHIFT_REG(7 downto 1); + elsif RCV_STATE = SYNC and WS(2) = '1' and RDRF = '0' then -- 8 bit data. + -- Transfer from shift- to data register only if + -- data register is empty (RDRF = '0'). + DATA_REG <= SHIFT_REG; + end if; + end if; + end process DATAREG; + DATA_OUT <= DATA_REG when CS = "011" and RWn = '1' and RS = '1' and E = '1' else (others => '0'); + DATA_EN <= '1' when CS = "011" and RWn = '1' and RS = '1' and E = '1' else '0'; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + SHIFT_REG <= x"00"; + elsif RCV_STATE = SAMPLE and CLK_STRB = '1' then + SHIFT_REG <= RXDATA_S & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_BITCNT: process + begin + wait until CLK = '1' and CLK' event; + if RCV_STATE = SAMPLE and CLK_STRB = '1' then + BITCNT <= BITCNT + '1'; + elsif RCV_STATE /= SAMPLE then + BITCNT <= (others => '0'); + end if; + end process P_BITCNT; + + FRAME_ERR: process(RESETn, CLK) + -- This module detects a framing error + -- during stop bit 1 and stop bit 2. + variable FE_I: bit; + begin + if RESETn = '0' then + FE_I := '0'; + FE <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + FE_I := '0'; + FE <= '0'; + elsif CLK_STRB = '1' then + if RCV_STATE = STOP1 and RXDATA_S = '0' then + FE_I := '1'; + elsif RCV_STATE = STOP2 and RXDATA_S = '0' then + FE_I := '1'; + elsif RCV_STATE = STOP1 or RCV_STATE = STOP2 then + FE_I := '0'; -- Error resets when correct data appears. + end if; + end if; + if RCV_STATE = SYNC then + FE <= FE_I; -- Update the FE every SYNC time. + end if; + end if; + end process FRAME_ERR; + + OVERRUN: process(RESETn, CLK) + variable OVR_I : bit; + variable FIRST_READ : boolean; + begin + if RESETn = '0' then + OVR_I := '0'; + OVR <= '0'; + FIRST_READ := false; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + OVR_I := '0'; + OVR <= '0'; + FIRST_READ := false; + elsif CLK_STRB = '1' and RCV_STATE = STOP1 then + -- Overrun appears if RDRF is '1' in this state. + OVR_I := RDRF; + end if; + if CS = "011" and RWn = '1' and RS = '1' and E = '1' and OVR_I = '1' then + -- If an overrun was detected, the concerning flag is + -- set when the valid data word in the receiver data + -- register is read. Thereafter the RDRF flag is reset + -- and the overrun disappears (OVR_I goes low) after + -- a second read (in time) of the receiver data register. + if FIRST_READ = false then + OVR <= '1'; + FIRST_READ := true; + else + OVR <= '0'; + FIRST_READ := false; + end if; + end if; + end if; + end process OVERRUN; + + PARITY_TEST: process(RESETn, CLK) + variable PAR_TMP : bit; + variable PE_I : bit; + begin + if RESETn = '0' then + PE <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + PE <= '0'; + elsif CLK_STRB = '1' then -- Sample parity on clock strobe. + PE_I := '0'; -- Initialise. + if RCV_STATE = PARITY then + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if WS = "000" or WS = "010" or WS = "110" then -- Even parity. + PE_I := PAR_TMP xor RXDATA_S; + elsif WS = "001" or WS = "011" or WS = "111" then -- Odd parity. + PE_I := not PAR_TMP xor RXDATA_S; + else -- No parity for WS = "100" and WS = "101". + PE_I := '0'; + end if; + end if; + end if; + -- Transmit the parity flag together with the data + -- In other words: no parity to the status register + -- when RDRF inhibits the data transfer to the + -- receiver data register. + if RCV_STATE = SYNC and RDRF = '0' then + PE <= PE_I; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + PE <= '0'; -- Clear when reading the data register. + end if; + end if; + end process PARITY_TEST; + + P_RDRF: process(RESETn, CLK) + -- Receive data register full flag. + begin + if RESETn = '0' then + RDRF <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + RDRF <= '0'; + elsif RCV_STATE = SYNC then + RDRF <= '1'; -- Data register is full until now! + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + RDRF <= '0'; -- After reading the data register ... + end if; + end if; + end process P_RDRF; + + RCV_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + RCV_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + RCV_STATE <= IDLE; + else + RCV_STATE <= RCV_NEXT_STATE; + end if; + end if; + end process RCV_STATEREG; + + RCV_STATEDEC: process(RCV_STATE, RXDATA_S, CDS, WS, BITCNT, CLK_STRB) + begin + case RCV_STATE is + when IDLE => + if RXDATA_S = '0' and CDS = "00" then + RCV_NEXT_STATE <= SAMPLE; -- Startbit detected in div by 1 mode. + elsif RXDATA_S = '0' and CDS = "01" then + RCV_NEXT_STATE <= WAIT_START; -- Startbit detected in div by 16 mode. + elsif RXDATA_S = '0' and CDS = "10" then + RCV_NEXT_STATE <= WAIT_START; -- Startbit detected in div by 64 mode. + else + RCV_NEXT_STATE <= IDLE; -- No startbit; sleep well :-) + end if; + when WAIT_START => + if CLK_STRB = '1' then + if RXDATA_S = '0' then + RCV_NEXT_STATE <= SAMPLE; -- Start condition in no div by 1 modes. + else + RCV_NEXT_STATE <= IDLE; -- No valid start condition, go back. + end if; + else + RCV_NEXT_STATE <= WAIT_START; -- Stay. + end if; + when SAMPLE => + if CLK_STRB = '1' then + if BITCNT < "110" and WS(2) = '0' then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 7 data bits. + elsif BITCNT < "111" and WS(2) = '1' then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 8 data bits. + elsif WS = "100" or WS = "101" then + RCV_NEXT_STATE <= STOP1; -- No parity check enabled. + else + RCV_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + RCV_NEXT_STATE <= SAMPLE; -- Stay in sample mode. + end if; + when PARITY => + if CLK_STRB = '1' then + RCV_NEXT_STATE <= STOP1; + else + RCV_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' then + if RXDATA_S = '0' then + RCV_NEXT_STATE <= SYNC; -- Framing error detected. + elsif WS = "000" or WS = "001" or WS = "100" then + RCV_NEXT_STATE <= STOP2; -- Two stop bits selected. + else + RCV_NEXT_STATE <= SYNC; -- One stop bit selected. + end if; + else + RCV_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_STRB = '1' then + RCV_NEXT_STATE <= SYNC; + else + RCV_NEXT_STATE <= STOP2; + end if; + when SYNC => + RCV_NEXT_STATE <= IDLE; + end case; + end process RCV_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd.bak new file mode 100644 index 0000000..e8c82b2 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd.bak @@ -0,0 +1,415 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- 6850's receiver unit. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_RECEIVE is + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + + RXCLK : in bit; + RXDATA : in bit; + + RDRF : buffer bit; + OVR : out bit; + PE : out bit; + FE : out bit + ); +end entity WF6850IP_RECEIVE; + +architecture BEHAVIOR of WF6850IP_RECEIVE is +type RCV_STATES is (IDLE, WAIT_START, SAMPLE, PARITY, STOP1, STOP2, SYNC); +signal RCV_STATE, RCV_NEXT_STATE : RCV_STATES; +signal RXDATA_I : bit; +signal RXDATA_S : bit; +signal DATA_REG : bit_vector(7 downto 0); +signal SHIFT_REG : bit_vector(7 downto 0); +signal CLK_STRB : bit; +signal BITCNT : std_logic_vector(2 downto 0); +begin + P_SAMPLE: process + -- This filter provides a synchronisation to the system + -- clock, even for random baud rates of the received data + -- stream. + variable FLT_TMP : integer range 0 to 2; + begin + wait until CLK = '1' and CLK' event; + -- + RXDATA_I <= RXDATA; + -- + if RXDATA_I = '1' and FLT_TMP < 2 then + FLT_TMP := FLT_TMP + 1; + elsif RXDATA_I = '1' then + RXDATA_S <= '1'; + elsif RXDATA_I = '0' and FLT_TMP > 0 then + FLT_TMP := FLT_TMP - 1; + elsif RXDATA_I = '0' then + RXDATA_S <= '0'; + end if; + end process P_SAMPLE; + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(6 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CDS = "00" then -- Divider off. + if RXCLK = '1' and STRB_LOCK = false then + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif RXCLK = '0' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + elsif RCV_STATE = IDLE then + -- Preset the CLKDIV with the start delays. + if CDS = "01" then + CLK_DIVCNT := "0001000"; -- Half of div by 16 mode. + elsif CDS = "10" then + CLK_DIVCNT := "0100000"; -- Half of div by 64 mode. + end if; + CLK_STRB <= '0'; + else + if CLK_DIVCNT > "0000000" and RXCLK = '1' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_STRB <= '0'; + CLK_LOCK := true; + elsif CDS = "01" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "0010000"; -- Div by 16 mode. + -- + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif CDS = "10" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "1000000"; -- Div by 64 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif RXCLK = '0' then + CLK_LOCK := false; + STRB_LOCK := false; + CLK_STRB <= '0'; + else + CLK_STRB <= '0'; + end if; + end if; + end process CLKDIV; + + DATAREG: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + DATA_REG <= x"00"; + elsif RCV_STATE = SYNC and WS(2) = '0' and RDRF = '0' then -- 7 bit data. + -- Transfer from shift- to data register only if + -- data register is empty (RDRF = '0'). + DATA_REG <= '0' & SHIFT_REG(7 downto 1); + elsif RCV_STATE = SYNC and WS(2) = '1' and RDRF = '0' then -- 8 bit data. + -- Transfer from shift- to data register only if + -- data register is empty (RDRF = '0'). + DATA_REG <= SHIFT_REG; + end if; + end if; + end process DATAREG; +--DATA_OUT <= DATA_REG when CS = "011" and RWn = '1' and RS = '1' and E = '1' else (others => '0'); +--DATA_EN <= '1' when CS = "011" and RWn = '1' and RS = '1' and E = '1' else '0'; +DATA_OUT <= DATA_REG when CS = "011" and RWn = '1' and RS = '1' else (others => '0'); +DATA_EN <= '1' when CS = "011" and RWn = '1' and RS = '1' else '0'; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + SHIFT_REG <= x"00"; + elsif RCV_STATE = SAMPLE and CLK_STRB = '1' then + SHIFT_REG <= RXDATA_S & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_BITCNT: process + begin + wait until CLK = '1' and CLK' event; + if RCV_STATE = SAMPLE and CLK_STRB = '1' then + BITCNT <= BITCNT + '1'; + elsif RCV_STATE /= SAMPLE then + BITCNT <= (others => '0'); + end if; + end process P_BITCNT; + + FRAME_ERR: process(RESETn, CLK) + -- This module detects a framing error + -- during stop bit 1 and stop bit 2. + variable FE_I: bit; + begin + if RESETn = '0' then + FE_I := '0'; + FE <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + FE_I := '0'; + FE <= '0'; + elsif CLK_STRB = '1' then + if RCV_STATE = STOP1 and RXDATA_S = '0' then + FE_I := '1'; + elsif RCV_STATE = STOP2 and RXDATA_S = '0' then + FE_I := '1'; + elsif RCV_STATE = STOP1 or RCV_STATE = STOP2 then + FE_I := '0'; -- Error resets when correct data appears. + end if; + end if; + if RCV_STATE = SYNC then + FE <= FE_I; -- Update the FE every SYNC time. + end if; + end if; + end process FRAME_ERR; + + OVERRUN: process(RESETn, CLK) + variable OVR_I : bit; + variable FIRST_READ : boolean; + begin + if RESETn = '0' then + OVR_I := '0'; + OVR <= '0'; + FIRST_READ := false; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + OVR_I := '0'; + OVR <= '0'; + FIRST_READ := false; + elsif CLK_STRB = '1' and RCV_STATE = STOP1 then + -- Overrun appears if RDRF is '1' in this state. + OVR_I := RDRF; + end if; + if CS = "011" and RWn = '1' and RS = '1' and E = '1' and OVR_I = '1' then + -- If an overrun was detected, the concerning flag is + -- set when the valid data word in the receiver data + -- register is read. Thereafter the RDRF flag is reset + -- and the overrun disappears (OVR_I goes low) after + -- a second read (in time) of the receiver data register. + if FIRST_READ = false then + OVR <= '1'; + FIRST_READ := true; + else + OVR <= '0'; + FIRST_READ := false; + end if; + end if; + end if; + end process OVERRUN; + + PARITY_TEST: process(RESETn, CLK) + variable PAR_TMP : bit; + variable PE_I : bit; + begin + if RESETn = '0' then + PE <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + PE <= '0'; + elsif CLK_STRB = '1' then -- Sample parity on clock strobe. + PE_I := '0'; -- Initialise. + if RCV_STATE = PARITY then + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if WS = "000" or WS = "010" or WS = "110" then -- Even parity. + PE_I := PAR_TMP xor RXDATA_S; + elsif WS = "001" or WS = "011" or WS = "111" then -- Odd parity. + PE_I := not PAR_TMP xor RXDATA_S; + else -- No parity for WS = "100" and WS = "101". + PE_I := '0'; + end if; + end if; + end if; + -- Transmit the parity flag together with the data + -- In other words: no parity to the status register + -- when RDRF inhibits the data transfer to the + -- receiver data register. + if RCV_STATE = SYNC and RDRF = '0' then + PE <= PE_I; + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + PE <= '0'; -- Clear when reading the data register. + end if; + end if; + end process PARITY_TEST; + + P_RDRF: process(RESETn, CLK) + -- Receive data register full flag. + begin + if RESETn = '0' then + RDRF <= '0'; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + RDRF <= '0'; + elsif RCV_STATE = SYNC then + RDRF <= '1'; -- Data register is full until now! + elsif CS = "011" and RWn = '1' and RS = '1' and E = '1' then + RDRF <= '0'; -- After reading the data register ... + end if; + end if; + end process P_RDRF; + + RCV_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + RCV_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + RCV_STATE <= IDLE; + else + RCV_STATE <= RCV_NEXT_STATE; + end if; + end if; + end process RCV_STATEREG; + + RCV_STATEDEC: process(RCV_STATE, RXDATA_S, CDS, WS, BITCNT, CLK_STRB) + begin + case RCV_STATE is + when IDLE => + if RXDATA_S = '0' and CDS = "00" then + RCV_NEXT_STATE <= SAMPLE; -- Startbit detected in div by 1 mode. + elsif RXDATA_S = '0' and CDS = "01" then + RCV_NEXT_STATE <= WAIT_START; -- Startbit detected in div by 16 mode. + elsif RXDATA_S = '0' and CDS = "10" then + RCV_NEXT_STATE <= WAIT_START; -- Startbit detected in div by 64 mode. + else + RCV_NEXT_STATE <= IDLE; -- No startbit; sleep well :-) + end if; + when WAIT_START => + if CLK_STRB = '1' then + if RXDATA_S = '0' then + RCV_NEXT_STATE <= SAMPLE; -- Start condition in no div by 1 modes. + else + RCV_NEXT_STATE <= IDLE; -- No valid start condition, go back. + end if; + else + RCV_NEXT_STATE <= WAIT_START; -- Stay. + end if; + when SAMPLE => + if CLK_STRB = '1' then + if BITCNT < "110" and WS(2) = '0' then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 7 data bits. + elsif BITCNT < "111" and WS(2) = '1' then + RCV_NEXT_STATE <= SAMPLE; -- Go on sampling 8 data bits. + elsif WS = "100" or WS = "101" then + RCV_NEXT_STATE <= STOP1; -- No parity check enabled. + else + RCV_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + RCV_NEXT_STATE <= SAMPLE; -- Stay in sample mode. + end if; + when PARITY => + if CLK_STRB = '1' then + RCV_NEXT_STATE <= STOP1; + else + RCV_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' then + if RXDATA_S = '0' then + RCV_NEXT_STATE <= SYNC; -- Framing error detected. + elsif WS = "000" or WS = "001" or WS = "100" then + RCV_NEXT_STATE <= STOP2; -- Two stop bits selected. + else + RCV_NEXT_STATE <= SYNC; -- One stop bit selected. + end if; + else + RCV_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_STRB = '1' then + RCV_NEXT_STATE <= SYNC; + else + RCV_NEXT_STATE <= STOP2; + end if; + when SYNC => + RCV_NEXT_STATE <= IDLE; + end case; + end process RCV_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top.vhd new file mode 100644 index 0000000..60a7885 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top.vhd @@ -0,0 +1,135 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- This is the top level file. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8B 2008/12/24 WF +-- Rewritten this top level file as a wrapper for the top_soc file. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_TOP is + port ( + CLK : in bit; + RESETn : in bit; + + CS2n, CS1, CS0 : in bit; + E : in bit; + RWn : in bit; + RS : in bit; + + DATA : inout std_logic_vector(7 downto 0); + + TXCLK : in bit; + RXCLK : in bit; + RXDATA : in bit; + CTSn : in bit; + DCDn : in bit; + + IRQn : out std_logic; + TXDATA : out bit; + RTSn : out bit + ); +end entity WF6850IP_TOP; + +architecture STRUCTURE of WF6850IP_TOP is +component WF6850IP_TOP_SOC + port ( + CLK : in bit; + RESETn : in bit; + CS2n, CS1, CS0 : in bit; + E : in bit; + RWn : in bit; + RS : in bit; + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + TXCLK : in bit; + RXCLK : in bit; + RXDATA : in bit; + CTSn : in bit; + DCDn : in bit; + IRQn : out bit; + TXDATA : out bit; + RTSn : out bit + ); +end component; +signal DATA_OUT : std_logic_vector(7 downto 0); +signal DATA_EN : bit; +signal IRQ_In : bit; +begin + DATA <= DATA_OUT when DATA_EN = '1' else (others => 'Z'); + IRQn <= '0' when IRQ_In = '0' else 'Z'; -- Open drain. + + I_UART: WF6850IP_TOP_SOC + port map(CLK => CLK, + RESETn => RESETn, + CS2n => CS2n, + CS1 => CS1, + CS0 => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_IN => DATA, + DATA_OUT => DATA_OUT, + DATA_EN => DATA_EN, + TXCLK => TXCLK, + RXCLK => RXCLK, + RXDATA => RXDATA, + CTSn => CTSn, + DCDn => DCDn, + IRQn => IRQ_In, + TXDATA => TXDATA, + RTSn => RTSn + ); +end architecture STRUCTURE; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd new file mode 100644 index 0000000..cbca6bd --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd @@ -0,0 +1,255 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- This is the top level file. ---- +---- Top level file for use in systems on programmable chips. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Top level file provided for SOC (systems on programmable chips). +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K9B 2009/12/24 WF +-- Fixed the interrupt logic. +-- Introduced a minor RTSn correction. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_TOP_SOC is + port ( + CLK : in bit; + RESETn : in bit; + + CS2n, CS1, CS0 : in bit; + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + + TXCLK : in bit; + RXCLK : in bit; + RXDATA : in bit; + CTSn : in bit; + DCDn : in bit; + + IRQn : out bit; + TXDATA : out bit; + RTSn : out bit + ); +end entity WF6850IP_TOP_SOC; + +architecture STRUCTURE of WF6850IP_TOP_SOC is +component WF6850IP_CTRL_STATUS + port ( + CLK : in bit; + RESETn : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + RDRF : in bit; + TDRE : in bit; + DCDn : in bit; + CTSn : in bit; + FE : in bit; + OVR : in bit; + PE : in bit; + MCLR : out bit; + RTSn : out bit; + CDS : out bit_vector(1 downto 0); + WS : out bit_vector(2 downto 0); + TC : out bit_vector(1 downto 0); + IRQn : out bit + ); +end component; + +component WF6850IP_RECEIVE + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + RXCLK : in bit; + RXDATA : in bit; + RDRF : out bit; + OVR : out bit; + PE : out bit; + FE : out bit + ); +end component; + +component WF6850IP_TRANSMIT + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_IN : in bit_vector(7 downto 0); + CTSn : in bit; + TC : in bit_vector(1 downto 0); + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + TXCLK : in bit; + TDRE : out bit; + TXDATA : out bit + ); +end component; +signal DATA_IN_I : bit_vector(7 downto 0); +signal DATA_RX : bit_vector(7 downto 0); +signal DATA_RX_EN : bit; +signal DATA_CTRL : bit_vector(7 downto 0); +signal DATA_CTRL_EN : bit; +signal RDRF_I : bit; +signal TDRE_I : bit; +signal FE_I : bit; +signal OVR_I : bit; +signal PE_I : bit; +signal MCLR_I : bit; +signal CDS_I : bit_vector(1 downto 0); +signal WS_I : bit_vector(2 downto 0); +signal TC_I : bit_vector(1 downto 0); +signal IRQ_In : bit; +begin + DATA_IN_I <= To_BitVector(DATA_IN); + DATA_EN <= DATA_RX_EN or DATA_CTRL_EN; + DATA_OUT <= To_StdLogicVector(DATA_RX) when DATA_RX_EN = '1' else + To_StdLogicVector(DATA_CTRL) when DATA_CTRL_EN = '1' else (others => '0'); + + IRQn <= '0' when IRQ_In = '0' else '1'; + + I_UART_CTRL_STATUS: WF6850IP_CTRL_STATUS + port map( + CLK => CLK, + RESETn => RESETn, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_CTRL, + DATA_EN => DATA_CTRL_EN, + RDRF => RDRF_I, + TDRE => TDRE_I, + DCDn => DCDn, + CTSn => CTSn, + FE => FE_I, + OVR => OVR_I, + PE => PE_I, + MCLR => MCLR_I, + RTSn => RTSn, + CDS => CDS_I, + WS => WS_I, + TC => TC_I, + IRQn => IRQ_In + ); + + I_UART_RECEIVE: WF6850IP_RECEIVE + port map ( + CLK => CLK, + RESETn => RESETn, + MCLR => MCLR_I, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_OUT => DATA_RX, + DATA_EN => DATA_RX_EN, + WS => WS_I, + CDS => CDS_I, + RXCLK => RXCLK, + RXDATA => RXDATA, + RDRF => RDRF_I, + OVR => OVR_I, + PE => PE_I, + FE => FE_I + ); + + I_UART_TRANSMIT: WF6850IP_TRANSMIT + port map ( + CLK => CLK, + RESETn => RESETn, + MCLR => MCLR_I, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + CTSn => CTSn, + TC => TC_I, + WS => WS_I, + CDS => CDS_I, + TDRE => TDRE_I, + TXCLK => TXCLK, + TXDATA => TXDATA + ); +end architecture STRUCTURE; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd.bak new file mode 100644 index 0000000..6f80a67 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd.bak @@ -0,0 +1,252 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- This is the top level file. ---- +---- Top level file for use in systems on programmable chips. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Top level file provided for SOC (systems on programmable chips). +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_TOP_SOC is + port ( + CLK : in bit; + RESETn : in bit; + + CS2n, CS1, CS0 : in bit; + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in std_logic_vector(7 downto 0); + DATA_OUT : out std_logic_vector(7 downto 0); + DATA_EN : out bit; + + TXCLK : in bit; + RXCLK : in bit; + RXDATA : in bit; + CTSn : in bit; + DCDn : in bit; + + IRQn : out bit; + TXDATA : out bit; + RTSn : out bit + ); +end entity WF6850IP_TOP_SOC; + +architecture STRUCTURE of WF6850IP_TOP_SOC is +component WF6850IP_CTRL_STATUS + port ( + CLK : in bit; + RESETn : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_IN : in bit_vector(7 downto 0); + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + RDRF : in bit; + TDRE : in bit; + DCDn : in bit; + CTSn : in bit; + FE : in bit; + OVR : in bit; + PE : in bit; + MCLR : out bit; + RTSn : out bit; + CDS : out bit_vector(1 downto 0); + WS : out bit_vector(2 downto 0); + TC : out bit_vector(1 downto 0); + IRQn : out bit + ); +end component; + +component WF6850IP_RECEIVE + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_OUT : out bit_vector(7 downto 0); + DATA_EN : out bit; + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + RXCLK : in bit; + RXDATA : in bit; + RDRF : out bit; + OVR : out bit; + PE : out bit; + FE : out bit + ); +end component; + +component WF6850IP_TRANSMIT + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + DATA_IN : in bit_vector(7 downto 0); + CTSn : in bit; + TC : in bit_vector(1 downto 0); + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + TXCLK : in bit; + TDRE : out bit; + TXDATA : out bit + ); +end component; +signal DATA_IN_I : bit_vector(7 downto 0); +signal DATA_RX : bit_vector(7 downto 0); +signal DATA_RX_EN : bit; +signal DATA_CTRL : bit_vector(7 downto 0); +signal DATA_CTRL_EN : bit; +signal RDRF_I : bit; +signal TDRE_I : bit; +signal FE_I : bit; +signal OVR_I : bit; +signal PE_I : bit; +signal MCLR_I : bit; +signal CDS_I : bit_vector(1 downto 0); +signal WS_I : bit_vector(2 downto 0); +signal TC_I : bit_vector(1 downto 0); +signal IRQ_In : bit; +begin + DATA_IN_I <= To_BitVector(DATA_IN); + DATA_EN <= DATA_RX_EN or DATA_CTRL_EN; + DATA_OUT <= To_StdLogicVector(DATA_RX) when DATA_RX_EN = '1' else + To_StdLogicVector(DATA_CTRL) when DATA_CTRL_EN = '1' else (others => '0'); + + IRQn <= '0' when IRQ_In = '0' else '1'; + + I_UART_CTRL_STATUS: WF6850IP_CTRL_STATUS + port map( + CLK => CLK, + RESETn => RESETn, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + DATA_OUT => DATA_CTRL, + DATA_EN => DATA_CTRL_EN, + RDRF => RDRF_I, + TDRE => TDRE_I, + DCDn => DCDn, + CTSn => CTSn, + FE => FE_I, + OVR => OVR_I, + PE => PE_I, + MCLR => MCLR_I, + RTSn => RTSn, + CDS => CDS_I, + WS => WS_I, + TC => TC_I, + IRQn => IRQ_In + ); + + I_UART_RECEIVE: WF6850IP_RECEIVE + port map ( + CLK => CLK, + RESETn => RESETn, + MCLR => MCLR_I, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_OUT => DATA_RX, + DATA_EN => DATA_RX_EN, + WS => WS_I, + CDS => CDS_I, + RXCLK => RXCLK, + RXDATA => RXDATA, + RDRF => RDRF_I, + OVR => OVR_I, + PE => PE_I, + FE => FE_I + ); + + I_UART_TRANSMIT: WF6850IP_TRANSMIT + port map ( + CLK => CLK, + RESETn => RESETn, + MCLR => MCLR_I, + CS(2) => CS2n, + CS(1) => CS1, + CS(0) => CS0, + E => E, + RWn => RWn, + RS => RS, + DATA_IN => DATA_IN_I, + CTSn => CTSn, + TC => TC_I, + WS => WS_I, + CDS => CDS_I, + TDRE => TDRE_I, + TXCLK => TXCLK, + TXDATA => TXDATA + ); +end architecture STRUCTURE; \ No newline at end of file diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd new file mode 100644 index 0000000..c8ae6fc --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd @@ -0,0 +1,339 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- 6850's transmitter unit. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K8B 2008/11/01 WF +-- Fixed the T_DRE process concerning the TDRE <= '1' setting. +-- Thanks to Lyndon Amsdon finding the bug. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_TRANSMIT is + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in bit_vector(7 downto 0); + + CTSn : in bit; + + TC : in bit_vector(1 downto 0); + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + + TXCLK : in bit; + + TDRE : buffer bit; + TXDATA : out bit + ); +end entity WF6850IP_TRANSMIT; + +architecture BEHAVIOR of WF6850IP_TRANSMIT is +type TR_STATES is (IDLE, LOAD_SHFT, START, SHIFTOUT, PARITY, STOP1, STOP2); +signal TR_STATE, TR_NEXT_STATE : TR_STATES; +signal CLK_STRB : bit; +signal DATA_REG : bit_vector(7 downto 0); +signal SHIFT_REG : bit_vector(7 downto 0); +signal BITCNT : std_logic_vector(2 downto 0); +signal PARITY_I : bit; +begin + -- The default condition in this statement is to ensure + -- to cover all possibilities for example if there is a + -- one hot decoding of the state machine with wrong states + -- (e.g. not one of the given here). + TXDATA <= '1' when TR_STATE = IDLE else + '1' when TR_STATE = LOAD_SHFT else + '0' when TR_STATE = START else + SHIFT_REG(0) when TR_STATE = SHIFTOUT else + PARITY_I when TR_STATE = PARITY else + '1' when TR_STATE = STOP1 else + '1' when TR_STATE = STOP2 else '1'; + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(6 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CDS = "00" then -- divider off + if TXCLK = '0' and STRB_LOCK = false then -- Works on negative TXCLK edge. + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif TXCLK = '1' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + elsif TR_STATE = IDLE then + -- preset the CLKDIV with the start delays + if CDS = "01" then + CLK_DIVCNT := "0010000"; -- div by 16 mode + elsif CDS = "10" then + CLK_DIVCNT := "1000000"; -- div by 64 mode + end if; + CLK_STRB <= '0'; + else + -- Works on negative TXCLK edge: + if CLK_DIVCNT > "0000000" and TXCLK = '0' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_STRB <= '0'; + CLK_LOCK := true; + elsif CDS = "01" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "0010000"; -- Div by 16 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif CDS = "10" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "1000000"; -- Div by 64 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif TXCLK = '1' then + CLK_LOCK := false; + STRB_LOCK := false; + CLK_STRB <= '0'; + else + CLK_STRB <= '0'; + end if; + end if; + end process CLKDIV; + + DATAREG: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + DATA_REG <= x"00"; + elsif WS(2) = '0' and CS = "011" and RWn = '0' and RS = '1' and E = '1' then + DATA_REG <= '0' & DATA_IN(6 downto 0); -- 7 bit data mode. + elsif WS(2) = '1' and CS = "011" and RWn = '0' and RS = '1' and E = '1' then + DATA_REG <= DATA_IN; -- 8 bit data mode. + end if; + end if; + end process DATAREG; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + SHIFT_REG <= x"00"; + elsif TR_STATE = LOAD_SHFT and TDRE = '0' then + -- If during LOAD_SHIFT the transmitter data register + -- is empty (TDRE = '1') the shift register will not + -- be loaded. When additionally TC = "11", the break + -- character (zero data and no stop bits) is sent. + SHIFT_REG <= DATA_REG; + elsif TR_STATE = SHIFTOUT and CLK_STRB = '1' then + SHIFT_REG <= '0' & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_BITCNT: process + -- Counter for the data bits transmitted. + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = SHIFTOUT and CLK_STRB = '1' then + BITCNT <= BITCNT + '1'; + elsif TR_STATE /= SHIFTOUT then + BITCNT <= "000"; + end if; + end process P_BITCNT; + + P_TDRE: process(RESETn, CLK) + -- Transmit data register empty flag. + variable LOCK : boolean; + begin + if RESETn = '0' then + TDRE <= '1'; + LOCK := false; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + TDRE <= '1'; + elsif TR_NEXT_STATE = START and TR_STATE /= START then + -- Data has been loaded to shift register, thus data register is free again. + -- Thanks to Lyndon Amsdon for finding a bug here. The TDRE is set to one once + -- entering the state now. + TDRE <= '1'; + elsif CS = "011" and RWn = '0' and RS = '1' and E = '1' and LOCK = false then + LOCK := true; + elsif E = '0' and LOCK = true then + -- This construction clears TDRE after the falling edge of E + -- and after the transmit data register has been written to. + TDRE <= '0'; + LOCK := false; + end if; + end if; + end process P_TDRE; + + PARITY_GEN: process + variable PAR_TMP : bit; + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = START then -- Calculate the parity during the start phase. + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if WS = "000" or WS = "010" or WS = "110" then -- Even parity. + PARITY_I <= PAR_TMP; + elsif WS = "001" or WS = "011" or WS = "111" then -- Odd parity. + PARITY_I <= not PAR_TMP; + else -- No parity for WS = "100" and WS = "101". + PARITY_I <= '0'; + end if; + end if; + end process PARITY_GEN; + + TR_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + TR_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + TR_STATE <= IDLE; + else + TR_STATE <= TR_NEXT_STATE; + end if; + end if; + end process TR_STATEREG; + + TR_STATEDEC: process(TR_STATE, CLK_STRB, TC, BITCNT, WS, TDRE, CTSn) + begin + case TR_STATE is + when IDLE => + if TDRE = '1' and TC = "11" then + TR_NEXT_STATE <= LOAD_SHFT; + elsif TDRE = '0' and CTSn = '0' then -- Start if data register is not empty. + TR_NEXT_STATE <= LOAD_SHFT; + else + TR_NEXT_STATE <= IDLE; + end if; + when LOAD_SHFT => + TR_NEXT_STATE <= START; + when START => + if CLK_STRB = '1' then + TR_NEXT_STATE <= SHIFTOUT; + else + TR_NEXT_STATE <= START; + end if; + when SHIFTOUT => + if CLK_STRB = '1' then + if BITCNT < "110" and WS(2) = '0' then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 7 data bits. + elsif BITCNT < "111" and WS(2) = '1' then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 8 data bits. + elsif WS = "100" or WS = "101" then + if TDRE = '1' and TC = "11" then + -- Break condition, do not send a stop bit. + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP1; -- No parity check enabled. + end if; + else + TR_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + TR_NEXT_STATE <= SHIFTOUT; + end if; + when PARITY => + if CLK_STRB = '1' then + if TDRE = '1' and TC = "11" then + -- Break condition, do not send a stop bit. + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP1; -- No parity check enabled. + end if; + else + TR_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' and (WS = "000" or WS = "001" or WS = "100") then + TR_NEXT_STATE <= STOP2; -- Two stop bits selected. + elsif CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; -- One stop bits selected. + else + TR_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP2; + end if; + end case; + end process TR_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd.bak new file mode 100644 index 0000000..bcff094 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd.bak @@ -0,0 +1,339 @@ +---------------------------------------------------------------------- +---- ---- +---- 6850 compatible IP Core ---- +---- ---- +---- This file is part of the SUSKA ATARI clone project. ---- +---- http://www.experiment-s.de ---- +---- ---- +---- Description: ---- +---- UART 6850 compatible IP core ---- +---- ---- +---- 6850's transmitter unit. ---- +---- ---- +---- ---- +---- To Do: ---- +---- - ---- +---- ---- +---- Author(s): ---- +---- - Wolfgang Foerster, wf@experiment-s.de; wf@inventronik.de ---- +---- ---- +---------------------------------------------------------------------- +---- ---- +---- Copyright (C) 2006 - 2008 Wolfgang Foerster ---- +---- ---- +---- 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.gnu.org/licenses/lgpl.html ---- +---- ---- +---------------------------------------------------------------------- +-- +-- Revision History +-- +-- Revision 2K6A 2006/06/03 WF +-- Initial Release. +-- Revision 2K6B 2006/11/07 WF +-- Modified Source to compile with the Xilinx ISE. +-- Revision 2K8A 2008/07/14 WF +-- Minor changes. +-- Revision 2K8B 2008/11/01 WF +-- Fixed the T_DRE process concerning the TDRE <= '1' setting. +-- Thanks to Lyndon Amsdon finding the bug. +-- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity WF6850IP_TRANSMIT is + port ( + CLK : in bit; + RESETn : in bit; + MCLR : in bit; + + CS : in bit_vector(2 downto 0); + E : in bit; + RWn : in bit; + RS : in bit; + + DATA_IN : in bit_vector(7 downto 0); + + CTSn : in bit; + + TC : in bit_vector(1 downto 0); + WS : in bit_vector(2 downto 0); + CDS : in bit_vector(1 downto 0); + + TXCLK : in bit; + + TDRE : buffer bit; + TXDATA : out bit + ); +end entity WF6850IP_TRANSMIT; + +architecture BEHAVIOR of WF6850IP_TRANSMIT is +type TR_STATES is (IDLE, LOAD_SHFT, START, SHIFTOUT, PARITY, STOP1, STOP2); +signal TR_STATE, TR_NEXT_STATE : TR_STATES; +signal CLK_STRB : bit; +signal DATA_REG : bit_vector(7 downto 0); +signal SHIFT_REG : bit_vector(7 downto 0); +signal BITCNT : std_logic_vector(2 downto 0); +signal PARITY_I : bit; +begin + -- The default condition in this statement is to ensure + -- to cover all possibilities for example if there is a + -- one hot decoding of the state machine with wrong states + -- (e.g. not one of the given here). + TXDATA <= '1' when TR_STATE = IDLE else + '1' when TR_STATE = LOAD_SHFT else + '0' when TR_STATE = START else + SHIFT_REG(0) when TR_STATE = SHIFTOUT else + PARITY_I when TR_STATE = PARITY else + '1' when TR_STATE = STOP1 else + '1' when TR_STATE = STOP2 else '1'; + + CLKDIV: process + variable CLK_LOCK : boolean; + variable STRB_LOCK : boolean; + variable CLK_DIVCNT : std_logic_vector(6 downto 0); + begin + wait until CLK = '1' and CLK' event; + if CDS = "00" then -- divider off + if TXCLK = '0' and STRB_LOCK = false then -- Works on negative TXCLK edge. + CLK_STRB <= '1'; + STRB_LOCK := true; + elsif TXCLK = '1' then + CLK_STRB <= '0'; + STRB_LOCK := false; + else + CLK_STRB <= '0'; + end if; + elsif TR_STATE = IDLE then + -- preset the CLKDIV with the start delays + if CDS = "01" then + CLK_DIVCNT := "0010000"; -- div by 16 mode + elsif CDS = "10" then + CLK_DIVCNT := "1000000"; -- div by 64 mode + end if; + CLK_STRB <= '0'; + else + -- Works on negative TXCLK edge: + if CLK_DIVCNT > "0000000" and TXCLK = '0' and CLK_LOCK = false then + CLK_DIVCNT := CLK_DIVCNT - '1'; + CLK_STRB <= '0'; + CLK_LOCK := true; + elsif CDS = "01" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "0010000"; -- Div by 16 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif CDS = "10" and CLK_DIVCNT = "0000000" then + CLK_DIVCNT := "1000000"; -- Div by 64 mode. + if STRB_LOCK = false then + STRB_LOCK := true; + CLK_STRB <= '1'; + else + CLK_STRB <= '0'; + end if; + elsif TXCLK = '1' then + CLK_LOCK := false; + STRB_LOCK := false; + CLK_STRB <= '0'; + else + CLK_STRB <= '0'; + end if; + end if; + end process CLKDIV; + + DATAREG: process(RESETn, CLK) + begin + if RESETn = '0' then + DATA_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + DATA_REG <= x"00"; + elsif WS(2) = '0' and CS = "011" and RWn = '0' and RS = '1' and E = '1' then + DATA_REG <= '0' & DATA_IN(6 downto 0); -- 7 bit data mode. + elsif WS(2) = '1' and CS = "011" and RWn = '0' and RS = '1' and E = '1' then + DATA_REG <= DATA_IN; -- 8 bit data mode. + end if; + end if; + end process DATAREG; + + SHIFTREG: process(RESETn, CLK) + begin + if RESETn = '0' then + SHIFT_REG <= x"00"; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + SHIFT_REG <= x"00"; + elsif TR_STATE = LOAD_SHFT and TDRE = '0' then + -- If during LOAD_SHIFT the transmitter data register + -- is empty (TDRE = '1') the shift register will not + -- be loaded. When additionally TC = "11", the break + -- character (zero data and no stop bits) is sent. + SHIFT_REG <= DATA_REG; + elsif TR_STATE = SHIFTOUT and CLK_STRB = '1' then + SHIFT_REG <= '0' & SHIFT_REG(7 downto 1); -- Shift right. + end if; + end if; + end process SHIFTREG; + + P_BITCNT: process + -- Counter for the data bits transmitted. + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = SHIFTOUT and CLK_STRB = '1' then + BITCNT <= BITCNT + '1'; + elsif TR_STATE /= SHIFTOUT then + BITCNT <= "000"; + end if; + end process P_BITCNT; + + P_TDRE: process(RESETn, CLK) + -- Transmit data register empty flag. + variable LOCK : boolean; + begin + if RESETn = '0' then + TDRE <= '1'; + LOCK := false; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + TDRE <= '1'; + elsif TR_NEXT_STATE = START and TR_STATE /= START then + -- Data has been loaded to shift register, thus data register is free again. + -- Thanks to Lyndon Amsdon for finding a bug here. The TDRE is set to one once + -- entering the state now. + TDRE <= '1'; + elsif CS = "011" and RWn = '0' and RS = '1' and E = '1' and LOCK = false then + LOCK := true; + elsif E = '0' and LOCK = true and CS /= "011" then + -- This construction clears TDRE after the falling edge of E + -- and after the transmit data register has been written to. + TDRE <= '0'; + LOCK := false; + end if; + end if; + end process P_TDRE; + + PARITY_GEN: process + variable PAR_TMP : bit; + begin + wait until CLK = '1' and CLK' event; + if TR_STATE = START then -- Calculate the parity during the start phase. + for i in 1 to 7 loop + if i = 1 then + PAR_TMP := SHIFT_REG(i-1) xor SHIFT_REG(i); + else + PAR_TMP := PAR_TMP xor SHIFT_REG(i); + end if; + end loop; + if WS = "000" or WS = "010" or WS = "110" then -- Even parity. + PARITY_I <= PAR_TMP; + elsif WS = "001" or WS = "011" or WS = "111" then -- Odd parity. + PARITY_I <= not PAR_TMP; + else -- No parity for WS = "100" and WS = "101". + PARITY_I <= '0'; + end if; + end if; + end process PARITY_GEN; + + TR_STATEREG: process(RESETn, CLK) + begin + if RESETn = '0' then + TR_STATE <= IDLE; + elsif CLK = '1' and CLK' event then + if MCLR = '1' then + TR_STATE <= IDLE; + else + TR_STATE <= TR_NEXT_STATE; + end if; + end if; + end process TR_STATEREG; + + TR_STATEDEC: process(TR_STATE, CLK_STRB, TC, BITCNT, WS, TDRE, CTSn) + begin + case TR_STATE is + when IDLE => + if TDRE = '1' and TC = "11" then + TR_NEXT_STATE <= LOAD_SHFT; + elsif TDRE = '0' and CTSn = '0' then -- Start if data register is not empty. + TR_NEXT_STATE <= LOAD_SHFT; + else + TR_NEXT_STATE <= IDLE; + end if; + when LOAD_SHFT => + TR_NEXT_STATE <= START; + when START => + if CLK_STRB = '1' then + TR_NEXT_STATE <= SHIFTOUT; + else + TR_NEXT_STATE <= START; + end if; + when SHIFTOUT => + if CLK_STRB = '1' then + if BITCNT < "110" and WS(2) = '0' then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 7 data bits. + elsif BITCNT < "111" and WS(2) = '1' then + TR_NEXT_STATE <= SHIFTOUT; -- Transmit 8 data bits. + elsif WS = "100" or WS = "101" then + if TDRE = '1' and TC = "11" then + -- Break condition, do not send a stop bit. + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP1; -- No parity check enabled. + end if; + else + TR_NEXT_STATE <= PARITY; -- Parity enabled. + end if; + else + TR_NEXT_STATE <= SHIFTOUT; + end if; + when PARITY => + if CLK_STRB = '1' then + if TDRE = '1' and TC = "11" then + -- Break condition, do not send a stop bit. + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP1; -- No parity check enabled. + end if; + else + TR_NEXT_STATE <= PARITY; + end if; + when STOP1 => + if CLK_STRB = '1' and (WS = "000" or WS = "001" or WS = "100") then + TR_NEXT_STATE <= STOP2; -- Two stop bits selected. + elsif CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; -- One stop bits selected. + else + TR_NEXT_STATE <= STOP1; + end if; + when STOP2 => + if CLK_STRB = '1' then + TR_NEXT_STATE <= IDLE; + else + TR_NEXT_STATE <= STOP2; + end if; + end case; + end process TR_STATEDEC; +end architecture BEHAVIOR; + diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.bsf b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.bsf new file mode 100644 index 0000000..f4d66a5 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.bsf @@ -0,0 +1,95 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2009 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 168) + (text "dcfifo0" (rect 62 1 105 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 152 25 164)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[7..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect 20 26 65 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 45 63)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "wrclk" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "wrclk" (rect 26 66 48 79)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "rdreq" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 98 44 111)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "rdclk" (rect 0 0 27 14)(font "Arial" (font_size 8))) + (text "rdclk" (rect 26 114 47 127)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "aclr" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 138 37 151)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 16 144)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "wrusedw[9..0]" (rect 0 0 84 14)(font "Arial" (font_size 8))) + (text "wrusedw[9..0]" (rect 69 66 132 79)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 160 96) + (output) + (text "q[31..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 105 90 141 103)(font "Arial" (font_size 8))) + (line (pt 160 96)(pt 144 96)(line_width 3)) + ) + (drawing + (text "8 bits x 1024 words" (rect 63 140 144 152)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 152)(line_width 1)) + (line (pt 144 152)(pt 16 152)(line_width 1)) + (line (pt 16 152)(pt 16 16)(line_width 1)) + (line (pt 16 84)(pt 144 84)(line_width 1)) + (line (pt 16 132)(pt 144 132)(line_width 1)) + (line (pt 16 66)(pt 22 72)(line_width 1)) + (line (pt 22 72)(pt 16 78)(line_width 1)) + (line (pt 16 114)(pt 22 120)(line_width 1)) + (line (pt 22 120)(pt 16 126)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.cmp b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.cmp new file mode 100644 index 0000000..1f8ad52 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.cmp @@ -0,0 +1,28 @@ +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +component dcfifo0 + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); +end component; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.qip b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.qip new file mode 100644 index 0000000..a22ffe4 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FIFO+" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "dcfifo0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dcfifo0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dcfifo0.cmp"] diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd new file mode 100644 index 0000000..9db22fa --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd @@ -0,0 +1,202 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: dcfifo_mixed_widths + +-- ============================================================ +-- File Name: dcfifo0.vhd +-- Megafunction Name(s): +-- dcfifo_mixed_widths +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY dcfifo0 IS + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); +END dcfifo0; + + +ARCHITECTURE SYN OF dcfifo0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (9 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT dcfifo_mixed_widths + GENERIC ( + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + lpm_widthu_r : NATURAL; + lpm_width_r : NATURAL; + overflow_checking : STRING; + rdsync_delaypipe : NATURAL; + underflow_checking : STRING; + use_eab : STRING; + write_aclr_synch : STRING; + wrsync_delaypipe : NATURAL + ); + PORT ( + wrclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0); + aclr : IN STD_LOGIC ; + rdclk : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + wrusedw <= sub_wire0(9 DOWNTO 0); + q <= sub_wire1(31 DOWNTO 0); + + dcfifo_mixed_widths_component : dcfifo_mixed_widths + GENERIC MAP ( + intended_device_family => "Cyclone III", + lpm_numwords => 1024, + lpm_showahead => "OFF", + lpm_type => "dcfifo", + lpm_width => 8, + lpm_widthu => 10, + lpm_widthu_r => 8, + lpm_width_r => 32, + overflow_checking => "ON", + rdsync_delaypipe => 5, + underflow_checking => "ON", + use_eab => "ON", + write_aclr_synch => "OFF", + wrsync_delaypipe => 5 + ) + PORT MAP ( + wrclk => wrclk, + rdreq => rdreq, + aclr => aclr, + rdclk => rdclk, + wrreq => wrreq, + data => data, + wrusedw => sub_wire0, + q => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "4" +-- Retrieval info: PRIVATE: Depth NUMERIC "1024" +-- Retrieval info: PRIVATE: Empty NUMERIC "1" +-- Retrieval info: PRIVATE: Full NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: Optimize NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: UsedW NUMERIC "1" +-- Retrieval info: PRIVATE: Width NUMERIC "8" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "1" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "32" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "0" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "1024" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "10" +-- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "32" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF" +-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] +-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: USED_PORT: wrusedw 0 0 10 0 OUTPUT NODEFVAL wrusedw[9..0] +-- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 +-- Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +-- Retrieval info: CONNECT: wrusedw 0 0 10 0 @wrusedw 0 0 10 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_waveforms.html FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak new file mode 100644 index 0000000..c3ca670 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo0.vhd.bak @@ -0,0 +1,202 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: dcfifo_mixed_widths + +-- ============================================================ +-- File Name: dcfifo0.vhd +-- Megafunction Name(s): +-- dcfifo_mixed_widths +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY dcfifo0 IS + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); +END dcfifo0; + + +ARCHITECTURE SYN OF dcfifo0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (15 DOWNTO 0); + + + + COMPONENT dcfifo_mixed_widths + GENERIC ( + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + lpm_widthu_r : NATURAL; + lpm_width_r : NATURAL; + overflow_checking : STRING; + rdsync_delaypipe : NATURAL; + underflow_checking : STRING; + use_eab : STRING; + write_aclr_synch : STRING; + wrsync_delaypipe : NATURAL + ); + PORT ( + wrclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + aclr : IN STD_LOGIC ; + rdclk : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + wrusedw <= sub_wire0(4 DOWNTO 0); + q <= sub_wire1(15 DOWNTO 0); + + dcfifo_mixed_widths_component : dcfifo_mixed_widths + GENERIC MAP ( + intended_device_family => "Cyclone III", + lpm_numwords => 32, + lpm_showahead => "OFF", + lpm_type => "dcfifo", + lpm_width => 8, + lpm_widthu => 5, + lpm_widthu_r => 4, + lpm_width_r => 16, + overflow_checking => "ON", + rdsync_delaypipe => 5, + underflow_checking => "ON", + use_eab => "ON", + write_aclr_synch => "OFF", + wrsync_delaypipe => 5 + ) + PORT MAP ( + wrclk => wrclk, + rdreq => rdreq, + aclr => aclr, + rdclk => rdclk, + wrreq => wrreq, + data => data, + wrusedw => sub_wire0, + q => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "4" +-- Retrieval info: PRIVATE: Depth NUMERIC "32" +-- Retrieval info: PRIVATE: Empty NUMERIC "1" +-- Retrieval info: PRIVATE: Full NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: Optimize NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: UsedW NUMERIC "1" +-- Retrieval info: PRIVATE: Width NUMERIC "8" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "1" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "16" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "0" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "16" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF" +-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] +-- Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: USED_PORT: wrusedw 0 0 5 0 OUTPUT NODEFVAL wrusedw[4..0] +-- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 +-- Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +-- Retrieval info: CONNECT: wrusedw 0 0 5 0 @wrusedw 0 0 5 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0.bsf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_waveforms.html FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.bsf b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.bsf new file mode 100644 index 0000000..7a4a386 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.bsf @@ -0,0 +1,95 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2009 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 168) + (text "dcfifo1" (rect 62 1 105 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 152 25 164)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 45 63)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "wrclk" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "wrclk" (rect 26 66 48 79)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "rdreq" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 98 44 111)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "rdclk" (rect 0 0 27 14)(font "Arial" (font_size 8))) + (text "rdclk" (rect 26 114 47 127)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "aclr" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 138 37 151)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 16 144)(line_width 1)) + ) + (port + (pt 160 96) + (output) + (text "q[7..0]" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "q[7..0]" (rect 111 90 141 103)(font "Arial" (font_size 8))) + (line (pt 160 96)(pt 144 96)(line_width 3)) + ) + (port + (pt 160 120) + (output) + (text "rdusedw[9..0]" (rect 0 0 80 14)(font "Arial" (font_size 8))) + (text "rdusedw[9..0]" (rect 73 114 135 127)(font "Arial" (font_size 8))) + (line (pt 160 120)(pt 144 120)(line_width 3)) + ) + (drawing + (text "32 bits x 256 words" (rect 63 140 144 152)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 152)(line_width 1)) + (line (pt 144 152)(pt 16 152)(line_width 1)) + (line (pt 16 152)(pt 16 16)(line_width 1)) + (line (pt 16 84)(pt 144 84)(line_width 1)) + (line (pt 16 132)(pt 144 132)(line_width 1)) + (line (pt 16 66)(pt 22 72)(line_width 1)) + (line (pt 22 72)(pt 16 78)(line_width 1)) + (line (pt 16 114)(pt 22 120)(line_width 1)) + (line (pt 22 120)(pt 16 126)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.cmp b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.cmp new file mode 100644 index 0000000..a1b8d55 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.cmp @@ -0,0 +1,28 @@ +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +component dcfifo1 + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + rdusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); +end component; diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.qip b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.qip new file mode 100644 index 0000000..bf1428c --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FIFO+" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "dcfifo1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dcfifo1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "dcfifo1.cmp"] diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd new file mode 100644 index 0000000..d05dd0a --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd @@ -0,0 +1,202 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: dcfifo_mixed_widths + +-- ============================================================ +-- File Name: dcfifo1.vhd +-- Megafunction Name(s): +-- dcfifo_mixed_widths +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY dcfifo1 IS + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + rdusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); +END dcfifo1; + + +ARCHITECTURE SYN OF dcfifo1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (9 DOWNTO 0); + + + + COMPONENT dcfifo_mixed_widths + GENERIC ( + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + lpm_widthu_r : NATURAL; + lpm_width_r : NATURAL; + overflow_checking : STRING; + rdsync_delaypipe : NATURAL; + underflow_checking : STRING; + use_eab : STRING; + write_aclr_synch : STRING; + wrsync_delaypipe : NATURAL + ); + PORT ( + wrclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + aclr : IN STD_LOGIC ; + rdclk : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + rdusedw : OUT STD_LOGIC_VECTOR (9 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(7 DOWNTO 0); + rdusedw <= sub_wire1(9 DOWNTO 0); + + dcfifo_mixed_widths_component : dcfifo_mixed_widths + GENERIC MAP ( + intended_device_family => "Cyclone III", + lpm_numwords => 256, + lpm_showahead => "OFF", + lpm_type => "dcfifo", + lpm_width => 32, + lpm_widthu => 8, + lpm_widthu_r => 10, + lpm_width_r => 8, + overflow_checking => "ON", + rdsync_delaypipe => 5, + underflow_checking => "ON", + use_eab => "ON", + write_aclr_synch => "OFF", + wrsync_delaypipe => 5 + ) + PORT MAP ( + wrclk => wrclk, + rdreq => rdreq, + aclr => aclr, + rdclk => rdclk, + wrreq => wrreq, + data => data, + q => sub_wire0, + rdusedw => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "4" +-- Retrieval info: PRIVATE: Depth NUMERIC "256" +-- Retrieval info: PRIVATE: Empty NUMERIC "1" +-- Retrieval info: PRIVATE: Full NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: Optimize NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: UsedW NUMERIC "1" +-- Retrieval info: PRIVATE: Width NUMERIC "32" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "1" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "8" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "1" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "0" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "0" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "256" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "10" +-- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "8" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF" +-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL q[7..0] +-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: rdusedw 0 0 10 0 OUTPUT NODEFVAL rdusedw[9..0] +-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +-- Retrieval info: CONNECT: rdusedw 0 0 10 0 @rdusedw 0 0 10 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_waveforms.html FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak new file mode 100644 index 0000000..e7c6ae6 --- /dev/null +++ b/FPGA_quartus_GE/FalconIO_SDCard_IDE_CF/dcfifo1.vhd.bak @@ -0,0 +1,202 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: dcfifo_mixed_widths + +-- ============================================================ +-- File Name: dcfifo1.vhd +-- Megafunction Name(s): +-- dcfifo_mixed_widths +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY dcfifo1 IS + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) + ); +END dcfifo1; + + +ARCHITECTURE SYN OF dcfifo1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0); + + + + COMPONENT dcfifo_mixed_widths + GENERIC ( + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + lpm_widthu_r : NATURAL; + lpm_width_r : NATURAL; + overflow_checking : STRING; + rdsync_delaypipe : NATURAL; + underflow_checking : STRING; + use_eab : STRING; + write_aclr_synch : STRING; + wrsync_delaypipe : NATURAL + ); + PORT ( + wrclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + aclr : IN STD_LOGIC ; + rdclk : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + wrusedw <= sub_wire0(3 DOWNTO 0); + q <= sub_wire1(7 DOWNTO 0); + + dcfifo_mixed_widths_component : dcfifo_mixed_widths + GENERIC MAP ( + intended_device_family => "Cyclone III", + lpm_numwords => 16, + lpm_showahead => "OFF", + lpm_type => "dcfifo", + lpm_width => 16, + lpm_widthu => 4, + lpm_widthu_r => 5, + lpm_width_r => 8, + overflow_checking => "ON", + rdsync_delaypipe => 5, + underflow_checking => "ON", + use_eab => "ON", + write_aclr_synch => "OFF", + wrsync_delaypipe => 5 + ) + PORT MAP ( + wrclk => wrclk, + rdreq => rdreq, + aclr => aclr, + rdclk => rdclk, + wrreq => wrreq, + data => data, + wrusedw => sub_wire0, + q => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "4" +-- Retrieval info: PRIVATE: Depth NUMERIC "16" +-- Retrieval info: PRIVATE: Empty NUMERIC "1" +-- Retrieval info: PRIVATE: Full NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: Optimize NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "0" +-- Retrieval info: PRIVATE: UsedW NUMERIC "1" +-- Retrieval info: PRIVATE: Width NUMERIC "16" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "1" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "8" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "0" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_WIDTHU_R NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_WIDTH_R NUMERIC "8" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "ON" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "OFF" +-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "5" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +-- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL q[7..0] +-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: USED_PORT: wrusedw 0 0 4 0 OUTPUT NODEFVAL wrusedw[3..0] +-- Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +-- Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +-- Retrieval info: CONNECT: wrusedw 0 0 4 0 @wrusedw 0 0 4 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1.bsf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_waveforms.html FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL dcfifo1_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.tdf b/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.tdf new file mode 100644 index 0000000..a455469 --- /dev/null +++ b/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.tdf @@ -0,0 +1,478 @@ +TITLE "INTERRUPT HANDLER UND C1287"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_LONG.inc"; +INCLUDE "lpm_bustri_BYT.inc"; + + +-- Parameters Statement (optional) + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + + +-- Subdesign Section + +SUBDESIGN interrupt_handler +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + MAIN_CLK : INPUT; + nFB_WR : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + FB_ADR[31..0] : INPUT; + PIC_INT : INPUT; + E0_INT : INPUT; + DVI_INT : INPUT; + nPCI_INTA : INPUT; + nPCI_INTB : INPUT; + nPCI_INTC : INPUT; + nPCI_INTD : INPUT; + nMFP_INT : INPUT; + nFB_OE : INPUT; + DSP_INT : INPUT; + VSYNC : INPUT; + HSYNC : INPUT; + DMA_DRQ : INPUT; + nIRQ[7..2] : OUTPUT; + INT_HANDLER_TA : OUTPUT; + ACP_CONF[31..0] : OUTPUT; + TIN0 : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_B[3..0] :NODE; + INT_CTR[31..0] :DFFE; + INT_CTR_CS :NODE; + INT_LATCH[31..0] :DFF; + INT_LATCH_CS :NODE; + INT_CLEAR[31..0] :DFF; + INT_CLEAR_CS :NODE; + INT_IN[31..0] :NODE; + INT_ENA[31..0] :DFFE; + INT_ENA_CS :NODE; + ACP_CONF[31..0] :DFFE; + ACP_CONF_CS :NODE; + PSEUDO_BUS_ERROR :NODE; + UHR_AS :NODE; + UHR_DS :NODE; + RTC_ADR[5..0] :DFFE; + ACHTELSEKUNDEN[2..0] :DFFE; + WERTE[7..0][63..0] :DFFE; -- WERTE REGISTER 0-63 + PIC_INT_SYNC[2..0] :DFF; + INC_SEC :NODE; + INC_MIN :NODE; + INC_STD :NODE; + INC_TAG :NODE; + ANZAHL_TAGE_DES_MONATS[7..0]:NODE; + WINTERZEIT :NODE; + SOMMERZEIT :NODE; + INC_MONAT :NODE; + INC_JAHR :NODE; + UPDATE_ON :NODE; + +BEGIN +-- BYT SELECT + FB_B0 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD + # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & !FB_ADR0 -- HHBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B1 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD + # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & FB_ADR0 -- HLBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD + # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & !FB_ADR0 -- LHBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD + # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & FB_ADR0 -- LLBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + +-- INTERRUPT CONTROL REGISTER: BIT0=INT5 AUSLÖSEN, 1=INT7 AUSLÖSEN + INT_CTR[].CLK = MAIN_CLK; + INT_CTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4000"; -- $10000/4 + INT_CTR[] = FB_AD[]; + INT_CTR[31..24].ENA = INT_CTR_CS & FB_B0 & !nFB_WR; + INT_CTR[23..16].ENA = INT_CTR_CS & FB_B1 & !nFB_WR; + INT_CTR[15..8].ENA = INT_CTR_CS & FB_B2 & !nFB_WR; + INT_CTR[7..0].ENA = INT_CTR_CS & FB_B3 & !nFB_WR; +-- INTERRUPT ENABLE REGISTER BIT31=INT7,30=INT6,29=INT5,28=INT4,27=INT3,26=INT2 + INT_ENA[].CLK = MAIN_CLK; + INT_ENA_CS = !nFB_CS2 & FB_ADR[27..2]==H"4001"; -- $10004/4 + INT_ENA[] = FB_AD[]; + INT_ENA[31..24].ENA = INT_ENA_CS & FB_B0 & !nFB_WR; + INT_ENA[23..16].ENA = INT_ENA_CS & FB_B1 & !nFB_WR; + INT_ENA[15..8].ENA = INT_ENA_CS & FB_B2 & !nFB_WR; + INT_ENA[7..0].ENA = INT_ENA_CS & FB_B3 & !nFB_WR; +-- INTERRUPT CLEAR REGISTER WRITE ONLY 1=INTERRUPT CLEAR + INT_CLEAR[].CLK = MAIN_CLK; + INT_CLEAR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4002"; -- $10008/4 + INT_CLEAR[31..24] = FB_AD[31..24] & INT_CLEAR_CS & FB_B0 & !nFB_WR; + INT_CLEAR[23..16] = FB_AD[23..16] & INT_CLEAR_CS & FB_B1 & !nFB_WR; + INT_CLEAR[15..8] = FB_AD[15..8] & INT_CLEAR_CS & FB_B2 & !nFB_WR; + INT_CLEAR[7..0] = FB_AD[7..0] & INT_CLEAR_CS & FB_B3 & !nFB_WR; +-- INTERRUPT LATCH REGISTER READ ONLY + INT_LATCH_CS = !nFB_CS2 & FB_ADR[27..2]==H"4003"; -- $1000C/4 +-- INTERRUPT + !nIRQ2 = HSYNC & INT_ENA[26]; + !nIRQ3 = INT_CTR0 & INT_ENA[27]; + !nIRQ4 = VSYNC & INT_ENA[28]; + nIRQ5 = INT_LATCH[]==H"00000000" & INT_ENA[29]; + !nIRQ6 = !nMFP_INT & INT_ENA[30]; + !nIRQ7 = PSEUDO_BUS_ERROR & INT_ENA[31]; + +PSEUDO_BUS_ERROR = !nFB_CS1 & (FB_ADR[19..4]==H"F8C8" -- SCC + # FB_ADR[19..4]==H"F8E0" -- VME + # FB_ADR[19..4]==H"F920" -- PADDLE + # FB_ADR[19..4]==H"F921" -- PADDLE + # FB_ADR[19..4]==H"F922" -- PADDLE + # FB_ADR[19..4]==H"FFA8" -- MFP2 + # FB_ADR[19..4]==H"FFA9" -- MFP2 + # FB_ADR[19..4]==H"FFAA" -- MFP2 + # FB_ADR[19..4]==H"FFA8" -- MFP2 + # FB_ADR[19..8]==H"F87" -- TT SCSI + # FB_ADR[19..4]==H"FFC2" -- ST UHR + # FB_ADR[19..4]==H"FFC3" -- ST UHR + # FB_ADR[19..4]==H"F890" -- DMA SOUND + # FB_ADR[19..4]==H"F891" -- DMA SOUND + # FB_ADR[19..4]==H"F892"); -- DMA SOUND +-- IF VIDEO ADR CHANGE +TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR HIGH 0xFFFF8201/2 + +-- INTERRUPT LATCH + INT_LATCH[] = H"FFFFFFFF"; + INT_LATCH0.CLK = PIC_INT & INT_ENA[0]; + INT_LATCH1.CLK = E0_INT & INT_ENA[1]; + INT_LATCH2.CLK = DVI_INT & INT_ENA[2]; + INT_LATCH3.CLK = !nPCI_INTA & INT_ENA[3]; + INT_LATCH4.CLK = !nPCI_INTB & INT_ENA[4]; + INT_LATCH5.CLK = !nPCI_INTC & INT_ENA[5]; + INT_LATCH6.CLK = !nPCI_INTD & INT_ENA[6]; + INT_LATCH7.CLK = DSP_INT & INT_ENA[7]; + INT_LATCH8.CLK = VSYNC & INT_ENA[8]; + INT_LATCH9.CLK = HSYNC & INT_ENA[9]; + +-- INTERRUPT CLEAR + INT_LATCH[].CLRN = !INT_CLEAR[]; + +-- INT_IN + INT_IN0 = PIC_INT; + INT_IN1 = E0_INT; + INT_IN2 = DVI_INT; + INT_IN3 = !nPCI_INTA; + INT_IN4 = !nPCI_INTB; + INT_IN5 = !nPCI_INTC; + INT_IN6 = !nPCI_INTD; + INT_IN7 = DSP_INT; + INT_IN8 = VSYNC; + INT_IN9 = HSYNC; + INT_IN[25..10] = H"0"; + INT_IN26 = HSYNC; + INT_IN27 = INT_CTR0; + INT_IN28 = VSYNC; + INT_IN29 = INT_LATCH[]!=H"00000000"; + INT_IN30 = !nMFP_INT; + INT_IN31 = DMA_DRQ; +--*************************************************************************************** +-- ACP CONFIG REGISTER: BIT 31-> 0=CF 1=IDE + ACP_CONF[].CLK = MAIN_CLK; + ACP_CONF_CS = !nFB_CS2 & FB_ADR[27..2]==H"10000"; -- $4'0000/4 + ACP_CONF[] = FB_AD[]; + ACP_CONF[31..24].ENA = ACP_CONF_CS & FB_B0 & !nFB_WR; + ACP_CONF[23..16].ENA = ACP_CONF_CS & FB_B1 & !nFB_WR; + ACP_CONF[15..8].ENA = ACP_CONF_CS & FB_B2 & !nFB_WR; + ACP_CONF[7..0].ENA = ACP_CONF_CS & FB_B3 & !nFB_WR; +--*************************************************************************************** + +-------------------------------------------------------------- +-- C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR +---------------------------------------------------------- + RTC_ADR[].CLK = MAIN_CLK; + RTC_ADR[] = FB_AD[21..16]; + UHR_AS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B0" & FB_B1; -- FFFF8961 + UHR_DS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B1" & FB_B3; -- FFFF8963 + RTC_ADR[].ENA = UHR_AS & !nFB_WR; + WERTE[][].CLK = MAIN_CLK; + WERTE[7..0][0] = FB_AD[23..16] & RTC_ADR[]==0 & UHR_DS & !nFB_WR; + WERTE[7..0][1] = FB_AD[23..16]; + WERTE[7..0][2] = FB_AD[23..16] & RTC_ADR[]==2 & UHR_DS & !nFB_WR; + WERTE[7..0][3] = FB_AD[23..16]; + WERTE[7..0][4] = FB_AD[23..16] & RTC_ADR[]==4 & UHR_DS & !nFB_WR; + WERTE[7..0][5] = FB_AD[23..16]; + WERTE[7..0][6] = FB_AD[23..16] & RTC_ADR[]==6 & UHR_DS & !nFB_WR; + WERTE[7..0][7] = FB_AD[23..16] & RTC_ADR[]==7 & UHR_DS & !nFB_WR; + WERTE[7..0][8] = FB_AD[23..16] & RTC_ADR[]==8 & UHR_DS & !nFB_WR; + WERTE[7..0][9] = FB_AD[23..16] & RTC_ADR[]==9 & UHR_DS & !nFB_WR; + WERTE[7..0][10] = FB_AD[23..16]; + WERTE[7..0][11] = FB_AD[23..16]; + WERTE[7..0][12] = FB_AD[23..16]; + WERTE[7..0][13] = FB_AD[23..16]; + WERTE[7..0][14] = FB_AD[23..16]; + WERTE[7..0][15] = FB_AD[23..16]; + WERTE[7..0][16] = FB_AD[23..16]; + WERTE[7..0][17] = FB_AD[23..16]; + WERTE[7..0][18] = FB_AD[23..16]; + WERTE[7..0][19] = FB_AD[23..16]; + WERTE[7..0][20] = FB_AD[23..16]; + WERTE[7..0][21] = FB_AD[23..16]; + WERTE[7..0][22] = FB_AD[23..16]; + WERTE[7..0][23] = FB_AD[23..16]; + WERTE[7..0][24] = FB_AD[23..16]; + WERTE[7..0][25] = FB_AD[23..16]; + WERTE[7..0][26] = FB_AD[23..16]; + WERTE[7..0][27] = FB_AD[23..16]; + WERTE[7..0][28] = FB_AD[23..16]; + WERTE[7..0][29] = FB_AD[23..16]; + WERTE[7..0][30] = FB_AD[23..16]; + WERTE[7..0][31] = FB_AD[23..16]; + WERTE[7..0][32] = FB_AD[23..16]; + WERTE[7..0][33] = FB_AD[23..16]; + WERTE[7..0][34] = FB_AD[23..16]; + WERTE[7..0][35] = FB_AD[23..16]; + WERTE[7..0][36] = FB_AD[23..16]; + WERTE[7..0][37] = FB_AD[23..16]; + WERTE[7..0][38] = FB_AD[23..16]; + WERTE[7..0][39] = FB_AD[23..16]; + WERTE[7..0][40] = FB_AD[23..16]; + WERTE[7..0][41] = FB_AD[23..16]; + WERTE[7..0][42] = FB_AD[23..16]; + WERTE[7..0][43] = FB_AD[23..16]; + WERTE[7..0][44] = FB_AD[23..16]; + WERTE[7..0][45] = FB_AD[23..16]; + WERTE[7..0][46] = FB_AD[23..16]; + WERTE[7..0][47] = FB_AD[23..16]; + WERTE[7..0][48] = FB_AD[23..16]; + WERTE[7..0][49] = FB_AD[23..16]; + WERTE[7..0][50] = FB_AD[23..16]; + WERTE[7..0][51] = FB_AD[23..16]; + WERTE[7..0][52] = FB_AD[23..16]; + WERTE[7..0][53] = FB_AD[23..16]; + WERTE[7..0][54] = FB_AD[23..16]; + WERTE[7..0][55] = FB_AD[23..16]; + WERTE[7..0][56] = FB_AD[23..16]; + WERTE[7..0][57] = FB_AD[23..16]; + WERTE[7..0][58] = FB_AD[23..16]; + WERTE[7..0][59] = FB_AD[23..16]; + WERTE[7..0][60] = FB_AD[23..16]; + WERTE[7..0][61] = FB_AD[23..16]; + WERTE[7..0][62] = FB_AD[23..16]; + WERTE[7..0][63] = FB_AD[23..16]; + WERTE[][0].ENA = RTC_ADR[]==0 & UHR_DS & !nFB_WR; + WERTE[][1].ENA = RTC_ADR[]==1 & UHR_DS & !nFB_WR; + WERTE[][2].ENA = RTC_ADR[]==2 & UHR_DS & !nFB_WR; + WERTE[][3].ENA = RTC_ADR[]==3 & UHR_DS & !nFB_WR; + WERTE[][4].ENA = RTC_ADR[]==4 & UHR_DS & !nFB_WR; + WERTE[][5].ENA = RTC_ADR[]==5 & UHR_DS & !nFB_WR; + WERTE[][6].ENA = RTC_ADR[]==6 & UHR_DS & !nFB_WR; + WERTE[][7].ENA = RTC_ADR[]==7 & UHR_DS & !nFB_WR; + WERTE[][8].ENA = RTC_ADR[]==8 & UHR_DS & !nFB_WR; + WERTE[][9].ENA = RTC_ADR[]==9 & UHR_DS & !nFB_WR; + WERTE[][10].ENA = RTC_ADR[]==10 & UHR_DS & !nFB_WR; + WERTE[][11].ENA = RTC_ADR[]==11 & UHR_DS & !nFB_WR; + WERTE[][12].ENA = RTC_ADR[]==12 & UHR_DS & !nFB_WR; + WERTE[][13].ENA = RTC_ADR[]==13 & UHR_DS & !nFB_WR; + WERTE[][14].ENA = RTC_ADR[]==14 & UHR_DS & !nFB_WR; + WERTE[][15].ENA = RTC_ADR[]==15 & UHR_DS & !nFB_WR; + WERTE[][16].ENA = RTC_ADR[]==16 & UHR_DS & !nFB_WR; + WERTE[][17].ENA = RTC_ADR[]==17 & UHR_DS & !nFB_WR; + WERTE[][18].ENA = RTC_ADR[]==18 & UHR_DS & !nFB_WR; + WERTE[][19].ENA = RTC_ADR[]==19 & UHR_DS & !nFB_WR; + WERTE[][20].ENA = RTC_ADR[]==20 & UHR_DS & !nFB_WR; + WERTE[][21].ENA = RTC_ADR[]==21 & UHR_DS & !nFB_WR; + WERTE[][22].ENA = RTC_ADR[]==22 & UHR_DS & !nFB_WR; + WERTE[][23].ENA = RTC_ADR[]==23 & UHR_DS & !nFB_WR; + WERTE[][24].ENA = RTC_ADR[]==24 & UHR_DS & !nFB_WR; + WERTE[][25].ENA = RTC_ADR[]==25 & UHR_DS & !nFB_WR; + WERTE[][26].ENA = RTC_ADR[]==26 & UHR_DS & !nFB_WR; + WERTE[][27].ENA = RTC_ADR[]==27 & UHR_DS & !nFB_WR; + WERTE[][28].ENA = RTC_ADR[]==28 & UHR_DS & !nFB_WR; + WERTE[][29].ENA = RTC_ADR[]==29 & UHR_DS & !nFB_WR; + WERTE[][30].ENA = RTC_ADR[]==30 & UHR_DS & !nFB_WR; + WERTE[][31].ENA = RTC_ADR[]==31 & UHR_DS & !nFB_WR; + WERTE[][32].ENA = RTC_ADR[]==32 & UHR_DS & !nFB_WR; + WERTE[][33].ENA = RTC_ADR[]==33 & UHR_DS & !nFB_WR; + WERTE[][34].ENA = RTC_ADR[]==34 & UHR_DS & !nFB_WR; + WERTE[][35].ENA = RTC_ADR[]==35 & UHR_DS & !nFB_WR; + WERTE[][36].ENA = RTC_ADR[]==36 & UHR_DS & !nFB_WR; + WERTE[][37].ENA = RTC_ADR[]==37 & UHR_DS & !nFB_WR; + WERTE[][38].ENA = RTC_ADR[]==38 & UHR_DS & !nFB_WR; + WERTE[][39].ENA = RTC_ADR[]==39 & UHR_DS & !nFB_WR; + WERTE[][40].ENA = RTC_ADR[]==40 & UHR_DS & !nFB_WR; + WERTE[][41].ENA = RTC_ADR[]==41 & UHR_DS & !nFB_WR; + WERTE[][42].ENA = RTC_ADR[]==42 & UHR_DS & !nFB_WR; + WERTE[][43].ENA = RTC_ADR[]==43 & UHR_DS & !nFB_WR; + WERTE[][44].ENA = RTC_ADR[]==44 & UHR_DS & !nFB_WR; + WERTE[][45].ENA = RTC_ADR[]==45 & UHR_DS & !nFB_WR; + WERTE[][46].ENA = RTC_ADR[]==46 & UHR_DS & !nFB_WR; + WERTE[][47].ENA = RTC_ADR[]==47 & UHR_DS & !nFB_WR; + WERTE[][48].ENA = RTC_ADR[]==48 & UHR_DS & !nFB_WR; + WERTE[][49].ENA = RTC_ADR[]==49 & UHR_DS & !nFB_WR; + WERTE[][50].ENA = RTC_ADR[]==50 & UHR_DS & !nFB_WR; + WERTE[][51].ENA = RTC_ADR[]==51 & UHR_DS & !nFB_WR; + WERTE[][52].ENA = RTC_ADR[]==52 & UHR_DS & !nFB_WR; + WERTE[][53].ENA = RTC_ADR[]==53 & UHR_DS & !nFB_WR; + WERTE[][54].ENA = RTC_ADR[]==54 & UHR_DS & !nFB_WR; + WERTE[][55].ENA = RTC_ADR[]==55 & UHR_DS & !nFB_WR; + WERTE[][56].ENA = RTC_ADR[]==56 & UHR_DS & !nFB_WR; + WERTE[][57].ENA = RTC_ADR[]==57 & UHR_DS & !nFB_WR; + WERTE[][58].ENA = RTC_ADR[]==58 & UHR_DS & !nFB_WR; + WERTE[][59].ENA = RTC_ADR[]==59 & UHR_DS & !nFB_WR; + WERTE[][60].ENA = RTC_ADR[]==60 & UHR_DS & !nFB_WR; + WERTE[][61].ENA = RTC_ADR[]==61 & UHR_DS & !nFB_WR; + WERTE[][62].ENA = RTC_ADR[]==62 & UHR_DS & !nFB_WR; + WERTE[][63].ENA = RTC_ADR[]==63 & UHR_DS & !nFB_WR; + PIC_INT_SYNC[].CLK = MAIN_CLK; PIC_INT_SYNC[0] = PIC_INT; + PIC_INT_SYNC[1] = PIC_INT_SYNC[0]; + PIC_INT_SYNC[2] = !PIC_INT_SYNC[1] & PIC_INT_SYNC[0]; + UPDATE_ON = !WERTE[7][11]; + WERTE[6][10].CLRN = GND; -- KEIN UIP + UPDATE_ON = !WERTE[7][11]; -- UPDATE ON OFF + WERTE[2][11] = VCC; -- IMMER BINARY + WERTE[1][11] = VCC; -- IMMER 24H FORMAT + WERTE[0][11] = VCC; -- IMMER SOMMERZEITKORREKTUR + WERTE[7][13] = VCC; -- IMMER RICHTIG +-- SOMMER WINTERZEIT: BIT 0 IM REGISTER D IST DIE INFORMATION OB SOMMERZEIT IST (BRAUCHT MAN FÜR RÜCKSCHALTUNG) + SOMMERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==4 & WERTE[][7]>23; --LETZTER SONNTAG IM APRIL + WERTE[0][13] = SOMMERZEIT; + WERTE[0][13].ENA = INC_STD & (SOMMERZEIT # WINTERZEIT); + WINTERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==10 & WERTE[][7]>24 & WERTE[0][13]; --LETZTER SONNTAG IM OKTOBER +-- ACHTELSEKUNDEN + ACHTELSEKUNDEN[].CLK = MAIN_CLK; + ACHTELSEKUNDEN[] = ACHTELSEKUNDEN[]+1; + ACHTELSEKUNDEN[].ENA = PIC_INT_SYNC[2] & UPDATE_ON; +-- SEKUNDEN + INC_SEC = ACHTELSEKUNDEN[]==7 & PIC_INT_SYNC[2] & UPDATE_ON; + WERTE[][0] = (WERTE[][0]+1) & WERTE[][0]!=59 & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR); -- SEKUNDEN ZÄHLEN BIS 59 + WERTE[][0].ENA = INC_SEC & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR); +-- MINUTEN + INC_MIN = INC_SEC & WERTE[][0]==59; -- + WERTE[][2] = (WERTE[][2]+1) & WERTE[][2]!=59 & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); -- MINUTEN ZÄHLEN BIS 59 + WERTE[][2].ENA = INC_MIN & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); -- +-- STUNDEN + INC_STD = INC_MIN & WERTE[][2]==59; + WERTE[][4] = (WERTE[][4]+1+(1 & SOMMERZEIT)) & WERTE[][4]!=23 & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- STUNDEN ZÄHLEN BIS 23 + WERTE[][4].ENA = INC_STD & !(WINTERZEIT & WERTE[0][12]) & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- EINE STUNDE AUSLASSEN WENN WINTERZEITUMSCHALTUNG UND NOCH SOMMERZEIT +-- WOCHENTAG UND TAG + INC_TAG = INC_STD & WERTE[][2]==23; + WERTE[][6] = (WERTE[][6]+1) & WERTE[][6]!=7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR) -- WOCHENTAG ZÄHLEN BIS 7 + # 1 & WERTE[][6]==7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][6].ENA = INC_TAG & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR); + ANZAHL_TAGE_DES_MONATS[] = 31 & (WERTE[][8]==1 # WERTE[][8]==3 # WERTE[][8]==5 # WERTE[][8]==7 # WERTE[][8]==8 # WERTE[][8]==10 # WERTE[][8]==12) + # 30 & (WERTE[][8]==4 # WERTE[][8]==6 # WERTE[][8]==9 # WERTE[][8]==11) + # 29 & WERTE[][8]==2 & WERTE[1..0][9]==0 + # 28 & WERTE[][8]==2 & WERTE[1..0][9]!=0; + WERTE[][7] = (WERTE[][7]+1) & WERTE[][7]!=ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR) -- TAG ZÄHLEN BIS MONATSENDE + # 1 & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][7].ENA = INC_TAG & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); -- +-- MONATE + INC_MONAT = INC_TAG & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[]; -- + WERTE[][8] = (WERTE[][8]+1) & WERTE[][8]!=12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR) -- MONATE ZÄHLEN BIS 12 + # 1 & WERTE[][8]==12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][8].ENA = INC_MONAT & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR); +-- JAHR + INC_JAHR = INC_MONAT & WERTE[][8]==12; -- + WERTE[][9] = (WERTE[][9]+1) & WERTE[][9]!=99 & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR); -- JAHRE ZÄHLEN BIS 99 + WERTE[][9].ENA = INC_JAHR & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR); +-- TRISTATE OUTPUT + + FB_AD[31..24] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[31..24] + # INT_ENA_CS & INT_ENA[31..24] + # INT_LATCH_CS & INT_LATCH[31..24] + # INT_CLEAR_CS & INT_IN[31..24] + # ACP_CONF_CS & ACP_CONF[31..24] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[23..16] = lpm_bustri_BYT( + WERTE[][0] & RTC_ADR[]==0 & UHR_DS + # WERTE[][1] & RTC_ADR[]==1 & UHR_DS + # WERTE[][2] & RTC_ADR[]==2 & UHR_DS + # WERTE[][3] & RTC_ADR[]==3 & UHR_DS + # WERTE[][4] & RTC_ADR[]==4 & UHR_DS + # WERTE[][5] & RTC_ADR[]==5 & UHR_DS + # WERTE[][6] & RTC_ADR[]==6 & UHR_DS + # WERTE[][7] & RTC_ADR[]==7 & UHR_DS + # WERTE[][8] & RTC_ADR[]==8 & UHR_DS + # WERTE[][9] & RTC_ADR[]==9 & UHR_DS + # WERTE[][10] & RTC_ADR[]==10 & UHR_DS + # WERTE[][11] & RTC_ADR[]==11 & UHR_DS + # WERTE[][12] & RTC_ADR[]==12 & UHR_DS + # WERTE[][13] & RTC_ADR[]==13 & UHR_DS + # WERTE[][14] & RTC_ADR[]==14 & UHR_DS + # WERTE[][15] & RTC_ADR[]==15 & UHR_DS + # WERTE[][16] & RTC_ADR[]==16 & UHR_DS + # WERTE[][17] & RTC_ADR[]==17 & UHR_DS + # WERTE[][18] & RTC_ADR[]==18 & UHR_DS + # WERTE[][19] & RTC_ADR[]==19 & UHR_DS + # WERTE[][20] & RTC_ADR[]==20 & UHR_DS + # WERTE[][21] & RTC_ADR[]==21 & UHR_DS + # WERTE[][22] & RTC_ADR[]==22 & UHR_DS + # WERTE[][23] & RTC_ADR[]==23 & UHR_DS + # WERTE[][24] & RTC_ADR[]==24 & UHR_DS + # WERTE[][25] & RTC_ADR[]==25 & UHR_DS + # WERTE[][26] & RTC_ADR[]==26 & UHR_DS + # WERTE[][27] & RTC_ADR[]==27 & UHR_DS + # WERTE[][28] & RTC_ADR[]==28 & UHR_DS + # WERTE[][29] & RTC_ADR[]==29 & UHR_DS + # WERTE[][30] & RTC_ADR[]==30 & UHR_DS + # WERTE[][31] & RTC_ADR[]==31 & UHR_DS + # WERTE[][32] & RTC_ADR[]==32 & UHR_DS + # WERTE[][33] & RTC_ADR[]==33 & UHR_DS + # WERTE[][34] & RTC_ADR[]==34 & UHR_DS + # WERTE[][35] & RTC_ADR[]==35 & UHR_DS + # WERTE[][36] & RTC_ADR[]==36 & UHR_DS + # WERTE[][37] & RTC_ADR[]==37 & UHR_DS + # WERTE[][38] & RTC_ADR[]==38 & UHR_DS + # WERTE[][39] & RTC_ADR[]==39 & UHR_DS + # WERTE[][40] & RTC_ADR[]==40 & UHR_DS + # WERTE[][41] & RTC_ADR[]==41 & UHR_DS + # WERTE[][42] & RTC_ADR[]==42 & UHR_DS + # WERTE[][43] & RTC_ADR[]==43 & UHR_DS + # WERTE[][44] & RTC_ADR[]==44 & UHR_DS + # WERTE[][45] & RTC_ADR[]==45 & UHR_DS + # WERTE[][46] & RTC_ADR[]==46 & UHR_DS + # WERTE[][47] & RTC_ADR[]==47 & UHR_DS + # WERTE[][48] & RTC_ADR[]==48 & UHR_DS + # WERTE[][49] & RTC_ADR[]==49 & UHR_DS + # WERTE[][50] & RTC_ADR[]==50 & UHR_DS + # WERTE[][51] & RTC_ADR[]==51 & UHR_DS + # WERTE[][52] & RTC_ADR[]==52 & UHR_DS + # WERTE[][53] & RTC_ADR[]==53 & UHR_DS + # WERTE[][54] & RTC_ADR[]==54 & UHR_DS + # WERTE[][55] & RTC_ADR[]==55 & UHR_DS + # WERTE[][56] & RTC_ADR[]==56 & UHR_DS + # WERTE[][57] & RTC_ADR[]==57 & UHR_DS + # WERTE[][58] & RTC_ADR[]==58 & UHR_DS + # WERTE[][59] & RTC_ADR[]==59 & UHR_DS + # WERTE[][60] & RTC_ADR[]==60 & UHR_DS + # WERTE[][61] & RTC_ADR[]==61 & UHR_DS + # WERTE[][62] & RTC_ADR[]==62 & UHR_DS + # WERTE[][63] & RTC_ADR[]==63 & UHR_DS + # (0,RTC_ADR[]) & UHR_AS + # INT_CTR_CS & INT_CTR[23..16] + # INT_ENA_CS & INT_ENA[23..16] + # INT_LATCH_CS & INT_LATCH[23..16] + # INT_CLEAR_CS & INT_IN[23..16] + # ACP_CONF_CS & ACP_CONF[23..16] + ,(UHR_DS # UHR_AS # INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[15..8] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[15..8] + # INT_ENA_CS & INT_ENA[15..8] + # INT_LATCH_CS & INT_LATCH[15..8] + # INT_CLEAR_CS & INT_IN[15..8] + # ACP_CONF_CS & ACP_CONF[15..8] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[7..0] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[7..0] + # INT_ENA_CS & INT_ENA[7..0] + # INT_LATCH_CS & INT_LATCH[7..0] + # INT_CLEAR_CS & INT_IN[7..0] + # ACP_CONF_CS & ACP_CONF[7..0] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + + INT_HANDLER_TA = INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS; +END; + + diff --git a/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.v b/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.v new file mode 100644 index 0000000..e24f0a8 --- /dev/null +++ b/FPGA_quartus_GE/Interrupt_Handler/interrupt_handler.v @@ -0,0 +1,3615 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: interrupt_handler.tdf +// Verilog Design Output: interrupt_handler.v +// Created 23-Feb-2014 10:34 AM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + +// INTERRUPT HANDLER UND C1287 + + +// CREATED BY FREDI ASCHWANDEN +// Parameters Statement (optional) +// {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! +// Subdesign Section +module interrupt_handler(MAIN_CLK, nFB_WR, nFB_CS1, nFB_CS2, FB_SIZE0, + FB_SIZE1, FB_ADR, PIC_INT, E0_INT, DVI_INT, nPCI_INTA, nPCI_INTB, + nPCI_INTC, nPCI_INTD, nMFP_INT, nFB_OE, DSP_INT, VSYNC, HSYNC, DMA_DRQ, + nIRQ, INT_HANDLER_TA, ACP_CONF, TIN0, FB_AD, nRST); + +// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + input MAIN_CLK, nFB_WR, nFB_CS1, nFB_CS2, FB_SIZE0, FB_SIZE1; + input [31:0] FB_ADR; + input PIC_INT, E0_INT, DVI_INT, nPCI_INTA, nPCI_INTB, nPCI_INTC, nPCI_INTD, + nMFP_INT, nFB_OE, DSP_INT, VSYNC, HSYNC, DMA_DRQ; + output [7:2] nIRQ; + output INT_HANDLER_TA; + output [31:0] ACP_CONF; + output TIN0; + inout [31:0] FB_AD; + input nRST; + +// WERTE REGISTER 0-63 + wire [3:0] FB_B; + wire [31:0] INT_CTR; + wire [31:0] INT_CTR_d; + wire INT_CTR_CS; + wire [31:0] INT_LATCH; + wire [31:0] INT_LATCH_d; + reg [31:0] INT_LATCH_d_prev; + wire [31:0] INT_LATCH_clk; + wire INT_LATCH31_clrn, INT_LATCH30_clrn, INT_LATCH29_clrn, INT_LATCH28_clrn, + INT_LATCH27_clrn, INT_LATCH26_clrn, INT_LATCH25_clrn, + INT_LATCH24_clrn, INT_LATCH23_clrn, INT_LATCH22_clrn, + INT_LATCH21_clrn, INT_LATCH20_clrn, INT_LATCH19_clrn, + INT_LATCH18_clrn, INT_LATCH17_clrn, INT_LATCH16_clrn, + INT_LATCH15_clrn, INT_LATCH14_clrn, INT_LATCH13_clrn, + INT_LATCH12_clrn, INT_LATCH11_clrn, INT_LATCH10_clrn, INT_LATCH9_clrn, + INT_LATCH8_clrn, INT_LATCH7_clrn, INT_LATCH6_clrn, INT_LATCH5_clrn, + INT_LATCH4_clrn, INT_LATCH3_clrn, INT_LATCH2_clrn, INT_LATCH1_clrn, + INT_LATCH0_clrn, INT_LATCH_CS; + wire [31:0] INT_CLEAR; + wire [31:0] INT_CLEAR_d; + wire INT_CLEAR_CS; + wire [31:0] INT_IN; + wire [31:0] INT_ENA; + wire [31:0] INT_ENA_d; + wire INT_ENA_CS; + wire [31:0] ACP_CONF_d; + wire ACP_CONF_CS, PSEUDO_BUS_ERROR, UHR_AS, UHR_DS; + wire [5:0] RTC_ADR; + wire [5:0] RTC_ADR_d; + wire [2:0] ACHTELSEKUNDEN; + wire [2:0] ACHTELSEKUNDEN_d; + wire [63:0] WERTE7_; + wire [63:0] WERTE7__d; + wire WERTE7_13_ena, WERTE7_9_ena, WERTE7_8_ena, WERTE7_7_ena, WERTE7_6_ena, + WERTE7_4_ena, WERTE7_2_ena, WERTE7_0_ena; + wire [63:0] WERTE6_; + wire [63:0] WERTE6__d; + wire WERTE6_10_clrn, WERTE6_13_ena, WERTE6_9_ena, WERTE6_8_ena, + WERTE6_7_ena, WERTE6_6_ena, WERTE6_4_ena, WERTE6_2_ena, WERTE6_0_ena; + wire [63:0] WERTE5_; + wire [63:0] WERTE5__d; + wire WERTE5_13_ena, WERTE5_9_ena, WERTE5_8_ena, WERTE5_7_ena, WERTE5_6_ena, + WERTE5_4_ena, WERTE5_2_ena, WERTE5_0_ena; + wire [63:0] WERTE4_; + wire [63:0] WERTE4__d; + wire WERTE4_13_ena, WERTE4_9_ena, WERTE4_8_ena, WERTE4_7_ena, WERTE4_6_ena, + WERTE4_4_ena, WERTE4_2_ena, WERTE4_0_ena; + wire [63:0] WERTE3_; + wire [63:0] WERTE3__d; + wire WERTE3_13_ena, WERTE3_9_ena, WERTE3_8_ena, WERTE3_7_ena, WERTE3_6_ena, + WERTE3_4_ena, WERTE3_2_ena, WERTE3_0_ena; + wire [63:0] WERTE2_; + wire [63:0] WERTE2__d; + wire WERTE2_13_ena, WERTE2_9_ena, WERTE2_8_ena, WERTE2_7_ena, WERTE2_6_ena, + WERTE2_4_ena, WERTE2_2_ena, WERTE2_0_ena; + wire [63:0] WERTE1_; + wire [63:0] WERTE1__d; + wire WERTE1_13_ena, WERTE1_9_ena, WERTE1_8_ena, WERTE1_7_ena, WERTE1_6_ena, + WERTE1_4_ena, WERTE1_2_ena, WERTE1_0_ena; + wire [63:0] WERTE0_; + wire [63:0] WERTE0__d; + wire WERTE0_13_ena, WERTE0_9_ena, WERTE0_8_ena, WERTE0_7_ena, WERTE0_6_ena, + WERTE0_4_ena, WERTE0_2_ena, WERTE0_0_ena; + wire [2:0] PIC_INT_SYNC; + wire [2:0] PIC_INT_SYNC_d; + wire INC_SEC, INC_MIN, INC_STD, INC_TAG; + wire [7:0] ANZAHL_TAGE_DES_MONATS; + wire WINTERZEIT, SOMMERZEIT, INC_MONAT, INC_JAHR, UPDATE_ON, gnd, vcc; + wire [7:0] u0_data; + wire u0_enabledt; + wire [7:0] u0_tridata; + wire [7:0] u1_data; + wire u1_enabledt; + wire [7:0] u1_tridata; + wire [7:0] u2_data; + wire u2_enabledt; + wire [7:0] u2_tridata; + wire [7:0] u3_data; + wire u3_enabledt; + wire [7:0] u3_tridata; + wire UPDATE_ON_1, UPDATE_ON_2, WERTE0_0_ena_1, WERTE0_0_ena_2, + WERTE0_2_ena_1, WERTE0_2_ena_2, WERTE0_4_ena_1, WERTE0_4_ena_2, + WERTE0_6_ena_1, WERTE0_6_ena_2, WERTE0_7_ena_1, WERTE0_7_ena_2, + WERTE0_8_ena_1, WERTE0_8_ena_2, WERTE0_9_ena_1, WERTE0_9_ena_2, + WERTE0_13_ena_1, WERTE0_13_ena_2, WERTE0_0_d_1, WERTE0_0_d_2, + WERTE0_2_d_1, WERTE0_2_d_2, WERTE0_4_d_1, WERTE0_4_d_2, WERTE0_6_d_1, + WERTE0_6_d_2, WERTE0_7_d_1, WERTE0_7_d_2, WERTE0_8_d_1, WERTE0_8_d_2, + WERTE0_9_d_1, WERTE0_9_d_2, WERTE0_11_d_1, WERTE0_11_d_2, + WERTE0_13_d_1, WERTE0_13_d_2, WERTE1_0_ena_1, WERTE1_0_ena_2, + WERTE1_2_ena_1, WERTE1_2_ena_2, WERTE1_4_ena_1, WERTE1_4_ena_2, + WERTE1_6_ena_1, WERTE1_6_ena_2, WERTE1_7_ena_1, WERTE1_7_ena_2, + WERTE1_8_ena_1, WERTE1_8_ena_2, WERTE1_9_ena_1, WERTE1_9_ena_2, + WERTE1_0_d_1, WERTE1_0_d_2, WERTE1_2_d_1, WERTE1_2_d_2, WERTE1_4_d_1, + WERTE1_4_d_2, WERTE1_6_d_1, WERTE1_6_d_2, WERTE1_7_d_1, WERTE1_7_d_2, + WERTE1_8_d_1, WERTE1_8_d_2, WERTE1_9_d_1, WERTE1_9_d_2, WERTE1_11_d_1, + WERTE1_11_d_2, WERTE2_0_ena_1, WERTE2_0_ena_2, WERTE2_2_ena_1, + WERTE2_2_ena_2, WERTE2_4_ena_1, WERTE2_4_ena_2, WERTE2_6_ena_1, + WERTE2_6_ena_2, WERTE2_7_ena_1, WERTE2_7_ena_2, WERTE2_8_ena_1, + WERTE2_8_ena_2, WERTE2_9_ena_1, WERTE2_9_ena_2, WERTE2_0_d_1, + WERTE2_0_d_2, WERTE2_2_d_1, WERTE2_2_d_2, WERTE2_4_d_1, WERTE2_4_d_2, + WERTE2_6_d_1, WERTE2_6_d_2, WERTE2_7_d_1, WERTE2_7_d_2, WERTE2_8_d_1, + WERTE2_8_d_2, WERTE2_9_d_1, WERTE2_9_d_2, WERTE2_11_d_1, + WERTE2_11_d_2, WERTE3_0_ena_1, WERTE3_0_ena_2, WERTE3_2_ena_1, + WERTE3_2_ena_2, WERTE3_4_ena_1, WERTE3_4_ena_2, WERTE3_6_ena_1, + WERTE3_6_ena_2, WERTE3_7_ena_1, WERTE3_7_ena_2, WERTE3_8_ena_1, + WERTE3_8_ena_2, WERTE3_9_ena_1, WERTE3_9_ena_2, WERTE3_0_d_1, + WERTE3_0_d_2, WERTE3_2_d_1, WERTE3_2_d_2, WERTE3_4_d_1, WERTE3_4_d_2, + WERTE3_6_d_1, WERTE3_6_d_2, WERTE3_7_d_1, WERTE3_7_d_2, WERTE3_8_d_1, + WERTE3_8_d_2, WERTE3_9_d_1, WERTE3_9_d_2, WERTE4_0_ena_1, + WERTE4_0_ena_2, WERTE4_2_ena_1, WERTE4_2_ena_2, WERTE4_4_ena_1, + WERTE4_4_ena_2, WERTE4_6_ena_1, WERTE4_6_ena_2, WERTE4_7_ena_1, + WERTE4_7_ena_2, WERTE4_8_ena_1, WERTE4_8_ena_2, WERTE4_9_ena_1, + WERTE4_9_ena_2, WERTE4_0_d_1, WERTE4_0_d_2, WERTE4_2_d_1, + WERTE4_2_d_2, WERTE4_4_d_1, WERTE4_4_d_2, WERTE4_6_d_1, WERTE4_6_d_2, + WERTE4_7_d_1, WERTE4_7_d_2, WERTE4_8_d_1, WERTE4_8_d_2, WERTE4_9_d_1, + WERTE4_9_d_2, WERTE5_0_ena_1, WERTE5_0_ena_2, WERTE5_2_ena_1, + WERTE5_2_ena_2, WERTE5_4_ena_1, WERTE5_4_ena_2, WERTE5_6_ena_1, + WERTE5_6_ena_2, WERTE5_7_ena_1, WERTE5_7_ena_2, WERTE5_8_ena_1, + WERTE5_8_ena_2, WERTE5_9_ena_1, WERTE5_9_ena_2, WERTE5_0_d_1, + WERTE5_0_d_2, WERTE5_2_d_1, WERTE5_2_d_2, WERTE5_4_d_1, WERTE5_4_d_2, + WERTE5_6_d_1, WERTE5_6_d_2, WERTE5_7_d_1, WERTE5_7_d_2, WERTE5_8_d_1, + WERTE5_8_d_2, WERTE5_9_d_1, WERTE5_9_d_2, WERTE6_0_ena_1, + WERTE6_0_ena_2, WERTE6_2_ena_1, WERTE6_2_ena_2, WERTE6_4_ena_1, + WERTE6_4_ena_2, WERTE6_6_ena_1, WERTE6_6_ena_2, WERTE6_7_ena_1, + WERTE6_7_ena_2, WERTE6_8_ena_1, WERTE6_8_ena_2, WERTE6_9_ena_1, + WERTE6_9_ena_2, WERTE6_0_d_1, WERTE6_0_d_2, WERTE6_2_d_1, + WERTE6_2_d_2, WERTE6_4_d_1, WERTE6_4_d_2, WERTE6_6_d_1, WERTE6_6_d_2, + WERTE6_7_d_1, WERTE6_7_d_2, WERTE6_8_d_1, WERTE6_8_d_2, WERTE6_9_d_1, + WERTE6_9_d_2, WERTE7_0_ena_1, WERTE7_0_ena_2, WERTE7_2_ena_1, + WERTE7_2_ena_2, WERTE7_4_ena_1, WERTE7_4_ena_2, WERTE7_6_ena_1, + WERTE7_6_ena_2, WERTE7_7_ena_1, WERTE7_7_ena_2, WERTE7_8_ena_1, + WERTE7_8_ena_2, WERTE7_9_ena_1, WERTE7_9_ena_2, WERTE7_0_d_1, + WERTE7_0_d_2, WERTE7_2_d_1, WERTE7_2_d_2, WERTE7_4_d_1, WERTE7_4_d_2, + WERTE7_6_d_1, WERTE7_6_d_2, WERTE7_7_d_1, WERTE7_7_d_2, WERTE7_8_d_1, + WERTE7_8_d_2, WERTE7_9_d_1, WERTE7_9_d_2, WERTE7_13_d_1, + WERTE7_13_d_2, ACHTELSEKUNDEN0_ena_ctrl, ACHTELSEKUNDEN0_clk_ctrl, + PIC_INT_SYNC0_clk_ctrl, WERTE0_63_ena_ctrl, WERTE0_62_ena_ctrl, + WERTE0_61_ena_ctrl, WERTE0_60_ena_ctrl, WERTE0_59_ena_ctrl, + WERTE0_58_ena_ctrl, WERTE0_57_ena_ctrl, WERTE0_56_ena_ctrl, + WERTE0_55_ena_ctrl, WERTE0_54_ena_ctrl, WERTE0_53_ena_ctrl, + WERTE0_52_ena_ctrl, WERTE0_51_ena_ctrl, WERTE0_50_ena_ctrl, + WERTE0_49_ena_ctrl, WERTE0_48_ena_ctrl, WERTE0_47_ena_ctrl, + WERTE0_46_ena_ctrl, WERTE0_45_ena_ctrl, WERTE0_44_ena_ctrl, + WERTE0_43_ena_ctrl, WERTE0_42_ena_ctrl, WERTE0_41_ena_ctrl, + WERTE0_40_ena_ctrl, WERTE0_39_ena_ctrl, WERTE0_38_ena_ctrl, + WERTE0_37_ena_ctrl, WERTE0_36_ena_ctrl, WERTE0_35_ena_ctrl, + WERTE0_34_ena_ctrl, WERTE0_33_ena_ctrl, WERTE0_32_ena_ctrl, + WERTE0_31_ena_ctrl, WERTE0_30_ena_ctrl, WERTE0_29_ena_ctrl, + WERTE0_28_ena_ctrl, WERTE0_27_ena_ctrl, WERTE0_26_ena_ctrl, + WERTE0_25_ena_ctrl, WERTE0_24_ena_ctrl, WERTE0_23_ena_ctrl, + WERTE0_22_ena_ctrl, WERTE0_21_ena_ctrl, WERTE0_20_ena_ctrl, + WERTE0_19_ena_ctrl, WERTE0_18_ena_ctrl, WERTE0_17_ena_ctrl, + WERTE0_16_ena_ctrl, WERTE0_15_ena_ctrl, WERTE0_14_ena_ctrl, + WERTE0_12_ena_ctrl, WERTE0_11_ena_ctrl, WERTE0_10_ena_ctrl, + WERTE0_5_ena_ctrl, WERTE0_3_ena_ctrl, WERTE0_1_ena_ctrl, + WERTE0_0_clk_ctrl, WERTE1_0_clk_ctrl, WERTE2_0_clk_ctrl, + WERTE3_0_clk_ctrl, WERTE4_0_clk_ctrl, WERTE5_0_clk_ctrl, + WERTE6_0_clk_ctrl, WERTE7_0_clk_ctrl, RTC_ADR0_ena_ctrl, + RTC_ADR0_clk_ctrl, ACP_CONF0_ena_ctrl, ACP_CONF8_ena_ctrl, + ACP_CONF16_ena_ctrl, ACP_CONF24_ena_ctrl, ACP_CONF0_clk_ctrl, + INT_CLEAR0_clk_ctrl, INT_ENA0_ena_ctrl, INT_ENA8_ena_ctrl, + INT_ENA16_ena_ctrl, INT_ENA24_ena_ctrl, INT_ENA0_clk_ctrl, + INT_CTR0_ena_ctrl, INT_CTR8_ena_ctrl, INT_CTR16_ena_ctrl, + INT_CTR24_ena_ctrl, INT_CTR0_clk_ctrl, INT_LATCH9_clk_1, + INT_LATCH8_clk_1, INT_LATCH7_clk_1, INT_LATCH6_clk_1, + INT_LATCH5_clk_1, INT_LATCH4_clk_1, INT_LATCH3_clk_1, + INT_LATCH2_clk_1, INT_LATCH1_clk_1, INT_LATCH0_clk_1; + reg [31:0] INT_CTR_q; + reg [31:0] INT_LATCH_q; + reg [31:0] INT_CLEAR_q; + reg [31:0] INT_ENA_q; + reg [31:0] ACP_CONF_q; + reg [5:0] RTC_ADR_q; + reg [2:0] ACHTELSEKUNDEN_q; + reg [63:0] WERTE7__q; + reg [63:0] WERTE6__q; + reg [63:0] WERTE5__q; + reg [63:0] WERTE4__q; + reg [63:0] WERTE3__q; + reg [63:0] WERTE2__q; + reg [63:0] WERTE1__q; + reg [63:0] WERTE0__q; + reg [2:0] PIC_INT_SYNC_q; + + +// Sub Module Section + lpm_bustri_BYT u0 (.data(u0_data), .enabledt(u0_enabledt), + .tridata(u0_tridata)); + + lpm_bustri_BYT u1 (.data(u1_data), .enabledt(u1_enabledt), + .tridata(u1_tridata)); + + lpm_bustri_BYT u2 (.data(u2_data), .enabledt(u2_enabledt), + .tridata(u2_tridata)); + + lpm_bustri_BYT u3 (.data(u3_data), .enabledt(u3_enabledt), + .tridata(u3_tridata)); + + + assign ACP_CONF[31:24] = ACP_CONF_q[31:24]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF24_ena_ctrl) + {ACP_CONF_q[31], ACP_CONF_q[30], ACP_CONF_q[29], ACP_CONF_q[28], + ACP_CONF_q[27], ACP_CONF_q[26], ACP_CONF_q[25], ACP_CONF_q[24]} + <= ACP_CONF_d[31:24]; + + assign ACP_CONF[23:16] = ACP_CONF_q[23:16]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF16_ena_ctrl) + {ACP_CONF_q[23], ACP_CONF_q[22], ACP_CONF_q[21], ACP_CONF_q[20], + ACP_CONF_q[19], ACP_CONF_q[18], ACP_CONF_q[17], ACP_CONF_q[16]} + <= ACP_CONF_d[23:16]; + + assign ACP_CONF[15:8] = ACP_CONF_q[15:8]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF8_ena_ctrl) + {ACP_CONF_q[15], ACP_CONF_q[14], ACP_CONF_q[13], ACP_CONF_q[12], + ACP_CONF_q[11], ACP_CONF_q[10], ACP_CONF_q[9], ACP_CONF_q[8]} <= + ACP_CONF_d[15:8]; + + assign ACP_CONF[7:0] = ACP_CONF_q[7:0]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF0_ena_ctrl) + {ACP_CONF_q[7], ACP_CONF_q[6], ACP_CONF_q[5], ACP_CONF_q[4], + ACP_CONF_q[3], ACP_CONF_q[2], ACP_CONF_q[1], ACP_CONF_q[0]} <= + ACP_CONF_d[7:0]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR24_ena_ctrl) + {INT_CTR_q[31], INT_CTR_q[30], INT_CTR_q[29], INT_CTR_q[28], + INT_CTR_q[27], INT_CTR_q[26], INT_CTR_q[25], INT_CTR_q[24]} <= + INT_CTR_d[31:24]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR16_ena_ctrl) + {INT_CTR_q[23], INT_CTR_q[22], INT_CTR_q[21], INT_CTR_q[20], + INT_CTR_q[19], INT_CTR_q[18], INT_CTR_q[17], INT_CTR_q[16]} <= + INT_CTR_d[23:16]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR8_ena_ctrl) + {INT_CTR_q[15], INT_CTR_q[14], INT_CTR_q[13], INT_CTR_q[12], + INT_CTR_q[11], INT_CTR_q[10], INT_CTR_q[9], INT_CTR_q[8]} <= + INT_CTR_d[15:8]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR0_ena_ctrl) + {INT_CTR_q[7], INT_CTR_q[6], INT_CTR_q[5], INT_CTR_q[4], INT_CTR_q[3], + INT_CTR_q[2], INT_CTR_q[1], INT_CTR_q[0]} <= INT_CTR_d[7:0]; + +//GE +always @(posedge MAIN_CLK) + INT_LATCH_d_prev <= INT_LATCH_d; + +genvar n; +generate +for(n = 0; n < 32; n = n + 1) begin: syncint + always @(posedge MAIN_CLK) + begin + if (!nRST) + INT_LATCH_q[n] <= 1'b0; + else if (INT_CLEAR_q[n]) + INT_LATCH_q[n] <= 1'b0; + else if (INT_LATCH_d[n] & !INT_LATCH_d_prev[n]) + INT_LATCH_q[n] <= 1'b1; + else + INT_LATCH_q[n] <= INT_LATCH_q[n]; + end +end +endgenerate + + /*always @(posedge INT_LATCH_clk or negedge INT_LATCH31_clrn) + if (!INT_LATCH31_clrn) + INT_LATCH_q[31] <= 1'h0; + else + INT_LATCH_q[31] <= INT_LATCH_d[31]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH30_clrn) + if (!INT_LATCH30_clrn) + INT_LATCH_q[30] <= 1'h0; + else + INT_LATCH_q[30] <= INT_LATCH_d[30]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH29_clrn) + if (!INT_LATCH29_clrn) + INT_LATCH_q[29] <= 1'h0; + else + INT_LATCH_q[29] <= INT_LATCH_d[29]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH28_clrn) + if (!INT_LATCH28_clrn) + INT_LATCH_q[28] <= 1'h0; + else + INT_LATCH_q[28] <= INT_LATCH_d[28]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH27_clrn) + if (!INT_LATCH27_clrn) + INT_LATCH_q[27] <= 1'h0; + else + INT_LATCH_q[27] <= INT_LATCH_d[27]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH26_clrn) + if (!INT_LATCH26_clrn) + INT_LATCH_q[26] <= 1'h0; + else + INT_LATCH_q[26] <= INT_LATCH_d[26]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH25_clrn) + if (!INT_LATCH25_clrn) + INT_LATCH_q[25] <= 1'h0; + else + INT_LATCH_q[25] <= INT_LATCH_d[25]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH24_clrn) + if (!INT_LATCH24_clrn) + INT_LATCH_q[24] <= 1'h0; + else + INT_LATCH_q[24] <= INT_LATCH_d[24]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH23_clrn) + if (!INT_LATCH23_clrn) + INT_LATCH_q[23] <= 1'h0; + else + INT_LATCH_q[23] <= INT_LATCH_d[23]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH22_clrn) + if (!INT_LATCH22_clrn) + INT_LATCH_q[22] <= 1'h0; + else + INT_LATCH_q[22] <= INT_LATCH_d[22]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH21_clrn) + if (!INT_LATCH21_clrn) + INT_LATCH_q[21] <= 1'h0; + else + INT_LATCH_q[21] <= INT_LATCH_d[21]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH20_clrn) + if (!INT_LATCH20_clrn) + INT_LATCH_q[20] <= 1'h0; + else + INT_LATCH_q[20] <= INT_LATCH_d[20]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH19_clrn) + if (!INT_LATCH19_clrn) + INT_LATCH_q[19] <= 1'h0; + else + INT_LATCH_q[19] <= INT_LATCH_d[19]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH18_clrn) + if (!INT_LATCH18_clrn) + INT_LATCH_q[18] <= 1'h0; + else + INT_LATCH_q[18] <= INT_LATCH_d[18]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH17_clrn) + if (!INT_LATCH17_clrn) + INT_LATCH_q[17] <= 1'h0; + else + INT_LATCH_q[17] <= INT_LATCH_d[17]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH16_clrn) + if (!INT_LATCH16_clrn) + INT_LATCH_q[16] <= 1'h0; + else + INT_LATCH_q[16] <= INT_LATCH_d[16]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH15_clrn) + if (!INT_LATCH15_clrn) + INT_LATCH_q[15] <= 1'h0; + else + INT_LATCH_q[15] <= INT_LATCH_d[15]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH14_clrn) + if (!INT_LATCH14_clrn) + INT_LATCH_q[14] <= 1'h0; + else + INT_LATCH_q[14] <= INT_LATCH_d[14]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH13_clrn) + if (!INT_LATCH13_clrn) + INT_LATCH_q[13] <= 1'h0; + else + INT_LATCH_q[13] <= INT_LATCH_d[13]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH12_clrn) + if (!INT_LATCH12_clrn) + INT_LATCH_q[12] <= 1'h0; + else + INT_LATCH_q[12] <= INT_LATCH_d[12]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH11_clrn) + if (!INT_LATCH11_clrn) + INT_LATCH_q[11] <= 1'h0; + else + INT_LATCH_q[11] <= INT_LATCH_d[11]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH10_clrn) + if (!INT_LATCH10_clrn) + INT_LATCH_q[10] <= 1'h0; + else + INT_LATCH_q[10] <= INT_LATCH_d[10]; + + always @(posedge INT_LATCH9_clk_1 or negedge INT_LATCH9_clrn) + if (!INT_LATCH9_clrn) + INT_LATCH_q[9] <= 1'h0; + else + INT_LATCH_q[9] <= INT_LATCH_d[9]; + + always @(posedge INT_LATCH8_clk_1 or negedge INT_LATCH8_clrn) + if (!INT_LATCH8_clrn) + INT_LATCH_q[8] <= 1'h0; + else + INT_LATCH_q[8] <= INT_LATCH_d[8]; + + always @(posedge INT_LATCH7_clk_1 or negedge INT_LATCH7_clrn) + if (!INT_LATCH7_clrn) + INT_LATCH_q[7] <= 1'h0; + else + INT_LATCH_q[7] <= INT_LATCH_d[7]; + + always @(posedge INT_LATCH6_clk_1 or negedge INT_LATCH6_clrn) + if (!INT_LATCH6_clrn) + INT_LATCH_q[6] <= 1'h0; + else + INT_LATCH_q[6] <= INT_LATCH_d[6]; + + always @(posedge INT_LATCH5_clk_1 or negedge INT_LATCH5_clrn) + if (!INT_LATCH5_clrn) + INT_LATCH_q[5] <= 1'h0; + else + INT_LATCH_q[5] <= INT_LATCH_d[5]; + + always @(posedge INT_LATCH4_clk_1 or negedge INT_LATCH4_clrn) + if (!INT_LATCH4_clrn) + INT_LATCH_q[4] <= 1'h0; + else + INT_LATCH_q[4] <= INT_LATCH_d[4]; + + always @(posedge INT_LATCH3_clk_1 or negedge INT_LATCH3_clrn) + if (!INT_LATCH3_clrn) + INT_LATCH_q[3] <= 1'h0; + else + INT_LATCH_q[3] <= INT_LATCH_d[3]; + + always @(posedge INT_LATCH2_clk_1 or negedge INT_LATCH2_clrn) + if (!INT_LATCH2_clrn) + INT_LATCH_q[2] <= 1'h0; + else + INT_LATCH_q[2] <= INT_LATCH_d[2]; + + always @(posedge INT_LATCH1_clk_1 or negedge INT_LATCH1_clrn) + if (!INT_LATCH1_clrn) + INT_LATCH_q[1] <= 1'h0; + else + INT_LATCH_q[1] <= INT_LATCH_d[1]; + + always @(posedge INT_LATCH0_clk_1 or negedge INT_LATCH0_clrn) + if (!INT_LATCH0_clrn) + INT_LATCH_q[0] <= 1'h0; + else + INT_LATCH_q[0] <= INT_LATCH_d[0];*/ + + + always @(posedge INT_CLEAR0_clk_ctrl) + INT_CLEAR_q <= INT_CLEAR_d; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA24_ena_ctrl) + {INT_ENA_q[31], INT_ENA_q[30], INT_ENA_q[29], INT_ENA_q[28], + INT_ENA_q[27], INT_ENA_q[26], INT_ENA_q[25], INT_ENA_q[24]} <= + INT_ENA_d[31:24]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA16_ena_ctrl) + {INT_ENA_q[23], INT_ENA_q[22], INT_ENA_q[21], INT_ENA_q[20], + INT_ENA_q[19], INT_ENA_q[18], INT_ENA_q[17], INT_ENA_q[16]} <= + INT_ENA_d[23:16]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA8_ena_ctrl) + {INT_ENA_q[15], INT_ENA_q[14], INT_ENA_q[13], INT_ENA_q[12], + INT_ENA_q[11], INT_ENA_q[10], INT_ENA_q[9], INT_ENA_q[8]} <= + INT_ENA_d[15:8]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA0_ena_ctrl) + {INT_ENA_q[7], INT_ENA_q[6], INT_ENA_q[5], INT_ENA_q[4], INT_ENA_q[3], + INT_ENA_q[2], INT_ENA_q[1], INT_ENA_q[0]} <= INT_ENA_d[7:0]; + + always @(posedge RTC_ADR0_clk_ctrl) + if (RTC_ADR0_ena_ctrl) + RTC_ADR_q <= RTC_ADR_d; + + always @(posedge ACHTELSEKUNDEN0_clk_ctrl) + if (ACHTELSEKUNDEN0_ena_ctrl) + ACHTELSEKUNDEN_q <= ACHTELSEKUNDEN_d; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE7__q[63] <= WERTE7__d[63]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE7__q[62] <= WERTE7__d[62]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE7__q[61] <= WERTE7__d[61]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE7__q[60] <= WERTE7__d[60]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE7__q[59] <= WERTE7__d[59]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE7__q[58] <= WERTE7__d[58]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE7__q[57] <= WERTE7__d[57]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE7__q[56] <= WERTE7__d[56]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE7__q[55] <= WERTE7__d[55]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE7__q[54] <= WERTE7__d[54]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE7__q[53] <= WERTE7__d[53]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE7__q[52] <= WERTE7__d[52]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE7__q[51] <= WERTE7__d[51]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE7__q[50] <= WERTE7__d[50]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE7__q[49] <= WERTE7__d[49]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE7__q[48] <= WERTE7__d[48]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE7__q[47] <= WERTE7__d[47]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE7__q[46] <= WERTE7__d[46]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE7__q[45] <= WERTE7__d[45]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE7__q[44] <= WERTE7__d[44]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE7__q[43] <= WERTE7__d[43]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE7__q[42] <= WERTE7__d[42]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE7__q[41] <= WERTE7__d[41]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE7__q[40] <= WERTE7__d[40]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE7__q[39] <= WERTE7__d[39]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE7__q[38] <= WERTE7__d[38]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE7__q[37] <= WERTE7__d[37]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE7__q[36] <= WERTE7__d[36]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE7__q[35] <= WERTE7__d[35]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE7__q[34] <= WERTE7__d[34]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE7__q[33] <= WERTE7__d[33]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE7__q[32] <= WERTE7__d[32]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE7__q[31] <= WERTE7__d[31]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE7__q[30] <= WERTE7__d[30]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE7__q[29] <= WERTE7__d[29]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE7__q[28] <= WERTE7__d[28]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE7__q[27] <= WERTE7__d[27]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE7__q[26] <= WERTE7__d[26]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE7__q[25] <= WERTE7__d[25]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE7__q[24] <= WERTE7__d[24]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE7__q[23] <= WERTE7__d[23]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE7__q[22] <= WERTE7__d[22]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE7__q[21] <= WERTE7__d[21]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE7__q[20] <= WERTE7__d[20]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE7__q[19] <= WERTE7__d[19]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE7__q[18] <= WERTE7__d[18]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE7__q[17] <= WERTE7__d[17]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE7__q[16] <= WERTE7__d[16]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE7__q[15] <= WERTE7__d[15]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE7__q[14] <= WERTE7__d[14]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_13_ena) + WERTE7__q[13] <= WERTE7__d[13]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE7__q[12] <= WERTE7__d[12]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE7__q[11] <= WERTE7__d[11]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE7__q[10] <= WERTE7__d[10]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_9_ena) + WERTE7__q[9] <= WERTE7__d[9]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_8_ena) + WERTE7__q[8] <= WERTE7__d[8]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_7_ena) + WERTE7__q[7] <= WERTE7__d[7]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_6_ena) + WERTE7__q[6] <= WERTE7__d[6]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE7__q[5] <= WERTE7__d[5]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_4_ena) + WERTE7__q[4] <= WERTE7__d[4]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE7__q[3] <= WERTE7__d[3]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_2_ena) + WERTE7__q[2] <= WERTE7__d[2]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE7__q[1] <= WERTE7__d[1]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_0_ena) + WERTE7__q[0] <= WERTE7__d[0]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE6__q[63] <= WERTE6__d[63]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE6__q[62] <= WERTE6__d[62]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE6__q[61] <= WERTE6__d[61]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE6__q[60] <= WERTE6__d[60]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE6__q[59] <= WERTE6__d[59]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE6__q[58] <= WERTE6__d[58]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE6__q[57] <= WERTE6__d[57]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE6__q[56] <= WERTE6__d[56]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE6__q[55] <= WERTE6__d[55]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE6__q[54] <= WERTE6__d[54]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE6__q[53] <= WERTE6__d[53]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE6__q[52] <= WERTE6__d[52]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE6__q[51] <= WERTE6__d[51]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE6__q[50] <= WERTE6__d[50]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE6__q[49] <= WERTE6__d[49]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE6__q[48] <= WERTE6__d[48]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE6__q[47] <= WERTE6__d[47]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE6__q[46] <= WERTE6__d[46]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE6__q[45] <= WERTE6__d[45]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE6__q[44] <= WERTE6__d[44]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE6__q[43] <= WERTE6__d[43]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE6__q[42] <= WERTE6__d[42]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE6__q[41] <= WERTE6__d[41]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE6__q[40] <= WERTE6__d[40]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE6__q[39] <= WERTE6__d[39]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE6__q[38] <= WERTE6__d[38]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE6__q[37] <= WERTE6__d[37]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE6__q[36] <= WERTE6__d[36]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE6__q[35] <= WERTE6__d[35]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE6__q[34] <= WERTE6__d[34]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE6__q[33] <= WERTE6__d[33]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE6__q[32] <= WERTE6__d[32]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE6__q[31] <= WERTE6__d[31]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE6__q[30] <= WERTE6__d[30]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE6__q[29] <= WERTE6__d[29]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE6__q[28] <= WERTE6__d[28]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE6__q[27] <= WERTE6__d[27]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE6__q[26] <= WERTE6__d[26]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE6__q[25] <= WERTE6__d[25]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE6__q[24] <= WERTE6__d[24]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE6__q[23] <= WERTE6__d[23]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE6__q[22] <= WERTE6__d[22]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE6__q[21] <= WERTE6__d[21]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE6__q[20] <= WERTE6__d[20]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE6__q[19] <= WERTE6__d[19]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE6__q[18] <= WERTE6__d[18]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE6__q[17] <= WERTE6__d[17]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE6__q[16] <= WERTE6__d[16]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE6__q[15] <= WERTE6__d[15]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE6__q[14] <= WERTE6__d[14]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_13_ena) + WERTE6__q[13] <= WERTE6__d[13]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE6__q[12] <= WERTE6__d[12]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE6__q[11] <= WERTE6__d[11]; + + always @(posedge WERTE6_0_clk_ctrl or negedge WERTE6_10_clrn) + if (!WERTE6_10_clrn) + WERTE6__q[10] <= 1'h0; + else + if (WERTE0_10_ena_ctrl) + WERTE6__q[10] <= WERTE6__d[10]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_9_ena) + WERTE6__q[9] <= WERTE6__d[9]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_8_ena) + WERTE6__q[8] <= WERTE6__d[8]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_7_ena) + WERTE6__q[7] <= WERTE6__d[7]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_6_ena) + WERTE6__q[6] <= WERTE6__d[6]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE6__q[5] <= WERTE6__d[5]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_4_ena) + WERTE6__q[4] <= WERTE6__d[4]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE6__q[3] <= WERTE6__d[3]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_2_ena) + WERTE6__q[2] <= WERTE6__d[2]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE6__q[1] <= WERTE6__d[1]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_0_ena) + WERTE6__q[0] <= WERTE6__d[0]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE5__q[63] <= WERTE5__d[63]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE5__q[62] <= WERTE5__d[62]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE5__q[61] <= WERTE5__d[61]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE5__q[60] <= WERTE5__d[60]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE5__q[59] <= WERTE5__d[59]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE5__q[58] <= WERTE5__d[58]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE5__q[57] <= WERTE5__d[57]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE5__q[56] <= WERTE5__d[56]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE5__q[55] <= WERTE5__d[55]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE5__q[54] <= WERTE5__d[54]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE5__q[53] <= WERTE5__d[53]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE5__q[52] <= WERTE5__d[52]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE5__q[51] <= WERTE5__d[51]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE5__q[50] <= WERTE5__d[50]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE5__q[49] <= WERTE5__d[49]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE5__q[48] <= WERTE5__d[48]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE5__q[47] <= WERTE5__d[47]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE5__q[46] <= WERTE5__d[46]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE5__q[45] <= WERTE5__d[45]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE5__q[44] <= WERTE5__d[44]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE5__q[43] <= WERTE5__d[43]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE5__q[42] <= WERTE5__d[42]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE5__q[41] <= WERTE5__d[41]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE5__q[40] <= WERTE5__d[40]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE5__q[39] <= WERTE5__d[39]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE5__q[38] <= WERTE5__d[38]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE5__q[37] <= WERTE5__d[37]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE5__q[36] <= WERTE5__d[36]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE5__q[35] <= WERTE5__d[35]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE5__q[34] <= WERTE5__d[34]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE5__q[33] <= WERTE5__d[33]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE5__q[32] <= WERTE5__d[32]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE5__q[31] <= WERTE5__d[31]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE5__q[30] <= WERTE5__d[30]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE5__q[29] <= WERTE5__d[29]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE5__q[28] <= WERTE5__d[28]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE5__q[27] <= WERTE5__d[27]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE5__q[26] <= WERTE5__d[26]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE5__q[25] <= WERTE5__d[25]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE5__q[24] <= WERTE5__d[24]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE5__q[23] <= WERTE5__d[23]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE5__q[22] <= WERTE5__d[22]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE5__q[21] <= WERTE5__d[21]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE5__q[20] <= WERTE5__d[20]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE5__q[19] <= WERTE5__d[19]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE5__q[18] <= WERTE5__d[18]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE5__q[17] <= WERTE5__d[17]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE5__q[16] <= WERTE5__d[16]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE5__q[15] <= WERTE5__d[15]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE5__q[14] <= WERTE5__d[14]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_13_ena) + WERTE5__q[13] <= WERTE5__d[13]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE5__q[12] <= WERTE5__d[12]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE5__q[11] <= WERTE5__d[11]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE5__q[10] <= WERTE5__d[10]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_9_ena) + WERTE5__q[9] <= WERTE5__d[9]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_8_ena) + WERTE5__q[8] <= WERTE5__d[8]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_7_ena) + WERTE5__q[7] <= WERTE5__d[7]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_6_ena) + WERTE5__q[6] <= WERTE5__d[6]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE5__q[5] <= WERTE5__d[5]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_4_ena) + WERTE5__q[4] <= WERTE5__d[4]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE5__q[3] <= WERTE5__d[3]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_2_ena) + WERTE5__q[2] <= WERTE5__d[2]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE5__q[1] <= WERTE5__d[1]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_0_ena) + WERTE5__q[0] <= WERTE5__d[0]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE4__q[63] <= WERTE4__d[63]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE4__q[62] <= WERTE4__d[62]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE4__q[61] <= WERTE4__d[61]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE4__q[60] <= WERTE4__d[60]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE4__q[59] <= WERTE4__d[59]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE4__q[58] <= WERTE4__d[58]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE4__q[57] <= WERTE4__d[57]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE4__q[56] <= WERTE4__d[56]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE4__q[55] <= WERTE4__d[55]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE4__q[54] <= WERTE4__d[54]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE4__q[53] <= WERTE4__d[53]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE4__q[52] <= WERTE4__d[52]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE4__q[51] <= WERTE4__d[51]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE4__q[50] <= WERTE4__d[50]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE4__q[49] <= WERTE4__d[49]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE4__q[48] <= WERTE4__d[48]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE4__q[47] <= WERTE4__d[47]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE4__q[46] <= WERTE4__d[46]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE4__q[45] <= WERTE4__d[45]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE4__q[44] <= WERTE4__d[44]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE4__q[43] <= WERTE4__d[43]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE4__q[42] <= WERTE4__d[42]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE4__q[41] <= WERTE4__d[41]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE4__q[40] <= WERTE4__d[40]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE4__q[39] <= WERTE4__d[39]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE4__q[38] <= WERTE4__d[38]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE4__q[37] <= WERTE4__d[37]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE4__q[36] <= WERTE4__d[36]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE4__q[35] <= WERTE4__d[35]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE4__q[34] <= WERTE4__d[34]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE4__q[33] <= WERTE4__d[33]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE4__q[32] <= WERTE4__d[32]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE4__q[31] <= WERTE4__d[31]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE4__q[30] <= WERTE4__d[30]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE4__q[29] <= WERTE4__d[29]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE4__q[28] <= WERTE4__d[28]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE4__q[27] <= WERTE4__d[27]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE4__q[26] <= WERTE4__d[26]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE4__q[25] <= WERTE4__d[25]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE4__q[24] <= WERTE4__d[24]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE4__q[23] <= WERTE4__d[23]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE4__q[22] <= WERTE4__d[22]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE4__q[21] <= WERTE4__d[21]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE4__q[20] <= WERTE4__d[20]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE4__q[19] <= WERTE4__d[19]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE4__q[18] <= WERTE4__d[18]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE4__q[17] <= WERTE4__d[17]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE4__q[16] <= WERTE4__d[16]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE4__q[15] <= WERTE4__d[15]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE4__q[14] <= WERTE4__d[14]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_13_ena) + WERTE4__q[13] <= WERTE4__d[13]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE4__q[12] <= WERTE4__d[12]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE4__q[11] <= WERTE4__d[11]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE4__q[10] <= WERTE4__d[10]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_9_ena) + WERTE4__q[9] <= WERTE4__d[9]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_8_ena) + WERTE4__q[8] <= WERTE4__d[8]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_7_ena) + WERTE4__q[7] <= WERTE4__d[7]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_6_ena) + WERTE4__q[6] <= WERTE4__d[6]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE4__q[5] <= WERTE4__d[5]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_4_ena) + WERTE4__q[4] <= WERTE4__d[4]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE4__q[3] <= WERTE4__d[3]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_2_ena) + WERTE4__q[2] <= WERTE4__d[2]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE4__q[1] <= WERTE4__d[1]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_0_ena) + WERTE4__q[0] <= WERTE4__d[0]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE3__q[63] <= WERTE3__d[63]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE3__q[62] <= WERTE3__d[62]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE3__q[61] <= WERTE3__d[61]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE3__q[60] <= WERTE3__d[60]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE3__q[59] <= WERTE3__d[59]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE3__q[58] <= WERTE3__d[58]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE3__q[57] <= WERTE3__d[57]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE3__q[56] <= WERTE3__d[56]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE3__q[55] <= WERTE3__d[55]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE3__q[54] <= WERTE3__d[54]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE3__q[53] <= WERTE3__d[53]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE3__q[52] <= WERTE3__d[52]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE3__q[51] <= WERTE3__d[51]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE3__q[50] <= WERTE3__d[50]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE3__q[49] <= WERTE3__d[49]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE3__q[48] <= WERTE3__d[48]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE3__q[47] <= WERTE3__d[47]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE3__q[46] <= WERTE3__d[46]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE3__q[45] <= WERTE3__d[45]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE3__q[44] <= WERTE3__d[44]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE3__q[43] <= WERTE3__d[43]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE3__q[42] <= WERTE3__d[42]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE3__q[41] <= WERTE3__d[41]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE3__q[40] <= WERTE3__d[40]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE3__q[39] <= WERTE3__d[39]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE3__q[38] <= WERTE3__d[38]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE3__q[37] <= WERTE3__d[37]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE3__q[36] <= WERTE3__d[36]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE3__q[35] <= WERTE3__d[35]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE3__q[34] <= WERTE3__d[34]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE3__q[33] <= WERTE3__d[33]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE3__q[32] <= WERTE3__d[32]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE3__q[31] <= WERTE3__d[31]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE3__q[30] <= WERTE3__d[30]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE3__q[29] <= WERTE3__d[29]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE3__q[28] <= WERTE3__d[28]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE3__q[27] <= WERTE3__d[27]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE3__q[26] <= WERTE3__d[26]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE3__q[25] <= WERTE3__d[25]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE3__q[24] <= WERTE3__d[24]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE3__q[23] <= WERTE3__d[23]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE3__q[22] <= WERTE3__d[22]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE3__q[21] <= WERTE3__d[21]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE3__q[20] <= WERTE3__d[20]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE3__q[19] <= WERTE3__d[19]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE3__q[18] <= WERTE3__d[18]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE3__q[17] <= WERTE3__d[17]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE3__q[16] <= WERTE3__d[16]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE3__q[15] <= WERTE3__d[15]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE3__q[14] <= WERTE3__d[14]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_13_ena) + WERTE3__q[13] <= WERTE3__d[13]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE3__q[12] <= WERTE3__d[12]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE3__q[11] <= WERTE3__d[11]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE3__q[10] <= WERTE3__d[10]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_9_ena) + WERTE3__q[9] <= WERTE3__d[9]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_8_ena) + WERTE3__q[8] <= WERTE3__d[8]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_7_ena) + WERTE3__q[7] <= WERTE3__d[7]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_6_ena) + WERTE3__q[6] <= WERTE3__d[6]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE3__q[5] <= WERTE3__d[5]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_4_ena) + WERTE3__q[4] <= WERTE3__d[4]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE3__q[3] <= WERTE3__d[3]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_2_ena) + WERTE3__q[2] <= WERTE3__d[2]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE3__q[1] <= WERTE3__d[1]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_0_ena) + WERTE3__q[0] <= WERTE3__d[0]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE2__q[63] <= WERTE2__d[63]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE2__q[62] <= WERTE2__d[62]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE2__q[61] <= WERTE2__d[61]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE2__q[60] <= WERTE2__d[60]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE2__q[59] <= WERTE2__d[59]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE2__q[58] <= WERTE2__d[58]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE2__q[57] <= WERTE2__d[57]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE2__q[56] <= WERTE2__d[56]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE2__q[55] <= WERTE2__d[55]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE2__q[54] <= WERTE2__d[54]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE2__q[53] <= WERTE2__d[53]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE2__q[52] <= WERTE2__d[52]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE2__q[51] <= WERTE2__d[51]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE2__q[50] <= WERTE2__d[50]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE2__q[49] <= WERTE2__d[49]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE2__q[48] <= WERTE2__d[48]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE2__q[47] <= WERTE2__d[47]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE2__q[46] <= WERTE2__d[46]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE2__q[45] <= WERTE2__d[45]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE2__q[44] <= WERTE2__d[44]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE2__q[43] <= WERTE2__d[43]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE2__q[42] <= WERTE2__d[42]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE2__q[41] <= WERTE2__d[41]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE2__q[40] <= WERTE2__d[40]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE2__q[39] <= WERTE2__d[39]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE2__q[38] <= WERTE2__d[38]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE2__q[37] <= WERTE2__d[37]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE2__q[36] <= WERTE2__d[36]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE2__q[35] <= WERTE2__d[35]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE2__q[34] <= WERTE2__d[34]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE2__q[33] <= WERTE2__d[33]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE2__q[32] <= WERTE2__d[32]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE2__q[31] <= WERTE2__d[31]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE2__q[30] <= WERTE2__d[30]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE2__q[29] <= WERTE2__d[29]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE2__q[28] <= WERTE2__d[28]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE2__q[27] <= WERTE2__d[27]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE2__q[26] <= WERTE2__d[26]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE2__q[25] <= WERTE2__d[25]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE2__q[24] <= WERTE2__d[24]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE2__q[23] <= WERTE2__d[23]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE2__q[22] <= WERTE2__d[22]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE2__q[21] <= WERTE2__d[21]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE2__q[20] <= WERTE2__d[20]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE2__q[19] <= WERTE2__d[19]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE2__q[18] <= WERTE2__d[18]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE2__q[17] <= WERTE2__d[17]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE2__q[16] <= WERTE2__d[16]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE2__q[15] <= WERTE2__d[15]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE2__q[14] <= WERTE2__d[14]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_13_ena) + WERTE2__q[13] <= WERTE2__d[13]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE2__q[12] <= WERTE2__d[12]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE2__q[11] <= WERTE2__d[11]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE2__q[10] <= WERTE2__d[10]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_9_ena) + WERTE2__q[9] <= WERTE2__d[9]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_8_ena) + WERTE2__q[8] <= WERTE2__d[8]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_7_ena) + WERTE2__q[7] <= WERTE2__d[7]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_6_ena) + WERTE2__q[6] <= WERTE2__d[6]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE2__q[5] <= WERTE2__d[5]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_4_ena) + WERTE2__q[4] <= WERTE2__d[4]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE2__q[3] <= WERTE2__d[3]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_2_ena) + WERTE2__q[2] <= WERTE2__d[2]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE2__q[1] <= WERTE2__d[1]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_0_ena) + WERTE2__q[0] <= WERTE2__d[0]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE1__q[63] <= WERTE1__d[63]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE1__q[62] <= WERTE1__d[62]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE1__q[61] <= WERTE1__d[61]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE1__q[60] <= WERTE1__d[60]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE1__q[59] <= WERTE1__d[59]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE1__q[58] <= WERTE1__d[58]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE1__q[57] <= WERTE1__d[57]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE1__q[56] <= WERTE1__d[56]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE1__q[55] <= WERTE1__d[55]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE1__q[54] <= WERTE1__d[54]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE1__q[53] <= WERTE1__d[53]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE1__q[52] <= WERTE1__d[52]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE1__q[51] <= WERTE1__d[51]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE1__q[50] <= WERTE1__d[50]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE1__q[49] <= WERTE1__d[49]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE1__q[48] <= WERTE1__d[48]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE1__q[47] <= WERTE1__d[47]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE1__q[46] <= WERTE1__d[46]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE1__q[45] <= WERTE1__d[45]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE1__q[44] <= WERTE1__d[44]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE1__q[43] <= WERTE1__d[43]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE1__q[42] <= WERTE1__d[42]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE1__q[41] <= WERTE1__d[41]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE1__q[40] <= WERTE1__d[40]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE1__q[39] <= WERTE1__d[39]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE1__q[38] <= WERTE1__d[38]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE1__q[37] <= WERTE1__d[37]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE1__q[36] <= WERTE1__d[36]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE1__q[35] <= WERTE1__d[35]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE1__q[34] <= WERTE1__d[34]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE1__q[33] <= WERTE1__d[33]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE1__q[32] <= WERTE1__d[32]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE1__q[31] <= WERTE1__d[31]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE1__q[30] <= WERTE1__d[30]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE1__q[29] <= WERTE1__d[29]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE1__q[28] <= WERTE1__d[28]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE1__q[27] <= WERTE1__d[27]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE1__q[26] <= WERTE1__d[26]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE1__q[25] <= WERTE1__d[25]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE1__q[24] <= WERTE1__d[24]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE1__q[23] <= WERTE1__d[23]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE1__q[22] <= WERTE1__d[22]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE1__q[21] <= WERTE1__d[21]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE1__q[20] <= WERTE1__d[20]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE1__q[19] <= WERTE1__d[19]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE1__q[18] <= WERTE1__d[18]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE1__q[17] <= WERTE1__d[17]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE1__q[16] <= WERTE1__d[16]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE1__q[15] <= WERTE1__d[15]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE1__q[14] <= WERTE1__d[14]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_13_ena) + WERTE1__q[13] <= WERTE1__d[13]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE1__q[12] <= WERTE1__d[12]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE1__q[11] <= WERTE1__d[11]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE1__q[10] <= WERTE1__d[10]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_9_ena) + WERTE1__q[9] <= WERTE1__d[9]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_8_ena) + WERTE1__q[8] <= WERTE1__d[8]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_7_ena) + WERTE1__q[7] <= WERTE1__d[7]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_6_ena) + WERTE1__q[6] <= WERTE1__d[6]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE1__q[5] <= WERTE1__d[5]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_4_ena) + WERTE1__q[4] <= WERTE1__d[4]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE1__q[3] <= WERTE1__d[3]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_2_ena) + WERTE1__q[2] <= WERTE1__d[2]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE1__q[1] <= WERTE1__d[1]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_0_ena) + WERTE1__q[0] <= WERTE1__d[0]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE0__q[63] <= WERTE0__d[63]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE0__q[62] <= WERTE0__d[62]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE0__q[61] <= WERTE0__d[61]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE0__q[60] <= WERTE0__d[60]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE0__q[59] <= WERTE0__d[59]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE0__q[58] <= WERTE0__d[58]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE0__q[57] <= WERTE0__d[57]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE0__q[56] <= WERTE0__d[56]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE0__q[55] <= WERTE0__d[55]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE0__q[54] <= WERTE0__d[54]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE0__q[53] <= WERTE0__d[53]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE0__q[52] <= WERTE0__d[52]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE0__q[51] <= WERTE0__d[51]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE0__q[50] <= WERTE0__d[50]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE0__q[49] <= WERTE0__d[49]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE0__q[48] <= WERTE0__d[48]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE0__q[47] <= WERTE0__d[47]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE0__q[46] <= WERTE0__d[46]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE0__q[45] <= WERTE0__d[45]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE0__q[44] <= WERTE0__d[44]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE0__q[43] <= WERTE0__d[43]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE0__q[42] <= WERTE0__d[42]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE0__q[41] <= WERTE0__d[41]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE0__q[40] <= WERTE0__d[40]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE0__q[39] <= WERTE0__d[39]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE0__q[38] <= WERTE0__d[38]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE0__q[37] <= WERTE0__d[37]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE0__q[36] <= WERTE0__d[36]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE0__q[35] <= WERTE0__d[35]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE0__q[34] <= WERTE0__d[34]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE0__q[33] <= WERTE0__d[33]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE0__q[32] <= WERTE0__d[32]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE0__q[31] <= WERTE0__d[31]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE0__q[30] <= WERTE0__d[30]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE0__q[29] <= WERTE0__d[29]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE0__q[28] <= WERTE0__d[28]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE0__q[27] <= WERTE0__d[27]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE0__q[26] <= WERTE0__d[26]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE0__q[25] <= WERTE0__d[25]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE0__q[24] <= WERTE0__d[24]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE0__q[23] <= WERTE0__d[23]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE0__q[22] <= WERTE0__d[22]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE0__q[21] <= WERTE0__d[21]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE0__q[20] <= WERTE0__d[20]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE0__q[19] <= WERTE0__d[19]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE0__q[18] <= WERTE0__d[18]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE0__q[17] <= WERTE0__d[17]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE0__q[16] <= WERTE0__d[16]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE0__q[15] <= WERTE0__d[15]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE0__q[14] <= WERTE0__d[14]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_13_ena) + WERTE0__q[13] <= WERTE0__d[13]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE0__q[12] <= WERTE0__d[12]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE0__q[11] <= WERTE0__d[11]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE0__q[10] <= WERTE0__d[10]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_9_ena) + WERTE0__q[9] <= WERTE0__d[9]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_8_ena) + WERTE0__q[8] <= WERTE0__d[8]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_7_ena) + WERTE0__q[7] <= WERTE0__d[7]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_6_ena) + WERTE0__q[6] <= WERTE0__d[6]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE0__q[5] <= WERTE0__d[5]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_4_ena) + WERTE0__q[4] <= WERTE0__d[4]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE0__q[3] <= WERTE0__d[3]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_2_ena) + WERTE0__q[2] <= WERTE0__d[2]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE0__q[1] <= WERTE0__d[1]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_0_ena) + WERTE0__q[0] <= WERTE0__d[0]; + + always @(posedge PIC_INT_SYNC0_clk_ctrl) + PIC_INT_SYNC_q <= PIC_INT_SYNC_d; + +// Start of original equations + +// BYT SELECT +// HWORD +// HHBYT +// LONG UND LINE + assign FB_B[0] = (FB_SIZE1 & (!FB_SIZE0) & (!FB_ADR[1])) | ((!FB_SIZE1) & + FB_SIZE0 & (!FB_ADR[1]) & (!FB_ADR[0])) | ((!FB_SIZE1) & (!FB_SIZE0)) + | (FB_SIZE1 & FB_SIZE0); + +// HWORD +// HLBYT +// LONG UND LINE + assign FB_B[1] = (FB_SIZE1 & (!FB_SIZE0) & (!FB_ADR[1])) | ((!FB_SIZE1) & + FB_SIZE0 & (!FB_ADR[1]) & FB_ADR[0]) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// LWORD +// LHBYT +// LONG UND LINE + assign FB_B[2] = (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) | ((!FB_SIZE1) & + FB_SIZE0 & FB_ADR[1] & (!FB_ADR[0])) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// LWORD +// LLBYT +// LONG UND LINE + assign FB_B[3] = (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) | ((!FB_SIZE1) & + FB_SIZE0 & FB_ADR[1] & FB_ADR[0]) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// INTERRUPT CONTROL REGISTER: BIT0=INT5 AUSLÖSEN, 1=INT7 AUSLÖSEN + assign INT_CTR0_clk_ctrl = MAIN_CLK; + +// $10000/4 + assign INT_CTR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4000; + assign INT_CTR_d = FB_AD; + assign INT_CTR24_ena_ctrl = INT_CTR_CS & FB_B[0] & (!nFB_WR); + assign INT_CTR16_ena_ctrl = INT_CTR_CS & FB_B[1] & (!nFB_WR); + assign INT_CTR8_ena_ctrl = INT_CTR_CS & FB_B[2] & (!nFB_WR); + assign INT_CTR0_ena_ctrl = INT_CTR_CS & FB_B[3] & (!nFB_WR); + +// INTERRUPT ENABLE REGISTER BIT31=INT7,30=INT6,29=INT5,28=INT4,27=INT3,26=INT2 + assign INT_ENA0_clk_ctrl = MAIN_CLK; + +// $10004/4 + assign INT_ENA_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4001; + assign INT_ENA_d = FB_AD; + assign INT_ENA24_ena_ctrl = INT_ENA_CS & FB_B[0] & (!nFB_WR); + assign INT_ENA16_ena_ctrl = INT_ENA_CS & FB_B[1] & (!nFB_WR); + assign INT_ENA8_ena_ctrl = INT_ENA_CS & FB_B[2] & (!nFB_WR); + assign INT_ENA0_ena_ctrl = INT_ENA_CS & FB_B[3] & (!nFB_WR); + +// INTERRUPT CLEAR REGISTER WRITE ONLY 1=INTERRUPT CLEAR + assign INT_CLEAR0_clk_ctrl = MAIN_CLK; + +// $10008/4 + assign INT_CLEAR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4002; + assign INT_CLEAR_d[31:24] = FB_AD[31:24] & {8{INT_CLEAR_CS}} & {8{FB_B[0]}} + & {8{!nFB_WR}}; + assign INT_CLEAR_d[23:16] = FB_AD[23:16] & {8{INT_CLEAR_CS}} & {8{FB_B[1]}} + & {8{!nFB_WR}}; + assign INT_CLEAR_d[15:8] = FB_AD[15:8] & {8{INT_CLEAR_CS}} & {8{FB_B[2]}} & + {8{!nFB_WR}}; + assign INT_CLEAR_d[7:0] = FB_AD[7:0] & {8{INT_CLEAR_CS}} & {8{FB_B[3]}} & + {8{!nFB_WR}}; + +// INTERRUPT LATCH REGISTER READ ONLY +// $1000C/4 + assign INT_LATCH_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4003; + +// INTERRUPT + assign nIRQ[2] = !(HSYNC & INT_ENA_q[26]); + assign nIRQ[3] = !(INT_CTR_q[0] & INT_ENA_q[27]); + assign nIRQ[4] = !(VSYNC & INT_ENA_q[28]); + assign nIRQ[5] = INT_LATCH_q == 32'h0 & INT_ENA_q[29]; + assign nIRQ[6] = !((!nMFP_INT) & INT_ENA_q[30]); + assign nIRQ[7] = !(PSEUDO_BUS_ERROR & INT_ENA_q[31]); + +// SCC +// VME +// PADDLE +// PADDLE +// PADDLE +// MFP2 +// MFP2 +// MFP2 +// MFP2 +// TT SCSI +// ST UHR +// ST UHR +// DMA SOUND +// DMA SOUND +// DMA SOUND + assign PSEUDO_BUS_ERROR = (!nFB_CS1) & (FB_ADR[19:4] == 16'hF8C8 | + FB_ADR[19:4] == 16'hF8E0 | FB_ADR[19:4] == 16'hF920 | FB_ADR[19:4] == + 16'hF921 | FB_ADR[19:4] == 16'hF922 | FB_ADR[19:4] == 16'hFFA8 | + FB_ADR[19:4] == 16'hFFA9 | FB_ADR[19:4] == 16'hFFAA | FB_ADR[19:4] == + 16'hFFA8 | FB_ADR[19:8] == 12'b1111_1000_0111 | FB_ADR[19:4] == + 16'hFFC2 | FB_ADR[19:4] == 16'hFFC3 | FB_ADR[19:4] == 16'hF890 | + FB_ADR[19:4] == 16'hF891 | FB_ADR[19:4] == 16'hF892); + +// IF VIDEO ADR CHANGE +// WRITE VIDEO BASE ADR HIGH 0xFFFF8201/2 + assign TIN0 = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C100 & (!nFB_WR); + +// INTERRUPT LATCH + /*assign INT_LATCH_d = 32'hFFFF_FFFF; + assign INT_LATCH0_clk_1 = PIC_INT & INT_ENA_q[0]; + assign INT_LATCH1_clk_1 = E0_INT & INT_ENA_q[1]; + assign INT_LATCH2_clk_1 = DVI_INT & INT_ENA_q[2]; + assign INT_LATCH3_clk_1 = (!nPCI_INTA) & INT_ENA_q[3]; + assign INT_LATCH4_clk_1 = (!nPCI_INTB) & INT_ENA_q[4]; + assign INT_LATCH5_clk_1 = (!nPCI_INTC) & INT_ENA_q[5]; + assign INT_LATCH6_clk_1 = (!nPCI_INTD) & INT_ENA_q[6]; + assign INT_LATCH7_clk_1 = DSP_INT & INT_ENA_q[7]; + assign INT_LATCH8_clk_1 = VSYNC & INT_ENA_q[8]; + assign INT_LATCH9_clk_1 = HSYNC & INT_ENA_q[9];*/ + + //GE Latch -> FF + assign INT_LATCH_d[31:10] = 22'b11_1111_1111_1111_1111_1111; + assign INT_LATCH_d[0] = PIC_INT & INT_ENA_q[0]; + assign INT_LATCH_d[1] = E0_INT & INT_ENA_q[1]; + assign INT_LATCH_d[2] = DVI_INT & INT_ENA_q[2]; + assign INT_LATCH_d[3] = (!nPCI_INTA) & INT_ENA_q[3]; + assign INT_LATCH_d[4] = (!nPCI_INTB) & INT_ENA_q[4]; + assign INT_LATCH_d[5] = (!nPCI_INTC) & INT_ENA_q[5]; + assign INT_LATCH_d[6] = (!nPCI_INTD) & INT_ENA_q[6]; + assign INT_LATCH_d[7] = DSP_INT & INT_ENA_q[7]; + assign INT_LATCH_d[8] = VSYNC & INT_ENA_q[8]; + assign INT_LATCH_d[9] = HSYNC & INT_ENA_q[9]; + +// INTERRUPT CLEAR + assign {INT_LATCH31_clrn, INT_LATCH30_clrn, INT_LATCH29_clrn, + INT_LATCH28_clrn, INT_LATCH27_clrn, INT_LATCH26_clrn, + INT_LATCH25_clrn, INT_LATCH24_clrn, INT_LATCH23_clrn, + INT_LATCH22_clrn, INT_LATCH21_clrn, INT_LATCH20_clrn, + INT_LATCH19_clrn, INT_LATCH18_clrn, INT_LATCH17_clrn, + INT_LATCH16_clrn, INT_LATCH15_clrn, INT_LATCH14_clrn, + INT_LATCH13_clrn, INT_LATCH12_clrn, INT_LATCH11_clrn, + INT_LATCH10_clrn, INT_LATCH9_clrn, INT_LATCH8_clrn, INT_LATCH7_clrn, + INT_LATCH6_clrn, INT_LATCH5_clrn, INT_LATCH4_clrn, INT_LATCH3_clrn, + INT_LATCH2_clrn, INT_LATCH1_clrn, INT_LATCH0_clrn} = ~INT_CLEAR_q; + +// INT_IN + assign INT_IN[0] = PIC_INT; + assign INT_IN[1] = E0_INT; + assign INT_IN[2] = DVI_INT; + assign INT_IN[3] = !nPCI_INTA; + assign INT_IN[4] = !nPCI_INTB; + assign INT_IN[5] = !nPCI_INTC; + assign INT_IN[6] = !nPCI_INTD; + assign INT_IN[7] = DSP_INT; + assign INT_IN[8] = VSYNC; + assign INT_IN[9] = HSYNC; + assign INT_IN[25:10] = 16'h0; + assign INT_IN[26] = HSYNC; + assign INT_IN[27] = INT_CTR_q[0]; + assign INT_IN[28] = VSYNC; + assign INT_IN[29] = INT_LATCH_q != 32'h0; + assign INT_IN[30] = !nMFP_INT; + assign INT_IN[31] = DMA_DRQ; + +// *************************************************************************************** +// ACP CONFIG REGISTER: BIT 31-> 0=CF 1=IDE + assign ACP_CONF0_clk_ctrl = MAIN_CLK; + +// $4'0000/4 + assign ACP_CONF_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h1_0000; + assign ACP_CONF_d = FB_AD; + assign ACP_CONF24_ena_ctrl = ACP_CONF_CS & FB_B[0] & (!nFB_WR); + assign ACP_CONF16_ena_ctrl = ACP_CONF_CS & FB_B[1] & (!nFB_WR); + assign ACP_CONF8_ena_ctrl = ACP_CONF_CS & FB_B[2] & (!nFB_WR); + assign ACP_CONF0_ena_ctrl = ACP_CONF_CS & FB_B[3] & (!nFB_WR); + +// *************************************************************************************** +// ------------------------------------------------------------ +// C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR +// -------------------------------------------------------- + assign RTC_ADR0_clk_ctrl = MAIN_CLK; + assign RTC_ADR_d = FB_AD[21:16]; + +// FFFF8961 + assign UHR_AS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C4B0 & FB_B[1]; + +// FFFF8963 + assign UHR_DS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C4B1 & FB_B[3]; + assign RTC_ADR0_ena_ctrl = UHR_AS & (!nFB_WR); + assign WERTE7_0_clk_ctrl = MAIN_CLK; + assign WERTE6_0_clk_ctrl = MAIN_CLK; + assign WERTE5_0_clk_ctrl = MAIN_CLK; + assign WERTE4_0_clk_ctrl = MAIN_CLK; + assign WERTE3_0_clk_ctrl = MAIN_CLK; + assign WERTE2_0_clk_ctrl = MAIN_CLK; + assign WERTE1_0_clk_ctrl = MAIN_CLK; + assign WERTE0_0_clk_ctrl = MAIN_CLK; + assign {WERTE7_0_d_1, WERTE6_0_d_1, WERTE5_0_d_1, WERTE4_0_d_1, + WERTE3_0_d_1, WERTE2_0_d_1, WERTE1_0_d_1, WERTE0_0_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[1], WERTE6__d[1], WERTE5__d[1], WERTE4__d[1], + WERTE3__d[1], WERTE2__d[1], WERTE1__d[1], WERTE0__d[1]} = + FB_AD[23:16]; + assign {WERTE7_2_d_1, WERTE6_2_d_1, WERTE5_2_d_1, WERTE4_2_d_1, + WERTE3_2_d_1, WERTE2_2_d_1, WERTE1_2_d_1, WERTE0_2_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[3], WERTE6__d[3], WERTE5__d[3], WERTE4__d[3], + WERTE3__d[3], WERTE2__d[3], WERTE1__d[3], WERTE0__d[3]} = + FB_AD[23:16]; + assign {WERTE7_4_d_1, WERTE6_4_d_1, WERTE5_4_d_1, WERTE4_4_d_1, + WERTE3_4_d_1, WERTE2_4_d_1, WERTE1_4_d_1, WERTE0_4_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[5], WERTE6__d[5], WERTE5__d[5], WERTE4__d[5], + WERTE3__d[5], WERTE2__d[5], WERTE1__d[5], WERTE0__d[5]} = + FB_AD[23:16]; + assign {WERTE7_6_d_1, WERTE6_6_d_1, WERTE5_6_d_1, WERTE4_6_d_1, + WERTE3_6_d_1, WERTE2_6_d_1, WERTE1_6_d_1, WERTE0_6_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_7_d_1, WERTE6_7_d_1, WERTE5_7_d_1, WERTE4_7_d_1, + WERTE3_7_d_1, WERTE2_7_d_1, WERTE1_7_d_1, WERTE0_7_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_8_d_1, WERTE6_8_d_1, WERTE5_8_d_1, WERTE4_8_d_1, + WERTE3_8_d_1, WERTE2_8_d_1, WERTE1_8_d_1, WERTE0_8_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_9_d_1, WERTE6_9_d_1, WERTE5_9_d_1, WERTE4_9_d_1, + WERTE3_9_d_1, WERTE2_9_d_1, WERTE1_9_d_1, WERTE0_9_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[10], WERTE6__d[10], WERTE5__d[10], WERTE4__d[10], + WERTE3__d[10], WERTE2__d[10], WERTE1__d[10], WERTE0__d[10]} = + FB_AD[23:16]; + assign {WERTE7__d[11], WERTE6__d[11], WERTE5__d[11], WERTE4__d[11], + WERTE3__d[11], WERTE2_11_d_1, WERTE1_11_d_1, WERTE0_11_d_1} = + FB_AD[23:16]; + assign {WERTE7__d[12], WERTE6__d[12], WERTE5__d[12], WERTE4__d[12], + WERTE3__d[12], WERTE2__d[12], WERTE1__d[12], WERTE0__d[12]} = + FB_AD[23:16]; + assign {WERTE7_13_d_1, WERTE6__d[13], WERTE5__d[13], WERTE4__d[13], + WERTE3__d[13], WERTE2__d[13], WERTE1__d[13], WERTE0_13_d_1} = + FB_AD[23:16]; + assign {WERTE7__d[14], WERTE6__d[14], WERTE5__d[14], WERTE4__d[14], + WERTE3__d[14], WERTE2__d[14], WERTE1__d[14], WERTE0__d[14]} = + FB_AD[23:16]; + assign {WERTE7__d[15], WERTE6__d[15], WERTE5__d[15], WERTE4__d[15], + WERTE3__d[15], WERTE2__d[15], WERTE1__d[15], WERTE0__d[15]} = + FB_AD[23:16]; + assign {WERTE7__d[16], WERTE6__d[16], WERTE5__d[16], WERTE4__d[16], + WERTE3__d[16], WERTE2__d[16], WERTE1__d[16], WERTE0__d[16]} = + FB_AD[23:16]; + assign {WERTE7__d[17], WERTE6__d[17], WERTE5__d[17], WERTE4__d[17], + WERTE3__d[17], WERTE2__d[17], WERTE1__d[17], WERTE0__d[17]} = + FB_AD[23:16]; + assign {WERTE7__d[18], WERTE6__d[18], WERTE5__d[18], WERTE4__d[18], + WERTE3__d[18], WERTE2__d[18], WERTE1__d[18], WERTE0__d[18]} = + FB_AD[23:16]; + assign {WERTE7__d[19], WERTE6__d[19], WERTE5__d[19], WERTE4__d[19], + WERTE3__d[19], WERTE2__d[19], WERTE1__d[19], WERTE0__d[19]} = + FB_AD[23:16]; + assign {WERTE7__d[20], WERTE6__d[20], WERTE5__d[20], WERTE4__d[20], + WERTE3__d[20], WERTE2__d[20], WERTE1__d[20], WERTE0__d[20]} = + FB_AD[23:16]; + assign {WERTE7__d[21], WERTE6__d[21], WERTE5__d[21], WERTE4__d[21], + WERTE3__d[21], WERTE2__d[21], WERTE1__d[21], WERTE0__d[21]} = + FB_AD[23:16]; + assign {WERTE7__d[22], WERTE6__d[22], WERTE5__d[22], WERTE4__d[22], + WERTE3__d[22], WERTE2__d[22], WERTE1__d[22], WERTE0__d[22]} = + FB_AD[23:16]; + assign {WERTE7__d[23], WERTE6__d[23], WERTE5__d[23], WERTE4__d[23], + WERTE3__d[23], WERTE2__d[23], WERTE1__d[23], WERTE0__d[23]} = + FB_AD[23:16]; + assign {WERTE7__d[24], WERTE6__d[24], WERTE5__d[24], WERTE4__d[24], + WERTE3__d[24], WERTE2__d[24], WERTE1__d[24], WERTE0__d[24]} = + FB_AD[23:16]; + assign {WERTE7__d[25], WERTE6__d[25], WERTE5__d[25], WERTE4__d[25], + WERTE3__d[25], WERTE2__d[25], WERTE1__d[25], WERTE0__d[25]} = + FB_AD[23:16]; + assign {WERTE7__d[26], WERTE6__d[26], WERTE5__d[26], WERTE4__d[26], + WERTE3__d[26], WERTE2__d[26], WERTE1__d[26], WERTE0__d[26]} = + FB_AD[23:16]; + assign {WERTE7__d[27], WERTE6__d[27], WERTE5__d[27], WERTE4__d[27], + WERTE3__d[27], WERTE2__d[27], WERTE1__d[27], WERTE0__d[27]} = + FB_AD[23:16]; + assign {WERTE7__d[28], WERTE6__d[28], WERTE5__d[28], WERTE4__d[28], + WERTE3__d[28], WERTE2__d[28], WERTE1__d[28], WERTE0__d[28]} = + FB_AD[23:16]; + assign {WERTE7__d[29], WERTE6__d[29], WERTE5__d[29], WERTE4__d[29], + WERTE3__d[29], WERTE2__d[29], WERTE1__d[29], WERTE0__d[29]} = + FB_AD[23:16]; + assign {WERTE7__d[30], WERTE6__d[30], WERTE5__d[30], WERTE4__d[30], + WERTE3__d[30], WERTE2__d[30], WERTE1__d[30], WERTE0__d[30]} = + FB_AD[23:16]; + assign {WERTE7__d[31], WERTE6__d[31], WERTE5__d[31], WERTE4__d[31], + WERTE3__d[31], WERTE2__d[31], WERTE1__d[31], WERTE0__d[31]} = + FB_AD[23:16]; + assign {WERTE7__d[32], WERTE6__d[32], WERTE5__d[32], WERTE4__d[32], + WERTE3__d[32], WERTE2__d[32], WERTE1__d[32], WERTE0__d[32]} = + FB_AD[23:16]; + assign {WERTE7__d[33], WERTE6__d[33], WERTE5__d[33], WERTE4__d[33], + WERTE3__d[33], WERTE2__d[33], WERTE1__d[33], WERTE0__d[33]} = + FB_AD[23:16]; + assign {WERTE7__d[34], WERTE6__d[34], WERTE5__d[34], WERTE4__d[34], + WERTE3__d[34], WERTE2__d[34], WERTE1__d[34], WERTE0__d[34]} = + FB_AD[23:16]; + assign {WERTE7__d[35], WERTE6__d[35], WERTE5__d[35], WERTE4__d[35], + WERTE3__d[35], WERTE2__d[35], WERTE1__d[35], WERTE0__d[35]} = + FB_AD[23:16]; + assign {WERTE7__d[36], WERTE6__d[36], WERTE5__d[36], WERTE4__d[36], + WERTE3__d[36], WERTE2__d[36], WERTE1__d[36], WERTE0__d[36]} = + FB_AD[23:16]; + assign {WERTE7__d[37], WERTE6__d[37], WERTE5__d[37], WERTE4__d[37], + WERTE3__d[37], WERTE2__d[37], WERTE1__d[37], WERTE0__d[37]} = + FB_AD[23:16]; + assign {WERTE7__d[38], WERTE6__d[38], WERTE5__d[38], WERTE4__d[38], + WERTE3__d[38], WERTE2__d[38], WERTE1__d[38], WERTE0__d[38]} = + FB_AD[23:16]; + assign {WERTE7__d[39], WERTE6__d[39], WERTE5__d[39], WERTE4__d[39], + WERTE3__d[39], WERTE2__d[39], WERTE1__d[39], WERTE0__d[39]} = + FB_AD[23:16]; + assign {WERTE7__d[40], WERTE6__d[40], WERTE5__d[40], WERTE4__d[40], + WERTE3__d[40], WERTE2__d[40], WERTE1__d[40], WERTE0__d[40]} = + FB_AD[23:16]; + assign {WERTE7__d[41], WERTE6__d[41], WERTE5__d[41], WERTE4__d[41], + WERTE3__d[41], WERTE2__d[41], WERTE1__d[41], WERTE0__d[41]} = + FB_AD[23:16]; + assign {WERTE7__d[42], WERTE6__d[42], WERTE5__d[42], WERTE4__d[42], + WERTE3__d[42], WERTE2__d[42], WERTE1__d[42], WERTE0__d[42]} = + FB_AD[23:16]; + assign {WERTE7__d[43], WERTE6__d[43], WERTE5__d[43], WERTE4__d[43], + WERTE3__d[43], WERTE2__d[43], WERTE1__d[43], WERTE0__d[43]} = + FB_AD[23:16]; + assign {WERTE7__d[44], WERTE6__d[44], WERTE5__d[44], WERTE4__d[44], + WERTE3__d[44], WERTE2__d[44], WERTE1__d[44], WERTE0__d[44]} = + FB_AD[23:16]; + assign {WERTE7__d[45], WERTE6__d[45], WERTE5__d[45], WERTE4__d[45], + WERTE3__d[45], WERTE2__d[45], WERTE1__d[45], WERTE0__d[45]} = + FB_AD[23:16]; + assign {WERTE7__d[46], WERTE6__d[46], WERTE5__d[46], WERTE4__d[46], + WERTE3__d[46], WERTE2__d[46], WERTE1__d[46], WERTE0__d[46]} = + FB_AD[23:16]; + assign {WERTE7__d[47], WERTE6__d[47], WERTE5__d[47], WERTE4__d[47], + WERTE3__d[47], WERTE2__d[47], WERTE1__d[47], WERTE0__d[47]} = + FB_AD[23:16]; + assign {WERTE7__d[48], WERTE6__d[48], WERTE5__d[48], WERTE4__d[48], + WERTE3__d[48], WERTE2__d[48], WERTE1__d[48], WERTE0__d[48]} = + FB_AD[23:16]; + assign {WERTE7__d[49], WERTE6__d[49], WERTE5__d[49], WERTE4__d[49], + WERTE3__d[49], WERTE2__d[49], WERTE1__d[49], WERTE0__d[49]} = + FB_AD[23:16]; + assign {WERTE7__d[50], WERTE6__d[50], WERTE5__d[50], WERTE4__d[50], + WERTE3__d[50], WERTE2__d[50], WERTE1__d[50], WERTE0__d[50]} = + FB_AD[23:16]; + assign {WERTE7__d[51], WERTE6__d[51], WERTE5__d[51], WERTE4__d[51], + WERTE3__d[51], WERTE2__d[51], WERTE1__d[51], WERTE0__d[51]} = + FB_AD[23:16]; + assign {WERTE7__d[52], WERTE6__d[52], WERTE5__d[52], WERTE4__d[52], + WERTE3__d[52], WERTE2__d[52], WERTE1__d[52], WERTE0__d[52]} = + FB_AD[23:16]; + assign {WERTE7__d[53], WERTE6__d[53], WERTE5__d[53], WERTE4__d[53], + WERTE3__d[53], WERTE2__d[53], WERTE1__d[53], WERTE0__d[53]} = + FB_AD[23:16]; + assign {WERTE7__d[54], WERTE6__d[54], WERTE5__d[54], WERTE4__d[54], + WERTE3__d[54], WERTE2__d[54], WERTE1__d[54], WERTE0__d[54]} = + FB_AD[23:16]; + assign {WERTE7__d[55], WERTE6__d[55], WERTE5__d[55], WERTE4__d[55], + WERTE3__d[55], WERTE2__d[55], WERTE1__d[55], WERTE0__d[55]} = + FB_AD[23:16]; + assign {WERTE7__d[56], WERTE6__d[56], WERTE5__d[56], WERTE4__d[56], + WERTE3__d[56], WERTE2__d[56], WERTE1__d[56], WERTE0__d[56]} = + FB_AD[23:16]; + assign {WERTE7__d[57], WERTE6__d[57], WERTE5__d[57], WERTE4__d[57], + WERTE3__d[57], WERTE2__d[57], WERTE1__d[57], WERTE0__d[57]} = + FB_AD[23:16]; + assign {WERTE7__d[58], WERTE6__d[58], WERTE5__d[58], WERTE4__d[58], + WERTE3__d[58], WERTE2__d[58], WERTE1__d[58], WERTE0__d[58]} = + FB_AD[23:16]; + assign {WERTE7__d[59], WERTE6__d[59], WERTE5__d[59], WERTE4__d[59], + WERTE3__d[59], WERTE2__d[59], WERTE1__d[59], WERTE0__d[59]} = + FB_AD[23:16]; + assign {WERTE7__d[60], WERTE6__d[60], WERTE5__d[60], WERTE4__d[60], + WERTE3__d[60], WERTE2__d[60], WERTE1__d[60], WERTE0__d[60]} = + FB_AD[23:16]; + assign {WERTE7__d[61], WERTE6__d[61], WERTE5__d[61], WERTE4__d[61], + WERTE3__d[61], WERTE2__d[61], WERTE1__d[61], WERTE0__d[61]} = + FB_AD[23:16]; + assign {WERTE7__d[62], WERTE6__d[62], WERTE5__d[62], WERTE4__d[62], + WERTE3__d[62], WERTE2__d[62], WERTE1__d[62], WERTE0__d[62]} = + FB_AD[23:16]; + assign {WERTE7__d[63], WERTE6__d[63], WERTE5__d[63], WERTE4__d[63], + WERTE3__d[63], WERTE2__d[63], WERTE1__d[63], WERTE0__d[63]} = + FB_AD[23:16]; + assign {WERTE7_0_ena_1, WERTE6_0_ena_1, WERTE5_0_ena_1, WERTE4_0_ena_1, + WERTE3_0_ena_1, WERTE2_0_ena_1, WERTE1_0_ena_1, WERTE0_0_ena_1} = + {8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_1_ena_ctrl = RTC_ADR_q == 6'b00_0001 & UHR_DS & (!nFB_WR); + assign {WERTE7_2_ena_1, WERTE6_2_ena_1, WERTE5_2_ena_1, WERTE4_2_ena_1, + WERTE3_2_ena_1, WERTE2_2_ena_1, WERTE1_2_ena_1, WERTE0_2_ena_1} = + {8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_3_ena_ctrl = RTC_ADR_q == 6'b00_0011 & UHR_DS & (!nFB_WR); + assign {WERTE7_4_ena_1, WERTE6_4_ena_1, WERTE5_4_ena_1, WERTE4_4_ena_1, + WERTE3_4_ena_1, WERTE2_4_ena_1, WERTE1_4_ena_1, WERTE0_4_ena_1} = + {8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_5_ena_ctrl = RTC_ADR_q == 6'b00_0101 & UHR_DS & (!nFB_WR); + assign {WERTE7_6_ena_1, WERTE6_6_ena_1, WERTE5_6_ena_1, WERTE4_6_ena_1, + WERTE3_6_ena_1, WERTE2_6_ena_1, WERTE1_6_ena_1, WERTE0_6_ena_1} = + {8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_7_ena_1, WERTE6_7_ena_1, WERTE5_7_ena_1, WERTE4_7_ena_1, + WERTE3_7_ena_1, WERTE2_7_ena_1, WERTE1_7_ena_1, WERTE0_7_ena_1} = + {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_8_ena_1, WERTE6_8_ena_1, WERTE5_8_ena_1, WERTE4_8_ena_1, + WERTE3_8_ena_1, WERTE2_8_ena_1, WERTE1_8_ena_1, WERTE0_8_ena_1} = + {8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_9_ena_1, WERTE6_9_ena_1, WERTE5_9_ena_1, WERTE4_9_ena_1, + WERTE3_9_ena_1, WERTE2_9_ena_1, WERTE1_9_ena_1, WERTE0_9_ena_1} = + {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_10_ena_ctrl = RTC_ADR_q == 6'b00_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_11_ena_ctrl = RTC_ADR_q == 6'b00_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_12_ena_ctrl = RTC_ADR_q == 6'b00_1100 & UHR_DS & (!nFB_WR); + assign {WERTE7_13_ena, WERTE6_13_ena, WERTE5_13_ena, WERTE4_13_ena, + WERTE3_13_ena, WERTE2_13_ena, WERTE1_13_ena, WERTE0_13_ena_1} = + {8{RTC_ADR_q == 6'b00_1101}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_14_ena_ctrl = RTC_ADR_q == 6'b00_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_15_ena_ctrl = RTC_ADR_q == 6'b00_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_16_ena_ctrl = RTC_ADR_q == 6'b01_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_17_ena_ctrl = RTC_ADR_q == 6'b01_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_18_ena_ctrl = RTC_ADR_q == 6'b01_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_19_ena_ctrl = RTC_ADR_q == 6'b01_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_20_ena_ctrl = RTC_ADR_q == 6'b01_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_21_ena_ctrl = RTC_ADR_q == 6'b01_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_22_ena_ctrl = RTC_ADR_q == 6'b01_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_23_ena_ctrl = RTC_ADR_q == 6'b01_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_24_ena_ctrl = RTC_ADR_q == 6'b01_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_25_ena_ctrl = RTC_ADR_q == 6'b01_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_26_ena_ctrl = RTC_ADR_q == 6'b01_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_27_ena_ctrl = RTC_ADR_q == 6'b01_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_28_ena_ctrl = RTC_ADR_q == 6'b01_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_29_ena_ctrl = RTC_ADR_q == 6'b01_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_30_ena_ctrl = RTC_ADR_q == 6'b01_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_31_ena_ctrl = RTC_ADR_q == 6'b01_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_32_ena_ctrl = RTC_ADR_q == 6'b10_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_33_ena_ctrl = RTC_ADR_q == 6'b10_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_34_ena_ctrl = RTC_ADR_q == 6'b10_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_35_ena_ctrl = RTC_ADR_q == 6'b10_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_36_ena_ctrl = RTC_ADR_q == 6'b10_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_37_ena_ctrl = RTC_ADR_q == 6'b10_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_38_ena_ctrl = RTC_ADR_q == 6'b10_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_39_ena_ctrl = RTC_ADR_q == 6'b10_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_40_ena_ctrl = RTC_ADR_q == 6'b10_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_41_ena_ctrl = RTC_ADR_q == 6'b10_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_42_ena_ctrl = RTC_ADR_q == 6'b10_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_43_ena_ctrl = RTC_ADR_q == 6'b10_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_44_ena_ctrl = RTC_ADR_q == 6'b10_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_45_ena_ctrl = RTC_ADR_q == 6'b10_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_46_ena_ctrl = RTC_ADR_q == 6'b10_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_47_ena_ctrl = RTC_ADR_q == 6'b10_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_48_ena_ctrl = RTC_ADR_q == 6'b11_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_49_ena_ctrl = RTC_ADR_q == 6'b11_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_50_ena_ctrl = RTC_ADR_q == 6'b11_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_51_ena_ctrl = RTC_ADR_q == 6'b11_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_52_ena_ctrl = RTC_ADR_q == 6'b11_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_53_ena_ctrl = RTC_ADR_q == 6'b11_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_54_ena_ctrl = RTC_ADR_q == 6'b11_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_55_ena_ctrl = RTC_ADR_q == 6'b11_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_56_ena_ctrl = RTC_ADR_q == 6'b11_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_57_ena_ctrl = RTC_ADR_q == 6'b11_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_58_ena_ctrl = RTC_ADR_q == 6'b11_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_59_ena_ctrl = RTC_ADR_q == 6'b11_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_60_ena_ctrl = RTC_ADR_q == 6'b11_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_61_ena_ctrl = RTC_ADR_q == 6'b11_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_62_ena_ctrl = RTC_ADR_q == 6'b11_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_63_ena_ctrl = RTC_ADR_q == 6'b11_1111 & UHR_DS & (!nFB_WR); + assign PIC_INT_SYNC0_clk_ctrl = MAIN_CLK; + assign PIC_INT_SYNC_d[0] = PIC_INT; + assign PIC_INT_SYNC_d[1] = PIC_INT_SYNC_q[0]; + assign PIC_INT_SYNC_d[2] = (!PIC_INT_SYNC_q[1]) & PIC_INT_SYNC_q[0]; + assign UPDATE_ON_1 = !WERTE7__q[11]; + +// KEIN UIP + assign WERTE6_10_clrn = gnd; + +// UPDATE ON OFF + assign UPDATE_ON_2 = !WERTE7__q[11]; + +// IMMER BINARY + assign WERTE2_11_d_2 = vcc; + +// IMMER 24H FORMAT + assign WERTE1_11_d_2 = vcc; + +// IMMER SOMMERZEITKORREKTUR + assign WERTE0_11_d_2 = vcc; + +// IMMER RICHTIG + assign WERTE7_13_d_2 = vcc; + +// SOMMER WINTERZEIT: BIT 0 IM REGISTER D IST DIE INFORMATION OB SOMMERZEIT IST (BRAUCHT MAN FÜR RÜCKSCHALTUNG) +// LETZTER SONNTAG IM APRIL + assign SOMMERZEIT = {WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} == + 8'b0000_0001 & {WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], + WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + == 8'b0000_0001 & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_0100 & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + > 8'b0001_0111; + assign WERTE0_13_d_2 = SOMMERZEIT; + assign WERTE0_13_ena_2 = INC_STD & (SOMMERZEIT | WINTERZEIT); + +// LETZTER SONNTAG IM OKTOBER + assign WINTERZEIT = {WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} == + 8'b0000_0001 & {WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], + WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + == 8'b0000_0001 & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1010 & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + > 8'b0001_1000 & WERTE0__q[13]; + +// ACHTELSEKUNDEN + assign ACHTELSEKUNDEN0_clk_ctrl = MAIN_CLK; + assign ACHTELSEKUNDEN_d = ACHTELSEKUNDEN_q + 3'b001; + assign ACHTELSEKUNDEN0_ena_ctrl = PIC_INT_SYNC_q[2] & UPDATE_ON; + +// SEKUNDEN + assign INC_SEC = ACHTELSEKUNDEN_q == 3'b111 & PIC_INT_SYNC_q[2] & UPDATE_ON; + +// SEKUNDEN ZÄHLEN BIS 59 + assign {WERTE7_0_d_2, WERTE6_0_d_2, WERTE5_0_d_2, WERTE4_0_d_2, + WERTE3_0_d_2, WERTE2_0_d_2, WERTE1_0_d_2, WERTE0_0_d_2} = + ({WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], WERTE4__q[0], + WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + + 8'b0000_0001) & {8{{WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], + WERTE4__q[0], WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + != 8'b0011_1011}} & (~({8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_0_ena_2, WERTE6_0_ena_2, WERTE5_0_ena_2, WERTE4_0_ena_2, + WERTE3_0_ena_2, WERTE2_0_ena_2, WERTE1_0_ena_2, WERTE0_0_ena_2} = + {8{INC_SEC}} & (~({8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// MINUTEN + assign INC_MIN = INC_SEC & {WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], + WERTE4__q[0], WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + == 8'b0011_1011; + +// MINUTEN ZÄHLEN BIS 59 + assign {WERTE7_2_d_2, WERTE6_2_d_2, WERTE5_2_d_2, WERTE4_2_d_2, + WERTE3_2_d_2, WERTE2_2_d_2, WERTE1_2_d_2, WERTE0_2_d_2} = + ({WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], WERTE4__q[2], + WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + + 8'b0000_0001) & {8{{WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + != 8'b0011_1011}} & (~({8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_2_ena_2, WERTE6_2_ena_2, WERTE5_2_ena_2, WERTE4_2_ena_2, + WERTE3_2_ena_2, WERTE2_2_ena_2, WERTE1_2_ena_2, WERTE0_2_ena_2} = + {8{INC_MIN}} & (~({8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// STUNDEN + assign INC_STD = INC_MIN & {WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + == 8'b0011_1011; + +// STUNDEN ZÄHLEN BIS 23 + assign {WERTE7_4_d_2, WERTE6_4_d_2, WERTE5_4_d_2, WERTE4_4_d_2, + WERTE3_4_d_2, WERTE2_4_d_2, WERTE1_4_d_2, WERTE0_4_d_2} = + (({WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], + WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + + 8'b0000_0001) + (8'b0000_0001 & {8{SOMMERZEIT}})) & {8{{WERTE7__q[4], + WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], + WERTE1__q[4], WERTE0__q[4]} != 8'b0001_0111}} & (~({8{RTC_ADR_q == + 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}})); + +// EINE STUNDE AUSLASSEN WENN WINTERZEITUMSCHALTUNG UND NOCH SOMMERZEIT + assign {WERTE7_4_ena_2, WERTE6_4_ena_2, WERTE5_4_ena_2, WERTE4_4_ena_2, + WERTE3_4_ena_2, WERTE2_4_ena_2, WERTE1_4_ena_2, WERTE0_4_ena_2} = + {8{INC_STD}} & (~({8{WINTERZEIT}} & {8{WERTE0__q[12]}})) & + (~({8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}})); + +// WOCHENTAG UND TAG + assign INC_TAG = INC_STD & {WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + == 8'b0001_0111; + +// WOCHENTAG ZÄHLEN BIS 7 +// DANN BEI 1 WEITER + assign {WERTE7_6_d_2, WERTE6_6_d_2, WERTE5_6_d_2, WERTE4_6_d_2, + WERTE3_6_d_2, WERTE2_6_d_2, WERTE1_6_d_2, WERTE0_6_d_2} = + (({WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} + + 8'b0000_0001) & {8{{WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], + WERTE4__q[6], WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} + != 8'b0000_0111}} & (~({8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & + {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[6], WERTE6__q[6], + WERTE5__q[6], WERTE4__q[6], WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], + WERTE0__q[6]} == 8'b0000_0111}} & (~({8{RTC_ADR_q == 6'b00_0110}} & + {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_6_ena_2, WERTE6_6_ena_2, WERTE5_6_ena_2, WERTE4_6_ena_2, + WERTE3_6_ena_2, WERTE2_6_ena_2, WERTE1_6_ena_2, WERTE0_6_ena_2} = + {8{INC_TAG}} & (~({8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign ANZAHL_TAGE_DES_MONATS = (8'b0001_1111 & ({8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0001}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0011}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0101}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0111}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1000}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1010}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1100}})) | (8'b0001_1110 & + ({8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} == + 8'b0000_0100}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_0110}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1001}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1011}})) | (8'b0001_1101 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_0010}} & {8{{WERTE1__q[9], WERTE0__q[9]} == + 2'b00}}) | (8'b0001_1100 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_0010}} & {8{{WERTE1__q[9], WERTE0__q[9]} != + 2'b00}}); + +// TAG ZÄHLEN BIS MONATSENDE +// DANN BEI 1 WEITER + assign {WERTE7_7_d_2, WERTE6_7_d_2, WERTE5_7_d_2, WERTE4_7_d_2, + WERTE3_7_d_2, WERTE2_7_d_2, WERTE1_7_d_2, WERTE0_7_d_2} = + (({WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], WERTE4__q[7], + WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + + 8'b0000_0001) & {8{{WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + != ANZAHL_TAGE_DES_MONATS}} & (~({8{RTC_ADR_q == 6'b00_0111}} & + {8{UHR_DS}} & {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[7], + WERTE6__q[7], WERTE5__q[7], WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], + WERTE1__q[7], WERTE0__q[7]} == ANZAHL_TAGE_DES_MONATS}} & + (~({8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_7_ena_2, WERTE6_7_ena_2, WERTE5_7_ena_2, WERTE4_7_ena_2, + WERTE3_7_ena_2, WERTE2_7_ena_2, WERTE1_7_ena_2, WERTE0_7_ena_2} = + {8{INC_TAG}} & (~({8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// MONATE + assign INC_MONAT = INC_TAG & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + == ANZAHL_TAGE_DES_MONATS; + +// MONATE ZÄHLEN BIS 12 +// DANN BEI 1 WEITER + assign {WERTE7_8_d_2, WERTE6_8_d_2, WERTE5_8_d_2, WERTE4_8_d_2, + WERTE3_8_d_2, WERTE2_8_d_2, WERTE1_8_d_2, WERTE0_8_d_2} = + (({WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + + 8'b0000_0001) & {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + != 8'b0000_1100}} & (~({8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & + {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_1100}} & (~({8{RTC_ADR_q == 6'b00_1000}} & + {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_8_ena_2, WERTE6_8_ena_2, WERTE5_8_ena_2, WERTE4_8_ena_2, + WERTE3_8_ena_2, WERTE2_8_ena_2, WERTE1_8_ena_2, WERTE0_8_ena_2} = + {8{INC_MONAT}} & (~({8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// JAHR + assign INC_JAHR = INC_MONAT & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1100; + +// JAHRE ZÄHLEN BIS 99 + assign {WERTE7_9_d_2, WERTE6_9_d_2, WERTE5_9_d_2, WERTE4_9_d_2, + WERTE3_9_d_2, WERTE2_9_d_2, WERTE1_9_d_2, WERTE0_9_d_2} = + ({WERTE7__q[9], WERTE6__q[9], WERTE5__q[9], WERTE4__q[9], + WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], WERTE0__q[9]} + + 8'b0000_0001) & {8{{WERTE7__q[9], WERTE6__q[9], WERTE5__q[9], + WERTE4__q[9], WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], WERTE0__q[9]} + != 8'b0110_0011}} & (~({8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_9_ena_2, WERTE6_9_ena_2, WERTE5_9_ena_2, WERTE4_9_ena_2, + WERTE3_9_ena_2, WERTE2_9_ena_2, WERTE1_9_ena_2, WERTE0_9_ena_2} = + {8{INC_JAHR}} & (~({8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// TRISTATE OUTPUT + assign u0_data = ({8{INT_CTR_CS}} & INT_CTR_q[31:24]) | ({8{INT_ENA_CS}} & + INT_ENA_q[31:24]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[31:24]) | + ({8{INT_CLEAR_CS}} & INT_IN[31:24]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[31:24]); + assign u0_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[31:24] = u0_tridata; + assign u1_data = ({WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], WERTE4__q[0], + WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} & {8{RTC_ADR_q + == 6'b00_0000}} & {8{UHR_DS}}) | ({WERTE7__q[1], WERTE6__q[1], + WERTE5__q[1], WERTE4__q[1], WERTE3__q[1], WERTE2__q[1], WERTE1__q[1], + WERTE0__q[1]} & {8{RTC_ADR_q == 6'b00_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], WERTE4__q[2], + WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} & {8{RTC_ADR_q + == 6'b00_0010}} & {8{UHR_DS}}) | ({WERTE7__q[3], WERTE6__q[3], + WERTE5__q[3], WERTE4__q[3], WERTE3__q[3], WERTE2__q[3], WERTE1__q[3], + WERTE0__q[3]} & {8{RTC_ADR_q == 6'b00_0011}} & {8{UHR_DS}}) | + ({WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], + WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} & {8{RTC_ADR_q + == 6'b00_0100}} & {8{UHR_DS}}) | ({WERTE7__q[5], WERTE6__q[5], + WERTE5__q[5], WERTE4__q[5], WERTE3__q[5], WERTE2__q[5], WERTE1__q[5], + WERTE0__q[5]} & {8{RTC_ADR_q == 6'b00_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} & {8{RTC_ADR_q + == 6'b00_0110}} & {8{UHR_DS}}) | ({WERTE7__q[7], WERTE6__q[7], + WERTE5__q[7], WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], + WERTE0__q[7]} & {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}}) | + ({WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} & {8{RTC_ADR_q + == 6'b00_1000}} & {8{UHR_DS}}) | ({WERTE7__q[9], WERTE6__q[9], + WERTE5__q[9], WERTE4__q[9], WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], + WERTE0__q[9]} & {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[10], WERTE6__q[10], WERTE5__q[10], WERTE4__q[10], + WERTE3__q[10], WERTE2__q[10], WERTE1__q[10], WERTE0__q[10]} & + {8{RTC_ADR_q == 6'b00_1010}} & {8{UHR_DS}}) | ({WERTE7__q[11], + WERTE6__q[11], WERTE5__q[11], WERTE4__q[11], WERTE3__q[11], + WERTE2__q[11], WERTE1__q[11], WERTE0__q[11]} & {8{RTC_ADR_q == + 6'b00_1011}} & {8{UHR_DS}}) | ({WERTE7__q[12], WERTE6__q[12], + WERTE5__q[12], WERTE4__q[12], WERTE3__q[12], WERTE2__q[12], + WERTE1__q[12], WERTE0__q[12]} & {8{RTC_ADR_q == 6'b00_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[13], WERTE6__q[13], WERTE5__q[13], + WERTE4__q[13], WERTE3__q[13], WERTE2__q[13], WERTE1__q[13], + WERTE0__q[13]} & {8{RTC_ADR_q == 6'b00_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[14], WERTE6__q[14], WERTE5__q[14], WERTE4__q[14], + WERTE3__q[14], WERTE2__q[14], WERTE1__q[14], WERTE0__q[14]} & + {8{RTC_ADR_q == 6'b00_1110}} & {8{UHR_DS}}) | ({WERTE7__q[15], + WERTE6__q[15], WERTE5__q[15], WERTE4__q[15], WERTE3__q[15], + WERTE2__q[15], WERTE1__q[15], WERTE0__q[15]} & {8{RTC_ADR_q == + 6'b00_1111}} & {8{UHR_DS}}) | ({WERTE7__q[16], WERTE6__q[16], + WERTE5__q[16], WERTE4__q[16], WERTE3__q[16], WERTE2__q[16], + WERTE1__q[16], WERTE0__q[16]} & {8{RTC_ADR_q == 6'b01_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[17], WERTE6__q[17], WERTE5__q[17], + WERTE4__q[17], WERTE3__q[17], WERTE2__q[17], WERTE1__q[17], + WERTE0__q[17]} & {8{RTC_ADR_q == 6'b01_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[18], WERTE6__q[18], WERTE5__q[18], WERTE4__q[18], + WERTE3__q[18], WERTE2__q[18], WERTE1__q[18], WERTE0__q[18]} & + {8{RTC_ADR_q == 6'b01_0010}} & {8{UHR_DS}}) | ({WERTE7__q[19], + WERTE6__q[19], WERTE5__q[19], WERTE4__q[19], WERTE3__q[19], + WERTE2__q[19], WERTE1__q[19], WERTE0__q[19]} & {8{RTC_ADR_q == + 6'b01_0011}} & {8{UHR_DS}}) | ({WERTE7__q[20], WERTE6__q[20], + WERTE5__q[20], WERTE4__q[20], WERTE3__q[20], WERTE2__q[20], + WERTE1__q[20], WERTE0__q[20]} & {8{RTC_ADR_q == 6'b01_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[21], WERTE6__q[21], WERTE5__q[21], + WERTE4__q[21], WERTE3__q[21], WERTE2__q[21], WERTE1__q[21], + WERTE0__q[21]} & {8{RTC_ADR_q == 6'b01_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[22], WERTE6__q[22], WERTE5__q[22], WERTE4__q[22], + WERTE3__q[22], WERTE2__q[22], WERTE1__q[22], WERTE0__q[22]} & + {8{RTC_ADR_q == 6'b01_0110}} & {8{UHR_DS}}) | ({WERTE7__q[23], + WERTE6__q[23], WERTE5__q[23], WERTE4__q[23], WERTE3__q[23], + WERTE2__q[23], WERTE1__q[23], WERTE0__q[23]} & {8{RTC_ADR_q == + 6'b01_0111}} & {8{UHR_DS}}) | ({WERTE7__q[24], WERTE6__q[24], + WERTE5__q[24], WERTE4__q[24], WERTE3__q[24], WERTE2__q[24], + WERTE1__q[24], WERTE0__q[24]} & {8{RTC_ADR_q == 6'b01_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[25], WERTE6__q[25], WERTE5__q[25], + WERTE4__q[25], WERTE3__q[25], WERTE2__q[25], WERTE1__q[25], + WERTE0__q[25]} & {8{RTC_ADR_q == 6'b01_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[26], WERTE6__q[26], WERTE5__q[26], WERTE4__q[26], + WERTE3__q[26], WERTE2__q[26], WERTE1__q[26], WERTE0__q[26]} & + {8{RTC_ADR_q == 6'b01_1010}} & {8{UHR_DS}}) | ({WERTE7__q[27], + WERTE6__q[27], WERTE5__q[27], WERTE4__q[27], WERTE3__q[27], + WERTE2__q[27], WERTE1__q[27], WERTE0__q[27]} & {8{RTC_ADR_q == + 6'b01_1011}} & {8{UHR_DS}}) | ({WERTE7__q[28], WERTE6__q[28], + WERTE5__q[28], WERTE4__q[28], WERTE3__q[28], WERTE2__q[28], + WERTE1__q[28], WERTE0__q[28]} & {8{RTC_ADR_q == 6'b01_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[29], WERTE6__q[29], WERTE5__q[29], + WERTE4__q[29], WERTE3__q[29], WERTE2__q[29], WERTE1__q[29], + WERTE0__q[29]} & {8{RTC_ADR_q == 6'b01_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[30], WERTE6__q[30], WERTE5__q[30], WERTE4__q[30], + WERTE3__q[30], WERTE2__q[30], WERTE1__q[30], WERTE0__q[30]} & + {8{RTC_ADR_q == 6'b01_1110}} & {8{UHR_DS}}) | ({WERTE7__q[31], + WERTE6__q[31], WERTE5__q[31], WERTE4__q[31], WERTE3__q[31], + WERTE2__q[31], WERTE1__q[31], WERTE0__q[31]} & {8{RTC_ADR_q == + 6'b01_1111}} & {8{UHR_DS}}) | ({WERTE7__q[32], WERTE6__q[32], + WERTE5__q[32], WERTE4__q[32], WERTE3__q[32], WERTE2__q[32], + WERTE1__q[32], WERTE0__q[32]} & {8{RTC_ADR_q == 6'b10_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[33], WERTE6__q[33], WERTE5__q[33], + WERTE4__q[33], WERTE3__q[33], WERTE2__q[33], WERTE1__q[33], + WERTE0__q[33]} & {8{RTC_ADR_q == 6'b10_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[34], WERTE6__q[34], WERTE5__q[34], WERTE4__q[34], + WERTE3__q[34], WERTE2__q[34], WERTE1__q[34], WERTE0__q[34]} & + {8{RTC_ADR_q == 6'b10_0010}} & {8{UHR_DS}}) | ({WERTE7__q[35], + WERTE6__q[35], WERTE5__q[35], WERTE4__q[35], WERTE3__q[35], + WERTE2__q[35], WERTE1__q[35], WERTE0__q[35]} & {8{RTC_ADR_q == + 6'b10_0011}} & {8{UHR_DS}}) | ({WERTE7__q[36], WERTE6__q[36], + WERTE5__q[36], WERTE4__q[36], WERTE3__q[36], WERTE2__q[36], + WERTE1__q[36], WERTE0__q[36]} & {8{RTC_ADR_q == 6'b10_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[37], WERTE6__q[37], WERTE5__q[37], + WERTE4__q[37], WERTE3__q[37], WERTE2__q[37], WERTE1__q[37], + WERTE0__q[37]} & {8{RTC_ADR_q == 6'b10_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[38], WERTE6__q[38], WERTE5__q[38], WERTE4__q[38], + WERTE3__q[38], WERTE2__q[38], WERTE1__q[38], WERTE0__q[38]} & + {8{RTC_ADR_q == 6'b10_0110}} & {8{UHR_DS}}) | ({WERTE7__q[39], + WERTE6__q[39], WERTE5__q[39], WERTE4__q[39], WERTE3__q[39], + WERTE2__q[39], WERTE1__q[39], WERTE0__q[39]} & {8{RTC_ADR_q == + 6'b10_0111}} & {8{UHR_DS}}) | ({WERTE7__q[40], WERTE6__q[40], + WERTE5__q[40], WERTE4__q[40], WERTE3__q[40], WERTE2__q[40], + WERTE1__q[40], WERTE0__q[40]} & {8{RTC_ADR_q == 6'b10_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[41], WERTE6__q[41], WERTE5__q[41], + WERTE4__q[41], WERTE3__q[41], WERTE2__q[41], WERTE1__q[41], + WERTE0__q[41]} & {8{RTC_ADR_q == 6'b10_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[42], WERTE6__q[42], WERTE5__q[42], WERTE4__q[42], + WERTE3__q[42], WERTE2__q[42], WERTE1__q[42], WERTE0__q[42]} & + {8{RTC_ADR_q == 6'b10_1010}} & {8{UHR_DS}}) | ({WERTE7__q[43], + WERTE6__q[43], WERTE5__q[43], WERTE4__q[43], WERTE3__q[43], + WERTE2__q[43], WERTE1__q[43], WERTE0__q[43]} & {8{RTC_ADR_q == + 6'b10_1011}} & {8{UHR_DS}}) | ({WERTE7__q[44], WERTE6__q[44], + WERTE5__q[44], WERTE4__q[44], WERTE3__q[44], WERTE2__q[44], + WERTE1__q[44], WERTE0__q[44]} & {8{RTC_ADR_q == 6'b10_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[45], WERTE6__q[45], WERTE5__q[45], + WERTE4__q[45], WERTE3__q[45], WERTE2__q[45], WERTE1__q[45], + WERTE0__q[45]} & {8{RTC_ADR_q == 6'b10_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[46], WERTE6__q[46], WERTE5__q[46], WERTE4__q[46], + WERTE3__q[46], WERTE2__q[46], WERTE1__q[46], WERTE0__q[46]} & + {8{RTC_ADR_q == 6'b10_1110}} & {8{UHR_DS}}) | ({WERTE7__q[47], + WERTE6__q[47], WERTE5__q[47], WERTE4__q[47], WERTE3__q[47], + WERTE2__q[47], WERTE1__q[47], WERTE0__q[47]} & {8{RTC_ADR_q == + 6'b10_1111}} & {8{UHR_DS}}) | ({WERTE7__q[48], WERTE6__q[48], + WERTE5__q[48], WERTE4__q[48], WERTE3__q[48], WERTE2__q[48], + WERTE1__q[48], WERTE0__q[48]} & {8{RTC_ADR_q == 6'b11_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[49], WERTE6__q[49], WERTE5__q[49], + WERTE4__q[49], WERTE3__q[49], WERTE2__q[49], WERTE1__q[49], + WERTE0__q[49]} & {8{RTC_ADR_q == 6'b11_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[50], WERTE6__q[50], WERTE5__q[50], WERTE4__q[50], + WERTE3__q[50], WERTE2__q[50], WERTE1__q[50], WERTE0__q[50]} & + {8{RTC_ADR_q == 6'b11_0010}} & {8{UHR_DS}}) | ({WERTE7__q[51], + WERTE6__q[51], WERTE5__q[51], WERTE4__q[51], WERTE3__q[51], + WERTE2__q[51], WERTE1__q[51], WERTE0__q[51]} & {8{RTC_ADR_q == + 6'b11_0011}} & {8{UHR_DS}}) | ({WERTE7__q[52], WERTE6__q[52], + WERTE5__q[52], WERTE4__q[52], WERTE3__q[52], WERTE2__q[52], + WERTE1__q[52], WERTE0__q[52]} & {8{RTC_ADR_q == 6'b11_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[53], WERTE6__q[53], WERTE5__q[53], + WERTE4__q[53], WERTE3__q[53], WERTE2__q[53], WERTE1__q[53], + WERTE0__q[53]} & {8{RTC_ADR_q == 6'b11_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[54], WERTE6__q[54], WERTE5__q[54], WERTE4__q[54], + WERTE3__q[54], WERTE2__q[54], WERTE1__q[54], WERTE0__q[54]} & + {8{RTC_ADR_q == 6'b11_0110}} & {8{UHR_DS}}) | ({WERTE7__q[55], + WERTE6__q[55], WERTE5__q[55], WERTE4__q[55], WERTE3__q[55], + WERTE2__q[55], WERTE1__q[55], WERTE0__q[55]} & {8{RTC_ADR_q == + 6'b11_0111}} & {8{UHR_DS}}) | ({WERTE7__q[56], WERTE6__q[56], + WERTE5__q[56], WERTE4__q[56], WERTE3__q[56], WERTE2__q[56], + WERTE1__q[56], WERTE0__q[56]} & {8{RTC_ADR_q == 6'b11_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[57], WERTE6__q[57], WERTE5__q[57], + WERTE4__q[57], WERTE3__q[57], WERTE2__q[57], WERTE1__q[57], + WERTE0__q[57]} & {8{RTC_ADR_q == 6'b11_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[58], WERTE6__q[58], WERTE5__q[58], WERTE4__q[58], + WERTE3__q[58], WERTE2__q[58], WERTE1__q[58], WERTE0__q[58]} & + {8{RTC_ADR_q == 6'b11_1010}} & {8{UHR_DS}}) | ({WERTE7__q[59], + WERTE6__q[59], WERTE5__q[59], WERTE4__q[59], WERTE3__q[59], + WERTE2__q[59], WERTE1__q[59], WERTE0__q[59]} & {8{RTC_ADR_q == + 6'b11_1011}} & {8{UHR_DS}}) | ({WERTE7__q[60], WERTE6__q[60], + WERTE5__q[60], WERTE4__q[60], WERTE3__q[60], WERTE2__q[60], + WERTE1__q[60], WERTE0__q[60]} & {8{RTC_ADR_q == 6'b11_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[61], WERTE6__q[61], WERTE5__q[61], + WERTE4__q[61], WERTE3__q[61], WERTE2__q[61], WERTE1__q[61], + WERTE0__q[61]} & {8{RTC_ADR_q == 6'b11_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[62], WERTE6__q[62], WERTE5__q[62], WERTE4__q[62], + WERTE3__q[62], WERTE2__q[62], WERTE1__q[62], WERTE0__q[62]} & + {8{RTC_ADR_q == 6'b11_1110}} & {8{UHR_DS}}) | ({WERTE7__q[63], + WERTE6__q[63], WERTE5__q[63], WERTE4__q[63], WERTE3__q[63], + WERTE2__q[63], WERTE1__q[63], WERTE0__q[63]} & {8{RTC_ADR_q == + 6'b11_1111}} & {8{UHR_DS}}) | ({2'b00, RTC_ADR_q} & {8{UHR_AS}}) | + ({8{INT_CTR_CS}} & INT_CTR_q[23:16]) | ({8{INT_ENA_CS}} & + INT_ENA_q[23:16]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[23:16]) | + ({8{INT_CLEAR_CS}} & INT_IN[23:16]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[23:16]); + assign u1_enabledt = (UHR_DS | UHR_AS | INT_CTR_CS | INT_ENA_CS | + INT_LATCH_CS | INT_CLEAR_CS | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[23:16] = u1_tridata; + assign u2_data = ({8{INT_CTR_CS}} & INT_CTR_q[15:8]) | ({8{INT_ENA_CS}} & + INT_ENA_q[15:8]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[15:8]) | + ({8{INT_CLEAR_CS}} & INT_IN[15:8]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[15:8]); + assign u2_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[15:8] = u2_tridata; + assign u3_data = ({8{INT_CTR_CS}} & INT_CTR_q[7:0]) | ({8{INT_ENA_CS}} & + INT_ENA_q[7:0]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[7:0]) | + ({8{INT_CLEAR_CS}} & INT_IN[7:0]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[7:0]); + assign u3_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[7:0] = u3_tridata; + assign INT_HANDLER_TA = INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | + INT_CLEAR_CS; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign UPDATE_ON = UPDATE_ON_1 | UPDATE_ON_2; + assign WERTE0_0_ena = WERTE0_0_ena_1 | WERTE0_0_ena_2; + assign WERTE0_2_ena = WERTE0_2_ena_1 | WERTE0_2_ena_2; + assign WERTE0_4_ena = WERTE0_4_ena_1 | WERTE0_4_ena_2; + assign WERTE0_6_ena = WERTE0_6_ena_1 | WERTE0_6_ena_2; + assign WERTE0_7_ena = WERTE0_7_ena_1 | WERTE0_7_ena_2; + assign WERTE0_8_ena = WERTE0_8_ena_1 | WERTE0_8_ena_2; + assign WERTE0_9_ena = WERTE0_9_ena_1 | WERTE0_9_ena_2; + assign WERTE0_13_ena = WERTE0_13_ena_1 | WERTE0_13_ena_2; + assign WERTE0__d[0] = WERTE0_0_d_1 | WERTE0_0_d_2; + assign WERTE0__d[2] = WERTE0_2_d_1 | WERTE0_2_d_2; + assign WERTE0__d[4] = WERTE0_4_d_1 | WERTE0_4_d_2; + assign WERTE0__d[6] = WERTE0_6_d_1 | WERTE0_6_d_2; + assign WERTE0__d[7] = WERTE0_7_d_1 | WERTE0_7_d_2; + assign WERTE0__d[8] = WERTE0_8_d_1 | WERTE0_8_d_2; + assign WERTE0__d[9] = WERTE0_9_d_1 | WERTE0_9_d_2; + assign WERTE0__d[11] = WERTE0_11_d_1 | WERTE0_11_d_2; + assign WERTE0__d[13] = WERTE0_13_d_1 | WERTE0_13_d_2; + assign WERTE1_0_ena = WERTE1_0_ena_1 | WERTE1_0_ena_2; + assign WERTE1_2_ena = WERTE1_2_ena_1 | WERTE1_2_ena_2; + assign WERTE1_4_ena = WERTE1_4_ena_1 | WERTE1_4_ena_2; + assign WERTE1_6_ena = WERTE1_6_ena_1 | WERTE1_6_ena_2; + assign WERTE1_7_ena = WERTE1_7_ena_1 | WERTE1_7_ena_2; + assign WERTE1_8_ena = WERTE1_8_ena_1 | WERTE1_8_ena_2; + assign WERTE1_9_ena = WERTE1_9_ena_1 | WERTE1_9_ena_2; + assign WERTE1__d[0] = WERTE1_0_d_1 | WERTE1_0_d_2; + assign WERTE1__d[2] = WERTE1_2_d_1 | WERTE1_2_d_2; + assign WERTE1__d[4] = WERTE1_4_d_1 | WERTE1_4_d_2; + assign WERTE1__d[6] = WERTE1_6_d_1 | WERTE1_6_d_2; + assign WERTE1__d[7] = WERTE1_7_d_1 | WERTE1_7_d_2; + assign WERTE1__d[8] = WERTE1_8_d_1 | WERTE1_8_d_2; + assign WERTE1__d[9] = WERTE1_9_d_1 | WERTE1_9_d_2; + assign WERTE1__d[11] = WERTE1_11_d_1 | WERTE1_11_d_2; + assign WERTE2_0_ena = WERTE2_0_ena_1 | WERTE2_0_ena_2; + assign WERTE2_2_ena = WERTE2_2_ena_1 | WERTE2_2_ena_2; + assign WERTE2_4_ena = WERTE2_4_ena_1 | WERTE2_4_ena_2; + assign WERTE2_6_ena = WERTE2_6_ena_1 | WERTE2_6_ena_2; + assign WERTE2_7_ena = WERTE2_7_ena_1 | WERTE2_7_ena_2; + assign WERTE2_8_ena = WERTE2_8_ena_1 | WERTE2_8_ena_2; + assign WERTE2_9_ena = WERTE2_9_ena_1 | WERTE2_9_ena_2; + assign WERTE2__d[0] = WERTE2_0_d_1 | WERTE2_0_d_2; + assign WERTE2__d[2] = WERTE2_2_d_1 | WERTE2_2_d_2; + assign WERTE2__d[4] = WERTE2_4_d_1 | WERTE2_4_d_2; + assign WERTE2__d[6] = WERTE2_6_d_1 | WERTE2_6_d_2; + assign WERTE2__d[7] = WERTE2_7_d_1 | WERTE2_7_d_2; + assign WERTE2__d[8] = WERTE2_8_d_1 | WERTE2_8_d_2; + assign WERTE2__d[9] = WERTE2_9_d_1 | WERTE2_9_d_2; + assign WERTE2__d[11] = WERTE2_11_d_1 | WERTE2_11_d_2; + assign WERTE3_0_ena = WERTE3_0_ena_1 | WERTE3_0_ena_2; + assign WERTE3_2_ena = WERTE3_2_ena_1 | WERTE3_2_ena_2; + assign WERTE3_4_ena = WERTE3_4_ena_1 | WERTE3_4_ena_2; + assign WERTE3_6_ena = WERTE3_6_ena_1 | WERTE3_6_ena_2; + assign WERTE3_7_ena = WERTE3_7_ena_1 | WERTE3_7_ena_2; + assign WERTE3_8_ena = WERTE3_8_ena_1 | WERTE3_8_ena_2; + assign WERTE3_9_ena = WERTE3_9_ena_1 | WERTE3_9_ena_2; + assign WERTE3__d[0] = WERTE3_0_d_1 | WERTE3_0_d_2; + assign WERTE3__d[2] = WERTE3_2_d_1 | WERTE3_2_d_2; + assign WERTE3__d[4] = WERTE3_4_d_1 | WERTE3_4_d_2; + assign WERTE3__d[6] = WERTE3_6_d_1 | WERTE3_6_d_2; + assign WERTE3__d[7] = WERTE3_7_d_1 | WERTE3_7_d_2; + assign WERTE3__d[8] = WERTE3_8_d_1 | WERTE3_8_d_2; + assign WERTE3__d[9] = WERTE3_9_d_1 | WERTE3_9_d_2; + assign WERTE4_0_ena = WERTE4_0_ena_1 | WERTE4_0_ena_2; + assign WERTE4_2_ena = WERTE4_2_ena_1 | WERTE4_2_ena_2; + assign WERTE4_4_ena = WERTE4_4_ena_1 | WERTE4_4_ena_2; + assign WERTE4_6_ena = WERTE4_6_ena_1 | WERTE4_6_ena_2; + assign WERTE4_7_ena = WERTE4_7_ena_1 | WERTE4_7_ena_2; + assign WERTE4_8_ena = WERTE4_8_ena_1 | WERTE4_8_ena_2; + assign WERTE4_9_ena = WERTE4_9_ena_1 | WERTE4_9_ena_2; + assign WERTE4__d[0] = WERTE4_0_d_1 | WERTE4_0_d_2; + assign WERTE4__d[2] = WERTE4_2_d_1 | WERTE4_2_d_2; + assign WERTE4__d[4] = WERTE4_4_d_1 | WERTE4_4_d_2; + assign WERTE4__d[6] = WERTE4_6_d_1 | WERTE4_6_d_2; + assign WERTE4__d[7] = WERTE4_7_d_1 | WERTE4_7_d_2; + assign WERTE4__d[8] = WERTE4_8_d_1 | WERTE4_8_d_2; + assign WERTE4__d[9] = WERTE4_9_d_1 | WERTE4_9_d_2; + assign WERTE5_0_ena = WERTE5_0_ena_1 | WERTE5_0_ena_2; + assign WERTE5_2_ena = WERTE5_2_ena_1 | WERTE5_2_ena_2; + assign WERTE5_4_ena = WERTE5_4_ena_1 | WERTE5_4_ena_2; + assign WERTE5_6_ena = WERTE5_6_ena_1 | WERTE5_6_ena_2; + assign WERTE5_7_ena = WERTE5_7_ena_1 | WERTE5_7_ena_2; + assign WERTE5_8_ena = WERTE5_8_ena_1 | WERTE5_8_ena_2; + assign WERTE5_9_ena = WERTE5_9_ena_1 | WERTE5_9_ena_2; + assign WERTE5__d[0] = WERTE5_0_d_1 | WERTE5_0_d_2; + assign WERTE5__d[2] = WERTE5_2_d_1 | WERTE5_2_d_2; + assign WERTE5__d[4] = WERTE5_4_d_1 | WERTE5_4_d_2; + assign WERTE5__d[6] = WERTE5_6_d_1 | WERTE5_6_d_2; + assign WERTE5__d[7] = WERTE5_7_d_1 | WERTE5_7_d_2; + assign WERTE5__d[8] = WERTE5_8_d_1 | WERTE5_8_d_2; + assign WERTE5__d[9] = WERTE5_9_d_1 | WERTE5_9_d_2; + assign WERTE6_0_ena = WERTE6_0_ena_1 | WERTE6_0_ena_2; + assign WERTE6_2_ena = WERTE6_2_ena_1 | WERTE6_2_ena_2; + assign WERTE6_4_ena = WERTE6_4_ena_1 | WERTE6_4_ena_2; + assign WERTE6_6_ena = WERTE6_6_ena_1 | WERTE6_6_ena_2; + assign WERTE6_7_ena = WERTE6_7_ena_1 | WERTE6_7_ena_2; + assign WERTE6_8_ena = WERTE6_8_ena_1 | WERTE6_8_ena_2; + assign WERTE6_9_ena = WERTE6_9_ena_1 | WERTE6_9_ena_2; + assign WERTE6__d[0] = WERTE6_0_d_1 | WERTE6_0_d_2; + assign WERTE6__d[2] = WERTE6_2_d_1 | WERTE6_2_d_2; + assign WERTE6__d[4] = WERTE6_4_d_1 | WERTE6_4_d_2; + assign WERTE6__d[6] = WERTE6_6_d_1 | WERTE6_6_d_2; + assign WERTE6__d[7] = WERTE6_7_d_1 | WERTE6_7_d_2; + assign WERTE6__d[8] = WERTE6_8_d_1 | WERTE6_8_d_2; + assign WERTE6__d[9] = WERTE6_9_d_1 | WERTE6_9_d_2; + assign WERTE7_0_ena = WERTE7_0_ena_1 | WERTE7_0_ena_2; + assign WERTE7_2_ena = WERTE7_2_ena_1 | WERTE7_2_ena_2; + assign WERTE7_4_ena = WERTE7_4_ena_1 | WERTE7_4_ena_2; + assign WERTE7_6_ena = WERTE7_6_ena_1 | WERTE7_6_ena_2; + assign WERTE7_7_ena = WERTE7_7_ena_1 | WERTE7_7_ena_2; + assign WERTE7_8_ena = WERTE7_8_ena_1 | WERTE7_8_ena_2; + assign WERTE7_9_ena = WERTE7_9_ena_1 | WERTE7_9_ena_2; + assign WERTE7__d[0] = WERTE7_0_d_1 | WERTE7_0_d_2; + assign WERTE7__d[2] = WERTE7_2_d_1 | WERTE7_2_d_2; + assign WERTE7__d[4] = WERTE7_4_d_1 | WERTE7_4_d_2; + assign WERTE7__d[6] = WERTE7_6_d_1 | WERTE7_6_d_2; + assign WERTE7__d[7] = WERTE7_7_d_1 | WERTE7_7_d_2; + assign WERTE7__d[8] = WERTE7_8_d_1 | WERTE7_8_d_2; + assign WERTE7__d[9] = WERTE7_9_d_1 | WERTE7_9_d_2; + assign WERTE7__d[13] = WERTE7_13_d_1 | WERTE7_13_d_2; + +// Define power signal(s) + assign vcc = 1'b1; + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/PLLJ_PLLSPE_INFO.txt b/FPGA_quartus_GE/PLLJ_PLLSPE_INFO.txt new file mode 100644 index 0000000..8ee82dc --- /dev/null +++ b/FPGA_quartus_GE/PLLJ_PLLSPE_INFO.txt @@ -0,0 +1,20 @@ +PLL_Name altpll1:b2v_inst|altpll:altpll_component|altpll_8tp2:auto_generated|pll1 +PLLJITTER 33 +PLLSPEmax 84 +PLLSPEmin -53 + +PLL_Name altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|pll1 +PLLJITTER 43 +PLLSPEmax 84 +PLLSPEmin -53 + +PLL_Name altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|pll1 +PLLJITTER NA +PLLSPEmax 84 +PLLSPEmin -53 + +PLL_Name altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|pll1 +PLLJITTER 31 +PLLSPEmax 84 +PLLSPEmin -53 + diff --git a/FPGA_quartus_GE/UNUSED b/FPGA_quartus_GE/UNUSED new file mode 100644 index 0000000..3a7d9e6 --- /dev/null +++ b/FPGA_quartus_GE/UNUSED @@ -0,0 +1,27 @@ + +-- Clearbox generated Memory Initialization File (.mif) + +WIDTH=3; +DEPTH=16; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 00 : 7; + 01 : 6; + 02 : 5; + 03 : 4; + 04 : 3; + 05 : 2; + 06 : 1; + 07 : 0; + 08 : 7; + 09 : 6; + 0a : 5; + 0b : 4; + 0c : 3; + 0d : 2; + 0e : 1; + 0f : 0; +END; diff --git a/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd b/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd new file mode 100644 index 0000000..e09ed0b --- /dev/null +++ b/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd @@ -0,0 +1,75 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Fri Oct 16 15:40:59 2009 + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + + +-- Entity Declaration + +ENTITY BLITTER IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + nRSTO : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + VIDEO_RAM_CTR : IN STD_LOGIC_VECTOR(15 downto 0); + BLITTER_ON : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + DDRCLK0 : IN STD_LOGIC; + BLITTER_DIN : IN STD_LOGIC_VECTOR(127 downto 0); + BLITTER_DACK : IN STD_LOGIC_VECTOR(4 downto 0); + BLITTER_RUN : OUT STD_LOGIC; + BLITTER_DOUT : OUT STD_LOGIC_VECTOR(127 downto 0); + BLITTER_ADR : OUT STD_LOGIC_VECTOR(31 downto 0); + BLITTER_SIG : OUT STD_LOGIC; + BLITTER_WR : OUT STD_LOGIC; + BLITTER_TA : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0) + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END BLITTER; + + +-- Architecture Body + +ARCHITECTURE BLITTER_architecture OF BLITTER IS + + +BEGIN + BLITTER_RUN <= '0'; + BLITTER_DOUT <= x"FEDCBA9876543210F0F0F0F0F0F0F0F0"; + BLITTER_ADR <= x"76543210"; + BLITTER_SIG <= '0'; + BLITTER_WR <= '0'; + BLITTER_TA <= '0'; + +END BLITTER_architecture; diff --git a/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd.bak b/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd.bak new file mode 100644 index 0000000..f674080 --- /dev/null +++ b/FPGA_quartus_GE/Video/BLITTER/BLITTER.vhd.bak @@ -0,0 +1,75 @@ +-- WARNING: Do NOT edit the input and output ports in this file in a text +-- editor if you plan to continue editing the block that represents it in +-- the Block Editor! File corruption is VERY likely to occur. + +-- Copyright (C) 1991-2008 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +-- Generated by Quartus II Version 8.1 (Build Build 163 10/28/2008) +-- Created on Fri Oct 16 15:40:59 2009 + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + + +-- Entity Declaration + +ENTITY BLITTER IS + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + PORT + ( + nRSTO : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + VIDEO_RAM_CTR : IN STD_LOGIC_VECTOR(15 downto 0); + BLITTER_ON : IN STD_LOGIC; + FB_ADR : IN STD_LOGIC_VECTOR(31 downto 0); + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + DDRCLK0 : IN STD_LOGIC; + BLITTER_DIN : IN STD_LOGIC_VECTOR(127 downto 0); + BLITTER_DACK : IN STD_LOGIC_VECTOR(4 downto 0); + BLITTER_RUN : OUT STD_LOGIC; + BLITTER_DOUT : OUT STD_LOGIC_VECTOR(127 downto 0); + BLITTER_ADR : OUT STD_LOGIC_VECTOR(31 downto 0); + BLITTER_SIG : OUT STD_LOGIC; + BLITTER_WR : OUT STD_LOGIC; + BLITTER_TA : OUT STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 downto 0) + ); + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + +END BLITTER; + + +-- Architecture Body + +ARCHITECTURE BLITTER_architecture OF BLITTER IS + + +BEGIN + BLITTER_RUN <= '0'; + BLITTER_DOUT <= x"FEDCBA9876543210F0F0F0F0F0F0F0F0"; + BLITTER_ADR <= x"FEDCBA9876543210"; + BLITTER_SIG <= '0'; + BLITTER_WR <= '0'; + BLITTER_TA <= '0'; + +END BLITTER_architecture; diff --git a/FPGA_quartus_GE/Video/DDR_CTR.tdf b/FPGA_quartus_GE/Video/DDR_CTR.tdf new file mode 100644 index 0000000..d5b5ec2 --- /dev/null +++ b/FPGA_quartus_GE/Video/DDR_CTR.tdf @@ -0,0 +1,659 @@ +TITLE "DDR_CTR"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_BYT.inc"; + +-- FIFO WATER MARK +CONSTANT FIFO_LWM = 0; +CONSTANT FIFO_MWM = 200; +CONSTANT FIFO_HWM = 500; + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN DDR_CTR +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + FB_ADR[31..0] : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nRSTO : INPUT; + MAIN_CLK : INPUT; + FB_ALE : INPUT; + nFB_WR : INPUT; + DDR_SYNC_66M : INPUT; + CLR_FIFO : INPUT; + VIDEO_RAM_CTR[15..0] : INPUT; + BLITTER_ADR[31..0] : INPUT; + BLITTER_SIG : INPUT; + BLITTER_WR : INPUT; + DDRCLK0 : INPUT; + CLK33M : INPUT; + FIFO_MW[8..0] : INPUT; + VA[12..0] : OUTPUT; + nVWE : OUTPUT; + nVRAS : OUTPUT; + nVCS : OUTPUT; + VCKE : OUTPUT; + nVCAS : OUTPUT; + FB_LE[3..0] : OUTPUT; + FB_VDOE[3..0] : OUTPUT; + SR_FIFO_WRE : OUTPUT; + SR_DDR_FB : OUTPUT; + SR_DDR_WR : OUTPUT; + SR_DDRWR_D_SEL : OUTPUT; + SR_VDMP[7..0] : OUTPUT; + VIDEO_DDR_TA : OUTPUT; + SR_BLITTER_DACK : OUTPUT; + BA[1..0] : OUTPUT; + DDRWR_D_SEL1 : OUTPUT; + VDM_SEL[3..0] : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3); + DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2A,DS_T2B,DS_T3,DS_N5,DS_N6, DS_N7, DS_N8, -- START (NORMAL 8 CYCLES TOTAL = 60ns) + DS_C2,DS_C3,DS_C4, DS_C5, DS_C6, DS_C7, -- CONFIG + DS_T4R,DS_T5R, -- READ CPU UND BLITTER, + DS_T4W,DS_T5W,DS_T6W,DS_T7W,DS_T8W,DS_T9W, -- WRITE CPU UND BLITTER + DS_T4F,DS_T5F,DS_T6F,DS_T7F,DS_T8F,DS_T9F,DS_T10F, -- READ FIFO + DS_CB6, DS_CB8, -- CLOSE FIFO BANK + DS_R2,DS_R3,DS_R4, DS_R5, DS_R6); -- REFRESH 10X7.5NS=75NS + LINE :NODE; + FB_B[3..0] :NODE; + VCAS :NODE; + VRAS :NODE; + VWE :NODE; + VA_P[12..0] :DFF; + BA_P[1..0] :DFF; + VA_S[12..0] :DFF; + BA_S[1..0] :DFF; + MCS[1..0] :DFF; + CPU_DDR_SYNC :DFF; + DDR_SEL :NODE; + DDR_CS :DFFE; + DDR_CONFIG :NODE; + SR_DDR_WR :DFF; + SR_DDRWR_D_SEL :DFF; + SR_VDMP[7..0] :DFF; + CPU_ROW_ADR[12..0] :NODE; + CPU_BA[1..0] :NODE; + CPU_COL_ADR[9..0] :NODE; + CPU_SIG :NODE; + CPU_REQ :DFF; + CPU_AC :DFF; + BUS_CYC :DFF; + BUS_CYC_END :NODE; + BLITTER_REQ :DFF; + BLITTER_AC :DFF; + BLITTER_ROW_ADR[12..0] :NODE; + BLITTER_BA[1..0] :NODE; + BLITTER_COL_ADR[9..0] :NODE; + FIFO_REQ :DFF; + FIFO_AC :DFF; + FIFO_ROW_ADR[12..0] :NODE; + FIFO_BA[1..0] :NODE; + FIFO_COL_ADR[9..0] :NODE; + FIFO_ACTIVE :NODE; + CLR_FIFO_SYNC :DFF; + CLEAR_FIFO_CNT :DFF; + STOP :DFF; + SR_FIFO_WRE :DFF; + FIFO_BANK_OK :DFF; + FIFO_BANK_NOT_OK :NODE; + DDR_REFRESH_ON :NODE; + DDR_REFRESH_CNT[10..0] :DFF; + DDR_REFRESH_REQ :DFF; + DDR_REFRESH_SIG[3..0] :DFFE; + REFRESH_TIME :DFF; + VIDEO_BASE_L_D[7..0] :DFFE; + VIDEO_BASE_L :NODE; + VIDEO_BASE_M_D[7..0] :DFFE; + VIDEO_BASE_M :NODE; + VIDEO_BASE_H_D[7..0] :DFFE; + VIDEO_BASE_H :NODE; + VIDEO_BASE_X_D[2..0] :DFFE; + VIDEO_ADR_CNT[22..0] :DFFE; + VIDEO_CNT_L :NODE; + VIDEO_CNT_M :NODE; + VIDEO_CNT_H :NODE; + VIDEO_BASE_ADR[22..0] :NODE; + VIDEO_ACT_ADR[26..0] :NODE; + +BEGIN + LINE = FB_SIZE0 & FB_SIZE1; +-- BYT SELECT + FB_B0 = FB_ADR[1..0]==0 -- ADR==0 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + FB_REGDDR.CLK = MAIN_CLK; + CASE FB_REGDDR IS + WHEN FR_WAIT => + FB_LE0 = !nFB_WR; + IF BUS_CYC # DDR_SEL & LINE & !nFB_WR THEN -- LOS WENN BEREIT ODER IMMER BEI LINE WRITE + FB_REGDDR = FR_S0; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S0 => + IF DDR_CS THEN + FB_LE0 = !nFB_WR; + VIDEO_DDR_TA = VCC; + IF LINE THEN + FB_VDOE0 = !nFB_OE & !DDR_CONFIG; + FB_REGDDR = FR_S1; + ELSE + BUS_CYC_END = VCC; + FB_VDOE0 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_REGDDR = FR_WAIT; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S1 => + IF DDR_CS THEN + FB_VDOE1 = !nFB_OE & !DDR_CONFIG; + FB_LE1 = !nFB_WR; + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S2; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S2 => + IF DDR_CS THEN + FB_VDOE2 = !nFB_OE & !DDR_CONFIG; + FB_LE2 = !nFB_WR; + IF !BUS_CYC & LINE & !nFB_WR THEN -- BEI LINE WRITE EVT. WARTEN + FB_REGDDR = FR_S2; + ELSE + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S3; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S3 => + IF DDR_CS THEN + FB_VDOE3 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_LE3 = !nFB_WR; + VIDEO_DDR_TA = VCC; + BUS_CYC_END = VCC; + FB_REGDDR = FR_WAIT; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + END CASE; +-- DDR STEUERUNG ----------------------------------------------------- +-- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE; + VCKE = VIDEO_RAM_CTR0; + nVCS = !VIDEO_RAM_CTR1; + DDR_REFRESH_ON = VIDEO_RAM_CTR2; + DDR_CONFIG = VIDEO_RAM_CTR3; + FIFO_ACTIVE = VIDEO_RAM_CTR8; +-------------------------------- + CPU_ROW_ADR[] = FB_ADR[26..14]; + CPU_BA[] = FB_ADR[13..12]; + CPU_COL_ADR[] = FB_ADR[11..2]; + nVRAS = !VRAS; + nVCAS = !VCAS; + nVWE = !VWE; + SR_DDR_WR.CLK = DDRCLK0; + SR_DDRWR_D_SEL.CLK = DDRCLK0; + SR_VDMP[7..0].CLK = DDRCLK0; + SR_FIFO_WRE.CLK = DDRCLK0; + CPU_AC.CLK = DDRCLK0; + FIFO_AC.CLK = DDRCLK0; + BLITTER_AC.CLK = DDRCLK0; + DDRWR_D_SEL1 = BLITTER_AC; +-- SELECT LOGIC + DDR_SEL = FB_ALE & FB_AD[31..30]==B"01"; + DDR_CS.CLK = MAIN_CLK; + DDR_CS.ENA = FB_ALE; + DDR_CS = DDR_SEL; +-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER + CPU_SIG = DDR_SEL & (nFB_WR # !LINE) & !DDR_CONFIG -- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG + # DDR_SEL & DDR_CONFIG -- CONFIG SOFORT LOS + # FB_REGDDR==FR_S1 & !nFB_WR; -- LINE WRITE SPÄTER + CPU_REQ.CLK = DDR_SYNC_66M; + CPU_REQ = CPU_SIG + # CPU_REQ & FB_REGDDR!=FR_S1 & FB_REGDDR!=FR_S3 & !BUS_CYC_END & !BUS_CYC; -- HALTEN BUS CYC BEGONNEN ODER FERTIG + BUS_CYC.CLK = DDRCLK0; + BUS_CYC = BUS_CYC & !BUS_CYC_END; + -- STATE MACHINE SYNCHRONISIEREN ----------------- + MCS[].CLK = DDRCLK0; + MCS0 = MAIN_CLK; + MCS1 = MCS0; + CPU_DDR_SYNC.CLK = DDRCLK0; + CPU_DDR_SYNC = MCS[]==2 & VCKE & !nVCS; -- NUR 1 WENN EIN + --------------------------------------------------- + VA_S[].CLK = DDRCLK0; + BA_S[].CLK = DDRCLK0; + VA[] = VA_S[]; + BA[] = BA_S[]; + VA_P[].CLK = DDRCLK0; + BA_P[].CLK = DDRCLK0; +-- DDR STATE MACHINE ----------------------------------------------- + DDR_SM.CLK = DDRCLK0; + CASE DDR_SM IS + WHEN DS_T1 => + IF DDR_REFRESH_REQ THEN + DDR_SM = DS_R2; + ELSE + IF CPU_DDR_SYNC THEN -- SYNCHRON UND EIN? + IF DDR_CONFIG THEN -- JA + DDR_SM = DS_C2; + ELSE + IF CPU_REQ THEN -- BEI WAIT UND LINE WRITE + VA_S[] = CPU_ROW_ADR[]; + BA_S[] = CPU_BA[]; + CPU_AC = VCC; + BUS_CYC = VCC; + DDR_SM = DS_T2B; + ELSE + IF FIFO_REQ # !BLITTER_REQ THEN -- FIFO IST DEFAULT + VA_P[] = FIFO_ROW_ADR[]; + BA_P[] = FIFO_BA[]; + FIFO_AC = VCC; -- VORBESETZEN + ELSE + VA_P[] = BLITTER_ROW_ADR[]; + BA_P[] = BLITTER_BA[]; + BLITTER_AC = VCC; -- VORBESETZEN + END IF; + DDR_SM = DS_T2A; + END IF; + END IF; + ELSE + DDR_SM = DS_T1; -- NEIN ->SYNCHRONISIEREN + END IF; + END IF; + + WHEN DS_T2A => -- SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK *** + IF DDR_SEL & (nFB_WR # !LINE) THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO PAGE + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + ELSE + VRAS = FIFO_AC & FIFO_REQ # BLITTER_AC & BLITTER_REQ; + VA[] = VA_P[]; + BA[] = BA_P[]; + VA_S[10] = !(FIFO_AC & FIFO_REQ); + FIFO_BANK_OK = FIFO_AC & FIFO_REQ; + FIFO_AC = FIFO_AC & FIFO_REQ; + BLITTER_AC = BLITTER_AC & BLITTER_REQ; + END IF; + DDR_SM = DS_T3; + + WHEN DS_T2B => + VRAS = VCC; + FIFO_BANK_NOT_OK = VCC; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + DDR_SM = DS_T3; + + WHEN DS_T3 => + CPU_AC = CPU_AC; + FIFO_AC = FIFO_AC; + BLITTER_AC = BLITTER_AC; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + IF !nFB_WR & CPU_AC # BLITTER_WR & BLITTER_AC THEN + DDR_SM = DS_T4W; + ELSE + IF CPU_AC THEN -- CPU? + VA_S[9..0] = CPU_COL_ADR[]; + BA_S[] = CPU_BA[]; + DDR_SM = DS_T4R; + ELSE + IF FIFO_AC THEN -- FIFO? + VA_S[9..0] = FIFO_COL_ADR[]; + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T4F; + ELSE + IF BLITTER_AC THEN + VA_S[9..0] = BLITTER_COL_ADR[]; + BA_S[] = BLITTER_BA[]; + DDR_SM = DS_T4R; + ELSE + DDR_SM = DS_N8; + END IF; + END IF; + END IF; + END IF; +-- READ + WHEN DS_T4R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + SR_DDR_FB = CPU_AC; -- READ DATEN FÜR CPU + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER DACK AND BLITTER LATCH DATEN + DDR_SM = DS_T5R; + + WHEN DS_T5R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + IF FIFO_REQ & FIFO_BANK_OK THEN -- FIFO READ EINSCHIEBEN WENN BANK OK + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- MANUEL PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- WRITE + WHEN DS_T4W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER ACK AND BLITTER LATCH DATEN + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + DDR_SM = DS_T5W; + + WHEN DS_T5W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VA_S[9..0] = CPU_AC & CPU_COL_ADR[] + # BLITTER_AC & BLITTER_COL_ADR[]; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + BA_S[] = CPU_AC & CPU_BA[] + # BLITTER_AC & BLITTER_BA[]; + SR_VDMP[7..4] = FB_B[]; -- BYTE ENABLE WRITE + SR_VDMP[3..0] = LINE & B"1111"; -- LINE ENABLE WRITE + DDR_SM = DS_T6W; + + WHEN DS_T6W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + VWE = VCC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITER + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_VDMP[] = LINE & B"11111111"; -- WENN LINE DANN ACTIV + DDR_SM = DS_T7W; + + WHEN DS_T7W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITE + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + DDR_SM = DS_T8W; + + WHEN DS_T8W => + DDR_SM = DS_T9W; + + WHEN DS_T9W => + IF FIFO_REQ & FIFO_BANK_OK THEN + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- FIFO READ + WHEN DS_T4F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T5F; + + WHEN DS_T5F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- NOCH OFFEN LASSEN + END IF; + + WHEN DS_T6F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + + WHEN DS_T7F => + IF CPU_REQ & FIFO_MW[]>FIFO_LWM THEN + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T8F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + END IF; + END IF; + + WHEN DS_T8F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + IF FIFO_MW[] + ELSE + DDR_SM = DS_T9F; + END IF; + + WHEN DS_T9F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_P[9..0] = FIFO_COL_ADR[]+4; + VA_P[10] = GND; -- NON AUTO PRECHARGE + BA_P[] = FIFO_BA[]; + DDR_SM = DS_T10F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + END IF; + + WHEN DS_T10F => + IF DDR_SEL & (nFB_WR # !LINE) & FB_AD[13..12]!=FIFO_BA[] THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO BANK + DDR_SM = DS_T3; + ELSE + VCAS = VCC; + VA[] = VA_P[]; + BA[] = BA_P[]; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + END IF; + +-- CONFIG CYCLUS + WHEN DS_C2 => + DDR_SM = DS_C3; + WHEN DS_C3 => + BUS_CYC = CPU_REQ; + DDR_SM = DS_C4; + WHEN DS_C4 => + IF CPU_REQ THEN + DDR_SM = DS_C5; + ELSE + DDR_SM = DS_T1; + END IF; + WHEN DS_C5 => + DDR_SM = DS_C6; + WHEN DS_C6 => + VA_S[] = FB_AD[12..0]; + BA_S[] = FB_AD[14..13]; + DDR_SM = DS_C7; + WHEN DS_C7 => + VRAS = FB_AD18 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VCAS = FB_AD17 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VWE = FB_AD16 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + DDR_SM = DS_N8; +-- CLOSE FIFO BANK + WHEN DS_CB6 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_N7; + WHEN DS_CB8 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_T1; +-- REFRESH 70NS = 10 ZYCLEN + WHEN DS_R2 => + IF DDR_REFRESH_SIG[]==9 THEN -- EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN + VRAS = VCC; -- ALLE BANKS SCHLIESSEN + VWE = VCC; + VA[10] = VCC; + FIFO_BANK_NOT_OK = VCC; + DDR_SM = DS_R4; + ELSE + VCAS = VCC; + VRAS = VCC; + DDR_SM = DS_R3; + END IF; + WHEN DS_R3 => + DDR_SM = DS_R4; + WHEN DS_R4 => + DDR_SM = DS_R5; + WHEN DS_R5 => + DDR_SM = DS_R6; + WHEN DS_R6 => + DDR_SM = DS_N5; +-- LEERSCHLAUFE + WHEN DS_N5 => + DDR_SM = DS_N6; + WHEN DS_N6 => + DDR_SM = DS_N7; + WHEN DS_N7 => + DDR_SM = DS_N8; + WHEN DS_N8 => + DDR_SM = DS_T1; + END CASE; + +--------------------------------------------------------------- +-- BLITTER ---------------------- +----------------------------------------- + BLITTER_REQ.CLK = DDRCLK0; + BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS; + BLITTER_ROW_ADR[] = BLITTER_ADR[26..14]; + BLITTER_BA1 = BLITTER_ADR13; + BLITTER_BA0 = BLITTER_ADR12; + BLITTER_COL_ADR[] = BLITTER_ADR[11..2]; +------------------------------------------------------------------------------ +-- FIFO --------------------------------- +-------------------------------------------------------- + FIFO_REQ.CLK = DDRCLK0; + FIFO_REQ = (FIFO_MW[]2048 33MHz CLOCKS +----------------------------------------------------------------------------------------- + DDR_REFRESH_CNT[].CLK = CLK33M; + DDR_REFRESH_CNT[] = DDR_REFRESH_CNT[]+1; -- ZÄHLEN 0-2047 + REFRESH_TIME.CLK = DDRCLK0; + REFRESH_TIME = DDR_REFRESH_CNT[]==0 & !MAIN_CLK; -- SYNC + DDR_REFRESH_SIG[].CLK = DDRCLK0; + DDR_REFRESH_SIG[].ENA = REFRESH_TIME # DDR_SM==DS_R6; + DDR_REFRESH_SIG[] = REFRESH_TIME & 9 & DDR_REFRESH_ON & !DDR_CONFIG -- 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF) + # !REFRESH_TIME & (DDR_REFRESH_SIG[]-1) & DDR_REFRESH_ON & !DDR_CONFIG; -- MINUS 1 WENN GEMACHT + DDR_REFRESH_REQ.CLK = DDRCLK0; + DDR_REFRESH_REQ = DDR_REFRESH_SIG[]!=0 & DDR_REFRESH_ON & !REFRESH_TIME & !DDR_CONFIG; +----------------------------------------------------------- +-- VIDEO REGISTER ----------------------- +--------------------------------------------------------------------------------------------------------------------- + VIDEO_BASE_L_D[].CLK = MAIN_CLK; + VIDEO_BASE_L = !nFB_CS1 & FB_ADR[19..1]==H"7C106"; -- 820D/2 + VIDEO_BASE_L_D[] = FB_AD[23..16]; -- SORRY, NUR 16 BYT GRENZEN + VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1; + + VIDEO_BASE_M_D[].CLK = MAIN_CLK; + VIDEO_BASE_M = !nFB_CS1 & FB_ADR[19..1]==H"7C101"; -- 8203/2 + VIDEO_BASE_M_D[] = FB_AD[23..16]; + VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3; + + VIDEO_BASE_H_D[].CLK = MAIN_CLK; + VIDEO_BASE_H = !nFB_CS1 & FB_ADR[19..1]==H"7C100"; -- 8200-1/2 + VIDEO_BASE_H_D[] = FB_AD[23..16]; + VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1; + VIDEO_BASE_X_D[].CLK = MAIN_CLK; + VIDEO_BASE_X_D[] = FB_AD[26..24]; + VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0; + + VIDEO_CNT_L = !nFB_CS1 & FB_ADR[19..1]==H"7C104"; -- 8209/2 + VIDEO_CNT_M = !nFB_CS1 & FB_ADR[19..1]==H"7C103"; -- 8207/2 + VIDEO_CNT_H = !nFB_CS1 & FB_ADR[19..1]==H"7C102"; -- 8204,5/2 + + FB_AD[31..24] = lpm_bustri_BYT( + VIDEO_BASE_H & (0,VIDEO_BASE_X_D[]) + # VIDEO_CNT_H & (0,VIDEO_ACT_ADR[26..24]) + ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE); + + FB_AD[23..16] = lpm_bustri_BYT( + VIDEO_BASE_L & VIDEO_BASE_L_D[] + # VIDEO_BASE_M & VIDEO_BASE_M_D[] + # VIDEO_BASE_H & VIDEO_BASE_H_D[] + # VIDEO_CNT_L & VIDEO_ACT_ADR[7..0] + # VIDEO_CNT_M & VIDEO_ACT_ADR[15..8] + # VIDEO_CNT_H & VIDEO_ACT_ADR[23..16] + ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE); +END; + diff --git a/FPGA_quartus_GE/Video/DDR_CTR.tdf.bak b/FPGA_quartus_GE/Video/DDR_CTR.tdf.bak new file mode 100644 index 0000000..ead66e8 --- /dev/null +++ b/FPGA_quartus_GE/Video/DDR_CTR.tdf.bak @@ -0,0 +1,660 @@ +TITLE "DDR_CTR"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_BYT.inc"; + +-- FIFO WATER MARK +CONSTANT FIFO_LWM = 0; +CONSTANT FIFO_MWM = 200; +CONSTANT FIFO_HWM = 500; + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN DDR_CTR +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + FB_ADR[31..0] : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nRSTO : INPUT; + MAIN_CLK : INPUT; + FB_ALE : INPUT; + nFB_WR : INPUT; + DDR_SYNC_66M : INPUT; + CLR_FIFO : INPUT; + VIDEO_RAM_CTR[15..0] : INPUT; + BLITTER_ADR[31..0] : INPUT; + BLITTER_SIG : INPUT; + BLITTER_WR : INPUT; + DDRCLK0 : INPUT; + CLK33M : INPUT; + FIFO_MW[8..0] : INPUT; + VA[12..0] : OUTPUT; + nVWE : OUTPUT; + nVRAS : OUTPUT; + nVCS : OUTPUT; + VCKE : OUTPUT; + nVCAS : OUTPUT; + FB_LE[3..0] : OUTPUT; + FB_VDOE[3..0] : OUTPUT; + CLEAR_FIFO_CNT : OUTPUT; + SR_FIFO_WRE : OUTPUT; + SR_DDR_FB : OUTPUT; + SR_DDR_WR : OUTPUT; + SR_DDRWR_D_SEL : OUTPUT; + SR_VDMP[7..0] : OUTPUT; + VIDEO_DDR_TA : OUTPUT; + SR_BLITTER_DACK : OUTPUT; + BA[1..0] : OUTPUT; + DDRWR_D_SEL1 : OUTPUT; + VDM_SEL[3..0] : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3); + DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2A,DS_T2B,DS_T3,DS_N5,DS_N6, DS_N7, DS_N8, -- START (NORMAL 8 CYCLES TOTAL = 60ns) + DS_C2,DS_C3,DS_C4, DS_C5, DS_C6, DS_C7, -- CONFIG + DS_T4R,DS_T5R, -- READ CPU UND BLITTER, + DS_T4W,DS_T5W,DS_T6W,DS_T7W,DS_T8W,DS_T9W, -- WRITE CPU UND BLITTER + DS_T4F,DS_T5F,DS_T6F,DS_T7F,DS_T8F,DS_T9F,DS_T10F, -- READ FIFO + DS_CB6, DS_CB8, -- CLOSE FIFO BANK + DS_R2,DS_R3,DS_R4, DS_R5, DS_R6); -- REFRESH 10X7.5NS=75NS + LINE :NODE; + FB_B[3..0] :NODE; + VCAS :NODE; + VRAS :NODE; + VWE :NODE; + VA_P[12..0] :DFF; + BA_P[1..0] :DFF; + VA_S[12..0] :DFF; + BA_S[1..0] :DFF; + MCS[1..0] :DFF; + CPU_DDR_SYNC :DFF; + DDR_SEL :NODE; + DDR_CS :DFFE; + DDR_CONFIG :NODE; + SR_DDR_WR :DFF; + SR_DDRWR_D_SEL :DFF; + SR_VDMP[7..0] :DFF; + CPU_ROW_ADR[12..0] :NODE; + CPU_BA[1..0] :NODE; + CPU_COL_ADR[9..0] :NODE; + CPU_SIG :NODE; + CPU_REQ :DFF; + CPU_AC :DFF; + BUS_CYC :DFF; + BUS_CYC_END :NODE; + BLITTER_REQ :DFF; + BLITTER_AC :DFF; + BLITTER_ROW_ADR[12..0] :NODE; + BLITTER_BA[1..0] :NODE; + BLITTER_COL_ADR[9..0] :NODE; + FIFO_REQ :DFF; + FIFO_AC :DFF; + FIFO_ROW_ADR[12..0] :NODE; + FIFO_BA[1..0] :NODE; + FIFO_COL_ADR[9..0] :NODE; + FIFO_ACTIVE :NODE; + CLR_FIFO_SYNC :DFF; + CLEAR_FIFO_CNT :DFF; + STOP :DFF; + SR_FIFO_WRE :DFF; + FIFO_BANK_OK :DFF; + FIFO_BANK_NOT_OK :NODE; + DDR_REFRESH_ON :NODE; + DDR_REFRESH_CNT[10..0] :DFF; + DDR_REFRESH_REQ :DFF; + DDR_REFRESH_SIG[3..0] :DFFE; + REFRESH_TIME :DFF; + VIDEO_BASE_L_D[7..0] :DFFE; + VIDEO_BASE_L :NODE; + VIDEO_BASE_M_D[7..0] :DFFE; + VIDEO_BASE_M :NODE; + VIDEO_BASE_H_D[7..0] :DFFE; + VIDEO_BASE_H :NODE; + VIDEO_BASE_X_D[2..0] :DFFE; + VIDEO_ADR_CNT[22..0] :DFFE; + VIDEO_CNT_L :NODE; + VIDEO_CNT_M :NODE; + VIDEO_CNT_H :NODE; + VIDEO_BASE_ADR[22..0] :NODE; + VIDEO_ACT_ADR[26..0] :NODE; + +BEGIN + LINE = FB_SIZE0 & FB_SIZE1; +-- BYT SELECT + FB_B0 = FB_ADR[1..0]==0 -- ADR==0 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + FB_REGDDR.CLK = MAIN_CLK; + CASE FB_REGDDR IS + WHEN FR_WAIT => + FB_LE0 = !nFB_WR; + IF BUS_CYC # DDR_SEL & LINE & !nFB_WR THEN -- LOS WENN BEREIT ODER IMMER BEI LINE WRITE + FB_REGDDR = FR_S0; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S0 => + IF DDR_CS THEN + FB_LE0 = !nFB_WR; + VIDEO_DDR_TA = VCC; + IF LINE THEN + FB_VDOE0 = !nFB_OE & !DDR_CONFIG; + FB_REGDDR = FR_S1; + ELSE + BUS_CYC_END = VCC; + FB_VDOE0 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_REGDDR = FR_WAIT; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S1 => + IF DDR_CS THEN + FB_VDOE1 = !nFB_OE & !DDR_CONFIG; + FB_LE1 = !nFB_WR; + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S2; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S2 => + IF DDR_CS THEN + FB_VDOE2 = !nFB_OE & !DDR_CONFIG; + FB_LE2 = !nFB_WR; + IF !BUS_CYC & LINE & !nFB_WR THEN -- BEI LINE WRITE EVT. WARTEN + FB_REGDDR = FR_S2; + ELSE + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S3; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S3 => + IF DDR_CS THEN + FB_VDOE3 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_LE3 = !nFB_WR; + VIDEO_DDR_TA = VCC; + BUS_CYC_END = VCC; + FB_REGDDR = FR_WAIT; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + END CASE; +-- DDR STEUERUNG ----------------------------------------------------- +-- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE; + VCKE = VIDEO_RAM_CTR0; + nVCS = !VIDEO_RAM_CTR1; + DDR_REFRESH_ON = VIDEO_RAM_CTR2; + DDR_CONFIG = VIDEO_RAM_CTR3; + FIFO_ACTIVE = VIDEO_RAM_CTR8; +-------------------------------- + CPU_ROW_ADR[] = FB_ADR[26..14]; + CPU_BA[] = FB_ADR[13..12]; + CPU_COL_ADR[] = FB_ADR[11..2]; + nVRAS = !VRAS; + nVCAS = !VCAS; + nVWE = !VWE; + SR_DDR_WR.CLK = DDRCLK0; + SR_DDRWR_D_SEL.CLK = DDRCLK0; + SR_VDMP[7..0].CLK = DDRCLK0; + SR_FIFO_WRE.CLK = DDRCLK0; + CPU_AC.CLK = DDRCLK0; + FIFO_AC.CLK = DDRCLK0; + BLITTER_AC.CLK = DDRCLK0; + DDRWR_D_SEL1 = BLITTER_AC; +-- SELECT LOGIC + DDR_SEL = FB_ALE & FB_AD[31..30]==B"01"; + DDR_CS.CLK = MAIN_CLK; + DDR_CS.ENA = FB_ALE; + DDR_CS = DDR_SEL; +-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER + CPU_SIG = DDR_SEL & (nFB_WR # !LINE) & !DDR_CONFIG -- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG + # DDR_SEL & DDR_CONFIG -- CONFIG SOFORT LOS + # FB_REGDDR==FR_S1 & !nFB_WR; -- LINE WRITE SPÄTER + CPU_REQ.CLK = DDR_SYNC_66M; + CPU_REQ = CPU_SIG + # CPU_REQ & FB_REGDDR!=FR_S1 & FB_REGDDR!=FR_S3 & !BUS_CYC_END & !BUS_CYC; -- HALTEN BUS CYC BEGONNEN ODER FERTIG + BUS_CYC.CLK = DDRCLK0; + BUS_CYC = BUS_CYC & !BUS_CYC_END; + -- STATE MACHINE SYNCHRONISIEREN ----------------- + MCS[].CLK = DDRCLK0; + MCS0 = MAIN_CLK; + MCS1 = MCS0; + CPU_DDR_SYNC.CLK = DDRCLK0; + CPU_DDR_SYNC = MCS[]==2 & VCKE & !nVCS; -- NUR 1 WENN EIN + --------------------------------------------------- + VA_S[].CLK = DDRCLK0; + BA_S[].CLK = DDRCLK0; + VA[] = VA_S[]; + BA[] = BA_S[]; + VA_P[].CLK = DDRCLK0; + BA_P[].CLK = DDRCLK0; +-- DDR STATE MACHINE ----------------------------------------------- + DDR_SM.CLK = DDRCLK0; + CASE DDR_SM IS + WHEN DS_T1 => + IF DDR_REFRESH_REQ THEN + DDR_SM = DS_R2; + ELSE + IF CPU_DDR_SYNC THEN -- SYNCHRON UND EIN? + IF DDR_CONFIG THEN -- JA + DDR_SM = DS_C2; + ELSE + IF CPU_REQ THEN -- BEI WAIT UND LINE WRITE + VA_S[] = CPU_ROW_ADR[]; + BA_S[] = CPU_BA[]; + CPU_AC = VCC; + BUS_CYC = VCC; + DDR_SM = DS_T2B; + ELSE + IF FIFO_REQ # !BLITTER_REQ THEN -- FIFO IST DEFAULT + VA_P[] = FIFO_ROW_ADR[]; + BA_P[] = FIFO_BA[]; + FIFO_AC = VCC; -- VORBESETZEN + ELSE + VA_P[] = BLITTER_ROW_ADR[]; + BA_P[] = BLITTER_BA[]; + BLITTER_AC = VCC; -- VORBESETZEN + END IF; + DDR_SM = DS_T2A; + END IF; + END IF; + ELSE + DDR_SM = DS_T1; -- NEIN ->SYNCHRONISIEREN + END IF; + END IF; + + WHEN DS_T2A => -- SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK *** + IF DDR_SEL & (nFB_WR # !LINE) THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO PAGE + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + ELSE + VRAS = FIFO_AC & FIFO_REQ # BLITTER_AC & BLITTER_REQ; + VA[] = VA_P[]; + BA[] = BA_P[]; + VA_S[10] = !(FIFO_AC & FIFO_REQ); + FIFO_BANK_OK = FIFO_AC & FIFO_REQ; + FIFO_AC = FIFO_AC & FIFO_REQ; + BLITTER_AC = BLITTER_AC & BLITTER_REQ; + END IF; + DDR_SM = DS_T3; + + WHEN DS_T2B => + VRAS = VCC; + FIFO_BANK_NOT_OK = VCC; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + DDR_SM = DS_T3; + + WHEN DS_T3 => + CPU_AC = CPU_AC; + FIFO_AC = FIFO_AC; + BLITTER_AC = BLITTER_AC; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + IF !nFB_WR & CPU_AC # BLITTER_WR & BLITTER_AC THEN + DDR_SM = DS_T4W; + ELSE + IF CPU_AC THEN -- CPU? + VA_S[9..0] = CPU_COL_ADR[]; + BA_S[] = CPU_BA[]; + DDR_SM = DS_T4R; + ELSE + IF FIFO_AC THEN -- FIFO? + VA_S[9..0] = FIFO_COL_ADR[]; + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T4F; + ELSE + IF BLITTER_AC THEN + VA_S[9..0] = BLITTER_COL_ADR[]; + BA_S[] = BLITTER_BA[]; + DDR_SM = DS_T4R; + ELSE + DDR_SM = DS_N8; + END IF; + END IF; + END IF; + END IF; +-- READ + WHEN DS_T4R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + SR_DDR_FB = CPU_AC; -- READ DATEN FÜR CPU + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER DACK AND BLITTER LATCH DATEN + DDR_SM = DS_T5R; + + WHEN DS_T5R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + IF FIFO_REQ & FIFO_BANK_OK THEN -- FIFO READ EINSCHIEBEN WENN BANK OK + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- MANUEL PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- WRITE + WHEN DS_T4W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER ACK AND BLITTER LATCH DATEN + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + DDR_SM = DS_T5W; + + WHEN DS_T5W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VA_S[9..0] = CPU_AC & CPU_COL_ADR[] + # BLITTER_AC & BLITTER_COL_ADR[]; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + BA_S[] = CPU_AC & CPU_BA[] + # BLITTER_AC & BLITTER_BA[]; + SR_VDMP[7..4] = FB_B[]; -- BYTE ENABLE WRITE + SR_VDMP[3..0] = LINE & B"1111"; -- LINE ENABLE WRITE + DDR_SM = DS_T6W; + + WHEN DS_T6W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + VWE = VCC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITER + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_VDMP[] = LINE & B"11111111"; -- WENN LINE DANN ACTIV + DDR_SM = DS_T7W; + + WHEN DS_T7W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITE + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + DDR_SM = DS_T8W; + + WHEN DS_T8W => + DDR_SM = DS_T9W; + + WHEN DS_T9W => + IF FIFO_REQ & FIFO_BANK_OK THEN + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- FIFO READ + WHEN DS_T4F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T5F; + + WHEN DS_T5F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- NOCH OFFEN LASSEN + END IF; + + WHEN DS_T6F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + + WHEN DS_T7F => + IF CPU_REQ & FIFO_MW[]>FIFO_LWM THEN + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T8F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + END IF; + END IF; + + WHEN DS_T8F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + IF FIFO_MW[] + ELSE + DDR_SM = DS_T9F; + END IF; + + WHEN DS_T9F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_P[9..0] = FIFO_COL_ADR[]+4; + VA_P[10] = GND; -- NON AUTO PRECHARGE + BA_P[] = FIFO_BA[]; + DDR_SM = DS_T10F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + END IF; + + WHEN DS_T10F => + IF DDR_SEL & (nFB_WR # !LINE) & FB_AD[13..12]!=FIFO_BA[] THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO BANK + DDR_SM = DS_T3; + ELSE + VCAS = VCC; + VA[] = VA_P[]; + BA[] = BA_P[]; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + END IF; + +-- CONFIG CYCLUS + WHEN DS_C2 => + DDR_SM = DS_C3; + WHEN DS_C3 => + BUS_CYC = CPU_REQ; + DDR_SM = DS_C4; + WHEN DS_C4 => + IF CPU_REQ THEN + DDR_SM = DS_C5; + ELSE + DDR_SM = DS_T1; + END IF; + WHEN DS_C5 => + DDR_SM = DS_C6; + WHEN DS_C6 => + VA_S[] = FB_AD[12..0]; + BA_S[] = FB_AD[14..13]; + DDR_SM = DS_C7; + WHEN DS_C7 => + VRAS = FB_AD18 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VCAS = FB_AD17 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VWE = FB_AD16 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + DDR_SM = DS_N8; +-- CLOSE FIFO BANK + WHEN DS_CB6 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_N7; + WHEN DS_CB8 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_T1; +-- REFRESH 70NS = 10 ZYCLEN + WHEN DS_R2 => + IF DDR_REFRESH_SIG[]==9 THEN -- EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN + VRAS = VCC; -- ALLE BANKS SCHLIESSEN + VWE = VCC; + VA[10] = VCC; + FIFO_BANK_NOT_OK = VCC; + DDR_SM = DS_R4; + ELSE + VCAS = VCC; + VRAS = VCC; + DDR_SM = DS_R3; + END IF; + WHEN DS_R3 => + DDR_SM = DS_R4; + WHEN DS_R4 => + DDR_SM = DS_R5; + WHEN DS_R5 => + DDR_SM = DS_R6; + WHEN DS_R6 => + DDR_SM = DS_N5; +-- LEERSCHLAUFE + WHEN DS_N5 => + DDR_SM = DS_N6; + WHEN DS_N6 => + DDR_SM = DS_N7; + WHEN DS_N7 => + DDR_SM = DS_N8; + WHEN DS_N8 => + DDR_SM = DS_T1; + END CASE; + +--------------------------------------------------------------- +-- BLITTER ---------------------- +----------------------------------------- + BLITTER_REQ.CLK = DDRCLK0; + BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS; + BLITTER_ROW_ADR[] = BLITTER_ADR[26..14]; + BLITTER_BA1 = BLITTER_ADR13; + BLITTER_BA0 = BLITTER_ADR12; + BLITTER_COL_ADR[] = BLITTER_ADR[11..2]; +------------------------------------------------------------------------------ +-- FIFO --------------------------------- +-------------------------------------------------------- + FIFO_REQ.CLK = DDRCLK0; + FIFO_REQ = (FIFO_MW[]2048 33MHz CLOCKS +----------------------------------------------------------------------------------------- + DDR_REFRESH_CNT[].CLK = CLK33M; + DDR_REFRESH_CNT[] = DDR_REFRESH_CNT[]+1; -- ZÄHLEN 0-2047 + REFRESH_TIME.CLK = DDRCLK0; + REFRESH_TIME = DDR_REFRESH_CNT[]==0 & !MAIN_CLK; -- SYNC + DDR_REFRESH_SIG[].CLK = DDRCLK0; + DDR_REFRESH_SIG[].ENA = REFRESH_TIME # DDR_SM==DS_R6; + DDR_REFRESH_SIG[] = REFRESH_TIME & 9 & DDR_REFRESH_ON & !DDR_CONFIG -- 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF) + # !REFRESH_TIME & (DDR_REFRESH_SIG[]-1) & DDR_REFRESH_ON & !DDR_CONFIG; -- MINUS 1 WENN GEMACHT + DDR_REFRESH_REQ.CLK = DDRCLK0; + DDR_REFRESH_REQ = DDR_REFRESH_SIG[]!=0 & DDR_REFRESH_ON & !REFRESH_TIME & !DDR_CONFIG; +----------------------------------------------------------- +-- VIDEO REGISTER ----------------------- +--------------------------------------------------------------------------------------------------------------------- + VIDEO_BASE_L_D[].CLK = MAIN_CLK; + VIDEO_BASE_L = !nFB_CS1 & FB_ADR[19..1]==H"7C106"; -- 820D/2 + VIDEO_BASE_L_D[] = FB_AD[23..16]; -- SORRY, NUR 16 BYT GRENZEN + VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1; + + VIDEO_BASE_M_D[].CLK = MAIN_CLK; + VIDEO_BASE_M = !nFB_CS1 & FB_ADR[19..1]==H"7C101"; -- 8203/2 + VIDEO_BASE_M_D[] = FB_AD[23..16]; + VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3; + + VIDEO_BASE_H_D[].CLK = MAIN_CLK; + VIDEO_BASE_H = !nFB_CS1 & FB_ADR[19..1]==H"7C100"; -- 8200-1/2 + VIDEO_BASE_H_D[] = FB_AD[23..16]; + VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1; + VIDEO_BASE_X_D[].CLK = MAIN_CLK; + VIDEO_BASE_X_D[] = FB_AD[26..24]; + VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0; + + VIDEO_CNT_L = !nFB_CS1 & FB_ADR[19..1]==H"7C104"; -- 8209/2 + VIDEO_CNT_M = !nFB_CS1 & FB_ADR[19..1]==H"7C103"; -- 8207/2 + VIDEO_CNT_H = !nFB_CS1 & FB_ADR[19..1]==H"7C102"; -- 8204,5/2 + + FB_AD[31..24] = lpm_bustri_BYT( + VIDEO_BASE_H & (0,VIDEO_BASE_X_D[]) + # VIDEO_CNT_H & (0,VIDEO_ACT_ADR[26..24]) + ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE); + + FB_AD[23..16] = lpm_bustri_BYT( + VIDEO_BASE_L & VIDEO_BASE_L_D[] + # VIDEO_BASE_M & VIDEO_BASE_M_D[] + # VIDEO_BASE_H & VIDEO_BASE_H_D[] + # VIDEO_CNT_L & VIDEO_ACT_ADR[7..0] + # VIDEO_CNT_M & VIDEO_ACT_ADR[15..8] + # VIDEO_CNT_H & VIDEO_ACT_ADR[23..16] + ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE); +END; + diff --git a/FPGA_quartus_GE/Video/DDR_CTR.v b/FPGA_quartus_GE/Video/DDR_CTR.v new file mode 100644 index 0000000..238a56b --- /dev/null +++ b/FPGA_quartus_GE/Video/DDR_CTR.v @@ -0,0 +1,1095 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: DDR_CTR.tdf +// Verilog Design Output: DDR_CTR.v +// Created 03-Mar-2014 09:18 PM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + +// DDR_CTR + + +// CREATED BY FREDI ASCHWANDEN +// FIFO WATER MARK +// {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! +module DDR_CTR(FB_ADR, nFB_CS1, nFB_CS2, nFB_CS3, nFB_OE, FB_SIZE0, FB_SIZE1, + nRSTO, MAIN_CLK, FB_ALE, nFB_WR, DDR_SYNC_66M, CLR_FIFO, VIDEO_RAM_CTR, + BLITTER_ADR, BLITTER_SIG, BLITTER_WR, DDRCLK0, CLK33M, FIFO_MW, VA, nVWE, + nVRAS, nVCS, VCKE, nVCAS, FB_LE, FB_VDOE, SR_FIFO_WRE, SR_DDR_FB, + SR_DDR_WR, SR_DDRWR_D_SEL, SR_VDMP, VIDEO_DDR_TA, SR_BLITTER_DACK, BA, + DDRWR_D_SEL1, VDM_SEL, FB_AD); + +// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + input [31:0] FB_ADR; + input nFB_CS1, nFB_CS2, nFB_CS3, nFB_OE, FB_SIZE0, FB_SIZE1, nRSTO, + MAIN_CLK, FB_ALE, nFB_WR, DDR_SYNC_66M, CLR_FIFO; + input [15:0] VIDEO_RAM_CTR; + input [31:0] BLITTER_ADR; + input BLITTER_SIG, BLITTER_WR, DDRCLK0, CLK33M; + input [8:0] FIFO_MW; + output [12:0] VA; + output nVWE, nVRAS, nVCS, VCKE, nVCAS; + output [3:0] FB_LE; + output [3:0] FB_VDOE; + output SR_FIFO_WRE, SR_DDR_FB, SR_DDR_WR, SR_DDRWR_D_SEL; + output [7:0] SR_VDMP; + output VIDEO_DDR_TA, SR_BLITTER_DACK; + output [1:0] BA; + output DDRWR_D_SEL1; + output [3:0] VDM_SEL; + reg [3:0] FB_LE; + reg [3:0] FB_VDOE; + reg SR_DDR_FB, VIDEO_DDR_TA, SR_BLITTER_DACK; + inout [31:0] FB_AD; + +// START (NORMAL 8 CYCLES TOTAL = 60ns) +// CONFIG +// READ CPU UND BLITTER, +// WRITE CPU UND BLITTER +// READ FIFO +// CLOSE FIFO BANK +// REFRESH 10X7.5NS=75NS + wire [2:0] FB_REGDDR_; + wire [5:0] DDR_SM_; + wire LINE; + wire [3:0] FB_B; + wire [12:0] VA_P; + wire [1:0] BA_P; + wire [12:0] VA_S; + wire [1:0] BA_S; + wire [1:0] MCS; + wire [1:0] MCS_d; + wire CPU_DDR_SYNC, CPU_DDR_SYNC_d, CPU_DDR_SYNC_clk, DDR_SEL, DDR_CS, + DDR_CS_d, DDR_CS_clk, DDR_CS_ena, DDR_CONFIG, SR_DDR_WR_clk, + SR_DDRWR_D_SEL_clk; + wire [12:0] CPU_ROW_ADR; + wire [1:0] CPU_BA; + wire [9:0] CPU_COL_ADR; + wire CPU_SIG, CPU_REQ, CPU_REQ_d, CPU_REQ_clk, CPU_AC, CPU_AC_clk, BUS_CYC, + BUS_CYC_d, BUS_CYC_clk, BLITTER_REQ, BLITTER_REQ_d, BLITTER_REQ_clk, + BLITTER_AC, BLITTER_AC_clk; + wire [12:0] BLITTER_ROW_ADR; + wire [1:0] BLITTER_BA; + wire [9:0] BLITTER_COL_ADR; + wire FIFO_REQ, FIFO_REQ_d, FIFO_REQ_clk, FIFO_AC, FIFO_AC_clk; + wire [12:0] FIFO_ROW_ADR; + wire [1:0] FIFO_BA; + wire [9:0] FIFO_COL_ADR; + wire FIFO_ACTIVE, CLR_FIFO_SYNC, CLR_FIFO_SYNC_d, CLR_FIFO_SYNC_clk, + CLEAR_FIFO_CNT, CLEAR_FIFO_CNT_d, CLEAR_FIFO_CNT_clk, STOP, STOP_d, + STOP_clk, SR_FIFO_WRE_clk, FIFO_BANK_OK, FIFO_BANK_OK_d, + FIFO_BANK_OK_clk, DDR_REFRESH_ON; + wire [10:0] DDR_REFRESH_CNT; + wire [10:0] DDR_REFRESH_CNT_d; + wire DDR_REFRESH_REQ, DDR_REFRESH_REQ_d, DDR_REFRESH_REQ_clk; + wire [3:0] DDR_REFRESH_SIG; + wire [3:0] DDR_REFRESH_SIG_d; + wire REFRESH_TIME, REFRESH_TIME_d, REFRESH_TIME_clk; + wire [7:0] VIDEO_BASE_L_D; + wire [7:0] VIDEO_BASE_L_D_d; + wire VIDEO_BASE_L; + wire [7:0] VIDEO_BASE_M_D; + wire [7:0] VIDEO_BASE_M_D_d; + wire VIDEO_BASE_M; + wire [7:0] VIDEO_BASE_H_D; + wire [7:0] VIDEO_BASE_H_D_d; + wire VIDEO_BASE_H; + wire [2:0] VIDEO_BASE_X_D; + wire [2:0] VIDEO_BASE_X_D_d; + wire [7:0] VIDEO_BASE_X_D_FULL; + wire [22:0] VIDEO_ADR_CNT; + wire [22:0] VIDEO_ADR_CNT_d; + wire VIDEO_CNT_L, VIDEO_CNT_M, VIDEO_CNT_H; + wire [22:0] VIDEO_BASE_ADR; + wire [26:0] VIDEO_ACT_ADR; + wire vcc, gnd; + wire [7:0] u0_data; + wire u0_enabledt; + wire [7:0] u0_tridata; + wire [7:0] u1_data; + wire u1_enabledt; + wire [7:0] u1_tridata; + wire FIFO_BANK_OK_d_2, BUS_CYC_d_1, BA0_1, BA1_1, VA0_1, VA1_1, VA2_1, + VA3_1, VA4_1, VA5_1, VA6_1, VA7_1, VA8_1, VA9_1, VA10_1, VA11_1, + VA12_1, VIDEO_BASE_X_D0_ena_ctrl, VIDEO_BASE_X_D0_clk_ctrl, + VIDEO_BASE_H_D0_ena_ctrl, VIDEO_BASE_H_D0_clk_ctrl, + VIDEO_BASE_M_D0_ena_ctrl, VIDEO_BASE_M_D0_clk_ctrl, + VIDEO_BASE_L_D0_ena_ctrl, VIDEO_BASE_L_D0_clk_ctrl, + DDR_REFRESH_SIG0_ena_ctrl, DDR_REFRESH_SIG0_clk_ctrl, + DDR_REFRESH_CNT0_clk_ctrl, VIDEO_ADR_CNT0_ena_ctrl, + VIDEO_ADR_CNT0_clk_ctrl, DDR_SM_0_clk_ctrl, BA_P0_clk_ctrl, + VA_P0_clk_ctrl, BA_S0_clk_ctrl, VA_S0_clk_ctrl, MCS0_clk_ctrl, + SR_VDMP0_clk_ctrl, FB_REGDDR_0_clk_ctrl; + reg [2:0] FB_REGDDR__d; + reg [2:0] FB_REGDDR__q; + reg [5:0] DDR_SM__d; + reg [5:0] DDR_SM__q; + reg VCAS, VRAS, VWE; + reg [12:0] VA_P_d; + reg [12:0] VA_P_q; + reg [1:0] BA_P_d; + reg [1:0] BA_P_q; + reg [12:0] VA_S_d; + reg [12:0] VA_S_q; + reg [1:0] BA_S_d; + reg [1:0] BA_S_q; + reg [1:0] MCS_q; + reg CPU_DDR_SYNC_q, DDR_CS_q, SR_DDR_WR_d, SR_DDR_WR_q, SR_DDRWR_D_SEL_d, + SR_DDRWR_D_SEL_q; + reg [7:0] SR_VDMP_d; + reg [7:0] SR_VDMP_q; + reg CPU_REQ_q, CPU_AC_d, CPU_AC_q, BUS_CYC_q, BUS_CYC_END, BLITTER_REQ_q, + BLITTER_AC_d, BLITTER_AC_q, FIFO_REQ_q, FIFO_AC_d, FIFO_AC_q, + CLR_FIFO_SYNC_q, CLEAR_FIFO_CNT_q, STOP_q, SR_FIFO_WRE_d, + SR_FIFO_WRE_q, FIFO_BANK_OK_q, FIFO_BANK_NOT_OK; + reg [10:0] DDR_REFRESH_CNT_q; + reg DDR_REFRESH_REQ_q; + reg [3:0] DDR_REFRESH_SIG_q; + reg REFRESH_TIME_q; + reg [7:0] VIDEO_BASE_L_D_q; + reg [7:0] VIDEO_BASE_M_D_q; + reg [7:0] VIDEO_BASE_H_D_q; + reg [2:0] VIDEO_BASE_X_D_q; + reg [22:0] VIDEO_ADR_CNT_q; + reg FIFO_BANK_OK_d_1, BUS_CYC_d_2, BA0_2, BA1_2, VA0_2, VA1_2, VA2_2, VA3_2, + VA4_2, VA5_2, VA6_2, VA7_2, VA8_2, VA9_2, VA10_2, VA11_2, VA12_2; + + +// Sub Module Section + lpm_bustri_BYT u0 (.data(u0_data), .enabledt(u0_enabledt), + .tridata(u0_tridata)); + + lpm_bustri_BYT u1 (.data(u1_data), .enabledt(u1_enabledt), + .tridata(u1_tridata)); + + + assign SR_FIFO_WRE = SR_FIFO_WRE_q; + always @(posedge SR_FIFO_WRE_clk) + SR_FIFO_WRE_q <= SR_FIFO_WRE_d; + + assign SR_DDR_WR = SR_DDR_WR_q; + always @(posedge SR_DDR_WR_clk) + SR_DDR_WR_q <= SR_DDR_WR_d; + + assign SR_DDRWR_D_SEL = SR_DDRWR_D_SEL_q; + always @(posedge SR_DDRWR_D_SEL_clk) + SR_DDRWR_D_SEL_q <= SR_DDRWR_D_SEL_d; + + assign SR_VDMP = SR_VDMP_q; + always @(posedge SR_VDMP0_clk_ctrl) + SR_VDMP_q <= SR_VDMP_d; + + always @(posedge FB_REGDDR_0_clk_ctrl) + FB_REGDDR__q <= FB_REGDDR__d; + + always @(posedge DDR_SM_0_clk_ctrl) + DDR_SM__q <= DDR_SM__d; + + always @(posedge VA_P0_clk_ctrl) + VA_P_q <= VA_P_d; + + always @(posedge BA_P0_clk_ctrl) + BA_P_q <= BA_P_d; + + always @(posedge VA_S0_clk_ctrl) + VA_S_q <= VA_S_d; + + always @(posedge BA_S0_clk_ctrl) + BA_S_q <= BA_S_d; + + always @(posedge MCS0_clk_ctrl) + MCS_q <= MCS_d; + + always @(posedge CPU_DDR_SYNC_clk) + CPU_DDR_SYNC_q <= CPU_DDR_SYNC_d; + + always @(posedge DDR_CS_clk) + if (DDR_CS_ena) + DDR_CS_q <= DDR_CS_d; + + always @(posedge CPU_REQ_clk) + CPU_REQ_q <= CPU_REQ_d; + + always @(posedge CPU_AC_clk) + CPU_AC_q <= CPU_AC_d; + + always @(posedge BUS_CYC_clk) + BUS_CYC_q <= BUS_CYC_d; + + always @(posedge BLITTER_REQ_clk) + BLITTER_REQ_q <= BLITTER_REQ_d; + + always @(posedge BLITTER_AC_clk) + BLITTER_AC_q <= BLITTER_AC_d; + + always @(posedge FIFO_REQ_clk) + FIFO_REQ_q <= FIFO_REQ_d; + + always @(posedge FIFO_AC_clk) + FIFO_AC_q <= FIFO_AC_d; + + always @(posedge CLR_FIFO_SYNC_clk) + CLR_FIFO_SYNC_q <= CLR_FIFO_SYNC_d; + + always @(posedge CLEAR_FIFO_CNT_clk) + CLEAR_FIFO_CNT_q <= CLEAR_FIFO_CNT_d; + + always @(posedge STOP_clk) + STOP_q <= STOP_d; + + always @(posedge FIFO_BANK_OK_clk) + FIFO_BANK_OK_q <= FIFO_BANK_OK_d; + + always @(posedge DDR_REFRESH_CNT0_clk_ctrl) + DDR_REFRESH_CNT_q <= DDR_REFRESH_CNT_d; + + always @(posedge DDR_REFRESH_REQ_clk) + DDR_REFRESH_REQ_q <= DDR_REFRESH_REQ_d; + + always @(posedge DDR_REFRESH_SIG0_clk_ctrl) + if (DDR_REFRESH_SIG0_ena_ctrl) + DDR_REFRESH_SIG_q <= DDR_REFRESH_SIG_d; + + always @(posedge REFRESH_TIME_clk) + REFRESH_TIME_q <= REFRESH_TIME_d; + + always @(posedge VIDEO_BASE_L_D0_clk_ctrl) + if (VIDEO_BASE_L_D0_ena_ctrl) + VIDEO_BASE_L_D_q <= VIDEO_BASE_L_D_d; + + always @(posedge VIDEO_BASE_M_D0_clk_ctrl) + if (VIDEO_BASE_M_D0_ena_ctrl) + VIDEO_BASE_M_D_q <= VIDEO_BASE_M_D_d; + + always @(posedge VIDEO_BASE_H_D0_clk_ctrl) + if (VIDEO_BASE_H_D0_ena_ctrl) + VIDEO_BASE_H_D_q <= VIDEO_BASE_H_D_d; + + always @(posedge VIDEO_BASE_X_D0_clk_ctrl) + if (VIDEO_BASE_X_D0_ena_ctrl) + VIDEO_BASE_X_D_q <= VIDEO_BASE_X_D_d; + + always @(posedge VIDEO_ADR_CNT0_clk_ctrl) + if (VIDEO_ADR_CNT0_ena_ctrl) + VIDEO_ADR_CNT_q <= VIDEO_ADR_CNT_d; + +// Start of original equations + assign LINE = FB_SIZE0 & FB_SIZE1; + +// BYT SELECT +// ADR==0 +// LONG UND LINE + assign FB_B[0] = FB_ADR[1:0] == 2'b00 | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) + & (!FB_SIZE0)); + +// ADR==1 +// HIGH WORD +// LONG UND LINE + assign FB_B[1] = FB_ADR[1:0] == 2'b01 | (FB_SIZE1 & (!FB_SIZE0) & + (!FB_ADR[1])) | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) & (!FB_SIZE0)); + +// ADR==2 +// LONG UND LINE + assign FB_B[2] = FB_ADR[1:0] == 2'b10 | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) + & (!FB_SIZE0)); + +// ADR==3 +// LOW WORD +// LONG UND LINE + assign FB_B[3] = FB_ADR[1:0] == 2'b11 | (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) + | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) & (!FB_SIZE0)); + +// CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + assign FB_REGDDR_0_clk_ctrl = MAIN_CLK; + + + always @(FB_REGDDR__q or DDR_SEL or BUS_CYC_q or LINE or DDR_CS_q or nFB_OE + or MAIN_CLK or DDR_CONFIG or nFB_WR or vcc) begin + FB_REGDDR__d = FB_REGDDR__q; + {FB_VDOE[0], FB_VDOE[1]} = 2'b00; + {FB_LE[0], FB_LE[1], FB_VDOE[2], FB_LE[2], FB_VDOE[3], FB_LE[3], + VIDEO_DDR_TA, BUS_CYC_END} = 8'b0000_0000; + casex (FB_REGDDR__q) + 3'b000: begin + FB_LE[0] = !nFB_WR; + +// LOS WENN BEREIT ODER IMMER BEI LINE WRITE + if (BUS_CYC_q | (DDR_SEL & LINE & (!nFB_WR))) begin + FB_REGDDR__d = 3'b001; + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b001: begin + if (DDR_CS_q) begin + FB_LE[0] = !nFB_WR; + VIDEO_DDR_TA = vcc; + if (LINE) begin + FB_VDOE[0] = (!nFB_OE) & (!DDR_CONFIG); + FB_REGDDR__d = 3'b010; + end else begin + BUS_CYC_END = vcc; + FB_VDOE[0] = (!nFB_OE) & (!MAIN_CLK) & (!DDR_CONFIG); + FB_REGDDR__d = 3'b000; + end + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b010: begin + if (DDR_CS_q) begin + FB_VDOE[1] = (!nFB_OE) & (!DDR_CONFIG); + FB_LE[1] = !nFB_WR; + VIDEO_DDR_TA = vcc; + FB_REGDDR__d = 3'b011; + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b011: begin + if (DDR_CS_q) begin + FB_VDOE[2] = (!nFB_OE) & (!DDR_CONFIG); + FB_LE[2] = !nFB_WR; + +// BEI LINE WRITE EVT. WARTEN + if ((!BUS_CYC_q) & LINE & (!nFB_WR)) begin + FB_REGDDR__d = 3'b011; + end else begin + VIDEO_DDR_TA = vcc; + FB_REGDDR__d = 3'b100; + end + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b100: begin + if (DDR_CS_q) begin + FB_VDOE[3] = (!nFB_OE) & (!MAIN_CLK) & (!DDR_CONFIG); + FB_LE[3] = !nFB_WR; + VIDEO_DDR_TA = vcc; + BUS_CYC_END = vcc; + FB_REGDDR__d = 3'b000; + end else begin + FB_REGDDR__d = 3'b000; + end + end + endcase + end + +// DDR STEUERUNG ----------------------------------------------------- +// VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE; + assign VCKE = VIDEO_RAM_CTR[0]; + assign nVCS = !VIDEO_RAM_CTR[1]; + assign DDR_REFRESH_ON = VIDEO_RAM_CTR[2]; + assign DDR_CONFIG = VIDEO_RAM_CTR[3]; + assign FIFO_ACTIVE = VIDEO_RAM_CTR[8]; + +// ------------------------------ + assign CPU_ROW_ADR = FB_ADR[26:14]; + assign CPU_BA = FB_ADR[13:12]; + assign CPU_COL_ADR = FB_ADR[11:2]; + assign nVRAS = !VRAS; + assign nVCAS = !VCAS; + assign nVWE = !VWE; + assign SR_DDR_WR_clk = DDRCLK0; + assign SR_DDRWR_D_SEL_clk = DDRCLK0; + assign SR_VDMP0_clk_ctrl = DDRCLK0; + assign SR_FIFO_WRE_clk = DDRCLK0; + assign CPU_AC_clk = DDRCLK0; + assign FIFO_AC_clk = DDRCLK0; + assign BLITTER_AC_clk = DDRCLK0; + assign DDRWR_D_SEL1 = BLITTER_AC_q; + +// SELECT LOGIC + assign DDR_SEL = FB_ALE & FB_AD[31:30] == 2'b01; + assign DDR_CS_clk = MAIN_CLK; + assign DDR_CS_ena = FB_ALE; + assign DDR_CS_d = DDR_SEL; + +// WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER +// NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG +// CONFIG SOFORT LOS +// LINE WRITE SPÄTER + assign CPU_SIG = (DDR_SEL & (nFB_WR | (!LINE)) & (!DDR_CONFIG)) | (DDR_SEL & + DDR_CONFIG) | (FB_REGDDR__q == 3'b010 & (!nFB_WR)); + assign CPU_REQ_clk = DDR_SYNC_66M; + +// HALTEN BUS CYC BEGONNEN ODER FERTIG + assign CPU_REQ_d = CPU_SIG | (CPU_REQ_q & FB_REGDDR__q != 3'b010 & + FB_REGDDR__q != 3'b100 & (!BUS_CYC_END) & (!BUS_CYC_q)); + assign BUS_CYC_clk = DDRCLK0; + assign BUS_CYC_d_1 = BUS_CYC_q & (!BUS_CYC_END); + +// STATE MACHINE SYNCHRONISIEREN ----------------- + assign MCS0_clk_ctrl = DDRCLK0; + assign MCS_d[0] = MAIN_CLK; + assign MCS_d[1] = MCS_q[0]; + assign CPU_DDR_SYNC_clk = DDRCLK0; + +// NUR 1 WENN EIN + assign CPU_DDR_SYNC_d = MCS_q == 2'b10 & VCKE & (!nVCS); + +// ------------------------------------------------- + assign VA_S0_clk_ctrl = DDRCLK0; + assign BA_S0_clk_ctrl = DDRCLK0; + assign {VA12_1, VA11_1, VA10_1, VA9_1, VA8_1, VA7_1, VA6_1, VA5_1, VA4_1, + VA3_1, VA2_1, VA1_1, VA0_1} = VA_S_q; + assign {BA1_1, BA0_1} = BA_S_q; + assign VA_P0_clk_ctrl = DDRCLK0; + assign BA_P0_clk_ctrl = DDRCLK0; + +// DDR STATE MACHINE ----------------------------------------------- + assign DDR_SM_0_clk_ctrl = DDRCLK0; + + + always @(DDR_SM__q or DDR_REFRESH_REQ_q or CPU_DDR_SYNC_q or DDR_CONFIG or + CPU_ROW_ADR or FIFO_ROW_ADR or BLITTER_ROW_ADR or BLITTER_REQ_q or + BLITTER_WR or FIFO_AC_q or CPU_COL_ADR or BLITTER_COL_ADR or VA_S_q or + CPU_BA or BLITTER_BA or FB_B or CPU_AC_q or BLITTER_AC_q or + FIFO_BANK_OK_q or FIFO_MW or FIFO_REQ_q or VIDEO_ADR_CNT_q or + FIFO_COL_ADR or gnd or DDR_SEL or LINE or FIFO_BA or FB_AD or VA_P_q + or BA_P_q or CPU_REQ_q or nFB_WR or FB_SIZE0 or FB_SIZE1 or + DDR_REFRESH_SIG_q or vcc) begin + DDR_SM__d = DDR_SM__q; + BA_S_d = 2'b00; + VA_S_d = 13'b0_0000_0000_0000; + BA_P_d = 2'b00; + {VA_P_d[9], VA_P_d[8], VA_P_d[7], VA_P_d[6], VA_P_d[5], VA_P_d[4], + VA_P_d[3], VA_P_d[2], VA_P_d[1], VA_P_d[0], VA_P_d[10]} = + 11'b000_0000_0000; + SR_VDMP_d = 8'b0000_0000; + VA_P_d[12:11] = 2'b00; + {FIFO_BANK_OK_d_1, FIFO_AC_d, SR_DDR_FB, SR_BLITTER_DACK, BLITTER_AC_d, + SR_DDR_WR_d, SR_DDRWR_D_SEL_d, CPU_AC_d, VA12_2, VA11_2, VA9_2, + VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2, + BA1_2, BA0_2, SR_FIFO_WRE_d, BUS_CYC_d_2, VWE, VA10_2, + FIFO_BANK_NOT_OK, VCAS, VRAS} = + 29'b0_0000_0000_0000_0000_0000_0000_0000; + casex (DDR_SM__q) + 6'b00_0000: begin + if (DDR_REFRESH_REQ_q) begin + DDR_SM__d = 6'b01_1111; + +// SYNCHRON UND EIN? + end else if (CPU_DDR_SYNC_q) begin + +// JA + if (DDR_CONFIG) begin + DDR_SM__d = 6'b00_1000; + +// BEI WAIT UND LINE WRITE + end else if (CPU_REQ_q) begin + VA_S_d = CPU_ROW_ADR; + BA_S_d = CPU_BA; + CPU_AC_d = vcc; + BUS_CYC_d_2 = vcc; + DDR_SM__d = 6'b00_0010; + end else begin + +// FIFO IST DEFAULT + if (FIFO_REQ_q | (!BLITTER_REQ_q)) begin + VA_P_d = FIFO_ROW_ADR; + BA_P_d = FIFO_BA; + +// VORBESETZEN + FIFO_AC_d = vcc; + end else begin + VA_P_d = BLITTER_ROW_ADR; + BA_P_d = BLITTER_BA; + +// VORBESETZEN + BLITTER_AC_d = vcc; + end + DDR_SM__d = 6'b00_0001; + end + end else begin + +// NEIN ->SYNCHRONISIEREN + DDR_SM__d = 6'b00_0000; + end + end + 6'b00_0001: begin + +// SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK *** + if (DDR_SEL & (nFB_WR | (!LINE))) begin + VRAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = FB_AD[26:14]; + {BA1_2, BA0_2} = FB_AD[13:12]; + +// AUTO PRECHARGE DA NICHT FIFO PAGE + VA_S_d[10] = vcc; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + end else begin + VRAS = (FIFO_AC_q & FIFO_REQ_q) | (BLITTER_AC_q & + BLITTER_REQ_q); + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = VA_P_q; + {BA1_2, BA0_2} = BA_P_q; + VA_S_d[10] = !(FIFO_AC_q & FIFO_REQ_q); + FIFO_BANK_OK_d_1 = FIFO_AC_q & FIFO_REQ_q; + FIFO_AC_d = FIFO_AC_q & FIFO_REQ_q; + BLITTER_AC_d = BLITTER_AC_q & BLITTER_REQ_q; + end + DDR_SM__d = 6'b00_0011; + end + 6'b00_0010: begin + VRAS = vcc; + FIFO_BANK_NOT_OK = vcc; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + DDR_SM__d = 6'b00_0011; + end + 6'b00_0011: begin + CPU_AC_d = CPU_AC_q; + FIFO_AC_d = FIFO_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + if (((!nFB_WR) & CPU_AC_q) | (BLITTER_WR & BLITTER_AC_q)) begin + DDR_SM__d = 6'b01_0000; + +// CPU? + end else if (CPU_AC_q) begin + VA_S_d[9:0] = CPU_COL_ADR; + BA_S_d = CPU_BA; + DDR_SM__d = 6'b00_1110; + +// FIFO? + end else if (FIFO_AC_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_0110; + end else if (BLITTER_AC_q) begin + VA_S_d[9:0] = BLITTER_COL_ADR; + BA_S_d = BLITTER_BA; + DDR_SM__d = 6'b00_1110; + end else begin + +// READ + DDR_SM__d = 6'b00_0111; + end + end + 6'b00_1110: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VCAS = vcc; + +// READ DATEN FÜR CPU + SR_DDR_FB = CPU_AC_q; + +// BLITTER DACK AND BLITTER LATCH DATEN + SR_BLITTER_DACK = BLITTER_AC_q; + DDR_SM__d = 6'b00_1111; + end + 6'b00_1111: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// FIFO READ EINSCHIEBEN WENN BANK OK + if (FIFO_REQ_q & FIFO_BANK_OK_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + +// MANUEL PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// WRITE + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_0000: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// BLITTER ACK AND BLITTER LATCH DATEN + SR_BLITTER_DACK = BLITTER_AC_q; + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + DDR_SM__d = 6'b01_0001; + end + 6'b01_0001: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VA_S_d[9:0] = ({10{CPU_AC_q}} & CPU_COL_ADR) | ({10{BLITTER_AC_q}} + & BLITTER_COL_ADR); + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + BA_S_d = ({2{CPU_AC_q}} & CPU_BA) | ({2{BLITTER_AC_q}} & + BLITTER_BA); + +// BYTE ENABLE WRITE + SR_VDMP_d[7:4] = FB_B; + +// LINE ENABLE WRITE + SR_VDMP_d[3:0] = {4{LINE}} & 4'b1111; + DDR_SM__d = 6'b01_0010; + end + 6'b01_0010: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VCAS = vcc; + VWE = vcc; + +// WRITE COMMAND CPU UND BLITTER IF WRITER + SR_DDR_WR_d = vcc; + +// 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_DDRWR_D_SEL_d = vcc; + +// WENN LINE DANN ACTIV + SR_VDMP_d = {8{LINE}} & 8'b1111_1111; + DDR_SM__d = 6'b01_0011; + end + 6'b01_0011: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// WRITE COMMAND CPU UND BLITTER IF WRITE + SR_DDR_WR_d = vcc; + +// 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_DDRWR_D_SEL_d = vcc; + DDR_SM__d = 6'b01_0100; + end + 6'b01_0100: begin + DDR_SM__d = 6'b01_0101; + end + 6'b01_0101: begin + if (FIFO_REQ_q & FIFO_BANK_OK_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// FIFO READ + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_0110: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + DDR_SM__d = 6'b01_0111; + end + 6'b01_0111: begin + if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end else begin + VA_S_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// NOCH OFFEN LASSEN + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_1000: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + DDR_SM__d = 6'b01_1001; + end + 6'b01_1001: begin + if (CPU_REQ_q & FIFO_MW > 9'b0_0000_0000) begin + +// ALLE PAGES SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end else if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end else begin + VA_S_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1010; + end + end else begin + +// ALLE PAGES SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end + end + 6'b01_1010: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + +// NOTFALL? + if (FIFO_MW < 9'b0_0000_0000) begin + +// JA-> + DDR_SM__d = 6'b01_0111; + end else begin + DDR_SM__d = 6'b01_1011; + end + end + 6'b01_1011: begin + if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE BANKS SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end else begin + VA_P_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_P_d[10] = gnd; + BA_P_d = FIFO_BA; + DDR_SM__d = 6'b01_1100; + end + end else begin + +// ALLE BANKS SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_1100: begin + if (DDR_SEL & (nFB_WR | (!LINE)) & FB_AD[13:12] != FIFO_BA) begin + VRAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = FB_AD[26:14]; + {BA1_2, BA0_2} = FB_AD[13:12]; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + +// AUTO PRECHARGE DA NICHT FIFO BANK + VA_S_d[10] = vcc; + DDR_SM__d = 6'b00_0011; + end else begin + VCAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = VA_P_q; + {BA1_2, BA0_2} = BA_P_q; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + +// CONFIG CYCLUS + DDR_SM__d = 6'b01_1001; + end + end + 6'b00_1000: begin + DDR_SM__d = 6'b00_1001; + end + 6'b00_1001: begin + BUS_CYC_d_2 = CPU_REQ_q; + DDR_SM__d = 6'b00_1010; + end + 6'b00_1010: begin + if (CPU_REQ_q) begin + DDR_SM__d = 6'b00_1011; + end else begin + DDR_SM__d = 6'b00_0000; + end + end + 6'b00_1011: begin + DDR_SM__d = 6'b00_1100; + end + 6'b00_1100: begin + VA_S_d = FB_AD[12:0]; + BA_S_d = FB_AD[14:13]; + DDR_SM__d = 6'b00_1101; + end + 6'b00_1101: begin + +// NUR BEI LONG WRITE + VRAS = FB_AD[18] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// NUR BEI LONG WRITE + VCAS = FB_AD[17] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// NUR BEI LONG WRITE + VWE = FB_AD[16] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// CLOSE FIFO BANK + DDR_SM__d = 6'b00_0111; + end + 6'b01_1101: begin + +// AUF NOT OK + FIFO_BANK_NOT_OK = vcc; + +// BÄNKE SCHLIESSEN + VRAS = vcc; + VWE = vcc; + DDR_SM__d = 6'b00_0110; + end + 6'b01_1110: begin + +// AUF NOT OK + FIFO_BANK_NOT_OK = vcc; + +// BÄNKE SCHLIESSEN + VRAS = vcc; + VWE = vcc; + +// REFRESH 70NS = 10 ZYCLEN + DDR_SM__d = 6'b00_0000; + end + 6'b01_1111: begin + +// EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN + if (DDR_REFRESH_SIG_q == 4'b1001) begin + +// ALLE BANKS SCHLIESSEN + VRAS = vcc; + VWE = vcc; + VA10_2 = vcc; + FIFO_BANK_NOT_OK = vcc; + DDR_SM__d = 6'b10_0001; + end else begin + VCAS = vcc; + VRAS = vcc; + DDR_SM__d = 6'b10_0000; + end + end + 6'b10_0000: begin + DDR_SM__d = 6'b10_0001; + end + 6'b10_0001: begin + DDR_SM__d = 6'b10_0010; + end + 6'b10_0010: begin + DDR_SM__d = 6'b10_0011; + end + 6'b10_0011: begin + +// LEERSCHLAUFE + DDR_SM__d = 6'b00_0100; + end + 6'b00_0100: begin + DDR_SM__d = 6'b00_0101; + end + 6'b00_0101: begin + DDR_SM__d = 6'b00_0110; + end + 6'b00_0110: begin + DDR_SM__d = 6'b00_0111; + end + 6'b00_0111: begin + DDR_SM__d = 6'b00_0000; + end + endcase + end + +// ------------------------------------------------------------- +// BLITTER ---------------------- +// --------------------------------------- + assign BLITTER_REQ_clk = DDRCLK0; + assign BLITTER_REQ_d = BLITTER_SIG & (!DDR_CONFIG) & VCKE & (!nVCS); + assign BLITTER_ROW_ADR = BLITTER_ADR[26:14]; + assign BLITTER_BA[1] = BLITTER_ADR[13]; + assign BLITTER_BA[0] = BLITTER_ADR[12]; + assign BLITTER_COL_ADR = BLITTER_ADR[11:2]; + +// ---------------------------------------------------------------------------- +// FIFO --------------------------------- +// ------------------------------------------------------ + assign FIFO_REQ_clk = DDRCLK0; + assign FIFO_REQ_d = (FIFO_MW < 9'b0_1100_1000 | (FIFO_MW < 9'b1_1111_0100 & + FIFO_REQ_q)) & FIFO_ACTIVE & (!CLEAR_FIFO_CNT_q) & (!STOP_q) & + (!DDR_CONFIG) & VCKE & (!nVCS); + assign FIFO_ROW_ADR = VIDEO_ADR_CNT_q[22:10]; + assign FIFO_BA[1] = VIDEO_ADR_CNT_q[9]; + assign FIFO_BA[0] = VIDEO_ADR_CNT_q[8]; + assign FIFO_COL_ADR = {VIDEO_ADR_CNT_q[7], VIDEO_ADR_CNT_q[6], + VIDEO_ADR_CNT_q[5], VIDEO_ADR_CNT_q[4], VIDEO_ADR_CNT_q[3], + VIDEO_ADR_CNT_q[2], VIDEO_ADR_CNT_q[1], VIDEO_ADR_CNT_q[0], 2'b00}; + assign FIFO_BANK_OK_clk = DDRCLK0; + assign FIFO_BANK_OK_d_2 = FIFO_BANK_OK_q & (!FIFO_BANK_NOT_OK); + +// ZÄHLER RÜCKSETZEN WENN CLR FIFO ---------------- + assign CLR_FIFO_SYNC_clk = DDRCLK0; + +// SYNCHRONISIEREN + assign CLR_FIFO_SYNC_d = CLR_FIFO; + assign CLEAR_FIFO_CNT_clk = DDRCLK0; + assign CLEAR_FIFO_CNT_d = CLR_FIFO_SYNC_q | (!FIFO_ACTIVE); + assign STOP_clk = DDRCLK0; + assign STOP_d = CLR_FIFO_SYNC_q | CLEAR_FIFO_CNT_q; + +// ZÄHLEN ----------------------------------------------- + assign VIDEO_ADR_CNT0_clk_ctrl = DDRCLK0; + assign VIDEO_ADR_CNT0_ena_ctrl = SR_FIFO_WRE_q | CLEAR_FIFO_CNT_q; + assign VIDEO_ADR_CNT_d = ({23{CLEAR_FIFO_CNT_q}} & VIDEO_BASE_ADR) | + ({23{!CLEAR_FIFO_CNT_q}} & (VIDEO_ADR_CNT_q + 23'h1)); + assign VIDEO_BASE_ADR[22:20] = VIDEO_BASE_X_D_q; + assign VIDEO_BASE_ADR[19:12] = VIDEO_BASE_H_D_q; + assign VIDEO_BASE_ADR[11:4] = VIDEO_BASE_M_D_q; + assign VIDEO_BASE_ADR[3:0] = VIDEO_BASE_L_D_q[7:4]; + assign VDM_SEL = VIDEO_BASE_L_D_q[3:0]; + +// AKTUELLE VIDEO ADRESSE + assign VIDEO_ACT_ADR[26:4] = VIDEO_ADR_CNT_q - {14'b00_0000_0000_0000, + FIFO_MW}; + assign VIDEO_ACT_ADR[3:0] = VDM_SEL; + +// --------------------------------------------------------------------------------------- +// REFRESH: IMMER 8 AUFS MAL, ANFORDERUNG ALLE 7.8us X 8 STCK. = 62.4us = 2059->2048 33MHz CLOCKS +// --------------------------------------------------------------------------------------- + assign DDR_REFRESH_CNT0_clk_ctrl = CLK33M; + +// ZÄHLEN 0-2047 + assign DDR_REFRESH_CNT_d = DDR_REFRESH_CNT_q + 11'b000_0000_0001; + assign REFRESH_TIME_clk = DDRCLK0; + +// SYNC + assign REFRESH_TIME_d = DDR_REFRESH_CNT_q == 11'b000_0000_0000 & + (!MAIN_CLK); + assign DDR_REFRESH_SIG0_clk_ctrl = DDRCLK0; + assign DDR_REFRESH_SIG0_ena_ctrl = REFRESH_TIME_q | DDR_SM__q == 6'b10_0011; + +// 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF) +// MINUS 1 WENN GEMACHT + assign DDR_REFRESH_SIG_d = ({4{REFRESH_TIME_q}} & 4'b1001 & + {4{DDR_REFRESH_ON}} & {4{!DDR_CONFIG}}) | ({4{!REFRESH_TIME_q}} & + (DDR_REFRESH_SIG_q - 4'b0001) & {4{DDR_REFRESH_ON}} & + {4{!DDR_CONFIG}}); + assign DDR_REFRESH_REQ_clk = DDRCLK0; + assign DDR_REFRESH_REQ_d = DDR_REFRESH_SIG_q != 4'b0000 & DDR_REFRESH_ON & + (!REFRESH_TIME_q) & (!DDR_CONFIG); + +// --------------------------------------------------------- +// VIDEO REGISTER ----------------------- +// ------------------------------------------------------------------------------------------------------------------- + assign VIDEO_BASE_L_D0_clk_ctrl = MAIN_CLK; + +// 820D/2 + assign VIDEO_BASE_L = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C106; + +// SORRY, NUR 16 BYT GRENZEN + assign VIDEO_BASE_L_D_d = FB_AD[23:16]; + assign VIDEO_BASE_L_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_L & FB_B[1]; + assign VIDEO_BASE_M_D0_clk_ctrl = MAIN_CLK; + +// 8203/2 + assign VIDEO_BASE_M = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C101; + assign VIDEO_BASE_M_D_d = FB_AD[23:16]; + assign VIDEO_BASE_M_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_M & FB_B[3]; + assign VIDEO_BASE_H_D0_clk_ctrl = MAIN_CLK; + +// 8200-1/2 + assign VIDEO_BASE_H = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C100; + assign VIDEO_BASE_H_D_d = FB_AD[23:16]; + assign VIDEO_BASE_H_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_H & FB_B[1]; + assign VIDEO_BASE_X_D0_clk_ctrl = MAIN_CLK; + assign VIDEO_BASE_X_D_d = FB_AD[26:24]; + assign VIDEO_BASE_X_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_H & FB_B[0]; + +// 8209/2 + assign VIDEO_CNT_L = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C104; + +// 8207/2 + assign VIDEO_CNT_M = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C103; + +// 8204,5/2 + assign VIDEO_CNT_H = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C102; + +// GE + assign VIDEO_BASE_X_D_FULL = {5'b0_0000, VIDEO_BASE_X_D_q}; + assign u0_data = ({8{VIDEO_BASE_H}} & VIDEO_BASE_X_D_FULL) | + ({8{VIDEO_CNT_H}} & {5'b0_0000, VIDEO_ACT_ADR[26:24]}); + assign u0_enabledt = (VIDEO_BASE_H | VIDEO_CNT_H) & (!nFB_OE); + assign FB_AD[31:24] = u0_tridata; + assign u1_data = ({8{VIDEO_BASE_L}} & VIDEO_BASE_L_D_q) | ({8{VIDEO_BASE_M}} + & VIDEO_BASE_M_D_q) | ({8{VIDEO_BASE_H}} & VIDEO_BASE_H_D_q) | + ({8{VIDEO_CNT_L}} & VIDEO_ACT_ADR[7:0]) | ({8{VIDEO_CNT_M}} & + VIDEO_ACT_ADR[15:8]) | ({8{VIDEO_CNT_H}} & VIDEO_ACT_ADR[23:16]); + assign u1_enabledt = (VIDEO_BASE_L | VIDEO_BASE_M | VIDEO_BASE_H | + VIDEO_CNT_L | VIDEO_CNT_M | VIDEO_CNT_H) & (!nFB_OE); + assign FB_AD[23:16] = u1_tridata; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign FIFO_BANK_OK_d = FIFO_BANK_OK_d_1 | FIFO_BANK_OK_d_2; + assign BUS_CYC_d = BUS_CYC_d_1 | BUS_CYC_d_2; + assign BA[0] = BA0_1 | BA0_2; + assign BA[1] = BA1_1 | BA1_2; + assign VA[0] = VA0_1 | VA0_2; + assign VA[1] = VA1_1 | VA1_2; + assign VA[2] = VA2_1 | VA2_2; + assign VA[3] = VA3_1 | VA3_2; + assign VA[4] = VA4_1 | VA4_2; + assign VA[5] = VA5_1 | VA5_2; + assign VA[6] = VA6_1 | VA6_2; + assign VA[7] = VA7_1 | VA7_2; + assign VA[8] = VA8_1 | VA8_2; + assign VA[9] = VA9_1 | VA9_2; + assign VA[10] = VA10_1 | VA10_2; + assign VA[11] = VA11_1 | VA11_2; + assign VA[12] = VA12_1 | VA12_2; + +// Define power signal(s) + assign vcc = 1'b1; + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/Video/DDR_CTR_BLITTER.tdf.bak b/FPGA_quartus_GE/Video/DDR_CTR_BLITTER.tdf.bak new file mode 100644 index 0000000..03052b4 --- /dev/null +++ b/FPGA_quartus_GE/Video/DDR_CTR_BLITTER.tdf.bak @@ -0,0 +1,352 @@ +TITLE "DDR_CTR_BLITTER"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_BYT.inc"; + + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN DDR_CTR_BLITTER +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + FB_ADR[31..0] : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nRSTO : INPUT; + MAIN_CLK : INPUT; + FIFO_FULL : INPUT; + FB_ALE : INPUT; + nFB_WR : INPUT; + DDR_SYNC_66M : INPUT; + VSYNC : INPUT; + BLITTER_ON : INPUT; + VIDEO_RAM_CTR[15..0] : INPUT; + VDVZ[127..0] : INPUT; + DDRCLK[3..0] : INPUT; + BA0 : OUTPUT; + BA1 : OUTPUT; + VA[12..0] : OUTPUT; + nVWE : OUTPUT; + nVRAS : OUTPUT; + nVCS : OUTPUT; + VCKE : OUTPUT; + nVCAS : OUTPUT; + FIFO_WRE : OUTPUT; + FB_LE[3..0] : OUTPUT; + FB_VDOE[3..0] : OUTPUT; + START_CYC_RDWR : OUTPUT; + DDR_WR : OUTPUT; + CLEAR_FIFO_CNT : OUTPUT; + BLITTER_RUN : OUTPUT; + BLITTER_DOUT[127..0] : OUTPUT; + BLITTER_LE[3..0] : OUTPUT; + BLITTER_RDE : OUTPUT; + DDRWR_D_SEL[1..0] : OUTPUT; + VDMP[7..0] : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3); + DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2,DS_T3,DS_T4,DS_T5,DS_T6,DS_T7,DS_T8,DS_LS); + LINE :NODE; + FB_B[3..0] :NODE; + VCAS :NODE; + VRAS :NODE; + VWE :NODE; + VA[12..0] :NODE; + BA0 :NODE; + BA1 :NODE; + DDR_WR :DFF; + DDR_SEL :NODE; + DDR_CONFIG :NODE; + DDRWR_D_SEL[1..0] :DFF; + CPU_ROW_ADR[12..0] :NODE; + CPU_BA0 :NODE; + CPU_BA1 :NODE; + CPU_COL_ADR[9..0] :NODE; + CPU_SIG :NODE; + CPU_REQ :DFF; + BLITTER_SIG :NODE; + BLITTER_REQ :DFF; + BLITTER_RUN :DFF; + BLITTER_WR :DFF; + BLITTER_ROW_ADR[12..0] :NODE; + BLITTER_BA0 :NODE; + BLITTER_BA1 :NODE; + BLITTER_COL_ADR[9..0] :NODE; + FIFO_SIG :NODE; + FIFO_REQ :DFF; + FIFO_ROW_ADR[12..0] :NODE; + FIFO_BA0 :NODE; + FIFO_BA1 :NODE; + FIFO_COL_ADR[9..0] :NODE; + FIFO_WRE :DFF; + FIFO_ACTIVE :NODE; + CLEAR_FIFO_CNT :DFF; + STOP :DFF; + DDR_REFRESH_ON :NODE; + VIDEO_BASE_L_D[3..0] :DFFE; + VIDEO_BASE_L :NODE; + VIDEO_BASE_M_D[7..0] :DFFE; + VIDEO_BASE_M :NODE; + VIDEO_BASE_H_D[7..0] :DFFE; + VIDEO_BASE_H :NODE; + VIDEO_BASE_X_D[7..0] :DFFE; + VIDEO_ADR_CNT[27..0] :DFFE; + VIDEO_CNT_L :NODE; + VIDEO_CNT_M :NODE; + VIDEO_CNT_H :NODE; + VIDEO_BASE_ADR[27..0] :NODE; + +BEGIN + LINE = FB_SIZE0 & FB_SIZE1; +-- BYT SELECT + FB_B0 = FB_ADR[1..0]==0; -- ADR==0 + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + FB_REGDDR.CLK = MAIN_CLK; + CASE FB_REGDDR IS + WHEN FR_WAIT => + IF DDR_SEL THEN + FB_REGDDR = FR_S0; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S0 => + FB_VDOE0 = !nFB_OE & !DDR_CONFIG; + FB_LE0 = !nFB_WR; + IF LINE THEN + FB_REGDDR = FR_S1; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S1 => + FB_VDOE1 = !nFB_OE & !DDR_CONFIG; + FB_LE1 = !nFB_WR; + FB_REGDDR = FR_S2; + WHEN FR_S2 => + FB_VDOE2 = !nFB_OE & !DDR_CONFIG; + FB_LE2 = !nFB_WR; + FB_REGDDR = FR_S3; + WHEN FR_S3 => + FB_VDOE3 = !nFB_OE & !DDR_CONFIG; + FB_LE3 = !nFB_WR; + FB_REGDDR = FR_WAIT; + END CASE; +-- DDR STEUERUNG ----------------------------------------------------- +-- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0=VCKE,1=!nVCS,2=FIFO_ACTIVE,3=FIFO UND CNT CLEAR,15..11=VIDEO RAM BASE + VCKE = VIDEO_RAM_CTR0; + nVCS = !VIDEO_RAM_CTR1; + FIFO_ACTIVE = VIDEO_RAM_CTR2; + DDR_CONFIG = VIDEO_RAM_CTR3; + DDR_REFRESH_ON = VIDEO_RAM_CTR4; +-------------------------------- + CPU_ROW_ADR[] = FB_ADR[26..14]; + CPU_BA1 = FB_ADR13; + CPU_BA0 = FB_ADR12; + CPU_COL_ADR[] = FB_ADR[11..2]; + nVRAS = !VRAS; + nVCAS = !VCAS; + nVWE = !VWE; + DDR_WR.CLK = DDRCLK0; +-- SELECT LOGIC + DDR_SEL = FB_ALE & FB_AD[31..29]==B"011"; +-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER + CPU_SIG = DDR_SEL & nFB_WR & !DDR_CONFIG -- READ SOFORT LOS + # FR_S0 & !nFB_WR -- WRITE SPÄTER AUCH CONFIG + # FR_S3 & !nFB_WR & LINE & !DDR_CONFIG; -- LINE WRITE + CPU_REQ = CPU_SIG; + CPU_REQ.CLK = DDR_SYNC_66M; + DDR_D_SEL[].CLK = DDRCLK3; +-- DDR STATE MACHINE ----------------------------------------------- + DDR_SM.CLK = DDRCLK0; + CASE DDR_SM IS + WHEN DS_T1 => + IF MAIN_CLK THEN + DDR_WR = DDR_WR; -- WRITE HALTEN (VON T4) + DDR_SM = DS_T2; + ELSE + DDR_SM = DS_LS; -- SYNCHRONISIEREN + END IF; + WHEN DS_T2 => + IF !DDR_CONFIG THEN + VRAS = CPU_SIG # BLITTER_SIG # FIFO_SIG # DDR_REFRESH_ON; + VA[] = CPU_SIG & CPU_ROW_ADR[] + # BLITTER_SIG & BLITTER_ROW_ADR[] + # FIFO_SIG & FIFO_ROW_ADR[]; + BA0 = CPU_SIG & CPU_BA0 + # BLITTER_SIG & BLITTER_BA0 + # FIFO_SIG & FIFO_BA0; + BA1 = CPU_SIG & CPU_BA1 + # BLITTER_SIG & BLITTER_BA1 + # FIFO_SIG & FIFO_BA1; + VCAS = !CPU_SIG & !BLITTER_SIG & !FIFO_SIG & DDR_REFRESH_ON; -- AUTO REFRESH WENN SONST NICHTS + BLITTER_REQ = BLITTER_SIG; + FIFO_REQ = FIFO_SIG; + END IF; + IF MAIN_CLK THEN + DDR_SM = DS_T3; + ELSE + DDR_SM = DS_LS; + END IF; + WHEN DS_T3 => + IF DDR_CONFIG & CPU_REQ THEN + VRAS = FB_AD18; + VCAS = FB_AD17; + VWE = FB_AD16; + BA1 = FB_AD14; + BA0 = FB_AD13; + VA[] = FB_AD[12..0]; + END IF; + IF !CPU_REQ & !BLITTER_REQ & !FIFO_REQ # DDR_CONFIG THEN + DDR_SM = DS_LS; + ELSE + BLITTER_REQ = BLITTER_SIG; + FIFO_REQ = FIFO_SIG; + DDR_SM = DS_T4; + END IF; + WHEN DS_T4 => + FIFO_REQ = FIFO_SIG; + VCAS = VCC; + VWE = !nFB_WR & CPU_REQ # BLITTER_WR & BLITTER_REQ; + VA[9..0] = CPU_REQ & CPU_COL_ADR[] + # BLITTER_REQ & BLITTER_COL_ADR[] + # FIFO_REQ & FIFO_COL_ADR[]; + VA10 = VCC; -- AUTO PRECHARGE + BA0 = CPU_REQ & CPU_BA0 + # BLITTER_REQ & BLITTER_BA0 + # FIFO_REQ & FIFO_BA0; + BA1 = CPU_REQ & CPU_BA1 + # BLITTER_REQ & BLITTER_BA1 + # FIFO_REQ & FIFO_BA1; + DDR_WR = !nFB_WR & CPU_REQ # BLITTER_WR & BLITTER_REQ; + FIFO_REQ = FIFO_SIG; + IF FIFO_REQ & FIFO_COL_ADR[]!= H"3FF" THEN -- GLEICHE PAGE? + DDR_SM = DS_T5; -- JA-> + ELSE + DDR_SM = DS_T1; -- SONST NEUE PAGE AUFMACHEN + END IF; + WHEN DS_T5 => + FIFO_REQ = FIFO_SIG; + DDR_SM = DS_T6; + WHEN DS_T6 => + IF CPU_SIG THEN -- SOFORT UMSCHALTEN WENN CPU REQ + VRAS = VCC; + VA[] = CPU_ROW_ADR[]; + BA1 = CPU_BA1; + BA0 = CPU_BA0; + DDR_SM = DS_T3; + ELSE + FIFO_REQ = FIFO_SIG; + VCAS = VCC; + VA[9..0] = FIFO_COL_ADR[]; + VA10 = VCC; -- AUTO PRECHARGE + BA0 = FIFO_BA0; + BA1 = FIFO_BA1; + FIFO_WRE = FIFO_REQ; -- ODER FIFO LATCH IN 5 CYC 133 + IF FIFO_REQ & FIFO_COL_ADR[]!= H"3FF" THEN -- GLEICHE PAGE? + DDR_SM = DS_T5; -- JA-> + ELSE + DDR_SM = DS_T1; -- SONST NEUE PAGE AUFMACHEN + END IF; + END IF; + WHEN DS_LS => + IF !MAIN_CLK THEN -- LEERSTATE UND SYNC + DDR_SM = DS_T1; + ELSE + DDR_SM = DS_LS; + END IF; + END CASE; +------------------------------------------------------------------------------ +-- FIFO --------------------------------- + FIFO_SIG = FIFO_ACTIVE & !FIFO_FULL & !BLITTER_SIG & !CPU_SIG; + FIFO_REQ.CLK = DDR_SYNC_66M; + FIFO_ROW_ADR[] = VIDEO_ADR_CNT[24..12]; + FIFO_BA1 = VIDEO_ADR_CNT11; + FIFO_BA0 = VIDEO_ADR_CNT10; + FIFO_COL_ADR[] = VIDEO_ADR_CNT[9..0]; + -- ZÄHLER RÜCKSETZEN WENN VSYNC ---------------- + CLEAR_FIFO_CNT.CLK = DDRCLK0; + CLEAR_FIFO_CNT = VSYNC # !FIFO_ACTIVE; + STOP.CLK = DDRCLK0; + STOP = VSYNC # CLEAR_FIFO_CNT; + VIDEO_ADR_CNT[].CLK = DDRCLK0; + VIDEO_ADR_CNT[] = CLEAR_FIFO_CNT & VIDEO_BASE_ADR[] -- SET + # !CLEAR_FIFO_CNT & (VIDEO_ADR_CNT[]+1); -- NEXT 16 BYTS + VIDEO_ADR_CNT[].ENA = CLEAR_FIFO_CNT # FIFO_WRE; + FIFO_WRE.CLK = DDRCLK0; +--------------------------------------------------------------- +-- BLITTER BUS IST 128 BIT BREIT ------ + BLITTER_SIG = GND & !CPU_SIG; + BLITTER_REQ.CLK = DDR_SYNC_66M; + BLITTER_RUN.CLK = DDRCLK0; + BLITTER_RUN = GND; + BLITTER_WR.CLK = DDRCLK0; + BLITTER_WR = GND; + DDRWR_D_SEL1 = BLITTER_WR; + BLITTER_ROW_ADR[] = H"0"; + BLITTER_BA1 = GND; + BLITTER_BA0 = GND; + BLITTER_COL_ADR[] = H"0"; + BLITTER_DOUT[] = H"0"; + BLITTER_LE[] = H"0"; +----------------------------------------------------------- +-- VIDEO REGISTER ----------------------- +--------------------------------------------------------------------------------------------------------------------- + VIDEO_BASE_L_D[].CLK = MAIN_CLK; + VIDEO_BASE_L = !nFB_CS1 & FB_ADR[15..1]==H"4106"; -- 820D/2 + VIDEO_BASE_L_D[] = FB_AD[23..20]; -- SORRY, NUR 16 BYT GRENZEN + VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1; + + VIDEO_BASE_M_D[].CLK = MAIN_CLK; + VIDEO_BASE_M = !nFB_CS1 & FB_ADR[15..1]==H"4101"; -- 8203/2 + VIDEO_BASE_M_D[] = FB_AD[23..16]; + VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3; + + VIDEO_BASE_H_D[].CLK = MAIN_CLK; + VIDEO_BASE_H = !nFB_CS1 & FB_ADR[15..1]==H"4100"; -- 8200-1/2 + VIDEO_BASE_H_D[] = FB_AD[23..16]; + VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1; + VIDEO_BASE_X_D[].CLK = MAIN_CLK; + VIDEO_BASE_X_D[] = FB_AD[31..24]; + VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0; + + VIDEO_CNT_L = !nFB_CS1 & FB_ADR[15..1]==H"4104"; -- 8209/2 + VIDEO_CNT_M = !nFB_CS1 & FB_ADR[15..1]==H"4103"; -- 8207/2 + VIDEO_CNT_H = !nFB_CS1 & FB_ADR[15..1]==H"4102"; -- 8205/2 + + FB_AD[31..24] = lpm_bustri_BYT( + VIDEO_BASE_H & VIDEO_BASE_X_D[] + # VIDEO_CNT_H & VIDEO_ADR_CNT[27..20] + ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE); + + FB_AD[23..16] = lpm_bustri_BYT( + VIDEO_BASE_L & (VIDEO_BASE_L_D[],B"0000") + # VIDEO_BASE_M & VIDEO_BASE_M_D[] + # VIDEO_BASE_H & VIDEO_BASE_H_D[] + # VIDEO_CNT_L & (VIDEO_ADR_CNT[3..0],B"0000") + # VIDEO_CNT_M & VIDEO_ADR_CNT[11..4] + # VIDEO_CNT_H & VIDEO_ADR_CNT[19..12] + ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE); + + VIDEO_BASE_ADR[27..20] = VIDEO_BASE_X_D[]; + VIDEO_BASE_ADR[19..12] = VIDEO_BASE_H_D[]; + VIDEO_BASE_ADR[11..4] = VIDEO_BASE_M_D[]; + VIDEO_BASE_ADR[3..0] = VIDEO_BASE_L_D[]; +END; + diff --git a/FPGA_quartus_GE/Video/UNUSED b/FPGA_quartus_GE/Video/UNUSED new file mode 100644 index 0000000..12f424b --- /dev/null +++ b/FPGA_quartus_GE/Video/UNUSED @@ -0,0 +1,267 @@ + +-- Clearbox generated Memory Initialization File (.mif) + +WIDTH=6; +DEPTH=256; + +ADDRESS_RADIX=HEX; +DATA_RADIX=HEX; + +CONTENT BEGIN + 000 : 0F; + 001 : 0E; + 002 : 0D; + 003 : 0C; + 004 : 0B; + 005 : 0A; + 006 : 09; + 007 : 08; + 008 : 07; + 009 : 06; + 00a : 05; + 00b : 04; + 00c : 03; + 00d : 02; + 00e : 01; + 00f : 00; + 010 : 0F; + 011 : 0E; + 012 : 0D; + 013 : 0C; + 014 : 0B; + 015 : 0A; + 016 : 09; + 017 : 08; + 018 : 07; + 019 : 06; + 01a : 05; + 01b : 04; + 01c : 03; + 01d : 02; + 01e : 01; + 01f : 00; + 020 : 0F; + 021 : 0E; + 022 : 0D; + 023 : 0C; + 024 : 0B; + 025 : 0A; + 026 : 09; + 027 : 08; + 028 : 07; + 029 : 06; + 02a : 05; + 02b : 04; + 02c : 03; + 02d : 02; + 02e : 01; + 02f : 00; + 030 : 0F; + 031 : 0E; + 032 : 0D; + 033 : 0C; + 034 : 0B; + 035 : 0A; + 036 : 09; + 037 : 08; + 038 : 07; + 039 : 06; + 03a : 05; + 03b : 04; + 03c : 03; + 03d : 02; + 03e : 01; + 03f : 00; + 040 : 0F; + 041 : 0E; + 042 : 0D; + 043 : 0C; + 044 : 0B; + 045 : 0A; + 046 : 09; + 047 : 08; + 048 : 07; + 049 : 06; + 04a : 05; + 04b : 04; + 04c : 03; + 04d : 02; + 04e : 01; + 04f : 00; + 050 : 0F; + 051 : 0E; + 052 : 0D; + 053 : 0C; + 054 : 0B; + 055 : 0A; + 056 : 09; + 057 : 08; + 058 : 07; + 059 : 06; + 05a : 05; + 05b : 04; + 05c : 03; + 05d : 02; + 05e : 01; + 05f : 00; + 060 : 0F; + 061 : 0E; + 062 : 0D; + 063 : 0C; + 064 : 0B; + 065 : 0A; + 066 : 09; + 067 : 08; + 068 : 07; + 069 : 06; + 06a : 05; + 06b : 04; + 06c : 03; + 06d : 02; + 06e : 01; + 06f : 00; + 070 : 0F; + 071 : 0E; + 072 : 0D; + 073 : 0C; + 074 : 0B; + 075 : 0A; + 076 : 09; + 077 : 08; + 078 : 07; + 079 : 06; + 07a : 05; + 07b : 04; + 07c : 03; + 07d : 02; + 07e : 01; + 07f : 00; + 080 : 0F; + 081 : 0E; + 082 : 0D; + 083 : 0C; + 084 : 0B; + 085 : 0A; + 086 : 09; + 087 : 08; + 088 : 07; + 089 : 06; + 08a : 05; + 08b : 04; + 08c : 03; + 08d : 02; + 08e : 01; + 08f : 00; + 090 : 0F; + 091 : 0E; + 092 : 0D; + 093 : 0C; + 094 : 0B; + 095 : 0A; + 096 : 09; + 097 : 08; + 098 : 07; + 099 : 06; + 09a : 05; + 09b : 04; + 09c : 03; + 09d : 02; + 09e : 01; + 09f : 00; + 0a0 : 0F; + 0a1 : 0E; + 0a2 : 0D; + 0a3 : 0C; + 0a4 : 0B; + 0a5 : 0A; + 0a6 : 09; + 0a7 : 08; + 0a8 : 07; + 0a9 : 06; + 0aa : 05; + 0ab : 04; + 0ac : 03; + 0ad : 02; + 0ae : 01; + 0af : 00; + 0b0 : 0F; + 0b1 : 0E; + 0b2 : 0D; + 0b3 : 0C; + 0b4 : 0B; + 0b5 : 0A; + 0b6 : 09; + 0b7 : 08; + 0b8 : 07; + 0b9 : 06; + 0ba : 05; + 0bb : 04; + 0bc : 03; + 0bd : 02; + 0be : 01; + 0bf : 00; + 0c0 : 0F; + 0c1 : 0E; + 0c2 : 0D; + 0c3 : 0C; + 0c4 : 0B; + 0c5 : 0A; + 0c6 : 09; + 0c7 : 08; + 0c8 : 07; + 0c9 : 06; + 0ca : 05; + 0cb : 04; + 0cc : 03; + 0cd : 02; + 0ce : 01; + 0cf : 00; + 0d0 : 0F; + 0d1 : 0E; + 0d2 : 0D; + 0d3 : 0C; + 0d4 : 0B; + 0d5 : 0A; + 0d6 : 09; + 0d7 : 08; + 0d8 : 07; + 0d9 : 06; + 0da : 05; + 0db : 04; + 0dc : 03; + 0dd : 02; + 0de : 01; + 0df : 00; + 0e0 : 0F; + 0e1 : 0E; + 0e2 : 0D; + 0e3 : 0C; + 0e4 : 0B; + 0e5 : 0A; + 0e6 : 09; + 0e7 : 08; + 0e8 : 07; + 0e9 : 06; + 0ea : 05; + 0eb : 04; + 0ec : 03; + 0ed : 02; + 0ee : 01; + 0ef : 00; + 0f0 : 0F; + 0f1 : 0E; + 0f2 : 0D; + 0f3 : 0C; + 0f4 : 0B; + 0f5 : 0A; + 0f6 : 09; + 0f7 : 08; + 0f8 : 07; + 0f9 : 06; + 0fa : 05; + 0fb : 04; + 0fc : 03; + 0fd : 02; + 0fe : 01; + 0ff : 00; +END; diff --git a/FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.tdf b/FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.tdf new file mode 100644 index 0000000..2c9adcc --- /dev/null +++ b/FPGA_quartus_GE/Video/VIDEO_MOD_MUX_CLUTCTR.tdf @@ -0,0 +1,675 @@ +TITLE "VIDEO MODUSE UND CLUT CONTROL"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_WORD.inc"; +INCLUDE "lpm_bustri_BYT.inc"; + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN VIDEO_MOD_MUX_CLUTCTR +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + nRSTO : INPUT; + MAIN_CLK : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_WR : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nFB_BURST : INPUT; + FB_ADR[31..0] : INPUT; + CLK33M : INPUT; + CLK25M : INPUT; + BLITTER_RUN : INPUT; + CLK_VIDEO : INPUT; + VR_D[8..0] : INPUT; + VR_BUSY : INPUT; + COLOR8 : OUTPUT; + ACP_CLUT_RD : OUTPUT; + COLOR1 : OUTPUT; + FALCON_CLUT_RDH : OUTPUT; + FALCON_CLUT_RDL : OUTPUT; + FALCON_CLUT_WR[3..0] : OUTPUT; + ST_CLUT_RD : OUTPUT; + ST_CLUT_WR[1..0] : OUTPUT; + CLUT_MUX_ADR[3..0] : OUTPUT; + HSYNC : OUTPUT; + VSYNC : OUTPUT; + nBLANK : OUTPUT; + nSYNC : OUTPUT; + nPD_VGA : OUTPUT; + FIFO_RDE : OUTPUT; + COLOR2 : OUTPUT; + COLOR4 : OUTPUT; + PIXEL_CLK : OUTPUT; + CLUT_OFF[3..0] : OUTPUT; + BLITTER_ON : OUTPUT; + VIDEO_RAM_CTR[15..0] : OUTPUT; + VIDEO_MOD_TA : OUTPUT; + CCR[23..0] : OUTPUT; + CCSEL[2..0] : OUTPUT; + ACP_CLUT_WR[3..0] : OUTPUT; + INTER_ZEI : OUTPUT; + DOP_FIFO_CLR : OUTPUT; + VIDEO_RECONFIG : OUTPUT; + VR_WR : OUTPUT; + VR_RD : OUTPUT; + CLR_FIFO : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + CLK17M :DFF; + CLK13M :DFF; + ACP_CLUT_CS :NODE; + ACP_CLUT :NODE; + VIDEO_PLL_CONFIG_CS :NODE; + VR_WR :DFF; + VR_DOUT[8..0] :DFFE; + VR_FRQ[7..0] :DFFE; + VIDEO_PLL_RECONFIG_CS :NODE; + VIDEO_RECONFIG :DFF; + FALCON_CLUT_CS :NODE; + FALCON_CLUT :NODE; + ST_CLUT_CS :NODE; + ST_CLUT :NODE; + FB_B[3..0] :NODE; + FB_16B[1..0] :NODE; + ST_SHIFT_MODE[1..0] :DFFE; + ST_SHIFT_MODE_CS :NODE; + FALCON_SHIFT_MODE[10..0] :DFFE; + FALCON_SHIFT_MODE_CS :NODE; + CLUT_MUX_ADR[3..0] :DFF; + CLUT_MUX_AV[1..0][3..0] :DFF; + ACP_VCTR_CS :NODE; + ACP_VCTR[31..0] :DFFE; + CCR_CS :NODE; + CCR[23..0] :DFFE; + ACP_VIDEO_ON :NODE; + SYS_CTR[6..0] :DFFE; + SYS_CTR_CS :NODE; + VDL_LOF[15..0] :DFFE; + VDL_LOF_CS :NODE; + VDL_LWD[15..0] :DFFE; + VDL_LWD_CS :NODE; +-- DIV. CONTROL REGISTER + CLUT_TA :DFF; -- BRAUCHT EIN WAITSTAT + HSYNC :DFF; + HSYNC_I[7..0] :DFF; + HSY_LEN[7..0] :DFF; -- LÄNGE HSYNC PULS IN PIXEL_CLK + HSYNC_START :DFF; + LAST :DFF; -- LETZTES PIXEL EINER ZEILE ERREICHT + VSYNC :DFF; + VSYNC_START :DFFE; + VSYNC_I[2..0] :DFFE; + nBLANK :DFF; + DISP_ON :DFF; + DPO_ZL :DFFE; + DPO_ON :DFF; + DPO_OFF :DFF; + VDTRON :DFF; + VDO_ZL :DFFE; + VDO_ON :DFF; + VDO_OFF :DFF; + VHCNT[11..0] :DFF; + SUB_PIXEL_CNT[6..0] :DFFE; + VVCNT[10..0] :DFFE; + VERZ[2..0][9..0] :DFF; + RAND[6..0] :DFF; + RAND_ON :NODE; + FIFO_RDE :DFF; + CLR_FIFO :DFFE; + START_ZEILE :DFFE; + SYNC_PIX :DFF; + SYNC_PIX1 :DFF; + SYNC_PIX2 :DFF; + CCSEL[2..0] :DFF; + COLOR16 :NODE; + COLOR24 :NODE; +-- ATARI RESOLUTION + ATARI_SYNC :NODE; + ATARI_HH[31..0] :DFFE; -- HORIZONTAL TIMING 640x480 + ATARI_HH_CS :NODE; + ATARI_VH[31..0] :DFFE; -- VERTIKAL TIMING 640x480 + ATARI_VH_CS :NODE; + ATARI_HL[31..0] :DFFE; -- HORIZONTAL TIMING 320x240 + ATARI_HL_CS :NODE; + ATARI_VL[31..0] :DFFE; -- VERTIKAL TIMING 320x240 + ATARI_VL_CS :NODE; +-- HORIZONTAL + RAND_LINKS[11..0] :NODE; + HDIS_START[11..0] :NODE; + HDIS_END[11..0] :NODE; + RAND_RECHTS[11..0] :NODE; + HS_START[11..0] :NODE; + H_TOTAL[11..0] :NODE; + HDIS_LEN[11..0] :NODE; + MULF[5..0] :NODE; + VDL_HHT[11..0] :DFFE; + VDL_HHT_CS :NODE; + VDL_HBE[11..0] :DFFE; + VDL_HBE_CS :NODE; + VDL_HDB[11..0] :DFFE; + VDL_HDB_CS :NODE; + VDL_HDE[11..0] :DFFE; + VDL_HDE_CS :NODE; + VDL_HBB[11..0] :DFFE; + VDL_HBB_CS :NODE; + VDL_HSS[11..0] :DFFE; + VDL_HSS_CS :NODE; +-- VERTIKAL + RAND_OBEN[10..0] :NODE; + VDIS_START[10..0] :NODE; + VDIS_END[10..0] :NODE; + RAND_UNTEN[10..0] :NODE; + VS_START[10..0] :NODE; + V_TOTAL[10..0] :NODE; + FALCON_VIDEO :NODE; + ST_VIDEO :NODE; + INTER_ZEI :DFF; + DOP_ZEI :DFF; + DOP_FIFO_CLR :DFF; + + VDL_VBE[10..0] :DFFE; + VDL_VBE_CS :NODE; + VDL_VDB[10..0] :DFFE; + VDL_VDB_CS :NODE; + VDL_VDE[10..0] :DFFE; + VDL_VDE_CS :NODE; + VDL_VBB[10..0] :DFFE; + VDL_VBB_CS :NODE; + VDL_VSS[10..0] :DFFE; + VDL_VSS_CS :NODE; + VDL_VFT[10..0] :DFFE; + VDL_VFT_CS :NODE; + VDL_VCT[8..0] :DFFE; + VDL_VCT_CS :NODE; + VDL_VMD[3..0] :DFFE; + VDL_VMD_CS :NODE; + +BEGIN +-- BYT SELECT 32 BIT + FB_B0 = FB_ADR[1..0]==0; -- ADR==0 + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- BYT SELECT 16 BIT + FB_16B0 = FB_ADR[0]==0; -- ADR==0 + FB_16B1 = FB_ADR[0]==1 -- ADR==1 + # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT +-- ACP CLUT -- + ACP_CLUT_CS = !nFB_CS2 & FB_ADR[27..10]==H"0"; -- 0-3FF/1024 + ACP_CLUT_RD = ACP_CLUT_CS & !nFB_OE; + ACP_CLUT_WR[] = FB_B[] & ACP_CLUT_CS & !nFB_WR; + CLUT_TA.CLK = MAIN_CLK; + CLUT_TA = (ACP_CLUT_CS # FALCON_CLUT_CS # ST_CLUT_CS) & !VIDEO_MOD_TA; +--FALCON CLUT -- + FALCON_CLUT_CS = !nFB_CS1 & FB_ADR[19..10]==H"3E6"; -- $F9800/$400 + FALCON_CLUT_RDH = FALCON_CLUT_CS & !nFB_OE & !FB_ADR1; -- HIGH WORD + FALCON_CLUT_RDL = FALCON_CLUT_CS & !nFB_OE & FB_ADR1; -- LOW WORD + FALCON_CLUT_WR[1..0] = FB_16B[] & !FB_ADR1 & FALCON_CLUT_CS & !nFB_WR; + FALCON_CLUT_WR[3..2] = FB_16B[] & FB_ADR1 & FALCON_CLUT_CS & !nFB_WR; +-- ST CLUT -- + ST_CLUT_CS = !nFB_CS1 & FB_ADR[19..5]==H"7C12"; -- $F8240/$20 + ST_CLUT_RD = ST_CLUT_CS & !nFB_OE; + ST_CLUT_WR[] = FB_16B[] & ST_CLUT_CS & !nFB_WR; +-- ST SHIFT MODE + ST_SHIFT_MODE[].CLK = MAIN_CLK; + ST_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C130"; -- $F8260/2 + ST_SHIFT_MODE[] = FB_AD[25..24]; + ST_SHIFT_MODE[].ENA = ST_SHIFT_MODE_CS & !nFB_WR & FB_B0; + COLOR1 = ST_SHIFT_MODE[]==B"10" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- MONO + COLOR2 = ST_SHIFT_MODE[]==B"01" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 4 FARBEN + COLOR4 = ST_SHIFT_MODE[]==B"00" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 16 FARBEN +-- FALCON SHIFT MODE + FALCON_SHIFT_MODE[].CLK = MAIN_CLK; + FALCON_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C133"; -- $F8266/2 + FALCON_SHIFT_MODE[] = FB_AD[26..16]; + FALCON_SHIFT_MODE[10..8].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B2; + FALCON_SHIFT_MODE[7..0].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B3; + CLUT_OFF[3..0] = FALCON_SHIFT_MODE[3..0] & COLOR4; + COLOR1 = FALCON_SHIFT_MODE10 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR8 = FALCON_SHIFT_MODE4 & !COLOR16 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR16 = FALCON_SHIFT_MODE8 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR4 = !COLOR1 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON; +-- ACP VIDEO CONTROL BIT 0=ACP VIDEO ON, 1=POWER ON VIDEO DAC, 2=ACP 24BIT,3=ACP 16BIT,4=ACP 8BIT,5=ACP 1BIT, 6=FALCON SHIFT MODE;7=ST SHIFT MODE;9..8= VCLK FREQUENZ;15=-SYNC ALLOWED; 31..16=VIDEO_RAM_CTR,25=RANDFARBE EINSCHALTEN, 26=STANDARD ATARI SYNCS + ACP_VCTR[].CLK = MAIN_CLK; + ACP_VCTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"100"; -- $400/4 + ACP_VCTR[31..8] = FB_AD[31..8]; + ACP_VCTR[5..0] = FB_AD[5..0]; + ACP_VCTR[31..24].ENA = ACP_VCTR_CS & FB_B0 & !nFB_WR; + ACP_VCTR[23..16].ENA = ACP_VCTR_CS & FB_B1 & !nFB_WR; + ACP_VCTR[15..8].ENA = ACP_VCTR_CS & FB_B2 & !nFB_WR; + ACP_VCTR[5..0].ENA = ACP_VCTR_CS & FB_B3 & !nFB_WR; + ACP_VIDEO_ON = ACP_VCTR0; + nPD_VGA = ACP_VCTR1; + -- ATARI MODUS + ATARI_SYNC = ACP_VCTR26; -- WENN 1 AUTOMATISCHE AUFLÖSUNG + -- HORIZONTAL TIMING 640x480 + ATARI_HH[].CLK = MAIN_CLK; + ATARI_HH_CS = !nFB_CS2 & FB_ADR[27..2]==H"104"; -- $410/4 + ATARI_HH[] = FB_AD[]; + ATARI_HH[31..24].ENA = ATARI_HH_CS & FB_B0 & !nFB_WR; + ATARI_HH[23..16].ENA = ATARI_HH_CS & FB_B1 & !nFB_WR; + ATARI_HH[15..8].ENA = ATARI_HH_CS & FB_B2 & !nFB_WR; + ATARI_HH[7..0].ENA = ATARI_HH_CS & FB_B3 & !nFB_WR; + -- VERTIKAL TIMING 640x480 + ATARI_VH[].CLK = MAIN_CLK; + ATARI_VH_CS = !nFB_CS2 & FB_ADR[27..2]==H"105"; -- $414/4 + ATARI_VH[] = FB_AD[]; + ATARI_VH[31..24].ENA = ATARI_VH_CS & FB_B0 & !nFB_WR; + ATARI_VH[23..16].ENA = ATARI_VH_CS & FB_B1 & !nFB_WR; + ATARI_VH[15..8].ENA = ATARI_VH_CS & FB_B2 & !nFB_WR; + ATARI_VH[7..0].ENA = ATARI_VH_CS & FB_B3 & !nFB_WR; + -- HORIZONTAL TIMING 320x240 + ATARI_HL[].CLK = MAIN_CLK; + ATARI_HL_CS = !nFB_CS2 & FB_ADR[27..2]==H"106"; -- $418/4 + ATARI_HL[] = FB_AD[]; + ATARI_HL[31..24].ENA = ATARI_HL_CS & FB_B0 & !nFB_WR; + ATARI_HL[23..16].ENA = ATARI_HL_CS & FB_B1 & !nFB_WR; + ATARI_HL[15..8].ENA = ATARI_HL_CS & FB_B2 & !nFB_WR; + ATARI_HL[7..0].ENA = ATARI_HL_CS & FB_B3 & !nFB_WR; + -- VERTIKAL TIMING 320x240 + ATARI_VL[].CLK = MAIN_CLK; + ATARI_VL_CS = !nFB_CS2 & FB_ADR[27..2]==H"107"; -- $41C/4 + ATARI_VL[] = FB_AD[]; + ATARI_VL[31..24].ENA = ATARI_VL_CS & FB_B0 & !nFB_WR; + ATARI_VL[23..16].ENA = ATARI_VL_CS & FB_B1 & !nFB_WR; + ATARI_VL[15..8].ENA = ATARI_VL_CS & FB_B2 & !nFB_WR; + ATARI_VL[7..0].ENA = ATARI_VL_CS & FB_B3 & !nFB_WR; +-- VIDEO PLL CONFIG + VIDEO_PLL_CONFIG_CS = !nFB_CS2 & FB_ADR[27..9]==H"3" & FB_B0 & FB_B1; -- $(F)000'0600-7FF ->6/2 WORD RESP LONG ONLY + VR_WR.CLK = MAIN_CLK; + VR_WR = VIDEO_PLL_CONFIG_CS & !nFB_WR & !VR_BUSY & !VR_WR; + VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & !VR_BUSY; + VR_DOUT[].CLK = MAIN_CLK; + VR_DOUT[].ENA = !VR_BUSY; + VR_DOUT[] = VR_D[]; + VR_FRQ[].CLK = MAIN_CLK; + VR_FRQ[].ENA = VR_WR & FB_ADR[8..0]==H"04"; + VR_FRQ[] = FB_AD[23..16]; +-- VIDEO PLL RECONFIG + VIDEO_PLL_RECONFIG_CS = !nFB_CS2 & FB_ADR[27..0]==H"800" & FB_B0; -- $(F)000'0800 + VIDEO_RECONFIG.CLK = MAIN_CLK; + VIDEO_RECONFIG = VIDEO_PLL_RECONFIG_CS & !nFB_WR & !VR_BUSY & !VIDEO_RECONFIG; +------------------------------------------------------------------------------------------------------------------------ + VIDEO_RAM_CTR[] = ACP_VCTR[31..16]; +-------------- COLOR MODE IM ACP SETZEN + COLOR1 = ACP_VCTR5 & !ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR8 = ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR16 = ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR24 = ACP_VCTR2 & ACP_VIDEO_ON; + ACP_CLUT = ACP_VIDEO_ON & (COLOR1 # COLOR8) # ST_VIDEO & COLOR1; +-- ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER + ACP_VCTR7 = FALCON_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR6 = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR[7..6].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR # ST_SHIFT_MODE_CS & !nFB_WR # ACP_VCTR_CS & FB_B3 & !nFB_WR & FB_AD0; + FALCON_VIDEO = ACP_VCTR7; + FALCON_CLUT = FALCON_VIDEO & !ACP_VIDEO_ON & !COLOR16; + ST_VIDEO = ACP_VCTR6; + ST_CLUT = ST_VIDEO & !ACP_VIDEO_ON & !FALCON_CLUT & !COLOR1; + CCSEL[].CLK = PIXEL_CLK; + CCSEL[] = B"000" & ST_CLUT -- ONLY FOR INFORMATION + # B"001" & FALCON_CLUT + # B"100" & ACP_CLUT + # B"101" & COLOR16 + # B"110" & COLOR24 + # B"111" & RAND_ON; +-- DIVERSE (VIDEO)-REGISTER ---------------------------- +-- RANDFARBE + CCR[].CLK = MAIN_CLK; + CCR_CS = !nFB_CS2 & FB_ADR[27..2]==H"101"; -- $404/4 + CCR[] = FB_AD[23..0]; + CCR[23..16].ENA = CCR_CS & FB_B1 & !nFB_WR; + CCR[15..8].ENA = CCR_CS & FB_B2 & !nFB_WR; + CCR[7..0].ENA = CCR_CS & FB_B3 & !nFB_WR; +--SYS CTR + SYS_CTR_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C003"; -- $8006/2 + SYS_CTR[].CLK = MAIN_CLK; + SYS_CTR[6..0] = FB_AD[22..16]; + SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3; + BLITTER_ON = !SYS_CTR3; +--VDL_LOF + VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2 + VDL_LOF[].CLK = MAIN_CLK; + VDL_LOF[] = FB_AD[31..16]; + VDL_LOF[15..8].ENA = VDL_LOF_CS & !nFB_WR & FB_B2; + VDL_LOF[7..0].ENA = VDL_LOF_CS & !nFB_WR & FB_B3; +--VDL_LWD + VDL_LWD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C108"; -- $8210/2 + VDL_LWD[].CLK = MAIN_CLK; + VDL_LWD[] = FB_AD[31..16]; + VDL_LWD[15..8].ENA = VDL_LWD_CS & !nFB_WR & FB_B0; + VDL_LWD[7..0].ENA = VDL_LWD_CS & !nFB_WR & FB_B1; +-- HORIZONTAL +-- VDL_HHT + VDL_HHT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C141"; -- $8282/2 + VDL_HHT[].CLK = MAIN_CLK; + VDL_HHT[] = FB_AD[27..16]; + VDL_HHT[11..8].ENA = VDL_HHT_CS & !nFB_WR & FB_B2; + VDL_HHT[7..0].ENA = VDL_HHT_CS & !nFB_WR & FB_B3; +-- VDL_HBE + VDL_HBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C143"; -- $8286/2 + VDL_HBE[].CLK = MAIN_CLK; + VDL_HBE[] = FB_AD[27..16]; + VDL_HBE[11..8].ENA = VDL_HBE_CS & !nFB_WR & FB_B2; + VDL_HBE[7..0].ENA = VDL_HBE_CS & !nFB_WR & FB_B3; +-- VDL_HDB + VDL_HDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C144"; -- $8288/2 + VDL_HDB[].CLK = MAIN_CLK; + VDL_HDB[] = FB_AD[27..16]; + VDL_HDB[11..8].ENA = VDL_HDB_CS & !nFB_WR & FB_B0; + VDL_HDB[7..0].ENA = VDL_HDB_CS & !nFB_WR & FB_B1; +-- VDL_HDE + VDL_HDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C145"; -- $828A/2 + VDL_HDE[].CLK = MAIN_CLK; + VDL_HDE[] = FB_AD[27..16]; + VDL_HDE[11..8].ENA = VDL_HDE_CS & !nFB_WR & FB_B2; + VDL_HDE[7..0].ENA = VDL_HDE_CS & !nFB_WR & FB_B3; +-- VDL_HBB + VDL_HBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C142"; -- $8284/2 + VDL_HBB[].CLK = MAIN_CLK; + VDL_HBB[] = FB_AD[27..16]; + VDL_HBB[11..8].ENA = VDL_HBB_CS & !nFB_WR & FB_B0; + VDL_HBB[7..0].ENA = VDL_HBB_CS & !nFB_WR & FB_B1; +-- VDL_HSS + VDL_HSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C146"; -- $828C/2 + VDL_HSS[].CLK = MAIN_CLK; + VDL_HSS[] = FB_AD[27..16]; + VDL_HSS[11..8].ENA = VDL_HSS_CS & !nFB_WR & FB_B0; + VDL_HSS[7..0].ENA = VDL_HSS_CS & !nFB_WR & FB_B1; +-- VERTIKAL +-- VDL_VBE + VDL_VBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C153"; -- $82A6/2 + VDL_VBE[].CLK = MAIN_CLK; + VDL_VBE[] = FB_AD[26..16]; + VDL_VBE[10..8].ENA = VDL_VBE_CS & !nFB_WR & FB_B2; + VDL_VBE[7..0].ENA = VDL_VBE_CS & !nFB_WR & FB_B3; +-- VDL_VDB + VDL_VDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C154"; -- $82A8/2 + VDL_VDB[].CLK = MAIN_CLK; + VDL_VDB[] = FB_AD[26..16]; + VDL_VDB[10..8].ENA = VDL_VDB_CS & !nFB_WR & FB_B0; + VDL_VDB[7..0].ENA = VDL_VDB_CS & !nFB_WR & FB_B1; +-- VDL_VDE + VDL_VDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C155"; -- $82AA/2 + VDL_VDE[].CLK = MAIN_CLK; + VDL_VDE[] = FB_AD[26..16]; + VDL_VDE[10..8].ENA = VDL_VDE_CS & !nFB_WR & FB_B2; + VDL_VDE[7..0].ENA = VDL_VDE_CS & !nFB_WR & FB_B3; +-- VDL_VBB + VDL_VBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C152"; -- $82A4/2 + VDL_VBB[].CLK = MAIN_CLK; + VDL_VBB[] = FB_AD[26..16]; + VDL_VBB[10..8].ENA = VDL_VBB_CS & !nFB_WR & FB_B0; + VDL_VBB[7..0].ENA = VDL_VBB_CS & !nFB_WR & FB_B1; +-- VDL_VSS + VDL_VSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C156"; -- $82AC/2 + VDL_VSS[].CLK = MAIN_CLK; + VDL_VSS[] = FB_AD[26..16]; + VDL_VSS[10..8].ENA = VDL_VSS_CS & !nFB_WR & FB_B0; + VDL_VSS[7..0].ENA = VDL_VSS_CS & !nFB_WR & FB_B1; +-- VDL_VFT + VDL_VFT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C151"; -- $82A2/2 + VDL_VFT[].CLK = MAIN_CLK; + VDL_VFT[] = FB_AD[26..16]; + VDL_VFT[10..8].ENA = VDL_VFT_CS & !nFB_WR & FB_B2; + VDL_VFT[7..0].ENA = VDL_VFT_CS & !nFB_WR & FB_B3; +-- VDL_VCT + VDL_VCT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C160"; -- $82C0/2 + VDL_VCT[].CLK = MAIN_CLK; + VDL_VCT[] = FB_AD[24..16]; + VDL_VCT[8].ENA = VDL_VCT_CS & !nFB_WR & FB_B0; + VDL_VCT[7..0].ENA = VDL_VCT_CS & !nFB_WR & FB_B1; +-- VDL_VMD + VDL_VMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C161"; -- $82C2/2 + VDL_VMD[].CLK = MAIN_CLK; + VDL_VMD[] = FB_AD[19..16]; + VDL_VMD[3..0].ENA = VDL_VMD_CS & !nFB_WR & FB_B3; +--- REGISTER OUT + FB_AD[31..16] = lpm_bustri_WORD( + ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000") + # FALCON_SHIFT_MODE_CS & (0,FALCON_SHIFT_MODE[]) + # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],!BLITTER_RUN,SYS_CTR[2..0]) + # VDL_LOF_CS & VDL_LOF[] + # VDL_LWD_CS & VDL_LWD[] + # VDL_HBE_CS & (0,VDL_HBE[]) + # VDL_HDB_CS & (0,VDL_HDB[]) + # VDL_HDE_CS & (0,VDL_HDE[]) + # VDL_HBB_CS & (0,VDL_HBB[]) + # VDL_HSS_CS & (0,VDL_HSS[]) + # VDL_HHT_CS & (0,VDL_HHT[]) + # VDL_VBE_CS & (0,VDL_VBE[]) + # VDL_VDB_CS & (0,VDL_VDB[]) + # VDL_VDE_CS & (0,VDL_VDE[]) + # VDL_VBB_CS & (0,VDL_VBB[]) + # VDL_VSS_CS & (0,VDL_VSS[]) + # VDL_VFT_CS & (0,VDL_VFT[]) + # VDL_VCT_CS & (0,VDL_VCT[]) + # VDL_VMD_CS & (0,VDL_VMD[]) + # ACP_VCTR_CS & ACP_VCTR[31..16] + # ATARI_HH_CS & ATARI_HH[31..16] + # ATARI_VH_CS & ATARI_VH[31..16] + # ATARI_HL_CS & ATARI_HL[31..16] + # ATARI_VL_CS & ATARI_VL[31..16] + # CCR_CS & (0,CCR[23..16]) + # VIDEO_PLL_CONFIG_CS & (0,VR_DOUT[]) + # VIDEO_PLL_RECONFIG_CS & (VR_BUSY,B"0000",VR_WR,VR_RD,VIDEO_RECONFIG,H"FA") + ,(ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # CCR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS # VIDEO_PLL_CONFIG_CS # VIDEO_PLL_RECONFIG_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS) & !nFB_OE); + + FB_AD[15..0] = lpm_bustri_WORD( + ACP_VCTR_CS & ACP_VCTR[15..0] + # ATARI_HH_CS & ATARI_HH[15..0] + # ATARI_VH_CS & ATARI_VH[15..0] + # ATARI_HL_CS & ATARI_HL[15..0] + # ATARI_VL_CS & ATARI_VL[15..0] + # CCR_CS & CCR[15..0] + ,(ACP_VCTR_CS # CCR_CS # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS ) & !nFB_OE); + + VIDEO_MOD_TA = CLUT_TA # ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS; + +-- VIDEO AUSGABE SETZEN + CLK17M.CLK = CLK33M; + CLK17M = !CLK17M; + CLK13M.CLK = CLK25M; + CLK13M = !CLK13M; + PIXEL_CLK = CLK13M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # CLK17M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # CLK25M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # CLK33M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # CLK25M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # CLK33M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # CLK_VIDEO & ACP_VIDEO_ON & ACP_VCTR[9]; +-------------------------------------------------------------- +-- HORIZONTALE SYNC LÄNGE in PIXEL_CLK +---------------------------------------------------------------- + HSY_LEN[].CLK = MAIN_CLK; + HSY_LEN[] = 14 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # 16 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # 28 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # 32 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # 28 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # 32 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # 16 + (0,VR_FRQ[7..1]) & ACP_VIDEO_ON & ACP_VCTR[9]; -- hsync puls length in pixeln=frequenz/ = 500ns + + MULF[] = 2 & !ST_VIDEO & VDL_VMD2 -- MULTIPLIKATIONS FAKTOR + # 4 & !ST_VIDEO & !VDL_VMD2 + # 16 & ST_VIDEO & VDL_VMD2 + # 32 & ST_VIDEO & !VDL_VMD2; + + + HDIS_LEN[] = 320 & VDL_VMD2 -- BREITE IN PIXELN + # 640 & !VDL_VMD2; + +-- DOPPELZEILENMODUS + DOP_ZEI.CLK = MAIN_CLK; + DOP_ZEI = VDL_VMD0 & ST_VIDEO; -- ZEILENVERDOPPELUNG EIN AUS + INTER_ZEI.CLK = PIXEL_CLK; + INTER_ZEI = DOP_ZEI & VVCNT0!=VDIS_START0 & VVCNT[]!=0 & VHCNT[]<(HDIS_END[]-1) -- EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC + # DOP_ZEI & VVCNT0==VDIS_START0 & VVCNT[]!=0 & VHCNT[]>(HDIS_END[]-2); -- EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC + DOP_FIFO_CLR.CLK = PIXEL_CLK; + DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START + + RAND_LINKS[] = VDL_HBE[] & ACP_VIDEO_ON + # 21 & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # 42 & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # VDL_HBE[] * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + HDIS_START[] = VDL_HDB[] & ACP_VIDEO_ON + # RAND_LINKS[]+1 & !ACP_VIDEO_ON; -- + HDIS_END[] = VDL_HDE[] & ACP_VIDEO_ON + # RAND_LINKS[]+HDIS_LEN[] & !ACP_VIDEO_ON; -- + RAND_RECHTS[] = VDL_HBB[] & ACP_VIDEO_ON + # HDIS_END[]+1 & !ACP_VIDEO_ON; -- + HS_START[] = VDL_HSS[] & ACP_VIDEO_ON + # ATARI_HL[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (VDL_HHT[]+1+VDL_HSS[]) * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + H_TOTAL[] = VDL_HHT[] & ACP_VIDEO_ON + # ATARI_HL[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (VDL_HHT[]+2) * (0,MULF[]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + + RAND_OBEN[] = VDL_VBE[] & ACP_VIDEO_ON + # 31 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_START[] = VDL_VDB[] & ACP_VIDEO_ON + # 32 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VDB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_END[] = VDL_VDE[] & ACP_VIDEO_ON + # 431 & !ACP_VIDEO_ON & ATARI_SYNC & ST_VIDEO + # 511 & !ACP_VIDEO_ON & ATARI_SYNC & !ST_VIDEO + # (0,VDL_VDE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + RAND_UNTEN[] = VDL_VBB[] & ACP_VIDEO_ON + # VDIS_END[]+1 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VS_START[] = VDL_VSS[] & ACP_VIDEO_ON + # ATARI_VL[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VSS[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + V_TOTAL[] = VDL_VFT[] & ACP_VIDEO_ON + # ATARI_VL[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VFT[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; +-- ZÄHLER + LAST.CLK = PIXEL_CLK; + LAST = VHCNT[]==(H_TOTAL[]-2); + VHCNT[].CLK = PIXEL_CLK; + VHCNT[] = (VHCNT[] + 1) & !LAST; + VVCNT[].CLK = PIXEL_CLK; + VVCNT[].ENA = LAST; + VVCNT[] = (VVCNT[] + 1) & (VVCNT[]!=V_TOTAL[]-1); +-- DISPLAY ON OFF + DPO_ZL.CLK = PIXEL_CLK; + DPO_ZL = (VVCNT[]>RAND_OBEN[]-1) & (VVCNT[]=(VDIS_START[]-1)) & (VVCNT[]6/2 WORD RESP LONG ONLY + VR_WR.CLK = MAIN_CLK; + VR_WR = VIDEO_PLL_CONFIG_CS & !nFB_WR & !VR_BUSY & !VR_WR; + VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & !VR_BUSY; + VR_DOUT[].CLK = MAIN_CLK; + VR_DOUT[].ENA = !VR_BUSY; + VR_DOUT[] = VR_D[]; + VR_FRQ[].CLK = MAIN_CLK; + VR_FRQ[].ENA = VR_WR & FB_ADR[8..0]==H"04"; + VR_FRQ[] = FB_AD[23..16]; +-- VIDEO PLL RECONFIG + VIDEO_PLL_RECONFIG_CS = !nFB_CS2 & FB_ADR[27..0]==H"800" & FB_B0; -- $(F)000'0800 + VIDEO_RECONFIG.CLK = MAIN_CLK; + VIDEO_RECONFIG = VIDEO_PLL_RECONFIG_CS & !nFB_WR & !VR_BUSY & !VIDEO_RECONFIG; +------------------------------------------------------------------------------------------------------------------------ + VIDEO_RAM_CTR[] = ACP_VCTR[31..16]; +-------------- COLOR MODE IM ACP SETZEN + COLOR1 = ACP_VCTR5 & !ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR8 = ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR16 = ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR24 = ACP_VCTR2 & ACP_VIDEO_ON; + ACP_CLUT = ACP_VIDEO_ON & (COLOR1 # COLOR8) # ST_VIDEO & COLOR1; +-- ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER + ACP_VCTR7 = FALCON_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR6 = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR[7..6].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR # ST_SHIFT_MODE_CS & !nFB_WR # ACP_VCTR_CS & FB_B3 & !nFB_WR & FB_AD0; + FALCON_VIDEO = ACP_VCTR7; + FALCON_CLUT = FALCON_VIDEO & !ACP_VIDEO_ON & !COLOR16; + ST_VIDEO = ACP_VCTR6; + ST_CLUT = ST_VIDEO & !ACP_VIDEO_ON & !FALCON_CLUT & !COLOR1; + CCSEL[].CLK = PIXEL_CLK; + CCSEL[] = B"000" & ST_CLUT -- ONLY FOR INFORMATION + # B"001" & FALCON_CLUT + # B"100" & ACP_CLUT + # B"101" & COLOR16 + # B"110" & COLOR24 + # B"111" & RAND_ON; +-- DIVERSE (VIDEO)-REGISTER ---------------------------- +-- RANDFARBE + CCR[].CLK = MAIN_CLK; + CCR_CS = !nFB_CS2 & FB_ADR[27..2]==H"101"; -- $404/4 + CCR[] = FB_AD[23..0]; + CCR[23..16].ENA = CCR_CS & FB_B1 & !nFB_WR; + CCR[15..8].ENA = CCR_CS & FB_B2 & !nFB_WR; + CCR[7..0].ENA = CCR_CS & FB_B3 & !nFB_WR; +--SYS CTR + SYS_CTR_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C003"; -- $8006/2 + SYS_CTR[].CLK = MAIN_CLK; + SYS_CTR[6..0] = FB_AD[22..16]; + SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3; + BLITTER_ON = !SYS_CTR3; +--VDL_LOF + VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2 + VDL_LOF[].CLK = MAIN_CLK; + VDL_LOF[] = FB_AD[31..16]; + VDL_LOF[15..8].ENA = VDL_LOF_CS & !nFB_WR & FB_B2; + VDL_LOF[7..0].ENA = VDL_LOF_CS & !nFB_WR & FB_B3; +--VDL_LWD + VDL_LWD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C108"; -- $8210/2 + VDL_LWD[].CLK = MAIN_CLK; + VDL_LWD[] = FB_AD[31..16]; + VDL_LWD[15..8].ENA = VDL_LWD_CS & !nFB_WR & FB_B0; + VDL_LWD[7..0].ENA = VDL_LWD_CS & !nFB_WR & FB_B1; +-- HORIZONTAL +-- VDL_HHT + VDL_HHT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C141"; -- $8282/2 + VDL_HHT[].CLK = MAIN_CLK; + VDL_HHT[] = FB_AD[27..16]; + VDL_HHT[11..8].ENA = VDL_HHT_CS & !nFB_WR & FB_B2; + VDL_HHT[7..0].ENA = VDL_HHT_CS & !nFB_WR & FB_B3; +-- VDL_HBE + VDL_HBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C143"; -- $8286/2 + VDL_HBE[].CLK = MAIN_CLK; + VDL_HBE[] = FB_AD[27..16]; + VDL_HBE[11..8].ENA = VDL_HBE_CS & !nFB_WR & FB_B2; + VDL_HBE[7..0].ENA = VDL_HBE_CS & !nFB_WR & FB_B3; +-- VDL_HDB + VDL_HDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C144"; -- $8288/2 + VDL_HDB[].CLK = MAIN_CLK; + VDL_HDB[] = FB_AD[27..16]; + VDL_HDB[11..8].ENA = VDL_HDB_CS & !nFB_WR & FB_B0; + VDL_HDB[7..0].ENA = VDL_HDB_CS & !nFB_WR & FB_B1; +-- VDL_HDE + VDL_HDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C145"; -- $828A/2 + VDL_HDE[].CLK = MAIN_CLK; + VDL_HDE[] = FB_AD[27..16]; + VDL_HDE[11..8].ENA = VDL_HDE_CS & !nFB_WR & FB_B2; + VDL_HDE[7..0].ENA = VDL_HDE_CS & !nFB_WR & FB_B3; +-- VDL_HBB + VDL_HBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C142"; -- $8284/2 + VDL_HBB[].CLK = MAIN_CLK; + VDL_HBB[] = FB_AD[27..16]; + VDL_HBB[11..8].ENA = VDL_HBB_CS & !nFB_WR & FB_B0; + VDL_HBB[7..0].ENA = VDL_HBB_CS & !nFB_WR & FB_B1; +-- VDL_HSS + VDL_HSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C146"; -- $828C/2 + VDL_HSS[].CLK = MAIN_CLK; + VDL_HSS[] = FB_AD[27..16]; + VDL_HSS[11..8].ENA = VDL_HSS_CS & !nFB_WR & FB_B0; + VDL_HSS[7..0].ENA = VDL_HSS_CS & !nFB_WR & FB_B1; +-- VERTIKAL +-- VDL_VBE + VDL_VBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C153"; -- $82A6/2 + VDL_VBE[].CLK = MAIN_CLK; + VDL_VBE[] = FB_AD[26..16]; + VDL_VBE[10..8].ENA = VDL_VBE_CS & !nFB_WR & FB_B2; + VDL_VBE[7..0].ENA = VDL_VBE_CS & !nFB_WR & FB_B3; +-- VDL_VDB + VDL_VDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C154"; -- $82A8/2 + VDL_VDB[].CLK = MAIN_CLK; + VDL_VDB[] = FB_AD[26..16]; + VDL_VDB[10..8].ENA = VDL_VDB_CS & !nFB_WR & FB_B0; + VDL_VDB[7..0].ENA = VDL_VDB_CS & !nFB_WR & FB_B1; +-- VDL_VDE + VDL_VDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C155"; -- $82AA/2 + VDL_VDE[].CLK = MAIN_CLK; + VDL_VDE[] = FB_AD[26..16]; + VDL_VDE[10..8].ENA = VDL_VDE_CS & !nFB_WR & FB_B2; + VDL_VDE[7..0].ENA = VDL_VDE_CS & !nFB_WR & FB_B3; +-- VDL_VBB + VDL_VBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C152"; -- $82A4/2 + VDL_VBB[].CLK = MAIN_CLK; + VDL_VBB[] = FB_AD[26..16]; + VDL_VBB[10..8].ENA = VDL_VBB_CS & !nFB_WR & FB_B0; + VDL_VBB[7..0].ENA = VDL_VBB_CS & !nFB_WR & FB_B1; +-- VDL_VSS + VDL_VSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C156"; -- $82AC/2 + VDL_VSS[].CLK = MAIN_CLK; + VDL_VSS[] = FB_AD[26..16]; + VDL_VSS[10..8].ENA = VDL_VSS_CS & !nFB_WR & FB_B0; + VDL_VSS[7..0].ENA = VDL_VSS_CS & !nFB_WR & FB_B1; +-- VDL_VFT + VDL_VFT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C151"; -- $82A2/2 + VDL_VFT[].CLK = MAIN_CLK; + VDL_VFT[] = FB_AD[26..16]; + VDL_VFT[10..8].ENA = VDL_VFT_CS & !nFB_WR & FB_B2; + VDL_VFT[7..0].ENA = VDL_VFT_CS & !nFB_WR & FB_B3; +-- VDL_VCT + VDL_VCT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C160"; -- $82C0/2 + VDL_VCT[].CLK = MAIN_CLK; + VDL_VCT[] = FB_AD[24..16]; + VDL_VCT[8].ENA = VDL_VCT_CS & !nFB_WR & FB_B0; + VDL_VCT[7..0].ENA = VDL_VCT_CS & !nFB_WR & FB_B1; +-- VDL_VMD + VDL_VMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C161"; -- $82C2/2 + VDL_VMD[].CLK = MAIN_CLK; + VDL_VMD[] = FB_AD[19..16]; + VDL_VMD[3..0].ENA = VDL_VMD_CS & !nFB_WR & FB_B3; +--- REGISTER OUT + FB_AD[31..16] = lpm_bustri_WORD( + ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000") + # FALCON_SHIFT_MODE_CS & (0,FALCON_SHIFT_MODE[]) + # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],!BLITTER_RUN,SYS_CTR[2..0]) + # VDL_LOF_CS & VDL_LOF[] + # VDL_LWD_CS & VDL_LWD[] + # VDL_HBE_CS & (0,VDL_HBE[]) + # VDL_HDB_CS & (0,VDL_HDB[]) + # VDL_HDE_CS & (0,VDL_HDE[]) + # VDL_HBB_CS & (0,VDL_HBB[]) + # VDL_HSS_CS & (0,VDL_HSS[]) + # VDL_HHT_CS & (0,VDL_HHT[]) + # VDL_VBE_CS & (0,VDL_VBE[]) + # VDL_VDB_CS & (0,VDL_VDB[]) + # VDL_VDE_CS & (0,VDL_VDE[]) + # VDL_VBB_CS & (0,VDL_VBB[]) + # VDL_VSS_CS & (0,VDL_VSS[]) + # VDL_VFT_CS & (0,VDL_VFT[]) + # VDL_VCT_CS & (0,VDL_VCT[]) + # VDL_VMD_CS & (0,VDL_VMD[]) + # ACP_VCTR_CS & ACP_VCTR[31..16] + # ATARI_HH_CS & ATARI_HH[31..16] + # ATARI_VH_CS & ATARI_VH[31..16] + # ATARI_HL_CS & ATARI_HL[31..16] + # ATARI_VL_CS & ATARI_VL[31..16] + # CCR_CS & (0,CCR[23..16]) + # VIDEO_PLL_CONFIG_CS & (0,VR_DOUT[]) + # VIDEO_PLL_RECONFIG_CS & (VR_BUSY,B"0000",VR_WR,VR_RD,VIDEO_RECONFIG,H"FA") + ,(ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # CCR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS # VIDEO_PLL_CONFIG_CS # VIDEO_PLL_RECONFIG_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS) & !nFB_OE); + + FB_AD[15..0] = lpm_bustri_WORD( + ACP_VCTR_CS & ACP_VCTR[15..0] + # ATARI_HH_CS & ATARI_HH[15..0] + # ATARI_VH_CS & ATARI_VH[15..0] + # ATARI_HL_CS & ATARI_HL[15..0] + # ATARI_VL_CS & ATARI_VL[15..0] + # CCR_CS & CCR[15..0] + ,(ACP_VCTR_CS # CCR_CS # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS ) & !nFB_OE); + + VIDEO_MOD_TA = CLUT_TA # ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS; + +-- VIDEO AUSGABE SETZEN + CLK17M.CLK = CLK33M; + CLK17M = !CLK17M; + CLK13M.CLK = CLK25M; + CLK13M = !CLK13M; + PIXEL_CLK = CLK13M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # CLK17M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # CLK25M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # CLK33M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # CLK25M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # CLK33M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # CLK_VIDEO & ACP_VIDEO_ON & ACP_VCTR[9]; +-------------------------------------------------------------- +-- HORIZONTALE SYNC LÄNGE in PIXEL_CLK +---------------------------------------------------------------- + HSY_LEN[].CLK = MAIN_CLK; + HSY_LEN[] = 14 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # 16 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # 28 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # 32 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # 28 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # 32 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # 16 + (0,VR_FRQ[7..1]) & ACP_VIDEO_ON & ACP_VCTR[9]; -- hsync puls length in pixeln=frequenz/ = 500ns + + MULF[] = 2 & !ST_VIDEO & VDL_VMD2 -- MULTIPLIKATIONS FAKTOR + # 4 & !ST_VIDEO & !VDL_VMD2 + # 16 & ST_VIDEO & VDL_VMD2 + # 32 & ST_VIDEO & !VDL_VMD2; + + + HDIS_LEN[] = 320 & VDL_VMD2 -- BREITE IN PIXELN + # 640 & !VDL_VMD2; + +-- DOPPELZEILENMODUS + DOP_ZEI.CLK = MAIN_CLK; + DOP_ZEI = VDL_VMD0 & ST_VIDEO; -- ZEILENVERDOPPELUNG EIN AUS + INTER_ZEI.CLK = PIXEL_CLK; + INTER_ZEI = DOP_ZEI & VVCNT0!=VDIS_START0 & VVCNT[]!=0 & VHCNT[]<(HDIS_END[]-1) -- EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC + # DOP_ZEI & VVCNT0==VDIS_START0 & VVCNT[]!=0 & VHCNT[]>(HDIS_END[]-2); -- EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC + DOP_FIFO_CLR.CLK = PIXEL_CLK; + DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START + + RAND_LINKS[] = VDL_HBE[] & ACP_VIDEO_ON + # 21 & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # 42 & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # VDL_HBE[] * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + HDIS_START[] = VDL_HDB[] & ACP_VIDEO_ON + # RAND_LINKS[]+1 & !ACP_VIDEO_ON; -- + HDIS_END[] = VDL_HDE[] & ACP_VIDEO_ON + # RAND_LINKS[]+HDIS_LEN[] & !ACP_VIDEO_ON; -- + RAND_RECHTS[] = VDL_HBB[] & ACP_VIDEO_ON + # HDIS_END[]+1 & !ACP_VIDEO_ON; -- + HS_START[] = VDL_HSS[] & ACP_VIDEO_ON + # ATARI_HL[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (VDL_HHT[]+1+VDL_HSS[]) * (0,MULF[5..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + H_TOTAL[] = VDL_HHT[] & ACP_VIDEO_ON + # ATARI_HL[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (VDL_HHT[]+2) * (0,MULF[]) & !ACP_VIDEO_ON & !ATARI_SYNC; -- + + RAND_OBEN[] = VDL_VBE[] & ACP_VIDEO_ON + # 31 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_START[] = VDL_VDB[] & ACP_VIDEO_ON + # 32 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VDB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_END[] = VDL_VDE[] & ACP_VIDEO_ON + # 431 & !ACP_VIDEO_ON & ATARI_SYNC & ST_VIDEO + # 511 & !ACP_VIDEO_ON & ATARI_SYNC & !ST_VIDEO + # (0,VDL_VDE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + RAND_UNTEN[] = VDL_VBB[] & ACP_VIDEO_ON + # VDIS_END[]+1 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VS_START[] = VDL_VSS[] & ACP_VIDEO_ON + # ATARI_VL[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VSS[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + V_TOTAL[] = VDL_VFT[] & ACP_VIDEO_ON + # ATARI_VL[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VFT[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; +-- ZÄHLER + LAST.CLK = PIXEL_CLK; + LAST = VHCNT[]==(H_TOTAL[]-2); + VHCNT[].CLK = PIXEL_CLK; + VHCNT[] = (VHCNT[] + 1) & !LAST; + VVCNT[].CLK = PIXEL_CLK; + VVCNT[].ENA = LAST; + VVCNT[] = (VVCNT[] + 1) & (VVCNT[]!=V_TOTAL[]-1); +-- DISPLAY ON OFF + DPO_ZL.CLK = PIXEL_CLK; + DPO_ZL = (VVCNT[]>RAND_OBEN[]-1) & (VVCNT[]=(VDIS_START[]-1)) & (VVCNT[]6/2 WORD RESP LONG ONLY + assign VIDEO_PLL_CONFIG_CS = (!nFB_CS2) & FB_ADR[27:9] == 19'h3 & FB_B[0] & + FB_B[1]; + assign VR_WR_clk = MAIN_CLK; + assign VR_WR_d = VIDEO_PLL_CONFIG_CS & (!nFB_WR) & (!VR_BUSY) & (!VR_WR_q); + assign VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & (!VR_BUSY); + assign VR_DOUT0_clk_ctrl = MAIN_CLK; + assign VR_DOUT0_ena_ctrl = !VR_BUSY; + assign VR_DOUT_d = VR_D; + assign VR_FRQ0_clk_ctrl = MAIN_CLK; + assign VR_FRQ0_ena_ctrl = VR_WR_q & FB_ADR[8:0] == 9'b0_0000_0100; + assign VR_FRQ_d = FB_AD[23:16]; + +// VIDEO PLL RECONFIG +// $(F)000'0800 + assign VIDEO_PLL_RECONFIG_CS = (!nFB_CS2) & FB_ADR[27:0] == 28'h800 & + FB_B[0]; + assign VIDEO_RECONFIG_clk = MAIN_CLK; + assign VIDEO_RECONFIG_d = VIDEO_PLL_RECONFIG_CS & (!nFB_WR) & (!VR_BUSY) & + (!VIDEO_RECONFIG_q); + +// ---------------------------------------------------------------------------------------------------------------------- + assign VIDEO_RAM_CTR = ACP_VCTR_q[31:16]; + +// ------------ COLOR MODE IM ACP SETZEN + assign COLOR1_3 = ACP_VCTR_q[5] & (!ACP_VCTR_q[4]) & (!ACP_VCTR_q[3]) & + (!ACP_VCTR_q[2]) & ACP_VIDEO_ON; + assign COLOR8_2 = ACP_VCTR_q[4] & (!ACP_VCTR_q[3]) & (!ACP_VCTR_q[2]) & + ACP_VIDEO_ON; + assign COLOR16_2 = ACP_VCTR_q[3] & (!ACP_VCTR_q[2]) & ACP_VIDEO_ON; + assign COLOR24 = ACP_VCTR_q[2] & ACP_VIDEO_ON; + assign ACP_CLUT = (ACP_VIDEO_ON & (COLOR1 | COLOR8)) | (ST_VIDEO & COLOR1); + +// ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER + assign ACP_VCTR_d[7] = FALCON_SHIFT_MODE_CS & (!nFB_WR) & (!ACP_VIDEO_ON); + assign ACP_VCTR_d[6] = ST_SHIFT_MODE_CS & (!nFB_WR) & (!ACP_VIDEO_ON); + assign ACP_VCTR6_ena_ctrl = (FALCON_SHIFT_MODE_CS & (!nFB_WR)) | + (ST_SHIFT_MODE_CS & (!nFB_WR)) | (ACP_VCTR_CS & FB_B[3] & (!nFB_WR) & + FB_AD[0]); + assign FALCON_VIDEO = ACP_VCTR_q[7]; + assign FALCON_CLUT = FALCON_VIDEO & (!ACP_VIDEO_ON) & (!COLOR16); + assign ST_VIDEO = ACP_VCTR_q[6]; + assign ST_CLUT = ST_VIDEO & (!ACP_VIDEO_ON) & (!FALCON_CLUT) & (!COLOR1); + assign CCSEL0_clk_ctrl = PIXEL_CLK; + +// ONLY FOR INFORMATION + assign CCSEL_d = (3'b000 & {3{ST_CLUT}}) | (3'b001 & {3{FALCON_CLUT}}) | + (3'b100 & {3{ACP_CLUT}}) | (3'b101 & {3{COLOR16}}) | (3'b110 & + {3{COLOR24}}) | (3'b111 & {3{RAND_ON}}); + +// DIVERSE (VIDEO)-REGISTER ---------------------------- +// RANDFARBE + assign CCR0_clk_ctrl = MAIN_CLK; + +// $404/4 + assign CCR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h101; + assign CCR_d = FB_AD[23:0]; + assign CCR16_ena_ctrl = CCR_CS & FB_B[1] & (!nFB_WR); + assign CCR8_ena_ctrl = CCR_CS & FB_B[2] & (!nFB_WR); + assign CCR0_ena_ctrl = CCR_CS & FB_B[3] & (!nFB_WR); + +// SYS CTR +// $8006/2 + assign SYS_CTR_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C003; + assign SYS_CTR0_clk_ctrl = MAIN_CLK; + assign SYS_CTR_d = FB_AD[22:16]; + assign SYS_CTR0_ena_ctrl = SYS_CTR_CS & (!nFB_WR) & FB_B[3]; + assign BLITTER_ON = !SYS_CTR_q[3]; + +// VDL_LOF +// $820E/2 + assign VDL_LOF_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C107; + assign VDL_LOF0_clk_ctrl = MAIN_CLK; + assign VDL_LOF_d = FB_AD[31:16]; + assign VDL_LOF8_ena_ctrl = VDL_LOF_CS & (!nFB_WR) & FB_B[2]; + assign VDL_LOF0_ena_ctrl = VDL_LOF_CS & (!nFB_WR) & FB_B[3]; + +// VDL_LWD +// $8210/2 + assign VDL_LWD_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C108; + assign VDL_LWD0_clk_ctrl = MAIN_CLK; + assign VDL_LWD_d = FB_AD[31:16]; + assign VDL_LWD8_ena_ctrl = VDL_LWD_CS & (!nFB_WR) & FB_B[0]; + assign VDL_LWD0_ena_ctrl = VDL_LWD_CS & (!nFB_WR) & FB_B[1]; + +// HORIZONTAL +// VDL_HHT +// $8282/2 + assign VDL_HHT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C141; + assign VDL_HHT0_clk_ctrl = MAIN_CLK; + assign VDL_HHT_d = FB_AD[27:16]; + assign VDL_HHT8_ena_ctrl = VDL_HHT_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HHT0_ena_ctrl = VDL_HHT_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HBE +// $8286/2 + assign VDL_HBE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C143; + assign VDL_HBE0_clk_ctrl = MAIN_CLK; + assign VDL_HBE_d = FB_AD[27:16]; + assign VDL_HBE8_ena_ctrl = VDL_HBE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HBE0_ena_ctrl = VDL_HBE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HDB +// $8288/2 + assign VDL_HDB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C144; + assign VDL_HDB0_clk_ctrl = MAIN_CLK; + assign VDL_HDB_d = FB_AD[27:16]; + assign VDL_HDB8_ena_ctrl = VDL_HDB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HDB0_ena_ctrl = VDL_HDB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_HDE +// $828A/2 + assign VDL_HDE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C145; + assign VDL_HDE0_clk_ctrl = MAIN_CLK; + assign VDL_HDE_d = FB_AD[27:16]; + assign VDL_HDE8_ena_ctrl = VDL_HDE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HDE0_ena_ctrl = VDL_HDE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HBB +// $8284/2 + assign VDL_HBB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C142; + assign VDL_HBB0_clk_ctrl = MAIN_CLK; + assign VDL_HBB_d = FB_AD[27:16]; + assign VDL_HBB8_ena_ctrl = VDL_HBB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HBB0_ena_ctrl = VDL_HBB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_HSS +// $828C/2 + assign VDL_HSS_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C146; + assign VDL_HSS0_clk_ctrl = MAIN_CLK; + assign VDL_HSS_d = FB_AD[27:16]; + assign VDL_HSS8_ena_ctrl = VDL_HSS_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HSS0_ena_ctrl = VDL_HSS_CS & (!nFB_WR) & FB_B[1]; + +// VERTIKAL +// VDL_VBE +// $82A6/2 + assign VDL_VBE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C153; + assign VDL_VBE0_clk_ctrl = MAIN_CLK; + assign VDL_VBE_d = FB_AD[26:16]; + assign VDL_VBE8_ena_ctrl = VDL_VBE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VBE0_ena_ctrl = VDL_VBE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VDB +// $82A8/2 + assign VDL_VDB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C154; + assign VDL_VDB0_clk_ctrl = MAIN_CLK; + assign VDL_VDB_d = FB_AD[26:16]; + assign VDL_VDB8_ena_ctrl = VDL_VDB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VDB0_ena_ctrl = VDL_VDB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VDE +// $82AA/2 + assign VDL_VDE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C155; + assign VDL_VDE0_clk_ctrl = MAIN_CLK; + assign VDL_VDE_d = FB_AD[26:16]; + assign VDL_VDE8_ena_ctrl = VDL_VDE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VDE0_ena_ctrl = VDL_VDE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VBB +// $82A4/2 + assign VDL_VBB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C152; + assign VDL_VBB0_clk_ctrl = MAIN_CLK; + assign VDL_VBB_d = FB_AD[26:16]; + assign VDL_VBB8_ena_ctrl = VDL_VBB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VBB0_ena_ctrl = VDL_VBB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VSS +// $82AC/2 + assign VDL_VSS_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C156; + assign VDL_VSS0_clk_ctrl = MAIN_CLK; + assign VDL_VSS_d = FB_AD[26:16]; + assign VDL_VSS8_ena_ctrl = VDL_VSS_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VSS0_ena_ctrl = VDL_VSS_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VFT +// $82A2/2 + assign VDL_VFT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C151; + assign VDL_VFT0_clk_ctrl = MAIN_CLK; + assign VDL_VFT_d = FB_AD[26:16]; + assign VDL_VFT8_ena_ctrl = VDL_VFT_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VFT0_ena_ctrl = VDL_VFT_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VCT +// $82C0/2 + assign VDL_VCT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C160; + assign VDL_VCT0_clk_ctrl = MAIN_CLK; + assign VDL_VCT_d = FB_AD[24:16]; + assign VDL_VCT8_ena = VDL_VCT_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VCT0_ena_ctrl = VDL_VCT_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VMD +// $82C2/2 + assign VDL_VMD_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C161; + assign VDL_VMD0_clk_ctrl = MAIN_CLK; + assign VDL_VMD_d = FB_AD[19:16]; + assign VDL_VMD0_ena_ctrl = VDL_VMD_CS & (!nFB_WR) & FB_B[3]; + +// - REGISTER OUT + assign u0_data = ({16{ST_SHIFT_MODE_CS}} & {6'b00_0000, ST_SHIFT_MODE_q, + 8'b0000_0000}) | ({16{FALCON_SHIFT_MODE_CS}} & {5'b0_0000, + FALCON_SHIFT_MODE_q}) | ({16{SYS_CTR_CS}} & {9'b1_0000_0000, + SYS_CTR_q[6:4], !BLITTER_RUN, SYS_CTR_q[2:0]}) | ({16{VDL_LOF_CS}} & + VDL_LOF_q) | ({16{VDL_LWD_CS}} & VDL_LWD_q) | ({16{VDL_HBE_CS}} & + {4'b0000, VDL_HBE_q}) | ({16{VDL_HDB_CS}} & {4'b0000, VDL_HDB_q}) | + ({16{VDL_HDE_CS}} & {4'b0000, VDL_HDE_q}) | ({16{VDL_HBB_CS}} & + {4'b0000, VDL_HBB_q}) | ({16{VDL_HSS_CS}} & {4'b0000, VDL_HSS_q}) | + ({16{VDL_HHT_CS}} & {4'b0000, VDL_HHT_q}) | ({16{VDL_VBE_CS}} & + {5'b0_0000, VDL_VBE_q}) | ({16{VDL_VDB_CS}} & {5'b0_0000, VDL_VDB_q}) + | ({16{VDL_VDE_CS}} & {5'b0_0000, VDL_VDE_q}) | ({16{VDL_VBB_CS}} & + {5'b0_0000, VDL_VBB_q}) | ({16{VDL_VSS_CS}} & {5'b0_0000, VDL_VSS_q}) + | ({16{VDL_VFT_CS}} & {5'b0_0000, VDL_VFT_q}) | ({16{VDL_VCT_CS}} & + {7'b000_0000, VDL_VCT_q}) | ({16{VDL_VMD_CS}} & {12'b0000_0000_0000, + VDL_VMD_q}) | ({16{ACP_VCTR_CS}} & ACP_VCTR_q[31:16]) | + ({16{ATARI_HH_CS}} & ATARI_HH_q[31:16]) | ({16{ATARI_VH_CS}} & + ATARI_VH_q[31:16]) | ({16{ATARI_HL_CS}} & ATARI_HL_q[31:16]) | + ({16{ATARI_VL_CS}} & ATARI_VL_q[31:16]) | ({16{CCR_CS}} & + {8'b0000_0000, CCR_q[23:16]}) | ({16{VIDEO_PLL_CONFIG_CS}} & + {7'b000_0000, VR_DOUT_q}) | ({16{VIDEO_PLL_RECONFIG_CS}} & {VR_BUSY, + 4'b0000, VR_WR_q, VR_RD, VIDEO_RECONFIG_q, 8'b1111_1010}); + assign u0_enabledt = (ST_SHIFT_MODE_CS | FALCON_SHIFT_MODE_CS | ACP_VCTR_CS + | CCR_CS | SYS_CTR_CS | VDL_LOF_CS | VDL_LWD_CS | VDL_HBE_CS | + VDL_HDB_CS | VDL_HDE_CS | VDL_HBB_CS | VDL_HSS_CS | VDL_HHT_CS | + ATARI_HH_CS | ATARI_VH_CS | ATARI_HL_CS | ATARI_VL_CS | + VIDEO_PLL_CONFIG_CS | VIDEO_PLL_RECONFIG_CS | VDL_VBE_CS | VDL_VDB_CS + | VDL_VDE_CS | VDL_VBB_CS | VDL_VSS_CS | VDL_VFT_CS | VDL_VCT_CS | + VDL_VMD_CS) & (!nFB_OE); + //GE assign FB_AD[31:16] = u0_tridata; + assign FB_AD[31:16] = (u0_enabledt ? u0_data : 16'bzzzz_zzzz_zzzz_zzzz); + assign u1_data = ({16{ACP_VCTR_CS}} & ACP_VCTR_q[15:0]) | ({16{ATARI_HH_CS}} + & ATARI_HH_q[15:0]) | ({16{ATARI_VH_CS}} & ATARI_VH_q[15:0]) | + ({16{ATARI_HL_CS}} & ATARI_HL_q[15:0]) | ({16{ATARI_VL_CS}} & + ATARI_VL_q[15:0]) | ({16{CCR_CS}} & CCR_q[15:0]); + assign u1_enabledt = (ACP_VCTR_CS | CCR_CS | ATARI_HH_CS | ATARI_VH_CS | + ATARI_HL_CS | ATARI_VL_CS) & (!nFB_OE); + //GE assign FB_AD[15:0] = u1_tridata; + assign FB_AD[15:0] = (u1_enabledt ? u1_data : 16'bzzzz_zzzz_zzzz_zzzz); + + assign VIDEO_MOD_TA = CLUT_TA_q | ST_SHIFT_MODE_CS | FALCON_SHIFT_MODE_CS | + ACP_VCTR_CS | SYS_CTR_CS | VDL_LOF_CS | VDL_LWD_CS | VDL_HBE_CS | + VDL_HDB_CS | VDL_HDE_CS | VDL_HBB_CS | VDL_HSS_CS | VDL_HHT_CS | + ATARI_HH_CS | ATARI_VH_CS | ATARI_HL_CS | ATARI_VL_CS | VDL_VBE_CS | + VDL_VDB_CS | VDL_VDE_CS | VDL_VBB_CS | VDL_VSS_CS | VDL_VFT_CS | + VDL_VCT_CS | VDL_VMD_CS; + +// VIDEO AUSGABE SETZEN + assign CLK17M_clk = CLK33M; + assign CLK17M_d = !CLK17M_q; + assign CLK13M_clk = CLK25M; + assign CLK13M_d = !CLK13M_q; + assign PIXEL_CLK = (CLK13M_q & (!ACP_VIDEO_ON) & (FALCON_VIDEO | ST_VIDEO) & + ((VDL_VMD_q[2] & VDL_VCT_q[2]) | VDL_VCT_q[0])) | (CLK17M_q & + (!ACP_VIDEO_ON) & (FALCON_VIDEO | ST_VIDEO) & ((VDL_VMD_q[2] & + (!VDL_VCT_q[2])) | VDL_VCT_q[0])) | (CLK25M & (!ACP_VIDEO_ON) & + (FALCON_VIDEO | ST_VIDEO) & (!VDL_VMD_q[2]) & VDL_VCT_q[2] & + (!VDL_VCT_q[0])) | (CLK33M & (!ACP_VIDEO_ON) & (FALCON_VIDEO | + ST_VIDEO) & (!VDL_VMD_q[2]) & (!VDL_VCT_q[2]) & (!VDL_VCT_q[0])) | + (CLK25M & ACP_VIDEO_ON & ACP_VCTR_q[9:8] == 2'b00) | (CLK33M & + ACP_VIDEO_ON & ACP_VCTR_q[9:8] == 2'b01) | (CLK_VIDEO & ACP_VIDEO_ON & + ACP_VCTR_q[9]); + +// ------------------------------------------------------------ +// HORIZONTALE SYNC LÄNGE in PIXEL_CLK +// -------------------------------------------------------------- + assign HSY_LEN0_clk_ctrl = MAIN_CLK; + +// hsync puls length in pixeln=frequenz/ = 500ns + assign HSY_LEN_d = (8'b0000_1110 & {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | + {8{ST_VIDEO}}) & (({8{VDL_VMD_q[2]}} & {8{VDL_VCT_q[2]}}) | + {8{VDL_VCT_q[0]}})) | (8'b0001_0000 & {8{!ACP_VIDEO_ON}} & + ({8{FALCON_VIDEO}} | {8{ST_VIDEO}}) & (({8{VDL_VMD_q[2]}} & + {8{!VDL_VCT_q[2]}}) | {8{VDL_VCT_q[0]}})) | (8'b0001_1100 & + {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | {8{ST_VIDEO}}) & + {8{!VDL_VMD_q[2]}} & {8{VDL_VCT_q[2]}} & {8{!VDL_VCT_q[0]}}) | + (8'b0010_0000 & {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | + {8{ST_VIDEO}}) & {8{!VDL_VMD_q[2]}} & {8{!VDL_VCT_q[2]}} & + {8{!VDL_VCT_q[0]}}) | (8'b0001_1100 & {8{ACP_VIDEO_ON}} & + {8{ACP_VCTR_q[9:8] == 2'b00}}) | (8'b0010_0000 & {8{ACP_VIDEO_ON}} & + {8{ACP_VCTR_q[9:8] == 2'b01}}) | ((8'b0001_0000 + {1'b0, + VR_FRQ_q[7:1]}) & {8{ACP_VIDEO_ON}} & {8{ACP_VCTR_q[9]}}); + +// MULTIPLIKATIONS FAKTOR + assign MULF = (6'b00_0010 & {6{!ST_VIDEO}} & {6{VDL_VMD_q[2]}}) | + (6'b00_0100 & {6{!ST_VIDEO}} & {6{!VDL_VMD_q[2]}}) | (6'b01_0000 & + {6{ST_VIDEO}} & {6{VDL_VMD_q[2]}}) | (6'b10_0000 & {6{ST_VIDEO}} & + {6{!VDL_VMD_q[2]}}); + +// BREITE IN PIXELN + assign HDIS_LEN = (12'b0001_0100_0000 & {12{VDL_VMD_q[2]}}) | + (12'b0010_1000_0000 & {12{!VDL_VMD_q[2]}}); + +// DOPPELZEILENMODUS + assign DOP_ZEI_clk = MAIN_CLK; + +// ZEILENVERDOPPELUNG EIN AUS + assign DOP_ZEI_d = VDL_VMD_q[0] & ST_VIDEO; + assign INTER_ZEI_clk = PIXEL_CLK; + +// EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC +// EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC + assign INTER_ZEI_d = (DOP_ZEI_q & VVCNT_q[0] != VDIS_START[0] & VVCNT_q != + 11'b000_0000_0000 & VHCNT_q < (HDIS_END - 12'b0000_0000_0001)) | + (DOP_ZEI_q & VVCNT_q[0] == VDIS_START[0] & VVCNT_q != + 11'b000_0000_0000 & VHCNT_q > (HDIS_END - 12'b0000_0000_0010)); + assign DOP_FIFO_CLR_clk = PIXEL_CLK; + +// DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START + assign DOP_FIFO_CLR_d = (INTER_ZEI_q & HSYNC_START_q) | SYNC_PIX_q; + + + wire [11:0] HTF; + wire [11:0] HSF; +// GE + // assign RAND_LINKS_FULL = VDL_HBE_q * {7'b000_0000, MULF[5:1]}; + assign RAND_LINKS_FULL = ({12{MULF[1]}} & {12'd0, VDL_HBE_q}) + | ({12{MULF[2]}} & {11'd0, VDL_HBE_q, 1'd0}) + | ({12{MULF[3]}} & {10'd0, VDL_HBE_q, 2'd0}) + | ({12{MULF[4]}} & {9'd0, VDL_HBE_q, 3'd0}) + | ({12{MULF[5]}} & {8'd0, VDL_HBE_q, 4'd0}); + + +// GE + //assign HS_START_FULL = ((VDL_HHT_q + 24'h1) + VDL_HSS_q) * {7'b000_0000, + // MULF[5:1]}; + assign HSF = ((VDL_HHT_q + 12'h1) + VDL_HSS_q); + assign HS_START_FULL = ({12{MULF[1]}} & {12'd0, HSF}) + | ({12{MULF[2]}} & {11'd0, HSF, 1'd0}) + | ({12{MULF[3]}} & {10'd0, HSF, 2'd0}) + | ({12{MULF[4]}} & {9'd0, HSF, 3'd0}) + | ({12{MULF[5]}} & {8'd0, HSF, 4'd0}); + +// GE + // assign H_TOTAL_FULL = (VDL_HHT_q + 24'h2) * {6'b00_0000, MULF}; + assign HTF = (VDL_HHT_q + 12'h2); + assign H_TOTAL_FULL = ({12{MULF[0]}} & {12'd0, HTF}) + | ({12{MULF[1]}} & {11'd0, HTF, 1'd0}) + | ({12{MULF[2]}} & {10'd0, HTF, 2'd0}) + | ({12{MULF[3]}} & {9'd0, HTF, 3'd0}) + | ({12{MULF[4]}} & {8'd0, HTF, 4'd0}) + | ({12{MULF[5]}} & {7'd0, HTF, 5'd0}); + + assign RAND_LINKS = (VDL_HBE_q & {12{ACP_VIDEO_ON}}) | (12'b0000_0001_0101 & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (12'b0000_0010_1010 & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (RAND_LINKS_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign HDIS_START = (VDL_HDB_q & {12{ACP_VIDEO_ON}}) | ((RAND_LINKS + + 12'b0000_0000_0001) & {12{!ACP_VIDEO_ON}}); + assign HDIS_END = (VDL_HDE_q & {12{ACP_VIDEO_ON}}) | ((RAND_LINKS + + HDIS_LEN) & {12{!ACP_VIDEO_ON}}); + assign RAND_RECHTS = (VDL_HBB_q & {12{ACP_VIDEO_ON}}) | ((HDIS_END + + 12'b0000_0000_0001) & {12{!ACP_VIDEO_ON}}); + assign HS_START = (VDL_HSS_q & {12{ACP_VIDEO_ON}}) | (ATARI_HL_q[11:0] & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (ATARI_HH_q[11:0] & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (HS_START_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign H_TOTAL = (VDL_HHT_q & {12{ACP_VIDEO_ON}}) | (ATARI_HL_q[27:16] & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (ATARI_HH_q[27:16] & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (H_TOTAL_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign RAND_OBEN = (VDL_VBE_q & {11{ACP_VIDEO_ON}}) | (11'b000_0001_1111 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | ({1'b0, VDL_VBE_q[10:1]} & + {11{!ACP_VIDEO_ON}} & {11{!ATARI_SYNC}}); + assign VDIS_START = (VDL_VDB_q & {11{ACP_VIDEO_ON}}) | (11'b000_0010_0000 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | (({1'b0, VDL_VDB_q[10:1]} + + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & {11{!ATARI_SYNC}}); + assign VDIS_END = (VDL_VDE_q & {11{ACP_VIDEO_ON}}) | (11'b001_1010_1111 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{ST_VIDEO}}) | + (11'b001_1111_1111 & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!ST_VIDEO}}) | ({1'b0, VDL_VDE_q[10:1]} & {11{!ACP_VIDEO_ON}} & + {11{!ATARI_SYNC}}); + assign RAND_UNTEN = (VDL_VBB_q & {11{ACP_VIDEO_ON}}) | ((VDIS_END + + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | + (({1'b0, VDL_VBB_q[10:1]} + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & + {11{!ATARI_SYNC}}); + assign VS_START = (VDL_VSS_q & {11{ACP_VIDEO_ON}}) | (ATARI_VL_q[10:0] & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{VDL_VMD_q[2]}}) | + (ATARI_VH_q[10:0] & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!VDL_VMD_q[2]}}) | ({1'b0, VDL_VSS_q[10:1]} & {11{!ACP_VIDEO_ON}} + & {11{!ATARI_SYNC}}); + assign V_TOTAL = (VDL_VFT_q & {11{ACP_VIDEO_ON}}) | (ATARI_VL_q[26:16] & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{VDL_VMD_q[2]}}) | + (ATARI_VH_q[26:16] & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!VDL_VMD_q[2]}}) | ({1'b0, VDL_VFT_q[10:1]} & {11{!ACP_VIDEO_ON}} + & {11{!ATARI_SYNC}}); + +// ZÄHLER + assign LAST_clk = PIXEL_CLK; + assign LAST_d = VHCNT_q == (H_TOTAL - 12'b0000_0000_0010); + assign VHCNT0_clk_ctrl = PIXEL_CLK; + assign VHCNT_d = (VHCNT_q + 12'b0000_0000_0001) & {12{!LAST_q}}; + assign VVCNT0_clk_ctrl = PIXEL_CLK; + assign VVCNT0_ena_ctrl = LAST_q; + assign VVCNT_d = (VVCNT_q + 11'b000_0000_0001) & {11{VVCNT_q != (V_TOTAL - + 11'b000_0000_0001)}}; + +// DISPLAY ON OFF + assign DPO_ZL_clk = PIXEL_CLK; + +// 1 ZEILE DAVOR ON OFF + assign DPO_ZL_d = VVCNT_q > (RAND_OBEN - 11'b000_0000_0001) & VVCNT_q < + (RAND_UNTEN - 11'b000_0000_0001); + +// AM ZEILENENDE ÜBERNEHMEN + assign DPO_ZL_ena = LAST_q; + assign DPO_ON_clk = PIXEL_CLK; + +// BESSER EINZELN WEGEN TIMING + assign DPO_ON_d = VHCNT_q == RAND_LINKS; + assign DPO_OFF_clk = PIXEL_CLK; + assign DPO_OFF_d = VHCNT_q == (RAND_RECHTS - 12'b0000_0000_0001); + assign DISP_ON_clk = PIXEL_CLK; + assign DISP_ON_d = (DISP_ON_q & (!DPO_OFF_q)) | (DPO_ON_q & DPO_ZL_q); + +// DATENTRANSFER ON OFF + assign VDO_ON_clk = PIXEL_CLK; + +// BESSER EINZELN WEGEN TIMING + assign VDO_ON_d = VHCNT_q == (HDIS_START - 12'b0000_0000_0001); + assign VDO_OFF_clk = PIXEL_CLK; + assign VDO_OFF_d = VHCNT_q == HDIS_END; + assign VDO_ZL_clk = PIXEL_CLK; + +// AM ZEILENENDE ÜBERNEHMEN + assign VDO_ZL_ena = LAST_q; + +// 1 ZEILE DAVOR ON OFF + assign VDO_ZL_d = VVCNT_q >= (VDIS_START - 11'b000_0000_0001) & VVCNT_q < + VDIS_END; + assign VDTRON_clk = PIXEL_CLK; + assign VDTRON_d = (VDTRON_q & (!VDO_OFF_q)) | (VDO_ON_q & VDO_ZL_q); + +// VERZÖGERUNG UND SYNC + assign HSYNC_START_clk = PIXEL_CLK; + assign HSYNC_START_d = VHCNT_q == (HS_START - 12'b0000_0000_0011); + assign HSYNC_I0_clk_ctrl = PIXEL_CLK; + assign HSYNC_I_d = (HSY_LEN_q & {8{HSYNC_START_q}}) | ((HSYNC_I_q - + 8'b0000_0001) & {8{!HSYNC_START_q}} & {8{HSYNC_I_q != 8'b0000_0000}}); + assign VSYNC_START_clk = PIXEL_CLK; + assign VSYNC_START_ena = LAST_q; + +// start am ende der Zeile vor dem vsync + assign VSYNC_START_d = VVCNT_q == (VS_START - 11'b000_0000_0011); + assign VSYNC_I0_clk_ctrl = PIXEL_CLK; + +// start am ende der Zeile vor dem vsync + assign VSYNC_I0_ena_ctrl = LAST_q; + +// 3 zeilen vsync length +// runterzählen bis 0 + assign VSYNC_I_d = (3'b011 & {3{VSYNC_START_q}}) | ((VSYNC_I_q - 3'b001) & + {3{!VSYNC_START_q}} & {3{VSYNC_I_q != 3'b000}}); + assign VERZ2_0_clk_ctrl = PIXEL_CLK; + assign VERZ1_0_clk_ctrl = PIXEL_CLK; + assign VERZ0_0_clk_ctrl = PIXEL_CLK; + assign {VERZ2__d[1], VERZ1__d[1], VERZ0__d[1]} = {VERZ2__q[0], VERZ1__q[0], + VERZ0__q[0]}; + assign {VERZ2__d[2], VERZ1__d[2], VERZ0__d[2]} = {VERZ2__q[1], VERZ1__q[1], + VERZ0__q[1]}; + assign {VERZ2__d[3], VERZ1__d[3], VERZ0__d[3]} = {VERZ2__q[2], VERZ1__q[2], + VERZ0__q[2]}; + assign {VERZ2__d[4], VERZ1__d[4], VERZ0__d[4]} = {VERZ2__q[3], VERZ1__q[3], + VERZ0__q[3]}; + assign {VERZ2__d[5], VERZ1__d[5], VERZ0__d[5]} = {VERZ2__q[4], VERZ1__q[4], + VERZ0__q[4]}; + assign {VERZ2__d[6], VERZ1__d[6], VERZ0__d[6]} = {VERZ2__q[5], VERZ1__q[5], + VERZ0__q[5]}; + assign {VERZ2__d[7], VERZ1__d[7], VERZ0__d[7]} = {VERZ2__q[6], VERZ1__q[6], + VERZ0__q[6]}; + assign {VERZ2__d[8], VERZ1__d[8], VERZ0__d[8]} = {VERZ2__q[7], VERZ1__q[7], + VERZ0__q[7]}; + assign {VERZ2__d[9], VERZ1__d[9], VERZ0__d[9]} = {VERZ2__q[8], VERZ1__q[8], + VERZ0__q[8]}; + assign VERZ0__d[0] = DISP_ON_q; + assign VERZ1_0_d_1 = HSYNC_I_q != 8'b0000_0000; + +// NUR MÖGLICH WENN BEIDE + assign VERZ1_0_d_2 = (((!ACP_VCTR_q[15]) | (!VDL_VCT_q[6])) & HSYNC_I_q != + 8'b0000_0000) | (ACP_VCTR_q[15] & VDL_VCT_q[6] & HSYNC_I_q == + 8'b0000_0000); + +// NUR MÖGLICH WENN BEIDE + assign VERZ2__d[0] = (((!ACP_VCTR_q[15]) | (!VDL_VCT_q[5])) & VSYNC_I_q != + 3'b000) | (ACP_VCTR_q[15] & VDL_VCT_q[5] & VSYNC_I_q == 3'b000); + assign nBLANK_clk = PIXEL_CLK; + assign nBLANK_d = VERZ0__q[8]; + assign HSYNC_clk = PIXEL_CLK; + assign HSYNC_d = VERZ1__q[9]; + assign VSYNC_clk = PIXEL_CLK; + assign VSYNC_d = VERZ2__q[9]; + assign nSYNC = gnd; + +// RANDFARBE MACHEN ------------------------------------ + assign RAND0_clk_ctrl = PIXEL_CLK; + assign RAND_d[0] = DISP_ON_q & (!VDTRON_q) & ACP_VCTR_q[25]; + assign RAND_d[1] = RAND_q[0]; + assign RAND_d[2] = RAND_q[1]; + assign RAND_d[3] = RAND_q[2]; + assign RAND_d[4] = RAND_q[3]; + assign RAND_d[5] = RAND_q[4]; + assign RAND_d[6] = RAND_q[5]; + assign RAND_ON = RAND_q[6]; + +// -------------------------------------------------------- + assign CLR_FIFO_clk = PIXEL_CLK; + assign CLR_FIFO_ena = LAST_q; + +// IN LETZTER ZEILE LÖSCHEN + assign CLR_FIFO_d = VVCNT_q == (V_TOTAL - 11'b000_0000_0010); + assign START_ZEILE_clk = PIXEL_CLK; + assign START_ZEILE_ena = LAST_q; + +// ZEILE 1 + assign START_ZEILE_d = VVCNT_q == 11'b000_0000_0000; + assign SYNC_PIX_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX_d = VHCNT_q == 12'b0000_0000_0011 & START_ZEILE_q; + assign SYNC_PIX1_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX1_d = VHCNT_q == 12'b0000_0000_0101 & START_ZEILE_q; + assign SYNC_PIX2_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX2_d = VHCNT_q == 12'b0000_0000_0111 & START_ZEILE_q; + assign SUB_PIXEL_CNT0_clk_ctrl = PIXEL_CLK; + assign SUB_PIXEL_CNT0_ena_ctrl = VDTRON_q | SYNC_PIX_q; + +// count up if display on sonst clear bei sync pix + assign SUB_PIXEL_CNT_d = (SUB_PIXEL_CNT_q + 7'b000_0001) & {7{!SYNC_PIX_q}}; + assign FIFO_RDE_clk = PIXEL_CLK; + +// 3 CLOCK ZUSÄTZLICH FÜR FIFO SHIFT DATAOUT UND SHIFT RIGTH POSITION + assign FIFO_RDE_d = (((SUB_PIXEL_CNT_q == 7'b000_0001 & COLOR1) | + (SUB_PIXEL_CNT_q[5:0] == 6'b00_0001 & COLOR2) | (SUB_PIXEL_CNT_q[4:0] + == 5'b0_0001 & COLOR4) | (SUB_PIXEL_CNT_q[3:0] == 4'b0001 & COLOR8) | + (SUB_PIXEL_CNT_q[2:0] == 3'b001 & COLOR16) | (SUB_PIXEL_CNT_q[1:0] == + 2'b01 & COLOR24)) & VDTRON_q) | SYNC_PIX_q | SYNC_PIX1_q | + SYNC_PIX2_q; + assign CLUT_MUX_ADR0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV1_0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV0_0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV0__d = SUB_PIXEL_CNT_q[3:0]; + assign CLUT_MUX_AV1__d = CLUT_MUX_AV0__q; + assign CLUT_MUX_ADR_d = CLUT_MUX_AV1__q; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign COLOR16 = COLOR16_1 | COLOR16_2; + assign VERZ1__d[0] = VERZ1_0_d_1 | VERZ1_0_d_2; + assign COLOR4 = COLOR4_1 | COLOR4_2; + assign COLOR1 = COLOR1_1 | COLOR1_2 | COLOR1_3; + assign COLOR8 = COLOR8_1 | COLOR8_2; + +// Define power signal(s) + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/Video/Video.bdf b/FPGA_quartus_GE/Video/Video.bdf new file mode 100644 index 0000000..6210cb7 --- /dev/null +++ b/FPGA_quartus_GE/Video/Video.bdf @@ -0,0 +1,10651 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "graphic" (version "1.3")) +(properties + (page_setup "header_footer\nDate: %D\n%f\nProject: %j\n\nPage %p of %P\nRevision: %a\nmargin\n1\n1\n1\n1\norientation\n2\npaper_size\n9\npaper_source\n15\nfit_page_wide\n1\nfit_page_tall\n1\n") +) +(pin + (input) + (rect 184 1192 352 1208) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_ADR[31..0]" (rect 9 0 103 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1248 352 1264) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "MAIN_CLK" (rect 9 0 78 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1352 352 1368) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS1" (rect 9 0 71 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1384 352 1400) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS2" (rect 9 0 71 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1416 352 1432) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS3" (rect 9 0 71 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1448 352 1464) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_WR" (rect 9 0 66 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1480 352 1496) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_SIZE0" (rect 9 0 73 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1512 352 1528) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_SIZE1" (rect 9 0 73 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1544 352 1560) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nRSTO" (rect 9 0 56 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1608 352 1624) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_OE" (rect 9 0 63 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1736 352 1752) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_ALE" (rect 9 0 60 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 184 1312 352 1328) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "DDRCLK[3..0]" (rect 9 0 99 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 176 1280 344 1296) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "DDR_SYNC_66M" (rect 9 0 123 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 1344 2176 1512 2192) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "CLK33M" (rect 9 0 64 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 1344 2200 1512 2216) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "CLK25M" (rect 9 0 64 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 1344 2152 1512 2168) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "CLK_VIDEO" (rect 5 0 84 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 1344 2128 1512 2144) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "VR_D[8..0]" (rect 5 0 73 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (input) + (rect 1344 2112 1512 2128) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "VR_BUSY" (rect 5 0 69 15)(font "Arial" )) + (pt 168 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) +) +(pin + (output) + (rect 472 1200 648 1216) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VG[7..0]" (rect 90 0 139 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1232 648 1248) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VB[7..0]" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1264 648 1280) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VR[7..0]" (rect 90 0 139 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1408 648 1424) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nBLANK" (rect 90 0 144 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1480 648 1496) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VA[12..0]" (rect 90 0 145 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1512 648 1528) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVWE" (rect 90 0 128 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1544 648 1560) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVCAS" (rect 90 0 134 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1576 648 1592) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVRAS" (rect 90 0 134 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1608 648 1624) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVCS" (rect 90 0 126 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1704 648 1720) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VDM[3..0]" (rect 90 0 150 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1736 648 1752) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nPD_VGA" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1768 648 1784) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VCKE" (rect 90 0 127 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1288 648 1304) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VSYNC" (rect 90 0 137 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1336 648 1352) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "HSYNC" (rect 90 0 139 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1384 648 1400) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSYNC" (rect 90 0 137 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1800 648 1816) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VIDEO_TA" (rect 90 0 157 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1448 648 1464) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "PIXEL_CLK" (rect 90 0 165 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 472 1656 648 1672) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "BA[1..0]" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 2144 1696 2364 1712) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VIDEO_RECONFIG" (rect 90 0 215 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 2112 1792 2288 1808) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VR_WR" (rect 90 0 140 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (output) + (rect 2112 1808 2288 1824) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VR_RD" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) +) +(pin + (bidir) + (rect 184 1640 360 1656) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "VDQS[3..0]" (rect 90 0 159 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) +) +(pin + (bidir) + (rect 184 1672 360 1688) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "FB_AD[31..0]" (rect 90 0 173 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) +) +(pin + (bidir) + (rect 184 1704 360 1720) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "VD[31..0]" (rect 90 0 147 15)(font "Arial" )) + (pt 0 8) + (connected_pin (pt 0 0)) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) +) +(symbol + (rect 920 1616 1064 1712) + (text "lpm_ff0" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst13" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 140 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 920 1760 1064 1856) + (text "lpm_ff0" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst14" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 140 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 920 1896 1064 1992) + (text "lpm_ff0" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst15" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 140 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 920 2032 1064 2128) + (text "lpm_ff0" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst16" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 140 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 2392 2040 2496 2184) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst40" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2392 1880 2496 2024) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst41" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2392 1720 2496 1864) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst42" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2392 1560 2496 1704) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst43" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2392 1400 2496 1544) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst44" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2392 1240 2496 1384) + (text "MUX41" (rect 29 -1 88 19)(font "Courier New" (font_size 10)(bold))) + (text "inst45" (rect 3 133 36 146)(font "Arial" (font_size 6))) + (port + (pt 0 120) + (input) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (text "S0" (rect 20 116 36 132)(font "Courier New" (bold))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (text "D2" (rect 20 68 36 84)(font "Courier New" (bold))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (text "S1" (rect 20 100 36 116)(font "Courier New" (bold))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (text "D3" (rect 20 84 36 100)(font "Courier New" (bold))) + (line (pt 0 88)(pt 16 88)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (text "D0" (rect 20 36 36 52)(font "Courier New" (bold))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (text "INH" (rect 20 20 44 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 16 24)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (text "D1" (rect 20 52 36 68)(font "Courier New" (bold))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 104 72) + (output) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (text "Q" (rect 81 68 89 84)(font "Courier New" (bold))) + (line (pt 88 72)(pt 104 72)(line_width 1)) + ) + (drawing + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 88 128)(pt 88 16)(line_width 1)) + (line (pt 16 128)(pt 88 128)(line_width 1)) + (line (pt 16 16)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2632 1216 2776 1344) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr0" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 1376 2776 1504) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr1" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 1536 2776 1664) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr2" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 1696 2776 1824) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr3" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 1856 2776 1984) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr4" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 2016 2776 2144) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr5" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 2176 2776 2304) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr6" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 2632 2336 2776 2464) + (text "lpm_shiftreg0" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "sr7" (rect 8 112 29 127)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 28 16)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 48 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 93 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 62 90)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 60 106)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 138 82)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 141 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) +(symbol + (rect 3296 888 3328 920) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst50" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3840 784 3920 824) + (text "lpm_bustri1" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst51" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[2..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[2..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[2..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[2..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "3" (rect 63 25 71 40)(font "Arial" )) + (text "3" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3712 880 3808 928) + (text "lpm_constant0" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst54" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[4..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[4..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "5" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3296 1096 3328 1128) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst55" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3840 992 3920 1032) + (text "lpm_bustri1" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst56" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[2..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[2..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[2..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[2..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "3" (rect 63 25 71 40)(font "Arial" )) + (text "3" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3720 1088 3816 1136) + (text "lpm_constant0" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst59" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[4..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[4..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "5" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3296 1528 3328 1560) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst60" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3840 1200 3920 1240) + (text "lpm_bustri1" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst61" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[2..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[2..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[2..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[2..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "3" (rect 63 25 71 40)(font "Arial" )) + (text "3" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3712 1296 3808 1344) + (text "lpm_constant0" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst64" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[4..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[4..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "5" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3840 1424 3920 1464) + (text "lpm_bustri3" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst66" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[5..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[5..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[5..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[5..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "6" (rect 63 25 71 40)(font "Arial" )) + (text "6" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3296 1736 3328 1768) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst68" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3840 1632 3920 1672) + (text "lpm_bustri3" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst70" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[5..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[5..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[5..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[5..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "6" (rect 63 25 71 40)(font "Arial" )) + (text "6" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3296 1944 3328 1976) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst72" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3840 1840 3920 1880) + (text "lpm_bustri3" (rect 7 1 104 20)(font "Arial" (font_size 10))) + (text "inst74" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[5..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[5..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[5..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[5..0]" (rect 84 -30 161 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "6" (rect 63 25 71 40)(font "Arial" )) + (text "6" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3296 1304 3328 1336) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst78" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3008 1432 3072 1480) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst29" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 3008 1736 3072 1784) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst30" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 3024 2080 3088 2128) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst31" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 2904 1912 2968 1960) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst32" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 2904 2072 2968 2120) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst33" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 2904 2232 2968 2280) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst34" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 2904 2392 2968 2440) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst35" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 3296 2592 3328 2624) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst73" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3160 3064 3296 3144) + (text "lpm_mux4" (rect 42 62 126 81)(font "Arial" (font_size 10))) + (text "inst81" (rect 8 4 48 19)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1x[6..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data1x[6..0]" (rect 4 39 85 55)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 64 40)(line_width 3)) + ) + (port + (pt 0 24) + (input) + (text "data0x[6..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data0x[6..0]" (rect 4 23 85 39)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 64 24)(line_width 3)) + ) + (port + (pt 72 0) + (input) + (text "sel" (rect 0 0 20 16)(font "Arial" (font_size 8))) + (text "sel" (rect 76 -1 96 15)(font "Arial" (font_size 8))) + (line (pt 72 0)(pt 72 12)(line_width 1)) + ) + (port + (pt 136 32) + (output) + (text "result[6..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[6..0]" (rect 82 31 155 47)(font "Arial" (font_size 8))) + (line (pt 136 32)(pt 80 32)(line_width 3)) + ) + (drawing + (line (pt 64 56)(pt 64 8)(line_width 1)) + (line (pt 80 48)(pt 80 16)(line_width 1)) + (line (pt 64 56)(pt 80 48)(line_width 1)) + (line (pt 64 8)(pt 80 16)(line_width 1)) + ) + (flipx) +) +(symbol + (rect 2976 3080 3072 3128) + (text "lpm_constant3" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst82" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[6..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[6..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "7" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3448 776 3704 984) + (text "altdpram0" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ST_CLUT_RED" (rect 8 192 110 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[2..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[3..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[2..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[3..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[2..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[2..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "16 Word(s)" (rect 136 61 151 132)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 984 3704 1192) + (text "altdpram0" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ST_CLUT_GREEN" (rect 8 192 130 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[2..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[3..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[2..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[3..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[2..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[2..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "16 Word(s)" (rect 136 61 151 132)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 1360 2992 1408 3024) + (text "TRI" (rect 1 0 21 13)(font "Arial" (font_size 6))) + (text "inst84" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 24 0) + (input) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (line (pt 24 12)(pt 24 0)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 32 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 14 25)(pt 14 7)(line_width 1)) + (line (pt 14 25)(pt 32 16)(line_width 1)) + (line (pt 14 7)(pt 32 16)(line_width 1)) + ) +) +(symbol + (rect 1360 2936 1408 2968) + (text "TRI" (rect 1 0 21 13)(font "Arial" (font_size 6))) + (text "inst85" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 24 0) + (input) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (line (pt 24 12)(pt 24 0)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 32 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 14 25)(pt 14 7)(line_width 1)) + (line (pt 14 25)(pt 32 16)(line_width 1)) + (line (pt 14 7)(pt 32 16)(line_width 1)) + ) +) +(symbol + (rect 1360 2888 1408 2920) + (text "TRI" (rect 1 0 21 13)(font "Arial" (font_size 6))) + (text "inst86" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 24 0) + (input) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (line (pt 24 12)(pt 24 0)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 32 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 14 25)(pt 14 7)(line_width 1)) + (line (pt 14 25)(pt 32 16)(line_width 1)) + (line (pt 14 7)(pt 32 16)(line_width 1)) + ) +) +(symbol + (rect 1360 2840 1408 2872) + (text "TRI" (rect 1 0 21 13)(font "Arial" (font_size 6))) + (text "inst87" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 24 0) + (input) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (text "OE" (rect 26 0 42 16)(font "Courier New" (bold))(invisible)) + (line (pt 24 12)(pt 24 0)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 32 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 14 25)(pt 14 7)(line_width 1)) + (line (pt 14 25)(pt 32 16)(line_width 1)) + (line (pt 14 7)(pt 32 16)(line_width 1)) + ) +) +(symbol + (rect 2272 1248 2304 1280) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst6" (rect -1 3 14 34)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2272 1408 2304 1440) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst8" (rect -1 3 14 34)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2272 1568 2304 1600) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst28" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2272 1728 2304 1760) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst38" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2272 1888 2304 1920) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst48" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2272 2048 2304 2080) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst96" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3192 2920 3272 3000) + (text "lpm_mux3" (rect 10 2 94 21)(font "Arial" (font_size 10))) + (text "inst102" (rect 8 64 56 79)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1" (rect 0 0 37 16)(font "Arial" (font_size 8))) + (text "data1" (rect 4 27 41 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 32 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "data0" (rect 0 0 37 16)(font "Arial" (font_size 8))) + (text "data0" (rect 4 43 41 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 32 56)(line_width 1)) + ) + (port + (pt 40 80) + (input) + (text "sel" (rect 0 0 20 16)(font "Arial" (font_size 8))) + (text "sel" (rect 44 67 64 83)(font "Arial" (font_size 8))) + (line (pt 40 80)(pt 40 68)(line_width 1)) + ) + (port + (pt 80 48) + (output) + (text "result" (rect 0 0 37 16)(font "Arial" (font_size 8))) + (text "result" (rect 50 35 87 51)(font "Arial" (font_size 8))) + (line (pt 80 48)(pt 48 48)(line_width 1)) + ) + (drawing + (line (pt 32 24)(pt 32 72)(line_width 1)) + (line (pt 48 32)(pt 48 64)(line_width 1)) + (line (pt 32 24)(pt 48 32)(line_width 1)) + (line (pt 32 72)(pt 48 64)(line_width 1)) + ) +) +(symbol + (rect 3032 2400 3096 2448) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst79" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 3016 1920 3080 1968) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst103" (rect 3 37 51 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 3024 2240 3088 2288) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst104" (rect 3 37 51 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 2912 1664 2976 1712) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst105" (rect 3 37 51 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 3008 1592 3072 1640) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst106" (rect 3 37 51 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 2920 1472 2984 1520) + (text "OR3" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst107" (rect 3 37 52 53)(font "Arial" (font_size 8))) + (port + (pt 0 24) + (input) + (text "IN2" (rect 2 15 26 31)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 15 26 31)(font "Courier New" (bold))(invisible)) + (line (pt 0 24)(pt 18 24)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN3" (rect 2 24 26 40)(font "Courier New" (bold))(invisible)) + (text "IN3" (rect 2 24 26 40)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 16 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 47 15 71 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 47 15 71 31)(font "Courier New" (bold))(invisible)) + (line (pt 49 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 13)(pt 25 13)(line_width 1)) + (line (pt 14 36)(pt 25 36)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 808 1168 920 1208) + (text "lpm_bustri_LONG" (rect -14 1 135 20)(font "Arial" (font_size 10))) + (text "inst108" (rect 69 24 117 39)(font "Arial" )) + (port + (pt 72 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 24 -6 81 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 72 40)(pt 72 28)(line_width 1)) + ) + (port + (pt 112 24) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 55 -27 128 -11)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 80 24)(line_width 3)) + ) + (port + (pt 0 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect -74 -36 12 -20)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 64 24)(line_width 3)) + ) + (drawing + (text "32" (rect 24 25 40 40)(font "Arial" )) + (text "32" (rect 88 25 104 40)(font "Arial" )) + (line (pt 80 16)(pt 64 24)(line_width 1)) + (line (pt 64 24)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 80 16)(line_width 1)) + (line (pt 40 28)(pt 32 20)(line_width 1)) + (line (pt 104 28)(pt 96 20)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 808 1288 920 1328) + (text "lpm_bustri_LONG" (rect -14 1 135 20)(font "Arial" (font_size 10))) + (text "inst109" (rect 69 24 117 39)(font "Arial" )) + (port + (pt 72 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 24 -6 81 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 72 40)(pt 72 28)(line_width 1)) + ) + (port + (pt 112 24) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 55 -27 128 -11)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 80 24)(line_width 3)) + ) + (port + (pt 0 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect -74 -36 12 -20)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 64 24)(line_width 3)) + ) + (drawing + (text "32" (rect 24 25 40 40)(font "Arial" )) + (text "32" (rect 88 25 104 40)(font "Arial" )) + (line (pt 80 16)(pt 64 24)(line_width 1)) + (line (pt 64 24)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 80 16)(line_width 1)) + (line (pt 40 28)(pt 32 20)(line_width 1)) + (line (pt 104 28)(pt 96 20)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 808 1408 920 1448) + (text "lpm_bustri_LONG" (rect -14 1 135 20)(font "Arial" (font_size 10))) + (text "inst110" (rect 69 24 117 39)(font "Arial" )) + (port + (pt 72 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 24 -6 81 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 72 40)(pt 72 28)(line_width 1)) + ) + (port + (pt 112 24) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 55 -27 128 -11)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 80 24)(line_width 3)) + ) + (port + (pt 0 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect -74 -36 12 -20)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 64 24)(line_width 3)) + ) + (drawing + (text "32" (rect 24 25 40 40)(font "Arial" )) + (text "32" (rect 88 25 104 40)(font "Arial" )) + (line (pt 80 16)(pt 64 24)(line_width 1)) + (line (pt 64 24)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 80 16)(line_width 1)) + (line (pt 40 28)(pt 32 20)(line_width 1)) + (line (pt 104 28)(pt 96 20)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 808 1528 920 1568) + (text "lpm_bustri_LONG" (rect -14 1 135 20)(font "Arial" (font_size 10))) + (text "inst119" (rect 69 24 117 39)(font "Arial" )) + (port + (pt 72 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 24 -6 81 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 72 40)(pt 72 28)(line_width 1)) + ) + (port + (pt 112 24) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 55 -27 128 -11)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 80 24)(line_width 3)) + ) + (port + (pt 0 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect -74 -36 12 -20)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 64 24)(line_width 3)) + ) + (drawing + (text "32" (rect 24 25 40 40)(font "Arial" )) + (text "32" (rect 88 25 104 40)(font "Arial" )) + (line (pt 80 16)(pt 64 24)(line_width 1)) + (line (pt 64 24)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 80 16)(line_width 1)) + (line (pt 40 28)(pt 32 20)(line_width 1)) + (line (pt 104 28)(pt 96 20)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 1832 2728 1976 2808) + (text "lpm_ff1" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst9" (rect 8 64 39 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 2416 2616 2560 2696) + (text "lpm_ff4" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst10" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[15..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[15..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[15..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 3088 2680 3232 2760) + (text "lpm_ff5" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst11" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[7..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect 20 26 84 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[7..0]" (rect 0 0 43 16)(font "Arial" (font_size 8))) + (text "q[7..0]" (rect 95 42 138 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1240 2432 1472 2552) + (text "altddio_out0" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst2" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[3..0]" (rect 0 0 93 16)(font "Arial" (font_size 8))) + (text "datain_h[3..0]" (rect 4 11 97 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[3..0]" (rect 0 0 88 16)(font "Arial" (font_size 8))) + (text "datain_l[3..0]" (rect 4 27 92 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout[3..0]" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "dataout[3..0]" (rect 169 11 255 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 3)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "high" (rect 92 84 120 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 960 1256 1104 1352) + (text "lpm_ff0" (rect 44 1 106 20)(font "Arial" (font_size 10))) + (text "inst17" (rect 107 80 147 95)(font "Arial" )) + (port + (pt 144 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 64 26 137 42)(font "Arial" (font_size 8))) + (line (pt 144 32)(pt 128 32)(line_width 3)) + ) + (port + (pt 144 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 89 42 125 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (port + (pt 144 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 87 58 131 74)(font "Arial" (font_size 8))) + (line (pt 144 64)(pt 128 64)(line_width 1)) + ) + (port + (pt 0 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 13 50 64 66)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 13 17 40 32)(font "Arial" )) + (line (pt 128 16)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 128 16)(line_width 1)) + (line (pt 128 42)(pt 122 48)(line_width 1)) + (line (pt 122 48)(pt 128 54)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 960 1376 1104 1472) + (text "lpm_ff0" (rect 44 1 106 20)(font "Arial" (font_size 10))) + (text "inst18" (rect 107 80 147 95)(font "Arial" )) + (port + (pt 144 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 64 26 137 42)(font "Arial" (font_size 8))) + (line (pt 144 32)(pt 128 32)(line_width 3)) + ) + (port + (pt 144 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 89 42 125 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (port + (pt 144 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 87 58 131 74)(font "Arial" (font_size 8))) + (line (pt 144 64)(pt 128 64)(line_width 1)) + ) + (port + (pt 0 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 13 50 64 66)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 13 17 40 32)(font "Arial" )) + (line (pt 128 16)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 128 16)(line_width 1)) + (line (pt 128 42)(pt 122 48)(line_width 1)) + (line (pt 122 48)(pt 128 54)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 960 1496 1104 1592) + (text "lpm_ff0" (rect 44 1 106 20)(font "Arial" (font_size 10))) + (text "inst19" (rect 107 80 147 95)(font "Arial" )) + (port + (pt 144 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 64 26 137 42)(font "Arial" (font_size 8))) + (line (pt 144 32)(pt 128 32)(line_width 3)) + ) + (port + (pt 144 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 89 42 125 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (port + (pt 144 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 87 58 131 74)(font "Arial" (font_size 8))) + (line (pt 144 64)(pt 128 64)(line_width 1)) + ) + (port + (pt 0 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 13 50 64 66)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 13 17 40 32)(font "Arial" )) + (line (pt 128 16)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 128 16)(line_width 1)) + (line (pt 128 42)(pt 122 48)(line_width 1)) + (line (pt 122 48)(pt 128 54)(line_width 1)) + ) + (flipy) +) +(symbol + (rect 1040 888 1184 968) + (text "lpm_ff1" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst3" (rect 8 64 39 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1296 904 1440 984) + (text "lpm_ff1" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst4" (rect 8 64 39 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1040 976 1184 1056) + (text "lpm_ff1" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst12" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1296 992 1440 1072) + (text "lpm_ff1" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst20" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1344 1280 1496 1392) + (text "lpm_mux5" (rect 50 2 134 21)(font "Arial" (font_size 10))) + (text "inst22" (rect 8 96 48 111)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data3x[63..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data3x[63..0]" (rect 4 27 93 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data2x[63..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data2x[63..0]" (rect 4 43 93 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data1x[63..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data1x[63..0]" (rect 4 59 93 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data0x[63..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data0x[63..0]" (rect 4 75 93 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 80 112) + (input) + (text "sel[1..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[1..0]" (rect 84 99 139 115)(font "Arial" (font_size 8))) + (line (pt 80 112)(pt 80 100)(line_width 3)) + ) + (port + (pt 152 64) + (output) + (text "result[63..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "result[63..0]" (rect 92 51 173 67)(font "Arial" (font_size 8))) + (line (pt 152 64)(pt 88 64)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 104)(line_width 1)) + (line (pt 88 32)(pt 88 96)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 104)(pt 88 96)(line_width 1)) + ) +) +(symbol + (rect 992 2760 1056 2840) + (text "DFF" (rect 1 0 23 13)(font "Arial" (font_size 6))) + (text "inst88" (rect 3 68 43 83)(font "Arial" )) + (port + (pt 32 80) + (input) + (text "CLRN" (rect 21 59 54 75)(font "Courier New" (bold))) + (text "CLRN" (rect 21 58 54 74)(font "Courier New" (bold))) + (line (pt 32 80)(pt 32 76)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (line (pt 0 40)(pt 12 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 12 24)(line_width 1)) + ) + (port + (pt 32 0) + (input) + (text "PRN" (rect 24 13 48 29)(font "Courier New" (bold))) + (text "PRN" (rect 24 11 48 27)(font "Courier New" (bold))) + (line (pt 32 4)(pt 32 0)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (line (pt 52 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 12 12)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 52 68)(line_width 1)) + (line (pt 52 68)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 12 12)(line_width 1)) + (line (pt 19 40)(pt 12 47)(line_width 1)) + (line (pt 12 32)(pt 20 40)(line_width 1)) + (circle (rect 28 4 36 12)(line_width 1)) + (circle (rect 28 68 36 76)(line_width 1)) + ) +) +(symbol + (rect 968 2376 1032 2456) + (text "DFF" (rect 1 0 23 13)(font "Arial" (font_size 6))) + (text "inst90" (rect 3 68 43 83)(font "Arial" )) + (port + (pt 32 80) + (input) + (text "CLRN" (rect 21 59 54 75)(font "Courier New" (bold))) + (text "CLRN" (rect 21 58 54 74)(font "Courier New" (bold))) + (line (pt 32 80)(pt 32 76)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (line (pt 0 40)(pt 12 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 12 24)(line_width 1)) + ) + (port + (pt 32 0) + (input) + (text "PRN" (rect 24 13 48 29)(font "Courier New" (bold))) + (text "PRN" (rect 24 11 48 27)(font "Courier New" (bold))) + (line (pt 32 4)(pt 32 0)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (line (pt 52 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 12 12)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 52 68)(line_width 1)) + (line (pt 52 68)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 12 12)(line_width 1)) + (line (pt 19 40)(pt 12 47)(line_width 1)) + (line (pt 12 32)(pt 20 40)(line_width 1)) + (circle (rect 28 4 36 12)(line_width 1)) + (circle (rect 28 68 36 76)(line_width 1)) + ) +) +(symbol + (rect 1312 1512 1552 1648) + (text "altddio_bidir0" (rect 82 1 196 20)(font "Arial" (font_size 10))) + (text "inst1" (rect 8 120 39 135)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[31..0]" (rect 0 0 101 16)(font "Arial" (font_size 8))) + (text "datain_h[31..0]" (rect 4 11 105 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[31..0]" (rect 0 0 96 16)(font "Arial" (font_size 8))) + (text "datain_l[31..0]" (rect 4 27 100 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "oe" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "oe" (rect 4 43 20 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "inclock" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "inclock" (rect 4 59 52 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 88 72)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 75 61 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 88 88)(line_width 1)) + ) + (port + (pt 240 24) + (output) + (text "dataout_h[31..0]" (rect 0 0 110 16)(font "Arial" (font_size 8))) + (text "dataout_h[31..0]" (rect 159 11 269 27)(font "Arial" (font_size 8))) + (line (pt 240 24)(pt 144 24)(line_width 3)) + ) + (port + (pt 240 40) + (output) + (text "dataout_l[31..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "dataout_l[31..0]" (rect 163 27 269 43)(font "Arial" (font_size 8))) + (line (pt 240 40)(pt 144 40)(line_width 3)) + ) + (port + (pt 240 72) + (output) + (text "combout[31..0]" (rect 0 0 102 16)(font "Arial" (font_size 8))) + (text "combout[31..0]" (rect 166 59 268 75)(font "Arial" (font_size 8))) + (line (pt 240 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 240 56) + (bidir) + (text "padio[31..0]" (rect 0 0 80 16)(font "Arial" (font_size 8))) + (text "padio[31..0]" (rect 181 43 261 59)(font "Arial" (font_size 8))) + (line (pt 240 56)(pt 144 56)(line_width 3)) + ) + (drawing + (text "ddio" (rect 108 27 136 43)(font "Arial" (font_size 8))) + (text "bidir" (rect 108 42 136 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 90 152 105)(font "Arial" )) + (text "low" (rect 92 100 114 115)(font "Arial" )) + (line (pt 88 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 112)(line_width 1)) + (line (pt 144 112)(pt 88 112)(line_width 1)) + (line (pt 88 112)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 368 1784 432 1832) + (text "OR3" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst39" (rect 3 37 44 53)(font "Arial" (font_size 8))) + (port + (pt 0 24) + (input) + (text "IN2" (rect 2 15 26 31)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 15 26 31)(font "Courier New" (bold))(invisible)) + (line (pt 0 24)(pt 18 24)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN3" (rect 2 24 26 40)(font "Courier New" (bold))(invisible)) + (text "IN3" (rect 2 24 26 40)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 16 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 47 15 71 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 47 15 71 31)(font "Courier New" (bold))(invisible)) + (line (pt 49 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 13)(pt 25 13)(line_width 1)) + (line (pt 14 36)(pt 25 36)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 1688 1552 1848 1632) + (text "lpm_latch0" (rect 49 1 139 20)(font "Arial" (font_size 10))) + (text "inst27" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "gate" (rect 0 0 29 16)(font "Arial" (font_size 8))) + (text "gate" (rect 20 42 49 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 105 26 156 42)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (drawing + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 64)(line_width 1)) + (line (pt 144 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + ) +) +(symbol + (rect 888 2904 1032 3000) + (text "lpm_ff6" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst36" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 101 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 83 50 143 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 920 2144 1064 2224) + (text "lpm_shiftreg6" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "inst92" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 62 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 60 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[4..0]" (rect 0 0 43 16)(font "Arial" (font_size 8))) + (text "q[4..0]" (rect 95 42 138 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "right shift" (rect 88 17 147 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) +(symbol + (rect 904 2528 1048 2608) + (text "lpm_shiftreg6" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "inst89" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 62 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 60 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[4..0]" (rect 0 0 43 16)(font "Arial" (font_size 8))) + (text "q[4..0]" (rect 95 42 138 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "right shift" (rect 88 17 147 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) +(symbol + (rect 920 2248 1064 2328) + (text "lpm_shiftreg4" (rect 34 1 148 20)(font "Arial" (font_size 10))) + (text "inst26" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 62 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 60 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "shiftout" (rect 0 0 49 16)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 42 138 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (drawing + (text "right shift" (rect 88 17 147 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) +(symbol + (rect 2080 1528 2144 1608) + (text "DFF" (rect 1 0 23 13)(font "Arial" (font_size 6))) + (text "inst95" (rect 3 68 43 83)(font "Arial" )) + (port + (pt 32 80) + (input) + (text "CLRN" (rect 21 59 54 75)(font "Courier New" (bold))) + (text "CLRN" (rect 21 58 54 74)(font "Courier New" (bold))) + (line (pt 32 80)(pt 32 76)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (line (pt 0 40)(pt 12 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 12 24)(line_width 1)) + ) + (port + (pt 32 0) + (input) + (text "PRN" (rect 24 13 48 29)(font "Courier New" (bold))) + (text "PRN" (rect 24 11 48 27)(font "Courier New" (bold))) + (line (pt 32 4)(pt 32 0)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (line (pt 52 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 12 12)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 52 68)(line_width 1)) + (line (pt 52 68)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 12 12)(line_width 1)) + (line (pt 19 40)(pt 12 47)(line_width 1)) + (line (pt 12 32)(pt 20 40)(line_width 1)) + (circle (rect 28 4 36 12)(line_width 1)) + (circle (rect 28 68 36 76)(line_width 1)) + ) +) +(symbol + (rect 1312 2320 1376 2368) + (text "OR2" (rect 1 0 25 13)(font "Arial" (font_size 6))) + (text "inst37" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 15 32)(line_width 1)) + ) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 15 16)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 48 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 36)(pt 25 36)(line_width 1)) + (line (pt 14 13)(pt 25 13)(line_width 1)) + (arc (pt 7 29)(pt 7 19)(rect -14 8 19 41)(line_width 1)) + (arc (pt 49 24)(pt 25 13)(rect -6 13 57 76)(line_width 1)) + (arc (pt 25 35)(pt 49 24)(rect -6 -27 57 36)(line_width 1)) + ) +) +(symbol + (rect 1088 2640 1232 2720) + (text "lpm_ff5" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst97" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[7..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect 20 26 84 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[7..0]" (rect 0 0 43 16)(font "Arial" (font_size 8))) + (text "q[7..0]" (rect 95 42 138 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 4280 2768 4512 2888) + (text "altddio_out2" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst5" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[23..0]" (rect 0 0 101 16)(font "Arial" (font_size 8))) + (text "datain_h[23..0]" (rect 4 11 105 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[23..0]" (rect 0 0 96 16)(font "Arial" (font_size 8))) + (text "datain_l[23..0]" (rect 4 27 100 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout[23..0]" (rect 0 0 94 16)(font "Arial" (font_size 8))) + (text "dataout[23..0]" (rect 163 11 257 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 3)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "low" (rect 92 84 114 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 3720 1936 3816 1984) + (text "lpm_constant1" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst77" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[1..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[1..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "2" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3720 1736 3816 1784) + (text "lpm_constant1" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst80" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[1..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[1..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "2" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 3720 1528 3816 1576) + (text "lpm_constant1" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst83" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[1..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[1..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "2" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 2424 2720 2520 2768) + (text "lpm_constant2" (rect 6 1 128 20)(font "Arial" (font_size 10))) + (text "inst23" (rect 8 32 48 47)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[7..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[7..0]" (rect 93 -25 166 -9)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 83 33)(font "Arial" )) + (text "8" (rect 87 25 95 40)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) +(symbol + (rect 4024 2696 4176 2888) + (text "lpm_mux6" (rect 50 2 134 21)(font "Arial" (font_size 10))) + (text "inst7" (rect 8 176 39 191)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data7x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data7x[23..0]" (rect 4 27 93 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data6x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data6x[23..0]" (rect 4 43 93 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data5x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data5x[23..0]" (rect 4 59 93 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data4x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data4x[23..0]" (rect 4 75 93 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data3x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data3x[23..0]" (rect 4 91 93 107)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data2x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data2x[23..0]" (rect 4 107 93 123)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data1x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data1x[23..0]" (rect 4 123 93 139)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data0x[23..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data0x[23..0]" (rect 4 139 93 155)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 4 155 40 171)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 1)) + ) + (port + (pt 80 192) + (input) + (text "sel[2..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[2..0]" (rect 84 179 139 195)(font "Arial" (font_size 8))) + (line (pt 80 192)(pt 80 180)(line_width 3)) + ) + (port + (pt 152 104) + (output) + (text "result[23..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "result[23..0]" (rect 92 91 173 107)(font "Arial" (font_size 8))) + (line (pt 152 104)(pt 88 104)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 184)(line_width 1)) + (line (pt 88 32)(pt 88 176)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 184)(pt 88 176)(line_width 1)) + (line (pt 72 162)(pt 78 168)(line_width 1)) + (line (pt 78 168)(pt 72 174)(line_width 1)) + ) +) +(symbol + (rect 2824 2544 2968 2864) + (text "lpm_mux2" (rect 50 2 134 21)(font "Arial" (font_size 10))) + (text "inst25" (rect 8 304 48 319)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data15x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data15x[7..0]" (rect 4 27 93 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data14x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data14x[7..0]" (rect 4 43 93 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data13x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data13x[7..0]" (rect 4 59 93 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data12x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data12x[7..0]" (rect 4 75 93 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data11x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data11x[7..0]" (rect 4 91 93 107)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data10x[7..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data10x[7..0]" (rect 4 107 93 123)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data9x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data9x[7..0]" (rect 4 123 85 139)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data8x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data8x[7..0]" (rect 4 139 85 155)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "data7x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data7x[7..0]" (rect 4 155 85 171)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 3)) + ) + (port + (pt 0 184) + (input) + (text "data6x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data6x[7..0]" (rect 4 171 85 187)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 72 184)(line_width 3)) + ) + (port + (pt 0 200) + (input) + (text "data5x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data5x[7..0]" (rect 4 187 85 203)(font "Arial" (font_size 8))) + (line (pt 0 200)(pt 72 200)(line_width 3)) + ) + (port + (pt 0 216) + (input) + (text "data4x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data4x[7..0]" (rect 4 203 85 219)(font "Arial" (font_size 8))) + (line (pt 0 216)(pt 72 216)(line_width 3)) + ) + (port + (pt 0 232) + (input) + (text "data3x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data3x[7..0]" (rect 4 219 85 235)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 72 232)(line_width 3)) + ) + (port + (pt 0 248) + (input) + (text "data2x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data2x[7..0]" (rect 4 235 85 251)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 72 248)(line_width 3)) + ) + (port + (pt 0 264) + (input) + (text "data1x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data1x[7..0]" (rect 4 251 85 267)(font "Arial" (font_size 8))) + (line (pt 0 264)(pt 72 264)(line_width 3)) + ) + (port + (pt 0 280) + (input) + (text "data0x[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data0x[7..0]" (rect 4 267 85 283)(font "Arial" (font_size 8))) + (line (pt 0 280)(pt 72 280)(line_width 3)) + ) + (port + (pt 0 296) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 4 283 40 299)(font "Arial" (font_size 8))) + (line (pt 0 296)(pt 72 296)(line_width 1)) + ) + (port + (pt 80 320) + (input) + (text "sel[3..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[3..0]" (rect 84 307 139 323)(font "Arial" (font_size 8))) + (line (pt 80 320)(pt 80 308)(line_width 3)) + ) + (port + (pt 144 168) + (output) + (text "result[7..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "result[7..0]" (rect 90 155 163 171)(font "Arial" (font_size 8))) + (line (pt 144 168)(pt 88 168)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 312)(line_width 1)) + (line (pt 88 32)(pt 88 304)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 312)(pt 88 304)(line_width 1)) + (line (pt 72 290)(pt 78 296)(line_width 1)) + (line (pt 78 296)(pt 72 302)(line_width 1)) + ) +) +(symbol + (rect 2224 2544 2376 2736) + (text "lpm_mux1" (rect 50 2 134 21)(font "Arial" (font_size 10))) + (text "inst24" (rect 8 176 48 191)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data7x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data7x[15..0]" (rect 4 27 93 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data6x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data6x[15..0]" (rect 4 43 93 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data5x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data5x[15..0]" (rect 4 59 93 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data4x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data4x[15..0]" (rect 4 75 93 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data3x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data3x[15..0]" (rect 4 91 93 107)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data2x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data2x[15..0]" (rect 4 107 93 123)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data1x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data1x[15..0]" (rect 4 123 93 139)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data0x[15..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data0x[15..0]" (rect 4 139 93 155)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 4 155 40 171)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 1)) + ) + (port + (pt 80 192) + (input) + (text "sel[2..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[2..0]" (rect 84 179 139 195)(font "Arial" (font_size 8))) + (line (pt 80 192)(pt 80 180)(line_width 3)) + ) + (port + (pt 152 104) + (output) + (text "result[15..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "result[15..0]" (rect 92 91 173 107)(font "Arial" (font_size 8))) + (line (pt 152 104)(pt 88 104)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 184)(line_width 1)) + (line (pt 88 32)(pt 88 176)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 184)(pt 88 176)(line_width 1)) + (line (pt 72 162)(pt 78 168)(line_width 1)) + (line (pt 78 168)(pt 72 174)(line_width 1)) + ) +) +(symbol + (rect 1616 2688 1768 2816) + (text "lpm_mux0" (rect 50 2 134 21)(font "Arial" (font_size 10))) + (text "inst21" (rect 8 112 48 127)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data3x[31..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data3x[31..0]" (rect 4 27 93 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data2x[31..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data2x[31..0]" (rect 4 43 93 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data1x[31..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data1x[31..0]" (rect 4 59 93 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data0x[31..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "data0x[31..0]" (rect 4 75 93 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 4 91 40 107)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 1)) + ) + (port + (pt 80 128) + (input) + (text "sel[1..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[1..0]" (rect 84 115 139 131)(font "Arial" (font_size 8))) + (line (pt 80 128)(pt 80 116)(line_width 3)) + ) + (port + (pt 152 72) + (output) + (text "result[31..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "result[31..0]" (rect 92 59 173 75)(font "Arial" (font_size 8))) + (line (pt 152 72)(pt 88 72)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 120)(line_width 1)) + (line (pt 88 32)(pt 88 112)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 120)(pt 88 112)(line_width 1)) + (line (pt 72 98)(pt 78 104)(line_width 1)) + (line (pt 78 104)(pt 72 110)(line_width 1)) + ) +) +(symbol + (rect 3672 2752 3816 2832) + (text "lpm_ff3" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst46" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[23..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[23..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[23..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 3432 2736 3576 2816) + (text "lpm_ff3" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst47" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[23..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[23..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[23..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 3672 2840 3816 2920) + (text "lpm_ff3" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst49" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[23..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[23..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[23..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 3432 2824 3576 2904) + (text "lpm_ff3" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst52" (rect 8 64 48 79)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[23..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[23..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[23..0]" (rect 89 42 140 58)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 2912 2936 2976 3016) + (text "DFF" (rect 1 0 23 13)(font "Arial" (font_size 6))) + (text "inst91" (rect 3 68 43 83)(font "Arial" )) + (port + (pt 32 80) + (input) + (text "CLRN" (rect 21 59 54 75)(font "Courier New" (bold))) + (text "CLRN" (rect 21 58 54 74)(font "Courier New" (bold))) + (line (pt 32 80)(pt 32 76)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (line (pt 0 40)(pt 12 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 12 24)(line_width 1)) + ) + (port + (pt 32 0) + (input) + (text "PRN" (rect 24 13 48 29)(font "Courier New" (bold))) + (text "PRN" (rect 24 11 48 27)(font "Courier New" (bold))) + (line (pt 32 4)(pt 32 0)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (line (pt 52 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 12 12)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 52 68)(line_width 1)) + (line (pt 52 68)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 12 12)(line_width 1)) + (line (pt 19 40)(pt 12 47)(line_width 1)) + (line (pt 12 32)(pt 20 40)(line_width 1)) + (circle (rect 28 4 36 12)(line_width 1)) + (circle (rect 28 68 36 76)(line_width 1)) + ) +) +(symbol + (rect 3048 2936 3112 3016) + (text "DFF" (rect 1 0 23 13)(font "Arial" (font_size 6))) + (text "inst93" (rect 3 68 43 83)(font "Arial" )) + (port + (pt 32 80) + (input) + (text "CLRN" (rect 21 59 54 75)(font "Courier New" (bold))) + (text "CLRN" (rect 21 58 54 74)(font "Courier New" (bold))) + (line (pt 32 80)(pt 32 76)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (text "CLK" (rect 3 29 27 45)(font "Courier New" (bold))(invisible)) + (line (pt 0 40)(pt 12 40)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (text "D" (rect 14 20 22 36)(font "Courier New" (bold))) + (line (pt 0 24)(pt 12 24)(line_width 1)) + ) + (port + (pt 32 0) + (input) + (text "PRN" (rect 24 13 48 29)(font "Courier New" (bold))) + (text "PRN" (rect 24 11 48 27)(font "Courier New" (bold))) + (line (pt 32 4)(pt 32 0)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (text "Q" (rect 45 20 53 36)(font "Courier New" (bold))) + (line (pt 52 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 12 12)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 52 68)(line_width 1)) + (line (pt 52 68)(pt 52 12)(line_width 1)) + (line (pt 12 68)(pt 12 12)(line_width 1)) + (line (pt 19 40)(pt 12 47)(line_width 1)) + (line (pt 12 32)(pt 20 40)(line_width 1)) + (circle (rect 28 4 36 12)(line_width 1)) + (circle (rect 28 68 36 76)(line_width 1)) + ) +) +(symbol + (rect 1712 1328 1872 1496) + (text "lpm_fifo_dc0" (rect 44 1 153 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 152 31 167)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 101 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 56 66)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "wrclk" (rect 0 0 35 16)(font "Arial" (font_size 8))) + (text "wrclk" (rect 26 66 61 82)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "rdreq" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 98 54 114)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "rdclk" (rect 0 0 33 16)(font "Arial" (font_size 8))) + (text "rdclk" (rect 26 114 59 130)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "aclr" (rect 0 0 24 16)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 138 44 154)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 16 144)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "wrusedw[8..0]" (rect 0 0 94 16)(font "Arial" (font_size 8))) + (text "wrusedw[8..0]" (rect 69 66 163 82)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 160 96) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 99 90 159 106)(font "Arial" (font_size 8))) + (line (pt 160 96)(pt 144 96)(line_width 3)) + ) + (port + (pt 160 120) + (output) + (text "rdempty" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "rdempty" (rect 102 114 157 130)(font "Arial" (font_size 8))) + (line (pt 160 120)(pt 144 120)(line_width 1)) + ) + (drawing + (text "128 bits x 512 words" (rect 58 140 191 155)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 152)(line_width 1)) + (line (pt 144 152)(pt 16 152)(line_width 1)) + (line (pt 16 152)(pt 16 16)(line_width 1)) + (line (pt 16 84)(pt 144 84)(line_width 1)) + (line (pt 16 132)(pt 144 132)(line_width 1)) + (line (pt 16 66)(pt 22 72)(line_width 1)) + (line (pt 22 72)(pt 16 78)(line_width 1)) + (line (pt 16 114)(pt 22 120)(line_width 1)) + (line (pt 22 120)(pt 16 126)(line_width 1)) + ) +) +(symbol + (rect 3768 2488 3864 2528) + (text "lpm_bustri_BYT" (rect 2 1 136 20)(font "Arial" (font_size 10))) + (text "inst53" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[7..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 96 24) + (bidir) + (text "tridata[7..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[7..0]" (rect 100 -30 177 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "8" (rect 71 25 79 40)(font "Arial" )) + (text "8" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 66 28)(pt 74 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3296 2384 3328 2416) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst75" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3768 2280 3864 2320) + (text "lpm_bustri_BYT" (rect 2 1 136 20)(font "Arial" (font_size 10))) + (text "inst57" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[7..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 96 24) + (bidir) + (text "tridata[7..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[7..0]" (rect 100 -30 177 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "8" (rect 71 25 79 40)(font "Arial" )) + (text "8" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 66 28)(pt 74 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3296 2176 3328 2208) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst76" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 3768 2072 3864 2112) + (text "lpm_bustri_BYT" (rect 2 1 136 20)(font "Arial" (font_size 10))) + (text "inst58" (rect 8 24 48 39)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 97 10)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[7..0]" (rect 0 0 64 16)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect -3 -21 61 -5)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 96 24) + (bidir) + (text "tridata[7..0]" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "tridata[7..0]" (rect 100 -30 177 -14)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "8" (rect 71 25 79 40)(font "Arial" )) + (text "8" (rect 15 25 23 40)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 66 28)(pt 74 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) +(symbol + (rect 3448 2272 3704 2480) + (text "altdpram2" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ACP_CLUT_RAM54" (rect 8 192 136 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[7..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[7..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[7..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[7..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 2480 3704 2688) + (text "altdpram2" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ACP_CLUT_RAM" (rect 8 192 120 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[7..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[7..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[7..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[7..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 1832 3704 2040) + (text "altdpram1" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "FALCON_CLUT_BLUE" (rect 8 192 156 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[5..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[5..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[5..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[5..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 1416 3704 1624) + (text "altdpram1" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "FALCON_CLUT_RED" (rect 8 192 149 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[5..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[5..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[5..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[5..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 1624 3704 1832) + (text "altdpram1" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "FALCON_CLUT_GREEN" (rect 8 192 169 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[5..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[5..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[5..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[5..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[5..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[5..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 2064 3704 2272) + (text "altdpram2" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ACP_CLUT_RAM55" (rect 8 192 136 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[7..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[7..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[7..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[7..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[7..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[7..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 151 138)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 3448 1192 3704 1400) + (text "altdpram0" (rect 100 1 183 20)(font "Arial" (font_size 10))) + (text "ST_CLUT_BLUE" (rect 8 192 117 207)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_a[2..0]" (rect 4 19 85 35)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_a[3..0]" (rect 4 35 110 51)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 52 67)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[2..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data_b[2..0]" (rect 4 83 85 99)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[3..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "address_b[3..0]" (rect 4 99 110 115)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 48 16)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 52 131)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 57 163)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 57 179)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_a[2..0]" (rect 211 19 271 35)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[2..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q_b[2..0]" (rect 211 83 271 99)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "16 Word(s)" (rect 136 61 151 132)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 164 103)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 155 203)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) +(symbol + (rect 2000 1368 2168 1480) + (text "lpm_muxDZ" (rect 54 2 153 21)(font "Arial" (font_size 10))) + (text "inst62" (rect 8 96 48 111)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data1x[127..0]" (rect 4 27 101 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 80 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data0x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data0x[127..0]" (rect 4 43 101 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 80 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 4 59 40 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 80 72)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "clken" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clken" (rect 4 75 40 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 80 88)(line_width 1)) + ) + (port + (pt 88 112) + (input) + (text "sel" (rect 0 0 20 16)(font "Arial" (font_size 8))) + (text "sel" (rect 92 99 112 115)(font "Arial" (font_size 8))) + (line (pt 88 112)(pt 88 100)(line_width 1)) + ) + (port + (pt 168 64) + (output) + (text "result[127..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "result[127..0]" (rect 102 51 191 67)(font "Arial" (font_size 8))) + (line (pt 168 64)(pt 96 64)(line_width 3)) + ) + (drawing + (line (pt 80 24)(pt 80 104)(line_width 1)) + (line (pt 96 32)(pt 96 96)(line_width 1)) + (line (pt 80 24)(pt 96 32)(line_width 1)) + (line (pt 80 104)(pt 96 96)(line_width 1)) + (line (pt 80 66)(pt 86 72)(line_width 1)) + (line (pt 86 72)(pt 80 78)(line_width 1)) + ) +) +(symbol + (rect 1536 1408 1600 1456) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst65" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 1856 1272 1920 1320) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst67" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(symbol + (rect 1456 1424 1504 1456) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst69" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1160 1104 1304 1200) + (text "lpm_ff6" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst71" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 101 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 83 50 143 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1400 1128 1544 1224) + (text "lpm_ff6" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst94" (rect 8 80 48 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 101 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 83 50 143 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1800 816 1968 1120) + (text "lpm_muxVDM" (rect 47 2 163 21)(font "Arial" (font_size 10))) + (text "inst100" (rect 8 288 56 303)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data15x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data15x[127..0]" (rect 4 27 110 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 80 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data14x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data14x[127..0]" (rect 4 43 110 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 80 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data13x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data13x[127..0]" (rect 4 59 110 75)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 80 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data12x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data12x[127..0]" (rect 4 75 110 91)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 80 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data11x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data11x[127..0]" (rect 4 91 110 107)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 80 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data10x[127..0]" (rect 0 0 106 16)(font "Arial" (font_size 8))) + (text "data10x[127..0]" (rect 4 107 110 123)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 80 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data9x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data9x[127..0]" (rect 4 123 101 139)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 80 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data8x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data8x[127..0]" (rect 4 139 101 155)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 80 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "data7x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data7x[127..0]" (rect 4 155 101 171)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 80 168)(line_width 3)) + ) + (port + (pt 0 184) + (input) + (text "data6x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data6x[127..0]" (rect 4 171 101 187)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 80 184)(line_width 3)) + ) + (port + (pt 0 200) + (input) + (text "data5x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data5x[127..0]" (rect 4 187 101 203)(font "Arial" (font_size 8))) + (line (pt 0 200)(pt 80 200)(line_width 3)) + ) + (port + (pt 0 216) + (input) + (text "data4x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data4x[127..0]" (rect 4 203 101 219)(font "Arial" (font_size 8))) + (line (pt 0 216)(pt 80 216)(line_width 3)) + ) + (port + (pt 0 232) + (input) + (text "data3x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data3x[127..0]" (rect 4 219 101 235)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 80 232)(line_width 3)) + ) + (port + (pt 0 248) + (input) + (text "data2x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data2x[127..0]" (rect 4 235 101 251)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 80 248)(line_width 3)) + ) + (port + (pt 0 264) + (input) + (text "data1x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data1x[127..0]" (rect 4 251 101 267)(font "Arial" (font_size 8))) + (line (pt 0 264)(pt 80 264)(line_width 3)) + ) + (port + (pt 0 280) + (input) + (text "data0x[127..0]" (rect 0 0 97 16)(font "Arial" (font_size 8))) + (text "data0x[127..0]" (rect 4 267 101 283)(font "Arial" (font_size 8))) + (line (pt 0 280)(pt 80 280)(line_width 3)) + ) + (port + (pt 88 304) + (input) + (text "sel[3..0]" (rect 0 0 55 16)(font "Arial" (font_size 8))) + (text "sel[3..0]" (rect 92 291 147 307)(font "Arial" (font_size 8))) + (line (pt 88 304)(pt 88 292)(line_width 3)) + ) + (port + (pt 168 160) + (output) + (text "result[127..0]" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "result[127..0]" (rect 102 147 191 163)(font "Arial" (font_size 8))) + (line (pt 168 160)(pt 96 160)(line_width 3)) + ) + (drawing + (line (pt 80 24)(pt 80 296)(line_width 1)) + (line (pt 96 32)(pt 96 288)(line_width 1)) + (line (pt 80 24)(pt 96 32)(line_width 1)) + (line (pt 80 296)(pt 96 288)(line_width 1)) + ) +) +(symbol + (rect 2072 1176 2232 1320) + (text "lpm_fifoDZ" (rect 41 2 133 21)(font "Arial" (font_size 10))) + (text "inst63" (rect 8 125 48 140)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 24 101 40)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 48 56 64)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "rdreq" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 64 54 80)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 88 62 104)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "aclr" (rect 0 0 24 16)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 112 44 128)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 90 24 150 40)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (drawing + (text "(ack)" (rect 51 67 82 82)(font "Arial" )) + (text "128 bits x 128 words" (rect 31 114 164 129)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 128)(line_width 1)) + (line (pt 144 128)(pt 16 128)(line_width 1)) + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 16 108)(pt 144 108)(line_width 1)) + (line (pt 16 90)(pt 22 96)(line_width 1)) + (line (pt 22 96)(pt 16 102)(line_width 1)) + ) +) +(block + (rect 296 2552 568 3000) + (text "BLITTER" (rect 5 5 65 21)(font "Arial" (font_size 8))) (text "BLITTER" (rect 5 434 62 449)(font "Arial" )) (block_io "nRSTO" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "FB_ALE" (input)) + (block_io "nFB_WR" (input)) + (block_io "nFB_OE" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "VIDEO_RAM_CTR[15..0]" (input)) + (block_io "BLITTER_ON" (input)) + (block_io "FB_ADR[31..0]" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "nFB_CS3" (input)) + (block_io "DDRCLK0" (input)) + (block_io "BLITTER_DIN[127..0]" (input)) + (block_io "BLITTER_DACK[4..0]" (input)) + (block_io "BLITTER_RUN" (output)) + (block_io "BLITTER_DOUT[127..0]" (output)) + (block_io "BLITTER_ADR[31..0]" (output)) + (block_io "BLITTER_SIG" (output)) + (block_io "BLITTER_WR" (output)) + (block_io "BLITTER_TA" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (mapper + (pt 272 176) + (bidir) + ) + (mapper + (pt 272 208) + (bidir) + ) + (mapper + (pt 272 240) + (bidir) + ) + (mapper + (pt 272 264) + (bidir) + ) + (mapper + (pt 272 288) + (bidir) + ) + (mapper + (pt 0 384) + (bidir) + ) + (mapper + (pt 272 72) + (bidir) + ) + (mapper + (pt 0 56) + (bidir) + ) + (mapper + (pt 0 32) + (bidir) + ) + (mapper + (pt 0 296) + (bidir) + ) + (mapper + (pt 0 272) + (bidir) + ) + (mapper + (pt 0 104) + (bidir) + ) + (mapper + (pt 0 128) + (bidir) + ) + (mapper + (pt 0 80) + (bidir) + ) + (mapper + (pt 0 248) + (bidir) + ) + (mapper + (pt 0 224) + (bidir) + ) + (mapper + (pt 0 200) + (bidir) + ) + (mapper + (pt 0 176) + (bidir) + ) + (mapper + (pt 0 152) + (bidir) + ) + (mapper + (pt 0 360) + (bidir) + ) + (mapper + (pt 0 328) + (bidir) + ) + (mapper + (pt 272 424) + (bidir) + ) + (mapper + (pt 0 408) + (bidir) + ) +) +(block + (rect 1664 1664 2016 2600) + (text "VIDEO_MOD_MUX_CLUTCTR" (rect 5 5 211 21)(font "Arial" (font_size 8))) (text "VIDEO_MOD_MUX_CLUTCTR" (rect 5 922 200 937)(font "Arial" )) (block_io "nRSTO" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "nFB_CS3" (input)) + (block_io "nFB_WR" (input)) + (block_io "nFB_OE" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "nFB_BURST" (input)) + (block_io "FB_ADR[31..0]" (input)) + (block_io "CLK33M" (input)) + (block_io "CLK25M" (input)) + (block_io "BLITTER_RUN" (input)) + (block_io "CLK_VIDEO" (input)) + (block_io "VR_D[8..0]" (input)) + (block_io "VR_BUSY" (input)) + (block_io "COLOR8" (output)) + (block_io "ACP_CLUT_RD" (output)) + (block_io "COLOR1" (output)) + (block_io "FALCON_CLUT_RDH" (output)) + (block_io "FALCON_CLUT_RDL" (output)) + (block_io "FALCON_CLUT_WR[3..0]" (output)) + (block_io "ST_CLUT_RD" (output)) + (block_io "ST_CLUT_WR[1..0]" (output)) + (block_io "CLUT_MUX_ADR[3..0]" (output)) + (block_io "HSYNC" (output)) + (block_io "VSYNC" (output)) + (block_io "nBLANK" (output)) + (block_io "nSYNC" (output)) + (block_io "nPD_VGA" (output)) + (block_io "FIFO_RDE" (output)) + (block_io "COLOR2" (output)) + (block_io "COLOR4" (output)) + (block_io "PIXEL_CLK" (output)) + (block_io "CLUT_OFF[3..0]" (output)) + (block_io "BLITTER_ON" (output)) + (block_io "VIDEO_RAM_CTR[15..0]" (output)) + (block_io "VIDEO_MOD_TA" (output)) + (block_io "CCR[23..0]" (output)) + (block_io "CCSEL[2..0]" (output)) + (block_io "ACP_CLUT_WR[3..0]" (output)) + (block_io "INTER_ZEI" (output)) + (block_io "DOP_FIFO_CLR" (output)) + (block_io "VIDEO_RECONFIG" (output)) + (block_io "VR_WR" (output)) + (block_io "VR_RD" (output)) + (block_io "CLR_FIFO" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (mapper + (pt 352 72) + (bidir) + ) + (mapper + (pt 0 272) + (bidir) + ) + (mapper + (pt 0 56) + (bidir) + ) + (mapper + (pt 0 80) + (bidir) + ) + (mapper + (pt 0 296) + (bidir) + ) + (mapper + (pt 0 104) + (bidir) + ) + (mapper + (pt 0 128) + (bidir) + ) + (mapper + (pt 0 152) + (bidir) + ) + (mapper + (pt 0 176) + (bidir) + ) + (mapper + (pt 0 248) + (bidir) + ) + (mapper + (pt 0 200) + (bidir) + ) + (mapper + (pt 0 224) + (bidir) + ) + (mapper + (pt 0 520) + (bidir) + ) + (mapper + (pt 0 544) + (bidir) + ) + (mapper + (pt 0 880) + (bidir) + ) + (mapper + (pt 352 600) + (bidir) + ) + (mapper + (pt 352 624) + (bidir) + ) + (mapper + (pt 352 648) + (bidir) + ) + (mapper + (pt 352 672) + (bidir) + ) + (mapper + (pt 352 696) + (bidir) + ) + (mapper + (pt 352 720) + (bidir) + ) + (mapper + (pt 352 840) + (bidir) + ) + (mapper + (pt 352 472) + (bidir) + ) + (mapper + (pt 352 448) + (bidir) + ) + (mapper + (pt 352 528) + (bidir) + ) + (mapper + (pt 352 320) + (bidir) + ) + (mapper + (pt 352 576) + (bidir) + ) + (mapper + (pt 352 400) + (bidir) + ) + (mapper + (pt 352 376) + (bidir) + ) + (mapper + (pt 352 352) + (bidir) + ) + (mapper + (pt 352 504) + (bidir) + ) + (mapper + (pt 352 296) + (bidir) + ) + (mapper + (pt 352 424) + (bidir) + ) + (mapper + (pt 352 552) + (bidir) + ) + (mapper + (pt 352 752) + (bidir) + ) + (mapper + (pt 352 776) + (bidir) + ) + (mapper + (pt 352 872) + (bidir) + ) + (mapper + (pt 0 496) + (bidir) + ) + (mapper + (pt 352 88) + (bidir) + ) + (mapper + (pt 352 264) + (bidir) + ) + (mapper + (pt 352 248) + (bidir) + ) + (mapper + (pt 352 232) + (bidir) + ) + (mapper + (pt 352 216) + (bidir) + ) + (mapper + (pt 352 136) + (bidir) + ) + (mapper + (pt 352 40) + (bidir) + ) + (mapper + (pt 352 152) + (bidir) + ) + (mapper + (pt 0 472) + (bidir) + ) + (mapper + (pt 0 456) + (bidir) + ) + (mapper + (pt 352 104) + (bidir) + ) +) +(block + (rect 296 1872 560 2536) + (text "DDR_CTR" (rect 5 5 74 21)(font "Arial" (font_size 8))) (text "DDR_CTR" (rect 5 650 74 665)(font "Arial" )) (block_io "FB_ADR[31..0]" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "nFB_CS3" (input)) + (block_io "nFB_OE" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "nRSTO" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "FB_ALE" (input)) + (block_io "nFB_WR" (input)) + (block_io "DDR_SYNC_66M" (input)) + (block_io "VIDEO_RAM_CTR[15..0]" (input)) + (block_io "BLITTER_ADR[31..0]" (input)) + (block_io "BLITTER_SIG" (input)) + (block_io "BLITTER_WR" (input)) + (block_io "DDRCLK0" (input)) + (block_io "CLK33M" (input)) + (block_io "FIFO_MW[8..0]" (input)) + (block_io "CLR_FIFO" (input)) + (block_io "VA[12..0]" (output)) + (block_io "nVWE" (output)) + (block_io "nVRAS" (output)) + (block_io "nVCS" (output)) + (block_io "VCKE" (output)) + (block_io "nVCAS" (output)) + (block_io "FB_LE[3..0]" (output)) + (block_io "FB_VDOE[3..0]" (output)) + (block_io "SR_FIFO_WRE" (output)) + (block_io "SR_DDR_FB" (output)) + (block_io "SR_DDR_WR" (output)) + (block_io "SR_DDRWR_D_SEL" (output)) + (block_io "SR_VDMP[7..0]" (output)) + (block_io "VIDEO_DDR_TA" (output)) + (block_io "SR_BLITTER_DACK" (output)) + (block_io "BA[1..0]" (output)) + (block_io "DDRWR_D_SEL1" (output)) + (block_io "VDM_SEL[3..0]" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (mapper + (pt 264 560) + (bidir) + ) + (mapper + (pt 264 48) + (bidir) + ) + (mapper + (pt 0 208) + (bidir) + ) + (mapper + (pt 0 256) + (bidir) + ) + (mapper + (pt 0 304) + (bidir) + ) + (mapper + (pt 264 312) + (bidir) + ) + (mapper + (pt 264 264) + (bidir) + ) + (mapper + (pt 264 536) + (bidir) + ) + (mapper + (pt 264 360) + (bidir) + ) + (mapper + (pt 264 384) + (bidir) + ) + (mapper + (pt 264 408) + (bidir) + ) + (mapper + (pt 264 432) + (bidir) + ) + (mapper + (pt 0 88) + (bidir) + ) + (mapper + (pt 0 160) + (bidir) + ) + (mapper + (pt 264 120) + (bidir) + ) + (mapper + (pt 264 144) + (bidir) + ) + (mapper + (pt 0 112) + (bidir) + ) + (mapper + (pt 0 360) + (bidir) + ) + (mapper + (pt 0 136) + (bidir) + ) + (mapper + (pt 0 40) + (bidir) + ) + (mapper + (pt 0 384) + (bidir) + ) + (mapper + (pt 0 432) + (bidir) + ) + (mapper + (pt 0 456) + (bidir) + ) + (mapper + (pt 0 480) + (bidir) + ) + (mapper + (pt 264 216) + (bidir) + ) + (mapper + (pt 264 456) + (bidir) + ) + (mapper + (pt 264 168) + (bidir) + ) + (mapper + (pt 264 480) + (bidir) + ) + (mapper + (pt 264 504) + (bidir) + ) + (mapper + (pt 0 64) + (bidir) + ) + (mapper + (pt 264 632) + (bidir) + ) + (mapper + (pt 264 608) + (bidir) + ) + (mapper + (pt 0 576) + (bidir) + ) + (mapper + (pt 0 520) + (bidir) + ) + (mapper + (pt 0 184) + (bidir) + ) + (mapper + (pt 0 232) + (bidir) + ) + (mapper + (pt 0 280) + (bidir) + ) + (mapper + (pt 0 328) + (bidir) + ) + (mapper + (pt 264 336) + (bidir) + ) +) +(connector + (text "CLUT_ADR0" (rect 2786 1272 2869 1287)(font "Arial" )) + (pt 2776 1288) + (pt 2848 1288) +) +(connector + (text "CLUT_ADR3" (rect 3082 1744 3165 1759)(font "Arial" )) + (pt 3072 1760) + (pt 3144 1760) +) +(connector + (text "CLUT_ADR2" (rect 3082 1600 3165 1615)(font "Arial" )) + (pt 3072 1616) + (pt 3144 1616) +) +(connector + (pt 3008 1624) + (pt 2984 1624) +) +(connector + (pt 2976 1688) + (pt 2984 1688) +) +(connector + (text "FB_AD[31..0]" (rect 802 1120 885 1135)(font "Arial" )) + (pt 792 1136) + (pt 912 1136) + (bus) +) +(connector + (text "FIFO_D[127..112]" (rect 2546 1248 2659 1263)(font "Arial" )) + (pt 2536 1264) + (pt 2632 1264) + (bus) +) +(connector + (text "FIFO_D[111..96]" (rect 2546 1408 2651 1423)(font "Arial" )) + (pt 2536 1424) + (pt 2632 1424) + (bus) +) +(connector + (text "FIFO_D[95..80]" (rect 2546 1568 2642 1583)(font "Arial" )) + (pt 2536 1584) + (pt 2632 1584) + (bus) +) +(connector + (text "FIFO_D[79..64]" (rect 2546 1728 2642 1743)(font "Arial" )) + (pt 2536 1744) + (pt 2632 1744) + (bus) +) +(connector + (text "FIFO_D[63..48]" (rect 2546 1888 2642 1903)(font "Arial" )) + (pt 2536 1904) + (pt 2632 1904) + (bus) +) +(connector + (text "FIFO_D[47..32]" (rect 2546 2048 2642 2063)(font "Arial" )) + (pt 2536 2064) + (pt 2632 2064) + (bus) +) +(connector + (text "FIFO_D[31..16]" (rect 2546 2208 2642 2223)(font "Arial" )) + (pt 2536 2224) + (pt 2632 2224) + (bus) +) +(connector + (text "FIFO_D[15..0]" (rect 2546 2368 2634 2383)(font "Arial" )) + (pt 2536 2384) + (pt 2632 2384) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 2546 1280 2621 1295)(font "Arial" )) + (pt 2632 1296) + (pt 2536 1296) +) +(connector + (text "PIXEL_CLK" (rect 2546 1440 2621 1455)(font "Arial" )) + (pt 2632 1456) + (pt 2536 1456) +) +(connector + (text "PIXEL_CLK" (rect 2546 1600 2621 1615)(font "Arial" )) + (pt 2632 1616) + (pt 2536 1616) +) +(connector + (text "PIXEL_CLK" (rect 2546 1760 2621 1775)(font "Arial" )) + (pt 2632 1776) + (pt 2536 1776) +) +(connector + (text "PIXEL_CLK" (rect 2546 2080 2621 2095)(font "Arial" )) + (pt 2632 2096) + (pt 2536 2096) +) +(connector + (text "PIXEL_CLK" (rect 2546 2240 2621 2255)(font "Arial" )) + (pt 2632 2256) + (pt 2536 2256) +) +(connector + (text "PIXEL_CLK" (rect 2546 2400 2621 2415)(font "Arial" )) + (pt 2632 2416) + (pt 2536 2416) +) +(connector + (pt 2496 1472) + (pt 2632 1472) +) +(connector + (pt 2496 1632) + (pt 2632 1632) +) +(connector + (pt 2496 1792) + (pt 2632 1792) +) +(connector + (pt 2496 1312) + (pt 2632 1312) +) +(connector + (pt 2496 1952) + (pt 2632 1952) +) +(connector + (pt 2496 2112) + (pt 2632 2112) +) +(connector + (text "COLOR2" (rect 2330 1344 2389 1359)(font "Arial" )) + (pt 2392 1360) + (pt 2320 1360) +) +(connector + (text "COLOR4" (rect 2330 1328 2389 1343)(font "Arial" )) + (pt 2392 1344) + (pt 2320 1344) +) +(connector + (text "COLOR2" (rect 2330 1504 2389 1519)(font "Arial" )) + (pt 2392 1520) + (pt 2320 1520) +) +(connector + (text "COLOR4" (rect 2330 1488 2389 1503)(font "Arial" )) + (pt 2392 1504) + (pt 2320 1504) +) +(connector + (text "COLOR2" (rect 2330 1664 2389 1679)(font "Arial" )) + (pt 2392 1680) + (pt 2320 1680) +) +(connector + (text "COLOR4" (rect 2330 1648 2389 1663)(font "Arial" )) + (pt 2392 1664) + (pt 2320 1664) +) +(connector + (text "COLOR2" (rect 2330 1824 2389 1839)(font "Arial" )) + (pt 2392 1840) + (pt 2320 1840) +) +(connector + (text "COLOR4" (rect 2330 1808 2389 1823)(font "Arial" )) + (pt 2392 1824) + (pt 2320 1824) +) +(connector + (text "COLOR2" (rect 2330 1984 2389 1999)(font "Arial" )) + (pt 2392 2000) + (pt 2320 2000) +) +(connector + (text "COLOR4" (rect 2330 1968 2389 1983)(font "Arial" )) + (pt 2392 1984) + (pt 2320 1984) +) +(connector + (text "COLOR2" (rect 2330 2144 2389 2159)(font "Arial" )) + (pt 2392 2160) + (pt 2320 2160) +) +(connector + (text "COLOR4" (rect 2330 2128 2389 2143)(font "Arial" )) + (pt 2392 2144) + (pt 2320 2144) +) +(connector + (pt 2984 1752) + (pt 3008 1752) +) +(connector + (pt 2984 1624) + (pt 2984 1688) +) +(connector + (pt 2984 1688) + (pt 2984 1752) +) +(connector + (pt 2392 1264) + (pt 2304 1264) +) +(connector + (pt 2392 1424) + (pt 2304 1424) +) +(connector + (pt 2392 1584) + (pt 2304 1584) +) +(connector + (pt 2392 1744) + (pt 2304 1744) +) +(connector + (pt 2392 1904) + (pt 2304 1904) +) +(connector + (pt 2392 2064) + (pt 2304 2064) +) +(connector + (text "CLUT_ADR2A" (rect 2786 1592 2878 1607)(font "Arial" )) + (pt 2776 1608) + (pt 3008 1608) +) +(connector + (text "CLUT_ADR3A" (rect 2786 1752 2878 1767)(font "Arial" )) + (pt 3008 1768) + (pt 2776 1768) +) +(connector + (text "CLUT_ADR7A" (rect 2330 2080 2422 2095)(font "Arial" )) + (pt 2320 2096) + (pt 2392 2096) +) +(connector + (text "CLUT_ADR6A" (rect 2330 2064 2422 2079)(font "Arial" )) + (pt 2320 2080) + (pt 2392 2080) +) +(connector + (text "CLUT_ADR6A" (rect 2330 1920 2422 1935)(font "Arial" )) + (pt 2320 1936) + (pt 2392 1936) +) +(connector + (text "CLUT_ADR5A" (rect 2330 1904 2422 1919)(font "Arial" )) + (pt 2320 1920) + (pt 2392 1920) +) +(connector + (text "CLUT_ADR7A" (rect 2330 1776 2422 1791)(font "Arial" )) + (pt 2320 1792) + (pt 2392 1792) +) +(connector + (text "CLUT_ADR5A" (rect 2330 1760 2422 1775)(font "Arial" )) + (pt 2320 1776) + (pt 2392 1776) +) +(connector + (text "CLUT_ADR4A" (rect 2330 1744 2422 1759)(font "Arial" )) + (pt 2320 1760) + (pt 2392 1760) +) +(connector + (text "CLUT_ADR6A" (rect 2330 1616 2422 1631)(font "Arial" )) + (pt 2320 1632) + (pt 2392 1632) +) +(connector + (text "CLUT_ADR4A" (rect 2330 1600 2422 1615)(font "Arial" )) + (pt 2320 1616) + (pt 2392 1616) +) +(connector + (text "CLUT_ADR3A" (rect 2330 1584 2422 1599)(font "Arial" )) + (pt 2320 1600) + (pt 2392 1600) +) +(connector + (text "CLUT_ADR5A" (rect 2330 1456 2422 1471)(font "Arial" )) + (pt 2320 1472) + (pt 2392 1472) +) +(connector + (text "CLUT_ADR3A" (rect 2330 1440 2422 1455)(font "Arial" )) + (pt 2320 1456) + (pt 2392 1456) +) +(connector + (text "CLUT_ADR4A" (rect 2330 1296 2422 1311)(font "Arial" )) + (pt 2320 1312) + (pt 2392 1312) +) +(connector + (text "CLUT_ADR2A" (rect 2330 1280 2422 1295)(font "Arial" )) + (pt 2320 1296) + (pt 2392 1296) +) +(connector + (text "CLUT_ADR2A" (rect 2330 1424 2422 1439)(font "Arial" )) + (pt 2392 1440) + (pt 2320 1440) +) +(connector + (text "CLUT_ADR7A" (rect 2570 2256 2662 2271)(font "Arial" )) + (pt 2560 2272) + (pt 2632 2272) +) +(connector + (text "CLUT_ADR0" (rect 2554 2416 2637 2431)(font "Arial" )) + (pt 2632 2432) + (pt 2544 2432) +) +(connector + (text "PIXEL_CLK" (rect 2546 1920 2621 1935)(font "Arial" )) + (pt 2632 1936) + (pt 2536 1936) +) +(connector + (text "CLUT_ADR4A" (rect 2794 1912 2886 1927)(font "Arial" )) + (pt 2776 1928) + (pt 2904 1928) +) +(connector + (text "CLUT_ADR5A" (rect 2786 2072 2878 2087)(font "Arial" )) + (pt 2776 2088) + (pt 2904 2088) +) +(connector + (text "CLUT_ADR6A" (rect 2794 2232 2886 2247)(font "Arial" )) + (pt 2776 2248) + (pt 2904 2248) +) +(connector + (text "CLUT_ADR7A" (rect 2794 2392 2886 2407)(font "Arial" )) + (pt 2776 2408) + (pt 2904 2408) +) +(connector + (text "COLOR8" (rect 2834 1928 2893 1943)(font "Arial" )) + (pt 2904 1944) + (pt 2824 1944) +) +(connector + (text "COLOR8" (rect 2834 2088 2893 2103)(font "Arial" )) + (pt 2904 2104) + (pt 2824 2104) +) +(connector + (text "COLOR8" (rect 2834 2248 2893 2263)(font "Arial" )) + (pt 2904 2264) + (pt 2824 2264) +) +(connector + (text "COLOR8" (rect 2834 2408 2893 2423)(font "Arial" )) + (pt 2904 2424) + (pt 2824 2424) +) +(connector + (text "CLUT_ADR4" (rect 3090 1928 3173 1943)(font "Arial" )) + (pt 3080 1944) + (pt 3152 1944) +) +(connector + (pt 3024 2112) + (pt 3016 2112) +) +(connector + (pt 3016 2112) + (pt 3016 2144) +) +(connector + (text "CLUT_ADR5" (rect 3098 2088 3181 2103)(font "Arial" )) + (pt 3088 2104) + (pt 3160 2104) +) +(connector + (text "CLUT_ADR7" (rect 3106 2408 3189 2423)(font "Arial" )) + (pt 3096 2424) + (pt 3168 2424) +) +(connector + (text "CLUT_ADR6" (rect 3098 2248 3181 2263)(font "Arial" )) + (pt 3088 2264) + (pt 3160 2264) +) +(connector + (pt 3032 2432) + (pt 3024 2432) +) +(connector + (pt 3024 2432) + (pt 3024 2464) +) +(connector + (pt 3016 1952) + (pt 3008 1952) +) +(connector + (pt 3008 1952) + (pt 3008 1984) +) +(connector + (pt 3024 2272) + (pt 3016 2272) +) +(connector + (pt 3016 2272) + (pt 3016 2304) +) +(connector + (pt 3016 1936) + (pt 2968 1936) +) +(connector + (pt 3024 2096) + (pt 2968 2096) +) +(connector + (pt 3024 2256) + (pt 2968 2256) +) +(connector + (pt 3032 2416) + (pt 2968 2416) +) +(connector + (text "CLUT_OFF0" (rect 2938 1968 3019 1983)(font "Arial" )) + (pt 2928 1984) + (pt 3008 1984) +) +(connector + (text "CLUT_OFF1" (rect 2946 2128 3027 2143)(font "Arial" )) + (pt 2936 2144) + (pt 3016 2144) +) +(connector + (text "CLUT_OFF2" (rect 2946 2288 3027 2303)(font "Arial" )) + (pt 2936 2304) + (pt 3016 2304) +) +(connector + (text "CLUT_OFF3" (rect 2954 2448 3035 2463)(font "Arial" )) + (pt 2944 2464) + (pt 3024 2464) +) +(connector + (text "COLOR4" (rect 2834 1664 2893 1679)(font "Arial" )) + (pt 2824 1680) + (pt 2912 1680) +) +(connector + (text "COLOR8" (rect 2834 1680 2893 1695)(font "Arial" )) + (pt 2912 1696) + (pt 2824 1696) +) +(connector + (text "CLUT_ADR1" (rect 3082 1440 3165 1455)(font "Arial" )) + (pt 3072 1456) + (pt 3144 1456) +) +(connector + (pt 3008 1464) + (pt 2992 1464) +) +(connector + (pt 2992 1464) + (pt 2992 1496) +) +(connector + (pt 2992 1496) + (pt 2984 1496) +) +(connector + (text "COLOR4" (rect 2842 1480 2901 1495)(font "Arial" )) + (pt 2832 1496) + (pt 2920 1496) +) +(connector + (pt 2920 1504) + (pt 2912 1504) +) +(connector + (pt 2912 1504) + (pt 2912 1520) +) +(connector + (text "COLOR8" (rect 2842 1504 2901 1519)(font "Arial" )) + (pt 2912 1520) + (pt 2832 1520) +) +(connector + (pt 2912 1488) + (pt 2912 1472) +) +(connector + (pt 2920 1488) + (pt 2912 1488) +) +(connector + (text "COLOR2" (rect 2842 1456 2901 1471)(font "Arial" )) + (pt 2912 1472) + (pt 2832 1472) +) +(connector + (text "CLUT_ADR1A" (rect 2786 1432 2878 1447)(font "Arial" )) + (pt 3008 1448) + (pt 2776 1448) +) +(connector + (text "CLUT_ADR1A" (rect 2330 1264 2422 1279)(font "Arial" )) + (pt 2320 1280) + (pt 2392 1280) +) +(connector + (text "FIFO_D[127..112]" (rect 2098 2680 2211 2695)(font "Arial" )) + (pt 2088 2696) + (pt 2224 2696) + (bus) +) +(connector + (text "FIFO_D[111..96]" (rect 2098 2664 2203 2679)(font "Arial" )) + (pt 2088 2680) + (pt 2224 2680) + (bus) +) +(connector + (text "FIFO_D[95..80]" (rect 2098 2648 2194 2663)(font "Arial" )) + (pt 2088 2664) + (pt 2224 2664) + (bus) +) +(connector + (text "FIFO_D[79..64]" (rect 2098 2632 2194 2647)(font "Arial" )) + (pt 2088 2648) + (pt 2224 2648) + (bus) +) +(connector + (text "FIFO_D[63..48]" (rect 2098 2616 2194 2631)(font "Arial" )) + (pt 2088 2632) + (pt 2224 2632) + (bus) +) +(connector + (text "FIFO_D[47..32]" (rect 2098 2600 2194 2615)(font "Arial" )) + (pt 2088 2616) + (pt 2224 2616) + (bus) +) +(connector + (text "FIFO_D[31..16]" (rect 2098 2584 2194 2599)(font "Arial" )) + (pt 2088 2600) + (pt 2224 2600) + (bus) +) +(connector + (text "FIFO_D[15..0]" (rect 2098 2568 2186 2583)(font "Arial" )) + (pt 2088 2584) + (pt 2224 2584) + (bus) +) +(connector + (text "FIFO_D[95..64]" (rect 1490 2744 1586 2759)(font "Arial" )) + (pt 1616 2760) + (pt 1480 2760) + (bus) +) +(connector + (text "FIFO_D[127..96]" (rect 1490 2760 1595 2775)(font "Arial" )) + (pt 1616 2776) + (pt 1480 2776) + (bus) +) +(connector + (text "CLUT_MUX_ADR[1..0]" (rect 1594 2824 1737 2839)(font "Arial" )) + (pt 1696 2840) + (pt 1592 2840) + (bus) +) +(connector + (text "FIFO_D[63..32]" (rect 1490 2728 1586 2743)(font "Arial" )) + (pt 1480 2744) + (pt 1616 2744) + (bus) +) +(connector + (text "FIFO_D[31..0]" (rect 1490 2712 1578 2727)(font "Arial" )) + (pt 1480 2728) + (pt 1616 2728) + (bus) +) +(connector + (pt 880 1568) + (pt 880 1592) +) +(connector + (text "FB_VDOE3" (rect 890 1576 963 1591)(font "Arial" )) + (pt 880 1592) + (pt 944 1592) +) +(connector + (pt 880 1448) + (pt 880 1472) +) +(connector + (text "FB_VDOE2" (rect 890 1456 963 1471)(font "Arial" )) + (pt 880 1472) + (pt 944 1472) +) +(connector + (pt 880 1328) + (pt 880 1352) +) +(connector + (text "FB_VDOE1" (rect 890 1336 963 1351)(font "Arial" )) + (pt 880 1352) + (pt 944 1352) +) +(connector + (pt 880 1208) + (pt 880 1232) +) +(connector + (text "FB_VDOE0" (rect 890 1216 963 1231)(font "Arial" )) + (pt 880 1232) + (pt 944 1232) +) +(connector + (pt 808 1192) + (pt 792 1192) + (bus) +) +(connector + (pt 792 1136) + (pt 792 1192) + (bus) +) +(connector + (pt 808 1312) + (pt 792 1312) + (bus) +) +(connector + (pt 792 1192) + (pt 792 1312) + (bus) +) +(connector + (pt 808 1432) + (pt 792 1432) + (bus) +) +(connector + (pt 920 1432) + (pt 960 1432) + (bus) +) +(connector + (pt 792 1312) + (pt 792 1432) + (bus) +) +(connector + (pt 808 1552) + (pt 792 1552) + (bus) +) +(connector + (pt 920 1552) + (pt 960 1552) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 1738 2824 1813 2839)(font "Arial" )) + (pt 1728 2840) + (pt 1808 2840) +) +(connector + (text "CLUT_MUX_ADR[3..0]" (rect 2722 2880 2865 2895)(font "Arial" )) + (pt 2712 2896) + (pt 2904 2896) + (bus) +) +(connector + (text "FB_AD[31..0]" (rect 570 1904 653 1919)(font "Arial" )) + (pt 680 1920) + (pt 560 1920) + (bus) +) +(connector + (text "nFB_CS1" (rect 202 2040 264 2055)(font "Arial" )) + (pt 192 2056) + (pt 296 2056) +) +(connector + (text "nFB_CS2" (rect 202 2064 264 2079)(font "Arial" )) + (pt 192 2080) + (pt 296 2080) +) +(connector + (text "nFB_CS3" (rect 202 2088 264 2103)(font "Arial" )) + (pt 192 2104) + (pt 296 2104) +) +(connector + (text "nFB_WR" (rect 202 2112 259 2127)(font "Arial" )) + (pt 192 2128) + (pt 296 2128) +) +(connector + (text "FB_SIZE0" (rect 202 2136 266 2151)(font "Arial" )) + (pt 192 2152) + (pt 296 2152) +) +(connector + (text "FB_SIZE1" (rect 202 2160 266 2175)(font "Arial" )) + (pt 192 2176) + (pt 296 2176) +) +(connector + (text "nFB_OE" (rect 202 2184 256 2199)(font "Arial" )) + (pt 192 2200) + (pt 296 2200) +) +(connector + (text "VA[12..0]" (rect 570 2168 625 2183)(font "Arial" )) + (pt 632 2184) + (pt 560 2184) + (bus) +) +(connector + (text "nVWE" (rect 570 2192 608 2207)(font "Arial" )) + (pt 632 2208) + (pt 560 2208) +) +(connector + (text "nVCAS" (rect 570 2216 614 2231)(font "Arial" )) + (pt 632 2232) + (pt 560 2232) +) +(connector + (text "nVRAS" (rect 570 2240 614 2255)(font "Arial" )) + (pt 632 2256) + (pt 560 2256) +) +(connector + (text "nVCS" (rect 570 2264 606 2279)(font "Arial" )) + (pt 632 2280) + (pt 560 2280) +) +(connector + (text "VCKE" (rect 570 2288 607 2303)(font "Arial" )) + (pt 632 2304) + (pt 560 2304) +) +(connector + (text "MAIN_CLK" (rect 202 1944 271 1959)(font "Arial" )) + (pt 296 1960) + (pt 192 1960) +) +(connector + (text "FB_ALE" (rect 202 2016 253 2031)(font "Arial" )) + (pt 296 2032) + (pt 192 2032) +) +(connector + (text "FB_LE[3..0]" (rect 570 1976 644 1991)(font "Arial" )) + (pt 560 1992) + (pt 680 1992) + (bus) +) +(connector + (text "FB_VDOE[3..0]" (rect 570 2000 665 2015)(font "Arial" )) + (pt 560 2016) + (pt 680 2016) + (bus) +) +(connector + (text "DDR_SYNC_66M" (rect 210 1968 324 1983)(font "Arial" )) + (pt 200 1984) + (pt 296 1984) +) +(connector + (text "FB_ADR[31..0]" (rect 202 1992 296 2007)(font "Arial" )) + (pt 192 2008) + (pt 296 2008) + (bus) +) +(connector + (text "nRSTO" (rect 202 1896 249 1911)(font "Arial" )) + (pt 192 1912) + (pt 296 1912) +) +(connector + (text "VIDEO_RAM_CTR[15..0]" (rect 178 2240 334 2255)(font "Arial" )) + (pt 296 2256) + (pt 168 2256) + (bus) +) +(connector + (pt 792 1648) + (pt 920 1648) + (bus) +) +(connector + (pt 792 1792) + (pt 920 1792) + (bus) +) +(connector + (pt 792 1928) + (pt 920 1928) + (bus) +) +(connector + (pt 792 2064) + (pt 920 2064) + (bus) +) +(connector + (text "FB_LE0" (rect 826 1664 877 1679)(font "Arial" )) + (pt 920 1680) + (pt 816 1680) +) +(connector + (text "FB_LE1" (rect 834 1808 885 1823)(font "Arial" )) + (pt 920 1824) + (pt 824 1824) +) +(connector + (text "FB_LE2" (rect 834 1944 885 1959)(font "Arial" )) + (pt 920 1960) + (pt 824 1960) +) +(connector + (text "FB_LE3" (rect 834 2080 885 2095)(font "Arial" )) + (pt 920 2096) + (pt 824 2096) +) +(connector + (text "DDR_SYNC_66M" (rect 834 1648 948 1663)(font "Arial" )) + (pt 824 1664) + (pt 920 1664) +) +(connector + (text "DDR_SYNC_66M" (rect 834 1792 948 1807)(font "Arial" )) + (pt 824 1808) + (pt 920 1808) +) +(connector + (text "DDR_SYNC_66M" (rect 834 1928 948 1943)(font "Arial" )) + (pt 824 1944) + (pt 920 1944) +) +(connector + (text "DDR_SYNC_66M" (rect 834 2064 948 2079)(font "Arial" )) + (pt 824 2080) + (pt 920 2080) +) +(connector + (pt 792 1792) + (pt 792 1928) + (bus) +) +(connector + (pt 792 1928) + (pt 792 2064) + (bus) +) +(connector + (pt 792 1432) + (pt 792 1552) + (bus) +) +(connector + (pt 792 1552) + (pt 792 1648) + (bus) +) +(connector + (pt 792 1648) + (pt 792 1792) + (bus) +) +(connector + (text "FIFO_RDE" (rect 1450 1408 1519 1423)(font "Arial" )) + (pt 1440 1424) + (pt 1536 1424) +) +(connector + (text "VDP_IN[63..32]" (rect 1114 1392 1211 1407)(font "Arial" )) + (pt 1104 1408) + (pt 1192 1408) + (bus) +) +(connector + (pt 1328 2856) + (pt 1360 2856) +) +(connector + (pt 1360 2904) + (pt 1328 2904) +) +(connector + (pt 1384 2840) + (pt 1384 2824) +) +(connector + (pt 1384 2880) + (pt 1384 2888) +) +(connector + (pt 1344 2880) + (pt 1384 2880) +) +(connector + (pt 1344 2928) + (pt 1384 2928) +) +(connector + (pt 1384 2928) + (pt 1384 2936) +) +(connector + (pt 1328 3008) + (pt 1360 3008) +) +(connector + (pt 1384 2984) + (pt 1384 2992) +) +(connector + (text "VDQS0" (rect 1418 2840 1465 2855)(font "Arial" )) + (pt 1408 2856) + (pt 1520 2856) +) +(connector + (text "VDQS1" (rect 1418 2888 1465 2903)(font "Arial" )) + (pt 1408 2904) + (pt 1520 2904) +) +(connector + (text "VDQS2" (rect 1418 2936 1465 2951)(font "Arial" )) + (pt 1408 2952) + (pt 1520 2952) +) +(connector + (text "VDQS3" (rect 1418 2992 1465 3007)(font "Arial" )) + (pt 1408 3008) + (pt 1520 3008) +) +(connector + (pt 1344 2984) + (pt 1384 2984) +) +(connector + (text "FB_DDR[63..32]" (rect 1074 1936 1179 1951)(font "Arial" )) + (pt 1064 1952) + (pt 1160 1952) + (bus) +) +(connector + (text "FB_DDR[31..0]" (rect 1074 2072 1170 2087)(font "Arial" )) + (pt 1064 2088) + (pt 1160 2088) + (bus) +) +(connector + (text "FB_DDR[95..64]" (rect 1074 1800 1179 1815)(font "Arial" )) + (pt 1064 1816) + (pt 1160 1816) + (bus) +) +(connector + (text "FB_DDR[127..96]" (rect 1074 1656 1187 1671)(font "Arial" )) + (pt 1064 1672) + (pt 1160 1672) + (bus) +) +(connector + (text "BLITTER_ADR[31..0]" (rect 194 2288 328 2303)(font "Arial" )) + (pt 184 2304) + (pt 296 2304) + (bus) +) +(connector + (text "BLITTER_SIG" (rect 194 2312 283 2327)(font "Arial" )) + (pt 184 2328) + (pt 296 2328) +) +(connector + (text "BLITTER_WR" (rect 194 2336 283 2351)(font "Arial" )) + (pt 184 2352) + (pt 296 2352) +) +(connector + (text "SR_FIFO_WRE" (rect 570 2072 670 2087)(font "Arial" )) + (pt 648 2088) + (pt 560 2088) +) +(connector + (text "SR_DDR_FB" (rect 570 2312 656 2327)(font "Arial" )) + (pt 640 2328) + (pt 560 2328) +) +(connector + (text "SR_FIFO_WRE" (rect 842 2280 942 2295)(font "Arial" )) + (pt 920 2296) + (pt 832 2296) +) +(connector + (text "SR_DDR_WR" (rect 570 2024 662 2039)(font "Arial" )) + (pt 664 2040) + (pt 560 2040) +) +(connector + (text "SR_VDMP[7..0]" (rect 570 2336 667 2351)(font "Arial" )) + (pt 560 2352) + (pt 664 2352) + (bus) +) +(connector + (text "SR_DDRWR_D_SEL" (rect 570 2360 708 2375)(font "Arial" )) + (pt 560 2376) + (pt 664 2376) +) +(connector + (text "BLITTER_ON" (rect 226 2920 313 2935)(font "Arial" )) + (pt 296 2936) + (pt 216 2936) +) +(connector + (text "BLITTER_RUN" (rect 578 2712 675 2727)(font "Arial" )) + (pt 568 2728) + (pt 648 2728) +) +(connector + (text "VDVZ[127..0]" (rect 810 2920 892 2935)(font "Arial" )) + (pt 800 2936) + (pt 888 2936) + (bus) +) +(connector + (text "BLITTER_DOUT[127..0]" (rect 578 2744 731 2759)(font "Arial" )) + (pt 680 2760) + (pt 568 2760) + (bus) +) +(connector + (text "BLITTER_ADR[31..0]" (rect 578 2776 712 2791)(font "Arial" )) + (pt 568 2792) + (pt 680 2792) + (bus) +) +(connector + (text "BLITTER_SIG" (rect 578 2800 667 2815)(font "Arial" )) + (pt 568 2816) + (pt 680 2816) +) +(connector + (text "BLITTER_WR" (rect 578 2824 667 2839)(font "Arial" )) + (pt 568 2840) + (pt 680 2840) +) +(connector + (text "nFB_CS1" (rect 202 2688 264 2703)(font "Arial" )) + (pt 192 2704) + (pt 296 2704) +) +(connector + (text "nFB_CS2" (rect 202 2712 264 2727)(font "Arial" )) + (pt 192 2728) + (pt 296 2728) +) +(connector + (text "nFB_CS3" (rect 202 2736 264 2751)(font "Arial" )) + (pt 192 2752) + (pt 296 2752) +) +(connector + (text "nFB_WR" (rect 202 2760 259 2775)(font "Arial" )) + (pt 192 2776) + (pt 296 2776) +) +(connector + (text "FB_SIZE0" (rect 202 2784 266 2799)(font "Arial" )) + (pt 192 2800) + (pt 296 2800) +) +(connector + (text "FB_SIZE1" (rect 202 2808 266 2823)(font "Arial" )) + (pt 192 2824) + (pt 296 2824) +) +(connector + (text "nFB_OE" (rect 202 2832 256 2847)(font "Arial" )) + (pt 192 2848) + (pt 296 2848) +) +(connector + (text "MAIN_CLK" (rect 202 2616 271 2631)(font "Arial" )) + (pt 296 2632) + (pt 192 2632) +) +(connector + (text "FB_ALE" (rect 202 2664 253 2679)(font "Arial" )) + (pt 296 2680) + (pt 192 2680) +) +(connector + (text "FB_ADR[31..0]" (rect 202 2640 296 2655)(font "Arial" )) + (pt 192 2656) + (pt 296 2656) + (bus) +) +(connector + (text "nRSTO" (rect 202 2568 249 2583)(font "Arial" )) + (pt 192 2584) + (pt 296 2584) +) +(connector + (text "VIDEO_RAM_CTR[15..0]" (rect 178 2896 334 2911)(font "Arial" )) + (pt 296 2912) + (pt 168 2912) + (bus) +) +(connector + (text "FB_AD[31..0]" (rect 578 2608 661 2623)(font "Arial" )) + (pt 688 2624) + (pt 568 2624) + (bus) +) +(connector + (text "DDRCLK0" (rect 842 2160 910 2175)(font "Arial" )) + (pt 832 2176) + (pt 920 2176) +) +(connector + (text "SR_DDR_FB" (rect 850 2176 936 2191)(font "Arial" )) + (pt 920 2192) + (pt 840 2192) +) +(connector + (pt 920 1312) + (pt 960 1312) + (bus) +) +(connector + (text "VDP_IN[31..0]" (rect 1114 1512 1203 1527)(font "Arial" )) + (pt 1104 1528) + (pt 1192 1528) + (bus) +) +(connector + (text "DDR_FB1" (rect 1106 1304 1172 1319)(font "Arial" )) + (pt 1104 1320) + (pt 1176 1320) +) +(connector + (text "DDR_FB0" (rect 1106 1544 1172 1559)(font "Arial" )) + (pt 1104 1560) + (pt 1176 1560) +) +(connector + (text "FIFO_WRE" (rect 1074 2280 1145 2295)(font "Arial" )) + (pt 1064 2296) + (pt 1144 2296) +) +(connector + (text "DDRCLK0" (rect 194 2592 262 2607)(font "Arial" )) + (pt 296 2608) + (pt 184 2608) +) +(connector + (text "DDRCLK0" (rect 194 1920 262 1935)(font "Arial" )) + (pt 296 1936) + (pt 184 1936) +) +(connector + (text "VIDEO_DDR_TA" (rect 570 2488 677 2503)(font "Arial" )) + (pt 560 2504) + (pt 664 2504) +) +(connector + (text "BLITTER_TA" (rect 578 2960 660 2975)(font "Arial" )) + (pt 568 2976) + (pt 672 2976) +) +(connector + (pt 432 1808) + (pt 472 1808) +) +(connector + (text "BLITTER_TA" (rect 274 1792 356 1807)(font "Arial" )) + (pt 264 1808) + (pt 368 1808) +) +(connector + (pt 360 1816) + (pt 360 1832) +) +(connector + (pt 368 1816) + (pt 360 1816) +) +(connector + (pt 360 1800) + (pt 360 1784) +) +(connector + (pt 368 1800) + (pt 360 1800) +) +(connector + (text "VIDEO_DDR_TA" (rect 258 1768 365 1783)(font "Arial" )) + (pt 360 1784) + (pt 264 1784) +) +(connector + (text "VDP_OUT[63..0]" (rect 1506 1328 1611 1343)(font "Arial" )) + (pt 1584 1344) + (pt 1496 1344) + (bus) +) +(connector + (text "FB_DDR[127..64]" (rect 1258 1352 1371 1367)(font "Arial" )) + (pt 1224 1368) + (pt 1344 1368) + (bus) +) +(connector + (text "BLITTER_DOUT[63..0]" (rect 1234 1304 1379 1319)(font "Arial" )) + (pt 1224 1320) + (pt 1344 1320) + (bus) +) +(connector + (text "BLITTER_DOUT[127..64]" (rect 1234 1320 1395 1335)(font "Arial" )) + (pt 1224 1336) + (pt 1344 1336) + (bus) +) +(connector + (text "FB_DDR[63..0]" (rect 1258 1336 1354 1351)(font "Arial" )) + (pt 1224 1352) + (pt 1344 1352) + (bus) +) +(connector + (text "VDR[31..0]" (rect 930 1176 998 1191)(font "Arial" )) + (pt 920 1192) + (pt 1008 1192) + (bus) +) +(connector + (text "DDRWR_D_SEL[1..0]" (rect 1298 1400 1438 1415)(font "Arial" )) + (pt 1424 1416) + (pt 1288 1416) + (bus) +) +(connector + (pt 1424 1392) + (pt 1424 1416) + (bus) +) +(connector + (text "DDR_FB0" (rect 1106 1424 1172 1439)(font "Arial" )) + (pt 1104 1440) + (pt 1176 1440) +) +(connector + (text "VDP_IN[31..0]" (rect 1114 1272 1203 1287)(font "Arial" )) + (pt 1104 1288) + (pt 1192 1288) + (bus) +) +(connector + (text "BLITTER_DACK[0]" (rect 802 2952 922 2967)(font "Arial" )) + (pt 888 2968) + (pt 808 2968) +) +(connector + (text "BLITTER_DIN[127..0]" (rect 1042 2944 1180 2959)(font "Arial" )) + (pt 1144 2960) + (pt 1032 2960) + (bus) +) +(connector + (text "BLITTER_DIN[127..0]" (rect 194 2944 332 2959)(font "Arial" )) + (pt 296 2960) + (pt 184 2960) + (bus) +) +(connector + (text "SR_BLITTER_DACK" (rect 570 2464 703 2479)(font "Arial" )) + (pt 664 2480) + (pt 560 2480) +) +(connector + (text "DDRCLK0" (rect 1114 1528 1182 1543)(font "Arial" )) + (pt 1104 1544) + (pt 1176 1544) +) +(connector + (text "DDRCLK0" (rect 1114 1408 1182 1423)(font "Arial" )) + (pt 1104 1424) + (pt 1176 1424) +) +(connector + (text "DDRCLK0" (rect 1114 1288 1182 1303)(font "Arial" )) + (pt 1104 1304) + (pt 1176 1304) +) +(connector + (text "DDRCLK0" (rect 1650 1384 1718 1399)(font "Arial" )) + (pt 1712 1400) + (pt 1640 1400) +) +(connector + (text "DDRCLK0" (rect 810 2936 878 2951)(font "Arial" )) + (pt 800 2952) + (pt 888 2952) +) +(connector + (text "DDRCLK0" (rect 842 2264 910 2279)(font "Arial" )) + (pt 832 2280) + (pt 920 2280) +) +(connector + (text "DDR_FB[4..0]" (rect 1074 2176 1162 2191)(font "Arial" )) + (pt 1064 2192) + (pt 1168 2192) + (bus) +) +(connector + (text "BLITTER_DACK[4..0]" (rect 202 2864 337 2879)(font "Arial" )) + (pt 192 2880) + (pt 296 2880) + (bus) +) +(connector + (text "CLK33M" (rect 218 2432 273 2447)(font "Arial" )) + (pt 208 2448) + (pt 296 2448) +) +(connector + (text "FIFO_D[127..0]" (rect 2170 1416 2266 1431)(font "Arial" )) + (pt 2168 1432) + (pt 2232 1432) + (bus) +) +(connector + (pt 2632 2208) + (pt 2512 2208) +) +(connector + (pt 2632 1728) + (pt 2512 1728) +) +(connector + (pt 2632 1888) + (pt 2512 1888) +) +(connector + (pt 2512 1728) + (pt 2512 1888) +) +(connector + (pt 2632 2048) + (pt 2512 2048) +) +(connector + (pt 2512 1888) + (pt 2512 2048) +) +(connector + (pt 2632 1248) + (pt 2512 1248) +) +(connector + (pt 2632 1408) + (pt 2512 1408) +) +(connector + (pt 2632 1568) + (pt 2512 1568) +) +(connector + (pt 2512 1568) + (pt 2512 1728) +) +(connector + (text "PIXEL_CLK" (rect 1634 1432 1709 1447)(font "Arial" )) + (pt 1640 1448) + (pt 1712 1448) +) +(connector + (text "PIXEL_CLK" (rect 1938 1424 2013 1439)(font "Arial" )) + (pt 1928 1440) + (pt 2000 1440) +) +(connector + (text "FIFO_RDE" (rect 1914 1440 1983 1455)(font "Arial" )) + (pt 1904 1456) + (pt 2000 1456) +) +(connector + (text "PIXEL_CLK" (rect 2018 1552 2093 1567)(font "Arial" )) + (pt 2008 1568) + (pt 2080 1568) +) +(connector + (text "FIFO_RDE" (rect 1994 1536 2063 1551)(font "Arial" )) + (pt 1984 1552) + (pt 2080 1552) +) +(connector + (pt 2512 1408) + (pt 2512 1552) +) +(connector + (pt 2512 1552) + (pt 2512 1568) +) +(connector + (pt 2144 1552) + (pt 2512 1552) +) +(connector + (pt 2512 2368) + (pt 2632 2368) +) +(connector + (pt 2512 2048) + (pt 2512 2208) +) +(connector + (pt 2512 2208) + (pt 2512 2368) +) +(connector + (text "DDR_WR" (rect 1290 2808 1353 2823)(font "Arial" )) + (pt 1280 2824) + (pt 1344 2824) +) +(connector + (pt 1344 2824) + (pt 1384 2824) +) +(connector + (pt 1344 2824) + (pt 1344 2880) +) +(connector + (pt 1344 2880) + (pt 1344 2928) +) +(connector + (pt 1344 2928) + (pt 1344 2984) +) +(connector + (pt 1328 2856) + (pt 1328 2904) +) +(connector + (pt 1328 2904) + (pt 1328 2952) +) +(connector + (pt 1328 2952) + (pt 1328 3008) +) +(connector + (text "DDRCLK0" (rect 1218 2936 1286 2951)(font "Arial" )) + (pt 1208 2952) + (pt 1328 2952) +) +(connector + (pt 1328 2952) + (pt 1360 2952) +) +(connector + (text "VDP_OUT[63..32]" (rect 1234 1520 1347 1535)(font "Arial" )) + (pt 1312 1536) + (pt 1224 1536) + (bus) +) +(connector + (text "VDP_OUT[31..0]" (rect 1234 1536 1339 1551)(font "Arial" )) + (pt 1312 1552) + (pt 1224 1552) + (bus) +) +(connector + (text "VDP_IN[63..32]" (rect 1562 1536 1659 1551)(font "Arial" )) + (pt 1552 1552) + (pt 1640 1552) + (bus) +) +(connector + (text "VD[31..0]" (rect 1578 1552 1635 1567)(font "Arial" )) + (pt 1640 1568) + (pt 1552 1568) + (bus) +) +(connector + (text "DDRCLK3" (rect 1250 1584 1318 1599)(font "Arial" )) + (pt 1312 1600) + (pt 1240 1600) +) +(connector + (text "VDP_IN[31..0]" (rect 1554 1520 1643 1535)(font "Arial" )) + (pt 1552 1536) + (pt 1632 1536) + (bus) +) +(connector + (text "DDRCLK1" (rect 1250 1568 1318 1583)(font "Arial" )) + (pt 1312 1584) + (pt 1240 1584) +) +(connector + (text "VDR[31..0]" (rect 1858 1568 1926 1583)(font "Arial" )) + (pt 1848 1584) + (pt 1936 1584) + (bus) +) +(connector + (text "DDR_SYNC_66M" (rect 1602 1584 1716 1599)(font "Arial" )) + (pt 1592 1600) + (pt 1688 1600) +) +(connector + (pt 1552 1584) + (pt 1688 1584) + (bus) +) +(connector + (text "VDOUT_OE" (rect 1242 1552 1318 1567)(font "Arial" )) + (pt 1232 1568) + (pt 1312 1568) +) +(connector + (text "DDRCLK3" (rect 1170 2472 1238 2487)(font "Arial" )) + (pt 1160 2488) + (pt 1240 2488) +) +(connector + (text "VDM[3..0]" (rect 1482 2440 1542 2455)(font "Arial" )) + (pt 1536 2456) + (pt 1472 2456) + (bus) +) +(connector + (text "VDMP[7..4]" (rect 1170 2440 1239 2455)(font "Arial" )) + (pt 1160 2456) + (pt 1240 2456) + (bus) +) +(connector + (text "VDMP[3..0]" (rect 1170 2456 1239 2471)(font "Arial" )) + (pt 1160 2472) + (pt 1240 2472) + (bus) +) +(connector + (text "VDMP[7..0]" (rect 1242 2672 1311 2687)(font "Arial" )) + (pt 1232 2688) + (pt 1304 2688) + (bus) +) +(connector + (text "BA[1..0]" (rect 570 2120 618 2135)(font "Arial" )) + (pt 632 2136) + (pt 560 2136) + (bus) +) +(connector + (text "DDRWR_D_SEL0" (rect 1066 2768 1184 2783)(font "Arial" )) + (pt 1056 2784) + (pt 1152 2784) +) +(connector + (text "DDRCLK3" (rect 930 2784 998 2799)(font "Arial" )) + (pt 928 2800) + (pt 992 2800) +) +(connector + (text "SR_VDMP[7..0]" (rect 1002 2656 1099 2671)(font "Arial" )) + (pt 992 2672) + (pt 1088 2672) + (bus) +) +(connector + (text "SR_DDRWR_D_SEL" (rect 890 2768 1028 2783)(font "Arial" )) + (pt 888 2784) + (pt 992 2784) +) +(connector + (text "DDRWR_D_SEL1" (rect 570 2392 688 2407)(font "Arial" )) + (pt 656 2408) + (pt 560 2408) +) +(connector + (text "VDOUT_OE" (rect 1386 2328 1462 2343)(font "Arial" )) + (pt 1376 2344) + (pt 1456 2344) +) +(connector + (text "DDR_WR" (rect 1258 2336 1321 2351)(font "Arial" )) + (pt 1248 2352) + (pt 1312 2352) +) +(connector + (text "SR_DDR_WR" (rect 1242 2320 1334 2335)(font "Arial" )) + (pt 1248 2336) + (pt 1312 2336) +) +(connector + (text "DDRCLK3" (rect 906 2400 974 2415)(font "Arial" )) + (pt 904 2416) + (pt 968 2416) +) +(connector + (text "SR_DDR_WR" (rect 898 2384 990 2399)(font "Arial" )) + (pt 896 2400) + (pt 968 2400) +) +(connector + (text "DDR_WR" (rect 1042 2384 1105 2399)(font "Arial" )) + (pt 1032 2400) + (pt 1096 2400) +) +(connector + (text "SR_BLITTER_DACK" (rect 810 2560 943 2575)(font "Arial" )) + (pt 904 2576) + (pt 800 2576) +) +(connector + (text "DDRCLK0" (rect 826 2544 894 2559)(font "Arial" )) + (pt 816 2560) + (pt 904 2560) +) +(connector + (text "BLITTER_DACK[4..0]" (rect 1058 2560 1193 2575)(font "Arial" )) + (pt 1048 2576) + (pt 1152 2576) + (bus) +) +(connector + (text "DDRCLK2" (rect 1018 2672 1086 2687)(font "Arial" )) + (pt 1008 2688) + (pt 1088 2688) +) +(connector + (pt 1696 2840) + (pt 1696 2816) + (bus) +) +(connector + (pt 1832 2760) + (pt 1768 2760) + (bus) +) +(connector + (pt 1808 2776) + (pt 1832 2776) +) +(connector + (pt 1808 2840) + (pt 1808 2776) +) +(connector + (text "PIXEL_CLK" (rect 1546 2776 1621 2791)(font "Arial" )) + (pt 1536 2792) + (pt 1616 2792) +) +(connector + (text "CLUT_MUX_ADR[2..0]" (rect 2130 2744 2273 2759)(font "Arial" )) + (pt 2304 2760) + (pt 2120 2760) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 2338 2744 2413 2759)(font "Arial" )) + (pt 2400 2760) + (pt 2328 2760) +) +(connector + (pt 2376 2648) + (pt 2416 2648) + (bus) +) +(connector + (pt 2400 2664) + (pt 2416 2664) +) +(connector + (pt 2400 2760) + (pt 2400 2664) +) +(connector + (pt 2304 2760) + (pt 2304 2736) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 2162 2696 2237 2711)(font "Arial" )) + (pt 2224 2712) + (pt 2152 2712) +) +(connector + (text "FIFO_D[7..0]" (rect 2730 2568 2810 2583)(font "Arial" )) + (pt 2824 2584) + (pt 2720 2584) + (bus) +) +(connector + (text "FIFO_D[15..8]" (rect 2730 2584 2818 2599)(font "Arial" )) + (pt 2824 2600) + (pt 2720 2600) + (bus) +) +(connector + (text "FIFO_D[23..16]" (rect 2730 2600 2826 2615)(font "Arial" )) + (pt 2824 2616) + (pt 2720 2616) + (bus) +) +(connector + (text "FIFO_D[31..24]" (rect 2730 2616 2826 2631)(font "Arial" )) + (pt 2824 2632) + (pt 2720 2632) + (bus) +) +(connector + (text "FIFO_D[39..32]" (rect 2730 2632 2826 2647)(font "Arial" )) + (pt 2824 2648) + (pt 2720 2648) + (bus) +) +(connector + (text "FIFO_D[47..40]" (rect 2730 2648 2826 2663)(font "Arial" )) + (pt 2824 2664) + (pt 2720 2664) + (bus) +) +(connector + (text "FIFO_D[55..48]" (rect 2730 2664 2826 2679)(font "Arial" )) + (pt 2824 2680) + (pt 2720 2680) + (bus) +) +(connector + (text "FIFO_D[63..56]" (rect 2730 2680 2826 2695)(font "Arial" )) + (pt 2824 2696) + (pt 2720 2696) + (bus) +) +(connector + (text "FIFO_D[71..64]" (rect 2730 2696 2826 2711)(font "Arial" )) + (pt 2824 2712) + (pt 2720 2712) + (bus) +) +(connector + (text "FIFO_D[79..72]" (rect 2730 2712 2826 2727)(font "Arial" )) + (pt 2824 2728) + (pt 2720 2728) + (bus) +) +(connector + (text "FIFO_D[87..80]" (rect 2730 2728 2826 2743)(font "Arial" )) + (pt 2824 2744) + (pt 2720 2744) + (bus) +) +(connector + (text "FIFO_D[95..88]" (rect 2730 2744 2826 2759)(font "Arial" )) + (pt 2824 2760) + (pt 2720 2760) + (bus) +) +(connector + (text "FIFO_D[103..96]" (rect 2730 2760 2835 2775)(font "Arial" )) + (pt 2824 2776) + (pt 2720 2776) + (bus) +) +(connector + (text "FIFO_D[111..104]" (rect 2730 2776 2843 2791)(font "Arial" )) + (pt 2824 2792) + (pt 2720 2792) + (bus) +) +(connector + (text "FIFO_D[119..112]" (rect 2730 2792 2843 2807)(font "Arial" )) + (pt 2824 2808) + (pt 2720 2808) + (bus) +) +(connector + (text "FIFO_D[127..120]" (rect 2730 2808 2843 2823)(font "Arial" )) + (pt 2824 2824) + (pt 2720 2824) + (bus) +) +(connector + (text "CCF[23..0]" (rect 3362 2752 3430 2767)(font "Arial" )) + (pt 3432 2768) + (pt 3352 2768) + (bus) +) +(connector + (text "CCR[23..0]" (rect 3954 2720 4024 2735)(font "Arial" )) + (pt 4024 2736) + (pt 3944 2736) + (bus) +) +(connector + (text "CCS[23..0]" (rect 3362 2840 3431 2855)(font "Arial" )) + (pt 3432 2856) + (pt 3352 2856) + (bus) +) +(connector + (text "CC16[23..0]" (rect 3954 2752 4030 2767)(font "Arial" )) + (pt 4024 2768) + (pt 3944 2768) + (bus) +) +(connector + (text "VR[7..0],VG[7..0],VB[7..0]" (rect 4522 2776 4676 2791)(font "Arial" )) + (pt 4512 2792) + (pt 4664 2792) + (bus) +) +(connector + (pt 4240 2808) + (pt 4280 2808) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 4202 2808 4277 2823)(font "Arial" )) + (pt 4192 2824) + (pt 4280 2824) +) +(connector + (pt 4240 2792) + (pt 4280 2792) + (bus) +) +(connector + (pt 4240 2800) + (pt 4176 2800) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 3946 2848 4021 2863)(font "Arial" )) + (pt 3936 2864) + (pt 4024 2864) +) +(connector + (pt 4104 2888) + (pt 4104 2920) + (bus) +) +(connector + (text "CCSEL[2..0]" (rect 4010 2904 4089 2919)(font "Arial" )) + (pt 4104 2920) + (pt 4000 2920) + (bus) +) +(connector + (text "CCA[23..0]" (rect 3954 2768 4022 2783)(font "Arial" )) + (pt 4024 2784) + (pt 3944 2784) + (bus) +) +(connector + (pt 2904 2896) + (pt 2904 2864) + (bus) +) +(connector + (text "ZR_C8[7..0]" (rect 3232 2712 3308 2727)(font "Arial" )) + (pt 3232 2728) + (pt 3304 2728) + (bus) +) +(connector + (pt 3088 2712) + (pt 2968 2712) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 2746 2824 2821 2839)(font "Arial" )) + (pt 2824 2840) + (pt 2736 2840) +) +(connector + (text "CC24[23..0]" (rect 3954 2736 4030 2751)(font "Arial" )) + (pt 3944 2752) + (pt 4024 2752) + (bus) +) +(connector + (pt 4240 2792) + (pt 4240 2800) + (bus) +) +(connector + (pt 4240 2800) + (pt 4240 2808) + (bus) +) +(connector + (pt 3576 2784) + (pt 3672 2784) + (bus) +) +(connector + (pt 3576 2872) + (pt 3672 2872) + (bus) +) +(connector + (pt 3816 2800) + (pt 3888 2800) + (bus) +) +(connector + (pt 3888 2800) + (pt 3888 2832) + (bus) +) +(connector + (pt 3888 2832) + (pt 4024 2832) + (bus) +) +(connector + (pt 4024 2848) + (pt 3888 2848) + (bus) +) +(connector + (pt 3888 2888) + (pt 3816 2888) + (bus) +) +(connector + (pt 3888 2848) + (pt 3888 2888) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 3034 2712 3109 2727)(font "Arial" )) + (pt 3032 2728) + (pt 3088 2728) +) +(connector + (text "PIXEL_CLK" (rect 3618 2784 3693 2799)(font "Arial" )) + (pt 3616 2800) + (pt 3672 2800) +) +(connector + (text "PIXEL_CLK" (rect 3618 2872 3693 2887)(font "Arial" )) + (pt 3616 2888) + (pt 3672 2888) +) +(connector + (text "PIXEL_CLK" (rect 3378 2856 3453 2871)(font "Arial" )) + (pt 3376 2872) + (pt 3432 2872) +) +(connector + (text "PIXEL_CLK" (rect 3378 2768 3453 2783)(font "Arial" )) + (pt 3376 2784) + (pt 3432 2784) +) +(connector + (text "CC16[23..19],CC16[15..10],CC16[7..3]" (rect 2506 2592 2751 2607)(font "Arial" )) + (pt 2688 2664) + (pt 2560 2664) + (bus) +) +(connector + (text "CC16[18..16],CC16[9..8],CC16[2..0]" (rect 2530 2728 2758 2743)(font "Arial" )) + (pt 2696 2744) + (pt 2520 2744) + (bus) +) +(connector + (text "CC24[31..0]" (rect 1986 2760 2062 2775)(font "Arial" )) + (pt 1976 2776) + (pt 2072 2776) + (bus) +) +(connector + (text "ZR_C8B[0]" (rect 3282 2952 3352 2967)(font "Arial" )) + (pt 3272 2968) + (pt 3344 2968) +) +(connector + (text "COLOR1" (rect 3154 3008 3213 3023)(font "Arial" )) + (pt 3232 3024) + (pt 3144 3024) +) +(connector + (text "ZR_C8[7..1]" (rect 3090 3072 3166 3087)(font "Arial" )) + (pt 3080 3088) + (pt 3160 3088) + (bus) +) +(connector + (pt 3232 3000) + (pt 3232 3024) +) +(connector + (pt 3232 3024) + (pt 3232 3064) +) +(connector + (text "ZR_C8B[7..1]" (rect 3306 3080 3392 3095)(font "Arial" )) + (pt 3296 3096) + (pt 3392 3096) + (bus) +) +(connector + (pt 3072 3104) + (pt 3160 3104) + (bus) +) +(connector + (text "ZR_C8[0]" (rect 3146 2960 3207 2975)(font "Arial" )) + (pt 3136 2976) + (pt 3192 2976) +) +(connector + (text "CLUT_ADR0" (rect 2842 2944 2925 2959)(font "Arial" )) + (pt 2832 2960) + (pt 2912 2960) +) +(connector + (text "PIXEL_CLK" (rect 2858 2960 2933 2975)(font "Arial" )) + (pt 2856 2976) + (pt 2912 2976) +) +(connector + (text "PIXEL_CLK" (rect 2994 2960 3069 2975)(font "Arial" )) + (pt 2992 2976) + (pt 3048 2976) +) +(connector + (pt 2976 2960) + (pt 3048 2960) +) +(connector + (pt 3112 2960) + (pt 3192 2960) +) +(connector + (text "FIFO_MW[8..0]" (rect 194 2376 287 2391)(font "Arial" )) + (pt 296 2392) + (pt 184 2392) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 2208 3439 2223)(font "Arial" )) + (pt 3448 2224) + (pt 3360 2224) +) +(connector + (text "PIXEL_CLK" (rect 3370 2224 3445 2239)(font "Arial" )) + (pt 3448 2240) + (pt 3360 2240) +) +(connector + (pt 3808 2112) + (pt 3808 2128) +) +(connector + (text "ACP_CLUT_RD" (rect 3722 2112 3825 2127)(font "Arial" )) + (pt 3808 2128) + (pt 3712 2128) +) +(connector + (pt 3328 2192) + (pt 3448 2192) +) +(connector + (pt 3704 2096) + (pt 3768 2096) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 2416 3439 2431)(font "Arial" )) + (pt 3448 2432) + (pt 3360 2432) +) +(connector + (text "PIXEL_CLK" (rect 3370 2432 3445 2447)(font "Arial" )) + (pt 3448 2448) + (pt 3360 2448) +) +(connector + (pt 3808 2320) + (pt 3808 2336) +) +(connector + (text "ACP_CLUT_RD" (rect 3722 2320 3825 2335)(font "Arial" )) + (pt 3808 2336) + (pt 3712 2336) +) +(connector + (pt 3328 2400) + (pt 3448 2400) +) +(connector + (pt 3704 2304) + (pt 3768 2304) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 2624 3439 2639)(font "Arial" )) + (pt 3448 2640) + (pt 3360 2640) +) +(connector + (text "PIXEL_CLK" (rect 3370 2640 3445 2655)(font "Arial" )) + (pt 3448 2656) + (pt 3360 2656) +) +(connector + (pt 3808 2528) + (pt 3808 2544) +) +(connector + (text "ACP_CLUT_RD" (rect 3722 2528 3825 2543)(font "Arial" )) + (pt 3808 2544) + (pt 3712 2544) +) +(connector + (pt 3328 2608) + (pt 3448 2608) +) +(connector + (pt 3704 2512) + (pt 3768 2512) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 1560 3439 1575)(font "Arial" )) + (pt 3448 1576) + (pt 3360 1576) +) +(connector + (text "PIXEL_CLK" (rect 3370 1576 3445 1591)(font "Arial" )) + (pt 3448 1592) + (pt 3360 1592) +) +(connector + (pt 3840 1448) + (pt 3704 1448) + (bus) +) +(connector + (text "FB_AD[31..26]" (rect 3930 1432 4022 1447)(font "Arial" )) + (pt 3920 1448) + (pt 4032 1448) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 1768 3439 1783)(font "Arial" )) + (pt 3448 1784) + (pt 3360 1784) +) +(connector + (text "PIXEL_CLK" (rect 3370 1784 3445 1799)(font "Arial" )) + (pt 3448 1800) + (pt 3360 1800) +) +(connector + (pt 3840 1656) + (pt 3704 1656) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 1976 3439 1991)(font "Arial" )) + (pt 3448 1992) + (pt 3360 1992) +) +(connector + (text "PIXEL_CLK" (rect 3370 1992 3445 2007)(font "Arial" )) + (pt 3448 2008) + (pt 3360 2008) +) +(connector + (pt 3328 1960) + (pt 3448 1960) +) +(connector + (pt 3840 1864) + (pt 3704 1864) + (bus) +) +(connector + (text "CLUT_ADR[7..0]" (rect 3338 1928 3444 1943)(font "Arial" )) + (pt 3336 1944) + (pt 3448 1944) + (bus) +) +(connector + (text "FB_AD[23..18]" (rect 3930 1640 4022 1655)(font "Arial" )) + (pt 3920 1656) + (pt 4032 1656) + (bus) +) +(connector + (text "FB_AD[23..18]" (rect 3930 1848 4022 1863)(font "Arial" )) + (pt 3920 1864) + (pt 4032 1864) + (bus) +) +(connector + (pt 3880 1464) + (pt 3880 1480) +) +(connector + (text "FALCON_CLUT_RDH" (rect 3762 1464 3904 1479)(font "Arial" )) + (pt 3880 1480) + (pt 3752 1480) +) +(connector + (pt 3880 1672) + (pt 3880 1688) +) +(connector + (text "FALCON_CLUT_RDH" (rect 3762 1672 3904 1687)(font "Arial" )) + (pt 3880 1688) + (pt 3752 1688) +) +(connector + (pt 3880 1880) + (pt 3880 1896) +) +(connector + (text "FALCON_CLUT_RDL" (rect 3762 1880 3902 1895)(font "Arial" )) + (pt 3880 1896) + (pt 3752 1896) +) +(connector + (text "FALCON_CLUT_WR3" (rect 3346 1880 3488 1895)(font "Arial" )) + (pt 3448 1896) + (pt 3336 1896) +) +(connector + (text "FALCON_CLUT_WR0" (rect 3346 1464 3488 1479)(font "Arial" )) + (pt 3448 1480) + (pt 3336 1480) +) +(connector + (text "FALCON_CLUT_WR1" (rect 3346 1672 3488 1687)(font "Arial" )) + (pt 3448 1688) + (pt 3336 1688) +) +(connector + (text "CCF[7..2]" (rect 3834 1912 3894 1927)(font "Arial" )) + (pt 3904 1928) + (pt 3704 1928) + (bus) +) +(connector + (text "CCF[1..0]" (rect 3842 1944 3902 1959)(font "Arial" )) + (pt 3904 1960) + (pt 3816 1960) + (bus) +) +(connector + (text "CCF[23..18]" (rect 3826 1496 3902 1511)(font "Arial" )) + (pt 3904 1512) + (pt 3704 1512) + (bus) +) +(connector + (text "CCF[15..10]" (rect 3826 1704 3902 1719)(font "Arial" )) + (pt 3904 1720) + (pt 3704 1720) + (bus) +) +(connector + (text "CCF[9..8]" (rect 3842 1744 3902 1759)(font "Arial" )) + (pt 3904 1760) + (pt 3816 1760) + (bus) +) +(connector + (text "CCF[17..16]" (rect 3842 1536 3918 1551)(font "Arial" )) + (pt 3904 1552) + (pt 3816 1552) + (bus) +) +(connector + (text "CLUT_ADR[7..0]" (rect 3338 1720 3444 1735)(font "Arial" )) + (pt 3336 1736) + (pt 3448 1736) + (bus) +) +(connector + (pt 3328 1752) + (pt 3448 1752) +) +(connector + (text "FB_AD[23..18]" (rect 3346 1848 3438 1863)(font "Arial" )) + (pt 3336 1864) + (pt 3448 1864) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3346 1864 3432 1879)(font "Arial" )) + (pt 3336 1880) + (pt 3448 1880) + (bus) +) +(connector + (text "CLUT_ADR[7..0]" (rect 3338 1512 3444 1527)(font "Arial" )) + (pt 3336 1528) + (pt 3448 1528) + (bus) +) +(connector + (pt 3328 1544) + (pt 3448 1544) +) +(connector + (text "FB_AD[23..18]" (rect 3346 1640 3438 1655)(font "Arial" )) + (pt 3336 1656) + (pt 3448 1656) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3346 1656 3432 1671)(font "Arial" )) + (pt 3336 1672) + (pt 3448 1672) + (bus) +) +(connector + (text "FB_AD[31..26]" (rect 3346 1432 3438 1447)(font "Arial" )) + (pt 3336 1448) + (pt 3448 1448) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3346 1448 3432 1463)(font "Arial" )) + (pt 3336 1464) + (pt 3448 1464) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 920 3439 935)(font "Arial" )) + (pt 3448 936) + (pt 3360 936) +) +(connector + (text "PIXEL_CLK" (rect 3370 936 3445 951)(font "Arial" )) + (pt 3448 952) + (pt 3360 952) +) +(connector + (pt 3704 808) + (pt 3840 808) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 1128 3439 1143)(font "Arial" )) + (pt 3448 1144) + (pt 3360 1144) +) +(connector + (text "PIXEL_CLK" (rect 3370 1144 3445 1159)(font "Arial" )) + (pt 3448 1160) + (pt 3360 1160) +) +(connector + (pt 3704 1016) + (pt 3840 1016) + (bus) +) +(connector + (pt 3704 1224) + (pt 3840 1224) + (bus) +) +(connector + (text "MAIN_CLK" (rect 3370 1336 3439 1351)(font "Arial" )) + (pt 3448 1352) + (pt 3360 1352) +) +(connector + (text "PIXEL_CLK" (rect 3370 1352 3445 1367)(font "Arial" )) + (pt 3448 1368) + (pt 3360 1368) +) +(connector + (text "CLUT_ADR[3..0]" (rect 3338 1288 3444 1303)(font "Arial" )) + (pt 3336 1304) + (pt 3448 1304) + (bus) +) +(connector + (pt 3328 1320) + (pt 3448 1320) +) +(connector + (text "FB_AD[26..24]" (rect 3930 792 4022 807)(font "Arial" )) + (pt 3920 808) + (pt 4032 808) + (bus) +) +(connector + (text "FB_AD[22..20]" (rect 3930 1000 4022 1015)(font "Arial" )) + (pt 3920 1016) + (pt 4032 1016) + (bus) +) +(connector + (text "FB_AD[18..16]" (rect 3930 1208 4022 1223)(font "Arial" )) + (pt 3920 1224) + (pt 4032 1224) + (bus) +) +(connector + (pt 3880 824) + (pt 3880 840) +) +(connector + (text "ST_CLUT_RD" (rect 3802 824 3895 839)(font "Arial" )) + (pt 3880 840) + (pt 3792 840) +) +(connector + (pt 3880 1032) + (pt 3880 1048) +) +(connector + (text "ST_CLUT_RD" (rect 3802 1032 3895 1047)(font "Arial" )) + (pt 3880 1048) + (pt 3792 1048) +) +(connector + (pt 3880 1240) + (pt 3880 1256) +) +(connector + (text "ST_CLUT_RD" (rect 3802 1240 3895 1255)(font "Arial" )) + (pt 3880 1256) + (pt 3792 1256) +) +(connector + (text "ST_CLUT_WR1" (rect 3346 1240 3449 1255)(font "Arial" )) + (pt 3448 1256) + (pt 3336 1256) +) +(connector + (text "ST_CLUT_WR0" (rect 3346 824 3449 839)(font "Arial" )) + (pt 3448 840) + (pt 3336 840) +) +(connector + (text "ST_CLUT_WR1" (rect 3346 1032 3449 1047)(font "Arial" )) + (pt 3448 1048) + (pt 3336 1048) +) +(connector + (text "CCS[15..13]" (rect 3826 1064 3903 1079)(font "Arial" )) + (pt 3920 1080) + (pt 3704 1080) + (bus) +) +(connector + (text "CCS[12..8]" (rect 3826 1096 3895 1111)(font "Arial" )) + (pt 3816 1112) + (pt 3920 1112) + (bus) +) +(connector + (text "CCS[23..21]" (rect 3810 856 3887 871)(font "Arial" )) + (pt 3904 872) + (pt 3704 872) + (bus) +) +(connector + (text "CCS[20..16]" (rect 3818 888 3895 903)(font "Arial" )) + (pt 3808 904) + (pt 3904 904) + (bus) +) +(connector + (text "CCS[7..5]" (rect 3714 1272 3775 1287)(font "Arial" )) + (pt 3920 1288) + (pt 3704 1288) + (bus) +) +(connector + (text "CCS[4..0]" (rect 3818 1304 3879 1319)(font "Arial" )) + (pt 3808 1320) + (pt 3920 1320) + (bus) +) +(connector + (text "FB_AD[26..24]" (rect 3346 792 3438 807)(font "Arial" )) + (pt 3336 808) + (pt 3448 808) + (bus) +) +(connector + (text "FB_ADR[4..1]" (rect 3346 808 3432 823)(font "Arial" )) + (pt 3336 824) + (pt 3448 824) + (bus) +) +(connector + (text "CLUT_ADR[3..0]" (rect 3338 872 3444 887)(font "Arial" )) + (pt 3336 888) + (pt 3448 888) + (bus) +) +(connector + (pt 3328 904) + (pt 3448 904) +) +(connector + (text "FB_AD[22..20]" (rect 3346 1000 3438 1015)(font "Arial" )) + (pt 3336 1016) + (pt 3448 1016) + (bus) +) +(connector + (text "FB_ADR[4..1]" (rect 3346 1016 3432 1031)(font "Arial" )) + (pt 3336 1032) + (pt 3448 1032) + (bus) +) +(connector + (text "CLUT_ADR[3..0]" (rect 3338 1080 3444 1095)(font "Arial" )) + (pt 3336 1096) + (pt 3448 1096) + (bus) +) +(connector + (pt 3328 1112) + (pt 3448 1112) +) +(connector + (text "FB_AD[18..16]" (rect 3346 1208 3438 1223)(font "Arial" )) + (pt 3336 1224) + (pt 3448 1224) + (bus) +) +(connector + (text "FB_ADR[4..1]" (rect 3346 1224 3432 1239)(font "Arial" )) + (pt 3336 1240) + (pt 3448 1240) + (bus) +) +(connector + (text "ACP_CLUT_WR1" (rect 3314 2112 3428 2127)(font "Arial" )) + (pt 3304 2128) + (pt 3448 2128) +) +(connector + (text "FB_AD[23..16]" (rect 3874 2080 3966 2095)(font "Arial" )) + (pt 3960 2096) + (pt 3864 2096) + (bus) +) +(connector + (text "FB_AD[15..8]" (rect 3874 2288 3957 2303)(font "Arial" )) + (pt 3864 2304) + (pt 3952 2304) + (bus) +) +(connector + (text "FB_AD[15..8]" (rect 3370 2288 3453 2303)(font "Arial" )) + (pt 3360 2304) + (pt 3448 2304) + (bus) +) +(connector + (text "FB_AD[7..0]" (rect 3874 2496 3949 2511)(font "Arial" )) + (pt 3864 2512) + (pt 3952 2512) + (bus) +) +(connector + (text "FB_AD[7..0]" (rect 3370 2496 3445 2511)(font "Arial" )) + (pt 3360 2512) + (pt 3448 2512) + (bus) +) +(connector + (text "CCA[23..16]" (rect 3730 2144 3806 2159)(font "Arial" )) + (pt 3808 2160) + (pt 3704 2160) + (bus) +) +(connector + (text "CCA[15..8]" (rect 3730 2352 3798 2367)(font "Arial" )) + (pt 3808 2368) + (pt 3704 2368) + (bus) +) +(connector + (text "CCA[7..0]" (rect 3730 2560 3790 2575)(font "Arial" )) + (pt 3808 2576) + (pt 3704 2576) + (bus) +) +(connector + (text "FB_AD[23..16]" (rect 3362 2080 3454 2095)(font "Arial" )) + (pt 3448 2096) + (pt 3352 2096) + (bus) +) +(connector + (text "ZR_C8B[7..0]" (rect 3354 2576 3440 2591)(font "Arial" )) + (pt 3448 2592) + (pt 3344 2592) + (bus) +) +(connector + (text "ZR_C8B[7..0]" (rect 3362 2368 3448 2383)(font "Arial" )) + (pt 3448 2384) + (pt 3352 2384) + (bus) +) +(connector + (text "ZR_C8B[7..0]" (rect 3362 2160 3448 2175)(font "Arial" )) + (pt 3448 2176) + (pt 3352 2176) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3266 2304 3352 2319)(font "Arial" )) + (pt 3448 2320) + (pt 3256 2320) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3266 2096 3352 2111)(font "Arial" )) + (pt 3448 2112) + (pt 3256 2112) + (bus) +) +(connector + (text "FB_ADR[9..2]" (rect 3266 2512 3352 2527)(font "Arial" )) + (pt 3448 2528) + (pt 3256 2528) + (bus) +) +(connector + (text "ACP_CLUT_WR3" (rect 3346 2528 3460 2543)(font "Arial" )) + (pt 3448 2544) + (pt 3336 2544) +) +(connector + (text "ACP_CLUT_WR2" (rect 3346 2320 3460 2335)(font "Arial" )) + (pt 3448 2336) + (pt 3336 2336) +) +(connector + (text "FIFO_MW[8..0]" (rect 1882 1384 1975 1399)(font "Arial" )) + (pt 1952 1400) + (pt 1872 1400) + (bus) +) +(connector + (pt 2000 1408) + (pt 1984 1408) + (bus) +) +(connector + (pt 1984 1344) + (pt 1984 1408) + (bus) +) +(connector + (pt 1984 1344) + (pt 2248 1344) + (bus) +) +(connector + (pt 1968 1424) + (pt 1968 1208) + (bus) +) +(connector + (pt 2248 1208) + (pt 2232 1208) + (bus) +) +(connector + (pt 2248 1344) + (pt 2248 1208) + (bus) +) +(connector + (pt 1872 1424) + (pt 1968 1424) + (bus) +) +(connector + (pt 1968 1424) + (pt 2000 1424) + (bus) +) +(connector + (pt 1968 1208) + (pt 2072 1208) + (bus) +) +(connector + (pt 2512 1248) + (pt 2512 1408) +) +(connector + (pt 2088 1480) + (pt 2088 1512) +) +(connector + (text "INTER_ZEI" (rect 1994 1496 2065 1511)(font "Arial" )) + (pt 1984 1512) + (pt 2088 1512) +) +(connector + (text "INTER_ZEI" (rect 1362 1424 1433 1439)(font "Arial" )) + (pt 1352 1440) + (pt 1456 1440) +) +(connector + (pt 1504 1440) + (pt 1536 1440) +) +(connector + (text "VDVZ[127..0]" (rect 1090 1120 1172 1135)(font "Arial" )) + (pt 1088 1136) + (pt 1160 1136) + (bus) +) +(connector + (text "DOP_FIFO_CLR" (rect 1978 1280 2085 1295)(font "Arial" )) + (pt 2072 1296) + (pt 1992 1296) +) +(connector + (text "PIXEL_CLK" (rect 2002 1256 2077 1271)(font "Arial" )) + (pt 2072 1272) + (pt 1992 1272) +) +(connector + (text "VDVZ[127..96]" (rect 1450 936 1540 951)(font "Arial" )) + (pt 1440 952) + (pt 1520 952) + (bus) +) +(connector + (text "VDVZ[63..32]" (rect 1194 920 1276 935)(font "Arial" )) + (pt 1184 936) + (pt 1296 936) + (bus) +) +(connector + (text "VDP_IN[31..0]" (rect 962 992 1051 1007)(font "Arial" )) + (pt 952 1008) + (pt 1040 1008) + (bus) +) +(connector + (text "VDVZ[95..64]" (rect 1450 1024 1532 1039)(font "Arial" )) + (pt 1440 1040) + (pt 1520 1040) + (bus) +) +(connector + (text "VDVZ[31..0]" (rect 1194 1008 1268 1023)(font "Arial" )) + (pt 1184 1024) + (pt 1296 1024) + (bus) +) +(connector + (text "VDP_IN[63..32]" (rect 962 904 1059 919)(font "Arial" )) + (pt 952 920) + (pt 1040 920) + (bus) +) +(connector + (text "DDRCLK0" (rect 978 920 1046 935)(font "Arial" )) + (pt 1040 936) + (pt 968 936) +) +(connector + (text "DDRCLK0" (rect 978 1008 1046 1023)(font "Arial" )) + (pt 1040 1024) + (pt 968 1024) +) +(connector + (text "DDRCLK0" (rect 1234 936 1302 951)(font "Arial" )) + (pt 1296 952) + (pt 1224 952) +) +(connector + (text "DDRCLK0" (rect 1234 1024 1302 1039)(font "Arial" )) + (pt 1224 1040) + (pt 1296 1040) +) +(connector + (text "DDRCLK0" (rect 1098 1136 1166 1151)(font "Arial" )) + (pt 1160 1152) + (pt 1088 1152) +) +(connector + (text "DDRCLK0" (rect 1338 1160 1406 1175)(font "Arial" )) + (pt 1400 1176) + (pt 1328 1176) +) +(connector + (text "VDMB[127..0]" (rect 1554 1168 1640 1183)(font "Arial" )) + (pt 1544 1184) + (pt 1624 1184) + (bus) +) +(connector + (text "VDMA[127..0]" (rect 1314 1144 1398 1159)(font "Arial" )) + (pt 1304 1160) + (pt 1400 1160) + (bus) +) +(connector + (text "VDMC[127..0]" (rect 1642 1344 1729 1359)(font "Arial" )) + (pt 1640 1360) + (pt 1712 1360) + (bus) +) +(connector + (text "VDMC[127..0]" (rect 1970 960 2057 975)(font "Arial" )) + (pt 1968 976) + (pt 2040 976) + (bus) +) +(connector + (text "VDM_SEL[3..0]" (rect 570 2416 665 2431)(font "Arial" )) + (pt 560 2432) + (pt 656 2432) + (bus) +) +(connector + (text "VDMB[127..0]" (rect 1586 1080 1672 1095)(font "Arial" )) + (pt 1576 1096) + (pt 1800 1096) + (bus) +) +(connector + (text "VDMB[119..0],VDMA[127..120]" (rect 1586 1064 1777 1079)(font "Arial" )) + (pt 1576 1080) + (pt 1800 1080) + (bus) +) +(connector + (text "VDMB[111..0],VDMA[127..112]" (rect 1586 1048 1777 1063)(font "Arial" )) + (pt 1576 1064) + (pt 1800 1064) + (bus) +) +(connector + (text "VDMB[103..0],VDMA[127..104]" (rect 1586 1032 1777 1047)(font "Arial" )) + (pt 1576 1048) + (pt 1800 1048) + (bus) +) +(connector + (text "VDMB[95..0],VDMA[127..96]" (rect 1586 1016 1760 1031)(font "Arial" )) + (pt 1576 1032) + (pt 1800 1032) + (bus) +) +(connector + (text "VDMB[87..0],VDMA[127..88]" (rect 1586 1000 1760 1015)(font "Arial" )) + (pt 1576 1016) + (pt 1800 1016) + (bus) +) +(connector + (text "VDMB[79..0],VDMA[127..80]" (rect 1586 984 1760 999)(font "Arial" )) + (pt 1576 1000) + (pt 1800 1000) + (bus) +) +(connector + (text "VDMB[71..0],VDMA[127..72]" (rect 1586 968 1760 983)(font "Arial" )) + (pt 1576 984) + (pt 1800 984) + (bus) +) +(connector + (text "VDMB[63..0],VDMA[127..64]" (rect 1586 952 1760 967)(font "Arial" )) + (pt 1576 968) + (pt 1800 968) + (bus) +) +(connector + (text "VDMB[55..0],VDMA[127..56]" (rect 1586 936 1760 951)(font "Arial" )) + (pt 1576 952) + (pt 1800 952) + (bus) +) +(connector + (text "VDMB[47..0],VDMA[127..48]" (rect 1586 920 1760 935)(font "Arial" )) + (pt 1576 936) + (pt 1800 936) + (bus) +) +(connector + (text "VDMB[39..0],VDMA[127..40]" (rect 1586 904 1760 919)(font "Arial" )) + (pt 1576 920) + (pt 1800 920) + (bus) +) +(connector + (text "VDMB[31..0],VDMA[127..32]" (rect 1586 888 1760 903)(font "Arial" )) + (pt 1576 904) + (pt 1800 904) + (bus) +) +(connector + (text "VDMB[23..0],VDMA[127..24]" (rect 1586 872 1760 887)(font "Arial" )) + (pt 1576 888) + (pt 1800 888) + (bus) +) +(connector + (text "VDMB[15..0],VDMA[127..16]" (rect 1586 856 1760 871)(font "Arial" )) + (pt 1576 872) + (pt 1800 872) + (bus) +) +(connector + (text "VDMB[7..0],VDMA[127..8]" (rect 1586 840 1744 855)(font "Arial" )) + (pt 1576 856) + (pt 1800 856) + (bus) +) +(connector + (text "FIFO_WRE" (rect 1098 1152 1169 1167)(font "Arial" )) + (pt 1088 1168) + (pt 1160 1168) +) +(connector + (text "FIFO_WRE" (rect 1338 1176 1409 1191)(font "Arial" )) + (pt 1328 1192) + (pt 1400 1192) +) +(connector + (text "FIFO_WRE" (rect 1650 1368 1721 1383)(font "Arial" )) + (pt 1640 1384) + (pt 1712 1384) +) +(connector + (text "nFB_BURST" (rect 1570 1896 1652 1911)(font "Arial" )) + (pt 1560 1912) + (pt 1664 1912) +) +(connector + (text "nFB_OE" (rect 1570 1920 1624 1935)(font "Arial" )) + (pt 1560 1936) + (pt 1664 1936) +) +(connector + (text "nRSTO" (rect 1570 1704 1617 1719)(font "Arial" )) + (pt 1560 1720) + (pt 1664 1720) +) +(connector + (text "MAIN_CLK" (rect 1570 1728 1639 1743)(font "Arial" )) + (pt 1664 1744) + (pt 1560 1744) +) +(connector + (text "nFB_CS1" (rect 1570 1752 1632 1767)(font "Arial" )) + (pt 1560 1768) + (pt 1664 1768) +) +(connector + (text "nFB_CS2" (rect 1570 1776 1632 1791)(font "Arial" )) + (pt 1560 1792) + (pt 1664 1792) +) +(connector + (text "nFB_CS3" (rect 1570 1800 1632 1815)(font "Arial" )) + (pt 1560 1816) + (pt 1664 1816) +) +(connector + (text "nFB_WR" (rect 1570 1824 1627 1839)(font "Arial" )) + (pt 1560 1840) + (pt 1664 1840) +) +(connector + (text "FB_SIZE0" (rect 1570 1848 1634 1863)(font "Arial" )) + (pt 1560 1864) + (pt 1664 1864) +) +(connector + (text "FB_SIZE1" (rect 1570 1872 1634 1887)(font "Arial" )) + (pt 1560 1888) + (pt 1664 1888) +) +(connector + (text "FB_AD[31..0]" (rect 2026 1720 2109 1735)(font "Arial" )) + (pt 2136 1736) + (pt 2016 1736) + (bus) +) +(connector + (text "FB_ADR[31..0]" (rect 1570 1944 1664 1959)(font "Arial" )) + (pt 1664 1960) + (pt 1560 1960) + (bus) +) +(connector + (text "ACP_CLUT_RD" (rect 2026 1968 2129 1983)(font "Arial" )) + (pt 2016 1984) + (pt 2112 1984) +) +(connector + (text "PIXEL_CLK" (rect 2026 2224 2101 2239)(font "Arial" )) + (pt 2104 2240) + (pt 2016 2240) +) +(connector + (text "ST_CLUT_RD" (rect 2026 2096 2119 2111)(font "Arial" )) + (pt 2016 2112) + (pt 2120 2112) +) +(connector + (text "FALCON_CLUT_RDH" (rect 2026 2024 2168 2039)(font "Arial" )) + (pt 2016 2040) + (pt 2120 2040) +) +(connector + (text "FALCON_CLUT_RDL" (rect 2026 2000 2166 2015)(font "Arial" )) + (pt 2016 2016) + (pt 2120 2016) +) +(connector + (text "ST_CLUT_WR[1..0]" (rect 2026 2120 2152 2135)(font "Arial" )) + (pt 2016 2136) + (pt 2112 2136) + (bus) +) +(connector + (text "CLUT_MUX_ADR[3..0]" (rect 2026 2152 2169 2167)(font "Arial" )) + (pt 2016 2168) + (pt 2120 2168) + (bus) +) +(connector + (text "HSYNC" (rect 2026 2248 2075 2263)(font "Arial" )) + (pt 2104 2264) + (pt 2016 2264) +) +(connector + (text "VSYNC" (rect 2026 2272 2073 2287)(font "Arial" )) + (pt 2104 2288) + (pt 2016 2288) +) +(connector + (text "nBLANK" (rect 2026 2296 2080 2311)(font "Arial" )) + (pt 2104 2312) + (pt 2016 2312) +) +(connector + (text "nSYNC" (rect 2026 2320 2073 2335)(font "Arial" )) + (pt 2104 2336) + (pt 2016 2336) +) +(connector + (text "nPD_VGA" (rect 2026 2344 2089 2359)(font "Arial" )) + (pt 2104 2360) + (pt 2016 2360) +) +(connector + (text "CLUT_OFF[3..0]" (rect 2026 2072 2129 2087)(font "Arial" )) + (pt 2016 2088) + (pt 2112 2088) + (bus) +) +(connector + (text "BLITTER_ON" (rect 2026 2488 2113 2503)(font "Arial" )) + (pt 2096 2504) + (pt 2016 2504) +) +(connector + (text "VIDEO_RAM_CTR[15..0]" (rect 2026 2368 2182 2383)(font "Arial" )) + (pt 2144 2384) + (pt 2016 2384) + (bus) +) +(connector + (text "CCR[23..0]" (rect 2026 2176 2096 2191)(font "Arial" )) + (pt 2096 2192) + (pt 2016 2192) + (bus) +) +(connector + (text "CCSEL[2..0]" (rect 2026 2200 2105 2215)(font "Arial" )) + (pt 2016 2216) + (pt 2096 2216) + (bus) +) +(connector + (text "ACP_CLUT_WR[3..0]" (rect 2026 1944 2162 1959)(font "Arial" )) + (pt 2136 1960) + (pt 2016 1960) + (bus) +) +(connector + (text "FALCON_CLUT_WR[3..0]" (rect 2026 2048 2191 2063)(font "Arial" )) + (pt 2144 2064) + (pt 2016 2064) + (bus) +) +(connector + (text "INTER_ZEI" (rect 2026 2400 2097 2415)(font "Arial" )) + (pt 2016 2416) + (pt 2136 2416) +) +(connector + (text "DOP_FIFO_CLR" (rect 2026 2424 2133 2439)(font "Arial" )) + (pt 2016 2440) + (pt 2128 2440) +) +(connector + (text "VIDEO_MOD_TA" (rect 2026 2520 2133 2535)(font "Arial" )) + (pt 2088 2536) + (pt 2016 2536) +) +(connector + (text "BLITTER_RUN" (rect 1546 2528 1643 2543)(font "Arial" )) + (pt 1664 2544) + (pt 1536 2544) +) +(connector + (pt 1888 1120) + (pt 1888 1160) + (bus) +) +(connector + (text "VDM_SEL[3..0]" (rect 1810 1144 1905 1159)(font "Arial" )) + (pt 1888 1160) + (pt 1800 1160) + (bus) +) +(connector + (pt 1608 1432) + (pt 1608 1232) +) +(connector + (pt 1600 1432) + (pt 1608 1432) +) +(connector + (pt 1608 1432) + (pt 1712 1432) +) +(connector + (pt 1608 1232) + (pt 2072 1232) +) +(connector + (pt 2072 1248) + (pt 1944 1248) +) +(connector + (pt 1944 1248) + (pt 1944 1296) +) +(connector + (pt 1944 1296) + (pt 1920 1296) +) +(connector + (text "FIFO_RDE" (rect 1770 1272 1839 1287)(font "Arial" )) + (pt 1760 1288) + (pt 1856 1288) +) +(connector + (text "INTER_ZEI" (rect 1762 1288 1833 1303)(font "Arial" )) + (pt 1752 1304) + (pt 1856 1304) +) +(connector + (text "CLK33M" (rect 1586 2168 1641 2183)(font "Arial" )) + (pt 1512 2184) + (pt 1664 2184) +) +(connector + (text "CLK25M" (rect 1586 2192 1641 2207)(font "Arial" )) + (pt 1512 2208) + (pt 1664 2208) +) +(connector + (text "CLK_VIDEO" (rect 1570 2144 1649 2159)(font "Arial" )) + (pt 1512 2160) + (pt 1664 2160) +) +(connector + (text "VIDEO_MOD_TA" (rect 258 1816 365 1831)(font "Arial" )) + (pt 264 1832) + (pt 360 1832) +) +(connector + (text "COLOR8" (rect 2026 1912 2085 1927)(font "Arial" )) + (pt 2016 1928) + (pt 2120 1928) +) +(connector + (text "COLOR4" (rect 2026 1896 2085 1911)(font "Arial" )) + (pt 2016 1912) + (pt 2120 1912) +) +(connector + (text "COLOR2" (rect 2026 1880 2085 1895)(font "Arial" )) + (pt 2016 1896) + (pt 2120 1896) +) +(connector + (text "COLOR1" (rect 2026 1864 2085 1879)(font "Arial" )) + (pt 2016 1880) + (pt 2120 1880) +) +(connector + (text "FIFO_RDE" (rect 2026 1736 2095 1751)(font "Arial" )) + (pt 2104 1752) + (pt 2016 1752) +) +(connector + (text "VIDEO_RECONFIG" (rect 2026 1688 2151 1703)(font "Arial" )) + (pt 2144 1704) + (pt 2016 1704) +) +(connector + (text "VR_WR" (rect 2026 1784 2076 1799)(font "Arial" )) + (pt 2016 1800) + (pt 2112 1800) +) +(connector + (text "VR_RD" (rect 2026 1800 2074 1815)(font "Arial" )) + (pt 2016 1816) + (pt 2112 1816) +) +(connector + (text "VR_D[8..0]" (rect 1570 2120 1638 2135)(font "Arial" )) + (pt 1512 2136) + (pt 1664 2136) + (bus) +) +(connector + (text "VR_BUSY" (rect 1578 2104 1642 2119)(font "Arial" )) + (pt 1512 2120) + (pt 1664 2120) +) +(connector + (text "CLR_FIFO" (rect 202 2216 270 2231)(font "Arial" )) + (pt 296 2232) + (pt 192 2232) +) +(connector + (text "CLR_FIFO" (rect 2026 1752 2094 1767)(font "Arial" )) + (pt 2016 1768) + (pt 2112 1768) +) +(connector + (text "CLR_FIFO" (rect 1634 1456 1702 1471)(font "Arial" )) + (pt 1712 1472) + (pt 1632 1472) +) +(junction (pt 2984 1688)) +(junction (pt 792 1192)) +(junction (pt 792 1312)) +(junction (pt 792 1432)) +(junction (pt 792 1792)) +(junction (pt 792 1928)) +(junction (pt 792 1552)) +(junction (pt 792 1648)) +(junction (pt 2512 1728)) +(junction (pt 2512 1888)) +(junction (pt 2512 2048)) +(junction (pt 2512 1408)) +(junction (pt 2512 1568)) +(junction (pt 2512 1552)) +(junction (pt 2512 2208)) +(junction (pt 1344 2880)) +(junction (pt 1344 2824)) +(junction (pt 1344 2928)) +(junction (pt 1328 2904)) +(junction (pt 1328 2952)) +(junction (pt 4240 2800)) +(junction (pt 3232 3024)) +(junction (pt 1968 1424)) +(junction (pt 1608 1432)) diff --git a/FPGA_quartus_GE/Video/altddio_bidir0.bsf b/FPGA_quartus_GE/Video/altddio_bidir0.bsf new file mode 100644 index 0000000..bcf7f28 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_bidir0.bsf @@ -0,0 +1,99 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 240 136) + (text "altddio_bidir0" (rect 82 1 171 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 120 25 132)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[31..0]" (rect 0 0 83 14)(font "Arial" (font_size 8))) + (text "datain_h[31..0]" (rect 4 11 76 24)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[31..0]" (rect 0 0 79 14)(font "Arial" (font_size 8))) + (text "datain_l[31..0]" (rect 4 27 73 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "oe" (rect 0 0 14 14)(font "Arial" (font_size 8))) + (text "oe" (rect 4 43 16 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "inclock" (rect 0 0 38 14)(font "Arial" (font_size 8))) + (text "inclock" (rect 4 59 36 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 88 72)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "outclock" (rect 0 0 47 14)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 75 42 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 88 88)(line_width 1)) + ) + (port + (pt 240 24) + (output) + (text "dataout_h[31..0]" (rect 0 0 92 14)(font "Arial" (font_size 8))) + (text "dataout_h[31..0]" (rect 159 11 237 24)(font "Arial" (font_size 8))) + (line (pt 240 24)(pt 144 24)(line_width 3)) + ) + (port + (pt 240 40) + (output) + (text "dataout_l[31..0]" (rect 0 0 87 14)(font "Arial" (font_size 8))) + (text "dataout_l[31..0]" (rect 163 27 238 40)(font "Arial" (font_size 8))) + (line (pt 240 40)(pt 144 40)(line_width 3)) + ) + (port + (pt 240 72) + (output) + (text "combout[31..0]" (rect 0 0 83 14)(font "Arial" (font_size 8))) + (text "combout[31..0]" (rect 166 59 237 72)(font "Arial" (font_size 8))) + (line (pt 240 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 240 56) + (bidir) + (text "padio[31..0]" (rect 0 0 66 14)(font "Arial" (font_size 8))) + (text "padio[31..0]" (rect 181 43 238 56)(font "Arial" (font_size 8))) + (line (pt 240 56)(pt 144 56)(line_width 3)) + ) + (drawing + (text "ddio" (rect 108 27 129 40)(font "Arial" (font_size 8))) + (text "bidir" (rect 108 42 129 55)(font "Arial" (font_size 8))) + (text "power up" (rect 92 90 129 102)(font "Arial" )) + (text "low" (rect 92 100 105 112)(font "Arial" )) + (line (pt 88 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 112)(line_width 1)) + (line (pt 144 112)(pt 88 112)(line_width 1)) + (line (pt 88 112)(pt 88 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/altddio_bidir0.inc b/FPGA_quartus_GE/Video/altddio_bidir0.inc new file mode 100644 index 0000000..5969513 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_bidir0.inc @@ -0,0 +1,30 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altddio_bidir0 +( + datain_h[31..0], + datain_l[31..0], + inclock, + oe, + outclock +) + +RETURNS ( + combout[31..0], + dataout_h[31..0], + dataout_l[31..0], + padio[31..0] +); diff --git a/FPGA_quartus_GE/Video/altddio_bidir0.ppf b/FPGA_quartus_GE/Video/altddio_bidir0.ppf new file mode 100644 index 0000000..5601bba --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_bidir0.ppf @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/Video/altddio_bidir0.qip b/FPGA_quartus_GE/Video/altddio_bidir0.qip new file mode 100644 index 0000000..3339057 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_bidir0.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_BIDIR" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_bidir0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_bidir0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_bidir0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_bidir0.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_bidir0.ppf"] diff --git a/FPGA_quartus_GE/Video/altddio_bidir0.vhd b/FPGA_quartus_GE/Video/altddio_bidir0.vhd new file mode 100644 index 0000000..a0ae0e0 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_bidir0.vhd @@ -0,0 +1,172 @@ +-- megafunction wizard: %ALTDDIO_BIDIR% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_bidir + +-- ============================================================ +-- File Name: altddio_bidir0.vhd +-- Megafunction Name(s): +-- altddio_bidir +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_bidir0 IS + PORT + ( + datain_h : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + inclock : IN STD_LOGIC ; + oe : IN STD_LOGIC := '1'; + outclock : IN STD_LOGIC ; + combout : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + dataout_h : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + dataout_l : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + padio : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END altddio_bidir0; + + +ARCHITECTURE SYN OF altddio_bidir0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT altddio_bidir + GENERIC ( + extend_oe_disable : STRING; + implement_input_in_lcell : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + outclock : IN STD_LOGIC ; + padio : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0); + inclock : IN STD_LOGIC ; + dataout_h : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + oe : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + combout : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + dataout_l : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (31 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + dataout_h <= sub_wire0(31 DOWNTO 0); + combout <= sub_wire1(31 DOWNTO 0); + dataout_l <= sub_wire2(31 DOWNTO 0); + + altddio_bidir_component : altddio_bidir + GENERIC MAP ( + extend_oe_disable => "UNUSED", + implement_input_in_lcell => "ON", + intended_device_family => "Cyclone III", + invert_output => "OFF", + lpm_type => "altddio_bidir", + oe_reg => "UNUSED", + power_up_high => "OFF", + width => 32 + ) + PORT MAP ( + outclock => outclock, + inclock => inclock, + oe => oe, + datain_h => datain_h, + datain_l => datain_l, + dataout_h => sub_wire0, + combout => sub_wire1, + dataout_l => sub_wire2, + padio => padio + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_INPUT_IN_LCELL NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "1" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "0" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_COMBOUT NUMERIC "1" +-- Retrieval info: PRIVATE: USE_DATAOUT NUMERIC "1" +-- Retrieval info: PRIVATE: USE_DQS_UNDELAYOUT NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "32" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: IMPLEMENT_INPUT_IN_LCELL STRING "ON" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_bidir" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: combout 0 0 32 0 OUTPUT NODEFVAL combout[31..0] +-- Retrieval info: USED_PORT: datain_h 0 0 32 0 INPUT NODEFVAL datain_h[31..0] +-- Retrieval info: USED_PORT: datain_l 0 0 32 0 INPUT NODEFVAL datain_l[31..0] +-- Retrieval info: USED_PORT: dataout_h 0 0 32 0 OUTPUT NODEFVAL dataout_h[31..0] +-- Retrieval info: USED_PORT: dataout_l 0 0 32 0 OUTPUT NODEFVAL dataout_l[31..0] +-- Retrieval info: USED_PORT: inclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL inclock +-- Retrieval info: USED_PORT: oe 0 0 0 0 INPUT VCC oe +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: USED_PORT: padio 0 0 32 0 BIDIR NODEFVAL padio[31..0] +-- Retrieval info: CONNECT: @datain_h 0 0 32 0 datain_h 0 0 32 0 +-- Retrieval info: CONNECT: @datain_l 0 0 32 0 datain_l 0 0 32 0 +-- Retrieval info: CONNECT: padio 0 0 32 0 @padio 0 0 32 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: CONNECT: @oe 0 0 0 0 oe 0 0 0 0 +-- Retrieval info: CONNECT: dataout_h 0 0 32 0 @dataout_h 0 0 32 0 +-- Retrieval info: CONNECT: dataout_l 0 0 32 0 @dataout_l 0 0 32 0 +-- Retrieval info: CONNECT: @inclock 0 0 0 0 inclock 0 0 0 0 +-- Retrieval info: CONNECT: combout 0 0 32 0 @combout 0 0 32 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_bidir0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altddio_out0.bsf b/FPGA_quartus_GE/Video/altddio_out0.bsf new file mode 100644 index 0000000..6554c2f --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out0.bsf @@ -0,0 +1,64 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 232 120) + (text "altddio_out0" (rect 81 1 163 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 104 25 116)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[3..0]" (rect 0 0 76 14)(font "Arial" (font_size 8))) + (text "datain_h[3..0]" (rect 4 11 70 24)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[3..0]" (rect 0 0 71 14)(font "Arial" (font_size 8))) + (text "datain_l[3..0]" (rect 4 27 67 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 47 14)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 42 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout[3..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "dataout[3..0]" (rect 169 11 229 24)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 3)) + ) + (drawing + (text "ddio" (rect 110 27 131 40)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 135 55)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 129 86)(font "Arial" )) + (text "high" (rect 92 84 109 96)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/altddio_out0.inc b/FPGA_quartus_GE/Video/altddio_out0.inc new file mode 100644 index 0000000..f534925 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out0.inc @@ -0,0 +1,25 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altddio_out0 +( + datain_h[3..0], + datain_l[3..0], + outclock +) + +RETURNS ( + dataout[3..0] +); diff --git a/FPGA_quartus_GE/Video/altddio_out0.ppf b/FPGA_quartus_GE/Video/altddio_out0.ppf new file mode 100644 index 0000000..3f3cfb5 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out0.ppf @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/FPGA_quartus_GE/Video/altddio_out0.qip b/FPGA_quartus_GE/Video/altddio_out0.qip new file mode 100644 index 0000000..8193856 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out0.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_OUT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_out0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.ppf"] diff --git a/FPGA_quartus_GE/Video/altddio_out0.vhd b/FPGA_quartus_GE/Video/altddio_out0.vhd new file mode 100644 index 0000000..f129798 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out0.vhd @@ -0,0 +1,136 @@ +-- megafunction wizard: %ALTDDIO_OUT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_out + +-- ============================================================ +-- File Name: altddio_out0.vhd +-- Megafunction Name(s): +-- altddio_out +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_out0 IS + PORT + ( + datain_h : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + outclock : IN STD_LOGIC ; + dataout : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) + ); +END altddio_out0; + + +ARCHITECTURE SYN OF altddio_out0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (3 DOWNTO 0); + + + + COMPONENT altddio_out + GENERIC ( + extend_oe_disable : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + dataout : OUT STD_LOGIC_VECTOR (3 DOWNTO 0); + outclock : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (3 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + dataout <= sub_wire0(3 DOWNTO 0); + + altddio_out_component : altddio_out + GENERIC MAP ( + extend_oe_disable => "UNUSED", + intended_device_family => "Cyclone III", + invert_output => "ON", + lpm_type => "altddio_out", + oe_reg => "UNUSED", + power_up_high => "ON", + width => 4 + ) + PORT MAP ( + outclock => outclock, + datain_h => datain_h, + datain_l => datain_l, + dataout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "0" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "1" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "4" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "ON" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_out" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "ON" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "4" +-- Retrieval info: USED_PORT: datain_h 0 0 4 0 INPUT NODEFVAL datain_h[3..0] +-- Retrieval info: USED_PORT: datain_l 0 0 4 0 INPUT NODEFVAL datain_l[3..0] +-- Retrieval info: USED_PORT: dataout 0 0 4 0 OUTPUT NODEFVAL dataout[3..0] +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: CONNECT: @datain_h 0 0 4 0 datain_h 0 0 4 0 +-- Retrieval info: CONNECT: @datain_l 0 0 4 0 datain_l 0 0 4 0 +-- Retrieval info: CONNECT: dataout 0 0 4 0 @dataout 0 0 4 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altddio_out1.bsf b/FPGA_quartus_GE/Video/altddio_out1.bsf new file mode 100644 index 0000000..8289852 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out1.bsf @@ -0,0 +1,64 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 232 120) + (text "altddio_out1" (rect 81 1 163 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 104 25 116)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 46 24)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 43 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 47 14)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 42 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 229 24)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 131 40)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 135 55)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 129 86)(font "Arial" )) + (text "low" (rect 92 84 105 96)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/altddio_out1.inc b/FPGA_quartus_GE/Video/altddio_out1.inc new file mode 100644 index 0000000..4d50b26 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out1.inc @@ -0,0 +1,25 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altddio_out1 +( + datain_h, + datain_l, + outclock +) + +RETURNS ( + dataout +); diff --git a/FPGA_quartus_GE/Video/altddio_out1.ppf b/FPGA_quartus_GE/Video/altddio_out1.ppf new file mode 100644 index 0000000..9772cd3 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out1.ppf @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/FPGA_quartus_GE/Video/altddio_out1.qip b/FPGA_quartus_GE/Video/altddio_out1.qip new file mode 100644 index 0000000..606e0b7 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out1.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_OUT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_out1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out1.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out1.ppf"] diff --git a/FPGA_quartus_GE/Video/altddio_out1.vhd b/FPGA_quartus_GE/Video/altddio_out1.vhd new file mode 100644 index 0000000..cb76474 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out1.vhd @@ -0,0 +1,146 @@ +-- megafunction wizard: %ALTDDIO_OUT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_out + +-- ============================================================ +-- File Name: altddio_out1.vhd +-- Megafunction Name(s): +-- altddio_out +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_out1 IS + PORT + ( + datain_h : IN STD_LOGIC ; + datain_l : IN STD_LOGIC ; + outclock : IN STD_LOGIC ; + dataout : OUT STD_LOGIC + ); +END altddio_out1; + + +ARCHITECTURE SYN OF altddio_out1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altddio_out + GENERIC ( + extend_oe_disable : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + dataout : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); + outclock : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (0 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (0 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire1 <= sub_wire0(0); + dataout <= sub_wire1; + sub_wire2 <= datain_h; + sub_wire3(0) <= sub_wire2; + sub_wire4 <= datain_l; + sub_wire5(0) <= sub_wire4; + + altddio_out_component : altddio_out + GENERIC MAP ( + extend_oe_disable => "UNUSED", + intended_device_family => "Cyclone III", + invert_output => "OFF", + lpm_type => "altddio_out", + oe_reg => "UNUSED", + power_up_high => "OFF", + width => 1 + ) + PORT MAP ( + outclock => outclock, + datain_h => sub_wire3, + datain_l => sub_wire5, + dataout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "0" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "0" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "1" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_out" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "1" +-- Retrieval info: USED_PORT: datain_h 0 0 0 0 INPUT NODEFVAL datain_h +-- Retrieval info: USED_PORT: datain_l 0 0 0 0 INPUT NODEFVAL datain_l +-- Retrieval info: USED_PORT: dataout 0 0 0 0 OUTPUT NODEFVAL dataout +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: CONNECT: @datain_h 0 0 1 0 datain_h 0 0 0 0 +-- Retrieval info: CONNECT: @datain_l 0 0 1 0 datain_l 0 0 0 0 +-- Retrieval info: CONNECT: dataout 0 0 0 0 @dataout 0 0 1 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altddio_out2.bsf b/FPGA_quartus_GE/Video/altddio_out2.bsf new file mode 100644 index 0000000..ff039ee --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out2.bsf @@ -0,0 +1,64 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 232 120) + (text "altddio_out2" (rect 81 1 163 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 104 25 116)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h[23..0]" (rect 0 0 83 14)(font "Arial" (font_size 8))) + (text "datain_h[23..0]" (rect 4 11 76 24)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 3)) + ) + (port + (pt 0 40) + (input) + (text "datain_l[23..0]" (rect 0 0 79 14)(font "Arial" (font_size 8))) + (text "datain_l[23..0]" (rect 4 27 73 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 47 14)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 42 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout[23..0]" (rect 0 0 77 14)(font "Arial" (font_size 8))) + (text "dataout[23..0]" (rect 163 11 229 24)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 3)) + ) + (drawing + (text "ddio" (rect 110 27 131 40)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 135 55)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 129 86)(font "Arial" )) + (text "low" (rect 92 84 105 96)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/altddio_out2.inc b/FPGA_quartus_GE/Video/altddio_out2.inc new file mode 100644 index 0000000..2257c30 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out2.inc @@ -0,0 +1,25 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altddio_out2 +( + datain_h[23..0], + datain_l[23..0], + outclock +) + +RETURNS ( + dataout[23..0] +); diff --git a/FPGA_quartus_GE/Video/altddio_out2.ppf b/FPGA_quartus_GE/Video/altddio_out2.ppf new file mode 100644 index 0000000..93df472 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out2.ppf @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/FPGA_quartus_GE/Video/altddio_out2.qip b/FPGA_quartus_GE/Video/altddio_out2.qip new file mode 100644 index 0000000..d72d5ce --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out2.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_OUT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_out2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out2.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out2.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out2.ppf"] diff --git a/FPGA_quartus_GE/Video/altddio_out2.vhd b/FPGA_quartus_GE/Video/altddio_out2.vhd new file mode 100644 index 0000000..30a8586 --- /dev/null +++ b/FPGA_quartus_GE/Video/altddio_out2.vhd @@ -0,0 +1,136 @@ +-- megafunction wizard: %ALTDDIO_OUT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_out + +-- ============================================================ +-- File Name: altddio_out2.vhd +-- Megafunction Name(s): +-- altddio_out +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_out2 IS + PORT + ( + datain_h : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + outclock : IN STD_LOGIC ; + dataout : OUT STD_LOGIC_VECTOR (23 DOWNTO 0) + ); +END altddio_out2; + + +ARCHITECTURE SYN OF altddio_out2 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (23 DOWNTO 0); + + + + COMPONENT altddio_out + GENERIC ( + extend_oe_disable : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + dataout : OUT STD_LOGIC_VECTOR (23 DOWNTO 0); + outclock : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (23 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + dataout <= sub_wire0(23 DOWNTO 0); + + altddio_out_component : altddio_out + GENERIC MAP ( + extend_oe_disable => "UNUSED", + intended_device_family => "Cyclone III", + invert_output => "OFF", + lpm_type => "altddio_out", + oe_reg => "UNUSED", + power_up_high => "OFF", + width => 24 + ) + PORT MAP ( + outclock => outclock, + datain_h => datain_h, + datain_l => datain_l, + dataout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "0" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "0" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "24" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_out" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "24" +-- Retrieval info: USED_PORT: datain_h 0 0 24 0 INPUT NODEFVAL datain_h[23..0] +-- Retrieval info: USED_PORT: datain_l 0 0 24 0 INPUT NODEFVAL datain_l[23..0] +-- Retrieval info: USED_PORT: dataout 0 0 24 0 OUTPUT NODEFVAL dataout[23..0] +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: CONNECT: @datain_h 0 0 24 0 datain_h 0 0 24 0 +-- Retrieval info: CONNECT: @datain_l 0 0 24 0 datain_l 0 0 24 0 +-- Retrieval info: CONNECT: dataout 0 0 24 0 @dataout 0 0 24 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altdpram0.bsf b/FPGA_quartus_GE/Video/altdpram0.bsf new file mode 100644 index 0000000..e0d3ce3 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram0.bsf @@ -0,0 +1,173 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 256 208) + (text "altdpram0" (rect 100 1 167 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 192 25 204)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[2..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_a[2..0]" (rect 4 19 61 32)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[3..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_a[3..0]" (rect 4 35 75 48)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 38 64)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[2..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_b[2..0]" (rect 4 83 61 96)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[3..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_b[3..0]" (rect 4 99 75 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 38 128)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 39 160)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 39 176)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[2..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_a[2..0]" (rect 211 19 253 32)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[2..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_b[2..0]" (rect 211 83 253 96)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "16 Word(s)" (rect 136 61 148 107)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 161 94)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 119 200)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) diff --git a/FPGA_quartus_GE/Video/altdpram0.inc b/FPGA_quartus_GE/Video/altdpram0.inc new file mode 100644 index 0000000..828067d --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram0.inc @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altdpram0 +( + address_a[3..0], + address_b[3..0], + clock_a, + clock_b, + data_a[2..0], + data_b[2..0], + wren_a, + wren_b +) + +RETURNS ( + q_a[2..0], + q_b[2..0] +); diff --git a/FPGA_quartus_GE/Video/altdpram0.qip b/FPGA_quartus_GE/Video/altdpram0.qip new file mode 100644 index 0000000..e4d02ab --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram0.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_RAM_DP+" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altdpram0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram0.cmp"] diff --git a/FPGA_quartus_GE/Video/altdpram0.vhd b/FPGA_quartus_GE/Video/altdpram0.vhd new file mode 100644 index 0000000..c883f02 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram0.vhd @@ -0,0 +1,273 @@ +-- megafunction wizard: %LPM_RAM_DP+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: altdpram0.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altdpram0 IS + PORT + ( + address_a : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + clock_a : IN STD_LOGIC ; + clock_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + wren_a : IN STD_LOGIC := '1'; + wren_b : IN STD_LOGIC := '1'; + q_a : OUT STD_LOGIC_VECTOR (2 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (2 DOWNTO 0) + ); +END altdpram0; + + +ARCHITECTURE SYN OF altdpram0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (2 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (2 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + address_reg_b : STRING; + clock_enable_input_a : STRING; + clock_enable_input_b : STRING; + clock_enable_output_a : STRING; + clock_enable_output_b : STRING; + indata_reg_b : STRING; + intended_device_family : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + numwords_b : NATURAL; + operation_mode : STRING; + outdata_aclr_a : STRING; + outdata_aclr_b : STRING; + outdata_reg_a : STRING; + outdata_reg_b : STRING; + power_up_uninitialized : STRING; + read_during_write_mode_port_a : STRING; + read_during_write_mode_port_b : STRING; + widthad_a : NATURAL; + widthad_b : NATURAL; + width_a : NATURAL; + width_b : NATURAL; + width_byteena_a : NATURAL; + width_byteena_b : NATURAL; + wrcontrol_wraddress_reg_b : STRING + ); + PORT ( + wren_a : IN STD_LOGIC ; + clock0 : IN STD_LOGIC ; + wren_b : IN STD_LOGIC ; + clock1 : IN STD_LOGIC ; + address_a : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR (2 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (2 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (2 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q_a <= sub_wire0(2 DOWNTO 0); + q_b <= sub_wire1(2 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_reg_b => "CLOCK1", + clock_enable_input_a => "BYPASS", + clock_enable_input_b => "BYPASS", + clock_enable_output_a => "BYPASS", + clock_enable_output_b => "BYPASS", + indata_reg_b => "CLOCK1", + intended_device_family => "Cyclone III", + lpm_type => "altsyncram", + numwords_a => 16, + numwords_b => 16, + operation_mode => "BIDIR_DUAL_PORT", + outdata_aclr_a => "NONE", + outdata_aclr_b => "NONE", + outdata_reg_a => "CLOCK0", + outdata_reg_b => "CLOCK1", + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "OLD_DATA", + read_during_write_mode_port_b => "OLD_DATA", + widthad_a => 4, + widthad_b => 4, + width_a => 3, + width_b => 3, + width_byteena_a => 1, + width_byteena_b => 1, + wrcontrol_wraddress_reg_b => "CLOCK1" + ) + PORT MAP ( + wren_a => wren_a, + clock0 => clock_a, + wren_b => wren_b, + clock1 => clock_b, + address_a => address_a, + address_b => address_b, + data_a => data_a, + data_b => data_b, + q_a => sub_wire0, + q_b => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLRdata NUMERIC "0" +-- Retrieval info: PRIVATE: CLRq NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrren NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwren NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "5" +-- Retrieval info: PRIVATE: Clock_A NUMERIC "0" +-- Retrieval info: PRIVATE: Clock_B NUMERIC "0" +-- Retrieval info: PRIVATE: ECC NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "48" +-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "" +-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3" +-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "1" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "1" +-- Retrieval info: PRIVATE: REGdata NUMERIC "1" +-- Retrieval info: PRIVATE: REGq NUMERIC "1" +-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: REGrren NUMERIC "0" +-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGwren NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +-- Retrieval info: PRIVATE: VarWidth NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "3" +-- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "3" +-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "3" +-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "3" +-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: enable NUMERIC "0" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "16" +-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "16" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "OLD_DATA" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "OLD_DATA" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "4" +-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "4" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "3" +-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "3" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1" +-- Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: USED_PORT: address_a 0 0 4 0 INPUT NODEFVAL address_a[3..0] +-- Retrieval info: USED_PORT: address_b 0 0 4 0 INPUT NODEFVAL address_b[3..0] +-- Retrieval info: USED_PORT: clock_a 0 0 0 0 INPUT NODEFVAL clock_a +-- Retrieval info: USED_PORT: clock_b 0 0 0 0 INPUT NODEFVAL clock_b +-- Retrieval info: USED_PORT: data_a 0 0 3 0 INPUT NODEFVAL data_a[2..0] +-- Retrieval info: USED_PORT: data_b 0 0 3 0 INPUT NODEFVAL data_b[2..0] +-- Retrieval info: USED_PORT: q_a 0 0 3 0 OUTPUT NODEFVAL q_a[2..0] +-- Retrieval info: USED_PORT: q_b 0 0 3 0 OUTPUT NODEFVAL q_b[2..0] +-- Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT VCC wren_a +-- Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT VCC wren_b +-- Retrieval info: CONNECT: @data_a 0 0 3 0 data_a 0 0 3 0 +-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren_a 0 0 0 0 +-- Retrieval info: CONNECT: q_a 0 0 3 0 @q_a 0 0 3 0 +-- Retrieval info: CONNECT: q_b 0 0 3 0 @q_b 0 0 3 0 +-- Retrieval info: CONNECT: @address_a 0 0 4 0 address_a 0 0 4 0 +-- Retrieval info: CONNECT: @data_b 0 0 3 0 data_b 0 0 3 0 +-- Retrieval info: CONNECT: @address_b 0 0 4 0 address_b 0 0 4 0 +-- Retrieval info: CONNECT: @wren_b 0 0 0 0 wren_b 0 0 0 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock_a 0 0 0 0 +-- Retrieval info: CONNECT: @clock1 0 0 0 0 clock_b 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altdpram1.bsf b/FPGA_quartus_GE/Video/altdpram1.bsf new file mode 100644 index 0000000..d75db28 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram1.bsf @@ -0,0 +1,173 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 256 208) + (text "altdpram1" (rect 100 1 167 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 192 25 204)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[5..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_a[5..0]" (rect 4 19 61 32)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 75 48)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 38 64)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[5..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_b[5..0]" (rect 4 83 61 96)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 75 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 38 128)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 39 160)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 39 176)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[5..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_a[5..0]" (rect 211 19 253 32)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[5..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_b[5..0]" (rect 211 83 253 96)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 148 109)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 161 94)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 119 200)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) diff --git a/FPGA_quartus_GE/Video/altdpram1.inc b/FPGA_quartus_GE/Video/altdpram1.inc new file mode 100644 index 0000000..4a7924e --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram1.inc @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altdpram1 +( + address_a[7..0], + address_b[7..0], + clock_a, + clock_b, + data_a[5..0], + data_b[5..0], + wren_a, + wren_b +) + +RETURNS ( + q_a[5..0], + q_b[5..0] +); diff --git a/FPGA_quartus_GE/Video/altdpram1.qip b/FPGA_quartus_GE/Video/altdpram1.qip new file mode 100644 index 0000000..cdd178f --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram1.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_RAM_DP+" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altdpram1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram1.cmp"] diff --git a/FPGA_quartus_GE/Video/altdpram1.vhd b/FPGA_quartus_GE/Video/altdpram1.vhd new file mode 100644 index 0000000..b2e0435 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram1.vhd @@ -0,0 +1,273 @@ +-- megafunction wizard: %LPM_RAM_DP+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: altdpram1.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altdpram1 IS + PORT + ( + address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + clock_a : IN STD_LOGIC ; + clock_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + wren_a : IN STD_LOGIC := '1'; + wren_b : IN STD_LOGIC := '1'; + q_a : OUT STD_LOGIC_VECTOR (5 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); +END altdpram1; + + +ARCHITECTURE SYN OF altdpram1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (5 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (5 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + address_reg_b : STRING; + clock_enable_input_a : STRING; + clock_enable_input_b : STRING; + clock_enable_output_a : STRING; + clock_enable_output_b : STRING; + indata_reg_b : STRING; + intended_device_family : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + numwords_b : NATURAL; + operation_mode : STRING; + outdata_aclr_a : STRING; + outdata_aclr_b : STRING; + outdata_reg_a : STRING; + outdata_reg_b : STRING; + power_up_uninitialized : STRING; + read_during_write_mode_port_a : STRING; + read_during_write_mode_port_b : STRING; + widthad_a : NATURAL; + widthad_b : NATURAL; + width_a : NATURAL; + width_b : NATURAL; + width_byteena_a : NATURAL; + width_byteena_b : NATURAL; + wrcontrol_wraddress_reg_b : STRING + ); + PORT ( + wren_a : IN STD_LOGIC ; + clock0 : IN STD_LOGIC ; + wren_b : IN STD_LOGIC ; + clock1 : IN STD_LOGIC ; + address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR (5 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (5 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q_a <= sub_wire0(5 DOWNTO 0); + q_b <= sub_wire1(5 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_reg_b => "CLOCK1", + clock_enable_input_a => "BYPASS", + clock_enable_input_b => "BYPASS", + clock_enable_output_a => "BYPASS", + clock_enable_output_b => "BYPASS", + indata_reg_b => "CLOCK1", + intended_device_family => "Cyclone III", + lpm_type => "altsyncram", + numwords_a => 256, + numwords_b => 256, + operation_mode => "BIDIR_DUAL_PORT", + outdata_aclr_a => "NONE", + outdata_aclr_b => "NONE", + outdata_reg_a => "CLOCK0", + outdata_reg_b => "CLOCK1", + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "OLD_DATA", + read_during_write_mode_port_b => "OLD_DATA", + widthad_a => 8, + widthad_b => 8, + width_a => 6, + width_b => 6, + width_byteena_a => 1, + width_byteena_b => 1, + wrcontrol_wraddress_reg_b => "CLOCK1" + ) + PORT MAP ( + wren_a => wren_a, + clock0 => clock_a, + wren_b => wren_b, + clock1 => clock_b, + address_a => address_a, + address_b => address_b, + data_a => data_a, + data_b => data_b, + q_a => sub_wire0, + q_b => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLRdata NUMERIC "0" +-- Retrieval info: PRIVATE: CLRq NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrren NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwren NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "5" +-- Retrieval info: PRIVATE: Clock_A NUMERIC "0" +-- Retrieval info: PRIVATE: Clock_B NUMERIC "0" +-- Retrieval info: PRIVATE: ECC NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "1536" +-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "" +-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3" +-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "1" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "1" +-- Retrieval info: PRIVATE: REGdata NUMERIC "1" +-- Retrieval info: PRIVATE: REGq NUMERIC "1" +-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: REGrren NUMERIC "0" +-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGwren NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +-- Retrieval info: PRIVATE: VarWidth NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "6" +-- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "6" +-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "6" +-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "6" +-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: enable NUMERIC "0" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256" +-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "256" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "OLD_DATA" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "OLD_DATA" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "6" +-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "6" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1" +-- Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: USED_PORT: address_a 0 0 8 0 INPUT NODEFVAL address_a[7..0] +-- Retrieval info: USED_PORT: address_b 0 0 8 0 INPUT NODEFVAL address_b[7..0] +-- Retrieval info: USED_PORT: clock_a 0 0 0 0 INPUT NODEFVAL clock_a +-- Retrieval info: USED_PORT: clock_b 0 0 0 0 INPUT NODEFVAL clock_b +-- Retrieval info: USED_PORT: data_a 0 0 6 0 INPUT NODEFVAL data_a[5..0] +-- Retrieval info: USED_PORT: data_b 0 0 6 0 INPUT NODEFVAL data_b[5..0] +-- Retrieval info: USED_PORT: q_a 0 0 6 0 OUTPUT NODEFVAL q_a[5..0] +-- Retrieval info: USED_PORT: q_b 0 0 6 0 OUTPUT NODEFVAL q_b[5..0] +-- Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT VCC wren_a +-- Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT VCC wren_b +-- Retrieval info: CONNECT: @data_a 0 0 6 0 data_a 0 0 6 0 +-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren_a 0 0 0 0 +-- Retrieval info: CONNECT: q_a 0 0 6 0 @q_a 0 0 6 0 +-- Retrieval info: CONNECT: q_b 0 0 6 0 @q_b 0 0 6 0 +-- Retrieval info: CONNECT: @address_a 0 0 8 0 address_a 0 0 8 0 +-- Retrieval info: CONNECT: @data_b 0 0 6 0 data_b 0 0 6 0 +-- Retrieval info: CONNECT: @address_b 0 0 8 0 address_b 0 0 8 0 +-- Retrieval info: CONNECT: @wren_b 0 0 0 0 wren_b 0 0 0 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock_a 0 0 0 0 +-- Retrieval info: CONNECT: @clock1 0 0 0 0 clock_b 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram1_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/altdpram2.bsf b/FPGA_quartus_GE/Video/altdpram2.bsf new file mode 100644 index 0000000..75c64aa --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram2.bsf @@ -0,0 +1,173 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 256 208) + (text "altdpram2" (rect 100 1 167 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 192 25 204)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data_a[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_a[7..0]" (rect 4 19 61 32)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 112 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "address_a[7..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_a[7..0]" (rect 4 35 75 48)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 112 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "wren_a" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_a" (rect 4 51 38 64)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 112 64)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_b[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data_b[7..0]" (rect 4 83 61 96)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 112 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "address_b[7..0]" (rect 0 0 89 14)(font "Arial" (font_size 8))) + (text "address_b[7..0]" (rect 4 99 75 112)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 112 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "wren_b" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "wren_b" (rect 4 115 38 128)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 112 128)(line_width 1)) + ) + (port + (pt 0 160) + (input) + (text "clock_a" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_a" (rect 4 147 39 160)(font "Arial" (font_size 8))) + (line (pt 0 160)(pt 176 160)(line_width 1)) + ) + (port + (pt 0 176) + (input) + (text "clock_b" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "clock_b" (rect 4 163 39 176)(font "Arial" (font_size 8))) + (line (pt 0 176)(pt 181 176)(line_width 1)) + ) + (port + (pt 256 32) + (output) + (text "q_a[7..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_a[7..0]" (rect 211 19 253 32)(font "Arial" (font_size 8))) + (line (pt 256 32)(pt 192 32)(line_width 3)) + ) + (port + (pt 256 96) + (output) + (text "q_b[7..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q_b[7..0]" (rect 211 83 253 96)(font "Arial" (font_size 8))) + (line (pt 256 96)(pt 192 96)(line_width 3)) + ) + (drawing + (text "256 Word(s)" (rect 136 58 148 109)(font "Arial" )(vertical)) + (text "RAM" (rect 149 74 161 94)(font "Arial" )(vertical)) + (text "Block Type: AUTO" (rect 41 188 119 200)(font "Arial" )) + (line (pt 128 24)(pt 168 24)(line_width 1)) + (line (pt 168 24)(pt 168 144)(line_width 1)) + (line (pt 168 144)(pt 128 144)(line_width 1)) + (line (pt 128 144)(pt 128 24)(line_width 1)) + (line (pt 112 27)(pt 120 27)(line_width 1)) + (line (pt 120 27)(pt 120 39)(line_width 1)) + (line (pt 120 39)(pt 112 39)(line_width 1)) + (line (pt 112 39)(pt 112 27)(line_width 1)) + (line (pt 112 34)(pt 114 36)(line_width 1)) + (line (pt 114 36)(pt 112 38)(line_width 1)) + (line (pt 92 36)(pt 112 36)(line_width 1)) + (line (pt 120 32)(pt 128 32)(line_width 3)) + (line (pt 112 43)(pt 120 43)(line_width 1)) + (line (pt 120 43)(pt 120 55)(line_width 1)) + (line (pt 120 55)(pt 112 55)(line_width 1)) + (line (pt 112 55)(pt 112 43)(line_width 1)) + (line (pt 112 50)(pt 114 52)(line_width 1)) + (line (pt 114 52)(pt 112 54)(line_width 1)) + (line (pt 92 52)(pt 112 52)(line_width 1)) + (line (pt 120 48)(pt 128 48)(line_width 3)) + (line (pt 112 59)(pt 120 59)(line_width 1)) + (line (pt 120 59)(pt 120 71)(line_width 1)) + (line (pt 120 71)(pt 112 71)(line_width 1)) + (line (pt 112 71)(pt 112 59)(line_width 1)) + (line (pt 112 66)(pt 114 68)(line_width 1)) + (line (pt 114 68)(pt 112 70)(line_width 1)) + (line (pt 92 68)(pt 112 68)(line_width 1)) + (line (pt 120 64)(pt 128 64)(line_width 1)) + (line (pt 112 91)(pt 120 91)(line_width 1)) + (line (pt 120 91)(pt 120 103)(line_width 1)) + (line (pt 120 103)(pt 112 103)(line_width 1)) + (line (pt 112 103)(pt 112 91)(line_width 1)) + (line (pt 112 98)(pt 114 100)(line_width 1)) + (line (pt 114 100)(pt 112 102)(line_width 1)) + (line (pt 104 100)(pt 112 100)(line_width 1)) + (line (pt 120 96)(pt 128 96)(line_width 3)) + (line (pt 112 107)(pt 120 107)(line_width 1)) + (line (pt 120 107)(pt 120 119)(line_width 1)) + (line (pt 120 119)(pt 112 119)(line_width 1)) + (line (pt 112 119)(pt 112 107)(line_width 1)) + (line (pt 112 114)(pt 114 116)(line_width 1)) + (line (pt 114 116)(pt 112 118)(line_width 1)) + (line (pt 104 116)(pt 112 116)(line_width 1)) + (line (pt 120 112)(pt 128 112)(line_width 3)) + (line (pt 112 123)(pt 120 123)(line_width 1)) + (line (pt 120 123)(pt 120 135)(line_width 1)) + (line (pt 120 135)(pt 112 135)(line_width 1)) + (line (pt 112 135)(pt 112 123)(line_width 1)) + (line (pt 112 130)(pt 114 132)(line_width 1)) + (line (pt 114 132)(pt 112 134)(line_width 1)) + (line (pt 104 132)(pt 112 132)(line_width 1)) + (line (pt 120 128)(pt 128 128)(line_width 1)) + (line (pt 92 36)(pt 92 161)(line_width 1)) + (line (pt 176 36)(pt 176 161)(line_width 1)) + (line (pt 104 100)(pt 104 177)(line_width 1)) + (line (pt 181 100)(pt 181 177)(line_width 1)) + (line (pt 184 27)(pt 192 27)(line_width 1)) + (line (pt 192 27)(pt 192 39)(line_width 1)) + (line (pt 192 39)(pt 184 39)(line_width 1)) + (line (pt 184 39)(pt 184 27)(line_width 1)) + (line (pt 184 34)(pt 186 36)(line_width 1)) + (line (pt 186 36)(pt 184 38)(line_width 1)) + (line (pt 176 36)(pt 184 36)(line_width 1)) + (line (pt 168 32)(pt 184 32)(line_width 3)) + (line (pt 184 91)(pt 192 91)(line_width 1)) + (line (pt 192 91)(pt 192 103)(line_width 1)) + (line (pt 192 103)(pt 184 103)(line_width 1)) + (line (pt 184 103)(pt 184 91)(line_width 1)) + (line (pt 184 98)(pt 186 100)(line_width 1)) + (line (pt 186 100)(pt 184 102)(line_width 1)) + (line (pt 181 100)(pt 184 100)(line_width 1)) + (line (pt 168 96)(pt 184 96)(line_width 3)) + ) +) diff --git a/FPGA_quartus_GE/Video/altdpram2.inc b/FPGA_quartus_GE/Video/altdpram2.inc new file mode 100644 index 0000000..1909de8 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram2.inc @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altdpram2 +( + address_a[7..0], + address_b[7..0], + clock_a, + clock_b, + data_a[7..0], + data_b[7..0], + wren_a, + wren_b +) + +RETURNS ( + q_a[7..0], + q_b[7..0] +); diff --git a/FPGA_quartus_GE/Video/altdpram2.qip b/FPGA_quartus_GE/Video/altdpram2.qip new file mode 100644 index 0000000..f84925c --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram2.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_RAM_DP+" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altdpram2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram2.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altdpram2.cmp"] diff --git a/FPGA_quartus_GE/Video/altdpram2.vhd b/FPGA_quartus_GE/Video/altdpram2.vhd new file mode 100644 index 0000000..238e6f3 --- /dev/null +++ b/FPGA_quartus_GE/Video/altdpram2.vhd @@ -0,0 +1,273 @@ +-- megafunction wizard: %LPM_RAM_DP+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altsyncram + +-- ============================================================ +-- File Name: altdpram2.vhd +-- Megafunction Name(s): +-- altsyncram +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altdpram2 IS + PORT + ( + address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + clock_a : IN STD_LOGIC ; + clock_b : IN STD_LOGIC ; + data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + wren_a : IN STD_LOGIC := '1'; + wren_b : IN STD_LOGIC := '1'; + q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END altdpram2; + + +ARCHITECTURE SYN OF altdpram2 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0); + + + + COMPONENT altsyncram + GENERIC ( + address_reg_b : STRING; + clock_enable_input_a : STRING; + clock_enable_input_b : STRING; + clock_enable_output_a : STRING; + clock_enable_output_b : STRING; + indata_reg_b : STRING; + intended_device_family : STRING; + lpm_type : STRING; + numwords_a : NATURAL; + numwords_b : NATURAL; + operation_mode : STRING; + outdata_aclr_a : STRING; + outdata_aclr_b : STRING; + outdata_reg_a : STRING; + outdata_reg_b : STRING; + power_up_uninitialized : STRING; + read_during_write_mode_port_a : STRING; + read_during_write_mode_port_b : STRING; + widthad_a : NATURAL; + widthad_b : NATURAL; + width_a : NATURAL; + width_b : NATURAL; + width_byteena_a : NATURAL; + width_byteena_b : NATURAL; + wrcontrol_wraddress_reg_b : STRING + ); + PORT ( + wren_a : IN STD_LOGIC ; + clock0 : IN STD_LOGIC ; + wren_b : IN STD_LOGIC ; + clock1 : IN STD_LOGIC ; + address_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q_a <= sub_wire0(7 DOWNTO 0); + q_b <= sub_wire1(7 DOWNTO 0); + + altsyncram_component : altsyncram + GENERIC MAP ( + address_reg_b => "CLOCK1", + clock_enable_input_a => "BYPASS", + clock_enable_input_b => "BYPASS", + clock_enable_output_a => "BYPASS", + clock_enable_output_b => "BYPASS", + indata_reg_b => "CLOCK1", + intended_device_family => "Cyclone III", + lpm_type => "altsyncram", + numwords_a => 256, + numwords_b => 256, + operation_mode => "BIDIR_DUAL_PORT", + outdata_aclr_a => "NONE", + outdata_aclr_b => "NONE", + outdata_reg_a => "CLOCK0", + outdata_reg_b => "CLOCK1", + power_up_uninitialized => "FALSE", + read_during_write_mode_port_a => "OLD_DATA", + read_during_write_mode_port_b => "OLD_DATA", + widthad_a => 8, + widthad_b => 8, + width_a => 8, + width_b => 8, + width_byteena_a => 1, + width_byteena_b => 1, + wrcontrol_wraddress_reg_b => "CLOCK1" + ) + PORT MAP ( + wren_a => wren_a, + clock0 => clock_a, + wren_b => wren_b, + clock1 => clock_b, + address_a => address_a, + address_b => address_b, + data_a => data_a, + data_b => data_b, + q_a => sub_wire0, + q_b => sub_wire1 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0" +-- Retrieval info: PRIVATE: ADDRESSSTALL_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTEENA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_A NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_ENABLE_B NUMERIC "0" +-- Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8" +-- Retrieval info: PRIVATE: BlankMemory NUMERIC "1" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0" +-- Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_B NUMERIC "0" +-- Retrieval info: PRIVATE: CLRdata NUMERIC "0" +-- Retrieval info: PRIVATE: CLRq NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRrren NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwraddress NUMERIC "0" +-- Retrieval info: PRIVATE: CLRwren NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "5" +-- Retrieval info: PRIVATE: Clock_A NUMERIC "0" +-- Retrieval info: PRIVATE: Clock_B NUMERIC "0" +-- Retrieval info: PRIVATE: ECC NUMERIC "0" +-- Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: INDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A" +-- Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0" +-- Retrieval info: PRIVATE: MEMSIZE NUMERIC "2048" +-- Retrieval info: PRIVATE: MEM_IN_BITS NUMERIC "0" +-- Retrieval info: PRIVATE: MIFfilename STRING "" +-- Retrieval info: PRIVATE: OPERATION_MODE NUMERIC "3" +-- Retrieval info: PRIVATE: OUTDATA_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: OUTDATA_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_MIXED_PORTS NUMERIC "2" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "1" +-- Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_B NUMERIC "1" +-- Retrieval info: PRIVATE: REGdata NUMERIC "1" +-- Retrieval info: PRIVATE: REGq NUMERIC "1" +-- Retrieval info: PRIVATE: REGrdaddress NUMERIC "0" +-- Retrieval info: PRIVATE: REGrren NUMERIC "0" +-- Retrieval info: PRIVATE: REGwraddress NUMERIC "1" +-- Retrieval info: PRIVATE: REGwren NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_DIFF_CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: UseDPRAM NUMERIC "1" +-- Retrieval info: PRIVATE: VarWidth NUMERIC "0" +-- Retrieval info: PRIVATE: WIDTH_READ_A NUMERIC "8" +-- Retrieval info: PRIVATE: WIDTH_READ_B NUMERIC "8" +-- Retrieval info: PRIVATE: WIDTH_WRITE_A NUMERIC "8" +-- Retrieval info: PRIVATE: WIDTH_WRITE_B NUMERIC "8" +-- Retrieval info: PRIVATE: WRADDR_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: WRADDR_REG_B NUMERIC "1" +-- Retrieval info: PRIVATE: WRCTRL_ACLR_B NUMERIC "0" +-- Retrieval info: PRIVATE: enable NUMERIC "0" +-- Retrieval info: PRIVATE: rden NUMERIC "0" +-- Retrieval info: CONSTANT: ADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS" +-- Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_B STRING "BYPASS" +-- Retrieval info: CONSTANT: INDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram" +-- Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "256" +-- Retrieval info: CONSTANT: NUMWORDS_B NUMERIC "256" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "BIDIR_DUAL_PORT" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_ACLR_B STRING "NONE" +-- Retrieval info: CONSTANT: OUTDATA_REG_A STRING "CLOCK0" +-- Retrieval info: CONSTANT: OUTDATA_REG_B STRING "CLOCK1" +-- Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "OLD_DATA" +-- Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_B STRING "OLD_DATA" +-- Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTHAD_B NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTH_A NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTH_B NUMERIC "8" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "1" +-- Retrieval info: CONSTANT: WIDTH_BYTEENA_B NUMERIC "1" +-- Retrieval info: CONSTANT: WRCONTROL_WRADDRESS_REG_B STRING "CLOCK1" +-- Retrieval info: USED_PORT: address_a 0 0 8 0 INPUT NODEFVAL address_a[7..0] +-- Retrieval info: USED_PORT: address_b 0 0 8 0 INPUT NODEFVAL address_b[7..0] +-- Retrieval info: USED_PORT: clock_a 0 0 0 0 INPUT NODEFVAL clock_a +-- Retrieval info: USED_PORT: clock_b 0 0 0 0 INPUT NODEFVAL clock_b +-- Retrieval info: USED_PORT: data_a 0 0 8 0 INPUT NODEFVAL data_a[7..0] +-- Retrieval info: USED_PORT: data_b 0 0 8 0 INPUT NODEFVAL data_b[7..0] +-- Retrieval info: USED_PORT: q_a 0 0 8 0 OUTPUT NODEFVAL q_a[7..0] +-- Retrieval info: USED_PORT: q_b 0 0 8 0 OUTPUT NODEFVAL q_b[7..0] +-- Retrieval info: USED_PORT: wren_a 0 0 0 0 INPUT VCC wren_a +-- Retrieval info: USED_PORT: wren_b 0 0 0 0 INPUT VCC wren_b +-- Retrieval info: CONNECT: @data_a 0 0 8 0 data_a 0 0 8 0 +-- Retrieval info: CONNECT: @wren_a 0 0 0 0 wren_a 0 0 0 0 +-- Retrieval info: CONNECT: q_a 0 0 8 0 @q_a 0 0 8 0 +-- Retrieval info: CONNECT: q_b 0 0 8 0 @q_b 0 0 8 0 +-- Retrieval info: CONNECT: @address_a 0 0 8 0 address_a 0 0 8 0 +-- Retrieval info: CONNECT: @data_b 0 0 8 0 data_b 0 0 8 0 +-- Retrieval info: CONNECT: @address_b 0 0 8 0 address_b 0 0 8 0 +-- Retrieval info: CONNECT: @wren_b 0 0 0 0 wren_b 0 0 0 0 +-- Retrieval info: CONNECT: @clock0 0 0 0 0 clock_a 0 0 0 0 +-- Retrieval info: CONNECT: @clock1 0 0 0 0 clock_b 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altdpram2_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/lpm_bustri0.bsf b/FPGA_quartus_GE/Video/lpm_bustri0.bsf new file mode 100644 index 0000000..f65e217 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri0.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri0" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect -3 -27 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect 84 -36 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "32" (rect 61 25 71 37)(font "Arial" )) + (text "32" (rect 13 25 23 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 56 28)(pt 64 20)(line_width 1)) + (line (pt 8 28)(pt 16 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri0.inc b/FPGA_quartus_GE/Video/lpm_bustri0.inc new file mode 100644 index 0000000..1b15c22 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri0.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri0 +( + data[31..0], + enabledt +) + +RETURNS ( + tridata[31..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_bustri0.qip b/FPGA_quartus_GE/Video/lpm_bustri0.qip new file mode 100644 index 0000000..c70041d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri0.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri0.vhd b/FPGA_quartus_GE/Video/lpm_bustri0.vhd new file mode 100644 index 0000000..494b3c2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri0.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri0.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri0 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_bustri0; + + +ARCHITECTURE SYN OF lpm_bustri0 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 32 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 32 0 BIDIR NODEFVAL tridata[31..0] +-- Retrieval info: CONNECT: tridata 0 0 32 0 @tridata 0 0 32 0 +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri1.bsf b/FPGA_quartus_GE/Video/lpm_bustri1.bsf new file mode 100644 index 0000000..058fffb --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri1.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri1" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[2..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[2..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[2..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[2..0]" (rect 84 -30 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "3" (rect 63 25 68 37)(font "Arial" )) + (text "3" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri1.qip b/FPGA_quartus_GE/Video/lpm_bustri1.qip new file mode 100644 index 0000000..fd76bb2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri1.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri1.vhd b/FPGA_quartus_GE/Video/lpm_bustri1.vhd new file mode 100644 index 0000000..47db597 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri1.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri1.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri1 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (2 DOWNTO 0) + ); +END lpm_bustri1; + + +ARCHITECTURE SYN OF lpm_bustri1 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (2 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 3 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "3" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "3" +-- Retrieval info: USED_PORT: data 0 0 3 0 INPUT NODEFVAL data[2..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 3 0 BIDIR NODEFVAL tridata[2..0] +-- Retrieval info: CONNECT: tridata 0 0 3 0 @tridata 0 0 3 0 +-- Retrieval info: CONNECT: @data 0 0 3 0 data 0 0 3 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri2.bsf b/FPGA_quartus_GE/Video/lpm_bustri2.bsf new file mode 100644 index 0000000..36a4813 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri2.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri2" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[17..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[17..0]" (rect -3 -27 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[17..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "tridata[17..0]" (rect 84 -36 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "18" (rect 61 25 71 37)(font "Arial" )) + (text "18" (rect 13 25 23 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 56 28)(pt 64 20)(line_width 1)) + (line (pt 8 28)(pt 16 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri2.qip b/FPGA_quartus_GE/Video/lpm_bustri2.qip new file mode 100644 index 0000000..676e430 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri2.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri2.vhd b/FPGA_quartus_GE/Video/lpm_bustri2.vhd new file mode 100644 index 0000000..0966743 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri2.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri2.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri2 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (17 DOWNTO 0) + ); +END lpm_bustri2; + + +ARCHITECTURE SYN OF lpm_bustri2 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (17 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (17 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 18 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "18" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "18" +-- Retrieval info: USED_PORT: data 0 0 18 0 INPUT NODEFVAL data[17..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 18 0 BIDIR NODEFVAL tridata[17..0] +-- Retrieval info: CONNECT: tridata 0 0 18 0 @tridata 0 0 18 0 +-- Retrieval info: CONNECT: @data 0 0 18 0 data 0 0 18 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri2.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri3.bsf b/FPGA_quartus_GE/Video/lpm_bustri3.bsf new file mode 100644 index 0000000..2dde401 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri3.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri3" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[5..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[5..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[5..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[5..0]" (rect 84 -30 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "6" (rect 63 25 68 37)(font "Arial" )) + (text "6" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri3.qip b/FPGA_quartus_GE/Video/lpm_bustri3.qip new file mode 100644 index 0000000..8c41556 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri3.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri3.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri3.vhd b/FPGA_quartus_GE/Video/lpm_bustri3.vhd new file mode 100644 index 0000000..2344712 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri3.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri3.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri3 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); +END lpm_bustri3; + + +ARCHITECTURE SYN OF lpm_bustri3 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (5 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (5 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 6 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "6" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "6" +-- Retrieval info: USED_PORT: data 0 0 6 0 INPUT NODEFVAL data[5..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 6 0 BIDIR NODEFVAL tridata[5..0] +-- Retrieval info: CONNECT: tridata 0 0 6 0 @tridata 0 0 6 0 +-- Retrieval info: CONNECT: @data 0 0 6 0 data 0 0 6 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri3.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri4.bsf b/FPGA_quartus_GE/Video/lpm_bustri4.bsf new file mode 100644 index 0000000..cd9edcc --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri4.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri4" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[4..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[4..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[4..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[4..0]" (rect 84 -30 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "5" (rect 63 25 68 37)(font "Arial" )) + (text "5" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri4.qip b/FPGA_quartus_GE/Video/lpm_bustri4.qip new file mode 100644 index 0000000..39eb21d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri4.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri4.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri4.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri4.vhd b/FPGA_quartus_GE/Video/lpm_bustri4.vhd new file mode 100644 index 0000000..5bb209b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri4.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri4.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri4 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (4 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); +END lpm_bustri4; + + +ARCHITECTURE SYN OF lpm_bustri4 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (4 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 5 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "5" +-- Retrieval info: USED_PORT: data 0 0 5 0 INPUT NODEFVAL data[4..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 5 0 BIDIR NODEFVAL tridata[4..0] +-- Retrieval info: CONNECT: tridata 0 0 5 0 @tridata 0 0 5 0 +-- Retrieval info: CONNECT: @data 0 0 5 0 data 0 0 5 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri4.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri4.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri4_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri5.bsf b/FPGA_quartus_GE/Video/lpm_bustri5.bsf new file mode 100644 index 0000000..1d9b178 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri5.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri5" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[7..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[7..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[7..0]" (rect 84 -30 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "8" (rect 63 25 68 37)(font "Arial" )) + (text "8" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri5.inc b/FPGA_quartus_GE/Video/lpm_bustri5.inc new file mode 100644 index 0000000..fdb4877 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri5.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri5 +( + data[7..0], + enabledt +) + +RETURNS ( + tridata[7..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_bustri5.qip b/FPGA_quartus_GE/Video/lpm_bustri5.qip new file mode 100644 index 0000000..daa3efa --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri5.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri5.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri5.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri5.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri5.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri5.vhd b/FPGA_quartus_GE/Video/lpm_bustri5.vhd new file mode 100644 index 0000000..e1973b4 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri5.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri5.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri5 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END lpm_bustri5; + + +ARCHITECTURE SYN OF lpm_bustri5 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 8 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 8 0 BIDIR NODEFVAL tridata[7..0] +-- Retrieval info: CONNECT: tridata 0 0 8 0 @tridata 0 0 8 0 +-- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri5.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri5.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri5.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri5.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri5_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri6.bsf b/FPGA_quartus_GE/Video/lpm_bustri6.bsf new file mode 100644 index 0000000..4c9344e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri6.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri6" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[23..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect -3 -27 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[23..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "tridata[23..0]" (rect 84 -36 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "24" (rect 61 25 71 37)(font "Arial" )) + (text "24" (rect 13 25 23 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 56 28)(pt 64 20)(line_width 1)) + (line (pt 8 28)(pt 16 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri6.qip b/FPGA_quartus_GE/Video/lpm_bustri6.qip new file mode 100644 index 0000000..6b9f1df --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri6.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri6.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri6.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri6.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri6.vhd b/FPGA_quartus_GE/Video/lpm_bustri6.vhd new file mode 100644 index 0000000..45f409f --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri6.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri6.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri6 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (23 DOWNTO 0) + ); +END lpm_bustri6; + + +ARCHITECTURE SYN OF lpm_bustri6 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (23 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 24 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "24" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "24" +-- Retrieval info: USED_PORT: data 0 0 24 0 INPUT NODEFVAL data[23..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 24 0 BIDIR NODEFVAL tridata[23..0] +-- Retrieval info: CONNECT: tridata 0 0 24 0 @tridata 0 0 24 0 +-- Retrieval info: CONNECT: @data 0 0 24 0 data 0 0 24 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri6.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri6.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri6.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri6.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri6_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_bustri7.bsf b/FPGA_quartus_GE/Video/lpm_bustri7.bsf new file mode 100644 index 0000000..399a828 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri7.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 40) + (text "lpm_bustri7" (rect 7 1 86 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[3..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[3..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 80 24) + (bidir) + (text "tridata[3..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[3..0]" (rect 84 -30 97 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 80 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "4" (rect 63 25 68 37)(font "Arial" )) + (text "4" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 58 28)(pt 66 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_bustri7.qip b/FPGA_quartus_GE/Video/lpm_bustri7.qip new file mode 100644 index 0000000..f32324c --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri7.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri7.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri7.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri7.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_bustri7.vhd b/FPGA_quartus_GE/Video/lpm_bustri7.vhd new file mode 100644 index 0000000..4bf883d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_bustri7.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri7.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri7 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (3 DOWNTO 0) + ); +END lpm_bustri7; + + +ARCHITECTURE SYN OF lpm_bustri7 IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (3 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 4 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "4" +-- Retrieval info: USED_PORT: data 0 0 4 0 INPUT NODEFVAL data[3..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 4 0 BIDIR NODEFVAL tridata[3..0] +-- Retrieval info: CONNECT: tridata 0 0 4 0 @tridata 0 0 4 0 +-- Retrieval info: CONNECT: @data 0 0 4 0 data 0 0 4 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri7.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri7.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri7.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri7.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri7_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_compare1.bsf b/FPGA_quartus_GE/Video/lpm_compare1.bsf new file mode 100644 index 0000000..9ec3796 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_compare1.bsf @@ -0,0 +1,54 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 128 96) + (text "lpm_compare1" (rect 22 1 122 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 48) + (input) + (text "dataa[10..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "dataa[10..0]" (rect 20 42 77 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 64) + (input) + (text "datab[10..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "datab[10..0]" (rect 20 58 77 71)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 3)) + ) + (port + (pt 128 56) + (output) + (text "agb" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "agb" (rect 91 50 109 63)(font "Arial" (font_size 8))) + (line (pt 128 56)(pt 112 56)(line_width 1)) + ) + (drawing + (text "unsigned compare" (rect 36 17 112 29)(font "Arial" )) + (line (pt 16 16)(pt 112 16)(line_width 1)) + (line (pt 112 16)(pt 112 80)(line_width 1)) + (line (pt 112 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_compare1.inc b/FPGA_quartus_GE/Video/lpm_compare1.inc new file mode 100644 index 0000000..bde0ab9 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_compare1.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_compare1 +( + dataa[10..0], + datab[10..0] +) + +RETURNS ( + AgB +); diff --git a/FPGA_quartus_GE/Video/lpm_compare1.qip b/FPGA_quartus_GE/Video/lpm_compare1.qip new file mode 100644 index 0000000..ea93f3c --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_compare1.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_COMPARE" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_compare1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_compare1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_compare1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_compare1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_compare1.vhd b/FPGA_quartus_GE/Video/lpm_compare1.vhd new file mode 100644 index 0000000..a85e3b2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_compare1.vhd @@ -0,0 +1,127 @@ +-- megafunction wizard: %LPM_COMPARE% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_compare + +-- ============================================================ +-- File Name: lpm_compare1.vhd +-- Megafunction Name(s): +-- lpm_compare +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_compare1 IS + PORT + ( + dataa : IN STD_LOGIC_VECTOR (10 DOWNTO 0); + datab : IN STD_LOGIC_VECTOR (10 DOWNTO 0); + AgB : OUT STD_LOGIC + ); +END lpm_compare1; + + +ARCHITECTURE SYN OF lpm_compare1 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + + + + COMPONENT lpm_compare + GENERIC ( + lpm_representation : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + dataa : IN STD_LOGIC_VECTOR (10 DOWNTO 0); + datab : IN STD_LOGIC_VECTOR (10 DOWNTO 0); + AgB : OUT STD_LOGIC + ); + END COMPONENT; + +BEGIN + AgB <= sub_wire0; + + lpm_compare_component : lpm_compare + GENERIC MAP ( + lpm_representation => "UNSIGNED", + lpm_type => "LPM_COMPARE", + lpm_width => 11 + ) + PORT MAP ( + dataa => dataa, + datab => datab, + AgB => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AeqB NUMERIC "0" +-- Retrieval info: PRIVATE: AgeB NUMERIC "0" +-- Retrieval info: PRIVATE: AgtB NUMERIC "1" +-- Retrieval info: PRIVATE: AleB NUMERIC "0" +-- Retrieval info: PRIVATE: AltB NUMERIC "0" +-- Retrieval info: PRIVATE: AneB NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LPM_PIPELINE NUMERIC "0" +-- Retrieval info: PRIVATE: Latency NUMERIC "0" +-- Retrieval info: PRIVATE: PortBValue NUMERIC "0" +-- Retrieval info: PRIVATE: Radix NUMERIC "10" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SignedCompare NUMERIC "0" +-- Retrieval info: PRIVATE: aclr NUMERIC "0" +-- Retrieval info: PRIVATE: clken NUMERIC "0" +-- Retrieval info: PRIVATE: isPortBConstant NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "11" +-- Retrieval info: CONSTANT: LPM_REPRESENTATION STRING "UNSIGNED" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_COMPARE" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "11" +-- Retrieval info: USED_PORT: AgB 0 0 0 0 OUTPUT NODEFVAL AgB +-- Retrieval info: USED_PORT: dataa 0 0 11 0 INPUT NODEFVAL dataa[10..0] +-- Retrieval info: USED_PORT: datab 0 0 11 0 INPUT NODEFVAL datab[10..0] +-- Retrieval info: CONNECT: AgB 0 0 0 0 @AgB 0 0 0 0 +-- Retrieval info: CONNECT: @dataa 0 0 11 0 dataa 0 0 11 0 +-- Retrieval info: CONNECT: @datab 0 0 11 0 datab 0 0 11 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_compare1_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_constant0.bsf b/FPGA_quartus_GE/Video/lpm_constant0.bsf new file mode 100644 index 0000000..684bbae --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant0.bsf @@ -0,0 +1,42 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 48) + (text "lpm_constant0" (rect 6 1 106 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 32 25 44)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[4..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[4..0]" (rect 93 -25 106 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 80 30)(font "Arial" )) + (text "5" (rect 87 25 92 37)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_constant0.qip b/FPGA_quartus_GE/Video/lpm_constant0.qip new file mode 100644 index 0000000..bb19c49 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_constant0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_constant0.vhd b/FPGA_quartus_GE/Video/lpm_constant0.vhd new file mode 100644 index 0000000..63631cc --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant0.vhd @@ -0,0 +1,108 @@ +-- megafunction wizard: %LPM_CONSTANT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_constant + +-- ============================================================ +-- File Name: lpm_constant0.vhd +-- Megafunction Name(s): +-- lpm_constant +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_constant0 IS + PORT + ( + result : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); +END lpm_constant0; + + +ARCHITECTURE SYN OF lpm_constant0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + + + + COMPONENT lpm_constant + GENERIC ( + lpm_cvalue : NATURAL; + lpm_hint : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + result : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + result <= sub_wire0(4 DOWNTO 0); + + lpm_constant_component : lpm_constant + GENERIC MAP ( + lpm_cvalue => 0, + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "LPM_CONSTANT", + lpm_width => 5 + ) + PORT MAP ( + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: Radix NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: Value NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "0" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "5" +-- Retrieval info: USED_PORT: result 0 0 5 0 OUTPUT NODEFVAL result[4..0] +-- Retrieval info: CONNECT: result 0 0 5 0 @result 0 0 5 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_constant1.bsf b/FPGA_quartus_GE/Video/lpm_constant1.bsf new file mode 100644 index 0000000..01fdb2b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant1.bsf @@ -0,0 +1,42 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 48) + (text "lpm_constant1" (rect 6 1 106 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 32 25 44)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[1..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[1..0]" (rect 93 -25 106 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 80 30)(font "Arial" )) + (text "2" (rect 87 25 92 37)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_constant1.inc b/FPGA_quartus_GE/Video/lpm_constant1.inc new file mode 100644 index 0000000..9b556e7 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant1.inc @@ -0,0 +1,23 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_constant1 +( + +) + +RETURNS ( + result[1..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_constant1.qip b/FPGA_quartus_GE/Video/lpm_constant1.qip new file mode 100644 index 0000000..2bc12e7 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant1.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_constant1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_constant1.vhd b/FPGA_quartus_GE/Video/lpm_constant1.vhd new file mode 100644 index 0000000..afa67ba --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant1.vhd @@ -0,0 +1,108 @@ +-- megafunction wizard: %LPM_CONSTANT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_constant + +-- ============================================================ +-- File Name: lpm_constant1.vhd +-- Megafunction Name(s): +-- lpm_constant +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_constant1 IS + PORT + ( + result : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END lpm_constant1; + + +ARCHITECTURE SYN OF lpm_constant1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (1 DOWNTO 0); + + + + COMPONENT lpm_constant + GENERIC ( + lpm_cvalue : NATURAL; + lpm_hint : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + result : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + result <= sub_wire0(1 DOWNTO 0); + + lpm_constant_component : lpm_constant + GENERIC MAP ( + lpm_cvalue => 0, + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "LPM_CONSTANT", + lpm_width => 2 + ) + PORT MAP ( + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: Radix NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: Value NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "0" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "2" +-- Retrieval info: USED_PORT: result 0 0 2 0 OUTPUT NODEFVAL result[1..0] +-- Retrieval info: CONNECT: result 0 0 2 0 @result 0 0 2 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_constant2.bsf b/FPGA_quartus_GE/Video/lpm_constant2.bsf new file mode 100644 index 0000000..a4b7697 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant2.bsf @@ -0,0 +1,42 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 48) + (text "lpm_constant2" (rect 6 1 106 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 32 25 44)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[7..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[7..0]" (rect 93 -25 106 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 80 30)(font "Arial" )) + (text "8" (rect 87 25 92 37)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_constant2.qip b/FPGA_quartus_GE/Video/lpm_constant2.qip new file mode 100644 index 0000000..ad38485 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant2.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_constant2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_constant2.vhd b/FPGA_quartus_GE/Video/lpm_constant2.vhd new file mode 100644 index 0000000..f25e68f --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant2.vhd @@ -0,0 +1,108 @@ +-- megafunction wizard: %LPM_CONSTANT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_constant + +-- ============================================================ +-- File Name: lpm_constant2.vhd +-- Megafunction Name(s): +-- lpm_constant +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_constant2 IS + PORT + ( + result : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END lpm_constant2; + + +ARCHITECTURE SYN OF lpm_constant2 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + + + + COMPONENT lpm_constant + GENERIC ( + lpm_cvalue : NATURAL; + lpm_hint : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + result : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + result <= sub_wire0(7 DOWNTO 0); + + lpm_constant_component : lpm_constant + GENERIC MAP ( + lpm_cvalue => 0, + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "LPM_CONSTANT", + lpm_width => 8 + ) + PORT MAP ( + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: Radix NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: Value NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "0" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: USED_PORT: result 0 0 8 0 OUTPUT NODEFVAL result[7..0] +-- Retrieval info: CONNECT: result 0 0 8 0 @result 0 0 8 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant2.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_constant3.bsf b/FPGA_quartus_GE/Video/lpm_constant3.bsf new file mode 100644 index 0000000..7616869 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant3.bsf @@ -0,0 +1,42 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 48) + (text "lpm_constant3" (rect 6 1 106 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 32 25 44)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[6..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[6..0]" (rect 93 -25 106 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "0" (rect 75 18 80 30)(font "Arial" )) + (text "7" (rect 87 25 92 37)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 82 28)(pt 90 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_constant3.qip b/FPGA_quartus_GE/Video/lpm_constant3.qip new file mode 100644 index 0000000..615a781 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant3.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_constant3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant3.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_constant3.vhd b/FPGA_quartus_GE/Video/lpm_constant3.vhd new file mode 100644 index 0000000..5d47d8e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant3.vhd @@ -0,0 +1,108 @@ +-- megafunction wizard: %LPM_CONSTANT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_constant + +-- ============================================================ +-- File Name: lpm_constant3.vhd +-- Megafunction Name(s): +-- lpm_constant +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_constant3 IS + PORT + ( + result : OUT STD_LOGIC_VECTOR (6 DOWNTO 0) + ); +END lpm_constant3; + + +ARCHITECTURE SYN OF lpm_constant3 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (6 DOWNTO 0); + + + + COMPONENT lpm_constant + GENERIC ( + lpm_cvalue : NATURAL; + lpm_hint : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + result : OUT STD_LOGIC_VECTOR (6 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + result <= sub_wire0(6 DOWNTO 0); + + lpm_constant_component : lpm_constant + GENERIC MAP ( + lpm_cvalue => 0, + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "LPM_CONSTANT", + lpm_width => 7 + ) + PORT MAP ( + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: Radix NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: Value NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "7" +-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "0" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "7" +-- Retrieval info: USED_PORT: result 0 0 7 0 OUTPUT NODEFVAL result[6..0] +-- Retrieval info: CONNECT: result 0 0 7 0 @result 0 0 7 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant3.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_constant4.bsf b/FPGA_quartus_GE/Video/lpm_constant4.bsf new file mode 100644 index 0000000..181c667 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant4.bsf @@ -0,0 +1,42 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 48) + (text "lpm_constant4" (rect 6 1 106 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 32 25 44)(font "Arial" )) + (port + (pt 96 24) + (output) + (text "result[10..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "result[10..0]" (rect 93 -31 106 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 80 24)(line_width 3)) + ) + (drawing + (text "2040" (rect 60 18 80 30)(font "Arial" )) + (text "11" (rect 85 25 95 37)(font "Arial" )) + (line (pt 16 16)(pt 80 16)(line_width 1)) + (line (pt 80 16)(pt 80 32)(line_width 1)) + (line (pt 80 32)(pt 16 32)(line_width 1)) + (line (pt 16 32)(pt 16 16)(line_width 1)) + (line (pt 80 28)(pt 88 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_constant4.inc b/FPGA_quartus_GE/Video/lpm_constant4.inc new file mode 100644 index 0000000..a913739 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant4.inc @@ -0,0 +1,23 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_constant4 +( + +) + +RETURNS ( + result[10..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_constant4.qip b/FPGA_quartus_GE/Video/lpm_constant4.qip new file mode 100644 index 0000000..44fa63f --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant4.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_CONSTANT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_constant4.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant4.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_constant4.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_constant4.vhd b/FPGA_quartus_GE/Video/lpm_constant4.vhd new file mode 100644 index 0000000..e0fc73d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_constant4.vhd @@ -0,0 +1,108 @@ +-- megafunction wizard: %LPM_CONSTANT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_constant + +-- ============================================================ +-- File Name: lpm_constant4.vhd +-- Megafunction Name(s): +-- lpm_constant +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_constant4 IS + PORT + ( + result : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) + ); +END lpm_constant4; + + +ARCHITECTURE SYN OF lpm_constant4 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (10 DOWNTO 0); + + + + COMPONENT lpm_constant + GENERIC ( + lpm_cvalue : NATURAL; + lpm_hint : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + result : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + result <= sub_wire0(10 DOWNTO 0); + + lpm_constant_component : lpm_constant + GENERIC MAP ( + lpm_cvalue => 2040, + lpm_hint => "ENABLE_RUNTIME_MOD=NO", + lpm_type => "LPM_CONSTANT", + lpm_width => 11 + ) + PORT MAP ( + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0" +-- Retrieval info: PRIVATE: JTAG_ID STRING "NONE" +-- Retrieval info: PRIVATE: Radix NUMERIC "10" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: Value NUMERIC "2040" +-- Retrieval info: PRIVATE: nBit NUMERIC "11" +-- Retrieval info: CONSTANT: LPM_CVALUE NUMERIC "2040" +-- Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_CONSTANT" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "11" +-- Retrieval info: USED_PORT: result 0 0 11 0 OUTPUT NODEFVAL result[10..0] +-- Retrieval info: CONNECT: result 0 0 11 0 @result 0 0 11 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant4.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant4.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_constant4_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff0.bsf b/FPGA_quartus_GE/Video/lpm_ff0.bsf new file mode 100644 index 0000000..6675606 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff0.bsf @@ -0,0 +1,63 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 96) + (text "lpm_ff0" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 37 14)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 53 71)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 125 63)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff0.qip b/FPGA_quartus_GE/Video/lpm_ff0.qip new file mode 100644 index 0000000..d33c680 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff0.vhd b/FPGA_quartus_GE/Video/lpm_ff0.vhd new file mode 100644 index 0000000..4c17d8f --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff0.vhd @@ -0,0 +1,127 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff0.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff0 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + enable : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_ff0; + + +ARCHITECTURE SYN OF lpm_ff0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enable : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(31 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 32 + ) + PORT MAP ( + enable => enable, + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "1" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: enable 0 0 0 0 INPUT NODEFVAL enable +-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +-- Retrieval info: CONNECT: @enable 0 0 0 0 enable 0 0 0 0 +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff1.bsf b/FPGA_quartus_GE/Video/lpm_ff1.bsf new file mode 100644 index 0000000..947a023 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff1.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_ff1" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[31..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff1.qip b/FPGA_quartus_GE/Video/lpm_ff1.qip new file mode 100644 index 0000000..94b30af --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff1.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff1.vhd b/FPGA_quartus_GE/Video/lpm_ff1.vhd new file mode 100644 index 0000000..da02a15 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff1.vhd @@ -0,0 +1,122 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff1.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff1 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_ff1; + + +ARCHITECTURE SYN OF lpm_ff1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(31 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 32 + ) + PORT MAP ( + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff2.bsf b/FPGA_quartus_GE/Video/lpm_ff2.bsf new file mode 100644 index 0000000..b52c75b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff2.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_ff2" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 77 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[127..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 83 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff2.qip b/FPGA_quartus_GE/Video/lpm_ff2.qip new file mode 100644 index 0000000..9c46273 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff2.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff2.vhd b/FPGA_quartus_GE/Video/lpm_ff2.vhd new file mode 100644 index 0000000..27b4c3a --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff2.vhd @@ -0,0 +1,122 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff2.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff2 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0) + ); +END lpm_ff2; + + +ARCHITECTURE SYN OF lpm_ff2 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (127 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(127 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 128 + ) + PORT MAP ( + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 128 0 INPUT NODEFVAL data[127..0] +-- Retrieval info: USED_PORT: q 0 0 128 0 OUTPUT NODEFVAL q[127..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 128 0 @q 0 0 128 0 +-- Retrieval info: CONNECT: @data 0 0 128 0 data 0 0 128 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff2.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff3.bsf b/FPGA_quartus_GE/Video/lpm_ff3.bsf new file mode 100644 index 0000000..51248ea --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff3.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_ff3" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[23..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[23..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[23..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[23..0]" (rect 89 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff3.qip b/FPGA_quartus_GE/Video/lpm_ff3.qip new file mode 100644 index 0000000..98d1312 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff3.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff3.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff3.vhd b/FPGA_quartus_GE/Video/lpm_ff3.vhd new file mode 100644 index 0000000..a86b4ee --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff3.vhd @@ -0,0 +1,122 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff3.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff3 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR (23 DOWNTO 0) + ); +END lpm_ff3; + + +ARCHITECTURE SYN OF lpm_ff3 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (23 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (23 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (23 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(23 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 24 + ) + PORT MAP ( + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "24" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "24" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 24 0 INPUT NODEFVAL data[23..0] +-- Retrieval info: USED_PORT: q 0 0 24 0 OUTPUT NODEFVAL q[23..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 24 0 @q 0 0 24 0 +-- Retrieval info: CONNECT: @data 0 0 24 0 data 0 0 24 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff3.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff4.bsf b/FPGA_quartus_GE/Video/lpm_ff4.bsf new file mode 100644 index 0000000..be432cb --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff4.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_ff4" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[15..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[15..0]" (rect 89 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff4.inc b/FPGA_quartus_GE/Video/lpm_ff4.inc new file mode 100644 index 0000000..ea243d6 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff4.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_ff4 +( + clock, + data[15..0] +) + +RETURNS ( + q[15..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_ff4.qip b/FPGA_quartus_GE/Video/lpm_ff4.qip new file mode 100644 index 0000000..f5a0a35 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff4.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff4.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff4.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff4.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff4.vhd b/FPGA_quartus_GE/Video/lpm_ff4.vhd new file mode 100644 index 0000000..a738a64 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff4.vhd @@ -0,0 +1,122 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff4.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff4 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); +END lpm_ff4; + + +ARCHITECTURE SYN OF lpm_ff4 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (15 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (15 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(15 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 16 + ) + PORT MAP ( + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +-- Retrieval info: USED_PORT: q 0 0 16 0 OUTPUT NODEFVAL q[15..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 16 0 @q 0 0 16 0 +-- Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff4.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff4.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff4_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff5.bsf b/FPGA_quartus_GE/Video/lpm_ff5.bsf new file mode 100644 index 0000000..a69af6e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff5.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_ff5" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[7..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect 20 26 65 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[7..0]" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "q[7..0]" (rect 95 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff5.inc b/FPGA_quartus_GE/Video/lpm_ff5.inc new file mode 100644 index 0000000..f65f941 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff5.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_ff5 +( + clock, + data[7..0] +) + +RETURNS ( + q[7..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_ff5.qip b/FPGA_quartus_GE/Video/lpm_ff5.qip new file mode 100644 index 0000000..0d13267 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff5.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff5.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff5.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff5.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff5.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff5.vhd b/FPGA_quartus_GE/Video/lpm_ff5.vhd new file mode 100644 index 0000000..96063a2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff5.vhd @@ -0,0 +1,122 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff5.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff5 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END lpm_ff5; + + +ARCHITECTURE SYN OF lpm_ff5 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(7 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 8 + ) + PORT MAP ( + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] +-- Retrieval info: USED_PORT: q 0 0 8 0 OUTPUT NODEFVAL q[7..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 8 0 @q 0 0 8 0 +-- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff5.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff5.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff5.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff5.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff5_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_ff6.bsf b/FPGA_quartus_GE/Video/lpm_ff6.bsf new file mode 100644 index 0000000..73a2df0 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff6.bsf @@ -0,0 +1,63 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 96) + (text "lpm_ff6" (rect 52 1 100 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 80 25 92)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 77 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 49 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 37 14)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 53 71)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[127..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 83 50 125 63)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_ff6.inc b/FPGA_quartus_GE/Video/lpm_ff6.inc new file mode 100644 index 0000000..c8a5a36 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff6.inc @@ -0,0 +1,25 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_ff6 +( + clock, + data[127..0], + enable +) + +RETURNS ( + q[127..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_ff6.qip b/FPGA_quartus_GE/Video/lpm_ff6.qip new file mode 100644 index 0000000..08e02f0 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff6.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FF" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_ff6.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff6.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff6.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_ff6.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_ff6.vhd b/FPGA_quartus_GE/Video/lpm_ff6.vhd new file mode 100644 index 0000000..5cc384d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_ff6.vhd @@ -0,0 +1,127 @@ +-- megafunction wizard: %LPM_FF% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_ff + +-- ============================================================ +-- File Name: lpm_ff6.vhd +-- Megafunction Name(s): +-- lpm_ff +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_ff6 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + enable : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0) + ); +END lpm_ff6; + + +ARCHITECTURE SYN OF lpm_ff6 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (127 DOWNTO 0); + + + + COMPONENT lpm_ff + GENERIC ( + lpm_fftype : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enable : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(127 DOWNTO 0); + + lpm_ff_component : lpm_ff + GENERIC MAP ( + lpm_fftype => "DFF", + lpm_type => "LPM_FF", + lpm_width => 128 + ) + PORT MAP ( + enable => enable, + clock => clock, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "1" +-- Retrieval info: PRIVATE: DFF NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UseTFFdataPort NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_FFTYPE STRING "DFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_FF" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 128 0 INPUT NODEFVAL data[127..0] +-- Retrieval info: USED_PORT: enable 0 0 0 0 INPUT NODEFVAL enable +-- Retrieval info: USED_PORT: q 0 0 128 0 OUTPUT NODEFVAL q[127..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 128 0 @q 0 0 128 0 +-- Retrieval info: CONNECT: @enable 0 0 0 0 enable 0 0 0 0 +-- Retrieval info: CONNECT: @data 0 0 128 0 data 0 0 128 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff6.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff6.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff6.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff6.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_ff6_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_fifoDZ.bsf b/FPGA_quartus_GE/Video/lpm_fifoDZ.bsf new file mode 100644 index 0000000..1e24640 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifoDZ.bsf @@ -0,0 +1,79 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 144) + (text "lpm_fifoDZ" (rect 41 2 133 21)(font "Arial" (font_size 10))) + (text "inst" (rect 8 125 31 140)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 81 16)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 24 89 40)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 48 51 64)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "rdreq" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 64 49 80)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 88 57 104)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "aclr" (rect 0 0 24 16)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 112 41 128)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[127..0]" (rect 0 0 60 16)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 90 24 141 40)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (drawing + (text "(ack)" (rect 51 67 76 81)(font "Arial" )) + (text "128 bits x 128 words" (rect 31 114 134 128)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 128)(line_width 1)) + (line (pt 144 128)(pt 16 128)(line_width 1)) + (line (pt 16 128)(pt 16 16)(line_width 1)) + (line (pt 16 108)(pt 144 108)(line_width 1)) + (line (pt 16 90)(pt 22 96)(line_width 1)) + (line (pt 22 96)(pt 16 102)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_fifoDZ.qip b/FPGA_quartus_GE/Video/lpm_fifoDZ.qip new file mode 100644 index 0000000..5444627 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifoDZ.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FIFO+" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_fifoDZ.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_fifoDZ.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_fifoDZ.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_fifoDZ.vhd b/FPGA_quartus_GE/Video/lpm_fifoDZ.vhd new file mode 100644 index 0000000..95486bb --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifoDZ.vhd @@ -0,0 +1,178 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: scfifo + +-- ============================================================ +-- File Name: lpm_fifoDZ.vhd +-- Megafunction Name(s): +-- scfifo +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY lpm_fifoDZ IS + PORT + ( + aclr : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + rdreq : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0) + ); +END lpm_fifoDZ; + + +ARCHITECTURE SYN OF lpm_fifodz IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (127 DOWNTO 0); + + + + COMPONENT scfifo + GENERIC ( + add_ram_output_register : STRING; + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + overflow_checking : STRING; + underflow_checking : STRING; + use_eab : STRING + ); + PORT ( + rdreq : IN STD_LOGIC ; + aclr : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(127 DOWNTO 0); + + scfifo_component : scfifo + GENERIC MAP ( + add_ram_output_register => "OFF", + intended_device_family => "Cyclone III", + lpm_numwords => 128, + lpm_showahead => "ON", + lpm_type => "scfifo", + lpm_width => 128, + lpm_widthu => 7, + overflow_checking => "OFF", + underflow_checking => "OFF", + use_eab => "ON" + ) + PORT MAP ( + rdreq => rdreq, + aclr => aclr, + clock => clock, + wrreq => wrreq, + data => data, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "1" +-- Retrieval info: PRIVATE: Clock NUMERIC "0" +-- Retrieval info: PRIVATE: Depth NUMERIC "128" +-- Retrieval info: PRIVATE: Empty NUMERIC "0" +-- Retrieval info: PRIVATE: Full NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "0" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +-- Retrieval info: PRIVATE: Optimize NUMERIC "2" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +-- Retrieval info: PRIVATE: UsedW NUMERIC "0" +-- Retrieval info: PRIVATE: Width NUMERIC "128" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "0" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "128" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "1" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "0" +-- Retrieval info: CONSTANT: ADD_RAM_OUTPUT_REGISTER STRING "OFF" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "ON" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "scfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "7" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT NODEFVAL aclr +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 128 0 INPUT NODEFVAL data[127..0] +-- Retrieval info: USED_PORT: q 0 0 128 0 OUTPUT NODEFVAL q[127..0] +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: CONNECT: @data 0 0 128 0 data 0 0 128 0 +-- Retrieval info: CONNECT: q 0 0 128 0 @q 0 0 128 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifoDZ_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/lpm_fifo_dc0.bsf b/FPGA_quartus_GE/Video/lpm_fifo_dc0.bsf new file mode 100644 index 0000000..61b485b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifo_dc0.bsf @@ -0,0 +1,102 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 168) + (text "lpm_fifo_dc0" (rect 44 1 128 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 152 25 164)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[127..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data[127..0]" (rect 20 26 77 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "wrreq" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "wrreq" (rect 20 50 45 63)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "wrclk" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "wrclk" (rect 26 66 48 79)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 104) + (input) + (text "rdreq" (rect 0 0 30 14)(font "Arial" (font_size 8))) + (text "rdreq" (rect 20 98 44 111)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 16 104)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "rdclk" (rect 0 0 27 14)(font "Arial" (font_size 8))) + (text "rdclk" (rect 26 114 47 127)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 16 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "aclr" (rect 0 0 21 14)(font "Arial" (font_size 8))) + (text "aclr" (rect 20 138 37 151)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 16 144)(line_width 1)) + ) + (port + (pt 160 72) + (output) + (text "wrusedw[8..0]" (rect 0 0 84 14)(font "Arial" (font_size 8))) + (text "wrusedw[8..0]" (rect 69 66 132 79)(font "Arial" (font_size 8))) + (line (pt 160 72)(pt 144 72)(line_width 3)) + ) + (port + (pt 160 96) + (output) + (text "q[127..0]" (rect 0 0 49 14)(font "Arial" (font_size 8))) + (text "q[127..0]" (rect 99 90 141 103)(font "Arial" (font_size 8))) + (line (pt 160 96)(pt 144 96)(line_width 3)) + ) + (port + (pt 160 120) + (output) + (text "rdempty" (rect 0 0 46 14)(font "Arial" (font_size 8))) + (text "rdempty" (rect 102 114 140 127)(font "Arial" (font_size 8))) + (line (pt 160 120)(pt 144 120)(line_width 1)) + ) + (drawing + (text "128 bits x 512 words" (rect 58 140 144 152)(font "Arial" )) + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 152)(line_width 1)) + (line (pt 144 152)(pt 16 152)(line_width 1)) + (line (pt 16 152)(pt 16 16)(line_width 1)) + (line (pt 16 84)(pt 144 84)(line_width 1)) + (line (pt 16 132)(pt 144 132)(line_width 1)) + (line (pt 16 66)(pt 22 72)(line_width 1)) + (line (pt 22 72)(pt 16 78)(line_width 1)) + (line (pt 16 114)(pt 22 120)(line_width 1)) + (line (pt 22 120)(pt 16 126)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_fifo_dc0.inc b/FPGA_quartus_GE/Video/lpm_fifo_dc0.inc new file mode 100644 index 0000000..d29fb88 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifo_dc0.inc @@ -0,0 +1,30 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_fifo_dc0 +( + aclr, + data[127..0], + rdclk, + rdreq, + wrclk, + wrreq +) + +RETURNS ( + q[127..0], + rdempty, + wrusedw[8..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_fifo_dc0.qip b/FPGA_quartus_GE/Video/lpm_fifo_dc0.qip new file mode 100644 index 0000000..e883724 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifo_dc0.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_FIFO+" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_fifo_dc0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_fifo_dc0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_fifo_dc0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_fifo_dc0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_fifo_dc0.vhd b/FPGA_quartus_GE/Video/lpm_fifo_dc0.vhd new file mode 100644 index 0000000..8646d9c --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_fifo_dc0.vhd @@ -0,0 +1,203 @@ +-- megafunction wizard: %LPM_FIFO+% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: dcfifo + +-- ============================================================ +-- File Name: lpm_fifo_dc0.vhd +-- Megafunction Name(s): +-- dcfifo +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY lpm_fifo_dc0 IS + PORT + ( + aclr : IN STD_LOGIC := '0'; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + rdclk : IN STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrclk : IN STD_LOGIC ; + wrreq : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0); + rdempty : OUT STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (8 DOWNTO 0) + ); +END lpm_fifo_dc0; + + +ARCHITECTURE SYN OF lpm_fifo_dc0 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (8 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_VECTOR (127 DOWNTO 0); + + + + COMPONENT dcfifo + GENERIC ( + intended_device_family : STRING; + lpm_numwords : NATURAL; + lpm_showahead : STRING; + lpm_type : STRING; + lpm_width : NATURAL; + lpm_widthu : NATURAL; + overflow_checking : STRING; + rdsync_delaypipe : NATURAL; + underflow_checking : STRING; + use_eab : STRING; + write_aclr_synch : STRING; + wrsync_delaypipe : NATURAL + ); + PORT ( + wrclk : IN STD_LOGIC ; + rdempty : OUT STD_LOGIC ; + rdreq : IN STD_LOGIC ; + wrusedw : OUT STD_LOGIC_VECTOR (8 DOWNTO 0); + aclr : IN STD_LOGIC ; + rdclk : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (127 DOWNTO 0); + wrreq : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (127 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + rdempty <= sub_wire0; + wrusedw <= sub_wire1(8 DOWNTO 0); + q <= sub_wire2(127 DOWNTO 0); + + dcfifo_component : dcfifo + GENERIC MAP ( + intended_device_family => "Cyclone III", + lpm_numwords => 512, + lpm_showahead => "OFF", + lpm_type => "dcfifo", + lpm_width => 128, + lpm_widthu => 9, + overflow_checking => "OFF", + rdsync_delaypipe => 6, + underflow_checking => "OFF", + use_eab => "ON", + write_aclr_synch => "ON", + wrsync_delaypipe => 6 + ) + PORT MAP ( + wrclk => wrclk, + rdreq => rdreq, + aclr => aclr, + rdclk => rdclk, + wrreq => wrreq, + data => data, + rdempty => sub_wire0, + wrusedw => sub_wire1, + q => sub_wire2 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: AlmostEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostEmptyThr NUMERIC "-1" +-- Retrieval info: PRIVATE: AlmostFull NUMERIC "0" +-- Retrieval info: PRIVATE: AlmostFullThr NUMERIC "-1" +-- Retrieval info: PRIVATE: CLOCKS_ARE_SYNCHRONIZED NUMERIC "0" +-- Retrieval info: PRIVATE: Clock NUMERIC "4" +-- Retrieval info: PRIVATE: Depth NUMERIC "512" +-- Retrieval info: PRIVATE: Empty NUMERIC "1" +-- Retrieval info: PRIVATE: Full NUMERIC "1" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LE_BasedFIFO NUMERIC "0" +-- Retrieval info: PRIVATE: LegacyRREQ NUMERIC "1" +-- Retrieval info: PRIVATE: MAX_DEPTH_BY_9 NUMERIC "0" +-- Retrieval info: PRIVATE: OVERFLOW_CHECKING NUMERIC "1" +-- Retrieval info: PRIVATE: Optimize NUMERIC "1" +-- Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: UNDERFLOW_CHECKING NUMERIC "1" +-- Retrieval info: PRIVATE: UsedW NUMERIC "1" +-- Retrieval info: PRIVATE: Width NUMERIC "128" +-- Retrieval info: PRIVATE: dc_aclr NUMERIC "1" +-- Retrieval info: PRIVATE: diff_widths NUMERIC "0" +-- Retrieval info: PRIVATE: msb_usedw NUMERIC "0" +-- Retrieval info: PRIVATE: output_width NUMERIC "128" +-- Retrieval info: PRIVATE: rsEmpty NUMERIC "1" +-- Retrieval info: PRIVATE: rsFull NUMERIC "0" +-- Retrieval info: PRIVATE: rsUsedW NUMERIC "0" +-- Retrieval info: PRIVATE: sc_aclr NUMERIC "0" +-- Retrieval info: PRIVATE: sc_sclr NUMERIC "0" +-- Retrieval info: PRIVATE: wsEmpty NUMERIC "0" +-- Retrieval info: PRIVATE: wsFull NUMERIC "0" +-- Retrieval info: PRIVATE: wsUsedW NUMERIC "1" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_NUMWORDS NUMERIC "512" +-- Retrieval info: CONSTANT: LPM_SHOWAHEAD STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "dcfifo" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_WIDTHU NUMERIC "9" +-- Retrieval info: CONSTANT: OVERFLOW_CHECKING STRING "OFF" +-- Retrieval info: CONSTANT: RDSYNC_DELAYPIPE NUMERIC "6" +-- Retrieval info: CONSTANT: UNDERFLOW_CHECKING STRING "OFF" +-- Retrieval info: CONSTANT: USE_EAB STRING "ON" +-- Retrieval info: CONSTANT: WRITE_ACLR_SYNCH STRING "ON" +-- Retrieval info: CONSTANT: WRSYNC_DELAYPIPE NUMERIC "6" +-- Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND aclr +-- Retrieval info: USED_PORT: data 0 0 128 0 INPUT NODEFVAL data[127..0] +-- Retrieval info: USED_PORT: q 0 0 128 0 OUTPUT NODEFVAL q[127..0] +-- Retrieval info: USED_PORT: rdclk 0 0 0 0 INPUT NODEFVAL rdclk +-- Retrieval info: USED_PORT: rdempty 0 0 0 0 OUTPUT NODEFVAL rdempty +-- Retrieval info: USED_PORT: rdreq 0 0 0 0 INPUT NODEFVAL rdreq +-- Retrieval info: USED_PORT: wrclk 0 0 0 0 INPUT NODEFVAL wrclk +-- Retrieval info: USED_PORT: wrreq 0 0 0 0 INPUT NODEFVAL wrreq +-- Retrieval info: USED_PORT: wrusedw 0 0 9 0 OUTPUT NODEFVAL wrusedw[8..0] +-- Retrieval info: CONNECT: @data 0 0 128 0 data 0 0 128 0 +-- Retrieval info: CONNECT: q 0 0 128 0 @q 0 0 128 0 +-- Retrieval info: CONNECT: @wrreq 0 0 0 0 wrreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdreq 0 0 0 0 rdreq 0 0 0 0 +-- Retrieval info: CONNECT: @rdclk 0 0 0 0 rdclk 0 0 0 0 +-- Retrieval info: CONNECT: @wrclk 0 0 0 0 wrclk 0 0 0 0 +-- Retrieval info: CONNECT: rdempty 0 0 0 0 @rdempty 0 0 0 0 +-- Retrieval info: CONNECT: wrusedw 0 0 9 0 @wrusedw 0 0 9 0 +-- Retrieval info: CONNECT: @aclr 0 0 0 0 aclr 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_fifo_dc0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/Video/lpm_latch1.bsf b/FPGA_quartus_GE/Video/lpm_latch1.bsf new file mode 100644 index 0000000..7197b2f --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_latch1.bsf @@ -0,0 +1,53 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 80) + (text "lpm_latch1" (rect 49 1 123 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "gate" (rect 0 0 24 14)(font "Arial" (font_size 8))) + (text "gate" (rect 20 42 41 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[31..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 105 26 141 39)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (drawing + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 64)(line_width 1)) + (line (pt 144 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_latch1.qip b/FPGA_quartus_GE/Video/lpm_latch1.qip new file mode 100644 index 0000000..bc53d50 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_latch1.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_LATCH" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_latch1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_latch1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_latch1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_latch1.vhd b/FPGA_quartus_GE/Video/lpm_latch1.vhd new file mode 100644 index 0000000..0afc209 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_latch1.vhd @@ -0,0 +1,110 @@ +-- megafunction wizard: %LPM_LATCH% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_latch + +-- ============================================================ +-- File Name: lpm_latch1.vhd +-- Megafunction Name(s): +-- lpm_latch +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_latch1 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + gate : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_latch1; + + +ARCHITECTURE SYN OF lpm_latch1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT lpm_latch + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + gate : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(31 DOWNTO 0); + + lpm_latch_component : lpm_latch + GENERIC MAP ( + lpm_type => "LPM_LATCH", + lpm_width => 32 + ) + PORT MAP ( + data => data, + gate => gate, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: aclr NUMERIC "0" +-- Retrieval info: PRIVATE: aset NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_LATCH" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: gate 0 0 0 0 INPUT NODEFVAL gate +-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +-- Retrieval info: CONNECT: @gate 0 0 0 0 gate 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux0.bsf b/FPGA_quartus_GE/Video/lpm_mux0.bsf new file mode 100644 index 0000000..ce1e27e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux0.bsf @@ -0,0 +1,83 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 152 128) + (text "lpm_mux0" (rect 50 2 120 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 112 25 124)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data3x[31..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data3x[31..0]" (rect 4 27 66 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data2x[31..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data2x[31..0]" (rect 4 43 66 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data1x[31..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data1x[31..0]" (rect 4 59 66 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data0x[31..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data0x[31..0]" (rect 4 75 66 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 91 27 104)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 1)) + ) + (port + (pt 80 128) + (input) + (text "sel[1..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[1..0]" (rect 84 115 121 128)(font "Arial" (font_size 8))) + (line (pt 80 128)(pt 80 116)(line_width 3)) + ) + (port + (pt 152 72) + (output) + (text "result[31..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "result[31..0]" (rect 92 59 147 72)(font "Arial" (font_size 8))) + (line (pt 152 72)(pt 88 72)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 120)(line_width 1)) + (line (pt 88 32)(pt 88 112)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 120)(pt 88 112)(line_width 1)) + (line (pt 72 98)(pt 78 104)(line_width 1)) + (line (pt 78 104)(pt 72 110)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux0.inc b/FPGA_quartus_GE/Video/lpm_mux0.inc new file mode 100644 index 0000000..b0bc2be --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux0.inc @@ -0,0 +1,28 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_mux0 +( + clock, + data0x[31..0], + data1x[31..0], + data2x[31..0], + data3x[31..0], + sel[1..0] +) + +RETURNS ( + result[31..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_mux0.qip b/FPGA_quartus_GE/Video/lpm_mux0.qip new file mode 100644 index 0000000..5e8e2b6 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux0.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux0.vhd b/FPGA_quartus_GE/Video/lpm_mux0.vhd new file mode 100644 index 0000000..9d641a4 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux0.vhd @@ -0,0 +1,251 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux0.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux0 IS + PORT + ( + clock : IN STD_LOGIC ; + data0x : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_mux0; + + +ARCHITECTURE SYN OF lpm_mux0 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (3 DOWNTO 0, 31 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (31 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (31 DOWNTO 0); + +BEGIN + sub_wire5 <= data0x(31 DOWNTO 0); + sub_wire4 <= data1x(31 DOWNTO 0); + sub_wire3 <= data2x(31 DOWNTO 0); + result <= sub_wire0(31 DOWNTO 0); + sub_wire1 <= data3x(31 DOWNTO 0); + sub_wire2(3, 0) <= sub_wire1(0); + sub_wire2(3, 1) <= sub_wire1(1); + sub_wire2(3, 2) <= sub_wire1(2); + sub_wire2(3, 3) <= sub_wire1(3); + sub_wire2(3, 4) <= sub_wire1(4); + sub_wire2(3, 5) <= sub_wire1(5); + sub_wire2(3, 6) <= sub_wire1(6); + sub_wire2(3, 7) <= sub_wire1(7); + sub_wire2(3, 8) <= sub_wire1(8); + sub_wire2(3, 9) <= sub_wire1(9); + sub_wire2(3, 10) <= sub_wire1(10); + sub_wire2(3, 11) <= sub_wire1(11); + sub_wire2(3, 12) <= sub_wire1(12); + sub_wire2(3, 13) <= sub_wire1(13); + sub_wire2(3, 14) <= sub_wire1(14); + sub_wire2(3, 15) <= sub_wire1(15); + sub_wire2(3, 16) <= sub_wire1(16); + sub_wire2(3, 17) <= sub_wire1(17); + sub_wire2(3, 18) <= sub_wire1(18); + sub_wire2(3, 19) <= sub_wire1(19); + sub_wire2(3, 20) <= sub_wire1(20); + sub_wire2(3, 21) <= sub_wire1(21); + sub_wire2(3, 22) <= sub_wire1(22); + sub_wire2(3, 23) <= sub_wire1(23); + sub_wire2(3, 24) <= sub_wire1(24); + sub_wire2(3, 25) <= sub_wire1(25); + sub_wire2(3, 26) <= sub_wire1(26); + sub_wire2(3, 27) <= sub_wire1(27); + sub_wire2(3, 28) <= sub_wire1(28); + sub_wire2(3, 29) <= sub_wire1(29); + sub_wire2(3, 30) <= sub_wire1(30); + sub_wire2(3, 31) <= sub_wire1(31); + sub_wire2(2, 0) <= sub_wire3(0); + sub_wire2(2, 1) <= sub_wire3(1); + sub_wire2(2, 2) <= sub_wire3(2); + sub_wire2(2, 3) <= sub_wire3(3); + sub_wire2(2, 4) <= sub_wire3(4); + sub_wire2(2, 5) <= sub_wire3(5); + sub_wire2(2, 6) <= sub_wire3(6); + sub_wire2(2, 7) <= sub_wire3(7); + sub_wire2(2, 8) <= sub_wire3(8); + sub_wire2(2, 9) <= sub_wire3(9); + sub_wire2(2, 10) <= sub_wire3(10); + sub_wire2(2, 11) <= sub_wire3(11); + sub_wire2(2, 12) <= sub_wire3(12); + sub_wire2(2, 13) <= sub_wire3(13); + sub_wire2(2, 14) <= sub_wire3(14); + sub_wire2(2, 15) <= sub_wire3(15); + sub_wire2(2, 16) <= sub_wire3(16); + sub_wire2(2, 17) <= sub_wire3(17); + sub_wire2(2, 18) <= sub_wire3(18); + sub_wire2(2, 19) <= sub_wire3(19); + sub_wire2(2, 20) <= sub_wire3(20); + sub_wire2(2, 21) <= sub_wire3(21); + sub_wire2(2, 22) <= sub_wire3(22); + sub_wire2(2, 23) <= sub_wire3(23); + sub_wire2(2, 24) <= sub_wire3(24); + sub_wire2(2, 25) <= sub_wire3(25); + sub_wire2(2, 26) <= sub_wire3(26); + sub_wire2(2, 27) <= sub_wire3(27); + sub_wire2(2, 28) <= sub_wire3(28); + sub_wire2(2, 29) <= sub_wire3(29); + sub_wire2(2, 30) <= sub_wire3(30); + sub_wire2(2, 31) <= sub_wire3(31); + sub_wire2(1, 0) <= sub_wire4(0); + sub_wire2(1, 1) <= sub_wire4(1); + sub_wire2(1, 2) <= sub_wire4(2); + sub_wire2(1, 3) <= sub_wire4(3); + sub_wire2(1, 4) <= sub_wire4(4); + sub_wire2(1, 5) <= sub_wire4(5); + sub_wire2(1, 6) <= sub_wire4(6); + sub_wire2(1, 7) <= sub_wire4(7); + sub_wire2(1, 8) <= sub_wire4(8); + sub_wire2(1, 9) <= sub_wire4(9); + sub_wire2(1, 10) <= sub_wire4(10); + sub_wire2(1, 11) <= sub_wire4(11); + sub_wire2(1, 12) <= sub_wire4(12); + sub_wire2(1, 13) <= sub_wire4(13); + sub_wire2(1, 14) <= sub_wire4(14); + sub_wire2(1, 15) <= sub_wire4(15); + sub_wire2(1, 16) <= sub_wire4(16); + sub_wire2(1, 17) <= sub_wire4(17); + sub_wire2(1, 18) <= sub_wire4(18); + sub_wire2(1, 19) <= sub_wire4(19); + sub_wire2(1, 20) <= sub_wire4(20); + sub_wire2(1, 21) <= sub_wire4(21); + sub_wire2(1, 22) <= sub_wire4(22); + sub_wire2(1, 23) <= sub_wire4(23); + sub_wire2(1, 24) <= sub_wire4(24); + sub_wire2(1, 25) <= sub_wire4(25); + sub_wire2(1, 26) <= sub_wire4(26); + sub_wire2(1, 27) <= sub_wire4(27); + sub_wire2(1, 28) <= sub_wire4(28); + sub_wire2(1, 29) <= sub_wire4(29); + sub_wire2(1, 30) <= sub_wire4(30); + sub_wire2(1, 31) <= sub_wire4(31); + sub_wire2(0, 0) <= sub_wire5(0); + sub_wire2(0, 1) <= sub_wire5(1); + sub_wire2(0, 2) <= sub_wire5(2); + sub_wire2(0, 3) <= sub_wire5(3); + sub_wire2(0, 4) <= sub_wire5(4); + sub_wire2(0, 5) <= sub_wire5(5); + sub_wire2(0, 6) <= sub_wire5(6); + sub_wire2(0, 7) <= sub_wire5(7); + sub_wire2(0, 8) <= sub_wire5(8); + sub_wire2(0, 9) <= sub_wire5(9); + sub_wire2(0, 10) <= sub_wire5(10); + sub_wire2(0, 11) <= sub_wire5(11); + sub_wire2(0, 12) <= sub_wire5(12); + sub_wire2(0, 13) <= sub_wire5(13); + sub_wire2(0, 14) <= sub_wire5(14); + sub_wire2(0, 15) <= sub_wire5(15); + sub_wire2(0, 16) <= sub_wire5(16); + sub_wire2(0, 17) <= sub_wire5(17); + sub_wire2(0, 18) <= sub_wire5(18); + sub_wire2(0, 19) <= sub_wire5(19); + sub_wire2(0, 20) <= sub_wire5(20); + sub_wire2(0, 21) <= sub_wire5(21); + sub_wire2(0, 22) <= sub_wire5(22); + sub_wire2(0, 23) <= sub_wire5(23); + sub_wire2(0, 24) <= sub_wire5(24); + sub_wire2(0, 25) <= sub_wire5(25); + sub_wire2(0, 26) <= sub_wire5(26); + sub_wire2(0, 27) <= sub_wire5(27); + sub_wire2(0, 28) <= sub_wire5(28); + sub_wire2(0, 29) <= sub_wire5(29); + sub_wire2(0, 30) <= sub_wire5(30); + sub_wire2(0, 31) <= sub_wire5(31); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_pipeline => 4, + lpm_size => 4, + lpm_type => "LPM_MUX", + lpm_width => 32, + lpm_widths => 2 + ) + PORT MAP ( + sel => sel, + clock => clock, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_PIPELINE NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "2" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data0x 0 0 32 0 INPUT NODEFVAL data0x[31..0] +-- Retrieval info: USED_PORT: data1x 0 0 32 0 INPUT NODEFVAL data1x[31..0] +-- Retrieval info: USED_PORT: data2x 0 0 32 0 INPUT NODEFVAL data2x[31..0] +-- Retrieval info: USED_PORT: data3x 0 0 32 0 INPUT NODEFVAL data3x[31..0] +-- Retrieval info: USED_PORT: result 0 0 32 0 OUTPUT NODEFVAL result[31..0] +-- Retrieval info: USED_PORT: sel 0 0 2 0 INPUT NODEFVAL sel[1..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: result 0 0 32 0 @result 0 0 32 0 +-- Retrieval info: CONNECT: @data 1 3 32 0 data3x 0 0 32 0 +-- Retrieval info: CONNECT: @data 1 2 32 0 data2x 0 0 32 0 +-- Retrieval info: CONNECT: @data 1 1 32 0 data1x 0 0 32 0 +-- Retrieval info: CONNECT: @data 1 0 32 0 data0x 0 0 32 0 +-- Retrieval info: CONNECT: @sel 0 0 2 0 sel 0 0 2 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux1.bsf b/FPGA_quartus_GE/Video/lpm_mux1.bsf new file mode 100644 index 0000000..24ee953 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux1.bsf @@ -0,0 +1,111 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 152 192) + (text "lpm_mux1" (rect 50 2 120 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 176 25 188)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data7x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data7x[15..0]" (rect 4 27 66 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data6x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data6x[15..0]" (rect 4 43 66 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data5x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data5x[15..0]" (rect 4 59 66 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data4x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data4x[15..0]" (rect 4 75 66 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data3x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data3x[15..0]" (rect 4 91 66 104)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data2x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data2x[15..0]" (rect 4 107 66 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data1x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data1x[15..0]" (rect 4 123 66 136)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data0x[15..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data0x[15..0]" (rect 4 139 66 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 155 27 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 1)) + ) + (port + (pt 80 192) + (input) + (text "sel[2..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[2..0]" (rect 84 179 121 192)(font "Arial" (font_size 8))) + (line (pt 80 192)(pt 80 180)(line_width 3)) + ) + (port + (pt 152 104) + (output) + (text "result[15..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "result[15..0]" (rect 92 91 147 104)(font "Arial" (font_size 8))) + (line (pt 152 104)(pt 88 104)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 184)(line_width 1)) + (line (pt 88 32)(pt 88 176)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 184)(pt 88 176)(line_width 1)) + (line (pt 72 162)(pt 78 168)(line_width 1)) + (line (pt 78 168)(pt 72 174)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux1.inc b/FPGA_quartus_GE/Video/lpm_mux1.inc new file mode 100644 index 0000000..e2f94a4 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux1.inc @@ -0,0 +1,32 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_mux1 +( + clock, + data0x[15..0], + data1x[15..0], + data2x[15..0], + data3x[15..0], + data4x[15..0], + data5x[15..0], + data6x[15..0], + data7x[15..0], + sel[2..0] +) + +RETURNS ( + result[15..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_mux1.qip b/FPGA_quartus_GE/Video/lpm_mux1.qip new file mode 100644 index 0000000..8a445b2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux1.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux1.vhd b/FPGA_quartus_GE/Video/lpm_mux1.vhd new file mode 100644 index 0000000..a9ad991 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux1.vhd @@ -0,0 +1,271 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux1.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux1 IS + PORT + ( + clock : IN STD_LOGIC ; + data0x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); +END lpm_mux1; + + +ARCHITECTURE SYN OF lpm_mux1 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (7 DOWNTO 0, 15 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (15 DOWNTO 0); + SIGNAL sub_wire9 : STD_LOGIC_VECTOR (15 DOWNTO 0); + +BEGIN + sub_wire9 <= data0x(15 DOWNTO 0); + sub_wire8 <= data1x(15 DOWNTO 0); + sub_wire7 <= data2x(15 DOWNTO 0); + sub_wire6 <= data3x(15 DOWNTO 0); + sub_wire5 <= data4x(15 DOWNTO 0); + sub_wire4 <= data5x(15 DOWNTO 0); + sub_wire3 <= data6x(15 DOWNTO 0); + result <= sub_wire0(15 DOWNTO 0); + sub_wire1 <= data7x(15 DOWNTO 0); + sub_wire2(7, 0) <= sub_wire1(0); + sub_wire2(7, 1) <= sub_wire1(1); + sub_wire2(7, 2) <= sub_wire1(2); + sub_wire2(7, 3) <= sub_wire1(3); + sub_wire2(7, 4) <= sub_wire1(4); + sub_wire2(7, 5) <= sub_wire1(5); + sub_wire2(7, 6) <= sub_wire1(6); + sub_wire2(7, 7) <= sub_wire1(7); + sub_wire2(7, 8) <= sub_wire1(8); + sub_wire2(7, 9) <= sub_wire1(9); + sub_wire2(7, 10) <= sub_wire1(10); + sub_wire2(7, 11) <= sub_wire1(11); + sub_wire2(7, 12) <= sub_wire1(12); + sub_wire2(7, 13) <= sub_wire1(13); + sub_wire2(7, 14) <= sub_wire1(14); + sub_wire2(7, 15) <= sub_wire1(15); + sub_wire2(6, 0) <= sub_wire3(0); + sub_wire2(6, 1) <= sub_wire3(1); + sub_wire2(6, 2) <= sub_wire3(2); + sub_wire2(6, 3) <= sub_wire3(3); + sub_wire2(6, 4) <= sub_wire3(4); + sub_wire2(6, 5) <= sub_wire3(5); + sub_wire2(6, 6) <= sub_wire3(6); + sub_wire2(6, 7) <= sub_wire3(7); + sub_wire2(6, 8) <= sub_wire3(8); + sub_wire2(6, 9) <= sub_wire3(9); + sub_wire2(6, 10) <= sub_wire3(10); + sub_wire2(6, 11) <= sub_wire3(11); + sub_wire2(6, 12) <= sub_wire3(12); + sub_wire2(6, 13) <= sub_wire3(13); + sub_wire2(6, 14) <= sub_wire3(14); + sub_wire2(6, 15) <= sub_wire3(15); + sub_wire2(5, 0) <= sub_wire4(0); + sub_wire2(5, 1) <= sub_wire4(1); + sub_wire2(5, 2) <= sub_wire4(2); + sub_wire2(5, 3) <= sub_wire4(3); + sub_wire2(5, 4) <= sub_wire4(4); + sub_wire2(5, 5) <= sub_wire4(5); + sub_wire2(5, 6) <= sub_wire4(6); + sub_wire2(5, 7) <= sub_wire4(7); + sub_wire2(5, 8) <= sub_wire4(8); + sub_wire2(5, 9) <= sub_wire4(9); + sub_wire2(5, 10) <= sub_wire4(10); + sub_wire2(5, 11) <= sub_wire4(11); + sub_wire2(5, 12) <= sub_wire4(12); + sub_wire2(5, 13) <= sub_wire4(13); + sub_wire2(5, 14) <= sub_wire4(14); + sub_wire2(5, 15) <= sub_wire4(15); + sub_wire2(4, 0) <= sub_wire5(0); + sub_wire2(4, 1) <= sub_wire5(1); + sub_wire2(4, 2) <= sub_wire5(2); + sub_wire2(4, 3) <= sub_wire5(3); + sub_wire2(4, 4) <= sub_wire5(4); + sub_wire2(4, 5) <= sub_wire5(5); + sub_wire2(4, 6) <= sub_wire5(6); + sub_wire2(4, 7) <= sub_wire5(7); + sub_wire2(4, 8) <= sub_wire5(8); + sub_wire2(4, 9) <= sub_wire5(9); + sub_wire2(4, 10) <= sub_wire5(10); + sub_wire2(4, 11) <= sub_wire5(11); + sub_wire2(4, 12) <= sub_wire5(12); + sub_wire2(4, 13) <= sub_wire5(13); + sub_wire2(4, 14) <= sub_wire5(14); + sub_wire2(4, 15) <= sub_wire5(15); + sub_wire2(3, 0) <= sub_wire6(0); + sub_wire2(3, 1) <= sub_wire6(1); + sub_wire2(3, 2) <= sub_wire6(2); + sub_wire2(3, 3) <= sub_wire6(3); + sub_wire2(3, 4) <= sub_wire6(4); + sub_wire2(3, 5) <= sub_wire6(5); + sub_wire2(3, 6) <= sub_wire6(6); + sub_wire2(3, 7) <= sub_wire6(7); + sub_wire2(3, 8) <= sub_wire6(8); + sub_wire2(3, 9) <= sub_wire6(9); + sub_wire2(3, 10) <= sub_wire6(10); + sub_wire2(3, 11) <= sub_wire6(11); + sub_wire2(3, 12) <= sub_wire6(12); + sub_wire2(3, 13) <= sub_wire6(13); + sub_wire2(3, 14) <= sub_wire6(14); + sub_wire2(3, 15) <= sub_wire6(15); + sub_wire2(2, 0) <= sub_wire7(0); + sub_wire2(2, 1) <= sub_wire7(1); + sub_wire2(2, 2) <= sub_wire7(2); + sub_wire2(2, 3) <= sub_wire7(3); + sub_wire2(2, 4) <= sub_wire7(4); + sub_wire2(2, 5) <= sub_wire7(5); + sub_wire2(2, 6) <= sub_wire7(6); + sub_wire2(2, 7) <= sub_wire7(7); + sub_wire2(2, 8) <= sub_wire7(8); + sub_wire2(2, 9) <= sub_wire7(9); + sub_wire2(2, 10) <= sub_wire7(10); + sub_wire2(2, 11) <= sub_wire7(11); + sub_wire2(2, 12) <= sub_wire7(12); + sub_wire2(2, 13) <= sub_wire7(13); + sub_wire2(2, 14) <= sub_wire7(14); + sub_wire2(2, 15) <= sub_wire7(15); + sub_wire2(1, 0) <= sub_wire8(0); + sub_wire2(1, 1) <= sub_wire8(1); + sub_wire2(1, 2) <= sub_wire8(2); + sub_wire2(1, 3) <= sub_wire8(3); + sub_wire2(1, 4) <= sub_wire8(4); + sub_wire2(1, 5) <= sub_wire8(5); + sub_wire2(1, 6) <= sub_wire8(6); + sub_wire2(1, 7) <= sub_wire8(7); + sub_wire2(1, 8) <= sub_wire8(8); + sub_wire2(1, 9) <= sub_wire8(9); + sub_wire2(1, 10) <= sub_wire8(10); + sub_wire2(1, 11) <= sub_wire8(11); + sub_wire2(1, 12) <= sub_wire8(12); + sub_wire2(1, 13) <= sub_wire8(13); + sub_wire2(1, 14) <= sub_wire8(14); + sub_wire2(1, 15) <= sub_wire8(15); + sub_wire2(0, 0) <= sub_wire9(0); + sub_wire2(0, 1) <= sub_wire9(1); + sub_wire2(0, 2) <= sub_wire9(2); + sub_wire2(0, 3) <= sub_wire9(3); + sub_wire2(0, 4) <= sub_wire9(4); + sub_wire2(0, 5) <= sub_wire9(5); + sub_wire2(0, 6) <= sub_wire9(6); + sub_wire2(0, 7) <= sub_wire9(7); + sub_wire2(0, 8) <= sub_wire9(8); + sub_wire2(0, 9) <= sub_wire9(9); + sub_wire2(0, 10) <= sub_wire9(10); + sub_wire2(0, 11) <= sub_wire9(11); + sub_wire2(0, 12) <= sub_wire9(12); + sub_wire2(0, 13) <= sub_wire9(13); + sub_wire2(0, 14) <= sub_wire9(14); + sub_wire2(0, 15) <= sub_wire9(15); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_pipeline => 4, + lpm_size => 8, + lpm_type => "LPM_MUX", + lpm_width => 16, + lpm_widths => 3 + ) + PORT MAP ( + sel => sel, + clock => clock, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_PIPELINE NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "3" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data0x 0 0 16 0 INPUT NODEFVAL data0x[15..0] +-- Retrieval info: USED_PORT: data1x 0 0 16 0 INPUT NODEFVAL data1x[15..0] +-- Retrieval info: USED_PORT: data2x 0 0 16 0 INPUT NODEFVAL data2x[15..0] +-- Retrieval info: USED_PORT: data3x 0 0 16 0 INPUT NODEFVAL data3x[15..0] +-- Retrieval info: USED_PORT: data4x 0 0 16 0 INPUT NODEFVAL data4x[15..0] +-- Retrieval info: USED_PORT: data5x 0 0 16 0 INPUT NODEFVAL data5x[15..0] +-- Retrieval info: USED_PORT: data6x 0 0 16 0 INPUT NODEFVAL data6x[15..0] +-- Retrieval info: USED_PORT: data7x 0 0 16 0 INPUT NODEFVAL data7x[15..0] +-- Retrieval info: USED_PORT: result 0 0 16 0 OUTPUT NODEFVAL result[15..0] +-- Retrieval info: USED_PORT: sel 0 0 3 0 INPUT NODEFVAL sel[2..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: result 0 0 16 0 @result 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 7 16 0 data7x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 6 16 0 data6x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 5 16 0 data5x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 4 16 0 data4x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 3 16 0 data3x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 2 16 0 data2x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 1 16 0 data1x 0 0 16 0 +-- Retrieval info: CONNECT: @data 1 0 16 0 data0x 0 0 16 0 +-- Retrieval info: CONNECT: @sel 0 0 3 0 sel 0 0 3 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux2.bsf b/FPGA_quartus_GE/Video/lpm_mux2.bsf new file mode 100644 index 0000000..b37c425 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux2.bsf @@ -0,0 +1,167 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 320) + (text "lpm_mux2" (rect 50 2 120 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 304 25 316)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data15x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data15x[7..0]" (rect 4 27 66 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data14x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data14x[7..0]" (rect 4 43 66 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data13x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data13x[7..0]" (rect 4 59 66 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data12x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data12x[7..0]" (rect 4 75 66 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data11x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data11x[7..0]" (rect 4 91 66 104)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data10x[7..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data10x[7..0]" (rect 4 107 66 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data9x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data9x[7..0]" (rect 4 123 60 136)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data8x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data8x[7..0]" (rect 4 139 60 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "data7x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data7x[7..0]" (rect 4 155 60 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 3)) + ) + (port + (pt 0 184) + (input) + (text "data6x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data6x[7..0]" (rect 4 171 60 184)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 72 184)(line_width 3)) + ) + (port + (pt 0 200) + (input) + (text "data5x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data5x[7..0]" (rect 4 187 60 200)(font "Arial" (font_size 8))) + (line (pt 0 200)(pt 72 200)(line_width 3)) + ) + (port + (pt 0 216) + (input) + (text "data4x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data4x[7..0]" (rect 4 203 60 216)(font "Arial" (font_size 8))) + (line (pt 0 216)(pt 72 216)(line_width 3)) + ) + (port + (pt 0 232) + (input) + (text "data3x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data3x[7..0]" (rect 4 219 60 232)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 72 232)(line_width 3)) + ) + (port + (pt 0 248) + (input) + (text "data2x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data2x[7..0]" (rect 4 235 60 248)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 72 248)(line_width 3)) + ) + (port + (pt 0 264) + (input) + (text "data1x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data1x[7..0]" (rect 4 251 60 264)(font "Arial" (font_size 8))) + (line (pt 0 264)(pt 72 264)(line_width 3)) + ) + (port + (pt 0 280) + (input) + (text "data0x[7..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data0x[7..0]" (rect 4 267 60 280)(font "Arial" (font_size 8))) + (line (pt 0 280)(pt 72 280)(line_width 3)) + ) + (port + (pt 0 296) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 283 27 296)(font "Arial" (font_size 8))) + (line (pt 0 296)(pt 72 296)(line_width 1)) + ) + (port + (pt 80 320) + (input) + (text "sel[3..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[3..0]" (rect 84 307 121 320)(font "Arial" (font_size 8))) + (line (pt 80 320)(pt 80 308)(line_width 3)) + ) + (port + (pt 144 168) + (output) + (text "result[7..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[7..0]" (rect 90 155 139 168)(font "Arial" (font_size 8))) + (line (pt 144 168)(pt 88 168)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 312)(line_width 1)) + (line (pt 88 32)(pt 88 304)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 312)(pt 88 304)(line_width 1)) + (line (pt 72 290)(pt 78 296)(line_width 1)) + (line (pt 78 296)(pt 72 302)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux2.inc b/FPGA_quartus_GE/Video/lpm_mux2.inc new file mode 100644 index 0000000..2334c7e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux2.inc @@ -0,0 +1,40 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_mux2 +( + clock, + data0x[7..0], + data10x[7..0], + data11x[7..0], + data12x[7..0], + data13x[7..0], + data14x[7..0], + data15x[7..0], + data1x[7..0], + data2x[7..0], + data3x[7..0], + data4x[7..0], + data5x[7..0], + data6x[7..0], + data7x[7..0], + data8x[7..0], + data9x[7..0], + sel[3..0] +) + +RETURNS ( + result[7..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_mux2.qip b/FPGA_quartus_GE/Video/lpm_mux2.qip new file mode 100644 index 0000000..7b5db74 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux2.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux2.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux2.vhd b/FPGA_quartus_GE/Video/lpm_mux2.vhd new file mode 100644 index 0000000..cfece2e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux2.vhd @@ -0,0 +1,311 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux2.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux2 IS + PORT + ( + clock : IN STD_LOGIC ; + data0x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data10x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data11x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data12x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data13x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data14x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data15x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data8x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + data9x : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END lpm_mux2; + + +ARCHITECTURE SYN OF lpm_mux2 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (15 DOWNTO 0, 7 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire9 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire10 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire11 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire12 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire13 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire14 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire15 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire16 : STD_LOGIC_VECTOR (7 DOWNTO 0); + SIGNAL sub_wire17 : STD_LOGIC_VECTOR (7 DOWNTO 0); + +BEGIN + sub_wire17 <= data0x(7 DOWNTO 0); + sub_wire16 <= data1x(7 DOWNTO 0); + sub_wire15 <= data2x(7 DOWNTO 0); + sub_wire14 <= data3x(7 DOWNTO 0); + sub_wire13 <= data4x(7 DOWNTO 0); + sub_wire12 <= data5x(7 DOWNTO 0); + sub_wire11 <= data6x(7 DOWNTO 0); + sub_wire10 <= data7x(7 DOWNTO 0); + sub_wire9 <= data8x(7 DOWNTO 0); + sub_wire8 <= data9x(7 DOWNTO 0); + sub_wire7 <= data10x(7 DOWNTO 0); + sub_wire6 <= data11x(7 DOWNTO 0); + sub_wire5 <= data12x(7 DOWNTO 0); + sub_wire4 <= data13x(7 DOWNTO 0); + sub_wire3 <= data14x(7 DOWNTO 0); + result <= sub_wire0(7 DOWNTO 0); + sub_wire1 <= data15x(7 DOWNTO 0); + sub_wire2(15, 0) <= sub_wire1(0); + sub_wire2(15, 1) <= sub_wire1(1); + sub_wire2(15, 2) <= sub_wire1(2); + sub_wire2(15, 3) <= sub_wire1(3); + sub_wire2(15, 4) <= sub_wire1(4); + sub_wire2(15, 5) <= sub_wire1(5); + sub_wire2(15, 6) <= sub_wire1(6); + sub_wire2(15, 7) <= sub_wire1(7); + sub_wire2(14, 0) <= sub_wire3(0); + sub_wire2(14, 1) <= sub_wire3(1); + sub_wire2(14, 2) <= sub_wire3(2); + sub_wire2(14, 3) <= sub_wire3(3); + sub_wire2(14, 4) <= sub_wire3(4); + sub_wire2(14, 5) <= sub_wire3(5); + sub_wire2(14, 6) <= sub_wire3(6); + sub_wire2(14, 7) <= sub_wire3(7); + sub_wire2(13, 0) <= sub_wire4(0); + sub_wire2(13, 1) <= sub_wire4(1); + sub_wire2(13, 2) <= sub_wire4(2); + sub_wire2(13, 3) <= sub_wire4(3); + sub_wire2(13, 4) <= sub_wire4(4); + sub_wire2(13, 5) <= sub_wire4(5); + sub_wire2(13, 6) <= sub_wire4(6); + sub_wire2(13, 7) <= sub_wire4(7); + sub_wire2(12, 0) <= sub_wire5(0); + sub_wire2(12, 1) <= sub_wire5(1); + sub_wire2(12, 2) <= sub_wire5(2); + sub_wire2(12, 3) <= sub_wire5(3); + sub_wire2(12, 4) <= sub_wire5(4); + sub_wire2(12, 5) <= sub_wire5(5); + sub_wire2(12, 6) <= sub_wire5(6); + sub_wire2(12, 7) <= sub_wire5(7); + sub_wire2(11, 0) <= sub_wire6(0); + sub_wire2(11, 1) <= sub_wire6(1); + sub_wire2(11, 2) <= sub_wire6(2); + sub_wire2(11, 3) <= sub_wire6(3); + sub_wire2(11, 4) <= sub_wire6(4); + sub_wire2(11, 5) <= sub_wire6(5); + sub_wire2(11, 6) <= sub_wire6(6); + sub_wire2(11, 7) <= sub_wire6(7); + sub_wire2(10, 0) <= sub_wire7(0); + sub_wire2(10, 1) <= sub_wire7(1); + sub_wire2(10, 2) <= sub_wire7(2); + sub_wire2(10, 3) <= sub_wire7(3); + sub_wire2(10, 4) <= sub_wire7(4); + sub_wire2(10, 5) <= sub_wire7(5); + sub_wire2(10, 6) <= sub_wire7(6); + sub_wire2(10, 7) <= sub_wire7(7); + sub_wire2(9, 0) <= sub_wire8(0); + sub_wire2(9, 1) <= sub_wire8(1); + sub_wire2(9, 2) <= sub_wire8(2); + sub_wire2(9, 3) <= sub_wire8(3); + sub_wire2(9, 4) <= sub_wire8(4); + sub_wire2(9, 5) <= sub_wire8(5); + sub_wire2(9, 6) <= sub_wire8(6); + sub_wire2(9, 7) <= sub_wire8(7); + sub_wire2(8, 0) <= sub_wire9(0); + sub_wire2(8, 1) <= sub_wire9(1); + sub_wire2(8, 2) <= sub_wire9(2); + sub_wire2(8, 3) <= sub_wire9(3); + sub_wire2(8, 4) <= sub_wire9(4); + sub_wire2(8, 5) <= sub_wire9(5); + sub_wire2(8, 6) <= sub_wire9(6); + sub_wire2(8, 7) <= sub_wire9(7); + sub_wire2(7, 0) <= sub_wire10(0); + sub_wire2(7, 1) <= sub_wire10(1); + sub_wire2(7, 2) <= sub_wire10(2); + sub_wire2(7, 3) <= sub_wire10(3); + sub_wire2(7, 4) <= sub_wire10(4); + sub_wire2(7, 5) <= sub_wire10(5); + sub_wire2(7, 6) <= sub_wire10(6); + sub_wire2(7, 7) <= sub_wire10(7); + sub_wire2(6, 0) <= sub_wire11(0); + sub_wire2(6, 1) <= sub_wire11(1); + sub_wire2(6, 2) <= sub_wire11(2); + sub_wire2(6, 3) <= sub_wire11(3); + sub_wire2(6, 4) <= sub_wire11(4); + sub_wire2(6, 5) <= sub_wire11(5); + sub_wire2(6, 6) <= sub_wire11(6); + sub_wire2(6, 7) <= sub_wire11(7); + sub_wire2(5, 0) <= sub_wire12(0); + sub_wire2(5, 1) <= sub_wire12(1); + sub_wire2(5, 2) <= sub_wire12(2); + sub_wire2(5, 3) <= sub_wire12(3); + sub_wire2(5, 4) <= sub_wire12(4); + sub_wire2(5, 5) <= sub_wire12(5); + sub_wire2(5, 6) <= sub_wire12(6); + sub_wire2(5, 7) <= sub_wire12(7); + sub_wire2(4, 0) <= sub_wire13(0); + sub_wire2(4, 1) <= sub_wire13(1); + sub_wire2(4, 2) <= sub_wire13(2); + sub_wire2(4, 3) <= sub_wire13(3); + sub_wire2(4, 4) <= sub_wire13(4); + sub_wire2(4, 5) <= sub_wire13(5); + sub_wire2(4, 6) <= sub_wire13(6); + sub_wire2(4, 7) <= sub_wire13(7); + sub_wire2(3, 0) <= sub_wire14(0); + sub_wire2(3, 1) <= sub_wire14(1); + sub_wire2(3, 2) <= sub_wire14(2); + sub_wire2(3, 3) <= sub_wire14(3); + sub_wire2(3, 4) <= sub_wire14(4); + sub_wire2(3, 5) <= sub_wire14(5); + sub_wire2(3, 6) <= sub_wire14(6); + sub_wire2(3, 7) <= sub_wire14(7); + sub_wire2(2, 0) <= sub_wire15(0); + sub_wire2(2, 1) <= sub_wire15(1); + sub_wire2(2, 2) <= sub_wire15(2); + sub_wire2(2, 3) <= sub_wire15(3); + sub_wire2(2, 4) <= sub_wire15(4); + sub_wire2(2, 5) <= sub_wire15(5); + sub_wire2(2, 6) <= sub_wire15(6); + sub_wire2(2, 7) <= sub_wire15(7); + sub_wire2(1, 0) <= sub_wire16(0); + sub_wire2(1, 1) <= sub_wire16(1); + sub_wire2(1, 2) <= sub_wire16(2); + sub_wire2(1, 3) <= sub_wire16(3); + sub_wire2(1, 4) <= sub_wire16(4); + sub_wire2(1, 5) <= sub_wire16(5); + sub_wire2(1, 6) <= sub_wire16(6); + sub_wire2(1, 7) <= sub_wire16(7); + sub_wire2(0, 0) <= sub_wire17(0); + sub_wire2(0, 1) <= sub_wire17(1); + sub_wire2(0, 2) <= sub_wire17(2); + sub_wire2(0, 3) <= sub_wire17(3); + sub_wire2(0, 4) <= sub_wire17(4); + sub_wire2(0, 5) <= sub_wire17(5); + sub_wire2(0, 6) <= sub_wire17(6); + sub_wire2(0, 7) <= sub_wire17(7); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_pipeline => 2, + lpm_size => 16, + lpm_type => "LPM_MUX", + lpm_width => 8, + lpm_widths => 4 + ) + PORT MAP ( + sel => sel, + clock => clock, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_PIPELINE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "4" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data0x 0 0 8 0 INPUT NODEFVAL data0x[7..0] +-- Retrieval info: USED_PORT: data10x 0 0 8 0 INPUT NODEFVAL data10x[7..0] +-- Retrieval info: USED_PORT: data11x 0 0 8 0 INPUT NODEFVAL data11x[7..0] +-- Retrieval info: USED_PORT: data12x 0 0 8 0 INPUT NODEFVAL data12x[7..0] +-- Retrieval info: USED_PORT: data13x 0 0 8 0 INPUT NODEFVAL data13x[7..0] +-- Retrieval info: USED_PORT: data14x 0 0 8 0 INPUT NODEFVAL data14x[7..0] +-- Retrieval info: USED_PORT: data15x 0 0 8 0 INPUT NODEFVAL data15x[7..0] +-- Retrieval info: USED_PORT: data1x 0 0 8 0 INPUT NODEFVAL data1x[7..0] +-- Retrieval info: USED_PORT: data2x 0 0 8 0 INPUT NODEFVAL data2x[7..0] +-- Retrieval info: USED_PORT: data3x 0 0 8 0 INPUT NODEFVAL data3x[7..0] +-- Retrieval info: USED_PORT: data4x 0 0 8 0 INPUT NODEFVAL data4x[7..0] +-- Retrieval info: USED_PORT: data5x 0 0 8 0 INPUT NODEFVAL data5x[7..0] +-- Retrieval info: USED_PORT: data6x 0 0 8 0 INPUT NODEFVAL data6x[7..0] +-- Retrieval info: USED_PORT: data7x 0 0 8 0 INPUT NODEFVAL data7x[7..0] +-- Retrieval info: USED_PORT: data8x 0 0 8 0 INPUT NODEFVAL data8x[7..0] +-- Retrieval info: USED_PORT: data9x 0 0 8 0 INPUT NODEFVAL data9x[7..0] +-- Retrieval info: USED_PORT: result 0 0 8 0 OUTPUT NODEFVAL result[7..0] +-- Retrieval info: USED_PORT: sel 0 0 4 0 INPUT NODEFVAL sel[3..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: result 0 0 8 0 @result 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 15 8 0 data15x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 14 8 0 data14x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 13 8 0 data13x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 12 8 0 data12x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 11 8 0 data11x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 10 8 0 data10x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 9 8 0 data9x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 8 8 0 data8x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 7 8 0 data7x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 6 8 0 data6x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 5 8 0 data5x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 4 8 0 data4x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 3 8 0 data3x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 2 8 0 data2x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 1 8 0 data1x 0 0 8 0 +-- Retrieval info: CONNECT: @data 1 0 8 0 data0x 0 0 8 0 +-- Retrieval info: CONNECT: @sel 0 0 4 0 sel 0 0 4 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux2.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux3.bsf b/FPGA_quartus_GE/Video/lpm_mux3.bsf new file mode 100644 index 0000000..c389543 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux3.bsf @@ -0,0 +1,60 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 80 80) + (text "lpm_mux3" (rect 10 2 80 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "data1" (rect 4 27 31 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 32 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "data0" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "data0" (rect 4 43 31 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 32 56)(line_width 1)) + ) + (port + (pt 40 80) + (input) + (text "sel" (rect 0 0 16 14)(font "Arial" (font_size 8))) + (text "sel" (rect 44 67 57 80)(font "Arial" (font_size 8))) + (line (pt 40 80)(pt 40 68)(line_width 1)) + ) + (port + (pt 80 48) + (output) + (text "result" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "result" (rect 50 35 75 48)(font "Arial" (font_size 8))) + (line (pt 80 48)(pt 48 48)(line_width 1)) + ) + (drawing + (line (pt 32 24)(pt 32 72)(line_width 1)) + (line (pt 48 32)(pt 48 64)(line_width 1)) + (line (pt 32 24)(pt 48 32)(line_width 1)) + (line (pt 32 72)(pt 48 64)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux3.qip b/FPGA_quartus_GE/Video/lpm_mux3.qip new file mode 100644 index 0000000..ca1e672 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux3.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux3.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux3.vhd b/FPGA_quartus_GE/Video/lpm_mux3.vhd new file mode 100644 index 0000000..b975686 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux3.vhd @@ -0,0 +1,115 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux3.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux3 IS + PORT + ( + data0 : IN STD_LOGIC ; + data1 : IN STD_LOGIC ; + sel : IN STD_LOGIC ; + result : OUT STD_LOGIC + ); +END lpm_mux3; + + +ARCHITECTURE SYN OF lpm_mux3 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_2D (1 DOWNTO 0, 0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC ; + +BEGIN + sub_wire6 <= data0; + sub_wire1 <= sub_wire0(0); + result <= sub_wire1; + sub_wire2 <= sel; + sub_wire3(0) <= sub_wire2; + sub_wire4 <= data1; + sub_wire5(1, 0) <= sub_wire4; + sub_wire5(0, 0) <= sub_wire6; + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_size => 2, + lpm_type => "LPM_MUX", + lpm_width => 1, + lpm_widths => 1 + ) + PORT MAP ( + sel => sub_wire3, + data => sub_wire5, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "1" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "1" +-- Retrieval info: USED_PORT: data0 0 0 0 0 INPUT NODEFVAL data0 +-- Retrieval info: USED_PORT: data1 0 0 0 0 INPUT NODEFVAL data1 +-- Retrieval info: USED_PORT: result 0 0 0 0 OUTPUT NODEFVAL result +-- Retrieval info: USED_PORT: sel 0 0 0 0 INPUT NODEFVAL sel +-- Retrieval info: CONNECT: result 0 0 0 0 @result 0 0 1 0 +-- Retrieval info: CONNECT: @data 1 1 1 0 data1 0 0 0 0 +-- Retrieval info: CONNECT: @data 1 0 1 0 data0 0 0 0 0 +-- Retrieval info: CONNECT: @sel 0 0 1 0 sel 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux3.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux4.bsf b/FPGA_quartus_GE/Video/lpm_mux4.bsf new file mode 100644 index 0000000..a1c9ca0 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux4.bsf @@ -0,0 +1,60 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 136 80) + (text "lpm_mux4" (rect 42 2 112 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1x[6..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data1x[6..0]" (rect 4 27 60 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 64 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data0x[6..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "data0x[6..0]" (rect 4 43 60 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 64 56)(line_width 3)) + ) + (port + (pt 72 80) + (input) + (text "sel" (rect 0 0 16 14)(font "Arial" (font_size 8))) + (text "sel" (rect 76 67 89 80)(font "Arial" (font_size 8))) + (line (pt 72 80)(pt 72 68)(line_width 1)) + ) + (port + (pt 136 48) + (output) + (text "result[6..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "result[6..0]" (rect 82 35 131 48)(font "Arial" (font_size 8))) + (line (pt 136 48)(pt 80 48)(line_width 3)) + ) + (drawing + (line (pt 64 24)(pt 64 72)(line_width 1)) + (line (pt 80 32)(pt 80 64)(line_width 1)) + (line (pt 64 24)(pt 80 32)(line_width 1)) + (line (pt 64 72)(pt 80 64)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux4.qip b/FPGA_quartus_GE/Video/lpm_mux4.qip new file mode 100644 index 0000000..7712e39 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux4.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux4.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux4.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux4.vhd b/FPGA_quartus_GE/Video/lpm_mux4.vhd new file mode 100644 index 0000000..854a491 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux4.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux4.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux4 IS + PORT + ( + data0x : IN STD_LOGIC_VECTOR (6 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (6 DOWNTO 0); + sel : IN STD_LOGIC ; + result : OUT STD_LOGIC_VECTOR (6 DOWNTO 0) + ); +END lpm_mux4; + + +ARCHITECTURE SYN OF lpm_mux4 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (6 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (6 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_2D (1 DOWNTO 0, 6 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (6 DOWNTO 0); + +BEGIN + sub_wire5 <= data0x(6 DOWNTO 0); + result <= sub_wire0(6 DOWNTO 0); + sub_wire1 <= sel; + sub_wire2(0) <= sub_wire1; + sub_wire3 <= data1x(6 DOWNTO 0); + sub_wire4(1, 0) <= sub_wire3(0); + sub_wire4(1, 1) <= sub_wire3(1); + sub_wire4(1, 2) <= sub_wire3(2); + sub_wire4(1, 3) <= sub_wire3(3); + sub_wire4(1, 4) <= sub_wire3(4); + sub_wire4(1, 5) <= sub_wire3(5); + sub_wire4(1, 6) <= sub_wire3(6); + sub_wire4(0, 0) <= sub_wire5(0); + sub_wire4(0, 1) <= sub_wire5(1); + sub_wire4(0, 2) <= sub_wire5(2); + sub_wire4(0, 3) <= sub_wire5(3); + sub_wire4(0, 4) <= sub_wire5(4); + sub_wire4(0, 5) <= sub_wire5(5); + sub_wire4(0, 6) <= sub_wire5(6); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_size => 2, + lpm_type => "LPM_MUX", + lpm_width => 7, + lpm_widths => 1 + ) + PORT MAP ( + sel => sub_wire2, + data => sub_wire4, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "7" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "1" +-- Retrieval info: USED_PORT: data0x 0 0 7 0 INPUT NODEFVAL data0x[6..0] +-- Retrieval info: USED_PORT: data1x 0 0 7 0 INPUT NODEFVAL data1x[6..0] +-- Retrieval info: USED_PORT: result 0 0 7 0 OUTPUT NODEFVAL result[6..0] +-- Retrieval info: USED_PORT: sel 0 0 0 0 INPUT NODEFVAL sel +-- Retrieval info: CONNECT: result 0 0 7 0 @result 0 0 7 0 +-- Retrieval info: CONNECT: @data 1 1 7 0 data1x 0 0 7 0 +-- Retrieval info: CONNECT: @data 1 0 7 0 data0x 0 0 7 0 +-- Retrieval info: CONNECT: @sel 0 0 1 0 sel 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux4.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux4.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux4_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux5.bsf b/FPGA_quartus_GE/Video/lpm_mux5.bsf new file mode 100644 index 0000000..e63ce50 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux5.bsf @@ -0,0 +1,74 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 152 112) + (text "lpm_mux5" (rect 50 2 120 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 96 25 108)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data3x[63..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data3x[63..0]" (rect 4 27 66 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data2x[63..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data2x[63..0]" (rect 4 43 66 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data1x[63..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data1x[63..0]" (rect 4 59 66 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data0x[63..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data0x[63..0]" (rect 4 75 66 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 80 112) + (input) + (text "sel[1..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[1..0]" (rect 84 99 121 112)(font "Arial" (font_size 8))) + (line (pt 80 112)(pt 80 100)(line_width 3)) + ) + (port + (pt 152 64) + (output) + (text "result[63..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "result[63..0]" (rect 92 51 147 64)(font "Arial" (font_size 8))) + (line (pt 152 64)(pt 88 64)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 104)(line_width 1)) + (line (pt 88 32)(pt 88 96)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 104)(pt 88 96)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux5.inc b/FPGA_quartus_GE/Video/lpm_mux5.inc new file mode 100644 index 0000000..a063f55 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux5.inc @@ -0,0 +1,27 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_mux5 +( + data0x[63..0], + data1x[63..0], + data2x[63..0], + data3x[63..0], + sel[1..0] +) + +RETURNS ( + result[63..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_mux5.qip b/FPGA_quartus_GE/Video/lpm_mux5.qip new file mode 100644 index 0000000..08b2e74 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux5.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux5.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux5.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux5.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux5.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux5.vhd b/FPGA_quartus_GE/Video/lpm_mux5.vhd new file mode 100644 index 0000000..1d35347 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux5.vhd @@ -0,0 +1,373 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux5.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux5 IS + PORT + ( + data0x : IN STD_LOGIC_VECTOR (63 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (63 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (63 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (63 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (63 DOWNTO 0) + ); +END lpm_mux5; + + +ARCHITECTURE SYN OF lpm_mux5 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (63 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (63 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (3 DOWNTO 0, 63 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (63 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (63 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (63 DOWNTO 0); + +BEGIN + sub_wire5 <= data0x(63 DOWNTO 0); + sub_wire4 <= data1x(63 DOWNTO 0); + sub_wire3 <= data2x(63 DOWNTO 0); + result <= sub_wire0(63 DOWNTO 0); + sub_wire1 <= data3x(63 DOWNTO 0); + sub_wire2(3, 0) <= sub_wire1(0); + sub_wire2(3, 1) <= sub_wire1(1); + sub_wire2(3, 2) <= sub_wire1(2); + sub_wire2(3, 3) <= sub_wire1(3); + sub_wire2(3, 4) <= sub_wire1(4); + sub_wire2(3, 5) <= sub_wire1(5); + sub_wire2(3, 6) <= sub_wire1(6); + sub_wire2(3, 7) <= sub_wire1(7); + sub_wire2(3, 8) <= sub_wire1(8); + sub_wire2(3, 9) <= sub_wire1(9); + sub_wire2(3, 10) <= sub_wire1(10); + sub_wire2(3, 11) <= sub_wire1(11); + sub_wire2(3, 12) <= sub_wire1(12); + sub_wire2(3, 13) <= sub_wire1(13); + sub_wire2(3, 14) <= sub_wire1(14); + sub_wire2(3, 15) <= sub_wire1(15); + sub_wire2(3, 16) <= sub_wire1(16); + sub_wire2(3, 17) <= sub_wire1(17); + sub_wire2(3, 18) <= sub_wire1(18); + sub_wire2(3, 19) <= sub_wire1(19); + sub_wire2(3, 20) <= sub_wire1(20); + sub_wire2(3, 21) <= sub_wire1(21); + sub_wire2(3, 22) <= sub_wire1(22); + sub_wire2(3, 23) <= sub_wire1(23); + sub_wire2(3, 24) <= sub_wire1(24); + sub_wire2(3, 25) <= sub_wire1(25); + sub_wire2(3, 26) <= sub_wire1(26); + sub_wire2(3, 27) <= sub_wire1(27); + sub_wire2(3, 28) <= sub_wire1(28); + sub_wire2(3, 29) <= sub_wire1(29); + sub_wire2(3, 30) <= sub_wire1(30); + sub_wire2(3, 31) <= sub_wire1(31); + sub_wire2(3, 32) <= sub_wire1(32); + sub_wire2(3, 33) <= sub_wire1(33); + sub_wire2(3, 34) <= sub_wire1(34); + sub_wire2(3, 35) <= sub_wire1(35); + sub_wire2(3, 36) <= sub_wire1(36); + sub_wire2(3, 37) <= sub_wire1(37); + sub_wire2(3, 38) <= sub_wire1(38); + sub_wire2(3, 39) <= sub_wire1(39); + sub_wire2(3, 40) <= sub_wire1(40); + sub_wire2(3, 41) <= sub_wire1(41); + sub_wire2(3, 42) <= sub_wire1(42); + sub_wire2(3, 43) <= sub_wire1(43); + sub_wire2(3, 44) <= sub_wire1(44); + sub_wire2(3, 45) <= sub_wire1(45); + sub_wire2(3, 46) <= sub_wire1(46); + sub_wire2(3, 47) <= sub_wire1(47); + sub_wire2(3, 48) <= sub_wire1(48); + sub_wire2(3, 49) <= sub_wire1(49); + sub_wire2(3, 50) <= sub_wire1(50); + sub_wire2(3, 51) <= sub_wire1(51); + sub_wire2(3, 52) <= sub_wire1(52); + sub_wire2(3, 53) <= sub_wire1(53); + sub_wire2(3, 54) <= sub_wire1(54); + sub_wire2(3, 55) <= sub_wire1(55); + sub_wire2(3, 56) <= sub_wire1(56); + sub_wire2(3, 57) <= sub_wire1(57); + sub_wire2(3, 58) <= sub_wire1(58); + sub_wire2(3, 59) <= sub_wire1(59); + sub_wire2(3, 60) <= sub_wire1(60); + sub_wire2(3, 61) <= sub_wire1(61); + sub_wire2(3, 62) <= sub_wire1(62); + sub_wire2(3, 63) <= sub_wire1(63); + sub_wire2(2, 0) <= sub_wire3(0); + sub_wire2(2, 1) <= sub_wire3(1); + sub_wire2(2, 2) <= sub_wire3(2); + sub_wire2(2, 3) <= sub_wire3(3); + sub_wire2(2, 4) <= sub_wire3(4); + sub_wire2(2, 5) <= sub_wire3(5); + sub_wire2(2, 6) <= sub_wire3(6); + sub_wire2(2, 7) <= sub_wire3(7); + sub_wire2(2, 8) <= sub_wire3(8); + sub_wire2(2, 9) <= sub_wire3(9); + sub_wire2(2, 10) <= sub_wire3(10); + sub_wire2(2, 11) <= sub_wire3(11); + sub_wire2(2, 12) <= sub_wire3(12); + sub_wire2(2, 13) <= sub_wire3(13); + sub_wire2(2, 14) <= sub_wire3(14); + sub_wire2(2, 15) <= sub_wire3(15); + sub_wire2(2, 16) <= sub_wire3(16); + sub_wire2(2, 17) <= sub_wire3(17); + sub_wire2(2, 18) <= sub_wire3(18); + sub_wire2(2, 19) <= sub_wire3(19); + sub_wire2(2, 20) <= sub_wire3(20); + sub_wire2(2, 21) <= sub_wire3(21); + sub_wire2(2, 22) <= sub_wire3(22); + sub_wire2(2, 23) <= sub_wire3(23); + sub_wire2(2, 24) <= sub_wire3(24); + sub_wire2(2, 25) <= sub_wire3(25); + sub_wire2(2, 26) <= sub_wire3(26); + sub_wire2(2, 27) <= sub_wire3(27); + sub_wire2(2, 28) <= sub_wire3(28); + sub_wire2(2, 29) <= sub_wire3(29); + sub_wire2(2, 30) <= sub_wire3(30); + sub_wire2(2, 31) <= sub_wire3(31); + sub_wire2(2, 32) <= sub_wire3(32); + sub_wire2(2, 33) <= sub_wire3(33); + sub_wire2(2, 34) <= sub_wire3(34); + sub_wire2(2, 35) <= sub_wire3(35); + sub_wire2(2, 36) <= sub_wire3(36); + sub_wire2(2, 37) <= sub_wire3(37); + sub_wire2(2, 38) <= sub_wire3(38); + sub_wire2(2, 39) <= sub_wire3(39); + sub_wire2(2, 40) <= sub_wire3(40); + sub_wire2(2, 41) <= sub_wire3(41); + sub_wire2(2, 42) <= sub_wire3(42); + sub_wire2(2, 43) <= sub_wire3(43); + sub_wire2(2, 44) <= sub_wire3(44); + sub_wire2(2, 45) <= sub_wire3(45); + sub_wire2(2, 46) <= sub_wire3(46); + sub_wire2(2, 47) <= sub_wire3(47); + sub_wire2(2, 48) <= sub_wire3(48); + sub_wire2(2, 49) <= sub_wire3(49); + sub_wire2(2, 50) <= sub_wire3(50); + sub_wire2(2, 51) <= sub_wire3(51); + sub_wire2(2, 52) <= sub_wire3(52); + sub_wire2(2, 53) <= sub_wire3(53); + sub_wire2(2, 54) <= sub_wire3(54); + sub_wire2(2, 55) <= sub_wire3(55); + sub_wire2(2, 56) <= sub_wire3(56); + sub_wire2(2, 57) <= sub_wire3(57); + sub_wire2(2, 58) <= sub_wire3(58); + sub_wire2(2, 59) <= sub_wire3(59); + sub_wire2(2, 60) <= sub_wire3(60); + sub_wire2(2, 61) <= sub_wire3(61); + sub_wire2(2, 62) <= sub_wire3(62); + sub_wire2(2, 63) <= sub_wire3(63); + sub_wire2(1, 0) <= sub_wire4(0); + sub_wire2(1, 1) <= sub_wire4(1); + sub_wire2(1, 2) <= sub_wire4(2); + sub_wire2(1, 3) <= sub_wire4(3); + sub_wire2(1, 4) <= sub_wire4(4); + sub_wire2(1, 5) <= sub_wire4(5); + sub_wire2(1, 6) <= sub_wire4(6); + sub_wire2(1, 7) <= sub_wire4(7); + sub_wire2(1, 8) <= sub_wire4(8); + sub_wire2(1, 9) <= sub_wire4(9); + sub_wire2(1, 10) <= sub_wire4(10); + sub_wire2(1, 11) <= sub_wire4(11); + sub_wire2(1, 12) <= sub_wire4(12); + sub_wire2(1, 13) <= sub_wire4(13); + sub_wire2(1, 14) <= sub_wire4(14); + sub_wire2(1, 15) <= sub_wire4(15); + sub_wire2(1, 16) <= sub_wire4(16); + sub_wire2(1, 17) <= sub_wire4(17); + sub_wire2(1, 18) <= sub_wire4(18); + sub_wire2(1, 19) <= sub_wire4(19); + sub_wire2(1, 20) <= sub_wire4(20); + sub_wire2(1, 21) <= sub_wire4(21); + sub_wire2(1, 22) <= sub_wire4(22); + sub_wire2(1, 23) <= sub_wire4(23); + sub_wire2(1, 24) <= sub_wire4(24); + sub_wire2(1, 25) <= sub_wire4(25); + sub_wire2(1, 26) <= sub_wire4(26); + sub_wire2(1, 27) <= sub_wire4(27); + sub_wire2(1, 28) <= sub_wire4(28); + sub_wire2(1, 29) <= sub_wire4(29); + sub_wire2(1, 30) <= sub_wire4(30); + sub_wire2(1, 31) <= sub_wire4(31); + sub_wire2(1, 32) <= sub_wire4(32); + sub_wire2(1, 33) <= sub_wire4(33); + sub_wire2(1, 34) <= sub_wire4(34); + sub_wire2(1, 35) <= sub_wire4(35); + sub_wire2(1, 36) <= sub_wire4(36); + sub_wire2(1, 37) <= sub_wire4(37); + sub_wire2(1, 38) <= sub_wire4(38); + sub_wire2(1, 39) <= sub_wire4(39); + sub_wire2(1, 40) <= sub_wire4(40); + sub_wire2(1, 41) <= sub_wire4(41); + sub_wire2(1, 42) <= sub_wire4(42); + sub_wire2(1, 43) <= sub_wire4(43); + sub_wire2(1, 44) <= sub_wire4(44); + sub_wire2(1, 45) <= sub_wire4(45); + sub_wire2(1, 46) <= sub_wire4(46); + sub_wire2(1, 47) <= sub_wire4(47); + sub_wire2(1, 48) <= sub_wire4(48); + sub_wire2(1, 49) <= sub_wire4(49); + sub_wire2(1, 50) <= sub_wire4(50); + sub_wire2(1, 51) <= sub_wire4(51); + sub_wire2(1, 52) <= sub_wire4(52); + sub_wire2(1, 53) <= sub_wire4(53); + sub_wire2(1, 54) <= sub_wire4(54); + sub_wire2(1, 55) <= sub_wire4(55); + sub_wire2(1, 56) <= sub_wire4(56); + sub_wire2(1, 57) <= sub_wire4(57); + sub_wire2(1, 58) <= sub_wire4(58); + sub_wire2(1, 59) <= sub_wire4(59); + sub_wire2(1, 60) <= sub_wire4(60); + sub_wire2(1, 61) <= sub_wire4(61); + sub_wire2(1, 62) <= sub_wire4(62); + sub_wire2(1, 63) <= sub_wire4(63); + sub_wire2(0, 0) <= sub_wire5(0); + sub_wire2(0, 1) <= sub_wire5(1); + sub_wire2(0, 2) <= sub_wire5(2); + sub_wire2(0, 3) <= sub_wire5(3); + sub_wire2(0, 4) <= sub_wire5(4); + sub_wire2(0, 5) <= sub_wire5(5); + sub_wire2(0, 6) <= sub_wire5(6); + sub_wire2(0, 7) <= sub_wire5(7); + sub_wire2(0, 8) <= sub_wire5(8); + sub_wire2(0, 9) <= sub_wire5(9); + sub_wire2(0, 10) <= sub_wire5(10); + sub_wire2(0, 11) <= sub_wire5(11); + sub_wire2(0, 12) <= sub_wire5(12); + sub_wire2(0, 13) <= sub_wire5(13); + sub_wire2(0, 14) <= sub_wire5(14); + sub_wire2(0, 15) <= sub_wire5(15); + sub_wire2(0, 16) <= sub_wire5(16); + sub_wire2(0, 17) <= sub_wire5(17); + sub_wire2(0, 18) <= sub_wire5(18); + sub_wire2(0, 19) <= sub_wire5(19); + sub_wire2(0, 20) <= sub_wire5(20); + sub_wire2(0, 21) <= sub_wire5(21); + sub_wire2(0, 22) <= sub_wire5(22); + sub_wire2(0, 23) <= sub_wire5(23); + sub_wire2(0, 24) <= sub_wire5(24); + sub_wire2(0, 25) <= sub_wire5(25); + sub_wire2(0, 26) <= sub_wire5(26); + sub_wire2(0, 27) <= sub_wire5(27); + sub_wire2(0, 28) <= sub_wire5(28); + sub_wire2(0, 29) <= sub_wire5(29); + sub_wire2(0, 30) <= sub_wire5(30); + sub_wire2(0, 31) <= sub_wire5(31); + sub_wire2(0, 32) <= sub_wire5(32); + sub_wire2(0, 33) <= sub_wire5(33); + sub_wire2(0, 34) <= sub_wire5(34); + sub_wire2(0, 35) <= sub_wire5(35); + sub_wire2(0, 36) <= sub_wire5(36); + sub_wire2(0, 37) <= sub_wire5(37); + sub_wire2(0, 38) <= sub_wire5(38); + sub_wire2(0, 39) <= sub_wire5(39); + sub_wire2(0, 40) <= sub_wire5(40); + sub_wire2(0, 41) <= sub_wire5(41); + sub_wire2(0, 42) <= sub_wire5(42); + sub_wire2(0, 43) <= sub_wire5(43); + sub_wire2(0, 44) <= sub_wire5(44); + sub_wire2(0, 45) <= sub_wire5(45); + sub_wire2(0, 46) <= sub_wire5(46); + sub_wire2(0, 47) <= sub_wire5(47); + sub_wire2(0, 48) <= sub_wire5(48); + sub_wire2(0, 49) <= sub_wire5(49); + sub_wire2(0, 50) <= sub_wire5(50); + sub_wire2(0, 51) <= sub_wire5(51); + sub_wire2(0, 52) <= sub_wire5(52); + sub_wire2(0, 53) <= sub_wire5(53); + sub_wire2(0, 54) <= sub_wire5(54); + sub_wire2(0, 55) <= sub_wire5(55); + sub_wire2(0, 56) <= sub_wire5(56); + sub_wire2(0, 57) <= sub_wire5(57); + sub_wire2(0, 58) <= sub_wire5(58); + sub_wire2(0, 59) <= sub_wire5(59); + sub_wire2(0, 60) <= sub_wire5(60); + sub_wire2(0, 61) <= sub_wire5(61); + sub_wire2(0, 62) <= sub_wire5(62); + sub_wire2(0, 63) <= sub_wire5(63); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_size => 4, + lpm_type => "LPM_MUX", + lpm_width => 64, + lpm_widths => 2 + ) + PORT MAP ( + sel => sel, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "64" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "2" +-- Retrieval info: USED_PORT: data0x 0 0 64 0 INPUT NODEFVAL data0x[63..0] +-- Retrieval info: USED_PORT: data1x 0 0 64 0 INPUT NODEFVAL data1x[63..0] +-- Retrieval info: USED_PORT: data2x 0 0 64 0 INPUT NODEFVAL data2x[63..0] +-- Retrieval info: USED_PORT: data3x 0 0 64 0 INPUT NODEFVAL data3x[63..0] +-- Retrieval info: USED_PORT: result 0 0 64 0 OUTPUT NODEFVAL result[63..0] +-- Retrieval info: USED_PORT: sel 0 0 2 0 INPUT NODEFVAL sel[1..0] +-- Retrieval info: CONNECT: result 0 0 64 0 @result 0 0 64 0 +-- Retrieval info: CONNECT: @data 1 3 64 0 data3x 0 0 64 0 +-- Retrieval info: CONNECT: @data 1 2 64 0 data2x 0 0 64 0 +-- Retrieval info: CONNECT: @data 1 1 64 0 data1x 0 0 64 0 +-- Retrieval info: CONNECT: @data 1 0 64 0 data0x 0 0 64 0 +-- Retrieval info: CONNECT: @sel 0 0 2 0 sel 0 0 2 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux5.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux5.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux5.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux5.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux5_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_mux6.bsf b/FPGA_quartus_GE/Video/lpm_mux6.bsf new file mode 100644 index 0000000..2196842 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux6.bsf @@ -0,0 +1,111 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 152 192) + (text "lpm_mux6" (rect 50 2 120 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 176 25 188)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data7x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data7x[23..0]" (rect 4 27 66 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 72 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data6x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data6x[23..0]" (rect 4 43 66 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 72 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data5x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data5x[23..0]" (rect 4 59 66 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 72 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data4x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data4x[23..0]" (rect 4 75 66 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 72 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data3x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data3x[23..0]" (rect 4 91 66 104)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 72 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data2x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data2x[23..0]" (rect 4 107 66 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 72 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data1x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data1x[23..0]" (rect 4 123 66 136)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 72 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data0x[23..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "data0x[23..0]" (rect 4 139 66 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 72 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 155 27 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 72 168)(line_width 1)) + ) + (port + (pt 80 192) + (input) + (text "sel[2..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[2..0]" (rect 84 179 121 192)(font "Arial" (font_size 8))) + (line (pt 80 192)(pt 80 180)(line_width 3)) + ) + (port + (pt 152 104) + (output) + (text "result[23..0]" (rect 0 0 67 14)(font "Arial" (font_size 8))) + (text "result[23..0]" (rect 92 91 147 104)(font "Arial" (font_size 8))) + (line (pt 152 104)(pt 88 104)(line_width 3)) + ) + (drawing + (line (pt 72 24)(pt 72 184)(line_width 1)) + (line (pt 88 32)(pt 88 176)(line_width 1)) + (line (pt 72 24)(pt 88 32)(line_width 1)) + (line (pt 72 184)(pt 88 176)(line_width 1)) + (line (pt 72 162)(pt 78 168)(line_width 1)) + (line (pt 78 168)(pt 72 174)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_mux6.inc b/FPGA_quartus_GE/Video/lpm_mux6.inc new file mode 100644 index 0000000..3cf223d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux6.inc @@ -0,0 +1,32 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_mux6 +( + clock, + data0x[23..0], + data1x[23..0], + data2x[23..0], + data3x[23..0], + data4x[23..0], + data5x[23..0], + data6x[23..0], + data7x[23..0], + sel[2..0] +) + +RETURNS ( + result[23..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_mux6.qip b/FPGA_quartus_GE/Video/lpm_mux6.qip new file mode 100644 index 0000000..051a945 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux6.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_mux6.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux6.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux6.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_mux6.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_mux6.vhd b/FPGA_quartus_GE/Video/lpm_mux6.vhd new file mode 100644 index 0000000..42d5aae --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_mux6.vhd @@ -0,0 +1,335 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_mux6.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_mux6 IS + PORT + ( + clock : IN STD_LOGIC ; + data0x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR (23 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (2 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (23 DOWNTO 0) + ); +END lpm_mux6; + + +ARCHITECTURE SYN OF lpm_mux6 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (7 DOWNTO 0, 23 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (23 DOWNTO 0); + SIGNAL sub_wire9 : STD_LOGIC_VECTOR (23 DOWNTO 0); + +BEGIN + sub_wire9 <= data0x(23 DOWNTO 0); + sub_wire8 <= data1x(23 DOWNTO 0); + sub_wire7 <= data2x(23 DOWNTO 0); + sub_wire6 <= data3x(23 DOWNTO 0); + sub_wire5 <= data4x(23 DOWNTO 0); + sub_wire4 <= data5x(23 DOWNTO 0); + sub_wire3 <= data6x(23 DOWNTO 0); + result <= sub_wire0(23 DOWNTO 0); + sub_wire1 <= data7x(23 DOWNTO 0); + sub_wire2(7, 0) <= sub_wire1(0); + sub_wire2(7, 1) <= sub_wire1(1); + sub_wire2(7, 2) <= sub_wire1(2); + sub_wire2(7, 3) <= sub_wire1(3); + sub_wire2(7, 4) <= sub_wire1(4); + sub_wire2(7, 5) <= sub_wire1(5); + sub_wire2(7, 6) <= sub_wire1(6); + sub_wire2(7, 7) <= sub_wire1(7); + sub_wire2(7, 8) <= sub_wire1(8); + sub_wire2(7, 9) <= sub_wire1(9); + sub_wire2(7, 10) <= sub_wire1(10); + sub_wire2(7, 11) <= sub_wire1(11); + sub_wire2(7, 12) <= sub_wire1(12); + sub_wire2(7, 13) <= sub_wire1(13); + sub_wire2(7, 14) <= sub_wire1(14); + sub_wire2(7, 15) <= sub_wire1(15); + sub_wire2(7, 16) <= sub_wire1(16); + sub_wire2(7, 17) <= sub_wire1(17); + sub_wire2(7, 18) <= sub_wire1(18); + sub_wire2(7, 19) <= sub_wire1(19); + sub_wire2(7, 20) <= sub_wire1(20); + sub_wire2(7, 21) <= sub_wire1(21); + sub_wire2(7, 22) <= sub_wire1(22); + sub_wire2(7, 23) <= sub_wire1(23); + sub_wire2(6, 0) <= sub_wire3(0); + sub_wire2(6, 1) <= sub_wire3(1); + sub_wire2(6, 2) <= sub_wire3(2); + sub_wire2(6, 3) <= sub_wire3(3); + sub_wire2(6, 4) <= sub_wire3(4); + sub_wire2(6, 5) <= sub_wire3(5); + sub_wire2(6, 6) <= sub_wire3(6); + sub_wire2(6, 7) <= sub_wire3(7); + sub_wire2(6, 8) <= sub_wire3(8); + sub_wire2(6, 9) <= sub_wire3(9); + sub_wire2(6, 10) <= sub_wire3(10); + sub_wire2(6, 11) <= sub_wire3(11); + sub_wire2(6, 12) <= sub_wire3(12); + sub_wire2(6, 13) <= sub_wire3(13); + sub_wire2(6, 14) <= sub_wire3(14); + sub_wire2(6, 15) <= sub_wire3(15); + sub_wire2(6, 16) <= sub_wire3(16); + sub_wire2(6, 17) <= sub_wire3(17); + sub_wire2(6, 18) <= sub_wire3(18); + sub_wire2(6, 19) <= sub_wire3(19); + sub_wire2(6, 20) <= sub_wire3(20); + sub_wire2(6, 21) <= sub_wire3(21); + sub_wire2(6, 22) <= sub_wire3(22); + sub_wire2(6, 23) <= sub_wire3(23); + sub_wire2(5, 0) <= sub_wire4(0); + sub_wire2(5, 1) <= sub_wire4(1); + sub_wire2(5, 2) <= sub_wire4(2); + sub_wire2(5, 3) <= sub_wire4(3); + sub_wire2(5, 4) <= sub_wire4(4); + sub_wire2(5, 5) <= sub_wire4(5); + sub_wire2(5, 6) <= sub_wire4(6); + sub_wire2(5, 7) <= sub_wire4(7); + sub_wire2(5, 8) <= sub_wire4(8); + sub_wire2(5, 9) <= sub_wire4(9); + sub_wire2(5, 10) <= sub_wire4(10); + sub_wire2(5, 11) <= sub_wire4(11); + sub_wire2(5, 12) <= sub_wire4(12); + sub_wire2(5, 13) <= sub_wire4(13); + sub_wire2(5, 14) <= sub_wire4(14); + sub_wire2(5, 15) <= sub_wire4(15); + sub_wire2(5, 16) <= sub_wire4(16); + sub_wire2(5, 17) <= sub_wire4(17); + sub_wire2(5, 18) <= sub_wire4(18); + sub_wire2(5, 19) <= sub_wire4(19); + sub_wire2(5, 20) <= sub_wire4(20); + sub_wire2(5, 21) <= sub_wire4(21); + sub_wire2(5, 22) <= sub_wire4(22); + sub_wire2(5, 23) <= sub_wire4(23); + sub_wire2(4, 0) <= sub_wire5(0); + sub_wire2(4, 1) <= sub_wire5(1); + sub_wire2(4, 2) <= sub_wire5(2); + sub_wire2(4, 3) <= sub_wire5(3); + sub_wire2(4, 4) <= sub_wire5(4); + sub_wire2(4, 5) <= sub_wire5(5); + sub_wire2(4, 6) <= sub_wire5(6); + sub_wire2(4, 7) <= sub_wire5(7); + sub_wire2(4, 8) <= sub_wire5(8); + sub_wire2(4, 9) <= sub_wire5(9); + sub_wire2(4, 10) <= sub_wire5(10); + sub_wire2(4, 11) <= sub_wire5(11); + sub_wire2(4, 12) <= sub_wire5(12); + sub_wire2(4, 13) <= sub_wire5(13); + sub_wire2(4, 14) <= sub_wire5(14); + sub_wire2(4, 15) <= sub_wire5(15); + sub_wire2(4, 16) <= sub_wire5(16); + sub_wire2(4, 17) <= sub_wire5(17); + sub_wire2(4, 18) <= sub_wire5(18); + sub_wire2(4, 19) <= sub_wire5(19); + sub_wire2(4, 20) <= sub_wire5(20); + sub_wire2(4, 21) <= sub_wire5(21); + sub_wire2(4, 22) <= sub_wire5(22); + sub_wire2(4, 23) <= sub_wire5(23); + sub_wire2(3, 0) <= sub_wire6(0); + sub_wire2(3, 1) <= sub_wire6(1); + sub_wire2(3, 2) <= sub_wire6(2); + sub_wire2(3, 3) <= sub_wire6(3); + sub_wire2(3, 4) <= sub_wire6(4); + sub_wire2(3, 5) <= sub_wire6(5); + sub_wire2(3, 6) <= sub_wire6(6); + sub_wire2(3, 7) <= sub_wire6(7); + sub_wire2(3, 8) <= sub_wire6(8); + sub_wire2(3, 9) <= sub_wire6(9); + sub_wire2(3, 10) <= sub_wire6(10); + sub_wire2(3, 11) <= sub_wire6(11); + sub_wire2(3, 12) <= sub_wire6(12); + sub_wire2(3, 13) <= sub_wire6(13); + sub_wire2(3, 14) <= sub_wire6(14); + sub_wire2(3, 15) <= sub_wire6(15); + sub_wire2(3, 16) <= sub_wire6(16); + sub_wire2(3, 17) <= sub_wire6(17); + sub_wire2(3, 18) <= sub_wire6(18); + sub_wire2(3, 19) <= sub_wire6(19); + sub_wire2(3, 20) <= sub_wire6(20); + sub_wire2(3, 21) <= sub_wire6(21); + sub_wire2(3, 22) <= sub_wire6(22); + sub_wire2(3, 23) <= sub_wire6(23); + sub_wire2(2, 0) <= sub_wire7(0); + sub_wire2(2, 1) <= sub_wire7(1); + sub_wire2(2, 2) <= sub_wire7(2); + sub_wire2(2, 3) <= sub_wire7(3); + sub_wire2(2, 4) <= sub_wire7(4); + sub_wire2(2, 5) <= sub_wire7(5); + sub_wire2(2, 6) <= sub_wire7(6); + sub_wire2(2, 7) <= sub_wire7(7); + sub_wire2(2, 8) <= sub_wire7(8); + sub_wire2(2, 9) <= sub_wire7(9); + sub_wire2(2, 10) <= sub_wire7(10); + sub_wire2(2, 11) <= sub_wire7(11); + sub_wire2(2, 12) <= sub_wire7(12); + sub_wire2(2, 13) <= sub_wire7(13); + sub_wire2(2, 14) <= sub_wire7(14); + sub_wire2(2, 15) <= sub_wire7(15); + sub_wire2(2, 16) <= sub_wire7(16); + sub_wire2(2, 17) <= sub_wire7(17); + sub_wire2(2, 18) <= sub_wire7(18); + sub_wire2(2, 19) <= sub_wire7(19); + sub_wire2(2, 20) <= sub_wire7(20); + sub_wire2(2, 21) <= sub_wire7(21); + sub_wire2(2, 22) <= sub_wire7(22); + sub_wire2(2, 23) <= sub_wire7(23); + sub_wire2(1, 0) <= sub_wire8(0); + sub_wire2(1, 1) <= sub_wire8(1); + sub_wire2(1, 2) <= sub_wire8(2); + sub_wire2(1, 3) <= sub_wire8(3); + sub_wire2(1, 4) <= sub_wire8(4); + sub_wire2(1, 5) <= sub_wire8(5); + sub_wire2(1, 6) <= sub_wire8(6); + sub_wire2(1, 7) <= sub_wire8(7); + sub_wire2(1, 8) <= sub_wire8(8); + sub_wire2(1, 9) <= sub_wire8(9); + sub_wire2(1, 10) <= sub_wire8(10); + sub_wire2(1, 11) <= sub_wire8(11); + sub_wire2(1, 12) <= sub_wire8(12); + sub_wire2(1, 13) <= sub_wire8(13); + sub_wire2(1, 14) <= sub_wire8(14); + sub_wire2(1, 15) <= sub_wire8(15); + sub_wire2(1, 16) <= sub_wire8(16); + sub_wire2(1, 17) <= sub_wire8(17); + sub_wire2(1, 18) <= sub_wire8(18); + sub_wire2(1, 19) <= sub_wire8(19); + sub_wire2(1, 20) <= sub_wire8(20); + sub_wire2(1, 21) <= sub_wire8(21); + sub_wire2(1, 22) <= sub_wire8(22); + sub_wire2(1, 23) <= sub_wire8(23); + sub_wire2(0, 0) <= sub_wire9(0); + sub_wire2(0, 1) <= sub_wire9(1); + sub_wire2(0, 2) <= sub_wire9(2); + sub_wire2(0, 3) <= sub_wire9(3); + sub_wire2(0, 4) <= sub_wire9(4); + sub_wire2(0, 5) <= sub_wire9(5); + sub_wire2(0, 6) <= sub_wire9(6); + sub_wire2(0, 7) <= sub_wire9(7); + sub_wire2(0, 8) <= sub_wire9(8); + sub_wire2(0, 9) <= sub_wire9(9); + sub_wire2(0, 10) <= sub_wire9(10); + sub_wire2(0, 11) <= sub_wire9(11); + sub_wire2(0, 12) <= sub_wire9(12); + sub_wire2(0, 13) <= sub_wire9(13); + sub_wire2(0, 14) <= sub_wire9(14); + sub_wire2(0, 15) <= sub_wire9(15); + sub_wire2(0, 16) <= sub_wire9(16); + sub_wire2(0, 17) <= sub_wire9(17); + sub_wire2(0, 18) <= sub_wire9(18); + sub_wire2(0, 19) <= sub_wire9(19); + sub_wire2(0, 20) <= sub_wire9(20); + sub_wire2(0, 21) <= sub_wire9(21); + sub_wire2(0, 22) <= sub_wire9(22); + sub_wire2(0, 23) <= sub_wire9(23); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_pipeline => 2, + lpm_size => 8, + lpm_type => "LPM_MUX", + lpm_width => 24, + lpm_widths => 3 + ) + PORT MAP ( + sel => sel, + clock => clock, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_PIPELINE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "24" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "3" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data0x 0 0 24 0 INPUT NODEFVAL data0x[23..0] +-- Retrieval info: USED_PORT: data1x 0 0 24 0 INPUT NODEFVAL data1x[23..0] +-- Retrieval info: USED_PORT: data2x 0 0 24 0 INPUT NODEFVAL data2x[23..0] +-- Retrieval info: USED_PORT: data3x 0 0 24 0 INPUT NODEFVAL data3x[23..0] +-- Retrieval info: USED_PORT: data4x 0 0 24 0 INPUT NODEFVAL data4x[23..0] +-- Retrieval info: USED_PORT: data5x 0 0 24 0 INPUT NODEFVAL data5x[23..0] +-- Retrieval info: USED_PORT: data6x 0 0 24 0 INPUT NODEFVAL data6x[23..0] +-- Retrieval info: USED_PORT: data7x 0 0 24 0 INPUT NODEFVAL data7x[23..0] +-- Retrieval info: USED_PORT: result 0 0 24 0 OUTPUT NODEFVAL result[23..0] +-- Retrieval info: USED_PORT: sel 0 0 3 0 INPUT NODEFVAL sel[2..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: result 0 0 24 0 @result 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 7 24 0 data7x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 6 24 0 data6x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 5 24 0 data5x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 4 24 0 data4x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 3 24 0 data3x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 2 24 0 data2x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 1 24 0 data1x 0 0 24 0 +-- Retrieval info: CONNECT: @data 1 0 24 0 data0x 0 0 24 0 +-- Retrieval info: CONNECT: @sel 0 0 3 0 sel 0 0 3 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux6.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux6.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux6.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux6.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_mux6_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ.bsf b/FPGA_quartus_GE/Video/lpm_muxDZ.bsf new file mode 100644 index 0000000..f4f1c7d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ.bsf @@ -0,0 +1,76 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2009 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 168 112) + (text "lpm_muxDZ" (rect 54 2 135 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 96 25 108)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data1x[127..0]" (rect 4 27 72 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 80 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data0x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data0x[127..0]" (rect 4 43 72 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 80 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 4 59 27 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 80 72)(line_width 1)) + ) + (port + (pt 0 88) + (input) + (text "clken" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clken" (rect 4 75 28 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 80 88)(line_width 1)) + ) + (port + (pt 88 112) + (input) + (text "sel" (rect 0 0 16 14)(font "Arial" (font_size 8))) + (text "sel" (rect 92 99 105 112)(font "Arial" (font_size 8))) + (line (pt 88 112)(pt 88 100)(line_width 1)) + ) + (port + (pt 168 64) + (output) + (text "result[127..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "result[127..0]" (rect 102 51 163 64)(font "Arial" (font_size 8))) + (line (pt 168 64)(pt 96 64)(line_width 3)) + ) + (drawing + (line (pt 80 24)(pt 80 104)(line_width 1)) + (line (pt 96 32)(pt 96 96)(line_width 1)) + (line (pt 80 24)(pt 96 32)(line_width 1)) + (line (pt 80 104)(pt 96 96)(line_width 1)) + (line (pt 80 66)(pt 86 72)(line_width 1)) + (line (pt 86 72)(pt 80 78)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ.qip b/FPGA_quartus_GE/Video/lpm_muxDZ.qip new file mode 100644 index 0000000..34ffc75 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_muxDZ.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxDZ.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxDZ.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ.vhd b/FPGA_quartus_GE/Video/lpm_muxDZ.vhd new file mode 100644 index 0000000..e9bd32e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ.vhd @@ -0,0 +1,377 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_muxDZ.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_muxDZ IS + PORT + ( + clken : IN STD_LOGIC := '1'; + clock : IN STD_LOGIC ; + data0x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + sel : IN STD_LOGIC ; + result : OUT STD_LOGIC_VECTOR (127 DOWNTO 0) + ); +END lpm_muxDZ; + + +ARCHITECTURE SYN OF lpm_muxdz IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_2D (1 DOWNTO 0, 127 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (127 DOWNTO 0); + +BEGIN + sub_wire5 <= data0x(127 DOWNTO 0); + result <= sub_wire0(127 DOWNTO 0); + sub_wire1 <= sel; + sub_wire2(0) <= sub_wire1; + sub_wire3 <= data1x(127 DOWNTO 0); + sub_wire4(1, 0) <= sub_wire3(0); + sub_wire4(1, 1) <= sub_wire3(1); + sub_wire4(1, 2) <= sub_wire3(2); + sub_wire4(1, 3) <= sub_wire3(3); + sub_wire4(1, 4) <= sub_wire3(4); + sub_wire4(1, 5) <= sub_wire3(5); + sub_wire4(1, 6) <= sub_wire3(6); + sub_wire4(1, 7) <= sub_wire3(7); + sub_wire4(1, 8) <= sub_wire3(8); + sub_wire4(1, 9) <= sub_wire3(9); + sub_wire4(1, 10) <= sub_wire3(10); + sub_wire4(1, 11) <= sub_wire3(11); + sub_wire4(1, 12) <= sub_wire3(12); + sub_wire4(1, 13) <= sub_wire3(13); + sub_wire4(1, 14) <= sub_wire3(14); + sub_wire4(1, 15) <= sub_wire3(15); + sub_wire4(1, 16) <= sub_wire3(16); + sub_wire4(1, 17) <= sub_wire3(17); + sub_wire4(1, 18) <= sub_wire3(18); + sub_wire4(1, 19) <= sub_wire3(19); + sub_wire4(1, 20) <= sub_wire3(20); + sub_wire4(1, 21) <= sub_wire3(21); + sub_wire4(1, 22) <= sub_wire3(22); + sub_wire4(1, 23) <= sub_wire3(23); + sub_wire4(1, 24) <= sub_wire3(24); + sub_wire4(1, 25) <= sub_wire3(25); + sub_wire4(1, 26) <= sub_wire3(26); + sub_wire4(1, 27) <= sub_wire3(27); + sub_wire4(1, 28) <= sub_wire3(28); + sub_wire4(1, 29) <= sub_wire3(29); + sub_wire4(1, 30) <= sub_wire3(30); + sub_wire4(1, 31) <= sub_wire3(31); + sub_wire4(1, 32) <= sub_wire3(32); + sub_wire4(1, 33) <= sub_wire3(33); + sub_wire4(1, 34) <= sub_wire3(34); + sub_wire4(1, 35) <= sub_wire3(35); + sub_wire4(1, 36) <= sub_wire3(36); + sub_wire4(1, 37) <= sub_wire3(37); + sub_wire4(1, 38) <= sub_wire3(38); + sub_wire4(1, 39) <= sub_wire3(39); + sub_wire4(1, 40) <= sub_wire3(40); + sub_wire4(1, 41) <= sub_wire3(41); + sub_wire4(1, 42) <= sub_wire3(42); + sub_wire4(1, 43) <= sub_wire3(43); + sub_wire4(1, 44) <= sub_wire3(44); + sub_wire4(1, 45) <= sub_wire3(45); + sub_wire4(1, 46) <= sub_wire3(46); + sub_wire4(1, 47) <= sub_wire3(47); + sub_wire4(1, 48) <= sub_wire3(48); + sub_wire4(1, 49) <= sub_wire3(49); + sub_wire4(1, 50) <= sub_wire3(50); + sub_wire4(1, 51) <= sub_wire3(51); + sub_wire4(1, 52) <= sub_wire3(52); + sub_wire4(1, 53) <= sub_wire3(53); + sub_wire4(1, 54) <= sub_wire3(54); + sub_wire4(1, 55) <= sub_wire3(55); + sub_wire4(1, 56) <= sub_wire3(56); + sub_wire4(1, 57) <= sub_wire3(57); + sub_wire4(1, 58) <= sub_wire3(58); + sub_wire4(1, 59) <= sub_wire3(59); + sub_wire4(1, 60) <= sub_wire3(60); + sub_wire4(1, 61) <= sub_wire3(61); + sub_wire4(1, 62) <= sub_wire3(62); + sub_wire4(1, 63) <= sub_wire3(63); + sub_wire4(1, 64) <= sub_wire3(64); + sub_wire4(1, 65) <= sub_wire3(65); + sub_wire4(1, 66) <= sub_wire3(66); + sub_wire4(1, 67) <= sub_wire3(67); + sub_wire4(1, 68) <= sub_wire3(68); + sub_wire4(1, 69) <= sub_wire3(69); + sub_wire4(1, 70) <= sub_wire3(70); + sub_wire4(1, 71) <= sub_wire3(71); + sub_wire4(1, 72) <= sub_wire3(72); + sub_wire4(1, 73) <= sub_wire3(73); + sub_wire4(1, 74) <= sub_wire3(74); + sub_wire4(1, 75) <= sub_wire3(75); + sub_wire4(1, 76) <= sub_wire3(76); + sub_wire4(1, 77) <= sub_wire3(77); + sub_wire4(1, 78) <= sub_wire3(78); + sub_wire4(1, 79) <= sub_wire3(79); + sub_wire4(1, 80) <= sub_wire3(80); + sub_wire4(1, 81) <= sub_wire3(81); + sub_wire4(1, 82) <= sub_wire3(82); + sub_wire4(1, 83) <= sub_wire3(83); + sub_wire4(1, 84) <= sub_wire3(84); + sub_wire4(1, 85) <= sub_wire3(85); + sub_wire4(1, 86) <= sub_wire3(86); + sub_wire4(1, 87) <= sub_wire3(87); + sub_wire4(1, 88) <= sub_wire3(88); + sub_wire4(1, 89) <= sub_wire3(89); + sub_wire4(1, 90) <= sub_wire3(90); + sub_wire4(1, 91) <= sub_wire3(91); + sub_wire4(1, 92) <= sub_wire3(92); + sub_wire4(1, 93) <= sub_wire3(93); + sub_wire4(1, 94) <= sub_wire3(94); + sub_wire4(1, 95) <= sub_wire3(95); + sub_wire4(1, 96) <= sub_wire3(96); + sub_wire4(1, 97) <= sub_wire3(97); + sub_wire4(1, 98) <= sub_wire3(98); + sub_wire4(1, 99) <= sub_wire3(99); + sub_wire4(1, 100) <= sub_wire3(100); + sub_wire4(1, 101) <= sub_wire3(101); + sub_wire4(1, 102) <= sub_wire3(102); + sub_wire4(1, 103) <= sub_wire3(103); + sub_wire4(1, 104) <= sub_wire3(104); + sub_wire4(1, 105) <= sub_wire3(105); + sub_wire4(1, 106) <= sub_wire3(106); + sub_wire4(1, 107) <= sub_wire3(107); + sub_wire4(1, 108) <= sub_wire3(108); + sub_wire4(1, 109) <= sub_wire3(109); + sub_wire4(1, 110) <= sub_wire3(110); + sub_wire4(1, 111) <= sub_wire3(111); + sub_wire4(1, 112) <= sub_wire3(112); + sub_wire4(1, 113) <= sub_wire3(113); + sub_wire4(1, 114) <= sub_wire3(114); + sub_wire4(1, 115) <= sub_wire3(115); + sub_wire4(1, 116) <= sub_wire3(116); + sub_wire4(1, 117) <= sub_wire3(117); + sub_wire4(1, 118) <= sub_wire3(118); + sub_wire4(1, 119) <= sub_wire3(119); + sub_wire4(1, 120) <= sub_wire3(120); + sub_wire4(1, 121) <= sub_wire3(121); + sub_wire4(1, 122) <= sub_wire3(122); + sub_wire4(1, 123) <= sub_wire3(123); + sub_wire4(1, 124) <= sub_wire3(124); + sub_wire4(1, 125) <= sub_wire3(125); + sub_wire4(1, 126) <= sub_wire3(126); + sub_wire4(1, 127) <= sub_wire3(127); + sub_wire4(0, 0) <= sub_wire5(0); + sub_wire4(0, 1) <= sub_wire5(1); + sub_wire4(0, 2) <= sub_wire5(2); + sub_wire4(0, 3) <= sub_wire5(3); + sub_wire4(0, 4) <= sub_wire5(4); + sub_wire4(0, 5) <= sub_wire5(5); + sub_wire4(0, 6) <= sub_wire5(6); + sub_wire4(0, 7) <= sub_wire5(7); + sub_wire4(0, 8) <= sub_wire5(8); + sub_wire4(0, 9) <= sub_wire5(9); + sub_wire4(0, 10) <= sub_wire5(10); + sub_wire4(0, 11) <= sub_wire5(11); + sub_wire4(0, 12) <= sub_wire5(12); + sub_wire4(0, 13) <= sub_wire5(13); + sub_wire4(0, 14) <= sub_wire5(14); + sub_wire4(0, 15) <= sub_wire5(15); + sub_wire4(0, 16) <= sub_wire5(16); + sub_wire4(0, 17) <= sub_wire5(17); + sub_wire4(0, 18) <= sub_wire5(18); + sub_wire4(0, 19) <= sub_wire5(19); + sub_wire4(0, 20) <= sub_wire5(20); + sub_wire4(0, 21) <= sub_wire5(21); + sub_wire4(0, 22) <= sub_wire5(22); + sub_wire4(0, 23) <= sub_wire5(23); + sub_wire4(0, 24) <= sub_wire5(24); + sub_wire4(0, 25) <= sub_wire5(25); + sub_wire4(0, 26) <= sub_wire5(26); + sub_wire4(0, 27) <= sub_wire5(27); + sub_wire4(0, 28) <= sub_wire5(28); + sub_wire4(0, 29) <= sub_wire5(29); + sub_wire4(0, 30) <= sub_wire5(30); + sub_wire4(0, 31) <= sub_wire5(31); + sub_wire4(0, 32) <= sub_wire5(32); + sub_wire4(0, 33) <= sub_wire5(33); + sub_wire4(0, 34) <= sub_wire5(34); + sub_wire4(0, 35) <= sub_wire5(35); + sub_wire4(0, 36) <= sub_wire5(36); + sub_wire4(0, 37) <= sub_wire5(37); + sub_wire4(0, 38) <= sub_wire5(38); + sub_wire4(0, 39) <= sub_wire5(39); + sub_wire4(0, 40) <= sub_wire5(40); + sub_wire4(0, 41) <= sub_wire5(41); + sub_wire4(0, 42) <= sub_wire5(42); + sub_wire4(0, 43) <= sub_wire5(43); + sub_wire4(0, 44) <= sub_wire5(44); + sub_wire4(0, 45) <= sub_wire5(45); + sub_wire4(0, 46) <= sub_wire5(46); + sub_wire4(0, 47) <= sub_wire5(47); + sub_wire4(0, 48) <= sub_wire5(48); + sub_wire4(0, 49) <= sub_wire5(49); + sub_wire4(0, 50) <= sub_wire5(50); + sub_wire4(0, 51) <= sub_wire5(51); + sub_wire4(0, 52) <= sub_wire5(52); + sub_wire4(0, 53) <= sub_wire5(53); + sub_wire4(0, 54) <= sub_wire5(54); + sub_wire4(0, 55) <= sub_wire5(55); + sub_wire4(0, 56) <= sub_wire5(56); + sub_wire4(0, 57) <= sub_wire5(57); + sub_wire4(0, 58) <= sub_wire5(58); + sub_wire4(0, 59) <= sub_wire5(59); + sub_wire4(0, 60) <= sub_wire5(60); + sub_wire4(0, 61) <= sub_wire5(61); + sub_wire4(0, 62) <= sub_wire5(62); + sub_wire4(0, 63) <= sub_wire5(63); + sub_wire4(0, 64) <= sub_wire5(64); + sub_wire4(0, 65) <= sub_wire5(65); + sub_wire4(0, 66) <= sub_wire5(66); + sub_wire4(0, 67) <= sub_wire5(67); + sub_wire4(0, 68) <= sub_wire5(68); + sub_wire4(0, 69) <= sub_wire5(69); + sub_wire4(0, 70) <= sub_wire5(70); + sub_wire4(0, 71) <= sub_wire5(71); + sub_wire4(0, 72) <= sub_wire5(72); + sub_wire4(0, 73) <= sub_wire5(73); + sub_wire4(0, 74) <= sub_wire5(74); + sub_wire4(0, 75) <= sub_wire5(75); + sub_wire4(0, 76) <= sub_wire5(76); + sub_wire4(0, 77) <= sub_wire5(77); + sub_wire4(0, 78) <= sub_wire5(78); + sub_wire4(0, 79) <= sub_wire5(79); + sub_wire4(0, 80) <= sub_wire5(80); + sub_wire4(0, 81) <= sub_wire5(81); + sub_wire4(0, 82) <= sub_wire5(82); + sub_wire4(0, 83) <= sub_wire5(83); + sub_wire4(0, 84) <= sub_wire5(84); + sub_wire4(0, 85) <= sub_wire5(85); + sub_wire4(0, 86) <= sub_wire5(86); + sub_wire4(0, 87) <= sub_wire5(87); + sub_wire4(0, 88) <= sub_wire5(88); + sub_wire4(0, 89) <= sub_wire5(89); + sub_wire4(0, 90) <= sub_wire5(90); + sub_wire4(0, 91) <= sub_wire5(91); + sub_wire4(0, 92) <= sub_wire5(92); + sub_wire4(0, 93) <= sub_wire5(93); + sub_wire4(0, 94) <= sub_wire5(94); + sub_wire4(0, 95) <= sub_wire5(95); + sub_wire4(0, 96) <= sub_wire5(96); + sub_wire4(0, 97) <= sub_wire5(97); + sub_wire4(0, 98) <= sub_wire5(98); + sub_wire4(0, 99) <= sub_wire5(99); + sub_wire4(0, 100) <= sub_wire5(100); + sub_wire4(0, 101) <= sub_wire5(101); + sub_wire4(0, 102) <= sub_wire5(102); + sub_wire4(0, 103) <= sub_wire5(103); + sub_wire4(0, 104) <= sub_wire5(104); + sub_wire4(0, 105) <= sub_wire5(105); + sub_wire4(0, 106) <= sub_wire5(106); + sub_wire4(0, 107) <= sub_wire5(107); + sub_wire4(0, 108) <= sub_wire5(108); + sub_wire4(0, 109) <= sub_wire5(109); + sub_wire4(0, 110) <= sub_wire5(110); + sub_wire4(0, 111) <= sub_wire5(111); + sub_wire4(0, 112) <= sub_wire5(112); + sub_wire4(0, 113) <= sub_wire5(113); + sub_wire4(0, 114) <= sub_wire5(114); + sub_wire4(0, 115) <= sub_wire5(115); + sub_wire4(0, 116) <= sub_wire5(116); + sub_wire4(0, 117) <= sub_wire5(117); + sub_wire4(0, 118) <= sub_wire5(118); + sub_wire4(0, 119) <= sub_wire5(119); + sub_wire4(0, 120) <= sub_wire5(120); + sub_wire4(0, 121) <= sub_wire5(121); + sub_wire4(0, 122) <= sub_wire5(122); + sub_wire4(0, 123) <= sub_wire5(123); + sub_wire4(0, 124) <= sub_wire5(124); + sub_wire4(0, 125) <= sub_wire5(125); + sub_wire4(0, 126) <= sub_wire5(126); + sub_wire4(0, 127) <= sub_wire5(127); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_pipeline => 1, + lpm_size => 2, + lpm_type => "LPM_MUX", + lpm_width => 128, + lpm_widths => 1 + ) + PORT MAP ( + sel => sub_wire2, + clken => clken, + clock => clock, + data => sub_wire4, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_PIPELINE NUMERIC "1" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "1" +-- Retrieval info: USED_PORT: clken 0 0 0 0 INPUT VCC clken +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data0x 0 0 128 0 INPUT NODEFVAL data0x[127..0] +-- Retrieval info: USED_PORT: data1x 0 0 128 0 INPUT NODEFVAL data1x[127..0] +-- Retrieval info: USED_PORT: result 0 0 128 0 OUTPUT NODEFVAL result[127..0] +-- Retrieval info: USED_PORT: sel 0 0 0 0 INPUT NODEFVAL sel +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @clken 0 0 0 0 clken 0 0 0 0 +-- Retrieval info: CONNECT: result 0 0 128 0 @result 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 1 128 0 data1x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 0 128 0 data0x 0 0 128 0 +-- Retrieval info: CONNECT: @sel 0 0 1 0 sel 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ2.bsf b/FPGA_quartus_GE/Video/lpm_muxDZ2.bsf new file mode 100644 index 0000000..b7e3184 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ2.bsf @@ -0,0 +1,60 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2009 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 80) + (text "lpm_muxDZ2" (rect 10 2 99 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data1" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "data1" (rect 4 27 31 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 40 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "data0" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "data0" (rect 4 43 31 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 40 56)(line_width 1)) + ) + (port + (pt 48 80) + (input) + (text "sel" (rect 0 0 16 14)(font "Arial" (font_size 8))) + (text "sel" (rect 52 67 65 80)(font "Arial" (font_size 8))) + (line (pt 48 80)(pt 48 68)(line_width 1)) + ) + (port + (pt 96 48) + (output) + (text "result" (rect 0 0 31 14)(font "Arial" (font_size 8))) + (text "result" (rect 66 35 91 48)(font "Arial" (font_size 8))) + (line (pt 96 48)(pt 56 48)(line_width 1)) + ) + (drawing + (line (pt 40 24)(pt 40 72)(line_width 1)) + (line (pt 56 32)(pt 56 64)(line_width 1)) + (line (pt 40 24)(pt 56 32)(line_width 1)) + (line (pt 40 72)(pt 56 64)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ2.qip b/FPGA_quartus_GE/Video/lpm_muxDZ2.qip new file mode 100644 index 0000000..8203bc6 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ2.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_muxDZ2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxDZ2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxDZ2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_muxDZ2.vhd b/FPGA_quartus_GE/Video/lpm_muxDZ2.vhd new file mode 100644 index 0000000..42e0c81 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxDZ2.vhd @@ -0,0 +1,115 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_muxDZ2.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_muxDZ2 IS + PORT + ( + data0 : IN STD_LOGIC ; + data1 : IN STD_LOGIC ; + sel : IN STD_LOGIC ; + result : OUT STD_LOGIC + ); +END lpm_muxDZ2; + + +ARCHITECTURE SYN OF lpm_muxdz2 IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_2D (1 DOWNTO 0, 0 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC ; + +BEGIN + sub_wire6 <= data0; + sub_wire1 <= sub_wire0(0); + result <= sub_wire1; + sub_wire2 <= sel; + sub_wire3(0) <= sub_wire2; + sub_wire4 <= data1; + sub_wire5(1, 0) <= sub_wire4; + sub_wire5(0, 0) <= sub_wire6; + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_size => 2, + lpm_type => "LPM_MUX", + lpm_width => 1, + lpm_widths => 1 + ) + PORT MAP ( + sel => sub_wire3, + data => sub_wire5, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "1" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "1" +-- Retrieval info: USED_PORT: data0 0 0 0 0 INPUT NODEFVAL data0 +-- Retrieval info: USED_PORT: data1 0 0 0 0 INPUT NODEFVAL data1 +-- Retrieval info: USED_PORT: result 0 0 0 0 OUTPUT NODEFVAL result +-- Retrieval info: USED_PORT: sel 0 0 0 0 INPUT NODEFVAL sel +-- Retrieval info: CONNECT: result 0 0 0 0 @result 0 0 1 0 +-- Retrieval info: CONNECT: @data 1 1 1 0 data1 0 0 0 0 +-- Retrieval info: CONNECT: @data 1 0 1 0 data0 0 0 0 0 +-- Retrieval info: CONNECT: @sel 0 0 1 0 sel 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ2.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxDZ2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_muxVDM.bsf b/FPGA_quartus_GE/Video/lpm_muxVDM.bsf new file mode 100644 index 0000000..42d235c --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxVDM.bsf @@ -0,0 +1,158 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2009 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 168 304) + (text "lpm_muxVDM" (rect 47 2 143 18)(font "Arial" (font_size 10))) + (text "inst" (rect 8 288 25 300)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "data15x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data15x[127..0]" (rect 4 27 78 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 80 40)(line_width 3)) + ) + (port + (pt 0 56) + (input) + (text "data14x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data14x[127..0]" (rect 4 43 78 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 80 56)(line_width 3)) + ) + (port + (pt 0 72) + (input) + (text "data13x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data13x[127..0]" (rect 4 59 78 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 80 72)(line_width 3)) + ) + (port + (pt 0 88) + (input) + (text "data12x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data12x[127..0]" (rect 4 75 78 88)(font "Arial" (font_size 8))) + (line (pt 0 88)(pt 80 88)(line_width 3)) + ) + (port + (pt 0 104) + (input) + (text "data11x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data11x[127..0]" (rect 4 91 78 104)(font "Arial" (font_size 8))) + (line (pt 0 104)(pt 80 104)(line_width 3)) + ) + (port + (pt 0 120) + (input) + (text "data10x[127..0]" (rect 0 0 88 14)(font "Arial" (font_size 8))) + (text "data10x[127..0]" (rect 4 107 78 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 80 120)(line_width 3)) + ) + (port + (pt 0 136) + (input) + (text "data9x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data9x[127..0]" (rect 4 123 72 136)(font "Arial" (font_size 8))) + (line (pt 0 136)(pt 80 136)(line_width 3)) + ) + (port + (pt 0 152) + (input) + (text "data8x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data8x[127..0]" (rect 4 139 72 152)(font "Arial" (font_size 8))) + (line (pt 0 152)(pt 80 152)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "data7x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data7x[127..0]" (rect 4 155 72 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 80 168)(line_width 3)) + ) + (port + (pt 0 184) + (input) + (text "data6x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data6x[127..0]" (rect 4 171 72 184)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 80 184)(line_width 3)) + ) + (port + (pt 0 200) + (input) + (text "data5x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data5x[127..0]" (rect 4 187 72 200)(font "Arial" (font_size 8))) + (line (pt 0 200)(pt 80 200)(line_width 3)) + ) + (port + (pt 0 216) + (input) + (text "data4x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data4x[127..0]" (rect 4 203 72 216)(font "Arial" (font_size 8))) + (line (pt 0 216)(pt 80 216)(line_width 3)) + ) + (port + (pt 0 232) + (input) + (text "data3x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data3x[127..0]" (rect 4 219 72 232)(font "Arial" (font_size 8))) + (line (pt 0 232)(pt 80 232)(line_width 3)) + ) + (port + (pt 0 248) + (input) + (text "data2x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data2x[127..0]" (rect 4 235 72 248)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 80 248)(line_width 3)) + ) + (port + (pt 0 264) + (input) + (text "data1x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data1x[127..0]" (rect 4 251 72 264)(font "Arial" (font_size 8))) + (line (pt 0 264)(pt 80 264)(line_width 3)) + ) + (port + (pt 0 280) + (input) + (text "data0x[127..0]" (rect 0 0 81 14)(font "Arial" (font_size 8))) + (text "data0x[127..0]" (rect 4 267 72 280)(font "Arial" (font_size 8))) + (line (pt 0 280)(pt 80 280)(line_width 3)) + ) + (port + (pt 88 304) + (input) + (text "sel[3..0]" (rect 0 0 44 14)(font "Arial" (font_size 8))) + (text "sel[3..0]" (rect 92 291 129 304)(font "Arial" (font_size 8))) + (line (pt 88 304)(pt 88 292)(line_width 3)) + ) + (port + (pt 168 160) + (output) + (text "result[127..0]" (rect 0 0 74 14)(font "Arial" (font_size 8))) + (text "result[127..0]" (rect 102 147 163 160)(font "Arial" (font_size 8))) + (line (pt 168 160)(pt 96 160)(line_width 3)) + ) + (drawing + (line (pt 80 24)(pt 80 296)(line_width 1)) + (line (pt 96 32)(pt 96 288)(line_width 1)) + (line (pt 80 24)(pt 96 32)(line_width 1)) + (line (pt 80 296)(pt 96 288)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_muxVDM.qip b/FPGA_quartus_GE/Video/lpm_muxVDM.qip new file mode 100644 index 0000000..08a824e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxVDM.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_MUX" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_muxVDM.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxVDM.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_muxVDM.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_muxVDM.vhd b/FPGA_quartus_GE/Video/lpm_muxVDM.vhd new file mode 100644 index 0000000..662c8be --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_muxVDM.vhd @@ -0,0 +1,2225 @@ +-- megafunction wizard: %LPM_MUX% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_mux + +-- ============================================================ +-- File Name: lpm_muxVDM.vhd +-- Megafunction Name(s): +-- lpm_mux +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 222 10/21/2009 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2009 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.lpm_components.all; + +ENTITY lpm_muxVDM IS + PORT + ( + data0x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data10x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data11x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data12x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data13x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data14x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data15x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data8x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + data9x : IN STD_LOGIC_VECTOR (127 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR (3 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR (127 DOWNTO 0) + ); +END lpm_muxVDM; + + +ARCHITECTURE SYN OF lpm_muxvdm IS + +-- type STD_LOGIC_2D is array (NATURAL RANGE <>, NATURAL RANGE <>) of STD_LOGIC; + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire2 : STD_LOGIC_2D (15 DOWNTO 0, 127 DOWNTO 0); + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire9 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire10 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire11 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire12 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire13 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire14 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire15 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire16 : STD_LOGIC_VECTOR (127 DOWNTO 0); + SIGNAL sub_wire17 : STD_LOGIC_VECTOR (127 DOWNTO 0); + +BEGIN + sub_wire17 <= data0x(127 DOWNTO 0); + sub_wire16 <= data1x(127 DOWNTO 0); + sub_wire15 <= data2x(127 DOWNTO 0); + sub_wire14 <= data3x(127 DOWNTO 0); + sub_wire13 <= data4x(127 DOWNTO 0); + sub_wire12 <= data5x(127 DOWNTO 0); + sub_wire11 <= data6x(127 DOWNTO 0); + sub_wire10 <= data7x(127 DOWNTO 0); + sub_wire9 <= data8x(127 DOWNTO 0); + sub_wire8 <= data9x(127 DOWNTO 0); + sub_wire7 <= data10x(127 DOWNTO 0); + sub_wire6 <= data11x(127 DOWNTO 0); + sub_wire5 <= data12x(127 DOWNTO 0); + sub_wire4 <= data13x(127 DOWNTO 0); + sub_wire3 <= data14x(127 DOWNTO 0); + result <= sub_wire0(127 DOWNTO 0); + sub_wire1 <= data15x(127 DOWNTO 0); + sub_wire2(15, 0) <= sub_wire1(0); + sub_wire2(15, 1) <= sub_wire1(1); + sub_wire2(15, 2) <= sub_wire1(2); + sub_wire2(15, 3) <= sub_wire1(3); + sub_wire2(15, 4) <= sub_wire1(4); + sub_wire2(15, 5) <= sub_wire1(5); + sub_wire2(15, 6) <= sub_wire1(6); + sub_wire2(15, 7) <= sub_wire1(7); + sub_wire2(15, 8) <= sub_wire1(8); + sub_wire2(15, 9) <= sub_wire1(9); + sub_wire2(15, 10) <= sub_wire1(10); + sub_wire2(15, 11) <= sub_wire1(11); + sub_wire2(15, 12) <= sub_wire1(12); + sub_wire2(15, 13) <= sub_wire1(13); + sub_wire2(15, 14) <= sub_wire1(14); + sub_wire2(15, 15) <= sub_wire1(15); + sub_wire2(15, 16) <= sub_wire1(16); + sub_wire2(15, 17) <= sub_wire1(17); + sub_wire2(15, 18) <= sub_wire1(18); + sub_wire2(15, 19) <= sub_wire1(19); + sub_wire2(15, 20) <= sub_wire1(20); + sub_wire2(15, 21) <= sub_wire1(21); + sub_wire2(15, 22) <= sub_wire1(22); + sub_wire2(15, 23) <= sub_wire1(23); + sub_wire2(15, 24) <= sub_wire1(24); + sub_wire2(15, 25) <= sub_wire1(25); + sub_wire2(15, 26) <= sub_wire1(26); + sub_wire2(15, 27) <= sub_wire1(27); + sub_wire2(15, 28) <= sub_wire1(28); + sub_wire2(15, 29) <= sub_wire1(29); + sub_wire2(15, 30) <= sub_wire1(30); + sub_wire2(15, 31) <= sub_wire1(31); + sub_wire2(15, 32) <= sub_wire1(32); + sub_wire2(15, 33) <= sub_wire1(33); + sub_wire2(15, 34) <= sub_wire1(34); + sub_wire2(15, 35) <= sub_wire1(35); + sub_wire2(15, 36) <= sub_wire1(36); + sub_wire2(15, 37) <= sub_wire1(37); + sub_wire2(15, 38) <= sub_wire1(38); + sub_wire2(15, 39) <= sub_wire1(39); + sub_wire2(15, 40) <= sub_wire1(40); + sub_wire2(15, 41) <= sub_wire1(41); + sub_wire2(15, 42) <= sub_wire1(42); + sub_wire2(15, 43) <= sub_wire1(43); + sub_wire2(15, 44) <= sub_wire1(44); + sub_wire2(15, 45) <= sub_wire1(45); + sub_wire2(15, 46) <= sub_wire1(46); + sub_wire2(15, 47) <= sub_wire1(47); + sub_wire2(15, 48) <= sub_wire1(48); + sub_wire2(15, 49) <= sub_wire1(49); + sub_wire2(15, 50) <= sub_wire1(50); + sub_wire2(15, 51) <= sub_wire1(51); + sub_wire2(15, 52) <= sub_wire1(52); + sub_wire2(15, 53) <= sub_wire1(53); + sub_wire2(15, 54) <= sub_wire1(54); + sub_wire2(15, 55) <= sub_wire1(55); + sub_wire2(15, 56) <= sub_wire1(56); + sub_wire2(15, 57) <= sub_wire1(57); + sub_wire2(15, 58) <= sub_wire1(58); + sub_wire2(15, 59) <= sub_wire1(59); + sub_wire2(15, 60) <= sub_wire1(60); + sub_wire2(15, 61) <= sub_wire1(61); + sub_wire2(15, 62) <= sub_wire1(62); + sub_wire2(15, 63) <= sub_wire1(63); + sub_wire2(15, 64) <= sub_wire1(64); + sub_wire2(15, 65) <= sub_wire1(65); + sub_wire2(15, 66) <= sub_wire1(66); + sub_wire2(15, 67) <= sub_wire1(67); + sub_wire2(15, 68) <= sub_wire1(68); + sub_wire2(15, 69) <= sub_wire1(69); + sub_wire2(15, 70) <= sub_wire1(70); + sub_wire2(15, 71) <= sub_wire1(71); + sub_wire2(15, 72) <= sub_wire1(72); + sub_wire2(15, 73) <= sub_wire1(73); + sub_wire2(15, 74) <= sub_wire1(74); + sub_wire2(15, 75) <= sub_wire1(75); + sub_wire2(15, 76) <= sub_wire1(76); + sub_wire2(15, 77) <= sub_wire1(77); + sub_wire2(15, 78) <= sub_wire1(78); + sub_wire2(15, 79) <= sub_wire1(79); + sub_wire2(15, 80) <= sub_wire1(80); + sub_wire2(15, 81) <= sub_wire1(81); + sub_wire2(15, 82) <= sub_wire1(82); + sub_wire2(15, 83) <= sub_wire1(83); + sub_wire2(15, 84) <= sub_wire1(84); + sub_wire2(15, 85) <= sub_wire1(85); + sub_wire2(15, 86) <= sub_wire1(86); + sub_wire2(15, 87) <= sub_wire1(87); + sub_wire2(15, 88) <= sub_wire1(88); + sub_wire2(15, 89) <= sub_wire1(89); + sub_wire2(15, 90) <= sub_wire1(90); + sub_wire2(15, 91) <= sub_wire1(91); + sub_wire2(15, 92) <= sub_wire1(92); + sub_wire2(15, 93) <= sub_wire1(93); + sub_wire2(15, 94) <= sub_wire1(94); + sub_wire2(15, 95) <= sub_wire1(95); + sub_wire2(15, 96) <= sub_wire1(96); + sub_wire2(15, 97) <= sub_wire1(97); + sub_wire2(15, 98) <= sub_wire1(98); + sub_wire2(15, 99) <= sub_wire1(99); + sub_wire2(15, 100) <= sub_wire1(100); + sub_wire2(15, 101) <= sub_wire1(101); + sub_wire2(15, 102) <= sub_wire1(102); + sub_wire2(15, 103) <= sub_wire1(103); + sub_wire2(15, 104) <= sub_wire1(104); + sub_wire2(15, 105) <= sub_wire1(105); + sub_wire2(15, 106) <= sub_wire1(106); + sub_wire2(15, 107) <= sub_wire1(107); + sub_wire2(15, 108) <= sub_wire1(108); + sub_wire2(15, 109) <= sub_wire1(109); + sub_wire2(15, 110) <= sub_wire1(110); + sub_wire2(15, 111) <= sub_wire1(111); + sub_wire2(15, 112) <= sub_wire1(112); + sub_wire2(15, 113) <= sub_wire1(113); + sub_wire2(15, 114) <= sub_wire1(114); + sub_wire2(15, 115) <= sub_wire1(115); + sub_wire2(15, 116) <= sub_wire1(116); + sub_wire2(15, 117) <= sub_wire1(117); + sub_wire2(15, 118) <= sub_wire1(118); + sub_wire2(15, 119) <= sub_wire1(119); + sub_wire2(15, 120) <= sub_wire1(120); + sub_wire2(15, 121) <= sub_wire1(121); + sub_wire2(15, 122) <= sub_wire1(122); + sub_wire2(15, 123) <= sub_wire1(123); + sub_wire2(15, 124) <= sub_wire1(124); + sub_wire2(15, 125) <= sub_wire1(125); + sub_wire2(15, 126) <= sub_wire1(126); + sub_wire2(15, 127) <= sub_wire1(127); + sub_wire2(14, 0) <= sub_wire3(0); + sub_wire2(14, 1) <= sub_wire3(1); + sub_wire2(14, 2) <= sub_wire3(2); + sub_wire2(14, 3) <= sub_wire3(3); + sub_wire2(14, 4) <= sub_wire3(4); + sub_wire2(14, 5) <= sub_wire3(5); + sub_wire2(14, 6) <= sub_wire3(6); + sub_wire2(14, 7) <= sub_wire3(7); + sub_wire2(14, 8) <= sub_wire3(8); + sub_wire2(14, 9) <= sub_wire3(9); + sub_wire2(14, 10) <= sub_wire3(10); + sub_wire2(14, 11) <= sub_wire3(11); + sub_wire2(14, 12) <= sub_wire3(12); + sub_wire2(14, 13) <= sub_wire3(13); + sub_wire2(14, 14) <= sub_wire3(14); + sub_wire2(14, 15) <= sub_wire3(15); + sub_wire2(14, 16) <= sub_wire3(16); + sub_wire2(14, 17) <= sub_wire3(17); + sub_wire2(14, 18) <= sub_wire3(18); + sub_wire2(14, 19) <= sub_wire3(19); + sub_wire2(14, 20) <= sub_wire3(20); + sub_wire2(14, 21) <= sub_wire3(21); + sub_wire2(14, 22) <= sub_wire3(22); + sub_wire2(14, 23) <= sub_wire3(23); + sub_wire2(14, 24) <= sub_wire3(24); + sub_wire2(14, 25) <= sub_wire3(25); + sub_wire2(14, 26) <= sub_wire3(26); + sub_wire2(14, 27) <= sub_wire3(27); + sub_wire2(14, 28) <= sub_wire3(28); + sub_wire2(14, 29) <= sub_wire3(29); + sub_wire2(14, 30) <= sub_wire3(30); + sub_wire2(14, 31) <= sub_wire3(31); + sub_wire2(14, 32) <= sub_wire3(32); + sub_wire2(14, 33) <= sub_wire3(33); + sub_wire2(14, 34) <= sub_wire3(34); + sub_wire2(14, 35) <= sub_wire3(35); + sub_wire2(14, 36) <= sub_wire3(36); + sub_wire2(14, 37) <= sub_wire3(37); + sub_wire2(14, 38) <= sub_wire3(38); + sub_wire2(14, 39) <= sub_wire3(39); + sub_wire2(14, 40) <= sub_wire3(40); + sub_wire2(14, 41) <= sub_wire3(41); + sub_wire2(14, 42) <= sub_wire3(42); + sub_wire2(14, 43) <= sub_wire3(43); + sub_wire2(14, 44) <= sub_wire3(44); + sub_wire2(14, 45) <= sub_wire3(45); + sub_wire2(14, 46) <= sub_wire3(46); + sub_wire2(14, 47) <= sub_wire3(47); + sub_wire2(14, 48) <= sub_wire3(48); + sub_wire2(14, 49) <= sub_wire3(49); + sub_wire2(14, 50) <= sub_wire3(50); + sub_wire2(14, 51) <= sub_wire3(51); + sub_wire2(14, 52) <= sub_wire3(52); + sub_wire2(14, 53) <= sub_wire3(53); + sub_wire2(14, 54) <= sub_wire3(54); + sub_wire2(14, 55) <= sub_wire3(55); + sub_wire2(14, 56) <= sub_wire3(56); + sub_wire2(14, 57) <= sub_wire3(57); + sub_wire2(14, 58) <= sub_wire3(58); + sub_wire2(14, 59) <= sub_wire3(59); + sub_wire2(14, 60) <= sub_wire3(60); + sub_wire2(14, 61) <= sub_wire3(61); + sub_wire2(14, 62) <= sub_wire3(62); + sub_wire2(14, 63) <= sub_wire3(63); + sub_wire2(14, 64) <= sub_wire3(64); + sub_wire2(14, 65) <= sub_wire3(65); + sub_wire2(14, 66) <= sub_wire3(66); + sub_wire2(14, 67) <= sub_wire3(67); + sub_wire2(14, 68) <= sub_wire3(68); + sub_wire2(14, 69) <= sub_wire3(69); + sub_wire2(14, 70) <= sub_wire3(70); + sub_wire2(14, 71) <= sub_wire3(71); + sub_wire2(14, 72) <= sub_wire3(72); + sub_wire2(14, 73) <= sub_wire3(73); + sub_wire2(14, 74) <= sub_wire3(74); + sub_wire2(14, 75) <= sub_wire3(75); + sub_wire2(14, 76) <= sub_wire3(76); + sub_wire2(14, 77) <= sub_wire3(77); + sub_wire2(14, 78) <= sub_wire3(78); + sub_wire2(14, 79) <= sub_wire3(79); + sub_wire2(14, 80) <= sub_wire3(80); + sub_wire2(14, 81) <= sub_wire3(81); + sub_wire2(14, 82) <= sub_wire3(82); + sub_wire2(14, 83) <= sub_wire3(83); + sub_wire2(14, 84) <= sub_wire3(84); + sub_wire2(14, 85) <= sub_wire3(85); + sub_wire2(14, 86) <= sub_wire3(86); + sub_wire2(14, 87) <= sub_wire3(87); + sub_wire2(14, 88) <= sub_wire3(88); + sub_wire2(14, 89) <= sub_wire3(89); + sub_wire2(14, 90) <= sub_wire3(90); + sub_wire2(14, 91) <= sub_wire3(91); + sub_wire2(14, 92) <= sub_wire3(92); + sub_wire2(14, 93) <= sub_wire3(93); + sub_wire2(14, 94) <= sub_wire3(94); + sub_wire2(14, 95) <= sub_wire3(95); + sub_wire2(14, 96) <= sub_wire3(96); + sub_wire2(14, 97) <= sub_wire3(97); + sub_wire2(14, 98) <= sub_wire3(98); + sub_wire2(14, 99) <= sub_wire3(99); + sub_wire2(14, 100) <= sub_wire3(100); + sub_wire2(14, 101) <= sub_wire3(101); + sub_wire2(14, 102) <= sub_wire3(102); + sub_wire2(14, 103) <= sub_wire3(103); + sub_wire2(14, 104) <= sub_wire3(104); + sub_wire2(14, 105) <= sub_wire3(105); + sub_wire2(14, 106) <= sub_wire3(106); + sub_wire2(14, 107) <= sub_wire3(107); + sub_wire2(14, 108) <= sub_wire3(108); + sub_wire2(14, 109) <= sub_wire3(109); + sub_wire2(14, 110) <= sub_wire3(110); + sub_wire2(14, 111) <= sub_wire3(111); + sub_wire2(14, 112) <= sub_wire3(112); + sub_wire2(14, 113) <= sub_wire3(113); + sub_wire2(14, 114) <= sub_wire3(114); + sub_wire2(14, 115) <= sub_wire3(115); + sub_wire2(14, 116) <= sub_wire3(116); + sub_wire2(14, 117) <= sub_wire3(117); + sub_wire2(14, 118) <= sub_wire3(118); + sub_wire2(14, 119) <= sub_wire3(119); + sub_wire2(14, 120) <= sub_wire3(120); + sub_wire2(14, 121) <= sub_wire3(121); + sub_wire2(14, 122) <= sub_wire3(122); + sub_wire2(14, 123) <= sub_wire3(123); + sub_wire2(14, 124) <= sub_wire3(124); + sub_wire2(14, 125) <= sub_wire3(125); + sub_wire2(14, 126) <= sub_wire3(126); + sub_wire2(14, 127) <= sub_wire3(127); + sub_wire2(13, 0) <= sub_wire4(0); + sub_wire2(13, 1) <= sub_wire4(1); + sub_wire2(13, 2) <= sub_wire4(2); + sub_wire2(13, 3) <= sub_wire4(3); + sub_wire2(13, 4) <= sub_wire4(4); + sub_wire2(13, 5) <= sub_wire4(5); + sub_wire2(13, 6) <= sub_wire4(6); + sub_wire2(13, 7) <= sub_wire4(7); + sub_wire2(13, 8) <= sub_wire4(8); + sub_wire2(13, 9) <= sub_wire4(9); + sub_wire2(13, 10) <= sub_wire4(10); + sub_wire2(13, 11) <= sub_wire4(11); + sub_wire2(13, 12) <= sub_wire4(12); + sub_wire2(13, 13) <= sub_wire4(13); + sub_wire2(13, 14) <= sub_wire4(14); + sub_wire2(13, 15) <= sub_wire4(15); + sub_wire2(13, 16) <= sub_wire4(16); + sub_wire2(13, 17) <= sub_wire4(17); + sub_wire2(13, 18) <= sub_wire4(18); + sub_wire2(13, 19) <= sub_wire4(19); + sub_wire2(13, 20) <= sub_wire4(20); + sub_wire2(13, 21) <= sub_wire4(21); + sub_wire2(13, 22) <= sub_wire4(22); + sub_wire2(13, 23) <= sub_wire4(23); + sub_wire2(13, 24) <= sub_wire4(24); + sub_wire2(13, 25) <= sub_wire4(25); + sub_wire2(13, 26) <= sub_wire4(26); + sub_wire2(13, 27) <= sub_wire4(27); + sub_wire2(13, 28) <= sub_wire4(28); + sub_wire2(13, 29) <= sub_wire4(29); + sub_wire2(13, 30) <= sub_wire4(30); + sub_wire2(13, 31) <= sub_wire4(31); + sub_wire2(13, 32) <= sub_wire4(32); + sub_wire2(13, 33) <= sub_wire4(33); + sub_wire2(13, 34) <= sub_wire4(34); + sub_wire2(13, 35) <= sub_wire4(35); + sub_wire2(13, 36) <= sub_wire4(36); + sub_wire2(13, 37) <= sub_wire4(37); + sub_wire2(13, 38) <= sub_wire4(38); + sub_wire2(13, 39) <= sub_wire4(39); + sub_wire2(13, 40) <= sub_wire4(40); + sub_wire2(13, 41) <= sub_wire4(41); + sub_wire2(13, 42) <= sub_wire4(42); + sub_wire2(13, 43) <= sub_wire4(43); + sub_wire2(13, 44) <= sub_wire4(44); + sub_wire2(13, 45) <= sub_wire4(45); + sub_wire2(13, 46) <= sub_wire4(46); + sub_wire2(13, 47) <= sub_wire4(47); + sub_wire2(13, 48) <= sub_wire4(48); + sub_wire2(13, 49) <= sub_wire4(49); + sub_wire2(13, 50) <= sub_wire4(50); + sub_wire2(13, 51) <= sub_wire4(51); + sub_wire2(13, 52) <= sub_wire4(52); + sub_wire2(13, 53) <= sub_wire4(53); + sub_wire2(13, 54) <= sub_wire4(54); + sub_wire2(13, 55) <= sub_wire4(55); + sub_wire2(13, 56) <= sub_wire4(56); + sub_wire2(13, 57) <= sub_wire4(57); + sub_wire2(13, 58) <= sub_wire4(58); + sub_wire2(13, 59) <= sub_wire4(59); + sub_wire2(13, 60) <= sub_wire4(60); + sub_wire2(13, 61) <= sub_wire4(61); + sub_wire2(13, 62) <= sub_wire4(62); + sub_wire2(13, 63) <= sub_wire4(63); + sub_wire2(13, 64) <= sub_wire4(64); + sub_wire2(13, 65) <= sub_wire4(65); + sub_wire2(13, 66) <= sub_wire4(66); + sub_wire2(13, 67) <= sub_wire4(67); + sub_wire2(13, 68) <= sub_wire4(68); + sub_wire2(13, 69) <= sub_wire4(69); + sub_wire2(13, 70) <= sub_wire4(70); + sub_wire2(13, 71) <= sub_wire4(71); + sub_wire2(13, 72) <= sub_wire4(72); + sub_wire2(13, 73) <= sub_wire4(73); + sub_wire2(13, 74) <= sub_wire4(74); + sub_wire2(13, 75) <= sub_wire4(75); + sub_wire2(13, 76) <= sub_wire4(76); + sub_wire2(13, 77) <= sub_wire4(77); + sub_wire2(13, 78) <= sub_wire4(78); + sub_wire2(13, 79) <= sub_wire4(79); + sub_wire2(13, 80) <= sub_wire4(80); + sub_wire2(13, 81) <= sub_wire4(81); + sub_wire2(13, 82) <= sub_wire4(82); + sub_wire2(13, 83) <= sub_wire4(83); + sub_wire2(13, 84) <= sub_wire4(84); + sub_wire2(13, 85) <= sub_wire4(85); + sub_wire2(13, 86) <= sub_wire4(86); + sub_wire2(13, 87) <= sub_wire4(87); + sub_wire2(13, 88) <= sub_wire4(88); + sub_wire2(13, 89) <= sub_wire4(89); + sub_wire2(13, 90) <= sub_wire4(90); + sub_wire2(13, 91) <= sub_wire4(91); + sub_wire2(13, 92) <= sub_wire4(92); + sub_wire2(13, 93) <= sub_wire4(93); + sub_wire2(13, 94) <= sub_wire4(94); + sub_wire2(13, 95) <= sub_wire4(95); + sub_wire2(13, 96) <= sub_wire4(96); + sub_wire2(13, 97) <= sub_wire4(97); + sub_wire2(13, 98) <= sub_wire4(98); + sub_wire2(13, 99) <= sub_wire4(99); + sub_wire2(13, 100) <= sub_wire4(100); + sub_wire2(13, 101) <= sub_wire4(101); + sub_wire2(13, 102) <= sub_wire4(102); + sub_wire2(13, 103) <= sub_wire4(103); + sub_wire2(13, 104) <= sub_wire4(104); + sub_wire2(13, 105) <= sub_wire4(105); + sub_wire2(13, 106) <= sub_wire4(106); + sub_wire2(13, 107) <= sub_wire4(107); + sub_wire2(13, 108) <= sub_wire4(108); + sub_wire2(13, 109) <= sub_wire4(109); + sub_wire2(13, 110) <= sub_wire4(110); + sub_wire2(13, 111) <= sub_wire4(111); + sub_wire2(13, 112) <= sub_wire4(112); + sub_wire2(13, 113) <= sub_wire4(113); + sub_wire2(13, 114) <= sub_wire4(114); + sub_wire2(13, 115) <= sub_wire4(115); + sub_wire2(13, 116) <= sub_wire4(116); + sub_wire2(13, 117) <= sub_wire4(117); + sub_wire2(13, 118) <= sub_wire4(118); + sub_wire2(13, 119) <= sub_wire4(119); + sub_wire2(13, 120) <= sub_wire4(120); + sub_wire2(13, 121) <= sub_wire4(121); + sub_wire2(13, 122) <= sub_wire4(122); + sub_wire2(13, 123) <= sub_wire4(123); + sub_wire2(13, 124) <= sub_wire4(124); + sub_wire2(13, 125) <= sub_wire4(125); + sub_wire2(13, 126) <= sub_wire4(126); + sub_wire2(13, 127) <= sub_wire4(127); + sub_wire2(12, 0) <= sub_wire5(0); + sub_wire2(12, 1) <= sub_wire5(1); + sub_wire2(12, 2) <= sub_wire5(2); + sub_wire2(12, 3) <= sub_wire5(3); + sub_wire2(12, 4) <= sub_wire5(4); + sub_wire2(12, 5) <= sub_wire5(5); + sub_wire2(12, 6) <= sub_wire5(6); + sub_wire2(12, 7) <= sub_wire5(7); + sub_wire2(12, 8) <= sub_wire5(8); + sub_wire2(12, 9) <= sub_wire5(9); + sub_wire2(12, 10) <= sub_wire5(10); + sub_wire2(12, 11) <= sub_wire5(11); + sub_wire2(12, 12) <= sub_wire5(12); + sub_wire2(12, 13) <= sub_wire5(13); + sub_wire2(12, 14) <= sub_wire5(14); + sub_wire2(12, 15) <= sub_wire5(15); + sub_wire2(12, 16) <= sub_wire5(16); + sub_wire2(12, 17) <= sub_wire5(17); + sub_wire2(12, 18) <= sub_wire5(18); + sub_wire2(12, 19) <= sub_wire5(19); + sub_wire2(12, 20) <= sub_wire5(20); + sub_wire2(12, 21) <= sub_wire5(21); + sub_wire2(12, 22) <= sub_wire5(22); + sub_wire2(12, 23) <= sub_wire5(23); + sub_wire2(12, 24) <= sub_wire5(24); + sub_wire2(12, 25) <= sub_wire5(25); + sub_wire2(12, 26) <= sub_wire5(26); + sub_wire2(12, 27) <= sub_wire5(27); + sub_wire2(12, 28) <= sub_wire5(28); + sub_wire2(12, 29) <= sub_wire5(29); + sub_wire2(12, 30) <= sub_wire5(30); + sub_wire2(12, 31) <= sub_wire5(31); + sub_wire2(12, 32) <= sub_wire5(32); + sub_wire2(12, 33) <= sub_wire5(33); + sub_wire2(12, 34) <= sub_wire5(34); + sub_wire2(12, 35) <= sub_wire5(35); + sub_wire2(12, 36) <= sub_wire5(36); + sub_wire2(12, 37) <= sub_wire5(37); + sub_wire2(12, 38) <= sub_wire5(38); + sub_wire2(12, 39) <= sub_wire5(39); + sub_wire2(12, 40) <= sub_wire5(40); + sub_wire2(12, 41) <= sub_wire5(41); + sub_wire2(12, 42) <= sub_wire5(42); + sub_wire2(12, 43) <= sub_wire5(43); + sub_wire2(12, 44) <= sub_wire5(44); + sub_wire2(12, 45) <= sub_wire5(45); + sub_wire2(12, 46) <= sub_wire5(46); + sub_wire2(12, 47) <= sub_wire5(47); + sub_wire2(12, 48) <= sub_wire5(48); + sub_wire2(12, 49) <= sub_wire5(49); + sub_wire2(12, 50) <= sub_wire5(50); + sub_wire2(12, 51) <= sub_wire5(51); + sub_wire2(12, 52) <= sub_wire5(52); + sub_wire2(12, 53) <= sub_wire5(53); + sub_wire2(12, 54) <= sub_wire5(54); + sub_wire2(12, 55) <= sub_wire5(55); + sub_wire2(12, 56) <= sub_wire5(56); + sub_wire2(12, 57) <= sub_wire5(57); + sub_wire2(12, 58) <= sub_wire5(58); + sub_wire2(12, 59) <= sub_wire5(59); + sub_wire2(12, 60) <= sub_wire5(60); + sub_wire2(12, 61) <= sub_wire5(61); + sub_wire2(12, 62) <= sub_wire5(62); + sub_wire2(12, 63) <= sub_wire5(63); + sub_wire2(12, 64) <= sub_wire5(64); + sub_wire2(12, 65) <= sub_wire5(65); + sub_wire2(12, 66) <= sub_wire5(66); + sub_wire2(12, 67) <= sub_wire5(67); + sub_wire2(12, 68) <= sub_wire5(68); + sub_wire2(12, 69) <= sub_wire5(69); + sub_wire2(12, 70) <= sub_wire5(70); + sub_wire2(12, 71) <= sub_wire5(71); + sub_wire2(12, 72) <= sub_wire5(72); + sub_wire2(12, 73) <= sub_wire5(73); + sub_wire2(12, 74) <= sub_wire5(74); + sub_wire2(12, 75) <= sub_wire5(75); + sub_wire2(12, 76) <= sub_wire5(76); + sub_wire2(12, 77) <= sub_wire5(77); + sub_wire2(12, 78) <= sub_wire5(78); + sub_wire2(12, 79) <= sub_wire5(79); + sub_wire2(12, 80) <= sub_wire5(80); + sub_wire2(12, 81) <= sub_wire5(81); + sub_wire2(12, 82) <= sub_wire5(82); + sub_wire2(12, 83) <= sub_wire5(83); + sub_wire2(12, 84) <= sub_wire5(84); + sub_wire2(12, 85) <= sub_wire5(85); + sub_wire2(12, 86) <= sub_wire5(86); + sub_wire2(12, 87) <= sub_wire5(87); + sub_wire2(12, 88) <= sub_wire5(88); + sub_wire2(12, 89) <= sub_wire5(89); + sub_wire2(12, 90) <= sub_wire5(90); + sub_wire2(12, 91) <= sub_wire5(91); + sub_wire2(12, 92) <= sub_wire5(92); + sub_wire2(12, 93) <= sub_wire5(93); + sub_wire2(12, 94) <= sub_wire5(94); + sub_wire2(12, 95) <= sub_wire5(95); + sub_wire2(12, 96) <= sub_wire5(96); + sub_wire2(12, 97) <= sub_wire5(97); + sub_wire2(12, 98) <= sub_wire5(98); + sub_wire2(12, 99) <= sub_wire5(99); + sub_wire2(12, 100) <= sub_wire5(100); + sub_wire2(12, 101) <= sub_wire5(101); + sub_wire2(12, 102) <= sub_wire5(102); + sub_wire2(12, 103) <= sub_wire5(103); + sub_wire2(12, 104) <= sub_wire5(104); + sub_wire2(12, 105) <= sub_wire5(105); + sub_wire2(12, 106) <= sub_wire5(106); + sub_wire2(12, 107) <= sub_wire5(107); + sub_wire2(12, 108) <= sub_wire5(108); + sub_wire2(12, 109) <= sub_wire5(109); + sub_wire2(12, 110) <= sub_wire5(110); + sub_wire2(12, 111) <= sub_wire5(111); + sub_wire2(12, 112) <= sub_wire5(112); + sub_wire2(12, 113) <= sub_wire5(113); + sub_wire2(12, 114) <= sub_wire5(114); + sub_wire2(12, 115) <= sub_wire5(115); + sub_wire2(12, 116) <= sub_wire5(116); + sub_wire2(12, 117) <= sub_wire5(117); + sub_wire2(12, 118) <= sub_wire5(118); + sub_wire2(12, 119) <= sub_wire5(119); + sub_wire2(12, 120) <= sub_wire5(120); + sub_wire2(12, 121) <= sub_wire5(121); + sub_wire2(12, 122) <= sub_wire5(122); + sub_wire2(12, 123) <= sub_wire5(123); + sub_wire2(12, 124) <= sub_wire5(124); + sub_wire2(12, 125) <= sub_wire5(125); + sub_wire2(12, 126) <= sub_wire5(126); + sub_wire2(12, 127) <= sub_wire5(127); + sub_wire2(11, 0) <= sub_wire6(0); + sub_wire2(11, 1) <= sub_wire6(1); + sub_wire2(11, 2) <= sub_wire6(2); + sub_wire2(11, 3) <= sub_wire6(3); + sub_wire2(11, 4) <= sub_wire6(4); + sub_wire2(11, 5) <= sub_wire6(5); + sub_wire2(11, 6) <= sub_wire6(6); + sub_wire2(11, 7) <= sub_wire6(7); + sub_wire2(11, 8) <= sub_wire6(8); + sub_wire2(11, 9) <= sub_wire6(9); + sub_wire2(11, 10) <= sub_wire6(10); + sub_wire2(11, 11) <= sub_wire6(11); + sub_wire2(11, 12) <= sub_wire6(12); + sub_wire2(11, 13) <= sub_wire6(13); + sub_wire2(11, 14) <= sub_wire6(14); + sub_wire2(11, 15) <= sub_wire6(15); + sub_wire2(11, 16) <= sub_wire6(16); + sub_wire2(11, 17) <= sub_wire6(17); + sub_wire2(11, 18) <= sub_wire6(18); + sub_wire2(11, 19) <= sub_wire6(19); + sub_wire2(11, 20) <= sub_wire6(20); + sub_wire2(11, 21) <= sub_wire6(21); + sub_wire2(11, 22) <= sub_wire6(22); + sub_wire2(11, 23) <= sub_wire6(23); + sub_wire2(11, 24) <= sub_wire6(24); + sub_wire2(11, 25) <= sub_wire6(25); + sub_wire2(11, 26) <= sub_wire6(26); + sub_wire2(11, 27) <= sub_wire6(27); + sub_wire2(11, 28) <= sub_wire6(28); + sub_wire2(11, 29) <= sub_wire6(29); + sub_wire2(11, 30) <= sub_wire6(30); + sub_wire2(11, 31) <= sub_wire6(31); + sub_wire2(11, 32) <= sub_wire6(32); + sub_wire2(11, 33) <= sub_wire6(33); + sub_wire2(11, 34) <= sub_wire6(34); + sub_wire2(11, 35) <= sub_wire6(35); + sub_wire2(11, 36) <= sub_wire6(36); + sub_wire2(11, 37) <= sub_wire6(37); + sub_wire2(11, 38) <= sub_wire6(38); + sub_wire2(11, 39) <= sub_wire6(39); + sub_wire2(11, 40) <= sub_wire6(40); + sub_wire2(11, 41) <= sub_wire6(41); + sub_wire2(11, 42) <= sub_wire6(42); + sub_wire2(11, 43) <= sub_wire6(43); + sub_wire2(11, 44) <= sub_wire6(44); + sub_wire2(11, 45) <= sub_wire6(45); + sub_wire2(11, 46) <= sub_wire6(46); + sub_wire2(11, 47) <= sub_wire6(47); + sub_wire2(11, 48) <= sub_wire6(48); + sub_wire2(11, 49) <= sub_wire6(49); + sub_wire2(11, 50) <= sub_wire6(50); + sub_wire2(11, 51) <= sub_wire6(51); + sub_wire2(11, 52) <= sub_wire6(52); + sub_wire2(11, 53) <= sub_wire6(53); + sub_wire2(11, 54) <= sub_wire6(54); + sub_wire2(11, 55) <= sub_wire6(55); + sub_wire2(11, 56) <= sub_wire6(56); + sub_wire2(11, 57) <= sub_wire6(57); + sub_wire2(11, 58) <= sub_wire6(58); + sub_wire2(11, 59) <= sub_wire6(59); + sub_wire2(11, 60) <= sub_wire6(60); + sub_wire2(11, 61) <= sub_wire6(61); + sub_wire2(11, 62) <= sub_wire6(62); + sub_wire2(11, 63) <= sub_wire6(63); + sub_wire2(11, 64) <= sub_wire6(64); + sub_wire2(11, 65) <= sub_wire6(65); + sub_wire2(11, 66) <= sub_wire6(66); + sub_wire2(11, 67) <= sub_wire6(67); + sub_wire2(11, 68) <= sub_wire6(68); + sub_wire2(11, 69) <= sub_wire6(69); + sub_wire2(11, 70) <= sub_wire6(70); + sub_wire2(11, 71) <= sub_wire6(71); + sub_wire2(11, 72) <= sub_wire6(72); + sub_wire2(11, 73) <= sub_wire6(73); + sub_wire2(11, 74) <= sub_wire6(74); + sub_wire2(11, 75) <= sub_wire6(75); + sub_wire2(11, 76) <= sub_wire6(76); + sub_wire2(11, 77) <= sub_wire6(77); + sub_wire2(11, 78) <= sub_wire6(78); + sub_wire2(11, 79) <= sub_wire6(79); + sub_wire2(11, 80) <= sub_wire6(80); + sub_wire2(11, 81) <= sub_wire6(81); + sub_wire2(11, 82) <= sub_wire6(82); + sub_wire2(11, 83) <= sub_wire6(83); + sub_wire2(11, 84) <= sub_wire6(84); + sub_wire2(11, 85) <= sub_wire6(85); + sub_wire2(11, 86) <= sub_wire6(86); + sub_wire2(11, 87) <= sub_wire6(87); + sub_wire2(11, 88) <= sub_wire6(88); + sub_wire2(11, 89) <= sub_wire6(89); + sub_wire2(11, 90) <= sub_wire6(90); + sub_wire2(11, 91) <= sub_wire6(91); + sub_wire2(11, 92) <= sub_wire6(92); + sub_wire2(11, 93) <= sub_wire6(93); + sub_wire2(11, 94) <= sub_wire6(94); + sub_wire2(11, 95) <= sub_wire6(95); + sub_wire2(11, 96) <= sub_wire6(96); + sub_wire2(11, 97) <= sub_wire6(97); + sub_wire2(11, 98) <= sub_wire6(98); + sub_wire2(11, 99) <= sub_wire6(99); + sub_wire2(11, 100) <= sub_wire6(100); + sub_wire2(11, 101) <= sub_wire6(101); + sub_wire2(11, 102) <= sub_wire6(102); + sub_wire2(11, 103) <= sub_wire6(103); + sub_wire2(11, 104) <= sub_wire6(104); + sub_wire2(11, 105) <= sub_wire6(105); + sub_wire2(11, 106) <= sub_wire6(106); + sub_wire2(11, 107) <= sub_wire6(107); + sub_wire2(11, 108) <= sub_wire6(108); + sub_wire2(11, 109) <= sub_wire6(109); + sub_wire2(11, 110) <= sub_wire6(110); + sub_wire2(11, 111) <= sub_wire6(111); + sub_wire2(11, 112) <= sub_wire6(112); + sub_wire2(11, 113) <= sub_wire6(113); + sub_wire2(11, 114) <= sub_wire6(114); + sub_wire2(11, 115) <= sub_wire6(115); + sub_wire2(11, 116) <= sub_wire6(116); + sub_wire2(11, 117) <= sub_wire6(117); + sub_wire2(11, 118) <= sub_wire6(118); + sub_wire2(11, 119) <= sub_wire6(119); + sub_wire2(11, 120) <= sub_wire6(120); + sub_wire2(11, 121) <= sub_wire6(121); + sub_wire2(11, 122) <= sub_wire6(122); + sub_wire2(11, 123) <= sub_wire6(123); + sub_wire2(11, 124) <= sub_wire6(124); + sub_wire2(11, 125) <= sub_wire6(125); + sub_wire2(11, 126) <= sub_wire6(126); + sub_wire2(11, 127) <= sub_wire6(127); + sub_wire2(10, 0) <= sub_wire7(0); + sub_wire2(10, 1) <= sub_wire7(1); + sub_wire2(10, 2) <= sub_wire7(2); + sub_wire2(10, 3) <= sub_wire7(3); + sub_wire2(10, 4) <= sub_wire7(4); + sub_wire2(10, 5) <= sub_wire7(5); + sub_wire2(10, 6) <= sub_wire7(6); + sub_wire2(10, 7) <= sub_wire7(7); + sub_wire2(10, 8) <= sub_wire7(8); + sub_wire2(10, 9) <= sub_wire7(9); + sub_wire2(10, 10) <= sub_wire7(10); + sub_wire2(10, 11) <= sub_wire7(11); + sub_wire2(10, 12) <= sub_wire7(12); + sub_wire2(10, 13) <= sub_wire7(13); + sub_wire2(10, 14) <= sub_wire7(14); + sub_wire2(10, 15) <= sub_wire7(15); + sub_wire2(10, 16) <= sub_wire7(16); + sub_wire2(10, 17) <= sub_wire7(17); + sub_wire2(10, 18) <= sub_wire7(18); + sub_wire2(10, 19) <= sub_wire7(19); + sub_wire2(10, 20) <= sub_wire7(20); + sub_wire2(10, 21) <= sub_wire7(21); + sub_wire2(10, 22) <= sub_wire7(22); + sub_wire2(10, 23) <= sub_wire7(23); + sub_wire2(10, 24) <= sub_wire7(24); + sub_wire2(10, 25) <= sub_wire7(25); + sub_wire2(10, 26) <= sub_wire7(26); + sub_wire2(10, 27) <= sub_wire7(27); + sub_wire2(10, 28) <= sub_wire7(28); + sub_wire2(10, 29) <= sub_wire7(29); + sub_wire2(10, 30) <= sub_wire7(30); + sub_wire2(10, 31) <= sub_wire7(31); + sub_wire2(10, 32) <= sub_wire7(32); + sub_wire2(10, 33) <= sub_wire7(33); + sub_wire2(10, 34) <= sub_wire7(34); + sub_wire2(10, 35) <= sub_wire7(35); + sub_wire2(10, 36) <= sub_wire7(36); + sub_wire2(10, 37) <= sub_wire7(37); + sub_wire2(10, 38) <= sub_wire7(38); + sub_wire2(10, 39) <= sub_wire7(39); + sub_wire2(10, 40) <= sub_wire7(40); + sub_wire2(10, 41) <= sub_wire7(41); + sub_wire2(10, 42) <= sub_wire7(42); + sub_wire2(10, 43) <= sub_wire7(43); + sub_wire2(10, 44) <= sub_wire7(44); + sub_wire2(10, 45) <= sub_wire7(45); + sub_wire2(10, 46) <= sub_wire7(46); + sub_wire2(10, 47) <= sub_wire7(47); + sub_wire2(10, 48) <= sub_wire7(48); + sub_wire2(10, 49) <= sub_wire7(49); + sub_wire2(10, 50) <= sub_wire7(50); + sub_wire2(10, 51) <= sub_wire7(51); + sub_wire2(10, 52) <= sub_wire7(52); + sub_wire2(10, 53) <= sub_wire7(53); + sub_wire2(10, 54) <= sub_wire7(54); + sub_wire2(10, 55) <= sub_wire7(55); + sub_wire2(10, 56) <= sub_wire7(56); + sub_wire2(10, 57) <= sub_wire7(57); + sub_wire2(10, 58) <= sub_wire7(58); + sub_wire2(10, 59) <= sub_wire7(59); + sub_wire2(10, 60) <= sub_wire7(60); + sub_wire2(10, 61) <= sub_wire7(61); + sub_wire2(10, 62) <= sub_wire7(62); + sub_wire2(10, 63) <= sub_wire7(63); + sub_wire2(10, 64) <= sub_wire7(64); + sub_wire2(10, 65) <= sub_wire7(65); + sub_wire2(10, 66) <= sub_wire7(66); + sub_wire2(10, 67) <= sub_wire7(67); + sub_wire2(10, 68) <= sub_wire7(68); + sub_wire2(10, 69) <= sub_wire7(69); + sub_wire2(10, 70) <= sub_wire7(70); + sub_wire2(10, 71) <= sub_wire7(71); + sub_wire2(10, 72) <= sub_wire7(72); + sub_wire2(10, 73) <= sub_wire7(73); + sub_wire2(10, 74) <= sub_wire7(74); + sub_wire2(10, 75) <= sub_wire7(75); + sub_wire2(10, 76) <= sub_wire7(76); + sub_wire2(10, 77) <= sub_wire7(77); + sub_wire2(10, 78) <= sub_wire7(78); + sub_wire2(10, 79) <= sub_wire7(79); + sub_wire2(10, 80) <= sub_wire7(80); + sub_wire2(10, 81) <= sub_wire7(81); + sub_wire2(10, 82) <= sub_wire7(82); + sub_wire2(10, 83) <= sub_wire7(83); + sub_wire2(10, 84) <= sub_wire7(84); + sub_wire2(10, 85) <= sub_wire7(85); + sub_wire2(10, 86) <= sub_wire7(86); + sub_wire2(10, 87) <= sub_wire7(87); + sub_wire2(10, 88) <= sub_wire7(88); + sub_wire2(10, 89) <= sub_wire7(89); + sub_wire2(10, 90) <= sub_wire7(90); + sub_wire2(10, 91) <= sub_wire7(91); + sub_wire2(10, 92) <= sub_wire7(92); + sub_wire2(10, 93) <= sub_wire7(93); + sub_wire2(10, 94) <= sub_wire7(94); + sub_wire2(10, 95) <= sub_wire7(95); + sub_wire2(10, 96) <= sub_wire7(96); + sub_wire2(10, 97) <= sub_wire7(97); + sub_wire2(10, 98) <= sub_wire7(98); + sub_wire2(10, 99) <= sub_wire7(99); + sub_wire2(10, 100) <= sub_wire7(100); + sub_wire2(10, 101) <= sub_wire7(101); + sub_wire2(10, 102) <= sub_wire7(102); + sub_wire2(10, 103) <= sub_wire7(103); + sub_wire2(10, 104) <= sub_wire7(104); + sub_wire2(10, 105) <= sub_wire7(105); + sub_wire2(10, 106) <= sub_wire7(106); + sub_wire2(10, 107) <= sub_wire7(107); + sub_wire2(10, 108) <= sub_wire7(108); + sub_wire2(10, 109) <= sub_wire7(109); + sub_wire2(10, 110) <= sub_wire7(110); + sub_wire2(10, 111) <= sub_wire7(111); + sub_wire2(10, 112) <= sub_wire7(112); + sub_wire2(10, 113) <= sub_wire7(113); + sub_wire2(10, 114) <= sub_wire7(114); + sub_wire2(10, 115) <= sub_wire7(115); + sub_wire2(10, 116) <= sub_wire7(116); + sub_wire2(10, 117) <= sub_wire7(117); + sub_wire2(10, 118) <= sub_wire7(118); + sub_wire2(10, 119) <= sub_wire7(119); + sub_wire2(10, 120) <= sub_wire7(120); + sub_wire2(10, 121) <= sub_wire7(121); + sub_wire2(10, 122) <= sub_wire7(122); + sub_wire2(10, 123) <= sub_wire7(123); + sub_wire2(10, 124) <= sub_wire7(124); + sub_wire2(10, 125) <= sub_wire7(125); + sub_wire2(10, 126) <= sub_wire7(126); + sub_wire2(10, 127) <= sub_wire7(127); + sub_wire2(9, 0) <= sub_wire8(0); + sub_wire2(9, 1) <= sub_wire8(1); + sub_wire2(9, 2) <= sub_wire8(2); + sub_wire2(9, 3) <= sub_wire8(3); + sub_wire2(9, 4) <= sub_wire8(4); + sub_wire2(9, 5) <= sub_wire8(5); + sub_wire2(9, 6) <= sub_wire8(6); + sub_wire2(9, 7) <= sub_wire8(7); + sub_wire2(9, 8) <= sub_wire8(8); + sub_wire2(9, 9) <= sub_wire8(9); + sub_wire2(9, 10) <= sub_wire8(10); + sub_wire2(9, 11) <= sub_wire8(11); + sub_wire2(9, 12) <= sub_wire8(12); + sub_wire2(9, 13) <= sub_wire8(13); + sub_wire2(9, 14) <= sub_wire8(14); + sub_wire2(9, 15) <= sub_wire8(15); + sub_wire2(9, 16) <= sub_wire8(16); + sub_wire2(9, 17) <= sub_wire8(17); + sub_wire2(9, 18) <= sub_wire8(18); + sub_wire2(9, 19) <= sub_wire8(19); + sub_wire2(9, 20) <= sub_wire8(20); + sub_wire2(9, 21) <= sub_wire8(21); + sub_wire2(9, 22) <= sub_wire8(22); + sub_wire2(9, 23) <= sub_wire8(23); + sub_wire2(9, 24) <= sub_wire8(24); + sub_wire2(9, 25) <= sub_wire8(25); + sub_wire2(9, 26) <= sub_wire8(26); + sub_wire2(9, 27) <= sub_wire8(27); + sub_wire2(9, 28) <= sub_wire8(28); + sub_wire2(9, 29) <= sub_wire8(29); + sub_wire2(9, 30) <= sub_wire8(30); + sub_wire2(9, 31) <= sub_wire8(31); + sub_wire2(9, 32) <= sub_wire8(32); + sub_wire2(9, 33) <= sub_wire8(33); + sub_wire2(9, 34) <= sub_wire8(34); + sub_wire2(9, 35) <= sub_wire8(35); + sub_wire2(9, 36) <= sub_wire8(36); + sub_wire2(9, 37) <= sub_wire8(37); + sub_wire2(9, 38) <= sub_wire8(38); + sub_wire2(9, 39) <= sub_wire8(39); + sub_wire2(9, 40) <= sub_wire8(40); + sub_wire2(9, 41) <= sub_wire8(41); + sub_wire2(9, 42) <= sub_wire8(42); + sub_wire2(9, 43) <= sub_wire8(43); + sub_wire2(9, 44) <= sub_wire8(44); + sub_wire2(9, 45) <= sub_wire8(45); + sub_wire2(9, 46) <= sub_wire8(46); + sub_wire2(9, 47) <= sub_wire8(47); + sub_wire2(9, 48) <= sub_wire8(48); + sub_wire2(9, 49) <= sub_wire8(49); + sub_wire2(9, 50) <= sub_wire8(50); + sub_wire2(9, 51) <= sub_wire8(51); + sub_wire2(9, 52) <= sub_wire8(52); + sub_wire2(9, 53) <= sub_wire8(53); + sub_wire2(9, 54) <= sub_wire8(54); + sub_wire2(9, 55) <= sub_wire8(55); + sub_wire2(9, 56) <= sub_wire8(56); + sub_wire2(9, 57) <= sub_wire8(57); + sub_wire2(9, 58) <= sub_wire8(58); + sub_wire2(9, 59) <= sub_wire8(59); + sub_wire2(9, 60) <= sub_wire8(60); + sub_wire2(9, 61) <= sub_wire8(61); + sub_wire2(9, 62) <= sub_wire8(62); + sub_wire2(9, 63) <= sub_wire8(63); + sub_wire2(9, 64) <= sub_wire8(64); + sub_wire2(9, 65) <= sub_wire8(65); + sub_wire2(9, 66) <= sub_wire8(66); + sub_wire2(9, 67) <= sub_wire8(67); + sub_wire2(9, 68) <= sub_wire8(68); + sub_wire2(9, 69) <= sub_wire8(69); + sub_wire2(9, 70) <= sub_wire8(70); + sub_wire2(9, 71) <= sub_wire8(71); + sub_wire2(9, 72) <= sub_wire8(72); + sub_wire2(9, 73) <= sub_wire8(73); + sub_wire2(9, 74) <= sub_wire8(74); + sub_wire2(9, 75) <= sub_wire8(75); + sub_wire2(9, 76) <= sub_wire8(76); + sub_wire2(9, 77) <= sub_wire8(77); + sub_wire2(9, 78) <= sub_wire8(78); + sub_wire2(9, 79) <= sub_wire8(79); + sub_wire2(9, 80) <= sub_wire8(80); + sub_wire2(9, 81) <= sub_wire8(81); + sub_wire2(9, 82) <= sub_wire8(82); + sub_wire2(9, 83) <= sub_wire8(83); + sub_wire2(9, 84) <= sub_wire8(84); + sub_wire2(9, 85) <= sub_wire8(85); + sub_wire2(9, 86) <= sub_wire8(86); + sub_wire2(9, 87) <= sub_wire8(87); + sub_wire2(9, 88) <= sub_wire8(88); + sub_wire2(9, 89) <= sub_wire8(89); + sub_wire2(9, 90) <= sub_wire8(90); + sub_wire2(9, 91) <= sub_wire8(91); + sub_wire2(9, 92) <= sub_wire8(92); + sub_wire2(9, 93) <= sub_wire8(93); + sub_wire2(9, 94) <= sub_wire8(94); + sub_wire2(9, 95) <= sub_wire8(95); + sub_wire2(9, 96) <= sub_wire8(96); + sub_wire2(9, 97) <= sub_wire8(97); + sub_wire2(9, 98) <= sub_wire8(98); + sub_wire2(9, 99) <= sub_wire8(99); + sub_wire2(9, 100) <= sub_wire8(100); + sub_wire2(9, 101) <= sub_wire8(101); + sub_wire2(9, 102) <= sub_wire8(102); + sub_wire2(9, 103) <= sub_wire8(103); + sub_wire2(9, 104) <= sub_wire8(104); + sub_wire2(9, 105) <= sub_wire8(105); + sub_wire2(9, 106) <= sub_wire8(106); + sub_wire2(9, 107) <= sub_wire8(107); + sub_wire2(9, 108) <= sub_wire8(108); + sub_wire2(9, 109) <= sub_wire8(109); + sub_wire2(9, 110) <= sub_wire8(110); + sub_wire2(9, 111) <= sub_wire8(111); + sub_wire2(9, 112) <= sub_wire8(112); + sub_wire2(9, 113) <= sub_wire8(113); + sub_wire2(9, 114) <= sub_wire8(114); + sub_wire2(9, 115) <= sub_wire8(115); + sub_wire2(9, 116) <= sub_wire8(116); + sub_wire2(9, 117) <= sub_wire8(117); + sub_wire2(9, 118) <= sub_wire8(118); + sub_wire2(9, 119) <= sub_wire8(119); + sub_wire2(9, 120) <= sub_wire8(120); + sub_wire2(9, 121) <= sub_wire8(121); + sub_wire2(9, 122) <= sub_wire8(122); + sub_wire2(9, 123) <= sub_wire8(123); + sub_wire2(9, 124) <= sub_wire8(124); + sub_wire2(9, 125) <= sub_wire8(125); + sub_wire2(9, 126) <= sub_wire8(126); + sub_wire2(9, 127) <= sub_wire8(127); + sub_wire2(8, 0) <= sub_wire9(0); + sub_wire2(8, 1) <= sub_wire9(1); + sub_wire2(8, 2) <= sub_wire9(2); + sub_wire2(8, 3) <= sub_wire9(3); + sub_wire2(8, 4) <= sub_wire9(4); + sub_wire2(8, 5) <= sub_wire9(5); + sub_wire2(8, 6) <= sub_wire9(6); + sub_wire2(8, 7) <= sub_wire9(7); + sub_wire2(8, 8) <= sub_wire9(8); + sub_wire2(8, 9) <= sub_wire9(9); + sub_wire2(8, 10) <= sub_wire9(10); + sub_wire2(8, 11) <= sub_wire9(11); + sub_wire2(8, 12) <= sub_wire9(12); + sub_wire2(8, 13) <= sub_wire9(13); + sub_wire2(8, 14) <= sub_wire9(14); + sub_wire2(8, 15) <= sub_wire9(15); + sub_wire2(8, 16) <= sub_wire9(16); + sub_wire2(8, 17) <= sub_wire9(17); + sub_wire2(8, 18) <= sub_wire9(18); + sub_wire2(8, 19) <= sub_wire9(19); + sub_wire2(8, 20) <= sub_wire9(20); + sub_wire2(8, 21) <= sub_wire9(21); + sub_wire2(8, 22) <= sub_wire9(22); + sub_wire2(8, 23) <= sub_wire9(23); + sub_wire2(8, 24) <= sub_wire9(24); + sub_wire2(8, 25) <= sub_wire9(25); + sub_wire2(8, 26) <= sub_wire9(26); + sub_wire2(8, 27) <= sub_wire9(27); + sub_wire2(8, 28) <= sub_wire9(28); + sub_wire2(8, 29) <= sub_wire9(29); + sub_wire2(8, 30) <= sub_wire9(30); + sub_wire2(8, 31) <= sub_wire9(31); + sub_wire2(8, 32) <= sub_wire9(32); + sub_wire2(8, 33) <= sub_wire9(33); + sub_wire2(8, 34) <= sub_wire9(34); + sub_wire2(8, 35) <= sub_wire9(35); + sub_wire2(8, 36) <= sub_wire9(36); + sub_wire2(8, 37) <= sub_wire9(37); + sub_wire2(8, 38) <= sub_wire9(38); + sub_wire2(8, 39) <= sub_wire9(39); + sub_wire2(8, 40) <= sub_wire9(40); + sub_wire2(8, 41) <= sub_wire9(41); + sub_wire2(8, 42) <= sub_wire9(42); + sub_wire2(8, 43) <= sub_wire9(43); + sub_wire2(8, 44) <= sub_wire9(44); + sub_wire2(8, 45) <= sub_wire9(45); + sub_wire2(8, 46) <= sub_wire9(46); + sub_wire2(8, 47) <= sub_wire9(47); + sub_wire2(8, 48) <= sub_wire9(48); + sub_wire2(8, 49) <= sub_wire9(49); + sub_wire2(8, 50) <= sub_wire9(50); + sub_wire2(8, 51) <= sub_wire9(51); + sub_wire2(8, 52) <= sub_wire9(52); + sub_wire2(8, 53) <= sub_wire9(53); + sub_wire2(8, 54) <= sub_wire9(54); + sub_wire2(8, 55) <= sub_wire9(55); + sub_wire2(8, 56) <= sub_wire9(56); + sub_wire2(8, 57) <= sub_wire9(57); + sub_wire2(8, 58) <= sub_wire9(58); + sub_wire2(8, 59) <= sub_wire9(59); + sub_wire2(8, 60) <= sub_wire9(60); + sub_wire2(8, 61) <= sub_wire9(61); + sub_wire2(8, 62) <= sub_wire9(62); + sub_wire2(8, 63) <= sub_wire9(63); + sub_wire2(8, 64) <= sub_wire9(64); + sub_wire2(8, 65) <= sub_wire9(65); + sub_wire2(8, 66) <= sub_wire9(66); + sub_wire2(8, 67) <= sub_wire9(67); + sub_wire2(8, 68) <= sub_wire9(68); + sub_wire2(8, 69) <= sub_wire9(69); + sub_wire2(8, 70) <= sub_wire9(70); + sub_wire2(8, 71) <= sub_wire9(71); + sub_wire2(8, 72) <= sub_wire9(72); + sub_wire2(8, 73) <= sub_wire9(73); + sub_wire2(8, 74) <= sub_wire9(74); + sub_wire2(8, 75) <= sub_wire9(75); + sub_wire2(8, 76) <= sub_wire9(76); + sub_wire2(8, 77) <= sub_wire9(77); + sub_wire2(8, 78) <= sub_wire9(78); + sub_wire2(8, 79) <= sub_wire9(79); + sub_wire2(8, 80) <= sub_wire9(80); + sub_wire2(8, 81) <= sub_wire9(81); + sub_wire2(8, 82) <= sub_wire9(82); + sub_wire2(8, 83) <= sub_wire9(83); + sub_wire2(8, 84) <= sub_wire9(84); + sub_wire2(8, 85) <= sub_wire9(85); + sub_wire2(8, 86) <= sub_wire9(86); + sub_wire2(8, 87) <= sub_wire9(87); + sub_wire2(8, 88) <= sub_wire9(88); + sub_wire2(8, 89) <= sub_wire9(89); + sub_wire2(8, 90) <= sub_wire9(90); + sub_wire2(8, 91) <= sub_wire9(91); + sub_wire2(8, 92) <= sub_wire9(92); + sub_wire2(8, 93) <= sub_wire9(93); + sub_wire2(8, 94) <= sub_wire9(94); + sub_wire2(8, 95) <= sub_wire9(95); + sub_wire2(8, 96) <= sub_wire9(96); + sub_wire2(8, 97) <= sub_wire9(97); + sub_wire2(8, 98) <= sub_wire9(98); + sub_wire2(8, 99) <= sub_wire9(99); + sub_wire2(8, 100) <= sub_wire9(100); + sub_wire2(8, 101) <= sub_wire9(101); + sub_wire2(8, 102) <= sub_wire9(102); + sub_wire2(8, 103) <= sub_wire9(103); + sub_wire2(8, 104) <= sub_wire9(104); + sub_wire2(8, 105) <= sub_wire9(105); + sub_wire2(8, 106) <= sub_wire9(106); + sub_wire2(8, 107) <= sub_wire9(107); + sub_wire2(8, 108) <= sub_wire9(108); + sub_wire2(8, 109) <= sub_wire9(109); + sub_wire2(8, 110) <= sub_wire9(110); + sub_wire2(8, 111) <= sub_wire9(111); + sub_wire2(8, 112) <= sub_wire9(112); + sub_wire2(8, 113) <= sub_wire9(113); + sub_wire2(8, 114) <= sub_wire9(114); + sub_wire2(8, 115) <= sub_wire9(115); + sub_wire2(8, 116) <= sub_wire9(116); + sub_wire2(8, 117) <= sub_wire9(117); + sub_wire2(8, 118) <= sub_wire9(118); + sub_wire2(8, 119) <= sub_wire9(119); + sub_wire2(8, 120) <= sub_wire9(120); + sub_wire2(8, 121) <= sub_wire9(121); + sub_wire2(8, 122) <= sub_wire9(122); + sub_wire2(8, 123) <= sub_wire9(123); + sub_wire2(8, 124) <= sub_wire9(124); + sub_wire2(8, 125) <= sub_wire9(125); + sub_wire2(8, 126) <= sub_wire9(126); + sub_wire2(8, 127) <= sub_wire9(127); + sub_wire2(7, 0) <= sub_wire10(0); + sub_wire2(7, 1) <= sub_wire10(1); + sub_wire2(7, 2) <= sub_wire10(2); + sub_wire2(7, 3) <= sub_wire10(3); + sub_wire2(7, 4) <= sub_wire10(4); + sub_wire2(7, 5) <= sub_wire10(5); + sub_wire2(7, 6) <= sub_wire10(6); + sub_wire2(7, 7) <= sub_wire10(7); + sub_wire2(7, 8) <= sub_wire10(8); + sub_wire2(7, 9) <= sub_wire10(9); + sub_wire2(7, 10) <= sub_wire10(10); + sub_wire2(7, 11) <= sub_wire10(11); + sub_wire2(7, 12) <= sub_wire10(12); + sub_wire2(7, 13) <= sub_wire10(13); + sub_wire2(7, 14) <= sub_wire10(14); + sub_wire2(7, 15) <= sub_wire10(15); + sub_wire2(7, 16) <= sub_wire10(16); + sub_wire2(7, 17) <= sub_wire10(17); + sub_wire2(7, 18) <= sub_wire10(18); + sub_wire2(7, 19) <= sub_wire10(19); + sub_wire2(7, 20) <= sub_wire10(20); + sub_wire2(7, 21) <= sub_wire10(21); + sub_wire2(7, 22) <= sub_wire10(22); + sub_wire2(7, 23) <= sub_wire10(23); + sub_wire2(7, 24) <= sub_wire10(24); + sub_wire2(7, 25) <= sub_wire10(25); + sub_wire2(7, 26) <= sub_wire10(26); + sub_wire2(7, 27) <= sub_wire10(27); + sub_wire2(7, 28) <= sub_wire10(28); + sub_wire2(7, 29) <= sub_wire10(29); + sub_wire2(7, 30) <= sub_wire10(30); + sub_wire2(7, 31) <= sub_wire10(31); + sub_wire2(7, 32) <= sub_wire10(32); + sub_wire2(7, 33) <= sub_wire10(33); + sub_wire2(7, 34) <= sub_wire10(34); + sub_wire2(7, 35) <= sub_wire10(35); + sub_wire2(7, 36) <= sub_wire10(36); + sub_wire2(7, 37) <= sub_wire10(37); + sub_wire2(7, 38) <= sub_wire10(38); + sub_wire2(7, 39) <= sub_wire10(39); + sub_wire2(7, 40) <= sub_wire10(40); + sub_wire2(7, 41) <= sub_wire10(41); + sub_wire2(7, 42) <= sub_wire10(42); + sub_wire2(7, 43) <= sub_wire10(43); + sub_wire2(7, 44) <= sub_wire10(44); + sub_wire2(7, 45) <= sub_wire10(45); + sub_wire2(7, 46) <= sub_wire10(46); + sub_wire2(7, 47) <= sub_wire10(47); + sub_wire2(7, 48) <= sub_wire10(48); + sub_wire2(7, 49) <= sub_wire10(49); + sub_wire2(7, 50) <= sub_wire10(50); + sub_wire2(7, 51) <= sub_wire10(51); + sub_wire2(7, 52) <= sub_wire10(52); + sub_wire2(7, 53) <= sub_wire10(53); + sub_wire2(7, 54) <= sub_wire10(54); + sub_wire2(7, 55) <= sub_wire10(55); + sub_wire2(7, 56) <= sub_wire10(56); + sub_wire2(7, 57) <= sub_wire10(57); + sub_wire2(7, 58) <= sub_wire10(58); + sub_wire2(7, 59) <= sub_wire10(59); + sub_wire2(7, 60) <= sub_wire10(60); + sub_wire2(7, 61) <= sub_wire10(61); + sub_wire2(7, 62) <= sub_wire10(62); + sub_wire2(7, 63) <= sub_wire10(63); + sub_wire2(7, 64) <= sub_wire10(64); + sub_wire2(7, 65) <= sub_wire10(65); + sub_wire2(7, 66) <= sub_wire10(66); + sub_wire2(7, 67) <= sub_wire10(67); + sub_wire2(7, 68) <= sub_wire10(68); + sub_wire2(7, 69) <= sub_wire10(69); + sub_wire2(7, 70) <= sub_wire10(70); + sub_wire2(7, 71) <= sub_wire10(71); + sub_wire2(7, 72) <= sub_wire10(72); + sub_wire2(7, 73) <= sub_wire10(73); + sub_wire2(7, 74) <= sub_wire10(74); + sub_wire2(7, 75) <= sub_wire10(75); + sub_wire2(7, 76) <= sub_wire10(76); + sub_wire2(7, 77) <= sub_wire10(77); + sub_wire2(7, 78) <= sub_wire10(78); + sub_wire2(7, 79) <= sub_wire10(79); + sub_wire2(7, 80) <= sub_wire10(80); + sub_wire2(7, 81) <= sub_wire10(81); + sub_wire2(7, 82) <= sub_wire10(82); + sub_wire2(7, 83) <= sub_wire10(83); + sub_wire2(7, 84) <= sub_wire10(84); + sub_wire2(7, 85) <= sub_wire10(85); + sub_wire2(7, 86) <= sub_wire10(86); + sub_wire2(7, 87) <= sub_wire10(87); + sub_wire2(7, 88) <= sub_wire10(88); + sub_wire2(7, 89) <= sub_wire10(89); + sub_wire2(7, 90) <= sub_wire10(90); + sub_wire2(7, 91) <= sub_wire10(91); + sub_wire2(7, 92) <= sub_wire10(92); + sub_wire2(7, 93) <= sub_wire10(93); + sub_wire2(7, 94) <= sub_wire10(94); + sub_wire2(7, 95) <= sub_wire10(95); + sub_wire2(7, 96) <= sub_wire10(96); + sub_wire2(7, 97) <= sub_wire10(97); + sub_wire2(7, 98) <= sub_wire10(98); + sub_wire2(7, 99) <= sub_wire10(99); + sub_wire2(7, 100) <= sub_wire10(100); + sub_wire2(7, 101) <= sub_wire10(101); + sub_wire2(7, 102) <= sub_wire10(102); + sub_wire2(7, 103) <= sub_wire10(103); + sub_wire2(7, 104) <= sub_wire10(104); + sub_wire2(7, 105) <= sub_wire10(105); + sub_wire2(7, 106) <= sub_wire10(106); + sub_wire2(7, 107) <= sub_wire10(107); + sub_wire2(7, 108) <= sub_wire10(108); + sub_wire2(7, 109) <= sub_wire10(109); + sub_wire2(7, 110) <= sub_wire10(110); + sub_wire2(7, 111) <= sub_wire10(111); + sub_wire2(7, 112) <= sub_wire10(112); + sub_wire2(7, 113) <= sub_wire10(113); + sub_wire2(7, 114) <= sub_wire10(114); + sub_wire2(7, 115) <= sub_wire10(115); + sub_wire2(7, 116) <= sub_wire10(116); + sub_wire2(7, 117) <= sub_wire10(117); + sub_wire2(7, 118) <= sub_wire10(118); + sub_wire2(7, 119) <= sub_wire10(119); + sub_wire2(7, 120) <= sub_wire10(120); + sub_wire2(7, 121) <= sub_wire10(121); + sub_wire2(7, 122) <= sub_wire10(122); + sub_wire2(7, 123) <= sub_wire10(123); + sub_wire2(7, 124) <= sub_wire10(124); + sub_wire2(7, 125) <= sub_wire10(125); + sub_wire2(7, 126) <= sub_wire10(126); + sub_wire2(7, 127) <= sub_wire10(127); + sub_wire2(6, 0) <= sub_wire11(0); + sub_wire2(6, 1) <= sub_wire11(1); + sub_wire2(6, 2) <= sub_wire11(2); + sub_wire2(6, 3) <= sub_wire11(3); + sub_wire2(6, 4) <= sub_wire11(4); + sub_wire2(6, 5) <= sub_wire11(5); + sub_wire2(6, 6) <= sub_wire11(6); + sub_wire2(6, 7) <= sub_wire11(7); + sub_wire2(6, 8) <= sub_wire11(8); + sub_wire2(6, 9) <= sub_wire11(9); + sub_wire2(6, 10) <= sub_wire11(10); + sub_wire2(6, 11) <= sub_wire11(11); + sub_wire2(6, 12) <= sub_wire11(12); + sub_wire2(6, 13) <= sub_wire11(13); + sub_wire2(6, 14) <= sub_wire11(14); + sub_wire2(6, 15) <= sub_wire11(15); + sub_wire2(6, 16) <= sub_wire11(16); + sub_wire2(6, 17) <= sub_wire11(17); + sub_wire2(6, 18) <= sub_wire11(18); + sub_wire2(6, 19) <= sub_wire11(19); + sub_wire2(6, 20) <= sub_wire11(20); + sub_wire2(6, 21) <= sub_wire11(21); + sub_wire2(6, 22) <= sub_wire11(22); + sub_wire2(6, 23) <= sub_wire11(23); + sub_wire2(6, 24) <= sub_wire11(24); + sub_wire2(6, 25) <= sub_wire11(25); + sub_wire2(6, 26) <= sub_wire11(26); + sub_wire2(6, 27) <= sub_wire11(27); + sub_wire2(6, 28) <= sub_wire11(28); + sub_wire2(6, 29) <= sub_wire11(29); + sub_wire2(6, 30) <= sub_wire11(30); + sub_wire2(6, 31) <= sub_wire11(31); + sub_wire2(6, 32) <= sub_wire11(32); + sub_wire2(6, 33) <= sub_wire11(33); + sub_wire2(6, 34) <= sub_wire11(34); + sub_wire2(6, 35) <= sub_wire11(35); + sub_wire2(6, 36) <= sub_wire11(36); + sub_wire2(6, 37) <= sub_wire11(37); + sub_wire2(6, 38) <= sub_wire11(38); + sub_wire2(6, 39) <= sub_wire11(39); + sub_wire2(6, 40) <= sub_wire11(40); + sub_wire2(6, 41) <= sub_wire11(41); + sub_wire2(6, 42) <= sub_wire11(42); + sub_wire2(6, 43) <= sub_wire11(43); + sub_wire2(6, 44) <= sub_wire11(44); + sub_wire2(6, 45) <= sub_wire11(45); + sub_wire2(6, 46) <= sub_wire11(46); + sub_wire2(6, 47) <= sub_wire11(47); + sub_wire2(6, 48) <= sub_wire11(48); + sub_wire2(6, 49) <= sub_wire11(49); + sub_wire2(6, 50) <= sub_wire11(50); + sub_wire2(6, 51) <= sub_wire11(51); + sub_wire2(6, 52) <= sub_wire11(52); + sub_wire2(6, 53) <= sub_wire11(53); + sub_wire2(6, 54) <= sub_wire11(54); + sub_wire2(6, 55) <= sub_wire11(55); + sub_wire2(6, 56) <= sub_wire11(56); + sub_wire2(6, 57) <= sub_wire11(57); + sub_wire2(6, 58) <= sub_wire11(58); + sub_wire2(6, 59) <= sub_wire11(59); + sub_wire2(6, 60) <= sub_wire11(60); + sub_wire2(6, 61) <= sub_wire11(61); + sub_wire2(6, 62) <= sub_wire11(62); + sub_wire2(6, 63) <= sub_wire11(63); + sub_wire2(6, 64) <= sub_wire11(64); + sub_wire2(6, 65) <= sub_wire11(65); + sub_wire2(6, 66) <= sub_wire11(66); + sub_wire2(6, 67) <= sub_wire11(67); + sub_wire2(6, 68) <= sub_wire11(68); + sub_wire2(6, 69) <= sub_wire11(69); + sub_wire2(6, 70) <= sub_wire11(70); + sub_wire2(6, 71) <= sub_wire11(71); + sub_wire2(6, 72) <= sub_wire11(72); + sub_wire2(6, 73) <= sub_wire11(73); + sub_wire2(6, 74) <= sub_wire11(74); + sub_wire2(6, 75) <= sub_wire11(75); + sub_wire2(6, 76) <= sub_wire11(76); + sub_wire2(6, 77) <= sub_wire11(77); + sub_wire2(6, 78) <= sub_wire11(78); + sub_wire2(6, 79) <= sub_wire11(79); + sub_wire2(6, 80) <= sub_wire11(80); + sub_wire2(6, 81) <= sub_wire11(81); + sub_wire2(6, 82) <= sub_wire11(82); + sub_wire2(6, 83) <= sub_wire11(83); + sub_wire2(6, 84) <= sub_wire11(84); + sub_wire2(6, 85) <= sub_wire11(85); + sub_wire2(6, 86) <= sub_wire11(86); + sub_wire2(6, 87) <= sub_wire11(87); + sub_wire2(6, 88) <= sub_wire11(88); + sub_wire2(6, 89) <= sub_wire11(89); + sub_wire2(6, 90) <= sub_wire11(90); + sub_wire2(6, 91) <= sub_wire11(91); + sub_wire2(6, 92) <= sub_wire11(92); + sub_wire2(6, 93) <= sub_wire11(93); + sub_wire2(6, 94) <= sub_wire11(94); + sub_wire2(6, 95) <= sub_wire11(95); + sub_wire2(6, 96) <= sub_wire11(96); + sub_wire2(6, 97) <= sub_wire11(97); + sub_wire2(6, 98) <= sub_wire11(98); + sub_wire2(6, 99) <= sub_wire11(99); + sub_wire2(6, 100) <= sub_wire11(100); + sub_wire2(6, 101) <= sub_wire11(101); + sub_wire2(6, 102) <= sub_wire11(102); + sub_wire2(6, 103) <= sub_wire11(103); + sub_wire2(6, 104) <= sub_wire11(104); + sub_wire2(6, 105) <= sub_wire11(105); + sub_wire2(6, 106) <= sub_wire11(106); + sub_wire2(6, 107) <= sub_wire11(107); + sub_wire2(6, 108) <= sub_wire11(108); + sub_wire2(6, 109) <= sub_wire11(109); + sub_wire2(6, 110) <= sub_wire11(110); + sub_wire2(6, 111) <= sub_wire11(111); + sub_wire2(6, 112) <= sub_wire11(112); + sub_wire2(6, 113) <= sub_wire11(113); + sub_wire2(6, 114) <= sub_wire11(114); + sub_wire2(6, 115) <= sub_wire11(115); + sub_wire2(6, 116) <= sub_wire11(116); + sub_wire2(6, 117) <= sub_wire11(117); + sub_wire2(6, 118) <= sub_wire11(118); + sub_wire2(6, 119) <= sub_wire11(119); + sub_wire2(6, 120) <= sub_wire11(120); + sub_wire2(6, 121) <= sub_wire11(121); + sub_wire2(6, 122) <= sub_wire11(122); + sub_wire2(6, 123) <= sub_wire11(123); + sub_wire2(6, 124) <= sub_wire11(124); + sub_wire2(6, 125) <= sub_wire11(125); + sub_wire2(6, 126) <= sub_wire11(126); + sub_wire2(6, 127) <= sub_wire11(127); + sub_wire2(5, 0) <= sub_wire12(0); + sub_wire2(5, 1) <= sub_wire12(1); + sub_wire2(5, 2) <= sub_wire12(2); + sub_wire2(5, 3) <= sub_wire12(3); + sub_wire2(5, 4) <= sub_wire12(4); + sub_wire2(5, 5) <= sub_wire12(5); + sub_wire2(5, 6) <= sub_wire12(6); + sub_wire2(5, 7) <= sub_wire12(7); + sub_wire2(5, 8) <= sub_wire12(8); + sub_wire2(5, 9) <= sub_wire12(9); + sub_wire2(5, 10) <= sub_wire12(10); + sub_wire2(5, 11) <= sub_wire12(11); + sub_wire2(5, 12) <= sub_wire12(12); + sub_wire2(5, 13) <= sub_wire12(13); + sub_wire2(5, 14) <= sub_wire12(14); + sub_wire2(5, 15) <= sub_wire12(15); + sub_wire2(5, 16) <= sub_wire12(16); + sub_wire2(5, 17) <= sub_wire12(17); + sub_wire2(5, 18) <= sub_wire12(18); + sub_wire2(5, 19) <= sub_wire12(19); + sub_wire2(5, 20) <= sub_wire12(20); + sub_wire2(5, 21) <= sub_wire12(21); + sub_wire2(5, 22) <= sub_wire12(22); + sub_wire2(5, 23) <= sub_wire12(23); + sub_wire2(5, 24) <= sub_wire12(24); + sub_wire2(5, 25) <= sub_wire12(25); + sub_wire2(5, 26) <= sub_wire12(26); + sub_wire2(5, 27) <= sub_wire12(27); + sub_wire2(5, 28) <= sub_wire12(28); + sub_wire2(5, 29) <= sub_wire12(29); + sub_wire2(5, 30) <= sub_wire12(30); + sub_wire2(5, 31) <= sub_wire12(31); + sub_wire2(5, 32) <= sub_wire12(32); + sub_wire2(5, 33) <= sub_wire12(33); + sub_wire2(5, 34) <= sub_wire12(34); + sub_wire2(5, 35) <= sub_wire12(35); + sub_wire2(5, 36) <= sub_wire12(36); + sub_wire2(5, 37) <= sub_wire12(37); + sub_wire2(5, 38) <= sub_wire12(38); + sub_wire2(5, 39) <= sub_wire12(39); + sub_wire2(5, 40) <= sub_wire12(40); + sub_wire2(5, 41) <= sub_wire12(41); + sub_wire2(5, 42) <= sub_wire12(42); + sub_wire2(5, 43) <= sub_wire12(43); + sub_wire2(5, 44) <= sub_wire12(44); + sub_wire2(5, 45) <= sub_wire12(45); + sub_wire2(5, 46) <= sub_wire12(46); + sub_wire2(5, 47) <= sub_wire12(47); + sub_wire2(5, 48) <= sub_wire12(48); + sub_wire2(5, 49) <= sub_wire12(49); + sub_wire2(5, 50) <= sub_wire12(50); + sub_wire2(5, 51) <= sub_wire12(51); + sub_wire2(5, 52) <= sub_wire12(52); + sub_wire2(5, 53) <= sub_wire12(53); + sub_wire2(5, 54) <= sub_wire12(54); + sub_wire2(5, 55) <= sub_wire12(55); + sub_wire2(5, 56) <= sub_wire12(56); + sub_wire2(5, 57) <= sub_wire12(57); + sub_wire2(5, 58) <= sub_wire12(58); + sub_wire2(5, 59) <= sub_wire12(59); + sub_wire2(5, 60) <= sub_wire12(60); + sub_wire2(5, 61) <= sub_wire12(61); + sub_wire2(5, 62) <= sub_wire12(62); + sub_wire2(5, 63) <= sub_wire12(63); + sub_wire2(5, 64) <= sub_wire12(64); + sub_wire2(5, 65) <= sub_wire12(65); + sub_wire2(5, 66) <= sub_wire12(66); + sub_wire2(5, 67) <= sub_wire12(67); + sub_wire2(5, 68) <= sub_wire12(68); + sub_wire2(5, 69) <= sub_wire12(69); + sub_wire2(5, 70) <= sub_wire12(70); + sub_wire2(5, 71) <= sub_wire12(71); + sub_wire2(5, 72) <= sub_wire12(72); + sub_wire2(5, 73) <= sub_wire12(73); + sub_wire2(5, 74) <= sub_wire12(74); + sub_wire2(5, 75) <= sub_wire12(75); + sub_wire2(5, 76) <= sub_wire12(76); + sub_wire2(5, 77) <= sub_wire12(77); + sub_wire2(5, 78) <= sub_wire12(78); + sub_wire2(5, 79) <= sub_wire12(79); + sub_wire2(5, 80) <= sub_wire12(80); + sub_wire2(5, 81) <= sub_wire12(81); + sub_wire2(5, 82) <= sub_wire12(82); + sub_wire2(5, 83) <= sub_wire12(83); + sub_wire2(5, 84) <= sub_wire12(84); + sub_wire2(5, 85) <= sub_wire12(85); + sub_wire2(5, 86) <= sub_wire12(86); + sub_wire2(5, 87) <= sub_wire12(87); + sub_wire2(5, 88) <= sub_wire12(88); + sub_wire2(5, 89) <= sub_wire12(89); + sub_wire2(5, 90) <= sub_wire12(90); + sub_wire2(5, 91) <= sub_wire12(91); + sub_wire2(5, 92) <= sub_wire12(92); + sub_wire2(5, 93) <= sub_wire12(93); + sub_wire2(5, 94) <= sub_wire12(94); + sub_wire2(5, 95) <= sub_wire12(95); + sub_wire2(5, 96) <= sub_wire12(96); + sub_wire2(5, 97) <= sub_wire12(97); + sub_wire2(5, 98) <= sub_wire12(98); + sub_wire2(5, 99) <= sub_wire12(99); + sub_wire2(5, 100) <= sub_wire12(100); + sub_wire2(5, 101) <= sub_wire12(101); + sub_wire2(5, 102) <= sub_wire12(102); + sub_wire2(5, 103) <= sub_wire12(103); + sub_wire2(5, 104) <= sub_wire12(104); + sub_wire2(5, 105) <= sub_wire12(105); + sub_wire2(5, 106) <= sub_wire12(106); + sub_wire2(5, 107) <= sub_wire12(107); + sub_wire2(5, 108) <= sub_wire12(108); + sub_wire2(5, 109) <= sub_wire12(109); + sub_wire2(5, 110) <= sub_wire12(110); + sub_wire2(5, 111) <= sub_wire12(111); + sub_wire2(5, 112) <= sub_wire12(112); + sub_wire2(5, 113) <= sub_wire12(113); + sub_wire2(5, 114) <= sub_wire12(114); + sub_wire2(5, 115) <= sub_wire12(115); + sub_wire2(5, 116) <= sub_wire12(116); + sub_wire2(5, 117) <= sub_wire12(117); + sub_wire2(5, 118) <= sub_wire12(118); + sub_wire2(5, 119) <= sub_wire12(119); + sub_wire2(5, 120) <= sub_wire12(120); + sub_wire2(5, 121) <= sub_wire12(121); + sub_wire2(5, 122) <= sub_wire12(122); + sub_wire2(5, 123) <= sub_wire12(123); + sub_wire2(5, 124) <= sub_wire12(124); + sub_wire2(5, 125) <= sub_wire12(125); + sub_wire2(5, 126) <= sub_wire12(126); + sub_wire2(5, 127) <= sub_wire12(127); + sub_wire2(4, 0) <= sub_wire13(0); + sub_wire2(4, 1) <= sub_wire13(1); + sub_wire2(4, 2) <= sub_wire13(2); + sub_wire2(4, 3) <= sub_wire13(3); + sub_wire2(4, 4) <= sub_wire13(4); + sub_wire2(4, 5) <= sub_wire13(5); + sub_wire2(4, 6) <= sub_wire13(6); + sub_wire2(4, 7) <= sub_wire13(7); + sub_wire2(4, 8) <= sub_wire13(8); + sub_wire2(4, 9) <= sub_wire13(9); + sub_wire2(4, 10) <= sub_wire13(10); + sub_wire2(4, 11) <= sub_wire13(11); + sub_wire2(4, 12) <= sub_wire13(12); + sub_wire2(4, 13) <= sub_wire13(13); + sub_wire2(4, 14) <= sub_wire13(14); + sub_wire2(4, 15) <= sub_wire13(15); + sub_wire2(4, 16) <= sub_wire13(16); + sub_wire2(4, 17) <= sub_wire13(17); + sub_wire2(4, 18) <= sub_wire13(18); + sub_wire2(4, 19) <= sub_wire13(19); + sub_wire2(4, 20) <= sub_wire13(20); + sub_wire2(4, 21) <= sub_wire13(21); + sub_wire2(4, 22) <= sub_wire13(22); + sub_wire2(4, 23) <= sub_wire13(23); + sub_wire2(4, 24) <= sub_wire13(24); + sub_wire2(4, 25) <= sub_wire13(25); + sub_wire2(4, 26) <= sub_wire13(26); + sub_wire2(4, 27) <= sub_wire13(27); + sub_wire2(4, 28) <= sub_wire13(28); + sub_wire2(4, 29) <= sub_wire13(29); + sub_wire2(4, 30) <= sub_wire13(30); + sub_wire2(4, 31) <= sub_wire13(31); + sub_wire2(4, 32) <= sub_wire13(32); + sub_wire2(4, 33) <= sub_wire13(33); + sub_wire2(4, 34) <= sub_wire13(34); + sub_wire2(4, 35) <= sub_wire13(35); + sub_wire2(4, 36) <= sub_wire13(36); + sub_wire2(4, 37) <= sub_wire13(37); + sub_wire2(4, 38) <= sub_wire13(38); + sub_wire2(4, 39) <= sub_wire13(39); + sub_wire2(4, 40) <= sub_wire13(40); + sub_wire2(4, 41) <= sub_wire13(41); + sub_wire2(4, 42) <= sub_wire13(42); + sub_wire2(4, 43) <= sub_wire13(43); + sub_wire2(4, 44) <= sub_wire13(44); + sub_wire2(4, 45) <= sub_wire13(45); + sub_wire2(4, 46) <= sub_wire13(46); + sub_wire2(4, 47) <= sub_wire13(47); + sub_wire2(4, 48) <= sub_wire13(48); + sub_wire2(4, 49) <= sub_wire13(49); + sub_wire2(4, 50) <= sub_wire13(50); + sub_wire2(4, 51) <= sub_wire13(51); + sub_wire2(4, 52) <= sub_wire13(52); + sub_wire2(4, 53) <= sub_wire13(53); + sub_wire2(4, 54) <= sub_wire13(54); + sub_wire2(4, 55) <= sub_wire13(55); + sub_wire2(4, 56) <= sub_wire13(56); + sub_wire2(4, 57) <= sub_wire13(57); + sub_wire2(4, 58) <= sub_wire13(58); + sub_wire2(4, 59) <= sub_wire13(59); + sub_wire2(4, 60) <= sub_wire13(60); + sub_wire2(4, 61) <= sub_wire13(61); + sub_wire2(4, 62) <= sub_wire13(62); + sub_wire2(4, 63) <= sub_wire13(63); + sub_wire2(4, 64) <= sub_wire13(64); + sub_wire2(4, 65) <= sub_wire13(65); + sub_wire2(4, 66) <= sub_wire13(66); + sub_wire2(4, 67) <= sub_wire13(67); + sub_wire2(4, 68) <= sub_wire13(68); + sub_wire2(4, 69) <= sub_wire13(69); + sub_wire2(4, 70) <= sub_wire13(70); + sub_wire2(4, 71) <= sub_wire13(71); + sub_wire2(4, 72) <= sub_wire13(72); + sub_wire2(4, 73) <= sub_wire13(73); + sub_wire2(4, 74) <= sub_wire13(74); + sub_wire2(4, 75) <= sub_wire13(75); + sub_wire2(4, 76) <= sub_wire13(76); + sub_wire2(4, 77) <= sub_wire13(77); + sub_wire2(4, 78) <= sub_wire13(78); + sub_wire2(4, 79) <= sub_wire13(79); + sub_wire2(4, 80) <= sub_wire13(80); + sub_wire2(4, 81) <= sub_wire13(81); + sub_wire2(4, 82) <= sub_wire13(82); + sub_wire2(4, 83) <= sub_wire13(83); + sub_wire2(4, 84) <= sub_wire13(84); + sub_wire2(4, 85) <= sub_wire13(85); + sub_wire2(4, 86) <= sub_wire13(86); + sub_wire2(4, 87) <= sub_wire13(87); + sub_wire2(4, 88) <= sub_wire13(88); + sub_wire2(4, 89) <= sub_wire13(89); + sub_wire2(4, 90) <= sub_wire13(90); + sub_wire2(4, 91) <= sub_wire13(91); + sub_wire2(4, 92) <= sub_wire13(92); + sub_wire2(4, 93) <= sub_wire13(93); + sub_wire2(4, 94) <= sub_wire13(94); + sub_wire2(4, 95) <= sub_wire13(95); + sub_wire2(4, 96) <= sub_wire13(96); + sub_wire2(4, 97) <= sub_wire13(97); + sub_wire2(4, 98) <= sub_wire13(98); + sub_wire2(4, 99) <= sub_wire13(99); + sub_wire2(4, 100) <= sub_wire13(100); + sub_wire2(4, 101) <= sub_wire13(101); + sub_wire2(4, 102) <= sub_wire13(102); + sub_wire2(4, 103) <= sub_wire13(103); + sub_wire2(4, 104) <= sub_wire13(104); + sub_wire2(4, 105) <= sub_wire13(105); + sub_wire2(4, 106) <= sub_wire13(106); + sub_wire2(4, 107) <= sub_wire13(107); + sub_wire2(4, 108) <= sub_wire13(108); + sub_wire2(4, 109) <= sub_wire13(109); + sub_wire2(4, 110) <= sub_wire13(110); + sub_wire2(4, 111) <= sub_wire13(111); + sub_wire2(4, 112) <= sub_wire13(112); + sub_wire2(4, 113) <= sub_wire13(113); + sub_wire2(4, 114) <= sub_wire13(114); + sub_wire2(4, 115) <= sub_wire13(115); + sub_wire2(4, 116) <= sub_wire13(116); + sub_wire2(4, 117) <= sub_wire13(117); + sub_wire2(4, 118) <= sub_wire13(118); + sub_wire2(4, 119) <= sub_wire13(119); + sub_wire2(4, 120) <= sub_wire13(120); + sub_wire2(4, 121) <= sub_wire13(121); + sub_wire2(4, 122) <= sub_wire13(122); + sub_wire2(4, 123) <= sub_wire13(123); + sub_wire2(4, 124) <= sub_wire13(124); + sub_wire2(4, 125) <= sub_wire13(125); + sub_wire2(4, 126) <= sub_wire13(126); + sub_wire2(4, 127) <= sub_wire13(127); + sub_wire2(3, 0) <= sub_wire14(0); + sub_wire2(3, 1) <= sub_wire14(1); + sub_wire2(3, 2) <= sub_wire14(2); + sub_wire2(3, 3) <= sub_wire14(3); + sub_wire2(3, 4) <= sub_wire14(4); + sub_wire2(3, 5) <= sub_wire14(5); + sub_wire2(3, 6) <= sub_wire14(6); + sub_wire2(3, 7) <= sub_wire14(7); + sub_wire2(3, 8) <= sub_wire14(8); + sub_wire2(3, 9) <= sub_wire14(9); + sub_wire2(3, 10) <= sub_wire14(10); + sub_wire2(3, 11) <= sub_wire14(11); + sub_wire2(3, 12) <= sub_wire14(12); + sub_wire2(3, 13) <= sub_wire14(13); + sub_wire2(3, 14) <= sub_wire14(14); + sub_wire2(3, 15) <= sub_wire14(15); + sub_wire2(3, 16) <= sub_wire14(16); + sub_wire2(3, 17) <= sub_wire14(17); + sub_wire2(3, 18) <= sub_wire14(18); + sub_wire2(3, 19) <= sub_wire14(19); + sub_wire2(3, 20) <= sub_wire14(20); + sub_wire2(3, 21) <= sub_wire14(21); + sub_wire2(3, 22) <= sub_wire14(22); + sub_wire2(3, 23) <= sub_wire14(23); + sub_wire2(3, 24) <= sub_wire14(24); + sub_wire2(3, 25) <= sub_wire14(25); + sub_wire2(3, 26) <= sub_wire14(26); + sub_wire2(3, 27) <= sub_wire14(27); + sub_wire2(3, 28) <= sub_wire14(28); + sub_wire2(3, 29) <= sub_wire14(29); + sub_wire2(3, 30) <= sub_wire14(30); + sub_wire2(3, 31) <= sub_wire14(31); + sub_wire2(3, 32) <= sub_wire14(32); + sub_wire2(3, 33) <= sub_wire14(33); + sub_wire2(3, 34) <= sub_wire14(34); + sub_wire2(3, 35) <= sub_wire14(35); + sub_wire2(3, 36) <= sub_wire14(36); + sub_wire2(3, 37) <= sub_wire14(37); + sub_wire2(3, 38) <= sub_wire14(38); + sub_wire2(3, 39) <= sub_wire14(39); + sub_wire2(3, 40) <= sub_wire14(40); + sub_wire2(3, 41) <= sub_wire14(41); + sub_wire2(3, 42) <= sub_wire14(42); + sub_wire2(3, 43) <= sub_wire14(43); + sub_wire2(3, 44) <= sub_wire14(44); + sub_wire2(3, 45) <= sub_wire14(45); + sub_wire2(3, 46) <= sub_wire14(46); + sub_wire2(3, 47) <= sub_wire14(47); + sub_wire2(3, 48) <= sub_wire14(48); + sub_wire2(3, 49) <= sub_wire14(49); + sub_wire2(3, 50) <= sub_wire14(50); + sub_wire2(3, 51) <= sub_wire14(51); + sub_wire2(3, 52) <= sub_wire14(52); + sub_wire2(3, 53) <= sub_wire14(53); + sub_wire2(3, 54) <= sub_wire14(54); + sub_wire2(3, 55) <= sub_wire14(55); + sub_wire2(3, 56) <= sub_wire14(56); + sub_wire2(3, 57) <= sub_wire14(57); + sub_wire2(3, 58) <= sub_wire14(58); + sub_wire2(3, 59) <= sub_wire14(59); + sub_wire2(3, 60) <= sub_wire14(60); + sub_wire2(3, 61) <= sub_wire14(61); + sub_wire2(3, 62) <= sub_wire14(62); + sub_wire2(3, 63) <= sub_wire14(63); + sub_wire2(3, 64) <= sub_wire14(64); + sub_wire2(3, 65) <= sub_wire14(65); + sub_wire2(3, 66) <= sub_wire14(66); + sub_wire2(3, 67) <= sub_wire14(67); + sub_wire2(3, 68) <= sub_wire14(68); + sub_wire2(3, 69) <= sub_wire14(69); + sub_wire2(3, 70) <= sub_wire14(70); + sub_wire2(3, 71) <= sub_wire14(71); + sub_wire2(3, 72) <= sub_wire14(72); + sub_wire2(3, 73) <= sub_wire14(73); + sub_wire2(3, 74) <= sub_wire14(74); + sub_wire2(3, 75) <= sub_wire14(75); + sub_wire2(3, 76) <= sub_wire14(76); + sub_wire2(3, 77) <= sub_wire14(77); + sub_wire2(3, 78) <= sub_wire14(78); + sub_wire2(3, 79) <= sub_wire14(79); + sub_wire2(3, 80) <= sub_wire14(80); + sub_wire2(3, 81) <= sub_wire14(81); + sub_wire2(3, 82) <= sub_wire14(82); + sub_wire2(3, 83) <= sub_wire14(83); + sub_wire2(3, 84) <= sub_wire14(84); + sub_wire2(3, 85) <= sub_wire14(85); + sub_wire2(3, 86) <= sub_wire14(86); + sub_wire2(3, 87) <= sub_wire14(87); + sub_wire2(3, 88) <= sub_wire14(88); + sub_wire2(3, 89) <= sub_wire14(89); + sub_wire2(3, 90) <= sub_wire14(90); + sub_wire2(3, 91) <= sub_wire14(91); + sub_wire2(3, 92) <= sub_wire14(92); + sub_wire2(3, 93) <= sub_wire14(93); + sub_wire2(3, 94) <= sub_wire14(94); + sub_wire2(3, 95) <= sub_wire14(95); + sub_wire2(3, 96) <= sub_wire14(96); + sub_wire2(3, 97) <= sub_wire14(97); + sub_wire2(3, 98) <= sub_wire14(98); + sub_wire2(3, 99) <= sub_wire14(99); + sub_wire2(3, 100) <= sub_wire14(100); + sub_wire2(3, 101) <= sub_wire14(101); + sub_wire2(3, 102) <= sub_wire14(102); + sub_wire2(3, 103) <= sub_wire14(103); + sub_wire2(3, 104) <= sub_wire14(104); + sub_wire2(3, 105) <= sub_wire14(105); + sub_wire2(3, 106) <= sub_wire14(106); + sub_wire2(3, 107) <= sub_wire14(107); + sub_wire2(3, 108) <= sub_wire14(108); + sub_wire2(3, 109) <= sub_wire14(109); + sub_wire2(3, 110) <= sub_wire14(110); + sub_wire2(3, 111) <= sub_wire14(111); + sub_wire2(3, 112) <= sub_wire14(112); + sub_wire2(3, 113) <= sub_wire14(113); + sub_wire2(3, 114) <= sub_wire14(114); + sub_wire2(3, 115) <= sub_wire14(115); + sub_wire2(3, 116) <= sub_wire14(116); + sub_wire2(3, 117) <= sub_wire14(117); + sub_wire2(3, 118) <= sub_wire14(118); + sub_wire2(3, 119) <= sub_wire14(119); + sub_wire2(3, 120) <= sub_wire14(120); + sub_wire2(3, 121) <= sub_wire14(121); + sub_wire2(3, 122) <= sub_wire14(122); + sub_wire2(3, 123) <= sub_wire14(123); + sub_wire2(3, 124) <= sub_wire14(124); + sub_wire2(3, 125) <= sub_wire14(125); + sub_wire2(3, 126) <= sub_wire14(126); + sub_wire2(3, 127) <= sub_wire14(127); + sub_wire2(2, 0) <= sub_wire15(0); + sub_wire2(2, 1) <= sub_wire15(1); + sub_wire2(2, 2) <= sub_wire15(2); + sub_wire2(2, 3) <= sub_wire15(3); + sub_wire2(2, 4) <= sub_wire15(4); + sub_wire2(2, 5) <= sub_wire15(5); + sub_wire2(2, 6) <= sub_wire15(6); + sub_wire2(2, 7) <= sub_wire15(7); + sub_wire2(2, 8) <= sub_wire15(8); + sub_wire2(2, 9) <= sub_wire15(9); + sub_wire2(2, 10) <= sub_wire15(10); + sub_wire2(2, 11) <= sub_wire15(11); + sub_wire2(2, 12) <= sub_wire15(12); + sub_wire2(2, 13) <= sub_wire15(13); + sub_wire2(2, 14) <= sub_wire15(14); + sub_wire2(2, 15) <= sub_wire15(15); + sub_wire2(2, 16) <= sub_wire15(16); + sub_wire2(2, 17) <= sub_wire15(17); + sub_wire2(2, 18) <= sub_wire15(18); + sub_wire2(2, 19) <= sub_wire15(19); + sub_wire2(2, 20) <= sub_wire15(20); + sub_wire2(2, 21) <= sub_wire15(21); + sub_wire2(2, 22) <= sub_wire15(22); + sub_wire2(2, 23) <= sub_wire15(23); + sub_wire2(2, 24) <= sub_wire15(24); + sub_wire2(2, 25) <= sub_wire15(25); + sub_wire2(2, 26) <= sub_wire15(26); + sub_wire2(2, 27) <= sub_wire15(27); + sub_wire2(2, 28) <= sub_wire15(28); + sub_wire2(2, 29) <= sub_wire15(29); + sub_wire2(2, 30) <= sub_wire15(30); + sub_wire2(2, 31) <= sub_wire15(31); + sub_wire2(2, 32) <= sub_wire15(32); + sub_wire2(2, 33) <= sub_wire15(33); + sub_wire2(2, 34) <= sub_wire15(34); + sub_wire2(2, 35) <= sub_wire15(35); + sub_wire2(2, 36) <= sub_wire15(36); + sub_wire2(2, 37) <= sub_wire15(37); + sub_wire2(2, 38) <= sub_wire15(38); + sub_wire2(2, 39) <= sub_wire15(39); + sub_wire2(2, 40) <= sub_wire15(40); + sub_wire2(2, 41) <= sub_wire15(41); + sub_wire2(2, 42) <= sub_wire15(42); + sub_wire2(2, 43) <= sub_wire15(43); + sub_wire2(2, 44) <= sub_wire15(44); + sub_wire2(2, 45) <= sub_wire15(45); + sub_wire2(2, 46) <= sub_wire15(46); + sub_wire2(2, 47) <= sub_wire15(47); + sub_wire2(2, 48) <= sub_wire15(48); + sub_wire2(2, 49) <= sub_wire15(49); + sub_wire2(2, 50) <= sub_wire15(50); + sub_wire2(2, 51) <= sub_wire15(51); + sub_wire2(2, 52) <= sub_wire15(52); + sub_wire2(2, 53) <= sub_wire15(53); + sub_wire2(2, 54) <= sub_wire15(54); + sub_wire2(2, 55) <= sub_wire15(55); + sub_wire2(2, 56) <= sub_wire15(56); + sub_wire2(2, 57) <= sub_wire15(57); + sub_wire2(2, 58) <= sub_wire15(58); + sub_wire2(2, 59) <= sub_wire15(59); + sub_wire2(2, 60) <= sub_wire15(60); + sub_wire2(2, 61) <= sub_wire15(61); + sub_wire2(2, 62) <= sub_wire15(62); + sub_wire2(2, 63) <= sub_wire15(63); + sub_wire2(2, 64) <= sub_wire15(64); + sub_wire2(2, 65) <= sub_wire15(65); + sub_wire2(2, 66) <= sub_wire15(66); + sub_wire2(2, 67) <= sub_wire15(67); + sub_wire2(2, 68) <= sub_wire15(68); + sub_wire2(2, 69) <= sub_wire15(69); + sub_wire2(2, 70) <= sub_wire15(70); + sub_wire2(2, 71) <= sub_wire15(71); + sub_wire2(2, 72) <= sub_wire15(72); + sub_wire2(2, 73) <= sub_wire15(73); + sub_wire2(2, 74) <= sub_wire15(74); + sub_wire2(2, 75) <= sub_wire15(75); + sub_wire2(2, 76) <= sub_wire15(76); + sub_wire2(2, 77) <= sub_wire15(77); + sub_wire2(2, 78) <= sub_wire15(78); + sub_wire2(2, 79) <= sub_wire15(79); + sub_wire2(2, 80) <= sub_wire15(80); + sub_wire2(2, 81) <= sub_wire15(81); + sub_wire2(2, 82) <= sub_wire15(82); + sub_wire2(2, 83) <= sub_wire15(83); + sub_wire2(2, 84) <= sub_wire15(84); + sub_wire2(2, 85) <= sub_wire15(85); + sub_wire2(2, 86) <= sub_wire15(86); + sub_wire2(2, 87) <= sub_wire15(87); + sub_wire2(2, 88) <= sub_wire15(88); + sub_wire2(2, 89) <= sub_wire15(89); + sub_wire2(2, 90) <= sub_wire15(90); + sub_wire2(2, 91) <= sub_wire15(91); + sub_wire2(2, 92) <= sub_wire15(92); + sub_wire2(2, 93) <= sub_wire15(93); + sub_wire2(2, 94) <= sub_wire15(94); + sub_wire2(2, 95) <= sub_wire15(95); + sub_wire2(2, 96) <= sub_wire15(96); + sub_wire2(2, 97) <= sub_wire15(97); + sub_wire2(2, 98) <= sub_wire15(98); + sub_wire2(2, 99) <= sub_wire15(99); + sub_wire2(2, 100) <= sub_wire15(100); + sub_wire2(2, 101) <= sub_wire15(101); + sub_wire2(2, 102) <= sub_wire15(102); + sub_wire2(2, 103) <= sub_wire15(103); + sub_wire2(2, 104) <= sub_wire15(104); + sub_wire2(2, 105) <= sub_wire15(105); + sub_wire2(2, 106) <= sub_wire15(106); + sub_wire2(2, 107) <= sub_wire15(107); + sub_wire2(2, 108) <= sub_wire15(108); + sub_wire2(2, 109) <= sub_wire15(109); + sub_wire2(2, 110) <= sub_wire15(110); + sub_wire2(2, 111) <= sub_wire15(111); + sub_wire2(2, 112) <= sub_wire15(112); + sub_wire2(2, 113) <= sub_wire15(113); + sub_wire2(2, 114) <= sub_wire15(114); + sub_wire2(2, 115) <= sub_wire15(115); + sub_wire2(2, 116) <= sub_wire15(116); + sub_wire2(2, 117) <= sub_wire15(117); + sub_wire2(2, 118) <= sub_wire15(118); + sub_wire2(2, 119) <= sub_wire15(119); + sub_wire2(2, 120) <= sub_wire15(120); + sub_wire2(2, 121) <= sub_wire15(121); + sub_wire2(2, 122) <= sub_wire15(122); + sub_wire2(2, 123) <= sub_wire15(123); + sub_wire2(2, 124) <= sub_wire15(124); + sub_wire2(2, 125) <= sub_wire15(125); + sub_wire2(2, 126) <= sub_wire15(126); + sub_wire2(2, 127) <= sub_wire15(127); + sub_wire2(1, 0) <= sub_wire16(0); + sub_wire2(1, 1) <= sub_wire16(1); + sub_wire2(1, 2) <= sub_wire16(2); + sub_wire2(1, 3) <= sub_wire16(3); + sub_wire2(1, 4) <= sub_wire16(4); + sub_wire2(1, 5) <= sub_wire16(5); + sub_wire2(1, 6) <= sub_wire16(6); + sub_wire2(1, 7) <= sub_wire16(7); + sub_wire2(1, 8) <= sub_wire16(8); + sub_wire2(1, 9) <= sub_wire16(9); + sub_wire2(1, 10) <= sub_wire16(10); + sub_wire2(1, 11) <= sub_wire16(11); + sub_wire2(1, 12) <= sub_wire16(12); + sub_wire2(1, 13) <= sub_wire16(13); + sub_wire2(1, 14) <= sub_wire16(14); + sub_wire2(1, 15) <= sub_wire16(15); + sub_wire2(1, 16) <= sub_wire16(16); + sub_wire2(1, 17) <= sub_wire16(17); + sub_wire2(1, 18) <= sub_wire16(18); + sub_wire2(1, 19) <= sub_wire16(19); + sub_wire2(1, 20) <= sub_wire16(20); + sub_wire2(1, 21) <= sub_wire16(21); + sub_wire2(1, 22) <= sub_wire16(22); + sub_wire2(1, 23) <= sub_wire16(23); + sub_wire2(1, 24) <= sub_wire16(24); + sub_wire2(1, 25) <= sub_wire16(25); + sub_wire2(1, 26) <= sub_wire16(26); + sub_wire2(1, 27) <= sub_wire16(27); + sub_wire2(1, 28) <= sub_wire16(28); + sub_wire2(1, 29) <= sub_wire16(29); + sub_wire2(1, 30) <= sub_wire16(30); + sub_wire2(1, 31) <= sub_wire16(31); + sub_wire2(1, 32) <= sub_wire16(32); + sub_wire2(1, 33) <= sub_wire16(33); + sub_wire2(1, 34) <= sub_wire16(34); + sub_wire2(1, 35) <= sub_wire16(35); + sub_wire2(1, 36) <= sub_wire16(36); + sub_wire2(1, 37) <= sub_wire16(37); + sub_wire2(1, 38) <= sub_wire16(38); + sub_wire2(1, 39) <= sub_wire16(39); + sub_wire2(1, 40) <= sub_wire16(40); + sub_wire2(1, 41) <= sub_wire16(41); + sub_wire2(1, 42) <= sub_wire16(42); + sub_wire2(1, 43) <= sub_wire16(43); + sub_wire2(1, 44) <= sub_wire16(44); + sub_wire2(1, 45) <= sub_wire16(45); + sub_wire2(1, 46) <= sub_wire16(46); + sub_wire2(1, 47) <= sub_wire16(47); + sub_wire2(1, 48) <= sub_wire16(48); + sub_wire2(1, 49) <= sub_wire16(49); + sub_wire2(1, 50) <= sub_wire16(50); + sub_wire2(1, 51) <= sub_wire16(51); + sub_wire2(1, 52) <= sub_wire16(52); + sub_wire2(1, 53) <= sub_wire16(53); + sub_wire2(1, 54) <= sub_wire16(54); + sub_wire2(1, 55) <= sub_wire16(55); + sub_wire2(1, 56) <= sub_wire16(56); + sub_wire2(1, 57) <= sub_wire16(57); + sub_wire2(1, 58) <= sub_wire16(58); + sub_wire2(1, 59) <= sub_wire16(59); + sub_wire2(1, 60) <= sub_wire16(60); + sub_wire2(1, 61) <= sub_wire16(61); + sub_wire2(1, 62) <= sub_wire16(62); + sub_wire2(1, 63) <= sub_wire16(63); + sub_wire2(1, 64) <= sub_wire16(64); + sub_wire2(1, 65) <= sub_wire16(65); + sub_wire2(1, 66) <= sub_wire16(66); + sub_wire2(1, 67) <= sub_wire16(67); + sub_wire2(1, 68) <= sub_wire16(68); + sub_wire2(1, 69) <= sub_wire16(69); + sub_wire2(1, 70) <= sub_wire16(70); + sub_wire2(1, 71) <= sub_wire16(71); + sub_wire2(1, 72) <= sub_wire16(72); + sub_wire2(1, 73) <= sub_wire16(73); + sub_wire2(1, 74) <= sub_wire16(74); + sub_wire2(1, 75) <= sub_wire16(75); + sub_wire2(1, 76) <= sub_wire16(76); + sub_wire2(1, 77) <= sub_wire16(77); + sub_wire2(1, 78) <= sub_wire16(78); + sub_wire2(1, 79) <= sub_wire16(79); + sub_wire2(1, 80) <= sub_wire16(80); + sub_wire2(1, 81) <= sub_wire16(81); + sub_wire2(1, 82) <= sub_wire16(82); + sub_wire2(1, 83) <= sub_wire16(83); + sub_wire2(1, 84) <= sub_wire16(84); + sub_wire2(1, 85) <= sub_wire16(85); + sub_wire2(1, 86) <= sub_wire16(86); + sub_wire2(1, 87) <= sub_wire16(87); + sub_wire2(1, 88) <= sub_wire16(88); + sub_wire2(1, 89) <= sub_wire16(89); + sub_wire2(1, 90) <= sub_wire16(90); + sub_wire2(1, 91) <= sub_wire16(91); + sub_wire2(1, 92) <= sub_wire16(92); + sub_wire2(1, 93) <= sub_wire16(93); + sub_wire2(1, 94) <= sub_wire16(94); + sub_wire2(1, 95) <= sub_wire16(95); + sub_wire2(1, 96) <= sub_wire16(96); + sub_wire2(1, 97) <= sub_wire16(97); + sub_wire2(1, 98) <= sub_wire16(98); + sub_wire2(1, 99) <= sub_wire16(99); + sub_wire2(1, 100) <= sub_wire16(100); + sub_wire2(1, 101) <= sub_wire16(101); + sub_wire2(1, 102) <= sub_wire16(102); + sub_wire2(1, 103) <= sub_wire16(103); + sub_wire2(1, 104) <= sub_wire16(104); + sub_wire2(1, 105) <= sub_wire16(105); + sub_wire2(1, 106) <= sub_wire16(106); + sub_wire2(1, 107) <= sub_wire16(107); + sub_wire2(1, 108) <= sub_wire16(108); + sub_wire2(1, 109) <= sub_wire16(109); + sub_wire2(1, 110) <= sub_wire16(110); + sub_wire2(1, 111) <= sub_wire16(111); + sub_wire2(1, 112) <= sub_wire16(112); + sub_wire2(1, 113) <= sub_wire16(113); + sub_wire2(1, 114) <= sub_wire16(114); + sub_wire2(1, 115) <= sub_wire16(115); + sub_wire2(1, 116) <= sub_wire16(116); + sub_wire2(1, 117) <= sub_wire16(117); + sub_wire2(1, 118) <= sub_wire16(118); + sub_wire2(1, 119) <= sub_wire16(119); + sub_wire2(1, 120) <= sub_wire16(120); + sub_wire2(1, 121) <= sub_wire16(121); + sub_wire2(1, 122) <= sub_wire16(122); + sub_wire2(1, 123) <= sub_wire16(123); + sub_wire2(1, 124) <= sub_wire16(124); + sub_wire2(1, 125) <= sub_wire16(125); + sub_wire2(1, 126) <= sub_wire16(126); + sub_wire2(1, 127) <= sub_wire16(127); + sub_wire2(0, 0) <= sub_wire17(0); + sub_wire2(0, 1) <= sub_wire17(1); + sub_wire2(0, 2) <= sub_wire17(2); + sub_wire2(0, 3) <= sub_wire17(3); + sub_wire2(0, 4) <= sub_wire17(4); + sub_wire2(0, 5) <= sub_wire17(5); + sub_wire2(0, 6) <= sub_wire17(6); + sub_wire2(0, 7) <= sub_wire17(7); + sub_wire2(0, 8) <= sub_wire17(8); + sub_wire2(0, 9) <= sub_wire17(9); + sub_wire2(0, 10) <= sub_wire17(10); + sub_wire2(0, 11) <= sub_wire17(11); + sub_wire2(0, 12) <= sub_wire17(12); + sub_wire2(0, 13) <= sub_wire17(13); + sub_wire2(0, 14) <= sub_wire17(14); + sub_wire2(0, 15) <= sub_wire17(15); + sub_wire2(0, 16) <= sub_wire17(16); + sub_wire2(0, 17) <= sub_wire17(17); + sub_wire2(0, 18) <= sub_wire17(18); + sub_wire2(0, 19) <= sub_wire17(19); + sub_wire2(0, 20) <= sub_wire17(20); + sub_wire2(0, 21) <= sub_wire17(21); + sub_wire2(0, 22) <= sub_wire17(22); + sub_wire2(0, 23) <= sub_wire17(23); + sub_wire2(0, 24) <= sub_wire17(24); + sub_wire2(0, 25) <= sub_wire17(25); + sub_wire2(0, 26) <= sub_wire17(26); + sub_wire2(0, 27) <= sub_wire17(27); + sub_wire2(0, 28) <= sub_wire17(28); + sub_wire2(0, 29) <= sub_wire17(29); + sub_wire2(0, 30) <= sub_wire17(30); + sub_wire2(0, 31) <= sub_wire17(31); + sub_wire2(0, 32) <= sub_wire17(32); + sub_wire2(0, 33) <= sub_wire17(33); + sub_wire2(0, 34) <= sub_wire17(34); + sub_wire2(0, 35) <= sub_wire17(35); + sub_wire2(0, 36) <= sub_wire17(36); + sub_wire2(0, 37) <= sub_wire17(37); + sub_wire2(0, 38) <= sub_wire17(38); + sub_wire2(0, 39) <= sub_wire17(39); + sub_wire2(0, 40) <= sub_wire17(40); + sub_wire2(0, 41) <= sub_wire17(41); + sub_wire2(0, 42) <= sub_wire17(42); + sub_wire2(0, 43) <= sub_wire17(43); + sub_wire2(0, 44) <= sub_wire17(44); + sub_wire2(0, 45) <= sub_wire17(45); + sub_wire2(0, 46) <= sub_wire17(46); + sub_wire2(0, 47) <= sub_wire17(47); + sub_wire2(0, 48) <= sub_wire17(48); + sub_wire2(0, 49) <= sub_wire17(49); + sub_wire2(0, 50) <= sub_wire17(50); + sub_wire2(0, 51) <= sub_wire17(51); + sub_wire2(0, 52) <= sub_wire17(52); + sub_wire2(0, 53) <= sub_wire17(53); + sub_wire2(0, 54) <= sub_wire17(54); + sub_wire2(0, 55) <= sub_wire17(55); + sub_wire2(0, 56) <= sub_wire17(56); + sub_wire2(0, 57) <= sub_wire17(57); + sub_wire2(0, 58) <= sub_wire17(58); + sub_wire2(0, 59) <= sub_wire17(59); + sub_wire2(0, 60) <= sub_wire17(60); + sub_wire2(0, 61) <= sub_wire17(61); + sub_wire2(0, 62) <= sub_wire17(62); + sub_wire2(0, 63) <= sub_wire17(63); + sub_wire2(0, 64) <= sub_wire17(64); + sub_wire2(0, 65) <= sub_wire17(65); + sub_wire2(0, 66) <= sub_wire17(66); + sub_wire2(0, 67) <= sub_wire17(67); + sub_wire2(0, 68) <= sub_wire17(68); + sub_wire2(0, 69) <= sub_wire17(69); + sub_wire2(0, 70) <= sub_wire17(70); + sub_wire2(0, 71) <= sub_wire17(71); + sub_wire2(0, 72) <= sub_wire17(72); + sub_wire2(0, 73) <= sub_wire17(73); + sub_wire2(0, 74) <= sub_wire17(74); + sub_wire2(0, 75) <= sub_wire17(75); + sub_wire2(0, 76) <= sub_wire17(76); + sub_wire2(0, 77) <= sub_wire17(77); + sub_wire2(0, 78) <= sub_wire17(78); + sub_wire2(0, 79) <= sub_wire17(79); + sub_wire2(0, 80) <= sub_wire17(80); + sub_wire2(0, 81) <= sub_wire17(81); + sub_wire2(0, 82) <= sub_wire17(82); + sub_wire2(0, 83) <= sub_wire17(83); + sub_wire2(0, 84) <= sub_wire17(84); + sub_wire2(0, 85) <= sub_wire17(85); + sub_wire2(0, 86) <= sub_wire17(86); + sub_wire2(0, 87) <= sub_wire17(87); + sub_wire2(0, 88) <= sub_wire17(88); + sub_wire2(0, 89) <= sub_wire17(89); + sub_wire2(0, 90) <= sub_wire17(90); + sub_wire2(0, 91) <= sub_wire17(91); + sub_wire2(0, 92) <= sub_wire17(92); + sub_wire2(0, 93) <= sub_wire17(93); + sub_wire2(0, 94) <= sub_wire17(94); + sub_wire2(0, 95) <= sub_wire17(95); + sub_wire2(0, 96) <= sub_wire17(96); + sub_wire2(0, 97) <= sub_wire17(97); + sub_wire2(0, 98) <= sub_wire17(98); + sub_wire2(0, 99) <= sub_wire17(99); + sub_wire2(0, 100) <= sub_wire17(100); + sub_wire2(0, 101) <= sub_wire17(101); + sub_wire2(0, 102) <= sub_wire17(102); + sub_wire2(0, 103) <= sub_wire17(103); + sub_wire2(0, 104) <= sub_wire17(104); + sub_wire2(0, 105) <= sub_wire17(105); + sub_wire2(0, 106) <= sub_wire17(106); + sub_wire2(0, 107) <= sub_wire17(107); + sub_wire2(0, 108) <= sub_wire17(108); + sub_wire2(0, 109) <= sub_wire17(109); + sub_wire2(0, 110) <= sub_wire17(110); + sub_wire2(0, 111) <= sub_wire17(111); + sub_wire2(0, 112) <= sub_wire17(112); + sub_wire2(0, 113) <= sub_wire17(113); + sub_wire2(0, 114) <= sub_wire17(114); + sub_wire2(0, 115) <= sub_wire17(115); + sub_wire2(0, 116) <= sub_wire17(116); + sub_wire2(0, 117) <= sub_wire17(117); + sub_wire2(0, 118) <= sub_wire17(118); + sub_wire2(0, 119) <= sub_wire17(119); + sub_wire2(0, 120) <= sub_wire17(120); + sub_wire2(0, 121) <= sub_wire17(121); + sub_wire2(0, 122) <= sub_wire17(122); + sub_wire2(0, 123) <= sub_wire17(123); + sub_wire2(0, 124) <= sub_wire17(124); + sub_wire2(0, 125) <= sub_wire17(125); + sub_wire2(0, 126) <= sub_wire17(126); + sub_wire2(0, 127) <= sub_wire17(127); + + lpm_mux_component : lpm_mux + GENERIC MAP ( + lpm_size => 16, + lpm_type => "LPM_MUX", + lpm_width => 128, + lpm_widths => 4 + ) + PORT MAP ( + sel => sel, + data => sub_wire2, + result => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: CONSTANT: LPM_SIZE NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_MUX" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "128" +-- Retrieval info: CONSTANT: LPM_WIDTHS NUMERIC "4" +-- Retrieval info: USED_PORT: data0x 0 0 128 0 INPUT NODEFVAL data0x[127..0] +-- Retrieval info: USED_PORT: data10x 0 0 128 0 INPUT NODEFVAL data10x[127..0] +-- Retrieval info: USED_PORT: data11x 0 0 128 0 INPUT NODEFVAL data11x[127..0] +-- Retrieval info: USED_PORT: data12x 0 0 128 0 INPUT NODEFVAL data12x[127..0] +-- Retrieval info: USED_PORT: data13x 0 0 128 0 INPUT NODEFVAL data13x[127..0] +-- Retrieval info: USED_PORT: data14x 0 0 128 0 INPUT NODEFVAL data14x[127..0] +-- Retrieval info: USED_PORT: data15x 0 0 128 0 INPUT NODEFVAL data15x[127..0] +-- Retrieval info: USED_PORT: data1x 0 0 128 0 INPUT NODEFVAL data1x[127..0] +-- Retrieval info: USED_PORT: data2x 0 0 128 0 INPUT NODEFVAL data2x[127..0] +-- Retrieval info: USED_PORT: data3x 0 0 128 0 INPUT NODEFVAL data3x[127..0] +-- Retrieval info: USED_PORT: data4x 0 0 128 0 INPUT NODEFVAL data4x[127..0] +-- Retrieval info: USED_PORT: data5x 0 0 128 0 INPUT NODEFVAL data5x[127..0] +-- Retrieval info: USED_PORT: data6x 0 0 128 0 INPUT NODEFVAL data6x[127..0] +-- Retrieval info: USED_PORT: data7x 0 0 128 0 INPUT NODEFVAL data7x[127..0] +-- Retrieval info: USED_PORT: data8x 0 0 128 0 INPUT NODEFVAL data8x[127..0] +-- Retrieval info: USED_PORT: data9x 0 0 128 0 INPUT NODEFVAL data9x[127..0] +-- Retrieval info: USED_PORT: result 0 0 128 0 OUTPUT NODEFVAL result[127..0] +-- Retrieval info: USED_PORT: sel 0 0 4 0 INPUT NODEFVAL sel[3..0] +-- Retrieval info: CONNECT: result 0 0 128 0 @result 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 15 128 0 data15x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 14 128 0 data14x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 13 128 0 data13x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 12 128 0 data12x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 11 128 0 data11x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 10 128 0 data10x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 9 128 0 data9x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 8 128 0 data8x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 7 128 0 data7x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 6 128 0 data6x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 5 128 0 data5x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 4 128 0 data4x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 3 128 0 data3x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 2 128 0 data2x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 1 128 0 data1x 0 0 128 0 +-- Retrieval info: CONNECT: @data 1 0 128 0 data0x 0 0 128 0 +-- Retrieval info: CONNECT: @sel 0 0 4 0 sel 0 0 4 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxVDM.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxVDM.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxVDM.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxVDM.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_muxVDM_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg0.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg0.bsf new file mode 100644 index 0000000..fb70a4b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg0.bsf @@ -0,0 +1,70 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 128) + (text "lpm_shiftreg0" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 112 25 124)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "load" (rect 0 0 23 14)(font "Arial" (font_size 8))) + (text "load" (rect 20 26 41 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect 20 42 71 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 3)) + ) + (port + (pt 0 80) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 74 49 87)(font "Arial" (font_size 8))) + (line (pt 0 80)(pt 16 80)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 90 48 103)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 1)) + ) + (port + (pt 144 72) + (output) + (text "shiftout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 66 123 79)(font "Arial" (font_size 8))) + (line (pt 144 72)(pt 128 72)(line_width 1)) + ) + (drawing + (text "left shift" (rect 92 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 112)(line_width 1)) + (line (pt 128 112)(pt 16 112)(line_width 1)) + (line (pt 16 112)(pt 16 16)(line_width 1)) + (line (pt 16 74)(pt 22 80)(line_width 1)) + (line (pt 22 80)(pt 16 86)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg0.inc b/FPGA_quartus_GE/Video/lpm_shiftreg0.inc new file mode 100644 index 0000000..1c0c4a2 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg0.inc @@ -0,0 +1,26 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_shiftreg0 +( + clock, + data[15..0], + load, + shiftin +) + +RETURNS ( + shiftout +); diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg0.qip b/FPGA_quartus_GE/Video/lpm_shiftreg0.qip new file mode 100644 index 0000000..a233319 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg0.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg0.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg0.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg0.vhd new file mode 100644 index 0000000..6e5d954 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg0.vhd @@ -0,0 +1,135 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg0.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg0 IS + PORT + ( + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + load : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC + ); +END lpm_shiftreg0; + + +ARCHITECTURE SYN OF lpm_shiftreg0 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + load : IN STD_LOGIC ; + clock : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + shiftout : OUT STD_LOGIC ; + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + shiftout <= sub_wire0; + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "LEFT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 16 + ) + PORT MAP ( + load => load, + clock => clock, + data => data, + shiftin => shiftin, + shiftout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "1" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "1" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "0" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "1" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "1" +-- Retrieval info: PRIVATE: nBit NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "LEFT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +-- Retrieval info: USED_PORT: load 0 0 0 0 INPUT NODEFVAL load +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: USED_PORT: shiftout 0 0 0 0 OUTPUT NODEFVAL shiftout +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: CONNECT: shiftout 0 0 0 0 @shiftout 0 0 0 0 +-- Retrieval info: CONNECT: @load 0 0 0 0 load 0 0 0 0 +-- Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg1.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg1.bsf new file mode 100644 index 0000000..aa20405 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg1.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg1" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[1..0]" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "q[1..0]" (rect 95 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "left shift" (rect 92 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg1.qip b/FPGA_quartus_GE/Video/lpm_shiftreg1.qip new file mode 100644 index 0000000..8a8e8a5 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg1.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg1.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg1.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg1.vhd new file mode 100644 index 0000000..781fe1b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg1.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg1.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg1 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END lpm_shiftreg1; + + +ARCHITECTURE SYN OF lpm_shiftreg1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (1 DOWNTO 0); + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (1 DOWNTO 0); + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(1 DOWNTO 0); + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "LEFT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 2 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "1" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "1" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "LEFT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "2" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: q 0 0 2 0 OUTPUT NODEFVAL q[1..0] +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 2 0 @q 0 0 2 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg1.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg1_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg2.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg2.bsf new file mode 100644 index 0000000..0caa084 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg2.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg2" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "shiftout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 42 123 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (drawing + (text "right shift" (rect 88 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg2.qip b/FPGA_quartus_GE/Video/lpm_shiftreg2.qip new file mode 100644 index 0000000..3c5305b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg2.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg2.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg2.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg2.vhd new file mode 100644 index 0000000..ca02c26 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg2.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg2.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg2 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC + ); +END lpm_shiftreg2; + + +ARCHITECTURE SYN OF lpm_shiftreg2 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC ; + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + shiftout <= sub_wire0; + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "RIGHT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 4 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + shiftout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "0" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "0" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "1" +-- Retrieval info: PRIVATE: nBit NUMERIC "4" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "4" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: USED_PORT: shiftout 0 0 0 0 OUTPUT NODEFVAL shiftout +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: CONNECT: shiftout 0 0 0 0 @shiftout 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg2.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg2_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg3.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg3.bsf new file mode 100644 index 0000000..d18b388 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg3.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg3" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "shiftout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 42 123 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (drawing + (text "right shift" (rect 88 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg3.inc b/FPGA_quartus_GE/Video/lpm_shiftreg3.inc new file mode 100644 index 0000000..4f70ce5 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg3.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_shiftreg3 +( + clock, + shiftin +) + +RETURNS ( + shiftout +); diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg3.qip b/FPGA_quartus_GE/Video/lpm_shiftreg3.qip new file mode 100644 index 0000000..783fdea --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg3.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg3.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg3.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg3.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg3.vhd new file mode 100644 index 0000000..b87c221 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg3.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg3.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg3 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC + ); +END lpm_shiftreg3; + + +ARCHITECTURE SYN OF lpm_shiftreg3 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC ; + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + shiftout <= sub_wire0; + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "RIGHT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 2 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + shiftout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "0" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "0" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "1" +-- Retrieval info: PRIVATE: nBit NUMERIC "2" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "2" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: USED_PORT: shiftout 0 0 0 0 OUTPUT NODEFVAL shiftout +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: CONNECT: shiftout 0 0 0 0 @shiftout 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg3.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg4.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg4.bsf new file mode 100644 index 0000000..658958d --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg4.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg4" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "shiftout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "shiftout" (rect 89 42 123 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 1)) + ) + (drawing + (text "right shift" (rect 88 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg4.inc b/FPGA_quartus_GE/Video/lpm_shiftreg4.inc new file mode 100644 index 0000000..322863a --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg4.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_shiftreg4 +( + clock, + shiftin +) + +RETURNS ( + shiftout +); diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg4.qip b/FPGA_quartus_GE/Video/lpm_shiftreg4.qip new file mode 100644 index 0000000..363cd59 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg4.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg4.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg4.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg4.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg4.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg4.vhd new file mode 100644 index 0000000..3d8f5d1 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg4.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg4.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg4 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC + ); +END lpm_shiftreg4; + + +ARCHITECTURE SYN OF lpm_shiftreg4 IS + + SIGNAL sub_wire0 : STD_LOGIC ; + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + shiftout : OUT STD_LOGIC ; + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + shiftout <= sub_wire0; + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "RIGHT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 5 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + shiftout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "0" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "0" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "1" +-- Retrieval info: PRIVATE: nBit NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "5" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: USED_PORT: shiftout 0 0 0 0 OUTPUT NODEFVAL shiftout +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: CONNECT: shiftout 0 0 0 0 @shiftout 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg4.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg4.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg4_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg5.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg5.bsf new file mode 100644 index 0000000..a528c96 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg5.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg5" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[4..0]" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "q[4..0]" (rect 95 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "right shift" (rect 88 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg5.inc b/FPGA_quartus_GE/Video/lpm_shiftreg5.inc new file mode 100644 index 0000000..431ed2c --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg5.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_shiftreg5 +( + clock, + shiftin +) + +RETURNS ( + q[4..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg5.qip b/FPGA_quartus_GE/Video/lpm_shiftreg5.qip new file mode 100644 index 0000000..9b71f4b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg5.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg5.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg5.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg5.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg5.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg5.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg5.vhd new file mode 100644 index 0000000..71a1232 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg5.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg5.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg5 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); +END lpm_shiftreg5; + + +ARCHITECTURE SYN OF lpm_shiftreg5 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(4 DOWNTO 0); + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "RIGHT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 5 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "0" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "1" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "5" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: q 0 0 5 0 OUTPUT NODEFVAL q[4..0] +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 5 0 @q 0 0 5 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg5.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg5.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg5.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg5.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg5_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg6.bsf b/FPGA_quartus_GE/Video/lpm_shiftreg6.bsf new file mode 100644 index 0000000..aa0296b --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg6.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 80) + (text "lpm_shiftreg6" (rect 34 1 124 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "shiftin" (rect 0 0 34 14)(font "Arial" (font_size 8))) + (text "shiftin" (rect 20 42 48 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 144 48) + (output) + (text "q[4..0]" (rect 0 0 35 14)(font "Arial" (font_size 8))) + (text "q[4..0]" (rect 95 42 125 55)(font "Arial" (font_size 8))) + (line (pt 144 48)(pt 128 48)(line_width 3)) + ) + (drawing + (text "right shift" (rect 88 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 64)(line_width 1)) + (line (pt 128 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg6.inc b/FPGA_quartus_GE/Video/lpm_shiftreg6.inc new file mode 100644 index 0000000..7767c57 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg6.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_shiftreg6 +( + clock, + shiftin +) + +RETURNS ( + q[4..0] +); diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg6.qip b/FPGA_quartus_GE/Video/lpm_shiftreg6.qip new file mode 100644 index 0000000..adb4909 --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg6.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_SHIFTREG" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_shiftreg6.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg6.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg6.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_shiftreg6.cmp"] diff --git a/FPGA_quartus_GE/Video/lpm_shiftreg6.vhd b/FPGA_quartus_GE/Video/lpm_shiftreg6.vhd new file mode 100644 index 0000000..773243e --- /dev/null +++ b/FPGA_quartus_GE/Video/lpm_shiftreg6.vhd @@ -0,0 +1,125 @@ +-- megafunction wizard: %LPM_SHIFTREG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_shiftreg + +-- ============================================================ +-- File Name: lpm_shiftreg6.vhd +-- Megafunction Name(s): +-- lpm_shiftreg +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_shiftreg6 IS + PORT + ( + clock : IN STD_LOGIC ; + shiftin : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); +END lpm_shiftreg6; + + +ARCHITECTURE SYN OF lpm_shiftreg6 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + + + + COMPONENT lpm_shiftreg + GENERIC ( + lpm_direction : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (4 DOWNTO 0); + shiftin : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(4 DOWNTO 0); + + lpm_shiftreg_component : lpm_shiftreg + GENERIC MAP ( + lpm_direction => "RIGHT", + lpm_type => "LPM_SHIFTREG", + lpm_width => 5 + ) + PORT MAP ( + clock => clock, + shiftin => shiftin, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: LeftShift NUMERIC "0" +-- Retrieval info: PRIVATE: ParallelDataInput NUMERIC "0" +-- Retrieval info: PRIVATE: Q_OUT NUMERIC "1" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: SerialShiftInput NUMERIC "1" +-- Retrieval info: PRIVATE: SerialShiftOutput NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "5" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "RIGHT" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_SHIFTREG" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "5" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: q 0 0 5 0 OUTPUT NODEFVAL q[4..0] +-- Retrieval info: USED_PORT: shiftin 0 0 0 0 INPUT NODEFVAL shiftin +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 5 0 @q 0 0 5 0 +-- Retrieval info: CONNECT: @shiftin 0 0 0 0 shiftin 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg6.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg6.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg6.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg6.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_shiftreg6_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/Video/mux41_0.v b/FPGA_quartus_GE/Video/mux41_0.v new file mode 100644 index 0000000..a1c3219 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_0.v @@ -0,0 +1,30 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_0(S0,S1,D0,INH,D1,Q); +input S0; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_0.vhd b/FPGA_quartus_GE/Video/mux41_0.vhd new file mode 100644 index 0000000..5002edc --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_0.vhd @@ -0,0 +1,52 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_0 IS +PORT +( + S0 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_0; + +ARCHITECTURE bdf_type OF mux41_0 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst40 : mux41 +PORT MAP(S0 => S0, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/mux41_1.v b/FPGA_quartus_GE/Video/mux41_1.v new file mode 100644 index 0000000..042a8ce --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_1.v @@ -0,0 +1,30 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_1(S0,S1,D0,INH,D1,Q); +input S0; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_1.vhd b/FPGA_quartus_GE/Video/mux41_1.vhd new file mode 100644 index 0000000..fe14f8f --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_1.vhd @@ -0,0 +1,52 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_1 IS +PORT +( + S0 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_1; + +ARCHITECTURE bdf_type OF mux41_1 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst41 : mux41 +PORT MAP(S0 => S0, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/mux41_2.v b/FPGA_quartus_GE/Video/mux41_2.v new file mode 100644 index 0000000..63aac29 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_2.v @@ -0,0 +1,31 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_2(S0,D2,S1,D0,INH,D1,Q); +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.D2(D2),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_2.vhd b/FPGA_quartus_GE/Video/mux41_2.vhd new file mode 100644 index 0000000..ce26e48 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_2.vhd @@ -0,0 +1,54 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_2 IS +PORT +( + S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_2; + +ARCHITECTURE bdf_type OF mux41_2 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst42 : mux41 +PORT MAP(S0 => S0, + D2 => D2, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/mux41_3.v b/FPGA_quartus_GE/Video/mux41_3.v new file mode 100644 index 0000000..6676d45 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_3.v @@ -0,0 +1,31 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_3(S0,D2,S1,D0,INH,D1,Q); +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.D2(D2),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_3.vhd b/FPGA_quartus_GE/Video/mux41_3.vhd new file mode 100644 index 0000000..3a218f8 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_3.vhd @@ -0,0 +1,54 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_3 IS +PORT +( + S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_3; + +ARCHITECTURE bdf_type OF mux41_3 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst43 : mux41 +PORT MAP(S0 => S0, + D2 => D2, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/mux41_4.v b/FPGA_quartus_GE/Video/mux41_4.v new file mode 100644 index 0000000..61e48cb --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_4.v @@ -0,0 +1,31 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_4(S0,D2,S1,D0,INH,D1,Q); +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.D2(D2),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_4.vhd b/FPGA_quartus_GE/Video/mux41_4.vhd new file mode 100644 index 0000000..09fa038 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_4.vhd @@ -0,0 +1,54 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_4 IS +PORT +( + S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_4; + +ARCHITECTURE bdf_type OF mux41_4 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst44 : mux41 +PORT MAP(S0 => S0, + D2 => D2, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/mux41_5.v b/FPGA_quartus_GE/Video/mux41_5.v new file mode 100644 index 0000000..d2d0205 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_5.v @@ -0,0 +1,31 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + + +module mux41_5(S0,D2,S1,D0,INH,D1,Q); +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +mux41 lpm_instance(.S0(S0),.D2(D2),.S1(S1),.D0(D0),.INH(INH),.D1(D1),.Q(Q)); + +endmodule diff --git a/FPGA_quartus_GE/Video/mux41_5.vhd b/FPGA_quartus_GE/Video/mux41_5.vhd new file mode 100644 index 0000000..c876641 --- /dev/null +++ b/FPGA_quartus_GE/Video/mux41_5.vhd @@ -0,0 +1,54 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera; +USE altera.maxplus2.all; + +LIBRARY work; + +ENTITY mux41_5 IS +PORT +( + S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC +); +END mux41_5; + +ARCHITECTURE bdf_type OF mux41_5 IS +BEGIN + +-- instantiate macrofunction + +b2v_inst45 : mux41 +PORT MAP(S0 => S0, + D2 => D2, + S1 => S1, + D0 => D0, + INH => INH, + D1 => D1, + Q => Q); + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/Video/video.v b/FPGA_quartus_GE/Video/video.v new file mode 100644 index 0000000..6e447d3 --- /dev/null +++ b/FPGA_quartus_GE/Video/video.v @@ -0,0 +1,1288 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:01 2014" + +module video( + MAIN_CLK, + nFB_CS1, + nFB_CS2, + nFB_CS3, + nFB_WR, + FB_SIZE0, + FB_SIZE1, + nRSTO, + nFB_OE, + FB_ALE, + DDR_SYNC_66M, + CLK33M, + CLK25M, + CLK_VIDEO, + VR_BUSY, + DDRCLK, + FB_ADR, + VR_D, + nBLANK, + nVWE, + nVCAS, + nVRAS, + nVCS, + nPD_VGA, + VCKE, + VSYNC, + HSYNC, + nSYNC, + VIDEO_TA, + PIXEL_CLK, + VIDEO_RECONFIG, + VR_WR, + VR_RD, + BA, + FB_AD, + VA, + VB, + VD, + VDM, + VDQS, + VG, + VR +); + + +input MAIN_CLK; +input nFB_CS1; +input nFB_CS2; +input nFB_CS3; +input nFB_WR; +input FB_SIZE0; +input FB_SIZE1; +input nRSTO; +input nFB_OE; +input FB_ALE; +input DDR_SYNC_66M; +input CLK33M; +input CLK25M; +input CLK_VIDEO; +input VR_BUSY; +input [3:0] DDRCLK; +input [31:0] FB_ADR; +input [8:0] VR_D; +output nBLANK; +output nVWE; +output nVCAS; +output nVRAS; +output nVCS; +output nPD_VGA; +output VCKE; +output VSYNC; +output HSYNC; +output nSYNC; +output VIDEO_TA; +output PIXEL_CLK; +output VIDEO_RECONFIG; +output VR_WR; +output VR_RD; +output [1:0] BA; +inout [31:0] FB_AD; +output [12:0] VA; +output [7:0] VB; +inout [31:0] VD; +output [3:0] VDM; +inout [3:0] VDQS; +output [7:0] VG; +output [7:0] VR; + +wire ACP_CLUT_RD; +wire [3:0] ACP_CLUT_WR; +wire [31:0] BLITTER_ADR; +wire [4:0] BLITTER_DACK; +wire [127:0] BLITTER_DIN; +wire [127:0] BLITTER_DOUT; +wire BLITTER_ON; +wire BLITTER_RUN; +wire BLITTER_SIG; +wire BLITTER_TA; +wire BLITTER_WR; +wire [23:0] CC16; +wire [31:0] CC24; +wire [23:0] CCA; +wire [23:0] CCF; +wire [23:0] CCR; +wire [23:0] CCS; +wire [2:0] CCSEL; +wire CLR_FIFO; +wire [7:0] CLUT_ADR; +wire CLUT_ADR1A; +wire CLUT_ADR2A; +wire CLUT_ADR3A; +wire CLUT_ADR4A; +wire CLUT_ADR5A; +wire CLUT_ADR6A; +wire CLUT_ADR7A; +wire [3:0] CLUT_MUX_ADR; +wire [3:0] CLUT_OFF; +wire COLOR1; +wire COLOR2; +wire COLOR4; +wire COLOR8; +wire [4:0] DDR_FB; +reg DDR_WR; +reg [1:0] DDRWR_D_SEL; +wire DOP_FIFO_CLR; +wire FALCON_CLUT_RDH; +wire FALCON_CLUT_RDL; +wire [3:0] FALCON_CLUT_WR; +wire [127:0] FB_DDR; +wire [3:0] FB_LE; +wire [3:0] FB_VDOE; +wire [127:0] FIFO_D; +wire [8:0] FIFO_MW; +wire FIFO_RDE; +wire FIFO_WRE; +wire INTER_ZEI; +wire nFB_BURST; +wire PIXEL_CLK_ALTERA_SYNTHESIZED; +wire SR_BLITTER_DACK; +wire SR_DDR_FB; +wire SR_DDR_WR; +wire SR_DDRWR_D_SEL; +wire SR_FIFO_WRE; +wire [7:0] SR_VDMP; +wire ST_CLUT_RD; +wire [1:0] ST_CLUT_WR; +wire [3:0] VDM_SEL; +wire [127:0] VDMA; +wire [127:0] VDMB; +wire [127:0] VDMC; +wire [7:0] VDMP; +wire VDOUT_OE; +wire [63:0] VDP_IN; +wire [63:0] VDP_OUT; +wire [31:0] VDR; +wire [127:0] VDVZ; +wire VIDEO_DDR_TA; +wire VIDEO_MOD_TA; +wire [15:0] VIDEO_RAM_CTR; +wire [7:0] ZR_C8; +wire [7:0] ZR_C8B; +wire SYNTHESIZED_WIRE_0; +wire SYNTHESIZED_WIRE_1; +wire SYNTHESIZED_WIRE_2; +wire SYNTHESIZED_WIRE_3; +wire SYNTHESIZED_WIRE_4; +wire SYNTHESIZED_WIRE_5; +wire SYNTHESIZED_WIRE_60; +wire [15:0] SYNTHESIZED_WIRE_7; +reg DFF_inst93; +wire SYNTHESIZED_WIRE_8; +wire SYNTHESIZED_WIRE_9; +wire SYNTHESIZED_WIRE_61; +wire [31:0] SYNTHESIZED_WIRE_11; +wire [7:0] SYNTHESIZED_WIRE_12; +wire [31:0] SYNTHESIZED_WIRE_13; +wire [31:0] SYNTHESIZED_WIRE_14; +wire [31:0] SYNTHESIZED_WIRE_15; +wire SYNTHESIZED_WIRE_16; +wire SYNTHESIZED_WIRE_18; +wire SYNTHESIZED_WIRE_19; +wire SYNTHESIZED_WIRE_20; +wire SYNTHESIZED_WIRE_21; +wire SYNTHESIZED_WIRE_22; +wire SYNTHESIZED_WIRE_23; +wire SYNTHESIZED_WIRE_24; +wire [23:0] SYNTHESIZED_WIRE_25; +wire [23:0] SYNTHESIZED_WIRE_26; +wire [23:0] SYNTHESIZED_WIRE_62; +wire [2:0] SYNTHESIZED_WIRE_29; +wire [7:0] SYNTHESIZED_WIRE_30; +wire [2:0] SYNTHESIZED_WIRE_31; +wire [7:0] SYNTHESIZED_WIRE_32; +wire [7:0] SYNTHESIZED_WIRE_33; +wire [2:0] SYNTHESIZED_WIRE_34; +wire [127:0] SYNTHESIZED_WIRE_63; +wire [127:0] SYNTHESIZED_WIRE_36; +wire SYNTHESIZED_WIRE_38; +wire SYNTHESIZED_WIRE_40; +wire [5:0] SYNTHESIZED_WIRE_41; +wire [23:0] SYNTHESIZED_WIRE_42; +wire [23:0] SYNTHESIZED_WIRE_43; +wire [5:0] SYNTHESIZED_WIRE_44; +wire [5:0] SYNTHESIZED_WIRE_45; +wire SYNTHESIZED_WIRE_46; +wire [6:0] SYNTHESIZED_WIRE_47; +wire [31:0] SYNTHESIZED_WIRE_48; +reg DFF_inst91; +reg SYNTHESIZED_WIRE_64; +wire SYNTHESIZED_WIRE_49; +wire SYNTHESIZED_WIRE_50; +wire SYNTHESIZED_WIRE_51; +wire SYNTHESIZED_WIRE_52; +wire SYNTHESIZED_WIRE_53; +wire SYNTHESIZED_WIRE_54; +wire SYNTHESIZED_WIRE_55; +wire SYNTHESIZED_WIRE_56; +wire SYNTHESIZED_WIRE_57; +wire [23:0] SYNTHESIZED_WIRE_65; + +assign VB[7:0] = SYNTHESIZED_WIRE_65[7:0]; +assign VG[7:0] = SYNTHESIZED_WIRE_65[15:8]; +assign VR[7:0] = SYNTHESIZED_WIRE_65[23:16]; +assign SYNTHESIZED_WIRE_0 = 0; +assign SYNTHESIZED_WIRE_1 = 0; +assign SYNTHESIZED_WIRE_2 = 0; +assign SYNTHESIZED_WIRE_3 = 0; +assign SYNTHESIZED_WIRE_4 = 0; +assign SYNTHESIZED_WIRE_5 = 0; +assign SYNTHESIZED_WIRE_19 = 0; +assign SYNTHESIZED_WIRE_20 = 0; +assign SYNTHESIZED_WIRE_21 = 0; +assign SYNTHESIZED_WIRE_22 = 0; +assign SYNTHESIZED_WIRE_23 = 0; +assign SYNTHESIZED_WIRE_24 = 0; +assign SYNTHESIZED_WIRE_55 = 0; +assign SYNTHESIZED_WIRE_56 = 0; +assign SYNTHESIZED_WIRE_57 = 0; +wire [127:0] GDFX_TEMP_SIGNAL_6; +wire [127:0] GDFX_TEMP_SIGNAL_7; +wire [127:0] GDFX_TEMP_SIGNAL_8; +wire [127:0] GDFX_TEMP_SIGNAL_9; +wire [127:0] GDFX_TEMP_SIGNAL_10; +wire [127:0] GDFX_TEMP_SIGNAL_11; +wire [127:0] GDFX_TEMP_SIGNAL_12; +wire [127:0] GDFX_TEMP_SIGNAL_13; +wire [127:0] GDFX_TEMP_SIGNAL_14; +wire [127:0] GDFX_TEMP_SIGNAL_0; +wire [127:0] GDFX_TEMP_SIGNAL_1; +wire [127:0] GDFX_TEMP_SIGNAL_2; +wire [127:0] GDFX_TEMP_SIGNAL_3; +wire [127:0] GDFX_TEMP_SIGNAL_4; +wire [127:0] GDFX_TEMP_SIGNAL_5; + + +assign GDFX_TEMP_SIGNAL_6 = {VDMB[119:0],VDMA[127:120]}; +assign GDFX_TEMP_SIGNAL_7 = {VDMB[111:0],VDMA[127:112]}; +assign GDFX_TEMP_SIGNAL_8 = {VDMB[103:0],VDMA[127:104]}; +assign GDFX_TEMP_SIGNAL_9 = {VDMB[95:0],VDMA[127:96]}; +assign GDFX_TEMP_SIGNAL_10 = {VDMB[87:0],VDMA[127:88]}; +assign GDFX_TEMP_SIGNAL_11 = {VDMB[79:0],VDMA[127:80]}; +assign GDFX_TEMP_SIGNAL_12 = {VDMB[71:0],VDMA[127:72]}; +assign GDFX_TEMP_SIGNAL_13 = {VDMB[63:0],VDMA[127:64]}; +assign GDFX_TEMP_SIGNAL_14 = {VDMB[55:0],VDMA[127:56]}; +assign GDFX_TEMP_SIGNAL_0 = {VDMB[47:0],VDMA[127:48]}; +assign GDFX_TEMP_SIGNAL_1 = {VDMB[39:0],VDMA[127:40]}; +assign GDFX_TEMP_SIGNAL_2 = {VDMB[31:0],VDMA[127:32]}; +assign GDFX_TEMP_SIGNAL_3 = {VDMB[23:0],VDMA[127:24]}; +assign GDFX_TEMP_SIGNAL_4 = {VDMB[15:0],VDMA[127:16]}; +assign GDFX_TEMP_SIGNAL_5 = {VDMB[7:0],VDMA[127:8]}; + + +altdpram2 b2v_ACP_CLUT_RAM( + .wren_a(ACP_CLUT_WR[3]), + .wren_b(SYNTHESIZED_WIRE_0), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(ZR_C8B), + .data_a(FB_AD[7:0]), + + .q_a(SYNTHESIZED_WIRE_30), + .q_b(CCA[7:0])); + + +altdpram2 b2v_ACP_CLUT_RAM54( + .wren_a(ACP_CLUT_WR[2]), + .wren_b(SYNTHESIZED_WIRE_1), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(ZR_C8B), + .data_a(FB_AD[15:8]), + + .q_a(SYNTHESIZED_WIRE_32), + .q_b(CCA[15:8])); + + +altdpram2 b2v_ACP_CLUT_RAM55( + .wren_a(ACP_CLUT_WR[1]), + .wren_b(SYNTHESIZED_WIRE_2), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(ZR_C8B), + .data_a(FB_AD[23:16]), + + .q_a(SYNTHESIZED_WIRE_33), + .q_b(CCA[23:16])); + + +BLITTER b2v_BLITTER( + .nRSTO(nRSTO), + .MAIN_CLK(MAIN_CLK), + .FB_ALE(FB_ALE), + .nFB_WR(nFB_WR), + .nFB_OE(nFB_OE), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .BLITTER_ON(BLITTER_ON), + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .nFB_CS3(nFB_CS3), + .DDRCLK0(DDRCLK[0]), + .BLITTER_DACK(BLITTER_DACK), + .BLITTER_DIN(BLITTER_DIN), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .VIDEO_RAM_CTR(VIDEO_RAM_CTR), + .BLITTER_RUN(BLITTER_RUN), + .BLITTER_SIG(BLITTER_SIG), + .BLITTER_WR(BLITTER_WR), + .BLITTER_TA(BLITTER_TA), + .BLITTER_ADR(BLITTER_ADR), + .BLITTER_DOUT(BLITTER_DOUT) + ); + + +DDR_CTR b2v_DDR_CTR( + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .nFB_CS3(nFB_CS3), + .nFB_OE(nFB_OE), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .nRSTO(nRSTO), + .MAIN_CLK(MAIN_CLK), + .FB_ALE(FB_ALE), + .nFB_WR(nFB_WR), + .DDR_SYNC_66M(DDR_SYNC_66M), + .BLITTER_SIG(BLITTER_SIG), + .BLITTER_WR(BLITTER_WR), + .DDRCLK0(DDRCLK[0]), + .CLK33M(CLK33M), + .CLR_FIFO(CLR_FIFO), + .BLITTER_ADR(BLITTER_ADR), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .FIFO_MW(FIFO_MW), + .VIDEO_RAM_CTR(VIDEO_RAM_CTR), + .nVWE(nVWE), + .nVRAS(nVRAS), + .nVCS(nVCS), + .VCKE(VCKE), + .nVCAS(nVCAS), + .SR_FIFO_WRE(SR_FIFO_WRE), + .SR_DDR_FB(SR_DDR_FB), + .SR_DDR_WR(SR_DDR_WR), + .SR_DDRWR_D_SEL(SR_DDRWR_D_SEL), + .VIDEO_DDR_TA(VIDEO_DDR_TA), + .SR_BLITTER_DACK(SR_BLITTER_DACK), + .DDRWR_D_SEL1(DDRWR_D_SEL[1]), + .BA(BA), + + .FB_LE(FB_LE), + .FB_VDOE(FB_VDOE), + .SR_VDMP(SR_VDMP), + .VA(VA), + .VDM_SEL(VDM_SEL)); + + +altdpram1 b2v_FALCON_CLUT_BLUE( + .wren_a(FALCON_CLUT_WR[3]), + .wren_b(SYNTHESIZED_WIRE_3), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(CLUT_ADR), + .data_a(FB_AD[23:18]), + + .q_a(SYNTHESIZED_WIRE_45), + .q_b(CCF[7:2])); + + +altdpram1 b2v_FALCON_CLUT_GREEN( + .wren_a(FALCON_CLUT_WR[1]), + .wren_b(SYNTHESIZED_WIRE_4), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(CLUT_ADR), + .data_a(FB_AD[23:18]), + + .q_a(SYNTHESIZED_WIRE_44), + .q_b(CCF[15:10])); + + +altdpram1 b2v_FALCON_CLUT_RED( + .wren_a(FALCON_CLUT_WR[0]), + .wren_b(SYNTHESIZED_WIRE_5), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[9:2]), + .address_b(CLUT_ADR), + .data_a(FB_AD[31:26]), + + .q_a(SYNTHESIZED_WIRE_41), + .q_b(CCF[23:18])); + + +lpm_fifo_dc0 b2v_inst( + .wrreq(FIFO_WRE), + .wrclk(DDRCLK[0]), + .rdreq(SYNTHESIZED_WIRE_60), + .rdclk(PIXEL_CLK_ALTERA_SYNTHESIZED), + .aclr(CLR_FIFO), + .data(VDMC), + + .q(SYNTHESIZED_WIRE_63), + .wrusedw(FIFO_MW)); + + +altddio_bidir0 b2v_inst1( + .oe(VDOUT_OE), + .inclock(DDRCLK[1]), + .outclock(DDRCLK[3]), + .datain_h(VDP_OUT[63:32]), + .datain_l(VDP_OUT[31:0]), + .padio(VD), + .combout(SYNTHESIZED_WIRE_15), + .dataout_h(VDP_IN[31:0]), + .dataout_l(VDP_IN[63:32]) + ); + + +lpm_ff4 b2v_inst10( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(SYNTHESIZED_WIRE_7), + .q({CC16[23:19],CC16[15:10],CC16[7:3]})); + + +lpm_muxVDM b2v_inst100( + .data0x(VDMB), + .data10x(GDFX_TEMP_SIGNAL_0), + .data11x(GDFX_TEMP_SIGNAL_1), + .data12x(GDFX_TEMP_SIGNAL_2), + .data13x(GDFX_TEMP_SIGNAL_3), + .data14x(GDFX_TEMP_SIGNAL_4), + .data15x(GDFX_TEMP_SIGNAL_5), + .data1x(GDFX_TEMP_SIGNAL_6), + .data2x(GDFX_TEMP_SIGNAL_7), + .data3x(GDFX_TEMP_SIGNAL_8), + .data4x(GDFX_TEMP_SIGNAL_9), + .data5x(GDFX_TEMP_SIGNAL_10), + .data6x(GDFX_TEMP_SIGNAL_11), + .data7x(GDFX_TEMP_SIGNAL_12), + .data8x(GDFX_TEMP_SIGNAL_13), + .data9x(GDFX_TEMP_SIGNAL_14), + .sel(VDM_SEL), + .result(VDMC)); + + +lpm_mux3 b2v_inst102( + .data1(DFF_inst93), + .data0(ZR_C8[0]), + .sel(COLOR1), + .result(ZR_C8B[0])); + +assign CLUT_ADR[4] = CLUT_OFF[0] | SYNTHESIZED_WIRE_8; + +assign CLUT_ADR[6] = CLUT_OFF[2] | SYNTHESIZED_WIRE_9; + +assign SYNTHESIZED_WIRE_61 = COLOR8 | COLOR4; + +assign CLUT_ADR[2] = CLUT_ADR2A & SYNTHESIZED_WIRE_61; + +assign SYNTHESIZED_WIRE_16 = COLOR4 | COLOR8 | COLOR2; + + +lpm_bustri_LONG b2v_inst108( + .enabledt(FB_VDOE[0]), + .data(VDR), + .tridata(FB_AD) + ); + + +lpm_bustri_LONG b2v_inst109( + .enabledt(FB_VDOE[1]), + .data(SYNTHESIZED_WIRE_11), + .tridata(FB_AD) + ); + + +lpm_ff5 b2v_inst11( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(SYNTHESIZED_WIRE_12), + .q(ZR_C8)); + + +lpm_bustri_LONG b2v_inst110( + .enabledt(FB_VDOE[2]), + .data(SYNTHESIZED_WIRE_13), + .tridata(FB_AD) + ); + + +lpm_bustri_LONG b2v_inst119( + .enabledt(FB_VDOE[3]), + .data(SYNTHESIZED_WIRE_14), + .tridata(FB_AD) + ); + + +lpm_ff1 b2v_inst12( + .clock(DDRCLK[0]), + .data(VDP_IN[31:0]), + .q(VDVZ[31:0])); + + +lpm_ff0 b2v_inst13( + .clock(DDR_SYNC_66M), + .enable(FB_LE[0]), + .data(FB_AD), + .q(FB_DDR[127:96])); + + +lpm_ff0 b2v_inst14( + .clock(DDR_SYNC_66M), + .enable(FB_LE[1]), + .data(FB_AD), + .q(FB_DDR[95:64])); + + +lpm_ff0 b2v_inst15( + .clock(DDR_SYNC_66M), + .enable(FB_LE[2]), + .data(FB_AD), + .q(FB_DDR[63:32])); + + +lpm_ff0 b2v_inst16( + .clock(DDR_SYNC_66M), + .enable(FB_LE[3]), + .data(FB_AD), + .q(FB_DDR[31:0])); + + +lpm_ff0 b2v_inst17( + .clock(DDRCLK[0]), + .enable(DDR_FB[1]), + .data(VDP_IN[31:0]), + .q(SYNTHESIZED_WIRE_11)); + + +lpm_ff0 b2v_inst18( + .clock(DDRCLK[0]), + .enable(DDR_FB[0]), + .data(VDP_IN[63:32]), + .q(SYNTHESIZED_WIRE_13)); + + +lpm_ff0 b2v_inst19( + .clock(DDRCLK[0]), + .enable(DDR_FB[0]), + .data(VDP_IN[31:0]), + .q(SYNTHESIZED_WIRE_14)); + + +altddio_out0 b2v_inst2( + .outclock(DDRCLK[3]), + .datain_h(VDMP[7:4]), + .datain_l(VDMP[3:0]), + .dataout(VDM)); + + +lpm_ff1 b2v_inst20( + .clock(DDRCLK[0]), + .data(VDVZ[31:0]), + .q(VDVZ[95:64])); + + +lpm_mux0 b2v_inst21( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data0x(FIFO_D[127:96]), + .data1x(FIFO_D[95:64]), + .data2x(FIFO_D[63:32]), + .data3x(FIFO_D[31:0]), + .sel(CLUT_MUX_ADR[1:0]), + .result(SYNTHESIZED_WIRE_48)); + + +lpm_mux5 b2v_inst22( + .data0x(FB_DDR[127:64]), + .data1x(FB_DDR[63:0]), + .data2x(BLITTER_DOUT[127:64]), + .data3x(BLITTER_DOUT[63:0]), + .sel(DDRWR_D_SEL), + .result(VDP_OUT)); + + +lpm_constant2 b2v_inst23( + .result({CC16[18:16],CC16[9:8],CC16[2:0]})); + + +lpm_mux1 b2v_inst24( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data0x(FIFO_D[127:112]), + .data1x(FIFO_D[111:96]), + .data2x(FIFO_D[95:80]), + .data3x(FIFO_D[79:64]), + .data4x(FIFO_D[63:48]), + .data5x(FIFO_D[47:32]), + .data6x(FIFO_D[31:16]), + .data7x(FIFO_D[15:0]), + .sel(CLUT_MUX_ADR[2:0]), + .result(SYNTHESIZED_WIRE_7)); + + +lpm_mux2 b2v_inst25( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data0x(FIFO_D[127:120]), + .data10x(FIFO_D[47:40]), + .data11x(FIFO_D[39:32]), + .data12x(FIFO_D[31:24]), + .data13x(FIFO_D[23:16]), + .data14x(FIFO_D[15:8]), + .data15x(FIFO_D[7:0]), + .data1x(FIFO_D[119:112]), + .data2x(FIFO_D[111:104]), + .data3x(FIFO_D[103:96]), + .data4x(FIFO_D[95:88]), + .data5x(FIFO_D[87:80]), + .data6x(FIFO_D[79:72]), + .data7x(FIFO_D[71:64]), + .data8x(FIFO_D[63:56]), + .data9x(FIFO_D[55:48]), + .sel(CLUT_MUX_ADR), + .result(SYNTHESIZED_WIRE_12)); + + +lpm_shiftreg4 b2v_inst26( + .clock(DDRCLK[0]), + .shiftin(SR_FIFO_WRE), + .shiftout(FIFO_WRE)); + + +lpm_latch0 b2v_inst27( + .gate(DDR_SYNC_66M), + .data(SYNTHESIZED_WIRE_15), + .q(VDR)); + + +assign CLUT_ADR[1] = CLUT_ADR1A & SYNTHESIZED_WIRE_16; + + +lpm_ff1 b2v_inst3( + .clock(DDRCLK[0]), + .data(VDP_IN[63:32]), + .q(VDVZ[63:32])); + +assign CLUT_ADR[3] = SYNTHESIZED_WIRE_61 & CLUT_ADR3A; + +assign CLUT_ADR[5] = CLUT_OFF[1] | SYNTHESIZED_WIRE_18; + +assign SYNTHESIZED_WIRE_8 = CLUT_ADR4A & COLOR8; + +assign SYNTHESIZED_WIRE_18 = CLUT_ADR5A & COLOR8; + +assign SYNTHESIZED_WIRE_9 = CLUT_ADR6A & COLOR8; + +assign SYNTHESIZED_WIRE_46 = CLUT_ADR7A & COLOR8; + + +lpm_ff6 b2v_inst36( + .clock(DDRCLK[0]), + .enable(BLITTER_DACK[0]), + .data(VDVZ), + .q(BLITTER_DIN)); + +assign VDOUT_OE = DDR_WR | SR_DDR_WR; + + +assign VIDEO_TA = BLITTER_TA | VIDEO_MOD_TA | VIDEO_DDR_TA; + + +lpm_ff1 b2v_inst4( + .clock(DDRCLK[0]), + .data(VDVZ[63:32]), + .q(VDVZ[127:96])); + + +mux41_0 b2v_inst40( + .S0(COLOR2), + + .S1(COLOR4), + + .D0(CLUT_ADR6A), + .INH(SYNTHESIZED_WIRE_19), + .D1(CLUT_ADR7A), + .Q(SYNTHESIZED_WIRE_54)); + + +mux41_1 b2v_inst41( + .S0(COLOR2), + + .S1(COLOR4), + + .D0(CLUT_ADR5A), + .INH(SYNTHESIZED_WIRE_20), + .D1(CLUT_ADR6A), + .Q(SYNTHESIZED_WIRE_53)); + + +mux41_2 b2v_inst42( + .S0(COLOR2), + .D2(CLUT_ADR7A), + .S1(COLOR4), + + .D0(CLUT_ADR4A), + .INH(SYNTHESIZED_WIRE_21), + .D1(CLUT_ADR5A), + .Q(SYNTHESIZED_WIRE_52)); + + +mux41_3 b2v_inst43( + .S0(COLOR2), + .D2(CLUT_ADR6A), + .S1(COLOR4), + + .D0(CLUT_ADR3A), + .INH(SYNTHESIZED_WIRE_22), + .D1(CLUT_ADR4A), + .Q(SYNTHESIZED_WIRE_51)); + + +mux41_4 b2v_inst44( + .S0(COLOR2), + .D2(CLUT_ADR5A), + .S1(COLOR4), + + .D0(CLUT_ADR2A), + .INH(SYNTHESIZED_WIRE_23), + .D1(CLUT_ADR3A), + .Q(SYNTHESIZED_WIRE_50)); + + +mux41_5 b2v_inst45( + .S0(COLOR2), + .D2(CLUT_ADR4A), + .S1(COLOR4), + + .D0(CLUT_ADR1A), + .INH(SYNTHESIZED_WIRE_24), + .D1(CLUT_ADR2A), + .Q(SYNTHESIZED_WIRE_49)); + + +lpm_ff3 b2v_inst46( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(SYNTHESIZED_WIRE_25), + .q(SYNTHESIZED_WIRE_43)); + + +lpm_ff3 b2v_inst47( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(CCF), + .q(SYNTHESIZED_WIRE_25)); + + + +lpm_ff3 b2v_inst49( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(SYNTHESIZED_WIRE_26), + .q(SYNTHESIZED_WIRE_42)); + + +altddio_out2 b2v_inst5( + .outclock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .datain_h(SYNTHESIZED_WIRE_62), + .datain_l(SYNTHESIZED_WIRE_62), + .dataout(SYNTHESIZED_WIRE_65)); + + + +lpm_bustri1 b2v_inst51( + .enabledt(ST_CLUT_RD), + .data(SYNTHESIZED_WIRE_29), + .tridata(FB_AD[26:24]) + ); + + +lpm_ff3 b2v_inst52( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(CCS), + .q(SYNTHESIZED_WIRE_26)); + + +lpm_bustri_BYT b2v_inst53( + .enabledt(ACP_CLUT_RD), + .data(SYNTHESIZED_WIRE_30), + .tridata(FB_AD[7:0]) + ); + + +lpm_constant0 b2v_inst54( + .result(CCS[20:16])); + + + +lpm_bustri1 b2v_inst56( + .enabledt(ST_CLUT_RD), + .data(SYNTHESIZED_WIRE_31), + .tridata(FB_AD[22:20]) + ); + + +lpm_bustri_BYT b2v_inst57( + .enabledt(ACP_CLUT_RD), + .data(SYNTHESIZED_WIRE_32), + .tridata(FB_AD[15:8]) + ); + + +lpm_bustri_BYT b2v_inst58( + .enabledt(ACP_CLUT_RD), + .data(SYNTHESIZED_WIRE_33), + .tridata(FB_AD[23:16]) + ); + + +lpm_constant0 b2v_inst59( + .result(CCS[12:8])); + + + + +lpm_bustri1 b2v_inst61( + .enabledt(ST_CLUT_RD), + .data(SYNTHESIZED_WIRE_34), + .tridata(FB_AD[18:16]) + ); + + +lpm_muxDZ b2v_inst62( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .clken(FIFO_RDE), + .sel(INTER_ZEI), + .data0x(SYNTHESIZED_WIRE_63), + .data1x(SYNTHESIZED_WIRE_36), + .result(FIFO_D)); + + +lpm_fifoDZ b2v_inst63( + .wrreq(SYNTHESIZED_WIRE_60), + .rdreq(SYNTHESIZED_WIRE_38), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .aclr(DOP_FIFO_CLR), + .data(SYNTHESIZED_WIRE_63), + .q(SYNTHESIZED_WIRE_36)); + + +lpm_constant0 b2v_inst64( + .result(CCS[4:0])); + +assign SYNTHESIZED_WIRE_60 = FIFO_RDE & SYNTHESIZED_WIRE_40; + + +lpm_bustri3 b2v_inst66( + .enabledt(FALCON_CLUT_RDH), + .data(SYNTHESIZED_WIRE_41), + .tridata(FB_AD[31:26]) + ); + +assign SYNTHESIZED_WIRE_38 = FIFO_RDE & INTER_ZEI; + + +assign SYNTHESIZED_WIRE_40 = ~INTER_ZEI; + + +lpm_mux6 b2v_inst7( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data0x(SYNTHESIZED_WIRE_42), + .data1x(SYNTHESIZED_WIRE_43), + + + .data4x(CCA), + .data5x(CC16), + .data6x(CC24[23:0]), + .data7x(CCR), + .sel(CCSEL), + .result(SYNTHESIZED_WIRE_62)); + + +lpm_bustri3 b2v_inst70( + .enabledt(FALCON_CLUT_RDH), + .data(SYNTHESIZED_WIRE_44), + .tridata(FB_AD[23:18]) + ); + + +lpm_ff6 b2v_inst71( + .clock(DDRCLK[0]), + .enable(FIFO_WRE), + .data(VDVZ), + .q(VDMA)); + + + + +lpm_bustri3 b2v_inst74( + .enabledt(FALCON_CLUT_RDL), + .data(SYNTHESIZED_WIRE_45), + .tridata(FB_AD[23:18]) + ); + + + + +lpm_constant1 b2v_inst77( + .result(CCF[1:0])); + + +assign CLUT_ADR[7] = CLUT_OFF[3] | SYNTHESIZED_WIRE_46; + + + +lpm_constant1 b2v_inst80( + .result(CCF[9:8])); + + +lpm_mux4 b2v_inst81( + .sel(COLOR1), + .data0x(ZR_C8[7:1]), + .data1x(SYNTHESIZED_WIRE_47), + .result(ZR_C8B[7:1])); + + +lpm_constant3 b2v_inst82( + .result(SYNTHESIZED_WIRE_47)); + + +lpm_constant1 b2v_inst83( + .result(CCF[17:16])); + +assign VDQS[3] = DDR_WR ? DDRCLK[0] : 1'bz; + +assign VDQS[2] = DDR_WR ? DDRCLK[0] : 1'bz; + +assign VDQS[1] = DDR_WR ? DDRCLK[0] : 1'bz; + +assign VDQS[0] = DDR_WR ? DDRCLK[0] : 1'bz; + + +always@(posedge DDRCLK[3]) +begin + begin + DDRWR_D_SEL[0] = SR_DDRWR_D_SEL; + end +end + + +lpm_shiftreg6 b2v_inst89( + .clock(DDRCLK[0]), + .shiftin(SR_BLITTER_DACK), + .q(BLITTER_DACK)); + + +lpm_ff1 b2v_inst9( + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .data(SYNTHESIZED_WIRE_48), + .q(CC24)); + + +always@(posedge DDRCLK[3]) +begin + begin + DDR_WR = SR_DDR_WR; + end +end + + +always@(posedge PIXEL_CLK_ALTERA_SYNTHESIZED) +begin + begin + DFF_inst91 = CLUT_ADR[0]; + end +end + + +lpm_shiftreg6 b2v_inst92( + .clock(DDRCLK[0]), + .shiftin(SR_DDR_FB), + .q(DDR_FB)); + + +always@(posedge PIXEL_CLK_ALTERA_SYNTHESIZED) +begin + begin + DFF_inst93 = DFF_inst91; + end +end + + +lpm_ff6 b2v_inst94( + .clock(DDRCLK[0]), + .enable(FIFO_WRE), + .data(VDMA), + .q(VDMB)); + + +always@(posedge PIXEL_CLK_ALTERA_SYNTHESIZED) +begin + begin + SYNTHESIZED_WIRE_64 = FIFO_RDE; + end +end + + + +lpm_ff5 b2v_inst97( + .clock(DDRCLK[2]), + .data(SR_VDMP), + .q(VDMP)); + + +lpm_shiftreg0 b2v_sr0( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_49), + .data(FIFO_D[127:112]), + .shiftout(CLUT_ADR[0])); + + +lpm_shiftreg0 b2v_sr1( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_50), + .data(FIFO_D[111:96]), + .shiftout(CLUT_ADR1A)); + + +lpm_shiftreg0 b2v_sr2( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_51), + .data(FIFO_D[95:80]), + .shiftout(CLUT_ADR2A)); + + +lpm_shiftreg0 b2v_sr3( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_52), + .data(FIFO_D[79:64]), + .shiftout(CLUT_ADR3A)); + + +lpm_shiftreg0 b2v_sr4( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_53), + .data(FIFO_D[63:48]), + .shiftout(CLUT_ADR4A)); + + +lpm_shiftreg0 b2v_sr5( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(SYNTHESIZED_WIRE_54), + .data(FIFO_D[47:32]), + .shiftout(CLUT_ADR5A)); + + +lpm_shiftreg0 b2v_sr6( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(CLUT_ADR7A), + .data(FIFO_D[31:16]), + .shiftout(CLUT_ADR6A)); + + +lpm_shiftreg0 b2v_sr7( + .load(SYNTHESIZED_WIRE_64), + .clock(PIXEL_CLK_ALTERA_SYNTHESIZED), + .shiftin(CLUT_ADR[0]), + .data(FIFO_D[15:0]), + .shiftout(CLUT_ADR7A)); + + +altdpram0 b2v_ST_CLUT_BLUE( + .wren_a(ST_CLUT_WR[1]), + .wren_b(SYNTHESIZED_WIRE_55), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[4:1]), + .address_b(CLUT_ADR[3:0]), + .data_a(FB_AD[18:16]), + + .q_a(SYNTHESIZED_WIRE_34), + .q_b(CCS[7:5])); + + +altdpram0 b2v_ST_CLUT_GREEN( + .wren_a(ST_CLUT_WR[1]), + .wren_b(SYNTHESIZED_WIRE_56), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[4:1]), + .address_b(CLUT_ADR[3:0]), + .data_a(FB_AD[22:20]), + + .q_a(SYNTHESIZED_WIRE_31), + .q_b(CCS[15:13])); + + +altdpram0 b2v_ST_CLUT_RED( + .wren_a(ST_CLUT_WR[0]), + .wren_b(SYNTHESIZED_WIRE_57), + .clock_a(MAIN_CLK), + .clock_b(PIXEL_CLK_ALTERA_SYNTHESIZED), + .address_a(FB_ADR[4:1]), + .address_b(CLUT_ADR[3:0]), + .data_a(FB_AD[26:24]), + + .q_a(SYNTHESIZED_WIRE_29), + .q_b(CCS[23:21])); + + +VIDEO_MOD_MUX_CLUTCTR b2v_VIDEO_MOD_MUX_CLUTCTR( + .nRSTO(nRSTO), + .MAIN_CLK(MAIN_CLK), + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .nFB_CS3(nFB_CS3), + .nFB_WR(nFB_WR), + .nFB_OE(nFB_OE), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .nFB_BURST(nFB_BURST), + .CLK33M(CLK33M), + .CLK25M(CLK25M), + .BLITTER_RUN(BLITTER_RUN), + .CLK_VIDEO(CLK_VIDEO), + .VR_BUSY(VR_BUSY), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .VR_D(VR_D), + .COLOR8(COLOR8), + .ACP_CLUT_RD(ACP_CLUT_RD), + .COLOR1(COLOR1), + .FALCON_CLUT_RDH(FALCON_CLUT_RDH), + .FALCON_CLUT_RDL(FALCON_CLUT_RDL), + .ST_CLUT_RD(ST_CLUT_RD), + .HSYNC(HSYNC), + .VSYNC(VSYNC), + .nBLANK(nBLANK), + .nSYNC(nSYNC), + .nPD_VGA(nPD_VGA), + .FIFO_RDE(FIFO_RDE), + .COLOR2(COLOR2), + .COLOR4(COLOR4), + .PIXEL_CLK(PIXEL_CLK_ALTERA_SYNTHESIZED), + .BLITTER_ON(BLITTER_ON), + .VIDEO_MOD_TA(VIDEO_MOD_TA), + .INTER_ZEI(INTER_ZEI), + .DOP_FIFO_CLR(DOP_FIFO_CLR), + .VIDEO_RECONFIG(VIDEO_RECONFIG), + .VR_WR(VR_WR), + .VR_RD(VR_RD), + .CLR_FIFO(CLR_FIFO), + .ACP_CLUT_WR(ACP_CLUT_WR), + .CCR(CCR), + .CCSEL(CCSEL), + .CLUT_MUX_ADR(CLUT_MUX_ADR), + .CLUT_OFF(CLUT_OFF), + .FALCON_CLUT_WR(FALCON_CLUT_WR), + + .ST_CLUT_WR(ST_CLUT_WR), + .VIDEO_RAM_CTR(VIDEO_RAM_CTR)); + +assign PIXEL_CLK = PIXEL_CLK_ALTERA_SYNTHESIZED; + +endmodule + +module mux41_0(S0,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule + +module mux41_1(S0,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule + +module mux41_2(S0,D2,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule + +module mux41_3(S0,D2,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule + +module mux41_4(S0,D2,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule + +module mux41_5(S0,D2,S1,D0,INH,D1,Q); +/* synthesis black_box */ + +input S0; +input D2; +input S1; +input D0; +input INH; +input D1; +output Q; + +endmodule diff --git a/FPGA_quartus_GE/Video/video.vhd b/FPGA_quartus_GE/Video/video.vhd new file mode 100644 index 0000000..7faebdc --- /dev/null +++ b/FPGA_quartus_GE/Video/video.vhd @@ -0,0 +1,1755 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:19:30 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY work; + +ENTITY video IS + PORT + ( + MAIN_CLK : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + DDR_SYNC_66M : IN STD_LOGIC; + CLK33M : IN STD_LOGIC; + CLK25M : IN STD_LOGIC; + CLK_VIDEO : IN STD_LOGIC; + VR_BUSY : IN STD_LOGIC; + DDRCLK : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + VD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + VDQS : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0); + VR_D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + nBLANK : OUT STD_LOGIC; + nVWE : OUT STD_LOGIC; + nVCAS : OUT STD_LOGIC; + nVRAS : OUT STD_LOGIC; + nVCS : OUT STD_LOGIC; + nPD_VGA : OUT STD_LOGIC; + VCKE : OUT STD_LOGIC; + VSYNC : OUT STD_LOGIC; + HSYNC : OUT STD_LOGIC; + nSYNC : OUT STD_LOGIC; + VIDEO_TA : OUT STD_LOGIC; + PIXEL_CLK : OUT STD_LOGIC; + VIDEO_RECONFIG : OUT STD_LOGIC; + VR_WR : OUT STD_LOGIC; + VR_RD : OUT STD_LOGIC; + BA : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0); + VB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VDM : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + VG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VR : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END video; + +ARCHITECTURE bdf_type OF video IS + +ATTRIBUTE black_box : BOOLEAN; +ATTRIBUTE noopt : BOOLEAN; + +COMPONENT mux41_0 + PORT(S0 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_0: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_0: COMPONENT IS true; + +COMPONENT mux41_1 + PORT(S0 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_1: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_1: COMPONENT IS true; + +COMPONENT mux41_2 + PORT(S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_2: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_2: COMPONENT IS true; + +COMPONENT mux41_3 + PORT(S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_3: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_3: COMPONENT IS true; + +COMPONENT mux41_4 + PORT(S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_4: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_4: COMPONENT IS true; + +COMPONENT mux41_5 + PORT(S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + D0 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D1 : IN STD_LOGIC; + Q : OUT STD_LOGIC); +END COMPONENT; +ATTRIBUTE black_box OF mux41_5: COMPONENT IS true; +ATTRIBUTE noopt OF mux41_5: COMPONENT IS true; + +COMPONENT altdpram2 + PORT(wren_a : IN STD_LOGIC; + wren_b : IN STD_LOGIC; + clock_a : IN STD_LOGIC; + clock_b : IN STD_LOGIC; + address_a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT blitter + PORT(nRSTO : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + BLITTER_ON : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + DDRCLK0 : IN STD_LOGIC; + BLITTER_DACK : IN STD_LOGIC_VECTOR(4 DOWNTO 0); + BLITTER_DIN : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + VIDEO_RAM_CTR : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + BLITTER_RUN : OUT STD_LOGIC; + BLITTER_SIG : OUT STD_LOGIC; + BLITTER_WR : OUT STD_LOGIC; + BLITTER_TA : OUT STD_LOGIC; + BLITTER_ADR : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + BLITTER_DOUT : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT ddr_ctr + PORT(nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + DDR_SYNC_66M : IN STD_LOGIC; + BLITTER_SIG : IN STD_LOGIC; + BLITTER_WR : IN STD_LOGIC; + DDRCLK0 : IN STD_LOGIC; + CLK33M : IN STD_LOGIC; + CLR_FIFO : IN STD_LOGIC; + BLITTER_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + FIFO_MW : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + VIDEO_RAM_CTR : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + nVWE : OUT STD_LOGIC; + nVRAS : OUT STD_LOGIC; + nVCS : OUT STD_LOGIC; + VCKE : OUT STD_LOGIC; + nVCAS : OUT STD_LOGIC; + SR_FIFO_WRE : OUT STD_LOGIC; + SR_DDR_FB : OUT STD_LOGIC; + SR_DDR_WR : OUT STD_LOGIC; + SR_DDRWR_D_SEL : OUT STD_LOGIC; + VIDEO_DDR_TA : OUT STD_LOGIC; + SR_BLITTER_DACK : OUT STD_LOGIC; + DDRWR_D_SEL1 : OUT STD_LOGIC; + BA : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + FB_LE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + FB_VDOE : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + SR_VDMP : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0); + VDM_SEL : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altdpram1 + PORT(wren_a : IN STD_LOGIC; + wren_b : IN STD_LOGIC; + clock_a : IN STD_LOGIC; + clock_b : IN STD_LOGIC; + address_a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR(5 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR(5 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR(5 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_fifo_dc0 + PORT(wrreq : IN STD_LOGIC; + wrclk : IN STD_LOGIC; + rdreq : IN STD_LOGIC; + rdclk : IN STD_LOGIC; + aclr : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + rdempty : OUT STD_LOGIC; + q : OUT STD_LOGIC_VECTOR(127 DOWNTO 0); + wrusedw : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altddio_bidir0 + PORT(oe : IN STD_LOGIC; + inclock : IN STD_LOGIC; + outclock : IN STD_LOGIC; + datain_h : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + padio : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + combout : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + dataout_h : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + dataout_l : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff4 + PORT(clock : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_muxvdm + PORT(data0x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data10x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data11x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data12x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data13x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data14x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data15x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data8x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data9x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux3 + PORT(data1 : IN STD_LOGIC; + data0 : IN STD_LOGIC; + sel : IN STD_LOGIC; + result : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT lpm_bustri_long + PORT(enabledt : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff5 + PORT(clock : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff1 + PORT(clock : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff0 + PORT(clock : IN STD_LOGIC; + enable : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altddio_out0 + PORT(outclock : IN STD_LOGIC; + datain_h : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + dataout : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux0 + PORT(clock : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux5 + PORT(data0x : IN STD_LOGIC_VECTOR(63 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(63 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(63 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(63 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(1 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(63 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_constant2 + PORT( result : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux1 + PORT(clock : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux2 + PORT(clock : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data10x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data11x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data12x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data13x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data14x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data15x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data8x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + data9x : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_shiftreg4 + PORT(clock : IN STD_LOGIC; + shiftin : IN STD_LOGIC; + shiftout : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT lpm_latch0 + PORT(gate : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff6 + PORT(clock : IN STD_LOGIC; + enable : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_ff3 + PORT(clock : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(23 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altddio_out2 + PORT(outclock : IN STD_LOGIC; + datain_h : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + dataout : OUT STD_LOGIC_VECTOR(23 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_bustri1 + PORT(enabledt : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR(2 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_bustri_byt + PORT(enabledt : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(7 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_constant0 + PORT( result : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_muxdz + PORT(clock : IN STD_LOGIC; + clken : IN STD_LOGIC; + sel : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_fifodz + PORT(wrreq : IN STD_LOGIC; + rdreq : IN STD_LOGIC; + clock : IN STD_LOGIC; + aclr : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(127 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(127 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_bustri3 + PORT(enabledt : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(5 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR(5 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux6 + PORT(clock : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data2x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data3x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data4x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data5x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data6x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + data7x : IN STD_LOGIC_VECTOR(23 DOWNTO 0); + sel : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(23 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_constant1 + PORT( result : OUT STD_LOGIC_VECTOR(1 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_mux4 + PORT(sel : IN STD_LOGIC; + data0x : IN STD_LOGIC_VECTOR(6 DOWNTO 0); + data1x : IN STD_LOGIC_VECTOR(6 DOWNTO 0); + result : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_constant3 + PORT( result : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_shiftreg6 + PORT(clock : IN STD_LOGIC; + shiftin : IN STD_LOGIC; + q : OUT STD_LOGIC_VECTOR(4 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT lpm_shiftreg0 + PORT(load : IN STD_LOGIC; + clock : IN STD_LOGIC; + shiftin : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(15 DOWNTO 0); + shiftout : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT altdpram0 + PORT(wren_a : IN STD_LOGIC; + wren_b : IN STD_LOGIC; + clock_a : IN STD_LOGIC; + clock_b : IN STD_LOGIC; + address_a : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + address_b : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + data_a : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + data_b : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + q_a : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); + q_b : OUT STD_LOGIC_VECTOR(2 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT video_mod_mux_clutctr + PORT(nRSTO : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + CLK33M : IN STD_LOGIC; + CLK25M : IN STD_LOGIC; + BLITTER_RUN : IN STD_LOGIC; + CLK_VIDEO : IN STD_LOGIC; + VR_BUSY : IN STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + VR_D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + COLOR8 : OUT STD_LOGIC; + ACP_CLUT_RD : OUT STD_LOGIC; + COLOR1 : OUT STD_LOGIC; + FALCON_CLUT_RDH : OUT STD_LOGIC; + FALCON_CLUT_RDL : OUT STD_LOGIC; + ST_CLUT_RD : OUT STD_LOGIC; + HSYNC : OUT STD_LOGIC; + VSYNC : OUT STD_LOGIC; + nBLANK : OUT STD_LOGIC; + nSYNC : OUT STD_LOGIC; + nPD_VGA : OUT STD_LOGIC; + FIFO_RDE : OUT STD_LOGIC; + COLOR2 : OUT STD_LOGIC; + COLOR4 : OUT STD_LOGIC; + PIXEL_CLK : OUT STD_LOGIC; + BLITTER_ON : OUT STD_LOGIC; + VIDEO_MOD_TA : OUT STD_LOGIC; + INTER_ZEI : OUT STD_LOGIC; + DOP_FIFO_CLR : OUT STD_LOGIC; + VIDEO_RECONFIG : OUT STD_LOGIC; + VR_WR : OUT STD_LOGIC; + VR_RD : OUT STD_LOGIC; + CLR_FIFO : OUT STD_LOGIC; + ACP_CLUT_WR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + CCR : OUT STD_LOGIC_VECTOR(23 DOWNTO 0); + CCSEL : OUT STD_LOGIC_VECTOR(2 DOWNTO 0); + CLUT_MUX_ADR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + CLUT_OFF : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + FALCON_CLUT_WR : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + ST_CLUT_WR : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + VIDEO_RAM_CTR : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) + ); +END COMPONENT; + +SIGNAL ACP_CLUT_RD : STD_LOGIC; +SIGNAL ACP_CLUT_WR : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL BLITTER_ADR : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL BLITTER_DACK : STD_LOGIC_VECTOR(4 DOWNTO 0); +SIGNAL BLITTER_DIN : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL BLITTER_DOUT : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL BLITTER_ON : STD_LOGIC; +SIGNAL BLITTER_RUN : STD_LOGIC; +SIGNAL BLITTER_SIG : STD_LOGIC; +SIGNAL BLITTER_TA : STD_LOGIC; +SIGNAL BLITTER_WR : STD_LOGIC; +SIGNAL CC16 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL CC24 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL CCA : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL CCF : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL CCR : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL CCS : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL CCSEL : STD_LOGIC_VECTOR(2 DOWNTO 0); +SIGNAL CLR_FIFO : STD_LOGIC; +SIGNAL CLUT_ADR : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL CLUT_ADR1A : STD_LOGIC; +SIGNAL CLUT_ADR2A : STD_LOGIC; +SIGNAL CLUT_ADR3A : STD_LOGIC; +SIGNAL CLUT_ADR4A : STD_LOGIC; +SIGNAL CLUT_ADR5A : STD_LOGIC; +SIGNAL CLUT_ADR6A : STD_LOGIC; +SIGNAL CLUT_ADR7A : STD_LOGIC; +SIGNAL CLUT_MUX_ADR : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL CLUT_OFF : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL COLOR1 : STD_LOGIC; +SIGNAL COLOR2 : STD_LOGIC; +SIGNAL COLOR4 : STD_LOGIC; +SIGNAL COLOR8 : STD_LOGIC; +SIGNAL DDR_FB : STD_LOGIC_VECTOR(4 DOWNTO 0); +SIGNAL DDR_WR : STD_LOGIC; +SIGNAL DDRWR_D_SEL : STD_LOGIC_VECTOR(1 DOWNTO 0); +SIGNAL DOP_FIFO_CLR : STD_LOGIC; +SIGNAL FALCON_CLUT_RDH : STD_LOGIC; +SIGNAL FALCON_CLUT_RDL : STD_LOGIC; +SIGNAL FALCON_CLUT_WR : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL FB_DDR : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL FB_LE : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL FB_VDOE : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL FIFO_D : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL FIFO_MW : STD_LOGIC_VECTOR(8 DOWNTO 0); +SIGNAL FIFO_RDE : STD_LOGIC; +SIGNAL FIFO_WRE : STD_LOGIC; +SIGNAL INTER_ZEI : STD_LOGIC; +SIGNAL nFB_BURST : STD_LOGIC; +SIGNAL PIXEL_CLK_ALTERA_SYNTHESIZED : STD_LOGIC; +SIGNAL SR_BLITTER_DACK : STD_LOGIC; +SIGNAL SR_DDR_FB : STD_LOGIC; +SIGNAL SR_DDR_WR : STD_LOGIC; +SIGNAL SR_DDRWR_D_SEL : STD_LOGIC; +SIGNAL SR_FIFO_WRE : STD_LOGIC; +SIGNAL SR_VDMP : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL ST_CLUT_RD : STD_LOGIC; +SIGNAL ST_CLUT_WR : STD_LOGIC_VECTOR(1 DOWNTO 0); +SIGNAL VDM_SEL : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL VDMA : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL VDMB : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL VDMC : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL VDMP : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL VDOUT_OE : STD_LOGIC; +SIGNAL VDP_IN : STD_LOGIC_VECTOR(63 DOWNTO 0); +SIGNAL VDP_OUT : STD_LOGIC_VECTOR(63 DOWNTO 0); +SIGNAL VDR : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL VDVZ : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL VIDEO_DDR_TA : STD_LOGIC; +SIGNAL VIDEO_MOD_TA : STD_LOGIC; +SIGNAL VIDEO_RAM_CTR : STD_LOGIC_VECTOR(15 DOWNTO 0); +SIGNAL ZR_C8 : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL ZR_C8B : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_3 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_4 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_5 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_60 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_7 : STD_LOGIC_VECTOR(15 DOWNTO 0); +SIGNAL DFF_inst93 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_8 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_9 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_61 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_11 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_12 : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_13 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_14 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_15 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_16 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_18 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_19 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_20 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_21 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_22 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_23 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_24 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_25 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_26 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_62 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_29 : STD_LOGIC_VECTOR(2 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_30 : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_31 : STD_LOGIC_VECTOR(2 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_32 : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_33 : STD_LOGIC_VECTOR(7 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_34 : STD_LOGIC_VECTOR(2 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_63 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_36 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_38 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_40 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_41 : STD_LOGIC_VECTOR(5 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_42 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_43 : STD_LOGIC_VECTOR(23 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_44 : STD_LOGIC_VECTOR(5 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_45 : STD_LOGIC_VECTOR(5 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_46 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_47 : STD_LOGIC_VECTOR(6 DOWNTO 0); +SIGNAL SYNTHESIZED_WIRE_48 : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL DFF_inst91 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_64 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_49 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_50 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_51 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_52 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_53 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_54 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_55 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_56 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_57 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_65 : STD_LOGIC_VECTOR(23 DOWNTO 0); + +SIGNAL GDFX_TEMP_SIGNAL_7 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_8 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_9 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_10 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_11 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_12 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_13 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_14 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_15 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_1 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_2 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_3 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_4 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_5 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_6 : STD_LOGIC_VECTOR(127 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_0 : STD_LOGIC_VECTOR(15 DOWNTO 0); +SIGNAL GDFX_TEMP_SIGNAL_16 : STD_LOGIC_VECTOR(7 DOWNTO 0); + +BEGIN +VB(7 DOWNTO 0) <= SYNTHESIZED_WIRE_65(7 DOWNTO 0); +VG(7 DOWNTO 0) <= SYNTHESIZED_WIRE_65(15 DOWNTO 8); +VR(7 DOWNTO 0) <= SYNTHESIZED_WIRE_65(23 DOWNTO 16); +SYNTHESIZED_WIRE_0 <= '0'; +SYNTHESIZED_WIRE_1 <= '0'; +SYNTHESIZED_WIRE_2 <= '0'; +SYNTHESIZED_WIRE_3 <= '0'; +SYNTHESIZED_WIRE_4 <= '0'; +SYNTHESIZED_WIRE_5 <= '0'; +SYNTHESIZED_WIRE_19 <= '0'; +SYNTHESIZED_WIRE_20 <= '0'; +SYNTHESIZED_WIRE_21 <= '0'; +SYNTHESIZED_WIRE_22 <= '0'; +SYNTHESIZED_WIRE_23 <= '0'; +SYNTHESIZED_WIRE_24 <= '0'; +SYNTHESIZED_WIRE_55 <= '0'; +SYNTHESIZED_WIRE_56 <= '0'; +SYNTHESIZED_WIRE_57 <= '0'; + +GDFX_TEMP_SIGNAL_7 <= (VDMB(119 DOWNTO 0) & VDMA(127 DOWNTO 120)); +GDFX_TEMP_SIGNAL_8 <= (VDMB(111 DOWNTO 0) & VDMA(127 DOWNTO 112)); +GDFX_TEMP_SIGNAL_9 <= (VDMB(103 DOWNTO 0) & VDMA(127 DOWNTO 104)); +GDFX_TEMP_SIGNAL_10 <= (VDMB(95 DOWNTO 0) & VDMA(127 DOWNTO 96)); +GDFX_TEMP_SIGNAL_11 <= (VDMB(87 DOWNTO 0) & VDMA(127 DOWNTO 88)); +GDFX_TEMP_SIGNAL_12 <= (VDMB(79 DOWNTO 0) & VDMA(127 DOWNTO 80)); +GDFX_TEMP_SIGNAL_13 <= (VDMB(71 DOWNTO 0) & VDMA(127 DOWNTO 72)); +GDFX_TEMP_SIGNAL_14 <= (VDMB(63 DOWNTO 0) & VDMA(127 DOWNTO 64)); +GDFX_TEMP_SIGNAL_15 <= (VDMB(55 DOWNTO 0) & VDMA(127 DOWNTO 56)); +GDFX_TEMP_SIGNAL_1 <= (VDMB(47 DOWNTO 0) & VDMA(127 DOWNTO 48)); +GDFX_TEMP_SIGNAL_2 <= (VDMB(39 DOWNTO 0) & VDMA(127 DOWNTO 40)); +GDFX_TEMP_SIGNAL_3 <= (VDMB(31 DOWNTO 0) & VDMA(127 DOWNTO 32)); +GDFX_TEMP_SIGNAL_4 <= (VDMB(23 DOWNTO 0) & VDMA(127 DOWNTO 24)); +GDFX_TEMP_SIGNAL_5 <= (VDMB(15 DOWNTO 0) & VDMA(127 DOWNTO 16)); +GDFX_TEMP_SIGNAL_6 <= (VDMB(7 DOWNTO 0) & VDMA(127 DOWNTO 8)); +CC16(23) <= GDFX_TEMP_SIGNAL_0(15); +CC16(22) <= GDFX_TEMP_SIGNAL_0(14); +CC16(21) <= GDFX_TEMP_SIGNAL_0(13); +CC16(20) <= GDFX_TEMP_SIGNAL_0(12); +CC16(19) <= GDFX_TEMP_SIGNAL_0(11); +CC16(15) <= GDFX_TEMP_SIGNAL_0(10); +CC16(14) <= GDFX_TEMP_SIGNAL_0(9); +CC16(13) <= GDFX_TEMP_SIGNAL_0(8); +CC16(12) <= GDFX_TEMP_SIGNAL_0(7); +CC16(11) <= GDFX_TEMP_SIGNAL_0(6); +CC16(10) <= GDFX_TEMP_SIGNAL_0(5); +CC16(7) <= GDFX_TEMP_SIGNAL_0(4); +CC16(6) <= GDFX_TEMP_SIGNAL_0(3); +CC16(5) <= GDFX_TEMP_SIGNAL_0(2); +CC16(4) <= GDFX_TEMP_SIGNAL_0(1); +CC16(3) <= GDFX_TEMP_SIGNAL_0(0); + +CC16(18) <= GDFX_TEMP_SIGNAL_16(7); +CC16(17) <= GDFX_TEMP_SIGNAL_16(6); +CC16(16) <= GDFX_TEMP_SIGNAL_16(5); +CC16(9) <= GDFX_TEMP_SIGNAL_16(4); +CC16(8) <= GDFX_TEMP_SIGNAL_16(3); +CC16(2) <= GDFX_TEMP_SIGNAL_16(2); +CC16(1) <= GDFX_TEMP_SIGNAL_16(1); +CC16(0) <= GDFX_TEMP_SIGNAL_16(0); + + + +b2v_ACP_CLUT_RAM : altdpram2 +PORT MAP(wren_a => ACP_CLUT_WR(3), + wren_b => SYNTHESIZED_WIRE_0, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => ZR_C8B, + data_a => FB_AD(7 DOWNTO 0), + q_a => SYNTHESIZED_WIRE_30, + q_b => CCA(7 DOWNTO 0)); + + +b2v_ACP_CLUT_RAM54 : altdpram2 +PORT MAP(wren_a => ACP_CLUT_WR(2), + wren_b => SYNTHESIZED_WIRE_1, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => ZR_C8B, + data_a => FB_AD(15 DOWNTO 8), + q_a => SYNTHESIZED_WIRE_32, + q_b => CCA(15 DOWNTO 8)); + + +b2v_ACP_CLUT_RAM55 : altdpram2 +PORT MAP(wren_a => ACP_CLUT_WR(1), + wren_b => SYNTHESIZED_WIRE_2, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => ZR_C8B, + data_a => FB_AD(23 DOWNTO 16), + q_a => SYNTHESIZED_WIRE_33, + q_b => CCA(23 DOWNTO 16)); + + +b2v_BLITTER : blitter +PORT MAP(nRSTO => nRSTO, + MAIN_CLK => MAIN_CLK, + FB_ALE => FB_ALE, + nFB_WR => nFB_WR, + nFB_OE => nFB_OE, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + BLITTER_ON => BLITTER_ON, + nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + nFB_CS3 => nFB_CS3, + DDRCLK0 => DDRCLK(0), + BLITTER_DACK => BLITTER_DACK, + BLITTER_DIN => BLITTER_DIN, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + VIDEO_RAM_CTR => VIDEO_RAM_CTR, + BLITTER_RUN => BLITTER_RUN, + BLITTER_SIG => BLITTER_SIG, + BLITTER_WR => BLITTER_WR, + BLITTER_TA => BLITTER_TA, + BLITTER_ADR => BLITTER_ADR, + BLITTER_DOUT => BLITTER_DOUT); + + +b2v_DDR_CTR : ddr_ctr +PORT MAP(nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + nFB_CS3 => nFB_CS3, + nFB_OE => nFB_OE, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + nRSTO => nRSTO, + MAIN_CLK => MAIN_CLK, + FB_ALE => FB_ALE, + nFB_WR => nFB_WR, + DDR_SYNC_66M => DDR_SYNC_66M, + BLITTER_SIG => BLITTER_SIG, + BLITTER_WR => BLITTER_WR, + DDRCLK0 => DDRCLK(0), + CLK33M => CLK33M, + CLR_FIFO => CLR_FIFO, + BLITTER_ADR => BLITTER_ADR, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + FIFO_MW => FIFO_MW, + VIDEO_RAM_CTR => VIDEO_RAM_CTR, + nVWE => nVWE, + nVRAS => nVRAS, + nVCS => nVCS, + VCKE => VCKE, + nVCAS => nVCAS, + SR_FIFO_WRE => SR_FIFO_WRE, + SR_DDR_FB => SR_DDR_FB, + SR_DDR_WR => SR_DDR_WR, + SR_DDRWR_D_SEL => SR_DDRWR_D_SEL, + VIDEO_DDR_TA => VIDEO_DDR_TA, + SR_BLITTER_DACK => SR_BLITTER_DACK, + DDRWR_D_SEL1 => DDRWR_D_SEL(1), + BA => BA, + FB_LE => FB_LE, + FB_VDOE => FB_VDOE, + SR_VDMP => SR_VDMP, + VA => VA, + VDM_SEL => VDM_SEL); + + +b2v_FALCON_CLUT_BLUE : altdpram1 +PORT MAP(wren_a => FALCON_CLUT_WR(3), + wren_b => SYNTHESIZED_WIRE_3, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => CLUT_ADR, + data_a => FB_AD(23 DOWNTO 18), + q_a => SYNTHESIZED_WIRE_45, + q_b => CCF(7 DOWNTO 2)); + + +b2v_FALCON_CLUT_GREEN : altdpram1 +PORT MAP(wren_a => FALCON_CLUT_WR(1), + wren_b => SYNTHESIZED_WIRE_4, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => CLUT_ADR, + data_a => FB_AD(23 DOWNTO 18), + q_a => SYNTHESIZED_WIRE_44, + q_b => CCF(15 DOWNTO 10)); + + +b2v_FALCON_CLUT_RED : altdpram1 +PORT MAP(wren_a => FALCON_CLUT_WR(0), + wren_b => SYNTHESIZED_WIRE_5, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(9 DOWNTO 2), + address_b => CLUT_ADR, + data_a => FB_AD(31 DOWNTO 26), + q_a => SYNTHESIZED_WIRE_41, + q_b => CCF(23 DOWNTO 18)); + + +b2v_inst : lpm_fifo_dc0 +PORT MAP(wrreq => FIFO_WRE, + wrclk => DDRCLK(0), + rdreq => SYNTHESIZED_WIRE_60, + rdclk => PIXEL_CLK_ALTERA_SYNTHESIZED, + aclr => CLR_FIFO, + data => VDMC, + q => SYNTHESIZED_WIRE_63, + wrusedw => FIFO_MW); + + +b2v_inst1 : altddio_bidir0 +PORT MAP(oe => VDOUT_OE, + inclock => DDRCLK(1), + outclock => DDRCLK(3), + datain_h => VDP_OUT(63 DOWNTO 32), + datain_l => VDP_OUT(31 DOWNTO 0), + padio => VD, + combout => SYNTHESIZED_WIRE_15, + dataout_h => VDP_IN(31 DOWNTO 0), + dataout_l => VDP_IN(63 DOWNTO 32)); + + +b2v_inst10 : lpm_ff4 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => SYNTHESIZED_WIRE_7, + q => GDFX_TEMP_SIGNAL_0); + + +b2v_inst100 : lpm_muxvdm +PORT MAP(data0x => VDMB, + data10x => GDFX_TEMP_SIGNAL_1, + data11x => GDFX_TEMP_SIGNAL_2, + data12x => GDFX_TEMP_SIGNAL_3, + data13x => GDFX_TEMP_SIGNAL_4, + data14x => GDFX_TEMP_SIGNAL_5, + data15x => GDFX_TEMP_SIGNAL_6, + data1x => GDFX_TEMP_SIGNAL_7, + data2x => GDFX_TEMP_SIGNAL_8, + data3x => GDFX_TEMP_SIGNAL_9, + data4x => GDFX_TEMP_SIGNAL_10, + data5x => GDFX_TEMP_SIGNAL_11, + data6x => GDFX_TEMP_SIGNAL_12, + data7x => GDFX_TEMP_SIGNAL_13, + data8x => GDFX_TEMP_SIGNAL_14, + data9x => GDFX_TEMP_SIGNAL_15, + sel => VDM_SEL, + result => VDMC); + + +b2v_inst102 : lpm_mux3 +PORT MAP(data1 => DFF_inst93, + data0 => ZR_C8(0), + sel => COLOR1, + result => ZR_C8B(0)); + + +CLUT_ADR(4) <= CLUT_OFF(0) OR SYNTHESIZED_WIRE_8; + + +CLUT_ADR(6) <= CLUT_OFF(2) OR SYNTHESIZED_WIRE_9; + + +SYNTHESIZED_WIRE_61 <= COLOR8 OR COLOR4; + + +CLUT_ADR(2) <= CLUT_ADR2A AND SYNTHESIZED_WIRE_61; + + +SYNTHESIZED_WIRE_16 <= COLOR4 OR COLOR8 OR COLOR2; + + +b2v_inst108 : lpm_bustri_long +PORT MAP(enabledt => FB_VDOE(0), + data => VDR, + tridata => FB_AD); + + +b2v_inst109 : lpm_bustri_long +PORT MAP(enabledt => FB_VDOE(1), + data => SYNTHESIZED_WIRE_11, + tridata => FB_AD); + + +b2v_inst11 : lpm_ff5 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => SYNTHESIZED_WIRE_12, + q => ZR_C8); + + +b2v_inst110 : lpm_bustri_long +PORT MAP(enabledt => FB_VDOE(2), + data => SYNTHESIZED_WIRE_13, + tridata => FB_AD); + + +b2v_inst119 : lpm_bustri_long +PORT MAP(enabledt => FB_VDOE(3), + data => SYNTHESIZED_WIRE_14, + tridata => FB_AD); + + +b2v_inst12 : lpm_ff1 +PORT MAP(clock => DDRCLK(0), + data => VDP_IN(31 DOWNTO 0), + q => VDVZ(31 DOWNTO 0)); + + +b2v_inst13 : lpm_ff0 +PORT MAP(clock => DDR_SYNC_66M, + enable => FB_LE(0), + data => FB_AD, + q => FB_DDR(127 DOWNTO 96)); + + +b2v_inst14 : lpm_ff0 +PORT MAP(clock => DDR_SYNC_66M, + enable => FB_LE(1), + data => FB_AD, + q => FB_DDR(95 DOWNTO 64)); + + +b2v_inst15 : lpm_ff0 +PORT MAP(clock => DDR_SYNC_66M, + enable => FB_LE(2), + data => FB_AD, + q => FB_DDR(63 DOWNTO 32)); + + +b2v_inst16 : lpm_ff0 +PORT MAP(clock => DDR_SYNC_66M, + enable => FB_LE(3), + data => FB_AD, + q => FB_DDR(31 DOWNTO 0)); + + +b2v_inst17 : lpm_ff0 +PORT MAP(clock => DDRCLK(0), + enable => DDR_FB(1), + data => VDP_IN(31 DOWNTO 0), + q => SYNTHESIZED_WIRE_11); + + +b2v_inst18 : lpm_ff0 +PORT MAP(clock => DDRCLK(0), + enable => DDR_FB(0), + data => VDP_IN(63 DOWNTO 32), + q => SYNTHESIZED_WIRE_13); + + +b2v_inst19 : lpm_ff0 +PORT MAP(clock => DDRCLK(0), + enable => DDR_FB(0), + data => VDP_IN(31 DOWNTO 0), + q => SYNTHESIZED_WIRE_14); + + +b2v_inst2 : altddio_out0 +PORT MAP(outclock => DDRCLK(3), + datain_h => VDMP(7 DOWNTO 4), + datain_l => VDMP(3 DOWNTO 0), + dataout => VDM); + + +b2v_inst20 : lpm_ff1 +PORT MAP(clock => DDRCLK(0), + data => VDVZ(31 DOWNTO 0), + q => VDVZ(95 DOWNTO 64)); + + +b2v_inst21 : lpm_mux0 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data0x => FIFO_D(127 DOWNTO 96), + data1x => FIFO_D(95 DOWNTO 64), + data2x => FIFO_D(63 DOWNTO 32), + data3x => FIFO_D(31 DOWNTO 0), + sel => CLUT_MUX_ADR(1 DOWNTO 0), + result => SYNTHESIZED_WIRE_48); + + +b2v_inst22 : lpm_mux5 +PORT MAP(data0x => FB_DDR(127 DOWNTO 64), + data1x => FB_DDR(63 DOWNTO 0), + data2x => BLITTER_DOUT(127 DOWNTO 64), + data3x => BLITTER_DOUT(63 DOWNTO 0), + sel => DDRWR_D_SEL, + result => VDP_OUT); + + +b2v_inst23 : lpm_constant2 +PORT MAP( result => GDFX_TEMP_SIGNAL_16); + + +b2v_inst24 : lpm_mux1 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data0x => FIFO_D(127 DOWNTO 112), + data1x => FIFO_D(111 DOWNTO 96), + data2x => FIFO_D(95 DOWNTO 80), + data3x => FIFO_D(79 DOWNTO 64), + data4x => FIFO_D(63 DOWNTO 48), + data5x => FIFO_D(47 DOWNTO 32), + data6x => FIFO_D(31 DOWNTO 16), + data7x => FIFO_D(15 DOWNTO 0), + sel => CLUT_MUX_ADR(2 DOWNTO 0), + result => SYNTHESIZED_WIRE_7); + + +b2v_inst25 : lpm_mux2 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data0x => FIFO_D(127 DOWNTO 120), + data10x => FIFO_D(47 DOWNTO 40), + data11x => FIFO_D(39 DOWNTO 32), + data12x => FIFO_D(31 DOWNTO 24), + data13x => FIFO_D(23 DOWNTO 16), + data14x => FIFO_D(15 DOWNTO 8), + data15x => FIFO_D(7 DOWNTO 0), + data1x => FIFO_D(119 DOWNTO 112), + data2x => FIFO_D(111 DOWNTO 104), + data3x => FIFO_D(103 DOWNTO 96), + data4x => FIFO_D(95 DOWNTO 88), + data5x => FIFO_D(87 DOWNTO 80), + data6x => FIFO_D(79 DOWNTO 72), + data7x => FIFO_D(71 DOWNTO 64), + data8x => FIFO_D(63 DOWNTO 56), + data9x => FIFO_D(55 DOWNTO 48), + sel => CLUT_MUX_ADR, + result => SYNTHESIZED_WIRE_12); + + +b2v_inst26 : lpm_shiftreg4 +PORT MAP(clock => DDRCLK(0), + shiftin => SR_FIFO_WRE, + shiftout => FIFO_WRE); + + +b2v_inst27 : lpm_latch0 +PORT MAP(gate => DDR_SYNC_66M, + data => SYNTHESIZED_WIRE_15, + q => VDR); + + + +CLUT_ADR(1) <= CLUT_ADR1A AND SYNTHESIZED_WIRE_16; + + +b2v_inst3 : lpm_ff1 +PORT MAP(clock => DDRCLK(0), + data => VDP_IN(63 DOWNTO 32), + q => VDVZ(63 DOWNTO 32)); + + +CLUT_ADR(3) <= SYNTHESIZED_WIRE_61 AND CLUT_ADR3A; + + +CLUT_ADR(5) <= CLUT_OFF(1) OR SYNTHESIZED_WIRE_18; + + +SYNTHESIZED_WIRE_8 <= CLUT_ADR4A AND COLOR8; + + +SYNTHESIZED_WIRE_18 <= CLUT_ADR5A AND COLOR8; + + +SYNTHESIZED_WIRE_9 <= CLUT_ADR6A AND COLOR8; + + +SYNTHESIZED_WIRE_46 <= CLUT_ADR7A AND COLOR8; + + +b2v_inst36 : lpm_ff6 +PORT MAP(clock => DDRCLK(0), + enable => BLITTER_DACK(0), + data => VDVZ, + q => BLITTER_DIN); + + +VDOUT_OE <= DDR_WR OR SR_DDR_WR; + + + +VIDEO_TA <= BLITTER_TA OR VIDEO_MOD_TA OR VIDEO_DDR_TA; + + +b2v_inst4 : lpm_ff1 +PORT MAP(clock => DDRCLK(0), + data => VDVZ(63 DOWNTO 32), + q => VDVZ(127 DOWNTO 96)); + + +b2v_inst40 : mux41_0 +PORT MAP(S0 => COLOR2, + S1 => COLOR4, + D0 => CLUT_ADR6A, + INH => SYNTHESIZED_WIRE_19, + D1 => CLUT_ADR7A, + Q => SYNTHESIZED_WIRE_54); + + +b2v_inst41 : mux41_1 +PORT MAP(S0 => COLOR2, + S1 => COLOR4, + D0 => CLUT_ADR5A, + INH => SYNTHESIZED_WIRE_20, + D1 => CLUT_ADR6A, + Q => SYNTHESIZED_WIRE_53); + + +b2v_inst42 : mux41_2 +PORT MAP(S0 => COLOR2, + D2 => CLUT_ADR7A, + S1 => COLOR4, + D0 => CLUT_ADR4A, + INH => SYNTHESIZED_WIRE_21, + D1 => CLUT_ADR5A, + Q => SYNTHESIZED_WIRE_52); + + +b2v_inst43 : mux41_3 +PORT MAP(S0 => COLOR2, + D2 => CLUT_ADR6A, + S1 => COLOR4, + D0 => CLUT_ADR3A, + INH => SYNTHESIZED_WIRE_22, + D1 => CLUT_ADR4A, + Q => SYNTHESIZED_WIRE_51); + + +b2v_inst44 : mux41_4 +PORT MAP(S0 => COLOR2, + D2 => CLUT_ADR5A, + S1 => COLOR4, + D0 => CLUT_ADR2A, + INH => SYNTHESIZED_WIRE_23, + D1 => CLUT_ADR3A, + Q => SYNTHESIZED_WIRE_50); + + +b2v_inst45 : mux41_5 +PORT MAP(S0 => COLOR2, + D2 => CLUT_ADR4A, + S1 => COLOR4, + D0 => CLUT_ADR1A, + INH => SYNTHESIZED_WIRE_24, + D1 => CLUT_ADR2A, + Q => SYNTHESIZED_WIRE_49); + + +b2v_inst46 : lpm_ff3 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => SYNTHESIZED_WIRE_25, + q => SYNTHESIZED_WIRE_43); + + +b2v_inst47 : lpm_ff3 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => CCF, + q => SYNTHESIZED_WIRE_25); + + + +b2v_inst49 : lpm_ff3 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => SYNTHESIZED_WIRE_26, + q => SYNTHESIZED_WIRE_42); + + +b2v_inst5 : altddio_out2 +PORT MAP(outclock => PIXEL_CLK_ALTERA_SYNTHESIZED, + datain_h => SYNTHESIZED_WIRE_62, + datain_l => SYNTHESIZED_WIRE_62, + dataout => SYNTHESIZED_WIRE_65); + + + +b2v_inst51 : lpm_bustri1 +PORT MAP(enabledt => ST_CLUT_RD, + data => SYNTHESIZED_WIRE_29, + tridata => FB_AD(26 DOWNTO 24)); + + +b2v_inst52 : lpm_ff3 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => CCS, + q => SYNTHESIZED_WIRE_26); + + +b2v_inst53 : lpm_bustri_byt +PORT MAP(enabledt => ACP_CLUT_RD, + data => SYNTHESIZED_WIRE_30, + tridata => FB_AD(7 DOWNTO 0)); + + +b2v_inst54 : lpm_constant0 +PORT MAP( result => CCS(20 DOWNTO 16)); + + + +b2v_inst56 : lpm_bustri1 +PORT MAP(enabledt => ST_CLUT_RD, + data => SYNTHESIZED_WIRE_31, + tridata => FB_AD(22 DOWNTO 20)); + + +b2v_inst57 : lpm_bustri_byt +PORT MAP(enabledt => ACP_CLUT_RD, + data => SYNTHESIZED_WIRE_32, + tridata => FB_AD(15 DOWNTO 8)); + + +b2v_inst58 : lpm_bustri_byt +PORT MAP(enabledt => ACP_CLUT_RD, + data => SYNTHESIZED_WIRE_33, + tridata => FB_AD(23 DOWNTO 16)); + + +b2v_inst59 : lpm_constant0 +PORT MAP( result => CCS(12 DOWNTO 8)); + + + + +b2v_inst61 : lpm_bustri1 +PORT MAP(enabledt => ST_CLUT_RD, + data => SYNTHESIZED_WIRE_34, + tridata => FB_AD(18 DOWNTO 16)); + + +b2v_inst62 : lpm_muxdz +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + clken => FIFO_RDE, + sel => INTER_ZEI, + data0x => SYNTHESIZED_WIRE_63, + data1x => SYNTHESIZED_WIRE_36, + result => FIFO_D); + + +b2v_inst63 : lpm_fifodz +PORT MAP(wrreq => SYNTHESIZED_WIRE_60, + rdreq => SYNTHESIZED_WIRE_38, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + aclr => DOP_FIFO_CLR, + data => SYNTHESIZED_WIRE_63, + q => SYNTHESIZED_WIRE_36); + + +b2v_inst64 : lpm_constant0 +PORT MAP( result => CCS(4 DOWNTO 0)); + + +SYNTHESIZED_WIRE_60 <= FIFO_RDE AND SYNTHESIZED_WIRE_40; + + +b2v_inst66 : lpm_bustri3 +PORT MAP(enabledt => FALCON_CLUT_RDH, + data => SYNTHESIZED_WIRE_41, + tridata => FB_AD(31 DOWNTO 26)); + + +SYNTHESIZED_WIRE_38 <= FIFO_RDE AND INTER_ZEI; + + + +SYNTHESIZED_WIRE_40 <= NOT(INTER_ZEI); + + + +b2v_inst7 : lpm_mux6 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data0x => SYNTHESIZED_WIRE_42, + data1x => SYNTHESIZED_WIRE_43, + data4x => CCA, + data5x => CC16, + data6x => CC24(23 DOWNTO 0), + data7x => CCR, + sel => CCSEL, + result => SYNTHESIZED_WIRE_62); + + +b2v_inst70 : lpm_bustri3 +PORT MAP(enabledt => FALCON_CLUT_RDH, + data => SYNTHESIZED_WIRE_44, + tridata => FB_AD(23 DOWNTO 18)); + + +b2v_inst71 : lpm_ff6 +PORT MAP(clock => DDRCLK(0), + enable => FIFO_WRE, + data => VDVZ, + q => VDMA); + + + + +b2v_inst74 : lpm_bustri3 +PORT MAP(enabledt => FALCON_CLUT_RDL, + data => SYNTHESIZED_WIRE_45, + tridata => FB_AD(23 DOWNTO 18)); + + + + +b2v_inst77 : lpm_constant1 +PORT MAP( result => CCF(1 DOWNTO 0)); + + + +CLUT_ADR(7) <= CLUT_OFF(3) OR SYNTHESIZED_WIRE_46; + + + +b2v_inst80 : lpm_constant1 +PORT MAP( result => CCF(9 DOWNTO 8)); + + +b2v_inst81 : lpm_mux4 +PORT MAP(sel => COLOR1, + data0x => ZR_C8(7 DOWNTO 1), + data1x => SYNTHESIZED_WIRE_47, + result => ZR_C8B(7 DOWNTO 1)); + + +b2v_inst82 : lpm_constant3 +PORT MAP( result => SYNTHESIZED_WIRE_47); + + +b2v_inst83 : lpm_constant1 +PORT MAP( result => CCF(17 DOWNTO 16)); + + +PROCESS(DDRCLK(0),DDR_WR) +BEGIN +if (DDR_WR = '1') THEN + VDQS(3) <= DDRCLK(0); +ELSE + VDQS(3) <= 'Z'; +END IF; +END PROCESS; + + +PROCESS(DDRCLK(0),DDR_WR) +BEGIN +if (DDR_WR = '1') THEN + VDQS(2) <= DDRCLK(0); +ELSE + VDQS(2) <= 'Z'; +END IF; +END PROCESS; + + +PROCESS(DDRCLK(0),DDR_WR) +BEGIN +if (DDR_WR = '1') THEN + VDQS(1) <= DDRCLK(0); +ELSE + VDQS(1) <= 'Z'; +END IF; +END PROCESS; + + +PROCESS(DDRCLK(0),DDR_WR) +BEGIN +if (DDR_WR = '1') THEN + VDQS(0) <= DDRCLK(0); +ELSE + VDQS(0) <= 'Z'; +END IF; +END PROCESS; + + +PROCESS(DDRCLK(3)) +BEGIN +IF (RISING_EDGE(DDRCLK(3))) THEN + DDRWR_D_SEL(0) <= SR_DDRWR_D_SEL; +END IF; +END PROCESS; + + +b2v_inst89 : lpm_shiftreg6 +PORT MAP(clock => DDRCLK(0), + shiftin => SR_BLITTER_DACK, + q => BLITTER_DACK); + + +b2v_inst9 : lpm_ff1 +PORT MAP(clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + data => SYNTHESIZED_WIRE_48, + q => CC24); + + +PROCESS(DDRCLK(3)) +BEGIN +IF (RISING_EDGE(DDRCLK(3))) THEN + DDR_WR <= SR_DDR_WR; +END IF; +END PROCESS; + + +PROCESS(PIXEL_CLK_ALTERA_SYNTHESIZED) +BEGIN +IF (RISING_EDGE(PIXEL_CLK_ALTERA_SYNTHESIZED)) THEN + DFF_inst91 <= CLUT_ADR(0); +END IF; +END PROCESS; + + +b2v_inst92 : lpm_shiftreg6 +PORT MAP(clock => DDRCLK(0), + shiftin => SR_DDR_FB, + q => DDR_FB); + + +PROCESS(PIXEL_CLK_ALTERA_SYNTHESIZED) +BEGIN +IF (RISING_EDGE(PIXEL_CLK_ALTERA_SYNTHESIZED)) THEN + DFF_inst93 <= DFF_inst91; +END IF; +END PROCESS; + + +b2v_inst94 : lpm_ff6 +PORT MAP(clock => DDRCLK(0), + enable => FIFO_WRE, + data => VDMA, + q => VDMB); + + +PROCESS(PIXEL_CLK_ALTERA_SYNTHESIZED) +BEGIN +IF (RISING_EDGE(PIXEL_CLK_ALTERA_SYNTHESIZED)) THEN + SYNTHESIZED_WIRE_64 <= FIFO_RDE; +END IF; +END PROCESS; + + + +b2v_inst97 : lpm_ff5 +PORT MAP(clock => DDRCLK(2), + data => SR_VDMP, + q => VDMP); + + +b2v_sr0 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_49, + data => FIFO_D(127 DOWNTO 112), + shiftout => CLUT_ADR(0)); + + +b2v_sr1 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_50, + data => FIFO_D(111 DOWNTO 96), + shiftout => CLUT_ADR1A); + + +b2v_sr2 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_51, + data => FIFO_D(95 DOWNTO 80), + shiftout => CLUT_ADR2A); + + +b2v_sr3 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_52, + data => FIFO_D(79 DOWNTO 64), + shiftout => CLUT_ADR3A); + + +b2v_sr4 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_53, + data => FIFO_D(63 DOWNTO 48), + shiftout => CLUT_ADR4A); + + +b2v_sr5 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => SYNTHESIZED_WIRE_54, + data => FIFO_D(47 DOWNTO 32), + shiftout => CLUT_ADR5A); + + +b2v_sr6 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => CLUT_ADR7A, + data => FIFO_D(31 DOWNTO 16), + shiftout => CLUT_ADR6A); + + +b2v_sr7 : lpm_shiftreg0 +PORT MAP(load => SYNTHESIZED_WIRE_64, + clock => PIXEL_CLK_ALTERA_SYNTHESIZED, + shiftin => CLUT_ADR(0), + data => FIFO_D(15 DOWNTO 0), + shiftout => CLUT_ADR7A); + + +b2v_ST_CLUT_BLUE : altdpram0 +PORT MAP(wren_a => ST_CLUT_WR(1), + wren_b => SYNTHESIZED_WIRE_55, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(4 DOWNTO 1), + address_b => CLUT_ADR(3 DOWNTO 0), + data_a => FB_AD(18 DOWNTO 16), + q_a => SYNTHESIZED_WIRE_34, + q_b => CCS(7 DOWNTO 5)); + + +b2v_ST_CLUT_GREEN : altdpram0 +PORT MAP(wren_a => ST_CLUT_WR(1), + wren_b => SYNTHESIZED_WIRE_56, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(4 DOWNTO 1), + address_b => CLUT_ADR(3 DOWNTO 0), + data_a => FB_AD(22 DOWNTO 20), + q_a => SYNTHESIZED_WIRE_31, + q_b => CCS(15 DOWNTO 13)); + + +b2v_ST_CLUT_RED : altdpram0 +PORT MAP(wren_a => ST_CLUT_WR(0), + wren_b => SYNTHESIZED_WIRE_57, + clock_a => MAIN_CLK, + clock_b => PIXEL_CLK_ALTERA_SYNTHESIZED, + address_a => FB_ADR(4 DOWNTO 1), + address_b => CLUT_ADR(3 DOWNTO 0), + data_a => FB_AD(26 DOWNTO 24), + q_a => SYNTHESIZED_WIRE_29, + q_b => CCS(23 DOWNTO 21)); + + +b2v_VIDEO_MOD_MUX_CLUTCTR : video_mod_mux_clutctr +PORT MAP(nRSTO => nRSTO, + MAIN_CLK => MAIN_CLK, + nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + nFB_CS3 => nFB_CS3, + nFB_WR => nFB_WR, + nFB_OE => nFB_OE, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + nFB_BURST => nFB_BURST, + CLK33M => CLK33M, + CLK25M => CLK25M, + BLITTER_RUN => BLITTER_RUN, + CLK_VIDEO => CLK_VIDEO, + VR_BUSY => VR_BUSY, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + VR_D => VR_D, + COLOR8 => COLOR8, + ACP_CLUT_RD => ACP_CLUT_RD, + COLOR1 => COLOR1, + FALCON_CLUT_RDH => FALCON_CLUT_RDH, + FALCON_CLUT_RDL => FALCON_CLUT_RDL, + ST_CLUT_RD => ST_CLUT_RD, + HSYNC => HSYNC, + VSYNC => VSYNC, + nBLANK => nBLANK, + nSYNC => nSYNC, + nPD_VGA => nPD_VGA, + FIFO_RDE => FIFO_RDE, + COLOR2 => COLOR2, + COLOR4 => COLOR4, + PIXEL_CLK => PIXEL_CLK_ALTERA_SYNTHESIZED, + BLITTER_ON => BLITTER_ON, + VIDEO_MOD_TA => VIDEO_MOD_TA, + INTER_ZEI => INTER_ZEI, + DOP_FIFO_CLR => DOP_FIFO_CLR, + VIDEO_RECONFIG => VIDEO_RECONFIG, + VR_WR => VR_WR, + VR_RD => VR_RD, + CLR_FIFO => CLR_FIFO, + ACP_CLUT_WR => ACP_CLUT_WR, + CCR => CCR, + CCSEL => CCSEL, + CLUT_MUX_ADR => CLUT_MUX_ADR, + CLUT_OFF => CLUT_OFF, + FALCON_CLUT_WR => FALCON_CLUT_WR, + ST_CLUT_WR => ST_CLUT_WR, + VIDEO_RAM_CTR => VIDEO_RAM_CTR); + +PIXEL_CLK <= PIXEL_CLK_ALTERA_SYNTHESIZED; + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/ahdl2v/DDR_CTR.tdf b/FPGA_quartus_GE/ahdl2v/DDR_CTR.tdf new file mode 100644 index 0000000..1fe3049 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/DDR_CTR.tdf @@ -0,0 +1,662 @@ +TITLE "DDR_CTR"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_BYT.inc"; + +-- FIFO WATER MARK +CONSTANT FIFO_LWM = 0; +CONSTANT FIFO_MWM = 200; +CONSTANT FIFO_HWM = 500; + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN DDR_CTR +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + FB_ADR[31..0] : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nRSTO : INPUT; + MAIN_CLK : INPUT; + FB_ALE : INPUT; + nFB_WR : INPUT; + DDR_SYNC_66M : INPUT; + CLR_FIFO : INPUT; + VIDEO_RAM_CTR[15..0] : INPUT; + BLITTER_ADR[31..0] : INPUT; + BLITTER_SIG : INPUT; + BLITTER_WR : INPUT; + DDRCLK0 : INPUT; + CLK33M : INPUT; + FIFO_MW[8..0] : INPUT; + VA[12..0] : OUTPUT; + nVWE : OUTPUT; + nVRAS : OUTPUT; + nVCS : OUTPUT; + VCKE : OUTPUT; + nVCAS : OUTPUT; + FB_LE[3..0] : OUTPUT; + FB_VDOE[3..0] : OUTPUT; + SR_FIFO_WRE : OUTPUT; + SR_DDR_FB : OUTPUT; + SR_DDR_WR : OUTPUT; + SR_DDRWR_D_SEL : OUTPUT; + SR_VDMP[7..0] : OUTPUT; + VIDEO_DDR_TA : OUTPUT; + SR_BLITTER_DACK : OUTPUT; + BA[1..0] : OUTPUT; + DDRWR_D_SEL1 : OUTPUT; + VDM_SEL[3..0] : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_REGDDR :MACHINE WITH STATES(FR_WAIT,FR_S0,FR_S1,FR_S2,FR_S3); + DDR_SM :MACHINE WITH STATES(DS_T1,DS_T2A,DS_T2B,DS_T3,DS_N5,DS_N6, DS_N7, DS_N8, -- START (NORMAL 8 CYCLES TOTAL = 60ns) + DS_C2,DS_C3,DS_C4, DS_C5, DS_C6, DS_C7, -- CONFIG + DS_T4R,DS_T5R, -- READ CPU UND BLITTER, + DS_T4W,DS_T5W,DS_T6W,DS_T7W,DS_T8W,DS_T9W, -- WRITE CPU UND BLITTER + DS_T4F,DS_T5F,DS_T6F,DS_T7F,DS_T8F,DS_T9F,DS_T10F, -- READ FIFO + DS_CB6, DS_CB8, -- CLOSE FIFO BANK + DS_R2,DS_R3,DS_R4, DS_R5, DS_R6); -- REFRESH 10X7.5NS=75NS + LINE :NODE; + FB_B[3..0] :NODE; + VCAS :NODE; + VRAS :NODE; + VWE :NODE; + VA_P[12..0] :DFF; + BA_P[1..0] :DFF; + VA_S[12..0] :DFF; + BA_S[1..0] :DFF; + MCS[1..0] :DFF; + CPU_DDR_SYNC :DFF; + DDR_SEL :NODE; + DDR_CS :DFFE; + DDR_CONFIG :NODE; + SR_DDR_WR :DFF; + SR_DDRWR_D_SEL :DFF; + SR_VDMP[7..0] :DFF; + CPU_ROW_ADR[12..0] :NODE; + CPU_BA[1..0] :NODE; + CPU_COL_ADR[9..0] :NODE; + CPU_SIG :NODE; + CPU_REQ :DFF; + CPU_AC :DFF; + BUS_CYC :DFF; + BUS_CYC_END :NODE; + BLITTER_REQ :DFF; + BLITTER_AC :DFF; + BLITTER_ROW_ADR[12..0] :NODE; + BLITTER_BA[1..0] :NODE; + BLITTER_COL_ADR[9..0] :NODE; + FIFO_REQ :DFF; + FIFO_AC :DFF; + FIFO_ROW_ADR[12..0] :NODE; + FIFO_BA[1..0] :NODE; + FIFO_COL_ADR[9..0] :NODE; + FIFO_ACTIVE :NODE; + CLR_FIFO_SYNC :DFF; + CLEAR_FIFO_CNT :DFF; + STOP :DFF; + SR_FIFO_WRE :DFF; + FIFO_BANK_OK :DFF; + FIFO_BANK_NOT_OK :NODE; + DDR_REFRESH_ON :NODE; + DDR_REFRESH_CNT[10..0] :DFF; + DDR_REFRESH_REQ :DFF; + DDR_REFRESH_SIG[3..0] :DFFE; + REFRESH_TIME :DFF; + VIDEO_BASE_L_D[7..0] :DFFE; + VIDEO_BASE_L :NODE; + VIDEO_BASE_M_D[7..0] :DFFE; + VIDEO_BASE_M :NODE; + VIDEO_BASE_H_D[7..0] :DFFE; + VIDEO_BASE_H :NODE; + VIDEO_BASE_X_D[2..0] :DFFE; + VIDEO_BASE_X_D_FULL[7..0] :NODE; + VIDEO_ADR_CNT[22..0] :DFFE; + VIDEO_CNT_L :NODE; + VIDEO_CNT_M :NODE; + VIDEO_CNT_H :NODE; + VIDEO_BASE_ADR[22..0] :NODE; + VIDEO_ACT_ADR[26..0] :NODE; + +BEGIN + LINE = FB_SIZE0 & FB_SIZE1; +-- BYT SELECT + FB_B0 = FB_ADR[1..0]==0 -- ADR==0 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + FB_REGDDR.CLK = MAIN_CLK; + CASE FB_REGDDR IS + WHEN FR_WAIT => + FB_LE0 = !nFB_WR; + IF BUS_CYC # DDR_SEL & LINE & !nFB_WR THEN -- LOS WENN BEREIT ODER IMMER BEI LINE WRITE + FB_REGDDR = FR_S0; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S0 => + IF DDR_CS THEN + FB_LE0 = !nFB_WR; + VIDEO_DDR_TA = VCC; + IF LINE THEN + FB_VDOE0 = !nFB_OE & !DDR_CONFIG; + FB_REGDDR = FR_S1; + ELSE + BUS_CYC_END = VCC; + FB_VDOE0 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_REGDDR = FR_WAIT; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S1 => + IF DDR_CS THEN + FB_VDOE1 = !nFB_OE & !DDR_CONFIG; + FB_LE1 = !nFB_WR; + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S2; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S2 => + IF DDR_CS THEN + FB_VDOE2 = !nFB_OE & !DDR_CONFIG; + FB_LE2 = !nFB_WR; + IF !BUS_CYC & LINE & !nFB_WR THEN -- BEI LINE WRITE EVT. WARTEN + FB_REGDDR = FR_S2; + ELSE + VIDEO_DDR_TA = VCC; + FB_REGDDR = FR_S3; + END IF; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + WHEN FR_S3 => + IF DDR_CS THEN + FB_VDOE3 = !nFB_OE & !MAIN_CLK & !DDR_CONFIG; + FB_LE3 = !nFB_WR; + VIDEO_DDR_TA = VCC; + BUS_CYC_END = VCC; + FB_REGDDR = FR_WAIT; + ELSE + FB_REGDDR = FR_WAIT; + END IF; + END CASE; +-- DDR STEUERUNG ----------------------------------------------------- +-- VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE; + VCKE = VIDEO_RAM_CTR0; + nVCS = !VIDEO_RAM_CTR1; + DDR_REFRESH_ON = VIDEO_RAM_CTR2; + DDR_CONFIG = VIDEO_RAM_CTR3; + FIFO_ACTIVE = VIDEO_RAM_CTR8; +-------------------------------- + CPU_ROW_ADR[] = FB_ADR[26..14]; + CPU_BA[] = FB_ADR[13..12]; + CPU_COL_ADR[] = FB_ADR[11..2]; + nVRAS = !VRAS; + nVCAS = !VCAS; + nVWE = !VWE; + SR_DDR_WR.CLK = DDRCLK0; + SR_DDRWR_D_SEL.CLK = DDRCLK0; + SR_VDMP[7..0].CLK = DDRCLK0; + SR_FIFO_WRE.CLK = DDRCLK0; + CPU_AC.CLK = DDRCLK0; + FIFO_AC.CLK = DDRCLK0; + BLITTER_AC.CLK = DDRCLK0; + DDRWR_D_SEL1 = BLITTER_AC; +-- SELECT LOGIC + DDR_SEL = FB_ALE & FB_AD[31..30]==B"01"; + DDR_CS.CLK = MAIN_CLK; + DDR_CS.ENA = FB_ALE; + DDR_CS = DDR_SEL; +-- WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER + CPU_SIG = DDR_SEL & (nFB_WR # !LINE) & !DDR_CONFIG -- NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG + # DDR_SEL & DDR_CONFIG -- CONFIG SOFORT LOS + # FB_REGDDR==FR_S1 & !nFB_WR; -- LINE WRITE SPÄTER + CPU_REQ.CLK = DDR_SYNC_66M; + CPU_REQ = CPU_SIG + # CPU_REQ & FB_REGDDR!=FR_S1 & FB_REGDDR!=FR_S3 & !BUS_CYC_END & !BUS_CYC; -- HALTEN BUS CYC BEGONNEN ODER FERTIG + BUS_CYC.CLK = DDRCLK0; + BUS_CYC = BUS_CYC & !BUS_CYC_END; + -- STATE MACHINE SYNCHRONISIEREN ----------------- + MCS[].CLK = DDRCLK0; + MCS0 = MAIN_CLK; + MCS1 = MCS0; + CPU_DDR_SYNC.CLK = DDRCLK0; + CPU_DDR_SYNC = MCS[]==2 & VCKE & !nVCS; -- NUR 1 WENN EIN + --------------------------------------------------- + VA_S[].CLK = DDRCLK0; + BA_S[].CLK = DDRCLK0; + VA[] = VA_S[]; + BA[] = BA_S[]; + VA_P[].CLK = DDRCLK0; + BA_P[].CLK = DDRCLK0; +-- DDR STATE MACHINE ----------------------------------------------- + DDR_SM.CLK = DDRCLK0; + CASE DDR_SM IS + WHEN DS_T1 => + IF DDR_REFRESH_REQ THEN + DDR_SM = DS_R2; + ELSE + IF CPU_DDR_SYNC THEN -- SYNCHRON UND EIN? + IF DDR_CONFIG THEN -- JA + DDR_SM = DS_C2; + ELSE + IF CPU_REQ THEN -- BEI WAIT UND LINE WRITE + VA_S[] = CPU_ROW_ADR[]; + BA_S[] = CPU_BA[]; + CPU_AC = VCC; + BUS_CYC = VCC; + DDR_SM = DS_T2B; + ELSE + IF FIFO_REQ # !BLITTER_REQ THEN -- FIFO IST DEFAULT + VA_P[] = FIFO_ROW_ADR[]; + BA_P[] = FIFO_BA[]; + FIFO_AC = VCC; -- VORBESETZEN + ELSE + VA_P[] = BLITTER_ROW_ADR[]; + BA_P[] = BLITTER_BA[]; + BLITTER_AC = VCC; -- VORBESETZEN + END IF; + DDR_SM = DS_T2A; + END IF; + END IF; + ELSE + DDR_SM = DS_T1; -- NEIN ->SYNCHRONISIEREN + END IF; + END IF; + + WHEN DS_T2A => -- SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK *** + IF DDR_SEL & (nFB_WR # !LINE) THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO PAGE + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + ELSE + VRAS = FIFO_AC & FIFO_REQ # BLITTER_AC & BLITTER_REQ; + VA[] = VA_P[]; + BA[] = BA_P[]; + VA_S[10] = !(FIFO_AC & FIFO_REQ); + FIFO_BANK_OK = FIFO_AC & FIFO_REQ; + FIFO_AC = FIFO_AC & FIFO_REQ; + BLITTER_AC = BLITTER_AC & BLITTER_REQ; + END IF; + DDR_SM = DS_T3; + + WHEN DS_T2B => + VRAS = VCC; + FIFO_BANK_NOT_OK = VCC; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + DDR_SM = DS_T3; + + WHEN DS_T3 => + CPU_AC = CPU_AC; + FIFO_AC = FIFO_AC; + BLITTER_AC = BLITTER_AC; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + IF !nFB_WR & CPU_AC # BLITTER_WR & BLITTER_AC THEN + DDR_SM = DS_T4W; + ELSE + IF CPU_AC THEN -- CPU? + VA_S[9..0] = CPU_COL_ADR[]; + BA_S[] = CPU_BA[]; + DDR_SM = DS_T4R; + ELSE + IF FIFO_AC THEN -- FIFO? + VA_S[9..0] = FIFO_COL_ADR[]; + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T4F; + ELSE + IF BLITTER_AC THEN + VA_S[9..0] = BLITTER_COL_ADR[]; + BA_S[] = BLITTER_BA[]; + DDR_SM = DS_T4R; + ELSE + DDR_SM = DS_N8; + END IF; + END IF; + END IF; + END IF; +-- READ + WHEN DS_T4R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + SR_DDR_FB = CPU_AC; -- READ DATEN FÜR CPU + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER DACK AND BLITTER LATCH DATEN + DDR_SM = DS_T5R; + + WHEN DS_T5R => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + IF FIFO_REQ & FIFO_BANK_OK THEN -- FIFO READ EINSCHIEBEN WENN BANK OK + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- MANUEL PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- WRITE + WHEN DS_T4W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_BLITTER_DACK = BLITTER_AC; -- BLITTER ACK AND BLITTER LATCH DATEN + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + DDR_SM = DS_T5W; + + WHEN DS_T5W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VA_S[9..0] = CPU_AC & CPU_COL_ADR[] + # BLITTER_AC & BLITTER_COL_ADR[]; + VA_S[10] = VA_S[10]; -- AUTO PRECHARGE WENN NICHT FIFO PAGE + BA_S[] = CPU_AC & CPU_BA[] + # BLITTER_AC & BLITTER_BA[]; + SR_VDMP[7..4] = FB_B[]; -- BYTE ENABLE WRITE + SR_VDMP[3..0] = LINE & B"1111"; -- LINE ENABLE WRITE + DDR_SM = DS_T6W; + + WHEN DS_T6W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + VCAS = VCC; + VWE = VCC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITER + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_VDMP[] = LINE & B"11111111"; -- WENN LINE DANN ACTIV + DDR_SM = DS_T7W; + + WHEN DS_T7W => + CPU_AC = CPU_AC; + BLITTER_AC = BLITTER_AC; + SR_DDR_WR = VCC; -- WRITE COMMAND CPU UND BLITTER IF WRITE + SR_DDRWR_D_SEL = VCC; -- 2. HÄLFTE WRITE DATEN SELEKTIEREN + DDR_SM = DS_T8W; + + WHEN DS_T8W => + DDR_SM = DS_T9W; + + WHEN DS_T9W => + IF FIFO_REQ & FIFO_BANK_OK THEN + VA_S[9..0] = FIFO_COL_ADR[]; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; + END IF; +-- FIFO READ + WHEN DS_T4F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T5F; + + WHEN DS_T5F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T6F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB6; -- NOCH OFFEN LASSEN + END IF; + + WHEN DS_T6F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + + WHEN DS_T7F => + IF CPU_REQ & FIFO_MW[]>FIFO_LWM THEN + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE PAGES SCHLIESSEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + ELSE + VA_S[9..0] = FIFO_COL_ADR[]+4; + VA_S[10] = GND; -- NON AUTO PRECHARGE + BA_S[] = FIFO_BA[]; + DDR_SM = DS_T8F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE PAGES SCHLIESEN + DDR_SM = DS_CB8; -- BANK SCHLIESSEN + END IF; + END IF; + + WHEN DS_T8F => + VCAS = VCC; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + IF FIFO_MW[] + ELSE + DDR_SM = DS_T9F; + END IF; + + WHEN DS_T9F => + IF FIFO_REQ THEN + IF VIDEO_ADR_CNT[7..0]==H"FF" THEN -- NEUE PAGE? + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + ELSE + VA_P[9..0] = FIFO_COL_ADR[]+4; + VA_P[10] = GND; -- NON AUTO PRECHARGE + BA_P[] = FIFO_BA[]; + DDR_SM = DS_T10F; + END IF; + ELSE + VA_S[10] = VCC; -- ALLE BANKS SCHLIESEN + DDR_SM = DS_CB6; -- BANK SCHLIESSEN + END IF; + + WHEN DS_T10F => + IF DDR_SEL & (nFB_WR # !LINE) & FB_AD[13..12]!=FIFO_BA[] THEN + VRAS = VCC; + VA[] = FB_AD[26..14]; + BA[] = FB_AD[13..12]; + CPU_AC = VCC; + BUS_CYC = VCC; -- BUS CYCLUS LOSTRETEN + VA_S[10] = VCC; -- AUTO PRECHARGE DA NICHT FIFO BANK + DDR_SM = DS_T3; + ELSE + VCAS = VCC; + VA[] = VA_P[]; + BA[] = BA_P[]; + SR_FIFO_WRE = VCC; -- DATEN WRITE FIFO + DDR_SM = DS_T7F; + END IF; + +-- CONFIG CYCLUS + WHEN DS_C2 => + DDR_SM = DS_C3; + WHEN DS_C3 => + BUS_CYC = CPU_REQ; + DDR_SM = DS_C4; + WHEN DS_C4 => + IF CPU_REQ THEN + DDR_SM = DS_C5; + ELSE + DDR_SM = DS_T1; + END IF; + WHEN DS_C5 => + DDR_SM = DS_C6; + WHEN DS_C6 => + VA_S[] = FB_AD[12..0]; + BA_S[] = FB_AD[14..13]; + DDR_SM = DS_C7; + WHEN DS_C7 => + VRAS = FB_AD18 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VCAS = FB_AD17 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + VWE = FB_AD16 & !nFB_WR & !FB_SIZE0 & !FB_SIZE1; -- NUR BEI LONG WRITE + DDR_SM = DS_N8; +-- CLOSE FIFO BANK + WHEN DS_CB6 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_N7; + WHEN DS_CB8 => + FIFO_BANK_NOT_OK = VCC; -- AUF NOT OK + VRAS = VCC; -- BÄNKE SCHLIESSEN + VWE = VCC; + DDR_SM = DS_T1; +-- REFRESH 70NS = 10 ZYCLEN + WHEN DS_R2 => + IF DDR_REFRESH_SIG[]==9 THEN -- EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN + VRAS = VCC; -- ALLE BANKS SCHLIESSEN + VWE = VCC; + VA[10] = VCC; + FIFO_BANK_NOT_OK = VCC; + DDR_SM = DS_R4; + ELSE + VCAS = VCC; + VRAS = VCC; + DDR_SM = DS_R3; + END IF; + WHEN DS_R3 => + DDR_SM = DS_R4; + WHEN DS_R4 => + DDR_SM = DS_R5; + WHEN DS_R5 => + DDR_SM = DS_R6; + WHEN DS_R6 => + DDR_SM = DS_N5; +-- LEERSCHLAUFE + WHEN DS_N5 => + DDR_SM = DS_N6; + WHEN DS_N6 => + DDR_SM = DS_N7; + WHEN DS_N7 => + DDR_SM = DS_N8; + WHEN DS_N8 => + DDR_SM = DS_T1; + END CASE; + +--------------------------------------------------------------- +-- BLITTER ---------------------- +----------------------------------------- + BLITTER_REQ.CLK = DDRCLK0; + BLITTER_REQ = BLITTER_SIG & !DDR_CONFIG & VCKE & !nVCS; + BLITTER_ROW_ADR[] = BLITTER_ADR[26..14]; + BLITTER_BA1 = BLITTER_ADR13; + BLITTER_BA0 = BLITTER_ADR12; + BLITTER_COL_ADR[] = BLITTER_ADR[11..2]; +------------------------------------------------------------------------------ +-- FIFO --------------------------------- +-------------------------------------------------------- + FIFO_REQ.CLK = DDRCLK0; + FIFO_REQ = (FIFO_MW[]2048 33MHz CLOCKS +----------------------------------------------------------------------------------------- + DDR_REFRESH_CNT[].CLK = CLK33M; + DDR_REFRESH_CNT[] = DDR_REFRESH_CNT[]+1; -- ZÄHLEN 0-2047 + REFRESH_TIME.CLK = DDRCLK0; + REFRESH_TIME = DDR_REFRESH_CNT[]==0 & !MAIN_CLK; -- SYNC + DDR_REFRESH_SIG[].CLK = DDRCLK0; + DDR_REFRESH_SIG[].ENA = REFRESH_TIME # DDR_SM==DS_R6; + DDR_REFRESH_SIG[] = REFRESH_TIME & 9 & DDR_REFRESH_ON & !DDR_CONFIG -- 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF) + # !REFRESH_TIME & (DDR_REFRESH_SIG[]-1) & DDR_REFRESH_ON & !DDR_CONFIG; -- MINUS 1 WENN GEMACHT + DDR_REFRESH_REQ.CLK = DDRCLK0; + DDR_REFRESH_REQ = DDR_REFRESH_SIG[]!=0 & DDR_REFRESH_ON & !REFRESH_TIME & !DDR_CONFIG; +----------------------------------------------------------- +-- VIDEO REGISTER ----------------------- +--------------------------------------------------------------------------------------------------------------------- + VIDEO_BASE_L_D[].CLK = MAIN_CLK; + VIDEO_BASE_L = !nFB_CS1 & FB_ADR[19..1]==H"7C106"; -- 820D/2 + VIDEO_BASE_L_D[] = FB_AD[23..16]; -- SORRY, NUR 16 BYT GRENZEN + VIDEO_BASE_L_D[].ENA = !nFB_WR & VIDEO_BASE_L & FB_B1; + + VIDEO_BASE_M_D[].CLK = MAIN_CLK; + VIDEO_BASE_M = !nFB_CS1 & FB_ADR[19..1]==H"7C101"; -- 8203/2 + VIDEO_BASE_M_D[] = FB_AD[23..16]; + VIDEO_BASE_M_D[].ENA = !nFB_WR & VIDEO_BASE_M & FB_B3; + + VIDEO_BASE_H_D[].CLK = MAIN_CLK; + VIDEO_BASE_H = !nFB_CS1 & FB_ADR[19..1]==H"7C100"; -- 8200-1/2 + VIDEO_BASE_H_D[] = FB_AD[23..16]; + VIDEO_BASE_H_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B1; + VIDEO_BASE_X_D[].CLK = MAIN_CLK; + VIDEO_BASE_X_D[] = FB_AD[26..24]; + VIDEO_BASE_X_D[].ENA = !nFB_WR & VIDEO_BASE_H & FB_B0; + + VIDEO_CNT_L = !nFB_CS1 & FB_ADR[19..1]==H"7C104"; -- 8209/2 + VIDEO_CNT_M = !nFB_CS1 & FB_ADR[19..1]==H"7C103"; -- 8207/2 + VIDEO_CNT_H = !nFB_CS1 & FB_ADR[19..1]==H"7C102"; -- 8204,5/2 + + VIDEO_BASE_X_D_FULL[] = (0,VIDEO_BASE_X_D[]); -- GE + + FB_AD[31..24] = lpm_bustri_BYT( + VIDEO_BASE_H & VIDEO_BASE_X_D_FULL[] + # VIDEO_CNT_H & (0,VIDEO_ACT_ADR[26..24]) + ,(VIDEO_BASE_H # VIDEO_CNT_H) & !nFB_OE); + + FB_AD[23..16] = lpm_bustri_BYT( + VIDEO_BASE_L & VIDEO_BASE_L_D[] + # VIDEO_BASE_M & VIDEO_BASE_M_D[] + # VIDEO_BASE_H & VIDEO_BASE_H_D[] + # VIDEO_CNT_L & VIDEO_ACT_ADR[7..0] + # VIDEO_CNT_M & VIDEO_ACT_ADR[15..8] + # VIDEO_CNT_H & VIDEO_ACT_ADR[23..16] + ,(VIDEO_BASE_L # VIDEO_BASE_M # VIDEO_BASE_H # VIDEO_CNT_L # VIDEO_CNT_M # VIDEO_CNT_H) & !nFB_OE); +END; + diff --git a/FPGA_quartus_GE/ahdl2v/DDR_CTR.v b/FPGA_quartus_GE/ahdl2v/DDR_CTR.v new file mode 100644 index 0000000..238a56b --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/DDR_CTR.v @@ -0,0 +1,1095 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: DDR_CTR.tdf +// Verilog Design Output: DDR_CTR.v +// Created 03-Mar-2014 09:18 PM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + +// DDR_CTR + + +// CREATED BY FREDI ASCHWANDEN +// FIFO WATER MARK +// {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! +module DDR_CTR(FB_ADR, nFB_CS1, nFB_CS2, nFB_CS3, nFB_OE, FB_SIZE0, FB_SIZE1, + nRSTO, MAIN_CLK, FB_ALE, nFB_WR, DDR_SYNC_66M, CLR_FIFO, VIDEO_RAM_CTR, + BLITTER_ADR, BLITTER_SIG, BLITTER_WR, DDRCLK0, CLK33M, FIFO_MW, VA, nVWE, + nVRAS, nVCS, VCKE, nVCAS, FB_LE, FB_VDOE, SR_FIFO_WRE, SR_DDR_FB, + SR_DDR_WR, SR_DDRWR_D_SEL, SR_VDMP, VIDEO_DDR_TA, SR_BLITTER_DACK, BA, + DDRWR_D_SEL1, VDM_SEL, FB_AD); + +// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + input [31:0] FB_ADR; + input nFB_CS1, nFB_CS2, nFB_CS3, nFB_OE, FB_SIZE0, FB_SIZE1, nRSTO, + MAIN_CLK, FB_ALE, nFB_WR, DDR_SYNC_66M, CLR_FIFO; + input [15:0] VIDEO_RAM_CTR; + input [31:0] BLITTER_ADR; + input BLITTER_SIG, BLITTER_WR, DDRCLK0, CLK33M; + input [8:0] FIFO_MW; + output [12:0] VA; + output nVWE, nVRAS, nVCS, VCKE, nVCAS; + output [3:0] FB_LE; + output [3:0] FB_VDOE; + output SR_FIFO_WRE, SR_DDR_FB, SR_DDR_WR, SR_DDRWR_D_SEL; + output [7:0] SR_VDMP; + output VIDEO_DDR_TA, SR_BLITTER_DACK; + output [1:0] BA; + output DDRWR_D_SEL1; + output [3:0] VDM_SEL; + reg [3:0] FB_LE; + reg [3:0] FB_VDOE; + reg SR_DDR_FB, VIDEO_DDR_TA, SR_BLITTER_DACK; + inout [31:0] FB_AD; + +// START (NORMAL 8 CYCLES TOTAL = 60ns) +// CONFIG +// READ CPU UND BLITTER, +// WRITE CPU UND BLITTER +// READ FIFO +// CLOSE FIFO BANK +// REFRESH 10X7.5NS=75NS + wire [2:0] FB_REGDDR_; + wire [5:0] DDR_SM_; + wire LINE; + wire [3:0] FB_B; + wire [12:0] VA_P; + wire [1:0] BA_P; + wire [12:0] VA_S; + wire [1:0] BA_S; + wire [1:0] MCS; + wire [1:0] MCS_d; + wire CPU_DDR_SYNC, CPU_DDR_SYNC_d, CPU_DDR_SYNC_clk, DDR_SEL, DDR_CS, + DDR_CS_d, DDR_CS_clk, DDR_CS_ena, DDR_CONFIG, SR_DDR_WR_clk, + SR_DDRWR_D_SEL_clk; + wire [12:0] CPU_ROW_ADR; + wire [1:0] CPU_BA; + wire [9:0] CPU_COL_ADR; + wire CPU_SIG, CPU_REQ, CPU_REQ_d, CPU_REQ_clk, CPU_AC, CPU_AC_clk, BUS_CYC, + BUS_CYC_d, BUS_CYC_clk, BLITTER_REQ, BLITTER_REQ_d, BLITTER_REQ_clk, + BLITTER_AC, BLITTER_AC_clk; + wire [12:0] BLITTER_ROW_ADR; + wire [1:0] BLITTER_BA; + wire [9:0] BLITTER_COL_ADR; + wire FIFO_REQ, FIFO_REQ_d, FIFO_REQ_clk, FIFO_AC, FIFO_AC_clk; + wire [12:0] FIFO_ROW_ADR; + wire [1:0] FIFO_BA; + wire [9:0] FIFO_COL_ADR; + wire FIFO_ACTIVE, CLR_FIFO_SYNC, CLR_FIFO_SYNC_d, CLR_FIFO_SYNC_clk, + CLEAR_FIFO_CNT, CLEAR_FIFO_CNT_d, CLEAR_FIFO_CNT_clk, STOP, STOP_d, + STOP_clk, SR_FIFO_WRE_clk, FIFO_BANK_OK, FIFO_BANK_OK_d, + FIFO_BANK_OK_clk, DDR_REFRESH_ON; + wire [10:0] DDR_REFRESH_CNT; + wire [10:0] DDR_REFRESH_CNT_d; + wire DDR_REFRESH_REQ, DDR_REFRESH_REQ_d, DDR_REFRESH_REQ_clk; + wire [3:0] DDR_REFRESH_SIG; + wire [3:0] DDR_REFRESH_SIG_d; + wire REFRESH_TIME, REFRESH_TIME_d, REFRESH_TIME_clk; + wire [7:0] VIDEO_BASE_L_D; + wire [7:0] VIDEO_BASE_L_D_d; + wire VIDEO_BASE_L; + wire [7:0] VIDEO_BASE_M_D; + wire [7:0] VIDEO_BASE_M_D_d; + wire VIDEO_BASE_M; + wire [7:0] VIDEO_BASE_H_D; + wire [7:0] VIDEO_BASE_H_D_d; + wire VIDEO_BASE_H; + wire [2:0] VIDEO_BASE_X_D; + wire [2:0] VIDEO_BASE_X_D_d; + wire [7:0] VIDEO_BASE_X_D_FULL; + wire [22:0] VIDEO_ADR_CNT; + wire [22:0] VIDEO_ADR_CNT_d; + wire VIDEO_CNT_L, VIDEO_CNT_M, VIDEO_CNT_H; + wire [22:0] VIDEO_BASE_ADR; + wire [26:0] VIDEO_ACT_ADR; + wire vcc, gnd; + wire [7:0] u0_data; + wire u0_enabledt; + wire [7:0] u0_tridata; + wire [7:0] u1_data; + wire u1_enabledt; + wire [7:0] u1_tridata; + wire FIFO_BANK_OK_d_2, BUS_CYC_d_1, BA0_1, BA1_1, VA0_1, VA1_1, VA2_1, + VA3_1, VA4_1, VA5_1, VA6_1, VA7_1, VA8_1, VA9_1, VA10_1, VA11_1, + VA12_1, VIDEO_BASE_X_D0_ena_ctrl, VIDEO_BASE_X_D0_clk_ctrl, + VIDEO_BASE_H_D0_ena_ctrl, VIDEO_BASE_H_D0_clk_ctrl, + VIDEO_BASE_M_D0_ena_ctrl, VIDEO_BASE_M_D0_clk_ctrl, + VIDEO_BASE_L_D0_ena_ctrl, VIDEO_BASE_L_D0_clk_ctrl, + DDR_REFRESH_SIG0_ena_ctrl, DDR_REFRESH_SIG0_clk_ctrl, + DDR_REFRESH_CNT0_clk_ctrl, VIDEO_ADR_CNT0_ena_ctrl, + VIDEO_ADR_CNT0_clk_ctrl, DDR_SM_0_clk_ctrl, BA_P0_clk_ctrl, + VA_P0_clk_ctrl, BA_S0_clk_ctrl, VA_S0_clk_ctrl, MCS0_clk_ctrl, + SR_VDMP0_clk_ctrl, FB_REGDDR_0_clk_ctrl; + reg [2:0] FB_REGDDR__d; + reg [2:0] FB_REGDDR__q; + reg [5:0] DDR_SM__d; + reg [5:0] DDR_SM__q; + reg VCAS, VRAS, VWE; + reg [12:0] VA_P_d; + reg [12:0] VA_P_q; + reg [1:0] BA_P_d; + reg [1:0] BA_P_q; + reg [12:0] VA_S_d; + reg [12:0] VA_S_q; + reg [1:0] BA_S_d; + reg [1:0] BA_S_q; + reg [1:0] MCS_q; + reg CPU_DDR_SYNC_q, DDR_CS_q, SR_DDR_WR_d, SR_DDR_WR_q, SR_DDRWR_D_SEL_d, + SR_DDRWR_D_SEL_q; + reg [7:0] SR_VDMP_d; + reg [7:0] SR_VDMP_q; + reg CPU_REQ_q, CPU_AC_d, CPU_AC_q, BUS_CYC_q, BUS_CYC_END, BLITTER_REQ_q, + BLITTER_AC_d, BLITTER_AC_q, FIFO_REQ_q, FIFO_AC_d, FIFO_AC_q, + CLR_FIFO_SYNC_q, CLEAR_FIFO_CNT_q, STOP_q, SR_FIFO_WRE_d, + SR_FIFO_WRE_q, FIFO_BANK_OK_q, FIFO_BANK_NOT_OK; + reg [10:0] DDR_REFRESH_CNT_q; + reg DDR_REFRESH_REQ_q; + reg [3:0] DDR_REFRESH_SIG_q; + reg REFRESH_TIME_q; + reg [7:0] VIDEO_BASE_L_D_q; + reg [7:0] VIDEO_BASE_M_D_q; + reg [7:0] VIDEO_BASE_H_D_q; + reg [2:0] VIDEO_BASE_X_D_q; + reg [22:0] VIDEO_ADR_CNT_q; + reg FIFO_BANK_OK_d_1, BUS_CYC_d_2, BA0_2, BA1_2, VA0_2, VA1_2, VA2_2, VA3_2, + VA4_2, VA5_2, VA6_2, VA7_2, VA8_2, VA9_2, VA10_2, VA11_2, VA12_2; + + +// Sub Module Section + lpm_bustri_BYT u0 (.data(u0_data), .enabledt(u0_enabledt), + .tridata(u0_tridata)); + + lpm_bustri_BYT u1 (.data(u1_data), .enabledt(u1_enabledt), + .tridata(u1_tridata)); + + + assign SR_FIFO_WRE = SR_FIFO_WRE_q; + always @(posedge SR_FIFO_WRE_clk) + SR_FIFO_WRE_q <= SR_FIFO_WRE_d; + + assign SR_DDR_WR = SR_DDR_WR_q; + always @(posedge SR_DDR_WR_clk) + SR_DDR_WR_q <= SR_DDR_WR_d; + + assign SR_DDRWR_D_SEL = SR_DDRWR_D_SEL_q; + always @(posedge SR_DDRWR_D_SEL_clk) + SR_DDRWR_D_SEL_q <= SR_DDRWR_D_SEL_d; + + assign SR_VDMP = SR_VDMP_q; + always @(posedge SR_VDMP0_clk_ctrl) + SR_VDMP_q <= SR_VDMP_d; + + always @(posedge FB_REGDDR_0_clk_ctrl) + FB_REGDDR__q <= FB_REGDDR__d; + + always @(posedge DDR_SM_0_clk_ctrl) + DDR_SM__q <= DDR_SM__d; + + always @(posedge VA_P0_clk_ctrl) + VA_P_q <= VA_P_d; + + always @(posedge BA_P0_clk_ctrl) + BA_P_q <= BA_P_d; + + always @(posedge VA_S0_clk_ctrl) + VA_S_q <= VA_S_d; + + always @(posedge BA_S0_clk_ctrl) + BA_S_q <= BA_S_d; + + always @(posedge MCS0_clk_ctrl) + MCS_q <= MCS_d; + + always @(posedge CPU_DDR_SYNC_clk) + CPU_DDR_SYNC_q <= CPU_DDR_SYNC_d; + + always @(posedge DDR_CS_clk) + if (DDR_CS_ena) + DDR_CS_q <= DDR_CS_d; + + always @(posedge CPU_REQ_clk) + CPU_REQ_q <= CPU_REQ_d; + + always @(posedge CPU_AC_clk) + CPU_AC_q <= CPU_AC_d; + + always @(posedge BUS_CYC_clk) + BUS_CYC_q <= BUS_CYC_d; + + always @(posedge BLITTER_REQ_clk) + BLITTER_REQ_q <= BLITTER_REQ_d; + + always @(posedge BLITTER_AC_clk) + BLITTER_AC_q <= BLITTER_AC_d; + + always @(posedge FIFO_REQ_clk) + FIFO_REQ_q <= FIFO_REQ_d; + + always @(posedge FIFO_AC_clk) + FIFO_AC_q <= FIFO_AC_d; + + always @(posedge CLR_FIFO_SYNC_clk) + CLR_FIFO_SYNC_q <= CLR_FIFO_SYNC_d; + + always @(posedge CLEAR_FIFO_CNT_clk) + CLEAR_FIFO_CNT_q <= CLEAR_FIFO_CNT_d; + + always @(posedge STOP_clk) + STOP_q <= STOP_d; + + always @(posedge FIFO_BANK_OK_clk) + FIFO_BANK_OK_q <= FIFO_BANK_OK_d; + + always @(posedge DDR_REFRESH_CNT0_clk_ctrl) + DDR_REFRESH_CNT_q <= DDR_REFRESH_CNT_d; + + always @(posedge DDR_REFRESH_REQ_clk) + DDR_REFRESH_REQ_q <= DDR_REFRESH_REQ_d; + + always @(posedge DDR_REFRESH_SIG0_clk_ctrl) + if (DDR_REFRESH_SIG0_ena_ctrl) + DDR_REFRESH_SIG_q <= DDR_REFRESH_SIG_d; + + always @(posedge REFRESH_TIME_clk) + REFRESH_TIME_q <= REFRESH_TIME_d; + + always @(posedge VIDEO_BASE_L_D0_clk_ctrl) + if (VIDEO_BASE_L_D0_ena_ctrl) + VIDEO_BASE_L_D_q <= VIDEO_BASE_L_D_d; + + always @(posedge VIDEO_BASE_M_D0_clk_ctrl) + if (VIDEO_BASE_M_D0_ena_ctrl) + VIDEO_BASE_M_D_q <= VIDEO_BASE_M_D_d; + + always @(posedge VIDEO_BASE_H_D0_clk_ctrl) + if (VIDEO_BASE_H_D0_ena_ctrl) + VIDEO_BASE_H_D_q <= VIDEO_BASE_H_D_d; + + always @(posedge VIDEO_BASE_X_D0_clk_ctrl) + if (VIDEO_BASE_X_D0_ena_ctrl) + VIDEO_BASE_X_D_q <= VIDEO_BASE_X_D_d; + + always @(posedge VIDEO_ADR_CNT0_clk_ctrl) + if (VIDEO_ADR_CNT0_ena_ctrl) + VIDEO_ADR_CNT_q <= VIDEO_ADR_CNT_d; + +// Start of original equations + assign LINE = FB_SIZE0 & FB_SIZE1; + +// BYT SELECT +// ADR==0 +// LONG UND LINE + assign FB_B[0] = FB_ADR[1:0] == 2'b00 | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) + & (!FB_SIZE0)); + +// ADR==1 +// HIGH WORD +// LONG UND LINE + assign FB_B[1] = FB_ADR[1:0] == 2'b01 | (FB_SIZE1 & (!FB_SIZE0) & + (!FB_ADR[1])) | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) & (!FB_SIZE0)); + +// ADR==2 +// LONG UND LINE + assign FB_B[2] = FB_ADR[1:0] == 2'b10 | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) + & (!FB_SIZE0)); + +// ADR==3 +// LOW WORD +// LONG UND LINE + assign FB_B[3] = FB_ADR[1:0] == 2'b11 | (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) + | (FB_SIZE1 & FB_SIZE0) | ((!FB_SIZE1) & (!FB_SIZE0)); + +// CPU READ (REG DDR => CPU) AND WRITE (CPU => REG DDR) -------------------------------------------------- + assign FB_REGDDR_0_clk_ctrl = MAIN_CLK; + + + always @(FB_REGDDR__q or DDR_SEL or BUS_CYC_q or LINE or DDR_CS_q or nFB_OE + or MAIN_CLK or DDR_CONFIG or nFB_WR or vcc) begin + FB_REGDDR__d = FB_REGDDR__q; + {FB_VDOE[0], FB_VDOE[1]} = 2'b00; + {FB_LE[0], FB_LE[1], FB_VDOE[2], FB_LE[2], FB_VDOE[3], FB_LE[3], + VIDEO_DDR_TA, BUS_CYC_END} = 8'b0000_0000; + casex (FB_REGDDR__q) + 3'b000: begin + FB_LE[0] = !nFB_WR; + +// LOS WENN BEREIT ODER IMMER BEI LINE WRITE + if (BUS_CYC_q | (DDR_SEL & LINE & (!nFB_WR))) begin + FB_REGDDR__d = 3'b001; + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b001: begin + if (DDR_CS_q) begin + FB_LE[0] = !nFB_WR; + VIDEO_DDR_TA = vcc; + if (LINE) begin + FB_VDOE[0] = (!nFB_OE) & (!DDR_CONFIG); + FB_REGDDR__d = 3'b010; + end else begin + BUS_CYC_END = vcc; + FB_VDOE[0] = (!nFB_OE) & (!MAIN_CLK) & (!DDR_CONFIG); + FB_REGDDR__d = 3'b000; + end + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b010: begin + if (DDR_CS_q) begin + FB_VDOE[1] = (!nFB_OE) & (!DDR_CONFIG); + FB_LE[1] = !nFB_WR; + VIDEO_DDR_TA = vcc; + FB_REGDDR__d = 3'b011; + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b011: begin + if (DDR_CS_q) begin + FB_VDOE[2] = (!nFB_OE) & (!DDR_CONFIG); + FB_LE[2] = !nFB_WR; + +// BEI LINE WRITE EVT. WARTEN + if ((!BUS_CYC_q) & LINE & (!nFB_WR)) begin + FB_REGDDR__d = 3'b011; + end else begin + VIDEO_DDR_TA = vcc; + FB_REGDDR__d = 3'b100; + end + end else begin + FB_REGDDR__d = 3'b000; + end + end + 3'b100: begin + if (DDR_CS_q) begin + FB_VDOE[3] = (!nFB_OE) & (!MAIN_CLK) & (!DDR_CONFIG); + FB_LE[3] = !nFB_WR; + VIDEO_DDR_TA = vcc; + BUS_CYC_END = vcc; + FB_REGDDR__d = 3'b000; + end else begin + FB_REGDDR__d = 3'b000; + end + end + endcase + end + +// DDR STEUERUNG ----------------------------------------------------- +// VIDEO RAM CONTROL REGISTER (IST IN VIDEO_MUX_CTR) $F0000400: BIT 0: VCKE; 1: !nVCS ;2:REFRESH ON , (0=FIFO UND CNT CLEAR); 3: CONFIG; 8: FIFO_ACTIVE; + assign VCKE = VIDEO_RAM_CTR[0]; + assign nVCS = !VIDEO_RAM_CTR[1]; + assign DDR_REFRESH_ON = VIDEO_RAM_CTR[2]; + assign DDR_CONFIG = VIDEO_RAM_CTR[3]; + assign FIFO_ACTIVE = VIDEO_RAM_CTR[8]; + +// ------------------------------ + assign CPU_ROW_ADR = FB_ADR[26:14]; + assign CPU_BA = FB_ADR[13:12]; + assign CPU_COL_ADR = FB_ADR[11:2]; + assign nVRAS = !VRAS; + assign nVCAS = !VCAS; + assign nVWE = !VWE; + assign SR_DDR_WR_clk = DDRCLK0; + assign SR_DDRWR_D_SEL_clk = DDRCLK0; + assign SR_VDMP0_clk_ctrl = DDRCLK0; + assign SR_FIFO_WRE_clk = DDRCLK0; + assign CPU_AC_clk = DDRCLK0; + assign FIFO_AC_clk = DDRCLK0; + assign BLITTER_AC_clk = DDRCLK0; + assign DDRWR_D_SEL1 = BLITTER_AC_q; + +// SELECT LOGIC + assign DDR_SEL = FB_ALE & FB_AD[31:30] == 2'b01; + assign DDR_CS_clk = MAIN_CLK; + assign DDR_CS_ena = FB_ALE; + assign DDR_CS_d = DDR_SEL; + +// WENN READ ODER WRITE B,W,L DDR SOFORT ANFORDERN, BEI WRITE LINE SPÄTER +// NICHT LINE ODER READ SOFORT LOS WENN NICHT CONFIG +// CONFIG SOFORT LOS +// LINE WRITE SPÄTER + assign CPU_SIG = (DDR_SEL & (nFB_WR | (!LINE)) & (!DDR_CONFIG)) | (DDR_SEL & + DDR_CONFIG) | (FB_REGDDR__q == 3'b010 & (!nFB_WR)); + assign CPU_REQ_clk = DDR_SYNC_66M; + +// HALTEN BUS CYC BEGONNEN ODER FERTIG + assign CPU_REQ_d = CPU_SIG | (CPU_REQ_q & FB_REGDDR__q != 3'b010 & + FB_REGDDR__q != 3'b100 & (!BUS_CYC_END) & (!BUS_CYC_q)); + assign BUS_CYC_clk = DDRCLK0; + assign BUS_CYC_d_1 = BUS_CYC_q & (!BUS_CYC_END); + +// STATE MACHINE SYNCHRONISIEREN ----------------- + assign MCS0_clk_ctrl = DDRCLK0; + assign MCS_d[0] = MAIN_CLK; + assign MCS_d[1] = MCS_q[0]; + assign CPU_DDR_SYNC_clk = DDRCLK0; + +// NUR 1 WENN EIN + assign CPU_DDR_SYNC_d = MCS_q == 2'b10 & VCKE & (!nVCS); + +// ------------------------------------------------- + assign VA_S0_clk_ctrl = DDRCLK0; + assign BA_S0_clk_ctrl = DDRCLK0; + assign {VA12_1, VA11_1, VA10_1, VA9_1, VA8_1, VA7_1, VA6_1, VA5_1, VA4_1, + VA3_1, VA2_1, VA1_1, VA0_1} = VA_S_q; + assign {BA1_1, BA0_1} = BA_S_q; + assign VA_P0_clk_ctrl = DDRCLK0; + assign BA_P0_clk_ctrl = DDRCLK0; + +// DDR STATE MACHINE ----------------------------------------------- + assign DDR_SM_0_clk_ctrl = DDRCLK0; + + + always @(DDR_SM__q or DDR_REFRESH_REQ_q or CPU_DDR_SYNC_q or DDR_CONFIG or + CPU_ROW_ADR or FIFO_ROW_ADR or BLITTER_ROW_ADR or BLITTER_REQ_q or + BLITTER_WR or FIFO_AC_q or CPU_COL_ADR or BLITTER_COL_ADR or VA_S_q or + CPU_BA or BLITTER_BA or FB_B or CPU_AC_q or BLITTER_AC_q or + FIFO_BANK_OK_q or FIFO_MW or FIFO_REQ_q or VIDEO_ADR_CNT_q or + FIFO_COL_ADR or gnd or DDR_SEL or LINE or FIFO_BA or FB_AD or VA_P_q + or BA_P_q or CPU_REQ_q or nFB_WR or FB_SIZE0 or FB_SIZE1 or + DDR_REFRESH_SIG_q or vcc) begin + DDR_SM__d = DDR_SM__q; + BA_S_d = 2'b00; + VA_S_d = 13'b0_0000_0000_0000; + BA_P_d = 2'b00; + {VA_P_d[9], VA_P_d[8], VA_P_d[7], VA_P_d[6], VA_P_d[5], VA_P_d[4], + VA_P_d[3], VA_P_d[2], VA_P_d[1], VA_P_d[0], VA_P_d[10]} = + 11'b000_0000_0000; + SR_VDMP_d = 8'b0000_0000; + VA_P_d[12:11] = 2'b00; + {FIFO_BANK_OK_d_1, FIFO_AC_d, SR_DDR_FB, SR_BLITTER_DACK, BLITTER_AC_d, + SR_DDR_WR_d, SR_DDRWR_D_SEL_d, CPU_AC_d, VA12_2, VA11_2, VA9_2, + VA8_2, VA7_2, VA6_2, VA5_2, VA4_2, VA3_2, VA2_2, VA1_2, VA0_2, + BA1_2, BA0_2, SR_FIFO_WRE_d, BUS_CYC_d_2, VWE, VA10_2, + FIFO_BANK_NOT_OK, VCAS, VRAS} = + 29'b0_0000_0000_0000_0000_0000_0000_0000; + casex (DDR_SM__q) + 6'b00_0000: begin + if (DDR_REFRESH_REQ_q) begin + DDR_SM__d = 6'b01_1111; + +// SYNCHRON UND EIN? + end else if (CPU_DDR_SYNC_q) begin + +// JA + if (DDR_CONFIG) begin + DDR_SM__d = 6'b00_1000; + +// BEI WAIT UND LINE WRITE + end else if (CPU_REQ_q) begin + VA_S_d = CPU_ROW_ADR; + BA_S_d = CPU_BA; + CPU_AC_d = vcc; + BUS_CYC_d_2 = vcc; + DDR_SM__d = 6'b00_0010; + end else begin + +// FIFO IST DEFAULT + if (FIFO_REQ_q | (!BLITTER_REQ_q)) begin + VA_P_d = FIFO_ROW_ADR; + BA_P_d = FIFO_BA; + +// VORBESETZEN + FIFO_AC_d = vcc; + end else begin + VA_P_d = BLITTER_ROW_ADR; + BA_P_d = BLITTER_BA; + +// VORBESETZEN + BLITTER_AC_d = vcc; + end + DDR_SM__d = 6'b00_0001; + end + end else begin + +// NEIN ->SYNCHRONISIEREN + DDR_SM__d = 6'b00_0000; + end + end + 6'b00_0001: begin + +// SCHNELLZUGRIFF *** HIER IST PAGE IMMER NOT OK *** + if (DDR_SEL & (nFB_WR | (!LINE))) begin + VRAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = FB_AD[26:14]; + {BA1_2, BA0_2} = FB_AD[13:12]; + +// AUTO PRECHARGE DA NICHT FIFO PAGE + VA_S_d[10] = vcc; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + end else begin + VRAS = (FIFO_AC_q & FIFO_REQ_q) | (BLITTER_AC_q & + BLITTER_REQ_q); + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = VA_P_q; + {BA1_2, BA0_2} = BA_P_q; + VA_S_d[10] = !(FIFO_AC_q & FIFO_REQ_q); + FIFO_BANK_OK_d_1 = FIFO_AC_q & FIFO_REQ_q; + FIFO_AC_d = FIFO_AC_q & FIFO_REQ_q; + BLITTER_AC_d = BLITTER_AC_q & BLITTER_REQ_q; + end + DDR_SM__d = 6'b00_0011; + end + 6'b00_0010: begin + VRAS = vcc; + FIFO_BANK_NOT_OK = vcc; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + DDR_SM__d = 6'b00_0011; + end + 6'b00_0011: begin + CPU_AC_d = CPU_AC_q; + FIFO_AC_d = FIFO_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + if (((!nFB_WR) & CPU_AC_q) | (BLITTER_WR & BLITTER_AC_q)) begin + DDR_SM__d = 6'b01_0000; + +// CPU? + end else if (CPU_AC_q) begin + VA_S_d[9:0] = CPU_COL_ADR; + BA_S_d = CPU_BA; + DDR_SM__d = 6'b00_1110; + +// FIFO? + end else if (FIFO_AC_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_0110; + end else if (BLITTER_AC_q) begin + VA_S_d[9:0] = BLITTER_COL_ADR; + BA_S_d = BLITTER_BA; + DDR_SM__d = 6'b00_1110; + end else begin + +// READ + DDR_SM__d = 6'b00_0111; + end + end + 6'b00_1110: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VCAS = vcc; + +// READ DATEN FÜR CPU + SR_DDR_FB = CPU_AC_q; + +// BLITTER DACK AND BLITTER LATCH DATEN + SR_BLITTER_DACK = BLITTER_AC_q; + DDR_SM__d = 6'b00_1111; + end + 6'b00_1111: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// FIFO READ EINSCHIEBEN WENN BANK OK + if (FIFO_REQ_q & FIFO_BANK_OK_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + +// MANUEL PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// WRITE + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_0000: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// BLITTER ACK AND BLITTER LATCH DATEN + SR_BLITTER_DACK = BLITTER_AC_q; + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + DDR_SM__d = 6'b01_0001; + end + 6'b01_0001: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VA_S_d[9:0] = ({10{CPU_AC_q}} & CPU_COL_ADR) | ({10{BLITTER_AC_q}} + & BLITTER_COL_ADR); + +// AUTO PRECHARGE WENN NICHT FIFO PAGE + VA_S_d[10] = VA_S_q[10]; + BA_S_d = ({2{CPU_AC_q}} & CPU_BA) | ({2{BLITTER_AC_q}} & + BLITTER_BA); + +// BYTE ENABLE WRITE + SR_VDMP_d[7:4] = FB_B; + +// LINE ENABLE WRITE + SR_VDMP_d[3:0] = {4{LINE}} & 4'b1111; + DDR_SM__d = 6'b01_0010; + end + 6'b01_0010: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + VCAS = vcc; + VWE = vcc; + +// WRITE COMMAND CPU UND BLITTER IF WRITER + SR_DDR_WR_d = vcc; + +// 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_DDRWR_D_SEL_d = vcc; + +// WENN LINE DANN ACTIV + SR_VDMP_d = {8{LINE}} & 8'b1111_1111; + DDR_SM__d = 6'b01_0011; + end + 6'b01_0011: begin + CPU_AC_d = CPU_AC_q; + BLITTER_AC_d = BLITTER_AC_q; + +// WRITE COMMAND CPU UND BLITTER IF WRITE + SR_DDR_WR_d = vcc; + +// 2. HÄLFTE WRITE DATEN SELEKTIEREN + SR_DDRWR_D_SEL_d = vcc; + DDR_SM__d = 6'b01_0100; + end + 6'b01_0100: begin + DDR_SM__d = 6'b01_0101; + end + 6'b01_0101: begin + if (FIFO_REQ_q & FIFO_BANK_OK_q) begin + VA_S_d[9:0] = FIFO_COL_ADR; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// FIFO READ + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_0110: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + DDR_SM__d = 6'b01_0111; + end + 6'b01_0111: begin + if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end else begin + VA_S_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1000; + end + end else begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// NOCH OFFEN LASSEN + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_1000: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + DDR_SM__d = 6'b01_1001; + end + 6'b01_1001: begin + if (CPU_REQ_q & FIFO_MW > 9'b0_0000_0000) begin + +// ALLE PAGES SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end else if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE PAGES SCHLIESSEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end else begin + VA_S_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_S_d[10] = gnd; + BA_S_d = FIFO_BA; + DDR_SM__d = 6'b01_1010; + end + end else begin + +// ALLE PAGES SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1110; + end + end + 6'b01_1010: begin + VCAS = vcc; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + +// NOTFALL? + if (FIFO_MW < 9'b0_0000_0000) begin + +// JA-> + DDR_SM__d = 6'b01_0111; + end else begin + DDR_SM__d = 6'b01_1011; + end + end + 6'b01_1011: begin + if (FIFO_REQ_q) begin + +// NEUE PAGE? + if (VIDEO_ADR_CNT_q[7:0] == 8'b1111_1111) begin + +// ALLE BANKS SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end else begin + VA_P_d[9:0] = FIFO_COL_ADR + 10'b00_0000_0100; + +// NON AUTO PRECHARGE + VA_P_d[10] = gnd; + BA_P_d = FIFO_BA; + DDR_SM__d = 6'b01_1100; + end + end else begin + +// ALLE BANKS SCHLIESEN + VA_S_d[10] = vcc; + +// BANK SCHLIESSEN + DDR_SM__d = 6'b01_1101; + end + end + 6'b01_1100: begin + if (DDR_SEL & (nFB_WR | (!LINE)) & FB_AD[13:12] != FIFO_BA) begin + VRAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = FB_AD[26:14]; + {BA1_2, BA0_2} = FB_AD[13:12]; + CPU_AC_d = vcc; + +// BUS CYCLUS LOSTRETEN + BUS_CYC_d_2 = vcc; + +// AUTO PRECHARGE DA NICHT FIFO BANK + VA_S_d[10] = vcc; + DDR_SM__d = 6'b00_0011; + end else begin + VCAS = vcc; + {VA12_2, VA11_2, VA10_2, VA9_2, VA8_2, VA7_2, VA6_2, VA5_2, + VA4_2, VA3_2, VA2_2, VA1_2, VA0_2} = VA_P_q; + {BA1_2, BA0_2} = BA_P_q; + +// DATEN WRITE FIFO + SR_FIFO_WRE_d = vcc; + +// CONFIG CYCLUS + DDR_SM__d = 6'b01_1001; + end + end + 6'b00_1000: begin + DDR_SM__d = 6'b00_1001; + end + 6'b00_1001: begin + BUS_CYC_d_2 = CPU_REQ_q; + DDR_SM__d = 6'b00_1010; + end + 6'b00_1010: begin + if (CPU_REQ_q) begin + DDR_SM__d = 6'b00_1011; + end else begin + DDR_SM__d = 6'b00_0000; + end + end + 6'b00_1011: begin + DDR_SM__d = 6'b00_1100; + end + 6'b00_1100: begin + VA_S_d = FB_AD[12:0]; + BA_S_d = FB_AD[14:13]; + DDR_SM__d = 6'b00_1101; + end + 6'b00_1101: begin + +// NUR BEI LONG WRITE + VRAS = FB_AD[18] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// NUR BEI LONG WRITE + VCAS = FB_AD[17] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// NUR BEI LONG WRITE + VWE = FB_AD[16] & (!nFB_WR) & (!FB_SIZE0) & (!FB_SIZE1); + +// CLOSE FIFO BANK + DDR_SM__d = 6'b00_0111; + end + 6'b01_1101: begin + +// AUF NOT OK + FIFO_BANK_NOT_OK = vcc; + +// BÄNKE SCHLIESSEN + VRAS = vcc; + VWE = vcc; + DDR_SM__d = 6'b00_0110; + end + 6'b01_1110: begin + +// AUF NOT OK + FIFO_BANK_NOT_OK = vcc; + +// BÄNKE SCHLIESSEN + VRAS = vcc; + VWE = vcc; + +// REFRESH 70NS = 10 ZYCLEN + DDR_SM__d = 6'b00_0000; + end + 6'b01_1111: begin + +// EIN CYCLUS VORLAUF UM BANKS ZU SCHLIESSEN + if (DDR_REFRESH_SIG_q == 4'b1001) begin + +// ALLE BANKS SCHLIESSEN + VRAS = vcc; + VWE = vcc; + VA10_2 = vcc; + FIFO_BANK_NOT_OK = vcc; + DDR_SM__d = 6'b10_0001; + end else begin + VCAS = vcc; + VRAS = vcc; + DDR_SM__d = 6'b10_0000; + end + end + 6'b10_0000: begin + DDR_SM__d = 6'b10_0001; + end + 6'b10_0001: begin + DDR_SM__d = 6'b10_0010; + end + 6'b10_0010: begin + DDR_SM__d = 6'b10_0011; + end + 6'b10_0011: begin + +// LEERSCHLAUFE + DDR_SM__d = 6'b00_0100; + end + 6'b00_0100: begin + DDR_SM__d = 6'b00_0101; + end + 6'b00_0101: begin + DDR_SM__d = 6'b00_0110; + end + 6'b00_0110: begin + DDR_SM__d = 6'b00_0111; + end + 6'b00_0111: begin + DDR_SM__d = 6'b00_0000; + end + endcase + end + +// ------------------------------------------------------------- +// BLITTER ---------------------- +// --------------------------------------- + assign BLITTER_REQ_clk = DDRCLK0; + assign BLITTER_REQ_d = BLITTER_SIG & (!DDR_CONFIG) & VCKE & (!nVCS); + assign BLITTER_ROW_ADR = BLITTER_ADR[26:14]; + assign BLITTER_BA[1] = BLITTER_ADR[13]; + assign BLITTER_BA[0] = BLITTER_ADR[12]; + assign BLITTER_COL_ADR = BLITTER_ADR[11:2]; + +// ---------------------------------------------------------------------------- +// FIFO --------------------------------- +// ------------------------------------------------------ + assign FIFO_REQ_clk = DDRCLK0; + assign FIFO_REQ_d = (FIFO_MW < 9'b0_1100_1000 | (FIFO_MW < 9'b1_1111_0100 & + FIFO_REQ_q)) & FIFO_ACTIVE & (!CLEAR_FIFO_CNT_q) & (!STOP_q) & + (!DDR_CONFIG) & VCKE & (!nVCS); + assign FIFO_ROW_ADR = VIDEO_ADR_CNT_q[22:10]; + assign FIFO_BA[1] = VIDEO_ADR_CNT_q[9]; + assign FIFO_BA[0] = VIDEO_ADR_CNT_q[8]; + assign FIFO_COL_ADR = {VIDEO_ADR_CNT_q[7], VIDEO_ADR_CNT_q[6], + VIDEO_ADR_CNT_q[5], VIDEO_ADR_CNT_q[4], VIDEO_ADR_CNT_q[3], + VIDEO_ADR_CNT_q[2], VIDEO_ADR_CNT_q[1], VIDEO_ADR_CNT_q[0], 2'b00}; + assign FIFO_BANK_OK_clk = DDRCLK0; + assign FIFO_BANK_OK_d_2 = FIFO_BANK_OK_q & (!FIFO_BANK_NOT_OK); + +// ZÄHLER RÜCKSETZEN WENN CLR FIFO ---------------- + assign CLR_FIFO_SYNC_clk = DDRCLK0; + +// SYNCHRONISIEREN + assign CLR_FIFO_SYNC_d = CLR_FIFO; + assign CLEAR_FIFO_CNT_clk = DDRCLK0; + assign CLEAR_FIFO_CNT_d = CLR_FIFO_SYNC_q | (!FIFO_ACTIVE); + assign STOP_clk = DDRCLK0; + assign STOP_d = CLR_FIFO_SYNC_q | CLEAR_FIFO_CNT_q; + +// ZÄHLEN ----------------------------------------------- + assign VIDEO_ADR_CNT0_clk_ctrl = DDRCLK0; + assign VIDEO_ADR_CNT0_ena_ctrl = SR_FIFO_WRE_q | CLEAR_FIFO_CNT_q; + assign VIDEO_ADR_CNT_d = ({23{CLEAR_FIFO_CNT_q}} & VIDEO_BASE_ADR) | + ({23{!CLEAR_FIFO_CNT_q}} & (VIDEO_ADR_CNT_q + 23'h1)); + assign VIDEO_BASE_ADR[22:20] = VIDEO_BASE_X_D_q; + assign VIDEO_BASE_ADR[19:12] = VIDEO_BASE_H_D_q; + assign VIDEO_BASE_ADR[11:4] = VIDEO_BASE_M_D_q; + assign VIDEO_BASE_ADR[3:0] = VIDEO_BASE_L_D_q[7:4]; + assign VDM_SEL = VIDEO_BASE_L_D_q[3:0]; + +// AKTUELLE VIDEO ADRESSE + assign VIDEO_ACT_ADR[26:4] = VIDEO_ADR_CNT_q - {14'b00_0000_0000_0000, + FIFO_MW}; + assign VIDEO_ACT_ADR[3:0] = VDM_SEL; + +// --------------------------------------------------------------------------------------- +// REFRESH: IMMER 8 AUFS MAL, ANFORDERUNG ALLE 7.8us X 8 STCK. = 62.4us = 2059->2048 33MHz CLOCKS +// --------------------------------------------------------------------------------------- + assign DDR_REFRESH_CNT0_clk_ctrl = CLK33M; + +// ZÄHLEN 0-2047 + assign DDR_REFRESH_CNT_d = DDR_REFRESH_CNT_q + 11'b000_0000_0001; + assign REFRESH_TIME_clk = DDRCLK0; + +// SYNC + assign REFRESH_TIME_d = DDR_REFRESH_CNT_q == 11'b000_0000_0000 & + (!MAIN_CLK); + assign DDR_REFRESH_SIG0_clk_ctrl = DDRCLK0; + assign DDR_REFRESH_SIG0_ena_ctrl = REFRESH_TIME_q | DDR_SM__q == 6'b10_0011; + +// 9 STÜCK (8 REFRESH UND 1 ALS VORLAUF) +// MINUS 1 WENN GEMACHT + assign DDR_REFRESH_SIG_d = ({4{REFRESH_TIME_q}} & 4'b1001 & + {4{DDR_REFRESH_ON}} & {4{!DDR_CONFIG}}) | ({4{!REFRESH_TIME_q}} & + (DDR_REFRESH_SIG_q - 4'b0001) & {4{DDR_REFRESH_ON}} & + {4{!DDR_CONFIG}}); + assign DDR_REFRESH_REQ_clk = DDRCLK0; + assign DDR_REFRESH_REQ_d = DDR_REFRESH_SIG_q != 4'b0000 & DDR_REFRESH_ON & + (!REFRESH_TIME_q) & (!DDR_CONFIG); + +// --------------------------------------------------------- +// VIDEO REGISTER ----------------------- +// ------------------------------------------------------------------------------------------------------------------- + assign VIDEO_BASE_L_D0_clk_ctrl = MAIN_CLK; + +// 820D/2 + assign VIDEO_BASE_L = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C106; + +// SORRY, NUR 16 BYT GRENZEN + assign VIDEO_BASE_L_D_d = FB_AD[23:16]; + assign VIDEO_BASE_L_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_L & FB_B[1]; + assign VIDEO_BASE_M_D0_clk_ctrl = MAIN_CLK; + +// 8203/2 + assign VIDEO_BASE_M = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C101; + assign VIDEO_BASE_M_D_d = FB_AD[23:16]; + assign VIDEO_BASE_M_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_M & FB_B[3]; + assign VIDEO_BASE_H_D0_clk_ctrl = MAIN_CLK; + +// 8200-1/2 + assign VIDEO_BASE_H = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C100; + assign VIDEO_BASE_H_D_d = FB_AD[23:16]; + assign VIDEO_BASE_H_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_H & FB_B[1]; + assign VIDEO_BASE_X_D0_clk_ctrl = MAIN_CLK; + assign VIDEO_BASE_X_D_d = FB_AD[26:24]; + assign VIDEO_BASE_X_D0_ena_ctrl = (!nFB_WR) & VIDEO_BASE_H & FB_B[0]; + +// 8209/2 + assign VIDEO_CNT_L = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C104; + +// 8207/2 + assign VIDEO_CNT_M = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C103; + +// 8204,5/2 + assign VIDEO_CNT_H = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C102; + +// GE + assign VIDEO_BASE_X_D_FULL = {5'b0_0000, VIDEO_BASE_X_D_q}; + assign u0_data = ({8{VIDEO_BASE_H}} & VIDEO_BASE_X_D_FULL) | + ({8{VIDEO_CNT_H}} & {5'b0_0000, VIDEO_ACT_ADR[26:24]}); + assign u0_enabledt = (VIDEO_BASE_H | VIDEO_CNT_H) & (!nFB_OE); + assign FB_AD[31:24] = u0_tridata; + assign u1_data = ({8{VIDEO_BASE_L}} & VIDEO_BASE_L_D_q) | ({8{VIDEO_BASE_M}} + & VIDEO_BASE_M_D_q) | ({8{VIDEO_BASE_H}} & VIDEO_BASE_H_D_q) | + ({8{VIDEO_CNT_L}} & VIDEO_ACT_ADR[7:0]) | ({8{VIDEO_CNT_M}} & + VIDEO_ACT_ADR[15:8]) | ({8{VIDEO_CNT_H}} & VIDEO_ACT_ADR[23:16]); + assign u1_enabledt = (VIDEO_BASE_L | VIDEO_BASE_M | VIDEO_BASE_H | + VIDEO_CNT_L | VIDEO_CNT_M | VIDEO_CNT_H) & (!nFB_OE); + assign FB_AD[23:16] = u1_tridata; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign FIFO_BANK_OK_d = FIFO_BANK_OK_d_1 | FIFO_BANK_OK_d_2; + assign BUS_CYC_d = BUS_CYC_d_1 | BUS_CYC_d_2; + assign BA[0] = BA0_1 | BA0_2; + assign BA[1] = BA1_1 | BA1_2; + assign VA[0] = VA0_1 | VA0_2; + assign VA[1] = VA1_1 | VA1_2; + assign VA[2] = VA2_1 | VA2_2; + assign VA[3] = VA3_1 | VA3_2; + assign VA[4] = VA4_1 | VA4_2; + assign VA[5] = VA5_1 | VA5_2; + assign VA[6] = VA6_1 | VA6_2; + assign VA[7] = VA7_1 | VA7_2; + assign VA[8] = VA8_1 | VA8_2; + assign VA[9] = VA9_1 | VA9_2; + assign VA[10] = VA10_1 | VA10_2; + assign VA[11] = VA11_1 | VA11_2; + assign VA[12] = VA12_1 | VA12_2; + +// Define power signal(s) + assign vcc = 1'b1; + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/ahdl2v/VIDEO_MOD_MUX_CLUTCTR.tdf b/FPGA_quartus_GE/ahdl2v/VIDEO_MOD_MUX_CLUTCTR.tdf new file mode 100644 index 0000000..83c39d3 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/VIDEO_MOD_MUX_CLUTCTR.tdf @@ -0,0 +1,684 @@ +TITLE "VIDEO MODUSE UND CLUT CONTROL"; + +-- CREATED BY FREDI ASCHWANDEN + +-- GE http://quartushelp.altera.com/current/mergedProjects/hdl/ahdl/ahdl_elements_arithmetic_operators.htm + +INCLUDE "lpm_bustri_WORD.inc"; +INCLUDE "lpm_bustri_BYT.inc"; + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + +SUBDESIGN VIDEO_MOD_MUX_CLUTCTR +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + nRSTO : INPUT; + MAIN_CLK : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + nFB_CS3 : INPUT; + nFB_WR : INPUT; + nFB_OE : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + nFB_BURST : INPUT; + FB_ADR[31..0] : INPUT; + CLK33M : INPUT; + CLK25M : INPUT; + BLITTER_RUN : INPUT; + CLK_VIDEO : INPUT; + VR_D[8..0] : INPUT; + VR_BUSY : INPUT; + COLOR8 : OUTPUT; + ACP_CLUT_RD : OUTPUT; + COLOR1 : OUTPUT; + FALCON_CLUT_RDH : OUTPUT; + FALCON_CLUT_RDL : OUTPUT; + FALCON_CLUT_WR[3..0] : OUTPUT; + ST_CLUT_RD : OUTPUT; + ST_CLUT_WR[1..0] : OUTPUT; + CLUT_MUX_ADR[3..0] : OUTPUT; + HSYNC : OUTPUT; + VSYNC : OUTPUT; + nBLANK : OUTPUT; + nSYNC : OUTPUT; + nPD_VGA : OUTPUT; + FIFO_RDE : OUTPUT; + COLOR2 : OUTPUT; + COLOR4 : OUTPUT; + PIXEL_CLK : OUTPUT; + CLUT_OFF[3..0] : OUTPUT; + BLITTER_ON : OUTPUT; + VIDEO_RAM_CTR[15..0] : OUTPUT; + VIDEO_MOD_TA : OUTPUT; + CCR[23..0] : OUTPUT; + CCSEL[2..0] : OUTPUT; + ACP_CLUT_WR[3..0] : OUTPUT; + INTER_ZEI : OUTPUT; + DOP_FIFO_CLR : OUTPUT; + VIDEO_RECONFIG : OUTPUT; + VR_WR : OUTPUT; + VR_RD : OUTPUT; + CLR_FIFO : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + CLK17M :DFF; + CLK13M :DFF; + ACP_CLUT_CS :NODE; + ACP_CLUT :NODE; + VIDEO_PLL_CONFIG_CS :NODE; + VR_WR :DFF; + VR_DOUT[8..0] :DFFE; + VR_FRQ[7..0] :DFFE; + VIDEO_PLL_RECONFIG_CS :NODE; + VIDEO_RECONFIG :DFF; + FALCON_CLUT_CS :NODE; + FALCON_CLUT :NODE; + ST_CLUT_CS :NODE; + ST_CLUT :NODE; + FB_B[3..0] :NODE; + FB_16B[1..0] :NODE; + ST_SHIFT_MODE[1..0] :DFFE; + ST_SHIFT_MODE_CS :NODE; + FALCON_SHIFT_MODE[10..0] :DFFE; + FALCON_SHIFT_MODE_CS :NODE; + CLUT_MUX_ADR[3..0] :DFF; + CLUT_MUX_AV[1..0][3..0] :DFF; + ACP_VCTR_CS :NODE; + ACP_VCTR[31..0] :DFFE; + CCR_CS :NODE; + CCR[23..0] :DFFE; + ACP_VIDEO_ON :NODE; + SYS_CTR[6..0] :DFFE; + SYS_CTR_CS :NODE; + VDL_LOF[15..0] :DFFE; + VDL_LOF_CS :NODE; + VDL_LWD[15..0] :DFFE; + VDL_LWD_CS :NODE; +-- DIV. CONTROL REGISTER + CLUT_TA :DFF; -- BRAUCHT EIN WAITSTAT + HSYNC :DFF; + HSYNC_I[7..0] :DFF; + HSY_LEN[7..0] :DFF; -- LÄNGE HSYNC PULS IN PIXEL_CLK + HSYNC_START :DFF; + LAST :DFF; -- LETZTES PIXEL EINER ZEILE ERREICHT + VSYNC :DFF; + VSYNC_START :DFFE; + VSYNC_I[2..0] :DFFE; + nBLANK :DFF; + DISP_ON :DFF; + DPO_ZL :DFFE; + DPO_ON :DFF; + DPO_OFF :DFF; + VDTRON :DFF; + VDO_ZL :DFFE; + VDO_ON :DFF; + VDO_OFF :DFF; + VHCNT[11..0] :DFF; + SUB_PIXEL_CNT[6..0] :DFFE; + VVCNT[10..0] :DFFE; + VERZ[2..0][9..0] :DFF; + RAND[6..0] :DFF; + RAND_ON :NODE; + FIFO_RDE :DFF; + CLR_FIFO :DFFE; + START_ZEILE :DFFE; + SYNC_PIX :DFF; + SYNC_PIX1 :DFF; + SYNC_PIX2 :DFF; + CCSEL[2..0] :DFF; + COLOR16 :NODE; + COLOR24 :NODE; +-- ATARI RESOLUTION + ATARI_SYNC :NODE; + ATARI_HH[31..0] :DFFE; -- HORIZONTAL TIMING 640x480 + ATARI_HH_CS :NODE; + ATARI_VH[31..0] :DFFE; -- VERTIKAL TIMING 640x480 + ATARI_VH_CS :NODE; + ATARI_HL[31..0] :DFFE; -- HORIZONTAL TIMING 320x240 + ATARI_HL_CS :NODE; + ATARI_VL[31..0] :DFFE; -- VERTIKAL TIMING 320x240 + ATARI_VL_CS :NODE; +-- HORIZONTAL + RAND_LINKS[11..0] :NODE; + RAND_LINKS_FULL[23..0] :NODE; -- GE + HDIS_START[11..0] :NODE; + HDIS_END[11..0] :NODE; + RAND_RECHTS[11..0] :NODE; + HS_START[11..0] :NODE; + HS_START_FULL[23..0] :NODE; -- GE + H_TOTAL[11..0] :NODE; + H_TOTAL_FULL[23..0] :NODE; -- GE + HDIS_LEN[11..0] :NODE; + MULF[5..0] :NODE; + VDL_HHT[11..0] :DFFE; + VDL_HHT_CS :NODE; + VDL_HBE[11..0] :DFFE; + VDL_HBE_CS :NODE; + VDL_HDB[11..0] :DFFE; + VDL_HDB_CS :NODE; + VDL_HDE[11..0] :DFFE; + VDL_HDE_CS :NODE; + VDL_HBB[11..0] :DFFE; + VDL_HBB_CS :NODE; + VDL_HSS[11..0] :DFFE; + VDL_HSS_CS :NODE; +-- VERTIKAL + RAND_OBEN[10..0] :NODE; + VDIS_START[10..0] :NODE; + VDIS_END[10..0] :NODE; + RAND_UNTEN[10..0] :NODE; + VS_START[10..0] :NODE; + V_TOTAL[10..0] :NODE; + FALCON_VIDEO :NODE; + ST_VIDEO :NODE; + INTER_ZEI :DFF; + DOP_ZEI :DFF; + DOP_FIFO_CLR :DFF; + + VDL_VBE[10..0] :DFFE; + VDL_VBE_CS :NODE; + VDL_VDB[10..0] :DFFE; + VDL_VDB_CS :NODE; + VDL_VDE[10..0] :DFFE; + VDL_VDE_CS :NODE; + VDL_VBB[10..0] :DFFE; + VDL_VBB_CS :NODE; + VDL_VSS[10..0] :DFFE; + VDL_VSS_CS :NODE; + VDL_VFT[10..0] :DFFE; + VDL_VFT_CS :NODE; + VDL_VCT[8..0] :DFFE; + VDL_VCT_CS :NODE; + VDL_VMD[3..0] :DFFE; + VDL_VMD_CS :NODE; + +BEGIN +-- BYT SELECT 32 BIT + FB_B0 = FB_ADR[1..0]==0; -- ADR==0 + FB_B1 = FB_ADR[1..0]==1 -- ADR==1 + # FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HIGH WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_ADR[1..0]==2 -- ADR==2 + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_ADR[1..0]==3 -- ADR==3 + # FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LOW WORD + # FB_SIZE1 & FB_SIZE0 # !FB_SIZE1 & !FB_SIZE0; -- LONG UND LINE +-- BYT SELECT 16 BIT + FB_16B0 = FB_ADR[0]==0; -- ADR==0 + FB_16B1 = FB_ADR[0]==1 -- ADR==1 + # !(!FB_SIZE1 & FB_SIZE0); -- NOT BYT +-- ACP CLUT -- + ACP_CLUT_CS = !nFB_CS2 & FB_ADR[27..10]==H"0"; -- 0-3FF/1024 + ACP_CLUT_RD = ACP_CLUT_CS & !nFB_OE; + ACP_CLUT_WR[] = FB_B[] & ACP_CLUT_CS & !nFB_WR; + CLUT_TA.CLK = MAIN_CLK; + CLUT_TA = (ACP_CLUT_CS # FALCON_CLUT_CS # ST_CLUT_CS) & !VIDEO_MOD_TA; +--FALCON CLUT -- + FALCON_CLUT_CS = !nFB_CS1 & FB_ADR[19..10]==H"3E6"; -- $F9800/$400 + FALCON_CLUT_RDH = FALCON_CLUT_CS & !nFB_OE & !FB_ADR1; -- HIGH WORD + FALCON_CLUT_RDL = FALCON_CLUT_CS & !nFB_OE & FB_ADR1; -- LOW WORD + FALCON_CLUT_WR[1..0] = FB_16B[] & !FB_ADR1 & FALCON_CLUT_CS & !nFB_WR; + FALCON_CLUT_WR[3..2] = FB_16B[] & FB_ADR1 & FALCON_CLUT_CS & !nFB_WR; +-- ST CLUT -- + ST_CLUT_CS = !nFB_CS1 & FB_ADR[19..5]==H"7C12"; -- $F8240/$20 + ST_CLUT_RD = ST_CLUT_CS & !nFB_OE; + ST_CLUT_WR[] = FB_16B[] & ST_CLUT_CS & !nFB_WR; +-- ST SHIFT MODE + ST_SHIFT_MODE[].CLK = MAIN_CLK; + ST_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C130"; -- $F8260/2 + ST_SHIFT_MODE[] = FB_AD[25..24]; + ST_SHIFT_MODE[].ENA = ST_SHIFT_MODE_CS & !nFB_WR & FB_B0; + COLOR1 = ST_SHIFT_MODE[]==B"10" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- MONO + COLOR2 = ST_SHIFT_MODE[]==B"01" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 4 FARBEN + COLOR4 = ST_SHIFT_MODE[]==B"00" & !COLOR8 & ST_VIDEO & !ACP_VIDEO_ON; -- 16 FARBEN +-- FALCON SHIFT MODE + FALCON_SHIFT_MODE[].CLK = MAIN_CLK; + FALCON_SHIFT_MODE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C133"; -- $F8266/2 + FALCON_SHIFT_MODE[] = FB_AD[26..16]; + FALCON_SHIFT_MODE[10..8].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B2; + FALCON_SHIFT_MODE[7..0].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR & FB_B3; + CLUT_OFF[3..0] = FALCON_SHIFT_MODE[3..0] & COLOR4; + COLOR1 = FALCON_SHIFT_MODE10 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR8 = FALCON_SHIFT_MODE4 & !COLOR16 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR16 = FALCON_SHIFT_MODE8 & FALCON_VIDEO & !ACP_VIDEO_ON; + COLOR4 = !COLOR1 & !COLOR16 & !COLOR8 & FALCON_VIDEO & !ACP_VIDEO_ON; +-- ACP VIDEO CONTROL BIT 0=ACP VIDEO ON, 1=POWER ON VIDEO DAC, 2=ACP 24BIT,3=ACP 16BIT,4=ACP 8BIT,5=ACP 1BIT, 6=FALCON SHIFT MODE;7=ST SHIFT MODE;9..8= VCLK FREQUENZ;15=-SYNC ALLOWED; 31..16=VIDEO_RAM_CTR,25=RANDFARBE EINSCHALTEN, 26=STANDARD ATARI SYNCS + ACP_VCTR[].CLK = MAIN_CLK; + ACP_VCTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"100"; -- $400/4 + ACP_VCTR[31..8] = FB_AD[31..8]; + ACP_VCTR[5..0] = FB_AD[5..0]; + ACP_VCTR[31..24].ENA = ACP_VCTR_CS & FB_B0 & !nFB_WR; + ACP_VCTR[23..16].ENA = ACP_VCTR_CS & FB_B1 & !nFB_WR; + ACP_VCTR[15..8].ENA = ACP_VCTR_CS & FB_B2 & !nFB_WR; + ACP_VCTR[5..0].ENA = ACP_VCTR_CS & FB_B3 & !nFB_WR; + ACP_VIDEO_ON = ACP_VCTR0; + nPD_VGA = ACP_VCTR1; + -- ATARI MODUS + ATARI_SYNC = ACP_VCTR26; -- WENN 1 AUTOMATISCHE AUFLÖSUNG + -- HORIZONTAL TIMING 640x480 + ATARI_HH[].CLK = MAIN_CLK; + ATARI_HH_CS = !nFB_CS2 & FB_ADR[27..2]==H"104"; -- $410/4 + ATARI_HH[] = FB_AD[]; + ATARI_HH[31..24].ENA = ATARI_HH_CS & FB_B0 & !nFB_WR; + ATARI_HH[23..16].ENA = ATARI_HH_CS & FB_B1 & !nFB_WR; + ATARI_HH[15..8].ENA = ATARI_HH_CS & FB_B2 & !nFB_WR; + ATARI_HH[7..0].ENA = ATARI_HH_CS & FB_B3 & !nFB_WR; + -- VERTIKAL TIMING 640x480 + ATARI_VH[].CLK = MAIN_CLK; + ATARI_VH_CS = !nFB_CS2 & FB_ADR[27..2]==H"105"; -- $414/4 + ATARI_VH[] = FB_AD[]; + ATARI_VH[31..24].ENA = ATARI_VH_CS & FB_B0 & !nFB_WR; + ATARI_VH[23..16].ENA = ATARI_VH_CS & FB_B1 & !nFB_WR; + ATARI_VH[15..8].ENA = ATARI_VH_CS & FB_B2 & !nFB_WR; + ATARI_VH[7..0].ENA = ATARI_VH_CS & FB_B3 & !nFB_WR; + -- HORIZONTAL TIMING 320x240 + ATARI_HL[].CLK = MAIN_CLK; + ATARI_HL_CS = !nFB_CS2 & FB_ADR[27..2]==H"106"; -- $418/4 + ATARI_HL[] = FB_AD[]; + ATARI_HL[31..24].ENA = ATARI_HL_CS & FB_B0 & !nFB_WR; + ATARI_HL[23..16].ENA = ATARI_HL_CS & FB_B1 & !nFB_WR; + ATARI_HL[15..8].ENA = ATARI_HL_CS & FB_B2 & !nFB_WR; + ATARI_HL[7..0].ENA = ATARI_HL_CS & FB_B3 & !nFB_WR; + -- VERTIKAL TIMING 320x240 + ATARI_VL[].CLK = MAIN_CLK; + ATARI_VL_CS = !nFB_CS2 & FB_ADR[27..2]==H"107"; -- $41C/4 + ATARI_VL[] = FB_AD[]; + ATARI_VL[31..24].ENA = ATARI_VL_CS & FB_B0 & !nFB_WR; + ATARI_VL[23..16].ENA = ATARI_VL_CS & FB_B1 & !nFB_WR; + ATARI_VL[15..8].ENA = ATARI_VL_CS & FB_B2 & !nFB_WR; + ATARI_VL[7..0].ENA = ATARI_VL_CS & FB_B3 & !nFB_WR; +-- VIDEO PLL CONFIG + VIDEO_PLL_CONFIG_CS = !nFB_CS2 & FB_ADR[27..9]==H"3" & FB_B0 & FB_B1; -- $(F)000'0600-7FF ->6/2 WORD RESP LONG ONLY + VR_WR.CLK = MAIN_CLK; + VR_WR = VIDEO_PLL_CONFIG_CS & !nFB_WR & !VR_BUSY & !VR_WR; + VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & !VR_BUSY; + VR_DOUT[].CLK = MAIN_CLK; + VR_DOUT[].ENA = !VR_BUSY; + VR_DOUT[] = VR_D[]; + VR_FRQ[].CLK = MAIN_CLK; + VR_FRQ[].ENA = VR_WR & FB_ADR[8..0]==H"04"; + VR_FRQ[] = FB_AD[23..16]; +-- VIDEO PLL RECONFIG + VIDEO_PLL_RECONFIG_CS = !nFB_CS2 & FB_ADR[27..0]==H"800" & FB_B0; -- $(F)000'0800 + VIDEO_RECONFIG.CLK = MAIN_CLK; + VIDEO_RECONFIG = VIDEO_PLL_RECONFIG_CS & !nFB_WR & !VR_BUSY & !VIDEO_RECONFIG; +------------------------------------------------------------------------------------------------------------------------ + VIDEO_RAM_CTR[] = ACP_VCTR[31..16]; +-------------- COLOR MODE IM ACP SETZEN + COLOR1 = ACP_VCTR5 & !ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR8 = ACP_VCTR4 & !ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR16 = ACP_VCTR3 & !ACP_VCTR2 & ACP_VIDEO_ON; + COLOR24 = ACP_VCTR2 & ACP_VIDEO_ON; + ACP_CLUT = ACP_VIDEO_ON & (COLOR1 # COLOR8) # ST_VIDEO & COLOR1; +-- ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER + ACP_VCTR7 = FALCON_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR6 = ST_SHIFT_MODE_CS & !nFB_WR & !ACP_VIDEO_ON; + ACP_VCTR[7..6].ENA = FALCON_SHIFT_MODE_CS & !nFB_WR # ST_SHIFT_MODE_CS & !nFB_WR # ACP_VCTR_CS & FB_B3 & !nFB_WR & FB_AD0; + FALCON_VIDEO = ACP_VCTR7; + FALCON_CLUT = FALCON_VIDEO & !ACP_VIDEO_ON & !COLOR16; + ST_VIDEO = ACP_VCTR6; + ST_CLUT = ST_VIDEO & !ACP_VIDEO_ON & !FALCON_CLUT & !COLOR1; + CCSEL[].CLK = PIXEL_CLK; + CCSEL[] = B"000" & ST_CLUT -- ONLY FOR INFORMATION + # B"001" & FALCON_CLUT + # B"100" & ACP_CLUT + # B"101" & COLOR16 + # B"110" & COLOR24 + # B"111" & RAND_ON; +-- DIVERSE (VIDEO)-REGISTER ---------------------------- +-- RANDFARBE + CCR[].CLK = MAIN_CLK; + CCR_CS = !nFB_CS2 & FB_ADR[27..2]==H"101"; -- $404/4 + CCR[] = FB_AD[23..0]; + CCR[23..16].ENA = CCR_CS & FB_B1 & !nFB_WR; + CCR[15..8].ENA = CCR_CS & FB_B2 & !nFB_WR; + CCR[7..0].ENA = CCR_CS & FB_B3 & !nFB_WR; +--SYS CTR + SYS_CTR_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C003"; -- $8006/2 + SYS_CTR[].CLK = MAIN_CLK; + SYS_CTR[6..0] = FB_AD[22..16]; + SYS_CTR[6..0].ENA = SYS_CTR_CS & !nFB_WR & FB_B3; + BLITTER_ON = !SYS_CTR3; +--VDL_LOF + VDL_LOF_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C107"; -- $820E/2 + VDL_LOF[].CLK = MAIN_CLK; + VDL_LOF[] = FB_AD[31..16]; + VDL_LOF[15..8].ENA = VDL_LOF_CS & !nFB_WR & FB_B2; + VDL_LOF[7..0].ENA = VDL_LOF_CS & !nFB_WR & FB_B3; +--VDL_LWD + VDL_LWD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C108"; -- $8210/2 + VDL_LWD[].CLK = MAIN_CLK; + VDL_LWD[] = FB_AD[31..16]; + VDL_LWD[15..8].ENA = VDL_LWD_CS & !nFB_WR & FB_B0; + VDL_LWD[7..0].ENA = VDL_LWD_CS & !nFB_WR & FB_B1; +-- HORIZONTAL +-- VDL_HHT + VDL_HHT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C141"; -- $8282/2 + VDL_HHT[].CLK = MAIN_CLK; + VDL_HHT[] = FB_AD[27..16]; + VDL_HHT[11..8].ENA = VDL_HHT_CS & !nFB_WR & FB_B2; + VDL_HHT[7..0].ENA = VDL_HHT_CS & !nFB_WR & FB_B3; +-- VDL_HBE + VDL_HBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C143"; -- $8286/2 + VDL_HBE[].CLK = MAIN_CLK; + VDL_HBE[] = FB_AD[27..16]; + VDL_HBE[11..8].ENA = VDL_HBE_CS & !nFB_WR & FB_B2; + VDL_HBE[7..0].ENA = VDL_HBE_CS & !nFB_WR & FB_B3; +-- VDL_HDB + VDL_HDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C144"; -- $8288/2 + VDL_HDB[].CLK = MAIN_CLK; + VDL_HDB[] = FB_AD[27..16]; + VDL_HDB[11..8].ENA = VDL_HDB_CS & !nFB_WR & FB_B0; + VDL_HDB[7..0].ENA = VDL_HDB_CS & !nFB_WR & FB_B1; +-- VDL_HDE + VDL_HDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C145"; -- $828A/2 + VDL_HDE[].CLK = MAIN_CLK; + VDL_HDE[] = FB_AD[27..16]; + VDL_HDE[11..8].ENA = VDL_HDE_CS & !nFB_WR & FB_B2; + VDL_HDE[7..0].ENA = VDL_HDE_CS & !nFB_WR & FB_B3; +-- VDL_HBB + VDL_HBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C142"; -- $8284/2 + VDL_HBB[].CLK = MAIN_CLK; + VDL_HBB[] = FB_AD[27..16]; + VDL_HBB[11..8].ENA = VDL_HBB_CS & !nFB_WR & FB_B0; + VDL_HBB[7..0].ENA = VDL_HBB_CS & !nFB_WR & FB_B1; +-- VDL_HSS + VDL_HSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C146"; -- $828C/2 + VDL_HSS[].CLK = MAIN_CLK; + VDL_HSS[] = FB_AD[27..16]; + VDL_HSS[11..8].ENA = VDL_HSS_CS & !nFB_WR & FB_B0; + VDL_HSS[7..0].ENA = VDL_HSS_CS & !nFB_WR & FB_B1; +-- VERTIKAL +-- VDL_VBE + VDL_VBE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C153"; -- $82A6/2 + VDL_VBE[].CLK = MAIN_CLK; + VDL_VBE[] = FB_AD[26..16]; + VDL_VBE[10..8].ENA = VDL_VBE_CS & !nFB_WR & FB_B2; + VDL_VBE[7..0].ENA = VDL_VBE_CS & !nFB_WR & FB_B3; +-- VDL_VDB + VDL_VDB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C154"; -- $82A8/2 + VDL_VDB[].CLK = MAIN_CLK; + VDL_VDB[] = FB_AD[26..16]; + VDL_VDB[10..8].ENA = VDL_VDB_CS & !nFB_WR & FB_B0; + VDL_VDB[7..0].ENA = VDL_VDB_CS & !nFB_WR & FB_B1; +-- VDL_VDE + VDL_VDE_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C155"; -- $82AA/2 + VDL_VDE[].CLK = MAIN_CLK; + VDL_VDE[] = FB_AD[26..16]; + VDL_VDE[10..8].ENA = VDL_VDE_CS & !nFB_WR & FB_B2; + VDL_VDE[7..0].ENA = VDL_VDE_CS & !nFB_WR & FB_B3; +-- VDL_VBB + VDL_VBB_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C152"; -- $82A4/2 + VDL_VBB[].CLK = MAIN_CLK; + VDL_VBB[] = FB_AD[26..16]; + VDL_VBB[10..8].ENA = VDL_VBB_CS & !nFB_WR & FB_B0; + VDL_VBB[7..0].ENA = VDL_VBB_CS & !nFB_WR & FB_B1; +-- VDL_VSS + VDL_VSS_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C156"; -- $82AC/2 + VDL_VSS[].CLK = MAIN_CLK; + VDL_VSS[] = FB_AD[26..16]; + VDL_VSS[10..8].ENA = VDL_VSS_CS & !nFB_WR & FB_B0; + VDL_VSS[7..0].ENA = VDL_VSS_CS & !nFB_WR & FB_B1; +-- VDL_VFT + VDL_VFT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C151"; -- $82A2/2 + VDL_VFT[].CLK = MAIN_CLK; + VDL_VFT[] = FB_AD[26..16]; + VDL_VFT[10..8].ENA = VDL_VFT_CS & !nFB_WR & FB_B2; + VDL_VFT[7..0].ENA = VDL_VFT_CS & !nFB_WR & FB_B3; +-- VDL_VCT + VDL_VCT_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C160"; -- $82C0/2 + VDL_VCT[].CLK = MAIN_CLK; + VDL_VCT[] = FB_AD[24..16]; + VDL_VCT[8].ENA = VDL_VCT_CS & !nFB_WR & FB_B0; + VDL_VCT[7..0].ENA = VDL_VCT_CS & !nFB_WR & FB_B1; +-- VDL_VMD + VDL_VMD_CS = !nFB_CS1 & FB_ADR[19..1]==H"7C161"; -- $82C2/2 + VDL_VMD[].CLK = MAIN_CLK; + VDL_VMD[] = FB_AD[19..16]; + VDL_VMD[3..0].ENA = VDL_VMD_CS & !nFB_WR & FB_B3; +--- REGISTER OUT + FB_AD[31..16] = lpm_bustri_WORD( + ST_SHIFT_MODE_CS & (0,ST_SHIFT_MODE[],B"00000000") + # FALCON_SHIFT_MODE_CS & (0,FALCON_SHIFT_MODE[]) + # SYS_CTR_CS & (B"100000000",SYS_CTR[6..4],!BLITTER_RUN,SYS_CTR[2..0]) + # VDL_LOF_CS & VDL_LOF[] + # VDL_LWD_CS & VDL_LWD[] + # VDL_HBE_CS & (0,VDL_HBE[]) + # VDL_HDB_CS & (0,VDL_HDB[]) + # VDL_HDE_CS & (0,VDL_HDE[]) + # VDL_HBB_CS & (0,VDL_HBB[]) + # VDL_HSS_CS & (0,VDL_HSS[]) + # VDL_HHT_CS & (0,VDL_HHT[]) + # VDL_VBE_CS & (0,VDL_VBE[]) + # VDL_VDB_CS & (0,VDL_VDB[]) + # VDL_VDE_CS & (0,VDL_VDE[]) + # VDL_VBB_CS & (0,VDL_VBB[]) + # VDL_VSS_CS & (0,VDL_VSS[]) + # VDL_VFT_CS & (0,VDL_VFT[]) + # VDL_VCT_CS & (0,VDL_VCT[]) + # VDL_VMD_CS & (0,VDL_VMD[]) + # ACP_VCTR_CS & ACP_VCTR[31..16] + # ATARI_HH_CS & ATARI_HH[31..16] + # ATARI_VH_CS & ATARI_VH[31..16] + # ATARI_HL_CS & ATARI_HL[31..16] + # ATARI_VL_CS & ATARI_VL[31..16] + # CCR_CS & (0,CCR[23..16]) + # VIDEO_PLL_CONFIG_CS & (0,VR_DOUT[]) + # VIDEO_PLL_RECONFIG_CS & (VR_BUSY,B"0000",VR_WR,VR_RD,VIDEO_RECONFIG,H"FA") + ,(ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # CCR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS # VIDEO_PLL_CONFIG_CS # VIDEO_PLL_RECONFIG_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS) & !nFB_OE); + + FB_AD[15..0] = lpm_bustri_WORD( + ACP_VCTR_CS & ACP_VCTR[15..0] + # ATARI_HH_CS & ATARI_HH[15..0] + # ATARI_VH_CS & ATARI_VH[15..0] + # ATARI_HL_CS & ATARI_HL[15..0] + # ATARI_VL_CS & ATARI_VL[15..0] + # CCR_CS & CCR[15..0] + ,(ACP_VCTR_CS # CCR_CS # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS ) & !nFB_OE); + + VIDEO_MOD_TA = CLUT_TA # ST_SHIFT_MODE_CS # FALCON_SHIFT_MODE_CS # ACP_VCTR_CS # SYS_CTR_CS # VDL_LOF_CS # VDL_LWD_CS + # VDL_HBE_CS # VDL_HDB_CS # VDL_HDE_CS # VDL_HBB_CS # VDL_HSS_CS # VDL_HHT_CS + # ATARI_HH_CS # ATARI_VH_CS # ATARI_HL_CS # ATARI_VL_CS + # VDL_VBE_CS # VDL_VDB_CS # VDL_VDE_CS # VDL_VBB_CS # VDL_VSS_CS # VDL_VFT_CS # VDL_VCT_CS # VDL_VMD_CS; + +-- VIDEO AUSGABE SETZEN + CLK17M.CLK = CLK33M; + CLK17M = !CLK17M; + CLK13M.CLK = CLK25M; + CLK13M = !CLK13M; + PIXEL_CLK = CLK13M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # CLK17M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # CLK25M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # CLK33M & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # CLK25M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # CLK33M & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # CLK_VIDEO & ACP_VIDEO_ON & ACP_VCTR[9]; +-------------------------------------------------------------- +-- HORIZONTALE SYNC LÄNGE in PIXEL_CLK +---------------------------------------------------------------- + HSY_LEN[].CLK = MAIN_CLK; + HSY_LEN[] = 14 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & VDL_VCT2 # VDL_VCT0) + # 16 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & ( VDL_VMD2 & !VDL_VCT2 # VDL_VCT0) + # 28 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & VDL_VCT2 & !VDL_VCT0 + # 32 & !ACP_VIDEO_ON & (FALCON_VIDEO # ST_VIDEO) & !VDL_VMD2 & !VDL_VCT2 & !VDL_VCT0 + # 28 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"00" + # 32 & ACP_VIDEO_ON & ACP_VCTR[9..8]==B"01" + # 16 + (0,VR_FRQ[7..1]) & ACP_VIDEO_ON & ACP_VCTR[9]; -- hsync puls length in pixeln=frequenz/ = 500ns + + MULF[] = 2 & !ST_VIDEO & VDL_VMD2 -- MULTIPLIKATIONS FAKTOR + # 4 & !ST_VIDEO & !VDL_VMD2 + # 16 & ST_VIDEO & VDL_VMD2 + # 32 & ST_VIDEO & !VDL_VMD2; + + + HDIS_LEN[] = 320 & VDL_VMD2 -- BREITE IN PIXELN + # 640 & !VDL_VMD2; + +-- DOPPELZEILENMODUS + DOP_ZEI.CLK = MAIN_CLK; + DOP_ZEI = VDL_VMD0 & ST_VIDEO; -- ZEILENVERDOPPELUNG EIN AUS + INTER_ZEI.CLK = PIXEL_CLK; + INTER_ZEI = DOP_ZEI & VVCNT0!=VDIS_START0 & VVCNT[]!=0 & VHCNT[]<(HDIS_END[]-1) -- EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC + # DOP_ZEI & VVCNT0==VDIS_START0 & VVCNT[]!=0 & VHCNT[]>(HDIS_END[]-2); -- EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC + DOP_FIFO_CLR.CLK = PIXEL_CLK; + DOP_FIFO_CLR = INTER_ZEI & HSYNC_START # SYNC_PIX; -- DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START + + RAND_LINKS_FULL[] = VDL_HBE[] * (0,MULF[5..1]); -- GE + HS_START_FULL[] = (VDL_HHT[]+1+VDL_HSS[]) * (0,MULF[5..1]); -- GE + H_TOTAL_FULL[] = (VDL_HHT[]+2) * (0,MULF[]); -- GE + + RAND_LINKS[] = VDL_HBE[] & ACP_VIDEO_ON + # 21 & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # 42 & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # RAND_LINKS_FULL[11..0] & !ACP_VIDEO_ON & !ATARI_SYNC; -- + HDIS_START[] = VDL_HDB[] & ACP_VIDEO_ON + # RAND_LINKS[]+1 & !ACP_VIDEO_ON; -- + HDIS_END[] = VDL_HDE[] & ACP_VIDEO_ON + # RAND_LINKS[]+HDIS_LEN[] & !ACP_VIDEO_ON; -- + RAND_RECHTS[] = VDL_HBB[] & ACP_VIDEO_ON + # HDIS_END[]+1 & !ACP_VIDEO_ON; -- + HS_START[] = VDL_HSS[] & ACP_VIDEO_ON + # ATARI_HL[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[11..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # HS_START_FULL[11..0] & !ACP_VIDEO_ON & !ATARI_SYNC; -- + H_TOTAL[] = VDL_HHT[] & ACP_VIDEO_ON + # ATARI_HL[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_HH[27..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # H_TOTAL_FULL[11..0] & !ACP_VIDEO_ON & !ATARI_SYNC; -- + + RAND_OBEN[] = VDL_VBE[] & ACP_VIDEO_ON + # 31 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_START[] = VDL_VDB[] & ACP_VIDEO_ON + # 32 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VDB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VDIS_END[] = VDL_VDE[] & ACP_VIDEO_ON + # 431 & !ACP_VIDEO_ON & ATARI_SYNC & ST_VIDEO + # 511 & !ACP_VIDEO_ON & ATARI_SYNC & !ST_VIDEO + # (0,VDL_VDE[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + RAND_UNTEN[] = VDL_VBB[] & ACP_VIDEO_ON + # VDIS_END[]+1 & !ACP_VIDEO_ON & ATARI_SYNC + # (0,VDL_VBB[10..1])+1 & !ACP_VIDEO_ON & !ATARI_SYNC; + VS_START[] = VDL_VSS[] & ACP_VIDEO_ON + # ATARI_VL[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[10..0] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VSS[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; + V_TOTAL[] = VDL_VFT[] & ACP_VIDEO_ON + # ATARI_VL[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & VDL_VMD2 + # ATARI_VH[26..16] & !ACP_VIDEO_ON & ATARI_SYNC & !VDL_VMD2 + # (0,VDL_VFT[10..1]) & !ACP_VIDEO_ON & !ATARI_SYNC; +-- ZÄHLER + LAST.CLK = PIXEL_CLK; + LAST = VHCNT[]==(H_TOTAL[]-2); + VHCNT[].CLK = PIXEL_CLK; + VHCNT[] = (VHCNT[] + 1) & !LAST; + VVCNT[].CLK = PIXEL_CLK; + VVCNT[].ENA = LAST; + VVCNT[] = (VVCNT[] + 1) & (VVCNT[]!=V_TOTAL[]-1); +-- DISPLAY ON OFF + DPO_ZL.CLK = PIXEL_CLK; + DPO_ZL = (VVCNT[]>RAND_OBEN[]-1) & (VVCNT[]=(VDIS_START[]-1)) & (VVCNT[]6/2 WORD RESP LONG ONLY + assign VIDEO_PLL_CONFIG_CS = (!nFB_CS2) & FB_ADR[27:9] == 19'h3 & FB_B[0] & + FB_B[1]; + assign VR_WR_clk = MAIN_CLK; + assign VR_WR_d = VIDEO_PLL_CONFIG_CS & (!nFB_WR) & (!VR_BUSY) & (!VR_WR_q); + assign VR_RD = VIDEO_PLL_CONFIG_CS & nFB_WR & (!VR_BUSY); + assign VR_DOUT0_clk_ctrl = MAIN_CLK; + assign VR_DOUT0_ena_ctrl = !VR_BUSY; + assign VR_DOUT_d = VR_D; + assign VR_FRQ0_clk_ctrl = MAIN_CLK; + assign VR_FRQ0_ena_ctrl = VR_WR_q & FB_ADR[8:0] == 9'b0_0000_0100; + assign VR_FRQ_d = FB_AD[23:16]; + +// VIDEO PLL RECONFIG +// $(F)000'0800 + assign VIDEO_PLL_RECONFIG_CS = (!nFB_CS2) & FB_ADR[27:0] == 28'h800 & + FB_B[0]; + assign VIDEO_RECONFIG_clk = MAIN_CLK; + assign VIDEO_RECONFIG_d = VIDEO_PLL_RECONFIG_CS & (!nFB_WR) & (!VR_BUSY) & + (!VIDEO_RECONFIG_q); + +// ---------------------------------------------------------------------------------------------------------------------- + assign VIDEO_RAM_CTR = ACP_VCTR_q[31:16]; + +// ------------ COLOR MODE IM ACP SETZEN + assign COLOR1_3 = ACP_VCTR_q[5] & (!ACP_VCTR_q[4]) & (!ACP_VCTR_q[3]) & + (!ACP_VCTR_q[2]) & ACP_VIDEO_ON; + assign COLOR8_2 = ACP_VCTR_q[4] & (!ACP_VCTR_q[3]) & (!ACP_VCTR_q[2]) & + ACP_VIDEO_ON; + assign COLOR16_2 = ACP_VCTR_q[3] & (!ACP_VCTR_q[2]) & ACP_VIDEO_ON; + assign COLOR24 = ACP_VCTR_q[2] & ACP_VIDEO_ON; + assign ACP_CLUT = (ACP_VIDEO_ON & (COLOR1 | COLOR8)) | (ST_VIDEO & COLOR1); + +// ST ODER FALCON SHIFT MODE SETZEN WENN WRITE X..SHIFT REGISTER + assign ACP_VCTR_d[7] = FALCON_SHIFT_MODE_CS & (!nFB_WR) & (!ACP_VIDEO_ON); + assign ACP_VCTR_d[6] = ST_SHIFT_MODE_CS & (!nFB_WR) & (!ACP_VIDEO_ON); + assign ACP_VCTR6_ena_ctrl = (FALCON_SHIFT_MODE_CS & (!nFB_WR)) | + (ST_SHIFT_MODE_CS & (!nFB_WR)) | (ACP_VCTR_CS & FB_B[3] & (!nFB_WR) & + FB_AD[0]); + assign FALCON_VIDEO = ACP_VCTR_q[7]; + assign FALCON_CLUT = FALCON_VIDEO & (!ACP_VIDEO_ON) & (!COLOR16); + assign ST_VIDEO = ACP_VCTR_q[6]; + assign ST_CLUT = ST_VIDEO & (!ACP_VIDEO_ON) & (!FALCON_CLUT) & (!COLOR1); + assign CCSEL0_clk_ctrl = PIXEL_CLK; + +// ONLY FOR INFORMATION + assign CCSEL_d = (3'b000 & {3{ST_CLUT}}) | (3'b001 & {3{FALCON_CLUT}}) | + (3'b100 & {3{ACP_CLUT}}) | (3'b101 & {3{COLOR16}}) | (3'b110 & + {3{COLOR24}}) | (3'b111 & {3{RAND_ON}}); + +// DIVERSE (VIDEO)-REGISTER ---------------------------- +// RANDFARBE + assign CCR0_clk_ctrl = MAIN_CLK; + +// $404/4 + assign CCR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h101; + assign CCR_d = FB_AD[23:0]; + assign CCR16_ena_ctrl = CCR_CS & FB_B[1] & (!nFB_WR); + assign CCR8_ena_ctrl = CCR_CS & FB_B[2] & (!nFB_WR); + assign CCR0_ena_ctrl = CCR_CS & FB_B[3] & (!nFB_WR); + +// SYS CTR +// $8006/2 + assign SYS_CTR_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C003; + assign SYS_CTR0_clk_ctrl = MAIN_CLK; + assign SYS_CTR_d = FB_AD[22:16]; + assign SYS_CTR0_ena_ctrl = SYS_CTR_CS & (!nFB_WR) & FB_B[3]; + assign BLITTER_ON = !SYS_CTR_q[3]; + +// VDL_LOF +// $820E/2 + assign VDL_LOF_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C107; + assign VDL_LOF0_clk_ctrl = MAIN_CLK; + assign VDL_LOF_d = FB_AD[31:16]; + assign VDL_LOF8_ena_ctrl = VDL_LOF_CS & (!nFB_WR) & FB_B[2]; + assign VDL_LOF0_ena_ctrl = VDL_LOF_CS & (!nFB_WR) & FB_B[3]; + +// VDL_LWD +// $8210/2 + assign VDL_LWD_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C108; + assign VDL_LWD0_clk_ctrl = MAIN_CLK; + assign VDL_LWD_d = FB_AD[31:16]; + assign VDL_LWD8_ena_ctrl = VDL_LWD_CS & (!nFB_WR) & FB_B[0]; + assign VDL_LWD0_ena_ctrl = VDL_LWD_CS & (!nFB_WR) & FB_B[1]; + +// HORIZONTAL +// VDL_HHT +// $8282/2 + assign VDL_HHT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C141; + assign VDL_HHT0_clk_ctrl = MAIN_CLK; + assign VDL_HHT_d = FB_AD[27:16]; + assign VDL_HHT8_ena_ctrl = VDL_HHT_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HHT0_ena_ctrl = VDL_HHT_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HBE +// $8286/2 + assign VDL_HBE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C143; + assign VDL_HBE0_clk_ctrl = MAIN_CLK; + assign VDL_HBE_d = FB_AD[27:16]; + assign VDL_HBE8_ena_ctrl = VDL_HBE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HBE0_ena_ctrl = VDL_HBE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HDB +// $8288/2 + assign VDL_HDB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C144; + assign VDL_HDB0_clk_ctrl = MAIN_CLK; + assign VDL_HDB_d = FB_AD[27:16]; + assign VDL_HDB8_ena_ctrl = VDL_HDB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HDB0_ena_ctrl = VDL_HDB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_HDE +// $828A/2 + assign VDL_HDE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C145; + assign VDL_HDE0_clk_ctrl = MAIN_CLK; + assign VDL_HDE_d = FB_AD[27:16]; + assign VDL_HDE8_ena_ctrl = VDL_HDE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_HDE0_ena_ctrl = VDL_HDE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_HBB +// $8284/2 + assign VDL_HBB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C142; + assign VDL_HBB0_clk_ctrl = MAIN_CLK; + assign VDL_HBB_d = FB_AD[27:16]; + assign VDL_HBB8_ena_ctrl = VDL_HBB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HBB0_ena_ctrl = VDL_HBB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_HSS +// $828C/2 + assign VDL_HSS_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C146; + assign VDL_HSS0_clk_ctrl = MAIN_CLK; + assign VDL_HSS_d = FB_AD[27:16]; + assign VDL_HSS8_ena_ctrl = VDL_HSS_CS & (!nFB_WR) & FB_B[0]; + assign VDL_HSS0_ena_ctrl = VDL_HSS_CS & (!nFB_WR) & FB_B[1]; + +// VERTIKAL +// VDL_VBE +// $82A6/2 + assign VDL_VBE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C153; + assign VDL_VBE0_clk_ctrl = MAIN_CLK; + assign VDL_VBE_d = FB_AD[26:16]; + assign VDL_VBE8_ena_ctrl = VDL_VBE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VBE0_ena_ctrl = VDL_VBE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VDB +// $82A8/2 + assign VDL_VDB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C154; + assign VDL_VDB0_clk_ctrl = MAIN_CLK; + assign VDL_VDB_d = FB_AD[26:16]; + assign VDL_VDB8_ena_ctrl = VDL_VDB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VDB0_ena_ctrl = VDL_VDB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VDE +// $82AA/2 + assign VDL_VDE_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C155; + assign VDL_VDE0_clk_ctrl = MAIN_CLK; + assign VDL_VDE_d = FB_AD[26:16]; + assign VDL_VDE8_ena_ctrl = VDL_VDE_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VDE0_ena_ctrl = VDL_VDE_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VBB +// $82A4/2 + assign VDL_VBB_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C152; + assign VDL_VBB0_clk_ctrl = MAIN_CLK; + assign VDL_VBB_d = FB_AD[26:16]; + assign VDL_VBB8_ena_ctrl = VDL_VBB_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VBB0_ena_ctrl = VDL_VBB_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VSS +// $82AC/2 + assign VDL_VSS_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C156; + assign VDL_VSS0_clk_ctrl = MAIN_CLK; + assign VDL_VSS_d = FB_AD[26:16]; + assign VDL_VSS8_ena_ctrl = VDL_VSS_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VSS0_ena_ctrl = VDL_VSS_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VFT +// $82A2/2 + assign VDL_VFT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C151; + assign VDL_VFT0_clk_ctrl = MAIN_CLK; + assign VDL_VFT_d = FB_AD[26:16]; + assign VDL_VFT8_ena_ctrl = VDL_VFT_CS & (!nFB_WR) & FB_B[2]; + assign VDL_VFT0_ena_ctrl = VDL_VFT_CS & (!nFB_WR) & FB_B[3]; + +// VDL_VCT +// $82C0/2 + assign VDL_VCT_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C160; + assign VDL_VCT0_clk_ctrl = MAIN_CLK; + assign VDL_VCT_d = FB_AD[24:16]; + assign VDL_VCT8_ena = VDL_VCT_CS & (!nFB_WR) & FB_B[0]; + assign VDL_VCT0_ena_ctrl = VDL_VCT_CS & (!nFB_WR) & FB_B[1]; + +// VDL_VMD +// $82C2/2 + assign VDL_VMD_CS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C161; + assign VDL_VMD0_clk_ctrl = MAIN_CLK; + assign VDL_VMD_d = FB_AD[19:16]; + assign VDL_VMD0_ena_ctrl = VDL_VMD_CS & (!nFB_WR) & FB_B[3]; + +// - REGISTER OUT + assign u0_data = ({16{ST_SHIFT_MODE_CS}} & {6'b00_0000, ST_SHIFT_MODE_q, + 8'b0000_0000}) | ({16{FALCON_SHIFT_MODE_CS}} & {5'b0_0000, + FALCON_SHIFT_MODE_q}) | ({16{SYS_CTR_CS}} & {9'b1_0000_0000, + SYS_CTR_q[6:4], !BLITTER_RUN, SYS_CTR_q[2:0]}) | ({16{VDL_LOF_CS}} & + VDL_LOF_q) | ({16{VDL_LWD_CS}} & VDL_LWD_q) | ({16{VDL_HBE_CS}} & + {4'b0000, VDL_HBE_q}) | ({16{VDL_HDB_CS}} & {4'b0000, VDL_HDB_q}) | + ({16{VDL_HDE_CS}} & {4'b0000, VDL_HDE_q}) | ({16{VDL_HBB_CS}} & + {4'b0000, VDL_HBB_q}) | ({16{VDL_HSS_CS}} & {4'b0000, VDL_HSS_q}) | + ({16{VDL_HHT_CS}} & {4'b0000, VDL_HHT_q}) | ({16{VDL_VBE_CS}} & + {5'b0_0000, VDL_VBE_q}) | ({16{VDL_VDB_CS}} & {5'b0_0000, VDL_VDB_q}) + | ({16{VDL_VDE_CS}} & {5'b0_0000, VDL_VDE_q}) | ({16{VDL_VBB_CS}} & + {5'b0_0000, VDL_VBB_q}) | ({16{VDL_VSS_CS}} & {5'b0_0000, VDL_VSS_q}) + | ({16{VDL_VFT_CS}} & {5'b0_0000, VDL_VFT_q}) | ({16{VDL_VCT_CS}} & + {7'b000_0000, VDL_VCT_q}) | ({16{VDL_VMD_CS}} & {12'b0000_0000_0000, + VDL_VMD_q}) | ({16{ACP_VCTR_CS}} & ACP_VCTR_q[31:16]) | + ({16{ATARI_HH_CS}} & ATARI_HH_q[31:16]) | ({16{ATARI_VH_CS}} & + ATARI_VH_q[31:16]) | ({16{ATARI_HL_CS}} & ATARI_HL_q[31:16]) | + ({16{ATARI_VL_CS}} & ATARI_VL_q[31:16]) | ({16{CCR_CS}} & + {8'b0000_0000, CCR_q[23:16]}) | ({16{VIDEO_PLL_CONFIG_CS}} & + {7'b000_0000, VR_DOUT_q}) | ({16{VIDEO_PLL_RECONFIG_CS}} & {VR_BUSY, + 4'b0000, VR_WR_q, VR_RD, VIDEO_RECONFIG_q, 8'b1111_1010}); + assign u0_enabledt = (ST_SHIFT_MODE_CS | FALCON_SHIFT_MODE_CS | ACP_VCTR_CS + | CCR_CS | SYS_CTR_CS | VDL_LOF_CS | VDL_LWD_CS | VDL_HBE_CS | + VDL_HDB_CS | VDL_HDE_CS | VDL_HBB_CS | VDL_HSS_CS | VDL_HHT_CS | + ATARI_HH_CS | ATARI_VH_CS | ATARI_HL_CS | ATARI_VL_CS | + VIDEO_PLL_CONFIG_CS | VIDEO_PLL_RECONFIG_CS | VDL_VBE_CS | VDL_VDB_CS + | VDL_VDE_CS | VDL_VBB_CS | VDL_VSS_CS | VDL_VFT_CS | VDL_VCT_CS | + VDL_VMD_CS) & (!nFB_OE); + assign FB_AD[31:16] = u0_tridata; + assign u1_data = ({16{ACP_VCTR_CS}} & ACP_VCTR_q[15:0]) | ({16{ATARI_HH_CS}} + & ATARI_HH_q[15:0]) | ({16{ATARI_VH_CS}} & ATARI_VH_q[15:0]) | + ({16{ATARI_HL_CS}} & ATARI_HL_q[15:0]) | ({16{ATARI_VL_CS}} & + ATARI_VL_q[15:0]) | ({16{CCR_CS}} & CCR_q[15:0]); + assign u1_enabledt = (ACP_VCTR_CS | CCR_CS | ATARI_HH_CS | ATARI_VH_CS | + ATARI_HL_CS | ATARI_VL_CS) & (!nFB_OE); + assign FB_AD[15:0] = u1_tridata; + assign VIDEO_MOD_TA = CLUT_TA_q | ST_SHIFT_MODE_CS | FALCON_SHIFT_MODE_CS | + ACP_VCTR_CS | SYS_CTR_CS | VDL_LOF_CS | VDL_LWD_CS | VDL_HBE_CS | + VDL_HDB_CS | VDL_HDE_CS | VDL_HBB_CS | VDL_HSS_CS | VDL_HHT_CS | + ATARI_HH_CS | ATARI_VH_CS | ATARI_HL_CS | ATARI_VL_CS | VDL_VBE_CS | + VDL_VDB_CS | VDL_VDE_CS | VDL_VBB_CS | VDL_VSS_CS | VDL_VFT_CS | + VDL_VCT_CS | VDL_VMD_CS; + +// VIDEO AUSGABE SETZEN + assign CLK17M_clk = CLK33M; + assign CLK17M_d = !CLK17M_q; + assign CLK13M_clk = CLK25M; + assign CLK13M_d = !CLK13M_q; + assign PIXEL_CLK = (CLK13M_q & (!ACP_VIDEO_ON) & (FALCON_VIDEO | ST_VIDEO) & + ((VDL_VMD_q[2] & VDL_VCT_q[2]) | VDL_VCT_q[0])) | (CLK17M_q & + (!ACP_VIDEO_ON) & (FALCON_VIDEO | ST_VIDEO) & ((VDL_VMD_q[2] & + (!VDL_VCT_q[2])) | VDL_VCT_q[0])) | (CLK25M & (!ACP_VIDEO_ON) & + (FALCON_VIDEO | ST_VIDEO) & (!VDL_VMD_q[2]) & VDL_VCT_q[2] & + (!VDL_VCT_q[0])) | (CLK33M & (!ACP_VIDEO_ON) & (FALCON_VIDEO | + ST_VIDEO) & (!VDL_VMD_q[2]) & (!VDL_VCT_q[2]) & (!VDL_VCT_q[0])) | + (CLK25M & ACP_VIDEO_ON & ACP_VCTR_q[9:8] == 2'b00) | (CLK33M & + ACP_VIDEO_ON & ACP_VCTR_q[9:8] == 2'b01) | (CLK_VIDEO & ACP_VIDEO_ON & + ACP_VCTR_q[9]); + +// ------------------------------------------------------------ +// HORIZONTALE SYNC LÄNGE in PIXEL_CLK +// -------------------------------------------------------------- + assign HSY_LEN0_clk_ctrl = MAIN_CLK; + +// hsync puls length in pixeln=frequenz/ = 500ns + assign HSY_LEN_d = (8'b0000_1110 & {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | + {8{ST_VIDEO}}) & (({8{VDL_VMD_q[2]}} & {8{VDL_VCT_q[2]}}) | + {8{VDL_VCT_q[0]}})) | (8'b0001_0000 & {8{!ACP_VIDEO_ON}} & + ({8{FALCON_VIDEO}} | {8{ST_VIDEO}}) & (({8{VDL_VMD_q[2]}} & + {8{!VDL_VCT_q[2]}}) | {8{VDL_VCT_q[0]}})) | (8'b0001_1100 & + {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | {8{ST_VIDEO}}) & + {8{!VDL_VMD_q[2]}} & {8{VDL_VCT_q[2]}} & {8{!VDL_VCT_q[0]}}) | + (8'b0010_0000 & {8{!ACP_VIDEO_ON}} & ({8{FALCON_VIDEO}} | + {8{ST_VIDEO}}) & {8{!VDL_VMD_q[2]}} & {8{!VDL_VCT_q[2]}} & + {8{!VDL_VCT_q[0]}}) | (8'b0001_1100 & {8{ACP_VIDEO_ON}} & + {8{ACP_VCTR_q[9:8] == 2'b00}}) | (8'b0010_0000 & {8{ACP_VIDEO_ON}} & + {8{ACP_VCTR_q[9:8] == 2'b01}}) | ((8'b0001_0000 + {1'b0, + VR_FRQ_q[7:1]}) & {8{ACP_VIDEO_ON}} & {8{ACP_VCTR_q[9]}}); + +// MULTIPLIKATIONS FAKTOR + assign MULF = (6'b00_0010 & {6{!ST_VIDEO}} & {6{VDL_VMD_q[2]}}) | + (6'b00_0100 & {6{!ST_VIDEO}} & {6{!VDL_VMD_q[2]}}) | (6'b01_0000 & + {6{ST_VIDEO}} & {6{VDL_VMD_q[2]}}) | (6'b10_0000 & {6{ST_VIDEO}} & + {6{!VDL_VMD_q[2]}}); + +// BREITE IN PIXELN + assign HDIS_LEN = (12'b0001_0100_0000 & {12{VDL_VMD_q[2]}}) | + (12'b0010_1000_0000 & {12{!VDL_VMD_q[2]}}); + +// DOPPELZEILENMODUS + assign DOP_ZEI_clk = MAIN_CLK; + +// ZEILENVERDOPPELUNG EIN AUS + assign DOP_ZEI_d = VDL_VMD_q[0] & ST_VIDEO; + assign INTER_ZEI_clk = PIXEL_CLK; + +// EINSCHIEBEZEILE AUF "DOPPEL" ZEILEN UND ZEILE NULL WEGEN SYNC +// EINSCHIEBEZEILE AUF "NORMAL" ZEILEN UND ZEILE NULL WEGEN SYNC + assign INTER_ZEI_d = (DOP_ZEI_q & VVCNT_q[0] != VDIS_START[0] & VVCNT_q != + 11'b000_0000_0000 & VHCNT_q < (HDIS_END - 12'b0000_0000_0001)) | + (DOP_ZEI_q & VVCNT_q[0] == VDIS_START[0] & VVCNT_q != + 11'b000_0000_0000 & VHCNT_q > (HDIS_END - 12'b0000_0000_0010)); + assign DOP_FIFO_CLR_clk = PIXEL_CLK; + +// DOPPELZEILENFIFO LÖSCHEN AM ENDE DER DOPPELZEILE UND BEI MAIN FIFO START + assign DOP_FIFO_CLR_d = (INTER_ZEI_q & HSYNC_START_q) | SYNC_PIX_q; + +// GE + assign RAND_LINKS_FULL = VDL_HBE_q * {7'b000_0000, MULF[5:1]}; + +// GE + assign HS_START_FULL = ((VDL_HHT_q + 24'h1) + VDL_HSS_q) * {7'b000_0000, + MULF[5:1]}; + +// GE + assign H_TOTAL_FULL = (VDL_HHT_q + 24'h2) * {6'b00_0000, MULF}; + assign RAND_LINKS = (VDL_HBE_q & {12{ACP_VIDEO_ON}}) | (12'b0000_0001_0101 & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (12'b0000_0010_1010 & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (RAND_LINKS_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign HDIS_START = (VDL_HDB_q & {12{ACP_VIDEO_ON}}) | ((RAND_LINKS + + 12'b0000_0000_0001) & {12{!ACP_VIDEO_ON}}); + assign HDIS_END = (VDL_HDE_q & {12{ACP_VIDEO_ON}}) | ((RAND_LINKS + + HDIS_LEN) & {12{!ACP_VIDEO_ON}}); + assign RAND_RECHTS = (VDL_HBB_q & {12{ACP_VIDEO_ON}}) | ((HDIS_END + + 12'b0000_0000_0001) & {12{!ACP_VIDEO_ON}}); + assign HS_START = (VDL_HSS_q & {12{ACP_VIDEO_ON}}) | (ATARI_HL_q[11:0] & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (ATARI_HH_q[11:0] & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (HS_START_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign H_TOTAL = (VDL_HHT_q & {12{ACP_VIDEO_ON}}) | (ATARI_HL_q[27:16] & + {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & {12{VDL_VMD_q[2]}}) | + (ATARI_HH_q[27:16] & {12{!ACP_VIDEO_ON}} & {12{ATARI_SYNC}} & + {12{!VDL_VMD_q[2]}}) | (H_TOTAL_FULL[11:0] & {12{!ACP_VIDEO_ON}} & + {12{!ATARI_SYNC}}); + assign RAND_OBEN = (VDL_VBE_q & {11{ACP_VIDEO_ON}}) | (11'b000_0001_1111 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | ({1'b0, VDL_VBE_q[10:1]} & + {11{!ACP_VIDEO_ON}} & {11{!ATARI_SYNC}}); + assign VDIS_START = (VDL_VDB_q & {11{ACP_VIDEO_ON}}) | (11'b000_0010_0000 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | (({1'b0, VDL_VDB_q[10:1]} + + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & {11{!ATARI_SYNC}}); + assign VDIS_END = (VDL_VDE_q & {11{ACP_VIDEO_ON}}) | (11'b001_1010_1111 & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{ST_VIDEO}}) | + (11'b001_1111_1111 & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!ST_VIDEO}}) | ({1'b0, VDL_VDE_q[10:1]} & {11{!ACP_VIDEO_ON}} & + {11{!ATARI_SYNC}}); + assign RAND_UNTEN = (VDL_VBB_q & {11{ACP_VIDEO_ON}}) | ((VDIS_END + + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}}) | + (({1'b0, VDL_VBB_q[10:1]} + 11'b000_0000_0001) & {11{!ACP_VIDEO_ON}} & + {11{!ATARI_SYNC}}); + assign VS_START = (VDL_VSS_q & {11{ACP_VIDEO_ON}}) | (ATARI_VL_q[10:0] & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{VDL_VMD_q[2]}}) | + (ATARI_VH_q[10:0] & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!VDL_VMD_q[2]}}) | ({1'b0, VDL_VSS_q[10:1]} & {11{!ACP_VIDEO_ON}} + & {11{!ATARI_SYNC}}); + assign V_TOTAL = (VDL_VFT_q & {11{ACP_VIDEO_ON}}) | (ATARI_VL_q[26:16] & + {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & {11{VDL_VMD_q[2]}}) | + (ATARI_VH_q[26:16] & {11{!ACP_VIDEO_ON}} & {11{ATARI_SYNC}} & + {11{!VDL_VMD_q[2]}}) | ({1'b0, VDL_VFT_q[10:1]} & {11{!ACP_VIDEO_ON}} + & {11{!ATARI_SYNC}}); + +// ZÄHLER + assign LAST_clk = PIXEL_CLK; + assign LAST_d = VHCNT_q == (H_TOTAL - 12'b0000_0000_0010); + assign VHCNT0_clk_ctrl = PIXEL_CLK; + assign VHCNT_d = (VHCNT_q + 12'b0000_0000_0001) & {12{!LAST_q}}; + assign VVCNT0_clk_ctrl = PIXEL_CLK; + assign VVCNT0_ena_ctrl = LAST_q; + assign VVCNT_d = (VVCNT_q + 11'b000_0000_0001) & {11{VVCNT_q != (V_TOTAL - + 11'b000_0000_0001)}}; + +// DISPLAY ON OFF + assign DPO_ZL_clk = PIXEL_CLK; + +// 1 ZEILE DAVOR ON OFF + assign DPO_ZL_d = VVCNT_q > (RAND_OBEN - 11'b000_0000_0001) & VVCNT_q < + (RAND_UNTEN - 11'b000_0000_0001); + +// AM ZEILENENDE ÜBERNEHMEN + assign DPO_ZL_ena = LAST_q; + assign DPO_ON_clk = PIXEL_CLK; + +// BESSER EINZELN WEGEN TIMING + assign DPO_ON_d = VHCNT_q == RAND_LINKS; + assign DPO_OFF_clk = PIXEL_CLK; + assign DPO_OFF_d = VHCNT_q == (RAND_RECHTS - 12'b0000_0000_0001); + assign DISP_ON_clk = PIXEL_CLK; + assign DISP_ON_d = (DISP_ON_q & (!DPO_OFF_q)) | (DPO_ON_q & DPO_ZL_q); + +// DATENTRANSFER ON OFF + assign VDO_ON_clk = PIXEL_CLK; + +// BESSER EINZELN WEGEN TIMING + assign VDO_ON_d = VHCNT_q == (HDIS_START - 12'b0000_0000_0001); + assign VDO_OFF_clk = PIXEL_CLK; + assign VDO_OFF_d = VHCNT_q == HDIS_END; + assign VDO_ZL_clk = PIXEL_CLK; + +// AM ZEILENENDE ÜBERNEHMEN + assign VDO_ZL_ena = LAST_q; + +// 1 ZEILE DAVOR ON OFF + assign VDO_ZL_d = VVCNT_q >= (VDIS_START - 11'b000_0000_0001) & VVCNT_q < + VDIS_END; + assign VDTRON_clk = PIXEL_CLK; + assign VDTRON_d = (VDTRON_q & (!VDO_OFF_q)) | (VDO_ON_q & VDO_ZL_q); + +// VERZÖGERUNG UND SYNC + assign HSYNC_START_clk = PIXEL_CLK; + assign HSYNC_START_d = VHCNT_q == (HS_START - 12'b0000_0000_0011); + assign HSYNC_I0_clk_ctrl = PIXEL_CLK; + assign HSYNC_I_d = (HSY_LEN_q & {8{HSYNC_START_q}}) | ((HSYNC_I_q - + 8'b0000_0001) & {8{!HSYNC_START_q}} & {8{HSYNC_I_q != 8'b0000_0000}}); + assign VSYNC_START_clk = PIXEL_CLK; + assign VSYNC_START_ena = LAST_q; + +// start am ende der Zeile vor dem vsync + assign VSYNC_START_d = VVCNT_q == (VS_START - 11'b000_0000_0011); + assign VSYNC_I0_clk_ctrl = PIXEL_CLK; + +// start am ende der Zeile vor dem vsync + assign VSYNC_I0_ena_ctrl = LAST_q; + +// 3 zeilen vsync length +// runterzählen bis 0 + assign VSYNC_I_d = (3'b011 & {3{VSYNC_START_q}}) | ((VSYNC_I_q - 3'b001) & + {3{!VSYNC_START_q}} & {3{VSYNC_I_q != 3'b000}}); + assign VERZ2_0_clk_ctrl = PIXEL_CLK; + assign VERZ1_0_clk_ctrl = PIXEL_CLK; + assign VERZ0_0_clk_ctrl = PIXEL_CLK; + assign {VERZ2__d[1], VERZ1__d[1], VERZ0__d[1]} = {VERZ2__q[0], VERZ1__q[0], + VERZ0__q[0]}; + assign {VERZ2__d[2], VERZ1__d[2], VERZ0__d[2]} = {VERZ2__q[1], VERZ1__q[1], + VERZ0__q[1]}; + assign {VERZ2__d[3], VERZ1__d[3], VERZ0__d[3]} = {VERZ2__q[2], VERZ1__q[2], + VERZ0__q[2]}; + assign {VERZ2__d[4], VERZ1__d[4], VERZ0__d[4]} = {VERZ2__q[3], VERZ1__q[3], + VERZ0__q[3]}; + assign {VERZ2__d[5], VERZ1__d[5], VERZ0__d[5]} = {VERZ2__q[4], VERZ1__q[4], + VERZ0__q[4]}; + assign {VERZ2__d[6], VERZ1__d[6], VERZ0__d[6]} = {VERZ2__q[5], VERZ1__q[5], + VERZ0__q[5]}; + assign {VERZ2__d[7], VERZ1__d[7], VERZ0__d[7]} = {VERZ2__q[6], VERZ1__q[6], + VERZ0__q[6]}; + assign {VERZ2__d[8], VERZ1__d[8], VERZ0__d[8]} = {VERZ2__q[7], VERZ1__q[7], + VERZ0__q[7]}; + assign {VERZ2__d[9], VERZ1__d[9], VERZ0__d[9]} = {VERZ2__q[8], VERZ1__q[8], + VERZ0__q[8]}; + assign VERZ0__d[0] = DISP_ON_q; + assign VERZ1_0_d_1 = HSYNC_I_q != 8'b0000_0000; + +// NUR MÖGLICH WENN BEIDE + assign VERZ1_0_d_2 = (((!ACP_VCTR_q[15]) | (!VDL_VCT_q[6])) & HSYNC_I_q != + 8'b0000_0000) | (ACP_VCTR_q[15] & VDL_VCT_q[6] & HSYNC_I_q == + 8'b0000_0000); + +// NUR MÖGLICH WENN BEIDE + assign VERZ2__d[0] = (((!ACP_VCTR_q[15]) | (!VDL_VCT_q[5])) & VSYNC_I_q != + 3'b000) | (ACP_VCTR_q[15] & VDL_VCT_q[5] & VSYNC_I_q == 3'b000); + assign nBLANK_clk = PIXEL_CLK; + assign nBLANK_d = VERZ0__q[8]; + assign HSYNC_clk = PIXEL_CLK; + assign HSYNC_d = VERZ1__q[9]; + assign VSYNC_clk = PIXEL_CLK; + assign VSYNC_d = VERZ2__q[9]; + assign nSYNC = gnd; + +// RANDFARBE MACHEN ------------------------------------ + assign RAND0_clk_ctrl = PIXEL_CLK; + assign RAND_d[0] = DISP_ON_q & (!VDTRON_q) & ACP_VCTR_q[25]; + assign RAND_d[1] = RAND_q[0]; + assign RAND_d[2] = RAND_q[1]; + assign RAND_d[3] = RAND_q[2]; + assign RAND_d[4] = RAND_q[3]; + assign RAND_d[5] = RAND_q[4]; + assign RAND_d[6] = RAND_q[5]; + assign RAND_ON = RAND_q[6]; + +// -------------------------------------------------------- + assign CLR_FIFO_clk = PIXEL_CLK; + assign CLR_FIFO_ena = LAST_q; + +// IN LETZTER ZEILE LÖSCHEN + assign CLR_FIFO_d = VVCNT_q == (V_TOTAL - 11'b000_0000_0010); + assign START_ZEILE_clk = PIXEL_CLK; + assign START_ZEILE_ena = LAST_q; + +// ZEILE 1 + assign START_ZEILE_d = VVCNT_q == 11'b000_0000_0000; + assign SYNC_PIX_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX_d = VHCNT_q == 12'b0000_0000_0011 & START_ZEILE_q; + assign SYNC_PIX1_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX1_d = VHCNT_q == 12'b0000_0000_0101 & START_ZEILE_q; + assign SYNC_PIX2_clk = PIXEL_CLK; + +// SUB PIXEL ZÄHLER SYNCHRONISIEREN + assign SYNC_PIX2_d = VHCNT_q == 12'b0000_0000_0111 & START_ZEILE_q; + assign SUB_PIXEL_CNT0_clk_ctrl = PIXEL_CLK; + assign SUB_PIXEL_CNT0_ena_ctrl = VDTRON_q | SYNC_PIX_q; + +// count up if display on sonst clear bei sync pix + assign SUB_PIXEL_CNT_d = (SUB_PIXEL_CNT_q + 7'b000_0001) & {7{!SYNC_PIX_q}}; + assign FIFO_RDE_clk = PIXEL_CLK; + +// 3 CLOCK ZUSÄTZLICH FÜR FIFO SHIFT DATAOUT UND SHIFT RIGTH POSITION + assign FIFO_RDE_d = (((SUB_PIXEL_CNT_q == 7'b000_0001 & COLOR1) | + (SUB_PIXEL_CNT_q[5:0] == 6'b00_0001 & COLOR2) | (SUB_PIXEL_CNT_q[4:0] + == 5'b0_0001 & COLOR4) | (SUB_PIXEL_CNT_q[3:0] == 4'b0001 & COLOR8) | + (SUB_PIXEL_CNT_q[2:0] == 3'b001 & COLOR16) | (SUB_PIXEL_CNT_q[1:0] == + 2'b01 & COLOR24)) & VDTRON_q) | SYNC_PIX_q | SYNC_PIX1_q | + SYNC_PIX2_q; + assign CLUT_MUX_ADR0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV1_0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV0_0_clk_ctrl = PIXEL_CLK; + assign CLUT_MUX_AV0__d = SUB_PIXEL_CNT_q[3:0]; + assign CLUT_MUX_AV1__d = CLUT_MUX_AV0__q; + assign CLUT_MUX_ADR_d = CLUT_MUX_AV1__q; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign COLOR16 = COLOR16_1 | COLOR16_2; + assign VERZ1__d[0] = VERZ1_0_d_1 | VERZ1_0_d_2; + assign COLOR4 = COLOR4_1 | COLOR4_2; + assign COLOR1 = COLOR1_1 | COLOR1_2 | COLOR1_3; + assign COLOR8 = COLOR8_1 | COLOR8_2; + +// Define power signal(s) + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/ahdl2v/interrupt_handler.tdf b/FPGA_quartus_GE/ahdl2v/interrupt_handler.tdf new file mode 100644 index 0000000..a455469 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/interrupt_handler.tdf @@ -0,0 +1,478 @@ +TITLE "INTERRUPT HANDLER UND C1287"; + +-- CREATED BY FREDI ASCHWANDEN + +INCLUDE "lpm_bustri_LONG.inc"; +INCLUDE "lpm_bustri_BYT.inc"; + + +-- Parameters Statement (optional) + +-- {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +-- {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! + + +-- Subdesign Section + +SUBDESIGN interrupt_handler +( + -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! + MAIN_CLK : INPUT; + nFB_WR : INPUT; + nFB_CS1 : INPUT; + nFB_CS2 : INPUT; + FB_SIZE0 : INPUT; + FB_SIZE1 : INPUT; + FB_ADR[31..0] : INPUT; + PIC_INT : INPUT; + E0_INT : INPUT; + DVI_INT : INPUT; + nPCI_INTA : INPUT; + nPCI_INTB : INPUT; + nPCI_INTC : INPUT; + nPCI_INTD : INPUT; + nMFP_INT : INPUT; + nFB_OE : INPUT; + DSP_INT : INPUT; + VSYNC : INPUT; + HSYNC : INPUT; + DMA_DRQ : INPUT; + nIRQ[7..2] : OUTPUT; + INT_HANDLER_TA : OUTPUT; + ACP_CONF[31..0] : OUTPUT; + TIN0 : OUTPUT; + FB_AD[31..0] : BIDIR; + -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! +) + +VARIABLE + FB_B[3..0] :NODE; + INT_CTR[31..0] :DFFE; + INT_CTR_CS :NODE; + INT_LATCH[31..0] :DFF; + INT_LATCH_CS :NODE; + INT_CLEAR[31..0] :DFF; + INT_CLEAR_CS :NODE; + INT_IN[31..0] :NODE; + INT_ENA[31..0] :DFFE; + INT_ENA_CS :NODE; + ACP_CONF[31..0] :DFFE; + ACP_CONF_CS :NODE; + PSEUDO_BUS_ERROR :NODE; + UHR_AS :NODE; + UHR_DS :NODE; + RTC_ADR[5..0] :DFFE; + ACHTELSEKUNDEN[2..0] :DFFE; + WERTE[7..0][63..0] :DFFE; -- WERTE REGISTER 0-63 + PIC_INT_SYNC[2..0] :DFF; + INC_SEC :NODE; + INC_MIN :NODE; + INC_STD :NODE; + INC_TAG :NODE; + ANZAHL_TAGE_DES_MONATS[7..0]:NODE; + WINTERZEIT :NODE; + SOMMERZEIT :NODE; + INC_MONAT :NODE; + INC_JAHR :NODE; + UPDATE_ON :NODE; + +BEGIN +-- BYT SELECT + FB_B0 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD + # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & !FB_ADR0 -- HHBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B1 = FB_SIZE1 & !FB_SIZE0 & !FB_ADR1 -- HWORD + # !FB_SIZE1 & FB_SIZE0 & !FB_ADR1 & FB_ADR0 -- HLBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B2 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD + # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & !FB_ADR0 -- LHBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + FB_B3 = FB_SIZE1 & !FB_SIZE0 & FB_ADR1 -- LWORD + # !FB_SIZE1 & FB_SIZE0 & FB_ADR1 & FB_ADR0 -- LLBYT + # !FB_SIZE1 & !FB_SIZE0 # FB_SIZE1 & FB_SIZE0; -- LONG UND LINE + +-- INTERRUPT CONTROL REGISTER: BIT0=INT5 AUSLÖSEN, 1=INT7 AUSLÖSEN + INT_CTR[].CLK = MAIN_CLK; + INT_CTR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4000"; -- $10000/4 + INT_CTR[] = FB_AD[]; + INT_CTR[31..24].ENA = INT_CTR_CS & FB_B0 & !nFB_WR; + INT_CTR[23..16].ENA = INT_CTR_CS & FB_B1 & !nFB_WR; + INT_CTR[15..8].ENA = INT_CTR_CS & FB_B2 & !nFB_WR; + INT_CTR[7..0].ENA = INT_CTR_CS & FB_B3 & !nFB_WR; +-- INTERRUPT ENABLE REGISTER BIT31=INT7,30=INT6,29=INT5,28=INT4,27=INT3,26=INT2 + INT_ENA[].CLK = MAIN_CLK; + INT_ENA_CS = !nFB_CS2 & FB_ADR[27..2]==H"4001"; -- $10004/4 + INT_ENA[] = FB_AD[]; + INT_ENA[31..24].ENA = INT_ENA_CS & FB_B0 & !nFB_WR; + INT_ENA[23..16].ENA = INT_ENA_CS & FB_B1 & !nFB_WR; + INT_ENA[15..8].ENA = INT_ENA_CS & FB_B2 & !nFB_WR; + INT_ENA[7..0].ENA = INT_ENA_CS & FB_B3 & !nFB_WR; +-- INTERRUPT CLEAR REGISTER WRITE ONLY 1=INTERRUPT CLEAR + INT_CLEAR[].CLK = MAIN_CLK; + INT_CLEAR_CS = !nFB_CS2 & FB_ADR[27..2]==H"4002"; -- $10008/4 + INT_CLEAR[31..24] = FB_AD[31..24] & INT_CLEAR_CS & FB_B0 & !nFB_WR; + INT_CLEAR[23..16] = FB_AD[23..16] & INT_CLEAR_CS & FB_B1 & !nFB_WR; + INT_CLEAR[15..8] = FB_AD[15..8] & INT_CLEAR_CS & FB_B2 & !nFB_WR; + INT_CLEAR[7..0] = FB_AD[7..0] & INT_CLEAR_CS & FB_B3 & !nFB_WR; +-- INTERRUPT LATCH REGISTER READ ONLY + INT_LATCH_CS = !nFB_CS2 & FB_ADR[27..2]==H"4003"; -- $1000C/4 +-- INTERRUPT + !nIRQ2 = HSYNC & INT_ENA[26]; + !nIRQ3 = INT_CTR0 & INT_ENA[27]; + !nIRQ4 = VSYNC & INT_ENA[28]; + nIRQ5 = INT_LATCH[]==H"00000000" & INT_ENA[29]; + !nIRQ6 = !nMFP_INT & INT_ENA[30]; + !nIRQ7 = PSEUDO_BUS_ERROR & INT_ENA[31]; + +PSEUDO_BUS_ERROR = !nFB_CS1 & (FB_ADR[19..4]==H"F8C8" -- SCC + # FB_ADR[19..4]==H"F8E0" -- VME + # FB_ADR[19..4]==H"F920" -- PADDLE + # FB_ADR[19..4]==H"F921" -- PADDLE + # FB_ADR[19..4]==H"F922" -- PADDLE + # FB_ADR[19..4]==H"FFA8" -- MFP2 + # FB_ADR[19..4]==H"FFA9" -- MFP2 + # FB_ADR[19..4]==H"FFAA" -- MFP2 + # FB_ADR[19..4]==H"FFA8" -- MFP2 + # FB_ADR[19..8]==H"F87" -- TT SCSI + # FB_ADR[19..4]==H"FFC2" -- ST UHR + # FB_ADR[19..4]==H"FFC3" -- ST UHR + # FB_ADR[19..4]==H"F890" -- DMA SOUND + # FB_ADR[19..4]==H"F891" -- DMA SOUND + # FB_ADR[19..4]==H"F892"); -- DMA SOUND +-- IF VIDEO ADR CHANGE +TIN0 = !nFB_CS1 & FB_ADR[19..1]==H"7C100" & !nFB_WR; -- WRITE VIDEO BASE ADR HIGH 0xFFFF8201/2 + +-- INTERRUPT LATCH + INT_LATCH[] = H"FFFFFFFF"; + INT_LATCH0.CLK = PIC_INT & INT_ENA[0]; + INT_LATCH1.CLK = E0_INT & INT_ENA[1]; + INT_LATCH2.CLK = DVI_INT & INT_ENA[2]; + INT_LATCH3.CLK = !nPCI_INTA & INT_ENA[3]; + INT_LATCH4.CLK = !nPCI_INTB & INT_ENA[4]; + INT_LATCH5.CLK = !nPCI_INTC & INT_ENA[5]; + INT_LATCH6.CLK = !nPCI_INTD & INT_ENA[6]; + INT_LATCH7.CLK = DSP_INT & INT_ENA[7]; + INT_LATCH8.CLK = VSYNC & INT_ENA[8]; + INT_LATCH9.CLK = HSYNC & INT_ENA[9]; + +-- INTERRUPT CLEAR + INT_LATCH[].CLRN = !INT_CLEAR[]; + +-- INT_IN + INT_IN0 = PIC_INT; + INT_IN1 = E0_INT; + INT_IN2 = DVI_INT; + INT_IN3 = !nPCI_INTA; + INT_IN4 = !nPCI_INTB; + INT_IN5 = !nPCI_INTC; + INT_IN6 = !nPCI_INTD; + INT_IN7 = DSP_INT; + INT_IN8 = VSYNC; + INT_IN9 = HSYNC; + INT_IN[25..10] = H"0"; + INT_IN26 = HSYNC; + INT_IN27 = INT_CTR0; + INT_IN28 = VSYNC; + INT_IN29 = INT_LATCH[]!=H"00000000"; + INT_IN30 = !nMFP_INT; + INT_IN31 = DMA_DRQ; +--*************************************************************************************** +-- ACP CONFIG REGISTER: BIT 31-> 0=CF 1=IDE + ACP_CONF[].CLK = MAIN_CLK; + ACP_CONF_CS = !nFB_CS2 & FB_ADR[27..2]==H"10000"; -- $4'0000/4 + ACP_CONF[] = FB_AD[]; + ACP_CONF[31..24].ENA = ACP_CONF_CS & FB_B0 & !nFB_WR; + ACP_CONF[23..16].ENA = ACP_CONF_CS & FB_B1 & !nFB_WR; + ACP_CONF[15..8].ENA = ACP_CONF_CS & FB_B2 & !nFB_WR; + ACP_CONF[7..0].ENA = ACP_CONF_CS & FB_B3 & !nFB_WR; +--*************************************************************************************** + +-------------------------------------------------------------- +-- C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR +---------------------------------------------------------- + RTC_ADR[].CLK = MAIN_CLK; + RTC_ADR[] = FB_AD[21..16]; + UHR_AS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B0" & FB_B1; -- FFFF8961 + UHR_DS = !nFB_CS1 & FB_ADR[19..1]==H"7C4B1" & FB_B3; -- FFFF8963 + RTC_ADR[].ENA = UHR_AS & !nFB_WR; + WERTE[][].CLK = MAIN_CLK; + WERTE[7..0][0] = FB_AD[23..16] & RTC_ADR[]==0 & UHR_DS & !nFB_WR; + WERTE[7..0][1] = FB_AD[23..16]; + WERTE[7..0][2] = FB_AD[23..16] & RTC_ADR[]==2 & UHR_DS & !nFB_WR; + WERTE[7..0][3] = FB_AD[23..16]; + WERTE[7..0][4] = FB_AD[23..16] & RTC_ADR[]==4 & UHR_DS & !nFB_WR; + WERTE[7..0][5] = FB_AD[23..16]; + WERTE[7..0][6] = FB_AD[23..16] & RTC_ADR[]==6 & UHR_DS & !nFB_WR; + WERTE[7..0][7] = FB_AD[23..16] & RTC_ADR[]==7 & UHR_DS & !nFB_WR; + WERTE[7..0][8] = FB_AD[23..16] & RTC_ADR[]==8 & UHR_DS & !nFB_WR; + WERTE[7..0][9] = FB_AD[23..16] & RTC_ADR[]==9 & UHR_DS & !nFB_WR; + WERTE[7..0][10] = FB_AD[23..16]; + WERTE[7..0][11] = FB_AD[23..16]; + WERTE[7..0][12] = FB_AD[23..16]; + WERTE[7..0][13] = FB_AD[23..16]; + WERTE[7..0][14] = FB_AD[23..16]; + WERTE[7..0][15] = FB_AD[23..16]; + WERTE[7..0][16] = FB_AD[23..16]; + WERTE[7..0][17] = FB_AD[23..16]; + WERTE[7..0][18] = FB_AD[23..16]; + WERTE[7..0][19] = FB_AD[23..16]; + WERTE[7..0][20] = FB_AD[23..16]; + WERTE[7..0][21] = FB_AD[23..16]; + WERTE[7..0][22] = FB_AD[23..16]; + WERTE[7..0][23] = FB_AD[23..16]; + WERTE[7..0][24] = FB_AD[23..16]; + WERTE[7..0][25] = FB_AD[23..16]; + WERTE[7..0][26] = FB_AD[23..16]; + WERTE[7..0][27] = FB_AD[23..16]; + WERTE[7..0][28] = FB_AD[23..16]; + WERTE[7..0][29] = FB_AD[23..16]; + WERTE[7..0][30] = FB_AD[23..16]; + WERTE[7..0][31] = FB_AD[23..16]; + WERTE[7..0][32] = FB_AD[23..16]; + WERTE[7..0][33] = FB_AD[23..16]; + WERTE[7..0][34] = FB_AD[23..16]; + WERTE[7..0][35] = FB_AD[23..16]; + WERTE[7..0][36] = FB_AD[23..16]; + WERTE[7..0][37] = FB_AD[23..16]; + WERTE[7..0][38] = FB_AD[23..16]; + WERTE[7..0][39] = FB_AD[23..16]; + WERTE[7..0][40] = FB_AD[23..16]; + WERTE[7..0][41] = FB_AD[23..16]; + WERTE[7..0][42] = FB_AD[23..16]; + WERTE[7..0][43] = FB_AD[23..16]; + WERTE[7..0][44] = FB_AD[23..16]; + WERTE[7..0][45] = FB_AD[23..16]; + WERTE[7..0][46] = FB_AD[23..16]; + WERTE[7..0][47] = FB_AD[23..16]; + WERTE[7..0][48] = FB_AD[23..16]; + WERTE[7..0][49] = FB_AD[23..16]; + WERTE[7..0][50] = FB_AD[23..16]; + WERTE[7..0][51] = FB_AD[23..16]; + WERTE[7..0][52] = FB_AD[23..16]; + WERTE[7..0][53] = FB_AD[23..16]; + WERTE[7..0][54] = FB_AD[23..16]; + WERTE[7..0][55] = FB_AD[23..16]; + WERTE[7..0][56] = FB_AD[23..16]; + WERTE[7..0][57] = FB_AD[23..16]; + WERTE[7..0][58] = FB_AD[23..16]; + WERTE[7..0][59] = FB_AD[23..16]; + WERTE[7..0][60] = FB_AD[23..16]; + WERTE[7..0][61] = FB_AD[23..16]; + WERTE[7..0][62] = FB_AD[23..16]; + WERTE[7..0][63] = FB_AD[23..16]; + WERTE[][0].ENA = RTC_ADR[]==0 & UHR_DS & !nFB_WR; + WERTE[][1].ENA = RTC_ADR[]==1 & UHR_DS & !nFB_WR; + WERTE[][2].ENA = RTC_ADR[]==2 & UHR_DS & !nFB_WR; + WERTE[][3].ENA = RTC_ADR[]==3 & UHR_DS & !nFB_WR; + WERTE[][4].ENA = RTC_ADR[]==4 & UHR_DS & !nFB_WR; + WERTE[][5].ENA = RTC_ADR[]==5 & UHR_DS & !nFB_WR; + WERTE[][6].ENA = RTC_ADR[]==6 & UHR_DS & !nFB_WR; + WERTE[][7].ENA = RTC_ADR[]==7 & UHR_DS & !nFB_WR; + WERTE[][8].ENA = RTC_ADR[]==8 & UHR_DS & !nFB_WR; + WERTE[][9].ENA = RTC_ADR[]==9 & UHR_DS & !nFB_WR; + WERTE[][10].ENA = RTC_ADR[]==10 & UHR_DS & !nFB_WR; + WERTE[][11].ENA = RTC_ADR[]==11 & UHR_DS & !nFB_WR; + WERTE[][12].ENA = RTC_ADR[]==12 & UHR_DS & !nFB_WR; + WERTE[][13].ENA = RTC_ADR[]==13 & UHR_DS & !nFB_WR; + WERTE[][14].ENA = RTC_ADR[]==14 & UHR_DS & !nFB_WR; + WERTE[][15].ENA = RTC_ADR[]==15 & UHR_DS & !nFB_WR; + WERTE[][16].ENA = RTC_ADR[]==16 & UHR_DS & !nFB_WR; + WERTE[][17].ENA = RTC_ADR[]==17 & UHR_DS & !nFB_WR; + WERTE[][18].ENA = RTC_ADR[]==18 & UHR_DS & !nFB_WR; + WERTE[][19].ENA = RTC_ADR[]==19 & UHR_DS & !nFB_WR; + WERTE[][20].ENA = RTC_ADR[]==20 & UHR_DS & !nFB_WR; + WERTE[][21].ENA = RTC_ADR[]==21 & UHR_DS & !nFB_WR; + WERTE[][22].ENA = RTC_ADR[]==22 & UHR_DS & !nFB_WR; + WERTE[][23].ENA = RTC_ADR[]==23 & UHR_DS & !nFB_WR; + WERTE[][24].ENA = RTC_ADR[]==24 & UHR_DS & !nFB_WR; + WERTE[][25].ENA = RTC_ADR[]==25 & UHR_DS & !nFB_WR; + WERTE[][26].ENA = RTC_ADR[]==26 & UHR_DS & !nFB_WR; + WERTE[][27].ENA = RTC_ADR[]==27 & UHR_DS & !nFB_WR; + WERTE[][28].ENA = RTC_ADR[]==28 & UHR_DS & !nFB_WR; + WERTE[][29].ENA = RTC_ADR[]==29 & UHR_DS & !nFB_WR; + WERTE[][30].ENA = RTC_ADR[]==30 & UHR_DS & !nFB_WR; + WERTE[][31].ENA = RTC_ADR[]==31 & UHR_DS & !nFB_WR; + WERTE[][32].ENA = RTC_ADR[]==32 & UHR_DS & !nFB_WR; + WERTE[][33].ENA = RTC_ADR[]==33 & UHR_DS & !nFB_WR; + WERTE[][34].ENA = RTC_ADR[]==34 & UHR_DS & !nFB_WR; + WERTE[][35].ENA = RTC_ADR[]==35 & UHR_DS & !nFB_WR; + WERTE[][36].ENA = RTC_ADR[]==36 & UHR_DS & !nFB_WR; + WERTE[][37].ENA = RTC_ADR[]==37 & UHR_DS & !nFB_WR; + WERTE[][38].ENA = RTC_ADR[]==38 & UHR_DS & !nFB_WR; + WERTE[][39].ENA = RTC_ADR[]==39 & UHR_DS & !nFB_WR; + WERTE[][40].ENA = RTC_ADR[]==40 & UHR_DS & !nFB_WR; + WERTE[][41].ENA = RTC_ADR[]==41 & UHR_DS & !nFB_WR; + WERTE[][42].ENA = RTC_ADR[]==42 & UHR_DS & !nFB_WR; + WERTE[][43].ENA = RTC_ADR[]==43 & UHR_DS & !nFB_WR; + WERTE[][44].ENA = RTC_ADR[]==44 & UHR_DS & !nFB_WR; + WERTE[][45].ENA = RTC_ADR[]==45 & UHR_DS & !nFB_WR; + WERTE[][46].ENA = RTC_ADR[]==46 & UHR_DS & !nFB_WR; + WERTE[][47].ENA = RTC_ADR[]==47 & UHR_DS & !nFB_WR; + WERTE[][48].ENA = RTC_ADR[]==48 & UHR_DS & !nFB_WR; + WERTE[][49].ENA = RTC_ADR[]==49 & UHR_DS & !nFB_WR; + WERTE[][50].ENA = RTC_ADR[]==50 & UHR_DS & !nFB_WR; + WERTE[][51].ENA = RTC_ADR[]==51 & UHR_DS & !nFB_WR; + WERTE[][52].ENA = RTC_ADR[]==52 & UHR_DS & !nFB_WR; + WERTE[][53].ENA = RTC_ADR[]==53 & UHR_DS & !nFB_WR; + WERTE[][54].ENA = RTC_ADR[]==54 & UHR_DS & !nFB_WR; + WERTE[][55].ENA = RTC_ADR[]==55 & UHR_DS & !nFB_WR; + WERTE[][56].ENA = RTC_ADR[]==56 & UHR_DS & !nFB_WR; + WERTE[][57].ENA = RTC_ADR[]==57 & UHR_DS & !nFB_WR; + WERTE[][58].ENA = RTC_ADR[]==58 & UHR_DS & !nFB_WR; + WERTE[][59].ENA = RTC_ADR[]==59 & UHR_DS & !nFB_WR; + WERTE[][60].ENA = RTC_ADR[]==60 & UHR_DS & !nFB_WR; + WERTE[][61].ENA = RTC_ADR[]==61 & UHR_DS & !nFB_WR; + WERTE[][62].ENA = RTC_ADR[]==62 & UHR_DS & !nFB_WR; + WERTE[][63].ENA = RTC_ADR[]==63 & UHR_DS & !nFB_WR; + PIC_INT_SYNC[].CLK = MAIN_CLK; PIC_INT_SYNC[0] = PIC_INT; + PIC_INT_SYNC[1] = PIC_INT_SYNC[0]; + PIC_INT_SYNC[2] = !PIC_INT_SYNC[1] & PIC_INT_SYNC[0]; + UPDATE_ON = !WERTE[7][11]; + WERTE[6][10].CLRN = GND; -- KEIN UIP + UPDATE_ON = !WERTE[7][11]; -- UPDATE ON OFF + WERTE[2][11] = VCC; -- IMMER BINARY + WERTE[1][11] = VCC; -- IMMER 24H FORMAT + WERTE[0][11] = VCC; -- IMMER SOMMERZEITKORREKTUR + WERTE[7][13] = VCC; -- IMMER RICHTIG +-- SOMMER WINTERZEIT: BIT 0 IM REGISTER D IST DIE INFORMATION OB SOMMERZEIT IST (BRAUCHT MAN FÜR RÜCKSCHALTUNG) + SOMMERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==4 & WERTE[][7]>23; --LETZTER SONNTAG IM APRIL + WERTE[0][13] = SOMMERZEIT; + WERTE[0][13].ENA = INC_STD & (SOMMERZEIT # WINTERZEIT); + WINTERZEIT = WERTE[][6]==1 & WERTE[][4]==1 & WERTE[][8]==10 & WERTE[][7]>24 & WERTE[0][13]; --LETZTER SONNTAG IM OKTOBER +-- ACHTELSEKUNDEN + ACHTELSEKUNDEN[].CLK = MAIN_CLK; + ACHTELSEKUNDEN[] = ACHTELSEKUNDEN[]+1; + ACHTELSEKUNDEN[].ENA = PIC_INT_SYNC[2] & UPDATE_ON; +-- SEKUNDEN + INC_SEC = ACHTELSEKUNDEN[]==7 & PIC_INT_SYNC[2] & UPDATE_ON; + WERTE[][0] = (WERTE[][0]+1) & WERTE[][0]!=59 & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR); -- SEKUNDEN ZÄHLEN BIS 59 + WERTE[][0].ENA = INC_SEC & !(RTC_ADR[]==0 & UHR_DS & !nFB_WR); +-- MINUTEN + INC_MIN = INC_SEC & WERTE[][0]==59; -- + WERTE[][2] = (WERTE[][2]+1) & WERTE[][2]!=59 & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); -- MINUTEN ZÄHLEN BIS 59 + WERTE[][2].ENA = INC_MIN & !(RTC_ADR[]==2 & UHR_DS & !nFB_WR); -- +-- STUNDEN + INC_STD = INC_MIN & WERTE[][2]==59; + WERTE[][4] = (WERTE[][4]+1+(1 & SOMMERZEIT)) & WERTE[][4]!=23 & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- STUNDEN ZÄHLEN BIS 23 + WERTE[][4].ENA = INC_STD & !(WINTERZEIT & WERTE[0][12]) & !(RTC_ADR[]==4 & UHR_DS & !nFB_WR); -- EINE STUNDE AUSLASSEN WENN WINTERZEITUMSCHALTUNG UND NOCH SOMMERZEIT +-- WOCHENTAG UND TAG + INC_TAG = INC_STD & WERTE[][2]==23; + WERTE[][6] = (WERTE[][6]+1) & WERTE[][6]!=7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR) -- WOCHENTAG ZÄHLEN BIS 7 + # 1 & WERTE[][6]==7 & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][6].ENA = INC_TAG & !(RTC_ADR[]==6 & UHR_DS & !nFB_WR); + ANZAHL_TAGE_DES_MONATS[] = 31 & (WERTE[][8]==1 # WERTE[][8]==3 # WERTE[][8]==5 # WERTE[][8]==7 # WERTE[][8]==8 # WERTE[][8]==10 # WERTE[][8]==12) + # 30 & (WERTE[][8]==4 # WERTE[][8]==6 # WERTE[][8]==9 # WERTE[][8]==11) + # 29 & WERTE[][8]==2 & WERTE[1..0][9]==0 + # 28 & WERTE[][8]==2 & WERTE[1..0][9]!=0; + WERTE[][7] = (WERTE[][7]+1) & WERTE[][7]!=ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR) -- TAG ZÄHLEN BIS MONATSENDE + # 1 & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[] & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][7].ENA = INC_TAG & !(RTC_ADR[]==7 & UHR_DS & !nFB_WR); -- +-- MONATE + INC_MONAT = INC_TAG & WERTE[][7]==ANZAHL_TAGE_DES_MONATS[]; -- + WERTE[][8] = (WERTE[][8]+1) & WERTE[][8]!=12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR) -- MONATE ZÄHLEN BIS 12 + # 1 & WERTE[][8]==12 & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR); -- DANN BEI 1 WEITER + WERTE[][8].ENA = INC_MONAT & !(RTC_ADR[]==8 & UHR_DS & !nFB_WR); +-- JAHR + INC_JAHR = INC_MONAT & WERTE[][8]==12; -- + WERTE[][9] = (WERTE[][9]+1) & WERTE[][9]!=99 & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR); -- JAHRE ZÄHLEN BIS 99 + WERTE[][9].ENA = INC_JAHR & !(RTC_ADR[]==9 & UHR_DS & !nFB_WR); +-- TRISTATE OUTPUT + + FB_AD[31..24] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[31..24] + # INT_ENA_CS & INT_ENA[31..24] + # INT_LATCH_CS & INT_LATCH[31..24] + # INT_CLEAR_CS & INT_IN[31..24] + # ACP_CONF_CS & ACP_CONF[31..24] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[23..16] = lpm_bustri_BYT( + WERTE[][0] & RTC_ADR[]==0 & UHR_DS + # WERTE[][1] & RTC_ADR[]==1 & UHR_DS + # WERTE[][2] & RTC_ADR[]==2 & UHR_DS + # WERTE[][3] & RTC_ADR[]==3 & UHR_DS + # WERTE[][4] & RTC_ADR[]==4 & UHR_DS + # WERTE[][5] & RTC_ADR[]==5 & UHR_DS + # WERTE[][6] & RTC_ADR[]==6 & UHR_DS + # WERTE[][7] & RTC_ADR[]==7 & UHR_DS + # WERTE[][8] & RTC_ADR[]==8 & UHR_DS + # WERTE[][9] & RTC_ADR[]==9 & UHR_DS + # WERTE[][10] & RTC_ADR[]==10 & UHR_DS + # WERTE[][11] & RTC_ADR[]==11 & UHR_DS + # WERTE[][12] & RTC_ADR[]==12 & UHR_DS + # WERTE[][13] & RTC_ADR[]==13 & UHR_DS + # WERTE[][14] & RTC_ADR[]==14 & UHR_DS + # WERTE[][15] & RTC_ADR[]==15 & UHR_DS + # WERTE[][16] & RTC_ADR[]==16 & UHR_DS + # WERTE[][17] & RTC_ADR[]==17 & UHR_DS + # WERTE[][18] & RTC_ADR[]==18 & UHR_DS + # WERTE[][19] & RTC_ADR[]==19 & UHR_DS + # WERTE[][20] & RTC_ADR[]==20 & UHR_DS + # WERTE[][21] & RTC_ADR[]==21 & UHR_DS + # WERTE[][22] & RTC_ADR[]==22 & UHR_DS + # WERTE[][23] & RTC_ADR[]==23 & UHR_DS + # WERTE[][24] & RTC_ADR[]==24 & UHR_DS + # WERTE[][25] & RTC_ADR[]==25 & UHR_DS + # WERTE[][26] & RTC_ADR[]==26 & UHR_DS + # WERTE[][27] & RTC_ADR[]==27 & UHR_DS + # WERTE[][28] & RTC_ADR[]==28 & UHR_DS + # WERTE[][29] & RTC_ADR[]==29 & UHR_DS + # WERTE[][30] & RTC_ADR[]==30 & UHR_DS + # WERTE[][31] & RTC_ADR[]==31 & UHR_DS + # WERTE[][32] & RTC_ADR[]==32 & UHR_DS + # WERTE[][33] & RTC_ADR[]==33 & UHR_DS + # WERTE[][34] & RTC_ADR[]==34 & UHR_DS + # WERTE[][35] & RTC_ADR[]==35 & UHR_DS + # WERTE[][36] & RTC_ADR[]==36 & UHR_DS + # WERTE[][37] & RTC_ADR[]==37 & UHR_DS + # WERTE[][38] & RTC_ADR[]==38 & UHR_DS + # WERTE[][39] & RTC_ADR[]==39 & UHR_DS + # WERTE[][40] & RTC_ADR[]==40 & UHR_DS + # WERTE[][41] & RTC_ADR[]==41 & UHR_DS + # WERTE[][42] & RTC_ADR[]==42 & UHR_DS + # WERTE[][43] & RTC_ADR[]==43 & UHR_DS + # WERTE[][44] & RTC_ADR[]==44 & UHR_DS + # WERTE[][45] & RTC_ADR[]==45 & UHR_DS + # WERTE[][46] & RTC_ADR[]==46 & UHR_DS + # WERTE[][47] & RTC_ADR[]==47 & UHR_DS + # WERTE[][48] & RTC_ADR[]==48 & UHR_DS + # WERTE[][49] & RTC_ADR[]==49 & UHR_DS + # WERTE[][50] & RTC_ADR[]==50 & UHR_DS + # WERTE[][51] & RTC_ADR[]==51 & UHR_DS + # WERTE[][52] & RTC_ADR[]==52 & UHR_DS + # WERTE[][53] & RTC_ADR[]==53 & UHR_DS + # WERTE[][54] & RTC_ADR[]==54 & UHR_DS + # WERTE[][55] & RTC_ADR[]==55 & UHR_DS + # WERTE[][56] & RTC_ADR[]==56 & UHR_DS + # WERTE[][57] & RTC_ADR[]==57 & UHR_DS + # WERTE[][58] & RTC_ADR[]==58 & UHR_DS + # WERTE[][59] & RTC_ADR[]==59 & UHR_DS + # WERTE[][60] & RTC_ADR[]==60 & UHR_DS + # WERTE[][61] & RTC_ADR[]==61 & UHR_DS + # WERTE[][62] & RTC_ADR[]==62 & UHR_DS + # WERTE[][63] & RTC_ADR[]==63 & UHR_DS + # (0,RTC_ADR[]) & UHR_AS + # INT_CTR_CS & INT_CTR[23..16] + # INT_ENA_CS & INT_ENA[23..16] + # INT_LATCH_CS & INT_LATCH[23..16] + # INT_CLEAR_CS & INT_IN[23..16] + # ACP_CONF_CS & ACP_CONF[23..16] + ,(UHR_DS # UHR_AS # INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[15..8] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[15..8] + # INT_ENA_CS & INT_ENA[15..8] + # INT_LATCH_CS & INT_LATCH[15..8] + # INT_CLEAR_CS & INT_IN[15..8] + # ACP_CONF_CS & ACP_CONF[15..8] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + FB_AD[7..0] = lpm_bustri_BYT( + INT_CTR_CS & INT_CTR[7..0] + # INT_ENA_CS & INT_ENA[7..0] + # INT_LATCH_CS & INT_LATCH[7..0] + # INT_CLEAR_CS & INT_IN[7..0] + # ACP_CONF_CS & ACP_CONF[7..0] + ,(INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS # ACP_CONF_CS) & !nFB_OE); + + INT_HANDLER_TA = INT_CTR_CS # INT_ENA_CS # INT_LATCH_CS # INT_CLEAR_CS; +END; + + diff --git a/FPGA_quartus_GE/ahdl2v/interrupt_handler.v b/FPGA_quartus_GE/ahdl2v/interrupt_handler.v new file mode 100644 index 0000000..b8562a5 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/interrupt_handler.v @@ -0,0 +1,3578 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: interrupt_handler.tdf +// Verilog Design Output: interrupt_handler.v +// Created 23-Feb-2014 10:34 AM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + +// INTERRUPT HANDLER UND C1287 + + +// CREATED BY FREDI ASCHWANDEN +// Parameters Statement (optional) +// {{ALTERA_PARAMETERS_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_PARAMETERS_END}} DO NOT REMOVE THIS LINE! +// Subdesign Section +module interrupt_handler(MAIN_CLK, nFB_WR, nFB_CS1, nFB_CS2, FB_SIZE0, + FB_SIZE1, FB_ADR, PIC_INT, E0_INT, DVI_INT, nPCI_INTA, nPCI_INTB, + nPCI_INTC, nPCI_INTD, nMFP_INT, nFB_OE, DSP_INT, VSYNC, HSYNC, DMA_DRQ, + nIRQ, INT_HANDLER_TA, ACP_CONF, TIN0, FB_AD); + +// {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! +// {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! + input MAIN_CLK, nFB_WR, nFB_CS1, nFB_CS2, FB_SIZE0, FB_SIZE1; + input [31:0] FB_ADR; + input PIC_INT, E0_INT, DVI_INT, nPCI_INTA, nPCI_INTB, nPCI_INTC, nPCI_INTD, + nMFP_INT, nFB_OE, DSP_INT, VSYNC, HSYNC, DMA_DRQ; + output [7:2] nIRQ; + output INT_HANDLER_TA; + output [31:0] ACP_CONF; + output TIN0; + inout [31:0] FB_AD; + +// WERTE REGISTER 0-63 + wire [3:0] FB_B; + wire [31:0] INT_CTR; + wire [31:0] INT_CTR_d; + wire INT_CTR_CS; + wire [31:0] INT_LATCH; + wire [31:0] INT_LATCH_d; + wire [31:0] INT_LATCH_clk; + wire INT_LATCH31_clrn, INT_LATCH30_clrn, INT_LATCH29_clrn, INT_LATCH28_clrn, + INT_LATCH27_clrn, INT_LATCH26_clrn, INT_LATCH25_clrn, + INT_LATCH24_clrn, INT_LATCH23_clrn, INT_LATCH22_clrn, + INT_LATCH21_clrn, INT_LATCH20_clrn, INT_LATCH19_clrn, + INT_LATCH18_clrn, INT_LATCH17_clrn, INT_LATCH16_clrn, + INT_LATCH15_clrn, INT_LATCH14_clrn, INT_LATCH13_clrn, + INT_LATCH12_clrn, INT_LATCH11_clrn, INT_LATCH10_clrn, INT_LATCH9_clrn, + INT_LATCH8_clrn, INT_LATCH7_clrn, INT_LATCH6_clrn, INT_LATCH5_clrn, + INT_LATCH4_clrn, INT_LATCH3_clrn, INT_LATCH2_clrn, INT_LATCH1_clrn, + INT_LATCH0_clrn, INT_LATCH_CS; + wire [31:0] INT_CLEAR; + wire [31:0] INT_CLEAR_d; + wire INT_CLEAR_CS; + wire [31:0] INT_IN; + wire [31:0] INT_ENA; + wire [31:0] INT_ENA_d; + wire INT_ENA_CS; + wire [31:0] ACP_CONF_d; + wire ACP_CONF_CS, PSEUDO_BUS_ERROR, UHR_AS, UHR_DS; + wire [5:0] RTC_ADR; + wire [5:0] RTC_ADR_d; + wire [2:0] ACHTELSEKUNDEN; + wire [2:0] ACHTELSEKUNDEN_d; + wire [63:0] WERTE7_; + wire [63:0] WERTE7__d; + wire WERTE7_13_ena, WERTE7_9_ena, WERTE7_8_ena, WERTE7_7_ena, WERTE7_6_ena, + WERTE7_4_ena, WERTE7_2_ena, WERTE7_0_ena; + wire [63:0] WERTE6_; + wire [63:0] WERTE6__d; + wire WERTE6_10_clrn, WERTE6_13_ena, WERTE6_9_ena, WERTE6_8_ena, + WERTE6_7_ena, WERTE6_6_ena, WERTE6_4_ena, WERTE6_2_ena, WERTE6_0_ena; + wire [63:0] WERTE5_; + wire [63:0] WERTE5__d; + wire WERTE5_13_ena, WERTE5_9_ena, WERTE5_8_ena, WERTE5_7_ena, WERTE5_6_ena, + WERTE5_4_ena, WERTE5_2_ena, WERTE5_0_ena; + wire [63:0] WERTE4_; + wire [63:0] WERTE4__d; + wire WERTE4_13_ena, WERTE4_9_ena, WERTE4_8_ena, WERTE4_7_ena, WERTE4_6_ena, + WERTE4_4_ena, WERTE4_2_ena, WERTE4_0_ena; + wire [63:0] WERTE3_; + wire [63:0] WERTE3__d; + wire WERTE3_13_ena, WERTE3_9_ena, WERTE3_8_ena, WERTE3_7_ena, WERTE3_6_ena, + WERTE3_4_ena, WERTE3_2_ena, WERTE3_0_ena; + wire [63:0] WERTE2_; + wire [63:0] WERTE2__d; + wire WERTE2_13_ena, WERTE2_9_ena, WERTE2_8_ena, WERTE2_7_ena, WERTE2_6_ena, + WERTE2_4_ena, WERTE2_2_ena, WERTE2_0_ena; + wire [63:0] WERTE1_; + wire [63:0] WERTE1__d; + wire WERTE1_13_ena, WERTE1_9_ena, WERTE1_8_ena, WERTE1_7_ena, WERTE1_6_ena, + WERTE1_4_ena, WERTE1_2_ena, WERTE1_0_ena; + wire [63:0] WERTE0_; + wire [63:0] WERTE0__d; + wire WERTE0_13_ena, WERTE0_9_ena, WERTE0_8_ena, WERTE0_7_ena, WERTE0_6_ena, + WERTE0_4_ena, WERTE0_2_ena, WERTE0_0_ena; + wire [2:0] PIC_INT_SYNC; + wire [2:0] PIC_INT_SYNC_d; + wire INC_SEC, INC_MIN, INC_STD, INC_TAG; + wire [7:0] ANZAHL_TAGE_DES_MONATS; + wire WINTERZEIT, SOMMERZEIT, INC_MONAT, INC_JAHR, UPDATE_ON, gnd, vcc; + wire [7:0] u0_data; + wire u0_enabledt; + wire [7:0] u0_tridata; + wire [7:0] u1_data; + wire u1_enabledt; + wire [7:0] u1_tridata; + wire [7:0] u2_data; + wire u2_enabledt; + wire [7:0] u2_tridata; + wire [7:0] u3_data; + wire u3_enabledt; + wire [7:0] u3_tridata; + wire UPDATE_ON_1, UPDATE_ON_2, WERTE0_0_ena_1, WERTE0_0_ena_2, + WERTE0_2_ena_1, WERTE0_2_ena_2, WERTE0_4_ena_1, WERTE0_4_ena_2, + WERTE0_6_ena_1, WERTE0_6_ena_2, WERTE0_7_ena_1, WERTE0_7_ena_2, + WERTE0_8_ena_1, WERTE0_8_ena_2, WERTE0_9_ena_1, WERTE0_9_ena_2, + WERTE0_13_ena_1, WERTE0_13_ena_2, WERTE0_0_d_1, WERTE0_0_d_2, + WERTE0_2_d_1, WERTE0_2_d_2, WERTE0_4_d_1, WERTE0_4_d_2, WERTE0_6_d_1, + WERTE0_6_d_2, WERTE0_7_d_1, WERTE0_7_d_2, WERTE0_8_d_1, WERTE0_8_d_2, + WERTE0_9_d_1, WERTE0_9_d_2, WERTE0_11_d_1, WERTE0_11_d_2, + WERTE0_13_d_1, WERTE0_13_d_2, WERTE1_0_ena_1, WERTE1_0_ena_2, + WERTE1_2_ena_1, WERTE1_2_ena_2, WERTE1_4_ena_1, WERTE1_4_ena_2, + WERTE1_6_ena_1, WERTE1_6_ena_2, WERTE1_7_ena_1, WERTE1_7_ena_2, + WERTE1_8_ena_1, WERTE1_8_ena_2, WERTE1_9_ena_1, WERTE1_9_ena_2, + WERTE1_0_d_1, WERTE1_0_d_2, WERTE1_2_d_1, WERTE1_2_d_2, WERTE1_4_d_1, + WERTE1_4_d_2, WERTE1_6_d_1, WERTE1_6_d_2, WERTE1_7_d_1, WERTE1_7_d_2, + WERTE1_8_d_1, WERTE1_8_d_2, WERTE1_9_d_1, WERTE1_9_d_2, WERTE1_11_d_1, + WERTE1_11_d_2, WERTE2_0_ena_1, WERTE2_0_ena_2, WERTE2_2_ena_1, + WERTE2_2_ena_2, WERTE2_4_ena_1, WERTE2_4_ena_2, WERTE2_6_ena_1, + WERTE2_6_ena_2, WERTE2_7_ena_1, WERTE2_7_ena_2, WERTE2_8_ena_1, + WERTE2_8_ena_2, WERTE2_9_ena_1, WERTE2_9_ena_2, WERTE2_0_d_1, + WERTE2_0_d_2, WERTE2_2_d_1, WERTE2_2_d_2, WERTE2_4_d_1, WERTE2_4_d_2, + WERTE2_6_d_1, WERTE2_6_d_2, WERTE2_7_d_1, WERTE2_7_d_2, WERTE2_8_d_1, + WERTE2_8_d_2, WERTE2_9_d_1, WERTE2_9_d_2, WERTE2_11_d_1, + WERTE2_11_d_2, WERTE3_0_ena_1, WERTE3_0_ena_2, WERTE3_2_ena_1, + WERTE3_2_ena_2, WERTE3_4_ena_1, WERTE3_4_ena_2, WERTE3_6_ena_1, + WERTE3_6_ena_2, WERTE3_7_ena_1, WERTE3_7_ena_2, WERTE3_8_ena_1, + WERTE3_8_ena_2, WERTE3_9_ena_1, WERTE3_9_ena_2, WERTE3_0_d_1, + WERTE3_0_d_2, WERTE3_2_d_1, WERTE3_2_d_2, WERTE3_4_d_1, WERTE3_4_d_2, + WERTE3_6_d_1, WERTE3_6_d_2, WERTE3_7_d_1, WERTE3_7_d_2, WERTE3_8_d_1, + WERTE3_8_d_2, WERTE3_9_d_1, WERTE3_9_d_2, WERTE4_0_ena_1, + WERTE4_0_ena_2, WERTE4_2_ena_1, WERTE4_2_ena_2, WERTE4_4_ena_1, + WERTE4_4_ena_2, WERTE4_6_ena_1, WERTE4_6_ena_2, WERTE4_7_ena_1, + WERTE4_7_ena_2, WERTE4_8_ena_1, WERTE4_8_ena_2, WERTE4_9_ena_1, + WERTE4_9_ena_2, WERTE4_0_d_1, WERTE4_0_d_2, WERTE4_2_d_1, + WERTE4_2_d_2, WERTE4_4_d_1, WERTE4_4_d_2, WERTE4_6_d_1, WERTE4_6_d_2, + WERTE4_7_d_1, WERTE4_7_d_2, WERTE4_8_d_1, WERTE4_8_d_2, WERTE4_9_d_1, + WERTE4_9_d_2, WERTE5_0_ena_1, WERTE5_0_ena_2, WERTE5_2_ena_1, + WERTE5_2_ena_2, WERTE5_4_ena_1, WERTE5_4_ena_2, WERTE5_6_ena_1, + WERTE5_6_ena_2, WERTE5_7_ena_1, WERTE5_7_ena_2, WERTE5_8_ena_1, + WERTE5_8_ena_2, WERTE5_9_ena_1, WERTE5_9_ena_2, WERTE5_0_d_1, + WERTE5_0_d_2, WERTE5_2_d_1, WERTE5_2_d_2, WERTE5_4_d_1, WERTE5_4_d_2, + WERTE5_6_d_1, WERTE5_6_d_2, WERTE5_7_d_1, WERTE5_7_d_2, WERTE5_8_d_1, + WERTE5_8_d_2, WERTE5_9_d_1, WERTE5_9_d_2, WERTE6_0_ena_1, + WERTE6_0_ena_2, WERTE6_2_ena_1, WERTE6_2_ena_2, WERTE6_4_ena_1, + WERTE6_4_ena_2, WERTE6_6_ena_1, WERTE6_6_ena_2, WERTE6_7_ena_1, + WERTE6_7_ena_2, WERTE6_8_ena_1, WERTE6_8_ena_2, WERTE6_9_ena_1, + WERTE6_9_ena_2, WERTE6_0_d_1, WERTE6_0_d_2, WERTE6_2_d_1, + WERTE6_2_d_2, WERTE6_4_d_1, WERTE6_4_d_2, WERTE6_6_d_1, WERTE6_6_d_2, + WERTE6_7_d_1, WERTE6_7_d_2, WERTE6_8_d_1, WERTE6_8_d_2, WERTE6_9_d_1, + WERTE6_9_d_2, WERTE7_0_ena_1, WERTE7_0_ena_2, WERTE7_2_ena_1, + WERTE7_2_ena_2, WERTE7_4_ena_1, WERTE7_4_ena_2, WERTE7_6_ena_1, + WERTE7_6_ena_2, WERTE7_7_ena_1, WERTE7_7_ena_2, WERTE7_8_ena_1, + WERTE7_8_ena_2, WERTE7_9_ena_1, WERTE7_9_ena_2, WERTE7_0_d_1, + WERTE7_0_d_2, WERTE7_2_d_1, WERTE7_2_d_2, WERTE7_4_d_1, WERTE7_4_d_2, + WERTE7_6_d_1, WERTE7_6_d_2, WERTE7_7_d_1, WERTE7_7_d_2, WERTE7_8_d_1, + WERTE7_8_d_2, WERTE7_9_d_1, WERTE7_9_d_2, WERTE7_13_d_1, + WERTE7_13_d_2, ACHTELSEKUNDEN0_ena_ctrl, ACHTELSEKUNDEN0_clk_ctrl, + PIC_INT_SYNC0_clk_ctrl, WERTE0_63_ena_ctrl, WERTE0_62_ena_ctrl, + WERTE0_61_ena_ctrl, WERTE0_60_ena_ctrl, WERTE0_59_ena_ctrl, + WERTE0_58_ena_ctrl, WERTE0_57_ena_ctrl, WERTE0_56_ena_ctrl, + WERTE0_55_ena_ctrl, WERTE0_54_ena_ctrl, WERTE0_53_ena_ctrl, + WERTE0_52_ena_ctrl, WERTE0_51_ena_ctrl, WERTE0_50_ena_ctrl, + WERTE0_49_ena_ctrl, WERTE0_48_ena_ctrl, WERTE0_47_ena_ctrl, + WERTE0_46_ena_ctrl, WERTE0_45_ena_ctrl, WERTE0_44_ena_ctrl, + WERTE0_43_ena_ctrl, WERTE0_42_ena_ctrl, WERTE0_41_ena_ctrl, + WERTE0_40_ena_ctrl, WERTE0_39_ena_ctrl, WERTE0_38_ena_ctrl, + WERTE0_37_ena_ctrl, WERTE0_36_ena_ctrl, WERTE0_35_ena_ctrl, + WERTE0_34_ena_ctrl, WERTE0_33_ena_ctrl, WERTE0_32_ena_ctrl, + WERTE0_31_ena_ctrl, WERTE0_30_ena_ctrl, WERTE0_29_ena_ctrl, + WERTE0_28_ena_ctrl, WERTE0_27_ena_ctrl, WERTE0_26_ena_ctrl, + WERTE0_25_ena_ctrl, WERTE0_24_ena_ctrl, WERTE0_23_ena_ctrl, + WERTE0_22_ena_ctrl, WERTE0_21_ena_ctrl, WERTE0_20_ena_ctrl, + WERTE0_19_ena_ctrl, WERTE0_18_ena_ctrl, WERTE0_17_ena_ctrl, + WERTE0_16_ena_ctrl, WERTE0_15_ena_ctrl, WERTE0_14_ena_ctrl, + WERTE0_12_ena_ctrl, WERTE0_11_ena_ctrl, WERTE0_10_ena_ctrl, + WERTE0_5_ena_ctrl, WERTE0_3_ena_ctrl, WERTE0_1_ena_ctrl, + WERTE0_0_clk_ctrl, WERTE1_0_clk_ctrl, WERTE2_0_clk_ctrl, + WERTE3_0_clk_ctrl, WERTE4_0_clk_ctrl, WERTE5_0_clk_ctrl, + WERTE6_0_clk_ctrl, WERTE7_0_clk_ctrl, RTC_ADR0_ena_ctrl, + RTC_ADR0_clk_ctrl, ACP_CONF0_ena_ctrl, ACP_CONF8_ena_ctrl, + ACP_CONF16_ena_ctrl, ACP_CONF24_ena_ctrl, ACP_CONF0_clk_ctrl, + INT_CLEAR0_clk_ctrl, INT_ENA0_ena_ctrl, INT_ENA8_ena_ctrl, + INT_ENA16_ena_ctrl, INT_ENA24_ena_ctrl, INT_ENA0_clk_ctrl, + INT_CTR0_ena_ctrl, INT_CTR8_ena_ctrl, INT_CTR16_ena_ctrl, + INT_CTR24_ena_ctrl, INT_CTR0_clk_ctrl, INT_LATCH9_clk_1, + INT_LATCH8_clk_1, INT_LATCH7_clk_1, INT_LATCH6_clk_1, + INT_LATCH5_clk_1, INT_LATCH4_clk_1, INT_LATCH3_clk_1, + INT_LATCH2_clk_1, INT_LATCH1_clk_1, INT_LATCH0_clk_1; + reg [31:0] INT_CTR_q; + reg [31:0] INT_LATCH_q; + reg [31:0] INT_CLEAR_q; + reg [31:0] INT_ENA_q; + reg [31:0] ACP_CONF_q; + reg [5:0] RTC_ADR_q; + reg [2:0] ACHTELSEKUNDEN_q; + reg [63:0] WERTE7__q; + reg [63:0] WERTE6__q; + reg [63:0] WERTE5__q; + reg [63:0] WERTE4__q; + reg [63:0] WERTE3__q; + reg [63:0] WERTE2__q; + reg [63:0] WERTE1__q; + reg [63:0] WERTE0__q; + reg [2:0] PIC_INT_SYNC_q; + + +// Sub Module Section + lpm_bustri_BYT u0 (.data(u0_data), .enabledt(u0_enabledt), + .tridata(u0_tridata)); + + lpm_bustri_BYT u1 (.data(u1_data), .enabledt(u1_enabledt), + .tridata(u1_tridata)); + + lpm_bustri_BYT u2 (.data(u2_data), .enabledt(u2_enabledt), + .tridata(u2_tridata)); + + lpm_bustri_BYT u3 (.data(u3_data), .enabledt(u3_enabledt), + .tridata(u3_tridata)); + + + assign ACP_CONF[31:24] = ACP_CONF_q[31:24]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF24_ena_ctrl) + {ACP_CONF_q[31], ACP_CONF_q[30], ACP_CONF_q[29], ACP_CONF_q[28], + ACP_CONF_q[27], ACP_CONF_q[26], ACP_CONF_q[25], ACP_CONF_q[24]} + <= ACP_CONF_d[31:24]; + + assign ACP_CONF[23:16] = ACP_CONF_q[23:16]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF16_ena_ctrl) + {ACP_CONF_q[23], ACP_CONF_q[22], ACP_CONF_q[21], ACP_CONF_q[20], + ACP_CONF_q[19], ACP_CONF_q[18], ACP_CONF_q[17], ACP_CONF_q[16]} + <= ACP_CONF_d[23:16]; + + assign ACP_CONF[15:8] = ACP_CONF_q[15:8]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF8_ena_ctrl) + {ACP_CONF_q[15], ACP_CONF_q[14], ACP_CONF_q[13], ACP_CONF_q[12], + ACP_CONF_q[11], ACP_CONF_q[10], ACP_CONF_q[9], ACP_CONF_q[8]} <= + ACP_CONF_d[15:8]; + + assign ACP_CONF[7:0] = ACP_CONF_q[7:0]; + always @(posedge ACP_CONF0_clk_ctrl) + if (ACP_CONF0_ena_ctrl) + {ACP_CONF_q[7], ACP_CONF_q[6], ACP_CONF_q[5], ACP_CONF_q[4], + ACP_CONF_q[3], ACP_CONF_q[2], ACP_CONF_q[1], ACP_CONF_q[0]} <= + ACP_CONF_d[7:0]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR24_ena_ctrl) + {INT_CTR_q[31], INT_CTR_q[30], INT_CTR_q[29], INT_CTR_q[28], + INT_CTR_q[27], INT_CTR_q[26], INT_CTR_q[25], INT_CTR_q[24]} <= + INT_CTR_d[31:24]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR16_ena_ctrl) + {INT_CTR_q[23], INT_CTR_q[22], INT_CTR_q[21], INT_CTR_q[20], + INT_CTR_q[19], INT_CTR_q[18], INT_CTR_q[17], INT_CTR_q[16]} <= + INT_CTR_d[23:16]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR8_ena_ctrl) + {INT_CTR_q[15], INT_CTR_q[14], INT_CTR_q[13], INT_CTR_q[12], + INT_CTR_q[11], INT_CTR_q[10], INT_CTR_q[9], INT_CTR_q[8]} <= + INT_CTR_d[15:8]; + + always @(posedge INT_CTR0_clk_ctrl) + if (INT_CTR0_ena_ctrl) + {INT_CTR_q[7], INT_CTR_q[6], INT_CTR_q[5], INT_CTR_q[4], INT_CTR_q[3], + INT_CTR_q[2], INT_CTR_q[1], INT_CTR_q[0]} <= INT_CTR_d[7:0]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH31_clrn) + if (!INT_LATCH31_clrn) + INT_LATCH_q[31] <= 1'h0; + else + INT_LATCH_q[31] <= INT_LATCH_d[31]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH30_clrn) + if (!INT_LATCH30_clrn) + INT_LATCH_q[30] <= 1'h0; + else + INT_LATCH_q[30] <= INT_LATCH_d[30]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH29_clrn) + if (!INT_LATCH29_clrn) + INT_LATCH_q[29] <= 1'h0; + else + INT_LATCH_q[29] <= INT_LATCH_d[29]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH28_clrn) + if (!INT_LATCH28_clrn) + INT_LATCH_q[28] <= 1'h0; + else + INT_LATCH_q[28] <= INT_LATCH_d[28]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH27_clrn) + if (!INT_LATCH27_clrn) + INT_LATCH_q[27] <= 1'h0; + else + INT_LATCH_q[27] <= INT_LATCH_d[27]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH26_clrn) + if (!INT_LATCH26_clrn) + INT_LATCH_q[26] <= 1'h0; + else + INT_LATCH_q[26] <= INT_LATCH_d[26]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH25_clrn) + if (!INT_LATCH25_clrn) + INT_LATCH_q[25] <= 1'h0; + else + INT_LATCH_q[25] <= INT_LATCH_d[25]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH24_clrn) + if (!INT_LATCH24_clrn) + INT_LATCH_q[24] <= 1'h0; + else + INT_LATCH_q[24] <= INT_LATCH_d[24]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH23_clrn) + if (!INT_LATCH23_clrn) + INT_LATCH_q[23] <= 1'h0; + else + INT_LATCH_q[23] <= INT_LATCH_d[23]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH22_clrn) + if (!INT_LATCH22_clrn) + INT_LATCH_q[22] <= 1'h0; + else + INT_LATCH_q[22] <= INT_LATCH_d[22]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH21_clrn) + if (!INT_LATCH21_clrn) + INT_LATCH_q[21] <= 1'h0; + else + INT_LATCH_q[21] <= INT_LATCH_d[21]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH20_clrn) + if (!INT_LATCH20_clrn) + INT_LATCH_q[20] <= 1'h0; + else + INT_LATCH_q[20] <= INT_LATCH_d[20]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH19_clrn) + if (!INT_LATCH19_clrn) + INT_LATCH_q[19] <= 1'h0; + else + INT_LATCH_q[19] <= INT_LATCH_d[19]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH18_clrn) + if (!INT_LATCH18_clrn) + INT_LATCH_q[18] <= 1'h0; + else + INT_LATCH_q[18] <= INT_LATCH_d[18]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH17_clrn) + if (!INT_LATCH17_clrn) + INT_LATCH_q[17] <= 1'h0; + else + INT_LATCH_q[17] <= INT_LATCH_d[17]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH16_clrn) + if (!INT_LATCH16_clrn) + INT_LATCH_q[16] <= 1'h0; + else + INT_LATCH_q[16] <= INT_LATCH_d[16]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH15_clrn) + if (!INT_LATCH15_clrn) + INT_LATCH_q[15] <= 1'h0; + else + INT_LATCH_q[15] <= INT_LATCH_d[15]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH14_clrn) + if (!INT_LATCH14_clrn) + INT_LATCH_q[14] <= 1'h0; + else + INT_LATCH_q[14] <= INT_LATCH_d[14]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH13_clrn) + if (!INT_LATCH13_clrn) + INT_LATCH_q[13] <= 1'h0; + else + INT_LATCH_q[13] <= INT_LATCH_d[13]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH12_clrn) + if (!INT_LATCH12_clrn) + INT_LATCH_q[12] <= 1'h0; + else + INT_LATCH_q[12] <= INT_LATCH_d[12]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH11_clrn) + if (!INT_LATCH11_clrn) + INT_LATCH_q[11] <= 1'h0; + else + INT_LATCH_q[11] <= INT_LATCH_d[11]; + + always @(posedge INT_LATCH_clk or negedge INT_LATCH10_clrn) + if (!INT_LATCH10_clrn) + INT_LATCH_q[10] <= 1'h0; + else + INT_LATCH_q[10] <= INT_LATCH_d[10]; + + always @(posedge INT_LATCH9_clk_1 or negedge INT_LATCH9_clrn) + if (!INT_LATCH9_clrn) + INT_LATCH_q[9] <= 1'h0; + else + INT_LATCH_q[9] <= INT_LATCH_d[9]; + + always @(posedge INT_LATCH8_clk_1 or negedge INT_LATCH8_clrn) + if (!INT_LATCH8_clrn) + INT_LATCH_q[8] <= 1'h0; + else + INT_LATCH_q[8] <= INT_LATCH_d[8]; + + always @(posedge INT_LATCH7_clk_1 or negedge INT_LATCH7_clrn) + if (!INT_LATCH7_clrn) + INT_LATCH_q[7] <= 1'h0; + else + INT_LATCH_q[7] <= INT_LATCH_d[7]; + + always @(posedge INT_LATCH6_clk_1 or negedge INT_LATCH6_clrn) + if (!INT_LATCH6_clrn) + INT_LATCH_q[6] <= 1'h0; + else + INT_LATCH_q[6] <= INT_LATCH_d[6]; + + always @(posedge INT_LATCH5_clk_1 or negedge INT_LATCH5_clrn) + if (!INT_LATCH5_clrn) + INT_LATCH_q[5] <= 1'h0; + else + INT_LATCH_q[5] <= INT_LATCH_d[5]; + + always @(posedge INT_LATCH4_clk_1 or negedge INT_LATCH4_clrn) + if (!INT_LATCH4_clrn) + INT_LATCH_q[4] <= 1'h0; + else + INT_LATCH_q[4] <= INT_LATCH_d[4]; + + always @(posedge INT_LATCH3_clk_1 or negedge INT_LATCH3_clrn) + if (!INT_LATCH3_clrn) + INT_LATCH_q[3] <= 1'h0; + else + INT_LATCH_q[3] <= INT_LATCH_d[3]; + + always @(posedge INT_LATCH2_clk_1 or negedge INT_LATCH2_clrn) + if (!INT_LATCH2_clrn) + INT_LATCH_q[2] <= 1'h0; + else + INT_LATCH_q[2] <= INT_LATCH_d[2]; + + always @(posedge INT_LATCH1_clk_1 or negedge INT_LATCH1_clrn) + if (!INT_LATCH1_clrn) + INT_LATCH_q[1] <= 1'h0; + else + INT_LATCH_q[1] <= INT_LATCH_d[1]; + + always @(posedge INT_LATCH0_clk_1 or negedge INT_LATCH0_clrn) + if (!INT_LATCH0_clrn) + INT_LATCH_q[0] <= 1'h0; + else + INT_LATCH_q[0] <= INT_LATCH_d[0]; + + always @(posedge INT_CLEAR0_clk_ctrl) + INT_CLEAR_q <= INT_CLEAR_d; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA24_ena_ctrl) + {INT_ENA_q[31], INT_ENA_q[30], INT_ENA_q[29], INT_ENA_q[28], + INT_ENA_q[27], INT_ENA_q[26], INT_ENA_q[25], INT_ENA_q[24]} <= + INT_ENA_d[31:24]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA16_ena_ctrl) + {INT_ENA_q[23], INT_ENA_q[22], INT_ENA_q[21], INT_ENA_q[20], + INT_ENA_q[19], INT_ENA_q[18], INT_ENA_q[17], INT_ENA_q[16]} <= + INT_ENA_d[23:16]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA8_ena_ctrl) + {INT_ENA_q[15], INT_ENA_q[14], INT_ENA_q[13], INT_ENA_q[12], + INT_ENA_q[11], INT_ENA_q[10], INT_ENA_q[9], INT_ENA_q[8]} <= + INT_ENA_d[15:8]; + + always @(posedge INT_ENA0_clk_ctrl) + if (INT_ENA0_ena_ctrl) + {INT_ENA_q[7], INT_ENA_q[6], INT_ENA_q[5], INT_ENA_q[4], INT_ENA_q[3], + INT_ENA_q[2], INT_ENA_q[1], INT_ENA_q[0]} <= INT_ENA_d[7:0]; + + always @(posedge RTC_ADR0_clk_ctrl) + if (RTC_ADR0_ena_ctrl) + RTC_ADR_q <= RTC_ADR_d; + + always @(posedge ACHTELSEKUNDEN0_clk_ctrl) + if (ACHTELSEKUNDEN0_ena_ctrl) + ACHTELSEKUNDEN_q <= ACHTELSEKUNDEN_d; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE7__q[63] <= WERTE7__d[63]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE7__q[62] <= WERTE7__d[62]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE7__q[61] <= WERTE7__d[61]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE7__q[60] <= WERTE7__d[60]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE7__q[59] <= WERTE7__d[59]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE7__q[58] <= WERTE7__d[58]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE7__q[57] <= WERTE7__d[57]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE7__q[56] <= WERTE7__d[56]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE7__q[55] <= WERTE7__d[55]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE7__q[54] <= WERTE7__d[54]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE7__q[53] <= WERTE7__d[53]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE7__q[52] <= WERTE7__d[52]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE7__q[51] <= WERTE7__d[51]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE7__q[50] <= WERTE7__d[50]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE7__q[49] <= WERTE7__d[49]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE7__q[48] <= WERTE7__d[48]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE7__q[47] <= WERTE7__d[47]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE7__q[46] <= WERTE7__d[46]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE7__q[45] <= WERTE7__d[45]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE7__q[44] <= WERTE7__d[44]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE7__q[43] <= WERTE7__d[43]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE7__q[42] <= WERTE7__d[42]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE7__q[41] <= WERTE7__d[41]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE7__q[40] <= WERTE7__d[40]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE7__q[39] <= WERTE7__d[39]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE7__q[38] <= WERTE7__d[38]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE7__q[37] <= WERTE7__d[37]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE7__q[36] <= WERTE7__d[36]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE7__q[35] <= WERTE7__d[35]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE7__q[34] <= WERTE7__d[34]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE7__q[33] <= WERTE7__d[33]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE7__q[32] <= WERTE7__d[32]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE7__q[31] <= WERTE7__d[31]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE7__q[30] <= WERTE7__d[30]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE7__q[29] <= WERTE7__d[29]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE7__q[28] <= WERTE7__d[28]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE7__q[27] <= WERTE7__d[27]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE7__q[26] <= WERTE7__d[26]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE7__q[25] <= WERTE7__d[25]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE7__q[24] <= WERTE7__d[24]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE7__q[23] <= WERTE7__d[23]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE7__q[22] <= WERTE7__d[22]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE7__q[21] <= WERTE7__d[21]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE7__q[20] <= WERTE7__d[20]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE7__q[19] <= WERTE7__d[19]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE7__q[18] <= WERTE7__d[18]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE7__q[17] <= WERTE7__d[17]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE7__q[16] <= WERTE7__d[16]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE7__q[15] <= WERTE7__d[15]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE7__q[14] <= WERTE7__d[14]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_13_ena) + WERTE7__q[13] <= WERTE7__d[13]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE7__q[12] <= WERTE7__d[12]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE7__q[11] <= WERTE7__d[11]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE7__q[10] <= WERTE7__d[10]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_9_ena) + WERTE7__q[9] <= WERTE7__d[9]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_8_ena) + WERTE7__q[8] <= WERTE7__d[8]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_7_ena) + WERTE7__q[7] <= WERTE7__d[7]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_6_ena) + WERTE7__q[6] <= WERTE7__d[6]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE7__q[5] <= WERTE7__d[5]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_4_ena) + WERTE7__q[4] <= WERTE7__d[4]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE7__q[3] <= WERTE7__d[3]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_2_ena) + WERTE7__q[2] <= WERTE7__d[2]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE7__q[1] <= WERTE7__d[1]; + + always @(posedge WERTE7_0_clk_ctrl) + if (WERTE7_0_ena) + WERTE7__q[0] <= WERTE7__d[0]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE6__q[63] <= WERTE6__d[63]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE6__q[62] <= WERTE6__d[62]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE6__q[61] <= WERTE6__d[61]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE6__q[60] <= WERTE6__d[60]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE6__q[59] <= WERTE6__d[59]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE6__q[58] <= WERTE6__d[58]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE6__q[57] <= WERTE6__d[57]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE6__q[56] <= WERTE6__d[56]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE6__q[55] <= WERTE6__d[55]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE6__q[54] <= WERTE6__d[54]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE6__q[53] <= WERTE6__d[53]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE6__q[52] <= WERTE6__d[52]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE6__q[51] <= WERTE6__d[51]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE6__q[50] <= WERTE6__d[50]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE6__q[49] <= WERTE6__d[49]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE6__q[48] <= WERTE6__d[48]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE6__q[47] <= WERTE6__d[47]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE6__q[46] <= WERTE6__d[46]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE6__q[45] <= WERTE6__d[45]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE6__q[44] <= WERTE6__d[44]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE6__q[43] <= WERTE6__d[43]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE6__q[42] <= WERTE6__d[42]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE6__q[41] <= WERTE6__d[41]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE6__q[40] <= WERTE6__d[40]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE6__q[39] <= WERTE6__d[39]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE6__q[38] <= WERTE6__d[38]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE6__q[37] <= WERTE6__d[37]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE6__q[36] <= WERTE6__d[36]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE6__q[35] <= WERTE6__d[35]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE6__q[34] <= WERTE6__d[34]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE6__q[33] <= WERTE6__d[33]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE6__q[32] <= WERTE6__d[32]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE6__q[31] <= WERTE6__d[31]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE6__q[30] <= WERTE6__d[30]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE6__q[29] <= WERTE6__d[29]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE6__q[28] <= WERTE6__d[28]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE6__q[27] <= WERTE6__d[27]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE6__q[26] <= WERTE6__d[26]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE6__q[25] <= WERTE6__d[25]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE6__q[24] <= WERTE6__d[24]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE6__q[23] <= WERTE6__d[23]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE6__q[22] <= WERTE6__d[22]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE6__q[21] <= WERTE6__d[21]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE6__q[20] <= WERTE6__d[20]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE6__q[19] <= WERTE6__d[19]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE6__q[18] <= WERTE6__d[18]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE6__q[17] <= WERTE6__d[17]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE6__q[16] <= WERTE6__d[16]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE6__q[15] <= WERTE6__d[15]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE6__q[14] <= WERTE6__d[14]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_13_ena) + WERTE6__q[13] <= WERTE6__d[13]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE6__q[12] <= WERTE6__d[12]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE6__q[11] <= WERTE6__d[11]; + + always @(posedge WERTE6_0_clk_ctrl or negedge WERTE6_10_clrn) + if (!WERTE6_10_clrn) + WERTE6__q[10] <= 1'h0; + else + if (WERTE0_10_ena_ctrl) + WERTE6__q[10] <= WERTE6__d[10]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_9_ena) + WERTE6__q[9] <= WERTE6__d[9]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_8_ena) + WERTE6__q[8] <= WERTE6__d[8]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_7_ena) + WERTE6__q[7] <= WERTE6__d[7]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_6_ena) + WERTE6__q[6] <= WERTE6__d[6]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE6__q[5] <= WERTE6__d[5]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_4_ena) + WERTE6__q[4] <= WERTE6__d[4]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE6__q[3] <= WERTE6__d[3]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_2_ena) + WERTE6__q[2] <= WERTE6__d[2]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE6__q[1] <= WERTE6__d[1]; + + always @(posedge WERTE6_0_clk_ctrl) + if (WERTE6_0_ena) + WERTE6__q[0] <= WERTE6__d[0]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE5__q[63] <= WERTE5__d[63]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE5__q[62] <= WERTE5__d[62]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE5__q[61] <= WERTE5__d[61]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE5__q[60] <= WERTE5__d[60]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE5__q[59] <= WERTE5__d[59]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE5__q[58] <= WERTE5__d[58]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE5__q[57] <= WERTE5__d[57]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE5__q[56] <= WERTE5__d[56]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE5__q[55] <= WERTE5__d[55]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE5__q[54] <= WERTE5__d[54]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE5__q[53] <= WERTE5__d[53]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE5__q[52] <= WERTE5__d[52]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE5__q[51] <= WERTE5__d[51]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE5__q[50] <= WERTE5__d[50]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE5__q[49] <= WERTE5__d[49]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE5__q[48] <= WERTE5__d[48]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE5__q[47] <= WERTE5__d[47]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE5__q[46] <= WERTE5__d[46]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE5__q[45] <= WERTE5__d[45]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE5__q[44] <= WERTE5__d[44]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE5__q[43] <= WERTE5__d[43]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE5__q[42] <= WERTE5__d[42]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE5__q[41] <= WERTE5__d[41]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE5__q[40] <= WERTE5__d[40]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE5__q[39] <= WERTE5__d[39]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE5__q[38] <= WERTE5__d[38]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE5__q[37] <= WERTE5__d[37]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE5__q[36] <= WERTE5__d[36]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE5__q[35] <= WERTE5__d[35]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE5__q[34] <= WERTE5__d[34]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE5__q[33] <= WERTE5__d[33]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE5__q[32] <= WERTE5__d[32]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE5__q[31] <= WERTE5__d[31]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE5__q[30] <= WERTE5__d[30]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE5__q[29] <= WERTE5__d[29]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE5__q[28] <= WERTE5__d[28]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE5__q[27] <= WERTE5__d[27]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE5__q[26] <= WERTE5__d[26]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE5__q[25] <= WERTE5__d[25]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE5__q[24] <= WERTE5__d[24]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE5__q[23] <= WERTE5__d[23]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE5__q[22] <= WERTE5__d[22]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE5__q[21] <= WERTE5__d[21]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE5__q[20] <= WERTE5__d[20]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE5__q[19] <= WERTE5__d[19]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE5__q[18] <= WERTE5__d[18]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE5__q[17] <= WERTE5__d[17]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE5__q[16] <= WERTE5__d[16]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE5__q[15] <= WERTE5__d[15]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE5__q[14] <= WERTE5__d[14]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_13_ena) + WERTE5__q[13] <= WERTE5__d[13]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE5__q[12] <= WERTE5__d[12]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE5__q[11] <= WERTE5__d[11]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE5__q[10] <= WERTE5__d[10]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_9_ena) + WERTE5__q[9] <= WERTE5__d[9]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_8_ena) + WERTE5__q[8] <= WERTE5__d[8]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_7_ena) + WERTE5__q[7] <= WERTE5__d[7]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_6_ena) + WERTE5__q[6] <= WERTE5__d[6]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE5__q[5] <= WERTE5__d[5]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_4_ena) + WERTE5__q[4] <= WERTE5__d[4]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE5__q[3] <= WERTE5__d[3]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_2_ena) + WERTE5__q[2] <= WERTE5__d[2]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE5__q[1] <= WERTE5__d[1]; + + always @(posedge WERTE5_0_clk_ctrl) + if (WERTE5_0_ena) + WERTE5__q[0] <= WERTE5__d[0]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE4__q[63] <= WERTE4__d[63]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE4__q[62] <= WERTE4__d[62]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE4__q[61] <= WERTE4__d[61]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE4__q[60] <= WERTE4__d[60]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE4__q[59] <= WERTE4__d[59]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE4__q[58] <= WERTE4__d[58]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE4__q[57] <= WERTE4__d[57]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE4__q[56] <= WERTE4__d[56]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE4__q[55] <= WERTE4__d[55]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE4__q[54] <= WERTE4__d[54]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE4__q[53] <= WERTE4__d[53]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE4__q[52] <= WERTE4__d[52]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE4__q[51] <= WERTE4__d[51]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE4__q[50] <= WERTE4__d[50]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE4__q[49] <= WERTE4__d[49]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE4__q[48] <= WERTE4__d[48]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE4__q[47] <= WERTE4__d[47]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE4__q[46] <= WERTE4__d[46]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE4__q[45] <= WERTE4__d[45]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE4__q[44] <= WERTE4__d[44]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE4__q[43] <= WERTE4__d[43]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE4__q[42] <= WERTE4__d[42]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE4__q[41] <= WERTE4__d[41]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE4__q[40] <= WERTE4__d[40]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE4__q[39] <= WERTE4__d[39]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE4__q[38] <= WERTE4__d[38]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE4__q[37] <= WERTE4__d[37]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE4__q[36] <= WERTE4__d[36]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE4__q[35] <= WERTE4__d[35]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE4__q[34] <= WERTE4__d[34]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE4__q[33] <= WERTE4__d[33]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE4__q[32] <= WERTE4__d[32]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE4__q[31] <= WERTE4__d[31]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE4__q[30] <= WERTE4__d[30]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE4__q[29] <= WERTE4__d[29]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE4__q[28] <= WERTE4__d[28]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE4__q[27] <= WERTE4__d[27]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE4__q[26] <= WERTE4__d[26]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE4__q[25] <= WERTE4__d[25]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE4__q[24] <= WERTE4__d[24]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE4__q[23] <= WERTE4__d[23]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE4__q[22] <= WERTE4__d[22]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE4__q[21] <= WERTE4__d[21]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE4__q[20] <= WERTE4__d[20]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE4__q[19] <= WERTE4__d[19]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE4__q[18] <= WERTE4__d[18]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE4__q[17] <= WERTE4__d[17]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE4__q[16] <= WERTE4__d[16]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE4__q[15] <= WERTE4__d[15]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE4__q[14] <= WERTE4__d[14]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_13_ena) + WERTE4__q[13] <= WERTE4__d[13]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE4__q[12] <= WERTE4__d[12]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE4__q[11] <= WERTE4__d[11]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE4__q[10] <= WERTE4__d[10]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_9_ena) + WERTE4__q[9] <= WERTE4__d[9]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_8_ena) + WERTE4__q[8] <= WERTE4__d[8]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_7_ena) + WERTE4__q[7] <= WERTE4__d[7]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_6_ena) + WERTE4__q[6] <= WERTE4__d[6]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE4__q[5] <= WERTE4__d[5]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_4_ena) + WERTE4__q[4] <= WERTE4__d[4]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE4__q[3] <= WERTE4__d[3]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_2_ena) + WERTE4__q[2] <= WERTE4__d[2]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE4__q[1] <= WERTE4__d[1]; + + always @(posedge WERTE4_0_clk_ctrl) + if (WERTE4_0_ena) + WERTE4__q[0] <= WERTE4__d[0]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE3__q[63] <= WERTE3__d[63]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE3__q[62] <= WERTE3__d[62]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE3__q[61] <= WERTE3__d[61]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE3__q[60] <= WERTE3__d[60]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE3__q[59] <= WERTE3__d[59]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE3__q[58] <= WERTE3__d[58]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE3__q[57] <= WERTE3__d[57]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE3__q[56] <= WERTE3__d[56]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE3__q[55] <= WERTE3__d[55]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE3__q[54] <= WERTE3__d[54]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE3__q[53] <= WERTE3__d[53]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE3__q[52] <= WERTE3__d[52]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE3__q[51] <= WERTE3__d[51]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE3__q[50] <= WERTE3__d[50]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE3__q[49] <= WERTE3__d[49]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE3__q[48] <= WERTE3__d[48]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE3__q[47] <= WERTE3__d[47]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE3__q[46] <= WERTE3__d[46]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE3__q[45] <= WERTE3__d[45]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE3__q[44] <= WERTE3__d[44]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE3__q[43] <= WERTE3__d[43]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE3__q[42] <= WERTE3__d[42]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE3__q[41] <= WERTE3__d[41]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE3__q[40] <= WERTE3__d[40]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE3__q[39] <= WERTE3__d[39]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE3__q[38] <= WERTE3__d[38]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE3__q[37] <= WERTE3__d[37]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE3__q[36] <= WERTE3__d[36]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE3__q[35] <= WERTE3__d[35]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE3__q[34] <= WERTE3__d[34]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE3__q[33] <= WERTE3__d[33]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE3__q[32] <= WERTE3__d[32]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE3__q[31] <= WERTE3__d[31]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE3__q[30] <= WERTE3__d[30]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE3__q[29] <= WERTE3__d[29]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE3__q[28] <= WERTE3__d[28]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE3__q[27] <= WERTE3__d[27]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE3__q[26] <= WERTE3__d[26]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE3__q[25] <= WERTE3__d[25]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE3__q[24] <= WERTE3__d[24]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE3__q[23] <= WERTE3__d[23]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE3__q[22] <= WERTE3__d[22]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE3__q[21] <= WERTE3__d[21]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE3__q[20] <= WERTE3__d[20]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE3__q[19] <= WERTE3__d[19]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE3__q[18] <= WERTE3__d[18]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE3__q[17] <= WERTE3__d[17]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE3__q[16] <= WERTE3__d[16]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE3__q[15] <= WERTE3__d[15]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE3__q[14] <= WERTE3__d[14]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_13_ena) + WERTE3__q[13] <= WERTE3__d[13]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE3__q[12] <= WERTE3__d[12]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE3__q[11] <= WERTE3__d[11]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE3__q[10] <= WERTE3__d[10]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_9_ena) + WERTE3__q[9] <= WERTE3__d[9]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_8_ena) + WERTE3__q[8] <= WERTE3__d[8]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_7_ena) + WERTE3__q[7] <= WERTE3__d[7]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_6_ena) + WERTE3__q[6] <= WERTE3__d[6]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE3__q[5] <= WERTE3__d[5]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_4_ena) + WERTE3__q[4] <= WERTE3__d[4]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE3__q[3] <= WERTE3__d[3]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_2_ena) + WERTE3__q[2] <= WERTE3__d[2]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE3__q[1] <= WERTE3__d[1]; + + always @(posedge WERTE3_0_clk_ctrl) + if (WERTE3_0_ena) + WERTE3__q[0] <= WERTE3__d[0]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE2__q[63] <= WERTE2__d[63]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE2__q[62] <= WERTE2__d[62]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE2__q[61] <= WERTE2__d[61]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE2__q[60] <= WERTE2__d[60]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE2__q[59] <= WERTE2__d[59]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE2__q[58] <= WERTE2__d[58]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE2__q[57] <= WERTE2__d[57]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE2__q[56] <= WERTE2__d[56]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE2__q[55] <= WERTE2__d[55]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE2__q[54] <= WERTE2__d[54]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE2__q[53] <= WERTE2__d[53]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE2__q[52] <= WERTE2__d[52]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE2__q[51] <= WERTE2__d[51]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE2__q[50] <= WERTE2__d[50]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE2__q[49] <= WERTE2__d[49]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE2__q[48] <= WERTE2__d[48]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE2__q[47] <= WERTE2__d[47]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE2__q[46] <= WERTE2__d[46]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE2__q[45] <= WERTE2__d[45]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE2__q[44] <= WERTE2__d[44]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE2__q[43] <= WERTE2__d[43]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE2__q[42] <= WERTE2__d[42]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE2__q[41] <= WERTE2__d[41]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE2__q[40] <= WERTE2__d[40]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE2__q[39] <= WERTE2__d[39]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE2__q[38] <= WERTE2__d[38]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE2__q[37] <= WERTE2__d[37]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE2__q[36] <= WERTE2__d[36]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE2__q[35] <= WERTE2__d[35]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE2__q[34] <= WERTE2__d[34]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE2__q[33] <= WERTE2__d[33]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE2__q[32] <= WERTE2__d[32]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE2__q[31] <= WERTE2__d[31]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE2__q[30] <= WERTE2__d[30]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE2__q[29] <= WERTE2__d[29]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE2__q[28] <= WERTE2__d[28]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE2__q[27] <= WERTE2__d[27]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE2__q[26] <= WERTE2__d[26]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE2__q[25] <= WERTE2__d[25]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE2__q[24] <= WERTE2__d[24]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE2__q[23] <= WERTE2__d[23]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE2__q[22] <= WERTE2__d[22]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE2__q[21] <= WERTE2__d[21]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE2__q[20] <= WERTE2__d[20]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE2__q[19] <= WERTE2__d[19]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE2__q[18] <= WERTE2__d[18]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE2__q[17] <= WERTE2__d[17]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE2__q[16] <= WERTE2__d[16]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE2__q[15] <= WERTE2__d[15]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE2__q[14] <= WERTE2__d[14]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_13_ena) + WERTE2__q[13] <= WERTE2__d[13]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE2__q[12] <= WERTE2__d[12]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE2__q[11] <= WERTE2__d[11]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE2__q[10] <= WERTE2__d[10]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_9_ena) + WERTE2__q[9] <= WERTE2__d[9]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_8_ena) + WERTE2__q[8] <= WERTE2__d[8]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_7_ena) + WERTE2__q[7] <= WERTE2__d[7]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_6_ena) + WERTE2__q[6] <= WERTE2__d[6]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE2__q[5] <= WERTE2__d[5]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_4_ena) + WERTE2__q[4] <= WERTE2__d[4]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE2__q[3] <= WERTE2__d[3]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_2_ena) + WERTE2__q[2] <= WERTE2__d[2]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE2__q[1] <= WERTE2__d[1]; + + always @(posedge WERTE2_0_clk_ctrl) + if (WERTE2_0_ena) + WERTE2__q[0] <= WERTE2__d[0]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE1__q[63] <= WERTE1__d[63]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE1__q[62] <= WERTE1__d[62]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE1__q[61] <= WERTE1__d[61]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE1__q[60] <= WERTE1__d[60]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE1__q[59] <= WERTE1__d[59]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE1__q[58] <= WERTE1__d[58]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE1__q[57] <= WERTE1__d[57]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE1__q[56] <= WERTE1__d[56]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE1__q[55] <= WERTE1__d[55]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE1__q[54] <= WERTE1__d[54]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE1__q[53] <= WERTE1__d[53]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE1__q[52] <= WERTE1__d[52]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE1__q[51] <= WERTE1__d[51]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE1__q[50] <= WERTE1__d[50]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE1__q[49] <= WERTE1__d[49]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE1__q[48] <= WERTE1__d[48]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE1__q[47] <= WERTE1__d[47]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE1__q[46] <= WERTE1__d[46]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE1__q[45] <= WERTE1__d[45]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE1__q[44] <= WERTE1__d[44]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE1__q[43] <= WERTE1__d[43]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE1__q[42] <= WERTE1__d[42]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE1__q[41] <= WERTE1__d[41]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE1__q[40] <= WERTE1__d[40]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE1__q[39] <= WERTE1__d[39]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE1__q[38] <= WERTE1__d[38]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE1__q[37] <= WERTE1__d[37]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE1__q[36] <= WERTE1__d[36]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE1__q[35] <= WERTE1__d[35]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE1__q[34] <= WERTE1__d[34]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE1__q[33] <= WERTE1__d[33]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE1__q[32] <= WERTE1__d[32]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE1__q[31] <= WERTE1__d[31]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE1__q[30] <= WERTE1__d[30]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE1__q[29] <= WERTE1__d[29]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE1__q[28] <= WERTE1__d[28]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE1__q[27] <= WERTE1__d[27]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE1__q[26] <= WERTE1__d[26]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE1__q[25] <= WERTE1__d[25]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE1__q[24] <= WERTE1__d[24]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE1__q[23] <= WERTE1__d[23]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE1__q[22] <= WERTE1__d[22]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE1__q[21] <= WERTE1__d[21]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE1__q[20] <= WERTE1__d[20]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE1__q[19] <= WERTE1__d[19]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE1__q[18] <= WERTE1__d[18]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE1__q[17] <= WERTE1__d[17]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE1__q[16] <= WERTE1__d[16]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE1__q[15] <= WERTE1__d[15]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE1__q[14] <= WERTE1__d[14]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_13_ena) + WERTE1__q[13] <= WERTE1__d[13]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE1__q[12] <= WERTE1__d[12]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE1__q[11] <= WERTE1__d[11]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE1__q[10] <= WERTE1__d[10]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_9_ena) + WERTE1__q[9] <= WERTE1__d[9]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_8_ena) + WERTE1__q[8] <= WERTE1__d[8]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_7_ena) + WERTE1__q[7] <= WERTE1__d[7]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_6_ena) + WERTE1__q[6] <= WERTE1__d[6]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE1__q[5] <= WERTE1__d[5]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_4_ena) + WERTE1__q[4] <= WERTE1__d[4]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE1__q[3] <= WERTE1__d[3]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_2_ena) + WERTE1__q[2] <= WERTE1__d[2]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE1__q[1] <= WERTE1__d[1]; + + always @(posedge WERTE1_0_clk_ctrl) + if (WERTE1_0_ena) + WERTE1__q[0] <= WERTE1__d[0]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_63_ena_ctrl) + WERTE0__q[63] <= WERTE0__d[63]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_62_ena_ctrl) + WERTE0__q[62] <= WERTE0__d[62]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_61_ena_ctrl) + WERTE0__q[61] <= WERTE0__d[61]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_60_ena_ctrl) + WERTE0__q[60] <= WERTE0__d[60]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_59_ena_ctrl) + WERTE0__q[59] <= WERTE0__d[59]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_58_ena_ctrl) + WERTE0__q[58] <= WERTE0__d[58]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_57_ena_ctrl) + WERTE0__q[57] <= WERTE0__d[57]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_56_ena_ctrl) + WERTE0__q[56] <= WERTE0__d[56]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_55_ena_ctrl) + WERTE0__q[55] <= WERTE0__d[55]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_54_ena_ctrl) + WERTE0__q[54] <= WERTE0__d[54]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_53_ena_ctrl) + WERTE0__q[53] <= WERTE0__d[53]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_52_ena_ctrl) + WERTE0__q[52] <= WERTE0__d[52]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_51_ena_ctrl) + WERTE0__q[51] <= WERTE0__d[51]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_50_ena_ctrl) + WERTE0__q[50] <= WERTE0__d[50]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_49_ena_ctrl) + WERTE0__q[49] <= WERTE0__d[49]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_48_ena_ctrl) + WERTE0__q[48] <= WERTE0__d[48]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_47_ena_ctrl) + WERTE0__q[47] <= WERTE0__d[47]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_46_ena_ctrl) + WERTE0__q[46] <= WERTE0__d[46]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_45_ena_ctrl) + WERTE0__q[45] <= WERTE0__d[45]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_44_ena_ctrl) + WERTE0__q[44] <= WERTE0__d[44]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_43_ena_ctrl) + WERTE0__q[43] <= WERTE0__d[43]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_42_ena_ctrl) + WERTE0__q[42] <= WERTE0__d[42]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_41_ena_ctrl) + WERTE0__q[41] <= WERTE0__d[41]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_40_ena_ctrl) + WERTE0__q[40] <= WERTE0__d[40]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_39_ena_ctrl) + WERTE0__q[39] <= WERTE0__d[39]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_38_ena_ctrl) + WERTE0__q[38] <= WERTE0__d[38]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_37_ena_ctrl) + WERTE0__q[37] <= WERTE0__d[37]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_36_ena_ctrl) + WERTE0__q[36] <= WERTE0__d[36]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_35_ena_ctrl) + WERTE0__q[35] <= WERTE0__d[35]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_34_ena_ctrl) + WERTE0__q[34] <= WERTE0__d[34]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_33_ena_ctrl) + WERTE0__q[33] <= WERTE0__d[33]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_32_ena_ctrl) + WERTE0__q[32] <= WERTE0__d[32]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_31_ena_ctrl) + WERTE0__q[31] <= WERTE0__d[31]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_30_ena_ctrl) + WERTE0__q[30] <= WERTE0__d[30]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_29_ena_ctrl) + WERTE0__q[29] <= WERTE0__d[29]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_28_ena_ctrl) + WERTE0__q[28] <= WERTE0__d[28]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_27_ena_ctrl) + WERTE0__q[27] <= WERTE0__d[27]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_26_ena_ctrl) + WERTE0__q[26] <= WERTE0__d[26]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_25_ena_ctrl) + WERTE0__q[25] <= WERTE0__d[25]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_24_ena_ctrl) + WERTE0__q[24] <= WERTE0__d[24]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_23_ena_ctrl) + WERTE0__q[23] <= WERTE0__d[23]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_22_ena_ctrl) + WERTE0__q[22] <= WERTE0__d[22]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_21_ena_ctrl) + WERTE0__q[21] <= WERTE0__d[21]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_20_ena_ctrl) + WERTE0__q[20] <= WERTE0__d[20]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_19_ena_ctrl) + WERTE0__q[19] <= WERTE0__d[19]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_18_ena_ctrl) + WERTE0__q[18] <= WERTE0__d[18]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_17_ena_ctrl) + WERTE0__q[17] <= WERTE0__d[17]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_16_ena_ctrl) + WERTE0__q[16] <= WERTE0__d[16]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_15_ena_ctrl) + WERTE0__q[15] <= WERTE0__d[15]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_14_ena_ctrl) + WERTE0__q[14] <= WERTE0__d[14]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_13_ena) + WERTE0__q[13] <= WERTE0__d[13]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_12_ena_ctrl) + WERTE0__q[12] <= WERTE0__d[12]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_11_ena_ctrl) + WERTE0__q[11] <= WERTE0__d[11]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_10_ena_ctrl) + WERTE0__q[10] <= WERTE0__d[10]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_9_ena) + WERTE0__q[9] <= WERTE0__d[9]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_8_ena) + WERTE0__q[8] <= WERTE0__d[8]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_7_ena) + WERTE0__q[7] <= WERTE0__d[7]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_6_ena) + WERTE0__q[6] <= WERTE0__d[6]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_5_ena_ctrl) + WERTE0__q[5] <= WERTE0__d[5]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_4_ena) + WERTE0__q[4] <= WERTE0__d[4]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_3_ena_ctrl) + WERTE0__q[3] <= WERTE0__d[3]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_2_ena) + WERTE0__q[2] <= WERTE0__d[2]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_1_ena_ctrl) + WERTE0__q[1] <= WERTE0__d[1]; + + always @(posedge WERTE0_0_clk_ctrl) + if (WERTE0_0_ena) + WERTE0__q[0] <= WERTE0__d[0]; + + always @(posedge PIC_INT_SYNC0_clk_ctrl) + PIC_INT_SYNC_q <= PIC_INT_SYNC_d; + +// Start of original equations + +// BYT SELECT +// HWORD +// HHBYT +// LONG UND LINE + assign FB_B[0] = (FB_SIZE1 & (!FB_SIZE0) & (!FB_ADR[1])) | ((!FB_SIZE1) & + FB_SIZE0 & (!FB_ADR[1]) & (!FB_ADR[0])) | ((!FB_SIZE1) & (!FB_SIZE0)) + | (FB_SIZE1 & FB_SIZE0); + +// HWORD +// HLBYT +// LONG UND LINE + assign FB_B[1] = (FB_SIZE1 & (!FB_SIZE0) & (!FB_ADR[1])) | ((!FB_SIZE1) & + FB_SIZE0 & (!FB_ADR[1]) & FB_ADR[0]) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// LWORD +// LHBYT +// LONG UND LINE + assign FB_B[2] = (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) | ((!FB_SIZE1) & + FB_SIZE0 & FB_ADR[1] & (!FB_ADR[0])) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// LWORD +// LLBYT +// LONG UND LINE + assign FB_B[3] = (FB_SIZE1 & (!FB_SIZE0) & FB_ADR[1]) | ((!FB_SIZE1) & + FB_SIZE0 & FB_ADR[1] & FB_ADR[0]) | ((!FB_SIZE1) & (!FB_SIZE0)) | + (FB_SIZE1 & FB_SIZE0); + +// INTERRUPT CONTROL REGISTER: BIT0=INT5 AUSLÖSEN, 1=INT7 AUSLÖSEN + assign INT_CTR0_clk_ctrl = MAIN_CLK; + +// $10000/4 + assign INT_CTR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4000; + assign INT_CTR_d = FB_AD; + assign INT_CTR24_ena_ctrl = INT_CTR_CS & FB_B[0] & (!nFB_WR); + assign INT_CTR16_ena_ctrl = INT_CTR_CS & FB_B[1] & (!nFB_WR); + assign INT_CTR8_ena_ctrl = INT_CTR_CS & FB_B[2] & (!nFB_WR); + assign INT_CTR0_ena_ctrl = INT_CTR_CS & FB_B[3] & (!nFB_WR); + +// INTERRUPT ENABLE REGISTER BIT31=INT7,30=INT6,29=INT5,28=INT4,27=INT3,26=INT2 + assign INT_ENA0_clk_ctrl = MAIN_CLK; + +// $10004/4 + assign INT_ENA_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4001; + assign INT_ENA_d = FB_AD; + assign INT_ENA24_ena_ctrl = INT_ENA_CS & FB_B[0] & (!nFB_WR); + assign INT_ENA16_ena_ctrl = INT_ENA_CS & FB_B[1] & (!nFB_WR); + assign INT_ENA8_ena_ctrl = INT_ENA_CS & FB_B[2] & (!nFB_WR); + assign INT_ENA0_ena_ctrl = INT_ENA_CS & FB_B[3] & (!nFB_WR); + +// INTERRUPT CLEAR REGISTER WRITE ONLY 1=INTERRUPT CLEAR + assign INT_CLEAR0_clk_ctrl = MAIN_CLK; + +// $10008/4 + assign INT_CLEAR_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4002; + assign INT_CLEAR_d[31:24] = FB_AD[31:24] & {8{INT_CLEAR_CS}} & {8{FB_B[0]}} + & {8{!nFB_WR}}; + assign INT_CLEAR_d[23:16] = FB_AD[23:16] & {8{INT_CLEAR_CS}} & {8{FB_B[1]}} + & {8{!nFB_WR}}; + assign INT_CLEAR_d[15:8] = FB_AD[15:8] & {8{INT_CLEAR_CS}} & {8{FB_B[2]}} & + {8{!nFB_WR}}; + assign INT_CLEAR_d[7:0] = FB_AD[7:0] & {8{INT_CLEAR_CS}} & {8{FB_B[3]}} & + {8{!nFB_WR}}; + +// INTERRUPT LATCH REGISTER READ ONLY +// $1000C/4 + assign INT_LATCH_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h4003; + +// INTERRUPT + assign nIRQ[2] = !(HSYNC & INT_ENA_q[26]); + assign nIRQ[3] = !(INT_CTR_q[0] & INT_ENA_q[27]); + assign nIRQ[4] = !(VSYNC & INT_ENA_q[28]); + assign nIRQ[5] = INT_LATCH_q == 32'h0 & INT_ENA_q[29]; + assign nIRQ[6] = !((!nMFP_INT) & INT_ENA_q[30]); + assign nIRQ[7] = !(PSEUDO_BUS_ERROR & INT_ENA_q[31]); + +// SCC +// VME +// PADDLE +// PADDLE +// PADDLE +// MFP2 +// MFP2 +// MFP2 +// MFP2 +// TT SCSI +// ST UHR +// ST UHR +// DMA SOUND +// DMA SOUND +// DMA SOUND + assign PSEUDO_BUS_ERROR = (!nFB_CS1) & (FB_ADR[19:4] == 16'hF8C8 | + FB_ADR[19:4] == 16'hF8E0 | FB_ADR[19:4] == 16'hF920 | FB_ADR[19:4] == + 16'hF921 | FB_ADR[19:4] == 16'hF922 | FB_ADR[19:4] == 16'hFFA8 | + FB_ADR[19:4] == 16'hFFA9 | FB_ADR[19:4] == 16'hFFAA | FB_ADR[19:4] == + 16'hFFA8 | FB_ADR[19:8] == 12'b1111_1000_0111 | FB_ADR[19:4] == + 16'hFFC2 | FB_ADR[19:4] == 16'hFFC3 | FB_ADR[19:4] == 16'hF890 | + FB_ADR[19:4] == 16'hF891 | FB_ADR[19:4] == 16'hF892); + +// IF VIDEO ADR CHANGE +// WRITE VIDEO BASE ADR HIGH 0xFFFF8201/2 + assign TIN0 = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C100 & (!nFB_WR); + +// INTERRUPT LATCH + assign INT_LATCH_d = 32'hFFFF_FFFF; + assign INT_LATCH0_clk_1 = PIC_INT & INT_ENA_q[0]; + assign INT_LATCH1_clk_1 = E0_INT & INT_ENA_q[1]; + assign INT_LATCH2_clk_1 = DVI_INT & INT_ENA_q[2]; + assign INT_LATCH3_clk_1 = (!nPCI_INTA) & INT_ENA_q[3]; + assign INT_LATCH4_clk_1 = (!nPCI_INTB) & INT_ENA_q[4]; + assign INT_LATCH5_clk_1 = (!nPCI_INTC) & INT_ENA_q[5]; + assign INT_LATCH6_clk_1 = (!nPCI_INTD) & INT_ENA_q[6]; + assign INT_LATCH7_clk_1 = DSP_INT & INT_ENA_q[7]; + assign INT_LATCH8_clk_1 = VSYNC & INT_ENA_q[8]; + assign INT_LATCH9_clk_1 = HSYNC & INT_ENA_q[9]; + +// INTERRUPT CLEAR + assign {INT_LATCH31_clrn, INT_LATCH30_clrn, INT_LATCH29_clrn, + INT_LATCH28_clrn, INT_LATCH27_clrn, INT_LATCH26_clrn, + INT_LATCH25_clrn, INT_LATCH24_clrn, INT_LATCH23_clrn, + INT_LATCH22_clrn, INT_LATCH21_clrn, INT_LATCH20_clrn, + INT_LATCH19_clrn, INT_LATCH18_clrn, INT_LATCH17_clrn, + INT_LATCH16_clrn, INT_LATCH15_clrn, INT_LATCH14_clrn, + INT_LATCH13_clrn, INT_LATCH12_clrn, INT_LATCH11_clrn, + INT_LATCH10_clrn, INT_LATCH9_clrn, INT_LATCH8_clrn, INT_LATCH7_clrn, + INT_LATCH6_clrn, INT_LATCH5_clrn, INT_LATCH4_clrn, INT_LATCH3_clrn, + INT_LATCH2_clrn, INT_LATCH1_clrn, INT_LATCH0_clrn} = ~INT_CLEAR_q; + +// INT_IN + assign INT_IN[0] = PIC_INT; + assign INT_IN[1] = E0_INT; + assign INT_IN[2] = DVI_INT; + assign INT_IN[3] = !nPCI_INTA; + assign INT_IN[4] = !nPCI_INTB; + assign INT_IN[5] = !nPCI_INTC; + assign INT_IN[6] = !nPCI_INTD; + assign INT_IN[7] = DSP_INT; + assign INT_IN[8] = VSYNC; + assign INT_IN[9] = HSYNC; + assign INT_IN[25:10] = 16'h0; + assign INT_IN[26] = HSYNC; + assign INT_IN[27] = INT_CTR_q[0]; + assign INT_IN[28] = VSYNC; + assign INT_IN[29] = INT_LATCH_q != 32'h0; + assign INT_IN[30] = !nMFP_INT; + assign INT_IN[31] = DMA_DRQ; + +// *************************************************************************************** +// ACP CONFIG REGISTER: BIT 31-> 0=CF 1=IDE + assign ACP_CONF0_clk_ctrl = MAIN_CLK; + +// $4'0000/4 + assign ACP_CONF_CS = (!nFB_CS2) & FB_ADR[27:2] == 26'h1_0000; + assign ACP_CONF_d = FB_AD; + assign ACP_CONF24_ena_ctrl = ACP_CONF_CS & FB_B[0] & (!nFB_WR); + assign ACP_CONF16_ena_ctrl = ACP_CONF_CS & FB_B[1] & (!nFB_WR); + assign ACP_CONF8_ena_ctrl = ACP_CONF_CS & FB_B[2] & (!nFB_WR); + assign ACP_CONF0_ena_ctrl = ACP_CONF_CS & FB_B[3] & (!nFB_WR); + +// *************************************************************************************** +// ------------------------------------------------------------ +// C1287 0=SEK 2=MIN 4=STD 6=WOCHENTAG 7=TAG 8=MONAT 9=JAHR +// -------------------------------------------------------- + assign RTC_ADR0_clk_ctrl = MAIN_CLK; + assign RTC_ADR_d = FB_AD[21:16]; + +// FFFF8961 + assign UHR_AS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C4B0 & FB_B[1]; + +// FFFF8963 + assign UHR_DS = (!nFB_CS1) & FB_ADR[19:1] == 19'h7_C4B1 & FB_B[3]; + assign RTC_ADR0_ena_ctrl = UHR_AS & (!nFB_WR); + assign WERTE7_0_clk_ctrl = MAIN_CLK; + assign WERTE6_0_clk_ctrl = MAIN_CLK; + assign WERTE5_0_clk_ctrl = MAIN_CLK; + assign WERTE4_0_clk_ctrl = MAIN_CLK; + assign WERTE3_0_clk_ctrl = MAIN_CLK; + assign WERTE2_0_clk_ctrl = MAIN_CLK; + assign WERTE1_0_clk_ctrl = MAIN_CLK; + assign WERTE0_0_clk_ctrl = MAIN_CLK; + assign {WERTE7_0_d_1, WERTE6_0_d_1, WERTE5_0_d_1, WERTE4_0_d_1, + WERTE3_0_d_1, WERTE2_0_d_1, WERTE1_0_d_1, WERTE0_0_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[1], WERTE6__d[1], WERTE5__d[1], WERTE4__d[1], + WERTE3__d[1], WERTE2__d[1], WERTE1__d[1], WERTE0__d[1]} = + FB_AD[23:16]; + assign {WERTE7_2_d_1, WERTE6_2_d_1, WERTE5_2_d_1, WERTE4_2_d_1, + WERTE3_2_d_1, WERTE2_2_d_1, WERTE1_2_d_1, WERTE0_2_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[3], WERTE6__d[3], WERTE5__d[3], WERTE4__d[3], + WERTE3__d[3], WERTE2__d[3], WERTE1__d[3], WERTE0__d[3]} = + FB_AD[23:16]; + assign {WERTE7_4_d_1, WERTE6_4_d_1, WERTE5_4_d_1, WERTE4_4_d_1, + WERTE3_4_d_1, WERTE2_4_d_1, WERTE1_4_d_1, WERTE0_4_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[5], WERTE6__d[5], WERTE5__d[5], WERTE4__d[5], + WERTE3__d[5], WERTE2__d[5], WERTE1__d[5], WERTE0__d[5]} = + FB_AD[23:16]; + assign {WERTE7_6_d_1, WERTE6_6_d_1, WERTE5_6_d_1, WERTE4_6_d_1, + WERTE3_6_d_1, WERTE2_6_d_1, WERTE1_6_d_1, WERTE0_6_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_7_d_1, WERTE6_7_d_1, WERTE5_7_d_1, WERTE4_7_d_1, + WERTE3_7_d_1, WERTE2_7_d_1, WERTE1_7_d_1, WERTE0_7_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_8_d_1, WERTE6_8_d_1, WERTE5_8_d_1, WERTE4_8_d_1, + WERTE3_8_d_1, WERTE2_8_d_1, WERTE1_8_d_1, WERTE0_8_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_9_d_1, WERTE6_9_d_1, WERTE5_9_d_1, WERTE4_9_d_1, + WERTE3_9_d_1, WERTE2_9_d_1, WERTE1_9_d_1, WERTE0_9_d_1} = FB_AD[23:16] + & {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7__d[10], WERTE6__d[10], WERTE5__d[10], WERTE4__d[10], + WERTE3__d[10], WERTE2__d[10], WERTE1__d[10], WERTE0__d[10]} = + FB_AD[23:16]; + assign {WERTE7__d[11], WERTE6__d[11], WERTE5__d[11], WERTE4__d[11], + WERTE3__d[11], WERTE2_11_d_1, WERTE1_11_d_1, WERTE0_11_d_1} = + FB_AD[23:16]; + assign {WERTE7__d[12], WERTE6__d[12], WERTE5__d[12], WERTE4__d[12], + WERTE3__d[12], WERTE2__d[12], WERTE1__d[12], WERTE0__d[12]} = + FB_AD[23:16]; + assign {WERTE7_13_d_1, WERTE6__d[13], WERTE5__d[13], WERTE4__d[13], + WERTE3__d[13], WERTE2__d[13], WERTE1__d[13], WERTE0_13_d_1} = + FB_AD[23:16]; + assign {WERTE7__d[14], WERTE6__d[14], WERTE5__d[14], WERTE4__d[14], + WERTE3__d[14], WERTE2__d[14], WERTE1__d[14], WERTE0__d[14]} = + FB_AD[23:16]; + assign {WERTE7__d[15], WERTE6__d[15], WERTE5__d[15], WERTE4__d[15], + WERTE3__d[15], WERTE2__d[15], WERTE1__d[15], WERTE0__d[15]} = + FB_AD[23:16]; + assign {WERTE7__d[16], WERTE6__d[16], WERTE5__d[16], WERTE4__d[16], + WERTE3__d[16], WERTE2__d[16], WERTE1__d[16], WERTE0__d[16]} = + FB_AD[23:16]; + assign {WERTE7__d[17], WERTE6__d[17], WERTE5__d[17], WERTE4__d[17], + WERTE3__d[17], WERTE2__d[17], WERTE1__d[17], WERTE0__d[17]} = + FB_AD[23:16]; + assign {WERTE7__d[18], WERTE6__d[18], WERTE5__d[18], WERTE4__d[18], + WERTE3__d[18], WERTE2__d[18], WERTE1__d[18], WERTE0__d[18]} = + FB_AD[23:16]; + assign {WERTE7__d[19], WERTE6__d[19], WERTE5__d[19], WERTE4__d[19], + WERTE3__d[19], WERTE2__d[19], WERTE1__d[19], WERTE0__d[19]} = + FB_AD[23:16]; + assign {WERTE7__d[20], WERTE6__d[20], WERTE5__d[20], WERTE4__d[20], + WERTE3__d[20], WERTE2__d[20], WERTE1__d[20], WERTE0__d[20]} = + FB_AD[23:16]; + assign {WERTE7__d[21], WERTE6__d[21], WERTE5__d[21], WERTE4__d[21], + WERTE3__d[21], WERTE2__d[21], WERTE1__d[21], WERTE0__d[21]} = + FB_AD[23:16]; + assign {WERTE7__d[22], WERTE6__d[22], WERTE5__d[22], WERTE4__d[22], + WERTE3__d[22], WERTE2__d[22], WERTE1__d[22], WERTE0__d[22]} = + FB_AD[23:16]; + assign {WERTE7__d[23], WERTE6__d[23], WERTE5__d[23], WERTE4__d[23], + WERTE3__d[23], WERTE2__d[23], WERTE1__d[23], WERTE0__d[23]} = + FB_AD[23:16]; + assign {WERTE7__d[24], WERTE6__d[24], WERTE5__d[24], WERTE4__d[24], + WERTE3__d[24], WERTE2__d[24], WERTE1__d[24], WERTE0__d[24]} = + FB_AD[23:16]; + assign {WERTE7__d[25], WERTE6__d[25], WERTE5__d[25], WERTE4__d[25], + WERTE3__d[25], WERTE2__d[25], WERTE1__d[25], WERTE0__d[25]} = + FB_AD[23:16]; + assign {WERTE7__d[26], WERTE6__d[26], WERTE5__d[26], WERTE4__d[26], + WERTE3__d[26], WERTE2__d[26], WERTE1__d[26], WERTE0__d[26]} = + FB_AD[23:16]; + assign {WERTE7__d[27], WERTE6__d[27], WERTE5__d[27], WERTE4__d[27], + WERTE3__d[27], WERTE2__d[27], WERTE1__d[27], WERTE0__d[27]} = + FB_AD[23:16]; + assign {WERTE7__d[28], WERTE6__d[28], WERTE5__d[28], WERTE4__d[28], + WERTE3__d[28], WERTE2__d[28], WERTE1__d[28], WERTE0__d[28]} = + FB_AD[23:16]; + assign {WERTE7__d[29], WERTE6__d[29], WERTE5__d[29], WERTE4__d[29], + WERTE3__d[29], WERTE2__d[29], WERTE1__d[29], WERTE0__d[29]} = + FB_AD[23:16]; + assign {WERTE7__d[30], WERTE6__d[30], WERTE5__d[30], WERTE4__d[30], + WERTE3__d[30], WERTE2__d[30], WERTE1__d[30], WERTE0__d[30]} = + FB_AD[23:16]; + assign {WERTE7__d[31], WERTE6__d[31], WERTE5__d[31], WERTE4__d[31], + WERTE3__d[31], WERTE2__d[31], WERTE1__d[31], WERTE0__d[31]} = + FB_AD[23:16]; + assign {WERTE7__d[32], WERTE6__d[32], WERTE5__d[32], WERTE4__d[32], + WERTE3__d[32], WERTE2__d[32], WERTE1__d[32], WERTE0__d[32]} = + FB_AD[23:16]; + assign {WERTE7__d[33], WERTE6__d[33], WERTE5__d[33], WERTE4__d[33], + WERTE3__d[33], WERTE2__d[33], WERTE1__d[33], WERTE0__d[33]} = + FB_AD[23:16]; + assign {WERTE7__d[34], WERTE6__d[34], WERTE5__d[34], WERTE4__d[34], + WERTE3__d[34], WERTE2__d[34], WERTE1__d[34], WERTE0__d[34]} = + FB_AD[23:16]; + assign {WERTE7__d[35], WERTE6__d[35], WERTE5__d[35], WERTE4__d[35], + WERTE3__d[35], WERTE2__d[35], WERTE1__d[35], WERTE0__d[35]} = + FB_AD[23:16]; + assign {WERTE7__d[36], WERTE6__d[36], WERTE5__d[36], WERTE4__d[36], + WERTE3__d[36], WERTE2__d[36], WERTE1__d[36], WERTE0__d[36]} = + FB_AD[23:16]; + assign {WERTE7__d[37], WERTE6__d[37], WERTE5__d[37], WERTE4__d[37], + WERTE3__d[37], WERTE2__d[37], WERTE1__d[37], WERTE0__d[37]} = + FB_AD[23:16]; + assign {WERTE7__d[38], WERTE6__d[38], WERTE5__d[38], WERTE4__d[38], + WERTE3__d[38], WERTE2__d[38], WERTE1__d[38], WERTE0__d[38]} = + FB_AD[23:16]; + assign {WERTE7__d[39], WERTE6__d[39], WERTE5__d[39], WERTE4__d[39], + WERTE3__d[39], WERTE2__d[39], WERTE1__d[39], WERTE0__d[39]} = + FB_AD[23:16]; + assign {WERTE7__d[40], WERTE6__d[40], WERTE5__d[40], WERTE4__d[40], + WERTE3__d[40], WERTE2__d[40], WERTE1__d[40], WERTE0__d[40]} = + FB_AD[23:16]; + assign {WERTE7__d[41], WERTE6__d[41], WERTE5__d[41], WERTE4__d[41], + WERTE3__d[41], WERTE2__d[41], WERTE1__d[41], WERTE0__d[41]} = + FB_AD[23:16]; + assign {WERTE7__d[42], WERTE6__d[42], WERTE5__d[42], WERTE4__d[42], + WERTE3__d[42], WERTE2__d[42], WERTE1__d[42], WERTE0__d[42]} = + FB_AD[23:16]; + assign {WERTE7__d[43], WERTE6__d[43], WERTE5__d[43], WERTE4__d[43], + WERTE3__d[43], WERTE2__d[43], WERTE1__d[43], WERTE0__d[43]} = + FB_AD[23:16]; + assign {WERTE7__d[44], WERTE6__d[44], WERTE5__d[44], WERTE4__d[44], + WERTE3__d[44], WERTE2__d[44], WERTE1__d[44], WERTE0__d[44]} = + FB_AD[23:16]; + assign {WERTE7__d[45], WERTE6__d[45], WERTE5__d[45], WERTE4__d[45], + WERTE3__d[45], WERTE2__d[45], WERTE1__d[45], WERTE0__d[45]} = + FB_AD[23:16]; + assign {WERTE7__d[46], WERTE6__d[46], WERTE5__d[46], WERTE4__d[46], + WERTE3__d[46], WERTE2__d[46], WERTE1__d[46], WERTE0__d[46]} = + FB_AD[23:16]; + assign {WERTE7__d[47], WERTE6__d[47], WERTE5__d[47], WERTE4__d[47], + WERTE3__d[47], WERTE2__d[47], WERTE1__d[47], WERTE0__d[47]} = + FB_AD[23:16]; + assign {WERTE7__d[48], WERTE6__d[48], WERTE5__d[48], WERTE4__d[48], + WERTE3__d[48], WERTE2__d[48], WERTE1__d[48], WERTE0__d[48]} = + FB_AD[23:16]; + assign {WERTE7__d[49], WERTE6__d[49], WERTE5__d[49], WERTE4__d[49], + WERTE3__d[49], WERTE2__d[49], WERTE1__d[49], WERTE0__d[49]} = + FB_AD[23:16]; + assign {WERTE7__d[50], WERTE6__d[50], WERTE5__d[50], WERTE4__d[50], + WERTE3__d[50], WERTE2__d[50], WERTE1__d[50], WERTE0__d[50]} = + FB_AD[23:16]; + assign {WERTE7__d[51], WERTE6__d[51], WERTE5__d[51], WERTE4__d[51], + WERTE3__d[51], WERTE2__d[51], WERTE1__d[51], WERTE0__d[51]} = + FB_AD[23:16]; + assign {WERTE7__d[52], WERTE6__d[52], WERTE5__d[52], WERTE4__d[52], + WERTE3__d[52], WERTE2__d[52], WERTE1__d[52], WERTE0__d[52]} = + FB_AD[23:16]; + assign {WERTE7__d[53], WERTE6__d[53], WERTE5__d[53], WERTE4__d[53], + WERTE3__d[53], WERTE2__d[53], WERTE1__d[53], WERTE0__d[53]} = + FB_AD[23:16]; + assign {WERTE7__d[54], WERTE6__d[54], WERTE5__d[54], WERTE4__d[54], + WERTE3__d[54], WERTE2__d[54], WERTE1__d[54], WERTE0__d[54]} = + FB_AD[23:16]; + assign {WERTE7__d[55], WERTE6__d[55], WERTE5__d[55], WERTE4__d[55], + WERTE3__d[55], WERTE2__d[55], WERTE1__d[55], WERTE0__d[55]} = + FB_AD[23:16]; + assign {WERTE7__d[56], WERTE6__d[56], WERTE5__d[56], WERTE4__d[56], + WERTE3__d[56], WERTE2__d[56], WERTE1__d[56], WERTE0__d[56]} = + FB_AD[23:16]; + assign {WERTE7__d[57], WERTE6__d[57], WERTE5__d[57], WERTE4__d[57], + WERTE3__d[57], WERTE2__d[57], WERTE1__d[57], WERTE0__d[57]} = + FB_AD[23:16]; + assign {WERTE7__d[58], WERTE6__d[58], WERTE5__d[58], WERTE4__d[58], + WERTE3__d[58], WERTE2__d[58], WERTE1__d[58], WERTE0__d[58]} = + FB_AD[23:16]; + assign {WERTE7__d[59], WERTE6__d[59], WERTE5__d[59], WERTE4__d[59], + WERTE3__d[59], WERTE2__d[59], WERTE1__d[59], WERTE0__d[59]} = + FB_AD[23:16]; + assign {WERTE7__d[60], WERTE6__d[60], WERTE5__d[60], WERTE4__d[60], + WERTE3__d[60], WERTE2__d[60], WERTE1__d[60], WERTE0__d[60]} = + FB_AD[23:16]; + assign {WERTE7__d[61], WERTE6__d[61], WERTE5__d[61], WERTE4__d[61], + WERTE3__d[61], WERTE2__d[61], WERTE1__d[61], WERTE0__d[61]} = + FB_AD[23:16]; + assign {WERTE7__d[62], WERTE6__d[62], WERTE5__d[62], WERTE4__d[62], + WERTE3__d[62], WERTE2__d[62], WERTE1__d[62], WERTE0__d[62]} = + FB_AD[23:16]; + assign {WERTE7__d[63], WERTE6__d[63], WERTE5__d[63], WERTE4__d[63], + WERTE3__d[63], WERTE2__d[63], WERTE1__d[63], WERTE0__d[63]} = + FB_AD[23:16]; + assign {WERTE7_0_ena_1, WERTE6_0_ena_1, WERTE5_0_ena_1, WERTE4_0_ena_1, + WERTE3_0_ena_1, WERTE2_0_ena_1, WERTE1_0_ena_1, WERTE0_0_ena_1} = + {8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_1_ena_ctrl = RTC_ADR_q == 6'b00_0001 & UHR_DS & (!nFB_WR); + assign {WERTE7_2_ena_1, WERTE6_2_ena_1, WERTE5_2_ena_1, WERTE4_2_ena_1, + WERTE3_2_ena_1, WERTE2_2_ena_1, WERTE1_2_ena_1, WERTE0_2_ena_1} = + {8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_3_ena_ctrl = RTC_ADR_q == 6'b00_0011 & UHR_DS & (!nFB_WR); + assign {WERTE7_4_ena_1, WERTE6_4_ena_1, WERTE5_4_ena_1, WERTE4_4_ena_1, + WERTE3_4_ena_1, WERTE2_4_ena_1, WERTE1_4_ena_1, WERTE0_4_ena_1} = + {8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_5_ena_ctrl = RTC_ADR_q == 6'b00_0101 & UHR_DS & (!nFB_WR); + assign {WERTE7_6_ena_1, WERTE6_6_ena_1, WERTE5_6_ena_1, WERTE4_6_ena_1, + WERTE3_6_ena_1, WERTE2_6_ena_1, WERTE1_6_ena_1, WERTE0_6_ena_1} = + {8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_7_ena_1, WERTE6_7_ena_1, WERTE5_7_ena_1, WERTE4_7_ena_1, + WERTE3_7_ena_1, WERTE2_7_ena_1, WERTE1_7_ena_1, WERTE0_7_ena_1} = + {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_8_ena_1, WERTE6_8_ena_1, WERTE5_8_ena_1, WERTE4_8_ena_1, + WERTE3_8_ena_1, WERTE2_8_ena_1, WERTE1_8_ena_1, WERTE0_8_ena_1} = + {8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign {WERTE7_9_ena_1, WERTE6_9_ena_1, WERTE5_9_ena_1, WERTE4_9_ena_1, + WERTE3_9_ena_1, WERTE2_9_ena_1, WERTE1_9_ena_1, WERTE0_9_ena_1} = + {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_10_ena_ctrl = RTC_ADR_q == 6'b00_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_11_ena_ctrl = RTC_ADR_q == 6'b00_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_12_ena_ctrl = RTC_ADR_q == 6'b00_1100 & UHR_DS & (!nFB_WR); + assign {WERTE7_13_ena, WERTE6_13_ena, WERTE5_13_ena, WERTE4_13_ena, + WERTE3_13_ena, WERTE2_13_ena, WERTE1_13_ena, WERTE0_13_ena_1} = + {8{RTC_ADR_q == 6'b00_1101}} & {8{UHR_DS}} & {8{!nFB_WR}}; + assign WERTE0_14_ena_ctrl = RTC_ADR_q == 6'b00_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_15_ena_ctrl = RTC_ADR_q == 6'b00_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_16_ena_ctrl = RTC_ADR_q == 6'b01_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_17_ena_ctrl = RTC_ADR_q == 6'b01_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_18_ena_ctrl = RTC_ADR_q == 6'b01_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_19_ena_ctrl = RTC_ADR_q == 6'b01_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_20_ena_ctrl = RTC_ADR_q == 6'b01_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_21_ena_ctrl = RTC_ADR_q == 6'b01_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_22_ena_ctrl = RTC_ADR_q == 6'b01_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_23_ena_ctrl = RTC_ADR_q == 6'b01_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_24_ena_ctrl = RTC_ADR_q == 6'b01_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_25_ena_ctrl = RTC_ADR_q == 6'b01_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_26_ena_ctrl = RTC_ADR_q == 6'b01_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_27_ena_ctrl = RTC_ADR_q == 6'b01_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_28_ena_ctrl = RTC_ADR_q == 6'b01_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_29_ena_ctrl = RTC_ADR_q == 6'b01_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_30_ena_ctrl = RTC_ADR_q == 6'b01_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_31_ena_ctrl = RTC_ADR_q == 6'b01_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_32_ena_ctrl = RTC_ADR_q == 6'b10_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_33_ena_ctrl = RTC_ADR_q == 6'b10_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_34_ena_ctrl = RTC_ADR_q == 6'b10_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_35_ena_ctrl = RTC_ADR_q == 6'b10_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_36_ena_ctrl = RTC_ADR_q == 6'b10_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_37_ena_ctrl = RTC_ADR_q == 6'b10_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_38_ena_ctrl = RTC_ADR_q == 6'b10_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_39_ena_ctrl = RTC_ADR_q == 6'b10_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_40_ena_ctrl = RTC_ADR_q == 6'b10_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_41_ena_ctrl = RTC_ADR_q == 6'b10_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_42_ena_ctrl = RTC_ADR_q == 6'b10_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_43_ena_ctrl = RTC_ADR_q == 6'b10_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_44_ena_ctrl = RTC_ADR_q == 6'b10_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_45_ena_ctrl = RTC_ADR_q == 6'b10_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_46_ena_ctrl = RTC_ADR_q == 6'b10_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_47_ena_ctrl = RTC_ADR_q == 6'b10_1111 & UHR_DS & (!nFB_WR); + assign WERTE0_48_ena_ctrl = RTC_ADR_q == 6'b11_0000 & UHR_DS & (!nFB_WR); + assign WERTE0_49_ena_ctrl = RTC_ADR_q == 6'b11_0001 & UHR_DS & (!nFB_WR); + assign WERTE0_50_ena_ctrl = RTC_ADR_q == 6'b11_0010 & UHR_DS & (!nFB_WR); + assign WERTE0_51_ena_ctrl = RTC_ADR_q == 6'b11_0011 & UHR_DS & (!nFB_WR); + assign WERTE0_52_ena_ctrl = RTC_ADR_q == 6'b11_0100 & UHR_DS & (!nFB_WR); + assign WERTE0_53_ena_ctrl = RTC_ADR_q == 6'b11_0101 & UHR_DS & (!nFB_WR); + assign WERTE0_54_ena_ctrl = RTC_ADR_q == 6'b11_0110 & UHR_DS & (!nFB_WR); + assign WERTE0_55_ena_ctrl = RTC_ADR_q == 6'b11_0111 & UHR_DS & (!nFB_WR); + assign WERTE0_56_ena_ctrl = RTC_ADR_q == 6'b11_1000 & UHR_DS & (!nFB_WR); + assign WERTE0_57_ena_ctrl = RTC_ADR_q == 6'b11_1001 & UHR_DS & (!nFB_WR); + assign WERTE0_58_ena_ctrl = RTC_ADR_q == 6'b11_1010 & UHR_DS & (!nFB_WR); + assign WERTE0_59_ena_ctrl = RTC_ADR_q == 6'b11_1011 & UHR_DS & (!nFB_WR); + assign WERTE0_60_ena_ctrl = RTC_ADR_q == 6'b11_1100 & UHR_DS & (!nFB_WR); + assign WERTE0_61_ena_ctrl = RTC_ADR_q == 6'b11_1101 & UHR_DS & (!nFB_WR); + assign WERTE0_62_ena_ctrl = RTC_ADR_q == 6'b11_1110 & UHR_DS & (!nFB_WR); + assign WERTE0_63_ena_ctrl = RTC_ADR_q == 6'b11_1111 & UHR_DS & (!nFB_WR); + assign PIC_INT_SYNC0_clk_ctrl = MAIN_CLK; + assign PIC_INT_SYNC_d[0] = PIC_INT; + assign PIC_INT_SYNC_d[1] = PIC_INT_SYNC_q[0]; + assign PIC_INT_SYNC_d[2] = (!PIC_INT_SYNC_q[1]) & PIC_INT_SYNC_q[0]; + assign UPDATE_ON_1 = !WERTE7__q[11]; + +// KEIN UIP + assign WERTE6_10_clrn = gnd; + +// UPDATE ON OFF + assign UPDATE_ON_2 = !WERTE7__q[11]; + +// IMMER BINARY + assign WERTE2_11_d_2 = vcc; + +// IMMER 24H FORMAT + assign WERTE1_11_d_2 = vcc; + +// IMMER SOMMERZEITKORREKTUR + assign WERTE0_11_d_2 = vcc; + +// IMMER RICHTIG + assign WERTE7_13_d_2 = vcc; + +// SOMMER WINTERZEIT: BIT 0 IM REGISTER D IST DIE INFORMATION OB SOMMERZEIT IST (BRAUCHT MAN FÜR RÜCKSCHALTUNG) +// LETZTER SONNTAG IM APRIL + assign SOMMERZEIT = {WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} == + 8'b0000_0001 & {WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], + WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + == 8'b0000_0001 & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_0100 & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + > 8'b0001_0111; + assign WERTE0_13_d_2 = SOMMERZEIT; + assign WERTE0_13_ena_2 = INC_STD & (SOMMERZEIT | WINTERZEIT); + +// LETZTER SONNTAG IM OKTOBER + assign WINTERZEIT = {WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} == + 8'b0000_0001 & {WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], + WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + == 8'b0000_0001 & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1010 & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + > 8'b0001_1000 & WERTE0__q[13]; + +// ACHTELSEKUNDEN + assign ACHTELSEKUNDEN0_clk_ctrl = MAIN_CLK; + assign ACHTELSEKUNDEN_d = ACHTELSEKUNDEN_q + 3'b001; + assign ACHTELSEKUNDEN0_ena_ctrl = PIC_INT_SYNC_q[2] & UPDATE_ON; + +// SEKUNDEN + assign INC_SEC = ACHTELSEKUNDEN_q == 3'b111 & PIC_INT_SYNC_q[2] & UPDATE_ON; + +// SEKUNDEN ZÄHLEN BIS 59 + assign {WERTE7_0_d_2, WERTE6_0_d_2, WERTE5_0_d_2, WERTE4_0_d_2, + WERTE3_0_d_2, WERTE2_0_d_2, WERTE1_0_d_2, WERTE0_0_d_2} = + ({WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], WERTE4__q[0], + WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + + 8'b0000_0001) & {8{{WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], + WERTE4__q[0], WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + != 8'b0011_1011}} & (~({8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_0_ena_2, WERTE6_0_ena_2, WERTE5_0_ena_2, WERTE4_0_ena_2, + WERTE3_0_ena_2, WERTE2_0_ena_2, WERTE1_0_ena_2, WERTE0_0_ena_2} = + {8{INC_SEC}} & (~({8{RTC_ADR_q == 6'b00_0000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// MINUTEN + assign INC_MIN = INC_SEC & {WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], + WERTE4__q[0], WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} + == 8'b0011_1011; + +// MINUTEN ZÄHLEN BIS 59 + assign {WERTE7_2_d_2, WERTE6_2_d_2, WERTE5_2_d_2, WERTE4_2_d_2, + WERTE3_2_d_2, WERTE2_2_d_2, WERTE1_2_d_2, WERTE0_2_d_2} = + ({WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], WERTE4__q[2], + WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + + 8'b0000_0001) & {8{{WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + != 8'b0011_1011}} & (~({8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_2_ena_2, WERTE6_2_ena_2, WERTE5_2_ena_2, WERTE4_2_ena_2, + WERTE3_2_ena_2, WERTE2_2_ena_2, WERTE1_2_ena_2, WERTE0_2_ena_2} = + {8{INC_MIN}} & (~({8{RTC_ADR_q == 6'b00_0010}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// STUNDEN + assign INC_STD = INC_MIN & {WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + == 8'b0011_1011; + +// STUNDEN ZÄHLEN BIS 23 + assign {WERTE7_4_d_2, WERTE6_4_d_2, WERTE5_4_d_2, WERTE4_4_d_2, + WERTE3_4_d_2, WERTE2_4_d_2, WERTE1_4_d_2, WERTE0_4_d_2} = + (({WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], + WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} + + 8'b0000_0001) + (8'b0000_0001 & {8{SOMMERZEIT}})) & {8{{WERTE7__q[4], + WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], WERTE3__q[4], WERTE2__q[4], + WERTE1__q[4], WERTE0__q[4]} != 8'b0001_0111}} & (~({8{RTC_ADR_q == + 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}})); + +// EINE STUNDE AUSLASSEN WENN WINTERZEITUMSCHALTUNG UND NOCH SOMMERZEIT + assign {WERTE7_4_ena_2, WERTE6_4_ena_2, WERTE5_4_ena_2, WERTE4_4_ena_2, + WERTE3_4_ena_2, WERTE2_4_ena_2, WERTE1_4_ena_2, WERTE0_4_ena_2} = + {8{INC_STD}} & (~({8{WINTERZEIT}} & {8{WERTE0__q[12]}})) & + (~({8{RTC_ADR_q == 6'b00_0100}} & {8{UHR_DS}} & {8{!nFB_WR}})); + +// WOCHENTAG UND TAG + assign INC_TAG = INC_STD & {WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], + WERTE4__q[2], WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} + == 8'b0001_0111; + +// WOCHENTAG ZÄHLEN BIS 7 +// DANN BEI 1 WEITER + assign {WERTE7_6_d_2, WERTE6_6_d_2, WERTE5_6_d_2, WERTE4_6_d_2, + WERTE3_6_d_2, WERTE2_6_d_2, WERTE1_6_d_2, WERTE0_6_d_2} = + (({WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} + + 8'b0000_0001) & {8{{WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], + WERTE4__q[6], WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} + != 8'b0000_0111}} & (~({8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & + {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[6], WERTE6__q[6], + WERTE5__q[6], WERTE4__q[6], WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], + WERTE0__q[6]} == 8'b0000_0111}} & (~({8{RTC_ADR_q == 6'b00_0110}} & + {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_6_ena_2, WERTE6_6_ena_2, WERTE5_6_ena_2, WERTE4_6_ena_2, + WERTE3_6_ena_2, WERTE2_6_ena_2, WERTE1_6_ena_2, WERTE0_6_ena_2} = + {8{INC_TAG}} & (~({8{RTC_ADR_q == 6'b00_0110}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign ANZAHL_TAGE_DES_MONATS = (8'b0001_1111 & ({8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0001}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0011}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0101}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_0111}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1000}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1010}} | {8{{WERTE7__q[8], + WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], + WERTE1__q[8], WERTE0__q[8]} == 8'b0000_1100}})) | (8'b0001_1110 & + ({8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} == + 8'b0000_0100}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_0110}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1001}} | {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1011}})) | (8'b0001_1101 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_0010}} & {8{{WERTE1__q[9], WERTE0__q[9]} == + 2'b00}}) | (8'b0001_1100 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_0010}} & {8{{WERTE1__q[9], WERTE0__q[9]} != + 2'b00}}); + +// TAG ZÄHLEN BIS MONATSENDE +// DANN BEI 1 WEITER + assign {WERTE7_7_d_2, WERTE6_7_d_2, WERTE5_7_d_2, WERTE4_7_d_2, + WERTE3_7_d_2, WERTE2_7_d_2, WERTE1_7_d_2, WERTE0_7_d_2} = + (({WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], WERTE4__q[7], + WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + + 8'b0000_0001) & {8{{WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + != ANZAHL_TAGE_DES_MONATS}} & (~({8{RTC_ADR_q == 6'b00_0111}} & + {8{UHR_DS}} & {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[7], + WERTE6__q[7], WERTE5__q[7], WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], + WERTE1__q[7], WERTE0__q[7]} == ANZAHL_TAGE_DES_MONATS}} & + (~({8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_7_ena_2, WERTE6_7_ena_2, WERTE5_7_ena_2, WERTE4_7_ena_2, + WERTE3_7_ena_2, WERTE2_7_ena_2, WERTE1_7_ena_2, WERTE0_7_ena_2} = + {8{INC_TAG}} & (~({8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// MONATE + assign INC_MONAT = INC_TAG & {WERTE7__q[7], WERTE6__q[7], WERTE5__q[7], + WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], WERTE0__q[7]} + == ANZAHL_TAGE_DES_MONATS; + +// MONATE ZÄHLEN BIS 12 +// DANN BEI 1 WEITER + assign {WERTE7_8_d_2, WERTE6_8_d_2, WERTE5_8_d_2, WERTE4_8_d_2, + WERTE3_8_d_2, WERTE2_8_d_2, WERTE1_8_d_2, WERTE0_8_d_2} = + (({WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + + 8'b0000_0001) & {8{{WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + != 8'b0000_1100}} & (~({8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & + {8{!nFB_WR}}))) | (8'b0000_0001 & {8{{WERTE7__q[8], WERTE6__q[8], + WERTE5__q[8], WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], + WERTE0__q[8]} == 8'b0000_1100}} & (~({8{RTC_ADR_q == 6'b00_1000}} & + {8{UHR_DS}} & {8{!nFB_WR}}))); + assign {WERTE7_8_ena_2, WERTE6_8_ena_2, WERTE5_8_ena_2, WERTE4_8_ena_2, + WERTE3_8_ena_2, WERTE2_8_ena_2, WERTE1_8_ena_2, WERTE0_8_ena_2} = + {8{INC_MONAT}} & (~({8{RTC_ADR_q == 6'b00_1000}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// JAHR + assign INC_JAHR = INC_MONAT & {WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], + WERTE4__q[8], WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} + == 8'b0000_1100; + +// JAHRE ZÄHLEN BIS 99 + assign {WERTE7_9_d_2, WERTE6_9_d_2, WERTE5_9_d_2, WERTE4_9_d_2, + WERTE3_9_d_2, WERTE2_9_d_2, WERTE1_9_d_2, WERTE0_9_d_2} = + ({WERTE7__q[9], WERTE6__q[9], WERTE5__q[9], WERTE4__q[9], + WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], WERTE0__q[9]} + + 8'b0000_0001) & {8{{WERTE7__q[9], WERTE6__q[9], WERTE5__q[9], + WERTE4__q[9], WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], WERTE0__q[9]} + != 8'b0110_0011}} & (~({8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + assign {WERTE7_9_ena_2, WERTE6_9_ena_2, WERTE5_9_ena_2, WERTE4_9_ena_2, + WERTE3_9_ena_2, WERTE2_9_ena_2, WERTE1_9_ena_2, WERTE0_9_ena_2} = + {8{INC_JAHR}} & (~({8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}} & + {8{!nFB_WR}})); + +// TRISTATE OUTPUT + assign u0_data = ({8{INT_CTR_CS}} & INT_CTR_q[31:24]) | ({8{INT_ENA_CS}} & + INT_ENA_q[31:24]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[31:24]) | + ({8{INT_CLEAR_CS}} & INT_IN[31:24]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[31:24]); + assign u0_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[31:24] = u0_tridata; + assign u1_data = ({WERTE7__q[0], WERTE6__q[0], WERTE5__q[0], WERTE4__q[0], + WERTE3__q[0], WERTE2__q[0], WERTE1__q[0], WERTE0__q[0]} & {8{RTC_ADR_q + == 6'b00_0000}} & {8{UHR_DS}}) | ({WERTE7__q[1], WERTE6__q[1], + WERTE5__q[1], WERTE4__q[1], WERTE3__q[1], WERTE2__q[1], WERTE1__q[1], + WERTE0__q[1]} & {8{RTC_ADR_q == 6'b00_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[2], WERTE6__q[2], WERTE5__q[2], WERTE4__q[2], + WERTE3__q[2], WERTE2__q[2], WERTE1__q[2], WERTE0__q[2]} & {8{RTC_ADR_q + == 6'b00_0010}} & {8{UHR_DS}}) | ({WERTE7__q[3], WERTE6__q[3], + WERTE5__q[3], WERTE4__q[3], WERTE3__q[3], WERTE2__q[3], WERTE1__q[3], + WERTE0__q[3]} & {8{RTC_ADR_q == 6'b00_0011}} & {8{UHR_DS}}) | + ({WERTE7__q[4], WERTE6__q[4], WERTE5__q[4], WERTE4__q[4], + WERTE3__q[4], WERTE2__q[4], WERTE1__q[4], WERTE0__q[4]} & {8{RTC_ADR_q + == 6'b00_0100}} & {8{UHR_DS}}) | ({WERTE7__q[5], WERTE6__q[5], + WERTE5__q[5], WERTE4__q[5], WERTE3__q[5], WERTE2__q[5], WERTE1__q[5], + WERTE0__q[5]} & {8{RTC_ADR_q == 6'b00_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[6], WERTE6__q[6], WERTE5__q[6], WERTE4__q[6], + WERTE3__q[6], WERTE2__q[6], WERTE1__q[6], WERTE0__q[6]} & {8{RTC_ADR_q + == 6'b00_0110}} & {8{UHR_DS}}) | ({WERTE7__q[7], WERTE6__q[7], + WERTE5__q[7], WERTE4__q[7], WERTE3__q[7], WERTE2__q[7], WERTE1__q[7], + WERTE0__q[7]} & {8{RTC_ADR_q == 6'b00_0111}} & {8{UHR_DS}}) | + ({WERTE7__q[8], WERTE6__q[8], WERTE5__q[8], WERTE4__q[8], + WERTE3__q[8], WERTE2__q[8], WERTE1__q[8], WERTE0__q[8]} & {8{RTC_ADR_q + == 6'b00_1000}} & {8{UHR_DS}}) | ({WERTE7__q[9], WERTE6__q[9], + WERTE5__q[9], WERTE4__q[9], WERTE3__q[9], WERTE2__q[9], WERTE1__q[9], + WERTE0__q[9]} & {8{RTC_ADR_q == 6'b00_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[10], WERTE6__q[10], WERTE5__q[10], WERTE4__q[10], + WERTE3__q[10], WERTE2__q[10], WERTE1__q[10], WERTE0__q[10]} & + {8{RTC_ADR_q == 6'b00_1010}} & {8{UHR_DS}}) | ({WERTE7__q[11], + WERTE6__q[11], WERTE5__q[11], WERTE4__q[11], WERTE3__q[11], + WERTE2__q[11], WERTE1__q[11], WERTE0__q[11]} & {8{RTC_ADR_q == + 6'b00_1011}} & {8{UHR_DS}}) | ({WERTE7__q[12], WERTE6__q[12], + WERTE5__q[12], WERTE4__q[12], WERTE3__q[12], WERTE2__q[12], + WERTE1__q[12], WERTE0__q[12]} & {8{RTC_ADR_q == 6'b00_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[13], WERTE6__q[13], WERTE5__q[13], + WERTE4__q[13], WERTE3__q[13], WERTE2__q[13], WERTE1__q[13], + WERTE0__q[13]} & {8{RTC_ADR_q == 6'b00_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[14], WERTE6__q[14], WERTE5__q[14], WERTE4__q[14], + WERTE3__q[14], WERTE2__q[14], WERTE1__q[14], WERTE0__q[14]} & + {8{RTC_ADR_q == 6'b00_1110}} & {8{UHR_DS}}) | ({WERTE7__q[15], + WERTE6__q[15], WERTE5__q[15], WERTE4__q[15], WERTE3__q[15], + WERTE2__q[15], WERTE1__q[15], WERTE0__q[15]} & {8{RTC_ADR_q == + 6'b00_1111}} & {8{UHR_DS}}) | ({WERTE7__q[16], WERTE6__q[16], + WERTE5__q[16], WERTE4__q[16], WERTE3__q[16], WERTE2__q[16], + WERTE1__q[16], WERTE0__q[16]} & {8{RTC_ADR_q == 6'b01_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[17], WERTE6__q[17], WERTE5__q[17], + WERTE4__q[17], WERTE3__q[17], WERTE2__q[17], WERTE1__q[17], + WERTE0__q[17]} & {8{RTC_ADR_q == 6'b01_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[18], WERTE6__q[18], WERTE5__q[18], WERTE4__q[18], + WERTE3__q[18], WERTE2__q[18], WERTE1__q[18], WERTE0__q[18]} & + {8{RTC_ADR_q == 6'b01_0010}} & {8{UHR_DS}}) | ({WERTE7__q[19], + WERTE6__q[19], WERTE5__q[19], WERTE4__q[19], WERTE3__q[19], + WERTE2__q[19], WERTE1__q[19], WERTE0__q[19]} & {8{RTC_ADR_q == + 6'b01_0011}} & {8{UHR_DS}}) | ({WERTE7__q[20], WERTE6__q[20], + WERTE5__q[20], WERTE4__q[20], WERTE3__q[20], WERTE2__q[20], + WERTE1__q[20], WERTE0__q[20]} & {8{RTC_ADR_q == 6'b01_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[21], WERTE6__q[21], WERTE5__q[21], + WERTE4__q[21], WERTE3__q[21], WERTE2__q[21], WERTE1__q[21], + WERTE0__q[21]} & {8{RTC_ADR_q == 6'b01_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[22], WERTE6__q[22], WERTE5__q[22], WERTE4__q[22], + WERTE3__q[22], WERTE2__q[22], WERTE1__q[22], WERTE0__q[22]} & + {8{RTC_ADR_q == 6'b01_0110}} & {8{UHR_DS}}) | ({WERTE7__q[23], + WERTE6__q[23], WERTE5__q[23], WERTE4__q[23], WERTE3__q[23], + WERTE2__q[23], WERTE1__q[23], WERTE0__q[23]} & {8{RTC_ADR_q == + 6'b01_0111}} & {8{UHR_DS}}) | ({WERTE7__q[24], WERTE6__q[24], + WERTE5__q[24], WERTE4__q[24], WERTE3__q[24], WERTE2__q[24], + WERTE1__q[24], WERTE0__q[24]} & {8{RTC_ADR_q == 6'b01_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[25], WERTE6__q[25], WERTE5__q[25], + WERTE4__q[25], WERTE3__q[25], WERTE2__q[25], WERTE1__q[25], + WERTE0__q[25]} & {8{RTC_ADR_q == 6'b01_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[26], WERTE6__q[26], WERTE5__q[26], WERTE4__q[26], + WERTE3__q[26], WERTE2__q[26], WERTE1__q[26], WERTE0__q[26]} & + {8{RTC_ADR_q == 6'b01_1010}} & {8{UHR_DS}}) | ({WERTE7__q[27], + WERTE6__q[27], WERTE5__q[27], WERTE4__q[27], WERTE3__q[27], + WERTE2__q[27], WERTE1__q[27], WERTE0__q[27]} & {8{RTC_ADR_q == + 6'b01_1011}} & {8{UHR_DS}}) | ({WERTE7__q[28], WERTE6__q[28], + WERTE5__q[28], WERTE4__q[28], WERTE3__q[28], WERTE2__q[28], + WERTE1__q[28], WERTE0__q[28]} & {8{RTC_ADR_q == 6'b01_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[29], WERTE6__q[29], WERTE5__q[29], + WERTE4__q[29], WERTE3__q[29], WERTE2__q[29], WERTE1__q[29], + WERTE0__q[29]} & {8{RTC_ADR_q == 6'b01_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[30], WERTE6__q[30], WERTE5__q[30], WERTE4__q[30], + WERTE3__q[30], WERTE2__q[30], WERTE1__q[30], WERTE0__q[30]} & + {8{RTC_ADR_q == 6'b01_1110}} & {8{UHR_DS}}) | ({WERTE7__q[31], + WERTE6__q[31], WERTE5__q[31], WERTE4__q[31], WERTE3__q[31], + WERTE2__q[31], WERTE1__q[31], WERTE0__q[31]} & {8{RTC_ADR_q == + 6'b01_1111}} & {8{UHR_DS}}) | ({WERTE7__q[32], WERTE6__q[32], + WERTE5__q[32], WERTE4__q[32], WERTE3__q[32], WERTE2__q[32], + WERTE1__q[32], WERTE0__q[32]} & {8{RTC_ADR_q == 6'b10_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[33], WERTE6__q[33], WERTE5__q[33], + WERTE4__q[33], WERTE3__q[33], WERTE2__q[33], WERTE1__q[33], + WERTE0__q[33]} & {8{RTC_ADR_q == 6'b10_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[34], WERTE6__q[34], WERTE5__q[34], WERTE4__q[34], + WERTE3__q[34], WERTE2__q[34], WERTE1__q[34], WERTE0__q[34]} & + {8{RTC_ADR_q == 6'b10_0010}} & {8{UHR_DS}}) | ({WERTE7__q[35], + WERTE6__q[35], WERTE5__q[35], WERTE4__q[35], WERTE3__q[35], + WERTE2__q[35], WERTE1__q[35], WERTE0__q[35]} & {8{RTC_ADR_q == + 6'b10_0011}} & {8{UHR_DS}}) | ({WERTE7__q[36], WERTE6__q[36], + WERTE5__q[36], WERTE4__q[36], WERTE3__q[36], WERTE2__q[36], + WERTE1__q[36], WERTE0__q[36]} & {8{RTC_ADR_q == 6'b10_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[37], WERTE6__q[37], WERTE5__q[37], + WERTE4__q[37], WERTE3__q[37], WERTE2__q[37], WERTE1__q[37], + WERTE0__q[37]} & {8{RTC_ADR_q == 6'b10_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[38], WERTE6__q[38], WERTE5__q[38], WERTE4__q[38], + WERTE3__q[38], WERTE2__q[38], WERTE1__q[38], WERTE0__q[38]} & + {8{RTC_ADR_q == 6'b10_0110}} & {8{UHR_DS}}) | ({WERTE7__q[39], + WERTE6__q[39], WERTE5__q[39], WERTE4__q[39], WERTE3__q[39], + WERTE2__q[39], WERTE1__q[39], WERTE0__q[39]} & {8{RTC_ADR_q == + 6'b10_0111}} & {8{UHR_DS}}) | ({WERTE7__q[40], WERTE6__q[40], + WERTE5__q[40], WERTE4__q[40], WERTE3__q[40], WERTE2__q[40], + WERTE1__q[40], WERTE0__q[40]} & {8{RTC_ADR_q == 6'b10_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[41], WERTE6__q[41], WERTE5__q[41], + WERTE4__q[41], WERTE3__q[41], WERTE2__q[41], WERTE1__q[41], + WERTE0__q[41]} & {8{RTC_ADR_q == 6'b10_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[42], WERTE6__q[42], WERTE5__q[42], WERTE4__q[42], + WERTE3__q[42], WERTE2__q[42], WERTE1__q[42], WERTE0__q[42]} & + {8{RTC_ADR_q == 6'b10_1010}} & {8{UHR_DS}}) | ({WERTE7__q[43], + WERTE6__q[43], WERTE5__q[43], WERTE4__q[43], WERTE3__q[43], + WERTE2__q[43], WERTE1__q[43], WERTE0__q[43]} & {8{RTC_ADR_q == + 6'b10_1011}} & {8{UHR_DS}}) | ({WERTE7__q[44], WERTE6__q[44], + WERTE5__q[44], WERTE4__q[44], WERTE3__q[44], WERTE2__q[44], + WERTE1__q[44], WERTE0__q[44]} & {8{RTC_ADR_q == 6'b10_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[45], WERTE6__q[45], WERTE5__q[45], + WERTE4__q[45], WERTE3__q[45], WERTE2__q[45], WERTE1__q[45], + WERTE0__q[45]} & {8{RTC_ADR_q == 6'b10_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[46], WERTE6__q[46], WERTE5__q[46], WERTE4__q[46], + WERTE3__q[46], WERTE2__q[46], WERTE1__q[46], WERTE0__q[46]} & + {8{RTC_ADR_q == 6'b10_1110}} & {8{UHR_DS}}) | ({WERTE7__q[47], + WERTE6__q[47], WERTE5__q[47], WERTE4__q[47], WERTE3__q[47], + WERTE2__q[47], WERTE1__q[47], WERTE0__q[47]} & {8{RTC_ADR_q == + 6'b10_1111}} & {8{UHR_DS}}) | ({WERTE7__q[48], WERTE6__q[48], + WERTE5__q[48], WERTE4__q[48], WERTE3__q[48], WERTE2__q[48], + WERTE1__q[48], WERTE0__q[48]} & {8{RTC_ADR_q == 6'b11_0000}} & + {8{UHR_DS}}) | ({WERTE7__q[49], WERTE6__q[49], WERTE5__q[49], + WERTE4__q[49], WERTE3__q[49], WERTE2__q[49], WERTE1__q[49], + WERTE0__q[49]} & {8{RTC_ADR_q == 6'b11_0001}} & {8{UHR_DS}}) | + ({WERTE7__q[50], WERTE6__q[50], WERTE5__q[50], WERTE4__q[50], + WERTE3__q[50], WERTE2__q[50], WERTE1__q[50], WERTE0__q[50]} & + {8{RTC_ADR_q == 6'b11_0010}} & {8{UHR_DS}}) | ({WERTE7__q[51], + WERTE6__q[51], WERTE5__q[51], WERTE4__q[51], WERTE3__q[51], + WERTE2__q[51], WERTE1__q[51], WERTE0__q[51]} & {8{RTC_ADR_q == + 6'b11_0011}} & {8{UHR_DS}}) | ({WERTE7__q[52], WERTE6__q[52], + WERTE5__q[52], WERTE4__q[52], WERTE3__q[52], WERTE2__q[52], + WERTE1__q[52], WERTE0__q[52]} & {8{RTC_ADR_q == 6'b11_0100}} & + {8{UHR_DS}}) | ({WERTE7__q[53], WERTE6__q[53], WERTE5__q[53], + WERTE4__q[53], WERTE3__q[53], WERTE2__q[53], WERTE1__q[53], + WERTE0__q[53]} & {8{RTC_ADR_q == 6'b11_0101}} & {8{UHR_DS}}) | + ({WERTE7__q[54], WERTE6__q[54], WERTE5__q[54], WERTE4__q[54], + WERTE3__q[54], WERTE2__q[54], WERTE1__q[54], WERTE0__q[54]} & + {8{RTC_ADR_q == 6'b11_0110}} & {8{UHR_DS}}) | ({WERTE7__q[55], + WERTE6__q[55], WERTE5__q[55], WERTE4__q[55], WERTE3__q[55], + WERTE2__q[55], WERTE1__q[55], WERTE0__q[55]} & {8{RTC_ADR_q == + 6'b11_0111}} & {8{UHR_DS}}) | ({WERTE7__q[56], WERTE6__q[56], + WERTE5__q[56], WERTE4__q[56], WERTE3__q[56], WERTE2__q[56], + WERTE1__q[56], WERTE0__q[56]} & {8{RTC_ADR_q == 6'b11_1000}} & + {8{UHR_DS}}) | ({WERTE7__q[57], WERTE6__q[57], WERTE5__q[57], + WERTE4__q[57], WERTE3__q[57], WERTE2__q[57], WERTE1__q[57], + WERTE0__q[57]} & {8{RTC_ADR_q == 6'b11_1001}} & {8{UHR_DS}}) | + ({WERTE7__q[58], WERTE6__q[58], WERTE5__q[58], WERTE4__q[58], + WERTE3__q[58], WERTE2__q[58], WERTE1__q[58], WERTE0__q[58]} & + {8{RTC_ADR_q == 6'b11_1010}} & {8{UHR_DS}}) | ({WERTE7__q[59], + WERTE6__q[59], WERTE5__q[59], WERTE4__q[59], WERTE3__q[59], + WERTE2__q[59], WERTE1__q[59], WERTE0__q[59]} & {8{RTC_ADR_q == + 6'b11_1011}} & {8{UHR_DS}}) | ({WERTE7__q[60], WERTE6__q[60], + WERTE5__q[60], WERTE4__q[60], WERTE3__q[60], WERTE2__q[60], + WERTE1__q[60], WERTE0__q[60]} & {8{RTC_ADR_q == 6'b11_1100}} & + {8{UHR_DS}}) | ({WERTE7__q[61], WERTE6__q[61], WERTE5__q[61], + WERTE4__q[61], WERTE3__q[61], WERTE2__q[61], WERTE1__q[61], + WERTE0__q[61]} & {8{RTC_ADR_q == 6'b11_1101}} & {8{UHR_DS}}) | + ({WERTE7__q[62], WERTE6__q[62], WERTE5__q[62], WERTE4__q[62], + WERTE3__q[62], WERTE2__q[62], WERTE1__q[62], WERTE0__q[62]} & + {8{RTC_ADR_q == 6'b11_1110}} & {8{UHR_DS}}) | ({WERTE7__q[63], + WERTE6__q[63], WERTE5__q[63], WERTE4__q[63], WERTE3__q[63], + WERTE2__q[63], WERTE1__q[63], WERTE0__q[63]} & {8{RTC_ADR_q == + 6'b11_1111}} & {8{UHR_DS}}) | ({2'b00, RTC_ADR_q} & {8{UHR_AS}}) | + ({8{INT_CTR_CS}} & INT_CTR_q[23:16]) | ({8{INT_ENA_CS}} & + INT_ENA_q[23:16]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[23:16]) | + ({8{INT_CLEAR_CS}} & INT_IN[23:16]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[23:16]); + assign u1_enabledt = (UHR_DS | UHR_AS | INT_CTR_CS | INT_ENA_CS | + INT_LATCH_CS | INT_CLEAR_CS | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[23:16] = u1_tridata; + assign u2_data = ({8{INT_CTR_CS}} & INT_CTR_q[15:8]) | ({8{INT_ENA_CS}} & + INT_ENA_q[15:8]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[15:8]) | + ({8{INT_CLEAR_CS}} & INT_IN[15:8]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[15:8]); + assign u2_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[15:8] = u2_tridata; + assign u3_data = ({8{INT_CTR_CS}} & INT_CTR_q[7:0]) | ({8{INT_ENA_CS}} & + INT_ENA_q[7:0]) | ({8{INT_LATCH_CS}} & INT_LATCH_q[7:0]) | + ({8{INT_CLEAR_CS}} & INT_IN[7:0]) | ({8{ACP_CONF_CS}} & + ACP_CONF_q[7:0]); + assign u3_enabledt = (INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | INT_CLEAR_CS + | ACP_CONF_CS) & (!nFB_OE); + assign FB_AD[7:0] = u3_tridata; + assign INT_HANDLER_TA = INT_CTR_CS | INT_ENA_CS | INT_LATCH_CS | + INT_CLEAR_CS; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign UPDATE_ON = UPDATE_ON_1 | UPDATE_ON_2; + assign WERTE0_0_ena = WERTE0_0_ena_1 | WERTE0_0_ena_2; + assign WERTE0_2_ena = WERTE0_2_ena_1 | WERTE0_2_ena_2; + assign WERTE0_4_ena = WERTE0_4_ena_1 | WERTE0_4_ena_2; + assign WERTE0_6_ena = WERTE0_6_ena_1 | WERTE0_6_ena_2; + assign WERTE0_7_ena = WERTE0_7_ena_1 | WERTE0_7_ena_2; + assign WERTE0_8_ena = WERTE0_8_ena_1 | WERTE0_8_ena_2; + assign WERTE0_9_ena = WERTE0_9_ena_1 | WERTE0_9_ena_2; + assign WERTE0_13_ena = WERTE0_13_ena_1 | WERTE0_13_ena_2; + assign WERTE0__d[0] = WERTE0_0_d_1 | WERTE0_0_d_2; + assign WERTE0__d[2] = WERTE0_2_d_1 | WERTE0_2_d_2; + assign WERTE0__d[4] = WERTE0_4_d_1 | WERTE0_4_d_2; + assign WERTE0__d[6] = WERTE0_6_d_1 | WERTE0_6_d_2; + assign WERTE0__d[7] = WERTE0_7_d_1 | WERTE0_7_d_2; + assign WERTE0__d[8] = WERTE0_8_d_1 | WERTE0_8_d_2; + assign WERTE0__d[9] = WERTE0_9_d_1 | WERTE0_9_d_2; + assign WERTE0__d[11] = WERTE0_11_d_1 | WERTE0_11_d_2; + assign WERTE0__d[13] = WERTE0_13_d_1 | WERTE0_13_d_2; + assign WERTE1_0_ena = WERTE1_0_ena_1 | WERTE1_0_ena_2; + assign WERTE1_2_ena = WERTE1_2_ena_1 | WERTE1_2_ena_2; + assign WERTE1_4_ena = WERTE1_4_ena_1 | WERTE1_4_ena_2; + assign WERTE1_6_ena = WERTE1_6_ena_1 | WERTE1_6_ena_2; + assign WERTE1_7_ena = WERTE1_7_ena_1 | WERTE1_7_ena_2; + assign WERTE1_8_ena = WERTE1_8_ena_1 | WERTE1_8_ena_2; + assign WERTE1_9_ena = WERTE1_9_ena_1 | WERTE1_9_ena_2; + assign WERTE1__d[0] = WERTE1_0_d_1 | WERTE1_0_d_2; + assign WERTE1__d[2] = WERTE1_2_d_1 | WERTE1_2_d_2; + assign WERTE1__d[4] = WERTE1_4_d_1 | WERTE1_4_d_2; + assign WERTE1__d[6] = WERTE1_6_d_1 | WERTE1_6_d_2; + assign WERTE1__d[7] = WERTE1_7_d_1 | WERTE1_7_d_2; + assign WERTE1__d[8] = WERTE1_8_d_1 | WERTE1_8_d_2; + assign WERTE1__d[9] = WERTE1_9_d_1 | WERTE1_9_d_2; + assign WERTE1__d[11] = WERTE1_11_d_1 | WERTE1_11_d_2; + assign WERTE2_0_ena = WERTE2_0_ena_1 | WERTE2_0_ena_2; + assign WERTE2_2_ena = WERTE2_2_ena_1 | WERTE2_2_ena_2; + assign WERTE2_4_ena = WERTE2_4_ena_1 | WERTE2_4_ena_2; + assign WERTE2_6_ena = WERTE2_6_ena_1 | WERTE2_6_ena_2; + assign WERTE2_7_ena = WERTE2_7_ena_1 | WERTE2_7_ena_2; + assign WERTE2_8_ena = WERTE2_8_ena_1 | WERTE2_8_ena_2; + assign WERTE2_9_ena = WERTE2_9_ena_1 | WERTE2_9_ena_2; + assign WERTE2__d[0] = WERTE2_0_d_1 | WERTE2_0_d_2; + assign WERTE2__d[2] = WERTE2_2_d_1 | WERTE2_2_d_2; + assign WERTE2__d[4] = WERTE2_4_d_1 | WERTE2_4_d_2; + assign WERTE2__d[6] = WERTE2_6_d_1 | WERTE2_6_d_2; + assign WERTE2__d[7] = WERTE2_7_d_1 | WERTE2_7_d_2; + assign WERTE2__d[8] = WERTE2_8_d_1 | WERTE2_8_d_2; + assign WERTE2__d[9] = WERTE2_9_d_1 | WERTE2_9_d_2; + assign WERTE2__d[11] = WERTE2_11_d_1 | WERTE2_11_d_2; + assign WERTE3_0_ena = WERTE3_0_ena_1 | WERTE3_0_ena_2; + assign WERTE3_2_ena = WERTE3_2_ena_1 | WERTE3_2_ena_2; + assign WERTE3_4_ena = WERTE3_4_ena_1 | WERTE3_4_ena_2; + assign WERTE3_6_ena = WERTE3_6_ena_1 | WERTE3_6_ena_2; + assign WERTE3_7_ena = WERTE3_7_ena_1 | WERTE3_7_ena_2; + assign WERTE3_8_ena = WERTE3_8_ena_1 | WERTE3_8_ena_2; + assign WERTE3_9_ena = WERTE3_9_ena_1 | WERTE3_9_ena_2; + assign WERTE3__d[0] = WERTE3_0_d_1 | WERTE3_0_d_2; + assign WERTE3__d[2] = WERTE3_2_d_1 | WERTE3_2_d_2; + assign WERTE3__d[4] = WERTE3_4_d_1 | WERTE3_4_d_2; + assign WERTE3__d[6] = WERTE3_6_d_1 | WERTE3_6_d_2; + assign WERTE3__d[7] = WERTE3_7_d_1 | WERTE3_7_d_2; + assign WERTE3__d[8] = WERTE3_8_d_1 | WERTE3_8_d_2; + assign WERTE3__d[9] = WERTE3_9_d_1 | WERTE3_9_d_2; + assign WERTE4_0_ena = WERTE4_0_ena_1 | WERTE4_0_ena_2; + assign WERTE4_2_ena = WERTE4_2_ena_1 | WERTE4_2_ena_2; + assign WERTE4_4_ena = WERTE4_4_ena_1 | WERTE4_4_ena_2; + assign WERTE4_6_ena = WERTE4_6_ena_1 | WERTE4_6_ena_2; + assign WERTE4_7_ena = WERTE4_7_ena_1 | WERTE4_7_ena_2; + assign WERTE4_8_ena = WERTE4_8_ena_1 | WERTE4_8_ena_2; + assign WERTE4_9_ena = WERTE4_9_ena_1 | WERTE4_9_ena_2; + assign WERTE4__d[0] = WERTE4_0_d_1 | WERTE4_0_d_2; + assign WERTE4__d[2] = WERTE4_2_d_1 | WERTE4_2_d_2; + assign WERTE4__d[4] = WERTE4_4_d_1 | WERTE4_4_d_2; + assign WERTE4__d[6] = WERTE4_6_d_1 | WERTE4_6_d_2; + assign WERTE4__d[7] = WERTE4_7_d_1 | WERTE4_7_d_2; + assign WERTE4__d[8] = WERTE4_8_d_1 | WERTE4_8_d_2; + assign WERTE4__d[9] = WERTE4_9_d_1 | WERTE4_9_d_2; + assign WERTE5_0_ena = WERTE5_0_ena_1 | WERTE5_0_ena_2; + assign WERTE5_2_ena = WERTE5_2_ena_1 | WERTE5_2_ena_2; + assign WERTE5_4_ena = WERTE5_4_ena_1 | WERTE5_4_ena_2; + assign WERTE5_6_ena = WERTE5_6_ena_1 | WERTE5_6_ena_2; + assign WERTE5_7_ena = WERTE5_7_ena_1 | WERTE5_7_ena_2; + assign WERTE5_8_ena = WERTE5_8_ena_1 | WERTE5_8_ena_2; + assign WERTE5_9_ena = WERTE5_9_ena_1 | WERTE5_9_ena_2; + assign WERTE5__d[0] = WERTE5_0_d_1 | WERTE5_0_d_2; + assign WERTE5__d[2] = WERTE5_2_d_1 | WERTE5_2_d_2; + assign WERTE5__d[4] = WERTE5_4_d_1 | WERTE5_4_d_2; + assign WERTE5__d[6] = WERTE5_6_d_1 | WERTE5_6_d_2; + assign WERTE5__d[7] = WERTE5_7_d_1 | WERTE5_7_d_2; + assign WERTE5__d[8] = WERTE5_8_d_1 | WERTE5_8_d_2; + assign WERTE5__d[9] = WERTE5_9_d_1 | WERTE5_9_d_2; + assign WERTE6_0_ena = WERTE6_0_ena_1 | WERTE6_0_ena_2; + assign WERTE6_2_ena = WERTE6_2_ena_1 | WERTE6_2_ena_2; + assign WERTE6_4_ena = WERTE6_4_ena_1 | WERTE6_4_ena_2; + assign WERTE6_6_ena = WERTE6_6_ena_1 | WERTE6_6_ena_2; + assign WERTE6_7_ena = WERTE6_7_ena_1 | WERTE6_7_ena_2; + assign WERTE6_8_ena = WERTE6_8_ena_1 | WERTE6_8_ena_2; + assign WERTE6_9_ena = WERTE6_9_ena_1 | WERTE6_9_ena_2; + assign WERTE6__d[0] = WERTE6_0_d_1 | WERTE6_0_d_2; + assign WERTE6__d[2] = WERTE6_2_d_1 | WERTE6_2_d_2; + assign WERTE6__d[4] = WERTE6_4_d_1 | WERTE6_4_d_2; + assign WERTE6__d[6] = WERTE6_6_d_1 | WERTE6_6_d_2; + assign WERTE6__d[7] = WERTE6_7_d_1 | WERTE6_7_d_2; + assign WERTE6__d[8] = WERTE6_8_d_1 | WERTE6_8_d_2; + assign WERTE6__d[9] = WERTE6_9_d_1 | WERTE6_9_d_2; + assign WERTE7_0_ena = WERTE7_0_ena_1 | WERTE7_0_ena_2; + assign WERTE7_2_ena = WERTE7_2_ena_1 | WERTE7_2_ena_2; + assign WERTE7_4_ena = WERTE7_4_ena_1 | WERTE7_4_ena_2; + assign WERTE7_6_ena = WERTE7_6_ena_1 | WERTE7_6_ena_2; + assign WERTE7_7_ena = WERTE7_7_ena_1 | WERTE7_7_ena_2; + assign WERTE7_8_ena = WERTE7_8_ena_1 | WERTE7_8_ena_2; + assign WERTE7_9_ena = WERTE7_9_ena_1 | WERTE7_9_ena_2; + assign WERTE7__d[0] = WERTE7_0_d_1 | WERTE7_0_d_2; + assign WERTE7__d[2] = WERTE7_2_d_1 | WERTE7_2_d_2; + assign WERTE7__d[4] = WERTE7_4_d_1 | WERTE7_4_d_2; + assign WERTE7__d[6] = WERTE7_6_d_1 | WERTE7_6_d_2; + assign WERTE7__d[7] = WERTE7_7_d_1 | WERTE7_7_d_2; + assign WERTE7__d[8] = WERTE7_8_d_1 | WERTE7_8_d_2; + assign WERTE7__d[9] = WERTE7_9_d_1 | WERTE7_9_d_2; + assign WERTE7__d[13] = WERTE7_13_d_1 | WERTE7_13_d_2; + +// Define power signal(s) + assign vcc = 1'b1; + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri.tdf b/FPGA_quartus_GE/ahdl2v/lpm_bustri.tdf new file mode 100644 index 0000000..abd780b --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri.tdf @@ -0,0 +1,78 @@ +-------------------------------------------------------------------- +-- +-- LPM_BUSTRI Parameterized Megafunction +-- +-- Copyright (C) 1991-2013 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. +-- +-- Quartus II 13.1.0 Build 162 10/23/2013 +-- +-- Version 2.0 +-- +-------------------------------------------------------------------- + + +PARAMETERS +( + LPM_WIDTH +); + +SUBDESIGN lpm_bustri +( + tridata[LPM_WIDTH-1..0] : BIDIR; + data[LPM_WIDTH-1..0] : INPUT = VCC; + enabletr : INPUT = VCC; + enabledt : INPUT = VCC; + result[LPM_WIDTH-1..0] : OUTPUT; +) + +VARIABLE + % Are the enable inputs used? % + IF (USED(enabledt)) GENERATE + dout[LPM_WIDTH-1..0] : TRI; + END GENERATE; + IF (USED(enabletr)) GENERATE + din[LPM_WIDTH-1..0] : TRI; + END GENERATE; + +BEGIN + + ASSERT (LPM_WIDTH > 0) + REPORT "Value of LPM_WIDTH parameter value must be greater than 0" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_WIDTH; + + ASSERT (USED(enabledt) & USED(data)) + REPORT "lpm_bustri function requires data[] port -- Altera recommends using the TRI primitive instead" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_DATA; + + % Connect buffers if they are used % + IF (USED(enabledt)) GENERATE + dout[].oe = enabledt; + dout[] = data[]; + tridata[] = dout[]; + END GENERATE; + + IF (USED(enabletr)) GENERATE + din[].oe = enabletr; + din[] = tridata[]; + result[] = din[]; + ELSE GENERATE + result[] = tridata[]; + END GENERATE; + IF !USED(result) GENERATE + result[] = GND; + END GENERATE; +END; diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.inc b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.inc new file mode 100644 index 0000000..8cb4941 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_BYT +( + data[7..0], + enabledt +) + +RETURNS ( + tridata[7..0] +); diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.tdf b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.tdf new file mode 100644 index 0000000..84b70c8 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.tdf @@ -0,0 +1,72 @@ +-------------------------------------------------------------------- +-- +-- LPM_BUSTRI Parameterized Megafunction +-- +-- Copyright (C) 1991-2013 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. +-- +-- Quartus II 13.1.0 Build 162 10/23/2013 +-- +-- Version 2.0 +-- +-------------------------------------------------------------------- + +SUBDESIGN lpm_bustri_BYT +( + tridata[8-1..0] : BIDIR; + data[8-1..0] : INPUT = VCC; + enabletr : INPUT = VCC; + enabledt : INPUT = VCC; + result[8-1..0] : OUTPUT; +) + +VARIABLE + % Are the enable inputs used? % + IF (USED(enabledt)) GENERATE + dout[8-1..0] : TRI; + END GENERATE; + IF (USED(enabletr)) GENERATE + din[8-1..0] : TRI; + END GENERATE; + +BEGIN + + ASSERT (8 > 0) + REPORT "Value of 8 parameter value must be greater than 0" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_WIDTH; + + ASSERT (USED(enabledt) & USED(data)) + REPORT "lpm_bustri function requires data[] port -- Altera recommends using the TRI primitive instead" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_DATA; + + % Connect buffers if they are used % + IF (USED(enabledt)) GENERATE + dout[].oe = enabledt; + dout[] = data[]; + tridata[] = dout[]; + END GENERATE; + + IF (USED(enabletr)) GENERATE + din[].oe = enabletr; + din[] = tridata[]; + result[] = din[]; + ELSE GENERATE + result[] = tridata[]; + END GENERATE; + IF !USED(result) GENERATE + result[] = GND; + END GENERATE; +END; diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.v b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.v new file mode 100644 index 0000000..da23b16 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_BYT.v @@ -0,0 +1,78 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: lpm_bustri_BYT.tdf +// Verilog Design Output: lpm_bustri_BYT.v +// Created 03-Mar-2014 09:18 PM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + + +// ------------------------------------------------------------------ +// LPM_BUSTRI Parameterized Megafunction +// Copyright (C) 1991-2013 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. +// Quartus II 13.1.0 Build 162 10/23/2013 +// Version 2.0 +// ------------------------------------------------------------------ +module lpm_bustri_BYT(tridata, data, enabletr, enabledt, result); + input [7:0] data; + input enabletr, enabledt; + output [7:0] result; + inout [7:0] tridata; + +// Are the enable inputs used? + wire [7:0] dout; + wire [7:0] dout_in; + wire gnd, result0_1, result0_2, result1_1, result1_2, result2_1, result2_2, + result3_1, result3_2, result4_1, result4_2, result5_1, result5_2, + result6_1, result6_2, result7_1, result7_2, dout0_oe_ctrl; + + assign dout[0] = (dout0_oe_ctrl) ? dout_in[0] : 1'bz; + assign dout[1] = (dout0_oe_ctrl) ? dout_in[1] : 1'bz; + assign dout[2] = (dout0_oe_ctrl) ? dout_in[2] : 1'bz; + assign dout[3] = (dout0_oe_ctrl) ? dout_in[3] : 1'bz; + assign dout[4] = (dout0_oe_ctrl) ? dout_in[4] : 1'bz; + assign dout[5] = (dout0_oe_ctrl) ? dout_in[5] : 1'bz; + assign dout[6] = (dout0_oe_ctrl) ? dout_in[6] : 1'bz; + assign dout[7] = (dout0_oe_ctrl) ? dout_in[7] : 1'bz; + +// Start of original equations + +// Connect buffers if they are used + assign dout0_oe_ctrl = enabledt; + assign dout_in = data; + assign tridata = dout; + assign {result7_1, result6_1, result5_1, result4_1, result3_1, result2_1, + result1_1, result0_1} = tridata; + assign {result7_2, result6_2, result5_2, result4_2, result3_2, result2_2, + result1_2, result0_2} = {8{gnd}}; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign result[0] = result0_1 | result0_2; + assign result[1] = result1_1 | result1_2; + assign result[2] = result2_1 | result2_2; + assign result[3] = result3_1 | result3_2; + assign result[4] = result4_1 | result4_2; + assign result[5] = result5_1 | result5_2; + assign result[6] = result6_1 | result6_2; + assign result[7] = result7_1 | result7_2; + +// Define power signal(s) + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.inc b/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.inc new file mode 100644 index 0000000..f180c48 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_LONG +( + data[31..0], + enabledt +) + +RETURNS ( + tridata[31..0] +); diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.tdf b/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.tdf new file mode 100644 index 0000000..0ec70d1 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_LONG.tdf @@ -0,0 +1,72 @@ +-------------------------------------------------------------------- +-- +-- LPM_BUSTRI Parameterized Megafunction +-- +-- Copyright (C) 1991-2013 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. +-- +-- Quartus II 13.1.0 Build 162 10/23/2013 +-- +-- Version 2.0 +-- +-------------------------------------------------------------------- + +SUBDESIGN lpm_bustri_LONG +( + tridata[32-1..0] : BIDIR; + data[32-1..0] : INPUT = VCC; + enabletr : INPUT = VCC; + enabledt : INPUT = VCC; + result[32-1..0] : OUTPUT; +) + +VARIABLE + % Are the enable inputs used? % + IF (USED(enabledt)) GENERATE + dout[32-1..0] : TRI; + END GENERATE; + IF (USED(enabletr)) GENERATE + din[32-1..0] : TRI; + END GENERATE; + +BEGIN + + ASSERT (32 > 0) + REPORT "Value of 32 parameter value must be greater than 0" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_WIDTH; + + ASSERT (USED(enabledt) & USED(data)) + REPORT "lpm_bustri function requires data[] port -- Altera recommends using the TRI primitive instead" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_DATA; + + % Connect buffers if they are used % + IF (USED(enabledt)) GENERATE + dout[].oe = enabledt; + dout[] = data[]; + tridata[] = dout[]; + END GENERATE; + + IF (USED(enabletr)) GENERATE + din[].oe = enabletr; + din[] = tridata[]; + result[] = din[]; + ELSE GENERATE + result[] = tridata[]; + END GENERATE; + IF !USED(result) GENERATE + result[] = GND; + END GENERATE; +END; diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.inc b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.inc new file mode 100644 index 0000000..09f6251 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_WORD +( + data[15..0], + enabledt +) + +RETURNS ( + tridata[15..0] +); diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.tdf b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.tdf new file mode 100644 index 0000000..3e2ac8b --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.tdf @@ -0,0 +1,72 @@ +-------------------------------------------------------------------- +-- +-- LPM_BUSTRI Parameterized Megafunction +-- +-- Copyright (C) 1991-2013 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. +-- +-- Quartus II 13.1.0 Build 162 10/23/2013 +-- +-- Version 2.0 +-- +-------------------------------------------------------------------- + +SUBDESIGN lpm_bustri_WORD +( + tridata[16-1..0] : BIDIR; + data[16-1..0] : INPUT = VCC; + enabletr : INPUT = VCC; + enabledt : INPUT = VCC; + result[16-1..0] : OUTPUT; +) + +VARIABLE + % Are the enable inputs used? % + IF (USED(enabledt)) GENERATE + dout[16-1..0] : TRI; + END GENERATE; + IF (USED(enabletr)) GENERATE + din[16-1..0] : TRI; + END GENERATE; + +BEGIN + + ASSERT (16 > 0) + REPORT "Value of 16 parameter value must be greater than 0" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_WIDTH; + + ASSERT (USED(enabledt) & USED(data)) + REPORT "lpm_bustri function requires data[] port -- Altera recommends using the TRI primitive instead" + SEVERITY ERROR + HELP_ID LPM_BUSTRI_DATA; + + % Connect buffers if they are used % + IF (USED(enabledt)) GENERATE + dout[].oe = enabledt; + dout[] = data[]; + tridata[] = dout[]; + END GENERATE; + + IF (USED(enabletr)) GENERATE + din[].oe = enabletr; + din[] = tridata[]; + result[] = din[]; + ELSE GENERATE + result[] = tridata[]; + END GENERATE; + IF !USED(result) GENERATE + result[] = GND; + END GENERATE; +END; diff --git a/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.v b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.v new file mode 100644 index 0000000..cfd22d9 --- /dev/null +++ b/FPGA_quartus_GE/ahdl2v/lpm_bustri_WORD.v @@ -0,0 +1,99 @@ +// Xilinx XPort Language Converter, Version 4.1 (110) +// +// AHDL Design Source: lpm_bustri_WORD.tdf +// Verilog Design Output: lpm_bustri_WORD.v +// Created 02-Mar-2014 04:36 PM +// +// Copyright (c) 2014, Xilinx, Inc. All Rights Reserved. +// Xilinx Inc makes no warranty, expressed or implied, with respect to +// the operation and/or functionality of the converted output files. +// + + +// ------------------------------------------------------------------ +// LPM_BUSTRI Parameterized Megafunction +// Copyright (C) 1991-2013 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. +// Quartus II 13.1.0 Build 162 10/23/2013 +// Version 2.0 +// ------------------------------------------------------------------ +module lpm_bustri_WORD(tridata, data, enabletr, enabledt, result); + input [15:0] data; + input enabletr, enabledt; + output [15:0] result; + inout [15:0] tridata; + +// Are the enable inputs used? + wire [15:0] dout; + wire [15:0] dout_in; + wire gnd, result0_1, result0_2, result1_1, result1_2, result2_1, result2_2, + result3_1, result3_2, result4_1, result4_2, result5_1, result5_2, + result6_1, result6_2, result7_1, result7_2, result8_1, result8_2, + result9_1, result9_2, result10_1, result10_2, result11_1, result11_2, + result12_1, result12_2, result13_1, result13_2, result14_1, + result14_2, result15_1, result15_2, dout0_oe_ctrl; + + assign dout[0] = (dout0_oe_ctrl) ? dout_in[0] : 1'bz; + assign dout[1] = (dout0_oe_ctrl) ? dout_in[1] : 1'bz; + assign dout[2] = (dout0_oe_ctrl) ? dout_in[2] : 1'bz; + assign dout[3] = (dout0_oe_ctrl) ? dout_in[3] : 1'bz; + assign dout[4] = (dout0_oe_ctrl) ? dout_in[4] : 1'bz; + assign dout[5] = (dout0_oe_ctrl) ? dout_in[5] : 1'bz; + assign dout[6] = (dout0_oe_ctrl) ? dout_in[6] : 1'bz; + assign dout[7] = (dout0_oe_ctrl) ? dout_in[7] : 1'bz; + assign dout[8] = (dout0_oe_ctrl) ? dout_in[8] : 1'bz; + assign dout[9] = (dout0_oe_ctrl) ? dout_in[9] : 1'bz; + assign dout[10] = (dout0_oe_ctrl) ? dout_in[10] : 1'bz; + assign dout[11] = (dout0_oe_ctrl) ? dout_in[11] : 1'bz; + assign dout[12] = (dout0_oe_ctrl) ? dout_in[12] : 1'bz; + assign dout[13] = (dout0_oe_ctrl) ? dout_in[13] : 1'bz; + assign dout[14] = (dout0_oe_ctrl) ? dout_in[14] : 1'bz; + assign dout[15] = (dout0_oe_ctrl) ? dout_in[15] : 1'bz; + +// Start of original equations + +// Connect buffers if they are used + assign dout0_oe_ctrl = enabledt; + assign dout_in = data; + assign tridata = dout; + assign {result15_1, result14_1, result13_1, result12_1, result11_1, + result10_1, result9_1, result8_1, result7_1, result6_1, result5_1, + result4_1, result3_1, result2_1, result1_1, result0_1} = tridata; + assign {result15_2, result14_2, result13_2, result12_2, result11_2, + result10_2, result9_2, result8_2, result7_2, result6_2, result5_2, + result4_2, result3_2, result2_2, result1_2, result0_2} = {16{gnd}}; + + +// Assignments added to explicitly combine the +// effects of multiple drivers in the source + assign result[0] = result0_1 | result0_2; + assign result[1] = result1_1 | result1_2; + assign result[2] = result2_1 | result2_2; + assign result[3] = result3_1 | result3_2; + assign result[4] = result4_1 | result4_2; + assign result[5] = result5_1 | result5_2; + assign result[6] = result6_1 | result6_2; + assign result[7] = result7_1 | result7_2; + assign result[8] = result8_1 | result8_2; + assign result[9] = result9_1 | result9_2; + assign result[10] = result10_1 | result10_2; + assign result[11] = result11_1 | result11_2; + assign result[12] = result12_1 | result12_2; + assign result[13] = result13_1 | result13_2; + assign result[14] = result14_1 | result14_2; + assign result[15] = result15_1 | result15_2; + +// Define power signal(s) + assign gnd = 1'b0; +endmodule diff --git a/FPGA_quartus_GE/ahdl2v/xport.exe b/FPGA_quartus_GE/ahdl2v/xport.exe new file mode 100644 index 0000000000000000000000000000000000000000..16ea1b34b463aa7a1eb9d53948f1171c7289fb17 GIT binary patch literal 566272 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 Yni*4T>OXwOh@^SF>%c|$zrp7}0jo13 + + + + + + + + + + diff --git a/FPGA_quartus_GE/altddio_out0.qip b/FPGA_quartus_GE/altddio_out0.qip new file mode 100644 index 0000000..8193856 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out0.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_OUT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_out0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out0.ppf"] diff --git a/FPGA_quartus_GE/altddio_out0.vhd b/FPGA_quartus_GE/altddio_out0.vhd new file mode 100644 index 0000000..ea6d708 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out0.vhd @@ -0,0 +1,146 @@ +-- megafunction wizard: %ALTDDIO_OUT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_out + +-- ============================================================ +-- File Name: altddio_out0.vhd +-- Megafunction Name(s): +-- altddio_out +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_out0 IS + PORT + ( + datain_h : IN STD_LOGIC ; + datain_l : IN STD_LOGIC ; + outclock : IN STD_LOGIC ; + dataout : OUT STD_LOGIC + ); +END altddio_out0; + + +ARCHITECTURE SYN OF altddio_out0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altddio_out + GENERIC ( + extend_oe_disable : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + dataout : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); + outclock : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (0 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (0 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire1 <= sub_wire0(0); + dataout <= sub_wire1; + sub_wire2 <= datain_h; + sub_wire3(0) <= sub_wire2; + sub_wire4 <= datain_l; + sub_wire5(0) <= sub_wire4; + + altddio_out_component : altddio_out + GENERIC MAP ( + extend_oe_disable => "UNUSED", + intended_device_family => "Cyclone III", + invert_output => "OFF", + lpm_type => "altddio_out", + oe_reg => "UNUSED", + power_up_high => "OFF", + width => 1 + ) + PORT MAP ( + outclock => outclock, + datain_h => sub_wire3, + datain_l => sub_wire5, + dataout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "0" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "0" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "1" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_out" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "1" +-- Retrieval info: USED_PORT: datain_h 0 0 0 0 INPUT NODEFVAL datain_h +-- Retrieval info: USED_PORT: datain_l 0 0 0 0 INPUT NODEFVAL datain_l +-- Retrieval info: USED_PORT: dataout 0 0 0 0 OUTPUT NODEFVAL dataout +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: CONNECT: @datain_h 0 0 1 0 datain_h 0 0 0 0 +-- Retrieval info: CONNECT: @datain_l 0 0 1 0 datain_l 0 0 0 0 +-- Retrieval info: CONNECT: dataout 0 0 0 0 @dataout 0 0 1 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altddio_out3.bsf b/FPGA_quartus_GE/altddio_out3.bsf new file mode 100644 index 0000000..ba8c153 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out3.bsf @@ -0,0 +1,64 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 232 120) + (text "altddio_out3" (rect 81 1 163 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 104 25 116)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 46 24)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 43 14)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 43 40)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 47 14)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 42 56)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 229 24)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 131 40)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 135 55)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 129 86)(font "Arial" )) + (text "low" (rect 92 84 105 96)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altddio_out3.inc b/FPGA_quartus_GE/altddio_out3.inc new file mode 100644 index 0000000..f6b4097 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out3.inc @@ -0,0 +1,25 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altddio_out3 +( + datain_h, + datain_l, + outclock +) + +RETURNS ( + dataout +); diff --git a/FPGA_quartus_GE/altddio_out3.ppf b/FPGA_quartus_GE/altddio_out3.ppf new file mode 100644 index 0000000..e914df8 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out3.ppf @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altddio_out3.qip b/FPGA_quartus_GE/altddio_out3.qip new file mode 100644 index 0000000..8f94ee3 --- /dev/null +++ b/FPGA_quartus_GE/altddio_out3.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTDDIO_OUT" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altddio_out3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out3.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out3.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altddio_out3.ppf"] diff --git a/FPGA_quartus_GE/altddio_out3.vhd b/FPGA_quartus_GE/altddio_out3.vhd new file mode 100644 index 0000000..e55160f --- /dev/null +++ b/FPGA_quartus_GE/altddio_out3.vhd @@ -0,0 +1,146 @@ +-- megafunction wizard: %ALTDDIO_OUT% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altddio_out + +-- ============================================================ +-- File Name: altddio_out3.vhd +-- Megafunction Name(s): +-- altddio_out +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altddio_out3 IS + PORT + ( + datain_h : IN STD_LOGIC ; + datain_l : IN STD_LOGIC ; + outclock : IN STD_LOGIC ; + dataout : OUT STD_LOGIC + ); +END altddio_out3; + + +ARCHITECTURE SYN OF altddio_out3 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altddio_out + GENERIC ( + extend_oe_disable : STRING; + intended_device_family : STRING; + invert_output : STRING; + lpm_type : STRING; + oe_reg : STRING; + power_up_high : STRING; + width : NATURAL + ); + PORT ( + dataout : OUT STD_LOGIC_VECTOR (0 DOWNTO 0); + outclock : IN STD_LOGIC ; + datain_h : IN STD_LOGIC_VECTOR (0 DOWNTO 0); + datain_l : IN STD_LOGIC_VECTOR (0 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire1 <= sub_wire0(0); + dataout <= sub_wire1; + sub_wire2 <= datain_h; + sub_wire3(0) <= sub_wire2; + sub_wire4 <= datain_l; + sub_wire5(0) <= sub_wire4; + + altddio_out_component : altddio_out + GENERIC MAP ( + extend_oe_disable => "UNUSED", + intended_device_family => "Cyclone III", + invert_output => "OFF", + lpm_type => "altddio_out", + oe_reg => "UNUSED", + power_up_high => "OFF", + width => 1 + ) + PORT MAP ( + outclock => outclock, + datain_h => sub_wire3, + datain_l => sub_wire5, + dataout => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ARESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: CLKEN NUMERIC "0" +-- Retrieval info: PRIVATE: EXTEND_OE_DISABLE NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: OE NUMERIC "0" +-- Retrieval info: PRIVATE: OE_REG NUMERIC "0" +-- Retrieval info: PRIVATE: POWER_UP_HIGH NUMERIC "0" +-- Retrieval info: PRIVATE: SRESET_MODE NUMERIC "2" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: WIDTH NUMERIC "1" +-- Retrieval info: CONSTANT: EXTEND_OE_DISABLE STRING "UNUSED" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: INVERT_OUTPUT STRING "OFF" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altddio_out" +-- Retrieval info: CONSTANT: OE_REG STRING "UNUSED" +-- Retrieval info: CONSTANT: POWER_UP_HIGH STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH NUMERIC "1" +-- Retrieval info: USED_PORT: datain_h 0 0 0 0 INPUT NODEFVAL datain_h +-- Retrieval info: USED_PORT: datain_l 0 0 0 0 INPUT NODEFVAL datain_l +-- Retrieval info: USED_PORT: dataout 0 0 0 0 OUTPUT NODEFVAL dataout +-- Retrieval info: USED_PORT: outclock 0 0 0 0 INPUT_CLK_EXT NODEFVAL outclock +-- Retrieval info: CONNECT: @datain_h 0 0 1 0 datain_h 0 0 0 0 +-- Retrieval info: CONNECT: @datain_l 0 0 1 0 datain_l 0 0 0 0 +-- Retrieval info: CONNECT: dataout 0 0 0 0 @dataout 0 0 1 0 +-- Retrieval info: CONNECT: @outclock 0 0 0 0 outclock 0 0 0 0 +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altddio_out3_inst.vhd FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll0.bsf b/FPGA_quartus_GE/altpll0.bsf new file mode 100644 index 0000000..b9a2853 --- /dev/null +++ b/FPGA_quartus_GE/altpll0.bsf @@ -0,0 +1,117 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 280 248) + (text "altpll0" (rect 120 1 167 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 229 31 244)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 38 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 280 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 263 56 277 72)(font "Arial" (font_size 8))) + (line (pt 280 72)(pt 248 72)(line_width 1)) + ) + (port + (pt 280 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 263 80 277 96)(font "Arial" (font_size 8))) + (line (pt 280 96)(pt 248 96)(line_width 1)) + ) + (port + (pt 280 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 263 104 277 120)(font "Arial" (font_size 8))) + (line (pt 280 120)(pt 248 120)(line_width 1)) + ) + (port + (pt 280 144) + (output) + (text "c3" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c3" (rect 263 128 277 144)(font "Arial" (font_size 8))) + (line (pt 280 144)(pt 248 144)(line_width 1)) + ) + (port + (pt 280 168) + (output) + (text "c4" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c4" (rect 263 152 277 168)(font "Arial" (font_size 8))) + (line (pt 280 168)(pt 248 168)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 205 230 253 244)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 201 81)(font "Arial" )) + (text "Operation Mode: Normal" (rect 58 84 173 98)(font "Arial" )) + (text "Clk " (rect 59 111 76 125)(font "Arial" )) + (text "Ratio" (rect 90 111 114 125)(font "Arial" )) + (text "Ph (dg)" (rect 128 111 163 125)(font "Arial" )) + (text "DC (%)" (rect 173 111 208 125)(font "Arial" )) + (text "c0" (rect 63 129 75 143)(font "Arial" )) + (text "16/11" (rect 89 129 116 143)(font "Arial" )) + (text "0.00" (rect 136 129 157 143)(font "Arial" )) + (text "50.00" (rect 178 129 205 143)(font "Arial" )) + (text "c1" (rect 63 147 75 161)(font "Arial" )) + (text "50/11" (rect 89 147 116 161)(font "Arial" )) + (text "0.00" (rect 136 147 157 161)(font "Arial" )) + (text "50.00" (rect 178 147 205 161)(font "Arial" )) + (text "c2" (rect 63 165 75 179)(font "Arial" )) + (text "40/11" (rect 89 165 116 179)(font "Arial" )) + (text "0.00" (rect 136 165 157 179)(font "Arial" )) + (text "50.00" (rect 178 165 205 179)(font "Arial" )) + (text "c3" (rect 63 183 75 197)(font "Arial" )) + (text "109/33" (rect 85 183 118 197)(font "Arial" )) + (text "0.00" (rect 136 183 157 197)(font "Arial" )) + (text "50.00" (rect 178 183 205 197)(font "Arial" )) + (text "c4" (rect 63 201 75 215)(font "Arial" )) + (text "109/39" (rect 85 201 118 215)(font "Arial" )) + (text "0.00" (rect 136 201 157 215)(font "Arial" )) + (text "50.00" (rect 178 201 205 215)(font "Arial" )) + (line (pt 0 0)(pt 281 0)(line_width 1)) + (line (pt 281 0)(pt 281 249)(line_width 1)) + (line (pt 0 249)(pt 281 249)(line_width 1)) + (line (pt 0 0)(pt 0 249)(line_width 1)) + (line (pt 56 108)(pt 215 108)(line_width 1)) + (line (pt 56 125)(pt 215 125)(line_width 1)) + (line (pt 56 143)(pt 215 143)(line_width 1)) + (line (pt 56 161)(pt 215 161)(line_width 1)) + (line (pt 56 179)(pt 215 179)(line_width 1)) + (line (pt 56 197)(pt 215 197)(line_width 1)) + (line (pt 56 215)(pt 215 215)(line_width 1)) + (line (pt 56 108)(pt 56 215)(line_width 1)) + (line (pt 82 108)(pt 82 215)(line_width 3)) + (line (pt 125 108)(pt 125 215)(line_width 3)) + (line (pt 170 108)(pt 170 215)(line_width 3)) + (line (pt 214 108)(pt 214 215)(line_width 1)) + (line (pt 48 56)(pt 248 56)(line_width 1)) + (line (pt 248 56)(pt 248 232)(line_width 1)) + (line (pt 48 232)(pt 248 232)(line_width 1)) + (line (pt 48 56)(pt 48 232)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll0.inc b/FPGA_quartus_GE/altpll0.inc new file mode 100644 index 0000000..933af49 --- /dev/null +++ b/FPGA_quartus_GE/altpll0.inc @@ -0,0 +1,27 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll0 +( + inclk0 +) + +RETURNS ( + c0, + c1, + c2, + c3, + c4 +); diff --git a/FPGA_quartus_GE/altpll0.ppf b/FPGA_quartus_GE/altpll0.ppf new file mode 100644 index 0000000..521a742 --- /dev/null +++ b/FPGA_quartus_GE/altpll0.ppf @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altpll0.qip b/FPGA_quartus_GE/altpll0.qip new file mode 100644 index 0000000..1b4cd11 --- /dev/null +++ b/FPGA_quartus_GE/altpll0.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altpll0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll0.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll0.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll0.ppf"] diff --git a/FPGA_quartus_GE/altpll0.vhd b/FPGA_quartus_GE/altpll0.vhd new file mode 100644 index 0000000..b035bf5 --- /dev/null +++ b/FPGA_quartus_GE/altpll0.vhd @@ -0,0 +1,477 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: altpll0.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altpll0 IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC ; + c4 : OUT STD_LOGIC + ); +END altpll0; + + +ARCHITECTURE SYN OF altpll0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_phase_shift : STRING; + clk4_divide_by : NATURAL; + clk4_duty_cycle : NATURAL; + clk4_multiply_by : NATURAL; + clk4_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + width_clock : NATURAL + ); + PORT ( + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire8_bv(0 DOWNTO 0) <= "0"; + sub_wire8 <= To_stdlogicvector(sub_wire8_bv); + sub_wire5 <= sub_wire0(4); + sub_wire4 <= sub_wire0(3); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + c2 <= sub_wire3; + c3 <= sub_wire4; + c4 <= sub_wire5; + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire8(0 DOWNTO 0) & sub_wire6; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 11, + clk0_duty_cycle => 50, + clk0_multiply_by => 16, + clk0_phase_shift => "0", + clk1_divide_by => 11, + clk1_duty_cycle => 50, + clk1_multiply_by => 50, + clk1_phase_shift => "0", + clk2_divide_by => 11, + clk2_duty_cycle => 50, + clk2_multiply_by => 40, + clk2_phase_shift => "0", + clk3_divide_by => 33, + clk3_duty_cycle => 50, + clk3_multiply_by => 109, + clk3_phase_shift => "0", + clk4_divide_by => 39, + clk4_duty_cycle => 50, + clk4_multiply_by => 109, + clk4_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 30303, + intended_device_family => "Cyclone III", + lpm_type => "altpll", + operation_mode => "NORMAL", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_UNUSED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_UNUSED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_USED", + port_clk4 => "PORT_USED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + width_clock => 5 + ) + PORT MAP ( + inclk => sub_wire7, + clk => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "75" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "33" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "36" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "39" +-- Retrieval info: PRIVATE: DIV_FACTOR4 NUMERIC "39" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE4 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "48.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "150.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "120.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "109.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE4 STRING "92.230766" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "330.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT4 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK4 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "109" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "109" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "109" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "109" +-- Retrieval info: PRIVATE: MULT_FACTOR4 NUMERIC "109" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "48.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "150.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "120.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "109.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ4 STRING "92.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE4 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT4 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT4 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "ps" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "ps" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT4 STRING "ps" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "altpll0.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK4 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK4 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA4 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "16" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "40" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "33" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "109" +-- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK4_DIVIDE_BY NUMERIC "39" +-- Retrieval info: CONSTANT: CLK4_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK4_MULTIPLY_BY NUMERIC "109" +-- Retrieval info: CONSTANT: CLK4_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30303" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- Retrieval info: USED_PORT: c4 0 0 0 0 OUTPUT_CLK_EXT VCC "c4" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: c4 0 0 0 0 @clk 0 0 1 4 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll1.bsf b/FPGA_quartus_GE/altpll1.bsf new file mode 100644 index 0000000..d1e4a9e --- /dev/null +++ b/FPGA_quartus_GE/altpll1.bsf @@ -0,0 +1,100 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 328 216) + (text "altpll1" (rect 144 1 191 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 197 31 212)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 38 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 328 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 311 56 325 72)(font "Arial" (font_size 8))) + (line (pt 328 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 328 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 311 80 325 96)(font "Arial" (font_size 8))) + (line (pt 328 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 328 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 311 104 325 120)(font "Arial" (font_size 8))) + (line (pt 328 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 328 144) + (output) + (text "locked" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "locked" (rect 287 128 325 144)(font "Arial" (font_size 8))) + (line (pt 328 144)(pt 272 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 253 198 301 212)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 201 81)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 215 98)(font "Arial" )) + (text "Clk " (rect 59 111 76 125)(font "Arial" )) + (text "Ratio" (rect 90 111 114 125)(font "Arial" )) + (text "Ph (dg)" (rect 128 111 163 125)(font "Arial" )) + (text "DC (%)" (rect 173 111 208 125)(font "Arial" )) + (text "c0" (rect 63 129 75 143)(font "Arial" )) + (text "1/66" (rect 92 129 113 143)(font "Arial" )) + (text "0.00" (rect 136 129 157 143)(font "Arial" )) + (text "50.00" (rect 178 129 205 143)(font "Arial" )) + (text "c1" (rect 63 147 75 161)(font "Arial" )) + (text "67/900" (rect 85 147 118 161)(font "Arial" )) + (text "0.00" (rect 136 147 157 161)(font "Arial" )) + (text "50.00" (rect 178 147 205 161)(font "Arial" )) + (text "c2" (rect 63 165 75 179)(font "Arial" )) + (text "67/90" (rect 89 165 116 179)(font "Arial" )) + (text "0.00" (rect 136 165 157 179)(font "Arial" )) + (text "50.00" (rect 178 165 205 179)(font "Arial" )) + (line (pt 0 0)(pt 329 0)(line_width 1)) + (line (pt 329 0)(pt 329 217)(line_width 1)) + (line (pt 0 217)(pt 329 217)(line_width 1)) + (line (pt 0 0)(pt 0 217)(line_width 1)) + (line (pt 56 108)(pt 215 108)(line_width 1)) + (line (pt 56 125)(pt 215 125)(line_width 1)) + (line (pt 56 143)(pt 215 143)(line_width 1)) + (line (pt 56 161)(pt 215 161)(line_width 1)) + (line (pt 56 179)(pt 215 179)(line_width 1)) + (line (pt 56 108)(pt 56 179)(line_width 1)) + (line (pt 82 108)(pt 82 179)(line_width 3)) + (line (pt 125 108)(pt 125 179)(line_width 3)) + (line (pt 170 108)(pt 170 179)(line_width 3)) + (line (pt 214 108)(pt 214 179)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 200)(line_width 1)) + (line (pt 48 200)(pt 272 200)(line_width 1)) + (line (pt 48 56)(pt 48 200)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll1.inc b/FPGA_quartus_GE/altpll1.inc new file mode 100644 index 0000000..0923ad2 --- /dev/null +++ b/FPGA_quartus_GE/altpll1.inc @@ -0,0 +1,26 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll1 +( + inclk0 +) + +RETURNS ( + c0, + c1, + c2, + locked +); diff --git a/FPGA_quartus_GE/altpll1.ppf b/FPGA_quartus_GE/altpll1.ppf new file mode 100644 index 0000000..0f38a28 --- /dev/null +++ b/FPGA_quartus_GE/altpll1.ppf @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altpll1.qip b/FPGA_quartus_GE/altpll1.qip new file mode 100644 index 0000000..ec03f05 --- /dev/null +++ b/FPGA_quartus_GE/altpll1.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altpll1.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll1.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll1.ppf"] diff --git a/FPGA_quartus_GE/altpll1.vhd b/FPGA_quartus_GE/altpll1.vhd new file mode 100644 index 0000000..ab9bfaf --- /dev/null +++ b/FPGA_quartus_GE/altpll1.vhd @@ -0,0 +1,423 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: altpll1.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altpll1 IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + locked : OUT STD_LOGIC + ); +END altpll1; + + +ARCHITECTURE SYN OF altpll1 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + self_reset_on_loss_lock : STRING; + width_clock : NATURAL + ); + PORT ( + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + locked : OUT STD_LOGIC ; + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire7_bv(0 DOWNTO 0) <= "0"; + sub_wire7 <= To_stdlogicvector(sub_wire7_bv); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + c2 <= sub_wire3; + locked <= sub_wire4; + sub_wire5 <= inclk0; + sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 66, + clk0_duty_cycle => 50, + clk0_multiply_by => 1, + clk0_phase_shift => "0", + clk1_divide_by => 900, + clk1_duty_cycle => 50, + clk1_multiply_by => 67, + clk1_phase_shift => "0", + clk2_divide_by => 90, + clk2_duty_cycle => 50, + clk2_multiply_by => 67, + clk2_phase_shift => "0", + compensate_clock => "CLK0", + inclk0_input_frequency => 30303, + intended_device_family => "Cyclone III", + lpm_type => "altpll", + operation_mode => "SOURCE_SYNCHRONOUS", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_UNUSED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_USED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_UNUSED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + self_reset_on_loss_lock => "OFF", + width_clock => 5 + ) + PORT MAP ( + inclk => sub_wire6, + clk => sub_wire0, + locked => sub_wire4 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "90" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "900" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "90" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "0.500000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "2.456667" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "24.566668" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "330.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "67" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "67" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "67" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "0.50000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "2.45760000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "24.57600000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "altpll1.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "66" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "900" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "67" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "90" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "67" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30303" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SOURCE_SYNCHRONOUS" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll1_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll2.bsf b/FPGA_quartus_GE/altpll2.bsf new file mode 100644 index 0000000..79679d7 --- /dev/null +++ b/FPGA_quartus_GE/altpll2.bsf @@ -0,0 +1,117 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 304 248) + (text "altpll2" (rect 132 1 179 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 229 31 244)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 38 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 304 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 287 56 301 72)(font "Arial" (font_size 8))) + (line (pt 304 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 304 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 287 80 301 96)(font "Arial" (font_size 8))) + (line (pt 304 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 304 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 287 104 301 120)(font "Arial" (font_size 8))) + (line (pt 304 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 304 144) + (output) + (text "c3" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c3" (rect 287 128 301 144)(font "Arial" (font_size 8))) + (line (pt 304 144)(pt 272 144)(line_width 1)) + ) + (port + (pt 304 168) + (output) + (text "c4" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c4" (rect 287 152 301 168)(font "Arial" (font_size 8))) + (line (pt 304 168)(pt 272 168)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 229 230 277 244)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 201 81)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 215 98)(font "Arial" )) + (text "Clk " (rect 59 111 76 125)(font "Arial" )) + (text "Ratio" (rect 85 111 109 125)(font "Arial" )) + (text "Ph (dg)" (rect 119 111 154 125)(font "Arial" )) + (text "DC (%)" (rect 164 111 199 125)(font "Arial" )) + (text "c0" (rect 63 129 75 143)(font "Arial" )) + (text "4/1" (rect 91 129 106 143)(font "Arial" )) + (text "240.00" (rect 120 129 153 143)(font "Arial" )) + (text "50.00" (rect 169 129 196 143)(font "Arial" )) + (text "c1" (rect 63 147 75 161)(font "Arial" )) + (text "4/1" (rect 91 147 106 161)(font "Arial" )) + (text "0.00" (rect 127 147 148 161)(font "Arial" )) + (text "50.00" (rect 169 147 196 161)(font "Arial" )) + (text "c2" (rect 63 165 75 179)(font "Arial" )) + (text "4/1" (rect 91 165 106 179)(font "Arial" )) + (text "180.00" (rect 120 165 153 179)(font "Arial" )) + (text "50.00" (rect 169 165 196 179)(font "Arial" )) + (text "c3" (rect 63 183 75 197)(font "Arial" )) + (text "4/1" (rect 91 183 106 197)(font "Arial" )) + (text "105.00" (rect 120 183 153 197)(font "Arial" )) + (text "50.00" (rect 169 183 196 197)(font "Arial" )) + (text "c4" (rect 63 201 75 215)(font "Arial" )) + (text "2/1" (rect 91 201 106 215)(font "Arial" )) + (text "270.00" (rect 120 201 153 215)(font "Arial" )) + (text "50.00" (rect 169 201 196 215)(font "Arial" )) + (line (pt 0 0)(pt 305 0)(line_width 1)) + (line (pt 305 0)(pt 305 249)(line_width 1)) + (line (pt 0 249)(pt 305 249)(line_width 1)) + (line (pt 0 0)(pt 0 249)(line_width 1)) + (line (pt 56 108)(pt 206 108)(line_width 1)) + (line (pt 56 125)(pt 206 125)(line_width 1)) + (line (pt 56 143)(pt 206 143)(line_width 1)) + (line (pt 56 161)(pt 206 161)(line_width 1)) + (line (pt 56 179)(pt 206 179)(line_width 1)) + (line (pt 56 197)(pt 206 197)(line_width 1)) + (line (pt 56 215)(pt 206 215)(line_width 1)) + (line (pt 56 108)(pt 56 215)(line_width 1)) + (line (pt 82 108)(pt 82 215)(line_width 3)) + (line (pt 116 108)(pt 116 215)(line_width 3)) + (line (pt 161 108)(pt 161 215)(line_width 3)) + (line (pt 205 108)(pt 205 215)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 232)(line_width 1)) + (line (pt 48 232)(pt 272 232)(line_width 1)) + (line (pt 48 56)(pt 48 232)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll2.inc b/FPGA_quartus_GE/altpll2.inc new file mode 100644 index 0000000..e75913b --- /dev/null +++ b/FPGA_quartus_GE/altpll2.inc @@ -0,0 +1,27 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll2 +( + inclk0 +) + +RETURNS ( + c0, + c1, + c2, + c3, + c4 +); diff --git a/FPGA_quartus_GE/altpll2.ppf b/FPGA_quartus_GE/altpll2.ppf new file mode 100644 index 0000000..b1c71cc --- /dev/null +++ b/FPGA_quartus_GE/altpll2.ppf @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altpll2.qip b/FPGA_quartus_GE/altpll2.qip new file mode 100644 index 0000000..74cc641 --- /dev/null +++ b/FPGA_quartus_GE/altpll2.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altpll2.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll2.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll2.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll2.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll2.ppf"] diff --git a/FPGA_quartus_GE/altpll2.vhd b/FPGA_quartus_GE/altpll2.vhd new file mode 100644 index 0000000..2c55f08 --- /dev/null +++ b/FPGA_quartus_GE/altpll2.vhd @@ -0,0 +1,477 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: altpll2.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altpll2 IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC ; + c4 : OUT STD_LOGIC + ); +END altpll2; + + +ARCHITECTURE SYN OF altpll2 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC ; + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire8_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire8 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_phase_shift : STRING; + clk4_divide_by : NATURAL; + clk4_duty_cycle : NATURAL; + clk4_multiply_by : NATURAL; + clk4_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + width_clock : NATURAL + ); + PORT ( + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire8_bv(0 DOWNTO 0) <= "0"; + sub_wire8 <= To_stdlogicvector(sub_wire8_bv); + sub_wire5 <= sub_wire0(4); + sub_wire4 <= sub_wire0(3); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + c2 <= sub_wire3; + c3 <= sub_wire4; + c4 <= sub_wire5; + sub_wire6 <= inclk0; + sub_wire7 <= sub_wire8(0 DOWNTO 0) & sub_wire6; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 1, + clk0_duty_cycle => 50, + clk0_multiply_by => 4, + clk0_phase_shift => "5051", + clk1_divide_by => 1, + clk1_duty_cycle => 50, + clk1_multiply_by => 4, + clk1_phase_shift => "0", + clk2_divide_by => 1, + clk2_duty_cycle => 50, + clk2_multiply_by => 4, + clk2_phase_shift => "3788", + clk3_divide_by => 1, + clk3_duty_cycle => 50, + clk3_multiply_by => 4, + clk3_phase_shift => "2210", + clk4_divide_by => 1, + clk4_duty_cycle => 50, + clk4_multiply_by => 2, + clk4_phase_shift => "11364", + compensate_clock => "CLK0", + inclk0_input_frequency => 30303, + intended_device_family => "Cyclone III", + lpm_type => "altpll", + operation_mode => "SOURCE_SYNCHRONOUS", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_UNUSED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_UNUSED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_USED", + port_clk4 => "PORT_USED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + width_clock => 5 + ) + PORT MAP ( + inclk => sub_wire7, + clk => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "c0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "1" +-- Retrieval info: PRIVATE: DIV_FACTOR4 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE4 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "132.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "132.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "132.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "132.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE4 STRING "66.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "330.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT4 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK4 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "4" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "4" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "4" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "4" +-- Retrieval info: PRIVATE: MULT_FACTOR4 NUMERIC "2" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "133.33333000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "133.33330000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "133.33330000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "133.33330000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ4 STRING "100.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE4 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT4 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "240.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "180.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "105.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT4 STRING "270.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT4 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "altpll2.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK4 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK4 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA4 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "5051" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "3788" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "4" +-- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "2210" +-- Retrieval info: CONSTANT: CLK4_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK4_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK4_MULTIPLY_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK4_PHASE_SHIFT STRING "11364" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30303" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SOURCE_SYNCHRONOUS" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- Retrieval info: USED_PORT: c4 0 0 0 0 OUTPUT_CLK_EXT VCC "c4" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: c4 0 0 0 0 @clk 0 0 1 4 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll2_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll3.bsf b/FPGA_quartus_GE/altpll3.bsf new file mode 100644 index 0000000..da30b0c --- /dev/null +++ b/FPGA_quartus_GE/altpll3.bsf @@ -0,0 +1,105 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 304 232) + (text "altpll3" (rect 132 1 179 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 213 31 228)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 38 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 304 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 287 56 301 72)(font "Arial" (font_size 8))) + (line (pt 304 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 304 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 287 80 301 96)(font "Arial" (font_size 8))) + (line (pt 304 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 304 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 287 104 301 120)(font "Arial" (font_size 8))) + (line (pt 304 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 304 144) + (output) + (text "c3" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c3" (rect 287 128 301 144)(font "Arial" (font_size 8))) + (line (pt 304 144)(pt 272 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 229 214 277 228)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 201 81)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 215 98)(font "Arial" )) + (text "Clk " (rect 59 111 76 125)(font "Arial" )) + (text "Ratio" (rect 86 111 110 125)(font "Arial" )) + (text "Ph (dg)" (rect 121 111 156 125)(font "Arial" )) + (text "DC (%)" (rect 166 111 201 125)(font "Arial" )) + (text "c0" (rect 63 129 75 143)(font "Arial" )) + (text "2/33" (rect 88 129 109 143)(font "Arial" )) + (text "0.00" (rect 129 129 150 143)(font "Arial" )) + (text "50.00" (rect 171 129 198 143)(font "Arial" )) + (text "c1" (rect 63 147 75 161)(font "Arial" )) + (text "16/33" (rect 85 147 112 161)(font "Arial" )) + (text "0.00" (rect 129 147 150 161)(font "Arial" )) + (text "50.00" (rect 171 147 198 161)(font "Arial" )) + (text "c2" (rect 63 165 75 179)(font "Arial" )) + (text "25/33" (rect 85 165 112 179)(font "Arial" )) + (text "0.00" (rect 129 165 150 179)(font "Arial" )) + (text "50.00" (rect 171 165 198 179)(font "Arial" )) + (text "c3" (rect 63 183 75 197)(font "Arial" )) + (text "16/11" (rect 85 183 112 197)(font "Arial" )) + (text "0.00" (rect 129 183 150 197)(font "Arial" )) + (text "50.00" (rect 171 183 198 197)(font "Arial" )) + (line (pt 0 0)(pt 305 0)(line_width 1)) + (line (pt 305 0)(pt 305 233)(line_width 1)) + (line (pt 0 233)(pt 305 233)(line_width 1)) + (line (pt 0 0)(pt 0 233)(line_width 1)) + (line (pt 56 108)(pt 208 108)(line_width 1)) + (line (pt 56 125)(pt 208 125)(line_width 1)) + (line (pt 56 143)(pt 208 143)(line_width 1)) + (line (pt 56 161)(pt 208 161)(line_width 1)) + (line (pt 56 179)(pt 208 179)(line_width 1)) + (line (pt 56 197)(pt 208 197)(line_width 1)) + (line (pt 56 108)(pt 56 197)(line_width 1)) + (line (pt 82 108)(pt 82 197)(line_width 3)) + (line (pt 118 108)(pt 118 197)(line_width 3)) + (line (pt 163 108)(pt 163 197)(line_width 3)) + (line (pt 207 108)(pt 207 197)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 216)(line_width 1)) + (line (pt 48 216)(pt 272 216)(line_width 1)) + (line (pt 48 56)(pt 48 216)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll3.inc b/FPGA_quartus_GE/altpll3.inc new file mode 100644 index 0000000..160ecad --- /dev/null +++ b/FPGA_quartus_GE/altpll3.inc @@ -0,0 +1,26 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll3 +( + inclk0 +) + +RETURNS ( + c0, + c1, + c2, + c3 +); diff --git a/FPGA_quartus_GE/altpll3.ppf b/FPGA_quartus_GE/altpll3.ppf new file mode 100644 index 0000000..2a7b695 --- /dev/null +++ b/FPGA_quartus_GE/altpll3.ppf @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altpll3.qip b/FPGA_quartus_GE/altpll3.qip new file mode 100644 index 0000000..8dd2955 --- /dev/null +++ b/FPGA_quartus_GE/altpll3.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "altpll3.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll3.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll3.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll3.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll3.ppf"] diff --git a/FPGA_quartus_GE/altpll3.vhd b/FPGA_quartus_GE/altpll3.vhd new file mode 100644 index 0000000..6ead1f5 --- /dev/null +++ b/FPGA_quartus_GE/altpll3.vhd @@ -0,0 +1,445 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: altpll3.vhd +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY altera_mf; +USE altera_mf.all; + +ENTITY altpll3 IS + PORT + ( + inclk0 : IN STD_LOGIC := '0'; + c0 : OUT STD_LOGIC ; + c1 : OUT STD_LOGIC ; + c2 : OUT STD_LOGIC ; + c3 : OUT STD_LOGIC + ); +END altpll3; + + +ARCHITECTURE SYN OF altpll3 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (4 DOWNTO 0); + SIGNAL sub_wire1 : STD_LOGIC ; + SIGNAL sub_wire2 : STD_LOGIC ; + SIGNAL sub_wire3 : STD_LOGIC ; + SIGNAL sub_wire4 : STD_LOGIC ; + SIGNAL sub_wire5 : STD_LOGIC ; + SIGNAL sub_wire6 : STD_LOGIC_VECTOR (1 DOWNTO 0); + SIGNAL sub_wire7_bv : BIT_VECTOR (0 DOWNTO 0); + SIGNAL sub_wire7 : STD_LOGIC_VECTOR (0 DOWNTO 0); + + + + COMPONENT altpll + GENERIC ( + bandwidth_type : STRING; + clk0_divide_by : NATURAL; + clk0_duty_cycle : NATURAL; + clk0_multiply_by : NATURAL; + clk0_phase_shift : STRING; + clk1_divide_by : NATURAL; + clk1_duty_cycle : NATURAL; + clk1_multiply_by : NATURAL; + clk1_phase_shift : STRING; + clk2_divide_by : NATURAL; + clk2_duty_cycle : NATURAL; + clk2_multiply_by : NATURAL; + clk2_phase_shift : STRING; + clk3_divide_by : NATURAL; + clk3_duty_cycle : NATURAL; + clk3_multiply_by : NATURAL; + clk3_phase_shift : STRING; + compensate_clock : STRING; + inclk0_input_frequency : NATURAL; + intended_device_family : STRING; + lpm_type : STRING; + operation_mode : STRING; + pll_type : STRING; + port_activeclock : STRING; + port_areset : STRING; + port_clkbad0 : STRING; + port_clkbad1 : STRING; + port_clkloss : STRING; + port_clkswitch : STRING; + port_configupdate : STRING; + port_fbin : STRING; + port_inclk0 : STRING; + port_inclk1 : STRING; + port_locked : STRING; + port_pfdena : STRING; + port_phasecounterselect : STRING; + port_phasedone : STRING; + port_phasestep : STRING; + port_phaseupdown : STRING; + port_pllena : STRING; + port_scanaclr : STRING; + port_scanclk : STRING; + port_scanclkena : STRING; + port_scandata : STRING; + port_scandataout : STRING; + port_scandone : STRING; + port_scanread : STRING; + port_scanwrite : STRING; + port_clk0 : STRING; + port_clk1 : STRING; + port_clk2 : STRING; + port_clk3 : STRING; + port_clk4 : STRING; + port_clk5 : STRING; + port_clkena0 : STRING; + port_clkena1 : STRING; + port_clkena2 : STRING; + port_clkena3 : STRING; + port_clkena4 : STRING; + port_clkena5 : STRING; + port_extclk0 : STRING; + port_extclk1 : STRING; + port_extclk2 : STRING; + port_extclk3 : STRING; + width_clock : NATURAL + ); + PORT ( + inclk : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + clk : OUT STD_LOGIC_VECTOR (4 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + sub_wire7_bv(0 DOWNTO 0) <= "0"; + sub_wire7 <= To_stdlogicvector(sub_wire7_bv); + sub_wire4 <= sub_wire0(3); + sub_wire3 <= sub_wire0(2); + sub_wire2 <= sub_wire0(1); + sub_wire1 <= sub_wire0(0); + c0 <= sub_wire1; + c1 <= sub_wire2; + c2 <= sub_wire3; + c3 <= sub_wire4; + sub_wire5 <= inclk0; + sub_wire6 <= sub_wire7(0 DOWNTO 0) & sub_wire5; + + altpll_component : altpll + GENERIC MAP ( + bandwidth_type => "AUTO", + clk0_divide_by => 33, + clk0_duty_cycle => 50, + clk0_multiply_by => 2, + clk0_phase_shift => "0", + clk1_divide_by => 33, + clk1_duty_cycle => 50, + clk1_multiply_by => 16, + clk1_phase_shift => "0", + clk2_divide_by => 33, + clk2_duty_cycle => 50, + clk2_multiply_by => 25, + clk2_phase_shift => "0", + clk3_divide_by => 11, + clk3_duty_cycle => 50, + clk3_multiply_by => 16, + clk3_phase_shift => "0", + compensate_clock => "CLK1", + inclk0_input_frequency => 30303, + intended_device_family => "Cyclone III", + lpm_type => "altpll", + operation_mode => "SOURCE_SYNCHRONOUS", + pll_type => "AUTO", + port_activeclock => "PORT_UNUSED", + port_areset => "PORT_UNUSED", + port_clkbad0 => "PORT_UNUSED", + port_clkbad1 => "PORT_UNUSED", + port_clkloss => "PORT_UNUSED", + port_clkswitch => "PORT_UNUSED", + port_configupdate => "PORT_UNUSED", + port_fbin => "PORT_UNUSED", + port_inclk0 => "PORT_USED", + port_inclk1 => "PORT_UNUSED", + port_locked => "PORT_UNUSED", + port_pfdena => "PORT_UNUSED", + port_phasecounterselect => "PORT_UNUSED", + port_phasedone => "PORT_UNUSED", + port_phasestep => "PORT_UNUSED", + port_phaseupdown => "PORT_UNUSED", + port_pllena => "PORT_UNUSED", + port_scanaclr => "PORT_UNUSED", + port_scanclk => "PORT_UNUSED", + port_scanclkena => "PORT_UNUSED", + port_scandata => "PORT_UNUSED", + port_scandataout => "PORT_UNUSED", + port_scandone => "PORT_UNUSED", + port_scanread => "PORT_UNUSED", + port_scanwrite => "PORT_UNUSED", + port_clk0 => "PORT_USED", + port_clk1 => "PORT_USED", + port_clk2 => "PORT_USED", + port_clk3 => "PORT_USED", + port_clk4 => "PORT_UNUSED", + port_clk5 => "PORT_UNUSED", + port_clkena0 => "PORT_UNUSED", + port_clkena1 => "PORT_UNUSED", + port_clkena2 => "PORT_UNUSED", + port_clkena3 => "PORT_UNUSED", + port_clkena4 => "PORT_UNUSED", + port_clkena5 => "PORT_UNUSED", + port_extclk0 => "PORT_UNUSED", + port_extclk1 => "PORT_UNUSED", + port_extclk2 => "PORT_UNUSED", + port_extclk3 => "PORT_UNUSED", + width_clock => 5 + ) + PORT MAP ( + inclk => sub_wire6, + clk => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c1" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "33" +-- Retrieval info: PRIVATE: DIV_FACTOR1 NUMERIC "33" +-- Retrieval info: PRIVATE: DIV_FACTOR2 NUMERIC "33" +-- Retrieval info: PRIVATE: DIV_FACTOR3 NUMERIC "33" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE1 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE2 STRING "50.00000000" +-- Retrieval info: PRIVATE: DUTY_CYCLE3 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "2.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE1 STRING "16.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE2 STRING "25.000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE3 STRING "48.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "33.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "0" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "330.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK1 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK2 STRING "0" +-- Retrieval info: PRIVATE: MIRROR_CLK3 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "2" +-- Retrieval info: PRIVATE: MULT_FACTOR1 NUMERIC "16" +-- Retrieval info: PRIVATE: MULT_FACTOR2 NUMERIC "25" +-- Retrieval info: PRIVATE: MULT_FACTOR3 NUMERIC "48" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "2.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ1 STRING "16.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ2 STRING "25.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ3 STRING "160.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE1 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE2 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE3 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT1 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT2 STRING "MHz" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT3 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT1 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT2 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT3 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT1 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT2 STRING "deg" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT3 STRING "ps" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "altpll3.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK1 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK2 STRING "1" +-- Retrieval info: PRIVATE: STICKY_CLK3 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK1 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK2 STRING "1" +-- Retrieval info: PRIVATE: USE_CLK3 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA1 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA2 STRING "0" +-- Retrieval info: PRIVATE: USE_CLKENA3 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "33" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK1_DIVIDE_BY NUMERIC "33" +-- Retrieval info: CONSTANT: CLK1_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK1_MULTIPLY_BY NUMERIC "16" +-- Retrieval info: CONSTANT: CLK1_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK2_DIVIDE_BY NUMERIC "33" +-- Retrieval info: CONSTANT: CLK2_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK2_MULTIPLY_BY NUMERIC "25" +-- Retrieval info: CONSTANT: CLK2_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: CLK3_DIVIDE_BY NUMERIC "11" +-- Retrieval info: CONSTANT: CLK3_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK3_MULTIPLY_BY NUMERIC "16" +-- Retrieval info: CONSTANT: CLK3_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK1" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "30303" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "SOURCE_SYNCHRONOUS" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: @inclk 0 0 2 0 INPUT_CLK_EXT VCC "@inclk[1..0]" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: c1 0 0 0 0 OUTPUT_CLK_EXT VCC "c1" +-- Retrieval info: USED_PORT: c2 0 0 0 0 OUTPUT_CLK_EXT VCC "c2" +-- Retrieval info: USED_PORT: c3 0 0 0 0 OUTPUT_CLK_EXT VCC "c3" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: c1 0 0 0 0 @clk 0 0 1 1 +-- Retrieval info: CONNECT: c3 0 0 0 0 @clk 0 0 1 3 +-- Retrieval info: CONNECT: c2 0 0 0 0 @clk 0 0 1 2 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll3_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll4.bsf b/FPGA_quartus_GE/altpll4.bsf new file mode 100644 index 0000000..e071d43 --- /dev/null +++ b/FPGA_quartus_GE/altpll4.bsf @@ -0,0 +1,125 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 376 232) + (text "altpll4" (rect 168 1 215 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 213 31 228)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 38 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 88 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "areset" (rect 0 0 42 16)(font "Arial" (font_size 8))) + (text "areset" (rect 4 80 40 96)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 88 96)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "scanclk" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "scanclk" (rect 4 104 49 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 88 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "scandata" (rect 0 0 62 16)(font "Arial" (font_size 8))) + (text "scandata" (rect 4 128 57 144)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 88 144)(line_width 1)) + ) + (port + (pt 0 168) + (input) + (text "scanclkena" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "scanclkena" (rect 4 152 70 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 88 168)(line_width 1)) + ) + (port + (pt 0 192) + (input) + (text "configupdate" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "configupdate" (rect 4 176 77 192)(font "Arial" (font_size 8))) + (line (pt 0 192)(pt 88 192)(line_width 1)) + ) + (port + (pt 376 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 359 56 373 72)(font "Arial" (font_size 8))) + (line (pt 376 72)(pt 288 72)(line_width 1)) + ) + (port + (pt 376 96) + (output) + (text "scandataout" (rect 0 0 83 16)(font "Arial" (font_size 8))) + (text "scandataout" (rect 302 80 373 96)(font "Arial" (font_size 8))) + (line (pt 376 96)(pt 288 96)(line_width 1)) + ) + (port + (pt 376 120) + (output) + (text "scandone" (rect 0 0 66 16)(font "Arial" (font_size 8))) + (text "scandone" (rect 317 104 373 120)(font "Arial" (font_size 8))) + (line (pt 376 120)(pt 288 120)(line_width 1)) + ) + (port + (pt 376 144) + (output) + (text "locked" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "locked" (rect 335 128 373 144)(font "Arial" (font_size 8))) + (line (pt 376 144)(pt 288 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 301 214 349 228)(font "Arial" )) + (text "inclk0 frequency: 48.000 MHz" (rect 98 123 241 137)(font "Arial" )) + (text "Operation Mode: Normal" (rect 98 140 213 154)(font "Arial" )) + (text "Clk " (rect 99 167 116 181)(font "Arial" )) + (text "Ratio" (rect 125 167 149 181)(font "Arial" )) + (text "Ph (dg)" (rect 159 167 194 181)(font "Arial" )) + (text "DC (%)" (rect 204 167 239 181)(font "Arial" )) + (text "c0" (rect 103 185 115 199)(font "Arial" )) + (text "2/1" (rect 131 185 146 199)(font "Arial" )) + (text "0.00" (rect 167 185 188 199)(font "Arial" )) + (text "50.00" (rect 209 185 236 199)(font "Arial" )) + (line (pt 0 0)(pt 377 0)(line_width 1)) + (line (pt 377 0)(pt 377 233)(line_width 1)) + (line (pt 0 233)(pt 377 233)(line_width 1)) + (line (pt 0 0)(pt 0 233)(line_width 1)) + (line (pt 96 164)(pt 246 164)(line_width 1)) + (line (pt 96 181)(pt 246 181)(line_width 1)) + (line (pt 96 199)(pt 246 199)(line_width 1)) + (line (pt 96 164)(pt 96 199)(line_width 1)) + (line (pt 122 164)(pt 122 199)(line_width 3)) + (line (pt 156 164)(pt 156 199)(line_width 3)) + (line (pt 201 164)(pt 201 199)(line_width 3)) + (line (pt 245 164)(pt 245 199)(line_width 1)) + (line (pt 88 56)(pt 288 56)(line_width 1)) + (line (pt 288 56)(pt 288 216)(line_width 1)) + (line (pt 88 216)(pt 288 216)(line_width 1)) + (line (pt 88 56)(pt 88 216)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll4.inc b/FPGA_quartus_GE/altpll4.inc new file mode 100644 index 0000000..39f54c9 --- /dev/null +++ b/FPGA_quartus_GE/altpll4.inc @@ -0,0 +1,31 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll4 +( + areset, + configupdate, + inclk0, + scanclk, + scanclkena, + scandata +) + +RETURNS ( + c0, + locked, + scandataout, + scandone +); diff --git a/FPGA_quartus_GE/altpll4.mif b/FPGA_quartus_GE/altpll4.mif new file mode 100644 index 0000000..e50eda2 --- /dev/null +++ b/FPGA_quartus_GE/altpll4.mif @@ -0,0 +1,174 @@ +-- Copyright (C) 1991-2010 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- MIF file representing initial state of PLL Scan Chain +-- Device Family: Cyclone III +-- Device Part: - +-- Device Speed Grade: 8 +-- PLL Scan Chain: Fast PLL (144 bits) +-- File Name: C:\FireBee\FPGA\altpll4.mif +-- Generated: Mon Dec 06 01:47:24 2010 + +WIDTH=1; +DEPTH=144; + +ADDRESS_RADIX=UNS; +DATA_RADIX=UNS; + +CONTENT BEGIN + 0 : 0; -- Reserved Bits = 0 (1 bit(s)) + 1 : 0; -- Reserved Bits = 0 (1 bit(s)) + 2 : 0; -- Loop Filter Capacitance = 0 (2 bit(s)) (Setting 0) + 3 : 0; + 4 : 1; -- Loop Filter Resistance = 27 (5 bit(s)) (Setting 27) + 5 : 1; + 6 : 0; + 7 : 1; + 8 : 1; + 9 : 0; -- VCO Post Scale = 0 (1 bit(s)) (VCO post-scale divider counter value = 2) + 10 : 0; -- Reserved Bits = 0 (5 bit(s)) + 11 : 0; + 12 : 0; + 13 : 0; + 14 : 0; + 15 : 0; -- Charge Pump Current = 1 (3 bit(s)) (Setting 1) + 16 : 0; + 17 : 1; + 18 : 1; -- N counter: Bypass = 1 (1 bit(s)) + 19 : 0; -- N counter: High Count = 0 (8 bit(s)) + 20 : 0; + 21 : 0; + 22 : 0; + 23 : 0; + 24 : 0; + 25 : 0; + 26 : 0; + 27 : 0; -- N counter: Odd Division = 0 (1 bit(s)) + 28 : 0; -- N counter: Low Count = 0 (8 bit(s)) + 29 : 0; + 30 : 0; + 31 : 0; + 32 : 0; + 33 : 0; + 34 : 0; + 35 : 0; + 36 : 0; -- M counter: Bypass = 0 (1 bit(s)) + 37 : 0; -- M counter: High Count = 6 (8 bit(s)) + 38 : 0; + 39 : 0; + 40 : 0; + 41 : 0; + 42 : 1; + 43 : 1; + 44 : 0; + 45 : 0; -- M counter: Odd Division = 0 (1 bit(s)) + 46 : 0; -- M counter: Low Count = 6 (8 bit(s)) + 47 : 0; + 48 : 0; + 49 : 0; + 50 : 0; + 51 : 1; + 52 : 1; + 53 : 0; + 54 : 0; -- clk0 counter: Bypass = 0 (1 bit(s)) + 55 : 0; -- clk0 counter: High Count = 3 (8 bit(s)) + 56 : 0; + 57 : 0; + 58 : 0; + 59 : 0; + 60 : 0; + 61 : 1; + 62 : 1; + 63 : 0; -- clk0 counter: Odd Division = 0 (1 bit(s)) + 64 : 0; -- clk0 counter: Low Count = 3 (8 bit(s)) + 65 : 0; + 66 : 0; + 67 : 0; + 68 : 0; + 69 : 0; + 70 : 1; + 71 : 1; + 72 : 1; -- clk1 counter: Bypass = 1 (1 bit(s)) + 73 : 0; -- clk1 counter: High Count = 0 (8 bit(s)) + 74 : 0; + 75 : 0; + 76 : 0; + 77 : 0; + 78 : 0; + 79 : 0; + 80 : 0; + 81 : 0; -- clk1 counter: Odd Division = 0 (1 bit(s)) + 82 : 0; -- clk1 counter: Low Count = 0 (8 bit(s)) + 83 : 0; + 84 : 0; + 85 : 0; + 86 : 0; + 87 : 0; + 88 : 0; + 89 : 0; + 90 : 1; -- clk2 counter: Bypass = 1 (1 bit(s)) + 91 : 0; -- clk2 counter: High Count = 0 (8 bit(s)) + 92 : 0; + 93 : 0; + 94 : 0; + 95 : 0; + 96 : 0; + 97 : 0; + 98 : 0; + 99 : 0; -- clk2 counter: Odd Division = 0 (1 bit(s)) + 100 : 0; -- clk2 counter: Low Count = 0 (8 bit(s)) + 101 : 0; + 102 : 0; + 103 : 0; + 104 : 0; + 105 : 0; + 106 : 0; + 107 : 0; + 108 : 1; -- clk3 counter: Bypass = 1 (1 bit(s)) + 109 : 0; -- clk3 counter: High Count = 0 (8 bit(s)) + 110 : 0; + 111 : 0; + 112 : 0; + 113 : 0; + 114 : 0; + 115 : 0; + 116 : 0; + 117 : 0; -- clk3 counter: Odd Division = 0 (1 bit(s)) + 118 : 0; -- clk3 counter: Low Count = 0 (8 bit(s)) + 119 : 0; + 120 : 0; + 121 : 0; + 122 : 0; + 123 : 0; + 124 : 0; + 125 : 0; + 126 : 1; -- clk4 counter: Bypass = 1 (1 bit(s)) + 127 : 0; -- clk4 counter: High Count = 0 (8 bit(s)) + 128 : 0; + 129 : 0; + 130 : 0; + 131 : 0; + 132 : 0; + 133 : 0; + 134 : 0; + 135 : 0; -- clk4 counter: Odd Division = 0 (1 bit(s)) + 136 : 0; -- clk4 counter: Low Count = 0 (8 bit(s)) + 137 : 0; + 138 : 0; + 139 : 0; + 140 : 0; + 141 : 0; + 142 : 0; + 143 : 0; +END; diff --git a/FPGA_quartus_GE/altpll4.ppf b/FPGA_quartus_GE/altpll4.ppf new file mode 100644 index 0000000..541ce91 --- /dev/null +++ b/FPGA_quartus_GE/altpll4.ppf @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/FPGA_quartus_GE/altpll4.qip b/FPGA_quartus_GE/altpll4.qip new file mode 100644 index 0000000..f44acdc --- /dev/null +++ b/FPGA_quartus_GE/altpll4.qip @@ -0,0 +1,7 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll4.tdf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll4.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll4.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll4.cmp"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll4.ppf"] diff --git a/FPGA_quartus_GE/altpll4.tdf b/FPGA_quartus_GE/altpll4.tdf new file mode 100644 index 0000000..3ec77d4 --- /dev/null +++ b/FPGA_quartus_GE/altpll4.tdf @@ -0,0 +1,298 @@ +-- megafunction wizard: %ALTPLL% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll + +-- ============================================================ +-- File Name: altpll4.tdf +-- Megafunction Name(s): +-- altpll +-- +-- Simulation Library Files(s): +-- altera_mf +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + +INCLUDE "altpll.inc"; + + + +SUBDESIGN altpll4 +( + areset : INPUT = GND; + configupdate : INPUT = GND; + inclk0 : INPUT = GND; + scanclk : INPUT = VCC; + scanclkena : INPUT = GND; + scandata : INPUT = GND; + c0 : OUTPUT; + locked : OUTPUT; + scandataout : OUTPUT; + scandone : OUTPUT; +) + +VARIABLE + + altpll_component : altpll WITH ( + BANDWIDTH_TYPE = "AUTO", + CLK0_DIVIDE_BY = 1, + CLK0_DUTY_CYCLE = 50, + CLK0_MULTIPLY_BY = 2, + CLK0_PHASE_SHIFT = "0", + COMPENSATE_CLOCK = "CLK0", + INCLK0_INPUT_FREQUENCY = 20833, + INTENDED_DEVICE_FAMILY = "Cyclone III", + LPM_TYPE = "altpll", + OPERATION_MODE = "NORMAL", + PLL_TYPE = "AUTO", + PORT_ACTIVECLOCK = "PORT_UNUSED", + PORT_ARESET = "PORT_USED", + PORT_CLKBAD0 = "PORT_UNUSED", + PORT_CLKBAD1 = "PORT_UNUSED", + PORT_CLKLOSS = "PORT_UNUSED", + PORT_CLKSWITCH = "PORT_UNUSED", + PORT_CONFIGUPDATE = "PORT_USED", + PORT_FBIN = "PORT_UNUSED", + PORT_INCLK0 = "PORT_USED", + PORT_INCLK1 = "PORT_UNUSED", + PORT_LOCKED = "PORT_USED", + PORT_PFDENA = "PORT_UNUSED", + PORT_PHASECOUNTERSELECT = "PORT_UNUSED", + PORT_PHASEDONE = "PORT_UNUSED", + PORT_PHASESTEP = "PORT_UNUSED", + PORT_PHASEUPDOWN = "PORT_UNUSED", + PORT_PLLENA = "PORT_UNUSED", + PORT_SCANACLR = "PORT_UNUSED", + PORT_SCANCLK = "PORT_USED", + PORT_SCANCLKENA = "PORT_USED", + PORT_SCANDATA = "PORT_USED", + PORT_SCANDATAOUT = "PORT_USED", + PORT_SCANDONE = "PORT_USED", + PORT_SCANREAD = "PORT_UNUSED", + PORT_SCANWRITE = "PORT_UNUSED", + PORT_clk0 = "PORT_USED", + PORT_clk1 = "PORT_UNUSED", + PORT_clk2 = "PORT_UNUSED", + PORT_clk3 = "PORT_UNUSED", + PORT_clk4 = "PORT_UNUSED", + PORT_clk5 = "PORT_UNUSED", + PORT_clkena0 = "PORT_UNUSED", + PORT_clkena1 = "PORT_UNUSED", + PORT_clkena2 = "PORT_UNUSED", + PORT_clkena3 = "PORT_UNUSED", + PORT_clkena4 = "PORT_UNUSED", + PORT_clkena5 = "PORT_UNUSED", + PORT_extclk0 = "PORT_UNUSED", + PORT_extclk1 = "PORT_UNUSED", + PORT_extclk2 = "PORT_UNUSED", + PORT_extclk3 = "PORT_UNUSED", + SELF_RESET_ON_LOSS_LOCK = "OFF", + WIDTH_CLOCK = 5, + scan_chain_mif_file = "altpll4.mif" + ); + +BEGIN + + c0 = altpll_component.clk[0..0]; + scandone = altpll_component.scandone; + scandataout = altpll_component.scandataout; + locked = altpll_component.locked; + altpll_component.scanclkena = scanclkena; + altpll_component.inclk[0..0] = inclk0; + altpll_component.inclk[1..1] = GND; + altpll_component.scandata = scandata; + altpll_component.areset = areset; + altpll_component.scanclk = scanclk; + altpll_component.configupdate = configupdate; +END; + + + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACTIVECLK_CHECK STRING "0" +-- Retrieval info: PRIVATE: BANDWIDTH STRING "1.000" +-- Retrieval info: PRIVATE: BANDWIDTH_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_FREQ_UNIT STRING "MHz" +-- Retrieval info: PRIVATE: BANDWIDTH_PRESET STRING "Low" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_AUTO STRING "1" +-- Retrieval info: PRIVATE: BANDWIDTH_USE_PRESET STRING "0" +-- Retrieval info: PRIVATE: CLKBAD_SWITCHOVER_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKLOSS_CHECK STRING "0" +-- Retrieval info: PRIVATE: CLKSWITCH_CHECK STRING "0" +-- Retrieval info: PRIVATE: CNX_NO_COMPENSATE_RADIO STRING "0" +-- Retrieval info: PRIVATE: CREATE_CLKBAD_CHECK STRING "0" +-- Retrieval info: PRIVATE: CREATE_INCLK1_CHECK STRING "0" +-- Retrieval info: PRIVATE: CUR_DEDICATED_CLK STRING "c0" +-- Retrieval info: PRIVATE: CUR_FBIN_CLK STRING "e0" +-- Retrieval info: PRIVATE: DEVICE_SPEED_GRADE STRING "8" +-- Retrieval info: PRIVATE: DIV_FACTOR0 NUMERIC "1" +-- Retrieval info: PRIVATE: DUTY_CYCLE0 STRING "50.00000000" +-- Retrieval info: PRIVATE: EFF_OUTPUT_FREQ_VALUE0 STRING "96.000000" +-- Retrieval info: PRIVATE: EXPLICIT_SWITCHOVER_COUNTER STRING "0" +-- Retrieval info: PRIVATE: EXT_FEEDBACK_RADIO STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_COUNTER_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: GLOCKED_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: GLOCKED_MODE_CHECK STRING "0" +-- Retrieval info: PRIVATE: GLOCK_COUNTER_EDIT NUMERIC "1048575" +-- Retrieval info: PRIVATE: HAS_MANUAL_SWITCHOVER STRING "1" +-- Retrieval info: PRIVATE: INCLK0_FREQ_EDIT STRING "48.000" +-- Retrieval info: PRIVATE: INCLK0_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT STRING "100.000" +-- Retrieval info: PRIVATE: INCLK1_FREQ_EDIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_CHANGED STRING "1" +-- Retrieval info: PRIVATE: INCLK1_FREQ_UNIT_COMBO STRING "MHz" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: INT_FEEDBACK__MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: LOCKED_OUTPUT_CHECK STRING "1" +-- Retrieval info: PRIVATE: LONG_SCAN_RADIO STRING "1" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE STRING "336.000" +-- Retrieval info: PRIVATE: LVDS_MODE_DATA_RATE_DIRTY NUMERIC "0" +-- Retrieval info: PRIVATE: LVDS_PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: MIG_DEVICE_SPEED_GRADE STRING "Any" +-- Retrieval info: PRIVATE: MIRROR_CLK0 STRING "0" +-- Retrieval info: PRIVATE: MULT_FACTOR0 NUMERIC "2" +-- Retrieval info: PRIVATE: NORMAL_MODE_RADIO STRING "1" +-- Retrieval info: PRIVATE: OUTPUT_FREQ0 STRING "144.00000000" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_MODE0 STRING "0" +-- Retrieval info: PRIVATE: OUTPUT_FREQ_UNIT0 STRING "MHz" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: PHASE_RECONFIG_INPUTS_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT0 STRING "0.00000000" +-- Retrieval info: PRIVATE: PHASE_SHIFT_STEP_ENABLED_CHECK STRING "0" +-- Retrieval info: PRIVATE: PHASE_SHIFT_UNIT0 STRING "deg" +-- Retrieval info: PRIVATE: PLL_ADVANCED_PARAM_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_ARESET_CHECK STRING "1" +-- Retrieval info: PRIVATE: PLL_AUTOPLL_CHECK NUMERIC "1" +-- Retrieval info: PRIVATE: PLL_ENHPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FASTPLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_FBMIMIC_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_LVDS_PLL_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PLL_PFDENA_CHECK STRING "0" +-- Retrieval info: PRIVATE: PLL_TARGET_HARCOPY_CHECK NUMERIC "0" +-- Retrieval info: PRIVATE: PRIMARY_CLK_COMBO STRING "inclk0" +-- Retrieval info: PRIVATE: RECONFIG_FILE STRING "altpll4.mif" +-- Retrieval info: PRIVATE: SACN_INPUTS_CHECK STRING "1" +-- Retrieval info: PRIVATE: SCAN_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SELF_RESET_LOCK_LOSS STRING "0" +-- Retrieval info: PRIVATE: SHORT_SCAN_RADIO STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FEATURE_ENABLED STRING "0" +-- Retrieval info: PRIVATE: SPREAD_FREQ STRING "50.000" +-- Retrieval info: PRIVATE: SPREAD_FREQ_UNIT STRING "KHz" +-- Retrieval info: PRIVATE: SPREAD_PERCENT STRING "0.500" +-- Retrieval info: PRIVATE: SPREAD_USE STRING "0" +-- Retrieval info: PRIVATE: SRC_SYNCH_COMP_RADIO STRING "0" +-- Retrieval info: PRIVATE: STICKY_CLK0 STRING "1" +-- Retrieval info: PRIVATE: SWITCHOVER_COUNT_EDIT NUMERIC "1" +-- Retrieval info: PRIVATE: SWITCHOVER_FEATURE_ENABLED STRING "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_CLK0 STRING "1" +-- Retrieval info: PRIVATE: USE_CLKENA0 STRING "0" +-- Retrieval info: PRIVATE: USE_MIL_SPEED_GRADE NUMERIC "0" +-- Retrieval info: PRIVATE: ZERO_DELAY_RADIO STRING "0" +-- Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all +-- Retrieval info: CONSTANT: BANDWIDTH_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: CLK0_DIVIDE_BY NUMERIC "1" +-- Retrieval info: CONSTANT: CLK0_DUTY_CYCLE NUMERIC "50" +-- Retrieval info: CONSTANT: CLK0_MULTIPLY_BY NUMERIC "2" +-- Retrieval info: CONSTANT: CLK0_PHASE_SHIFT STRING "0" +-- Retrieval info: CONSTANT: COMPENSATE_CLOCK STRING "CLK0" +-- Retrieval info: CONSTANT: INCLK0_INPUT_FREQUENCY NUMERIC "20833" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "altpll" +-- Retrieval info: CONSTANT: OPERATION_MODE STRING "NORMAL" +-- Retrieval info: CONSTANT: PLL_TYPE STRING "AUTO" +-- Retrieval info: CONSTANT: PORT_ACTIVECLOCK STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_ARESET STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_CLKBAD0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKBAD1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKLOSS STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CLKSWITCH STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_CONFIGUPDATE STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_FBIN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_INCLK0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_INCLK1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_LOCKED STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_PFDENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASECOUNTERSELECT STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEDONE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASESTEP STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PHASEUPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_PLLENA STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANACLR STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANCLK STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_SCANCLKENA STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_SCANDATA STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_SCANDATAOUT STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_SCANDONE STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_SCANREAD STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_SCANWRITE STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk0 STRING "PORT_USED" +-- Retrieval info: CONSTANT: PORT_clk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clk5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena4 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_clkena5 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk0 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk1 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk2 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: PORT_extclk3 STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: SELF_RESET_ON_LOSS_LOCK STRING "OFF" +-- Retrieval info: CONSTANT: WIDTH_CLOCK NUMERIC "5" +-- Retrieval info: CONSTANT: scan_chain_mif_file STRING "altpll4.mif" +-- Retrieval info: USED_PORT: @clk 0 0 5 0 OUTPUT_CLK_EXT VCC "@clk[4..0]" +-- Retrieval info: USED_PORT: areset 0 0 0 0 INPUT GND "areset" +-- Retrieval info: USED_PORT: c0 0 0 0 0 OUTPUT_CLK_EXT VCC "c0" +-- Retrieval info: USED_PORT: configupdate 0 0 0 0 INPUT GND "configupdate" +-- Retrieval info: USED_PORT: inclk0 0 0 0 0 INPUT_CLK_EXT GND "inclk0" +-- Retrieval info: USED_PORT: locked 0 0 0 0 OUTPUT GND "locked" +-- Retrieval info: USED_PORT: scanclk 0 0 0 0 INPUT_CLK_EXT VCC "scanclk" +-- Retrieval info: USED_PORT: scanclkena 0 0 0 0 INPUT GND "scanclkena" +-- Retrieval info: USED_PORT: scandata 0 0 0 0 INPUT GND "scandata" +-- Retrieval info: USED_PORT: scandataout 0 0 0 0 OUTPUT VCC "scandataout" +-- Retrieval info: USED_PORT: scandone 0 0 0 0 OUTPUT VCC "scandone" +-- Retrieval info: CONNECT: locked 0 0 0 0 @locked 0 0 0 0 +-- Retrieval info: CONNECT: scandone 0 0 0 0 @scandone 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 0 inclk0 0 0 0 0 +-- Retrieval info: CONNECT: c0 0 0 0 0 @clk 0 0 1 0 +-- Retrieval info: CONNECT: @scandata 0 0 0 0 scandata 0 0 0 0 +-- Retrieval info: CONNECT: @scanclkena 0 0 0 0 scanclkena 0 0 0 0 +-- Retrieval info: CONNECT: @configupdate 0 0 0 0 configupdate 0 0 0 0 +-- Retrieval info: CONNECT: scandataout 0 0 0 0 @scandataout 0 0 0 0 +-- Retrieval info: CONNECT: @inclk 0 0 1 1 GND 0 0 0 0 +-- Retrieval info: CONNECT: @scanclk 0 0 0 0 scanclk 0 0 0 0 +-- Retrieval info: CONNECT: @areset 0 0 0 0 areset 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.tdf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.ppf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4_inst.tdf FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll4.mif TRUE +-- Retrieval info: LIB_FILE: altera_mf diff --git a/FPGA_quartus_GE/altpll_reconfig0.bsf b/FPGA_quartus_GE/altpll_reconfig0.bsf new file mode 100644 index 0000000..452f320 --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig0.bsf @@ -0,0 +1,162 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 216 296) + (text "altpll_reconfig0" (rect 54 1 182 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 277 31 292)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "reconfig" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "reconfig" (rect 20 32 65 48)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "read_param" (rect 0 0 80 16)(font "Arial" (font_size 8))) + (text "read_param" (rect 20 48 88 64)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "write_param" (rect 0 0 82 16)(font "Arial" (font_size 8))) + (text "write_param" (rect 20 64 90 80)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_in[8..0]" (rect 0 0 84 16)(font "Arial" (font_size 8))) + (text "data_in[8..0]" (rect 20 88 92 104)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "counter_type[3..0]" (rect 0 0 123 16)(font "Arial" (font_size 8))) + (text "counter_type[3..0]" (rect 20 104 125 120)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 16 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "counter_param[2..0]" (rect 0 0 136 16)(font "Arial" (font_size 8))) + (text "counter_param[2..0]" (rect 20 120 136 136)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 16 128)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "pll_scandataout" (rect 0 0 107 16)(font "Arial" (font_size 8))) + (text "pll_scandataout" (rect 20 160 111 176)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 16 168)(line_width 1)) + ) + (port + (pt 0 184) + (input) + (text "pll_scandone" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "pll_scandone" (rect 20 176 96 192)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 16 184)(line_width 1)) + ) + (port + (pt 0 208) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 20 200 51 216)(font "Arial" (font_size 8))) + (line (pt 0 208)(pt 16 208)(line_width 1)) + ) + (port + (pt 0 224) + (input) + (text "reset" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "reset" (rect 20 216 49 232)(font "Arial" (font_size 8))) + (line (pt 0 224)(pt 16 224)(line_width 1)) + ) + (port + (pt 0 248) + (input) + (text "pll_areset_in" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_areset_in" (rect 20 240 93 256)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 16 248)(line_width 1)) + ) + (port + (pt 216 40) + (output) + (text "busy" (rect 0 0 33 16)(font "Arial" (font_size 8))) + (text "busy" (rect 169 32 197 48)(font "Arial" (font_size 8))) + (line (pt 216 40)(pt 200 40)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "data_out[8..0]" (rect 0 0 94 16)(font "Arial" (font_size 8))) + (text "data_out[8..0]" (rect 117 88 197 104)(font "Arial" (font_size 8))) + (line (pt 216 96)(pt 200 96)(line_width 3)) + ) + (port + (pt 216 152) + (output) + (text "pll_scandata" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_scandata" (rect 124 144 197 160)(font "Arial" (font_size 8))) + (line (pt 216 152)(pt 200 152)(line_width 1)) + ) + (port + (pt 216 168) + (output) + (text "pll_scanclk" (rect 0 0 76 16)(font "Arial" (font_size 8))) + (text "pll_scanclk" (rect 132 160 197 176)(font "Arial" (font_size 8))) + (line (pt 216 168)(pt 200 168)(line_width 1)) + ) + (port + (pt 216 200) + (output) + (text "pll_scanclkena" (rect 0 0 101 16)(font "Arial" (font_size 8))) + (text "pll_scanclkena" (rect 111 192 197 208)(font "Arial" (font_size 8))) + (line (pt 216 200)(pt 200 200)(line_width 1)) + ) + (port + (pt 216 216) + (output) + (text "pll_configupdate" (rect 0 0 109 16)(font "Arial" (font_size 8))) + (text "pll_configupdate" (rect 104 208 197 224)(font "Arial" (font_size 8))) + (line (pt 216 216)(pt 200 216)(line_width 1)) + ) + (port + (pt 216 248) + (output) + (text "pll_areset" (rect 0 0 66 16)(font "Arial" (font_size 8))) + (text "pll_areset" (rect 141 240 197 256)(font "Arial" (font_size 8))) + (line (pt 216 248)(pt 200 248)(line_width 1)) + ) + (drawing + (line (pt 0 0)(pt 217 0)(line_width 1)) + (line (pt 217 0)(pt 217 297)(line_width 1)) + (line (pt 0 297)(pt 217 297)(line_width 1)) + (line (pt 0 0)(pt 0 297)(line_width 1)) + (line (pt 16 24)(pt 201 24)(line_width 1)) + (line (pt 201 24)(pt 201 273)(line_width 1)) + (line (pt 16 273)(pt 201 273)(line_width 1)) + (line (pt 16 24)(pt 16 273)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll_reconfig0.qip b/FPGA_quartus_GE/altpll_reconfig0.qip new file mode 100644 index 0000000..3194459 --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL_RECONFIG" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig0.tdf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig0.cmp"] diff --git a/FPGA_quartus_GE/altpll_reconfig1.bsf b/FPGA_quartus_GE/altpll_reconfig1.bsf new file mode 100644 index 0000000..f896607 --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1.bsf @@ -0,0 +1,162 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 216 296) + (text "altpll_reconfig1" (rect 54 1 182 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 277 31 292)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "reconfig" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "reconfig" (rect 20 32 65 48)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "read_param" (rect 0 0 80 16)(font "Arial" (font_size 8))) + (text "read_param" (rect 20 48 88 64)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "write_param" (rect 0 0 82 16)(font "Arial" (font_size 8))) + (text "write_param" (rect 20 64 90 80)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_in[8..0]" (rect 0 0 84 16)(font "Arial" (font_size 8))) + (text "data_in[8..0]" (rect 20 88 92 104)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "counter_type[3..0]" (rect 0 0 123 16)(font "Arial" (font_size 8))) + (text "counter_type[3..0]" (rect 20 104 125 120)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 16 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "counter_param[2..0]" (rect 0 0 136 16)(font "Arial" (font_size 8))) + (text "counter_param[2..0]" (rect 20 120 136 136)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 16 128)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "pll_scandataout" (rect 0 0 107 16)(font "Arial" (font_size 8))) + (text "pll_scandataout" (rect 20 160 111 176)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 16 168)(line_width 1)) + ) + (port + (pt 0 184) + (input) + (text "pll_scandone" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "pll_scandone" (rect 20 176 96 192)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 16 184)(line_width 1)) + ) + (port + (pt 0 208) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 20 200 51 216)(font "Arial" (font_size 8))) + (line (pt 0 208)(pt 16 208)(line_width 1)) + ) + (port + (pt 0 224) + (input) + (text "reset" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "reset" (rect 20 216 49 232)(font "Arial" (font_size 8))) + (line (pt 0 224)(pt 16 224)(line_width 1)) + ) + (port + (pt 0 248) + (input) + (text "pll_areset_in" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_areset_in" (rect 20 240 93 256)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 16 248)(line_width 1)) + ) + (port + (pt 216 40) + (output) + (text "busy" (rect 0 0 33 16)(font "Arial" (font_size 8))) + (text "busy" (rect 169 32 197 48)(font "Arial" (font_size 8))) + (line (pt 216 40)(pt 200 40)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "data_out[8..0]" (rect 0 0 94 16)(font "Arial" (font_size 8))) + (text "data_out[8..0]" (rect 117 88 197 104)(font "Arial" (font_size 8))) + (line (pt 216 96)(pt 200 96)(line_width 3)) + ) + (port + (pt 216 152) + (output) + (text "pll_scandata" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_scandata" (rect 124 144 197 160)(font "Arial" (font_size 8))) + (line (pt 216 152)(pt 200 152)(line_width 1)) + ) + (port + (pt 216 168) + (output) + (text "pll_scanclk" (rect 0 0 76 16)(font "Arial" (font_size 8))) + (text "pll_scanclk" (rect 132 160 197 176)(font "Arial" (font_size 8))) + (line (pt 216 168)(pt 200 168)(line_width 1)) + ) + (port + (pt 216 200) + (output) + (text "pll_scanclkena" (rect 0 0 101 16)(font "Arial" (font_size 8))) + (text "pll_scanclkena" (rect 111 192 197 208)(font "Arial" (font_size 8))) + (line (pt 216 200)(pt 200 200)(line_width 1)) + ) + (port + (pt 216 216) + (output) + (text "pll_configupdate" (rect 0 0 109 16)(font "Arial" (font_size 8))) + (text "pll_configupdate" (rect 104 208 197 224)(font "Arial" (font_size 8))) + (line (pt 216 216)(pt 200 216)(line_width 1)) + ) + (port + (pt 216 248) + (output) + (text "pll_areset" (rect 0 0 66 16)(font "Arial" (font_size 8))) + (text "pll_areset" (rect 141 240 197 256)(font "Arial" (font_size 8))) + (line (pt 216 248)(pt 200 248)(line_width 1)) + ) + (drawing + (line (pt 0 0)(pt 217 0)(line_width 1)) + (line (pt 217 0)(pt 217 297)(line_width 1)) + (line (pt 0 297)(pt 217 297)(line_width 1)) + (line (pt 0 0)(pt 0 297)(line_width 1)) + (line (pt 16 24)(pt 201 24)(line_width 1)) + (line (pt 201 24)(pt 201 273)(line_width 1)) + (line (pt 16 273)(pt 201 273)(line_width 1)) + (line (pt 16 24)(pt 16 273)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/altpll_reconfig1.inc b/FPGA_quartus_GE/altpll_reconfig1.inc new file mode 100644 index 0000000..c1a6e65 --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1.inc @@ -0,0 +1,39 @@ +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION altpll_reconfig1 +( + clock, + counter_param[2..0], + counter_type[3..0], + data_in[8..0], + pll_areset_in, + pll_scandataout, + pll_scandone, + read_param, + reconfig, + reset, + write_param +) + +RETURNS ( + busy, + data_out[8..0], + pll_areset, + pll_configupdate, + pll_scanclk, + pll_scanclkena, + pll_scandata +); diff --git a/FPGA_quartus_GE/altpll_reconfig1.qip b/FPGA_quartus_GE/altpll_reconfig1.qip new file mode 100644 index 0000000..713a3c3 --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "ALTPLL_RECONFIG" +set_global_assignment -name IP_TOOL_VERSION "9.1" +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig1.tdf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig1.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig1.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "altpll_reconfig1.cmp"] diff --git a/FPGA_quartus_GE/altpll_reconfig1.tdf b/FPGA_quartus_GE/altpll_reconfig1.tdf new file mode 100644 index 0000000..82ad4ff --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1.tdf @@ -0,0 +1,144 @@ +-- megafunction wizard: %ALTPLL_RECONFIG% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: altpll_reconfig + +-- ============================================================ +-- File Name: altpll_reconfig1.tdf +-- Megafunction Name(s): +-- altpll_reconfig +-- +-- Simulation Library Files(s): +-- altera_mf;cycloneiii;lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 9.1 Build 350 03/24/2010 SP 2 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2010 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + +-- Clearbox generated function header +FUNCTION altpll_reconfig1_pllrcfg_t4q (clock, counter_param[2..0], counter_type[3..0], data_in[8..0], pll_areset_in, pll_scandataout, pll_scandone, read_param, reconfig, reset, write_param) +RETURNS ( busy, data_out[8..0], pll_areset, pll_configupdate, pll_scanclk, pll_scanclkena, pll_scandata); + + + + +SUBDESIGN altpll_reconfig1 +( + clock : INPUT; + counter_param[2..0] : INPUT; + counter_type[3..0] : INPUT; + data_in[8..0] : INPUT; + pll_areset_in : INPUT = GND; + pll_scandataout : INPUT; + pll_scandone : INPUT; + read_param : INPUT; + reconfig : INPUT; + reset : INPUT; + write_param : INPUT; + busy : OUTPUT; + data_out[8..0] : OUTPUT; + pll_areset : OUTPUT; + pll_configupdate : OUTPUT; + pll_scanclk : OUTPUT; + pll_scanclkena : OUTPUT; + pll_scandata : OUTPUT; +) + +VARIABLE + + altpll_reconfig1_pllrcfg_t4q_component : altpll_reconfig1_pllrcfg_t4q; + +BEGIN + + pll_areset = altpll_reconfig1_pllrcfg_t4q_component.pll_areset; + pll_scanclkena = altpll_reconfig1_pllrcfg_t4q_component.pll_scanclkena; + pll_scanclk = altpll_reconfig1_pllrcfg_t4q_component.pll_scanclk; + busy = altpll_reconfig1_pllrcfg_t4q_component.busy; + data_out[8..0] = altpll_reconfig1_pllrcfg_t4q_component.data_out[8..0]; + pll_scandata = altpll_reconfig1_pllrcfg_t4q_component.pll_scandata; + pll_configupdate = altpll_reconfig1_pllrcfg_t4q_component.pll_configupdate; + altpll_reconfig1_pllrcfg_t4q_component.reconfig = reconfig; + altpll_reconfig1_pllrcfg_t4q_component.counter_type[3..0] = counter_type[3..0]; + altpll_reconfig1_pllrcfg_t4q_component.pll_scandone = pll_scandone; + altpll_reconfig1_pllrcfg_t4q_component.pll_scandataout = pll_scandataout; + altpll_reconfig1_pllrcfg_t4q_component.pll_areset_in = pll_areset_in; + altpll_reconfig1_pllrcfg_t4q_component.read_param = read_param; + altpll_reconfig1_pllrcfg_t4q_component.reset = reset; + altpll_reconfig1_pllrcfg_t4q_component.data_in[8..0] = data_in[8..0]; + altpll_reconfig1_pllrcfg_t4q_component.clock = clock; + altpll_reconfig1_pllrcfg_t4q_component.counter_param[2..0] = counter_param[2..0]; + altpll_reconfig1_pllrcfg_t4q_component.write_param = write_param; +END; + + + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: CHAIN_TYPE NUMERIC "0" +-- Retrieval info: PRIVATE: INIT_FILE_NAME STRING "./altpll4.mif" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: USE_INIT_FILE STRING "0" +-- Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: USED_PORT: busy 0 0 0 0 OUTPUT NODEFVAL "busy" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL "clock" +-- Retrieval info: USED_PORT: counter_param 0 0 3 0 INPUT NODEFVAL "counter_param[2..0]" +-- Retrieval info: USED_PORT: counter_type 0 0 4 0 INPUT NODEFVAL "counter_type[3..0]" +-- Retrieval info: USED_PORT: data_in 0 0 9 0 INPUT NODEFVAL "data_in[8..0]" +-- Retrieval info: USED_PORT: data_out 0 0 9 0 OUTPUT NODEFVAL "data_out[8..0]" +-- Retrieval info: USED_PORT: pll_areset 0 0 0 0 OUTPUT NODEFVAL "pll_areset" +-- Retrieval info: USED_PORT: pll_areset_in 0 0 0 0 INPUT GND "pll_areset_in" +-- Retrieval info: USED_PORT: pll_configupdate 0 0 0 0 OUTPUT NODEFVAL "pll_configupdate" +-- Retrieval info: USED_PORT: pll_scanclk 0 0 0 0 OUTPUT NODEFVAL "pll_scanclk" +-- Retrieval info: USED_PORT: pll_scanclkena 0 0 0 0 OUTPUT NODEFVAL "pll_scanclkena" +-- Retrieval info: USED_PORT: pll_scandata 0 0 0 0 OUTPUT NODEFVAL "pll_scandata" +-- Retrieval info: USED_PORT: pll_scandataout 0 0 0 0 INPUT NODEFVAL "pll_scandataout" +-- Retrieval info: USED_PORT: pll_scandone 0 0 0 0 INPUT NODEFVAL "pll_scandone" +-- Retrieval info: USED_PORT: read_param 0 0 0 0 INPUT NODEFVAL "read_param" +-- Retrieval info: USED_PORT: reconfig 0 0 0 0 INPUT NODEFVAL "reconfig" +-- Retrieval info: USED_PORT: reset 0 0 0 0 INPUT NODEFVAL "reset" +-- Retrieval info: USED_PORT: write_param 0 0 0 0 INPUT NODEFVAL "write_param" +-- Retrieval info: CONNECT: @data_in 0 0 9 0 data_in 0 0 9 0 +-- Retrieval info: CONNECT: @reset 0 0 0 0 reset 0 0 0 0 +-- Retrieval info: CONNECT: @pll_scandone 0 0 0 0 pll_scandone 0 0 0 0 +-- Retrieval info: CONNECT: @read_param 0 0 0 0 read_param 0 0 0 0 +-- Retrieval info: CONNECT: @counter_type 0 0 4 0 counter_type 0 0 4 0 +-- Retrieval info: CONNECT: @pll_areset_in 0 0 0 0 pll_areset_in 0 0 0 0 +-- Retrieval info: CONNECT: @pll_scandataout 0 0 0 0 pll_scandataout 0 0 0 0 +-- Retrieval info: CONNECT: @write_param 0 0 0 0 write_param 0 0 0 0 +-- Retrieval info: CONNECT: pll_areset 0 0 0 0 @pll_areset 0 0 0 0 +-- Retrieval info: CONNECT: pll_configupdate 0 0 0 0 @pll_configupdate 0 0 0 0 +-- Retrieval info: CONNECT: data_out 0 0 9 0 @data_out 0 0 9 0 +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: pll_scanclkena 0 0 0 0 @pll_scanclkena 0 0 0 0 +-- Retrieval info: CONNECT: busy 0 0 0 0 @busy 0 0 0 0 +-- Retrieval info: CONNECT: @counter_param 0 0 3 0 counter_param 0 0 3 0 +-- Retrieval info: CONNECT: @reconfig 0 0 0 0 reconfig 0 0 0 0 +-- Retrieval info: CONNECT: pll_scandata 0 0 0 0 @pll_scandata 0 0 0 0 +-- Retrieval info: CONNECT: pll_scanclk 0 0 0 0 @pll_scanclk 0 0 0 0 +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll_reconfig1.tdf TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll_reconfig1.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll_reconfig1.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll_reconfig1.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL altpll_reconfig1_inst.tdf FALSE +-- Retrieval info: LIB_FILE: altera_mf +-- Retrieval info: LIB_FILE: cycloneiii +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_bju.tdf b/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_bju.tdf new file mode 100644 index 0000000..81695ae --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_bju.tdf @@ -0,0 +1,583 @@ +--altpll_reconfig CBX_AUTO_BLACKBOX="ALL" device_family="Cyclone III" init_from_rom="NO" scan_init_file="./altpll4.mif" busy clock counter_param counter_type data_in data_out pll_areset pll_areset_in pll_configupdate pll_scanclk pll_scanclkena pll_scandata pll_scandataout pll_scandone read_param reconfig reset write_param +--VERSION_BEGIN 9.1SP2 cbx_altpll_reconfig 2010:03:24:20:43:42:SJ cbx_altsyncram 2010:03:24:20:43:42:SJ cbx_cycloneii 2010:03:24:20:43:43:SJ cbx_lpm_add_sub 2010:03:24:20:43:43:SJ cbx_lpm_compare 2010:03:24:20:43:43:SJ cbx_lpm_counter 2010:03:24:20:43:43:SJ cbx_lpm_decode 2010:03:24:20:43:43:SJ cbx_lpm_mux 2010:03:24:20:43:43:SJ cbx_mgl 2010:03:24:21:01:05:SJ cbx_stratix 2010:03:24:20:43:43:SJ cbx_stratixii 2010:03:24:20:43:43:SJ cbx_stratixiii 2010:03:24:20:43:43:SJ cbx_util_mgl 2010:03:24:20:43:43:SJ VERSION_END + + +-- Copyright (C) 1991-2010 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +include "altsyncram.inc"; +FUNCTION cycloneiii_lcell_comb (cin, dataa, datab, datac, datad) +WITH ( DONT_TOUCH, LUT_MASK, SUM_LUTC_INPUT) +RETURNS ( combout, cout); +FUNCTION lpm_add_sub (aclr, add_sub, cin, clken, clock, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0]) +WITH ( CARRY_CHAIN, CARRY_CHAIN_LENGTH, LPM_DIRECTION, LPM_PIPELINE, LPM_REPRESENTATION, LPM_WIDTH, ONE_INPUT_IS_CONSTANT, REGISTERED_AT_END, USE_WYS) +RETURNS ( cout, overflow, result[LPM_WIDTH-1..0]); +FUNCTION lpm_compare (aclr, clken, clock, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0]) +WITH ( LPM_PIPELINE, LPM_REPRESENTATION, LPM_WIDTH, ONE_INPUT_IS_CONSTANT) +RETURNS ( aeb, agb, ageb, alb, aleb, aneb); +FUNCTION lpm_counter (aclr, aload, aset, cin, clk_en, clock, cnt_en, data[LPM_WIDTH-1..0], sclr, sload, sset, updown) +WITH ( lpm_avalue, lpm_direction, lpm_modulus, lpm_port_updown, lpm_pvalue, lpm_svalue, lpm_width) +RETURNS ( cout, eq[15..0], q[LPM_WIDTH-1..0]); +FUNCTION lpm_decode (aclr, clken, clock, data[LPM_WIDTH-1..0], enable) +WITH ( CASCADE_CHAIN, IGNORE_CASCADE_BUFFERS, LPM_DECODES, LPM_PIPELINE, LPM_WIDTH) +RETURNS ( eq[LPM_DECODES-1..0]); + +--synthesis_resources = altsyncram 1 lpm_add_sub 2 lpm_compare 1 lpm_counter 7 lpm_decode 1 lut 3 reg 80 +OPTIONS ALTERA_INTERNAL_OPTION = "ADV_NETLIST_OPT_ALLOWED=""NEVER_ALLOW"";suppress_da_rule_internal=C106;{-to le_comb10} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=2;{-to le_comb8} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=0;{-to le_comb9} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=1;{-to idle_state} POWER_UP_LEVEL=LOW;{-to read_data_nominal_state} POWER_UP_LEVEL=LOW;{-to read_data_state} POWER_UP_LEVEL=LOW;{-to read_first_nominal_state} POWER_UP_LEVEL=LOW;{-to read_first_state} POWER_UP_LEVEL=LOW;{-to read_init_nominal_state} POWER_UP_LEVEL=LOW;{-to read_init_state} POWER_UP_LEVEL=LOW;{-to read_last_nominal_state} POWER_UP_LEVEL=LOW;{-to read_last_state} POWER_UP_LEVEL=LOW;{-to reconfig_counter_state} POWER_UP_LEVEL=LOW;{-to reconfig_init_state} POWER_UP_LEVEL=LOW;{-to reconfig_post_state} POWER_UP_LEVEL=LOW;{-to reconfig_seq_data_state} POWER_UP_LEVEL=LOW;{-to reconfig_seq_ena_state} POWER_UP_LEVEL=LOW;{-to reconfig_wait_state} POWER_UP_LEVEL=LOW;{-to reset_state} POWER_UP_LEVEL=HIGH;{-to write_data_state} POWER_UP_LEVEL=LOW;{-to write_init_nominal_state} POWER_UP_LEVEL=LOW;{-to write_init_state} POWER_UP_LEVEL=LOW;{-to write_nominal_state} POWER_UP_LEVEL=LOW"; + +SUBDESIGN altpll_reconfig1_pllrcfg_bju +( + busy : output; + clock : input; + counter_param[2..0] : input; + counter_type[3..0] : input; + data_in[8..0] : input; + data_out[8..0] : output; + pll_areset : output; + pll_areset_in : input; + pll_configupdate : output; + pll_scanclk : output; + pll_scanclkena : output; + pll_scandata : output; + pll_scandataout : input; + pll_scandone : input; + read_param : input; + reconfig : input; + reset : input; + write_param : input; +) +VARIABLE + altsyncram4 : altsyncram + WITH ( + INIT_FILE = "./altpll4.mif", + NUMWORDS_A = 144, + OPERATION_MODE = "SINGLE_PORT", + WIDTH_A = 1, + WIDTH_BYTEENA_A = 1, + WIDTHAD_A = 8 + ); + le_comb10 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "F0F0", + SUM_LUTC_INPUT = "datac" + ); + le_comb8 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "AAAA", + SUM_LUTC_INPUT = "datac" + ); + le_comb9 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "CCCC", + SUM_LUTC_INPUT = "datac" + ); + areset_init_state_1 : dffe; + areset_state : dffe; + C0_data_state : dffe; + C0_ena_state : dffe; + C1_data_state : dffe; + C1_ena_state : dffe; + C2_data_state : dffe; + C2_ena_state : dffe; + C3_data_state : dffe; + C3_ena_state : dffe; + C4_data_state : dffe; + C4_ena_state : dffe; + configupdate2_state : dffe; + configupdate3_state : dffe; + configupdate_state : dffe; + counter_param_latch_reg[2..0] : dffe; + counter_type_latch_reg[3..0] : dffe; + idle_state : dffe + WITH ( + power_up = "low" + ); + nominal_data[17..0] : dffe; + read_data_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_data_state : dffe + WITH ( + power_up = "low" + ); + read_first_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_first_state : dffe + WITH ( + power_up = "low" + ); + read_init_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_init_state : dffe + WITH ( + power_up = "low" + ); + read_last_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_last_state : dffe + WITH ( + power_up = "low" + ); + reconfig_counter_state : dffe + WITH ( + power_up = "low" + ); + reconfig_init_state : dffe + WITH ( + power_up = "low" + ); + reconfig_post_state : dffe + WITH ( + power_up = "low" + ); + reconfig_seq_data_state : dffe + WITH ( + power_up = "low" + ); + reconfig_seq_ena_state : dffe + WITH ( + power_up = "low" + ); + reconfig_wait_state : dffe + WITH ( + power_up = "low" + ); + reset_state : dffe + WITH ( + power_up = "high" + ); + shift_reg[17..0] : dffeas; + tmp_nominal_data_out_state : dffe; + tmp_seq_ena_state : dffe; + write_data_state : dffe + WITH ( + power_up = "low" + ); + write_init_nominal_state : dffe + WITH ( + power_up = "low" + ); + write_init_state : dffe + WITH ( + power_up = "low" + ); + write_nominal_state : dffe + WITH ( + power_up = "low" + ); + add_sub5 : lpm_add_sub + WITH ( + LPM_WIDTH = 9 + ); + add_sub6 : lpm_add_sub + WITH ( + LPM_WIDTH = 8 + ); + cmpr7 : lpm_compare + WITH ( + LPM_WIDTH = 8 + ); + cntr1 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr12 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr13 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 6 + ); + cntr14 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 5 + ); + cntr15 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr2 : lpm_counter + WITH ( + lpm_direction = "UP", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr3 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 5 + ); + decode11 : lpm_decode + WITH ( + LPM_DECODES = 5, + LPM_WIDTH = 3 + ); + addr_counter_enable : WIRE; + addr_counter_out[7..0] : WIRE; + addr_counter_sload : WIRE; + addr_counter_sload_value[7..0] : WIRE; + addr_decoder_out[7..0] : WIRE; + c0_wire[7..0] : WIRE; + c1_wire[7..0] : WIRE; + c2_wire[7..0] : WIRE; + c3_wire[7..0] : WIRE; + c4_wire[7..0] : WIRE; + counter_param_latch[2..0] : WIRE; + counter_type_latch[3..0] : WIRE; + cuda_combout_wire[2..0] : WIRE; + dummy_scandataout : WIRE; + encode_out[2..0] : WIRE; + input_latch_enable : WIRE; + power_up : WIRE; + read_addr_counter_enable : WIRE; + read_addr_counter_out[7..0] : WIRE; + read_addr_counter_sload : WIRE; + read_addr_counter_sload_value[7..0] : WIRE; + read_addr_decoder_out[7..0] : WIRE; + read_nominal_out : WIRE; + reconfig_addr_counter_enable : WIRE; + reconfig_addr_counter_out[7..0] : WIRE; + reconfig_addr_counter_sload : WIRE; + reconfig_addr_counter_sload_value[7..0] : WIRE; + reconfig_done : WIRE; + reconfig_post_done : WIRE; + reconfig_width_counter_done : WIRE; + reconfig_width_counter_enable : WIRE; + reconfig_width_counter_sload : WIRE; + reconfig_width_counter_sload_value[5..0] : WIRE; + rotate_addr_counter_enable : WIRE; + rotate_addr_counter_out[7..0] : WIRE; + rotate_addr_counter_sload : WIRE; + rotate_addr_counter_sload_value[7..0] : WIRE; + rotate_decoder_wires[4..0] : WIRE; + rotate_width_counter_done : WIRE; + rotate_width_counter_enable : WIRE; + rotate_width_counter_sload : WIRE; + rotate_width_counter_sload_value[4..0] : WIRE; + scan_cache_address[7..0] : WIRE; + scan_cache_in : WIRE; + scan_cache_out : WIRE; + scan_cache_write_enable : WIRE; + sel_param_bypass_LF_unused : WIRE; + sel_param_c : WIRE; + sel_param_high_i_postscale : WIRE; + sel_param_low_r : WIRE; + sel_param_nominal_count : WIRE; + sel_param_odd_CP_unused : WIRE; + sel_type_c0 : WIRE; + sel_type_c1 : WIRE; + sel_type_c2 : WIRE; + sel_type_c3 : WIRE; + sel_type_c4 : WIRE; + sel_type_cplf : WIRE; + sel_type_m : WIRE; + sel_type_n : WIRE; + sel_type_vco : WIRE; + seq_addr_wire[7..0] : WIRE; + seq_sload_value[5..0] : WIRE; + shift_reg_clear : WIRE; + shift_reg_load_enable : WIRE; + shift_reg_load_nominal_enable : WIRE; + shift_reg_serial_in : WIRE; + shift_reg_serial_out : WIRE; + shift_reg_shift_enable : WIRE; + shift_reg_shift_nominal_enable : WIRE; + shift_reg_width_select[7..0] : WIRE; + w1565w : WIRE; + w1592w : WIRE; + w64w : WIRE; + width_counter_done : WIRE; + width_counter_enable : WIRE; + width_counter_sload : WIRE; + width_counter_sload_value[4..0] : WIRE; + width_decoder_out[4..0] : WIRE; + width_decoder_select[7..0] : WIRE; + write_from_rom : NODE; + +BEGIN + altsyncram4.address_a[] = scan_cache_address[]; + altsyncram4.clock0 = clock; + altsyncram4.data_a[] = ( scan_cache_in); + altsyncram4.wren_a = scan_cache_write_enable; + le_comb10.dataa = encode_out[0..0]; + le_comb10.datab = encode_out[1..1]; + le_comb10.datac = encode_out[2..2]; + le_comb8.dataa = encode_out[0..0]; + le_comb8.datab = encode_out[1..1]; + le_comb8.datac = encode_out[2..2]; + le_comb9.dataa = encode_out[0..0]; + le_comb9.datab = encode_out[1..1]; + le_comb9.datac = encode_out[2..2]; + areset_init_state_1.clk = clock; + areset_init_state_1.d = pll_scandone; + areset_state.clk = clock; + areset_state.d = (areset_init_state_1.q & (! reset)); + C0_data_state.clk = clock; + C0_data_state.d = (C0_ena_state.q # (C0_data_state.q & (! rotate_width_counter_done))); + C0_ena_state.clk = clock; + C0_ena_state.d = (C1_data_state.q & rotate_width_counter_done); + C1_data_state.clk = clock; + C1_data_state.d = (C1_ena_state.q # (C1_data_state.q & (! rotate_width_counter_done))); + C1_ena_state.clk = clock; + C1_ena_state.d = (C2_data_state.q & rotate_width_counter_done); + C2_data_state.clk = clock; + C2_data_state.d = (C2_ena_state.q # (C2_data_state.q & (! rotate_width_counter_done))); + C2_ena_state.clk = clock; + C2_ena_state.d = (C3_data_state.q & rotate_width_counter_done); + C3_data_state.clk = clock; + C3_data_state.d = (C3_ena_state.q # (C3_data_state.q & (! rotate_width_counter_done))); + C3_ena_state.clk = clock; + C3_ena_state.d = (C4_data_state.q & rotate_width_counter_done); + C4_data_state.clk = clock; + C4_data_state.d = (C4_ena_state.q # (C4_data_state.q & (! rotate_width_counter_done))); + C4_ena_state.clk = clock; + C4_ena_state.d = reconfig_init_state.q; + configupdate2_state.clk = clock; + configupdate2_state.d = configupdate_state.q; + configupdate3_state.clk = (! clock); + configupdate3_state.d = configupdate2_state.q; + configupdate_state.clk = clock; + configupdate_state.d = reconfig_post_state.q; + counter_param_latch_reg[].clk = clock; + counter_param_latch_reg[].clrn = (! reset); + counter_param_latch_reg[].d = counter_param[]; + counter_param_latch_reg[].ena = input_latch_enable; + counter_type_latch_reg[].clk = clock; + counter_type_latch_reg[].clrn = (! reset); + counter_type_latch_reg[].d = counter_type[]; + counter_type_latch_reg[].ena = input_latch_enable; + idle_state.clk = clock; + idle_state.clrn = (! reset); + idle_state.d = ((((((((((idle_state.q & (! read_param)) & (! write_param)) & (! reconfig)) & (! write_from_rom)) # read_last_state.q) # (write_data_state.q & width_counter_done)) # (write_nominal_state.q & width_counter_done)) # read_last_nominal_state.q) # (reconfig_wait_state.q & reconfig_done)) # reset_state.q); + nominal_data[].clk = clock; + nominal_data[].clrn = (! reset); + nominal_data[].d = ( cmpr7.aeb, data_in[8..0], add_sub6.result[7..0]); + read_data_nominal_state.clk = clock; + read_data_nominal_state.clrn = (! reset); + read_data_nominal_state.d = ((read_first_nominal_state.q & (! width_counter_done)) # (read_data_nominal_state.q & (! width_counter_done))); + read_data_state.clk = clock; + read_data_state.clrn = (! reset); + read_data_state.d = ((read_first_state.q & (! width_counter_done)) # (read_data_state.q & (! width_counter_done))); + read_first_nominal_state.clk = clock; + read_first_nominal_state.clrn = (! reset); + read_first_nominal_state.d = read_init_nominal_state.q; + read_first_state.clk = clock; + read_first_state.clrn = (! reset); + read_first_state.d = read_init_state.q; + read_init_nominal_state.clk = clock; + read_init_nominal_state.clrn = (! reset); + read_init_nominal_state.d = ((idle_state.q & read_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + read_init_state.clk = clock; + read_init_state.clrn = (! reset); + read_init_state.d = ((idle_state.q & read_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + read_last_nominal_state.clk = clock; + read_last_nominal_state.clrn = (! reset); + read_last_nominal_state.d = ((read_first_nominal_state.q & width_counter_done) # (read_data_nominal_state.q & width_counter_done)); + read_last_state.clk = clock; + read_last_state.clrn = (! reset); + read_last_state.d = ((read_first_state.q & width_counter_done) # (read_data_state.q & width_counter_done)); + reconfig_counter_state.clk = clock; + reconfig_counter_state.clrn = (! reset); + reconfig_counter_state.d = ((((((((((reconfig_init_state.q # C0_data_state.q) # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q) # C0_ena_state.q) # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + reconfig_init_state.clk = clock; + reconfig_init_state.clrn = (! reset); + reconfig_init_state.d = (idle_state.q & reconfig); + reconfig_post_state.clk = clock; + reconfig_post_state.clrn = (! reset); + reconfig_post_state.d = ((reconfig_seq_data_state.q & reconfig_width_counter_done) # (reconfig_post_state.q & (! reconfig_post_done))); + reconfig_seq_data_state.clk = clock; + reconfig_seq_data_state.clrn = (! reset); + reconfig_seq_data_state.d = (reconfig_seq_ena_state.q # (reconfig_seq_data_state.q & (! reconfig_width_counter_done))); + reconfig_seq_ena_state.clk = clock; + reconfig_seq_ena_state.clrn = (! reset); + reconfig_seq_ena_state.d = tmp_seq_ena_state.q; + reconfig_wait_state.clk = clock; + reconfig_wait_state.clrn = (! reset); + reconfig_wait_state.d = ((reconfig_post_state.q & reconfig_post_done) # (reconfig_wait_state.q & (! reconfig_done))); + reset_state.clk = clock; + reset_state.d = power_up; + reset_state.prn = (! reset); + shift_reg[].clk = clock; + shift_reg[].clrn = (! reset); + shift_reg[].d = ( ((((shift_reg_load_nominal_enable & nominal_data[0].q) # (shift_reg_load_enable & data_in[0..0])) # (shift_reg_shift_enable & shift_reg[16].q)) # (shift_reg_shift_nominal_enable & shift_reg[16].q)), ((((shift_reg_load_nominal_enable & nominal_data[1].q) # (shift_reg_load_enable & data_in[1..1])) # (shift_reg_shift_enable & shift_reg[15].q)) # (shift_reg_shift_nominal_enable & shift_reg[15].q)), ((((shift_reg_load_nominal_enable & nominal_data[2].q) # (shift_reg_load_enable & data_in[2..2])) # (shift_reg_shift_enable & shift_reg[14].q)) # (shift_reg_shift_nominal_enable & shift_reg[14].q)), ((((shift_reg_load_nominal_enable & nominal_data[3].q) # (shift_reg_load_enable & data_in[3..3])) # (shift_reg_shift_enable & shift_reg[13].q)) # (shift_reg_shift_nominal_enable & shift_reg[13].q)), ((((shift_reg_load_nominal_enable & nominal_data[4].q) # (shift_reg_load_enable & data_in[4..4])) # (shift_reg_shift_enable & shift_reg[12].q)) # (shift_reg_shift_nominal_enable & shift_reg[12].q)), ((((shift_reg_load_nominal_enable & nominal_data[5].q) # (shift_reg_load_enable & data_in[5..5])) # (shift_reg_shift_enable & shift_reg[11].q)) # (shift_reg_shift_nominal_enable & shift_reg[11].q)), ((((shift_reg_load_nominal_enable & nominal_data[6].q) # (shift_reg_load_enable & data_in[6..6])) # (shift_reg_shift_enable & shift_reg[10].q)) # (shift_reg_shift_nominal_enable & shift_reg[10].q)), ((((shift_reg_load_nominal_enable & nominal_data[7].q) # (shift_reg_load_enable & data_in[7..7])) # (shift_reg_shift_enable & shift_reg[9].q)) # (shift_reg_shift_nominal_enable & shift_reg[9].q)), ((((shift_reg_load_nominal_enable & nominal_data[8].q) # (shift_reg_load_enable & data_in[8..8])) # (shift_reg_shift_enable & shift_reg[8].q)) # (shift_reg_shift_nominal_enable & shift_reg[8].q)), ((((shift_reg_load_nominal_enable & nominal_data[9].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[7].q)) # (shift_reg_shift_nominal_enable & shift_reg[7].q)), ((((shift_reg_load_nominal_enable & nominal_data[10].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[6].q)) # (shift_reg_shift_nominal_enable & shift_reg[6].q)), ((((shift_reg_load_nominal_enable & nominal_data[11].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[5].q)) # (shift_reg_shift_nominal_enable & shift_reg[5].q)), ((((shift_reg_load_nominal_enable & nominal_data[12].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[4].q)) # (shift_reg_shift_nominal_enable & shift_reg[4].q)), ((((shift_reg_load_nominal_enable & nominal_data[13].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[3].q)) # (shift_reg_shift_nominal_enable & shift_reg[3].q)), ((((shift_reg_load_nominal_enable & nominal_data[14].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[2].q)) # (shift_reg_shift_nominal_enable & shift_reg[2].q)), ((((shift_reg_load_nominal_enable & nominal_data[15].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[1].q)) # (shift_reg_shift_nominal_enable & shift_reg[1].q)), ((((shift_reg_load_nominal_enable & nominal_data[16].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[0].q)) # (shift_reg_shift_nominal_enable & shift_reg[0].q)), ((((shift_reg_load_nominal_enable & nominal_data[17].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg_serial_in)) # (shift_reg_shift_nominal_enable & shift_reg_serial_in))); + shift_reg[].ena = ((((shift_reg_load_enable # shift_reg_shift_enable) # shift_reg_load_nominal_enable) # shift_reg_shift_nominal_enable) # shift_reg_clear); + shift_reg[].sclr = shift_reg_clear; + tmp_nominal_data_out_state.clk = clock; + tmp_nominal_data_out_state.d = ((read_last_nominal_state.q & (! idle_state.q)) # (tmp_nominal_data_out_state.q & idle_state.q)); + tmp_seq_ena_state.clk = clock; + tmp_seq_ena_state.d = (reconfig_counter_state.q & (C0_data_state.q & rotate_width_counter_done)); + write_data_state.clk = clock; + write_data_state.clrn = (! reset); + write_data_state.d = (write_init_state.q # (write_data_state.q & (! width_counter_done))); + write_init_nominal_state.clk = clock; + write_init_nominal_state.clrn = (! reset); + write_init_nominal_state.d = ((idle_state.q & write_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + write_init_state.clk = clock; + write_init_state.clrn = (! reset); + write_init_state.d = ((idle_state.q & write_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + write_nominal_state.clk = clock; + write_nominal_state.clrn = (! reset); + write_nominal_state.d = (write_init_nominal_state.q # (write_nominal_state.q & (! width_counter_done))); + add_sub5.cin = B"0"; + add_sub5.dataa[] = ( B"0", shift_reg[8..1].q); + add_sub5.datab[] = ( B"0", shift_reg[17..10].q); + add_sub6.cin = data_in[0..0]; + add_sub6.dataa[] = ( data_in[8..1]); + cmpr7.dataa[] = ( data_in[7..0]); + cmpr7.datab[] = B"00000001"; + cntr1.clock = clock; + cntr1.cnt_en = addr_counter_enable; + cntr1.data[] = addr_counter_sload_value[]; + cntr1.sload = addr_counter_sload; + cntr12.clock = clock; + cntr12.cnt_en = reconfig_addr_counter_enable; + cntr12.data[] = reconfig_addr_counter_sload_value[]; + cntr12.sload = reconfig_addr_counter_sload; + cntr13.clock = clock; + cntr13.cnt_en = reconfig_width_counter_enable; + cntr13.data[] = reconfig_width_counter_sload_value[]; + cntr13.sload = reconfig_width_counter_sload; + cntr14.clock = clock; + cntr14.cnt_en = rotate_width_counter_enable; + cntr14.data[] = rotate_width_counter_sload_value[]; + cntr14.sload = rotate_width_counter_sload; + cntr15.clock = clock; + cntr15.cnt_en = rotate_addr_counter_enable; + cntr15.data[] = rotate_addr_counter_sload_value[]; + cntr15.sload = rotate_addr_counter_sload; + cntr2.clock = clock; + cntr2.cnt_en = read_addr_counter_enable; + cntr2.data[] = read_addr_counter_sload_value[]; + cntr2.sload = read_addr_counter_sload; + cntr3.clock = clock; + cntr3.cnt_en = width_counter_enable; + cntr3.data[] = width_counter_sload_value[]; + cntr3.sload = width_counter_sload; + decode11.data[] = cuda_combout_wire[]; + addr_counter_enable = (write_data_state.q # write_nominal_state.q); + addr_counter_out[] = cntr1.q[]; + addr_counter_sload = (write_init_state.q # write_init_nominal_state.q); + addr_counter_sload_value[] = (addr_decoder_out[] & (write_init_state.q # write_init_nominal_state.q)); + addr_decoder_out[] = (((((((((((((((((((((((((((((((((((( B"0", B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_bypass_LF_unused)) # ( B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_c), (sel_type_cplf & sel_param_c))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_low_r), B"0", B"0", B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_vco & sel_param_high_i_postscale), B"0", B"0", (sel_type_vco & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_odd_CP_unused), (sel_type_cplf & sel_param_odd_CP_unused), (sel_type_cplf & sel_param_odd_CP_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale), B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_high_i_postscale), (sel_type_n & sel_param_high_i_postscale), B"0", (sel_type_n & sel_param_high_i_postscale), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused), B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_n & sel_param_low_r), B"0", B"0", B"0", (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r))) # ( B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0", B"0", B"0", (sel_type_n & sel_param_nominal_count), (sel_type_n & sel_param_nominal_count))) # ( B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", (sel_type_m & sel_param_high_i_postscale), (sel_type_m & sel_param_high_i_postscale), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused), (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r))) # ( B"0", B"0", (sel_type_m & sel_param_nominal_count), (sel_type_m & sel_param_nominal_count), B"0", (sel_type_m & sel_param_nominal_count), B"0", (sel_type_m & sel_param_nominal_count))) # ( B"0", B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c0 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c0 & sel_param_low_r), (sel_type_c0 & sel_param_low_r), (sel_type_c0 & sel_param_low_r))) # ( B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c1 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c1 & sel_param_low_r), B"0", (sel_type_c1 & sel_param_low_r), (sel_type_c1 & sel_param_low_r), B"0", B"0", (sel_type_c1 & sel_param_low_r))) # ( B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale), B"0", B"0", B"0", (sel_type_c2 & sel_param_high_i_postscale), B"0")) # ( B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r), B"0", (sel_type_c2 & sel_param_low_r), B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r))) # ( B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0", (sel_type_c3 & sel_param_low_r))) # ( B"0", (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), B"0")) # ( (sel_type_c4 & sel_param_high_i_postscale), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), B"0")) # ( (sel_type_c4 & sel_param_odd_CP_unused), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused))) # ( (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r))); + busy = ((! idle_state.q) # areset_state.q); + c0_wire[] = B"01000111"; + c1_wire[] = B"01011001"; + c2_wire[] = B"01101011"; + c3_wire[] = B"01111101"; + c4_wire[] = B"10001111"; + counter_param_latch[] = counter_param_latch_reg[].q; + counter_type_latch[] = counter_type_latch_reg[].q; + cuda_combout_wire[] = ( le_comb10.combout, le_comb9.combout, le_comb8.combout); + data_out[] = ( ((shift_reg[8].q & (! read_nominal_out)) # (add_sub5.result[8..8] & read_nominal_out)), ((shift_reg[7].q & (! read_nominal_out)) # (add_sub5.result[7..7] & read_nominal_out)), ((shift_reg[6].q & (! read_nominal_out)) # (add_sub5.result[6..6] & read_nominal_out)), ((shift_reg[5].q & (! read_nominal_out)) # (add_sub5.result[5..5] & read_nominal_out)), ((shift_reg[4].q & (! read_nominal_out)) # (add_sub5.result[4..4] & read_nominal_out)), ((shift_reg[3].q & (! read_nominal_out)) # (add_sub5.result[3..3] & read_nominal_out)), ((shift_reg[2].q & (! read_nominal_out)) # (add_sub5.result[2..2] & read_nominal_out)), ((shift_reg[1].q & (! read_nominal_out)) # (add_sub5.result[1..1] & read_nominal_out)), ((shift_reg[0].q & (! read_nominal_out)) # (add_sub5.result[0..0] & read_nominal_out))); + dummy_scandataout = pll_scandataout; + encode_out[] = ( C4_ena_state.q, (C2_ena_state.q # C3_ena_state.q), (C1_ena_state.q # C3_ena_state.q)); + input_latch_enable = (idle_state.q & (write_param # read_param)); + pll_areset = (pll_areset_in # (areset_state.q & reconfig_wait_state.q)); + pll_configupdate = (configupdate_state.q & (! configupdate3_state.q)); + pll_scanclk = clock; + pll_scanclkena = ((rotate_width_counter_enable & (! rotate_width_counter_done)) # reconfig_seq_data_state.q); + pll_scandata = (scan_cache_out & ((rotate_width_counter_enable # reconfig_seq_data_state.q) # reconfig_post_state.q)); + power_up = ((((((((((((((((((((! reset_state.q) & (! idle_state.q)) & (! read_init_state.q)) & (! read_first_state.q)) & (! read_data_state.q)) & (! read_last_state.q)) & (! read_init_nominal_state.q)) & (! read_first_nominal_state.q)) & (! read_data_nominal_state.q)) & (! read_last_nominal_state.q)) & (! write_init_state.q)) & (! write_data_state.q)) & (! write_init_nominal_state.q)) & (! write_nominal_state.q)) & (! reconfig_init_state.q)) & (! reconfig_counter_state.q)) & (! reconfig_seq_ena_state.q)) & (! reconfig_seq_data_state.q)) & (! reconfig_post_state.q)) & (! reconfig_wait_state.q)); + read_addr_counter_enable = (((read_first_state.q # read_data_state.q) # read_first_nominal_state.q) # read_data_nominal_state.q); + read_addr_counter_out[] = cntr2.q[]; + read_addr_counter_sload = (read_init_state.q # read_init_nominal_state.q); + read_addr_counter_sload_value[] = (read_addr_decoder_out[] & (read_init_state.q # read_init_nominal_state.q)); + read_addr_decoder_out[] = (((((((((((((((((((((((((((((((((((( B"0", B"0", B"0", B"0", B"0", B"0", B"0", B"0") # ( B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_c), B"0")) # ( B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_low_r), B"0", B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_vco & sel_param_high_i_postscale), B"0", B"0", (sel_type_vco & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_odd_CP_unused), B"0", (sel_type_cplf & sel_param_odd_CP_unused), B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_high_i_postscale), B"0", B"0", (sel_type_n & sel_param_high_i_postscale), (sel_type_n & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused), B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r), B"0", B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0")) # ( B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", (sel_type_m & sel_param_high_i_postscale))) # ( B"0", B"0", (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused), (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), B"0")) # ( B"0", B"0", (sel_type_m & sel_param_nominal_count), B"0", B"0", (sel_type_m & sel_param_nominal_count), B"0", B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale))) # ( B"0", B"0", (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c0 & sel_param_low_r), B"0", B"0", B"0", B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", (sel_type_c1 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c1 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c1 & sel_param_low_r), B"0", (sel_type_c1 & sel_param_low_r), B"0", B"0", (sel_type_c1 & sel_param_low_r), B"0")) # ( B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c2 & sel_param_high_i_postscale), B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale), B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r), B"0", B"0", (sel_type_c2 & sel_param_low_r), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0")) # ( B"0", (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale))) # ( (sel_type_c4 & sel_param_odd_CP_unused), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused))) # ( (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0")); + read_nominal_out = tmp_nominal_data_out_state.q; + reconfig_addr_counter_enable = reconfig_seq_data_state.q; + reconfig_addr_counter_out[] = cntr12.q[]; + reconfig_addr_counter_sload = reconfig_seq_ena_state.q; + reconfig_addr_counter_sload_value[] = (reconfig_seq_ena_state.q & seq_addr_wire[]); + reconfig_done = ((! pll_scandone) & (dummy_scandataout # (! dummy_scandataout))); + reconfig_post_done = pll_scandone; + reconfig_width_counter_done = ((((((! cntr13.q[0..0]) & (! cntr13.q[1..1])) & (! cntr13.q[2..2])) & (! cntr13.q[3..3])) & (! cntr13.q[4..4])) & (! cntr13.q[5..5])); + reconfig_width_counter_enable = reconfig_seq_data_state.q; + reconfig_width_counter_sload = reconfig_seq_ena_state.q; + reconfig_width_counter_sload_value[] = (reconfig_seq_ena_state.q & seq_sload_value[]); + rotate_addr_counter_enable = ((((C0_data_state.q # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q); + rotate_addr_counter_out[] = cntr15.q[]; + rotate_addr_counter_sload = ((((C0_ena_state.q # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + rotate_addr_counter_sload_value[] = (((((c0_wire[] & rotate_decoder_wires[0..0]) # (c1_wire[] & rotate_decoder_wires[1..1])) # (c2_wire[] & rotate_decoder_wires[2..2])) # (c3_wire[] & rotate_decoder_wires[3..3])) # (c4_wire[] & rotate_decoder_wires[4..4])); + rotate_decoder_wires[] = decode11.eq[]; + rotate_width_counter_done = (((((! cntr14.q[0..0]) & (! cntr14.q[1..1])) & (! cntr14.q[2..2])) & (! cntr14.q[3..3])) & (! cntr14.q[4..4])); + rotate_width_counter_enable = ((((C0_data_state.q # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q); + rotate_width_counter_sload = ((((C0_ena_state.q # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + rotate_width_counter_sload_value[] = B"10010"; + scan_cache_address[] = ((((addr_counter_out[] & addr_counter_enable) # (read_addr_counter_out[] & read_addr_counter_enable)) # (rotate_addr_counter_out[] & rotate_addr_counter_enable)) # (reconfig_addr_counter_out[] & reconfig_addr_counter_enable)); + scan_cache_in = shift_reg_serial_out; + scan_cache_out = altsyncram4.q_a[0..0]; + scan_cache_write_enable = (write_data_state.q # write_nominal_state.q); + sel_param_bypass_LF_unused = (((! counter_param_latch[0..0]) & (! counter_param_latch[1..1])) & counter_param_latch[2..2]); + sel_param_c = (((! counter_param_latch[0..0]) & counter_param_latch[1..1]) & (! counter_param_latch[2..2])); + sel_param_high_i_postscale = (((! counter_param_latch[0..0]) & (! counter_param_latch[1..1])) & (! counter_param_latch[2..2])); + sel_param_low_r = ((counter_param_latch[0..0] & (! counter_param_latch[1..1])) & (! counter_param_latch[2..2])); + sel_param_nominal_count = ((counter_param_latch[0..0] & counter_param_latch[1..1]) & counter_param_latch[2..2]); + sel_param_odd_CP_unused = ((counter_param_latch[0..0] & (! counter_param_latch[1..1])) & counter_param_latch[2..2]); + sel_type_c0 = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c1 = (((counter_type_latch[0..0] & (! counter_type_latch[1..1])) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c2 = ((((! counter_type_latch[0..0]) & counter_type_latch[1..1]) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c3 = (((counter_type_latch[0..0] & counter_type_latch[1..1]) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c4 = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & counter_type_latch[3..3]); + sel_type_cplf = ((((! counter_type_latch[0..0]) & counter_type_latch[1..1]) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_m = (((counter_type_latch[0..0] & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_n = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_vco = (((counter_type_latch[0..0] & counter_type_latch[1..1]) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + seq_addr_wire[] = B"00110101"; + seq_sload_value[] = B"110110"; + shift_reg_clear = (read_init_state.q # read_init_nominal_state.q); + shift_reg_load_enable = ((idle_state.q & write_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + shift_reg_load_nominal_enable = ((idle_state.q & write_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + shift_reg_serial_in = scan_cache_out; + shift_reg_serial_out = ((((((((shift_reg[17].q & shift_reg_width_select[0..0]) # (shift_reg[17].q & shift_reg_width_select[1..1])) # (shift_reg[17].q & shift_reg_width_select[2..2])) # (shift_reg[17].q & shift_reg_width_select[3..3])) # (shift_reg[17].q & shift_reg_width_select[4..4])) # (shift_reg[17].q & shift_reg_width_select[5..5])) # (shift_reg[17].q & shift_reg_width_select[6..6])) # (shift_reg[17].q & shift_reg_width_select[7..7])); + shift_reg_shift_enable = ((read_data_state.q # read_last_state.q) # write_data_state.q); + shift_reg_shift_nominal_enable = ((read_data_nominal_state.q # read_last_nominal_state.q) # write_nominal_state.q); + shift_reg_width_select[] = width_decoder_select[]; + w1565w = B"0"; + w1592w = B"0"; + w64w = B"0"; + width_counter_done = (((((! cntr3.q[0..0]) & (! cntr3.q[1..1])) & (! cntr3.q[2..2])) & (! cntr3.q[3..3])) & (! cntr3.q[4..4])); + width_counter_enable = ((((read_first_state.q # read_data_state.q) # write_data_state.q) # read_data_nominal_state.q) # write_nominal_state.q); + width_counter_sload = (((read_init_state.q # write_init_state.q) # read_init_nominal_state.q) # write_init_nominal_state.q); + width_counter_sload_value[] = width_decoder_out[]; + width_decoder_out[] = (((((( B"0", B"0", B"0", B"0", B"0") # ( width_decoder_select[2..2], B"0", B"0", B"0", width_decoder_select[2..2])) # ( B"0", B"0", B"0", B"0", width_decoder_select[3..3])) # ( B"0", B"0", width_decoder_select[5..5], width_decoder_select[5..5], width_decoder_select[5..5])) # ( B"0", B"0", B"0", width_decoder_select[6..6], B"0")) # ( B"0", B"0", width_decoder_select[7..7], B"0", B"0")); + width_decoder_select[] = ( ((sel_type_cplf & sel_param_low_r) # (sel_type_cplf & sel_param_odd_CP_unused)), (sel_type_cplf & sel_param_high_i_postscale), ((((((((((((((sel_type_n & sel_param_high_i_postscale) # (sel_type_n & sel_param_low_r)) # (sel_type_m & sel_param_high_i_postscale)) # (sel_type_m & sel_param_low_r)) # (sel_type_c0 & sel_param_high_i_postscale)) # (sel_type_c0 & sel_param_low_r)) # (sel_type_c1 & sel_param_high_i_postscale)) # (sel_type_c1 & sel_param_low_r)) # (sel_type_c2 & sel_param_high_i_postscale)) # (sel_type_c2 & sel_param_low_r)) # (sel_type_c3 & sel_param_high_i_postscale)) # (sel_type_c3 & sel_param_low_r)) # (sel_type_c4 & sel_param_high_i_postscale)) # (sel_type_c4 & sel_param_low_r)), w1592w, ((sel_type_cplf & sel_param_bypass_LF_unused) # (sel_type_cplf & sel_param_c)), ((sel_type_n & sel_param_nominal_count) # (sel_type_m & sel_param_nominal_count)), w1565w, (((((((((((((((sel_type_vco & sel_param_high_i_postscale) # (sel_type_n & sel_param_bypass_LF_unused)) # (sel_type_n & sel_param_odd_CP_unused)) # (sel_type_m & sel_param_bypass_LF_unused)) # (sel_type_m & sel_param_odd_CP_unused)) # (sel_type_c0 & sel_param_bypass_LF_unused)) # (sel_type_c0 & sel_param_odd_CP_unused)) # (sel_type_c1 & sel_param_bypass_LF_unused)) # (sel_type_c1 & sel_param_odd_CP_unused)) # (sel_type_c2 & sel_param_bypass_LF_unused)) # (sel_type_c2 & sel_param_odd_CP_unused)) # (sel_type_c3 & sel_param_bypass_LF_unused)) # (sel_type_c3 & sel_param_odd_CP_unused)) # (sel_type_c4 & sel_param_bypass_LF_unused)) # (sel_type_c4 & sel_param_odd_CP_unused))); + write_from_rom = GND; +END; +--VALID FILE diff --git a/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_t4q.tdf b/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_t4q.tdf new file mode 100644 index 0000000..fae939f --- /dev/null +++ b/FPGA_quartus_GE/altpll_reconfig1_pllrcfg_t4q.tdf @@ -0,0 +1,582 @@ +--altpll_reconfig CBX_AUTO_BLACKBOX="ALL" device_family="Cyclone III" busy clock counter_param counter_type data_in data_out pll_areset pll_areset_in pll_configupdate pll_scanclk pll_scanclkena pll_scandata pll_scandataout pll_scandone read_param reconfig reset write_param +--VERSION_BEGIN 9.1SP2 cbx_altpll_reconfig 2010:03:24:20:43:42:SJ cbx_altsyncram 2010:03:24:20:43:42:SJ cbx_cycloneii 2010:03:24:20:43:43:SJ cbx_lpm_add_sub 2010:03:24:20:43:43:SJ cbx_lpm_compare 2010:03:24:20:43:43:SJ cbx_lpm_counter 2010:03:24:20:43:43:SJ cbx_lpm_decode 2010:03:24:20:43:43:SJ cbx_lpm_mux 2010:03:24:20:43:43:SJ cbx_mgl 2010:03:24:21:01:05:SJ cbx_stratix 2010:03:24:20:43:43:SJ cbx_stratixii 2010:03:24:20:43:43:SJ cbx_stratixiii 2010:03:24:20:43:43:SJ cbx_util_mgl 2010:03:24:20:43:43:SJ VERSION_END + + +-- Copyright (C) 1991-2010 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + + +include "altsyncram.inc"; +FUNCTION cycloneiii_lcell_comb (cin, dataa, datab, datac, datad) +WITH ( DONT_TOUCH, LUT_MASK, SUM_LUTC_INPUT) +RETURNS ( combout, cout); +FUNCTION lpm_add_sub (aclr, add_sub, cin, clken, clock, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0]) +WITH ( CARRY_CHAIN, CARRY_CHAIN_LENGTH, LPM_DIRECTION, LPM_PIPELINE, LPM_REPRESENTATION, LPM_WIDTH, ONE_INPUT_IS_CONSTANT, REGISTERED_AT_END, USE_WYS) +RETURNS ( cout, overflow, result[LPM_WIDTH-1..0]); +FUNCTION lpm_compare (aclr, clken, clock, dataa[LPM_WIDTH-1..0], datab[LPM_WIDTH-1..0]) +WITH ( LPM_PIPELINE, LPM_REPRESENTATION, LPM_WIDTH, ONE_INPUT_IS_CONSTANT) +RETURNS ( aeb, agb, ageb, alb, aleb, aneb); +FUNCTION lpm_counter (aclr, aload, aset, cin, clk_en, clock, cnt_en, data[LPM_WIDTH-1..0], sclr, sload, sset, updown) +WITH ( lpm_avalue, lpm_direction, lpm_modulus, lpm_port_updown, lpm_pvalue, lpm_svalue, lpm_width) +RETURNS ( cout, eq[15..0], q[LPM_WIDTH-1..0]); +FUNCTION lpm_decode (aclr, clken, clock, data[LPM_WIDTH-1..0], enable) +WITH ( CASCADE_CHAIN, IGNORE_CASCADE_BUFFERS, LPM_DECODES, LPM_PIPELINE, LPM_WIDTH) +RETURNS ( eq[LPM_DECODES-1..0]); + +--synthesis_resources = altsyncram 1 lpm_add_sub 2 lpm_compare 1 lpm_counter 7 lpm_decode 1 lut 3 reg 80 +OPTIONS ALTERA_INTERNAL_OPTION = "ADV_NETLIST_OPT_ALLOWED=""NEVER_ALLOW"";suppress_da_rule_internal=C106;{-to le_comb10} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=2;{-to le_comb8} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=0;{-to le_comb9} PLL_SCAN_RECONFIG_COUNTER_REMAP_LCELL=1;{-to idle_state} POWER_UP_LEVEL=LOW;{-to read_data_nominal_state} POWER_UP_LEVEL=LOW;{-to read_data_state} POWER_UP_LEVEL=LOW;{-to read_first_nominal_state} POWER_UP_LEVEL=LOW;{-to read_first_state} POWER_UP_LEVEL=LOW;{-to read_init_nominal_state} POWER_UP_LEVEL=LOW;{-to read_init_state} POWER_UP_LEVEL=LOW;{-to read_last_nominal_state} POWER_UP_LEVEL=LOW;{-to read_last_state} POWER_UP_LEVEL=LOW;{-to reconfig_counter_state} POWER_UP_LEVEL=LOW;{-to reconfig_init_state} POWER_UP_LEVEL=LOW;{-to reconfig_post_state} POWER_UP_LEVEL=LOW;{-to reconfig_seq_data_state} POWER_UP_LEVEL=LOW;{-to reconfig_seq_ena_state} POWER_UP_LEVEL=LOW;{-to reconfig_wait_state} POWER_UP_LEVEL=LOW;{-to reset_state} POWER_UP_LEVEL=HIGH;{-to write_data_state} POWER_UP_LEVEL=LOW;{-to write_init_nominal_state} POWER_UP_LEVEL=LOW;{-to write_init_state} POWER_UP_LEVEL=LOW;{-to write_nominal_state} POWER_UP_LEVEL=LOW"; + +SUBDESIGN altpll_reconfig1_pllrcfg_t4q +( + busy : output; + clock : input; + counter_param[2..0] : input; + counter_type[3..0] : input; + data_in[8..0] : input; + data_out[8..0] : output; + pll_areset : output; + pll_areset_in : input; + pll_configupdate : output; + pll_scanclk : output; + pll_scanclkena : output; + pll_scandata : output; + pll_scandataout : input; + pll_scandone : input; + read_param : input; + reconfig : input; + reset : input; + write_param : input; +) +VARIABLE + altsyncram4 : altsyncram + WITH ( + NUMWORDS_A = 144, + OPERATION_MODE = "SINGLE_PORT", + WIDTH_A = 1, + WIDTH_BYTEENA_A = 1, + WIDTHAD_A = 8 + ); + le_comb10 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "F0F0", + SUM_LUTC_INPUT = "datac" + ); + le_comb8 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "AAAA", + SUM_LUTC_INPUT = "datac" + ); + le_comb9 : cycloneiii_lcell_comb + WITH ( + DONT_TOUCH = "on", + LUT_MASK = "CCCC", + SUM_LUTC_INPUT = "datac" + ); + areset_init_state_1 : dffe; + areset_state : dffe; + C0_data_state : dffe; + C0_ena_state : dffe; + C1_data_state : dffe; + C1_ena_state : dffe; + C2_data_state : dffe; + C2_ena_state : dffe; + C3_data_state : dffe; + C3_ena_state : dffe; + C4_data_state : dffe; + C4_ena_state : dffe; + configupdate2_state : dffe; + configupdate3_state : dffe; + configupdate_state : dffe; + counter_param_latch_reg[2..0] : dffe; + counter_type_latch_reg[3..0] : dffe; + idle_state : dffe + WITH ( + power_up = "low" + ); + nominal_data[17..0] : dffe; + read_data_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_data_state : dffe + WITH ( + power_up = "low" + ); + read_first_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_first_state : dffe + WITH ( + power_up = "low" + ); + read_init_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_init_state : dffe + WITH ( + power_up = "low" + ); + read_last_nominal_state : dffe + WITH ( + power_up = "low" + ); + read_last_state : dffe + WITH ( + power_up = "low" + ); + reconfig_counter_state : dffe + WITH ( + power_up = "low" + ); + reconfig_init_state : dffe + WITH ( + power_up = "low" + ); + reconfig_post_state : dffe + WITH ( + power_up = "low" + ); + reconfig_seq_data_state : dffe + WITH ( + power_up = "low" + ); + reconfig_seq_ena_state : dffe + WITH ( + power_up = "low" + ); + reconfig_wait_state : dffe + WITH ( + power_up = "low" + ); + reset_state : dffe + WITH ( + power_up = "high" + ); + shift_reg[17..0] : dffeas; + tmp_nominal_data_out_state : dffe; + tmp_seq_ena_state : dffe; + write_data_state : dffe + WITH ( + power_up = "low" + ); + write_init_nominal_state : dffe + WITH ( + power_up = "low" + ); + write_init_state : dffe + WITH ( + power_up = "low" + ); + write_nominal_state : dffe + WITH ( + power_up = "low" + ); + add_sub5 : lpm_add_sub + WITH ( + LPM_WIDTH = 9 + ); + add_sub6 : lpm_add_sub + WITH ( + LPM_WIDTH = 8 + ); + cmpr7 : lpm_compare + WITH ( + LPM_WIDTH = 8 + ); + cntr1 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr12 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr13 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 6 + ); + cntr14 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 5 + ); + cntr15 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_modulus = 144, + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr2 : lpm_counter + WITH ( + lpm_direction = "UP", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 8 + ); + cntr3 : lpm_counter + WITH ( + lpm_direction = "DOWN", + lpm_port_updown = "PORT_UNUSED", + lpm_width = 5 + ); + decode11 : lpm_decode + WITH ( + LPM_DECODES = 5, + LPM_WIDTH = 3 + ); + addr_counter_enable : WIRE; + addr_counter_out[7..0] : WIRE; + addr_counter_sload : WIRE; + addr_counter_sload_value[7..0] : WIRE; + addr_decoder_out[7..0] : WIRE; + c0_wire[7..0] : WIRE; + c1_wire[7..0] : WIRE; + c2_wire[7..0] : WIRE; + c3_wire[7..0] : WIRE; + c4_wire[7..0] : WIRE; + counter_param_latch[2..0] : WIRE; + counter_type_latch[3..0] : WIRE; + cuda_combout_wire[2..0] : WIRE; + dummy_scandataout : WIRE; + encode_out[2..0] : WIRE; + input_latch_enable : WIRE; + power_up : WIRE; + read_addr_counter_enable : WIRE; + read_addr_counter_out[7..0] : WIRE; + read_addr_counter_sload : WIRE; + read_addr_counter_sload_value[7..0] : WIRE; + read_addr_decoder_out[7..0] : WIRE; + read_nominal_out : WIRE; + reconfig_addr_counter_enable : WIRE; + reconfig_addr_counter_out[7..0] : WIRE; + reconfig_addr_counter_sload : WIRE; + reconfig_addr_counter_sload_value[7..0] : WIRE; + reconfig_done : WIRE; + reconfig_post_done : WIRE; + reconfig_width_counter_done : WIRE; + reconfig_width_counter_enable : WIRE; + reconfig_width_counter_sload : WIRE; + reconfig_width_counter_sload_value[5..0] : WIRE; + rotate_addr_counter_enable : WIRE; + rotate_addr_counter_out[7..0] : WIRE; + rotate_addr_counter_sload : WIRE; + rotate_addr_counter_sload_value[7..0] : WIRE; + rotate_decoder_wires[4..0] : WIRE; + rotate_width_counter_done : WIRE; + rotate_width_counter_enable : WIRE; + rotate_width_counter_sload : WIRE; + rotate_width_counter_sload_value[4..0] : WIRE; + scan_cache_address[7..0] : WIRE; + scan_cache_in : WIRE; + scan_cache_out : WIRE; + scan_cache_write_enable : WIRE; + sel_param_bypass_LF_unused : WIRE; + sel_param_c : WIRE; + sel_param_high_i_postscale : WIRE; + sel_param_low_r : WIRE; + sel_param_nominal_count : WIRE; + sel_param_odd_CP_unused : WIRE; + sel_type_c0 : WIRE; + sel_type_c1 : WIRE; + sel_type_c2 : WIRE; + sel_type_c3 : WIRE; + sel_type_c4 : WIRE; + sel_type_cplf : WIRE; + sel_type_m : WIRE; + sel_type_n : WIRE; + sel_type_vco : WIRE; + seq_addr_wire[7..0] : WIRE; + seq_sload_value[5..0] : WIRE; + shift_reg_clear : WIRE; + shift_reg_load_enable : WIRE; + shift_reg_load_nominal_enable : WIRE; + shift_reg_serial_in : WIRE; + shift_reg_serial_out : WIRE; + shift_reg_shift_enable : WIRE; + shift_reg_shift_nominal_enable : WIRE; + shift_reg_width_select[7..0] : WIRE; + w1565w : WIRE; + w1592w : WIRE; + w64w : WIRE; + width_counter_done : WIRE; + width_counter_enable : WIRE; + width_counter_sload : WIRE; + width_counter_sload_value[4..0] : WIRE; + width_decoder_out[4..0] : WIRE; + width_decoder_select[7..0] : WIRE; + write_from_rom : NODE; + +BEGIN + altsyncram4.address_a[] = scan_cache_address[]; + altsyncram4.clock0 = clock; + altsyncram4.data_a[] = ( scan_cache_in); + altsyncram4.wren_a = scan_cache_write_enable; + le_comb10.dataa = encode_out[0..0]; + le_comb10.datab = encode_out[1..1]; + le_comb10.datac = encode_out[2..2]; + le_comb8.dataa = encode_out[0..0]; + le_comb8.datab = encode_out[1..1]; + le_comb8.datac = encode_out[2..2]; + le_comb9.dataa = encode_out[0..0]; + le_comb9.datab = encode_out[1..1]; + le_comb9.datac = encode_out[2..2]; + areset_init_state_1.clk = clock; + areset_init_state_1.d = pll_scandone; + areset_state.clk = clock; + areset_state.d = (areset_init_state_1.q & (! reset)); + C0_data_state.clk = clock; + C0_data_state.d = (C0_ena_state.q # (C0_data_state.q & (! rotate_width_counter_done))); + C0_ena_state.clk = clock; + C0_ena_state.d = (C1_data_state.q & rotate_width_counter_done); + C1_data_state.clk = clock; + C1_data_state.d = (C1_ena_state.q # (C1_data_state.q & (! rotate_width_counter_done))); + C1_ena_state.clk = clock; + C1_ena_state.d = (C2_data_state.q & rotate_width_counter_done); + C2_data_state.clk = clock; + C2_data_state.d = (C2_ena_state.q # (C2_data_state.q & (! rotate_width_counter_done))); + C2_ena_state.clk = clock; + C2_ena_state.d = (C3_data_state.q & rotate_width_counter_done); + C3_data_state.clk = clock; + C3_data_state.d = (C3_ena_state.q # (C3_data_state.q & (! rotate_width_counter_done))); + C3_ena_state.clk = clock; + C3_ena_state.d = (C4_data_state.q & rotate_width_counter_done); + C4_data_state.clk = clock; + C4_data_state.d = (C4_ena_state.q # (C4_data_state.q & (! rotate_width_counter_done))); + C4_ena_state.clk = clock; + C4_ena_state.d = reconfig_init_state.q; + configupdate2_state.clk = clock; + configupdate2_state.d = configupdate_state.q; + configupdate3_state.clk = (! clock); + configupdate3_state.d = configupdate2_state.q; + configupdate_state.clk = clock; + configupdate_state.d = reconfig_post_state.q; + counter_param_latch_reg[].clk = clock; + counter_param_latch_reg[].clrn = (! reset); + counter_param_latch_reg[].d = counter_param[]; + counter_param_latch_reg[].ena = input_latch_enable; + counter_type_latch_reg[].clk = clock; + counter_type_latch_reg[].clrn = (! reset); + counter_type_latch_reg[].d = counter_type[]; + counter_type_latch_reg[].ena = input_latch_enable; + idle_state.clk = clock; + idle_state.clrn = (! reset); + idle_state.d = ((((((((((idle_state.q & (! read_param)) & (! write_param)) & (! reconfig)) & (! write_from_rom)) # read_last_state.q) # (write_data_state.q & width_counter_done)) # (write_nominal_state.q & width_counter_done)) # read_last_nominal_state.q) # (reconfig_wait_state.q & reconfig_done)) # reset_state.q); + nominal_data[].clk = clock; + nominal_data[].clrn = (! reset); + nominal_data[].d = ( cmpr7.aeb, data_in[8..0], add_sub6.result[7..0]); + read_data_nominal_state.clk = clock; + read_data_nominal_state.clrn = (! reset); + read_data_nominal_state.d = ((read_first_nominal_state.q & (! width_counter_done)) # (read_data_nominal_state.q & (! width_counter_done))); + read_data_state.clk = clock; + read_data_state.clrn = (! reset); + read_data_state.d = ((read_first_state.q & (! width_counter_done)) # (read_data_state.q & (! width_counter_done))); + read_first_nominal_state.clk = clock; + read_first_nominal_state.clrn = (! reset); + read_first_nominal_state.d = read_init_nominal_state.q; + read_first_state.clk = clock; + read_first_state.clrn = (! reset); + read_first_state.d = read_init_state.q; + read_init_nominal_state.clk = clock; + read_init_nominal_state.clrn = (! reset); + read_init_nominal_state.d = ((idle_state.q & read_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + read_init_state.clk = clock; + read_init_state.clrn = (! reset); + read_init_state.d = ((idle_state.q & read_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + read_last_nominal_state.clk = clock; + read_last_nominal_state.clrn = (! reset); + read_last_nominal_state.d = ((read_first_nominal_state.q & width_counter_done) # (read_data_nominal_state.q & width_counter_done)); + read_last_state.clk = clock; + read_last_state.clrn = (! reset); + read_last_state.d = ((read_first_state.q & width_counter_done) # (read_data_state.q & width_counter_done)); + reconfig_counter_state.clk = clock; + reconfig_counter_state.clrn = (! reset); + reconfig_counter_state.d = ((((((((((reconfig_init_state.q # C0_data_state.q) # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q) # C0_ena_state.q) # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + reconfig_init_state.clk = clock; + reconfig_init_state.clrn = (! reset); + reconfig_init_state.d = (idle_state.q & reconfig); + reconfig_post_state.clk = clock; + reconfig_post_state.clrn = (! reset); + reconfig_post_state.d = ((reconfig_seq_data_state.q & reconfig_width_counter_done) # (reconfig_post_state.q & (! reconfig_post_done))); + reconfig_seq_data_state.clk = clock; + reconfig_seq_data_state.clrn = (! reset); + reconfig_seq_data_state.d = (reconfig_seq_ena_state.q # (reconfig_seq_data_state.q & (! reconfig_width_counter_done))); + reconfig_seq_ena_state.clk = clock; + reconfig_seq_ena_state.clrn = (! reset); + reconfig_seq_ena_state.d = tmp_seq_ena_state.q; + reconfig_wait_state.clk = clock; + reconfig_wait_state.clrn = (! reset); + reconfig_wait_state.d = ((reconfig_post_state.q & reconfig_post_done) # (reconfig_wait_state.q & (! reconfig_done))); + reset_state.clk = clock; + reset_state.d = power_up; + reset_state.prn = (! reset); + shift_reg[].clk = clock; + shift_reg[].clrn = (! reset); + shift_reg[].d = ( ((((shift_reg_load_nominal_enable & nominal_data[0].q) # (shift_reg_load_enable & data_in[0..0])) # (shift_reg_shift_enable & shift_reg[16].q)) # (shift_reg_shift_nominal_enable & shift_reg[16].q)), ((((shift_reg_load_nominal_enable & nominal_data[1].q) # (shift_reg_load_enable & data_in[1..1])) # (shift_reg_shift_enable & shift_reg[15].q)) # (shift_reg_shift_nominal_enable & shift_reg[15].q)), ((((shift_reg_load_nominal_enable & nominal_data[2].q) # (shift_reg_load_enable & data_in[2..2])) # (shift_reg_shift_enable & shift_reg[14].q)) # (shift_reg_shift_nominal_enable & shift_reg[14].q)), ((((shift_reg_load_nominal_enable & nominal_data[3].q) # (shift_reg_load_enable & data_in[3..3])) # (shift_reg_shift_enable & shift_reg[13].q)) # (shift_reg_shift_nominal_enable & shift_reg[13].q)), ((((shift_reg_load_nominal_enable & nominal_data[4].q) # (shift_reg_load_enable & data_in[4..4])) # (shift_reg_shift_enable & shift_reg[12].q)) # (shift_reg_shift_nominal_enable & shift_reg[12].q)), ((((shift_reg_load_nominal_enable & nominal_data[5].q) # (shift_reg_load_enable & data_in[5..5])) # (shift_reg_shift_enable & shift_reg[11].q)) # (shift_reg_shift_nominal_enable & shift_reg[11].q)), ((((shift_reg_load_nominal_enable & nominal_data[6].q) # (shift_reg_load_enable & data_in[6..6])) # (shift_reg_shift_enable & shift_reg[10].q)) # (shift_reg_shift_nominal_enable & shift_reg[10].q)), ((((shift_reg_load_nominal_enable & nominal_data[7].q) # (shift_reg_load_enable & data_in[7..7])) # (shift_reg_shift_enable & shift_reg[9].q)) # (shift_reg_shift_nominal_enable & shift_reg[9].q)), ((((shift_reg_load_nominal_enable & nominal_data[8].q) # (shift_reg_load_enable & data_in[8..8])) # (shift_reg_shift_enable & shift_reg[8].q)) # (shift_reg_shift_nominal_enable & shift_reg[8].q)), ((((shift_reg_load_nominal_enable & nominal_data[9].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[7].q)) # (shift_reg_shift_nominal_enable & shift_reg[7].q)), ((((shift_reg_load_nominal_enable & nominal_data[10].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[6].q)) # (shift_reg_shift_nominal_enable & shift_reg[6].q)), ((((shift_reg_load_nominal_enable & nominal_data[11].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[5].q)) # (shift_reg_shift_nominal_enable & shift_reg[5].q)), ((((shift_reg_load_nominal_enable & nominal_data[12].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[4].q)) # (shift_reg_shift_nominal_enable & shift_reg[4].q)), ((((shift_reg_load_nominal_enable & nominal_data[13].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[3].q)) # (shift_reg_shift_nominal_enable & shift_reg[3].q)), ((((shift_reg_load_nominal_enable & nominal_data[14].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[2].q)) # (shift_reg_shift_nominal_enable & shift_reg[2].q)), ((((shift_reg_load_nominal_enable & nominal_data[15].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[1].q)) # (shift_reg_shift_nominal_enable & shift_reg[1].q)), ((((shift_reg_load_nominal_enable & nominal_data[16].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg[0].q)) # (shift_reg_shift_nominal_enable & shift_reg[0].q)), ((((shift_reg_load_nominal_enable & nominal_data[17].q) # (shift_reg_load_enable & w64w)) # (shift_reg_shift_enable & shift_reg_serial_in)) # (shift_reg_shift_nominal_enable & shift_reg_serial_in))); + shift_reg[].ena = ((((shift_reg_load_enable # shift_reg_shift_enable) # shift_reg_load_nominal_enable) # shift_reg_shift_nominal_enable) # shift_reg_clear); + shift_reg[].sclr = shift_reg_clear; + tmp_nominal_data_out_state.clk = clock; + tmp_nominal_data_out_state.d = ((read_last_nominal_state.q & (! idle_state.q)) # (tmp_nominal_data_out_state.q & idle_state.q)); + tmp_seq_ena_state.clk = clock; + tmp_seq_ena_state.d = (reconfig_counter_state.q & (C0_data_state.q & rotate_width_counter_done)); + write_data_state.clk = clock; + write_data_state.clrn = (! reset); + write_data_state.d = (write_init_state.q # (write_data_state.q & (! width_counter_done))); + write_init_nominal_state.clk = clock; + write_init_nominal_state.clrn = (! reset); + write_init_nominal_state.d = ((idle_state.q & write_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + write_init_state.clk = clock; + write_init_state.clrn = (! reset); + write_init_state.d = ((idle_state.q & write_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + write_nominal_state.clk = clock; + write_nominal_state.clrn = (! reset); + write_nominal_state.d = (write_init_nominal_state.q # (write_nominal_state.q & (! width_counter_done))); + add_sub5.cin = B"0"; + add_sub5.dataa[] = ( B"0", shift_reg[8..1].q); + add_sub5.datab[] = ( B"0", shift_reg[17..10].q); + add_sub6.cin = data_in[0..0]; + add_sub6.dataa[] = ( data_in[8..1]); + cmpr7.dataa[] = ( data_in[7..0]); + cmpr7.datab[] = B"00000001"; + cntr1.clock = clock; + cntr1.cnt_en = addr_counter_enable; + cntr1.data[] = addr_counter_sload_value[]; + cntr1.sload = addr_counter_sload; + cntr12.clock = clock; + cntr12.cnt_en = reconfig_addr_counter_enable; + cntr12.data[] = reconfig_addr_counter_sload_value[]; + cntr12.sload = reconfig_addr_counter_sload; + cntr13.clock = clock; + cntr13.cnt_en = reconfig_width_counter_enable; + cntr13.data[] = reconfig_width_counter_sload_value[]; + cntr13.sload = reconfig_width_counter_sload; + cntr14.clock = clock; + cntr14.cnt_en = rotate_width_counter_enable; + cntr14.data[] = rotate_width_counter_sload_value[]; + cntr14.sload = rotate_width_counter_sload; + cntr15.clock = clock; + cntr15.cnt_en = rotate_addr_counter_enable; + cntr15.data[] = rotate_addr_counter_sload_value[]; + cntr15.sload = rotate_addr_counter_sload; + cntr2.clock = clock; + cntr2.cnt_en = read_addr_counter_enable; + cntr2.data[] = read_addr_counter_sload_value[]; + cntr2.sload = read_addr_counter_sload; + cntr3.clock = clock; + cntr3.cnt_en = width_counter_enable; + cntr3.data[] = width_counter_sload_value[]; + cntr3.sload = width_counter_sload; + decode11.data[] = cuda_combout_wire[]; + addr_counter_enable = (write_data_state.q # write_nominal_state.q); + addr_counter_out[] = cntr1.q[]; + addr_counter_sload = (write_init_state.q # write_init_nominal_state.q); + addr_counter_sload_value[] = (addr_decoder_out[] & (write_init_state.q # write_init_nominal_state.q)); + addr_decoder_out[] = (((((((((((((((((((((((((((((((((((( B"0", B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_bypass_LF_unused)) # ( B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_c), (sel_type_cplf & sel_param_c))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_low_r), B"0", B"0", B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_vco & sel_param_high_i_postscale), B"0", B"0", (sel_type_vco & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_odd_CP_unused), (sel_type_cplf & sel_param_odd_CP_unused), (sel_type_cplf & sel_param_odd_CP_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale), B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_high_i_postscale), (sel_type_n & sel_param_high_i_postscale), B"0", (sel_type_n & sel_param_high_i_postscale), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused), B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_n & sel_param_low_r), B"0", B"0", B"0", (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r))) # ( B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0", B"0", B"0", (sel_type_n & sel_param_nominal_count), (sel_type_n & sel_param_nominal_count))) # ( B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", (sel_type_m & sel_param_high_i_postscale), (sel_type_m & sel_param_high_i_postscale), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused), (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r))) # ( B"0", B"0", (sel_type_m & sel_param_nominal_count), (sel_type_m & sel_param_nominal_count), B"0", (sel_type_m & sel_param_nominal_count), B"0", (sel_type_m & sel_param_nominal_count))) # ( B"0", B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c0 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c0 & sel_param_low_r), (sel_type_c0 & sel_param_low_r), (sel_type_c0 & sel_param_low_r))) # ( B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c1 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c1 & sel_param_low_r), B"0", (sel_type_c1 & sel_param_low_r), (sel_type_c1 & sel_param_low_r), B"0", B"0", (sel_type_c1 & sel_param_low_r))) # ( B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale), B"0", B"0", B"0", (sel_type_c2 & sel_param_high_i_postscale), B"0")) # ( B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r), B"0", (sel_type_c2 & sel_param_low_r), B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r))) # ( B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0", (sel_type_c3 & sel_param_low_r))) # ( B"0", (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), B"0")) # ( (sel_type_c4 & sel_param_high_i_postscale), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), B"0")) # ( (sel_type_c4 & sel_param_odd_CP_unused), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused))) # ( (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r), (sel_type_c4 & sel_param_low_r))); + busy = ((! idle_state.q) # areset_state.q); + c0_wire[] = B"01000111"; + c1_wire[] = B"01011001"; + c2_wire[] = B"01101011"; + c3_wire[] = B"01111101"; + c4_wire[] = B"10001111"; + counter_param_latch[] = counter_param_latch_reg[].q; + counter_type_latch[] = counter_type_latch_reg[].q; + cuda_combout_wire[] = ( le_comb10.combout, le_comb9.combout, le_comb8.combout); + data_out[] = ( ((shift_reg[8].q & (! read_nominal_out)) # (add_sub5.result[8..8] & read_nominal_out)), ((shift_reg[7].q & (! read_nominal_out)) # (add_sub5.result[7..7] & read_nominal_out)), ((shift_reg[6].q & (! read_nominal_out)) # (add_sub5.result[6..6] & read_nominal_out)), ((shift_reg[5].q & (! read_nominal_out)) # (add_sub5.result[5..5] & read_nominal_out)), ((shift_reg[4].q & (! read_nominal_out)) # (add_sub5.result[4..4] & read_nominal_out)), ((shift_reg[3].q & (! read_nominal_out)) # (add_sub5.result[3..3] & read_nominal_out)), ((shift_reg[2].q & (! read_nominal_out)) # (add_sub5.result[2..2] & read_nominal_out)), ((shift_reg[1].q & (! read_nominal_out)) # (add_sub5.result[1..1] & read_nominal_out)), ((shift_reg[0].q & (! read_nominal_out)) # (add_sub5.result[0..0] & read_nominal_out))); + dummy_scandataout = pll_scandataout; + encode_out[] = ( C4_ena_state.q, (C2_ena_state.q # C3_ena_state.q), (C1_ena_state.q # C3_ena_state.q)); + input_latch_enable = (idle_state.q & (write_param # read_param)); + pll_areset = (pll_areset_in # (areset_state.q & reconfig_wait_state.q)); + pll_configupdate = (configupdate_state.q & (! configupdate3_state.q)); + pll_scanclk = clock; + pll_scanclkena = ((rotate_width_counter_enable & (! rotate_width_counter_done)) # reconfig_seq_data_state.q); + pll_scandata = (scan_cache_out & ((rotate_width_counter_enable # reconfig_seq_data_state.q) # reconfig_post_state.q)); + power_up = ((((((((((((((((((((! reset_state.q) & (! idle_state.q)) & (! read_init_state.q)) & (! read_first_state.q)) & (! read_data_state.q)) & (! read_last_state.q)) & (! read_init_nominal_state.q)) & (! read_first_nominal_state.q)) & (! read_data_nominal_state.q)) & (! read_last_nominal_state.q)) & (! write_init_state.q)) & (! write_data_state.q)) & (! write_init_nominal_state.q)) & (! write_nominal_state.q)) & (! reconfig_init_state.q)) & (! reconfig_counter_state.q)) & (! reconfig_seq_ena_state.q)) & (! reconfig_seq_data_state.q)) & (! reconfig_post_state.q)) & (! reconfig_wait_state.q)); + read_addr_counter_enable = (((read_first_state.q # read_data_state.q) # read_first_nominal_state.q) # read_data_nominal_state.q); + read_addr_counter_out[] = cntr2.q[]; + read_addr_counter_sload = (read_init_state.q # read_init_nominal_state.q); + read_addr_counter_sload_value[] = (read_addr_decoder_out[] & (read_init_state.q # read_init_nominal_state.q)); + read_addr_decoder_out[] = (((((((((((((((((((((((((((((((((((( B"0", B"0", B"0", B"0", B"0", B"0", B"0", B"0") # ( B"0", B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_c), B"0")) # ( B"0", B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_low_r), B"0", B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_vco & sel_param_high_i_postscale), B"0", B"0", (sel_type_vco & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_odd_CP_unused), B"0", (sel_type_cplf & sel_param_odd_CP_unused), B"0")) # ( B"0", B"0", B"0", B"0", (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale), (sel_type_cplf & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_n & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_high_i_postscale), B"0", B"0", (sel_type_n & sel_param_high_i_postscale), (sel_type_n & sel_param_high_i_postscale))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused), B"0", (sel_type_n & sel_param_odd_CP_unused), (sel_type_n & sel_param_odd_CP_unused))) # ( B"0", B"0", B"0", (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r), (sel_type_n & sel_param_low_r), B"0", B"0")) # ( B"0", B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0", B"0", (sel_type_n & sel_param_nominal_count), B"0")) # ( B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_m & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", B"0", (sel_type_m & sel_param_high_i_postscale), B"0", (sel_type_m & sel_param_high_i_postscale))) # ( B"0", B"0", (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused), (sel_type_m & sel_param_odd_CP_unused), B"0", (sel_type_m & sel_param_odd_CP_unused))) # ( B"0", B"0", (sel_type_m & sel_param_low_r), B"0", (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), (sel_type_m & sel_param_low_r), B"0")) # ( B"0", B"0", (sel_type_m & sel_param_nominal_count), B"0", B"0", (sel_type_m & sel_param_nominal_count), B"0", B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0", (sel_type_c0 & sel_param_bypass_LF_unused), (sel_type_c0 & sel_param_bypass_LF_unused), B"0")) # ( B"0", B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), B"0", (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale), (sel_type_c0 & sel_param_high_i_postscale))) # ( B"0", B"0", (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused), (sel_type_c0 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c0 & sel_param_low_r), B"0", B"0", B"0", B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", (sel_type_c1 & sel_param_bypass_LF_unused), B"0", B"0", B"0")) # ( B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", (sel_type_c1 & sel_param_high_i_postscale), B"0", B"0", (sel_type_c1 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", (sel_type_c1 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c1 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c1 & sel_param_low_r), B"0", (sel_type_c1 & sel_param_low_r), B"0", B"0", (sel_type_c1 & sel_param_low_r), B"0")) # ( B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), (sel_type_c2 & sel_param_bypass_LF_unused), B"0", (sel_type_c2 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c2 & sel_param_high_i_postscale), B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale), B"0", (sel_type_c2 & sel_param_high_i_postscale), (sel_type_c2 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused), B"0", B"0", B"0", (sel_type_c2 & sel_param_odd_CP_unused), (sel_type_c2 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c2 & sel_param_low_r), (sel_type_c2 & sel_param_low_r), B"0", B"0", (sel_type_c2 & sel_param_low_r), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", (sel_type_c3 & sel_param_bypass_LF_unused), (sel_type_c3 & sel_param_bypass_LF_unused), B"0", B"0")) # ( B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale), (sel_type_c3 & sel_param_high_i_postscale), B"0", (sel_type_c3 & sel_param_high_i_postscale))) # ( B"0", (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused), B"0", (sel_type_c3 & sel_param_odd_CP_unused))) # ( B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0", (sel_type_c3 & sel_param_low_r), (sel_type_c3 & sel_param_low_r), B"0")) # ( B"0", (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), (sel_type_c4 & sel_param_bypass_LF_unused), B"0")) # ( B"0", (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale), (sel_type_c4 & sel_param_high_i_postscale))) # ( (sel_type_c4 & sel_param_odd_CP_unused), B"0", B"0", B"0", B"0", (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused), (sel_type_c4 & sel_param_odd_CP_unused))) # ( (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0", (sel_type_c4 & sel_param_low_r), B"0", B"0", B"0")); + read_nominal_out = tmp_nominal_data_out_state.q; + reconfig_addr_counter_enable = reconfig_seq_data_state.q; + reconfig_addr_counter_out[] = cntr12.q[]; + reconfig_addr_counter_sload = reconfig_seq_ena_state.q; + reconfig_addr_counter_sload_value[] = (reconfig_seq_ena_state.q & seq_addr_wire[]); + reconfig_done = ((! pll_scandone) & (dummy_scandataout # (! dummy_scandataout))); + reconfig_post_done = pll_scandone; + reconfig_width_counter_done = ((((((! cntr13.q[0..0]) & (! cntr13.q[1..1])) & (! cntr13.q[2..2])) & (! cntr13.q[3..3])) & (! cntr13.q[4..4])) & (! cntr13.q[5..5])); + reconfig_width_counter_enable = reconfig_seq_data_state.q; + reconfig_width_counter_sload = reconfig_seq_ena_state.q; + reconfig_width_counter_sload_value[] = (reconfig_seq_ena_state.q & seq_sload_value[]); + rotate_addr_counter_enable = ((((C0_data_state.q # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q); + rotate_addr_counter_out[] = cntr15.q[]; + rotate_addr_counter_sload = ((((C0_ena_state.q # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + rotate_addr_counter_sload_value[] = (((((c0_wire[] & rotate_decoder_wires[0..0]) # (c1_wire[] & rotate_decoder_wires[1..1])) # (c2_wire[] & rotate_decoder_wires[2..2])) # (c3_wire[] & rotate_decoder_wires[3..3])) # (c4_wire[] & rotate_decoder_wires[4..4])); + rotate_decoder_wires[] = decode11.eq[]; + rotate_width_counter_done = (((((! cntr14.q[0..0]) & (! cntr14.q[1..1])) & (! cntr14.q[2..2])) & (! cntr14.q[3..3])) & (! cntr14.q[4..4])); + rotate_width_counter_enable = ((((C0_data_state.q # C1_data_state.q) # C2_data_state.q) # C3_data_state.q) # C4_data_state.q); + rotate_width_counter_sload = ((((C0_ena_state.q # C1_ena_state.q) # C2_ena_state.q) # C3_ena_state.q) # C4_ena_state.q); + rotate_width_counter_sload_value[] = B"10010"; + scan_cache_address[] = ((((addr_counter_out[] & addr_counter_enable) # (read_addr_counter_out[] & read_addr_counter_enable)) # (rotate_addr_counter_out[] & rotate_addr_counter_enable)) # (reconfig_addr_counter_out[] & reconfig_addr_counter_enable)); + scan_cache_in = shift_reg_serial_out; + scan_cache_out = altsyncram4.q_a[0..0]; + scan_cache_write_enable = (write_data_state.q # write_nominal_state.q); + sel_param_bypass_LF_unused = (((! counter_param_latch[0..0]) & (! counter_param_latch[1..1])) & counter_param_latch[2..2]); + sel_param_c = (((! counter_param_latch[0..0]) & counter_param_latch[1..1]) & (! counter_param_latch[2..2])); + sel_param_high_i_postscale = (((! counter_param_latch[0..0]) & (! counter_param_latch[1..1])) & (! counter_param_latch[2..2])); + sel_param_low_r = ((counter_param_latch[0..0] & (! counter_param_latch[1..1])) & (! counter_param_latch[2..2])); + sel_param_nominal_count = ((counter_param_latch[0..0] & counter_param_latch[1..1]) & counter_param_latch[2..2]); + sel_param_odd_CP_unused = ((counter_param_latch[0..0] & (! counter_param_latch[1..1])) & counter_param_latch[2..2]); + sel_type_c0 = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c1 = (((counter_type_latch[0..0] & (! counter_type_latch[1..1])) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c2 = ((((! counter_type_latch[0..0]) & counter_type_latch[1..1]) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c3 = (((counter_type_latch[0..0] & counter_type_latch[1..1]) & counter_type_latch[2..2]) & (! counter_type_latch[3..3])); + sel_type_c4 = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & counter_type_latch[3..3]); + sel_type_cplf = ((((! counter_type_latch[0..0]) & counter_type_latch[1..1]) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_m = (((counter_type_latch[0..0] & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_n = ((((! counter_type_latch[0..0]) & (! counter_type_latch[1..1])) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + sel_type_vco = (((counter_type_latch[0..0] & counter_type_latch[1..1]) & (! counter_type_latch[2..2])) & (! counter_type_latch[3..3])); + seq_addr_wire[] = B"00110101"; + seq_sload_value[] = B"110110"; + shift_reg_clear = (read_init_state.q # read_init_nominal_state.q); + shift_reg_load_enable = ((idle_state.q & write_param) & (! ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0]))); + shift_reg_load_nominal_enable = ((idle_state.q & write_param) & ((((((! counter_type[3..3]) & (! counter_type[2..2])) & (! counter_type[1..1])) & counter_param[2..2]) & counter_param[1..1]) & counter_param[0..0])); + shift_reg_serial_in = scan_cache_out; + shift_reg_serial_out = ((((((((shift_reg[17].q & shift_reg_width_select[0..0]) # (shift_reg[17].q & shift_reg_width_select[1..1])) # (shift_reg[17].q & shift_reg_width_select[2..2])) # (shift_reg[17].q & shift_reg_width_select[3..3])) # (shift_reg[17].q & shift_reg_width_select[4..4])) # (shift_reg[17].q & shift_reg_width_select[5..5])) # (shift_reg[17].q & shift_reg_width_select[6..6])) # (shift_reg[17].q & shift_reg_width_select[7..7])); + shift_reg_shift_enable = ((read_data_state.q # read_last_state.q) # write_data_state.q); + shift_reg_shift_nominal_enable = ((read_data_nominal_state.q # read_last_nominal_state.q) # write_nominal_state.q); + shift_reg_width_select[] = width_decoder_select[]; + w1565w = B"0"; + w1592w = B"0"; + w64w = B"0"; + width_counter_done = (((((! cntr3.q[0..0]) & (! cntr3.q[1..1])) & (! cntr3.q[2..2])) & (! cntr3.q[3..3])) & (! cntr3.q[4..4])); + width_counter_enable = ((((read_first_state.q # read_data_state.q) # write_data_state.q) # read_data_nominal_state.q) # write_nominal_state.q); + width_counter_sload = (((read_init_state.q # write_init_state.q) # read_init_nominal_state.q) # write_init_nominal_state.q); + width_counter_sload_value[] = width_decoder_out[]; + width_decoder_out[] = (((((( B"0", B"0", B"0", B"0", B"0") # ( width_decoder_select[2..2], B"0", B"0", B"0", width_decoder_select[2..2])) # ( B"0", B"0", B"0", B"0", width_decoder_select[3..3])) # ( B"0", B"0", width_decoder_select[5..5], width_decoder_select[5..5], width_decoder_select[5..5])) # ( B"0", B"0", B"0", width_decoder_select[6..6], B"0")) # ( B"0", B"0", width_decoder_select[7..7], B"0", B"0")); + width_decoder_select[] = ( ((sel_type_cplf & sel_param_low_r) # (sel_type_cplf & sel_param_odd_CP_unused)), (sel_type_cplf & sel_param_high_i_postscale), ((((((((((((((sel_type_n & sel_param_high_i_postscale) # (sel_type_n & sel_param_low_r)) # (sel_type_m & sel_param_high_i_postscale)) # (sel_type_m & sel_param_low_r)) # (sel_type_c0 & sel_param_high_i_postscale)) # (sel_type_c0 & sel_param_low_r)) # (sel_type_c1 & sel_param_high_i_postscale)) # (sel_type_c1 & sel_param_low_r)) # (sel_type_c2 & sel_param_high_i_postscale)) # (sel_type_c2 & sel_param_low_r)) # (sel_type_c3 & sel_param_high_i_postscale)) # (sel_type_c3 & sel_param_low_r)) # (sel_type_c4 & sel_param_high_i_postscale)) # (sel_type_c4 & sel_param_low_r)), w1592w, ((sel_type_cplf & sel_param_bypass_LF_unused) # (sel_type_cplf & sel_param_c)), ((sel_type_n & sel_param_nominal_count) # (sel_type_m & sel_param_nominal_count)), w1565w, (((((((((((((((sel_type_vco & sel_param_high_i_postscale) # (sel_type_n & sel_param_bypass_LF_unused)) # (sel_type_n & sel_param_odd_CP_unused)) # (sel_type_m & sel_param_bypass_LF_unused)) # (sel_type_m & sel_param_odd_CP_unused)) # (sel_type_c0 & sel_param_bypass_LF_unused)) # (sel_type_c0 & sel_param_odd_CP_unused)) # (sel_type_c1 & sel_param_bypass_LF_unused)) # (sel_type_c1 & sel_param_odd_CP_unused)) # (sel_type_c2 & sel_param_bypass_LF_unused)) # (sel_type_c2 & sel_param_odd_CP_unused)) # (sel_type_c3 & sel_param_bypass_LF_unused)) # (sel_type_c3 & sel_param_odd_CP_unused)) # (sel_type_c4 & sel_param_bypass_LF_unused)) # (sel_type_c4 & sel_param_odd_CP_unused))); + write_from_rom = GND; +END; +--VALID FILE diff --git a/FPGA_quartus_GE/firebee1.bdf b/FPGA_quartus_GE/firebee1.bdf new file mode 100644 index 0000000..46507a2 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.bdf @@ -0,0 +1,5837 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2010 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +//#pragma file_not_in_maxplusii_format +(header "graphic" (version "1.3")) +(properties + (page_setup "header_footer\nDate: %D\n%f\nProject: %j\n\nPage %p of %P\nRevision: %a\nmargin\n1\n1\n1\n1\norientation\n1\npaper_size\n9\npaper_source\n15\nfit_page_wide\n1\nfit_page_tall\n1\n") +) +(pin + (input) + (rect 208 1392 376 1408) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_ALE" (rect 9 0 60 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 136 1408 192 1424)) +) +(pin + (input) + (rect 992 936 1160 952) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_WR" (rect 9 0 66 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 952 1000 968)) +) +(pin + (input) + (rect 168 296 336 312) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "CLK33M" (rect 9 0 64 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 104 312 176 328)) +) +(pin + (input) + (rect 992 960 1160 976) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS1" (rect 5 0 67 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 976 1000 992)) +) +(pin + (input) + (rect 992 984 1160 1000) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS2" (rect 5 0 67 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 1000 1000 1016)) +) +(pin + (input) + (rect 1008 360 1176 376) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_CS3" (rect 5 0 67 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 952 376 1008 392)) +) +(pin + (input) + (rect 992 1008 1160 1024) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_SIZE0" (rect 5 0 69 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 1024 1000 1040)) +) +(pin + (input) + (rect 992 1032 1160 1048) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "FB_SIZE1" (rect 5 0 69 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 1048 1000 1064)) +) +(pin + (input) + (rect 992 1056 1160 1072) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_BURST" (rect 5 0 87 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 1072 1000 1088)) +) +(pin + (input) + (rect 936 1168 1104 1184) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "LP_BUSY" (rect 5 0 68 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1184 952 1200)) +) +(pin + (input) + (rect 856 1200 1024 1216) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nACSI_DRQ" (rect 5 0 85 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 808 1216 864 1232)) +) +(pin + (input) + (rect 856 1224 1024 1240) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nACSI_INT" (rect 5 0 75 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 808 1240 864 1256)) +) +(pin + (input) + (rect 936 1392 1104 1408) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "RxD" (rect 5 0 32 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1408 944 1424)) +) +(pin + (input) + (rect 936 1416 1104 1432) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "CTS" (rect 5 0 33 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1432 944 1448)) +) +(pin + (input) + (rect 936 1440 1104 1456) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "RI" (rect 5 0 19 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1456 944 1472)) +) +(pin + (input) + (rect 936 1464 1104 1480) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "DCD" (rect 5 0 36 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1480 944 1496)) +) +(pin + (input) + (rect 608 1488 776 1504) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "AMKB_RX" (rect 5 0 69 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 560 1504 616 1520)) +) +(pin + (input) + (rect 608 1512 776 1528) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "PIC_AMKB_RX" (rect 5 0 101 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 560 1528 616 1544)) +) +(pin + (input) + (rect 936 1544 1104 1560) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "IDE_RDY" (rect 5 0 66 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1560 944 1576)) +) +(pin + (input) + (rect 936 1568 1104 1584) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "IDE_INT" (rect 5 0 59 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1584 944 1600)) +) +(pin + (input) + (rect 936 1592 1104 1608) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "WP_CF_CARD" (rect 5 0 102 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1608 944 1624)) +) +(pin + (input) + (rect 872 1672 1040 1688) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "TRACK00" (rect 5 0 68 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1688 880 1704)) +) +(pin + (input) + (rect 872 1696 1040 1712) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nWP" (rect 5 0 35 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1712 880 1728)) +) +(pin + (input) + (rect 872 1744 1040 1760) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nDCHG" (rect 5 0 55 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1760 880 1776)) +) +(pin + (input) + (rect 936 1776 1104 1792) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "SD_DATA0" (rect 5 0 76 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1792 944 1808)) +) +(pin + (input) + (rect 936 1800 1104 1816) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "SD_DATA1" (rect 5 0 76 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1816 944 1832)) +) +(pin + (input) + (rect 936 1824 1104 1840) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "SD_DATA2" (rect 5 0 76 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1840 944 1856)) +) +(pin + (input) + (rect 936 1848 1128 1864) + (text "INPUT" (rect 157 0 193 13)(font "Arial" (font_size 6))) + (text "SD_CARD_DEDECT" (rect 5 0 140 15)(font "Arial" )) + (pt 192 8) + (drawing + (line (pt 116 12)(pt 141 12)(line_width 1)) + (line (pt 116 4)(pt 141 4)(line_width 1)) + (line (pt 145 8)(pt 192 8)(line_width 1)) + (line (pt 116 12)(pt 116 4)(line_width 1)) + (line (pt 141 4)(pt 145 8)(line_width 1)) + (line (pt 141 12)(pt 145 8)(line_width 1)) + ) + (text "VCC" (rect 160 7 184 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1864 952 1880)) +) +(pin + (input) + (rect 872 1360 1040 1376) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "MIDI_IN" (rect 5 0 55 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1376 880 1392)) +) +(pin + (input) + (rect 936 1256 1104 1272) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nSCSI_DRQ" (rect 5 0 86 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1272 944 1288)) +) +(pin + (input) + (rect 936 1872 1104 1888) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "SD_WP" (rect 5 0 55 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 880 1888 952 1904)) +) +(pin + (input) + (rect 872 1720 1040 1736) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nRD_DATA" (rect 5 0 78 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1736 880 1752)) +) +(pin + (input) + (rect 936 1280 1104 1296) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nSCSI_C_D" (rect 5 0 84 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1296 944 1312)) +) +(pin + (input) + (rect 936 1304 1104 1320) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nSCSI_I_O" (rect 5 0 76 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1320 944 1336)) +) +(pin + (input) + (rect 936 1328 1104 1344) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nSCSI_MSG" (rect 5 0 85 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 888 1344 944 1360)) +) +(pin + (input) + (rect 992 1104 1160 1120) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nDACK0" (rect 5 0 60 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 936 1120 1000 1136)) +) +(pin + (input) + (rect 984 2592 1152 2608) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "PIC_INT" (rect 5 0 59 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 928 2608 1000 2624)) +) +(pin + (input) + (rect 992 912 1160 928) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nFB_OE" (rect 5 0 59 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 944 928 1000 944)) +) +(pin + (input) + (rect 360 2616 528 2632) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "TOUT0" (rect 5 0 51 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 304 2632 368 2648)) +) +(pin + (input) + (rect 360 2504 528 2520) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nMASTER" (rect 5 0 69 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 304 2520 368 2536)) +) +(pin + (input) + (rect 984 2640 1152 2656) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "DVI_INT" (rect 5 0 58 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 928 2656 992 2672)) +) +(pin + (input) + (rect 360 2408 528 2424) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nDACK1" (rect 5 0 60 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 304 2424 368 2440)) +) +(pin + (input) + (rect 984 2664 1152 2680) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nPCI_INTD" (rect 5 0 78 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 936 2680 992 2696)) +) +(pin + (input) + (rect 984 2688 1152 2704) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nPCI_INTC" (rect 5 0 78 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 936 2704 992 2720)) +) +(pin + (input) + (rect 984 2712 1152 2728) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nPCI_INTB" (rect 5 0 76 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 936 2728 992 2744)) +) +(pin + (input) + (rect 984 2736 1152 2752) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nPCI_INTA" (rect 5 0 75 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 928 2752 1000 2768)) +) +(pin + (input) + (rect 984 2616 1152 2632) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "E0_INT" (rect 5 0 53 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 928 2632 992 2648)) +) +(pin + (input) + (rect 872 1648 1040 1664) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "nINDEX" (rect 5 0 55 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 816 1664 880 1680)) +) +(pin + (input) + (rect 872 1624 1040 1640) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "HD_DD" (rect 5 0 55 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 808 1632 872 1648)) +) +(pin + (input) + (rect 96 -288 264 -272) + (text "INPUT" (rect 133 0 169 13)(font "Arial" (font_size 6))) + (text "MAIN_CLK" (rect 9 0 78 15)(font "Arial" )) + (pt 168 8) + (drawing + (line (pt 92 12)(pt 117 12)(line_width 1)) + (line (pt 92 4)(pt 117 4)(line_width 1)) + (line (pt 121 8)(pt 168 8)(line_width 1)) + (line (pt 92 12)(pt 92 4)(line_width 1)) + (line (pt 117 4)(pt 121 8)(line_width 1)) + (line (pt 117 12)(pt 121 8)(line_width 1)) + ) + (text "VCC" (rect 136 7 160 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 56 -304 120 -288)) +) +(pin + (input) + (rect 664 440 840 456) + (text "INPUT" (rect 141 0 177 13)(font "Arial" (font_size 6))) + (text "nRSTO_MCF" (rect 5 0 89 15)(font "Arial" )) + (pt 176 8) + (drawing + (line (pt 100 12)(pt 125 12)(line_width 1)) + (line (pt 100 4)(pt 125 4)(line_width 1)) + (line (pt 129 8)(pt 176 8)(line_width 1)) + (line (pt 100 12)(pt 100 4)(line_width 1)) + (line (pt 125 4)(pt 129 8)(line_width 1)) + (line (pt 125 12)(pt 129 8)(line_width 1)) + ) + (text "VCC" (rect 144 7 168 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 600 448 664 464)) +) +(pin + (output) + (rect 864 288 1040 304) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "CLK24M576" (rect 90 0 170 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1040 304 1112 320)) +) +(pin + (output) + (rect 1832 832 2008 848) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "LP_STR" (rect 90 0 144 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 840 2064 856)) +) +(pin + (output) + (rect 1832 936 2008 952) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nACSI_ACK" (rect 90 0 166 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 952 2072 968)) +) +(pin + (output) + (rect 1832 960 2008 976) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nACSI_RESET" (rect 90 0 185 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 976 2072 992)) +) +(pin + (output) + (rect 1832 984 2008 1000) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nACSI_CS" (rect 90 0 158 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 1000 2072 1016)) +) +(pin + (output) + (rect 1832 1008 2008 1024) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "ACSI_DIR" (rect 90 0 154 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 1024 2064 1040)) +) +(pin + (output) + (rect 1832 1032 2008 1048) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "ACSI_A1" (rect 90 0 146 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 1048 2072 1064)) +) +(pin + (output) + (rect 1840 1112 2016 1128) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSCSI_ACK" (rect 90 0 167 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2016 1128 2072 1144)) +) +(pin + (output) + (rect 1840 1136 2016 1152) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSCSI_ATN" (rect 90 0 166 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2016 1152 2080 1168)) +) +(pin + (output) + (rect 1840 1160 2016 1176) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "SCSI_DIR" (rect 90 0 156 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2016 1176 2072 1192)) +) +(pin + (output) + (rect 1920 1264 2096 1280) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "MIDI_OLR" (rect 90 0 156 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1280 2152 1296)) +) +(pin + (output) + (rect 1920 1288 2096 1304) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "MIDI_TLR" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1304 2152 1320)) +) +(pin + (output) + (rect 1840 1320 2016 1336) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "TxD" (rect 90 0 114 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2016 1336 2080 1352)) +) +(pin + (output) + (rect 1840 1344 2016 1360) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "RTS" (rect 90 0 118 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2016 1360 2080 1376)) +) +(pin + (output) + (rect 1848 1368 2024 1384) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "DTR" (rect 90 0 119 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1384 2088 1400)) +) +(pin + (output) + (rect 2112 1400 2288 1416) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "AMKB_TX" (rect 90 0 152 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2288 1416 2392 1448)) +) +(pin + (output) + (rect 1848 1432 2024 1448) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "IDE_RES" (rect 90 0 151 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1448 2088 1464)) +) +(pin + (output) + (rect 1848 1456 2024 1472) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nIDE_CS0" (rect 90 0 158 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1472 2080 1488)) +) +(pin + (output) + (rect 1856 1480 2032 1496) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nIDE_CS1" (rect 90 0 158 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2032 1496 2088 1512)) +) +(pin + (output) + (rect 1848 1504 2024 1520) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nIDE_WR" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1520 2080 1536)) +) +(pin + (output) + (rect 1848 1528 2024 1544) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nIDE_RD" (rect 90 0 151 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1544 2080 1560)) +) +(pin + (output) + (rect 1848 1552 2024 1568) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nCF_CS0" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1568 2088 1584)) +) +(pin + (output) + (rect 1848 1576 2024 1592) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nCF_CS1" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2024 1592 2088 1608)) +) +(pin + (output) + (rect 1920 1608 2096 1624) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nROM3" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1624 2152 1640)) +) +(pin + (output) + (rect 1920 1632 2096 1648) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nROM4" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1648 2152 1664)) +) +(pin + (output) + (rect 1920 1656 2096 1672) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nRP_UDS" (rect 90 0 157 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1672 2152 1688)) +) +(pin + (output) + (rect 1920 1680 2096 1696) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nRP_LDS" (rect 90 0 154 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2096 1696 2152 1712)) +) +(pin + (output) + (rect 1856 1856 2032 1872) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSDSEL" (rect 90 0 145 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2032 1872 2096 1888)) +) +(pin + (output) + (rect 2136 1832 2312 1848) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nWR_GATE" (rect 90 0 166 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 1848 2376 1864)) +) +(pin + (output) + (rect 2136 1808 2312 1824) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nWR" (rect 90 0 121 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 1824 2376 1840)) +) +(pin + (output) + (rect 1928 1912 2104 1928) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "YM_QA" (rect 90 0 136 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2104 1928 2168 1944)) +) +(pin + (output) + (rect 1928 1936 2104 1952) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "YM_QB" (rect 90 0 137 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2104 1952 2168 1968)) +) +(pin + (output) + (rect 1928 1960 2104 1976) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "YM_QC" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2104 1976 2168 1992)) +) +(pin + (output) + (rect 1856 2040 2032 2056) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "SD_CLK" (rect 90 0 146 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2032 2056 2096 2072)) +) +(pin + (output) + (rect 1856 1712 2032 1728) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "DSA_D" (rect 90 0 137 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2032 1728 2096 1744)) +) +(pin + (output) + (rect 2080 72 2256 88) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VR[7..0]" (rect 90 0 139 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2256 88 2344 232)) +) +(pin + (output) + (rect 2000 96 2176 112) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VG[7..0]" (rect 90 0 139 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2176 112 2264 256)) +) +(pin + (output) + (rect 1912 120 2088 136) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VB[7..0]" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2088 136 2176 280)) +) +(pin + (output) + (rect 2528 320 2704 336) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VA[12..0]" (rect 90 0 145 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2704 336 2776 560)) +) +(pin + (output) + (rect 2400 344 2576 360) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVWE" (rect 90 0 128 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2576 360 2640 392)) +) +(pin + (output) + (rect 2304 368 2480 384) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVCAS" (rect 90 0 134 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2480 384 2552 416)) +) +(pin + (output) + (rect 2208 392 2384 408) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVRAS" (rect 90 0 134 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2384 408 2456 440)) +) +(pin + (output) + (rect 2040 416 2216 432) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nVCS" (rect 90 0 126 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2216 432 2280 464)) +) +(pin + (output) + (rect 1944 560 2120 576) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VDM[3..0]" (rect 90 0 150 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2120 576 2192 656)) +) +(pin + (output) + (rect 1832 264 2008 280) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nPD_VGA" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 280 2064 296)) +) +(pin + (output) + (rect 1832 2416 2008 2432) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nIRQ[7..2]" (rect 90 0 153 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 2432 2112 2576)) +) +(pin + (output) + (rect 864 24 1040 40) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "CLK25M" (rect 90 0 145 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1040 40 1096 56)) +) +(pin + (output) + (rect 1832 2632 2008 2648) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "TIN0" (rect 90 0 120 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 2648 2064 2664)) +) +(pin + (output) + (rect 1824 3280 2000 3296) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSRCS" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2000 3296 2056 3312)) +) +(pin + (output) + (rect 1824 3304 2000 3320) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSRBLE" (rect 90 0 145 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2000 3320 2056 3336)) +) +(pin + (output) + (rect 1824 3328 2000 3344) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSRBHE" (rect 90 0 147 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2000 3344 2056 3360)) +) +(pin + (output) + (rect 1824 3352 2000 3368) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSRWE" (rect 90 0 140 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2000 3368 2056 3384)) +) +(pin + (output) + (rect 616 2408 792 2424) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nDREQ1" (rect 90 0 147 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 792 2424 856 2440)) +) +(pin + (output) + (rect 608 2128 784 2144) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "LED_FPGA_OK" (rect 90 0 191 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 784 2144 848 2176)) +) +(pin + (output) + (rect 1824 3376 2000 3392) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSROE" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2000 3392 2064 3408)) +) +(pin + (output) + (rect 1944 440 2120 456) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VCKE" (rect 90 0 127 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2120 456 2184 488)) +) +(pin + (output) + (rect 2056 728 2232 744) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nFB_TA" (rect 90 0 140 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2232 744 2288 760)) +) +(pin + (output) + (rect 2712 880 2888 896) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nDDR_CLK" (rect 90 0 166 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2888 896 2960 928)) +) +(pin + (output) + (rect 2536 752 2712 768) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "DDR_CLK" (rect 90 0 158 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2712 768 2784 800)) +) +(pin + (output) + (rect 1832 464 2008 480) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "BA[1..0]" (rect 90 0 138 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 480 2080 528)) +) +(pin + (output) + (rect 2136 -72 2312 -56) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "VSYNC_PAD" (rect 90 0 173 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 -56 2400 -24)) +) +(pin + (output) + (rect 2712 -88 2888 -72) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "HSYNC_PAD" (rect 90 0 176 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2888 -72 2976 -40)) +) +(pin + (output) + (rect 2712 32 2888 48) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nBLANK_PAD" (rect 90 0 180 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2888 48 2976 80)) +) +(pin + (output) + (rect 2712 160 2891 176) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "PIXEL_CLK_PAD" (rect 90 0 202 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2888 176 2976 208)) +) +(pin + (output) + (rect 1832 216 2008 232) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSYNC" (rect 90 0 137 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 232 2112 264)) +) +(pin + (output) + (rect 2136 1736 2312 1752) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nMOT_ON" (rect 90 0 157 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 1752 2376 1768)) +) +(pin + (output) + (rect 2136 1760 2312 1776) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSTEP_DIR" (rect 90 0 167 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 1776 2376 1792)) +) +(pin + (output) + (rect 2136 1784 2312 1800) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "nSTEP" (rect 90 0 134 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2312 1800 2376 1816)) +) +(pin + (output) + (rect 840 48 1016 64) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "CLKUSB" (rect 90 0 147 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 1000 64 1056 80)) +) +(pin + (output) + (rect 1832 856 2008 872) + (text "OUTPUT" (rect 1 0 51 13)(font "Arial" (font_size 6))) + (text "LPDIR" (rect 90 0 132 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 52 4)(pt 78 4)(line_width 1)) + (line (pt 52 12)(pt 78 12)(line_width 1)) + (line (pt 52 12)(pt 52 4)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 82 8)(pt 78 12)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + ) + (annotation_block (location)(rect 2008 864 2064 880)) +) +(pin + (bidir) + (rect 1840 1088 2016 1104) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "SCSI_PAR" (rect 90 0 159 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2016 1104 2080 1120)) +) +(pin + (bidir) + (rect 1840 1184 2016 1200) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "nSCSI_RST" (rect 90 0 167 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2016 1200 2072 1216)) +) +(pin + (bidir) + (rect 1840 1208 2016 1224) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "nSCSI_SEL" (rect 90 0 166 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2016 1224 2080 1240)) +) +(pin + (bidir) + (rect 1840 1232 2016 1248) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "nSCSI_BUSY" (rect 90 0 177 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2016 1248 2072 1264)) +) +(pin + (bidir) + (rect 1856 1992 2032 2008) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "SD_CD_DATA3" (rect 90 0 191 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2032 2008 2096 2024)) +) +(pin + (bidir) + (rect 1856 2016 2032 2032) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "SD_CMD_D1" (rect 90 0 177 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2032 2032 2096 2048)) +) +(pin + (bidir) + (rect 1936 1064 2112 1080) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "SCSI_D[7..0]" (rect 90 0 172 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2112 1080 2176 1208)) +) +(pin + (bidir) + (rect 1904 888 2080 904) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "ACSI_D[7..0]" (rect 90 0 171 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2080 904 2144 1032)) +) +(pin + (bidir) + (rect 1960 808 2136 824) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "LP_D[7..0]" (rect 90 0 157 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2136 824 2200 952)) +) +(pin + (bidir) + (rect 176 1360 352 1376) + (text "BIDIR" (rect 151 0 182 13)(font "Arial" (font_size 6))) + (text "FB_AD[31..0]" (rect 5 0 88 15)(font "Arial" )) + (pt 176 8) + (drawing + (line (pt 120 4)(pt 98 4)(line_width 1)) + (line (pt 176 8)(pt 124 8)(line_width 1)) + (line (pt 120 12)(pt 98 12)(line_width 1)) + (line (pt 98 4)(pt 94 8)(line_width 1)) + (line (pt 98 12)(pt 94 8)(line_width 1)) + (line (pt 120 4)(pt 124 8)(line_width 1)) + (line (pt 124 8)(pt 120 12)(line_width 1)) + ) + (flipy) + (text "VCC" (rect 152 7 176 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 96 840 168 1352)) +) +(pin + (bidir) + (rect 2104 3232 2280 3248) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "IO[17..0]" (rect 90 0 143 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2280 3248 2344 3536)) +) +(pin + (bidir) + (rect 1944 3256 2120 3272) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "SRD[15..0]" (rect 90 0 159 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2120 3272 2184 3528)) +) +(pin + (bidir) + (rect 2040 536 2216 552) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "VDQS[3..0]" (rect 90 0 159 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2216 552 2288 632)) +) +(pin + (bidir) + (rect 2648 296 2824 312) + (text "BIDIR" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "VD[31..0]" (rect 90 0 147 15)(font "Arial" )) + (pt 0 8) + (drawing + (line (pt 56 4)(pt 78 4)(line_width 1)) + (line (pt 0 8)(pt 52 8)(line_width 1)) + (line (pt 56 12)(pt 78 12)(line_width 1)) + (line (pt 78 4)(pt 82 8)(line_width 1)) + (line (pt 78 12)(pt 82 8)(line_width 1)) + (line (pt 56 4)(pt 52 8)(line_width 1)) + (line (pt 52 8)(pt 56 12)(line_width 1)) + ) + (text "VCC" (rect 4 7 28 20)(font "Arial" (font_size 6))) + (annotation_block (location)(rect 2824 312 2896 840)) +) +(symbol + (rect 544 2024 688 2088) + (text "lpm_counter0" (rect 33 1 148 20)(font "Arial" (font_size 10))) + (text "inst18" (rect 8 48 48 63)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 62 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 144 40) + (output) + (text "q[17..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[17..0]" (rect 89 34 140 50)(font "Arial" (font_size 8))) + (line (pt 144 40)(pt 128 40)(line_width 3)) + ) + (drawing + (text "up counter" (rect 84 17 152 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 48)(line_width 1)) + (line (pt 128 48)(pt 16 48)(line_width 1)) + (line (pt 16 48)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) +(symbol + (rect 440 2120 488 2152) + (text "WIRE" (rect 1 0 31 13)(font "Arial" (font_size 6))) + (text "inst3" (rect 3 21 34 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 32 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 14 7)(pt 32 16)(line_width 1)) + (line (pt 14 25)(pt 14 7)(line_width 1)) + (line (pt 14 25)(pt 32 16)(line_width 1)) + ) +) +(symbol + (rect 464 1336 608 1432) + (text "lpm_ff0" (rect 52 1 114 20)(font "Arial" (font_size 10))) + (text "inst1" (rect 8 80 39 95)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 73 16)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 93 42)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 26 42 62 58)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "enable" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "enable" (rect 20 58 64 74)(font "Arial" (font_size 8))) + (line (pt 0 64)(pt 16 64)(line_width 1)) + ) + (port + (pt 144 56) + (output) + (text "q[31..0]" (rect 0 0 51 16)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 89 50 140 66)(font "Arial" (font_size 8))) + (line (pt 144 56)(pt 128 56)(line_width 3)) + ) + (drawing + (text "DFF" (rect 109 17 136 32)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 80)(line_width 1)) + (line (pt 128 80)(pt 16 80)(line_width 1)) + (line (pt 16 80)(pt 16 16)(line_width 1)) + (line (pt 16 42)(pt 22 48)(line_width 1)) + (line (pt 22 48)(pt 16 54)(line_width 1)) + ) +) +(symbol + (rect 1880 696 1944 776) + (text "NOR4" (rect 1 0 34 13)(font "Arial" (font_size 6))) + (text "inst2" (rect 3 69 34 84)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 48) + (input) + (text "IN3" (rect 2 39 26 55)(font "Courier New" (bold))(invisible)) + (text "IN3" (rect 2 39 26 55)(font "Courier New" (bold))(invisible)) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 0 64) + (input) + (text "IN4" (rect 2 55 26 71)(font "Courier New" (bold))(invisible)) + (text "IN4" (rect 2 55 26 71)(font "Courier New" (bold))(invisible)) + (line (pt 0 64)(pt 14 64)(line_width 1)) + ) + (port + (pt 64 40) + (output) + (text "OUT" (rect 48 31 72 47)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 31 72 47)(font "Courier New" (bold))(invisible)) + (line (pt 56 40)(pt 64 40)(line_width 1)) + ) + (drawing + (line (pt 14 29)(pt 25 29)(line_width 1)) + (line (pt 14 52)(pt 25 52)(line_width 1)) + (line (pt 14 29)(pt 14 13)(line_width 1)) + (line (pt 14 67)(pt 14 51)(line_width 1)) + (arc (pt 25 51)(pt 48 40)(rect -4 -7 55 52)(line_width 1)) + (arc (pt 48 40)(pt 25 29)(rect -4 29 55 88)(line_width 1)) + (arc (pt 8 45)(pt 8 35)(rect -13 24 20 57)(line_width 1)) + (circle (rect 48 36 56 44)(line_width 1)) + ) +) +(symbol + (rect 2632 872 2680 904) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst4" (rect 3 21 34 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1896 -88 2128 32) + (text "altddio_out3" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst5" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 61 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 57 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 50 16)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 243 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "low" (rect 92 84 114 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2464 -104 2696 16) + (text "altddio_out3" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst6" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 61 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 57 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 50 16)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 243 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "low" (rect 92 84 114 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2464 16 2696 136) + (text "altddio_out3" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst8" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 61 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 57 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 50 16)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 243 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "low" (rect 92 84 114 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2464 144 2696 264) + (text "altddio_out3" (rect 81 1 183 20)(font "Arial" (font_size 10))) + (text "inst9" (rect 8 104 39 119)(font "Arial" )) + (port + (pt 0 24) + (input) + (text "datain_h" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "datain_h" (rect 4 11 61 27)(font "Arial" (font_size 8))) + (line (pt 0 24)(pt 88 24)(line_width 1)) + ) + (port + (pt 0 40) + (input) + (text "datain_l" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "datain_l" (rect 4 27 57 43)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 88 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "outclock" (rect 0 0 57 16)(font "Arial" (font_size 8))) + (text "outclock" (rect 4 43 61 59)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 88 56)(line_width 1)) + ) + (port + (pt 232 24) + (output) + (text "dataout" (rect 0 0 50 16)(font "Arial" (font_size 8))) + (text "dataout" (rect 193 11 243 27)(font "Arial" (font_size 8))) + (line (pt 232 24)(pt 152 24)(line_width 1)) + ) + (drawing + (text "ddio" (rect 110 27 138 43)(font "Arial" (font_size 8))) + (text "output" (rect 105 42 147 58)(font "Arial" (font_size 8))) + (text "power up" (rect 92 74 152 89)(font "Arial" )) + (text "low" (rect 92 84 114 99)(font "Arial" )) + (line (pt 88 16)(pt 152 16)(line_width 1)) + (line (pt 152 16)(pt 152 96)(line_width 1)) + (line (pt 152 96)(pt 88 96)(line_width 1)) + (line (pt 88 96)(pt 88 16)(line_width 1)) + ) +) +(symbol + (rect 2368 120 2400 152) + (text "GND" (rect 6 8 19 33)(font "Arial" (font_size 6))(vertical)) + (text "inst10" (rect -1 3 14 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 32 16) + (output) + (text "1" (rect 18 0 26 16)(font "Courier New" (bold))(invisible)) + (text "1" (rect 20 18 36 26)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 24 16)(pt 32 16)(line_width 1)) + ) + (drawing + (line (pt 24 8)(pt 16 16)(line_width 1)) + (line (pt 16 16)(pt 24 24)(line_width 1)) + (line (pt 24 8)(pt 24 24)(line_width 1)) + ) + (rotate270) +) +(symbol + (rect 2408 144 2424 176) + (text "VCC" (rect 0 7 13 31)(font "Arial" (font_size 6))(vertical)) + (text "inst11" (rect 5 3 20 43)(font "Arial" )(vertical)(invisible)) + (port + (pt 16 16) + (output) + (text "1" (rect 19 7 27 23)(font "Courier New" (bold))(invisible)) + (text "1" (rect 7 19 23 27)(font "Courier New" (bold))(vertical)(invisible)) + (line (pt 16 16)(pt 8 16)(line_width 1)) + ) + (drawing + (line (pt 8 8)(pt 8 24)(line_width 1)) + ) + (flipy_rotate90) +) +(symbol + (rect 1800 1728 1848 1760) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst14" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1856 1752 1904 1784) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst15" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1800 1776 1848 1808) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst16" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1856 1800 1904 1832) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst17" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 1800 1824 1848 1856) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst19" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 448 -352 752 -104) + (text "altpll2" (rect 132 1 179 20)(font "Arial" (font_size 10))) + (text "inst12" (rect 8 229 48 244)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 44 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 304 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 287 56 303 72)(font "Arial" (font_size 8))) + (line (pt 304 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 304 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 287 80 303 96)(font "Arial" (font_size 8))) + (line (pt 304 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 304 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 287 104 303 120)(font "Arial" (font_size 8))) + (line (pt 304 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 304 144) + (output) + (text "c3" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c3" (rect 287 128 303 144)(font "Arial" (font_size 8))) + (line (pt 304 144)(pt 272 144)(line_width 1)) + ) + (port + (pt 304 168) + (output) + (text "c4" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c4" (rect 287 152 303 168)(font "Arial" (font_size 8))) + (line (pt 304 168)(pt 272 168)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 229 230 295 245)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 244 82)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 266 99)(font "Arial" )) + (text "Clk " (rect 59 111 83 126)(font "Arial" )) + (text "Ratio" (rect 85 111 119 126)(font "Arial" )) + (text "Ph (dg)" (rect 119 111 166 126)(font "Arial" )) + (text "DC (%)" (rect 164 111 211 126)(font "Arial" )) + (text "c0" (rect 63 129 78 144)(font "Arial" )) + (text "4/1" (rect 91 129 111 144)(font "Arial" )) + (text "240.00" (rect 120 129 164 144)(font "Arial" )) + (text "50.00" (rect 169 129 205 144)(font "Arial" )) + (text "c1" (rect 63 147 78 162)(font "Arial" )) + (text "4/1" (rect 91 147 111 162)(font "Arial" )) + (text "0.00" (rect 127 147 155 162)(font "Arial" )) + (text "50.00" (rect 169 147 205 162)(font "Arial" )) + (text "c2" (rect 63 165 78 180)(font "Arial" )) + (text "4/1" (rect 91 165 111 180)(font "Arial" )) + (text "180.00" (rect 120 165 164 180)(font "Arial" )) + (text "50.00" (rect 169 165 205 180)(font "Arial" )) + (text "c3" (rect 63 183 78 198)(font "Arial" )) + (text "4/1" (rect 91 183 111 198)(font "Arial" )) + (text "105.00" (rect 120 183 164 198)(font "Arial" )) + (text "50.00" (rect 169 183 205 198)(font "Arial" )) + (text "c4" (rect 63 201 78 216)(font "Arial" )) + (text "2/1" (rect 91 201 111 216)(font "Arial" )) + (text "270.00" (rect 120 201 164 216)(font "Arial" )) + (text "50.00" (rect 169 201 205 216)(font "Arial" )) + (line (pt 0 0)(pt 305 0)(line_width 1)) + (line (pt 305 0)(pt 305 249)(line_width 1)) + (line (pt 0 249)(pt 305 249)(line_width 1)) + (line (pt 0 0)(pt 0 249)(line_width 1)) + (line (pt 56 108)(pt 206 108)(line_width 1)) + (line (pt 56 125)(pt 206 125)(line_width 1)) + (line (pt 56 143)(pt 206 143)(line_width 1)) + (line (pt 56 161)(pt 206 161)(line_width 1)) + (line (pt 56 179)(pt 206 179)(line_width 1)) + (line (pt 56 197)(pt 206 197)(line_width 1)) + (line (pt 56 215)(pt 206 215)(line_width 1)) + (line (pt 56 108)(pt 56 215)(line_width 1)) + (line (pt 82 108)(pt 82 215)(line_width 3)) + (line (pt 116 108)(pt 116 215)(line_width 3)) + (line (pt 161 108)(pt 161 215)(line_width 3)) + (line (pt 205 108)(pt 205 215)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 232)(line_width 1)) + (line (pt 48 232)(pt 272 232)(line_width 1)) + (line (pt 48 56)(pt 48 232)(line_width 1)) + ) +) +(symbol + (rect -16 680 32 712) + (text "NOT" (rect 1 0 26 13)(font "Arial" (font_size 6))) + (text "inst23" (rect 3 21 43 36)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (text "IN" (rect 2 7 18 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 13 16)(line_width 1)) + ) + (port + (pt 48 16) + (output) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 32 7 56 23)(font "Courier New" (bold))(invisible)) + (line (pt 39 16)(pt 48 16)(line_width 1)) + ) + (drawing + (line (pt 13 25)(pt 13 7)(line_width 1)) + (line (pt 13 7)(pt 31 16)(line_width 1)) + (line (pt 13 25)(pt 31 16)(line_width 1)) + (circle (rect 31 12 39 20)(line_width 1)) + ) +) +(symbol + (rect 192 472 408 768) + (text "altpll_reconfig1" (rect 54 1 182 20)(font "Arial" (font_size 10))) + (text "inst7" (rect 8 277 39 292)(font "Arial" )) + (port + (pt 0 40) + (input) + (text "reconfig" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "reconfig" (rect 20 32 73 48)(font "Arial" (font_size 8))) + (line (pt 0 40)(pt 16 40)(line_width 1)) + ) + (port + (pt 0 56) + (input) + (text "read_param" (rect 0 0 80 16)(font "Arial" (font_size 8))) + (text "read_param" (rect 20 48 100 64)(font "Arial" (font_size 8))) + (line (pt 0 56)(pt 16 56)(line_width 1)) + ) + (port + (pt 0 72) + (input) + (text "write_param" (rect 0 0 82 16)(font "Arial" (font_size 8))) + (text "write_param" (rect 20 64 102 80)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 16 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "data_in[8..0]" (rect 0 0 84 16)(font "Arial" (font_size 8))) + (text "data_in[8..0]" (rect 20 88 104 104)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 16 96)(line_width 3)) + ) + (port + (pt 0 112) + (input) + (text "counter_type[3..0]" (rect 0 0 123 16)(font "Arial" (font_size 8))) + (text "counter_type[3..0]" (rect 20 104 143 120)(font "Arial" (font_size 8))) + (line (pt 0 112)(pt 16 112)(line_width 3)) + ) + (port + (pt 0 128) + (input) + (text "counter_param[2..0]" (rect 0 0 136 16)(font "Arial" (font_size 8))) + (text "counter_param[2..0]" (rect 20 120 156 136)(font "Arial" (font_size 8))) + (line (pt 0 128)(pt 16 128)(line_width 3)) + ) + (port + (pt 0 168) + (input) + (text "pll_scandataout" (rect 0 0 107 16)(font "Arial" (font_size 8))) + (text "pll_scandataout" (rect 20 160 127 176)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 16 168)(line_width 1)) + ) + (port + (pt 0 184) + (input) + (text "pll_scandone" (rect 0 0 89 16)(font "Arial" (font_size 8))) + (text "pll_scandone" (rect 20 176 109 192)(font "Arial" (font_size 8))) + (line (pt 0 184)(pt 16 184)(line_width 1)) + ) + (port + (pt 0 208) + (input) + (text "clock" (rect 0 0 36 16)(font "Arial" (font_size 8))) + (text "clock" (rect 20 200 56 216)(font "Arial" (font_size 8))) + (line (pt 0 208)(pt 16 208)(line_width 1)) + ) + (port + (pt 0 224) + (input) + (text "reset" (rect 0 0 34 16)(font "Arial" (font_size 8))) + (text "reset" (rect 20 216 54 232)(font "Arial" (font_size 8))) + (line (pt 0 224)(pt 16 224)(line_width 1)) + ) + (port + (pt 0 248) + (input) + (text "pll_areset_in" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_areset_in" (rect 20 240 106 256)(font "Arial" (font_size 8))) + (line (pt 0 248)(pt 16 248)(line_width 1)) + ) + (port + (pt 216 40) + (output) + (text "busy" (rect 0 0 33 16)(font "Arial" (font_size 8))) + (text "busy" (rect 169 32 202 48)(font "Arial" (font_size 8))) + (line (pt 216 40)(pt 200 40)(line_width 1)) + ) + (port + (pt 216 96) + (output) + (text "data_out[8..0]" (rect 0 0 94 16)(font "Arial" (font_size 8))) + (text "data_out[8..0]" (rect 117 88 211 104)(font "Arial" (font_size 8))) + (line (pt 216 96)(pt 200 96)(line_width 3)) + ) + (port + (pt 216 152) + (output) + (text "pll_scandata" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "pll_scandata" (rect 124 144 210 160)(font "Arial" (font_size 8))) + (line (pt 216 152)(pt 200 152)(line_width 1)) + ) + (port + (pt 216 168) + (output) + (text "pll_scanclk" (rect 0 0 76 16)(font "Arial" (font_size 8))) + (text "pll_scanclk" (rect 132 160 208 176)(font "Arial" (font_size 8))) + (line (pt 216 168)(pt 200 168)(line_width 1)) + ) + (port + (pt 216 200) + (output) + (text "pll_scanclkena" (rect 0 0 101 16)(font "Arial" (font_size 8))) + (text "pll_scanclkena" (rect 111 192 212 208)(font "Arial" (font_size 8))) + (line (pt 216 200)(pt 200 200)(line_width 1)) + ) + (port + (pt 216 216) + (output) + (text "pll_configupdate" (rect 0 0 109 16)(font "Arial" (font_size 8))) + (text "pll_configupdate" (rect 104 208 213 224)(font "Arial" (font_size 8))) + (line (pt 216 216)(pt 200 216)(line_width 1)) + ) + (port + (pt 216 248) + (output) + (text "pll_areset" (rect 0 0 66 16)(font "Arial" (font_size 8))) + (text "pll_areset" (rect 141 240 207 256)(font "Arial" (font_size 8))) + (line (pt 216 248)(pt 200 248)(line_width 1)) + ) + (drawing + (line (pt 0 0)(pt 217 0)(line_width 1)) + (line (pt 217 0)(pt 217 297)(line_width 1)) + (line (pt 0 297)(pt 217 297)(line_width 1)) + (line (pt 0 0)(pt 0 297)(line_width 1)) + (line (pt 16 24)(pt 201 24)(line_width 1)) + (line (pt 201 24)(pt 201 273)(line_width 1)) + (line (pt 16 273)(pt 201 273)(line_width 1)) + (line (pt 16 24)(pt 16 273)(line_width 1)) + ) +) +(symbol + (rect 608 496 984 728) + (text "altpll4" (rect 168 1 215 20)(font "Arial" (font_size 10))) + (text "inst22" (rect 8 213 48 228)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 44 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 88 72)(line_width 1)) + ) + (port + (pt 0 96) + (input) + (text "areset" (rect 0 0 42 16)(font "Arial" (font_size 8))) + (text "areset" (rect 4 80 46 96)(font "Arial" (font_size 8))) + (line (pt 0 96)(pt 88 96)(line_width 1)) + ) + (port + (pt 0 120) + (input) + (text "scanclk" (rect 0 0 53 16)(font "Arial" (font_size 8))) + (text "scanclk" (rect 4 104 57 120)(font "Arial" (font_size 8))) + (line (pt 0 120)(pt 88 120)(line_width 1)) + ) + (port + (pt 0 144) + (input) + (text "scandata" (rect 0 0 62 16)(font "Arial" (font_size 8))) + (text "scandata" (rect 4 128 66 144)(font "Arial" (font_size 8))) + (line (pt 0 144)(pt 88 144)(line_width 1)) + ) + (port + (pt 0 168) + (input) + (text "scanclkena" (rect 0 0 77 16)(font "Arial" (font_size 8))) + (text "scanclkena" (rect 4 152 81 168)(font "Arial" (font_size 8))) + (line (pt 0 168)(pt 88 168)(line_width 1)) + ) + (port + (pt 0 192) + (input) + (text "configupdate" (rect 0 0 86 16)(font "Arial" (font_size 8))) + (text "configupdate" (rect 4 176 90 192)(font "Arial" (font_size 8))) + (line (pt 0 192)(pt 88 192)(line_width 1)) + ) + (port + (pt 376 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 359 56 375 72)(font "Arial" (font_size 8))) + (line (pt 376 72)(pt 288 72)(line_width 1)) + ) + (port + (pt 376 96) + (output) + (text "scandataout" (rect 0 0 83 16)(font "Arial" (font_size 8))) + (text "scandataout" (rect 302 80 385 96)(font "Arial" (font_size 8))) + (line (pt 376 96)(pt 288 96)(line_width 1)) + ) + (port + (pt 376 120) + (output) + (text "scandone" (rect 0 0 66 16)(font "Arial" (font_size 8))) + (text "scandone" (rect 317 104 383 120)(font "Arial" (font_size 8))) + (line (pt 376 120)(pt 288 120)(line_width 1)) + ) + (port + (pt 376 144) + (output) + (text "locked" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "locked" (rect 335 128 379 144)(font "Arial" (font_size 8))) + (line (pt 376 144)(pt 288 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 301 214 367 229)(font "Arial" )) + (text "inclk0 frequency: 48.000 MHz" (rect 98 123 284 138)(font "Arial" )) + (text "Operation Mode: Normal" (rect 98 140 256 155)(font "Arial" )) + (text "Clk " (rect 99 167 123 182)(font "Arial" )) + (text "Ratio" (rect 125 167 159 182)(font "Arial" )) + (text "Ph (dg)" (rect 159 167 206 182)(font "Arial" )) + (text "DC (%)" (rect 204 167 251 182)(font "Arial" )) + (text "c0" (rect 103 185 118 200)(font "Arial" )) + (text "2/1" (rect 131 185 151 200)(font "Arial" )) + (text "0.00" (rect 167 185 195 200)(font "Arial" )) + (text "50.00" (rect 209 185 245 200)(font "Arial" )) + (line (pt 0 0)(pt 377 0)(line_width 1)) + (line (pt 377 0)(pt 377 233)(line_width 1)) + (line (pt 0 233)(pt 377 233)(line_width 1)) + (line (pt 0 0)(pt 0 233)(line_width 1)) + (line (pt 96 164)(pt 246 164)(line_width 1)) + (line (pt 96 181)(pt 246 181)(line_width 1)) + (line (pt 96 199)(pt 246 199)(line_width 1)) + (line (pt 96 164)(pt 96 199)(line_width 1)) + (line (pt 122 164)(pt 122 199)(line_width 3)) + (line (pt 156 164)(pt 156 199)(line_width 3)) + (line (pt 201 164)(pt 201 199)(line_width 3)) + (line (pt 245 164)(pt 245 199)(line_width 1)) + (line (pt 88 56)(pt 288 56)(line_width 1)) + (line (pt 288 56)(pt 288 216)(line_width 1)) + (line (pt 88 216)(pt 288 216)(line_width 1)) + (line (pt 88 56)(pt 88 216)(line_width 1)) + ) +) +(symbol + (rect 440 -88 744 144) + (text "altpll3" (rect 132 1 179 20)(font "Arial" (font_size 10))) + (text "inst13" (rect 8 213 48 228)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 44 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 304 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 287 56 303 72)(font "Arial" (font_size 8))) + (line (pt 304 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 304 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 287 80 303 96)(font "Arial" (font_size 8))) + (line (pt 304 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 304 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 287 104 303 120)(font "Arial" (font_size 8))) + (line (pt 304 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 304 144) + (output) + (text "c3" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c3" (rect 287 128 303 144)(font "Arial" (font_size 8))) + (line (pt 304 144)(pt 272 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 229 214 295 229)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 244 82)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 266 99)(font "Arial" )) + (text "Clk " (rect 59 111 83 126)(font "Arial" )) + (text "Ratio" (rect 86 111 120 126)(font "Arial" )) + (text "Ph (dg)" (rect 121 111 168 126)(font "Arial" )) + (text "DC (%)" (rect 166 111 213 126)(font "Arial" )) + (text "c0" (rect 63 129 78 144)(font "Arial" )) + (text "2/33" (rect 88 129 116 144)(font "Arial" )) + (text "0.00" (rect 129 129 157 144)(font "Arial" )) + (text "50.00" (rect 171 129 207 144)(font "Arial" )) + (text "c1" (rect 63 147 78 162)(font "Arial" )) + (text "16/33" (rect 85 147 121 162)(font "Arial" )) + (text "0.00" (rect 129 147 157 162)(font "Arial" )) + (text "50.00" (rect 171 147 207 162)(font "Arial" )) + (text "c2" (rect 63 165 78 180)(font "Arial" )) + (text "25/33" (rect 85 165 121 180)(font "Arial" )) + (text "0.00" (rect 129 165 157 180)(font "Arial" )) + (text "50.00" (rect 171 165 207 180)(font "Arial" )) + (text "c3" (rect 63 183 78 198)(font "Arial" )) + (text "16/11" (rect 85 183 121 198)(font "Arial" )) + (text "0.00" (rect 129 183 157 198)(font "Arial" )) + (text "50.00" (rect 171 183 207 198)(font "Arial" )) + (line (pt 0 0)(pt 305 0)(line_width 1)) + (line (pt 305 0)(pt 305 233)(line_width 1)) + (line (pt 0 233)(pt 305 233)(line_width 1)) + (line (pt 0 0)(pt 0 233)(line_width 1)) + (line (pt 56 108)(pt 208 108)(line_width 1)) + (line (pt 56 125)(pt 208 125)(line_width 1)) + (line (pt 56 143)(pt 208 143)(line_width 1)) + (line (pt 56 161)(pt 208 161)(line_width 1)) + (line (pt 56 179)(pt 208 179)(line_width 1)) + (line (pt 56 197)(pt 208 197)(line_width 1)) + (line (pt 56 108)(pt 56 197)(line_width 1)) + (line (pt 82 108)(pt 82 197)(line_width 3)) + (line (pt 118 108)(pt 118 197)(line_width 3)) + (line (pt 163 108)(pt 163 197)(line_width 3)) + (line (pt 207 108)(pt 207 197)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 216)(line_width 1)) + (line (pt 48 216)(pt 272 216)(line_width 1)) + (line (pt 48 56)(pt 48 216)(line_width 1)) + ) +) +(symbol + (rect 440 176 768 392) + (text "altpll1" (rect 144 1 191 20)(font "Arial" (font_size 10))) + (text "inst" (rect 8 197 31 212)(font "Arial" )) + (port + (pt 0 72) + (input) + (text "inclk0" (rect 0 0 40 16)(font "Arial" (font_size 8))) + (text "inclk0" (rect 4 56 44 72)(font "Arial" (font_size 8))) + (line (pt 0 72)(pt 48 72)(line_width 1)) + ) + (port + (pt 328 72) + (output) + (text "c0" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c0" (rect 311 56 327 72)(font "Arial" (font_size 8))) + (line (pt 328 72)(pt 272 72)(line_width 1)) + ) + (port + (pt 328 96) + (output) + (text "c1" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c1" (rect 311 80 327 96)(font "Arial" (font_size 8))) + (line (pt 328 96)(pt 272 96)(line_width 1)) + ) + (port + (pt 328 120) + (output) + (text "c2" (rect 0 0 16 16)(font "Arial" (font_size 8))) + (text "c2" (rect 311 104 327 120)(font "Arial" (font_size 8))) + (line (pt 328 120)(pt 272 120)(line_width 1)) + ) + (port + (pt 328 144) + (output) + (text "locked" (rect 0 0 44 16)(font "Arial" (font_size 8))) + (text "locked" (rect 287 128 331 144)(font "Arial" (font_size 8))) + (line (pt 328 144)(pt 272 144)(line_width 1)) + ) + (drawing + (text "Cyclone III" (rect 253 198 319 213)(font "Arial" )) + (text "inclk0 frequency: 33.000 MHz" (rect 58 67 244 82)(font "Arial" )) + (text "Operation Mode: Src Sync Comp" (rect 58 84 266 99)(font "Arial" )) + (text "Clk " (rect 59 111 83 126)(font "Arial" )) + (text "Ratio" (rect 90 111 124 126)(font "Arial" )) + (text "Ph (dg)" (rect 128 111 175 126)(font "Arial" )) + (text "DC (%)" (rect 173 111 220 126)(font "Arial" )) + (text "c0" (rect 63 129 78 144)(font "Arial" )) + (text "1/66" (rect 92 129 120 144)(font "Arial" )) + (text "0.00" (rect 136 129 164 144)(font "Arial" )) + (text "50.00" (rect 178 129 214 144)(font "Arial" )) + (text "c1" (rect 63 147 78 162)(font "Arial" )) + (text "67/900" (rect 85 147 129 162)(font "Arial" )) + (text "0.00" (rect 136 147 164 162)(font "Arial" )) + (text "50.00" (rect 178 147 214 162)(font "Arial" )) + (text "c2" (rect 63 165 78 180)(font "Arial" )) + (text "67/90" (rect 89 165 125 180)(font "Arial" )) + (text "0.00" (rect 136 165 164 180)(font "Arial" )) + (text "50.00" (rect 178 165 214 180)(font "Arial" )) + (line (pt 0 0)(pt 329 0)(line_width 1)) + (line (pt 329 0)(pt 329 217)(line_width 1)) + (line (pt 0 217)(pt 329 217)(line_width 1)) + (line (pt 0 0)(pt 0 217)(line_width 1)) + (line (pt 56 108)(pt 215 108)(line_width 1)) + (line (pt 56 125)(pt 215 125)(line_width 1)) + (line (pt 56 143)(pt 215 143)(line_width 1)) + (line (pt 56 161)(pt 215 161)(line_width 1)) + (line (pt 56 179)(pt 215 179)(line_width 1)) + (line (pt 56 108)(pt 56 179)(line_width 1)) + (line (pt 82 108)(pt 82 179)(line_width 3)) + (line (pt 125 108)(pt 125 179)(line_width 3)) + (line (pt 170 108)(pt 170 179)(line_width 3)) + (line (pt 214 108)(pt 214 179)(line_width 1)) + (line (pt 48 56)(pt 272 56)(line_width 1)) + (line (pt 272 56)(pt 272 200)(line_width 1)) + (line (pt 48 200)(pt 272 200)(line_width 1)) + (line (pt 48 56)(pt 48 200)(line_width 1)) + ) +) +(symbol + (rect 944 416 1008 464) + (text "AND2" (rect 1 0 32 13)(font "Arial" (font_size 6))) + (text "inst25" (rect 3 37 43 52)(font "Arial" )) + (port + (pt 0 16) + (input) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (text "IN1" (rect 2 7 26 23)(font "Courier New" (bold))(invisible)) + (line (pt 0 16)(pt 14 16)(line_width 1)) + ) + (port + (pt 0 32) + (input) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (text "IN2" (rect 2 23 26 39)(font "Courier New" (bold))(invisible)) + (line (pt 0 32)(pt 14 32)(line_width 1)) + ) + (port + (pt 64 24) + (output) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (text "OUT" (rect 48 15 72 31)(font "Courier New" (bold))(invisible)) + (line (pt 42 24)(pt 64 24)(line_width 1)) + ) + (drawing + (line (pt 14 12)(pt 30 12)(line_width 1)) + (line (pt 14 37)(pt 31 37)(line_width 1)) + (line (pt 14 12)(pt 14 37)(line_width 1)) + (arc (pt 31 37)(pt 30 12)(rect 18 12 43 37)(line_width 1)) + ) +) +(block + (rect 1264 2944 1672 3560) + (text "DSP" (rect 5 5 36 21)(font "Arial" (font_size 8))) (text "Mathias_Alles" (rect 5 602 95 617)(font "Arial" )) (block_io "CLK33M" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "nFB_OE" (input)) + (block_io "nFB_WR" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "nFB_BURST" (input)) + (block_io "FB_ADR[31..0]" (input)) + (block_io "nRSTO" (input)) + (block_io "nFB_CS3" (input)) + (block_io "nSRCS" (output)) + (block_io "nSRBLE" (output)) + (block_io "nSRBHE" (output)) + (block_io "nSRWE" (output)) + (block_io "nSROE" (output)) + (block_io "DSP_INT" (output)) + (block_io "DSP_TA" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (block_io "IO[17..0]" (bidir)) + (block_io "SRD[15..0]" (bidir)) + (mapper + (pt 408 416) + (bidir) + ) + (mapper + (pt 408 392) + (bidir) + ) + (mapper + (pt 408 368) + (bidir) + ) + (mapper + (pt 408 320) + (bidir) + ) + (mapper + (pt 408 440) + (bidir) + ) + (mapper + (pt 408 344) + (bidir) + ) + (mapper + (pt 408 296) + (bidir) + ) + (mapper + (pt 408 40) + (bidir) + ) + (mapper + (pt 0 56) + (bidir) + ) + (mapper + (pt 0 80) + (bidir) + ) + (mapper + (pt 0 104) + (bidir) + ) + (mapper + (pt 0 128) + (bidir) + ) + (mapper + (pt 0 152) + (bidir) + ) + (mapper + (pt 0 176) + (bidir) + ) + (mapper + (pt 0 248) + (bidir) + ) + (mapper + (pt 0 224) + (bidir) + ) + (mapper + (pt 0 272) + (bidir) + ) + (mapper + (pt 0 296) + (bidir) + ) + (mapper + (pt 408 72) + (bidir) + ) + (mapper + (pt 408 576) + (bidir) + ) + (mapper + (pt 0 320) + (bidir) + ) + (mapper + (pt 0 200) + (bidir) + ) +) +(block + (rect 1264 2344 1672 2904) + (text "interrupt_handler" (rect 5 5 118 21)(font "Arial" (font_size 8))) (text "nobody" (rect 5 546 52 561)(font "Arial" )) (block_io "MAIN_CLK" (input)) + (block_io "nFB_WR" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "FB_ADR[31..0]" (input)) + (block_io "PIC_INT" (input)) + (block_io "E0_INT" (input)) + (block_io "DVI_INT" (input)) + (block_io "nPCI_INTA" (input)) + (block_io "nPCI_INTB" (input)) + (block_io "nPCI_INTC" (input)) + (block_io "nPCI_INTD" (input)) + (block_io "nMFP_INT" (input)) + (block_io "nFB_OE" (input)) + (block_io "DSP_INT" (input)) + (block_io "VSYNC" (input)) + (block_io "HSYNC" (input)) + (block_io "DMA_DRQ" (input)) + (block_io "nIRQ[7..2]" (output)) + (block_io "INT_HANDLER_TA" (output)) + (block_io "ACP_CONF[31..0]" (output)) + (block_io "TIN0" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (mapper + (pt 0 136) + (bidir) + ) + (mapper + (pt 0 160) + (bidir) + ) + (mapper + (pt 0 184) + (bidir) + ) + (mapper + (pt 0 88) + (bidir) + ) + (mapper + (pt 0 112) + (bidir) + ) + (mapper + (pt 0 40) + (bidir) + ) + (mapper + (pt 408 56) + (bidir) + ) + (mapper + (pt 408 80) + (bidir) + ) + (mapper + (pt 0 256) + (bidir) + ) + (mapper + (pt 0 280) + (bidir) + ) + (mapper + (pt 0 304) + (bidir) + ) + (mapper + (pt 0 208) + (bidir) + ) + (mapper + (pt 0 64) + (bidir) + ) + (mapper + (pt 0 376) + (bidir) + ) + (mapper + (pt 0 400) + (bidir) + ) + (mapper + (pt 0 328) + (bidir) + ) + (mapper + (pt 0 352) + (bidir) + ) + (mapper + (pt 0 432) + (bidir) + ) + (mapper + (pt 0 456) + (bidir) + ) + (mapper + (pt 0 480) + (bidir) + ) + (mapper + (pt 0 504) + (bidir) + ) + (mapper + (pt 408 504) + (bidir) + ) + (mapper + (pt 0 528) + (bidir) + ) + (mapper + (pt 408 240) + (bidir) + ) + (mapper + (pt 408 296) + (bidir) + ) +) +(block + (rect 1264 744 1672 2264) + (text "FalconIO_SDCard_IDE_CF" (rect 5 5 189 21)(font "Arial" (font_size 8))) (text "Wolfgang_Foerster_and_Fredi_Aschwanden" (rect 5 1506 295 1521)(font "Arial" )) (block_io "CLK33M" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "CLK2M" (input)) + (block_io "CLK500k" (input)) + (block_io "nFB_CS1" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "nFB_BURST" (input)) + (block_io "FB_ADR[31..0]" (input)) + (block_io "LP_BUSY" (input)) + (block_io "nACSI_DRQ" (input)) + (block_io "nACSI_INT" (input)) + (block_io "nSCSI_DRQ" (input)) + (block_io "nSCSI_MSG" (input)) + (block_io "MIDI_IN" (input)) + (block_io "RxD" (input)) + (block_io "CTS" (input)) + (block_io "RI" (input)) + (block_io "DCD" (input)) + (block_io "AMKB_RX" (input)) + (block_io "PIC_AMKB_RX" (input)) + (block_io "IDE_RDY" (input)) + (block_io "IDE_INT" (input)) + (block_io "WP_CS_CARD" (input)) + (block_io "nINDEX" (input)) + (block_io "TRACK00" (input)) + (block_io "nRD_DATA" (input)) + (block_io "nDCHG" (input)) + (block_io "SD_DATA0" (input)) + (block_io "SD_DATA1" (input)) + (block_io "SD_DATA2" (input)) + (block_io "SD_CARD_DEDECT" (input)) + (block_io "SD_WP" (input)) + (block_io "nDACK0" (input)) + (block_io "nFB_WR" (input)) + (block_io "WP_CF_CARD" (input)) + (block_io "nWP" (input)) + (block_io "nFB_CS2" (input)) + (block_io "nRSTO" (input)) + (block_io "nSCSI_C_D" (input)) + (block_io "nSCSI_I_O" (input)) + (block_io "CLK2M4576" (input)) + (block_io "nFB_OE" (input)) + (block_io "VSYNC" (input)) + (block_io "HSYNC" (input)) + (block_io "DSP_INT" (input)) + (block_io "nBLANK" (input)) + (block_io "FDC_CLK" (input)) + (block_io "FB_ALE" (input)) + (block_io "ACP_CONF[31..24]" (input)) + (block_io "HD_DD" (input)) + (block_io "nIDE_CS1" (output)) + (block_io "nIDE_CS0" (output)) + (block_io "LP_STR" (output)) + (block_io "LP_DIR" (output)) + (block_io "nACSI_ACK" (output)) + (block_io "nACSI_RESET" (output)) + (block_io "nACSI_CS" (output)) + (block_io "ACSI_DIR" (output)) + (block_io "ACSI_A1" (output)) + (block_io "nSCSI_ACK" (output)) + (block_io "nSCSI_ATN" (output)) + (block_io "SCSI_DIR" (output)) + (block_io "SD_CLK" (output)) + (block_io "YM_QA" (output)) + (block_io "YM_QC" (output)) + (block_io "YM_QB" (output)) + (block_io "nSDSEL" (output)) + (block_io "STEP" (output)) + (block_io "MOT_ON" (output)) + (block_io "nRP_LDS" (output)) + (block_io "nRP_UDS" (output)) + (block_io "nROM4" (output)) + (block_io "nROM3" (output)) + (block_io "nCF_CS1" (output)) + (block_io "nCF_CS0" (output)) + (block_io "nIDE_RD" (output)) + (block_io "nIDE_WR" (output)) + (block_io "AMKB_TX" (output)) + (block_io "IDE_RES" (output)) + (block_io "DTR" (output)) + (block_io "RTS" (output)) + (block_io "TxD" (output)) + (block_io "MIDI_OLR" (output)) + (block_io "MIDI_TLR" (output)) + (block_io "nDREQ0" (output)) + (block_io "DSA_D" (output)) + (block_io "nMFP_INT" (output)) + (block_io "FALCON_IO_TA" (output)) + (block_io "STEP_DIR" (output)) + (block_io "WR_DATA" (output)) + (block_io "WR_GATE" (output)) + (block_io "DMA_DRQ" (output)) + (block_io "FB_AD[31..0]" (bidir)) + (block_io "LP_D[7..0]" (bidir)) + (block_io "ACSI_D[7..0]" (bidir)) + (block_io "SCSI_D[7..0]" (bidir)) + (block_io "SCSI_PAR" (bidir)) + (block_io "nSCSI_SEL" (bidir)) + (block_io "nSCSI_BUSY" (bidir)) + (block_io "nSCSI_RST" (bidir)) + (block_io "SD_CD_DATA3" (bidir)) + (block_io "SD_CDM_D1" (bidir)) + (mapper + (pt 0 128) + (bidir) + ) + (mapper + (pt 0 104) + (bidir) + ) + (mapper + (pt 0 56) + (bidir) + ) + (mapper + (pt 0 80) + (bidir) + ) + (mapper + (pt 0 224) + (bidir) + ) + (mapper + (pt 0 248) + (bidir) + ) + (mapper + (pt 0 272) + (bidir) + ) + (mapper + (pt 408 96) + (bidir) + ) + (mapper + (pt 408 120) + (bidir) + ) + (mapper + (pt 408 72) + (bidir) + ) + (mapper + (pt 408 152) + (bidir) + ) + (mapper + (pt 408 200) + (bidir) + ) + (mapper + (pt 408 224) + (bidir) + ) + (mapper + (pt 408 248) + (bidir) + ) + (mapper + (pt 408 272) + (bidir) + ) + (mapper + (pt 408 296) + (bidir) + ) + (mapper + (pt 408 424) + (bidir) + ) + (mapper + (pt 408 352) + (bidir) + ) + (mapper + (pt 408 328) + (bidir) + ) + (mapper + (pt 408 448) + (bidir) + ) + (mapper + (pt 408 400) + (bidir) + ) + (mapper + (pt 408 376) + (bidir) + ) + (mapper + (pt 408 472) + (bidir) + ) + (mapper + (pt 408 496) + (bidir) + ) + (mapper + (pt 408 608) + (bidir) + ) + (mapper + (pt 408 632) + (bidir) + ) + (mapper + (pt 408 528) + (bidir) + ) + (mapper + (pt 408 552) + (bidir) + ) + (mapper + (pt 408 584) + (bidir) + ) + (mapper + (pt 0 624) + (bidir) + ) + (mapper + (pt 0 656) + (bidir) + ) + (mapper + (pt 0 680) + (bidir) + ) + (mapper + (pt 0 704) + (bidir) + ) + (mapper + (pt 0 728) + (bidir) + ) + (mapper + (pt 0 752) + (bidir) + ) + (mapper + (pt 0 776) + (bidir) + ) + (mapper + (pt 408 664) + (bidir) + ) + (mapper + (pt 0 808) + (bidir) + ) + (mapper + (pt 0 832) + (bidir) + ) + (mapper + (pt 408 696) + (bidir) + ) + (mapper + (pt 408 720) + (bidir) + ) + (mapper + (pt 408 744) + (bidir) + ) + (mapper + (pt 408 768) + (bidir) + ) + (mapper + (pt 408 792) + (bidir) + ) + (mapper + (pt 408 816) + (bidir) + ) + (mapper + (pt 408 840) + (bidir) + ) + (mapper + (pt 0 856) + (bidir) + ) + (mapper + (pt 408 872) + (bidir) + ) + (mapper + (pt 408 896) + (bidir) + ) + (mapper + (pt 408 920) + (bidir) + ) + (mapper + (pt 408 944) + (bidir) + ) + (mapper + (pt 0 912) + (bidir) + ) + (mapper + (pt 0 936) + (bidir) + ) + (mapper + (pt 0 960) + (bidir) + ) + (mapper + (pt 0 984) + (bidir) + ) + (mapper + (pt 0 1008) + (bidir) + ) + (mapper + (pt 408 976) + (bidir) + ) + (mapper + (pt 408 1000) + (bidir) + ) + (mapper + (pt 408 1072) + (bidir) + ) + (mapper + (pt 408 1096) + (bidir) + ) + (mapper + (pt 408 1176) + (bidir) + ) + (mapper + (pt 0 296) + (bidir) + ) + (mapper + (pt 408 1256) + (bidir) + ) + (mapper + (pt 0 1040) + (bidir) + ) + (mapper + (pt 0 1064) + (bidir) + ) + (mapper + (pt 0 1088) + (bidir) + ) + (mapper + (pt 0 1112) + (bidir) + ) + (mapper + (pt 0 1136) + (bidir) + ) + (mapper + (pt 0 432) + (bidir) + ) + (mapper + (pt 0 464) + (bidir) + ) + (mapper + (pt 0 488) + (bidir) + ) + (mapper + (pt 0 520) + (bidir) + ) + (mapper + (pt 0 544) + (bidir) + ) + (mapper + (pt 0 568) + (bidir) + ) + (mapper + (pt 0 592) + (bidir) + ) + (mapper + (pt 408 1424) + (bidir) + ) + (mapper + (pt 0 320) + (bidir) + ) + (mapper + (pt 0 200) + (bidir) + ) + (mapper + (pt 0 344) + (bidir) + ) + (mapper + (pt 0 1168) + (bidir) + ) + (mapper + (pt 0 1192) + (bidir) + ) + (mapper + (pt 0 368) + (bidir) + ) + (mapper + (pt 0 392) + (bidir) + ) + (mapper + (pt 0 176) + (bidir) + ) + (mapper + (pt 0 1216) + (bidir) + ) + (mapper + (pt 408 48) + (bidir) + ) + (mapper + (pt 408 16) + (bidir) + ) + (mapper + (pt 0 1240) + (bidir) + ) + (mapper + (pt 408 1304) + (bidir) + ) + (mapper + (pt 408 1200) + (bidir) + ) + (mapper + (pt 408 1344) + (bidir) + ) + (mapper + (pt 408 1280) + (bidir) + ) + (mapper + (pt 408 1224) + (bidir) + ) + (mapper + (pt 408 1120) + (bidir) + ) + (mapper + (pt 408 1048) + (bidir) + ) + (mapper + (pt 408 1024) + (bidir) + ) + (mapper + (pt 0 32) + (bidir) + ) + (mapper + (pt 0 152) + (bidir) + ) + (mapper + (pt 408 1368) + (bidir) + ) + (mapper + (pt 0 1264) + (bidir) + ) + (mapper + (pt 0 1336) + (bidir) + ) + (mapper + (pt 0 888) + (bidir) + ) +) +(block + (rect 1264 -48 1672 728) + (text "Video" (rect 5 5 43 21)(font "Arial" (font_size 8))) (text "Fredi_Aschwanden" (rect 5 762 130 777)(font "Arial" )) (block_io "FB_ADR[31..0]" (input)) + (block_io "MAIN_CLK" (input)) + (block_io "nFB_CS1" (input)) + (block_io "nFB_CS2" (input)) + (block_io "nFB_CS3" (input)) + (block_io "nFB_WR" (input)) + (block_io "FB_SIZE0" (input)) + (block_io "FB_SIZE1" (input)) + (block_io "nRSTO" (input)) + (block_io "nFB_OE" (input)) + (block_io "FB_ALE" (input)) + (block_io "DDRCLK[3..0]" (input)) + (block_io "DDR_SYNC_66M" (input)) + (block_io "CLK33M" (input)) + (block_io "CLK25M" (input)) + (block_io "CLK_VIDEO" (input)) + (block_io "VR_D[8..0]" (input)) + (block_io "VR_BUSY" (input)) + (block_io "VR_RD" (output)) + (block_io "VG[7..0]" (output)) + (block_io "VB[7..0]" (output)) + (block_io "VR[7..0]" (output)) + (block_io "nBLANK" (output)) + (block_io "VA[12..0]" (output)) + (block_io "nVWE" (output)) + (block_io "nVCAS" (output)) + (block_io "nVRAS" (output)) + (block_io "nVCS" (output)) + (block_io "VDM[3..0]" (output)) + (block_io "nPD_VGA" (output)) + (block_io "VCKE" (output)) + (block_io "VSYNC" (output)) + (block_io "HSYNC" (output)) + (block_io "nSYNC" (output)) + (block_io "VIDEO_TA" (output)) + (block_io "PIXEL_CLK" (output)) + (block_io "BA[1..0]" (output)) + (block_io "VIDEO_RECONFIG" (output)) + (block_io "VR_WR" (output)) + (block_io "VDQS[3..0]" (bidir)) + (block_io "FB_AD[31..0]" (bidir)) + (block_io "VD[31..0]" (bidir)) + (mapper + (pt 408 448) + (bidir) + ) + (mapper + (pt 408 496) + (bidir) + ) + (mapper + (pt 408 592) + (bidir) + ) + (mapper + (pt 408 352) + (bidir) + ) + (mapper + (pt 408 760) + (bidir) + ) + (mapper + (pt 408 72) + (bidir) + ) + (mapper + (pt 0 392) + (bidir) + ) + (mapper + (pt 0 248) + (bidir) + ) + (mapper + (pt 0 272) + (bidir) + ) + (mapper + (pt 0 320) + (bidir) + ) + (mapper + (pt 0 344) + (bidir) + ) + (mapper + (pt 0 152) + (bidir) + ) + (mapper + (pt 0 104) + (bidir) + ) + (mapper + (pt 0 296) + (bidir) + ) + (mapper + (pt 408 128) + (bidir) + ) + (mapper + (pt 408 152) + (bidir) + ) + (mapper + (pt 408 176) + (bidir) + ) + (mapper + (pt 408 200) + (bidir) + ) + (mapper + (pt 408 224) + (bidir) + ) + (mapper + (pt 408 248) + (bidir) + ) + (mapper + (pt 408 272) + (bidir) + ) + (mapper + (pt 408 296) + (bidir) + ) + (mapper + (pt 0 416) + (bidir) + ) + (mapper + (pt 408 320) + (bidir) + ) + (mapper + (pt 408 472) + (bidir) + ) + (mapper + (pt 408 424) + (bidir) + ) + (mapper + (pt 408 400) + (bidir) + ) + (mapper + (pt 408 376) + (bidir) + ) + (mapper + (pt 0 224) + (bidir) + ) + (mapper + (pt 0 368) + (bidir) + ) + (mapper + (pt 0 200) + (bidir) + ) + (mapper + (pt 0 176) + (bidir) + ) + (mapper + (pt 408 568) + (bidir) + ) + (mapper + (pt 408 520) + (bidir) + ) + (mapper + (pt 0 648) + (bidir) + ) + (mapper + (pt 0 672) + (bidir) + ) + (mapper + (pt 0 616) + (bidir) + ) + (mapper + (pt 0 528) + (bidir) + ) + (mapper + (pt 408 656) + (bidir) + ) + (mapper + (pt 408 640) + (bidir) + ) + (mapper + (pt 408 624) + (bidir) + ) + (mapper + (pt 0 512) + (bidir) + ) +) +(connector + (text "FB_AD[31..0]" (rect 1682 776 1765 791)(font "Arial" )) + (pt 1832 792) + (pt 1672 792) + (bus) +) +(connector + (text "FB_ADR[31..0]" (rect 1146 1072 1240 1087)(font "Arial" )) + (pt 1112 1088) + (pt 1264 1088) + (bus) +) +(connector + (text "MAIN_CLK" (rect 1162 784 1231 799)(font "Arial" )) + (pt 1152 800) + (pt 1264 800) +) +(connector + (text "CLK33M" (rect 1210 760 1265 775)(font "Arial" )) + (pt 1200 776) + (pt 1264 776) +) +(connector + (text "CLK2M" (rect 1202 808 1249 823)(font "Arial" )) + (pt 1192 824) + (pt 1264 824) +) +(connector + (text "CLK500k" (rect 1202 832 1262 847)(font "Arial" )) + (pt 1192 848) + (pt 1264 848) +) +(connector + (text "LP_DIR" (rect 1682 848 1732 863)(font "Arial" )) + (pt 1672 864) + (pt 1832 864) +) +(connector + (text "LP_STR" (rect 1682 824 1736 839)(font "Arial" )) + (pt 1672 840) + (pt 1832 840) +) +(connector + (text "nACSI_ACK" (rect 1682 928 1758 943)(font "Arial" )) + (pt 1672 944) + (pt 1832 944) +) +(connector + (text "nACSI_RESET" (rect 1682 952 1777 967)(font "Arial" )) + (pt 1672 968) + (pt 1832 968) +) +(connector + (text "nACSI_CS" (rect 1682 976 1750 991)(font "Arial" )) + (pt 1672 992) + (pt 1832 992) +) +(connector + (text "ACSI_DIR" (rect 1682 1000 1746 1015)(font "Arial" )) + (pt 1672 1016) + (pt 1832 1016) +) +(connector + (text "ACSI_A1" (rect 1682 1024 1738 1039)(font "Arial" )) + (pt 1672 1040) + (pt 1832 1040) +) +(connector + (text "nSCSI_ATN" (rect 1682 1128 1758 1143)(font "Arial" )) + (pt 1672 1144) + (pt 1840 1144) +) +(connector + (text "SCSI_DIR" (rect 1682 1152 1748 1167)(font "Arial" )) + (pt 1672 1168) + (pt 1840 1168) +) +(connector + (text "nSCSI_DRQ" (rect 1114 1248 1195 1263)(font "Arial" )) + (pt 1264 1264) + (pt 1104 1264) +) +(connector + (text "nSCSI_MSG" (rect 1114 1320 1194 1335)(font "Arial" )) + (pt 1104 1336) + (pt 1264 1336) +) +(connector + (text "nSCSI_RST" (rect 1682 1176 1759 1191)(font "Arial" )) + (pt 1672 1192) + (pt 1840 1192) +) +(connector + (text "nSCSI_SEL" (rect 1680 1200 1756 1215)(font "Arial" )) + (pt 1672 1216) + (pt 1840 1216) +) +(connector + (text "nSCSI_BUSY" (rect 1682 1224 1769 1239)(font "Arial" )) + (pt 1672 1240) + (pt 1840 1240) +) +(connector + (text "TxD" (rect 1682 1312 1706 1327)(font "Arial" )) + (pt 1672 1328) + (pt 1840 1328) +) +(connector + (text "RTS" (rect 1682 1336 1710 1351)(font "Arial" )) + (pt 1672 1352) + (pt 1840 1352) +) +(connector + (text "DTR" (rect 1680 1360 1709 1375)(font "Arial" )) + (pt 1672 1376) + (pt 1848 1376) +) +(connector + (text "CTS" (rect 1114 1408 1142 1423)(font "Arial" )) + (pt 1104 1424) + (pt 1264 1424) +) +(connector + (text "RI" (rect 1114 1432 1128 1447)(font "Arial" )) + (pt 1104 1448) + (pt 1264 1448) +) +(connector + (text "DCD" (rect 1114 1456 1145 1471)(font "Arial" )) + (pt 1104 1472) + (pt 1264 1472) +) +(connector + (text "IDE_RDY" (rect 1114 1536 1175 1551)(font "Arial" )) + (pt 1264 1552) + (pt 1104 1552) +) +(connector + (text "IDE_INT" (rect 1114 1560 1168 1575)(font "Arial" )) + (pt 1104 1576) + (pt 1264 1576) +) +(connector + (text "IDE_RES" (rect 1682 1424 1743 1439)(font "Arial" )) + (pt 1672 1440) + (pt 1848 1440) +) +(connector + (text "nIDE_CS0" (rect 1682 1448 1750 1463)(font "Arial" )) + (pt 1672 1464) + (pt 1848 1464) +) +(connector + (text "nIDE_CS1" (rect 1682 1472 1750 1487)(font "Arial" )) + (pt 1672 1488) + (pt 1856 1488) +) +(connector + (text "nIDE_WR" (rect 1682 1496 1745 1511)(font "Arial" )) + (pt 1672 1512) + (pt 1848 1512) +) +(connector + (text "nIDE_RD" (rect 1682 1520 1743 1535)(font "Arial" )) + (pt 1672 1536) + (pt 1848 1536) +) +(connector + (text "nCF_CS0" (rect 1682 1544 1745 1559)(font "Arial" )) + (pt 1672 1560) + (pt 1848 1560) +) +(connector + (text "nCF_CS1" (rect 1682 1568 1745 1583)(font "Arial" )) + (pt 1672 1584) + (pt 1848 1584) +) +(connector + (text "WP_CF_CARD" (rect 1112 1584 1209 1599)(font "Arial" )) + (pt 1104 1600) + (pt 1264 1600) +) +(connector + (text "nSDSEL" (rect 1682 1848 1737 1863)(font "Arial" )) + (pt 1672 1864) + (pt 1856 1864) +) +(connector + (text "nDREQ0" (rect 1682 2152 1739 2167)(font "Arial" )) + (pt 1672 2168) + (pt 1856 2168) +) +(connector + (text "SD_CLK" (rect 1682 2032 1738 2047)(font "Arial" )) + (pt 1856 2048) + (pt 1672 2048) +) +(connector + (text "SD_DATA0" (rect 1114 1768 1185 1783)(font "Arial" )) + (pt 1104 1784) + (pt 1264 1784) +) +(connector + (text "SD_DATA1" (rect 1114 1792 1185 1807)(font "Arial" )) + (pt 1104 1808) + (pt 1264 1808) +) +(connector + (text "SD_DATA2" (rect 1114 1816 1185 1831)(font "Arial" )) + (pt 1104 1832) + (pt 1264 1832) +) +(connector + (text "SD_WP" (rect 1114 1864 1164 1879)(font "Arial" )) + (pt 1104 1880) + (pt 1264 1880) +) +(connector + (text "FB_ADR[31..0]" (rect 1146 2536 1240 2551)(font "Arial" )) + (pt 1112 2552) + (pt 1264 2552) + (bus) +) +(connector + (text "nFB_WR" (rect 1162 2416 1219 2431)(font "Arial" )) + (pt 1152 2432) + (pt 1264 2432) +) +(connector + (text "nFB_CS1" (rect 1154 2440 1216 2455)(font "Arial" )) + (pt 1152 2456) + (pt 1264 2456) +) +(connector + (text "FB_SIZE0" (rect 1154 2488 1218 2503)(font "Arial" )) + (pt 1152 2504) + (pt 1264 2504) +) +(connector + (text "FB_SIZE1" (rect 1154 2512 1218 2527)(font "Arial" )) + (pt 1152 2528) + (pt 1264 2528) +) +(connector + (text "MAIN_CLK" (rect 1162 2368 1231 2383)(font "Arial" )) + (pt 1152 2384) + (pt 1264 2384) +) +(connector + (text "nFB_CS2" (rect 1162 2464 1224 2479)(font "Arial" )) + (pt 1152 2480) + (pt 1264 2480) +) +(connector + (text "FB_AD[31..0]" (rect 1682 2384 1765 2399)(font "Arial" )) + (pt 1832 2400) + (pt 1672 2400) + (bus) +) +(connector + (text "nSCSI_ACK" (rect 1682 1104 1759 1119)(font "Arial" )) + (pt 1672 1120) + (pt 1840 1120) +) +(connector + (text "SCSI_PAR" (rect 1682 1080 1751 1095)(font "Arial" )) + (pt 1672 1096) + (pt 1840 1096) +) +(connector + (text "MIDI_OLR" (rect 1762 1256 1828 1271)(font "Arial" )) + (pt 1672 1272) + (pt 1920 1272) +) +(connector + (text "MIDI_TLR" (rect 1770 1280 1833 1295)(font "Arial" )) + (pt 1672 1296) + (pt 1920 1296) +) +(connector + (text "nROM3" (rect 1754 1600 1802 1615)(font "Arial" )) + (pt 1672 1616) + (pt 1920 1616) +) +(connector + (text "nROM4" (rect 1754 1624 1802 1639)(font "Arial" )) + (pt 1672 1640) + (pt 1920 1640) +) +(connector + (text "nRP_UDS" (rect 1744 1648 1811 1663)(font "Arial" )) + (pt 1672 1664) + (pt 1920 1664) +) +(connector + (text "nRP_LDS" (rect 1746 1672 1810 1687)(font "Arial" )) + (pt 1672 1688) + (pt 1920 1688) +) +(connector + (text "YM_QA" (rect 1762 1904 1808 1919)(font "Arial" )) + (pt 1672 1920) + (pt 1928 1920) +) +(connector + (text "YM_QB" (rect 1762 1928 1809 1943)(font "Arial" )) + (pt 1672 1944) + (pt 1928 1944) +) +(connector + (text "YM_QC" (rect 1762 1952 1810 1967)(font "Arial" )) + (pt 1672 1968) + (pt 1928 1968) +) +(connector + (text "LP_BUSY" (rect 1114 1160 1177 1175)(font "Arial" )) + (pt 1264 1176) + (pt 1104 1176) +) +(connector + (text "nACSI_DRQ" (rect 1034 1192 1114 1207)(font "Arial" )) + (pt 1024 1208) + (pt 1264 1208) +) +(connector + (text "nACSI_INT" (rect 1034 1216 1104 1231)(font "Arial" )) + (pt 1024 1232) + (pt 1264 1232) +) +(connector + (text "MIDI_IN" (rect 1050 1352 1100 1367)(font "Arial" )) + (pt 1040 1368) + (pt 1264 1368) +) +(connector + (text "RxD" (rect 1114 1384 1141 1399)(font "Arial" )) + (pt 1264 1400) + (pt 1104 1400) +) +(connector + (text "nINDEX" (rect 1050 1640 1100 1655)(font "Arial" )) + (pt 1040 1656) + (pt 1264 1656) +) +(connector + (text "TRACK00" (rect 1050 1664 1113 1679)(font "Arial" )) + (pt 1040 1680) + (pt 1264 1680) +) +(connector + (text "nWP" (rect 1050 1688 1080 1703)(font "Arial" )) + (pt 1040 1704) + (pt 1264 1704) +) +(connector + (text "nRD_DATA" (rect 1050 1712 1123 1727)(font "Arial" )) + (pt 1040 1728) + (pt 1264 1728) +) +(connector + (text "nDCHG" (rect 1050 1736 1100 1751)(font "Arial" )) + (pt 1040 1752) + (pt 1264 1752) +) +(connector + (text "SD_CARD_DEDECT" (rect 1138 1840 1273 1855)(font "Arial" )) + (pt 1264 1856) + (pt 1128 1856) +) +(connector + (text "SD_CD_DATA3" (rect 1682 1984 1783 1999)(font "Arial" )) + (pt 1672 2000) + (pt 1856 2000) +) +(connector + (text "SD_CDM_D1" (rect 1682 2008 1769 2023)(font "Arial" )) + (pt 1672 2024) + (pt 1856 2024) +) +(connector + (text "nSCSI_C_D" (rect 1114 1272 1193 1287)(font "Arial" )) + (pt 1104 1288) + (pt 1264 1288) +) +(connector + (text "nSCSI_I_O" (rect 1114 1296 1185 1311)(font "Arial" )) + (pt 1104 1312) + (pt 1264 1312) +) +(connector + (text "DSA_D" (rect 1682 1704 1729 1719)(font "Arial" )) + (pt 1672 1720) + (pt 1856 1720) +) +(connector + (text "FB_AD[31..0]" (rect 1682 8 1765 23)(font "Arial" )) + (pt 1832 24) + (pt 1672 24) + (bus) +) +(connector + (text "FB_ADR[31..0]" (rect 1146 328 1240 343)(font "Arial" )) + (pt 1112 344) + (pt 1264 344) + (bus) +) +(connector + (text "nFB_WR" (rect 1162 184 1219 199)(font "Arial" )) + (pt 1152 200) + (pt 1264 200) +) +(connector + (text "nFB_CS1" (rect 1154 208 1216 223)(font "Arial" )) + (pt 1152 224) + (pt 1264 224) +) +(connector + (text "FB_SIZE0" (rect 1154 256 1218 271)(font "Arial" )) + (pt 1152 272) + (pt 1264 272) +) +(connector + (text "FB_SIZE1" (rect 1154 280 1218 295)(font "Arial" )) + (pt 1152 296) + (pt 1264 296) +) +(connector + (text "nFB_CS2" (rect 1162 232 1224 247)(font "Arial" )) + (pt 1152 248) + (pt 1264 248) +) +(connector + (text "nBLANK" (rect 1682 184 1736 199)(font "Arial" )) + (pt 1672 200) + (pt 1832 200) +) +(connector + (text "nSYNC" (rect 1682 208 1729 223)(font "Arial" )) + (pt 1672 224) + (pt 1832 224) +) +(connector + (text "nFB_CS3" (rect 1186 352 1248 367)(font "Arial" )) + (pt 1264 368) + (pt 1176 368) +) +(connector + (text "nFB_WR" (rect 1170 928 1227 943)(font "Arial" )) + (pt 1264 944) + (pt 1160 944) +) +(connector + (text "nFB_CS1" (rect 1162 952 1224 967)(font "Arial" )) + (pt 1264 968) + (pt 1160 968) +) +(connector + (text "nFB_CS2" (rect 1170 976 1232 991)(font "Arial" )) + (pt 1264 992) + (pt 1160 992) +) +(connector + (text "FB_SIZE0" (rect 1162 1000 1226 1015)(font "Arial" )) + (pt 1264 1016) + (pt 1160 1016) +) +(connector + (text "FB_SIZE1" (rect 1162 1024 1226 1039)(font "Arial" )) + (pt 1264 1040) + (pt 1160 1040) +) +(connector + (text "nFB_BURST" (rect 1162 1048 1244 1063)(font "Arial" )) + (pt 1264 1064) + (pt 1160 1064) +) +(connector + (text "nDACK0" (rect 1250 1096 1305 1111)(font "Arial" )) + (pt 1264 1112) + (pt 1160 1112) +) +(connector + (text "nRSTO" (rect 1170 1120 1217 1135)(font "Arial" )) + (pt 1264 1136) + (pt 1160 1136) +) +(connector + (text "nPD_VGA" (rect 1682 256 1745 271)(font "Arial" )) + (pt 1672 272) + (pt 1832 272) +) +(connector + (text "PIC_INT" (rect 1162 2584 1216 2599)(font "Arial" )) + (pt 1152 2600) + (pt 1264 2600) +) +(connector + (text "nIRQ[7..2]" (rect 1682 2408 1745 2423)(font "Arial" )) + (pt 1672 2424) + (pt 1832 2424) + (bus) +) +(connector + (text "CLK2M4576" (rect 1202 856 1282 871)(font "Arial" )) + (pt 1192 872) + (pt 1264 872) +) +(connector + (text "nFB_OE" (rect 1170 904 1224 919)(font "Arial" )) + (pt 1264 920) + (pt 1160 920) +) +(connector + (text "nFB_OE" (rect 1170 160 1224 175)(font "Arial" )) + (pt 1264 176) + (pt 1160 176) +) +(connector + (text "nFB_OE" (rect 1170 2392 1224 2407)(font "Arial" )) + (pt 1264 2408) + (pt 1160 2408) +) +(connector + (text "DVI_INT" (rect 1162 2632 1215 2647)(font "Arial" )) + (pt 1152 2648) + (pt 1264 2648) +) +(connector + (text "nPCI_INTA" (rect 1162 2728 1232 2743)(font "Arial" )) + (pt 1152 2744) + (pt 1264 2744) +) +(connector + (text "nPCI_INTB" (rect 1162 2704 1233 2719)(font "Arial" )) + (pt 1152 2720) + (pt 1264 2720) +) +(connector + (text "nPCI_INTC" (rect 1162 2680 1235 2695)(font "Arial" )) + (pt 1152 2696) + (pt 1264 2696) +) +(connector + (text "nPCI_INTD" (rect 1162 2656 1235 2671)(font "Arial" )) + (pt 1152 2672) + (pt 1264 2672) +) +(connector + (text "nMFP_INT" (rect 1162 2760 1229 2775)(font "Arial" )) + (pt 1152 2776) + (pt 1264 2776) +) +(connector + (text "nMFP_INT" (rect 1682 2072 1749 2087)(font "Arial" )) + (pt 1672 2088) + (pt 1784 2088) +) +(connector + (text "E0_INT" (rect 1162 2608 1210 2623)(font "Arial" )) + (pt 1152 2624) + (pt 1264 2624) +) +(connector + (text "FB_AD[31..0]" (rect 1682 2968 1765 2983)(font "Arial" )) + (pt 1832 2984) + (pt 1672 2984) + (bus) +) +(connector + (text "FB_ADR[31..0]" (rect 1146 3224 1240 3239)(font "Arial" )) + (pt 1112 3240) + (pt 1264 3240) + (bus) +) +(connector + (text "MAIN_CLK" (rect 1162 3008 1231 3023)(font "Arial" )) + (pt 1152 3024) + (pt 1264 3024) +) +(connector + (text "CLK33M" (rect 1210 2984 1265 2999)(font "Arial" )) + (pt 1200 3000) + (pt 1264 3000) +) +(connector + (text "nFB_WR" (rect 1170 3056 1227 3071)(font "Arial" )) + (pt 1264 3072) + (pt 1160 3072) +) +(connector + (text "nFB_CS1" (rect 1162 3080 1224 3095)(font "Arial" )) + (pt 1264 3096) + (pt 1160 3096) +) +(connector + (text "nFB_CS2" (rect 1170 3104 1232 3119)(font "Arial" )) + (pt 1264 3120) + (pt 1160 3120) +) +(connector + (text "FB_SIZE0" (rect 1162 3152 1226 3167)(font "Arial" )) + (pt 1264 3168) + (pt 1160 3168) +) +(connector + (text "FB_SIZE1" (rect 1162 3176 1226 3191)(font "Arial" )) + (pt 1264 3192) + (pt 1160 3192) +) +(connector + (text "nFB_BURST" (rect 1162 3200 1244 3215)(font "Arial" )) + (pt 1264 3216) + (pt 1160 3216) +) +(connector + (text "nRSTO" (rect 1170 3248 1217 3263)(font "Arial" )) + (pt 1264 3264) + (pt 1160 3264) +) +(connector + (text "nFB_OE" (rect 1170 3032 1224 3047)(font "Arial" )) + (pt 1264 3048) + (pt 1160 3048) +) +(connector + (text "nSRCS" (rect 1682 3272 1730 3287)(font "Arial" )) + (pt 1824 3288) + (pt 1672 3288) +) +(connector + (text "nSRBLE" (rect 1682 3296 1737 3311)(font "Arial" )) + (pt 1824 3312) + (pt 1672 3312) +) +(connector + (text "nSRBHE" (rect 1682 3320 1739 3335)(font "Arial" )) + (pt 1824 3336) + (pt 1672 3336) +) +(connector + (text "nSRWE" (rect 1682 3344 1732 3359)(font "Arial" )) + (pt 1824 3360) + (pt 1672 3360) +) +(connector + (text "nSROE" (rect 1682 3368 1730 3383)(font "Arial" )) + (pt 1824 3384) + (pt 1672 3384) +) +(connector + (text "DSP_INT" (rect 1130 2832 1190 2847)(font "Arial" )) + (pt 1264 2848) + (pt 1120 2848) +) +(connector + (text "DSP_INT" (rect 1682 3000 1742 3015)(font "Arial" )) + (pt 1816 3016) + (pt 1672 3016) +) +(connector + (text "CLK500k" (rect 482 2040 542 2055)(font "Arial" )) + (pt 472 2056) + (pt 544 2056) +) +(connector + (pt 528 2416) + (pt 616 2416) +) +(connector + (text "FB_ALE" (rect 1194 304 1245 319)(font "Arial" )) + (pt 1264 320) + (pt 1184 320) +) +(connector + (text "DDRCLK[3..0]" (rect 1162 136 1252 151)(font "Arial" )) + (pt 1152 152) + (pt 1264 152) + (bus) +) +(connector + (text "DDR_SYNC_66M" (rect 1178 112 1292 127)(font "Arial" )) + (pt 1168 128) + (pt 1264 128) +) +(connector + (text "VD[31..0]" (rect 1682 288 1739 303)(font "Arial" )) + (pt 1672 304) + (pt 2648 304) + (bus) +) +(connector + (text "VA[12..0]" (rect 1682 312 1737 327)(font "Arial" )) + (pt 1672 328) + (pt 2528 328) + (bus) +) +(connector + (text "nVWE" (rect 1682 336 1720 351)(font "Arial" )) + (pt 1672 352) + (pt 2400 352) +) +(connector + (text "nVCAS" (rect 1690 360 1734 375)(font "Arial" )) + (pt 1672 376) + (pt 2304 376) +) +(connector + (text "nVRAS" (rect 1690 384 1734 399)(font "Arial" )) + (pt 1672 400) + (pt 2208 400) +) +(connector + (text "nVCS" (rect 1690 408 1726 423)(font "Arial" )) + (pt 1672 424) + (pt 2040 424) +) +(connector + (text "VCKE" (rect 1690 432 1727 447)(font "Arial" )) + (pt 1672 448) + (pt 1944 448) +) +(connector + (text "VSYNC" (rect 1682 136 1729 151)(font "Arial" )) + (pt 1672 152) + (pt 1832 152) +) +(connector + (text "HSYNC" (rect 1682 160 1731 175)(font "Arial" )) + (pt 1672 176) + (pt 1832 176) +) +(connector + (text "VB[7..0]" (rect 1754 112 1802 127)(font "Arial" )) + (pt 1672 128) + (pt 1912 128) + (bus) +) +(connector + (text "VG[7..0]" (rect 1842 88 1891 103)(font "Arial" )) + (pt 1672 104) + (pt 2000 104) + (bus) +) +(connector + (text "VR[7..0]" (rect 1922 64 1971 79)(font "Arial" )) + (pt 1672 80) + (pt 2080 80) + (bus) +) +(connector + (text "IO[17..0]" (rect 1962 3224 2015 3239)(font "Arial" )) + (pt 1672 3240) + (pt 2104 3240) + (bus) +) +(connector + (text "SRD[15..0]" (rect 1802 3248 1871 3263)(font "Arial" )) + (pt 1672 3264) + (pt 1944 3264) + (bus) +) +(connector + (text "SCSI_D[7..0]" (rect 1786 1056 1868 1071)(font "Arial" )) + (pt 1672 1072) + (pt 1936 1072) + (bus) +) +(connector + (text "ACSI_D[7..0]" (rect 1754 880 1835 895)(font "Arial" )) + (pt 1672 896) + (pt 1904 896) + (bus) +) +(connector + (text "LP_D[7..0]" (rect 1810 800 1877 815)(font "Arial" )) + (pt 1672 816) + (pt 1960 816) + (bus) +) +(connector + (text "AMKB_RX" (rect 786 1480 850 1495)(font "Arial" )) + (pt 776 1496) + (pt 1264 1496) +) +(connector + (text "CLK33M" (rect 346 288 401 303)(font "Arial" )) + (pt 336 304) + (pt 400 304) +) +(connector + (text "CLK25M" (rect 1202 608 1257 623)(font "Arial" )) + (pt 1192 624) + (pt 1264 624) +) +(connector + (text "TIMEBASE[17]" (rect 354 2120 446 2135)(font "Arial" )) + (pt 440 2136) + (pt 344 2136) +) +(connector + (text "TIMEBASE[17..0]" (rect 706 2048 813 2063)(font "Arial" )) + (pt 688 2064) + (pt 808 2064) + (bus) +) +(connector + (text "HSYNC" (rect 1130 2784 1179 2799)(font "Arial" )) + (pt 1264 2800) + (pt 1120 2800) +) +(connector + (text "VSYNC" (rect 1130 2808 1177 2823)(font "Arial" )) + (pt 1264 2824) + (pt 1120 2824) +) +(connector + (text "VSYNC" (rect 1130 1920 1177 1935)(font "Arial" )) + (pt 1264 1936) + (pt 1120 1936) +) +(connector + (text "HSYNC" (rect 1130 1896 1179 1911)(font "Arial" )) + (pt 1264 1912) + (pt 1120 1912) +) +(connector + (pt 488 2136) + (pt 608 2136) +) +(connector + (text "nFB_TA" (rect 1946 720 1996 735)(font "Arial" )) + (pt 1944 736) + (pt 2056 736) +) +(connector + (text "INT_HANDLER_TA" (rect 1682 2832 1805 2847)(font "Arial" )) + (pt 1672 2848) + (pt 1808 2848) +) +(connector + (text "DSP_TA" (rect 1682 3504 1736 3519)(font "Arial" )) + (pt 1672 3520) + (pt 1792 3520) +) +(connector + (text "Video_TA" (rect 1682 696 1743 711)(font "Arial" )) + (pt 1672 712) + (pt 1880 712) +) +(connector + (text "FALCON_IO_TA" (rect 1682 744 1785 759)(font "Arial" )) + (pt 1672 760) + (pt 1880 760) +) +(connector + (text "INT_HANDLER_TA" (rect 1810 728 1933 743)(font "Arial" )) + (pt 1880 744) + (pt 1800 744) +) +(connector + (text "DSP_TA" (rect 1810 712 1864 727)(font "Arial" )) + (pt 1880 728) + (pt 1800 728) +) +(connector + (pt 2680 888) + (pt 2712 888) +) +(connector + (pt 2632 888) + (pt 2504 888) +) +(connector + (pt 2504 888) + (pt 2504 760) +) +(connector + (text "DDRCLK[0]" (rect 2450 744 2525 759)(font "Arial" )) + (pt 2440 760) + (pt 2504 760) +) +(connector + (pt 2504 760) + (pt 2536 760) +) +(connector + (text "MAIN_CLK" (rect 1186 88 1255 103)(font "Arial" )) + (pt 1184 104) + (pt 1264 104) +) +(connector + (text "nRSTO" (rect 1194 40 1241 55)(font "Arial" )) + (pt 1184 56) + (pt 1264 56) +) +(connector + (text "BA[1..0]" (rect 1682 456 1730 471)(font "Arial" )) + (pt 1672 472) + (pt 1832 472) + (bus) +) +(connector + (text "PIXEL_CLK" (rect 2394 -64 2469 -49)(font "Arial" )) + (pt 2384 -48) + (pt 2464 -48) +) +(connector + (text "PIXEL_CLK" (rect 2394 56 2469 71)(font "Arial" )) + (pt 2384 72) + (pt 2464 72) +) +(connector + (text "nBLANK" (rect 2394 24 2448 39)(font "Arial" )) + (pt 2464 40) + (pt 2384 40) +) +(connector + (text "nBLANK" (rect 2394 40 2448 55)(font "Arial" )) + (pt 2464 56) + (pt 2384 56) +) +(connector + (pt 2696 -80) + (pt 2712 -80) +) +(connector + (pt 2696 40) + (pt 2712 40) +) +(connector + (text "PIXEL_CLK" (rect 1826 -48 1901 -33)(font "Arial" )) + (pt 1816 -32) + (pt 1896 -32) +) +(connector + (pt 2128 -64) + (pt 2136 -64) +) +(connector + (text "PIXEL_CLK" (rect 1682 232 1757 247)(font "Arial" )) + (pt 1744 248) + (pt 1672 248) +) +(connector + (text "PIXEL_CLK" (rect 2394 184 2469 199)(font "Arial" )) + (pt 2384 200) + (pt 2464 200) +) +(connector + (pt 2456 168) + (pt 2456 136) +) +(connector + (pt 2464 168) + (pt 2456 168) +) +(connector + (pt 2456 136) + (pt 2400 136) +) +(connector + (pt 2464 184) + (pt 2440 184) +) +(connector + (pt 2712 168) + (pt 2696 168) +) +(connector + (pt 2440 160) + (pt 2424 160) +) +(connector + (pt 2440 184) + (pt 2440 160) +) +(connector + (text "nFB_CS3" (rect 1170 3128 1232 3143)(font "Arial" )) + (pt 1264 3144) + (pt 1160 3144) +) +(connector + (text "nBLANK" (rect 1154 1968 1208 1983)(font "Arial" )) + (pt 1264 1984) + (pt 1144 1984) +) +(connector + (text "DSP_INT" (rect 1154 1944 1214 1959)(font "Arial" )) + (pt 1264 1960) + (pt 1144 1960) +) +(connector + (text "STEP_DIR" (rect 1682 1752 1751 1767)(font "Arial" )) + (pt 1672 1768) + (pt 1856 1768) +) +(connector + (pt 1904 1768) + (pt 2136 1768) +) +(connector + (pt 1904 1816) + (pt 2136 1816) +) +(connector + (text "WR_DATA" (rect 1682 1800 1749 1815)(font "Arial" )) + (pt 1672 1816) + (pt 1856 1816) +) +(connector + (text "DMA_DRQ" (rect 1130 2856 1199 2871)(font "Arial" )) + (pt 1264 2872) + (pt 1120 2872) +) +(connector + (text "DMA_DRQ" (rect 1682 2096 1751 2111)(font "Arial" )) + (pt 1784 2112) + (pt 1672 2112) +) +(connector + (text "FDC_CLK" (rect 1202 880 1268 895)(font "Arial" )) + (pt 1192 896) + (pt 1264 896) +) +(connector + (text "MOT_ON" (rect 1626 1728 1685 1743)(font "Arial" )) + (pt 1672 1744) + (pt 1800 1744) +) +(connector + (pt 1848 1744) + (pt 2136 1744) +) +(connector + (text "STEP" (rect 1626 1776 1662 1791)(font "Arial" )) + (pt 1672 1792) + (pt 1800 1792) +) +(connector + (pt 1848 1792) + (pt 2136 1792) +) +(connector + (text "WR_GATE" (rect 1690 1824 1758 1839)(font "Arial" )) + (pt 1672 1840) + (pt 1800 1840) +) +(connector + (pt 1848 1840) + (pt 2136 1840) +) +(connector + (text "FB_ALE" (rect 1186 1992 1237 2007)(font "Arial" )) + (pt 1144 2008) + (pt 1264 2008) +) +(connector + (text "AMKB_TX" (rect 1946 1392 2008 1407)(font "Arial" )) + (pt 1672 1408) + (pt 2112 1408) +) +(connector + (text "PIC_AMKB_RX" (rect 786 1504 882 1519)(font "Arial" )) + (pt 776 1520) + (pt 1264 1520) +) +(connector + (pt 400 -16) + (pt 440 -16) +) +(connector + (pt 440 248) + (pt 400 248) +) +(connector + (pt 400 -16) + (pt 400 248) +) +(connector + (pt 400 248) + (pt 400 304) +) +(connector + (text "CLK2M" (rect 754 -32 801 -17)(font "Arial" )) + (pt 744 -16) + (pt 816 -16) +) +(connector + (text "FDC_CLK" (rect 754 -8 820 7)(font "Arial" )) + (pt 744 8) + (pt 816 8) +) +(connector + (text "FB_AD[31..0]" (rect 370 1352 453 1367)(font "Arial" )) + (pt 352 1368) + (pt 464 1368) + (bus) +) +(connector + (text "FB_ADR[31..0]" (rect 642 1376 736 1391)(font "Arial" )) + (pt 608 1392) + (pt 760 1392) + (bus) +) +(connector + (text "DDR_SYNC_66M" (rect 378 1368 492 1383)(font "Arial" )) + (pt 368 1384) + (pt 464 1384) +) +(connector + (text "FB_ALE" (rect 386 1384 437 1399)(font "Arial" )) + (pt 376 1400) + (pt 464 1400) +) +(connector + (text "ACP_CONF[31..0]" (rect 1682 2568 1797 2583)(font "Arial" )) + (pt 1672 2584) + (pt 1832 2584) + (bus) +) +(connector + (text "ACP_CONF[31..24]" (rect 1146 2064 1269 2079)(font "Arial" )) + (pt 1136 2080) + (pt 1264 2080) + (bus) +) +(connector + (text "TIN0" (rect 1682 2624 1712 2639)(font "Arial" )) + (pt 1832 2640) + (pt 1672 2640) +) +(connector + (pt 1896 -48) + (pt 1856 -48) +) +(connector + (pt 1856 -48) + (pt 1856 -64) +) +(connector + (pt 1856 -64) + (pt 1896 -64) +) +(connector + (pt 2464 -64) + (pt 2424 -64) +) +(connector + (pt 2424 -80) + (pt 2424 -64) +) +(connector + (text "HD_DD" (rect 1050 1616 1100 1631)(font "Arial" )) + (pt 1040 1632) + (pt 1264 1632) +) +(connector + (text "CLK48M" (rect 754 40 809 55)(font "Arial" )) + (pt 744 56) + (pt 840 56) +) +(connector + (text "CLK25M" (rect 754 16 809 31)(font "Arial" )) + (pt 744 32) + (pt 864 32) +) +(connector + (text "DDRCLK[0]" (rect 762 -296 837 -281)(font "Arial" )) + (pt 752 -280) + (pt 848 -280) +) +(connector + (text "DDRCLK[1]" (rect 762 -272 837 -257)(font "Arial" )) + (pt 752 -256) + (pt 848 -256) +) +(connector + (text "DDRCLK[2]" (rect 762 -248 837 -233)(font "Arial" )) + (pt 752 -232) + (pt 848 -232) +) +(connector + (text "DDRCLK[3]" (rect 762 -224 837 -209)(font "Arial" )) + (pt 752 -208) + (pt 848 -208) +) +(connector + (text "DDR_SYNC_66M" (rect 762 -200 876 -185)(font "Arial" )) + (pt 752 -184) + (pt 848 -184) +) +(connector + (pt 408 672) + (pt 472 672) +) +(connector + (text "VIDEO_RECONFIG" (rect 74 496 199 511)(font "Arial" )) + (pt 192 512) + (pt 64 512) +) +(connector + (text "MAIN_CLK" (rect 330 -296 399 -281)(font "Arial" )) + (pt 264 -280) + (pt 448 -280) +) +(connector + (pt 408 640) + (pt 472 640) +) +(connector + (pt 408 624) + (pt 512 624) +) +(connector + (text "VR_D[8..0]" (rect 418 552 486 567)(font "Arial" )) + (pt 496 568) + (pt 408 568) + (bus) +) +(connector + (text "MAIN_CLK" (rect 122 664 191 679)(font "Arial" )) + (pt 112 680) + (pt 192 680) +) +(connector + (pt 536 720) + (pt 408 720) +) +(connector + (pt 1064 808) + (pt 1064 616) +) +(connector + (pt 1072 816) + (pt 1072 592) +) +(connector + (pt 472 672) + (pt 472 664) +) +(connector + (pt 472 640) + (pt 472 616) +) +(connector + (pt 512 624) + (pt 512 640) +) +(connector + (pt 536 720) + (pt 536 592) +) +(connector + (pt 536 592) + (pt 608 592) +) +(connector + (pt 472 616) + (pt 608 616) +) +(connector + (pt 512 640) + (pt 608 640) +) +(connector + (pt 472 664) + (pt 608 664) +) +(connector + (pt 408 688) + (pt 608 688) +) +(connector + (pt 984 592) + (pt 1072 592) +) +(connector + (pt 984 616) + (pt 1064 616) +) +(connector + (text "FB_ADR[5..2]" (rect 82 568 168 583)(font "Arial" )) + (pt 192 584) + (pt 72 584) + (bus) +) +(connector + (pt 1064 808) + (pt 80 808) +) +(connector + (pt 192 656) + (pt 80 656) +) +(connector + (pt 80 656) + (pt 80 808) +) +(connector + (pt 1072 816) + (pt 72 816) +) +(connector + (pt 192 640) + (pt 72 640) +) +(connector + (pt 72 640) + (pt 72 816) +) +(connector + (text "FB_ADR[8..6]" (rect 82 584 168 599)(font "Arial" )) + (pt 192 600) + (pt 72 600) + (bus) +) +(connector + (text "VR_RD" (rect 98 512 146 527)(font "Arial" )) + (pt 64 528) + (pt 192 528) +) +(connector + (text "VR_WR" (rect 98 528 148 543)(font "Arial" )) + (pt 64 544) + (pt 192 544) +) +(connector + (text "VR_D[8..0]" (rect 1170 464 1238 479)(font "Arial" )) + (pt 1144 480) + (pt 1264 480) + (bus) +) +(connector + (text "VDQS[3..0]" (rect 1674 504 1743 519)(font "Arial" )) + (pt 2040 544) + (pt 1960 544) + (bus) +) +(connector + (pt 1672 544) + (pt 1888 544) + (bus) +) +(connector + (pt 1888 544) + (pt 1888 568) + (bus) +) +(connector + (text "VDM[3..0]" (rect 1682 528 1742 543)(font "Arial" )) + (pt 1944 568) + (pt 1888 568) + (bus) +) +(connector + (pt 1672 520) + (pt 1960 520) + (bus) +) +(connector + (pt 1960 544) + (pt 1960 520) + (bus) +) +(connector + (text "VIDEO_RECONFIG" (rect 1674 560 1799 575)(font "Arial" )) + (pt 1672 576) + (pt 1792 576) +) +(connector + (text "VR_WR" (rect 1698 592 1748 607)(font "Arial" )) + (pt 1672 608) + (pt 1792 608) +) +(connector + (text "VR_BUSY" (rect 418 496 482 511)(font "Arial" )) + (pt 408 512) + (pt 480 512) +) +(connector + (text "VR_BUSY" (rect 1170 448 1234 463)(font "Arial" )) + (pt 1144 464) + (pt 1264 464) +) +(connector + (text "VR_RD" (rect 1698 576 1746 591)(font "Arial" )) + (pt 1792 592) + (pt 1672 592) +) +(connector + (text "nRSTO" (rect -86 680 -39 695)(font "Arial" )) + (pt -96 696) + (pt -16 696) +) +(connector + (pt 32 696) + (pt 192 696) +) +(connector + (text "FB_AD[24..16]" (rect 82 552 174 567)(font "Arial" )) + (pt 72 568) + (pt 192 568) + (bus) +) +(connector + (text "CLK48M" (rect 538 552 593 567)(font "Arial" )) + (pt 528 568) + (pt 608 568) +) +(connector + (text "CLK_VIDEO" (rect 1162 552 1241 567)(font "Arial" )) + (pt 984 568) + (pt 1264 568) +) +(connector + (text "CLK33M" (rect 1202 584 1257 599)(font "Arial" )) + (pt 1264 600) + (pt 1192 600) +) +(connector + (text "CLK500k" (rect 802 232 862 247)(font "Arial" )) + (pt 768 248) + (pt 864 248) +) +(connector + (text "CLK2M4576" (rect 802 256 882 271)(font "Arial" )) + (pt 768 272) + (pt 864 272) +) +(connector + (text "CLK24M576" (rect 802 280 882 295)(font "Arial" )) + (pt 768 296) + (pt 864 296) +) +(connector + (text "nRSTO" (rect 1018 424 1065 439)(font "Arial" )) + (pt 1008 440) + (pt 1096 440) +) +(connector + (pt 768 320) + (pt 872 320) +) +(connector + (pt 872 432) + (pt 944 432) +) +(connector + (pt 840 448) + (pt 944 448) +) +(connector + (pt 872 320) + (pt 872 432) +) +(connector + (text "HSYNC" (rect 2314 -96 2363 -81)(font "Arial" )) + (pt 2304 -80) + (pt 2424 -80) +) +(connector + (pt 2424 -80) + (pt 2464 -80) +) +(connector + (text "VSYNC" (rect 1746 -80 1793 -65)(font "Arial" )) + (pt 1736 -64) + (pt 1856 -64) +) +(junction (pt 2504 760)) +(junction (pt 400 248)) +(junction (pt 1856 -64)) +(junction (pt 2424 -80)) diff --git a/FPGA_quartus_GE/firebee1.done b/FPGA_quartus_GE/firebee1.done new file mode 100644 index 0000000..87f69a1 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.done @@ -0,0 +1 @@ +Mon Mar 03 21:48:22 2014 diff --git a/FPGA_quartus_GE/firebee1.qpf b/FPGA_quartus_GE/firebee1.qpf new file mode 100644 index 0000000..49e7c57 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.qpf @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2013 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II 32-bit +# Version 13.1.0 Build 162 10/23/2013 SJ Web Edition +# Date created = 01:26:07 March 01, 2014 +# +# -------------------------------------------------------------------------- # + +QUARTUS_VERSION = "13.1" +DATE = "01:26:07 March 01, 2014" + +# Revisions + +PROJECT_REVISION = "firebee1" diff --git a/FPGA_quartus_GE/firebee1.qsf b/FPGA_quartus_GE/firebee1.qsf new file mode 100644 index 0000000..c3904e8 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.qsf @@ -0,0 +1,852 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2010 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II +# Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Web Edition +# Date created = 12:45:00 November 06, 2010 +# +# -------------------------------------------------------------------------- # +# +# Notes: +# +# 1) The default values for assignments are stored in the file: +# firebee1_assignment_defaults.qdf +# If this file doesn't exist, see file: +# assignment_defaults.qdf +# +# 2) Altera recommends that you do not modify this file. This +# file is updated automatically by the Quartus II software +# and any changes you make may be lost or overwritten. +# +# -------------------------------------------------------------------------- # + + + +# Project-Wide Assignments +# ======================== +set_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.1 +set_global_assignment -name PROJECT_CREATION_TIME_DATE "10:07:29 SEPTEMBER 03, 2009" +set_global_assignment -name LAST_QUARTUS_VERSION 13.1 + +# Pin & Location Assignments +# ========================== +set_location_assignment PIN_AB12 -to CLK33M +set_location_assignment PIN_G2 -to MAIN_CLK +set_location_assignment PIN_Y3 -to FB_AD[0] +set_location_assignment PIN_Y6 -to FB_AD[1] +set_location_assignment PIN_AA3 -to FB_AD[2] +set_location_assignment PIN_AB3 -to FB_AD[3] +set_location_assignment PIN_W6 -to FB_AD[4] +set_location_assignment PIN_V7 -to FB_AD[5] +set_location_assignment PIN_AA4 -to FB_AD[6] +set_location_assignment PIN_AB4 -to FB_AD[7] +set_location_assignment PIN_AA5 -to FB_AD[8] +set_location_assignment PIN_AB5 -to FB_AD[9] +set_location_assignment PIN_W7 -to FB_AD[10] +set_location_assignment PIN_Y7 -to FB_AD[11] +set_location_assignment PIN_U9 -to FB_AD[12] +set_location_assignment PIN_V8 -to FB_AD[13] +set_location_assignment PIN_W8 -to FB_AD[14] +set_location_assignment PIN_AA7 -to FB_AD[15] +set_location_assignment PIN_AB7 -to FB_AD[16] +set_location_assignment PIN_Y8 -to FB_AD[17] +set_location_assignment PIN_V9 -to FB_AD[18] +set_location_assignment PIN_V10 -to FB_AD[19] +set_location_assignment PIN_T10 -to FB_AD[20] +set_location_assignment PIN_U10 -to FB_AD[21] +set_location_assignment PIN_AA8 -to FB_AD[22] +set_location_assignment PIN_AB8 -to FB_AD[23] +set_location_assignment PIN_T11 -to FB_AD[24] +set_location_assignment PIN_AA9 -to FB_AD[25] +set_location_assignment PIN_AB9 -to FB_AD[26] +set_location_assignment PIN_U11 -to FB_AD[27] +set_location_assignment PIN_V11 -to FB_AD[28] +set_location_assignment PIN_W10 -to FB_AD[29] +set_location_assignment PIN_Y10 -to FB_AD[30] +set_location_assignment PIN_AA10 -to FB_AD[31] +set_location_assignment PIN_R7 -to FB_ALE +set_location_assignment PIN_N19 -to LED_FPGA_OK +set_location_assignment PIN_AB10 -to CLK24M576 +set_location_assignment PIN_J1 -to CLKUSB +set_location_assignment PIN_T4 -to CLK25M +set_location_assignment PIN_U8 -to FB_SIZE0 +set_location_assignment PIN_Y4 -to FB_SIZE1 +set_location_assignment PIN_T3 -to nFB_BURST +set_location_assignment PIN_T8 -to nFB_CS1 +set_location_assignment PIN_T9 -to nFB_CS2 +set_location_assignment PIN_V6 -to nFB_CS3 +set_location_assignment PIN_R6 -to nFB_OE +set_location_assignment PIN_T5 -to nFB_WR +set_location_assignment PIN_R5 -to TIN0 +set_location_assignment PIN_T21 -to nMASTER +set_location_assignment PIN_E11 -to nDREQ1 +set_location_assignment PIN_A12 -to nDACK1 +set_location_assignment PIN_B12 -to nDACK0 +set_location_assignment PIN_T22 -to TOUT0 +set_location_assignment PIN_AB17 -to DDR_CLK +set_location_assignment PIN_AA17 -to nDDR_CLK +set_location_assignment PIN_AB18 -to nVCAS +set_location_assignment PIN_T18 -to nVCS +set_location_assignment PIN_W17 -to nVRAS +set_location_assignment PIN_Y17 -to nVWE +set_location_assignment PIN_W20 -to VA[0] +set_location_assignment PIN_W22 -to VA[1] +set_location_assignment PIN_W21 -to VA[2] +set_location_assignment PIN_Y22 -to VA[3] +set_location_assignment PIN_AA22 -to VA[4] +set_location_assignment PIN_Y21 -to VA[5] +set_location_assignment PIN_AA21 -to VA[6] +set_location_assignment PIN_AA20 -to VA[7] +set_location_assignment PIN_AB20 -to VA[8] +set_location_assignment PIN_AB19 -to VA[9] +set_location_assignment PIN_V21 -to VA[10] +set_location_assignment PIN_U19 -to VA[11] +set_location_assignment PIN_AA18 -to VA[12] +set_location_assignment PIN_U15 -to VCKE +set_location_assignment PIN_M22 -to VD[0] +set_location_assignment PIN_M21 -to VD[1] +set_location_assignment PIN_P22 -to VD[2] +set_location_assignment PIN_R20 -to VD[3] +set_location_assignment PIN_P21 -to VD[4] +set_location_assignment PIN_R17 -to VD[5] +set_location_assignment PIN_R19 -to VD[6] +set_location_assignment PIN_U21 -to VD[7] +set_location_assignment PIN_V22 -to VD[8] +set_location_assignment PIN_R18 -to VD[9] +set_location_assignment PIN_P17 -to VD[10] +set_location_assignment PIN_R21 -to VD[11] +set_location_assignment PIN_N17 -to VD[12] +set_location_assignment PIN_P20 -to VD[13] +set_location_assignment PIN_R22 -to VD[14] +set_location_assignment PIN_N20 -to VD[15] +set_location_assignment PIN_T12 -to VD[16] +set_location_assignment PIN_Y13 -to VD[17] +set_location_assignment PIN_AA13 -to VD[18] +set_location_assignment PIN_V14 -to VD[19] +set_location_assignment PIN_U13 -to VD[20] +set_location_assignment PIN_V15 -to VD[21] +set_location_assignment PIN_W14 -to VD[22] +set_location_assignment PIN_AB16 -to VD[23] +set_location_assignment PIN_AB15 -to VD[24] +set_location_assignment PIN_AA14 -to VD[25] +set_location_assignment PIN_AB14 -to VD[26] +set_location_assignment PIN_V13 -to VD[27] +set_location_assignment PIN_W13 -to VD[28] +set_location_assignment PIN_AB13 -to VD[29] +set_location_assignment PIN_V12 -to VD[30] +set_location_assignment PIN_U12 -to VD[31] +set_location_assignment PIN_AA16 -to VDM[0] +set_location_assignment PIN_V16 -to VDM[1] +set_location_assignment PIN_U20 -to VDM[2] +set_location_assignment PIN_T17 -to VDM[3] +set_location_assignment PIN_AA15 -to VDQS[0] +set_location_assignment PIN_W15 -to VDQS[1] +set_location_assignment PIN_U22 -to VDQS[2] +set_location_assignment PIN_T16 -to VDQS[3] +set_location_assignment PIN_V1 -to nPD_VGA +set_location_assignment PIN_G18 -to VB[0] +set_location_assignment PIN_H17 -to VB[1] +set_location_assignment PIN_C22 -to VB[2] +set_location_assignment PIN_C21 -to VB[3] +set_location_assignment PIN_B22 -to VB[4] +set_location_assignment PIN_B21 -to VB[5] +set_location_assignment PIN_C20 -to VB[6] +set_location_assignment PIN_D20 -to VB[7] +set_location_assignment PIN_H19 -to VG[0] +set_location_assignment PIN_E22 -to VG[1] +set_location_assignment PIN_E21 -to VG[2] +set_location_assignment PIN_H18 -to VG[3] +set_location_assignment PIN_J17 -to VG[4] +set_location_assignment PIN_H16 -to VG[5] +set_location_assignment PIN_D22 -to VG[6] +set_location_assignment PIN_D21 -to VG[7] +set_location_assignment PIN_J22 -to VR[0] +set_location_assignment PIN_J21 -to VR[1] +set_location_assignment PIN_H22 -to VR[2] +set_location_assignment PIN_H21 -to VR[3] +set_location_assignment PIN_K17 -to VR[4] +set_location_assignment PIN_K18 -to VR[5] +set_location_assignment PIN_J18 -to VR[6] +set_location_assignment PIN_F22 -to VR[7] +set_location_assignment PIN_M6 -to ACSI_A1 +set_location_assignment PIN_B1 -to ACSI_D[0] +set_location_assignment PIN_G5 -to ACSI_D[1] +set_location_assignment PIN_E3 -to ACSI_D[2] +set_location_assignment PIN_C2 -to ACSI_D[3] +set_location_assignment PIN_C1 -to ACSI_D[4] +set_location_assignment PIN_D2 -to ACSI_D[5] +set_location_assignment PIN_H7 -to ACSI_D[6] +set_location_assignment PIN_H6 -to ACSI_D[7] +set_location_assignment PIN_L6 -to ACSI_DIR +set_location_assignment PIN_N1 -to AMKB_TX +set_location_assignment PIN_F15 -to DSA_D +set_location_assignment PIN_D15 -to DTR +set_location_assignment PIN_A11 -to DVI_INT +set_location_assignment PIN_G21 -to E0_INT +set_location_assignment PIN_M5 -to IDE_RES +set_location_assignment PIN_A8 -to IO[0] +set_location_assignment PIN_A7 -to IO[1] +set_location_assignment PIN_B7 -to IO[2] +set_location_assignment PIN_A6 -to IO[3] +set_location_assignment PIN_B6 -to IO[4] +set_location_assignment PIN_E9 -to IO[5] +set_location_assignment PIN_C8 -to IO[6] +set_location_assignment PIN_C7 -to IO[7] +set_location_assignment PIN_G10 -to IO[8] +set_location_assignment PIN_A15 -to IO[9] +set_location_assignment PIN_B15 -to IO[10] +set_location_assignment PIN_C13 -to IO[11] +set_location_assignment PIN_D13 -to IO[12] +set_location_assignment PIN_E13 -to IO[13] +set_location_assignment PIN_A14 -to IO[14] +set_location_assignment PIN_B14 -to IO[15] +set_location_assignment PIN_A13 -to IO[16] +set_location_assignment PIN_B13 -to IO[17] +set_location_assignment PIN_F7 -to LP_D[0] +set_location_assignment PIN_C4 -to LP_D[1] +set_location_assignment PIN_C3 -to LP_D[2] +set_location_assignment PIN_E7 -to LP_D[3] +set_location_assignment PIN_D6 -to LP_D[4] +set_location_assignment PIN_B3 -to LP_D[5] +set_location_assignment PIN_A3 -to LP_D[6] +set_location_assignment PIN_G8 -to LP_D[7] +set_location_assignment PIN_E6 -to LP_STR +set_location_assignment PIN_H5 -to MIDI_OLR +set_location_assignment PIN_B2 -to MIDI_TLR +set_location_assignment PIN_M4 -to nACSI_ACK +set_location_assignment PIN_M2 -to nACSI_CS +set_location_assignment PIN_M1 -to nACSI_RESET +set_location_assignment PIN_W2 -to nCF_CS0 +set_location_assignment PIN_W1 -to nCF_CS1 +set_location_assignment PIN_T7 -to nFB_TA +set_location_assignment PIN_R2 -to nIDE_CS0 +set_location_assignment PIN_R1 -to nIDE_CS1 +set_location_assignment PIN_P1 -to nIDE_RD +set_location_assignment PIN_P2 -to nIDE_WR +set_location_assignment PIN_F21 -to nIRQ[2] +set_location_assignment PIN_H20 -to nIRQ[3] +set_location_assignment PIN_F20 -to nIRQ[4] +set_location_assignment PIN_P5 -to nIRQ[5] +set_location_assignment PIN_P7 -to nIRQ[6] +set_location_assignment PIN_N7 -to nIRQ[7] +set_location_assignment PIN_AA1 -to nPCI_INTA +set_location_assignment PIN_V4 -to nPCI_INTB +set_location_assignment PIN_V3 -to nPCI_INTC +set_location_assignment PIN_P6 -to nPCI_INTD +set_location_assignment PIN_P3 -to nROM3 +set_location_assignment PIN_U2 -to nROM4 +set_location_assignment PIN_N5 -to nRP_LDS +set_location_assignment PIN_P4 -to nRP_UDS +set_location_assignment PIN_N2 -to nSCSI_ACK +set_location_assignment PIN_M3 -to nSCSI_ATN +set_location_assignment PIN_N8 -to nSCSI_BUSY +set_location_assignment PIN_N6 -to nSCSI_RST +set_location_assignment PIN_M8 -to nSCSI_SEL +set_location_assignment PIN_B20 -to nSDSEL +set_location_assignment PIN_B4 -to nSRBHE +set_location_assignment PIN_A4 -to nSRBLE +set_location_assignment PIN_B8 -to nSRCS +set_location_assignment PIN_F11 -to nSROE +set_location_assignment PIN_F8 -to nSRWE +set_location_assignment PIN_G14 -to nWR +set_location_assignment PIN_D17 -to nWR_GATE +set_location_assignment PIN_AA2 -to PIC_INT +set_location_assignment PIN_B18 -to RTS +set_location_assignment PIN_J6 -to SCSI_D[0] +set_location_assignment PIN_E1 -to SCSI_D[1] +set_location_assignment PIN_F2 -to SCSI_D[2] +set_location_assignment PIN_F1 -to SCSI_D[3] +set_location_assignment PIN_G4 -to SCSI_D[4] +set_location_assignment PIN_G3 -to SCSI_D[5] +set_location_assignment PIN_L8 -to SCSI_D[6] +set_location_assignment PIN_K8 -to SCSI_D[7] +set_location_assignment PIN_J7 -to SCSI_DIR +set_location_assignment PIN_M7 -to SCSI_PAR +set_location_assignment PIN_F13 -to SD_CD_DATA3 +set_location_assignment PIN_C15 -to SD_CLK +set_location_assignment PIN_E14 -to SD_CMD_D1 +set_location_assignment PIN_B5 -to SRD[0] +set_location_assignment PIN_A5 -to SRD[1] +set_location_assignment PIN_C6 -to SRD[2] +set_location_assignment PIN_G11 -to SRD[3] +set_location_assignment PIN_C10 -to SRD[4] +set_location_assignment PIN_F9 -to SRD[5] +set_location_assignment PIN_E10 -to SRD[6] +set_location_assignment PIN_H11 -to SRD[7] +set_location_assignment PIN_B9 -to SRD[8] +set_location_assignment PIN_A10 -to SRD[9] +set_location_assignment PIN_A9 -to SRD[10] +set_location_assignment PIN_B10 -to SRD[11] +set_location_assignment PIN_D10 -to SRD[12] +set_location_assignment PIN_F10 -to SRD[13] +set_location_assignment PIN_G9 -to SRD[14] +set_location_assignment PIN_H10 -to SRD[15] +set_location_assignment PIN_A18 -to TxD +set_location_assignment PIN_A17 -to YM_QA +set_location_assignment PIN_G13 -to YM_QB +set_location_assignment PIN_E15 -to YM_QC +set_location_assignment PIN_T1 -to WP_CF_CARD +set_location_assignment PIN_C19 -to TRACK00 +set_location_assignment PIN_M19 -to SD_WP +set_location_assignment PIN_B17 -to SD_DATA2 +set_location_assignment PIN_A16 -to SD_DATA1 +set_location_assignment PIN_B16 -to SD_DATA0 +set_location_assignment PIN_M20 -to SD_CARD_DEDECT +set_location_assignment PIN_H15 -to RxD +set_location_assignment PIN_B19 -to RI +set_location_assignment PIN_L7 -to PIC_AMKB_RX +set_location_assignment PIN_D19 -to nWP +set_location_assignment PIN_H2 -to nSCSI_MSG +set_location_assignment PIN_J3 -to nSCSI_I_O +set_location_assignment PIN_U1 -to nSCSI_DRQ +set_location_assignment PIN_H1 -to nSCSI_C_D +set_location_assignment PIN_A20 -to nRD_DATA +set_location_assignment PIN_C17 -to nDCHG +set_location_assignment PIN_J4 -to nACSI_INT +set_location_assignment PIN_K7 -to nACSI_DRQ +set_location_assignment PIN_E12 -to MIDI_IN +set_location_assignment PIN_G7 -to LP_BUSY +set_location_assignment PIN_Y1 -to IDE_RDY +set_location_assignment PIN_G22 -to IDE_INT +set_location_assignment PIN_F16 -to HD_DD +set_location_assignment PIN_A19 -to DCD +set_location_assignment PIN_H14 -to CTS +set_location_assignment PIN_Y2 -to AMKB_RX +set_location_assignment PIN_E16 -to nINDEX +set_location_assignment PIN_W19 -to BA[0] +set_location_assignment PIN_AA19 -to BA[1] +set_location_assignment PIN_K21 -to HSYNC_PAD +set_location_assignment PIN_K19 -to VSYNC_PAD +set_location_assignment PIN_G17 -to nBLANK_PAD +set_location_assignment PIN_F19 -to PIXEL_CLK_PAD +set_location_assignment PIN_F17 -to nSYNC +set_location_assignment PIN_G15 -to nSTEP_DIR +set_location_assignment PIN_F14 -to nSTEP +set_location_assignment PIN_G16 -to nMOT_ON + +# Classic Timing Assignments +# ========================== +set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0 +set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85 +set_global_assignment -name TPD_REQUIREMENT "1 ns" +set_global_assignment -name TSU_REQUIREMENT "1 ns" +set_global_assignment -name TCO_REQUIREMENT "1 ns" +set_global_assignment -name TH_REQUIREMENT "1 ns" +set_global_assignment -name FMAX_REQUIREMENT "30 ns" + +# Analysis & Synthesis Assignments +# ================================ +set_global_assignment -name FAMILY "Cyclone III" +set_global_assignment -name TOP_LEVEL_ENTITY firebee1 +set_global_assignment -name DEVICE_FILTER_PACKAGE FBGA +set_global_assignment -name DEVICE_FILTER_PIN_COUNT 484 +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE SPEED +set_global_assignment -name SAFE_STATE_MACHINE OFF +set_global_assignment -name STATE_MACHINE_PROCESSING "ONE-HOT" + +# Fitter Assignments +# ================== +set_global_assignment -name DEVICE EP3C40F484C6 +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET ON +set_global_assignment -name ENABLE_DEVICE_WIDE_OE ON +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "PASSIVE SERIAL" +set_global_assignment -name FORCE_CONFIGURATION_VCCIO ON +set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "3.3-V LVTTL" +set_global_assignment -name FITTER_EFFORT "AUTO FIT" +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC ON +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING OFF +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT FAST +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA ON +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA OFF +set_instance_assignment -name IO_STANDARD "2.5 V" -to DDR_CLK +set_instance_assignment -name IO_STANDARD "2.5 V" -to VA +set_instance_assignment -name IO_STANDARD "2.5 V" -to VD +set_instance_assignment -name IO_STANDARD "2.5 V" -to VDM +set_instance_assignment -name IO_STANDARD "2.5 V" -to VDQS +set_instance_assignment -name IO_STANDARD "2.5 V" -to nVWE +set_instance_assignment -name IO_STANDARD "2.5 V" -to nVRAS +set_instance_assignment -name IO_STANDARD "2.5 V" -to nVCS +set_instance_assignment -name IO_STANDARD "2.5 V" -to nVCAS +set_instance_assignment -name IO_STANDARD "2.5 V" -to nDDR_CLK +set_instance_assignment -name IO_STANDARD "2.5 V" -to VCKE +set_instance_assignment -name IO_STANDARD "2.5 V" -to LED_FPGA_OK +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN "0 ns" +set_instance_assignment -name IO_STANDARD "2.5 V" -to BA +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to HSYNC_PAD +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to PIXEL_CLK_PAD +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to VB +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to VG +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to VR +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to VSYNC_PAD +set_instance_assignment -name IO_STANDARD "3.0-V LVTTL" -to nBLANK_PAD +set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to nSYNC +set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to nIRQ[2] +set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to nIRQ[3] +set_instance_assignment -name IO_STANDARD "3.0-V LVCMOS" -to nIRQ[4] +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to AMKB_TX + +# Assembler Assignments +# ===================== +set_global_assignment -name GENERATE_TTF_FILE OFF +set_global_assignment -name GENERATE_RBF_FILE ON +set_global_assignment -name GENERATE_HEX_FILE OFF +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0XE0700000 + +# Simulator Assignments +# ===================== +set_global_assignment -name END_TIME "2 us" +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS OFF +set_global_assignment -name SETUP_HOLD_DETECTION OFF +set_global_assignment -name GLITCH_DETECTION OFF +set_global_assignment -name CHECK_OUTPUTS OFF +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name INCREMENTAL_VECTOR_INPUT_SOURCE firebee1.vwf + +# start EDA_TOOL_SETTINGS(eda_blast_fpga) +# --------------------------------------- + + # Analysis & Synthesis Assignments + # ================================ +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_blast_fpga + +# end EDA_TOOL_SETTINGS(eda_blast_fpga) +# ------------------------------------- + +# start CLOCK(fast) +# ----------------- + + # Classic Timing Assignments + # ========================== +set_global_assignment -name FMAX_REQUIREMENT "133 MHz" -section_id fast + +# end CLOCK(fast) +# --------------- + +# start ASSIGNMENT_GROUP(fast) +# ---------------------------- + + # Assignment Group Assignments + # ============================ +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER DDRCLK -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER DDRCLK[0] -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER DDRCLK[1] -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER DDRCLK[2] -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER DDRCLK[3] -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:b2v_Fredi_Aschwanden|DDRCLK" -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:b2v_Fredi_Aschwanden|DDRCLK[0]" -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:b2v_Fredi_Aschwanden|DDRCLK[1]" -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:b2v_Fredi_Aschwanden|DDRCLK[2]" -section_id fast +set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:b2v_Fredi_Aschwanden|DDRCLK[3]" -section_id fast +#set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK" -section_id fast +#set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[0]" -section_id fast +#set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[1]" -section_id fast +#set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[2]" -section_id fast +#set_global_assignment -name ASSIGNMENT_GROUP_MEMBER "video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[3]" -section_id fast + +# end ASSIGNMENT_GROUP(fast) +# -------------------------- + +# ---------------------- +# start ENTITY(firebee1) + + # Classic Timing Assignments + # ========================== +set_instance_assignment -name CLOCK_SETTINGS fast -to DDRCLK +set_instance_assignment -name CLOCK_SETTINGS fast -to DDRCLK[0] +set_instance_assignment -name CLOCK_SETTINGS fast -to DDRCLK[1] +set_instance_assignment -name CLOCK_SETTINGS fast -to DDRCLK[2] +set_instance_assignment -name CLOCK_SETTINGS fast -to DDRCLK[3] +set_instance_assignment -name CLOCK_SETTINGS fast -to "video:b2v_Fredi_Aschwanden|DDRCLK" +set_instance_assignment -name CLOCK_SETTINGS fast -to "video:b2v_Fredi_Aschwanden|DDRCLK[0]" +set_instance_assignment -name CLOCK_SETTINGS fast -to "video:b2v_Fredi_Aschwanden|DDRCLK[1]" +set_instance_assignment -name CLOCK_SETTINGS fast -to "video:b2v_Fredi_Aschwanden|DDRCLK[2]" +set_instance_assignment -name CLOCK_SETTINGS fast -to "video:b2v_Fredi_Aschwanden|DDRCLK[3]" +#set_instance_assignment -name CLOCK_SETTINGS fast -to "Video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK" +#set_instance_assignment -name CLOCK_SETTINGS fast -to "Video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[0]" +#set_instance_assignment -name CLOCK_SETTINGS fast -to "Video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[1]" +#set_instance_assignment -name CLOCK_SETTINGS fast -to "Video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[2]" +#set_instance_assignment -name CLOCK_SETTINGS fast -to "Video:Fredi_Aschwanden|DDR_CTR_BLITTER:DDR_CTR_BLITTER|DDRCLK[3]" +set_instance_assignment -name INPUT_MAX_DELAY "4 ns" -from * -to FB_ALE +set_instance_assignment -name MAX_DELAY "5 ns" -from VD -to FB_AD +set_instance_assignment -name MAX_DELAY "5 ns" -from FB_AD -to VA +set_instance_assignment -name MAX_DELAY "5 ns" -from FB_AD -to nVRAS +set_instance_assignment -name MAX_DELAY "5 ns" -from FB_AD -to BA + + # Fitter Assignments + # ================== +set_instance_assignment -name CURRENT_STRENGTH_NEW 4MA -to LED_FPGA_OK +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VCKE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to nVCS +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to FB_AD +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to BA +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to DDR_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VA +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDM +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDQS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to nVWE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to nVRAS +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to nVCAS +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to nDDR_CLK +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to HSYNC_PAD +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to PIXEL_CLK_PAD +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to VB +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to VG +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to VR +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to nBLANK_PAD +set_instance_assignment -name CURRENT_STRENGTH_NEW 16MA -to VSYNC_PAD +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nPD_VGA +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSYNC +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to SRD +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to IO +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSRWE +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSROE +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSRCS +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSRBLE +set_instance_assignment -name CURRENT_STRENGTH_NEW 8MA -to nSRBHE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to CLK24M576 +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to CLKUSB +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to CLK25M +set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to AMKB_TX + + # Simulator Assignments + # ===================== +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to FB_AD +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to nACSI_DRQ +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to nACSI_INT +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_CARD_DEDECT +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_WP +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_DATA2 +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_DATA1 +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_DATA0 +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_CMD_D1 +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_CLK +set_instance_assignment -name PASSIVE_RESISTOR "PULL-UP" -to SD_CD_DATA3 + + # start LOGICLOCK_REGION(Root Region) + # ----------------------------------- + + # LogicLock Region Assignments + # ============================ +set_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region" +set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region" + + # end LOGICLOCK_REGION(Root Region) + # --------------------------------- + + # start DESIGN_PARTITION(Top) + # --------------------------- + + # Incremental Compilation Assignments + # =================================== +set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top +set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top + + # end DESIGN_PARTITION(Top) + # ------------------------- + +# end ENTITY(firebee1) +# -------------------- +set_location_assignment PIN_E5 -to LPDIR +set_location_assignment PIN_B11 -to nRSTO_MCF +set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top +set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "23 MM HEAT SINK WITH 200 LFPM AIRFLOW" +set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE ON +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to DDR_CLK +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VCKE +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to nDDR_CLK +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to nVCAS +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to nVCS +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to nVRAS +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to nVWE +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[0] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[1] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[2] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[3] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[4] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[5] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[6] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[7] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[8] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[9] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[10] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[11] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VA[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to VA[12] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to BA[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to BA[0] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to BA[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW "MAXIMUM CURRENT" -to BA[1] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDM[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDM[0] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDM[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDM[1] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDM[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDM[2] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDM[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDM[3] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[0] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[1] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[2] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[3] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[4] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[4] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[5] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[5] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[6] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[6] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[7] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[7] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[8] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[8] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[9] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[9] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[10] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[10] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[11] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[11] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[12] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[12] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[13] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[13] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[14] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[14] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[15] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[15] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[16] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[16] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[17] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[17] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[18] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[18] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[19] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[19] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[20] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[20] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[21] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[21] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[22] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[22] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[23] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[23] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[24] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[24] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[25] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[25] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[26] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[26] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[27] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[27] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[28] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[28] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[29] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[29] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[30] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[30] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VD[31] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VD[31] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDQS[0] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDQS[0] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDQS[1] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDQS[1] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDQS[2] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDQS[2] +#set_instance_assignment -name IO_STANDARD "SSTL-2 CLASS I" -to VDQS[3] +set_instance_assignment -name CURRENT_STRENGTH_NEW 12MA -to VDQS[3] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDM[0] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDM[1] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDM[2] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDM[3] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[0] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[1] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[2] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[3] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[4] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[5] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[6] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[7] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[8] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[9] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[10] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[11] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[12] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[13] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[14] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[15] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[16] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[17] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[18] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[19] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[20] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[21] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[22] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[23] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[24] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[25] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[26] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[27] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[28] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[29] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[30] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VD[31] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDQS[0] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDQS[1] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDQS[2] +set_instance_assignment -name OUTPUT_ENABLE_GROUP 1077756020 -to VDQS[3] +set_instance_assignment -name PAD_TO_CORE_DELAY 0 -to DDR_CLK +set_instance_assignment -name CKN_CK_PAIR ON -from nDDR_CLK -to DDR_CLK +set_global_assignment -name USE_CONFIGURATION_DEVICE OFF +set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise +set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise +set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall +set_global_assignment -name VERILOG_FILE Video/DDR_CTR.v +set_global_assignment -name VERILOG_FILE Video/VIDEO_MOD_MUX_CLUTCTR.v +set_global_assignment -name VERILOG_FILE Interrupt_Handler/interrupt_handler.v +set_global_assignment -name VERILOG_FILE mux41.v +set_global_assignment -name VERILOG_FILE Video/video.v +set_global_assignment -name VERILOG_FILE firebee1.v +set_global_assignment -name SDC_FILE firebee1.sdc +set_global_assignment -name VHDL_FILE DSP/DSP.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF.vhd +set_global_assignment -name VHDL_FILE Video/BLITTER/BLITTER.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF5380/wf5380_control.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF5380/wf5380_pkg.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF5380/wf5380_registers.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF5380/wf5380_soc_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF5380/wf5380_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_am_detector.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/dcfifo0.vhd +set_global_assignment -name VHDL_FILE Video/lpm_bustri0.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_control.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_crc_logic.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_digital_pll.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_pkg.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_registers.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_top_soc.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_FDC1772_IP/wf1772ip_transceiver.vhd +set_global_assignment -name VHDL_FILE Video/lpm_bustri5.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_ctrl_status.vhd +set_global_assignment -name VHDL_FILE Video/lpm_bustri7.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_receive.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_top_soc.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_UART6850_IP/wf6850ip_transmit.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_gpio.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_interrupts.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_pkg.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_timers.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_top_soc.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_ctrl.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_rx.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_MFP68901_IP/wf68901ip_usart_tx.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_pkg.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_top_soc.vhd +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/WF_SND2149_IP/wf2149ip_wave.vhd +set_global_assignment -name VHDL_FILE lpm_latch0.vhd +set_global_assignment -name QIP_FILE altpll1.qip +set_global_assignment -name VHDL_FILE Video/lpm_fifoDZ.vhd +set_global_assignment -name QIP_FILE altpll2.qip +set_global_assignment -name QIP_FILE altpll3.qip +set_global_assignment -name VHDL_FILE Video/altdpram0.vhd +set_global_assignment -name VHDL_FILE Video/lpm_muxDZ2.vhd +set_global_assignment -name VHDL_FILE Video/lpm_muxDZ.vhd +set_global_assignment -name VHDL_FILE Video/lpm_bustri3.vhd +set_global_assignment -name VHDL_FILE altpll2.vhd +set_global_assignment -name VHDL_FILE altpll3.vhd +set_global_assignment -name VHDL_FILE Video/lpm_ff0.vhd +set_global_assignment -name VHDL_FILE Video/lpm_ff1.vhd +set_global_assignment -name VHDL_FILE Video/lpm_ff3.vhd +set_global_assignment -name VHDL_FILE Video/lpm_ff2.vhd +set_global_assignment -name VHDL_FILE Video/lpm_fifo_dc0.vhd +set_global_assignment -name VHDL_FILE altpll1.vhd +set_global_assignment -name QIP_FILE altpll0.qip +set_global_assignment -name QIP_FILE lpm_counter0.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg0.qip +set_global_assignment -name QIP_FILE Video/altdpram0.qip +set_global_assignment -name QIP_FILE Video/lpm_bustri1.qip +set_global_assignment -name QIP_FILE Video/altdpram1.qip +set_global_assignment -name QIP_FILE Video/lpm_bustri2.qip +set_global_assignment -name QIP_FILE Video/lpm_bustri4.qip +set_global_assignment -name QIP_FILE Video/lpm_constant0.qip +set_global_assignment -name QIP_FILE Video/lpm_constant1.qip +set_global_assignment -name QIP_FILE Video/lpm_mux0.qip +set_global_assignment -name QIP_FILE Video/lpm_mux1.qip +set_global_assignment -name QIP_FILE Video/lpm_mux2.qip +set_global_assignment -name QIP_FILE Video/lpm_constant2.qip +set_global_assignment -name QIP_FILE Video/altdpram2.qip +set_global_assignment -name QIP_FILE Video/lpm_bustri6.qip +set_global_assignment -name QIP_FILE Video/lpm_mux3.qip +set_global_assignment -name QIP_FILE Video/lpm_mux4.qip +set_global_assignment -name QIP_FILE Video/lpm_constant3.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg1.qip +set_global_assignment -name QIP_FILE Video/lpm_latch1.qip +set_global_assignment -name QIP_FILE Video/lpm_constant4.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg2.qip +set_global_assignment -name QIP_FILE Video/lpm_compare1.qip +set_global_assignment -name QIP_FILE lpm_bustri_LONG.qip +set_global_assignment -name QIP_FILE lpm_bustri_BYT.qip +set_global_assignment -name QIP_FILE lpm_bustri_WORD.qip +set_global_assignment -name QIP_FILE Video/lpm_ff4.qip +set_global_assignment -name QIP_FILE Video/lpm_ff5.qip +set_global_assignment -name QIP_FILE Video/lpm_ff6.qip +set_global_assignment -name VECTOR_WAVEFORM_FILE firebee1.vwf +set_global_assignment -name QIP_FILE Video/lpm_shiftreg3.qip +set_global_assignment -name QIP_FILE Video/altddio_bidir0.qip +set_global_assignment -name QIP_FILE Video/altddio_out0.qip +set_global_assignment -name QIP_FILE Video/lpm_mux5.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg5.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg6.qip +set_global_assignment -name QIP_FILE Video/lpm_shiftreg4.qip +set_global_assignment -name QIP_FILE Video/altddio_out1.qip +set_global_assignment -name QIP_FILE Video/altddio_out2.qip +set_global_assignment -name QIP_FILE altddio_out3.qip +set_global_assignment -name QIP_FILE Video/lpm_mux6.qip +set_global_assignment -name VHDL_FILE FalconIO_SDCard_IDE_CF/FalconIO_SDCard_IDE_CF_pgk.vhd +set_global_assignment -name QIP_FILE FalconIO_SDCard_IDE_CF/dcfifo0.qip +set_global_assignment -name QIP_FILE FalconIO_SDCard_IDE_CF/dcfifo1.qip +set_global_assignment -name QIP_FILE Video/lpm_muxDZ.qip +set_global_assignment -name QIP_FILE Video/lpm_muxVDM.qip +set_global_assignment -name QIP_FILE altpll_reconfig1.qip +set_global_assignment -name QIP_FILE altpll4.qip +set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top \ No newline at end of file diff --git a/FPGA_quartus_GE/firebee1.qws b/FPGA_quartus_GE/firebee1.qws new file mode 100644 index 0000000000000000000000000000000000000000..5939bcef8f5945fce33b2c7e3b03b4f7339e3443 GIT binary patch literal 1252 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 DG4ix* literal 0 HcmV?d00001 diff --git a/FPGA_quartus_GE/firebee1.sdc b/FPGA_quartus_GE/firebee1.sdc new file mode 100644 index 0000000..21df1d3 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.sdc @@ -0,0 +1,179 @@ +########################################################################### +# +# Generated by : Version 9.1 Build 222 10/21/2009 SJ Full Version +# +# Project : firebee1 +# Revision : firebee1 +# +# Date : Sat Mar 01 15:22:38 CET 2014 +# +########################################################################### + + +# WARNING: Ignored QSF Variable: Global TSU_REQUIREMENT = 1 ns +# WARNING: Ignored QSF Variable: Global TH_REQUIREMENT = 1 ns +# WARNING: Ignored QSF Variable: Global TPD_REQUIREMENT = 1 ns +# WARNING: Ignored QSF Variable: Global TCO_REQUIREMENT = 1 ns +# WARNING: Expected ENABLE_CLOCK_LATENCY to be set to 'ON', but it is set to 'OFF' +# In SDC, create_generated_clock auto-generates clock latency +# +# ------------------------------------------ +# +# Create generated clocks based on PLLs +derive_pll_clocks -use_tan_name +# +# ------------------------------------------ +# WARNING: Global Fmax translated to derive_clocks. Behavior is not identical +if {![info exist ::qsta_message_posted]} { + post_message -type warning "Original Global Fmax translated from QSF using derive_clocks" + set ::qsta_message_posted 1 +} +derive_clocks -period "30.303 ns" +# + + +# Original Clock Setting Name: CLK33M +create_clock -period "30.303 ns" \ + -name {CLK33M} {CLK33M} +# --------------------------------------------- + +# ** Clock Latency +# ------------- + +# ** Clock Uncertainty +# ----------------- + +derive_clock_uncertainty + +# ** Multicycles +# ----------- + +# ** Cuts +# ---- + +# ** Input/Output Delays +# ------------------- +# QSF: -name INPUT_MAX_DELAY 4 ns -from * -to FB_ALE +# Command requires a unique clock. Expand clock +#foreach_in_collection clk [get_clocks * ] { +# set_input_delay -add_delay -max 4 -clock [get_object_info -name $clk] [get_ports {FB_ALE}] +#} +#set_input_delay -add_delay -max 4 -clock {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]} [get_ports {FB_ALE}] + +# ** Tpd requirements +# ---------------- + +# ** Setup/Hold Relationships +# ------------------------ + +# ** Tsu/Th requirements +# ------------------- + + +# ** Tco/MinTco requirements +# ----------------------- + +# +# Entity Specific Timing Assignments found in +# the Timing Analyzer Settings report panel +# +set_false_path -from [get_registers {*dcfifo*delayed_wrptr_g[*]}] -to [get_registers {*dcfifo*rs_dgwp*}] +set_false_path -from [get_registers {*dcfifo*rdptr_g[*]}] -to [get_registers {*dcfifo*ws_dgrp*}] + +set_clock_groups -asynchronous -group { \ +altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0] \ +} \ +-group { \ +altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[3] \ +} \ +-group { \ +altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[2] \ +} \ +-group { \ +altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[1] \ +} \ +-group { \ +altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[0] \ +} \ +-group { \ +altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4] \ +altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3] \ +altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[2] \ +altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[1] \ +altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0] \ +CLK33M \ +} \ +-group { \ +altpll1:b2v_inst|altpll:altpll_component|altpll_8tp2:auto_generated|clk[2] \ +altpll1:b2v_inst|altpll:altpll_component|altpll_8tp2:auto_generated|clk[1] \ +} \ +-group { \ +altpll1:b2v_inst|altpll:altpll_component|altpll_8tp2:auto_generated|clk[0] \ +} \ + + +#set_multicycle_path -from [get_clocks {altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[2]}] -to [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[2]}] -to [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] -to [get_clocks {altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[2]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] -to [get_clocks {altpll3:b2v_inst13|altpll:altpll_component|altpll_jvs2:auto_generated|clk[2]}] -hold -end 1 + + + +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[2]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[2]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[1]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[1]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -hold -end 1 + +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -setup -end 2 +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[2]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[2]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -hold -end 1 + + +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -to [get_clocks {CLK33M}] -setup -end 2 +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -to [get_clocks {CLK33M}] -hold -end 1 + +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -to [get_clocks {CLK33M}] -setup -end 2 +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -to [get_clocks {CLK33M}] -hold -end 1 + +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {CLK33M}] -setup -end 2 +set_multicycle_path -from [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[3]}] -to [get_clocks {CLK33M}] -hold -end 1 + +set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -setup -end 2 +set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[4]}] -hold -end 1 + +set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[1]}] -setup -end 2 +set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[1]}] -hold -end 1 + +#set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -setup -end 2 +#set_multicycle_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll2:b2v_inst12|altpll:altpll_component|altpll_1r33:auto_generated|clk[0]}] -hold -end 1 + +#set_false_path -from [get_clocks {CLK33M}] -to [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] +#set_false_path -to [get_clocks {CLK33M}] -from [get_clocks {altpll4:b2v_inst22|altpll:altpll_component|altpll_r4n2:auto_generated|clk[0]}] + +# --------------------------------------------- + +# WARNING: Ignored QSF Variable: -name MAX_DELAY 5 ns -from VD -to FB_AD +# WARNING: Ignored QSF Variable: -name MAX_DELAY 5 ns -from FB_AD -to VA +# WARNING: Ignored QSF Variable: -name MAX_DELAY 5 ns -from FB_AD -to nVRAS +# WARNING: Ignored QSF Variable: -name MAX_DELAY 5 ns -from FB_AD -to BA +#set_max_delay -from [get_ports {VD[*]}] -to [get_ports {FB_AD[*]}] 5.000 +#set_max_delay -from [get_ports {FB_AD[*]}] -to [get_ports {VA[*]}] 5.000 +#set_max_delay -from [get_ports {FB_AD[*]}] -to [get_ports {nVRAS}] 5.000 +#set_max_delay -from [get_ports {FB_AD[*]}] -to [get_ports {BA[*]}] 5.000 + +# Constrain the input I/O path +set_input_delay -clock CLK33M -max 5 [all_inputs] +#set_input_delay -clock CLK33M -min 4 [all_inputs] + +# Constrain the output I/O path +set_output_delay -clock CLK33M -max 5 [all_outputs] diff --git a/FPGA_quartus_GE/firebee1.v b/FPGA_quartus_GE/firebee1.v new file mode 100644 index 0000000..eed07a6 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.v @@ -0,0 +1,698 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:20:47 2014" + +module firebee1( + FB_ALE, + nFB_WR, + CLK33M, + nFB_CS1, + nFB_CS2, + nFB_CS3, + FB_SIZE0, + FB_SIZE1, + nFB_BURST, + LP_BUSY, + nACSI_DRQ, + nACSI_INT, + RxD, + CTS, + RI, + DCD, + AMKB_RX, + PIC_AMKB_RX, + IDE_RDY, + IDE_INT, + WP_CF_CARD, + TRACK00, + nWP, + nDCHG, + SD_DATA0, + SD_DATA1, + SD_DATA2, + SD_CARD_DEDECT, + MIDI_IN, + nSCSI_DRQ, + SD_WP, + nRD_DATA, + nSCSI_C_D, + nSCSI_I_O, + nSCSI_MSG, + nDACK0, + PIC_INT, + nFB_OE, + TOUT0, + nMASTER, + DVI_INT, + nDACK1, + nPCI_INTD, + nPCI_INTC, + nPCI_INTB, + nPCI_INTA, + E0_INT, + nINDEX, + HD_DD, + MAIN_CLK, + nRSTO_MCF, + CLK24M576, + LP_STR, + nACSI_ACK, + nACSI_RESET, + nACSI_CS, + ACSI_DIR, + ACSI_A1, + nSCSI_ACK, + nSCSI_ATN, + SCSI_DIR, + MIDI_OLR, + MIDI_TLR, + TxD, + RTS, + DTR, + AMKB_TX, + IDE_RES, + nIDE_CS0, + nIDE_CS1, + nIDE_WR, + nIDE_RD, + nCF_CS0, + nCF_CS1, + nROM3, + nROM4, + nRP_UDS, + nRP_LDS, + nSDSEL, + nWR_GATE, + nWR, + YM_QA, + YM_QB, + YM_QC, + SD_CLK, + DSA_D, + nVWE, + nVCAS, + nVRAS, + nVCS, + nPD_VGA, + CLK25M, + TIN0, + nSRCS, + nSRBLE, + nSRBHE, + nSRWE, + nDREQ1, + LED_FPGA_OK, + nSROE, + VCKE, + nFB_TA, + nDDR_CLK, + DDR_CLK, + VSYNC_PAD, + HSYNC_PAD, + nBLANK_PAD, + PIXEL_CLK_PAD, + nSYNC, + nMOT_ON, + nSTEP_DIR, + nSTEP, + CLKUSB, + LPDIR, + SCSI_PAR, + nSCSI_RST, + nSCSI_SEL, + nSCSI_BUSY, + SD_CD_DATA3, + SD_CMD_D1, + ACSI_D, + BA, + FB_AD, + IO, + LP_D, + nIRQ, + SCSI_D, + SRD, + VA, + VB, + VD, + VDM, + VDQS, + VG, + VR +); + + +input FB_ALE; +input nFB_WR; +input CLK33M; +input nFB_CS1; +input nFB_CS2; +input nFB_CS3; +input FB_SIZE0; +input FB_SIZE1; +input nFB_BURST; +input LP_BUSY; +input nACSI_DRQ; +input nACSI_INT; +input RxD; +input CTS; +input RI; +input DCD; +input AMKB_RX; +input PIC_AMKB_RX; +input IDE_RDY; +input IDE_INT; +input WP_CF_CARD; +input TRACK00; +input nWP; +input nDCHG; +input SD_DATA0; +input SD_DATA1; +input SD_DATA2; +input SD_CARD_DEDECT; +input MIDI_IN; +input nSCSI_DRQ; +input SD_WP; +input nRD_DATA; +input nSCSI_C_D; +input nSCSI_I_O; +input nSCSI_MSG; +input nDACK0; +input PIC_INT; +input nFB_OE; +input TOUT0; +input nMASTER; +input DVI_INT; +input nDACK1; +input nPCI_INTD; +input nPCI_INTC; +input nPCI_INTB; +input nPCI_INTA; +input E0_INT; +input nINDEX; +input HD_DD; +input MAIN_CLK; +input nRSTO_MCF; +output CLK24M576; +output LP_STR; +output nACSI_ACK; +output nACSI_RESET; +output nACSI_CS; +output ACSI_DIR; +output ACSI_A1; +output nSCSI_ACK; +output nSCSI_ATN; +output SCSI_DIR; +output MIDI_OLR; +output MIDI_TLR; +output TxD; +output RTS; +output DTR; +output AMKB_TX; +output IDE_RES; +output nIDE_CS0; +output nIDE_CS1; +output nIDE_WR; +output nIDE_RD; +output nCF_CS0; +output nCF_CS1; +output nROM3; +output nROM4; +output nRP_UDS; +output nRP_LDS; +output nSDSEL; +output nWR_GATE; +output nWR; +output YM_QA; +output YM_QB; +output YM_QC; +output SD_CLK; +output DSA_D; +output nVWE; +output nVCAS; +output nVRAS; +output nVCS; +output nPD_VGA; +output CLK25M; +output TIN0; +output nSRCS; +output nSRBLE; +output nSRBHE; +output nSRWE; +output nDREQ1; +output LED_FPGA_OK; +output nSROE; +output VCKE; +output nFB_TA; +output nDDR_CLK; +output DDR_CLK; +output VSYNC_PAD; +output HSYNC_PAD; +output nBLANK_PAD; +output PIXEL_CLK_PAD; +output nSYNC; +output nMOT_ON; +output nSTEP_DIR; +output nSTEP; +output CLKUSB; +output LPDIR; +inout SCSI_PAR; +inout nSCSI_RST; +inout nSCSI_SEL; +inout nSCSI_BUSY; +inout SD_CD_DATA3; +inout SD_CMD_D1; +inout [7:0] ACSI_D; +output [1:0] BA; +inout [31:0] FB_AD; +inout [17:0] IO; +inout [7:0] LP_D; +output [7:2] nIRQ; +inout [7:0] SCSI_D; +inout [15:0] SRD; +output [12:0] VA; +output [7:0] VB; +inout [31:0] VD; +output [3:0] VDM; +inout [3:0] VDQS; +output [7:0] VG; +output [7:0] VR; + +wire [31:0] ACP_CONF; +wire CLK25M_ALTERA_SYNTHESIZED; +wire CLK2M; +wire CLK2M4576; +wire CLK48M; +wire CLK500k; +wire CLK_VIDEO; +wire DDR_SYNC_66M; +wire [3:0] DDRCLK; +wire DMA_DRQ; +wire DSP_INT; +wire DSP_TA; +wire FALCON_IO_TA; +wire [31:0] FB_ADR; +wire FDC_CLK; +wire HSYNC; +wire INT_HANDLER_TA; +wire LP_DIR; +wire MOT_ON; +wire nBLANK; +wire nDREQ0; +wire nMFP_INT; +wire nRSTO; +wire PIXEL_CLK; +wire SD_CDM_D1; +wire STEP; +wire STEP_DIR; +wire [17:0] TIMEBASE; +wire VIDEO_RECONFIG; +wire Video_TA; +wire VR_BUSY; +wire [8:0] VR_D; +wire VR_RD; +wire VR_WR; +wire VSYNC; +wire WR_DATA; +wire WR_GATE; +wire SYNTHESIZED_WIRE_0; +wire SYNTHESIZED_WIRE_1; +wire SYNTHESIZED_WIRE_2; +wire SYNTHESIZED_WIRE_3; +wire SYNTHESIZED_WIRE_4; +wire SYNTHESIZED_WIRE_5; +wire SYNTHESIZED_WIRE_6; +wire SYNTHESIZED_WIRE_7; +wire SYNTHESIZED_WIRE_8; +wire SYNTHESIZED_WIRE_9; +wire SYNTHESIZED_WIRE_10; + +assign nDREQ1 = nDACK1; +assign SYNTHESIZED_WIRE_9 = 0; +assign SYNTHESIZED_WIRE_10 = 1; + +wire w_MAIN_CLK; +assign w_MAIN_CLK = CLK33M; + +video b2v_Fredi_Aschwanden( + .MAIN_CLK(w_MAIN_CLK), + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .nFB_CS3(nFB_CS3), + .nFB_WR(nFB_WR), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .nRSTO(nRSTO), + .nFB_OE(nFB_OE), + .FB_ALE(FB_ALE), + .DDR_SYNC_66M(DDR_SYNC_66M), + .CLK33M(CLK33M), + .CLK25M(CLK25M_ALTERA_SYNTHESIZED), + .CLK_VIDEO(CLK_VIDEO), + .VR_BUSY(VR_BUSY), + .DDRCLK(DDRCLK), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .VD(VD), + .VDQS(VDQS), + .VR_D(VR_D), + .VR_RD(VR_RD), + .nBLANK(nBLANK), + .nVWE(nVWE), + .nVCAS(nVCAS), + .nVRAS(nVRAS), + .nVCS(nVCS), + .nPD_VGA(nPD_VGA), + .VCKE(VCKE), + .VSYNC(VSYNC), + .HSYNC(HSYNC), + .nSYNC(nSYNC), + .VIDEO_TA(Video_TA), + .PIXEL_CLK(PIXEL_CLK), + .VIDEO_RECONFIG(VIDEO_RECONFIG), + .VR_WR(VR_WR), + .BA(BA), + + .VA(VA), + .VB(VB), + + .VDM(VDM), + + .VG(VG), + .VR(VR)); + + +altpll1 b2v_inst( + .inclk0(CLK33M), + .c0(CLK500k), + .c1(CLK2M4576), + .c2(CLK24M576), + .locked(SYNTHESIZED_WIRE_5)); + + +lpm_ff0 b2v_inst1( + .clock(DDR_SYNC_66M), + .enable(FB_ALE), + .data(FB_AD), + .q(FB_ADR)); + + + + +altpll2 b2v_inst12( + .inclk0(w_MAIN_CLK), + .c0(DDRCLK[0]), + .c1(DDRCLK[1]), + .c2(DDRCLK[2]), + .c3(DDRCLK[3]), + .c4(DDR_SYNC_66M)); + + +altpll3 b2v_inst13( + .inclk0(CLK33M), + .c0(CLK2M), + .c1(FDC_CLK), + .c2(CLK25M_ALTERA_SYNTHESIZED), + .c3(CLK48M)); + +assign nMOT_ON = ~MOT_ON; + +assign nSTEP_DIR = ~STEP_DIR; + +assign nSTEP = ~STEP; + +assign nWR = ~WR_DATA; + + +lpm_counter0 b2v_inst18( + .clock(CLK500k), + .q(TIMEBASE)); + +assign nWR_GATE = ~WR_GATE; + +assign nFB_TA = ~(Video_TA | INT_HANDLER_TA | DSP_TA | FALCON_IO_TA); + + +altpll4 b2v_inst22( + .inclk0(CLK48M), + .areset(SYNTHESIZED_WIRE_0), + .scanclk(SYNTHESIZED_WIRE_1), + .scandata(SYNTHESIZED_WIRE_2), + .scanclkena(SYNTHESIZED_WIRE_3), + .configupdate(SYNTHESIZED_WIRE_4), + .c0(CLK_VIDEO), + .scandataout(SYNTHESIZED_WIRE_6), + .scandone(SYNTHESIZED_WIRE_7) + ); + +assign SYNTHESIZED_WIRE_8 = ~nRSTO; + +assign nRSTO = SYNTHESIZED_WIRE_5 & nRSTO_MCF; + +assign LED_FPGA_OK = TIMEBASE[17]; + + +assign nDDR_CLK = ~DDRCLK[0]; + + +altddio_out3 b2v_inst5( + .datain_h(VSYNC), + .datain_l(VSYNC), + .outclock(PIXEL_CLK), + .dataout(VSYNC_PAD)); + + +altddio_out3 b2v_inst6( + .datain_h(HSYNC), + .datain_l(HSYNC), + .outclock(PIXEL_CLK), + .dataout(HSYNC_PAD)); + + +altpll_reconfig1 b2v_inst7( + .reconfig(VIDEO_RECONFIG), + .read_param(VR_RD), + .write_param(VR_WR), + .pll_scandataout(SYNTHESIZED_WIRE_6), + .pll_scandone(SYNTHESIZED_WIRE_7), + .clock(w_MAIN_CLK), + .reset(SYNTHESIZED_WIRE_8), + + .counter_param(FB_ADR[8:6]), + .counter_type(FB_ADR[5:2]), + .data_in(FB_AD[24:16]), + .busy(VR_BUSY), + .pll_scandata(SYNTHESIZED_WIRE_2), + .pll_scanclk(SYNTHESIZED_WIRE_1), + .pll_scanclkena(SYNTHESIZED_WIRE_3), + .pll_configupdate(SYNTHESIZED_WIRE_4), + .pll_areset(SYNTHESIZED_WIRE_0), + .data_out(VR_D)); + + +altddio_out3 b2v_inst8( + .datain_h(nBLANK), + .datain_l(nBLANK), + .outclock(PIXEL_CLK), + .dataout(nBLANK_PAD)); + + +altddio_out3 b2v_inst9( + .datain_h(SYNTHESIZED_WIRE_9), + .datain_l(SYNTHESIZED_WIRE_10), + .outclock(PIXEL_CLK), + .dataout(PIXEL_CLK_PAD)); + + +DSP b2v_Mathias_Alles( + .CLK33M(CLK33M), + .MAIN_CLK(w_MAIN_CLK), + .nFB_OE(nFB_OE), + .nFB_WR(nFB_WR), + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .nFB_BURST(nFB_BURST), + .nRSTO(nRSTO), + .nFB_CS3(nFB_CS3), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .IO(IO), + .SRD(SRD), + .nSRCS(nSRCS), + .nSRBLE(nSRBLE), + .nSRBHE(nSRBHE), + .nSRWE(nSRWE), + .nSROE(nSROE), + .DSP_INT(DSP_INT), + .DSP_TA(DSP_TA) + + + ); + + +interrupt_handler b2v_nobody( + .MAIN_CLK(w_MAIN_CLK), + .nFB_WR(nFB_WR), + .nFB_CS1(nFB_CS1), + .nFB_CS2(nFB_CS2), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .PIC_INT(PIC_INT), + .E0_INT(E0_INT), + .DVI_INT(DVI_INT), + .nPCI_INTA(nPCI_INTA), + .nPCI_INTB(nPCI_INTB), + .nPCI_INTC(nPCI_INTC), + .nPCI_INTD(nPCI_INTD), + .nMFP_INT(nMFP_INT), + .nFB_OE(nFB_OE), + .DSP_INT(DSP_INT), + .VSYNC(VSYNC), + .HSYNC(HSYNC), + .DMA_DRQ(DMA_DRQ), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .INT_HANDLER_TA(INT_HANDLER_TA), + .TIN0(TIN0), + .ACP_CONF(ACP_CONF), + .nRST(nRSTO), //GE + .nIRQ(nIRQ)); + + +FalconIO_SDCard_IDE_CF b2v_Wolfgang_Foerster_and_Fredi_Aschwanden( + .CLK33M(CLK33M), + .MAIN_CLK(w_MAIN_CLK), + .CLK2M(CLK2M), + .CLK500k(CLK500k), + .nFB_CS1(nFB_CS1), + .FB_SIZE0(FB_SIZE0), + .FB_SIZE1(FB_SIZE1), + .nFB_BURST(nFB_BURST), + .LP_BUSY(LP_BUSY), + .nACSI_DRQ(nACSI_DRQ), + .nACSI_INT(nACSI_INT), + .nSCSI_DRQ(nSCSI_DRQ), + .nSCSI_MSG(nSCSI_MSG), + .MIDI_IN(MIDI_IN), + .RxD(RxD), + .CTS(CTS), + .RI(RI), + .DCD(DCD), + .AMKB_RX(AMKB_RX), + .PIC_AMKB_RX(PIC_AMKB_RX), + .IDE_RDY(IDE_RDY), + .IDE_INT(IDE_INT), + + .nINDEX(nINDEX), + .TRACK00(TRACK00), + .nRD_DATA(nRD_DATA), + .nDCHG(nDCHG), + .SD_DATA0(SD_DATA0), + .SD_DATA1(SD_DATA1), + .SD_DATA2(SD_DATA2), + .SD_CARD_DEDECT(SD_CARD_DEDECT), + .SD_WP(SD_WP), + .nDACK0(nDACK0), + .nFB_WR(nFB_WR), + .WP_CF_CARD(WP_CF_CARD), + .nWP(nWP), + .nFB_CS2(nFB_CS2), + .nRSTO(nRSTO), + .nSCSI_C_D(nSCSI_C_D), + .nSCSI_I_O(nSCSI_I_O), + .CLK2M4576(CLK2M4576), + .nFB_OE(nFB_OE), + .VSYNC(VSYNC), + .HSYNC(HSYNC), + .DSP_INT(DSP_INT), + .nBLANK(nBLANK), + .FDC_CLK(FDC_CLK), + .FB_ALE(FB_ALE), + .HD_DD(HD_DD), + .SCSI_PAR(SCSI_PAR), + .nSCSI_SEL(nSCSI_SEL), + .nSCSI_BUSY(nSCSI_BUSY), + .nSCSI_RST(nSCSI_RST), + .SD_CD_DATA3(SD_CD_DATA3), + .SD_CDM_D1(SD_CDM_D1), + .ACP_CONF(ACP_CONF[31:24]), + .ACSI_D(ACSI_D), + .FB_AD(FB_AD), + .FB_ADR(FB_ADR), + .LP_D(LP_D), + .SCSI_D(SCSI_D), + .nIDE_CS1(nIDE_CS1), + .nIDE_CS0(nIDE_CS0), + .LP_STR(LP_STR), + .LP_DIR(LP_DIR), + .nACSI_ACK(nACSI_ACK), + .nACSI_RESET(nACSI_RESET), + .nACSI_CS(nACSI_CS), + .ACSI_DIR(ACSI_DIR), + .ACSI_A1(ACSI_A1), + .nSCSI_ACK(nSCSI_ACK), + .nSCSI_ATN(nSCSI_ATN), + .SCSI_DIR(SCSI_DIR), + .SD_CLK(SD_CLK), + .YM_QA(YM_QA), + .YM_QC(YM_QC), + .YM_QB(YM_QB), + .nSDSEL(nSDSEL), + .STEP(STEP), + .MOT_ON(MOT_ON), + .nRP_LDS(nRP_LDS), + .nRP_UDS(nRP_UDS), + .nROM4(nROM4), + .nROM3(nROM3), + .nCF_CS1(nCF_CS1), + .nCF_CS0(nCF_CS0), + .nIDE_RD(nIDE_RD), + .nIDE_WR(nIDE_WR), + .AMKB_TX(AMKB_TX), + .IDE_RES(IDE_RES), + .DTR(DTR), + .RTS(RTS), + .TxD(TxD), + .MIDI_OLR(MIDI_OLR), + .MIDI_TLR(MIDI_TLR), + + .DSA_D(DSA_D), + .nMFP_INT(nMFP_INT), + .FALCON_IO_TA(FALCON_IO_TA), + .STEP_DIR(STEP_DIR), + .WR_DATA(WR_DATA), + .WR_GATE(WR_GATE), + .DMA_DRQ(DMA_DRQ) + + + + + + + + + + ); + +assign SD_CMD_D1 = SD_CDM_D1; +assign CLK25M = CLK25M_ALTERA_SYNTHESIZED; +assign DDR_CLK = DDRCLK[0]; +assign CLKUSB = CLK48M; +assign LPDIR = LP_DIR; + +endmodule diff --git a/FPGA_quartus_GE/firebee1.vhd b/FPGA_quartus_GE/firebee1.vhd new file mode 100644 index 0000000..25431e1 --- /dev/null +++ b/FPGA_quartus_GE/firebee1.vhd @@ -0,0 +1,861 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:20:24 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY work; + +ENTITY firebee1 IS + PORT + ( + FB_ALE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + CLK33M : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + LP_BUSY : IN STD_LOGIC; + nACSI_DRQ : IN STD_LOGIC; + nACSI_INT : IN STD_LOGIC; + RxD : IN STD_LOGIC; + CTS : IN STD_LOGIC; + RI : IN STD_LOGIC; + DCD : IN STD_LOGIC; + AMKB_RX : IN STD_LOGIC; + PIC_AMKB_RX : IN STD_LOGIC; + IDE_RDY : IN STD_LOGIC; + IDE_INT : IN STD_LOGIC; + WP_CF_CARD : IN STD_LOGIC; + TRACK00 : IN STD_LOGIC; + nWP : IN STD_LOGIC; + nDCHG : IN STD_LOGIC; + SD_DATA0 : IN STD_LOGIC; + SD_DATA1 : IN STD_LOGIC; + SD_DATA2 : IN STD_LOGIC; + SD_CARD_DEDECT : IN STD_LOGIC; + MIDI_IN : IN STD_LOGIC; + nSCSI_DRQ : IN STD_LOGIC; + SD_WP : IN STD_LOGIC; + nRD_DATA : IN STD_LOGIC; + nSCSI_C_D : IN STD_LOGIC; + nSCSI_I_O : IN STD_LOGIC; + nSCSI_MSG : IN STD_LOGIC; + nDACK0 : IN STD_LOGIC; + PIC_INT : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + TOUT0 : IN STD_LOGIC; + nMASTER : IN STD_LOGIC; + DVI_INT : IN STD_LOGIC; + nDACK1 : IN STD_LOGIC; + nPCI_INTD : IN STD_LOGIC; + nPCI_INTC : IN STD_LOGIC; + nPCI_INTB : IN STD_LOGIC; + nPCI_INTA : IN STD_LOGIC; + E0_INT : IN STD_LOGIC; + nINDEX : IN STD_LOGIC; + HD_DD : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + nRSTO_MCF : IN STD_LOGIC; + SCSI_PAR : INOUT STD_LOGIC; + nSCSI_RST : INOUT STD_LOGIC; + nSCSI_SEL : INOUT STD_LOGIC; + nSCSI_BUSY : INOUT STD_LOGIC; + SD_CD_DATA3 : INOUT STD_LOGIC; + SD_CMD_D1 : INOUT STD_LOGIC; + ACSI_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + IO : INOUT STD_LOGIC_VECTOR(17 DOWNTO 0); + LP_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + SCSI_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + SRD : INOUT STD_LOGIC_VECTOR(15 DOWNTO 0); + VD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + VDQS : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0); + CLK24M576 : OUT STD_LOGIC; + LP_STR : OUT STD_LOGIC; + nACSI_ACK : OUT STD_LOGIC; + nACSI_RESET : OUT STD_LOGIC; + nACSI_CS : OUT STD_LOGIC; + ACSI_DIR : OUT STD_LOGIC; + ACSI_A1 : OUT STD_LOGIC; + nSCSI_ACK : OUT STD_LOGIC; + nSCSI_ATN : OUT STD_LOGIC; + SCSI_DIR : OUT STD_LOGIC; + MIDI_OLR : OUT STD_LOGIC; + MIDI_TLR : OUT STD_LOGIC; + TxD : OUT STD_LOGIC; + RTS : OUT STD_LOGIC; + DTR : OUT STD_LOGIC; + AMKB_TX : OUT STD_LOGIC; + IDE_RES : OUT STD_LOGIC; + nIDE_CS0 : OUT STD_LOGIC; + nIDE_CS1 : OUT STD_LOGIC; + nIDE_WR : OUT STD_LOGIC; + nIDE_RD : OUT STD_LOGIC; + nCF_CS0 : OUT STD_LOGIC; + nCF_CS1 : OUT STD_LOGIC; + nROM3 : OUT STD_LOGIC; + nROM4 : OUT STD_LOGIC; + nRP_UDS : OUT STD_LOGIC; + nRP_LDS : OUT STD_LOGIC; + nSDSEL : OUT STD_LOGIC; + nWR_GATE : OUT STD_LOGIC; + nWR : OUT STD_LOGIC; + YM_QA : OUT STD_LOGIC; + YM_QB : OUT STD_LOGIC; + YM_QC : OUT STD_LOGIC; + SD_CLK : OUT STD_LOGIC; + DSA_D : OUT STD_LOGIC; + nVWE : OUT STD_LOGIC; + nVCAS : OUT STD_LOGIC; + nVRAS : OUT STD_LOGIC; + nVCS : OUT STD_LOGIC; + nPD_VGA : OUT STD_LOGIC; + CLK25M : OUT STD_LOGIC; + TIN0 : OUT STD_LOGIC; + nSRCS : OUT STD_LOGIC; + nSRBLE : OUT STD_LOGIC; + nSRBHE : OUT STD_LOGIC; + nSRWE : OUT STD_LOGIC; + nDREQ1 : OUT STD_LOGIC; + LED_FPGA_OK : OUT STD_LOGIC; + nSROE : OUT STD_LOGIC; + VCKE : OUT STD_LOGIC; + nFB_TA : OUT STD_LOGIC; + nDDR_CLK : OUT STD_LOGIC; + DDR_CLK : OUT STD_LOGIC; + VSYNC_PAD : OUT STD_LOGIC; + HSYNC_PAD : OUT STD_LOGIC; + nBLANK_PAD : OUT STD_LOGIC; + PIXEL_CLK_PAD : OUT STD_LOGIC; + nSYNC : OUT STD_LOGIC; + nMOT_ON : OUT STD_LOGIC; + nSTEP_DIR : OUT STD_LOGIC; + nSTEP : OUT STD_LOGIC; + CLKUSB : OUT STD_LOGIC; + LPDIR : OUT STD_LOGIC; + BA : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + nIRQ : OUT STD_LOGIC_VECTOR(7 DOWNTO 2); + VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0); + VB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VDM : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + VG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VR : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END firebee1; + +ARCHITECTURE bdf_type OF firebee1 IS + +COMPONENT video + PORT(MAIN_CLK : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + DDR_SYNC_66M : IN STD_LOGIC; + CLK33M : IN STD_LOGIC; + CLK25M : IN STD_LOGIC; + CLK_VIDEO : IN STD_LOGIC; + VR_BUSY : IN STD_LOGIC; + DDRCLK : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + VD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + VDQS : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0); + VR_D : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + VR_RD : OUT STD_LOGIC; + nBLANK : OUT STD_LOGIC; + nVWE : OUT STD_LOGIC; + nVCAS : OUT STD_LOGIC; + nVRAS : OUT STD_LOGIC; + nVCS : OUT STD_LOGIC; + nPD_VGA : OUT STD_LOGIC; + VCKE : OUT STD_LOGIC; + VSYNC : OUT STD_LOGIC; + HSYNC : OUT STD_LOGIC; + nSYNC : OUT STD_LOGIC; + VIDEO_TA : OUT STD_LOGIC; + PIXEL_CLK : OUT STD_LOGIC; + VIDEO_RECONFIG : OUT STD_LOGIC; + VR_WR : OUT STD_LOGIC; + BA : OUT STD_LOGIC_VECTOR(1 DOWNTO 0); + VA : OUT STD_LOGIC_VECTOR(12 DOWNTO 0); + VB : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VDM : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); + VG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); + VR : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altpll1 + PORT(inclk0 : IN STD_LOGIC; + c0 : OUT STD_LOGIC; + c1 : OUT STD_LOGIC; + c2 : OUT STD_LOGIC; + locked : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT lpm_ff0 + PORT(clock : IN STD_LOGIC; + enable : IN STD_LOGIC; + data : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altpll2 + PORT(inclk0 : IN STD_LOGIC; + c0 : OUT STD_LOGIC; + c1 : OUT STD_LOGIC; + c2 : OUT STD_LOGIC; + c3 : OUT STD_LOGIC; + c4 : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT altpll3 + PORT(inclk0 : IN STD_LOGIC; + c0 : OUT STD_LOGIC; + c1 : OUT STD_LOGIC; + c2 : OUT STD_LOGIC; + c3 : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT lpm_counter0 + PORT(clock : IN STD_LOGIC; + q : OUT STD_LOGIC_VECTOR(17 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT altpll4 + PORT(inclk0 : IN STD_LOGIC; + areset : IN STD_LOGIC; + scanclk : IN STD_LOGIC; + scandata : IN STD_LOGIC; + scanclkena : IN STD_LOGIC; + configupdate : IN STD_LOGIC; + c0 : OUT STD_LOGIC; + scandataout : OUT STD_LOGIC; + scandone : OUT STD_LOGIC; + locked : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT altddio_out3 + PORT(datain_h : IN STD_LOGIC; + datain_l : IN STD_LOGIC; + outclock : IN STD_LOGIC; + dataout : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT altpll_reconfig1 + PORT(reconfig : IN STD_LOGIC; + read_param : IN STD_LOGIC; + write_param : IN STD_LOGIC; + pll_scandataout : IN STD_LOGIC; + pll_scandone : IN STD_LOGIC; + clock : IN STD_LOGIC; + reset : IN STD_LOGIC; + pll_areset_in : IN STD_LOGIC; + counter_param : IN STD_LOGIC_VECTOR(2 DOWNTO 0); + counter_type : IN STD_LOGIC_VECTOR(3 DOWNTO 0); + data_in : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + busy : OUT STD_LOGIC; + pll_scandata : OUT STD_LOGIC; + pll_scanclk : OUT STD_LOGIC; + pll_scanclkena : OUT STD_LOGIC; + pll_configupdate : OUT STD_LOGIC; + pll_areset : OUT STD_LOGIC; + data_out : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) + ); +END COMPONENT; + +COMPONENT dsp + PORT(CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + nFB_CS3 : IN STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + IO : INOUT STD_LOGIC_VECTOR(17 DOWNTO 0); + SRD : INOUT STD_LOGIC_VECTOR(15 DOWNTO 0); + nSRCS : OUT STD_LOGIC; + nSRBLE : OUT STD_LOGIC; + nSRBHE : OUT STD_LOGIC; + nSRWE : OUT STD_LOGIC; + nSROE : OUT STD_LOGIC; + DSP_INT : OUT STD_LOGIC; + DSP_TA : OUT STD_LOGIC + ); +END COMPONENT; + +COMPONENT interrupt_handler + PORT(MAIN_CLK : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + PIC_INT : IN STD_LOGIC; + E0_INT : IN STD_LOGIC; + DVI_INT : IN STD_LOGIC; + nPCI_INTA : IN STD_LOGIC; + nPCI_INTB : IN STD_LOGIC; + nPCI_INTC : IN STD_LOGIC; + nPCI_INTD : IN STD_LOGIC; + nMFP_INT : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + DSP_INT : IN STD_LOGIC; + VSYNC : IN STD_LOGIC; + HSYNC : IN STD_LOGIC; + DMA_DRQ : IN STD_LOGIC; + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + INT_HANDLER_TA : OUT STD_LOGIC; + TIN0 : OUT STD_LOGIC; + ACP_CONF : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); + nIRQ : OUT STD_LOGIC_VECTOR(7 DOWNTO 2) + ); +END COMPONENT; + +COMPONENT falconio_sdcard_ide_cf + PORT(CLK33M : IN STD_LOGIC; + MAIN_CLK : IN STD_LOGIC; + CLK2M : IN STD_LOGIC; + CLK500k : IN STD_LOGIC; + nFB_CS1 : IN STD_LOGIC; + FB_SIZE0 : IN STD_LOGIC; + FB_SIZE1 : IN STD_LOGIC; + nFB_BURST : IN STD_LOGIC; + LP_BUSY : IN STD_LOGIC; + nACSI_DRQ : IN STD_LOGIC; + nACSI_INT : IN STD_LOGIC; + nSCSI_DRQ : IN STD_LOGIC; + nSCSI_MSG : IN STD_LOGIC; + MIDI_IN : IN STD_LOGIC; + RxD : IN STD_LOGIC; + CTS : IN STD_LOGIC; + RI : IN STD_LOGIC; + DCD : IN STD_LOGIC; + AMKB_RX : IN STD_LOGIC; + PIC_AMKB_RX : IN STD_LOGIC; + IDE_RDY : IN STD_LOGIC; + IDE_INT : IN STD_LOGIC; + WP_CS_CARD : IN STD_LOGIC; + nINDEX : IN STD_LOGIC; + TRACK00 : IN STD_LOGIC; + nRD_DATA : IN STD_LOGIC; + nDCHG : IN STD_LOGIC; + SD_DATA0 : IN STD_LOGIC; + SD_DATA1 : IN STD_LOGIC; + SD_DATA2 : IN STD_LOGIC; + SD_CARD_DEDECT : IN STD_LOGIC; + SD_WP : IN STD_LOGIC; + nDACK0 : IN STD_LOGIC; + nFB_WR : IN STD_LOGIC; + WP_CF_CARD : IN STD_LOGIC; + nWP : IN STD_LOGIC; + nFB_CS2 : IN STD_LOGIC; + nRSTO : IN STD_LOGIC; + nSCSI_C_D : IN STD_LOGIC; + nSCSI_I_O : IN STD_LOGIC; + CLK2M4576 : IN STD_LOGIC; + nFB_OE : IN STD_LOGIC; + VSYNC : IN STD_LOGIC; + HSYNC : IN STD_LOGIC; + DSP_INT : IN STD_LOGIC; + nBLANK : IN STD_LOGIC; + FDC_CLK : IN STD_LOGIC; + FB_ALE : IN STD_LOGIC; + HD_DD : IN STD_LOGIC; + SCSI_PAR : INOUT STD_LOGIC; + nSCSI_SEL : INOUT STD_LOGIC; + nSCSI_BUSY : INOUT STD_LOGIC; + nSCSI_RST : INOUT STD_LOGIC; + SD_CD_DATA3 : INOUT STD_LOGIC; + SD_CDM_D1 : INOUT STD_LOGIC; + ACP_CONF : IN STD_LOGIC_VECTOR(31 DOWNTO 24); + ACSI_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + FB_AD : INOUT STD_LOGIC_VECTOR(31 DOWNTO 0); + FB_ADR : IN STD_LOGIC_VECTOR(31 DOWNTO 0); + LP_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + SCSI_D : INOUT STD_LOGIC_VECTOR(7 DOWNTO 0); + nIDE_CS1 : OUT STD_LOGIC; + nIDE_CS0 : OUT STD_LOGIC; + LP_STR : OUT STD_LOGIC; + LP_DIR : OUT STD_LOGIC; + nACSI_ACK : OUT STD_LOGIC; + nACSI_RESET : OUT STD_LOGIC; + nACSI_CS : OUT STD_LOGIC; + ACSI_DIR : OUT STD_LOGIC; + ACSI_A1 : OUT STD_LOGIC; + nSCSI_ACK : OUT STD_LOGIC; + nSCSI_ATN : OUT STD_LOGIC; + SCSI_DIR : OUT STD_LOGIC; + SD_CLK : OUT STD_LOGIC; + YM_QA : OUT STD_LOGIC; + YM_QC : OUT STD_LOGIC; + YM_QB : OUT STD_LOGIC; + nSDSEL : OUT STD_LOGIC; + STEP : OUT STD_LOGIC; + MOT_ON : OUT STD_LOGIC; + nRP_LDS : OUT STD_LOGIC; + nRP_UDS : OUT STD_LOGIC; + nROM4 : OUT STD_LOGIC; + nROM3 : OUT STD_LOGIC; + nCF_CS1 : OUT STD_LOGIC; + nCF_CS0 : OUT STD_LOGIC; + nIDE_RD : OUT STD_LOGIC; + nIDE_WR : OUT STD_LOGIC; + AMKB_TX : OUT STD_LOGIC; + IDE_RES : OUT STD_LOGIC; + DTR : OUT STD_LOGIC; + RTS : OUT STD_LOGIC; + TxD : OUT STD_LOGIC; + MIDI_OLR : OUT STD_LOGIC; + MIDI_TLR : OUT STD_LOGIC; + nDREQ0 : OUT STD_LOGIC; + DSA_D : OUT STD_LOGIC; + nMFP_INT : OUT STD_LOGIC; + FALCON_IO_TA : OUT STD_LOGIC; + STEP_DIR : OUT STD_LOGIC; + WR_DATA : OUT STD_LOGIC; + WR_GATE : OUT STD_LOGIC; + DMA_DRQ : OUT STD_LOGIC + ); +END COMPONENT; + +SIGNAL ACP_CONF : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL CLK25M_ALTERA_SYNTHESIZED : STD_LOGIC; +SIGNAL CLK2M : STD_LOGIC; +SIGNAL CLK2M4576 : STD_LOGIC; +SIGNAL CLK48M : STD_LOGIC; +SIGNAL CLK500k : STD_LOGIC; +SIGNAL CLK_VIDEO : STD_LOGIC; +SIGNAL DDR_SYNC_66M : STD_LOGIC; +SIGNAL DDRCLK : STD_LOGIC_VECTOR(3 DOWNTO 0); +SIGNAL DMA_DRQ : STD_LOGIC; +SIGNAL DSP_INT : STD_LOGIC; +SIGNAL DSP_TA : STD_LOGIC; +SIGNAL FALCON_IO_TA : STD_LOGIC; +SIGNAL FB_ADR : STD_LOGIC_VECTOR(31 DOWNTO 0); +SIGNAL FDC_CLK : STD_LOGIC; +SIGNAL HSYNC : STD_LOGIC; +SIGNAL INT_HANDLER_TA : STD_LOGIC; +SIGNAL LP_DIR : STD_LOGIC; +SIGNAL MOT_ON : STD_LOGIC; +SIGNAL nBLANK : STD_LOGIC; +SIGNAL nDREQ0 : STD_LOGIC; +SIGNAL nMFP_INT : STD_LOGIC; +SIGNAL nRSTO : STD_LOGIC; +SIGNAL PIXEL_CLK : STD_LOGIC; +SIGNAL SD_CDM_D1 : STD_LOGIC; +SIGNAL STEP : STD_LOGIC; +SIGNAL STEP_DIR : STD_LOGIC; +SIGNAL TIMEBASE : STD_LOGIC_VECTOR(17 DOWNTO 0); +SIGNAL VIDEO_RECONFIG : STD_LOGIC; +SIGNAL Video_TA : STD_LOGIC; +SIGNAL VR_BUSY : STD_LOGIC; +SIGNAL VR_D : STD_LOGIC_VECTOR(8 DOWNTO 0); +SIGNAL VR_RD : STD_LOGIC; +SIGNAL VR_WR : STD_LOGIC; +SIGNAL VSYNC : STD_LOGIC; +SIGNAL WR_DATA : STD_LOGIC; +SIGNAL WR_GATE : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_0 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_1 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_2 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_3 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_4 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_5 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_6 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_7 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_8 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_9 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_10 : STD_LOGIC; + + +BEGIN +nDREQ1 <= nDACK1; +SYNTHESIZED_WIRE_9 <= '0'; +SYNTHESIZED_WIRE_10 <= '1'; + + + +b2v_Fredi_Aschwanden : video +PORT MAP(MAIN_CLK => MAIN_CLK, + nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + nFB_CS3 => nFB_CS3, + nFB_WR => nFB_WR, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + nRSTO => nRSTO, + nFB_OE => nFB_OE, + FB_ALE => FB_ALE, + DDR_SYNC_66M => DDR_SYNC_66M, + CLK33M => CLK33M, + CLK25M => CLK25M_ALTERA_SYNTHESIZED, + CLK_VIDEO => CLK_VIDEO, + VR_BUSY => VR_BUSY, + DDRCLK => DDRCLK, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + VD => VD, + VDQS => VDQS, + VR_D => VR_D, + VR_RD => VR_RD, + nBLANK => nBLANK, + nVWE => nVWE, + nVCAS => nVCAS, + nVRAS => nVRAS, + nVCS => nVCS, + nPD_VGA => nPD_VGA, + VCKE => VCKE, + VSYNC => VSYNC, + HSYNC => HSYNC, + nSYNC => nSYNC, + VIDEO_TA => Video_TA, + PIXEL_CLK => PIXEL_CLK, + VIDEO_RECONFIG => VIDEO_RECONFIG, + VR_WR => VR_WR, + BA => BA, + VA => VA, + VB => VB, + VDM => VDM, + VG => VG, + VR => VR); + + +b2v_inst : altpll1 +PORT MAP(inclk0 => CLK33M, + c0 => CLK500k, + c1 => CLK2M4576, + c2 => CLK24M576, + locked => SYNTHESIZED_WIRE_5); + + +b2v_inst1 : lpm_ff0 +PORT MAP(clock => DDR_SYNC_66M, + enable => FB_ALE, + data => FB_AD, + q => FB_ADR); + + + + +b2v_inst12 : altpll2 +PORT MAP(inclk0 => MAIN_CLK, + c0 => DDRCLK(0), + c1 => DDRCLK(1), + c2 => DDRCLK(2), + c3 => DDRCLK(3), + c4 => DDR_SYNC_66M); + + +b2v_inst13 : altpll3 +PORT MAP(inclk0 => CLK33M, + c0 => CLK2M, + c1 => FDC_CLK, + c2 => CLK25M_ALTERA_SYNTHESIZED, + c3 => CLK48M); + + +nMOT_ON <= NOT(MOT_ON); + + + +nSTEP_DIR <= NOT(STEP_DIR); + + + +nSTEP <= NOT(STEP); + + + +nWR <= NOT(WR_DATA); + + + +b2v_inst18 : lpm_counter0 +PORT MAP(clock => CLK500k, + q => TIMEBASE); + + +nWR_GATE <= NOT(WR_GATE); + + + +nFB_TA <= NOT(Video_TA OR INT_HANDLER_TA OR DSP_TA OR FALCON_IO_TA); + + +b2v_inst22 : altpll4 +PORT MAP(inclk0 => CLK48M, + areset => SYNTHESIZED_WIRE_0, + scanclk => SYNTHESIZED_WIRE_1, + scandata => SYNTHESIZED_WIRE_2, + scanclkena => SYNTHESIZED_WIRE_3, + configupdate => SYNTHESIZED_WIRE_4, + c0 => CLK_VIDEO, + scandataout => SYNTHESIZED_WIRE_6, + scandone => SYNTHESIZED_WIRE_7); + + +SYNTHESIZED_WIRE_8 <= NOT(nRSTO); + + + +nRSTO <= SYNTHESIZED_WIRE_5 AND nRSTO_MCF; + +LED_FPGA_OK <= TIMEBASE(17); + + + +nDDR_CLK <= NOT(DDRCLK(0)); + + + +b2v_inst5 : altddio_out3 +PORT MAP(datain_h => VSYNC, + datain_l => VSYNC, + outclock => PIXEL_CLK, + dataout => VSYNC_PAD); + + +b2v_inst6 : altddio_out3 +PORT MAP(datain_h => HSYNC, + datain_l => HSYNC, + outclock => PIXEL_CLK, + dataout => HSYNC_PAD); + + +b2v_inst7 : altpll_reconfig1 +PORT MAP(reconfig => VIDEO_RECONFIG, + read_param => VR_RD, + write_param => VR_WR, + pll_scandataout => SYNTHESIZED_WIRE_6, + pll_scandone => SYNTHESIZED_WIRE_7, + clock => MAIN_CLK, + reset => SYNTHESIZED_WIRE_8, + counter_param => FB_ADR(8 DOWNTO 6), + counter_type => FB_ADR(5 DOWNTO 2), + data_in => FB_AD(24 DOWNTO 16), + busy => VR_BUSY, + pll_scandata => SYNTHESIZED_WIRE_2, + pll_scanclk => SYNTHESIZED_WIRE_1, + pll_scanclkena => SYNTHESIZED_WIRE_3, + pll_configupdate => SYNTHESIZED_WIRE_4, + pll_areset => SYNTHESIZED_WIRE_0, + data_out => VR_D); + + +b2v_inst8 : altddio_out3 +PORT MAP(datain_h => nBLANK, + datain_l => nBLANK, + outclock => PIXEL_CLK, + dataout => nBLANK_PAD); + + +b2v_inst9 : altddio_out3 +PORT MAP(datain_h => SYNTHESIZED_WIRE_9, + datain_l => SYNTHESIZED_WIRE_10, + outclock => PIXEL_CLK, + dataout => PIXEL_CLK_PAD); + + +b2v_Mathias_Alles : dsp +PORT MAP(CLK33M => CLK33M, + MAIN_CLK => MAIN_CLK, + nFB_OE => nFB_OE, + nFB_WR => nFB_WR, + nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + nFB_BURST => nFB_BURST, + nRSTO => nRSTO, + nFB_CS3 => nFB_CS3, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + IO => IO, + SRD => SRD, + nSRCS => nSRCS, + nSRBLE => nSRBLE, + nSRBHE => nSRBHE, + nSRWE => nSRWE, + nSROE => nSROE, + DSP_INT => DSP_INT, + DSP_TA => DSP_TA); + + +b2v_nobody : interrupt_handler +PORT MAP(MAIN_CLK => MAIN_CLK, + nFB_WR => nFB_WR, + nFB_CS1 => nFB_CS1, + nFB_CS2 => nFB_CS2, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + PIC_INT => PIC_INT, + E0_INT => E0_INT, + DVI_INT => DVI_INT, + nPCI_INTA => nPCI_INTA, + nPCI_INTB => nPCI_INTB, + nPCI_INTC => nPCI_INTC, + nPCI_INTD => nPCI_INTD, + nMFP_INT => nMFP_INT, + nFB_OE => nFB_OE, + DSP_INT => DSP_INT, + VSYNC => VSYNC, + HSYNC => HSYNC, + DMA_DRQ => DMA_DRQ, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + INT_HANDLER_TA => INT_HANDLER_TA, + TIN0 => TIN0, + ACP_CONF => ACP_CONF, + nIRQ => nIRQ); + + +b2v_Wolfgang_Foerster_and_Fredi_Aschwanden : falconio_sdcard_ide_cf +PORT MAP(CLK33M => CLK33M, + MAIN_CLK => MAIN_CLK, + CLK2M => CLK2M, + CLK500k => CLK500k, + nFB_CS1 => nFB_CS1, + FB_SIZE0 => FB_SIZE0, + FB_SIZE1 => FB_SIZE1, + nFB_BURST => nFB_BURST, + LP_BUSY => LP_BUSY, + nACSI_DRQ => nACSI_DRQ, + nACSI_INT => nACSI_INT, + nSCSI_DRQ => nSCSI_DRQ, + nSCSI_MSG => nSCSI_MSG, + MIDI_IN => MIDI_IN, + RxD => RxD, + CTS => CTS, + RI => RI, + DCD => DCD, + AMKB_RX => AMKB_RX, + PIC_AMKB_RX => PIC_AMKB_RX, + IDE_RDY => IDE_RDY, + IDE_INT => IDE_INT, + nINDEX => nINDEX, + TRACK00 => TRACK00, + nRD_DATA => nRD_DATA, + nDCHG => nDCHG, + SD_DATA0 => SD_DATA0, + SD_DATA1 => SD_DATA1, + SD_DATA2 => SD_DATA2, + SD_CARD_DEDECT => SD_CARD_DEDECT, + SD_WP => SD_WP, + nDACK0 => nDACK0, + nFB_WR => nFB_WR, + WP_CF_CARD => WP_CF_CARD, + nWP => nWP, + nFB_CS2 => nFB_CS2, + nRSTO => nRSTO, + nSCSI_C_D => nSCSI_C_D, + nSCSI_I_O => nSCSI_I_O, + CLK2M4576 => CLK2M4576, + nFB_OE => nFB_OE, + VSYNC => VSYNC, + HSYNC => HSYNC, + DSP_INT => DSP_INT, + nBLANK => nBLANK, + FDC_CLK => FDC_CLK, + FB_ALE => FB_ALE, + HD_DD => HD_DD, + SCSI_PAR => SCSI_PAR, + nSCSI_SEL => nSCSI_SEL, + nSCSI_BUSY => nSCSI_BUSY, + nSCSI_RST => nSCSI_RST, + SD_CD_DATA3 => SD_CD_DATA3, + SD_CDM_D1 => SD_CDM_D1, + ACP_CONF => ACP_CONF(31 DOWNTO 24), + ACSI_D => ACSI_D, + FB_AD => FB_AD, + FB_ADR => FB_ADR, + LP_D => LP_D, + SCSI_D => SCSI_D, + nIDE_CS1 => nIDE_CS1, + nIDE_CS0 => nIDE_CS0, + LP_STR => LP_STR, + LP_DIR => LP_DIR, + nACSI_ACK => nACSI_ACK, + nACSI_RESET => nACSI_RESET, + nACSI_CS => nACSI_CS, + ACSI_DIR => ACSI_DIR, + ACSI_A1 => ACSI_A1, + nSCSI_ACK => nSCSI_ACK, + nSCSI_ATN => nSCSI_ATN, + SCSI_DIR => SCSI_DIR, + SD_CLK => SD_CLK, + YM_QA => YM_QA, + YM_QC => YM_QC, + YM_QB => YM_QB, + nSDSEL => nSDSEL, + STEP => STEP, + MOT_ON => MOT_ON, + nRP_LDS => nRP_LDS, + nRP_UDS => nRP_UDS, + nROM4 => nROM4, + nROM3 => nROM3, + nCF_CS1 => nCF_CS1, + nCF_CS0 => nCF_CS0, + nIDE_RD => nIDE_RD, + nIDE_WR => nIDE_WR, + AMKB_TX => AMKB_TX, + IDE_RES => IDE_RES, + DTR => DTR, + RTS => RTS, + TxD => TxD, + MIDI_OLR => MIDI_OLR, + MIDI_TLR => MIDI_TLR, + DSA_D => DSA_D, + nMFP_INT => nMFP_INT, + FALCON_IO_TA => FALCON_IO_TA, + STEP_DIR => STEP_DIR, + WR_DATA => WR_DATA, + WR_GATE => WR_GATE, + DMA_DRQ => DMA_DRQ); + +SD_CMD_D1 <= SD_CDM_D1; +CLK25M <= CLK25M_ALTERA_SYNTHESIZED; +DDR_CLK <= DDRCLK(0); +CLKUSB <= CLK48M; +LPDIR <= LP_DIR; + +END bdf_type; \ No newline at end of file diff --git a/FPGA_quartus_GE/firebee1_assignment_defaults.qdf b/FPGA_quartus_GE/firebee1_assignment_defaults.qdf new file mode 100644 index 0000000..2119467 --- /dev/null +++ b/FPGA_quartus_GE/firebee1_assignment_defaults.qdf @@ -0,0 +1,687 @@ +# -------------------------------------------------------------------------- # +# +# Copyright (C) 1991-2010 Altera Corporation +# Your use of Altera Corporation's design tools, logic functions +# and other software and tools, and its AMPP partner logic +# functions, and any output files from any of the foregoing +# (including device programming or simulation files), and any +# associated documentation or information are expressly subject +# to the terms and conditions of the Altera Program License +# Subscription Agreement, Altera MegaCore Function License +# Agreement, or other applicable license agreement, including, +# without limitation, that your use is for the sole purpose of +# programming logic devices manufactured by Altera and sold by +# Altera or its authorized distributors. Please refer to the +# applicable agreement for further details. +# +# -------------------------------------------------------------------------- # +# +# Quartus II +# Version 9.1 Build 350 03/24/2010 Service Pack 2 SJ Web Edition +# Date created = 08:49:57 June 14, 2010 +# +# -------------------------------------------------------------------------- # +# +# Note: +# +# 1) Do not modify this file. This file was generated +# automatically by the Quartus II software and is used +# to preserve global assignments across Quartus II versions. +# +# -------------------------------------------------------------------------- # + +set_global_assignment -name PROJECT_SHOW_ENTITY_NAME On +set_global_assignment -name PROJECT_USE_SIMPLIFIED_NAMES Off +set_global_assignment -name ENABLE_REDUCED_MEMORY_MODE Off +set_global_assignment -name VER_COMPATIBLE_DB_DIR export_db +set_global_assignment -name AUTO_EXPORT_VER_COMPATIBLE_DB Off +set_global_assignment -name SMART_RECOMPILE Off +set_global_assignment -name FLOW_DISABLE_ASSEMBLER Off +set_global_assignment -name FLOW_ENABLE_HC_COMPARE Off +set_global_assignment -name HC_OUTPUT_DIR hc_output +set_global_assignment -name SAVE_MIGRATION_INFO_DURING_COMPILATION Off +set_global_assignment -name FLOW_ENABLE_IO_ASSIGNMENT_ANALYSIS Off +set_global_assignment -name RUN_FULL_COMPILE_ON_DEVICE_CHANGE On +set_global_assignment -name FLOW_ENABLE_RTL_VIEWER Off +set_global_assignment -name READ_OR_WRITE_IN_BYTE_ADDRESS "Use global settings" +set_global_assignment -name FLOW_HARDCOPY_DESIGN_READINESS_CHECK On +set_global_assignment -name FLOW_ENABLE_PARALLEL_MODULES On +set_global_assignment -name ENABLE_COMPACT_REPORT_TABLE Off +set_global_assignment -name DEFAULT_HOLD_MULTICYCLE "Same as Multicycle" +set_global_assignment -name CUT_OFF_PATHS_BETWEEN_CLOCK_DOMAINS On +set_global_assignment -name CUT_OFF_READ_DURING_WRITE_PATHS On +set_global_assignment -name CUT_OFF_IO_PIN_FEEDBACK On +set_global_assignment -name DO_COMBINED_ANALYSIS Off +set_global_assignment -name IGNORE_CLOCK_SETTINGS Off +set_global_assignment -name ANALYZE_LATCHES_AS_SYNCHRONOUS_ELEMENTS On +set_global_assignment -name ENABLE_RECOVERY_REMOVAL_ANALYSIS Off +set_global_assignment -name ENABLE_CLOCK_LATENCY Off +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family MAX7000B +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "HardCopy II" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Cyclone IV E" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Stratix IV" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Cyclone III" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "HardCopy Stratix" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family MAX7000AE +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family Cyclone +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "Stratix II GX" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "MAX II" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Arria II GX" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "Stratix GX" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "HardCopy III" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family MAX7000S +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "Cyclone II" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Cyclone IV GX" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "HardCopy IV" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Cyclone III LS" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Stratix III" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER On -family "Arria GX" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family MAX3000A +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family "Stratix II" +set_global_assignment -name USE_TIMEQUEST_TIMING_ANALYZER Off -family Stratix +set_global_assignment -name NUMBER_OF_SOURCES_PER_DESTINATION_TO_REPORT 10 +set_global_assignment -name NUMBER_OF_DESTINATION_TO_REPORT 10 +set_global_assignment -name NUMBER_OF_PATHS_TO_REPORT 200 +set_global_assignment -name DO_MIN_ANALYSIS Off +set_global_assignment -name DO_MIN_TIMING Off +set_global_assignment -name REPORT_IO_PATHS_SEPARATELY Off +set_global_assignment -name FLOW_ENABLE_TIMING_CONSTRAINT_CHECK Off +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family MAX7000B +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "HardCopy II" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV E" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix IV" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone III" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "HardCopy Stratix" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family MAX7000AE +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family Cyclone +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix II GX" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "MAX II" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria II GX" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family "Stratix GX" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "HardCopy III" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family MAX7000S +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone II" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone IV GX" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "HardCopy IV" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Cyclone III LS" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix III" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Arria GX" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family MAX3000A +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS On -family "Stratix II" +set_global_assignment -name TIMEQUEST_MULTICORNER_ANALYSIS Off -family Stratix +set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING Off +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family MAX7000B +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "HardCopy II" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix IV" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV E" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone III" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "HardCopy Stratix" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family MAX7000AE +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix II GX" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family Cyclone +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "MAX II" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria II GX" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix GX" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family MAX7000S +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "HardCopy III" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone II" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone IV GX" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "HardCopy IV" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family "Cyclone III LS" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix III" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Arria GX" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS On -family MAX3000A +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family "Stratix II" +set_global_assignment -name TIMEQUEST_REPORT_WORST_CASE_TIMING_PATHS Off -family Stratix +set_global_assignment -name TIMEQUEST_REPORT_NUM_WORST_CASE_TIMING_PATHS 100 +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family MAX7000B +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "HardCopy II" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV E" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix IV" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone III" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "HardCopy Stratix" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family MAX7000AE +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family Cyclone +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "Stratix II GX" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "MAX II" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Arria II GX" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "Stratix GX" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "HardCopy III" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family MAX7000S +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "Cyclone II" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone IV GX" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "HardCopy IV" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Cyclone III LS" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL On -family "Stratix III" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "Arria GX" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family MAX3000A +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family "Stratix II" +set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL Off -family Stratix +set_global_assignment -name MUX_RESTRUCTURE Auto +set_global_assignment -name ENABLE_IP_DEBUG Off +set_global_assignment -name SAVE_DISK_SPACE On +set_global_assignment -name DISABLE_OCP_HW_EVAL Off +set_global_assignment -name DEVICE_FILTER_PACKAGE Any +set_global_assignment -name DEVICE_FILTER_PIN_COUNT Any +set_global_assignment -name DEVICE_FILTER_SPEED_GRADE Any +set_global_assignment -name EDA_DESIGN_ENTRY_SYNTHESIS_TOOL "" +set_global_assignment -name VERILOG_INPUT_VERSION Verilog_2001 +set_global_assignment -name VHDL_INPUT_VERSION VHDL_1993 +set_global_assignment -name FAMILY "Stratix II" +set_global_assignment -name TRUE_WYSIWYG_FLOW Off +set_global_assignment -name SMART_COMPILE_IGNORES_TDC_FOR_STRATIX_PLL_CHANGES Off +set_global_assignment -name STATE_MACHINE_PROCESSING Auto +set_global_assignment -name SAFE_STATE_MACHINE Off +set_global_assignment -name EXTRACT_VERILOG_STATE_MACHINES On +set_global_assignment -name EXTRACT_VHDL_STATE_MACHINES On +set_global_assignment -name IGNORE_VERILOG_INITIAL_CONSTRUCTS Off +set_global_assignment -name VERILOG_CONSTANT_LOOP_LIMIT 5000 +set_global_assignment -name VERILOG_NON_CONSTANT_LOOP_LIMIT 250 +set_global_assignment -name ADD_PASS_THROUGH_LOGIC_TO_INFERRED_RAMS On +set_global_assignment -name PARALLEL_SYNTHESIS -value ON +set_global_assignment -name DSP_BLOCK_BALANCING Auto +set_global_assignment -name MAX_BALANCING_DSP_BLOCKS "-1 (Unlimited)" +set_global_assignment -name NOT_GATE_PUSH_BACK On +set_global_assignment -name ALLOW_POWER_UP_DONT_CARE On +set_global_assignment -name REMOVE_REDUNDANT_LOGIC_CELLS Off +set_global_assignment -name REMOVE_DUPLICATE_REGISTERS On +set_global_assignment -name IGNORE_CARRY_BUFFERS Off +set_global_assignment -name IGNORE_CASCADE_BUFFERS Off +set_global_assignment -name IGNORE_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_ROW_GLOBAL_BUFFERS Off +set_global_assignment -name IGNORE_LCELL_BUFFERS Off +set_global_assignment -name MAX7000_IGNORE_LCELL_BUFFERS AUTO +set_global_assignment -name IGNORE_SOFT_BUFFERS On +set_global_assignment -name MAX7000_IGNORE_SOFT_BUFFERS Off +set_global_assignment -name LIMIT_AHDL_INTEGERS_TO_32_BITS Off +set_global_assignment -name AUTO_GLOBAL_CLOCK_MAX On +set_global_assignment -name AUTO_GLOBAL_OE_MAX On +set_global_assignment -name MAX_AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name AUTO_IMPLEMENT_IN_ROM Off +set_global_assignment -name APEX20K_TECHNOLOGY_MAPPER Lut +set_global_assignment -name OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONE_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name CYCLONEII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name STRATIX_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAXII_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MAX7000_OPTIMIZATION_TECHNIQUE Speed +set_global_assignment -name APEX20K_OPTIMIZATION_TECHNIQUE Balanced +set_global_assignment -name MERCURY_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX6K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name FLEX10K_OPTIMIZATION_TECHNIQUE Area +set_global_assignment -name ALLOW_XOR_GATE_USAGE On +set_global_assignment -name AUTO_LCELL_INSERTION On +set_global_assignment -name CARRY_CHAIN_LENGTH 48 +set_global_assignment -name FLEX6K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name FLEX10K_CARRY_CHAIN_LENGTH 32 +set_global_assignment -name MERCURY_CARRY_CHAIN_LENGTH 48 +set_global_assignment -name STRATIX_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name STRATIXII_CARRY_CHAIN_LENGTH 70 +set_global_assignment -name CASCADE_CHAIN_LENGTH 2 +set_global_assignment -name PARALLEL_EXPANDER_CHAIN_LENGTH 16 +set_global_assignment -name MAX7000_PARALLEL_EXPANDER_CHAIN_LENGTH 4 +set_global_assignment -name AUTO_CARRY_CHAINS On +set_global_assignment -name AUTO_CASCADE_CHAINS On +set_global_assignment -name AUTO_PARALLEL_EXPANDERS On +set_global_assignment -name AUTO_OPEN_DRAIN_PINS On +set_global_assignment -name ADV_NETLIST_OPT_SYNTH_WYSIWYG_REMAP Off +set_global_assignment -name AUTO_ROM_RECOGNITION On +set_global_assignment -name AUTO_RAM_RECOGNITION On +set_global_assignment -name AUTO_DSP_RECOGNITION On +set_global_assignment -name AUTO_SHIFT_REGISTER_RECOGNITION Auto +set_global_assignment -name AUTO_CLOCK_ENABLE_RECOGNITION On +set_global_assignment -name STRICT_RAM_RECOGNITION Off +set_global_assignment -name ALLOW_SYNCH_CTRL_USAGE On +set_global_assignment -name FORCE_SYNCH_CLEAR Off +set_global_assignment -name AUTO_RAM_BLOCK_BALANCING On +set_global_assignment -name AUTO_RAM_TO_LCELL_CONVERSION Off +set_global_assignment -name AUTO_RESOURCE_SHARING Off +set_global_assignment -name ALLOW_ANY_RAM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_ROM_SIZE_FOR_RECOGNITION Off +set_global_assignment -name ALLOW_ANY_SHIFT_REGISTER_SIZE_FOR_RECOGNITION Off +set_global_assignment -name MAX7000_FANIN_PER_CELL 100 +set_global_assignment -name USE_LOGICLOCK_CONSTRAINTS_IN_BALANCING On +set_global_assignment -name MAX_RAM_BLOCKS_M512 "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_M4K "-1 (Unlimited)" +set_global_assignment -name MAX_RAM_BLOCKS_MRAM "-1 (Unlimited)" +set_global_assignment -name IGNORE_TRANSLATE_OFF_AND_SYNTHESIS_OFF Off +set_global_assignment -name STRATIXGX_BYPASS_REMAPPING_OF_FORCE_SIGNAL_DETECT_SIGNAL_THRESHOLD_SELECT Off +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Cyclone III LS" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Cyclone III" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Stratix III" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "HardCopy III" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS Off -family "Arria GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS Off -family "Cyclone II" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS Off -family "HardCopy II" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS Off -family "Stratix II GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Cyclone IV E" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Cyclone IV GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS Off -family "Stratix II" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Stratix IV" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "Arria II GX" +set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS -value ON -family "HardCopy IV" +set_global_assignment -name SHOW_PARAMETER_SETTINGS_TABLES_IN_SYNTHESIS_REPORT On +set_global_assignment -name IGNORE_MAX_FANOUT_ASSIGNMENTS Off +set_global_assignment -name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2 +set_global_assignment -name OPTIMIZE_POWER_DURING_SYNTHESIS "Normal compilation" +set_global_assignment -name HDL_MESSAGE_LEVEL Level2 +set_global_assignment -name USE_HIGH_SPEED_ADDER Auto +set_global_assignment -name NUMBER_OF_REMOVED_REGISTERS_REPORTED 5000 +set_global_assignment -name NUMBER_OF_INVERTED_REGISTERS_REPORTED 100 +set_global_assignment -name SYNTH_CLOCK_MUX_PROTECTION On +set_global_assignment -name SYNTH_GATED_CLOCK_CONVERSION Off +set_global_assignment -name BLOCK_DESIGN_NAMING Auto +set_global_assignment -name SYNTH_PROTECT_SDC_CONSTRAINT Off +set_global_assignment -name SYNTHESIS_EFFORT Auto +set_global_assignment -name SHIFT_REGISTER_RECOGNITION_ACLR_SIGNAL On +set_global_assignment -name PRE_MAPPING_RESYNTHESIS Off +set_global_assignment -name SYNTH_MESSAGE_LEVEL Medium +set_global_assignment -name DISABLE_REGISTER_MERGING_ACROSS_HIERARCHIES Auto +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone III LS" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone III" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix III" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "HardCopy III" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "HardCopy Stratix" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone II" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family Cyclone +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "HardCopy II" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV E" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Cyclone IV GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix II" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Stratix IV" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "Arria II GX" +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family Stratix +set_global_assignment -name SYNTH_RESOURCE_AWARE_INFERENCE_FOR_BLOCK_RAM On -family "HardCopy IV" +set_global_assignment -name MAX_LABS "-1 (Unlimited)" +set_global_assignment -name ADCE_ENABLED Auto +set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL Normal +set_global_assignment -name PLACEMENT_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name ROUTER_EFFORT_MULTIPLIER 1.0 +set_global_assignment -name FIT_ATTEMPTS_TO_SKIP 0.0 +set_global_assignment -name ECO_ALLOW_ROUTING_CHANGES Off +set_global_assignment -name DEVICE AUTO +set_global_assignment -name BASE_PIN_OUT_FILE_ON_SAMEFRAME_DEVICE Off +set_global_assignment -name ENABLE_JTAG_BST_SUPPORT Off +set_global_assignment -name MAX7000_ENABLE_JTAG_BST_SUPPORT On +set_global_assignment -name RESERVE_NCEO_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name CYCLONEII_RESERVE_NCEO_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name STRATIXIII_UPDATE_MODE Standard +set_global_assignment -name STRATIX_UPDATE_MODE Standard +set_global_assignment -name STRATIXIII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEIII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name STRATIXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONEII_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name APEX20K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name STRATIX_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name CYCLONE_CONFIGURATION_SCHEME "Active Serial" +set_global_assignment -name MERCURY_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX6K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name FLEX10K_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name APEXII_CONFIGURATION_SCHEME "Passive Serial" +set_global_assignment -name USER_START_UP_CLOCK Off +set_global_assignment -name ENABLE_VREFA_PIN Off +set_global_assignment -name ENABLE_VREFB_PIN Off +set_global_assignment -name ALWAYS_ENABLE_INPUT_BUFFERS Off +set_global_assignment -name ENABLE_ASMI_FOR_FLASH_LOADER Off +set_global_assignment -name ENABLE_DEVICE_WIDE_RESET Off +set_global_assignment -name ENABLE_DEVICE_WIDE_OE Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS "As output driving ground" +set_global_assignment -name FLEX10K_ENABLE_LOCK_OUTPUT Off +set_global_assignment -name ENABLE_INIT_DONE_OUTPUT Off +set_global_assignment -name RESERVE_NWS_NRS_NCS_CS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_RDYNBUSY_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA1_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DATA0_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family "Cyclone II" +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family Cyclone +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family "Stratix II GX" +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family "HardCopy II" +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family "Arria GX" +set_global_assignment -name RESERVE_ASDO_AFTER_CONFIGURATION "Use as regular IO" -family "Stratix II" +set_global_assignment -name RESERVE_DATA1_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_DATA7_THROUGH_DATA2_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_FLASH_NCE_AFTER_CONFIGURATION "As input tri-stated" +set_global_assignment -name RESERVE_OTHER_AP_PINS_AFTER_CONFIGURATION "Use as regular IO" +set_global_assignment -name RESERVE_DCLK_AFTER_CONFIGURATION "Use as programming pin" +set_global_assignment -name CRC_ERROR_CHECKING Off +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "Stratix GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "HardCopy III" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "Cyclone II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "HardCopy II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "HardCopy IV" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone III LS" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Cyclone III" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Stratix III" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "HardCopy Stratix" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "Stratix II GX" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family Cyclone +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "Stratix II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family "MAX II" +set_global_assignment -name OPTIMIZE_HOLD_TIMING "IO Paths and Minimum TPD Paths" -family Stratix +set_global_assignment -name OPTIMIZE_HOLD_TIMING "All Paths" -family "Arria II GX" +set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING Off +set_global_assignment -name BLOCK_RAM_TO_MLAB_CELL_CONVERSION On +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_POWER_UP_CONDITIONS Auto +set_global_assignment -name BLOCK_RAM_AND_MLAB_EQUIVALENT_PAUSED_READ_CAPABILITIES Care +set_global_assignment -name PROGRAMMABLE_POWER_TECHNOLOGY_SETTING "Force All Tiles with Failing Timing Paths to High Speed" +set_global_assignment -name PROGRAMMABLE_POWER_MAXIMUM_HIGH_SPEED_FRACTION_OF_USED_LAB_TILES 1.0 +set_global_assignment -name GUARANTEE_MIN_DELAY_CORNER_IO_ZERO_HOLD_TIME On +set_global_assignment -name OPTIMIZE_POWER_DURING_FITTING "Normal compilation" +set_global_assignment -name OPTIMIZE_SSN Off -family "Cyclone III LS" +set_global_assignment -name OPTIMIZE_SSN Off -family "Cyclone III" +set_global_assignment -name OPTIMIZE_SSN Off -family "Stratix III" +set_global_assignment -name OPTIMIZE_SSN Off -family "HardCopy III" +set_global_assignment -name OPTIMIZE_SSN Off -family "Cyclone IV E" +set_global_assignment -name OPTIMIZE_SSN Off -family "Stratix IV" +set_global_assignment -name OPTIMIZE_SSN Off -family "Cyclone IV GX" +set_global_assignment -name OPTIMIZE_SSN Off -family "HardCopy IV" +set_global_assignment -name OPTIMIZE_SSN Off -family "Arria II GX" +set_global_assignment -name OPTIMIZE_TIMING "Normal compilation" +set_global_assignment -name ECO_OPTIMIZE_TIMING Off +set_global_assignment -name ECO_REGENERATE_REPORT Off +set_global_assignment -name OPTIMIZE_IOC_REGISTER_PLACEMENT_FOR_TIMING On +set_global_assignment -name FIT_ONLY_ONE_ATTEMPT Off +set_global_assignment -name FINAL_PLACEMENT_OPTIMIZATION Automatically +set_global_assignment -name FITTER_AGGRESSIVE_ROUTABILITY_OPTIMIZATION Automatically +set_global_assignment -name SEED 1 +set_global_assignment -name SLOW_SLEW_RATE Off +set_global_assignment -name PCI_IO Off +set_global_assignment -name TURBO_BIT On +set_global_assignment -name WEAK_PULL_UP_RESISTOR Off +set_global_assignment -name ENABLE_BUS_HOLD_CIRCUITRY Off +set_global_assignment -name AUTO_GLOBAL_MEMORY_CONTROLS Off +set_global_assignment -name MIGRATION_CONSTRAIN_CORE_RESOURCES On +set_global_assignment -name AUTO_PACKED_REGISTERS_STRATIXII AUTO +set_global_assignment -name AUTO_PACKED_REGISTERS_MAXII AUTO +set_global_assignment -name AUTO_PACKED_REGISTERS_CYCLONE Auto +set_global_assignment -name AUTO_PACKED_REGISTERS Off +set_global_assignment -name AUTO_PACKED_REGISTERS_STRATIX AUTO +set_global_assignment -name NORMAL_LCELL_INSERT On +set_global_assignment -name CARRY_OUT_PINS_LCELL_INSERT On +set_global_assignment -name AUTO_DELAY_CHAINS On +set_global_assignment -name XSTL_INPUT_ALLOW_SE_BUFFER Off +set_global_assignment -name TREAT_BIDIR_AS_OUTPUT Off +set_global_assignment -name AUTO_MERGE_PLLS On +set_global_assignment -name IGNORE_MODE_FOR_MERGE Off +set_global_assignment -name AUTO_TURBO_BIT ON +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_COMBO_LOGIC Off +set_global_assignment -name PHYSICAL_SYNTHESIS_LOG_FILE Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_DUPLICATION Off +set_global_assignment -name PHYSICAL_SYNTHESIS_MAP_LOGIC_TO_MEMORY_FOR_AREA Off +set_global_assignment -name PHYSICAL_SYNTHESIS_REGISTER_RETIMING Off +set_global_assignment -name PHYSICAL_SYNTHESIS_ASYNCHRONOUS_SIGNAL_PIPELINING Off +set_global_assignment -name IO_PLACEMENT_OPTIMIZATION On +set_global_assignment -name ALLOW_LVTTL_LVCMOS_INPUT_LEVELS_TO_OVERDRIVE_INPUT_BUFFER Off +set_global_assignment -name OVERRIDE_DEFAULT_ELECTROMIGRATION_PARAMETERS Off +set_global_assignment -name FITTER_EFFORT "Auto Fit" +set_global_assignment -name FITTER_AUTO_EFFORT_DESIRED_SLACK_MARGIN 0ns +set_global_assignment -name PHYSICAL_SYNTHESIS_EFFORT Normal +set_global_assignment -name ROUTER_LCELL_INSERTION_AND_LOGIC_DUPLICATION AUTO +set_global_assignment -name ROUTER_REGISTER_DUPLICATION AUTO +set_global_assignment -name STRATIXGX_ALLOW_CLOCK_FANOUT_WITH_ANALOG_RESET Off +set_global_assignment -name AUTO_GLOBAL_CLOCK On +set_global_assignment -name AUTO_GLOBAL_OE On +set_global_assignment -name AUTO_GLOBAL_REGISTER_CONTROLS On +set_global_assignment -name FITTER_EARLY_TIMING_ESTIMATE_MODE Realistic +set_global_assignment -name STRATIXGX_ALLOW_GIGE_UNDER_FULL_DATARATE_RANGE Off +set_global_assignment -name STRATIXGX_ALLOW_RX_CORECLK_FROM_NON_RX_CLKOUT_SOURCE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_PARALLEL_LOOPBACK_IN_DOUBLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_IN_SINGLE_DATA_WIDTH_MODE Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_XAUI_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_CORECLK_SELECTED_AT_RATE_MATCHER Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITHOUT_8B10B Off +set_global_assignment -name STRATIXGX_ALLOW_GIGE_WITH_RX_CORECLK_FROM_NON_TXPLL_SOURCE Off +set_global_assignment -name STRATIXGX_ALLOW_POST8B10B_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_REVERSE_PARALLEL_LOOPBACK Off +set_global_assignment -name STRATIXGX_ALLOW_USE_OF_GXB_COUPLED_IOS Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF Off +set_global_assignment -name GENERATE_GXB_RECONFIG_MIF_WITH_PLL Off +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_WEAK_PULLUP "As input tri-stated with weak pull-up" +set_global_assignment -name STOP_AFTER_CONGESTION_MAP Off +set_global_assignment -name ENABLE_HOLD_BACK_OFF On +set_global_assignment -name CONFIGURATION_VCCIO_LEVEL Auto +set_global_assignment -name FORCE_CONFIGURATION_VCCIO Off +set_global_assignment -name SYNCHRONIZER_IDENTIFICATION Off +set_global_assignment -name ENABLE_BENEFICIAL_SKEW_OPTIMIZATION On +set_global_assignment -name OPTIMIZE_FOR_METASTABILITY On +set_global_assignment -name CRC_ERROR_OPEN_DRAIN Off +set_global_assignment -name MAX_GLOBAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_REGIONAL_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_PERIPHERY_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name MAX_CLOCKS_ALLOWED "-1 (Unlimited)" +set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_40MHz +set_global_assignment -name M144K_BLOCK_READ_CLOCK_DUTY_CYCLE_DEPENDENCY Off +set_global_assignment -name STRATIXIII_MRAM_COMPATIBILITY On +set_global_assignment -name FORCE_FITTER_TO_AVOID_PERIPHERY_PLACEMENT_WARNINGS Off +set_global_assignment -name AUTO_C3_M9K_BIT_SKIP Off +set_global_assignment -name EDA_SIMULATION_TOOL "" +set_global_assignment -name EDA_TIMING_ANALYSIS_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TIMING_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SYMBOL_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_SIGNAL_INTEGRITY_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_BOUNDARY_SCAN_TOOL "" +set_global_assignment -name EDA_BOARD_DESIGN_TOOL "" +set_global_assignment -name EDA_FORMAL_VERIFICATION_TOOL "" +set_global_assignment -name EDA_RESYNTHESIS_TOOL "" +set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION On +set_global_assignment -name COMPRESSION_MODE Off +set_global_assignment -name CLOCK_SOURCE Internal +set_global_assignment -name CONFIGURATION_CLOCK_FREQUENCY "10 MHz" +set_global_assignment -name CONFIGURATION_CLOCK_DIVISOR 1 +set_global_assignment -name ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name FLEX6K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE Off +set_global_assignment -name FLEX10K_ENABLE_LOW_VOLTAGE_MODE_ON_CONFIG_DEVICE On +set_global_assignment -name MAX7000S_JTAG_USER_CODE FFFF +set_global_assignment -name STRATIX_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name APEX20K_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_JTAG_USER_CODE 7F +set_global_assignment -name MAX7000_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MAX7000_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name SECURITY_BIT Off +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family MAX7000B +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "HardCopy II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV E" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone III" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "HardCopy Stratix" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family MAX7000AE +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family Cyclone +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "Stratix II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "MAX II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Arria II GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "Stratix GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "HardCopy III" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family MAX7000S +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "Cyclone II" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone IV GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "HardCopy IV" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Cyclone III LS" +set_global_assignment -name USE_CONFIGURATION_DEVICE Off -family "Stratix III" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "Arria GX" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family MAX3000A +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family "Stratix II" +set_global_assignment -name USE_CONFIGURATION_DEVICE On -family Stratix +set_global_assignment -name CYCLONEIII_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIGURATION_DEVICE Auto +set_global_assignment -name MERCURY_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX6K_CONFIGURATION_DEVICE Auto +set_global_assignment -name FLEX10K_CONFIGURATION_DEVICE Auto +set_global_assignment -name CYCLONE_CONFIGURATION_DEVICE Auto +set_global_assignment -name STRATIX_CONFIGURATION_DEVICE Auto +set_global_assignment -name APEX20K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name STRATIX_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name MERCURY_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name FLEX10K_CONFIG_DEVICE_JTAG_USER_CODE FFFFFFFF +set_global_assignment -name EPROM_USE_CHECKSUM_AS_USERCODE Off +set_global_assignment -name AUTO_INCREMENT_CONFIG_DEVICE_JTAG_USER_CODE On +set_global_assignment -name DISABLE_NCS_AND_OE_PULLUPS_ON_CONFIG_DEVICE Off +set_global_assignment -name GENERATE_TTF_FILE Off +set_global_assignment -name GENERATE_RBF_FILE Off +set_global_assignment -name GENERATE_HEX_FILE Off +set_global_assignment -name HEXOUT_FILE_START_ADDRESS 0 +set_global_assignment -name HEXOUT_FILE_COUNT_DIRECTION Up +set_global_assignment -name RESERVE_ALL_UNUSED_PINS_NO_OUTPUT_GND "As output driving an unspecified signal" +set_global_assignment -name RELEASE_CLEARS_BEFORE_TRI_STATES Off +set_global_assignment -name AUTO_RESTART_CONFIGURATION On +set_global_assignment -name HARDCOPYII_POWER_ON_EXTRA_DELAY Off +set_global_assignment -name STRATIXII_MRAM_COMPATIBILITY Off +set_global_assignment -name CYCLONEII_M4K_COMPATIBILITY On +set_global_assignment -name ENABLE_OCT_DONE Off +set_global_assignment -name USE_CHECKERED_PATTERN_AS_UNINITIALIZED_RAM_CONTENT Off +set_global_assignment -name START_TIME 0ns +set_global_assignment -name SIMULATION_MODE TIMING +set_global_assignment -name AUTO_USE_SIMULATION_PDB_NETLIST Off +set_global_assignment -name ADD_DEFAULT_PINS_TO_SIMULATION_OUTPUT_WAVEFORMS On +set_global_assignment -name SETUP_HOLD_DETECTION Off +set_global_assignment -name SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off +set_global_assignment -name CHECK_OUTPUTS Off +set_global_assignment -name SIMULATION_COVERAGE On +set_global_assignment -name SIMULATION_COMPLETE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_1_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name SIMULATION_MISSING_0_VALUE_COVERAGE_REPORT_PANEL On +set_global_assignment -name GLITCH_DETECTION Off +set_global_assignment -name GLITCH_INTERVAL 1ns +set_global_assignment -name SIMULATOR_GENERATE_SIGNAL_ACTIVITY_FILE Off +set_global_assignment -name SIMULATION_WITH_GLITCH_FILTERING_WHEN_GENERATING_SAF On +set_global_assignment -name SIMULATION_BUS_CHANNEL_GROUPING Off +set_global_assignment -name SIMULATION_VDB_RESULT_FLUSH On +set_global_assignment -name VECTOR_COMPARE_TRIGGER_MODE INPUT_EDGE +set_global_assignment -name SIMULATION_NETLIST_VIEWER Off +set_global_assignment -name SIMULATION_INTERCONNECT_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATION_CELL_DELAY_MODEL_TYPE TRANSPORT +set_global_assignment -name SIMULATOR_GENERATE_POWERPLAY_VCD_FILE Off +set_global_assignment -name SIMULATOR_PVT_TIMING_MODEL_TYPE AUTO +set_global_assignment -name SIMULATION_WITH_AUTO_GLITCH_FILTERING AUTO +set_global_assignment -name DRC_TOP_FANOUT 50 +set_global_assignment -name DRC_FANOUT_EXCEEDING 30 +set_global_assignment -name DRC_GATED_CLOCK_FEED 30 +set_global_assignment -name HARDCOPY_FLOW_AUTOMATION MIGRATION_ONLY +set_global_assignment -name ENABLE_DRC_SETTINGS Off +set_global_assignment -name CLK_RULE_CLKNET_CLKSPINES_THRESHOLD 25 +set_global_assignment -name DRC_DETAIL_MESSAGE_LIMIT 10 +set_global_assignment -name DRC_VIOLATION_MESSAGE_LIMIT 30 +set_global_assignment -name DRC_DEADLOCK_STATE_LIMIT 2 +set_global_assignment -name MERGE_HEX_FILE Off +set_global_assignment -name GENERATE_SVF_FILE Off +set_global_assignment -name GENERATE_ISC_FILE Off +set_global_assignment -name GENERATE_JAM_FILE Off +set_global_assignment -name GENERATE_JBC_FILE Off +set_global_assignment -name GENERATE_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_SVF_FILE Off +set_global_assignment -name GENERATE_CONFIG_ISC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JAM_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE Off +set_global_assignment -name GENERATE_CONFIG_JBC_FILE_COMPRESSED On +set_global_assignment -name GENERATE_CONFIG_HEXOUT_FILE Off +set_global_assignment -name ISP_CLAMP_STATE_DEFAULT "Tri-state" +set_global_assignment -name SIGNALPROBE_ALLOW_OVERUSE Off +set_global_assignment -name SIGNALPROBE_DURING_NORMAL_COMPILATION Off +set_global_assignment -name LOGICLOCK_INCREMENTAL_COMPILE_ASSIGNMENT Off +set_global_assignment -name POWER_DEFAULT_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_DEFAULT_INPUT_IO_TOGGLE_RATE 12.5% +set_global_assignment -name POWER_USE_PVA On +set_global_assignment -name POWER_USE_INPUT_FILE "No File" +set_global_assignment -name POWER_USE_INPUT_FILES Off +set_global_assignment -name POWER_VCD_FILTER_GLITCHES On +set_global_assignment -name POWER_REPORT_SIGNAL_ACTIVITY Off +set_global_assignment -name POWER_REPORT_POWER_DISSIPATION Off +set_global_assignment -name POWER_USE_DEVICE_CHARACTERISTICS TYPICAL +set_global_assignment -name POWER_AUTO_COMPUTE_TJ On +set_global_assignment -name POWER_TJ_VALUE 25 +set_global_assignment -name POWER_USE_TA_VALUE 25 +set_global_assignment -name POWER_USE_CUSTOM_COOLING_SOLUTION Off +set_global_assignment -name POWER_BOARD_TEMPERATURE 25 +set_global_assignment -name INCREMENTAL_COMPILATION FULL_INCREMENTAL_COMPILATION +set_global_assignment -name AUTO_EXPORT_INCREMENTAL_COMPILATION Off +set_global_assignment -name INCREMENTAL_COMPILATION_EXPORT_NETLIST_TYPE POST_FIT +set_global_assignment -name OUTPUT_IO_TIMING_ENDPOINT "Near End" +set_global_assignment -name RTLV_REMOVE_FANOUT_FREE_REGISTERS On +set_global_assignment -name RTLV_SIMPLIFIED_LOGIC On +set_global_assignment -name RTLV_GROUP_RELATED_NODES On +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD Off +set_global_assignment -name RTLV_GROUP_COMB_LOGIC_IN_CLOUD_TMV Off +set_global_assignment -name RTLV_GROUP_RELATED_NODES_TMV On +set_global_assignment -name EQC_CONSTANT_DFF_DETECTION On +set_global_assignment -name EQC_DUPLICATE_DFF_DETECTION On +set_global_assignment -name EQC_BBOX_MERGE On +set_global_assignment -name EQC_LVDS_MERGE On +set_global_assignment -name EQC_RAM_UNMERGING On +set_global_assignment -name EQC_DFF_SS_EMULATION On +set_global_assignment -name EQC_RAM_REGISTER_UNPACK On +set_global_assignment -name EQC_MAC_REGISTER_UNPACK On +set_global_assignment -name EQC_SET_PARTITION_BB_TO_VCC_GND On +set_global_assignment -name EQC_STRUCTURE_MATCHING On +set_global_assignment -name EQC_AUTO_BREAK_CONE On +set_global_assignment -name EQC_POWER_UP_COMPARE Off +set_global_assignment -name EQC_AUTO_COMP_LOOP_CUT On +set_global_assignment -name EQC_AUTO_INVERSION On +set_global_assignment -name EQC_AUTO_TERMINATE On +set_global_assignment -name EQC_SUB_CONE_REPORT Off +set_global_assignment -name EQC_RENAMING_RULES On +set_global_assignment -name EQC_PARAMETER_CHECK On +set_global_assignment -name EQC_AUTO_PORTSWAP On +set_global_assignment -name EQC_DETECT_DONT_CARES On +set_global_assignment -name EQC_SHOW_ALL_MAPPED_POINTS Off +set_global_assignment -name DUTY_CYCLE 50 -section_id ? +set_global_assignment -name INVERT_BASE_CLOCK Off -section_id ? +set_global_assignment -name MULTIPLY_BASE_CLOCK_PERIOD_BY 1 -section_id ? +set_global_assignment -name DIVIDE_BASE_CLOCK_PERIOD_BY 1 -section_id ? +set_global_assignment -name EDA_INPUT_GND_NAME GND -section_id ? +set_global_assignment -name EDA_INPUT_VCC_NAME VCC -section_id ? +set_global_assignment -name EDA_INPUT_DATA_FORMAT NONE -section_id ? +set_global_assignment -name EDA_SHOW_LMF_MAPPING_MESSAGES Off -section_id ? +set_global_assignment -name EDA_RUN_TOOL_AUTOMATICALLY Off -section_id ? +set_global_assignment -name RESYNTHESIS_RETIMING FULL -section_id ? +set_global_assignment -name RESYNTHESIS_OPTIMIZATION_EFFORT Normal -section_id ? +set_global_assignment -name RESYNTHESIS_PHYSICAL_SYNTHESIS Normal -section_id ? +set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS On -section_id ? +set_global_assignment -name VCCPD_VOLTAGE 3.3V -section_id ? +set_global_assignment -name EDA_USER_COMPILED_SIMULATION_LIBRARY_DIRECTORY "" -section_id ? +set_global_assignment -name EDA_LAUNCH_CMD_LINE_TOOL Off -section_id ? +set_global_assignment -name EDA_NATIVELINK_GENERATE_SCRIPT_ONLY Off -section_id ? +set_global_assignment -name EDA_WAIT_FOR_GUI_TOOL_COMPLETION Off -section_id ? +set_global_assignment -name EDA_TRUNCATE_LONG_HIERARCHY_PATHS Off -section_id ? +set_global_assignment -name EDA_FLATTEN_BUSES Off -section_id ? +set_global_assignment -name EDA_MAP_ILLEGAL_CHARACTERS Off -section_id ? +set_global_assignment -name EDA_GENERATE_TIMING_CLOSURE_DATA Off -section_id ? +set_global_assignment -name EDA_GENERATE_POWER_INPUT_FILE Off -section_id ? +set_global_assignment -name EDA_TEST_BENCH_ENABLE_STATUS NOT_USED -section_id ? +set_global_assignment -name EDA_RTL_SIM_MODE NOT_USED -section_id ? +set_global_assignment -name EDA_MAINTAIN_DESIGN_HIERARCHY Off -section_id ? +set_global_assignment -name EDA_GENERATE_FUNCTIONAL_NETLIST Off -section_id ? +set_global_assignment -name EDA_WRITE_DEVICE_CONTROL_PORTS Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_TCL_FILE Off -section_id ? +set_global_assignment -name EDA_SIMULATION_VCD_OUTPUT_SIGNALS_TO_TCL_FILE "All Except Combinational Logic Element Outputs" -section_id ? +set_global_assignment -name EDA_ENABLE_GLITCH_FILTERING Off -section_id ? +set_global_assignment -name EDA_WRITE_NODES_FOR_POWER_ESTIMATION OFF -section_id ? +set_global_assignment -name EDA_SETUP_HOLD_DETECTION_INPUT_REGISTERS_BIDIR_PINS_DISABLED Off -section_id ? +set_global_assignment -name EDA_WRITER_DONT_WRITE_TOP_ENTITY Off -section_id ? +set_global_assignment -name EDA_VHDL_ARCH_NAME structure -section_id ? +set_global_assignment -name EDA_IBIS_MODEL_SELECTOR Off -section_id ? +set_global_assignment -name EDA_IBIS_MUTUAL_COUPLING Off -section_id ? +set_global_assignment -name EDA_FORMAL_VERIFICATION_ALLOW_RETIMING Off -section_id ? +set_global_assignment -name EDA_BOARD_BOUNDARY_SCAN_OPERATION PRE_CONFIG -section_id ? +set_global_assignment -name EDA_GENERATE_RTL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name EDA_GENERATE_GATE_LEVEL_SIMULATION_COMMAND_SCRIPT Off -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_OFFSET 0ns -section_id ? +set_global_assignment -name SIM_VECTOR_COMPARED_CLOCK_DUTY_CYCLE 50 -section_id ? +set_global_assignment -name APEX20K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MAX7K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name MERCURY_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX6K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name FLEX10K_CLIQUE_TYPE LAB -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_ASSIGNMENTS On -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_ASSIGNMENTS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_EXISTING_LOGICLOCK_REGIONS REPLACE_CONFLICTING -section_id ? -entity ? +set_global_assignment -name PARTITION_IMPORT_PROMOTE_ASSIGNMENTS On -section_id ? -entity ? diff --git a/FPGA_quartus_GE/firebee1_description.txt b/FPGA_quartus_GE/firebee1_description.txt new file mode 100644 index 0000000..e69de29 diff --git a/FPGA_quartus_GE/lpm_bustri_BYT.bsf b/FPGA_quartus_GE/lpm_bustri_BYT.bsf new file mode 100644 index 0000000..dcc4b63 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_BYT.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 96 40) + (text "lpm_bustri_BYT" (rect 2 1 110 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[7..0]" (rect 0 0 53 14)(font "Arial" (font_size 8))) + (text "data[7..0]" (rect -3 -21 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 96 24) + (bidir) + (text "tridata[7..0]" (rect 0 0 63 14)(font "Arial" (font_size 8))) + (text "tridata[7..0]" (rect 100 -30 113 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 96 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "8" (rect 71 25 76 37)(font "Arial" )) + (text "8" (rect 15 25 20 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 66 28)(pt 74 20)(line_width 1)) + (line (pt 10 28)(pt 18 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/lpm_bustri_BYT.inc b/FPGA_quartus_GE/lpm_bustri_BYT.inc new file mode 100644 index 0000000..8cb4941 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_BYT.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_BYT +( + data[7..0], + enabledt +) + +RETURNS ( + tridata[7..0] +); diff --git a/FPGA_quartus_GE/lpm_bustri_BYT.qip b/FPGA_quartus_GE/lpm_bustri_BYT.qip new file mode 100644 index 0000000..89e40bd --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_BYT.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri_BYT.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_BYT.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_BYT.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_BYT.cmp"] diff --git a/FPGA_quartus_GE/lpm_bustri_BYT.vhd b/FPGA_quartus_GE/lpm_bustri_BYT.vhd new file mode 100644 index 0000000..d24e3cb --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_BYT.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri_BYT.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri_BYT IS + PORT + ( + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); +END lpm_bustri_BYT; + + +ARCHITECTURE SYN OF lpm_bustri_byt IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (7 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (7 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 8 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "8" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "8" +-- Retrieval info: USED_PORT: data 0 0 8 0 INPUT NODEFVAL data[7..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 8 0 BIDIR NODEFVAL tridata[7..0] +-- Retrieval info: CONNECT: tridata 0 0 8 0 @tridata 0 0 8 0 +-- Retrieval info: CONNECT: @data 0 0 8 0 data 0 0 8 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_BYT.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_BYT.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_BYT.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_BYT.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_BYT_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/lpm_bustri_LONG.bsf b/FPGA_quartus_GE/lpm_bustri_LONG.bsf new file mode 100644 index 0000000..6535d3e --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_LONG.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 112 40) + (text "lpm_bustri_LONG" (rect 5 1 126 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect -3 -27 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 112 24) + (bidir) + (text "tridata[31..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "tridata[31..0]" (rect 116 -36 129 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "32" (rect 77 25 87 37)(font "Arial" )) + (text "32" (rect 13 25 23 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 72 28)(pt 80 20)(line_width 1)) + (line (pt 8 28)(pt 16 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/lpm_bustri_LONG.inc b/FPGA_quartus_GE/lpm_bustri_LONG.inc new file mode 100644 index 0000000..f180c48 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_LONG.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_LONG +( + data[31..0], + enabledt +) + +RETURNS ( + tridata[31..0] +); diff --git a/FPGA_quartus_GE/lpm_bustri_LONG.qip b/FPGA_quartus_GE/lpm_bustri_LONG.qip new file mode 100644 index 0000000..67b7232 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_LONG.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri_LONG.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_LONG.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_LONG.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_LONG.cmp"] diff --git a/FPGA_quartus_GE/lpm_bustri_LONG.vhd b/FPGA_quartus_GE/lpm_bustri_LONG.vhd new file mode 100644 index 0000000..3de83c0 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_LONG.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri_LONG.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri_LONG IS + PORT + ( + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_bustri_LONG; + + +ARCHITECTURE SYN OF lpm_bustri_long IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 32 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 32 0 BIDIR NODEFVAL tridata[31..0] +-- Retrieval info: CONNECT: tridata 0 0 32 0 @tridata 0 0 32 0 +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_LONG.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_LONG.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_LONG.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_LONG.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_LONG_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/lpm_bustri_WORD.bsf b/FPGA_quartus_GE/lpm_bustri_WORD.bsf new file mode 100644 index 0000000..4e882d1 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_WORD.bsf @@ -0,0 +1,56 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 112 40) + (text "lpm_bustri_WORD" (rect 2 1 129 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 24 25 36)(font "Arial" )) + (port + (pt 40 40) + (input) + (text "enabledt" (rect 0 0 48 14)(font "Arial" (font_size 8))) + (text "enabledt" (rect 40 -6 53 36)(font "Arial" (font_size 8))(invisible)) + (line (pt 40 40)(pt 40 28)(line_width 1)) + ) + (port + (pt 0 24) + (input) + (text "data[15..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[15..0]" (rect -3 -27 10 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 0 24)(pt 32 24)(line_width 3)) + ) + (port + (pt 112 24) + (bidir) + (text "tridata[15..0]" (rect 0 0 70 14)(font "Arial" (font_size 8))) + (text "tridata[15..0]" (rect 116 -36 129 24)(font "Arial" (font_size 8))(invisible)) + (line (pt 112 24)(pt 48 24)(line_width 3)) + ) + (drawing + (text "16" (rect 77 25 87 37)(font "Arial" )) + (text "16" (rect 13 25 23 37)(font "Arial" )) + (line (pt 32 16)(pt 48 24)(line_width 1)) + (line (pt 48 24)(pt 32 32)(line_width 1)) + (line (pt 32 32)(pt 32 16)(line_width 1)) + (line (pt 72 28)(pt 80 20)(line_width 1)) + (line (pt 8 28)(pt 16 20)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/lpm_bustri_WORD.inc b/FPGA_quartus_GE/lpm_bustri_WORD.inc new file mode 100644 index 0000000..09f6251 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_WORD.inc @@ -0,0 +1,24 @@ +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +FUNCTION lpm_bustri_WORD +( + data[15..0], + enabledt +) + +RETURNS ( + tridata[15..0] +); diff --git a/FPGA_quartus_GE/lpm_bustri_WORD.qip b/FPGA_quartus_GE/lpm_bustri_WORD.qip new file mode 100644 index 0000000..57bbe2e --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_WORD.qip @@ -0,0 +1,6 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_BUSTRI" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_bustri_WORD.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_WORD.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_WORD.inc"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_bustri_WORD.cmp"] diff --git a/FPGA_quartus_GE/lpm_bustri_WORD.vhd b/FPGA_quartus_GE/lpm_bustri_WORD.vhd new file mode 100644 index 0000000..85cbdd1 --- /dev/null +++ b/FPGA_quartus_GE/lpm_bustri_WORD.vhd @@ -0,0 +1,107 @@ +-- megafunction wizard: %LPM_BUSTRI% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_bustri + +-- ============================================================ +-- File Name: lpm_bustri_WORD.vhd +-- Megafunction Name(s): +-- lpm_bustri +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_bustri_WORD IS + PORT + ( + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + enabledt : IN STD_LOGIC ; + tridata : INOUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); +END lpm_bustri_WORD; + + +ARCHITECTURE SYN OF lpm_bustri_word IS + + + + + COMPONENT lpm_bustri + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + enabledt : IN STD_LOGIC ; + data : IN STD_LOGIC_VECTOR (15 DOWNTO 0); + tridata : INOUT STD_LOGIC_VECTOR (15 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + + lpm_bustri_component : lpm_bustri + GENERIC MAP ( + lpm_type => "LPM_BUSTRI", + lpm_width => 16 + ) + PORT MAP ( + enabledt => enabledt, + data => data, + tridata => tridata + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: BiDir NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "16" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_BUSTRI" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "16" +-- Retrieval info: USED_PORT: data 0 0 16 0 INPUT NODEFVAL data[15..0] +-- Retrieval info: USED_PORT: enabledt 0 0 0 0 INPUT NODEFVAL enabledt +-- Retrieval info: USED_PORT: tridata 0 0 16 0 BIDIR NODEFVAL tridata[15..0] +-- Retrieval info: CONNECT: tridata 0 0 16 0 @tridata 0 0 16 0 +-- Retrieval info: CONNECT: @data 0 0 16 0 data 0 0 16 0 +-- Retrieval info: CONNECT: @enabledt 0 0 0 0 enabledt 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_WORD.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_WORD.inc TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_WORD.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_WORD.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_bustri_WORD_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/lpm_counter0.bsf b/FPGA_quartus_GE/lpm_counter0.bsf new file mode 100644 index 0000000..7fc7aaa --- /dev/null +++ b/FPGA_quartus_GE/lpm_counter0.bsf @@ -0,0 +1,49 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 144 64) + (text "lpm_counter0" (rect 33 1 125 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 48 25 60)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "clock" (rect 0 0 29 14)(font "Arial" (font_size 8))) + (text "clock" (rect 26 26 49 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 1)) + ) + (port + (pt 144 40) + (output) + (text "q[17..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[17..0]" (rect 89 34 125 47)(font "Arial" (font_size 8))) + (line (pt 144 40)(pt 128 40)(line_width 3)) + ) + (drawing + (text "up counter" (rect 84 17 128 29)(font "Arial" )) + (line (pt 16 16)(pt 128 16)(line_width 1)) + (line (pt 128 16)(pt 128 48)(line_width 1)) + (line (pt 128 48)(pt 16 48)(line_width 1)) + (line (pt 16 48)(pt 16 16)(line_width 1)) + (line (pt 16 26)(pt 22 32)(line_width 1)) + (line (pt 22 32)(pt 16 38)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/lpm_counter0.qip b/FPGA_quartus_GE/lpm_counter0.qip new file mode 100644 index 0000000..a72845b --- /dev/null +++ b/FPGA_quartus_GE/lpm_counter0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_COUNTER" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_counter0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_counter0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_counter0.cmp"] diff --git a/FPGA_quartus_GE/lpm_counter0.vhd b/FPGA_quartus_GE/lpm_counter0.vhd new file mode 100644 index 0000000..9135dbc --- /dev/null +++ b/FPGA_quartus_GE/lpm_counter0.vhd @@ -0,0 +1,126 @@ +-- megafunction wizard: %LPM_COUNTER% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_counter + +-- ============================================================ +-- File Name: lpm_counter0.vhd +-- Megafunction Name(s): +-- lpm_counter +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_counter0 IS + PORT + ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (17 DOWNTO 0) + ); +END lpm_counter0; + + +ARCHITECTURE SYN OF lpm_counter0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (17 DOWNTO 0); + + + + COMPONENT lpm_counter + GENERIC ( + lpm_direction : STRING; + lpm_port_updown : STRING; + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + clock : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (17 DOWNTO 0) + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(17 DOWNTO 0); + + lpm_counter_component : lpm_counter + GENERIC MAP ( + lpm_direction => "UP", + lpm_port_updown => "PORT_UNUSED", + lpm_type => "LPM_COUNTER", + lpm_width => 18 + ) + PORT MAP ( + clock => clock, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: ACLR NUMERIC "0" +-- Retrieval info: PRIVATE: ALOAD NUMERIC "0" +-- Retrieval info: PRIVATE: ASET NUMERIC "0" +-- Retrieval info: PRIVATE: ASET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: CLK_EN NUMERIC "0" +-- Retrieval info: PRIVATE: CNT_EN NUMERIC "0" +-- Retrieval info: PRIVATE: CarryIn NUMERIC "0" +-- Retrieval info: PRIVATE: CarryOut NUMERIC "0" +-- Retrieval info: PRIVATE: Direction NUMERIC "0" +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: ModulusCounter NUMERIC "0" +-- Retrieval info: PRIVATE: ModulusValue NUMERIC "0" +-- Retrieval info: PRIVATE: SCLR NUMERIC "0" +-- Retrieval info: PRIVATE: SLOAD NUMERIC "0" +-- Retrieval info: PRIVATE: SSET NUMERIC "0" +-- Retrieval info: PRIVATE: SSET_ALL1 NUMERIC "1" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "18" +-- Retrieval info: CONSTANT: LPM_DIRECTION STRING "UP" +-- Retrieval info: CONSTANT: LPM_PORT_UPDOWN STRING "PORT_UNUSED" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_COUNTER" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "18" +-- Retrieval info: USED_PORT: clock 0 0 0 0 INPUT NODEFVAL clock +-- Retrieval info: USED_PORT: q 0 0 18 0 OUTPUT NODEFVAL q[17..0] +-- Retrieval info: CONNECT: @clock 0 0 0 0 clock 0 0 0 0 +-- Retrieval info: CONNECT: q 0 0 18 0 @q 0 0 18 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0_inst.vhd FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0_waveforms.html TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_counter0_wave*.jpg FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/lpm_latch0.bsf b/FPGA_quartus_GE/lpm_latch0.bsf new file mode 100644 index 0000000..ddb325c --- /dev/null +++ b/FPGA_quartus_GE/lpm_latch0.bsf @@ -0,0 +1,53 @@ +/* +WARNING: Do NOT edit the input and output ports in this file in a text +editor if you plan to continue editing the block that represents it in +the Block Editor! File corruption is VERY likely to occur. +*/ +/* +Copyright (C) 1991-2008 Altera Corporation +Your use of Altera Corporation's design tools, logic functions +and other software and tools, and its AMPP partner logic +functions, and any output files from any of the foregoing +(including device programming or simulation files), and any +associated documentation or information are expressly subject +to the terms and conditions of the Altera Program License +Subscription Agreement, Altera MegaCore Function License +Agreement, or other applicable license agreement, including, +without limitation, that your use is for the sole purpose of +programming logic devices manufactured by Altera and sold by +Altera or its authorized distributors. Please refer to the +applicable agreement for further details. +*/ +(header "symbol" (version "1.1")) +(symbol + (rect 0 0 160 80) + (text "lpm_latch0" (rect 49 1 123 17)(font "Arial" (font_size 10))) + (text "inst" (rect 8 64 25 76)(font "Arial" )) + (port + (pt 0 32) + (input) + (text "data[31..0]" (rect 0 0 60 14)(font "Arial" (font_size 8))) + (text "data[31..0]" (rect 20 26 71 39)(font "Arial" (font_size 8))) + (line (pt 0 32)(pt 16 32)(line_width 3)) + ) + (port + (pt 0 48) + (input) + (text "gate" (rect 0 0 24 14)(font "Arial" (font_size 8))) + (text "gate" (rect 20 42 41 55)(font "Arial" (font_size 8))) + (line (pt 0 48)(pt 16 48)(line_width 1)) + ) + (port + (pt 160 32) + (output) + (text "q[31..0]" (rect 0 0 42 14)(font "Arial" (font_size 8))) + (text "q[31..0]" (rect 105 26 141 39)(font "Arial" (font_size 8))) + (line (pt 160 32)(pt 144 32)(line_width 3)) + ) + (drawing + (line (pt 16 16)(pt 144 16)(line_width 1)) + (line (pt 144 16)(pt 144 64)(line_width 1)) + (line (pt 144 64)(pt 16 64)(line_width 1)) + (line (pt 16 64)(pt 16 16)(line_width 1)) + ) +) diff --git a/FPGA_quartus_GE/lpm_latch0.qip b/FPGA_quartus_GE/lpm_latch0.qip new file mode 100644 index 0000000..1bda27a --- /dev/null +++ b/FPGA_quartus_GE/lpm_latch0.qip @@ -0,0 +1,5 @@ +set_global_assignment -name IP_TOOL_NAME "LPM_LATCH" +set_global_assignment -name IP_TOOL_VERSION "8.1" +set_global_assignment -name VHDL_FILE [file join $::quartus(qip_path) "lpm_latch0.vhd"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_latch0.bsf"] +set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) "lpm_latch0.cmp"] diff --git a/FPGA_quartus_GE/lpm_latch0.vhd b/FPGA_quartus_GE/lpm_latch0.vhd new file mode 100644 index 0000000..1eda161 --- /dev/null +++ b/FPGA_quartus_GE/lpm_latch0.vhd @@ -0,0 +1,110 @@ +-- megafunction wizard: %LPM_LATCH% +-- GENERATION: STANDARD +-- VERSION: WM1.0 +-- MODULE: lpm_latch + +-- ============================================================ +-- File Name: lpm_latch0.vhd +-- Megafunction Name(s): +-- lpm_latch +-- +-- Simulation Library Files(s): +-- lpm +-- ============================================================ +-- ************************************************************ +-- THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE! +-- +-- 8.1 Build 163 10/28/2008 SJ Web Edition +-- ************************************************************ + + +--Copyright (C) 1991-2008 Altera Corporation +--Your use of Altera Corporation's design tools, logic functions +--and other software and tools, and its AMPP partner logic +--functions, and any output files from any of the foregoing +--(including device programming or simulation files), and any +--associated documentation or information are expressly subject +--to the terms and conditions of the Altera Program License +--Subscription Agreement, Altera MegaCore Function License +--Agreement, or other applicable license agreement, including, +--without limitation, that your use is for the sole purpose of +--programming logic devices manufactured by Altera and sold by +--Altera or its authorized distributors. Please refer to the +--applicable agreement for further details. + + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY lpm; +USE lpm.all; + +ENTITY lpm_latch0 IS + PORT + ( + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + gate : IN STD_LOGIC ; + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0) + ); +END lpm_latch0; + + +ARCHITECTURE SYN OF lpm_latch0 IS + + SIGNAL sub_wire0 : STD_LOGIC_VECTOR (31 DOWNTO 0); + + + + COMPONENT lpm_latch + GENERIC ( + lpm_type : STRING; + lpm_width : NATURAL + ); + PORT ( + q : OUT STD_LOGIC_VECTOR (31 DOWNTO 0); + data : IN STD_LOGIC_VECTOR (31 DOWNTO 0); + gate : IN STD_LOGIC + ); + END COMPONENT; + +BEGIN + q <= sub_wire0(31 DOWNTO 0); + + lpm_latch_component : lpm_latch + GENERIC MAP ( + lpm_type => "LPM_LATCH", + lpm_width => 32 + ) + PORT MAP ( + data => data, + gate => gate, + q => sub_wire0 + ); + + + +END SYN; + +-- ============================================================ +-- CNX file retrieval info +-- ============================================================ +-- Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone III" +-- Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0" +-- Retrieval info: PRIVATE: aclr NUMERIC "0" +-- Retrieval info: PRIVATE: aset NUMERIC "0" +-- Retrieval info: PRIVATE: nBit NUMERIC "32" +-- Retrieval info: CONSTANT: LPM_TYPE STRING "LPM_LATCH" +-- Retrieval info: CONSTANT: LPM_WIDTH NUMERIC "32" +-- Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL data[31..0] +-- Retrieval info: USED_PORT: gate 0 0 0 0 INPUT NODEFVAL gate +-- Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL q[31..0] +-- Retrieval info: CONNECT: @data 0 0 32 0 data 0 0 32 0 +-- Retrieval info: CONNECT: q 0 0 32 0 @q 0 0 32 0 +-- Retrieval info: CONNECT: @gate 0 0 0 0 gate 0 0 0 0 +-- Retrieval info: LIBRARY: lpm lpm.lpm_components.all +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch0.vhd TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch0.inc FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch0.cmp TRUE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch0.bsf TRUE FALSE +-- Retrieval info: GEN_FILE: TYPE_NORMAL lpm_latch0_inst.vhd FALSE +-- Retrieval info: LIB_FILE: lpm diff --git a/FPGA_quartus_GE/mux41.v b/FPGA_quartus_GE/mux41.v new file mode 100644 index 0000000..ddb02fb --- /dev/null +++ b/FPGA_quartus_GE/mux41.v @@ -0,0 +1,74 @@ +// Copyright (C) 1991-2009 Altera Corporation +// Your use of Altera Corporation's design tools, logic functions +// and other software and tools, and its AMPP partner logic +// functions, and any output files from any of the foregoing +// (including device programming or simulation files), and any +// associated documentation or information are expressly subject +// to the terms and conditions of the Altera Program License +// Subscription Agreement, Altera MegaCore Function License +// Agreement, or other applicable license agreement, including, +// without limitation, that your use is for the sole purpose of +// programming logic devices manufactured by Altera and sold by +// Altera or its authorized distributors. Please refer to the +// applicable agreement for further details. + +// PROGRAM "Quartus II 64-Bit" +// VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +// CREATED "Sat Mar 01 09:17:14 2014" + +module mux41( + S0, + D2, + INH, + D0, + D1, + D3, + S1, + Q +); + + +input S0; +input D2; +input INH; +input D0; +input D1; +input D3; +input S1; +output Q; + +wire SYNTHESIZED_WIRE_18; +wire SYNTHESIZED_WIRE_19; +wire SYNTHESIZED_WIRE_20; +wire SYNTHESIZED_WIRE_21; +wire SYNTHESIZED_WIRE_22; +wire SYNTHESIZED_WIRE_13; +wire SYNTHESIZED_WIRE_14; +wire SYNTHESIZED_WIRE_15; +wire SYNTHESIZED_WIRE_16; + + + + +assign SYNTHESIZED_WIRE_18 = ~S0; + +assign SYNTHESIZED_WIRE_21 = ~SYNTHESIZED_WIRE_18; + +assign SYNTHESIZED_WIRE_13 = SYNTHESIZED_WIRE_19 & SYNTHESIZED_WIRE_20 & SYNTHESIZED_WIRE_18 & D0; + +assign SYNTHESIZED_WIRE_14 = SYNTHESIZED_WIRE_19 & SYNTHESIZED_WIRE_20 & SYNTHESIZED_WIRE_21 & D1; + +assign SYNTHESIZED_WIRE_15 = SYNTHESIZED_WIRE_19 & SYNTHESIZED_WIRE_22 & SYNTHESIZED_WIRE_18 & D2; + +assign SYNTHESIZED_WIRE_16 = SYNTHESIZED_WIRE_19 & SYNTHESIZED_WIRE_22 & SYNTHESIZED_WIRE_21 & D3; + +assign Q = SYNTHESIZED_WIRE_13 | SYNTHESIZED_WIRE_14 | SYNTHESIZED_WIRE_15 | SYNTHESIZED_WIRE_16; + +assign SYNTHESIZED_WIRE_19 = ~INH; + +assign SYNTHESIZED_WIRE_20 = ~S1; + +assign SYNTHESIZED_WIRE_22 = ~SYNTHESIZED_WIRE_20; + + +endmodule diff --git a/FPGA_quartus_GE/mux41.vhd b/FPGA_quartus_GE/mux41.vhd new file mode 100644 index 0000000..b0b24ad --- /dev/null +++ b/FPGA_quartus_GE/mux41.vhd @@ -0,0 +1,90 @@ +-- Copyright (C) 1991-2009 Altera Corporation +-- Your use of Altera Corporation's design tools, logic functions +-- and other software and tools, and its AMPP partner logic +-- functions, and any output files from any of the foregoing +-- (including device programming or simulation files), and any +-- associated documentation or information are expressly subject +-- to the terms and conditions of the Altera Program License +-- Subscription Agreement, Altera MegaCore Function License +-- Agreement, or other applicable license agreement, including, +-- without limitation, that your use is for the sole purpose of +-- programming logic devices manufactured by Altera and sold by +-- Altera or its authorized distributors. Please refer to the +-- applicable agreement for further details. + +-- PROGRAM "Quartus II 64-Bit" +-- VERSION "Version 9.1 Build 222 10/21/2009 SJ Full Version" +-- CREATED "Sat Mar 01 09:16:22 2014" + +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +LIBRARY work; + +ENTITY mux41 IS + PORT + ( + S0 : IN STD_LOGIC; + D2 : IN STD_LOGIC; + INH : IN STD_LOGIC; + D0 : IN STD_LOGIC; + D1 : IN STD_LOGIC; + D3 : IN STD_LOGIC; + S1 : IN STD_LOGIC; + Q : OUT STD_LOGIC + ); +END mux41; + +ARCHITECTURE bdf_type OF mux41 IS + +SIGNAL SYNTHESIZED_WIRE_18 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_19 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_20 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_21 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_22 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_13 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_14 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_15 : STD_LOGIC; +SIGNAL SYNTHESIZED_WIRE_16 : STD_LOGIC; + + +BEGIN + + + +SYNTHESIZED_WIRE_18 <= NOT(S0); + + + +SYNTHESIZED_WIRE_21 <= NOT(SYNTHESIZED_WIRE_18); + + + +SYNTHESIZED_WIRE_13 <= SYNTHESIZED_WIRE_19 AND SYNTHESIZED_WIRE_20 AND SYNTHESIZED_WIRE_18 AND D0; + + +SYNTHESIZED_WIRE_14 <= SYNTHESIZED_WIRE_19 AND SYNTHESIZED_WIRE_20 AND SYNTHESIZED_WIRE_21 AND D1; + + +SYNTHESIZED_WIRE_15 <= SYNTHESIZED_WIRE_19 AND SYNTHESIZED_WIRE_22 AND SYNTHESIZED_WIRE_18 AND D2; + + +SYNTHESIZED_WIRE_16 <= SYNTHESIZED_WIRE_19 AND SYNTHESIZED_WIRE_22 AND SYNTHESIZED_WIRE_21 AND D3; + + +Q <= SYNTHESIZED_WIRE_13 OR SYNTHESIZED_WIRE_14 OR SYNTHESIZED_WIRE_15 OR SYNTHESIZED_WIRE_16; + + +SYNTHESIZED_WIRE_19 <= NOT(INH); + + + +SYNTHESIZED_WIRE_20 <= NOT(S1); + + + +SYNTHESIZED_WIRE_22 <= NOT(SYNTHESIZED_WIRE_20); + + + +END bdf_type; \ No newline at end of file