Updated i2c_keyboard

master
Ivan Olenichev 5 years ago
parent a91958a068
commit df40598fbc

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -1,1161 +0,0 @@
# Generated by Yosys 0.7 (Apio build) (git sha1 8c071a2, gcc 4.8.4-2ubuntu1~14.04.3 -fPIC -Os)
.model top
.inputs CLK SCL SDA COM_RX
.outputs LED1 LED2 LED3 LED4 LED5 SDA ACK COM_TX COM_DCD COM_DSR COM_RTS
.names $false
.names $true
1
.names $undef
.gate SB_LUT4 I0=$abc$5798$n225 I1=$abc$5798$n553 I2=$abc$5798$n230 I3=UART.tx_activity O=$abc$5798$n5
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000111111111
.gate SB_LUT4 I0=$abc$5798$n226_1 I1=$abc$5798$n229 I2=$abc$5798$n582 I3=$abc$5798$n568 O=$abc$5798$n225
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000101000001100
.gate SB_LUT4 I0=UART.tx_data[4] I1=UART.tx_data[6] I2=$abc$5798$n227 I3=$false O=$abc$5798$n226_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=$abc$5798$n594 I1=$abc$5798$n595 I2=$false I3=$false O=$abc$5798$n227
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0110
.gate SB_LUT4 I0=UART.tx_bit_counter[0] I1=UART.tx_bit_counter[1] I2=$false I3=$false O=$abc$5798$n594
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0110
.gate SB_LUT4 I0=UART.tx_data[0] I1=UART.tx_data[2] I2=$abc$5798$n227 I3=$false O=$abc$5798$n229
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=$abc$5798$n231 I1=$abc$5798$n232 I2=$abc$5798$n568 I3=$abc$5798$n582 O=$abc$5798$n230
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1010001100000000
.gate SB_LUT4 I0=UART.tx_data[5] I1=UART.tx_data[7] I2=$abc$5798$n227 I3=$false O=$abc$5798$n231
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=UART.tx_data[1] I1=UART.tx_data[3] I2=$abc$5798$n227 I3=$false O=$abc$5798$n232
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01010011
.gate SB_LUT4 I0=I2C.SDAF I1=I2C.SDAD I2=$abc$5798$n269 I3=$abc$5798$n235 O=$abc$5798$n7
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0011010100110011
.gate SB_LUT4 I0=I2C.sda_cnt[0] I1=I2C.sda_cnt[1] I2=$false I3=$false O=$abc$5798$n269
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1001
.gate SB_LUT4 I0=$abc$5798$n268 I1=$abc$5798$n271 I2=$abc$5798$n272 I3=$false O=$abc$5798$n235
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00000001
.gate SB_LUT4 I0=I2C.SCLF I1=I2C.SCLD I2=$abc$5798$n276 I3=$abc$5798$n238 O=$abc$5798$n9
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0011010100110011
.gate SB_LUT4 I0=I2C.scl_cnt[0] I1=I2C.scl_cnt[1] I2=$false I3=$false O=$abc$5798$n276
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1001
.gate SB_LUT4 I0=$abc$5798$n275 I1=$abc$5798$n278 I2=$abc$5798$n279 I3=$false O=$abc$5798$n238
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00000001
.gate SB_LUT4 I0=I2C.sda_cnt[0] I1=I2C.sda_cnt[1] I2=I2C.sda_cnt[2] I3=I2C.sda_cnt[3] O=$abc$5798$n25
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=I2C.scl_cnt[0] I1=I2C.scl_cnt[1] I2=I2C.scl_cnt[2] I3=I2C.scl_cnt[3] O=$abc$5798$n27
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=I2C.i2c_state_machine I1=$abc$5798$n242 I2=$abc$5798$n243 I3=$false O=$abc$5798$n29
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 11110001
.gate SB_LUT4 I0=$abc$5798$n9 I1=$abc$5798$n18 I2=$abc$5798$n7 I3=$false O=$abc$5798$n242
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n7 I1=$abc$5798$n9 I2=$abc$5798$n18 I3=$false O=$abc$5798$n243
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[0] I2=$false I3=$false O=$abc$5798$n98
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[2] I2=$false I3=$false O=$abc$5798$n101
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[6] I2=$false I3=$false O=$abc$5798$n104
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[7] I2=$false I3=$false O=$abc$5798$n105
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[8] I2=$false I3=$false O=$abc$5798$n110
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$0\UART_WR[0:0] I1=I2C.is_read I2=$false I3=$false O=$abc$5798$n141
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=wr_old I1=I2C.wr I2=$false I3=$false O=$0\UART_WR[0:0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=I2C.is_read I1=$0\UART_WR[0:0] I2=$false I3=$false O=$0\RAM_W[0:0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=I2C.wr I1=wr_old I2=$false I3=$false O=$abc$5798$n152
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0110
.gate SB_LUT4 I0=LED1 I1=$abc$5798$n254 I2=I2C.wr I3=wr_old O=$abc$5798$n156
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000001011000000
.gate SB_LUT4 I0=I2C.is_read I1=$abc$5798$n255 I2=$false I3=$false O=$abc$5798$n254
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n256 I1=$abc$5798$n259 I2=I2C.byte_counter[1] I3=$false O=$abc$5798$n255
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10000000
.gate SB_LUT4 I0=$abc$5798$n257 I1=$abc$5798$n258_1 I2=$false I3=$false O=$abc$5798$n256
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=I2C.byte_counter[0] I1=I2C.byte_counter[2] I2=$false I3=$false O=$abc$5798$n257
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=I2C.byte_counter[4] I1=I2C.byte_counter[5] I2=I2C.byte_counter[6] I3=I2C.byte_counter[7] O=$abc$5798$n258_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=I2C.byte_counter[3] I1=I2C.byte_counter[8] I2=$false I3=$false O=$abc$5798$n259
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=$abc$5798$n254 I1=I2C.wr I2=wr_old I3=$false O=$abc$5798$n158
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00011000
.gate SB_LUT4 I0=$abc$5798$n255 I1=$0\RAM_W[0:0] I2=I2C.wr I3=wr_old O=$abc$5798$n166
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0100111101000100
.gate SB_LUT4 I0=I2C.SDAD I1=I2C.SDAF I2=$abc$5798$n25 I3=$false O=$abc$5798$n168
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01101111
.gate SB_LUT4 I0=I2C.SCLD I1=I2C.SCLF I2=$abc$5798$n27 I3=$false O=$abc$5798$n170
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01101111
.gate SB_LUT4 I0=$abc$5798$n265 I1=$abc$5798$n270 I2=$false I3=$false O=$abc$5798$n185
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n79 I1=$abc$5798$n269_1 I2=$abc$5798$n266 I3=$false O=$abc$5798$n265
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$abc$5798$n171 I3=$abc$5798$n268_1 O=$abc$5798$n266
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000100000000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.is_read I2=$false I3=$false O=$abc$5798$n267
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n9 I1=$abc$5798$n20 I2=$false I3=$false O=$abc$5798$n268_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n71 I1=$abc$5798$n92 I2=$abc$5798$n584 I3=$false O=$abc$5798$n269_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n242 I1=$abc$5798$n77 I2=I2C.i2c_bit_counter[0] I3=I2C.i2c_bit_counter[1] O=$abc$5798$n270
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000100010000
.gate SB_LUT4 I0=$abc$5798$n265 I1=$abc$5798$n272_1 I2=$false I3=$false O=$abc$5798$n195
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[0] I2=I2C.i2c_bit_counter[1] I3=$abc$5798$n77 O=$abc$5798$n272_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0001010000000000
.gate SB_LUT4 I0=$abc$5798$n265 I1=$abc$5798$n274 I2=$false I3=$false O=$abc$5798$n203
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[0] I2=I2C.i2c_bit_counter[1] I3=$abc$5798$n77 O=$abc$5798$n274
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000011101011
.gate SB_LUT4 I0=$abc$5798$n265 I1=$abc$5798$n276_1 I2=$false I3=$false O=$abc$5798$n211
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[0] I2=I2C.i2c_bit_counter[1] I3=$abc$5798$n77 O=$abc$5798$n276_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1110101100000000
.gate SB_LUT4 I0=$abc$5798$n278_1 I1=$abc$5798$n270 I2=$false I3=$false O=$abc$5798$n219
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n266 I1=$abc$5798$n269_1 I2=$abc$5798$n79 I3=$false O=$abc$5798$n278_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10000000
.gate SB_LUT4 I0=$abc$5798$n278_1 I1=$abc$5798$n272_1 I2=$false I3=$false O=$abc$5798$n226
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n278_1 I1=$abc$5798$n274 I2=$false I3=$false O=$abc$5798$n234
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n278_1 I1=$abc$5798$n276_1 I2=$false I3=$false O=$abc$5798$n241
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n283_1 I1=UART.tx_activity I2=$false I3=$false O=$abc$5798$n246
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=UART.TX_sig_last I1=UART_WR I2=$false I3=$false O=$abc$5798$n283_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=UART.tx_activity I1=$abc$5798$n283_1 I2=$false I3=$false O=$abc$5798$n247
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n288_1 I1=$abc$5798$n286_1 I2=$abc$5798$n283_1 I3=UART.tx_activity O=$abc$5798$n251
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0100010011110000
.gate SB_LUT4 I0=$abc$5798$n549 I1=$abc$5798$n288 I2=$abc$5798$n291 I3=$abc$5798$n292 O=$abc$5798$n286_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=UART.tx_clk_counter[1] I1=UART.tx_clk_counter[0] I2=$false I3=$false O=$abc$5798$n549
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1001
.gate SB_LUT4 I0=UART.tx_bit_counter[0] I1=UART.tx_bit_counter[1] I2=UART.tx_bit_counter[2] I3=UART.tx_bit_counter[3] O=$abc$5798$n288_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[1] I2=$false I3=$false O=$abc$5798$n258
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[3] I2=$false I3=$false O=$abc$5798$n260
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[4] I2=$false I3=$false O=$abc$5798$n262
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.byte_counter[5] I2=$false I3=$false O=$abc$5798$n263
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=RAM.last_we I1=RAM_W I2=$false I3=$false O=$abc$5798$n317
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[0] I1=$abc$5798$n318 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[1] I1=LED2 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][1]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10100011
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[2] I1=$abc$5798$n323 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][2]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[3] I1=$abc$5798$n325 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][3]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[4] I1=$abc$5798$n328 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][4]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[5] I1=$abc$5798$n330 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][5]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[6] I1=$abc$5798$n333 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][6]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[7] I1=$abc$5798$n336 I2=$0\RAM_W[0:0] I3=$false O=$0\ram_adress[7:0][7]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[0] I1=I2C.RECEIVED_BYTE[0] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[1] I1=I2C.RECEIVED_BYTE[1] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][1]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[2] I1=I2C.RECEIVED_BYTE[2] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][2]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[3] I1=I2C.RECEIVED_BYTE[3] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][3]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[4] I1=I2C.RECEIVED_BYTE[4] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][4]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[5] I1=I2C.RECEIVED_BYTE[5] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][5]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[6] I1=I2C.RECEIVED_BYTE[6] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][6]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=RAM.r_data[7] I1=I2C.RECEIVED_BYTE[7] I2=$abc$5798$n141 I3=$false O=$0\UART_TX_DATA[7:0][7]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[0] I2=$false I3=$false O=$abc$5798$n363
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[1] I2=$false I3=$false O=$abc$5798$n365
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[2] I2=$false I3=$false O=$abc$5798$n367
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[3] I2=$false I3=$false O=$abc$5798$n609
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=$abc$5798$n315 I1=$abc$5798$n336_1 I2=$abc$5798$n320_1 I3=$abc$5798$n326_1 O=$abc$5798$n378
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1011000011111111
.gate SB_LUT4 I0=$abc$5798$n316_1 I1=$abc$5798$n317_1 I2=$abc$5798$n318_1 I3=$abc$5798$n319_1 O=$abc$5798$n315
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=$abc$5798$n14 I1=I2C_TX[0] I2=$abc$5798$n79 I3=$abc$5798$n270 O=$abc$5798$n316_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0101110000000000
.gate SB_LUT4 I0=$abc$5798$n22 I1=I2C_TX[5] I2=$abc$5798$n79 I3=$abc$5798$n272_1 O=$abc$5798$n317_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1100010100000000
.gate SB_LUT4 I0=I2C_TX[7] I1=I2C_TX[3] I2=$abc$5798$n79 I3=$abc$5798$n276_1 O=$abc$5798$n318_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1010110000000000
.gate SB_LUT4 I0=$abc$5798$n12 I1=I2C_TX[6] I2=$abc$5798$n79 I3=$abc$5798$n274 O=$abc$5798$n319_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1100010100000000
.gate SB_LUT4 I0=$abc$5798$n322_1 I1=$abc$5798$n321 I2=$false I3=$false O=$abc$5798$n320_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$false I3=$false O=$abc$5798$n321
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n324_1 I1=$abc$5798$n323_1 I2=$abc$5798$n325_1 I3=$abc$5798$n171 O=$abc$5798$n322_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0111001100000011
.gate SB_LUT4 I0=$abc$5798$n242 I1=$abc$5798$n243 I2=I2C.SDA_DIR I3=$false O=$abc$5798$n323_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.is_ack I2=$false I3=$false O=$abc$5798$n324_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n20 I1=$abc$5798$n9 I2=$false I3=$false O=$abc$5798$n325_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n328_1 I1=$abc$5798$n327_1 I2=I2C.i2c_state_machine I3=$abc$5798$n323_1 O=$abc$5798$n326_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1011000010111011
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$false I3=$false O=$abc$5798$n327_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=$abc$5798$n329_1 I1=$abc$5798$n323_1 I2=$abc$5798$n330_1 I3=$abc$5798$n418 O=$abc$5798$n328_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1011000010111011
.gate SB_LUT4 I0=$abc$5798$n325_1 I1=$abc$5798$n171 I2=$false I3=$false O=$abc$5798$n329_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n331_1 I1=$abc$5798$n333_1 I2=$false I3=$false O=$abc$5798$n330_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=$abc$5798$n18 I1=$abc$5798$n9 I2=$abc$5798$n7 I3=$abc$5798$n332_1 O=$abc$5798$n331_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000011101111
.gate SB_LUT4 I0=I2C.byte_counter[1] I1=$abc$5798$n259 I2=$abc$5798$n258_1 I3=$abc$5798$n257 O=$abc$5798$n332_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0100000000000000
.gate SB_LUT4 I0=$abc$5798$n334_1 I1=I2C.RECEIVED_BYTE[3] I2=I2C.RECEIVED_BYTE[5] I3=I2C.RECEIVED_BYTE[6] O=$abc$5798$n333_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=I2C.RECEIVED_BYTE[1] I1=I2C.RECEIVED_BYTE[2] I2=I2C.RECEIVED_BYTE[4] I3=I2C.RECEIVED_BYTE[7] O=$abc$5798$n334_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=$abc$5798$n171 I1=$abc$5798$n325_1 I2=$false I3=$false O=$abc$5798$n336_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n338_1 I1=$abc$5798$n267 I2=$false I3=$false O=$abc$5798$n380
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n331_1 I2=$abc$5798$n418 I3=I2C.RECEIVED_BYTE[0] O=$abc$5798$n338_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0001000000000000
.gate SB_LUT4 I0=$abc$5798$n340_1 I1=$abc$5798$n363 I2=$abc$5798$n343_1 I3=$abc$5798$n344_1 O=$abc$5798$n382
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111101000000
.gate SB_LUT4 I0=$abc$5798$n341_1 I1=$abc$5798$n336_1 I2=$abc$5798$n321 I3=$false O=$abc$5798$n340_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 11100000
.gate SB_LUT4 I0=$abc$5798$n342_1 I1=$abc$5798$n171 I2=$false I3=$false O=$abc$5798$n341_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n242 I1=$abc$5798$n268_1 I2=I2C.is_ack I3=$false O=$abc$5798$n342_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$5798$n324_1 I1=$abc$5798$n329_1 I2=$abc$5798$n327_1 I3=$abc$5798$n266 O=$abc$5798$n343_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000001111111
.gate SB_LUT4 I0=$abc$5798$n345_1 I1=$abc$5798$n171 I2=$abc$5798$n77 I3=$false O=$abc$5798$n344_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$abc$5798$n9 I3=$abc$5798$n20 O=$abc$5798$n345_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111010111111
.gate SB_LUT4 I0=$abc$5798$n340_1 I1=$abc$5798$n365 I2=$abc$5798$n343_1 I3=$abc$5798$n347_1 O=$abc$5798$n384
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111101000000
.gate SB_LUT4 I0=$abc$5798$n345_1 I1=$abc$5798$n348_1 I2=$abc$5798$n171 I3=$false O=$abc$5798$n347_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00000001
.gate SB_LUT4 I0=$abc$5798$n242 I1=I2C.i2c_bit_counter[0] I2=I2C.i2c_bit_counter[1] I3=$false O=$abc$5798$n348_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010100
.gate SB_LUT4 I0=$abc$5798$n340_1 I1=$abc$5798$n367 I2=$abc$5798$n343_1 I3=$abc$5798$n350_1 O=$abc$5798$n386
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111101000000
.gate SB_LUT4 I0=$abc$5798$n345_1 I1=$abc$5798$n171 I2=$abc$5798$n79 I3=$false O=$abc$5798$n350_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$abc$5798$n354_1 I3=$false O=$abc$5798$n353
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00000001
.gate SB_LUT4 I0=$abc$5798$n325_1 I1=I2C.is_ack I2=I2C.i2c_bit_counter[3] I3=$abc$5798$n242 O=$abc$5798$n354_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000111
.gate SB_LUT4 I0=$abc$5798$n321 I1=$abc$5798$n341_1 I2=$abc$5798$n359_1 I3=$false O=$abc$5798$n358_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00000111
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n267 I2=$abc$5798$n418 I3=$false O=$abc$5798$n359_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n492 I1=$abc$5798$n422 I2=$abc$5798$n260 I3=$abc$5798$n358_1 O=$abc$5798$n396
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000011101110
.gate SB_LUT4 I0=I2C.byte_counter[6] I1=I2C.byte_counter[7] I2=I2C.byte_counter[8] I3=I2C.byte_counter[1] O=$abc$5798$n369_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000100000000
.gate SB_LUT4 I0=$abc$5798$n422 I1=$abc$5798$n493 I2=$abc$5798$n262 I3=$abc$5798$n358_1 O=$abc$5798$n398
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n422 I1=$abc$5798$n494 I2=$abc$5798$n263 I3=$abc$5798$n358_1 O=$abc$5798$n400
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n422 I1=$abc$5798$n495 I2=$abc$5798$n104 I3=$abc$5798$n358_1 O=$abc$5798$n402
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n422 I1=$abc$5798$n496 I2=$abc$5798$n105 I3=$abc$5798$n358_1 O=$abc$5798$n404
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n422 I1=$abc$5798$n497 I2=$abc$5798$n110 I3=$abc$5798$n358_1 O=$abc$5798$n406
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n376 I1=$abc$5798$n378_1 I2=$false I3=$false O=$abc$5798$n408
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1011
.gate SB_LUT4 I0=$abc$5798$n330_1 I1=$abc$5798$n418 I2=$abc$5798$n377 I3=$abc$5798$n327_1 O=$abc$5798$n376
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111010000000000
.gate SB_LUT4 I0=$abc$5798$n329_1 I1=$abc$5798$n324_1 I2=$false I3=$false O=$abc$5798$n377
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$5798$n325_1 I1=$abc$5798$n171 I2=$abc$5798$n321 I3=$abc$5798$n423 O=$abc$5798$n378_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000001111111
.gate SB_LUT4 I0=$abc$5798$n381 I1=$abc$5798$n382_1 I2=$abc$5798$n385 I3=$abc$5798$n387 O=$abc$5798$n410
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111111110010
.gate SB_LUT4 I0=$abc$5798$n321 I1=$abc$5798$n171 I2=$false I3=$false O=$abc$5798$n381
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n383 I1=$abc$5798$n384_1 I2=$abc$5798$n342_1 I3=$false O=$abc$5798$n382_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10100011
.gate SB_LUT4 I0=$abc$5798$n323_1 I1=$abc$5798$n7 I2=$false I3=$false O=$abc$5798$n383
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0001
.gate SB_LUT4 I0=$abc$5798$n242 I1=$abc$5798$n243 I2=I2C.wr I3=$false O=$abc$5798$n384_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=$abc$5798$n171 I1=$abc$5798$n325_1 I2=$abc$5798$n386_1 I3=$abc$5798$n384_1 O=$abc$5798$n385
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0001111100000000
.gate SB_LUT4 I0=$abc$5798$n329_1 I1=$abc$5798$n324_1 I2=$abc$5798$n267 I3=$abc$5798$n29 O=$abc$5798$n386_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000011111000
.gate SB_LUT4 I0=$abc$5798$n596 I1=$abc$5798$n341_1 I2=$abc$5798$n327_1 I3=$false O=$abc$5798$n387
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$5798$n341_1 I1=$abc$5798$n383 I2=$abc$5798$n389 I3=$abc$5798$n267 O=$abc$5798$n415
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0111011100001111
.gate SB_LUT4 I0=$abc$5798$n330_1 I1=$abc$5798$n418 I2=$false I3=$false O=$abc$5798$n389
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1000
.gate SB_LUT4 I0=$abc$5798$n288_1 I1=$abc$5798$n286_1 I2=$abc$5798$n283_1 I3=UART.tx_activity O=$abc$5798$n546
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0111011111110000
.gate SB_LUT4 I0=$abc$5798$n286_1 I1=$abc$5798$n288 I2=$false I3=$false O=$abc$5798$n548
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=$abc$5798$n286_1 I1=$abc$5798$n291 I2=$false I3=$false O=$abc$5798$n550
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=$abc$5798$n286_1 I1=$abc$5798$n292 I2=$false I3=$false O=$abc$5798$n551
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=UART.tx_activity I1=I2C.i2c_state_machine I2=$false I3=$false O=COM_DSR
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 1110
.gate SB_LUT4 I0=RAM.r_data[2] I1=$false I2=$false I3=$false O=$abc$5798$n1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=RAM.r_data[4] I1=$false I2=$false I3=$false O=$abc$5798$n3
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n7 I1=$false I2=$false I3=$false O=$abc$5798$n6
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n9 I1=$false I2=$false I3=$false O=$abc$5798$n8
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=RAM.r_data[1] I1=$false I2=$false I3=$false O=$abc$5798$n11
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n16 I1=$false I2=$false I3=$false O=COM_TX
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=UART.tx_activity I1=$false I2=$false I3=$false O=$abc$5798$n31
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n609 I1=$false I2=$false I3=$false O=$abc$5798$n369
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n258 I1=$false I2=$false I3=$false O=$abc$5798$n583
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n365 I1=$false I2=$false I3=$false O=$abc$5798$n585
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n594 I1=$false I2=$false I3=$false O=$abc$5798$n593
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n101 I1=$false I2=$false I3=$false O=$abc$5798$n599
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n260 I1=$false I2=$false I3=$false O=$abc$5798$n600
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n263 I1=$false I2=$false I3=$false O=$abc$5798$n601
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n104 I1=$false I2=$false I3=$false O=$abc$5798$n602
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n105 I1=$false I2=$false I3=$false O=$abc$5798$n603
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n110 I1=$false I2=$false I3=$false O=$abc$5798$n604
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n262 I1=$false I2=$false I3=$false O=$abc$5798$n605
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n595 I1=$false I2=$false I3=$false O=$abc$5798$n606
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n363 I1=$false I2=$false I3=$false O=$abc$5798$n607
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n367 I1=$false I2=$false I3=$false O=$abc$5798$n608
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n610 I1=$false I2=$false I3=$false O=$abc$5798$n611
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$5798$n612 I1=$false I2=$false I3=$false O=$abc$5798$n613
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=I2C.is_ack I1=$abc$5798$n171 I2=$abc$5798$n325_1 I3=$false O=$abc$5798$n418
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$5798$n489 I1=$abc$5798$n98 I2=$abc$5798$n420 I3=$false O=$abc$5798$n390
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=$abc$5798$n321 I1=$abc$5798$n341_1 I2=$abc$5798$n359_1 I3=$abc$5798$n422 O=$abc$5798$n420
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000011111000
.gate SB_LUT4 I0=$abc$5798$n491 I1=$abc$5798$n101 I2=$abc$5798$n420 I3=$false O=$abc$5798$n394
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10101100
.gate SB_LUT4 I0=$abc$5798$n260 I1=$abc$5798$n257 I2=$abc$5798$n369_1 I3=$abc$5798$n258_1 O=$abc$5798$n422
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=$abc$5798$n29 I1=$abc$5798$n325_1 I2=$abc$5798$n324_1 I3=$false O=$abc$5798$n423
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10110000
.gate SB_LUT4 I0=$abc$5798$n609 I1=$abc$5798$n71 I2=$abc$5798$n345_1 I3=$false O=$abc$5798$n424
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 01011100
.gate SB_LUT4 I0=$abc$5798$n345_1 I1=$abc$5798$n342_1 I2=$abc$5798$n609 I3=$abc$5798$n321 O=$abc$5798$n425
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0011000011110101
.gate SB_LUT4 I0=$abc$5798$n353 I1=$abc$5798$n425 I2=$abc$5798$n424 I3=$abc$5798$n171 O=$abc$5798$n388
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1011101111110000
.gate SB_LUT4 I0=$abc$5798$n242 I1=$abc$5798$n418 I2=$abc$5798$n341_1 I3=$abc$5798$n267 O=$abc$5798$n427
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111000001000100
.gate SB_LUT4 I0=$abc$5798$n29 I1=I2C.byte_counter[0] I2=$abc$5798$n427 I3=$abc$5798$n258 O=$abc$5798$n392
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1011111101000000
.gate SB_CARRY CI=$abc$5798$n606 CO=$auto$alumacc.cc:470:replace_alu$1306.C[2] I0=$false I1=$abc$5798$n594
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1306.C[2] CO=$auto$alumacc.cc:470:replace_alu$1306.C[3] I0=$false I1=$abc$5798$n611
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1306.C[3] CO=$abc$5798$n553 I0=$false I1=$abc$5798$n613
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$abc$5798$n607 CO=$auto$alumacc.cc:470:replace_alu$1311.C[2] I0=$false I1=$abc$5798$n585
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1311.C[2] CO=$auto$alumacc.cc:470:replace_alu$1311.C[3] I0=$false I1=$abc$5798$n608
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1311.C[3] CO=$abc$5798$n171 I0=$false I1=$abc$5798$n609
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$abc$5798$n583 CO=$auto$alumacc.cc:470:replace_alu$1316.C[3] I0=$false I1=$abc$5798$n599
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[3] CO=$auto$alumacc.cc:470:replace_alu$1316.C[4] I0=$false I1=$abc$5798$n600
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[4] CO=$auto$alumacc.cc:470:replace_alu$1316.C[5] I0=$false I1=$abc$5798$n605
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[5] CO=$auto$alumacc.cc:470:replace_alu$1316.C[6] I0=$false I1=$abc$5798$n601
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[6] CO=$auto$alumacc.cc:470:replace_alu$1316.C[7] I0=$false I1=$abc$5798$n602
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[7] CO=$auto$alumacc.cc:470:replace_alu$1316.C[8] I0=$false I1=$abc$5798$n603
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1316.C[8] CO=$abc$5798$n596 I0=$false I1=$abc$5798$n604
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$true I2=$abc$5798$n98 I3=$false O=$abc$5798$n489
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$abc$5798$n98 CO=$auto$alumacc.cc:470:replace_alu$1321.C[2] I0=$false I1=$abc$5798$n258
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n101 I3=$auto$alumacc.cc:470:replace_alu$1321.C[2] O=$abc$5798$n491
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[2] CO=$auto$alumacc.cc:470:replace_alu$1321.C[3] I0=$false I1=$abc$5798$n101
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n260 I3=$auto$alumacc.cc:470:replace_alu$1321.C[3] O=$abc$5798$n492
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[3] CO=$auto$alumacc.cc:470:replace_alu$1321.C[4] I0=$false I1=$abc$5798$n260
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n262 I3=$auto$alumacc.cc:470:replace_alu$1321.C[4] O=$abc$5798$n493
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[4] CO=$auto$alumacc.cc:470:replace_alu$1321.C[5] I0=$false I1=$abc$5798$n262
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n263 I3=$auto$alumacc.cc:470:replace_alu$1321.C[5] O=$abc$5798$n494
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[5] CO=$auto$alumacc.cc:470:replace_alu$1321.C[6] I0=$false I1=$abc$5798$n263
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n104 I3=$auto$alumacc.cc:470:replace_alu$1321.C[6] O=$abc$5798$n495
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[6] CO=$auto$alumacc.cc:470:replace_alu$1321.C[7] I0=$false I1=$abc$5798$n104
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n105 I3=$auto$alumacc.cc:470:replace_alu$1321.C[7] O=$abc$5798$n496
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1321.C[7] CO=$auto$alumacc.cc:470:replace_alu$1321.C[8] I0=$false I1=$abc$5798$n105
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n110 I3=$auto$alumacc.cc:470:replace_alu$1321.C[8] O=$abc$5798$n497
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$abc$5798$n363 I2=$false I3=$true O=$abc$5798$n77
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$abc$5798$n363 CO=$auto$alumacc.cc:470:replace_alu$1324.C[2] I0=$abc$5798$n365 I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$abc$5798$n367 I2=$true I3=$auto$alumacc.cc:470:replace_alu$1324.C[2] O=$abc$5798$n79
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1324.C[2] CO=$auto$alumacc.cc:470:replace_alu$1324.C[3] I0=$abc$5798$n367 I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$abc$5798$n369 I2=$true I3=$auto$alumacc.cc:470:replace_alu$1324.C[3] O=$abc$5798$n71
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1324.C[3] CO=$abc$5798$n584 I0=$abc$5798$n369 I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$true I3=$abc$5798$n584 O=$abc$5798$n92
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=I2C.scl_cnt[0] I2=$false I3=$true O=$abc$5798$n275
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=I2C.scl_cnt[0] CO=$auto$alumacc.cc:470:replace_alu$1327.C[2] I0=I2C.scl_cnt[1] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=I2C.scl_cnt[2] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1327.C[2] O=$abc$5798$n278
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1327.C[2] CO=$auto$alumacc.cc:470:replace_alu$1327.C[3] I0=I2C.scl_cnt[2] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=I2C.scl_cnt[3] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1327.C[3] O=$abc$5798$n279
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=I2C.sda_cnt[0] I2=$false I3=$true O=$abc$5798$n268
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=I2C.sda_cnt[0] CO=$auto$alumacc.cc:470:replace_alu$1330.C[2] I0=I2C.sda_cnt[1] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=I2C.sda_cnt[2] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1330.C[2] O=$abc$5798$n271
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1330.C[2] CO=$auto$alumacc.cc:470:replace_alu$1330.C[3] I0=I2C.sda_cnt[2] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=I2C.sda_cnt[3] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1330.C[3] O=$abc$5798$n272
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$true I2=LED1 I3=$false O=$abc$5798$n318
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=LED1 CO=$auto$alumacc.cc:470:replace_alu$1333.C[2] I0=$false I1=LED2
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=LED3 I3=$auto$alumacc.cc:470:replace_alu$1333.C[2] O=$abc$5798$n323
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1333.C[2] CO=$auto$alumacc.cc:470:replace_alu$1333.C[3] I0=$false I1=LED3
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=LED4 I3=$auto$alumacc.cc:470:replace_alu$1333.C[3] O=$abc$5798$n325
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1333.C[3] CO=$auto$alumacc.cc:470:replace_alu$1333.C[4] I0=$false I1=LED4
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=ram_adress[4] I3=$auto$alumacc.cc:470:replace_alu$1333.C[4] O=$abc$5798$n328
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1333.C[4] CO=$auto$alumacc.cc:470:replace_alu$1333.C[5] I0=$false I1=ram_adress[4]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=ram_adress[5] I3=$auto$alumacc.cc:470:replace_alu$1333.C[5] O=$abc$5798$n330
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1333.C[5] CO=$auto$alumacc.cc:470:replace_alu$1333.C[6] I0=$false I1=ram_adress[5]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=ram_adress[6] I3=$auto$alumacc.cc:470:replace_alu$1333.C[6] O=$abc$5798$n333
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1333.C[6] CO=$auto$alumacc.cc:470:replace_alu$1333.C[7] I0=$false I1=ram_adress[6]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=ram_adress[7] I3=$auto$alumacc.cc:470:replace_alu$1333.C[7] O=$abc$5798$n336
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=UART.tx_clk_counter[0] I2=$false I3=$true O=$abc$5798$n288
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=UART.tx_clk_counter[0] CO=$auto$alumacc.cc:470:replace_alu$1336.C[2] I0=UART.tx_clk_counter[1] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=UART.tx_clk_counter[2] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1336.C[2] O=$abc$5798$n291
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1336.C[2] CO=$auto$alumacc.cc:470:replace_alu$1336.C[3] I0=UART.tx_clk_counter[2] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=UART.tx_clk_counter[3] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1336.C[3] O=$abc$5798$n292
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=UART.tx_bit_counter[0] I2=$false I3=$true O=$abc$5798$n595
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=UART.tx_bit_counter[0] CO=$auto$alumacc.cc:470:replace_alu$1339.C[2] I0=UART.tx_bit_counter[1] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=UART.tx_bit_counter[2] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1339.C[2] O=$abc$5798$n610
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$1339.C[2] CO=$auto$alumacc.cc:470:replace_alu$1339.C[3] I0=UART.tx_bit_counter[2] I1=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=UART.tx_bit_counter[3] I2=$true I3=$auto$alumacc.cc:470:replace_alu$1339.C[3] O=$abc$5798$n612
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n606 I3=$true O=$abc$5798$n582
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$abc$5798$n606 CO=$auto$alumacc.cc:470:replace_alu$1342.C[2] I0=$false I1=$abc$5798$n594
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=$abc$5798$n611 I3=$auto$alumacc.cc:470:replace_alu$1342.C[2] O=$abc$5798$n568
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_DFFE C=CLK D=RAM.r_data[0] E=$abc$5798$n141 Q=I2C_TX[0]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n11 E=$abc$5798$n141 Q=$abc$5798$n22
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n1 E=$abc$5798$n141 Q=$abc$5798$n12
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=RAM.r_data[3] E=$abc$5798$n141 Q=I2C_TX[3]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n3 E=$abc$5798$n141 Q=$abc$5798$n14
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=RAM.r_data[5] E=$abc$5798$n141 Q=I2C_TX[5]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=RAM.r_data[6] E=$abc$5798$n141 Q=I2C_TX[6]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=RAM.r_data[7] E=$abc$5798$n141 Q=I2C_TX[7]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$0\RAM_W[0:0] E=$abc$5798$n152 Q=UART_WR S=$abc$5798$n141
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][0] E=$0\UART_WR[0:0] Q=UART_TX_DATA[0]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][1] E=$0\UART_WR[0:0] Q=UART_TX_DATA[1]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][2] E=$0\UART_WR[0:0] Q=UART_TX_DATA[2]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][3] E=$0\UART_WR[0:0] Q=UART_TX_DATA[3]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][4] E=$0\UART_WR[0:0] Q=UART_TX_DATA[4]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][5] E=$0\UART_WR[0:0] Q=UART_TX_DATA[5]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][6] E=$0\UART_WR[0:0] Q=UART_TX_DATA[6]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\UART_TX_DATA[7:0][7] E=$0\UART_WR[0:0] Q=UART_TX_DATA[7]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFF C=CLK D=I2C.wr Q=wr_old
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][0] E=$abc$5798$n158 Q=LED1
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][1] E=$abc$5798$n156 Q=LED2
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][2] E=$abc$5798$n158 Q=LED3
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][3] E=$abc$5798$n158 Q=LED4
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][4] E=$abc$5798$n158 Q=ram_adress[4]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][5] E=$abc$5798$n158 Q=ram_adress[5]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][6] E=$abc$5798$n158 Q=ram_adress[6]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\ram_adress[7:0][7] E=$abc$5798$n158 Q=ram_adress[7]
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\RAM_W[0:0] E=$abc$5798$n166 Q=RAM_W
.attr src "top.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFN C=CLK D=SCL Q=I2C.SCLF
.attr src "i2c_slave.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:1"
.gate SB_DFFN C=CLK D=I2C.SDA_IN Q=I2C.SDAF
.attr src "i2c_slave.v:41|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:1"
.gate SB_DFFESS C=CLK D=$abc$5798$n268 E=$abc$5798$n168 Q=I2C.sda_cnt[0] S=$abc$5798$n25
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n269 E=$abc$5798$n168 Q=I2C.sda_cnt[1] S=$abc$5798$n25
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n271 E=$abc$5798$n168 Q=I2C.sda_cnt[2] S=$abc$5798$n25
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$5798$n272 E=$abc$5798$n168 Q=I2C.sda_cnt[3] R=$abc$5798$n25
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n275 E=$abc$5798$n170 Q=I2C.scl_cnt[0] S=$abc$5798$n27
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n276 E=$abc$5798$n170 Q=I2C.scl_cnt[1] S=$abc$5798$n27
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n278 E=$abc$5798$n170 Q=I2C.scl_cnt[2] S=$abc$5798$n27
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$5798$n279 E=$abc$5798$n170 Q=I2C.scl_cnt[3] R=$abc$5798$n27
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFF C=CLK D=$abc$5798$n410 Q=I2C.wr
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n408 Q=I2C.is_ack
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n390 Q=I2C.byte_counter[0]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n392 Q=I2C.byte_counter[1]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n394 Q=I2C.byte_counter[2]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n396 Q=I2C.byte_counter[3]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n398 Q=I2C.byte_counter[4]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n400 Q=I2C.byte_counter[5]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n402 Q=I2C.byte_counter[6]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n404 Q=I2C.byte_counter[7]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n406 Q=I2C.byte_counter[8]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n382 Q=I2C.i2c_bit_counter[0]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n384 Q=I2C.i2c_bit_counter[1]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n386 Q=I2C.i2c_bit_counter[2]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n388 Q=I2C.i2c_bit_counter[3]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n380 Q=I2C.is_read
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$abc$5798$n415 Q=I2C.i2c_state_machine R=$abc$5798$n29
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n7 Q=$abc$5798$n18
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n9 Q=$abc$5798$n20
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n6 Q=I2C.SDAD
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n8 Q=I2C.SCLD
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=$abc$5798$n378 Q=I2C.SDA_DIR
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n185 Q=I2C.RECEIVED_BYTE[0]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n195 Q=I2C.RECEIVED_BYTE[1]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n203 Q=I2C.RECEIVED_BYTE[2]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n211 Q=I2C.RECEIVED_BYTE[3]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n219 Q=I2C.RECEIVED_BYTE[4]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n226 Q=I2C.RECEIVED_BYTE[5]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n234 Q=I2C.RECEIVED_BYTE[6]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$abc$5798$n6 E=$abc$5798$n241 Q=I2C.RECEIVED_BYTE[7]
.attr src "i2c_slave.v:46|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFF C=CLK D=$abc$5798$n546 Q=UART.tx_activity
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFE C=CLK D=$abc$5798$n5 E=$abc$5798$n251 Q=$abc$5798$n16
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[0] E=$abc$5798$n247 Q=UART.tx_data[0]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[1] E=$abc$5798$n247 Q=UART.tx_data[1]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[2] E=$abc$5798$n247 Q=UART.tx_data[2]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[3] E=$abc$5798$n247 Q=UART.tx_data[3]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[4] E=$abc$5798$n247 Q=UART.tx_data[4]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[5] E=$abc$5798$n247 Q=UART.tx_data[5]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[6] E=$abc$5798$n247 Q=UART.tx_data[6]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=UART_TX_DATA[7] E=$abc$5798$n247 Q=UART.tx_data[7]
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n548 E=$abc$5798$n246 Q=UART.tx_clk_counter[0] S=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$5798$n549 E=$abc$5798$n246 Q=UART.tx_clk_counter[1] R=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n550 E=$abc$5798$n246 Q=UART.tx_clk_counter[2] S=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n551 E=$abc$5798$n246 Q=UART.tx_clk_counter[3] S=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n595 E=$abc$5798$n251 Q=UART.tx_bit_counter[0] S=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$5798$n593 E=$abc$5798$n251 Q=UART.tx_bit_counter[1] R=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$5798$n610 E=$abc$5798$n251 Q=UART.tx_bit_counter[2] R=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESS C=CLK D=$abc$5798$n612 E=$abc$5798$n251 Q=UART.tx_bit_counter[3] S=$abc$5798$n31
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFF C=CLK D=UART_WR Q=UART.TX_sig_last
.attr src "uart.v:17|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=CLK D=RAM_W Q=RAM.last_we
.attr src "ram.v:8|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_IO D_IN_0=I2C.SDA_IN D_OUT_0=$false OUTPUT_ENABLE=I2C.SDA_DIR PACKAGE_PIN=SDA
.attr src "i2c_slave.v:163"
.param PIN_TYPE 101001
.param PULLUP 0
.gate SB_RAM40_4K MASK[0]=$undef MASK[1]=$undef MASK[2]=$undef MASK[3]=$undef MASK[4]=$undef MASK[5]=$undef MASK[6]=$undef MASK[7]=$undef MASK[8]=$undef MASK[9]=$undef MASK[10]=$undef MASK[11]=$undef MASK[12]=$undef MASK[13]=$undef MASK[14]=$undef MASK[15]=$undef RADDR[0]=LED1 RADDR[1]=LED2 RADDR[2]=LED3 RADDR[3]=LED4 RADDR[4]=ram_adress[4] RADDR[5]=ram_adress[5] RADDR[6]=ram_adress[6] RADDR[7]=ram_adress[7] RADDR[8]=$false RADDR[9]=$false RADDR[10]=$false RCLK=CLK RCLKE=$true RDATA[0]=RAM.r_data[0] RDATA[1]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[1] RDATA[2]=RAM.r_data[1] RDATA[3]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[3] RDATA[4]=RAM.r_data[2] RDATA[5]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[5] RDATA[6]=RAM.r_data[3] RDATA[7]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[7] RDATA[8]=RAM.r_data[4] RDATA[9]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[9] RDATA[10]=RAM.r_data[5] RDATA[11]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[11] RDATA[12]=RAM.r_data[6] RDATA[13]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[13] RDATA[14]=RAM.r_data[7] RDATA[15]=$techmap1352\RAM.mem.0.0.0.A1DATA_16[15] RE=$true WADDR[0]=LED1 WADDR[1]=LED2 WADDR[2]=LED3 WADDR[3]=LED4 WADDR[4]=ram_adress[4] WADDR[5]=ram_adress[5] WADDR[6]=ram_adress[6] WADDR[7]=ram_adress[7] WADDR[8]=$false WADDR[9]=$false WADDR[10]=$false WCLK=CLK WCLKE=$abc$5798$n317 WDATA[0]=I2C.RECEIVED_BYTE[0] WDATA[1]=$undef WDATA[2]=I2C.RECEIVED_BYTE[1] WDATA[3]=$undef WDATA[4]=I2C.RECEIVED_BYTE[2] WDATA[5]=$undef WDATA[6]=I2C.RECEIVED_BYTE[3] WDATA[7]=$undef WDATA[8]=I2C.RECEIVED_BYTE[4] WDATA[9]=$undef WDATA[10]=I2C.RECEIVED_BYTE[5] WDATA[11]=$undef WDATA[12]=I2C.RECEIVED_BYTE[6] WDATA[13]=$undef WDATA[14]=I2C.RECEIVED_BYTE[7] WDATA[15]=$undef WE=$true
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/brams_map.v:277|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/brams_map.v:35"
.param INIT_0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1x1x1x1x1x1x1x1
.param INIT_1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_2 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_A xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_B xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_C xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_D xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_E xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param INIT_F xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
.param READ_MODE 00000000000000000000000000000001
.param WRITE_MODE 00000000000000000000000000000001
.names I2C.is_read ACK
1 1
.names $undef COM_DCD
1 1
.names I2C.is_read COM_RTS
1 1
.names I2C_TX[0] I2C.BYTE_TO_TRANSMIT[0]
1 1
.names I2C_TX[3] I2C.BYTE_TO_TRANSMIT[3]
1 1
.names I2C_TX[5] I2C.BYTE_TO_TRANSMIT[5]
1 1
.names I2C_TX[6] I2C.BYTE_TO_TRANSMIT[6]
1 1
.names I2C_TX[7] I2C.BYTE_TO_TRANSMIT[7]
1 1
.names CLK I2C.CLK
1 1
.names I2C.byte_counter[0] I2C.COUNTER[0]
1 1
.names I2C.byte_counter[1] I2C.COUNTER[1]
1 1
.names I2C.byte_counter[2] I2C.COUNTER[2]
1 1
.names I2C.byte_counter[3] I2C.COUNTER[3]
1 1
.names I2C.byte_counter[4] I2C.COUNTER[4]
1 1
.names I2C.byte_counter[5] I2C.COUNTER[5]
1 1
.names I2C.byte_counter[6] I2C.COUNTER[6]
1 1
.names I2C.byte_counter[7] I2C.COUNTER[7]
1 1
.names I2C.byte_counter[8] I2C.COUNTER[8]
1 1
.names I2C.is_ack I2C.IS_ACK
1 1
.names I2C.is_read I2C.IS_READ
1 1
.names I2C.i2c_state_machine I2C.IS_TRANSMISSION
1 1
.names SCL I2C.SCL
1 1
.names SDA I2C.SDA
1 1
.names I2C.wr I2C.WR
1 1
.names I2C.is_ack I2C_ACK
1 1
.names I2C.byte_counter[0] I2C_COUNTER[0]
1 1
.names I2C.byte_counter[1] I2C_COUNTER[1]
1 1
.names I2C.byte_counter[2] I2C_COUNTER[2]
1 1
.names I2C.byte_counter[3] I2C_COUNTER[3]
1 1
.names I2C.byte_counter[4] I2C_COUNTER[4]
1 1
.names I2C.byte_counter[5] I2C_COUNTER[5]
1 1
.names I2C.byte_counter[6] I2C_COUNTER[6]
1 1
.names I2C.byte_counter[7] I2C_COUNTER[7]
1 1
.names I2C.byte_counter[8] I2C_COUNTER[8]
1 1
.names $false I2C_COUNTER[9]
1 1
.names I2C.is_read I2C_READ
1 1
.names I2C.RECEIVED_BYTE[0] I2C_RX[0]
1 1
.names I2C.RECEIVED_BYTE[1] I2C_RX[1]
1 1
.names I2C.RECEIVED_BYTE[2] I2C_RX[2]
1 1
.names I2C.RECEIVED_BYTE[3] I2C_RX[3]
1 1
.names I2C.RECEIVED_BYTE[4] I2C_RX[4]
1 1
.names I2C.RECEIVED_BYTE[5] I2C_RX[5]
1 1
.names I2C.RECEIVED_BYTE[6] I2C_RX[6]
1 1
.names I2C.RECEIVED_BYTE[7] I2C_RX[7]
1 1
.names I2C.i2c_state_machine I2C_TRANS
1 1
.names I2C.BYTE_TO_TRANSMIT[1] I2C_TX[1]
1 1
.names I2C.BYTE_TO_TRANSMIT[2] I2C_TX[2]
1 1
.names I2C.BYTE_TO_TRANSMIT[4] I2C_TX[4]
1 1
.names I2C.wr I2C_WR
1 1
.names I2C.i2c_state_machine LED5
1 1
.names LED1 RAM.addr[0]
1 1
.names LED2 RAM.addr[1]
1 1
.names LED3 RAM.addr[2]
1 1
.names LED4 RAM.addr[3]
1 1
.names ram_adress[4] RAM.addr[4]
1 1
.names ram_adress[5] RAM.addr[5]
1 1
.names ram_adress[6] RAM.addr[6]
1 1
.names ram_adress[7] RAM.addr[7]
1 1
.names $false RAM.addr[8]
1 1
.names CLK RAM.clk
1 1
.names RAM.r_data[0] RAM.rdata[0]
1 1
.names RAM.r_data[1] RAM.rdata[1]
1 1
.names RAM.r_data[2] RAM.rdata[2]
1 1
.names RAM.r_data[3] RAM.rdata[3]
1 1
.names RAM.r_data[4] RAM.rdata[4]
1 1
.names RAM.r_data[5] RAM.rdata[5]
1 1
.names RAM.r_data[6] RAM.rdata[6]
1 1
.names RAM.r_data[7] RAM.rdata[7]
1 1
.names I2C.RECEIVED_BYTE[0] RAM.wdata[0]
1 1
.names I2C.RECEIVED_BYTE[1] RAM.wdata[1]
1 1
.names I2C.RECEIVED_BYTE[2] RAM.wdata[2]
1 1
.names I2C.RECEIVED_BYTE[3] RAM.wdata[3]
1 1
.names I2C.RECEIVED_BYTE[4] RAM.wdata[4]
1 1
.names I2C.RECEIVED_BYTE[5] RAM.wdata[5]
1 1
.names I2C.RECEIVED_BYTE[6] RAM.wdata[6]
1 1
.names I2C.RECEIVED_BYTE[7] RAM.wdata[7]
1 1
.names RAM_W RAM.wen
1 1
.names RAM.r_data[0] RAM_RD[0]
1 1
.names RAM.r_data[1] RAM_RD[1]
1 1
.names RAM.r_data[2] RAM_RD[2]
1 1
.names RAM.r_data[3] RAM_RD[3]
1 1
.names RAM.r_data[4] RAM_RD[4]
1 1
.names RAM.r_data[5] RAM_RD[5]
1 1
.names RAM.r_data[6] RAM_RD[6]
1 1
.names RAM.r_data[7] RAM_RD[7]
1 1
.names CLK UART.CLK
1 1
.names UART.tx_activity UART.TX_ACTIVITY
1 1
.names UART_TX_DATA[0] UART.TX_BYTE[0]
1 1
.names UART_TX_DATA[1] UART.TX_BYTE[1]
1 1
.names UART_TX_DATA[2] UART.TX_BYTE[2]
1 1
.names UART_TX_DATA[3] UART.TX_BYTE[3]
1 1
.names UART_TX_DATA[4] UART.TX_BYTE[4]
1 1
.names UART_TX_DATA[5] UART.TX_BYTE[5]
1 1
.names UART_TX_DATA[6] UART.TX_BYTE[6]
1 1
.names UART_TX_DATA[7] UART.TX_BYTE[7]
1 1
.names COM_TX UART.TX_LINE
1 1
.names UART_WR UART.TX_SIGNAL
1 1
.names COM_TX UART.tx_line
1 1
.names UART.tx_activity UART_ACTIVE
1 1
.names COM_TX UART_TX_LINE
1 1
.names LED1 ram_adress[0]
1 1
.names LED2 ram_adress[1]
1 1
.names LED3 ram_adress[2]
1 1
.names LED4 ram_adress[3]
1 1
.end

