links and commands
Pinout: https://docs.google.com/spreadsheets/d/1QEWxRQcYXZ_-n6hW59Y_82jv4_ZzkEXvRMxwPaldgFA/edit?usp=sharing
links and commands
Pinout: https://docs.google.com/spreadsheets/d/1QEWxRQcYXZ_-n6hW59Y_82jv4_ZzkEXvRMxwPaldgFA/edit?usp=sharing
| # full iCEstick pinout: | |
| # http://www.pighixxx.com/test/portfolio-items/icestick/ | |
| set_io CLK_pad 21 | |
| set_io FT2232H_GPIOL2_pad 1 | |
| set_io FT2232H_GPIOL1_pad 2 | |
| set_io FT2232H_GPIOL0_pad 3 | |
| set_io FT2232H_TMS_CS_pad 4 | |
| set_io FT2232H_TDO_DI_pad 7 | |
| set_io FT2232H_TDI_DO_pad 8 | |
| set_io FT2232H_TCK_SK_pad 9 | |
| set_io D1_pad 99 | |
| set_io D2_pad 98 | |
| set_io D3_pad 97 | |
| set_io D4_pad 96 | |
| set_io D5_pad 95 | |
| set_io RXD_pad 106 | |
| set_io TXD_pad 105 | |
| set_io SD_pad 107 | |
| set_io J3_3_pad 62 | |
| set_io J3_4_pad 61 | |
| #set_io PMOD1_pad 78 | |
| #set_io PMOD2_pad 79 | |
| #set_io PMOD3_pad 80 | |
| #set_io PMOD4_pad 81 | |
| #set_io PMOD7_pad 87 | |
| #set_io PMOD8_pad 88 | |
| #set_io PMOD9_pad 90 | |
| #set_io PMOD10_pad 91 | |
| #set_io J1_3_pad 112 | |
| #set_io J1_4_pad 113 | |
| #set_io J1_5_pad 114 | |
| #set_io J1_6_pad 115 | |
| #set_io J1_7_pad 116 | |
| #set_io J1_8_pad 117 | |
| #set_io J1_9_pad 118 | |
| #set_io J1_10_pad 119 | |
| #set_io J3_5_pad 60 | |
| #set_io J3_6_pad 56 | |
| #set_io J3_7_pad 48 | |
| #set_io J3_8_pad 47 | |
| #set_io J3_9_pad 45 | |
| #set_io J3_10_pad 44 | |
| #set_io SPI_SDO_pad 67 | |
| #set_io SPI_SDI_pad 68 | |
| #set_io SPI_SCK_pad 70 | |
| #set_io SPI_SS_B_pad 71 | |
| /* | |
| SB_HFOSC # ( | |
| .CLKHF_DIV (2'b00) | |
| ) osc_inst_0( | |
| .CLKHFEN (ENCLKHF), | |
| .CLKHFPU (CLKHF_POWERUP), | |
| .CLKHF (CLKHF) | |
| ) /* synthesis ROUTE_THROUGH_FABRIC=0 * /; | |
| SB_GB_IO # ( | |
| .PIN_TYPE (6'b011000), | |
| .PULLUP (1'b1) | |
| ) io_cell_13_9__1 ( | |
| .PACKAGE_PIN (io_13_9__1_led4), // User’s Pin signal name | |
| .LATCH_INPUT_VALUE (latch_input_value), // Latches/holds the Input value | |
| .CLOCK_ENABLE (clock_enable), // Clock Enable common to input and output clock | |
| .INPUT_CLK (input_clk), // Clock for the input registers | |
| .OUTPUT_CLK (output_clk), // Clock for the output registers | |
| .OUTPUT_ENABLE (output_enable), // Output Pin Tristate/Enable control | |
| .D_OUT_0 (to_led), // Data 0 – out to Pin/Rising clk edge | |
| .D_OUT_1 (d_out_1), // Data 1 - out to Pin/Falling clk edge | |
| .D_IN_0 (d_in_0), // Data 0 - Pin input/Rising clk edge | |
| .D_IN_1 (d_in_1) // Data 1 – Pin input/Falling clk edge | |
| .GLOBAL_BUFFER_OUTPUT (Global_Buffered_User_Clock) // Example use – clock buffer | |
| //driven from the input pin | |
| ); | |
| SB_LUT4 # ( | |
| .LUT_INIT (16'b00000000_11110010) | |
| ) rs1 ( | |
| .O (Q), // output | |
| .I0 (Q), // data input 0 | |
| .I1 (R), // data input 1 | |
| .I2 (S), // data input 2 | |
| .I3 (1'b0) // data input 3 | |
| ); | |
| SB_CARRY my_carry_inst ( | |
| .CO (CO), | |
| .I0 (I0), | |
| .I1 (I1), | |
| .CI (CI)); | |
| SB_DFFER ff1( | |
| .D (BTN), | |
| .C (CLK), | |
| .E (1'b1), | |
| .R (1'b0), | |
| .Q (line1)); | |
| */ | |
| /* | |
| Instantiation template: | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b000001), | |
| .PIN_TYPE_1 (6'b000001)) | |
| io_pair_1 ( | |
| .CLK_EN (), // Clock Enable common to input and output clock | |
| .OUT_CLK (), // Clock for the output registers | |
| .IN_CLK (), // Clock for the input registers | |
| .PAD_0 (), | |
| .PAD_1 (), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (), | |
| .OUT_EN_1 (), | |
| .LATCH_INPUT_VALUE_0 (), | |
| .LATCH_INPUT_VALUE_1 (), | |
| .D_OUT_0 (), | |
| .D_OUT_1 (), | |
| .D_OUT_DDR_0 (), | |
| .D_OUT_DDR_1 (), | |
| .D_IN_0 (), | |
| .D_IN_1 (), | |
| .D_IN_DDR_0 (), | |
| .D_IN_DDR_1 () | |
| ); | |
| */ | |
| module PIOPair # ( | |
| parameter PIN_TYPE_0 = 6'b000001, | |
| parameter PIN_TYPE_1 = 6'b000001, | |
| parameter PULLUP_0 = 1'b0, // By default, the IO will have NO pull up. This parameter is used only on bank 0, 1, and 2. Ignored when it is placed at bank 3 | |
| parameter PULLUP_1 = 1'b0 // By default, the IO will have NO pull up. This parameter is used only on bank 0, 1, and 2. Ignored when it is placed at bank 3 | |
| ) ( | |
| input wire CLK_EN, // Clock Enable common to input and output clock | |
| input wire OUT_CLK, // Clock for the output registers | |
| input wire IN_CLK, // Clock for the input registers | |
| inout wire PAD_0, | |
| inout wire PAD_1, | |
| // Output Pin Tristate/Enable control | |
| input wire OUT_EN_0, | |
| input wire OUT_EN_1, | |
| input wire D_OUT_0, | |
| input wire D_OUT_1, | |
| input wire D_OUT_DDR_0, | |
| input wire D_OUT_DDR_1, | |
| output wire D_IN_0, | |
| output wire D_IN_1, | |
| output wire D_IN_DDR_0, | |
| output wire D_IN_DDR_1 | |
| ); | |
| SB_IO # ( | |
| .PIN_TYPE (PIN_TYPE_0), | |
| .PULLUP (PULLUP_0), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") // Other IO standards are supported in bank 3 | |
| // only: SB_SSTL2_CLASS_2, SB_SSTL2_CLASS_1, | |
| // SB_SSTL18_FULL, SB_SSTL18_HALF, SB_MDDR10, | |
| // SB_MDDR8, SB_MDDR4, SB_MDDR2 etc. | |
| ) io_0 ( | |
| .PACKAGE_PIN (PAD_0), | |
| .LATCH_INPUT_VALUE (), | |
| .CLOCK_ENABLE (CLK_EN), | |
| .INPUT_CLK (IN_CLK), | |
| .OUTPUT_CLK (OUT_CLK), | |
| .OUTPUT_ENABLE (OUT_EN_0), | |
| .D_OUT_0 (D_OUT_0), | |
| .D_OUT_1 (D_OUT_DDR_0), | |
| .D_IN_0 (D_IN_0), | |
| .D_IN_1 (D_IN_DDR_0) | |
| ); | |
| SB_IO # ( | |
| .PIN_TYPE (PIN_TYPE_1), | |
| .PULLUP (PULLUP_1), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") | |
| ) io_1 ( | |
| .PACKAGE_PIN (PAD_1), | |
| .LATCH_INPUT_VALUE (), | |
| .CLOCK_ENABLE (CLK_EN), | |
| .INPUT_CLK (IN_CLK), | |
| .OUTPUT_CLK (OUT_CLK), | |
| .OUTPUT_ENABLE (OUT_EN_1), | |
| .D_OUT_0 (D_OUT_1), | |
| .D_OUT_1 (D_OUT_DDR_1), | |
| .D_IN_0 (D_IN_1), | |
| .D_IN_1 (D_IN_DDR_1) | |
| ); | |
| endmodule | |
| module ArrowHead # ( | |
| parameter INITIAL = 1'b0 | |
| ) ( | |
| input wire IN, | |
| input wire CASC_STATE, | |
| output wire CASC_RESET, | |
| output wire STATE_OUT, | |
| input wire RESET_IN, | |
| output wire TX_HAPPENED, | |
| input wire CLOCK | |
| ); | |
| reg state = INITIAL; | |
| reg TX_HAPPENED = 1'b0; | |
| always @(posedge CLOCK) | |
| begin | |
| state <= IN | (state & ~RESET_IN); | |
| TX_HAPPENED <= IN; | |
| end | |
| assign STATE_OUT = state | CASC_STATE; | |
| assign CASC_RESET = RESET_IN; | |
| //assign CASC_STATE = 1'b0; | |
| //assign CASC_RESET_TAIL = 1'b0; | |
| endmodule | |
| module ArrowTail ( | |
| input wire STATE_IN, | |
| output wire RESET_OUT, | |
| input wire CASC_RESET_TAIL, | |
| output wire CASC_STATE_TAIL, | |
| output wire OUT, | |
| input wire EVENT | |
| ); | |
| assign OUT = EVENT & ~CASC_RESET_TAIL & STATE_IN; | |
| assign CASC_STATE_TAIL = STATE_IN; | |
| assign RESET_OUT = OUT | CASC_RESET_TAIL; | |
| endmodule | |
| // State with only 1 output and 0 inputs is always initial | |
| module State_1_Output ( | |
| input wire EVENT_0, | |
| output wire S_OUT_0, | |
| input wire CLOCK | |
| ); | |
| wire head_STATE_OUT; | |
| wire head_RESET_IN; | |
| ArrowHead # (.INITIAL (1'b1)) head ( | |
| .CASC_STATE (1'b0), | |
| .STATE_OUT (head_STATE_OUT), | |
| .RESET_IN (head_RESET_IN), | |
| .IN (1'b0), | |
| .CLOCK (CLOCK)); | |
| ArrowTail tail ( | |
| .EVENT (EVENT_0), | |
| .OUT (S_OUT_0), | |
| .STATE_IN (head_STATE_OUT), | |
| .RESET_OUT (head_RESET_IN), | |
| .CASC_RESET_TAIL (1'b0)); | |
| endmodule | |
| module State_3_Inputs_2_Outputs ( | |
| // From source states | |
| input wire S_IN_0, | |
| input wire S_IN_1, | |
| input wire S_IN_2, | |
| // Generated events when enters state | |
| output wire ON_IN_0, | |
| output wire ON_IN_1, | |
| output wire ON_IN_2, | |
| // Events to drive one of the outputs | |
| input wire EVENT_0, | |
| input wire EVENT_1, | |
| // To destination states | |
| output wire S_OUT_0, | |
| output wire S_OUT_1, | |
| input wire CLOCK | |
| ); | |
| wire head_0_STATE_OUT, | |
| head_0_RESET_IN, | |
| head_1_STATE_OUT, | |
| head_1_RESET_IN, | |
| head_2_STATE_OUT, | |
| head_2_RESET_IN, | |
| tail_0_CASC_STATE_TAIL, | |
| tail_0_CASC_RESET_TAIL; | |
| ArrowHead head_0 ( | |
| .IN (S_IN_0), | |
| .TX_HAPPENED (ON_IN_0), | |
| .CASC_STATE (1'b0), | |
| .STATE_OUT (head_0_STATE_OUT), | |
| .RESET_IN (head_0_RESET_IN), | |
| .CLOCK (CLOCK)); | |
| ArrowHead head_1 ( | |
| .IN (S_IN_1), | |
| .TX_HAPPENED (ON_IN_1), | |
| .STATE_OUT (head_1_STATE_OUT), | |
| .RESET_IN (head_1_RESET_IN), | |
| .CASC_STATE (head_0_STATE_OUT), | |
| .CASC_RESET (head_0_RESET_IN), | |
| .CLOCK (CLOCK)); | |
| ArrowHead head_2 ( | |
| .IN (S_IN_2), | |
| .TX_HAPPENED (ON_IN_2), | |
| .STATE_OUT (head_2_STATE_OUT), | |
| .RESET_IN (head_2_RESET_IN), | |
| .CASC_STATE (head_1_STATE_OUT), | |
| .CASC_RESET (head_1_RESET_IN), | |
| .CLOCK (CLOCK)); | |
| ArrowTail tail_0 ( | |
| .EVENT (EVENT_0), | |
| .OUT (S_OUT_0), | |
| .CASC_STATE_TAIL (tail_0_CASC_STATE_TAIL), | |
| .CASC_RESET_TAIL (tail_0_CASC_RESET_TAIL), | |
| .STATE_IN (head_2_STATE_OUT), | |
| .RESET_OUT (head_2_RESET_IN)); | |
| ArrowTail tail_1 ( | |
| .EVENT (EVENT_1), | |
| .OUT (S_OUT_1), | |
| .STATE_IN (tail_0_CASC_STATE_TAIL), | |
| .RESET_OUT (tail_0_CASC_RESET_TAIL), | |
| .CASC_RESET_TAIL (1'b0)); | |
| endmodule | |
| module State_1_Input_1_Output ( | |
| // From source states | |
| input wire S_IN_0, | |
| // Generated events when enters state | |
| output wire ON_IN_0, | |
| // Events to drive one of the outputs | |
| input wire EVENT_0, | |
| // To destination states | |
| output wire S_OUT_0, | |
| input wire CLOCK | |
| ); | |
| wire head_0_STATE_OUT, head_0_RESET_IN; | |
| ArrowHead head_0 ( | |
| .IN (S_IN_0), | |
| .TX_HAPPENED (ON_IN_0), | |
| .STATE_OUT (head_0_STATE_OUT), | |
| .RESET_IN (head_0_RESET_IN), | |
| .CASC_STATE (1'b0), | |
| .CLOCK (CLOCK)); | |
| ArrowTail tail_0 ( | |
| .EVENT (EVENT_0), | |
| .OUT (S_OUT_0), | |
| .STATE_IN (head_0_STATE_OUT), | |
| .RESET_OUT (head_0_RESET_IN), | |
| .CASC_RESET_TAIL (1'b0)); | |
| endmodule | |
| module top ( | |
| inout CLK_pad, | |
| inout wire FT2232H_GPIOL2_pad, | |
| inout wire FT2232H_GPIOL1_pad, | |
| inout wire FT2232H_GPIOL0_pad, | |
| inout wire FT2232H_TMS_CS_pad, | |
| inout wire FT2232H_TDO_DI_pad, | |
| inout wire FT2232H_TDI_DO_pad, | |
| inout wire FT2232H_TCK_SK_pad, | |
| inout wire D1_pad, | |
| inout wire D2_pad, | |
| inout wire D3_pad, | |
| inout wire D4_pad, | |
| inout wire D5_pad, | |
| inout wire RXD_pad, | |
| inout wire TXD_pad, | |
| inout wire SD_pad, | |
| inout wire J3_3_pad, | |
| inout wire J3_4_pad | |
| /* | |
| inout wire PMOD1_pad, | |
| inout wire PMOD2_pad, | |
| inout wire PMOD3_pad, | |
| inout wire PMOD4_pad, | |
| inout wire PMOD7_pad, | |
| inout wire PMOD8_pad, | |
| inout wire PMOD9_pad, | |
| inout wire PMOD10_pad, | |
| inout wire J1_3_pad, | |
| inout wire J1_4_pad, | |
| inout wire J1_5_pad, | |
| inout wire J1_6_pad, | |
| inout wire J1_7_pad, | |
| inout wire J1_8_pad, | |
| inout wire J1_9_pad, | |
| inout wire J1_10_pad, | |
| inout wire J3_5_pad, | |
| inout wire J3_6_pad, | |
| inout wire J3_7_pad, | |
| inout wire J3_8_pad, | |
| inout wire J3_9_pad, | |
| inout wire J3_10_pad, | |
| inout wire SPI_SDO_pad, | |
| inout wire SPI_SDI_pad, | |
| inout wire SPI_SCK_pad, | |
| inout wire SPI_SS_B_pad */ | |
| ); | |
| wire GBUF6; | |
| SB_GB_IO # ( | |
| .PIN_TYPE (6'b000011), | |
| .PULLUP (1'b0), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") | |
| ) io_00_08_1 ( | |
| .CLOCK_ENABLE (), | |
| .INPUT_CLK (), // Clock for the input registers | |
| .OUTPUT_CLK (), // Clock for the output registers | |
| .PACKAGE_PIN (CLK_pad), | |
| .LATCH_INPUT_VALUE (1'b1), | |
| .OUTPUT_ENABLE (), | |
| .D_OUT_0 (), .D_OUT_1 (), | |
| .D_IN_0 (), .D_IN_1 (), | |
| .GLOBAL_BUFFER_OUTPUT (GBUF6) | |
| ); | |
| // 18 full IO pairs with individual | |
| // CLOCK_ENABLE, OUTPUT_CLK, and INPUT_CLK signals | |
| // 8 half-pairs using SB_GB_IO and SB_IO | |
| // FT2232H MPSSE mode uses 7 wires connected to 4 IO tiles: | |
| // 3 inouts GPIOL2, GPIOL1, GPIOL0 | |
| // 3 inputs TMS_CS, TDI_DO, TCK_SK, | |
| // 1 output TDO_DI, | |
| wire FT2232H_GPIOL2_in, FT2232H_GPIOL1_in, FT2232H_GPIOL0_in; | |
| wire FT2232H_GPIOL2_in_ddr, FT2232H_GPIOL1_in_ddr, FT2232H_GPIOL0_in_ddr; | |
| wire FT2232H_GPIOL2_OUT_EN, FT2232H_GPIOL1_OUT_EN, FT2232H_GPIOL0_OUT_EN; | |
| wire FT2232H_GPIOL2_out, FT2232H_GPIOL1_out, FT2232H_GPIOL0_out; | |
| wire FT2232H_GPIOL2_out_ddr, FT2232H_GPIOL1_out_ddr, FT2232H_GPIOL0_out_ddr; | |
| wire FT2232H_TMS_CS_in, FT2232H_TDI_DO_in, FT2232H_TCK_SK_in; | |
| wire FT2232H_TMS_CS_in_ddr, FT2232H_TDI_DO_in_ddr, FT2232H_TCK_SK_in_ddr; | |
| wire FT2232H_TDO_DI_OUT_EN; | |
| wire FT2232H_TDO_DI_out; | |
| wire FT2232H_TDO_DI_out_ddr; | |
| wire FT2232H_CLK_EN; | |
| // Full IO | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b110000), | |
| .PIN_TYPE_1 (6'b110000) | |
| ) pio_0_14 ( | |
| .CLK_EN (FT2232H_CLK_EN), // Clock Enable common to input and output clock | |
| .OUT_CLK (GBUF6), // Clock for the output registers | |
| .IN_CLK (GBUF6), // Clock for the input registers | |
| .PAD_0 (FT2232H_GPIOL1_pad), | |
| .PAD_1 (FT2232H_GPIOL2_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (FT2232H_GPIOL1_OUT_EN), | |
| .OUT_EN_1 (FT2232H_GPIOL2_OUT_EN), | |
| .D_OUT_0 (FT2232H_GPIOL1_out), | |
| .D_OUT_1 (FT2232H_GPIOL2_out), | |
| .D_OUT_DDR_0 (FT2232H_GPIOL1_out_ddr), | |
| .D_OUT_DDR_1 (FT2232H_GPIOL1_out_ddr), | |
| .D_IN_0 (FT2232H_GPIOL1_in), | |
| .D_IN_1 (FT2232H_GPIOL2_in), | |
| .D_IN_DDR_0 (FT2232H_GPIOL1_in_ddr), | |
| .D_IN_DDR_1 (FT2232H_GPIOL2_in_ddr) | |
| ); | |
| // A half pair is full IO, a half pair is input only | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b000000), | |
| .PIN_TYPE_1 (6'b110000) | |
| ) pio_0_13 ( | |
| .CLK_EN (FT2232H_CLK_EN), // Clock Enable common to input and output clock | |
| .OUT_CLK (GBUF6), // Clock for the output registers | |
| .IN_CLK (GBUF6), // Clock for the input registers | |
| .PAD_0 (FT2232H_TMS_CS_pad), | |
| .PAD_1 (FT2232H_GPIOL0_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (1'b0), | |
| .OUT_EN_1 (FT2232H_GPIOL0_OUT_EN), | |
| .D_OUT_0 (), | |
| .D_OUT_1 (FT2232H_GPIOL0_out), | |
| .D_OUT_DDR_0 (), | |
| .D_OUT_DDR_1 (FT2232H_GPIOL0_out_ddr), | |
| .D_IN_0 (FT2232H_TMS_CS_in), | |
| .D_IN_1 (FT2232H_GPIOL0_in), | |
| .D_IN_DDR_0 (FT2232H_TMS_CS_in_ddr), | |
| .D_IN_DDR_1 (FT2232H_GPIOL0_in_ddr) | |
| ); | |
| // 1 input 1 output tile | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b000000), | |
| .PIN_TYPE_1 (6'b110000) | |
| ) pio_0_12 ( | |
| .CLK_EN (FT2232H_CLK_EN), // Clock Enable common to input and output clock | |
| .OUT_CLK (GBUF6), // Clock for the output registers | |
| .IN_CLK (GBUF6), // Clock for the input registers | |
| .PAD_0 (FT2232H_TDI_DO_pad), | |
| .PAD_1 (FT2232H_TDO_DI_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (1'b0), | |
| .OUT_EN_1 (FT2232H_TDO_DI_OUT_EN), | |
| .D_OUT_0 (), | |
| .D_OUT_1 (FT2232H_TDO_DI_out), | |
| .D_OUT_DDR_0 (), | |
| .D_OUT_DDR_1 (FT2232H_TDO_DI_out_ddr), | |
| .D_IN_0 (FT2232H_TDI_DO_in), | |
| .D_IN_1 (), | |
| .D_IN_DDR_0 (FT2232H_TDI_DO_in_ddr), | |
| .D_IN_DDR_1 () | |
| ); | |
| // Input only | |
| SB_IO # ( | |
| .PIN_TYPE (6'b000000), // no out, in DDR | |
| .PULLUP (1'b0), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") | |
| ) io_00_11_1 ( | |
| .CLOCK_ENABLE (FT2232H_CLK_EN), | |
| .INPUT_CLK (GBUF6), // Clock for the input registers | |
| .OUTPUT_CLK (), // Clock for the output registers | |
| .PACKAGE_PIN (FT2232H_TCK_SK_pad), | |
| .LATCH_INPUT_VALUE (), | |
| .OUTPUT_ENABLE (), | |
| .D_OUT_0 (), .D_OUT_1 (), | |
| .D_IN_0 (FT2232H_TCK_SK_in), | |
| .D_IN_1 (FT2232H_TCK_SK_in_ddr) | |
| ); | |
| wire D1_OUT_EN; | |
| wire D2_OUT_EN; | |
| wire D3_OUT_EN; | |
| wire D4_OUT_EN; | |
| wire D5_OUT_EN; | |
| wire D1_top_red; | |
| wire D2_right_red; | |
| wire D3_bottom_red; | |
| wire D4_left_red; | |
| wire D5_center_green; | |
| wire LED_CLK_EN; | |
| // 2 outputs tile | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b110111), | |
| .PIN_TYPE_1 (6'b110111) | |
| ) pio_13_11 ( | |
| .CLK_EN (LED_CLK_EN), | |
| .OUT_CLK (GBUF6), | |
| .IN_CLK (), | |
| .PAD_0 (D4_pad), | |
| .PAD_1 (D3_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (D4_OUT_EN), | |
| .OUT_EN_1 (D3_OUT_EN), | |
| .D_OUT_0 (D4_left_red), | |
| .D_OUT_1 (D3_bottom_red), | |
| .D_OUT_DDR_0 (), .D_OUT_DDR_1 (), .D_IN_0 (), .D_IN_1 (), .D_IN_DDR_0 (), .D_IN_DDR_1 () | |
| ); | |
| // 2 outputs tile | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b110111), | |
| .PIN_TYPE_1 (6'b110111) | |
| ) pio_13_12 ( | |
| .CLK_EN (LED_CLK_EN), | |
| .OUT_CLK (GBUF6), | |
| .IN_CLK (), | |
| .PAD_0 (D2_pad), | |
| .PAD_1 (D1_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (D2_OUT_EN), | |
| .OUT_EN_1 (D1_OUT_EN), | |
| .D_OUT_0 (D2_right_red), | |
| .D_OUT_1 (D1_top_red), | |
| .D_OUT_DDR_0 (), .D_OUT_DDR_1 (), .D_IN_0 (), .D_IN_1 (), .D_IN_DDR_0 (), .D_IN_DDR_1 () | |
| ); | |
| // Output only | |
| SB_IO # ( | |
| .PIN_TYPE (6'b110111), // output reg, en reg; input latch | |
| .PULLUP (1'b0), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") | |
| ) io_13_09_1 ( | |
| .CLOCK_ENABLE (LED_CLK_EN), | |
| .INPUT_CLK (), // Clock for the input registers | |
| .OUTPUT_CLK (GBUF6), // Clock for the output registers | |
| .PACKAGE_PIN (D5_pad), | |
| .LATCH_INPUT_VALUE (1'b1), | |
| .OUTPUT_ENABLE (D5_OUT_EN), | |
| .D_OUT_0 (D5_center_green), | |
| .D_OUT_1 (), .D_IN_0 (), .D_IN_1 () | |
| ); | |
| // reg en_led = 1'b1; | |
| assign LED_CLK_EN = 1'b1; //en_led; | |
| //reg green_led_out_en = 1'b1; | |
| //assign D5_OUT_EN = green_led_out_en; | |
| //reg green_led = 1'b1; | |
| //assign D5_center_green = green_led; | |
| wire RXD_in; | |
| wire RXD_in_ddr; | |
| wire TXD_out; | |
| wire TXD_out_ddr; | |
| wire TXD_OUT_EN; | |
| wire SD_out; | |
| wire SD_OUT_EN; | |
| wire IR_CLK_EN; | |
| // 1 input 1 output tile | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b000000), | |
| .PIN_TYPE_1 (6'b110111) | |
| ) pio_13_15 ( | |
| .CLK_EN (IR_CLK_EN), // Clock Enable common to input and output clock | |
| .OUT_CLK (GBUF6), // Clock for the output registers | |
| .IN_CLK (GBUF6), // Clock for the input registers | |
| .PAD_0 (RXD_pad), | |
| .PAD_1 (SD_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (1'b0), | |
| .OUT_EN_1 (SD_OUT_EN), | |
| .D_OUT_0 (), | |
| .D_OUT_1 (SD_out), | |
| .D_OUT_DDR_0 (), .D_OUT_DDR_1 (), | |
| .D_IN_0 (RXD_in), | |
| .D_IN_1 (), | |
| .D_IN_DDR_0 (RXD_in_ddr), | |
| .D_IN_DDR_1 () | |
| ); | |
| // 1 output tile | |
| SB_IO # ( | |
| .PIN_TYPE (6'b110000), | |
| .PULLUP (1'b0), | |
| .NEG_TRIGGER (1'b0), | |
| .IO_STANDARD ("SB_LVCMOS") | |
| ) io_13_14_1 ( | |
| .CLOCK_ENABLE (IR_CLK_EN), | |
| .INPUT_CLK (), // Clock for the input registers | |
| .OUTPUT_CLK (GBUF6), // Clock for the output registers | |
| .PACKAGE_PIN (TXD_pad), | |
| .LATCH_INPUT_VALUE (1'b1), | |
| .OUTPUT_ENABLE (TXD_OUT_EN), | |
| .D_OUT_0 (TXD_out), | |
| .D_OUT_1 (TXD_out_ddr), | |
| .D_IN_0 (), .D_IN_1 () | |
| ); | |
| assign IR_CLK_EN = 1'b1; | |
| assign SD_OUT_EN = 1'b1; | |
| assign TXD_OUT_EN = 1'b1; | |
| // Enable receiving mode | |
| assign SD_out = 1'b0; | |
| assign TXD_out = 1'b0; | |
| //assign D4_left_red = ~RXD_in; | |
| // assign D3_bottom_red = ~RXD_in_ddr; | |
| assign D1_OUT_EN = 1'b1; | |
| assign D2_OUT_EN = 1'b1; | |
| assign D3_OUT_EN = 1'b1; | |
| assign D4_OUT_EN = 1'b1; | |
| assign D5_OUT_EN = 1'b1; | |
| // assign D1_top_red = RXD_in ^ RXD_in_ddr; | |
| wire EVENT_E;//, EVENT_D; | |
| wire D1_top_red; | |
| wire D2_right_red; | |
| reg D3_bottom_red = 1'b0; | |
| reg D4_left_red = 1'b0; | |
| wire D5_center_green; | |
| assign EVENT_E = RXD_in ^ RXD_in_ddr; | |
| // assign EVENT_D = ; | |
| /* | |
| wire state_i_S_OUT_0, | |
| state_b_S_OUT_0, | |
| state_c_S_OUT_0, | |
| state_c2_S_OUT_0, | |
| state_c3_S_OUT_0, | |
| state_b_S_IN_0, | |
| state_c_S_IN_0, | |
| state_c2_S_IN_0, | |
| state_c3_S_IN_0; | |
| State_1_Output state_i ( | |
| .EVENT_0 (EVENT_E), | |
| .S_OUT_0 (state_i_S_OUT_0), | |
| .CLOCK (GBUF6)); | |
| State_1_Input_1_Output state_b ( | |
| .ON_IN_0 (D4_left_red), | |
| .EVENT_0 (EVENT_E), | |
| .S_IN_0 (state_b_S_IN_0), | |
| .S_OUT_0 (state_b_S_OUT_0), | |
| .CLOCK (GBUF6)); | |
| wire entered_c, entered_c2; | |
| State_1_Input_1_Output state_c ( | |
| .ON_IN_0 (entered_c), | |
| .EVENT_0 (EVENT_E), | |
| .S_IN_0 (state_c_S_IN_0), | |
| .S_OUT_0 (state_c_S_OUT_0), | |
| .CLOCK (GBUF6)); | |
| State_1_Input_1_Output state_c2 ( | |
| .ON_IN_0 (entered_c2), | |
| .EVENT_0 (EVENT_E), | |
| .S_IN_0 (state_c_S_OUT_0), | |
| .S_OUT_0 (state_c2_S_OUT_0), | |
| .CLOCK (GBUF6)); | |
| State_1_Input_1_Output state_c3 ( | |
| .ON_IN_0 (D5_center_green), | |
| .EVENT_0 (EVENT_E), | |
| .S_IN_0 (state_c2_S_OUT_0), | |
| .S_OUT_0 (state_c3_S_OUT_0), | |
| .CLOCK (GBUF6)); | |
| State_3_Inputs_2_Outputs state_a ( | |
| .S_IN_0 (state_b_S_OUT_0), | |
| .S_IN_1 (state_i_S_OUT_0), | |
| .S_IN_2 (state_c3_S_OUT_0), | |
| .ON_IN_0 (EVENT_D), | |
| .ON_IN_1 (D2_right_red), | |
| .ON_IN_2 (D3_bottom_red), | |
| .EVENT_0 (EVENT_E), | |
| .EVENT_1 (EVENT_D), | |
| .S_OUT_0 (state_b_S_IN_0), | |
| .S_OUT_1 (state_c_S_IN_0), | |
| .CLOCK (GBUF6)); | |
| */ | |
| reg state_i = 1'b1, state_a = 1'b0, state_b = 1'b0, state_c = 1'b0, state_c2 = 1'b0, state_c3 = 1'b0; | |
| reg EVENT_D = 1'b0; // generated event on entering "a" from "b" on event "E" | |
| always @(posedge GBUF6) | |
| begin | |
| if (state_i & EVENT_E) begin | |
| state_i <= 1'b0; // ~state_i; | |
| state_a <= 1'b1; // state_i; | |
| end | |
| if (state_a & EVENT_E) begin | |
| state_a <= 1'b0; // ~state_a; | |
| state_b <= 1'b1; // state_a; | |
| // on enter: generated event | |
| D4_left_red <= 1'b1; // ~D4_left_red; | |
| end | |
| if (state_a & EVENT_D) begin | |
| state_a <= 1'b0; // ~state_a; | |
| state_c <= 1'b1; // state_a; | |
| end | |
| if (state_c & EVENT_E) begin | |
| state_c <= 1'b0; // ~state_c; | |
| state_c2 <= 1'b1; // state_c; | |
| end | |
| if (state_c2 & EVENT_E) begin | |
| state_c2 <= 1'b0; // ~state_c2; | |
| state_c3 <= 1'b1; // state_c2; | |
| end | |
| if (state_c3 & EVENT_E) begin | |
| state_c3 <= 1'b0; // ~state_c3; | |
| state_a <= 1'b1; // state_c3; | |
| D3_bottom_red <= 1'b1; // ~D3_bottom_red; | |
| end | |
| if (state_b & EVENT_E) begin | |
| state_b <= 1'b0; // ~state_b; | |
| state_a <= 1'b1; // state_b; | |
| EVENT_D <= 1'b1; | |
| end | |
| // reset all generated events so they last only one clock cycle | |
| if (D4_left_red) D4_left_red <= 1'b0; // ~D4_left_red; | |
| if (EVENT_D) EVENT_D <= 1'b0; // ~EVENT_D; | |
| if (D3_bottom_red) D3_bottom_red <= 1'b0; // ~D3_bottom_red; | |
| end | |
| reg top_circle = 1'b0; | |
| reg bottom_circle = 1'b0; | |
| always @(posedge GBUF6) | |
| begin | |
| if (D4_left_red || EVENT_D) | |
| begin | |
| top_circle <= 1'b1; | |
| bottom_circle <= 1'b0; | |
| end | |
| // else if (entered_c || entered_c2 || D5_center_green || D3_bottom_red) | |
| else if (state_c || state_c2 || state_c3 || D3_bottom_red) | |
| begin | |
| top_circle <= 1'b0; | |
| bottom_circle <= 1'b1; | |
| end | |
| end | |
| assign D1_top_red = top_circle; | |
| //assign STATE_IN = STATE_OUT; | |
| //assign RESET_IN = RESET_OUT; | |
| //assign IN = OUT; | |
| //assign EVENT = D1_top_red; | |
| //assign D3_bottom_red = TX_HAPPENED; | |
| wire LCD_RST_OUT_EN = 1'b1; | |
| wire LCD_LED_OUT_EN = 1'b1; | |
| reg LCD_RST = 1'b1; | |
| // reg LCD_LED = 1'b0; | |
| wire LCD_LED = ~bottom_circle; | |
| // 2 outputs tile: RST & LED | |
| PIOPair # ( | |
| .PIN_TYPE_0 (6'b110111), | |
| .PIN_TYPE_1 (6'b110111) | |
| ) pio_09_00 ( | |
| .CLK_EN (LED_CLK_EN), | |
| .OUT_CLK (GBUF6), | |
| .IN_CLK (), | |
| .PAD_0 (J3_4_pad), | |
| .PAD_1 (J3_3_pad), | |
| // Output Pin Tristate/Enable control | |
| .OUT_EN_0 (LCD_RST_OUT_EN), | |
| .OUT_EN_1 (LCD_LED_OUT_EN), | |
| .D_OUT_0 (LCD_RST), | |
| .D_OUT_1 (LCD_LED), | |
| .D_OUT_DDR_0 (), .D_OUT_DDR_1 (), .D_IN_0 (), .D_IN_1 (), .D_IN_DDR_0 (), .D_IN_DDR_1 () | |
| ); | |
| // Eventful statechart formalism for reactive computing of Boolean logic functions | |
| wire C_T, C_S, A_T, A_S, B_T, B_S; | |
| reg [2:0] state = 0; | |
| reg M_S = 0; | |
| reg M_T = 0; | |
| always @(posedge GBUF6) begin | |
| if (state == 0) begin | |
| if (C_S | A_S | B_S) M_S <= 1; | |
| if (A_T) begin state[1] <= 1; M_S <= 1; end | |
| if (B_T) begin state[2] <= 1; M_T <= | |
| end | |
| /* | |
| inout wire PMOD1; | |
| inout wire PMOD2; | |
| inout wire PMOD3; | |
| inout wire PMOD4; | |
| inout wire PMOD7; | |
| inout wire PMOD8; | |
| inout wire PMOD9; | |
| inout wire PMOD10; | |
| inout wire J1_3; | |
| inout wire J1_4; | |
| inout wire J1_5; | |
| inout wire J1_6; | |
| inout wire J1_7; | |
| inout wire J1_8; | |
| inout wire J1_9; | |
| inout wire J1_10; | |
| inout wire J3_5; | |
| inout wire J3_6; | |
| inout wire J3_7; | |
| inout wire J3_8; | |
| inout wire J3_9; | |
| inout wire J3_10; | |
| inout wire SPI_SDO; | |
| inout wire SPI_SDI; | |
| inout wire SPI_SCK; | |
| inout wire SPI_SS_B; | |
| */ | |
| endmodule | |