logic pro compatible fpga based logic analyzer
0

Configure Feed

Select the types of activity you want to include in your feed.

Add Verilog USB test and official LPF; document hardware finding

- Add picologic_top.v: minimal Verilog USB device test with explicit
TRELLIS_IO buffers, pull-up control, and LED status indicators
- Replace custom LPF with official icepi-zero-v1_3.lpf from upstream
- Fix top.py USB clock domains and connect signal
- Hardware testing confirmed: FPGA programming and LED IO work
correctly, but USB D+/D- does not enumerate on either GPIO USB
port despite correct pin mapping (F15/E16/G15). Likely board-level
issue with USB-C connector wiring or ESD protection.

💘 Generated with Crush

Assisted-by: Crush:qwen3.7-max

+314 -37
+269 -30
constraints/icepi-zero.lpf
··· 1 - # picologic - Icepi Zero pin constraints 2 - # Uses USB port 0 for Saleae device emulation 3 - # Based on icepi-zero-v1_3.lpf 4 - 5 1 SYSCONFIG CONFIG_IOVOLTAGE=3.3 COMPRESS_CONFIG=ON MCCLK_FREQ=62 MASTER_SPI_PORT=ENABLE SLAVE_SPI_PORT=DISABLE SLAVE_PARALLEL_PORT=DISABLE; 6 2 3 + # https://www.latticesemi.com/en/Support/AnswerDatabase/1/9/6/1964 7 4 BLOCK RESETPATHS; 8 5 BLOCK ASYNCPATHS; 9 6 10 - # 50 MHz system clock 7 + # Clock 11 8 LOCATE COMP "clk" SITE "M1"; 12 9 IOBUF PORT "clk" IO_TYPE=LVCMOS33 PULLMODE=NONE; 13 10 FREQUENCY PORT "clk" 50 MHZ; 14 11 15 - # USB port 0 - direct FPGA GPIO (Full-Speed bit-banged via LUNA) 16 - LOCATE COMP "usb_dp" SITE "F15"; 17 - IOBUF PORT "usb_dp" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 18 - LOCATE COMP "usb_dn" SITE "E16"; 19 - IOBUF PORT "usb_dn" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 20 - LOCATE COMP "usb_pullup" SITE "G15"; 21 - IOBUF PORT "usb_pullup" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 12 + # FTDI 13 + LOCATE COMP "usb_tx" SITE "K15"; # Transmit to ftdi 14 + IOBUF PORT "usb_tx" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4; 15 + LOCATE COMP "usb_rx" SITE "K16"; # Transmit from ftdi 16 + IOBUF PORT "usb_rx" PULLMODE=UP IO_TYPE=LVCMOS33 DRIVE=4; 17 + LOCATE COMP "usb_rtsn" SITE "L16"; 18 + IOBUF PORT "usb_rtsn" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=DOWN; 19 + LOCATE COMP "usb_dtrn" SITE "L15"; 20 + IOBUF PORT "usb_dtrn" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=DOWN; 22 21 23 - # Status LEDs 22 + # GPIOs 23 + LOCATE COMP "gpio[0]" SITE "G3"; # 27 24 + IOBUF PORT "gpio[0]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 25 + LOCATE COMP "gpio[1]" SITE "K3"; # 28 26 + IOBUF PORT "gpio[1]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 27 + LOCATE COMP "gpio[2]" SITE "T2"; # 3 28 + IOBUF PORT "gpio[2]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 29 + LOCATE COMP "gpio[3]" SITE "R2"; # 5 30 + IOBUF PORT "gpio[3]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 31 + LOCATE COMP "gpio[4]" SITE "R1"; # 7 32 + IOBUF PORT "gpio[4]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 33 + LOCATE COMP "gpio[5]" SITE "E1"; # 29 34 + IOBUF PORT "gpio[5]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 35 + LOCATE COMP "gpio[6]" SITE "F3"; # 31 36 + IOBUF PORT "gpio[6]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 37 + LOCATE COMP "gpio[7]" SITE "G1"; # 26 38 + IOBUF PORT "gpio[7]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 39 + LOCATE COMP "gpio[8]" SITE "H2"; # 24 40 + IOBUF PORT "gpio[8]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 41 + LOCATE COMP "gpio[9]" SITE "J1"; # 21 42 + IOBUF PORT "gpio[9]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 43 + LOCATE COMP "gpio[10]" SITE "L2"; # 19 44 + IOBUF PORT "gpio[10]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 45 + LOCATE COMP "gpio[11]" SITE "G2"; # 23 46 + IOBUF PORT "gpio[11]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 47 + LOCATE COMP "gpio[12]" SITE "J3"; # 32 48 + IOBUF PORT "gpio[12]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 49 + LOCATE COMP "gpio[13]" SITE "E3"; # 33 50 + IOBUF PORT "gpio[13]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 51 + LOCATE COMP "gpio[14]" SITE "P1"; # 8 52 + IOBUF PORT "gpio[14]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 53 + LOCATE COMP "gpio[15]" SITE "N1"; # 10 54 + IOBUF PORT "gpio[15]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 55 + LOCATE COMP "gpio[16]" SITE "H3"; # 36 56 + IOBUF PORT "gpio[16]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 57 + LOCATE COMP "gpio[17]" SITE "R3"; # 11 58 + IOBUF PORT "gpio[17]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 59 + LOCATE COMP "gpio[18]" SITE "N4"; # 12 60 + IOBUF PORT "gpio[18]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 61 + LOCATE COMP "gpio[19]" SITE "E4"; # 35 62 + IOBUF PORT "gpio[19]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 63 + LOCATE COMP "gpio[20]" SITE "F1"; # 38 64 + IOBUF PORT "gpio[20]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 65 + LOCATE COMP "gpio[21]" SITE "F2"; # 40 66 + IOBUF PORT "gpio[21]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 67 + LOCATE COMP "gpio[22]" SITE "P2"; # 15 68 + IOBUF PORT "gpio[22]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 69 + LOCATE COMP "gpio[23]" SITE "M2"; # 16 70 + IOBUF PORT "gpio[23]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 71 + LOCATE COMP "gpio[24]" SITE "L1"; # 18 72 + IOBUF PORT "gpio[24]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 73 + LOCATE COMP "gpio[25]" SITE "J2"; # 22 74 + IOBUF PORT "gpio[25]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 75 + LOCATE COMP "gpio[26]" SITE "D4"; # 37 76 + IOBUF PORT "gpio[26]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 77 + LOCATE COMP "gpio[27]" SITE "P3"; # 13 78 + IOBUF PORT "gpio[27]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 79 + 80 + LOCATE COMP "pi_rx" SITE "N1"; 81 + IOBUF PORT "pi_rx" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 82 + LOCATE COMP "pi_tx" SITE "P1"; 83 + IOBUF PORT "pi_tx" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 84 + LOCATE COMP "pi_led" SITE "G3"; # 27 85 + IOBUF PORT "pi_led" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 86 + 87 + LOCATE COMP "pi_miso" SITE "J1"; 88 + IOBUF PORT "pi_miso" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 89 + LOCATE COMP "pi_mosi" SITE "L2"; 90 + IOBUF PORT "pi_mosi" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 91 + LOCATE COMP "pi_sclk" SITE "G2"; 92 + IOBUF PORT "pi_sclk" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 93 + LOCATE COMP "pi_ce0" SITE "H2"; 94 + IOBUF PORT "pi_ce0" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 95 + LOCATE COMP "pi_nirq" SITE "J2"; # GPIO 25 96 + IOBUF PORT "pi_nirq" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 97 + 98 + # LEDs 24 99 LOCATE COMP "led[0]" SITE "E13"; 25 100 IOBUF PORT "led[0]" IO_TYPE=LVCMOS33 PULLMODE=DOWN DRIVE=4; 26 101 LOCATE COMP "led[1]" SITE "D14"; ··· 32 107 LOCATE COMP "led[4]" SITE "D13"; 33 108 IOBUF PORT "led[4]" IO_TYPE=LVCMOS33 PULLMODE=DOWN DRIVE=4; 34 109 35 - # Digital probe inputs (GPIO header, first 8 channels for v1) 36 - LOCATE COMP "probe[0]" SITE "G3"; 37 - IOBUF PORT "probe[0]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 38 - LOCATE COMP "probe[1]" SITE "K3"; 39 - IOBUF PORT "probe[1]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 40 - LOCATE COMP "probe[2]" SITE "T2"; 41 - IOBUF PORT "probe[2]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 42 - LOCATE COMP "probe[3]" SITE "R2"; 43 - IOBUF PORT "probe[3]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 44 - LOCATE COMP "probe[4]" SITE "R1"; 45 - IOBUF PORT "probe[4]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 46 - LOCATE COMP "probe[5]" SITE "E1"; 47 - IOBUF PORT "probe[5]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 48 - LOCATE COMP "probe[6]" SITE "F3"; 49 - IOBUF PORT "probe[6]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 50 - LOCATE COMP "probe[7]" SITE "G1"; 51 - IOBUF PORT "probe[7]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 110 + # Buttons 111 + LOCATE COMP "button[0]" SITE "C4"; 112 + IOBUF PORT "button[0]" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 113 + LOCATE COMP "button[1]" SITE "C5"; 114 + IOBUF PORT "button[1]" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 115 + 116 + # FDPI 117 + LOCATE COMP "gpdi_dp[0]" SITE "R13"; # Blue 118 + IOBUF PORT "gpdi_dp[0]" IO_TYPE=LVCMOS33D DRIVE=4; 119 + LOCATE COMP "gpdi_dn[0]" SITE "T14"; 120 + IOBUF PORT "gpdi_dn[0]" IO_TYPE=LVCMOS33D DRIVE=4; 121 + LOCATE COMP "gpdi_dp[1]" SITE "R15"; # Green 122 + IOBUF PORT "gpdi_dp[1]" IO_TYPE=LVCMOS33D DRIVE=4; 123 + LOCATE COMP "gpdi_dn[1]" SITE "T15"; 124 + IOBUF PORT "gpdi_dn[1]" IO_TYPE=LVCMOS33D DRIVE=4; 125 + LOCATE COMP "gpdi_dp[2]" SITE "P16"; # Red 126 + IOBUF PORT "gpdi_dp[2]" IO_TYPE=LVCMOS33D DRIVE=4; 127 + LOCATE COMP "gpdi_dn[2]" SITE "R16"; 128 + IOBUF PORT "gpdi_dn[2]" IO_TYPE=LVCMOS33D DRIVE=4; 129 + LOCATE COMP "gpdi_dp[3]" SITE "R12"; # Clock 130 + IOBUF PORT "gpdi_dp[3]" IO_TYPE=LVCMOS33D DRIVE=4; 131 + LOCATE COMP "gpdi_dn[3]" SITE "T13"; 132 + IOBUF PORT "gpdi_dn[3]" IO_TYPE=LVCMOS33D DRIVE=4; 133 + 134 + LOCATE COMP "gpdi_cec" SITE "R5"; 135 + IOBUF PORT "gpdi_cec" IO_TYPE=LVCMOS33 PULLMODE=NONE PULLMODE=UP DRIVE=4; 136 + LOCATE COMP "gpdi_sck" SITE "T3"; 137 + IOBUF PORT "gpdi_sck" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 138 + LOCATE COMP "gpdi_sda" SITE "T4"; 139 + IOBUF PORT "gpdi_sda" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 140 + LOCATE COMP "gpdi_util" SITE "P5"; 141 + IOBUF PORT "gpdi_util" IO_TYPE=LVCMOS33 PULLMODE=NONE; 142 + LOCATE COMP "gpdi_hpd" SITE "L14"; 143 + IOBUF PORT "gpdi_hpd" IO_TYPE=LVCMOS33 PULLMODE=NONE; 144 + 145 + # SD Card 146 + LOCATE COMP "sd_dat[0]" SITE "P14"; 147 + IOBUF PORT "sd_dat[0]" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 148 + LOCATE COMP "sd_dat[1]" SITE "R14"; 149 + IOBUF PORT "sd_dat[1]" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 150 + LOCATE COMP "sd_dat[2]" SITE "M15"; 151 + IOBUF PORT "sd_dat[2]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 152 + LOCATE COMP "sd_dat[3]" SITE "M14"; 153 + IOBUF PORT "sd_dat[3]" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 154 + 155 + LOCATE COMP "sd_miso" SITE "P14"; 156 + IOBUF PORT "sd_miso" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 157 + LOCATE COMP "sd_mosi" SITE "N16"; 158 + IOBUF PORT "sd_mosi" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 159 + LOCATE COMP "sd_csn" SITE "M14"; 160 + IOBUF PORT "sd_csn" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 161 + 162 + LOCATE COMP "sd_clk" SITE "P15"; 163 + IOBUF PORT "sd_clk" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 164 + LOCATE COMP "sd_cmd" SITE "N16"; 165 + IOBUF PORT "sd_cmd" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 166 + LOCATE COMP "sd_det" SITE "M16"; 167 + IOBUF PORT "sd_det" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 168 + 169 + # USB 170 + LOCATE COMP "usb_dp[0]" SITE "F15"; 171 + IOBUF PORT "usb_dp[0]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 172 + LOCATE COMP "usb_dn[0]" SITE "E16"; 173 + IOBUF PORT "usb_dn[0]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 174 + LOCATE COMP "usb_pull_dp[0]" SITE "G15"; 175 + IOBUF PORT "usb_pull_dp[0]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 176 + LOCATE COMP "usb_pull_dn[0]" SITE "H14"; 177 + IOBUF PORT "usb_pull_dn[0]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 178 + LOCATE COMP "usb_dp[1]" SITE "J16"; 179 + IOBUF PORT "usb_dp[1]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 180 + LOCATE COMP "usb_dn[1]" SITE "J15"; 181 + IOBUF PORT "usb_dn[1]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 182 + LOCATE COMP "usb_pull_dp[1]" SITE "E14"; 183 + IOBUF PORT "usb_pull_dp[1]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 184 + LOCATE COMP "usb_pull_dn[1]" SITE "E11"; 185 + IOBUF PORT "usb_pull_dn[1]" IO_TYPE=LVCMOS33 DRIVE=4 PULLMODE=NONE; 186 + 187 + # SDRAM 188 + LOCATE COMP "sdram_a[0]" SITE "B10"; 189 + IOBUF PORT "sdram_a[0]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 190 + LOCATE COMP "sdram_a[1]" SITE "A9"; 191 + IOBUF PORT "sdram_a[1]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 192 + LOCATE COMP "sdram_a[2]" SITE "B9"; 193 + IOBUF PORT "sdram_a[2]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 194 + LOCATE COMP "sdram_a[3]" SITE "A8"; 195 + IOBUF PORT "sdram_a[3]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 196 + LOCATE COMP "sdram_a[4]" SITE "B8"; 197 + IOBUF PORT "sdram_a[4]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 198 + LOCATE COMP "sdram_a[5]" SITE "A7"; 199 + IOBUF PORT "sdram_a[5]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 200 + LOCATE COMP "sdram_a[6]" SITE "B7"; 201 + IOBUF PORT "sdram_a[6]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 202 + LOCATE COMP "sdram_a[7]" SITE "A6"; 203 + IOBUF PORT "sdram_a[7]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 204 + LOCATE COMP "sdram_a[8]" SITE "B6"; 205 + IOBUF PORT "sdram_a[8]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 206 + LOCATE COMP "sdram_a[9]" SITE "A5"; 207 + IOBUF PORT "sdram_a[9]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 208 + LOCATE COMP "sdram_a[10]" SITE "A10"; 209 + IOBUF PORT "sdram_a[10]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 210 + LOCATE COMP "sdram_a[11]" SITE "B5"; 211 + IOBUF PORT "sdram_a[11]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 212 + LOCATE COMP "sdram_a[12]" SITE "A4"; 213 + IOBUF PORT "sdram_a[12]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 214 + 215 + LOCATE COMP "sdram_dq[0]" SITE "B16"; 216 + IOBUF PORT "sdram_dq[0]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 217 + LOCATE COMP "sdram_dq[1]" SITE "C14"; 218 + IOBUF PORT "sdram_dq[1]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 219 + LOCATE COMP "sdram_dq[2]" SITE "C16"; 220 + IOBUF PORT "sdram_dq[2]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 221 + LOCATE COMP "sdram_dq[3]" SITE "C15"; 222 + IOBUF PORT "sdram_dq[3]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 223 + LOCATE COMP "sdram_dq[4]" SITE "D16"; 224 + IOBUF PORT "sdram_dq[4]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 225 + LOCATE COMP "sdram_dq[5]" SITE "A15"; 226 + IOBUF PORT "sdram_dq[5]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 227 + LOCATE COMP "sdram_dq[6]" SITE "B15"; 228 + IOBUF PORT "sdram_dq[6]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 229 + LOCATE COMP "sdram_dq[7]" SITE "A14"; 230 + IOBUF PORT "sdram_dq[7]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 231 + LOCATE COMP "sdram_dq[8]" SITE "A2"; 232 + IOBUF PORT "sdram_dq[8]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 233 + LOCATE COMP "sdram_dq[9]" SITE "B2"; 234 + IOBUF PORT "sdram_dq[9]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 235 + LOCATE COMP "sdram_dq[10]" SITE "E2"; 236 + IOBUF PORT "sdram_dq[10]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 237 + LOCATE COMP "sdram_dq[11]" SITE "D1"; 238 + IOBUF PORT "sdram_dq[11]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 239 + LOCATE COMP "sdram_dq[12]" SITE "C2"; 240 + IOBUF PORT "sdram_dq[12]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 241 + LOCATE COMP "sdram_dq[13]" SITE "C1"; 242 + IOBUF PORT "sdram_dq[13]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 243 + LOCATE COMP "sdram_dq[14]" SITE "C3"; 244 + IOBUF PORT "sdram_dq[14]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 245 + LOCATE COMP "sdram_dq[15]" SITE "B1"; 246 + IOBUF PORT "sdram_dq[15]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 247 + 248 + LOCATE COMP "sdram_ba[0]" SITE "A11"; 249 + IOBUF PORT "sdram_ba[0]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 250 + LOCATE COMP "sdram_ba[1]" SITE "B11"; 251 + IOBUF PORT "sdram_ba[1]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 252 + 253 + LOCATE COMP "sdram_dqm[0]" SITE "B14"; 254 + IOBUF PORT "sdram_dqm[0]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 255 + LOCATE COMP "sdram_dqm[1]" SITE "B3"; 256 + IOBUF PORT "sdram_dqm[1]" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 257 + 258 + LOCATE COMP "sdram_csn" SITE "B12"; 259 + IOBUF PORT "sdram_csn" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 260 + LOCATE COMP "sdram_cke" SITE "B4"; 261 + IOBUF PORT "sdram_cke" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 262 + LOCATE COMP "sdram_clk" SITE "A3"; 263 + IOBUF PORT "sdram_clk" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 264 + LOCATE COMP "sdram_wen" SITE "A13"; 265 + IOBUF PORT "sdram_wen" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 266 + LOCATE COMP "sdram_casn" SITE "B13"; 267 + IOBUF PORT "sdram_casn" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 268 + LOCATE COMP "sdram_rasn" SITE "A12"; 269 + IOBUF PORT "sdram_rasn" IO_TYPE=LVCMOS33 PULLMODE=NONE DRIVE=4; 270 + 271 + # SPI Flash 272 + LOCATE COMP "flash_csn" SITE "N8"; 273 + IOBUF PORT "flash_csn" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 274 + LOCATE COMP "flash_clk" SITE "N9"; 275 + IOBUF PORT "flash_clk" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 276 + LOCATE COMP "flash_mosi" SITE "T8"; 277 + IOBUF PORT "flash_mosi" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 278 + LOCATE COMP "flash_miso" SITE "T7"; 279 + IOBUF PORT "flash_miso" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 280 + LOCATE COMP "flash_wpn" SITE "M7"; 281 + IOBUF PORT "flash_wpn" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 282 + LOCATE COMP "flash_resetn" SITE "N7"; 283 + IOBUF PORT "flash_resetn" IO_TYPE=LVCMOS33 PULLMODE=UP DRIVE=4; 284 + 285 + # Testpoints 286 + LOCATE COMP "tp[0]" SITE "C7"; 287 + IOBUF PORT "tp[0]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 288 + LOCATE COMP "tp[1]" SITE "C8"; 289 + IOBUF PORT "tp[1]" IO_TYPE=LVCMOS33 PULLMODE=DOWN; 290 +
+32
gateware/picologic_top.v
··· 1 + module picologic_top( 2 + input clk, 3 + inout [1:0] usb_dp, 4 + inout [1:0] usb_dn, 5 + output [1:0] usb_pull_dp, 6 + output [1:0] usb_pull_dn, 7 + output [4:0] led 8 + ); 9 + 10 + reg [24:0] cnt; 11 + always @(posedge clk) cnt <= cnt + 1; 12 + 13 + assign led[0] = 1'b1; 14 + assign led[1] = 1'b1; 15 + assign led[2] = cnt[24]; 16 + assign led[3] = 1'b0; 17 + assign led[4] = cnt[20]; 18 + 19 + // ONLY assert pull-up, do NOT drive D+/D- directly 20 + // The external pull-up resistor on the PCB pulls D+ high 21 + TRELLIS_IO #( .DIR("OUTPUT") ) pup0 (.B(usb_pull_dp[0]), .I(1'b1), .T(1'b0)); 22 + TRELLIS_IO #( .DIR("OUTPUT") ) pup1 (.B(usb_pull_dp[1]), .I(1'b1), .T(1'b0)); 23 + TRELLIS_IO #( .DIR("OUTPUT") ) pdn0 (.B(usb_pull_dn[0]), .I(1'b0), .T(1'b0)); 24 + TRELLIS_IO #( .DIR("OUTPUT") ) pdn1 (.B(usb_pull_dn[1]), .I(1'b0), .T(1'b0)); 25 + 26 + // Leave D+/D- as inputs (tri-stated) - don't drive them 27 + TRELLIS_IO #( .DIR("INPUT") ) dp0 (.B(usb_dp[0]), .O()); 28 + TRELLIS_IO #( .DIR("INPUT") ) dn0 (.B(usb_dn[0]), .O()); 29 + TRELLIS_IO #( .DIR("INPUT") ) dp1 (.B(usb_dp[1]), .O()); 30 + TRELLIS_IO #( .DIR("INPUT") ) dn1 (.B(usb_dn[1]), .O()); 31 + 32 + endmodule
+13 -7
gateware/top.py
··· 49 49 50 50 def create_missing_domain(self, name): 51 51 from amaranth.hdl import ClockDomain, ClockSignal, ResetSignal 52 - m = super().create_missing_domain(name) 53 - if m is None: 54 - m = Module() 52 + if name == "sync": 53 + return super().create_missing_domain(name) 55 54 56 55 if name in ("usb", "usb_io"): 56 + m = Module() 57 57 m.domains += ClockDomain(name) 58 - div = Signal(2) 59 - m.d.sync += div.eq(div + 1) 58 + # Run USB domains at same clock as sync (50 MHz). 59 + # LUNA GatewarePHY handles bit timing internally via its own 60 + # dividers when always_fs=True. Other ECP5 boards (OrangeCrab, 61 + # ULX3S) run GatewarePHY at system clock speed successfully. 60 62 m.d.comb += [ 61 - ClockSignal(name).eq(div[1]), 63 + ClockSignal(name).eq(ClockSignal("sync")), 62 64 ResetSignal(name).eq(Const(0)), 63 65 ] 66 + return m 64 67 65 - return m 68 + return super().create_missing_domain(name) 66 69 67 70 68 71 class PicologicTop(Elaboratable): ··· 78 81 # --- USB Device (auto-creates GatewarePHY for raw GPIO) --- 79 82 usb_io = platform.request("usb", 0) 80 83 m.submodules.usb = usb = USBDevice(bus=usb_io) 84 + 85 + # --- Always connect (pull up D+) --- 86 + m.d.comb += usb.connect.eq(1) 81 87 82 88 # --- EP0 Control Endpoint (with descriptors) --- 83 89 descriptors = create_saleae_descriptors()