@ -1,173 +0,0 @@
module i2c_slave (input CLK,
input SCL, inout SDA,
output IS_TRANSMISSION, output IS_READ, output IS_ACK, output WR, //output ACK_MASTER_CTRL,
output reg [7:0] RECEIVED_BYTE, input [7:0] BYTE_TO_TRANSMIT,
output [(MAX_I2C_TRANSACTION_EXP2-1):0] COUNTER);
// ALL OPERATIONS WITH MEMORY ARE IN POSEDGE CLK, IN NEGEDGE - ONLY SCL AND SDA LATCH
// COUNTER = 0 - ADRESS RECEIVED, COUNTER >=1 - DATA TRANSMISSION
// RECEIVED BYTES MUST READ WHEN WR POSEDGE, ADRESS NOT READING ###AND BYTE COUNTER >=1 (BYTE COUNTER = 0 - ADRESS)
// BYTES TO TRANSMIT MUST WRITE WHEN WR POSEDGE, BYTE COUNTER CAN BE ZERO
// (FIRST BYTE TRANSMITTED AFTER ADRESS).
// LAST BYTE HAS NO WR ####BUT LAST BYTE NOT TRANSMITTED (DECAUSE MASTER STOPS TRANSMIT)
parameter I2C_ADRESS = 7'h34;
parameter MAX_I2C_TRANSACTION_EXP2 = 9; // !!! - FOR LIMIT BYTES TO TX/RX (WITH ADRESS)
reg SDA_IN, SDA_DIR, SDA_OUT;
initial begin
SDA_OUT = 0;
end
reg SCLD, SDAD;
reg SCL_LAST, SDA_LAST;
reg i2c_state_machine;
initial begin
SCL_LAST = 1; SDA_LAST = 1; i2c_state_machine = 0;
end
reg is_read;
reg [3:0] i2c_bit_counter;
//reg [7:0] received_byte;
reg [7:0] byte_to_transmit;
reg [(MAX_I2C_TRANSACTION_EXP2-1):0] byte_counter;
//reg is_for_me;
reg is_ack;
reg wr;//reg ack_master_ctrl;
// FILTER
reg SCLF, SDAF;
reg [3:0] scl_cnt, sda_cnt;
always@(negedge CLK) begin
SCLF = SCL;
SDAF = SDA_IN;
end
always@(posedge CLK) begin
if (scl_cnt != 0) begin
scl_cnt = scl_cnt - 1;
if (scl_cnt == 0) begin
if (SCLD != SCLF)
SCLD = SCLF;
end
end
else begin
if (SCLD != SCLF)
scl_cnt = 3'd7;
end
if (sda_cnt != 0) begin
sda_cnt = sda_cnt - 1;
if (sda_cnt == 0) begin
if (SDAD != SDAF)
SDAD = SDAF;
end
end
else begin
if (SDAD != SDAF)
sda_cnt = 3'd7;
end
// END OF FILTER
//SDA_IN = SDA; // FOR IVERILOG
if ((SDAD == 0) && (SDA_LAST == 1) && (SCLD == 1)) begin
i2c_state_machine = 1;
i2c_bit_counter = 4'd8;
byte_counter = 9'd0;
is_read = 0;
//is_for_me = 1; // RESETS TO ZERO WHEN ADRESS CHECKING
SDA_DIR = 0;
is_ack = 0;
//ack_master_ctrl = 1;
wr = 0;
end
if ((SDAD == 1) && (SDA_LAST == 0) && (SCLD == 1)) begin
i2c_state_machine = 0;
SDA_DIR = 0;
wr = 0;
end
if (i2c_state_machine/* && is_for_me*/) begin
if (!is_read) begin
if (i2c_bit_counter > 0) begin
if ((SCL_LAST == 0) && (SCLD == 1)) begin
RECEIVED_BYTE[i2c_bit_counter-1] = SDAD;
i2c_bit_counter = i2c_bit_counter - 1;
end
end
else begin
if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 0)) begin
if (byte_counter == 0) begin
if (RECEIVED_BYTE[7:1] != I2C_ADRESS)
i2c_state_machine = 0; //is_for_me = 0;
is_read = RECEIVED_BYTE[0];
end
else begin
// EMIT SIGNAL OF BYTE RECEIVING
end
if (byte_counter != (2^MAX_I2C_TRANSACTION_EXP2 - 1))
byte_counter = byte_counter + 1;
SDA_DIR = i2c_state_machine; //is_for_me;
is_ack = i2c_state_machine; //1;
//if (is_read) begin
// i2c_bit_counter = 8;
//end
end
else if ((SCL_LAST == 0) && (SCLD == 1) && (is_ack == 1) && (byte_counter > 1))
wr = 1;
else if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 1)) begin
is_ack = 0;
SDA_DIR = 0;
i2c_bit_counter = 4'd8;
wr = 0;
end
end
end
else begin // IS_READ
if (i2c_bit_counter > 0) begin
if ((SCL_LAST == 1) && (SCLD == 0)) begin
wr = 0;
SDA_DIR = (BYTE_TO_TRANSMIT[i2c_bit_counter-1] ^ 1) /*& is_for_me & ack_master_ctrl*/;
i2c_bit_counter = i2c_bit_counter - 1;
is_ack = 0;
end
end
else begin
if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 0)) begin
SDA_DIR = 0;
is_ack = 1;
end
else if ((SCL_LAST == 0) && (SCLD == 1) && (is_ack == 1)) begin
i2c_bit_counter = 8;
i2c_state_machine = (SDAD ^ 1) | SDA_DIR; //ack_master_ctrl = SDAD+1; // MAYBE TRANSMIT BYTE REPEAT
wr = (SDAD ^ 1) | SDA_DIR;
if (byte_counter != (2^MAX_I2C_TRANSACTION_EXP2 - 1))
byte_counter = byte_counter + 1;
// EMIT SIGNAL OF BYTE TO TRANSMIT
end
end
end
end
SCL_LAST <= SCLD;
SDA_LAST <= SDAD;
//SDA_OUT = (SDA_DIR ^ 1) & SDA; // FOR IVERILOG
end
assign IS_TRANSMISSION = i2c_state_machine;
//assign SDA = SDA_DIR ? 1'b0 : 1'bz;
assign IS_ACK = is_ack;
assign IS_READ = is_read;
assign WR = wr;//assign ACK_MASTER_CTRL = ack_master_ctrl;
//assign RECEIVED_BYTE = received_byte;
//assign BYTE_TO_TRANSMIT = byte_to_transmit;
assign COUNTER = byte_counter;
SB_IO #(
.PIN_TYPE(6'b 1010_01),
.PULLUP(1'b 0)
) led_io (
.PACKAGE_PIN(SDA),
.OUTPUT_ENABLE(SDA_DIR),
.D_OUT_0(SDA_OUT),
.D_IN_0(SDA_IN)
);
endmodule

@ -1,26 +0,0 @@
set_io LED1 99
set_io LED2 98
set_io LED3 97
set_io LED4 96
set_io LED5 95
#set_io SCLM 78 # J2, 1
#set_io SDAM 87 # J2, 7
set_io ACK 81 # J2, 4
#set_io SCLTGL01 80 # J2, 3
#set_io SDAOUTM 79 # J2, 2
#set_io SCLTGL 79 # J2, 8
set_io CLK 21
set_io SCL 90 # J2, 9
set_io SDA 91 # J2, 10
# GND - J2, 11
set_io COM_TX 8
set_io COM_RX 9
set_io COM_DCD 1
set_io COM_DSR 2
set_io COM_RTS 4 # IS CTS IN FT2232 SIDE
#set_io SDA_CTRL 88 # J2, 8

@ -1,112 +0,0 @@
module top (input CLK, output LED1, LED2, LED3, LED4, LED5,
input SCL, inout SDA, output ACK,
input COM_RX, output COM_TX, COM_DCD, COM_DSR, COM_RTS);
reg [7:0] I2C_TX; // TRANSMITTED TO MASTER
initial begin
I2C_TX = 22;
end
wire [7:0] I2C_RX; // RECEIVED FROM MASTER
wire [7:0] RAM_RD;
wire I2C_TRANS, I2C_READ, I2C_ACK, I2C_ACK_MSTR_CTRL, I2C_WR;
wire [9:0] I2C_COUNTER;
i2c_slave I2C (CLK, SCL, SDA, I2C_TRANS, I2C_READ, I2C_ACK, I2C_WR, //I2C_ACK_MSTR_CTRL,
I2C_RX, I2C_TX, I2C_COUNTER);
reg UART_WR, UART_DTR, UART_RTS, UART_DCD;
reg [7:0] UART_TX_DATA;
wire UART_ACTIVE, UART_TX_LINE;
reg [23:0] uart_counter;
initial begin
UART_WR = 0;
UART_TX = 1;
UART_RTS = 1;
UART_DTR = 0;
UART_DCD = 0;
end
uart UART (CLK, UART_WR, UART_TX_DATA, UART_ACTIVE, UART_TX_LINE);
reg wr_old;
reg [7:0] ram_adress;
reg RAM_W;
initial begin
ram_adress = 0;
RAM_W = 0;
end
ram RAM (CLK, RAM_W, ram_adress, I2C_RX, RAM_RD);
always @ (posedge CLK) begin
if ((wr_old == 0) && (I2C_WR == 1) && I2C_READ) begin
//I2C_TX = I2C_TX + 5;
// READ
I2C_TX = RAM_RD; // READ FROM CURRENT ADRESS
//ram_adress <= ram_adress + 1; // AND INCREMENT ADRESS (ASSIGNED IN THE NEXT TACT)
UART_WR = 1;
UART_TX_DATA = I2C_TX;
end
else if ((wr_old == 0) && (I2C_WR == 1) && (I2C_READ == 0)) begin
// RAM MODULE WRITES TO RAM IN THE CURRENT ADRESS
if (I2C_COUNTER == 2)
ram_adress = I2C_RX;
else begin
RAM_W = 1;
//ram_adress <= ram_adress + 1; // ONLY INCREMENT ADRESS IN THE NEXT TACT
end
UART_WR = 1;
UART_TX_DATA = I2C_RX;
end
else if ((wr_old == 1) && (I2C_WR == 0)) begin
RAM_W = 0;
UART_WR = 0;
if ((I2C_COUNTER != 2) || (I2C_READ == 1))
ram_adress <= ram_adress + 1; // ONLY INCREMENT ADRESS IN THE NEXT TACT
end
wr_old = I2C_WR;
/*
uart_counter = uart_counter + 1;
if (uart_counter == 12000000) begin
uart_counter = 0;
UART_TX_DATA = UART_TX_DATA + 1;
UART_WR = 1;
UART_RTS = UART_RTS ^ 1;
if (UART_RTS)
UART_DTR = UART_DTR ^ 1;
if (UART_DTR == 1)
UART_DCD = UART_DCD ^ 1;
end
else if (uart_counter == 5)
UART_WR = 0;*/
end
assign I2C_W = I2C_WR & (I2C_READ ^ 1);
assign LED5 = I2C_TRANS;
//assign LED5 = COM_RX;
assign LED1 = ram_adress[0];//I2C_RX[0];
assign LED2 = ram_adress[1];
assign LED3 = ram_adress[2];
assign LED4 = ram_adress[3];
assign ACK = I2C_READ;//I2C_WR; //I2C_ACK;
assign COM_TX = UART_TX_LINE;//COM_RX;
//assign COM_RTS = I2C_READ;
assign COM_RTS = I2C_READ;//UART_RTS;
assign COM_DSR = I2C_TRANS | UART_ACTIVE;//UART_DTR;
//assign COM_DCD = UART_DCD;
/* reg [24:0] counter;
always @ (posedge CLK) begin
counter = counter + 1;
end
assign LED1 = ~counter[24] & ~counter[23];
assign LED2 = ~counter[24] & counter[23];
assign LED3 = counter[24] & ~counter[23];
assign LED4 = counter[24] & counter[23];
assign LED5 = counter[23];*/
endmodule //top

@ -1,48 +0,0 @@
module uart ( input CLK, input TX_SIGNAL, input [7:0] TX_BYTE,
output TX_ACTIVITY, output TX_LINE);
parameter CLK_DIV = 13;
reg TX_sig_last;
reg [3:0] tx_bit_counter;
reg [3:0] tx_clk_counter; // MUST CONTAIN CLK DIV
reg [7:0] tx_data;
reg tx_activity;
reg tx_line;
initial begin
TX_sig_last = 0;
tx_line = 1;
end
always @ (posedge CLK) begin
if (tx_activity) begin
tx_clk_counter = tx_clk_counter - 1;
if (tx_clk_counter == 0) begin
tx_clk_counter = CLK_DIV;
if (tx_bit_counter == 0)
tx_activity = 0;
else begin
tx_bit_counter = tx_bit_counter - 1;
if (tx_bit_counter > 0)
tx_line = tx_data[8-tx_bit_counter];
else
tx_line = 1; // STOP_BIT
end
end
end
else begin
if ((TX_SIGNAL == 1) && (TX_sig_last == 0)) begin
tx_data = TX_BYTE;
tx_activity = 1;
tx_bit_counter = 9; // NO PARITY, STOP 1 BIT
tx_clk_counter = CLK_DIV;
tx_line = 0; // START BIT
end
end
TX_sig_last = TX_SIGNAL;
end
assign TX_LINE = tx_line;
assign TX_ACTIVITY = tx_activity;
endmodule

Binary file not shown.

@ -0,0 +1,9 @@
rot.bin: top.v inouts.pcf
yosys -q -p "synth_ice40 -blif i2c_kbd_alt.blif" top.v i2c_slave.v matrix_kbd.v ram.v simple_filter.v uart.v descriptors.v
arachne-pnr -p inouts.pcf i2c_kbd_alt.blif -o i2c_kbd_alt.txt
icebox_explain i2c_kbd_alt.txt > i2c_kbd_alt.ex
icepack i2c_kbd_alt.txt i2c_kbd_alt.bin
clean:
rm -f i2c_kbd_alt.blif i2c_kbd_alt.txt i2c_kbd_alt.ex i2c_kbd_alt.bin

@ -0,0 +1,150 @@
module descriptors (input CLK, input RESET, input RD_REQUEST, input [1:0] DESC_TYPE, input [7:0] ADR, output reg [7:0] VAL/*, input [63:0] kbd_report*/);
parameter HID_REPORT_DESC_LEN = 63;
//reg [(8*30-1):0] i2c_hid_desc;// = 'h_1E_00__00_01__46_00__02_00__03_00__0A_00__04_00__03_00__05_00__06_00__9F_04__01_01__00_01__00_00_00_00;
//reg [(8*HID_REPORT_DESC_LEN-1):0] hid_report_desc;
parameter READ_ADRESS_OFFSET = 2;
reg last_rd_request = 0;
always @ (posedge CLK) begin
if (RESET == 0) begin
//i2c_hid_desc <= 'h_1E_00__00_01__50_00__02_00__03_00__0A_00__04_00__03_00__05_00__06_00__9F_04__01_01__00_01__00_00_00_00;
//hid_report_desc <= 'h__05_01__09_06__A1_01__05_07__85_01___19_E0__29_E7__15_00__25_01__75_01__95_08__81_02___95_01__75_08__81_01___95_05__75_01__05_05__85_01__19_01__29_05__91_02___95_01__75_03__91_03___95_06__75_08__15_00__25_65__05_07__19_00__29_65__81_00__C0;
//i2c_hid_desc [207:200] <= HID_REPORT_DESC_LEN[7:0];
//i2c_hid_desc [199:192] <= HID_REPORT_DESC_LEN[15:8];
last_rd_request <= 0;
end
else begin
if ((last_rd_request == 0) && (RD_REQUEST == 1)) begin
if (DESC_TYPE == 1) begin
case (ADR) 2: VAL <= 8'h1E; 3: VAL <= 0; // 2-3 - DESCR LEN (30),
4: VAL <= 0; 5: VAL <= 1; // 4-5 - bcdVersion
6: VAL <= HID_REPORT_DESC_LEN[7:0]; 7: VAL <= HID_REPORT_DESC_LEN[15:8];
8: VAL <= 2; 9: VAL <= 0; // 8-9 - REPORT DESC ADR
10: VAL <= 3; 11: VAL <= 0; // 10-11 - INPUT REG ADR
12: VAL <= 10; 13: VAL <= 0; // 12-13 - INPUT REG LEN
14: VAL <= 4; 15: VAL <= 0; // 14-15 - OUT REG ADR
16: VAL <= 3; 17: VAL <= 0; // 16-17 - OUT REG LEN
18: VAL <= 5; 19: VAL <= 0; // 18-19 - CMD REG ADR
20: VAL <= 6; 21: VAL <= 0; // 20-21 - DATA REG ADR
22: VAL <= 8'h9F; 23: VAL <= 4; // 22-23 - VENDOR ID
24: VAL <= 1; 25: VAL <= 1; // 24-25 - DEVICE ID
26: VAL <= 0; 27: VAL <= 1; // 26-27 - VERSION
28: VAL <= 0; 29: VAL <= 0; 30: VAL <= 0; 31: VAL <= 0; // 28-31 - RSVD
default: VAL <= 0;
endcase
end
else if (DESC_TYPE == 2) begin
case (ADR) 2: VAL <= 8'h05; 3: VAL <= 8'h01;
4: VAL <= 8'h09; 5: VAL <= 8'h06;
6: VAL <= 8'hA1; 7: VAL <= 8'h01;
8: VAL <= 8'h05; 9: VAL <= 8'h07;
//10: VAL <= 8'h85; 11: VAL <= 8'h01;
// MODIFIERS DESC
10: VAL <= 8'h19; 11: VAL <= 8'hE0;
12: VAL <= 8'h29; 13: VAL <= 8'hE7;
14: VAL <= 8'h15; 15: VAL <= 8'h00;
16: VAL <= 8'h25; 17: VAL <= 8'h01;
18: VAL <= 8'h75; 19: VAL <= 8'h01;
20: VAL <= 8'h95; 21: VAL <= 8'h08;
22: VAL <= 8'h81; 23: VAL <= 8'h02;
// RESERVED BYTE
24: VAL <= 8'h95; 25: VAL <= 8'h01;
26: VAL <= 8'h75; 27: VAL <= 8'h08;
28: VAL <= 8'h81; 29: VAL <= 8'h01;
// LEDS
30: VAL <= 8'h95; 31: VAL <= 8'h05;
32: VAL <= 8'h75; 33: VAL <= 8'h01;
34: VAL <= 8'h05; 35: VAL <= 8'h08;
36: VAL <= 8'h19; 37: VAL <= 8'h01;
38: VAL <= 8'h29; 39: VAL <= 8'h05;
40: VAL <= 8'h91; 41: VAL <= 8'h02;
// RESERVED 3 BITS
42: VAL <= 8'h95; 43: VAL <= 8'h01;
44: VAL <= 8'h75; 45: VAL <= 8'h03;
46: VAL <= 8'h91; 47: VAL <= 8'h03;
// SIX KEYS (NON-MODIFIERS)
48: VAL <= 8'h95; 49: VAL <= 8'h06;
50: VAL <= 8'h75; 51: VAL <= 8'h08;
52: VAL <= 8'h15; 53: VAL <= 8'h00;
54: VAL <= 8'h25; 55: VAL <= 8'h65;
56: VAL <= 8'h05; 57: VAL <= 8'h07;
58: VAL <= 8'h19; 59: VAL <= 8'h00;
60: VAL <= 8'h29; 61: VAL <= 8'h65;
62: VAL <= 8'h81; 63: VAL <= 8'h00;
// END COLLECTION
64: VAL <= 8'hC0;
default: VAL <= 0;
endcase
end
/*if (READ_TYPE == 1) begin
if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + 30 - 1)))
VAL <= 0;
else
VAL <= i2c_hid_desc[ (8 * (30 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (30 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ];
end*/
/*else if (READ_TYPE == 2) begin
if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + HID_REPORT_DESC_LEN - 1)))
VAL <= 0;
else
VAL <= hid_report_desc[ (8 * (HID_REPORT_DESC_LEN - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (HID_REPORT_DESC_LEN - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ];
end*/
/*else if (READ_TYPE == 3) begin
if ((READ_ADRESS < READ_ADRESS_OFFSET) || (READ_ADRESS > (READ_ADRESS_OFFSET + 10 - 1)))
VAL <= 0;
else if (READ_ADRESS == READ_ADRESS_OFFSET)
VAL <= 10;
else if (READ_ADRESS == (READ_ADRESS_OFFSET + 1))
VAL <= 0;
else
VAL <= kbd_report[ (8 * (10 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 7) : (8 * (10 - READ_ADRESS + READ_ADRESS_OFFSET - 1) + 0) ];
end*/
end
last_rd_request <= RD_REQUEST;
end
end
endmodule
//static const uint8 hid_descriptor_keyboard[] = {
//****/ 0x05, 0x01, /* USAGE_PAGE (Generic Desktop) */ 2
//****/ 0x09, 0x06, /* USAGE (Keyboard) */ 4
//****/ 0xa1, 0x01, /* COLLECTION (Application) */ 6
//******/ 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ 8
//******/ 0x85, 0x01, /* REPORT_ID (1) */ 10
/* Ctrl, Shift and other modifier keys, 8 in total */
//******/ 0x19, 0xe0, /* USAGE_MINIMUM (kbd LeftControl) */ 12
//******/ 0x29, 0xe7, /* USAGE_MAXIMUM (kbd Right GUI) */ 14
//******/ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 16
//******/ 0x25, 0x01, /* LOGICAL_MAXIMUM (1) */ 18
//******/ 0x75, 0x01, /* REPORT_SIZE (1) */ 20
//******/ 0x95, 0x08, /* REPORT_COUNT (8) */ 22
//******/ 0x81, 0x02, /* INPUT (Data,Var,Abs) */ 24
/* Reserved byte */
//******/ 0x95, 0x01, /* REPORT_COUNT (1) */ 26
//******/ 0x75, 0x08, /* REPORT_SIZE (8) */ 28
//******/ 0x81, 0x01, /* INPUT (Cnst,Ary,Abs) */ 30
/* LEDs for num lock etc */
//******/ 0x95, 0x05, /* REPORT_COUNT (5) */ 32
//******/ 0x75, 0x01, /* REPORT_SIZE (1) */ 34
//******/ 0x05, 0x08, /* USAGE_PAGE (LEDs) */ 36
//******/ 0x85, 0x01, /* REPORT_ID (1) */ 38
//******/ 0x19, 0x01, /* USAGE_MINIMUM (Num Lock) */ 40
//******/ 0x29, 0x05, /* USAGE_MAXIMUM (Kana) */ 42
//******/ 0x91, 0x02, /* OUTPUT (Data,Var,Abs) */ 44
/* Reserved 3 bits */
//******/ 0x95, 0x01, /* REPORT_COUNT (1) */ 46
//******/ 0x75, 0x03, /* REPORT_SIZE (3) */ 48
//******/ 0x91, 0x03, /* OUTPUT (Cnst,Var,Abs) */ 50
/* Slots for 6 keys that can be pressed down at the same time */
//******/ 0x95, 0x06, /* REPORT_COUNT (6) */ 52
//******/ 0x75, 0x08, /* REPORT_SIZE (8) */ 54
//******/ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 56
//******/ 0x25, 0x65, /* LOGICAL_MAXIMUM (101) */Bluegiga Technologies Oy 58
//******/ 0x05, 0x07, /* USAGE_PAGE (Keyboard) */ 60
//******/ 0x19, 0x00, /* USAGE_MINIMUM (Reserved (no event indicated)) */ 62
//******/ 0x29, 0x65, /* USAGE_MAXIMUM (Keyboard Application) */ 64
//******/ 0x81, 0x00, /* INPUT (Data,Ary,Abs) */ 66
//****/ 0xc0 } 67

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

@ -0,0 +1,187 @@
module i2c_slave (input CLK, input RESET,
input SCL, inout SDA,
output IS_TRANSMISSION, output IS_READ, output IS_ACK, output WR, //output ACK_MASTER_CTRL,
output [7:0] RECEIVED_BYTE, input [7:0] BYTE_TO_TRANSMIT,
output [(MAX_I2C_TRANSACTION_EXP2-1):0] COUNTER);
// ALL OPERATIONS WITH MEMORY ARE IN POSEDGE CLK, IN NEGEDGE - ONLY SCL AND SDA LATCH
// COUNTER = 0 - ADRESS RECEIVED, COUNTER >=1 - DATA TRANSMISSION
// RECEIVED BYTES MUST READ WHEN WR POSEDGE, ADRESS NOT READING ###AND BYTE COUNTER >=1 (BYTE COUNTER = 0 - ADRESS)
// BYTES TO TRANSMIT MUST WRITE WHEN WR POSEDGE, BYTE COUNTER CAN BE ZERO
// (FIRST BYTE TRANSMITTED AFTER ADRESS).
// LAST BYTE HAS NO WR ####BUT LAST BYTE NOT TRANSMITTED (DECAUSE MASTER STOPS TRANSMIT)
parameter I2C_ADRESS = 7'h34;
parameter MAX_I2C_TRANSACTION_EXP2 = 8; // !!! - FOR LIMIT BYTES TO TX/RX (WITH ADRESS)
reg SDA_IN, SDA_DIR, SDA_OUT;
initial begin
SDA_OUT = 0;
end
/*reg*/wire SCLD, SDAD;
reg SCL_LAST, SDA_LAST;
reg i2c_state_machine;
reg i2c_start_latency; // GETS LATENCY (ONE CLK) TO IS_TRANSMISSION WIRE
// NEEDS WHEN START REPEAT OCCURS
// WITHOUT THIS THERE ARE NO SIGNALS TO CALL ABOUT END OF PACKET BEFORE START REPEAT
initial begin
SCL_LAST = 1; SDA_LAST = 1; i2c_state_machine = 0;
end
reg is_read;
reg [3:0] i2c_bit_counter;
reg [7:0] received_byte;
reg [7:0] byte_to_transmit;
reg [(MAX_I2C_TRANSACTION_EXP2-1):0] byte_counter;
//reg is_for_me;
reg is_ack;
reg wr;//reg ack_master_ctrl;
// FILTER
reg SCLF, SDAF;
reg [3:0] scl_cnt, sda_cnt;
simple_filter FLT_SCL (CLK, RESET, SCLF, SCLD);
simple_filter FLT_SDA (CLK, RESET, SDAF, SDAD);
always@(negedge CLK) begin
SCLF <= SCL;
SDAF <= SDA_IN;
end
always@(posedge CLK or negedge RESET) begin
if (RESET == 0)
i2c_state_machine <= 0;
else begin
/* if (scl_cnt != 0) begin
scl_cnt = scl_cnt - 1;
if (scl_cnt == 0) begin
if (SCLD != SCLF)
SCLD = SCLF;
end
end
else begin
if (SCLD != SCLF)
scl_cnt = 3'd7;
end
if (sda_cnt != 0) begin
sda_cnt = sda_cnt - 1;
if (sda_cnt == 0) begin
if (SDAD != SDAF)
SDAD = SDAF;
end
end
else begin
if (SDAD != SDAF)
sda_cnt = 3'd7;
end*/
// END OF FILTER
//SDA_IN = SDA; // FOR IVERILOG
if ((SDAD == 0) && (SDA_LAST == 1) && (SCLD == 1)) begin
i2c_state_machine = 1;
i2c_start_latency = 0;
i2c_bit_counter = 4'd8;
byte_counter = 9'd0;
//is_for_me = 1; // RESETS TO ZERO WHEN ADRESS CHECKING
SDA_DIR = 0;
is_ack = 0;
//ack_master_ctrl = 1;
wr = 0;
end
else if ((i2c_state_machine == 1) && (i2c_start_latency == 0)) begin
i2c_start_latency = 1;
is_read = 0;
end
if ((SDAD == 1) && (SDA_LAST == 0) && (SCLD == 1)) begin
i2c_state_machine = 0;
SDA_DIR = 0;
wr = 0;
end
if (i2c_state_machine/* && is_for_me*/) begin
if (!is_read) begin
if (i2c_bit_counter > 0) begin
if ((SCL_LAST == 0) && (SCLD == 1)) begin
received_byte[i2c_bit_counter-1] = SDAD;
i2c_bit_counter = i2c_bit_counter - 1;
end
end
else begin
if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 0)) begin
if (byte_counter == 0) begin
if (received_byte[7:1] != I2C_ADRESS)
i2c_state_machine = 0; //is_for_me = 0;
is_read = received_byte[0];
end
else begin
// EMIT SIGNAL OF BYTE RECEIVING
end
if (byte_counter != ((1<<MAX_I2C_TRANSACTION_EXP2) - 1))
byte_counter = byte_counter + 1;
SDA_DIR = i2c_state_machine; //is_for_me;
is_ack = i2c_state_machine; //1;
//if (is_read) begin
// i2c_bit_counter = 8;
//end
end
else if ((SCL_LAST == 0) && (SCLD == 1) && (is_ack == 1) && (byte_counter > 1))
wr = 1;
else if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 1)) begin
is_ack = 0;
SDA_DIR = 0;
i2c_bit_counter = 4'd8;
wr = 0;
end
end
end
else begin // IS_READ
if (i2c_bit_counter > 0) begin
if ((SCL_LAST == 1) && (SCLD == 0)) begin
wr = 0;
SDA_DIR = (BYTE_TO_TRANSMIT[i2c_bit_counter-1] ^ 1) /*& is_for_me & ack_master_ctrl*/;
i2c_bit_counter = i2c_bit_counter - 1;
is_ack = 0;
end
end
else begin
if ((SCL_LAST == 1) && (SCLD == 0) && (is_ack == 0)) begin
SDA_DIR = 0;
is_ack = 1;
end
else if ((SCL_LAST == 0) && (SCLD == 1) && (is_ack == 1)) begin
i2c_bit_counter = 8;
i2c_state_machine = (SDAD ^ 1) | SDA_DIR; //ack_master_ctrl = SDAD+1; // MAYBE TRANSMIT BYTE REPEAT
wr = (SDAD ^ 1) | SDA_DIR;
if (byte_counter != ((1<<MAX_I2C_TRANSACTION_EXP2) - 1))
byte_counter = byte_counter + 1;
// EMIT SIGNAL OF BYTE TO TRANSMIT
end
end
end
end
SCL_LAST <= SCLD;
SDA_LAST <= SDAD;
//SDA_OUT = (SDA_DIR ^ 1) & SDA; // FOR IVERILOG
end
end
assign IS_TRANSMISSION = i2c_state_machine & i2c_start_latency;
//assign SDA = SDA_DIR ? 1'b0 : 1'bz;
assign IS_ACK = is_ack;
assign IS_READ = is_read;
assign WR = wr;//assign ACK_MASTER_CTRL = ack_master_ctrl;
assign RECEIVED_BYTE = received_byte;
//assign BYTE_TO_TRANSMIT = byte_to_transmit;
assign COUNTER = byte_counter;
SB_IO #(
.PIN_TYPE(6'b 1010_01),
.PULLUP(1'b 0)
) i2c_io (
.PACKAGE_PIN(SDA),
.OUTPUT_ENABLE(SDA_DIR),
.D_OUT_0(SDA_OUT),
.D_IN_0(SDA_IN)
);
endmodule

@ -0,0 +1,38 @@
set_io LED1 99
set_io LED2 98
set_io LED3 97
set_io LED4 96
set_io LED5 95
#set_io SCLM 78 # J2, 1
#set_io SDAM 87 # J2, 7
#set_io ACK 81 # J2, 4
#set_io SCLTGL01 80 # J2, 3
#set_io SDAOUTM 79 # J2, 2
#set_io SCLTGL 79 # J2, 8
set_io CLK 21
set_io SCL 90 # J2, 9
set_io SDA 91 # J2, 10
set_io INTERRUPT 88 # J2, 8
# GND - J2, 11
#set_io INT 95
set_io KBD_COLUMNS[0] 78 #J2-1 or PIO1-02
set_io KBD_COLUMNS[1] 79 #J2-2 or PIO1-03
set_io KBD_COLUMNS[2] 80 #J2-3 or PIO1-04
set_io KBD_COLUMNS[3] 81 #J2-4 or PIO1-05
set_io KBD_ROWS[0] 119 #J1-10 or PIO0-09
set_io KBD_ROWS[1] 118 #J1-9 or PIO0-08
set_io KBD_ROWS[2] 117 #J1-8 or PIO0-07
set_io KBD_ROWS[3] 116 #J1-7 or PIO0-06
set_io COM_TX 8
set_io COM_RX 9
set_io COM_DCD 1
set_io COM_DSR 2
set_io COM_RTS 4 # IS CTS IN FT2232 SIDE
#set_io SDA_CTRL 88 # J2, 8

@ -0,0 +1,189 @@
module matrix_kbd (input CLK, input RESET, input FREEZE, inout [3:0] ROWS, input [3:0] COLUMNS, output [63:0] kbd_report, output INT);
// * - ESC (29), 7 - F1 (3A), 4 - F2 (3B), 1 - NUM_LOCK (53)
// 0 - CAPS LOCK (39), 8 - R (15), 5 - BACKSPACE (2A), 2 - ENTER (58)
// # - LSHIFT (E1), 9 - C (06), 6 - V (19), 3 - DELETE (4C)
// D - LCTRL (E0), C - LALT (E2), B - SPACE (2C), A - RGUI (E7)
parameter ONE_ROW_TIME = 12000;
reg [15:0] row_time = 0;
reg [1:0] row_counter;
reg [15:0] last_data;
reg [7:0] i;
reg [63:0] report;
reg [5:0] report_free_place;
reg isr;
reg [3:0] ROWS_EN = 0;
reg [3:0] ROWS_OUT = 0;
wire [3:0] ROWS_IN;
reg [3:0] COLS_SHADOW;
reg [7:0] kbd_code;
reg is_pressed;
always @ (negedge CLK) begin
COLS_SHADOW <= COLUMNS;
end
always @ (posedge CLK) begin
if (RESET == 0) begin
last_data <= 16'hFFFF;
report_free_place <= 6'h3F;
report <= 63'h_00_00_00_00_00_00_00_00;
end
else begin
if (FREEZE == 0) begin
if (row_time == ONE_ROW_TIME) begin
row_time <= 0;
row_counter = row_counter + 1;
ROWS_EN = 1 << row_counter;
end
else
row_time <= row_time + 1;
// ROW 0 - D, 1 - A, 2 - C, 3 - B
if (row_time == (ONE_ROW_TIME/2 + 0)) begin
if (COLS_SHADOW[0] != last_data[row_counter*4 + 0]) begin
case (row_counter) 0: kbd_code = 8'h29; 1: kbd_code = 8'h53; 2: kbd_code = 8'h3A; 3: kbd_code = 8'h3B; // ESC, F1-F2, NUM LOCK
default: kbd_code = 1;
endcase
if ((COLS_SHADOW[0] == 0) && (last_data[row_counter*4 + 0] == 1)) is_pressed = 1;
else is_pressed = 0;
end
else kbd_code = 0;
last_data[row_counter*4 + 0] <= COLS_SHADOW[0];
end
else if (row_time == (ONE_ROW_TIME/2 + 4)) begin
if (COLS_SHADOW[2] != last_data[row_counter*4 + 2]) begin
case (row_counter) 0: kbd_code = 8'h39; 1: kbd_code = 8'h58; 2: kbd_code = 8'h15; 3: kbd_code = 8'h2A; // CAPS LOCK, R, BACKSPACE, ENTER
default: kbd_code = 1;
endcase
if ((COLS_SHADOW[2] == 0) && (last_data[row_counter*4 + 2] == 1)) is_pressed = 1;
else is_pressed = 0;
end
else kbd_code = 0;
last_data[row_counter*4 + 2] <= COLS_SHADOW[2];
end
else if (row_time == (ONE_ROW_TIME/2 + 2)) begin
if (COLS_SHADOW[1] != last_data[row_counter*4 + 1]) begin
case (row_counter) 0: kbd_code = 8'hE1; 1: kbd_code = 8'h4C; 2: kbd_code = 8'h06; 3: kbd_code = 8'h19; // LEFT SHIFT, C, V, DELETE
default: kbd_code = 1;
endcase
if ((COLS_SHADOW[1] == 0) && (last_data[row_counter*4 + 1] == 1)) is_pressed = 1;
else is_pressed = 0;
end
else kbd_code = 0;
last_data[row_counter*4 + 1] <= COLS_SHADOW[1];
end
else if (row_time == (ONE_ROW_TIME/2 + 6)) begin
if (COLS_SHADOW[3] != last_data[row_counter*4 + 3]) begin
case (row_counter) 0: kbd_code = 8'hE0; 1: kbd_code = 8'hE7; 2: kbd_code = 8'hE2; 3: kbd_code = 8'h2C; // LCTRL, LALT, SPACE, RGUI
default: kbd_code = 1;
endcase
if ((COLS_SHADOW[3] == 0) && (last_data[row_counter*4 + 3] == 1)) is_pressed = 1;
else is_pressed = 0;
end
else kbd_code = 0;
last_data[row_counter*4 + 3] <= COLS_SHADOW[3];
end
else
kbd_code = 0;
// START PACK I2C_HID REPORT
if (kbd_code != 0) begin
isr = 1;
report[15:8] <= 0;
//report[63:56] <= 0;
if ((kbd_code > 8'hDF) && (kbd_code < 8'hE8)) begin
kbd_code = kbd_code & 8'h07;
if (is_pressed)
report [7:0] <= report [7:0] | (1<<kbd_code);
else
report [7:0] <= report [7:0] & (~(1<<kbd_code));
end
else begin
if (is_pressed) begin
/*for (i = 0; i < 4; i = i + 1) begin
if (report_free_place[i] == 1) begin
report [ ((i + 2) * 8 + 7) : ((i + 2) * 8 + 0)] <= kbd_code;
report_free_place[i] = 0;
is_pressed = 0; // NO ERROR DETECTED
end
end
if (report_free_place[0] == 1) begin
report [ ((0 + 2) * 8 + 7) : ((0 + 2) * 8 + 0)] <= kbd_code;
report_free_place[0] = 0;
end*/
if (report [ 23 : 16 ] == 0)
report [ 23 : 16 ] <= kbd_code;
else if (report [ 31 : 24 ] == 0)
report [ 31 : 24 ] <= kbd_code;
else if (report [ 39 : 32 ] == 0)
report [ 39 : 32 ] <= kbd_code;
else if (report [ 47 : 40 ] == 0)
report [ 47 : 40 ] <= kbd_code;
else if (report [ 55 : 48 ] == 0)
report [ 55 : 48 ] <= kbd_code;
else if (report [ 63 : 56 ] == 0)
report [ 63 : 56 ] <= kbd_code;
end
else begin
for (i = 0; i < 6; i = i + 1) begin
if (report [ ((i + 2) * 8 + 7) : ((i + 2) * 8 + 0)] == kbd_code) begin
report [ ((i + 2) * 8 + 7) : ((i + 2) * 8 + 0)] <= 0;
//report_free_place[i] = 1;
end
end
end
//if (kbd_code == 8'h2C) begin
//if (is_pressed)
// report [15:8] <= kbd_code;
//else
// report [15:8] <= 0;
//end
//else if (kbd_code == 1) begin
// if (is_pressed)
// report [23:16] <= kbd_code;
// else
// report [23:16] <= 0;
//end
end
end // END OF KBD CODE SEND ALG
else
isr <= 0;
/*if (kbd_code != 0) begin
if (is_pressed)
report [7:0] <= kbd_code;
else
report [7:0] <= 0;
end*/
end
end
end
assign kbd_report = report;
assign INT = isr;
//assign ROWS_EN = (1 << row_counter);
SB_IO #(
.PIN_TYPE(6'b 1010_01),
.PULLUP(1'b 0)
) rows_io [3:0] (
.PACKAGE_PIN(ROWS),
.OUTPUT_ENABLE(ROWS_EN),
.D_OUT_0(ROWS_OUT),
.D_IN_0(ROWS_IN)
);
endmodule

@ -0,0 +1,29 @@
module simple_filter (input CLK, input RESET, input IN, output OUT);
reg out;
parameter FLT_CONST = 3'd7; // IF MODIFY THIS PLEASE MODIFY COUNTER!
reg [2:0] counter;
always@(posedge CLK or negedge RESET) begin
if (RESET == 0) begin
counter = 0;
out = 1;
end
else begin
if (counter != 0) begin
counter = counter - 1;
if (counter == 0) begin
if (out != IN)
out = IN;
end
end
else begin
if (out != IN)
counter = FLT_CONST;
end
end
end
assign OUT = out;
endmodule

@ -0,0 +1,186 @@
module top (input CLK, output LED1, LED2, LED3, LED4, LED5,
input SCL, inout SDA, /*output ACK,*/ output INTERRUPT,
input COM_RX, output COM_TX, COM_DCD, COM_DSR, COM_RTS,
input [3:0] KBD_COLUMNS, inout [3:0] KBD_ROWS);
//reg [7:0] I2C_TX; // TRANSMITTED TO MASTER
wire [7:0] I2C_TX;
reg [7:0] I2C_TX_DESC;
reg [7:0] I2C_TX_REPORT;
assign I2C_TX = (I2C_TX_DESC & I2C_OUT_DESC_MASK) | (I2C_TX_REPORT & (~I2C_OUT_DESC_MASK));
wire [7:0] I2C_RX; // RECEIVED FROM MASTER
wire I2C_TRANS, I2C_READ, I2C_ACK, I2C_ACK_MSTR_CTRL, I2C_WR;
wire [9:0] I2C_COUNTER;
i2c_slave I2C (CLK, RESET, SCL, SDA, I2C_TRANS, I2C_READ, I2C_ACK, I2C_WR, //I2C_ACK_MSTR_CTRL,
I2C_RX, I2C_TX, I2C_COUNTER);
reg UART_WR, UART_DTR, UART_RTS, UART_DCD;
reg [7:0] UART_TX_DATA;
wire UART_ACTIVE, UART_TX_LINE;
initial begin
UART_WR = 0; UART_RTS = 1; UART_DTR = 0; UART_DCD = 0;
end
uart UART (CLK, RESET, UART_WR, UART_TX_DATA, UART_ACTIVE, UART_TX_LINE);
wire [63:0] kbd_report;
wire ISR;
reg INT = 1; // INTERRUPT LINE TO HOST
reg KBD_FREEZE = 1; // LOGIC REG FOR BLOCK KBD ACTIVITY WHEN I2C IS WORKING
reg IS_EMPTY_REPORT = 0; // REGISTER FOR CORRECT START (HOST MUST REQUEST EMPTY REGISTER AFTER INTERRUPT. THEN INTERRRUPT SET TO 1)
matrix_kbd KEYBOARD (CLK, RESET, KBD_FREEZE, KBD_ROWS, KBD_COLUMNS, kbd_report, ISR);
descriptors I2C_HID_DESC (CLK, RESET, I2C_WR, I2C_OUTPUT_TYPE[1:0], I2C_COUNTER, I2C_TX_DESC/*, kbd_report*/);
parameter MAX_INPUT_LEN = 10;
reg [7:0] I2C_INPUT_DATA [MAX_INPUT_LEN:0];
reg [7:0] I2C_INPUT_LEN = 0;
reg [2:0] I2C_OUTPUT_TYPE = 0; // 0 - ALL ZERO DATA, 1 - I2C HID DESCR, 2 - OUTPUT REPORT, 3 - HID REPORT DESCR
reg [7:0] I2C_OUT_DESC_MASK = 0;
reg [7:0] KBD_LED_STATUS = 0;
reg last_wr = 0, last_trans = 0, last_uart_active = 0, last_isr = 0, uart_double_ff = 0;
wire RESET;
reg [3:0] rststate = 0;
assign RESET = &rststate;
always @(posedge CLK) begin
rststate <= rststate + !RESET;
if (RESET == 0) begin
I2C_OUTPUT_TYPE = 0;
I2C_OUT_DESC_MASK = 0;
KBD_LED_STATUS = 0; // BIT 0 - NUM LOCK, BIT 1 - CAPS LOCK, BIT 2 - SCROOL LOCK
I2C_INPUT_LEN = 0;
INT = 0;
UART_WR = 0;
KBD_FREEZE = 1;
IS_EMPTY_REPORT = 0;
end
else begin
if ((last_wr == 0) && (I2C_WR == 1)) begin
I2C_INPUT_LEN <= I2C_COUNTER - 1;
if (I2C_READ == 0) begin
if (I2C_COUNTER < (MAX_INPUT_LEN + 2))
I2C_INPUT_DATA[I2C_COUNTER - 2] <= I2C_RX;
end
else begin
if (I2C_OUTPUT_TYPE == 3) begin
if ((I2C_COUNTER < 2) || (I2C_COUNTER > (2 + 10 - 1)))
I2C_TX_REPORT <= 0;
else if (I2C_COUNTER == 2)
I2C_TX_REPORT <= 10;
else if (I2C_COUNTER == 3)
I2C_TX_REPORT <= 0;
else
I2C_TX_REPORT <= kbd_report[ (8 * (I2C_COUNTER - 4) + 7) : (8 * (I2C_COUNTER - 4) + 0) ];
end
else
I2C_TX_REPORT <= 0;
end
end
else if ((last_wr == 1) && (I2C_WR == 0)) begin
UART_WR <= 1;
if (I2C_READ == 0)
UART_TX_DATA <= I2C_RX;
else
UART_TX_DATA <= I2C_TX;
end
else if ((last_trans == 0) && (I2C_TRANS == 1)) begin
UART_TX_DATA = 8'hFF;
UART_WR = 1;
uart_double_ff = 1;
KBD_FREEZE = 0;
end
else if ((last_trans == 1) && (I2C_TRANS == 0)) begin
if (I2C_READ == 0) begin // DECODING PACKET RECEIVED FROM HOST
if (I2C_INPUT_LEN == 0)
KBD_FREEZE <= 0;
else if (I2C_INPUT_LEN == 2) begin
if ((I2C_INPUT_DATA[0] == 1) && (I2C_INPUT_DATA[1] == 0)) // I2C_HID_DESC_REQUEST
I2C_OUTPUT_TYPE = 1;
else if ((I2C_INPUT_DATA[0] == 2) && (I2C_INPUT_DATA[1] == 0)) // HID REPORT DESC REQUEST
I2C_OUTPUT_TYPE = 2;
else if ((I2C_INPUT_DATA[0] == 3) && (I2C_INPUT_DATA[1] == 0)) // INPUT REPORT REQUEST (ADR)
I2C_OUTPUT_TYPE = 3;
//else
// I2C_OUTPUT_TYPE = 0; //
end
else if (I2C_INPUT_LEN == 5) begin // OUTPUT REPORT SET (LEDS) - WRITE TO OUT ADR
if ((I2C_INPUT_DATA[0] == 4) && (I2C_INPUT_DATA[1] == 0) && (I2C_INPUT_DATA[2] == 1) && (I2C_INPUT_DATA[3] == 0)) begin
KBD_LED_STATUS <= I2C_INPUT_DATA[4];
KBD_FREEZE <= 0;
end
//else
// I2C_OUTPUT_TYPE = 0; //
end
else if (I2C_INPUT_LEN == 6) begin // INPUT REPORT REQUEST (KBD PRESS INFO)
if ((I2C_INPUT_DATA[0] == 5) && (I2C_INPUT_DATA[1] == 0) && (I2C_INPUT_DATA[2] == 16) && (I2C_INPUT_DATA[3] == 2) && (I2C_INPUT_DATA[4] == 6) && (I2C_INPUT_DATA[5] == 0))
I2C_OUTPUT_TYPE = 3;
//else
// I2C_OUTPUT_TYPE = 0; //
end
else if (I2C_INPUT_LEN == 9) begin // OUTPUT REPORT SET (LEDS) - WRITE BY CMD
if ((I2C_INPUT_DATA[0] == 5) && (I2C_INPUT_DATA[1] == 0) && (I2C_INPUT_DATA[2] == 32) && (I2C_INPUT_DATA[3] == 3) && (I2C_INPUT_DATA[4] == 6) && (I2C_INPUT_DATA[5] == 0) /*&& (I2C_INPUT_DATA[6] == 1) && (I2C_INPUT_DATA[7] == 0)*/) begin
KBD_LED_STATUS <= I2C_INPUT_DATA[8];
KBD_FREEZE <= 0;
end
//else
// I2C_OUTPUT_TYPE = 0; //
end
else if (I2C_INPUT_LEN == 4) begin
if ((I2C_INPUT_DATA[0] == 5) && (I2C_INPUT_DATA[1] == 0) && (I2C_INPUT_DATA[2] == 0) && (I2C_INPUT_DATA[3] == 1))
rststate <= 4'h0; // RESET COMMAND
end
//else
// I2C_OUTPUT_TYPE = 0; //
if ((I2C_OUTPUT_TYPE == 1) || (I2C_OUTPUT_TYPE == 2))
I2C_OUT_DESC_MASK = 8'hFF;
else
I2C_OUT_DESC_MASK = 8'h00;
end // END OF I2C_READ == 0
else begin
KBD_FREEZE <= 0; // UNFREEZING KBD AFTER ANYONE I2C RECEIVING
//if (((I2C_OUTPUT_TYPE == 3) && (I2C_INPUT_LEN == 10)) || ((I2C_OUTPUT_TYPE == 0) && (I2C_INPUT_LEN > 1))) begin // HARD
if (((I2C_OUTPUT_TYPE == 3) || (I2C_OUTPUT_TYPE == 0)) && (I2C_INPUT_LEN > 1)) begin // SOFT
// DEACTIVATING INTERRRUPT IF HOST READ INPUT REPORT (LEN 10) AFTER INTERRUPT OR EMPTY DATA (>=2 BYTES) AFTER RESET
// AND UNFREEZING KEYBOARD
INT <= 1;
//KBD_FREEZE <= 0;
IS_EMPTY_REPORT = 1;
end
end
end
else if ((last_uart_active == 1) && (UART_ACTIVE == 0) && (uart_double_ff == 1)) begin
UART_WR = 1;
UART_TX_DATA = 8'hFF;
uart_double_ff = 0;
I2C_INPUT_LEN = 0;
end
else if (UART_WR == 1)
UART_WR <= 0;
else if ((last_isr == 0) && (ISR == 1) && (INT == 1)) begin
INT = 0;
I2C_OUTPUT_TYPE = 3;
I2C_OUT_DESC_MASK = 8'h00;
end
last_wr <= I2C_WR;
last_trans <= I2C_TRANS;
last_uart_active <= UART_ACTIVE;
last_isr <= ISR;
end
end
assign LED5 = I2C_TRANS;
//assign LED5 = COM_RX;
assign LED1 = INT ^ 1;//KBD_COLUMNS[0];//I2C_OUTPUT_TYPE[0];//I2C_RX[0];
assign LED2 = KBD_LED_STATUS[0];//I2C_OUTPUT_TYPE[0];
assign LED3 = KBD_LED_STATUS[1];//I2C_OUTPUT_TYPE[1];
assign LED4 = KBD_LED_STATUS[2];//KBD_FREEZE;//UART_ACTIVE;
//assign ACK = I2C_READ;//I2C_WR; //I2C_ACK;
assign COM_TX = UART_TX_LINE;//COM_RX;
assign INTERRUPT = INT;
assign COM_RTS = I2C_READ;//UART_RTS;
assign COM_DSR = KBD_FREEZE;//UART_DTR;
assign COM_DCD = INT;
endmodule //top

@ -0,0 +1,60 @@
module uart ( input CLK, input RESET, input TX_SIGNAL, input [7:0] TX_BYTE,
output TX_ACTIVITY, output TX_LINE);
// CLK - INPUT CLOCK (12 MHZ FOR ICESTICK), RESET: IF RESET == 0, MODULE RESETS
// TX_SIGNAL - SIGNAL TO START TRANSMISSION (RISING EDGE), TX_BYTE - BYTE TO TRANSMIT
// TX_ACTIVITY = 1, IF SOME BYTE IS TRANSMITTING NOW, ELSE - 0
// TX_LINE - LINE OF UART_TX,
// IF BYTE IS TRANSMITTING, ATTEMPT TO TRANSMIT OTHER BYTE HAS NO EFFECT
// MODULE WORKS AT POSEDGE
parameter CLK_DIV = 13;
reg TX_sig_last;
reg [3:0] tx_bit_counter;
reg [3:0] tx_clk_counter; // MUST CONTAIN CLK DIV
//reg [7:0] tx_data;
reg tx_activity;
reg tx_line;
initial begin
TX_sig_last = 0;
tx_line = 1;
end
always @ (posedge CLK) begin
if (RESET == 0) begin
/*tx_data = 0;*/ tx_clk_counter = 0;
end
else begin
if (tx_activity) begin
tx_clk_counter = tx_clk_counter - 1;
if (tx_clk_counter == 0) begin
tx_clk_counter = CLK_DIV;
if (tx_bit_counter == 0)
tx_activity = 0;
else begin
tx_bit_counter = tx_bit_counter - 1;
if (tx_bit_counter > 0)
tx_line = TX_BYTE[8-tx_bit_counter];
else
tx_line = 1; // STOP_BIT
end
end
end
else begin
if ((TX_SIGNAL == 1) && (TX_sig_last == 0)) begin
//tx_data = TX_BYTE;
tx_activity = 1;
tx_bit_counter = 9; // NO PARITY, STOP 1 BIT
tx_clk_counter = CLK_DIV;
tx_line = 0; // START BIT
end
end
TX_sig_last = TX_SIGNAL;
end
end
assign TX_LINE = tx_line;
assign TX_ACTIVITY = tx_activity;
endmodule

Binary file not shown.

@ -1,3 +0,0 @@
[env]
board = icestick

@ -1,20 +0,0 @@
set_io LEDS[0] 99 #RED
set_io LEDS[1] 98 #RED
set_io LEDS[2] 97 #RED
set_io LEDS[3] 96 #RED
set_io TACT_LED 95 #GREEN
set_io COLS[0] 78 #J2-1 or PIO1-02
set_io COLS[1] 79 #J2-2 or PIO1-03
set_io COLS[2] 80 #J2-3 or PIO1-04
set_io COLS[3] 81 #J2-4 or PIO1-05
set_io ROWS[0] 119 #J1-10 or PIO0-09
set_io ROWS[1] 118 #J1-9 or PIO0-08
set_io ROWS[2] 117 #J1-8 or PIO0-07
set_io ROWS[3] 116 #J1-7 or PIO0-06
set_io CLK 21
#set_io SCL 90 # J2, 9
#set_io SDA 91 # J2, 10
# GND - J2, 11

File diff suppressed because it is too large Load Diff

Binary file not shown.

@ -1,254 +0,0 @@
# Generated by Yosys 0.7 (Apio build) (git sha1 8c071a2, gcc 4.8.4-2ubuntu1~14.04.3 -fPIC -Os)
.model top
.inputs CLK COLS[0] COLS[1] COLS[2] COLS[3] ROWS[0] ROWS[1] ROWS[2] ROWS[3]
.outputs ROWS[0] ROWS[1] ROWS[2] ROWS[3] LEDS[0] LEDS[1] LEDS[2] LEDS[3] TACT_LED
.names $false
.names $true
1
.names $undef
.gate SB_LUT4 I0=$abc$541$n37_1 I1=$abc$541$n42 I2=$abc$541$n43 I3=$false O=$abc$541$n1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10000000
.gate SB_LUT4 I0=$abc$541$n38 I1=$abc$541$n39 I2=$abc$541$n40 I3=$abc$541$n41 O=$abc$541$n37_1
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=period_counter[19] I1=period_counter[22] I2=period_counter[18] I3=period_counter[20] O=$abc$541$n38
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0001000000000000
.gate SB_LUT4 I0=period_counter[10] I1=period_counter[13] I2=period_counter[14] I3=period_counter[15] O=$abc$541$n39
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=period_counter[11] I1=period_counter[12] I2=period_counter[16] I3=period_counter[17] O=$abc$541$n40
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=period_counter[21] I1=period_counter[23] I2=period_counter[8] I3=period_counter[9] O=$abc$541$n41
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=period_counter[4] I1=period_counter[5] I2=period_counter[6] I3=period_counter[7] O=$abc$541$n42
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=period_counter[0] I1=period_counter[1] I2=period_counter[2] I3=period_counter[3] O=$abc$541$n43
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=$abc$541$n43 I1=$abc$541$n37_1 I2=$abc$541$n42 I3=period_counter[0] O=$abc$541$n51
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:51"
.param LUT_INIT 1111111110000000
.gate SB_LUT4 I0=row_counter[1] I1=TACT_LED I2=$false I3=$false O=$0\row_counter[1:0][1]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:43"
.param LUT_INIT 0110
.gate SB_LUT4 I0=row_counter[1] I1=$false I2=$false I3=$false O=$abc$541$n3
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=period_counter[1] I1=$false I2=$false I3=$false O=$abc$541$n52
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=TACT_LED I1=$false I2=$false I3=$false O=$abc$541$n54
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$abc$541$n37_1 I1=$abc$541$n42 I2=$abc$541$n43 I3=$false O=$abc$541$n50
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:47"
.param LUT_INIT 10000000
.gate SB_LUT4 I0=TACT_LED I1=$false I2=$false I3=$false O=$0\row_counter[1:0][0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:39"
.param LUT_INIT 01
.gate SB_LUT4 I0=$false I1=$true I2=period_counter[0] I3=$false O=$add$top.v:27$5_Y[0]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[10] I3=$auto$alumacc.cc:470:replace_alu$27.C[10] O=$add$top.v:27$5_Y[10]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[10] CO=$auto$alumacc.cc:470:replace_alu$27.C[11] I0=$false I1=period_counter[10]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[11] I3=$auto$alumacc.cc:470:replace_alu$27.C[11] O=$add$top.v:27$5_Y[11]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[11] CO=$auto$alumacc.cc:470:replace_alu$27.C[12] I0=$false I1=period_counter[11]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[12] I3=$auto$alumacc.cc:470:replace_alu$27.C[12] O=$add$top.v:27$5_Y[12]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[12] CO=$auto$alumacc.cc:470:replace_alu$27.C[13] I0=$false I1=period_counter[12]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[13] I3=$auto$alumacc.cc:470:replace_alu$27.C[13] O=$add$top.v:27$5_Y[13]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[13] CO=$auto$alumacc.cc:470:replace_alu$27.C[14] I0=$false I1=period_counter[13]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[14] I3=$auto$alumacc.cc:470:replace_alu$27.C[14] O=$add$top.v:27$5_Y[14]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[14] CO=$auto$alumacc.cc:470:replace_alu$27.C[15] I0=$false I1=period_counter[14]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[15] I3=$auto$alumacc.cc:470:replace_alu$27.C[15] O=$add$top.v:27$5_Y[15]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[15] CO=$auto$alumacc.cc:470:replace_alu$27.C[16] I0=$false I1=period_counter[15]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[16] I3=$auto$alumacc.cc:470:replace_alu$27.C[16] O=$add$top.v:27$5_Y[16]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[16] CO=$auto$alumacc.cc:470:replace_alu$27.C[17] I0=$false I1=period_counter[16]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[17] I3=$auto$alumacc.cc:470:replace_alu$27.C[17] O=$add$top.v:27$5_Y[17]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[17] CO=$auto$alumacc.cc:470:replace_alu$27.C[18] I0=$false I1=period_counter[17]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[18] I3=$auto$alumacc.cc:470:replace_alu$27.C[18] O=$add$top.v:27$5_Y[18]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[18] CO=$auto$alumacc.cc:470:replace_alu$27.C[19] I0=$false I1=period_counter[18]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[19] I3=$auto$alumacc.cc:470:replace_alu$27.C[19] O=$add$top.v:27$5_Y[19]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[19] CO=$auto$alumacc.cc:470:replace_alu$27.C[20] I0=$false I1=period_counter[19]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=period_counter[0] CO=$auto$alumacc.cc:470:replace_alu$27.C[2] I0=$false I1=period_counter[1]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[20] I3=$auto$alumacc.cc:470:replace_alu$27.C[20] O=$add$top.v:27$5_Y[20]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[20] CO=$auto$alumacc.cc:470:replace_alu$27.C[21] I0=$false I1=period_counter[20]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[21] I3=$auto$alumacc.cc:470:replace_alu$27.C[21] O=$add$top.v:27$5_Y[21]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[21] CO=$auto$alumacc.cc:470:replace_alu$27.C[22] I0=$false I1=period_counter[21]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[22] I3=$auto$alumacc.cc:470:replace_alu$27.C[22] O=$add$top.v:27$5_Y[22]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[22] CO=$auto$alumacc.cc:470:replace_alu$27.C[23] I0=$false I1=period_counter[22]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[23] I3=$auto$alumacc.cc:470:replace_alu$27.C[23] O=$add$top.v:27$5_Y[23]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[2] I3=$auto$alumacc.cc:470:replace_alu$27.C[2] O=$add$top.v:27$5_Y[2]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[2] CO=$auto$alumacc.cc:470:replace_alu$27.C[3] I0=$false I1=period_counter[2]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[3] I3=$auto$alumacc.cc:470:replace_alu$27.C[3] O=$add$top.v:27$5_Y[3]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[3] CO=$auto$alumacc.cc:470:replace_alu$27.C[4] I0=$false I1=period_counter[3]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[4] I3=$auto$alumacc.cc:470:replace_alu$27.C[4] O=$add$top.v:27$5_Y[4]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[4] CO=$auto$alumacc.cc:470:replace_alu$27.C[5] I0=$false I1=period_counter[4]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[5] I3=$auto$alumacc.cc:470:replace_alu$27.C[5] O=$add$top.v:27$5_Y[5]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[5] CO=$auto$alumacc.cc:470:replace_alu$27.C[6] I0=$false I1=period_counter[5]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[6] I3=$auto$alumacc.cc:470:replace_alu$27.C[6] O=$add$top.v:27$5_Y[6]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[6] CO=$auto$alumacc.cc:470:replace_alu$27.C[7] I0=$false I1=period_counter[6]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[7] I3=$auto$alumacc.cc:470:replace_alu$27.C[7] O=$add$top.v:27$5_Y[7]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[7] CO=$auto$alumacc.cc:470:replace_alu$27.C[8] I0=$false I1=period_counter[7]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[8] I3=$auto$alumacc.cc:470:replace_alu$27.C[8] O=$add$top.v:27$5_Y[8]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[8] CO=$auto$alumacc.cc:470:replace_alu$27.C[9] I0=$false I1=period_counter[8]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=period_counter[9] I3=$auto$alumacc.cc:470:replace_alu$27.C[9] O=$add$top.v:27$5_Y[9]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:470:replace_alu$27.C[9] CO=$auto$alumacc.cc:470:replace_alu$27.C[10] I0=$false I1=period_counter[9]
.attr src "/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_DFFE C=CLK D=$0\row_counter[1:0][0] E=$abc$541$n50 Q=TACT_LED
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFE C=CLK D=$0\row_counter[1:0][1] E=$abc$541$n50 Q=row_counter[1]
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[0] Q=period_counter[0] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFESR C=CLK D=$abc$541$n52 E=$abc$541$n51 Q=period_counter[1] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[2] Q=period_counter[2] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[3] Q=period_counter[3] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[4] Q=period_counter[4] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[5] Q=period_counter[5] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[6] Q=period_counter[6] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[7] Q=period_counter[7] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[8] Q=period_counter[8] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[9] Q=period_counter[9] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[10] Q=period_counter[10] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[11] Q=period_counter[11] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[12] Q=period_counter[12] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[13] Q=period_counter[13] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[14] Q=period_counter[14] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[15] Q=period_counter[15] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[16] Q=period_counter[16] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[17] Q=period_counter[17] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[18] Q=period_counter[18] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[19] Q=period_counter[19] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[20] Q=period_counter[20] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[21] Q=period_counter[21] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[22] Q=period_counter[22] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=CLK D=$add$top.v:27$5_Y[23] Q=period_counter[23] R=$abc$541$n1
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFESR C=CLK D=$abc$541$n54 E=$abc$541$n50 Q=rows_en[0] R=row_counter[1]
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=TACT_LED E=$abc$541$n50 Q=rows_en[1] R=row_counter[1]
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=$abc$541$n54 E=$abc$541$n50 Q=rows_en[2] R=$abc$541$n3
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=CLK D=TACT_LED E=$abc$541$n50 Q=rows_en[3] R=$abc$541$n3
.attr src "top.v:20|/home/t-bird/.apio/packages/toolchain-icestorm/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_IO D_IN_0=rows_in[0] D_OUT_0=$false OUTPUT_ENABLE=rows_en[0] PACKAGE_PIN=ROWS[0]
.attr src "top.v:33"
.param PIN_TYPE 101001
.param PULLUP 0
.gate SB_IO D_IN_0=rows_in[1] D_OUT_0=$false OUTPUT_ENABLE=rows_en[1] PACKAGE_PIN=ROWS[1]
.attr src "top.v:33"
.param PIN_TYPE 101001
.param PULLUP 0
.gate SB_IO D_IN_0=rows_in[2] D_OUT_0=$false OUTPUT_ENABLE=rows_en[2] PACKAGE_PIN=ROWS[2]
.attr src "top.v:33"
.param PIN_TYPE 101001
.param PULLUP 0
.gate SB_IO D_IN_0=rows_in[3] D_OUT_0=$false OUTPUT_ENABLE=rows_en[3] PACKAGE_PIN=ROWS[3]
.attr src "top.v:33"
.param PIN_TYPE 101001
.param PULLUP 0
.names COLS[0] LEDS[0]
1 1
.names COLS[1] LEDS[1]
1 1
.names COLS[2] LEDS[2]
1 1
.names COLS[3] LEDS[3]
1 1
.names TACT_LED row_counter[0]
1 1
.end

@ -1,43 +0,0 @@
module top (input CLK, input [3:0] COLS, inout [3:0] ROWS, output [3:0] LEDS, output TACT_LED);
// MODULE POOLS MATRIX KEYBOARD 4x4 WITH PERIOD ~1 SEC (FOR EACH ROW)
// AND REDIRECTED COLUMNS TO RED LEDS
// GREEN LED TOGGLES EVERY ONE SECOND (AS POOLING PERIOD)
// NEED FOR CHECKING CONNECTION TO MATRIX 4x4 KEYBOARD
// IF THERE IS NO KEY PRESSED, ALL RED LEDS ARE ON
// IF SOME KEY PRESSED, SOME LED IS NOT ON IN ONE OF FOUR PERIODS
// ETC
reg [1:0] row_counter = 0;
reg [23:0] period_counter = 0;
reg [3:0] rows_out = 0;
reg [3:0] rows_en = 0;
wire [3:0] rows_in;
parameter period = 24'd12000000;
always @ ( posedge CLK ) begin
if (period_counter == period) begin
period_counter <= 0;
rows_en <= (1<<row_counter);
row_counter <= row_counter + 1;
end
else
period_counter <= period_counter + 1;
end
assign TACT_LED = row_counter[0];
assign LEDS = COLS;
SB_IO #(
.PIN_TYPE(6'b 1010_01),
.PULLUP(1'b 0)
) rows_io [3:0] (
.PACKAGE_PIN(ROWS),
.OUTPUT_ENABLE(rows_en),
.D_OUT_0(rows_out),
.D_IN_0(rows_in)
);
endmodule
Loading…
Cancel
Save