Basic serial transmission

This commit is contained in:
greg 2018-08-17 01:45:31 -07:00
parent 880144d2e7
commit a10aeac72d
6 changed files with 5353 additions and 0 deletions

26
fizzbuzz/Makefile Normal file
View File

@ -0,0 +1,26 @@
# Project setup
PROJ = blinky
BUILD = ./build
DEVICE = 1k
FOOTPRINT = tq144
# Files
FILES = top.v
.PHONY: all clean burn
all:
# if build folder doesn't exist, create it
mkdir -p $(BUILD)
# synthesize using Yosys
yosys -p "synth_ice40 -top top -blif $(BUILD)/$(PROJ).blif" $(FILES)
# Place and route using arachne
arachne-pnr -d $(DEVICE) -P $(FOOTPRINT) -o $(BUILD)/$(PROJ).asc -p pinmap.pcf $(BUILD)/$(PROJ).blif
# Convert to bitstream using IcePack
icepack $(BUILD)/$(PROJ).asc $(BUILD)/$(PROJ).bin
burn:
iceprog $(BUILD)/$(PROJ).bin
clean:
rm build/*

4780
fizzbuzz/build/blinky.asc Normal file

File diff suppressed because it is too large Load Diff

BIN
fizzbuzz/build/blinky.bin Normal file

Binary file not shown.

456
fizzbuzz/build/blinky.blif Normal file
View File

@ -0,0 +1,456 @@
# Generated by Yosys 0.7+627 (git sha1 e275692e, gcc 8.1.1 -march=x86-64 -mtune=generic -O2 -fstack-protector-strong -fno-plt -fPIC -Os)
.model top
.inputs hwclock pmod_2
.outputs N E W S G pmod_1 ftdi_tx
.names $false
.names $true
1
.names $undef
.gate SB_LUT4 I0=foo.state[3] I1=foo.state[1] I2=foo.state[2] I3=foo.state[0] O=$abc$760$n1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n1 I2=$abc$760$n108 I3=$false O=$abc$760$n59
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 11101111
.gate SB_LUT4 I0=$abc$760$n75_1 I1=$abc$760$n76_1 I2=$abc$760$n77_1 I3=$abc$760$n78_1 O=$abc$760$n74_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 1000000000000000
.gate SB_LUT4 I0=foo.counter[0] I1=foo.counter[1] I2=$false I3=$false O=$abc$760$n75_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0100
.gate SB_LUT4 I0=foo.counter[2] I1=foo.counter[3] I2=foo.counter[4] I3=foo.counter[8] O=$abc$760$n76_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 0000000000000001
.gate SB_LUT4 I0=foo.counter[11] I1=foo.counter[12] I2=foo.counter[10] I3=$false O=$abc$760$n77_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 00010000
.gate SB_LUT4 I0=foo.counter[9] I1=foo.counter[6] I2=foo.counter[7] I3=foo.counter[5] O=$abc$760$n78_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 0100000000000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n108 I2=$abc$760$n80_1 I3=$abc$760$n1 O=$abc$760$n65
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 1111111100001011
.gate SB_LUT4 I0=$abc$760$n81_1 I1=foo.state[0] I2=$false I3=$false O=$abc$760$n80_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0001
.gate SB_LUT4 I0=foo.state[2] I1=foo.state[0] I2=foo.state[3] I3=foo.state[1] O=$abc$760$n81_1
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 0001000000000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n1 I2=foo.counter[0] I3=$abc$760$n108 O=$abc$760$n68
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 1111111011111111
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n69 I2=$abc$760$n108 I3=$false O=$abc$760$n71
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=foo.counter[1] I1=$abc$760$n108 I2=$false I3=$false O=$abc$760$n73
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n74 I2=$abc$760$n108 I3=$false O=$abc$760$n75
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n76 I2=$abc$760$n108 I3=$false O=$abc$760$n77
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n78 I2=$abc$760$n108 I3=$false O=$abc$760$n79
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n80 I2=$abc$760$n108 I3=$false O=$abc$760$n81
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n82 I2=$abc$760$n108 I3=$false O=$abc$760$n83
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n84 I2=$abc$760$n108 I3=$false O=$abc$760$n85
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n86 I2=$abc$760$n108 I3=$false O=$abc$760$n87
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n88 I2=$abc$760$n108 I3=$false O=$abc$760$n89
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n90 I2=$abc$760$n108 I3=$false O=$abc$760$n91
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n92 I2=$abc$760$n108 I3=$false O=$abc$760$n93
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n74_1 I1=$abc$760$n94 I2=$abc$760$n108 I3=$false O=$abc$760$n95
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:48"
.param LUT_INIT 01000000
.gate SB_LUT4 I0=$abc$760$n81_1 I1=$abc$760$n96 I2=$false I3=$false O=$abc$760$n97
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$760$n81_1 I1=$abc$760$n100 I2=$false I3=$false O=$abc$760$n101
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0100
.gate SB_LUT4 I0=$abc$760$n81_1 I1=$abc$760$n102 I2=$false I3=$false O=$abc$760$n103
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:44"
.param LUT_INIT 0100
.gate SB_LUT4 I0=foo.state[3] I1=foo.state[1] I2=foo.state[0] I3=foo.state[2] O=ftdi_tx
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:52"
.param LUT_INIT 1110111010001111
.gate SB_LUT4 I0=foo.counter[12] I1=$false I2=$false I3=$false O=$abc$760$n2
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[11] I1=$false I2=$false I3=$false O=$abc$760$n3
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[9] I1=$false I2=$false I3=$false O=$abc$760$n6
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[8] I1=$false I2=$false I3=$false O=$abc$760$n8
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[4] I1=$false I2=$false I3=$false O=$abc$760$n14
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[3] I1=$false I2=$false I3=$false O=$abc$760$n15
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[2] I1=$false I2=$false I3=$false O=$abc$760$n17
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[0] I1=$false I2=$false I3=$false O=$abc$760$n24
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[1] I1=$false I2=$false I3=$false O=$abc$760$n72
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.state[1] I1=$false I2=$false I3=$false O=$abc$760$n99
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=counter[1] I1=$false I2=$false I3=$false O=$0\counter[31:0][1]
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[5] I1=$false I2=$false I3=$false O=$abc$760$n115
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[6] I1=$false I2=$false I3=$false O=$abc$760$n117
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[7] I1=$false I2=$false I3=$false O=$abc$760$n119
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_LUT4 I0=foo.counter[10] I1=$false I2=$false I3=$false O=$abc$760$n122
.attr src "/usr/bin/../share/yosys/ice40/cells_map.v:40"
.param LUT_INIT 01
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[10] CO=$auto$alumacc.cc:474:replace_alu$70.C[11] I0=$true I1=$abc$760$n122
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[11] CO=$auto$alumacc.cc:474:replace_alu$70.C[12] I0=$false I1=$abc$760$n3
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[12] CO=$abc$760$n108 I0=$false I1=$abc$760$n2
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$abc$760$n24 CO=$auto$alumacc.cc:474:replace_alu$70.C[2] I0=$true I1=$abc$760$n72
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[2] CO=$auto$alumacc.cc:474:replace_alu$70.C[3] I0=$false I1=$abc$760$n17
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[3] CO=$auto$alumacc.cc:474:replace_alu$70.C[4] I0=$false I1=$abc$760$n15
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[4] CO=$auto$alumacc.cc:474:replace_alu$70.C[5] I0=$false I1=$abc$760$n14
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[5] CO=$auto$alumacc.cc:474:replace_alu$70.C[6] I0=$true I1=$abc$760$n115
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[6] CO=$auto$alumacc.cc:474:replace_alu$70.C[7] I0=$true I1=$abc$760$n117
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[7] CO=$auto$alumacc.cc:474:replace_alu$70.C[8] I0=$true I1=$abc$760$n119
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[8] CO=$auto$alumacc.cc:474:replace_alu$70.C[9] I0=$false I1=$abc$760$n8
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$70.C[9] CO=$auto$alumacc.cc:474:replace_alu$70.C[10] I0=$false I1=$abc$760$n6
.attr src "top.v:11|top.v:47|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$true I2=counter[0] I3=$false O=$0\counter[31:0][0]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=counter[10] I3=$auto$alumacc.cc:474:replace_alu$81.C[10] O=$0\counter[31:0][10]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[10] CO=$auto$alumacc.cc:474:replace_alu$81.C[11] I0=$false I1=counter[10]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[11] I3=$auto$alumacc.cc:474:replace_alu$81.C[11] O=$0\counter[31:0][11]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[11] CO=$auto$alumacc.cc:474:replace_alu$81.C[12] I0=$false I1=counter[11]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[12] I3=$auto$alumacc.cc:474:replace_alu$81.C[12] O=$0\counter[31:0][12]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[12] CO=$auto$alumacc.cc:474:replace_alu$81.C[13] I0=$false I1=counter[12]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[13] I3=$auto$alumacc.cc:474:replace_alu$81.C[13] O=$0\counter[31:0][13]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[13] CO=$auto$alumacc.cc:474:replace_alu$81.C[14] I0=$false I1=counter[13]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[14] I3=$auto$alumacc.cc:474:replace_alu$81.C[14] O=$0\counter[31:0][14]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[14] CO=$auto$alumacc.cc:474:replace_alu$81.C[15] I0=$false I1=counter[14]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[15] I3=$auto$alumacc.cc:474:replace_alu$81.C[15] O=$0\counter[31:0][15]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[15] CO=$auto$alumacc.cc:474:replace_alu$81.C[16] I0=$false I1=counter[15]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[16] I3=$auto$alumacc.cc:474:replace_alu$81.C[16] O=$0\counter[31:0][16]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[16] CO=$auto$alumacc.cc:474:replace_alu$81.C[17] I0=$false I1=counter[16]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[17] I3=$auto$alumacc.cc:474:replace_alu$81.C[17] O=$0\counter[31:0][17]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[17] CO=$auto$alumacc.cc:474:replace_alu$81.C[18] I0=$false I1=counter[17]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[18] I3=$auto$alumacc.cc:474:replace_alu$81.C[18] O=$0\counter[31:0][18]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[18] CO=$auto$alumacc.cc:474:replace_alu$81.C[19] I0=$false I1=counter[18]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[19] I3=$auto$alumacc.cc:474:replace_alu$81.C[19] O=$0\counter[31:0][19]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[19] CO=$auto$alumacc.cc:474:replace_alu$81.C[20] I0=$false I1=counter[19]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_CARRY CI=counter[0] CO=$auto$alumacc.cc:474:replace_alu$81.C[2] I0=$false I1=counter[1]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[20] I3=$auto$alumacc.cc:474:replace_alu$81.C[20] O=$0\counter[31:0][20]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[20] CO=$auto$alumacc.cc:474:replace_alu$81.C[21] I0=$false I1=counter[20]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=G I3=$auto$alumacc.cc:474:replace_alu$81.C[21] O=$0\counter[31:0][21]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[21] CO=$auto$alumacc.cc:474:replace_alu$81.C[22] I0=$false I1=G
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=N I3=$auto$alumacc.cc:474:replace_alu$81.C[22] O=$0\counter[31:0][22]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=counter[2] I3=$auto$alumacc.cc:474:replace_alu$81.C[2] O=$0\counter[31:0][2]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[2] CO=$auto$alumacc.cc:474:replace_alu$81.C[3] I0=$false I1=counter[2]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[3] I3=$auto$alumacc.cc:474:replace_alu$81.C[3] O=$0\counter[31:0][3]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[3] CO=$auto$alumacc.cc:474:replace_alu$81.C[4] I0=$false I1=counter[3]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[4] I3=$auto$alumacc.cc:474:replace_alu$81.C[4] O=$0\counter[31:0][4]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[4] CO=$auto$alumacc.cc:474:replace_alu$81.C[5] I0=$false I1=counter[4]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[5] I3=$auto$alumacc.cc:474:replace_alu$81.C[5] O=$0\counter[31:0][5]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[5] CO=$auto$alumacc.cc:474:replace_alu$81.C[6] I0=$false I1=counter[5]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[6] I3=$auto$alumacc.cc:474:replace_alu$81.C[6] O=$0\counter[31:0][6]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[6] CO=$auto$alumacc.cc:474:replace_alu$81.C[7] I0=$false I1=counter[6]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[7] I3=$auto$alumacc.cc:474:replace_alu$81.C[7] O=$0\counter[31:0][7]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[7] CO=$auto$alumacc.cc:474:replace_alu$81.C[8] I0=$false I1=counter[7]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[8] I3=$auto$alumacc.cc:474:replace_alu$81.C[8] O=$0\counter[31:0][8]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[8] CO=$auto$alumacc.cc:474:replace_alu$81.C[9] I0=$false I1=counter[8]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=counter[9] I3=$auto$alumacc.cc:474:replace_alu$81.C[9] O=$0\counter[31:0][9]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$81.C[9] CO=$auto$alumacc.cc:474:replace_alu$81.C[10] I0=$false I1=counter[9]
.attr src "top.v:14|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$true I2=foo.counter[0] I3=$false O=$abc$760$n69
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[10] I3=$auto$alumacc.cc:474:replace_alu$84.C[10] O=$abc$760$n90
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[10] CO=$auto$alumacc.cc:474:replace_alu$84.C[11] I0=$false I1=foo.counter[10]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[11] I3=$auto$alumacc.cc:474:replace_alu$84.C[11] O=$abc$760$n92
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[11] CO=$auto$alumacc.cc:474:replace_alu$84.C[12] I0=$false I1=foo.counter[11]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[12] I3=$auto$alumacc.cc:474:replace_alu$84.C[12] O=$abc$760$n94
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=foo.counter[0] CO=$auto$alumacc.cc:474:replace_alu$84.C[2] I0=$false I1=foo.counter[1]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[2] I3=$auto$alumacc.cc:474:replace_alu$84.C[2] O=$abc$760$n74
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[2] CO=$auto$alumacc.cc:474:replace_alu$84.C[3] I0=$false I1=foo.counter[2]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[3] I3=$auto$alumacc.cc:474:replace_alu$84.C[3] O=$abc$760$n76
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[3] CO=$auto$alumacc.cc:474:replace_alu$84.C[4] I0=$false I1=foo.counter[3]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[4] I3=$auto$alumacc.cc:474:replace_alu$84.C[4] O=$abc$760$n78
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[4] CO=$auto$alumacc.cc:474:replace_alu$84.C[5] I0=$false I1=foo.counter[4]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[5] I3=$auto$alumacc.cc:474:replace_alu$84.C[5] O=$abc$760$n80
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[5] CO=$auto$alumacc.cc:474:replace_alu$84.C[6] I0=$false I1=foo.counter[5]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[6] I3=$auto$alumacc.cc:474:replace_alu$84.C[6] O=$abc$760$n82
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[6] CO=$auto$alumacc.cc:474:replace_alu$84.C[7] I0=$false I1=foo.counter[6]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[7] I3=$auto$alumacc.cc:474:replace_alu$84.C[7] O=$abc$760$n84
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[7] CO=$auto$alumacc.cc:474:replace_alu$84.C[8] I0=$false I1=foo.counter[7]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[8] I3=$auto$alumacc.cc:474:replace_alu$84.C[8] O=$abc$760$n86
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[8] CO=$auto$alumacc.cc:474:replace_alu$84.C[9] I0=$false I1=foo.counter[8]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.counter[9] I3=$auto$alumacc.cc:474:replace_alu$84.C[9] O=$abc$760$n88
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$84.C[9] CO=$auto$alumacc.cc:474:replace_alu$84.C[10] I0=$false I1=foo.counter[9]
.attr src "top.v:11|top.v:48|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$true I2=foo.state[0] I3=$false O=$abc$760$n96
.attr src "top.v:11|top.v:52|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=foo.state[0] CO=$auto$alumacc.cc:474:replace_alu$87.C[2] I0=$false I1=foo.state[1]
.attr src "top.v:11|top.v:52|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.state[2] I3=$auto$alumacc.cc:474:replace_alu$87.C[2] O=$abc$760$n100
.attr src "top.v:11|top.v:52|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_CARRY CI=$auto$alumacc.cc:474:replace_alu$87.C[2] CO=$auto$alumacc.cc:474:replace_alu$87.C[3] I0=$false I1=foo.state[2]
.attr src "top.v:11|top.v:52|/usr/bin/../share/yosys/ice40/arith_map.v:47"
.gate SB_LUT4 I0=$false I1=$false I2=foo.state[3] I3=$auto$alumacc.cc:474:replace_alu$87.C[3] O=$abc$760$n102
.attr src "top.v:11|top.v:52|/usr/bin/../share/yosys/ice40/arith_map.v:53"
.param LUT_INIT 0110100110010110
.gate SB_DFF C=hwclock D=$0\counter[31:0][0] Q=counter[0]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFE C=hwclock D=$0\counter[31:0][1] E=counter[0] Q=counter[1]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFF C=hwclock D=$0\counter[31:0][2] Q=counter[2]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][3] Q=counter[3]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][4] Q=counter[4]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][5] Q=counter[5]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][6] Q=counter[6]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][7] Q=counter[7]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][8] Q=counter[8]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][9] Q=counter[9]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][10] Q=counter[10]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][11] Q=counter[11]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][12] Q=counter[12]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][13] Q=counter[13]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][14] Q=counter[14]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][15] Q=counter[15]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][16] Q=counter[16]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][17] Q=counter[17]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][18] Q=counter[18]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][19] Q=counter[19]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][20] Q=counter[20]
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][21] Q=G
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFF C=hwclock D=$0\counter[31:0][22] Q=N
.attr src "top.v:13|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFESS C=hwclock D=$abc$760$n97 E=$abc$760$n59 Q=foo.state[0] S=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=hwclock D=$abc$760$n99 E=$abc$760$n65 Q=foo.state[1] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=hwclock D=$abc$760$n101 E=$abc$760$n59 Q=foo.state[2] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFESR C=hwclock D=$abc$760$n103 E=$abc$760$n59 Q=foo.state[3] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFSR C=hwclock D=$abc$760$n71 Q=foo.counter[0] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFESR C=hwclock D=$abc$760$n73 E=$abc$760$n68 Q=foo.counter[1] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:8"
.gate SB_DFFSR C=hwclock D=$abc$760$n75 Q=foo.counter[2] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n77 Q=foo.counter[3] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n79 Q=foo.counter[4] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n81 Q=foo.counter[5] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n83 Q=foo.counter[6] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n85 Q=foo.counter[7] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n87 Q=foo.counter[8] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n89 Q=foo.counter[9] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n91 Q=foo.counter[10] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n93 Q=foo.counter[11] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.gate SB_DFFSR C=hwclock D=$abc$760$n95 Q=foo.counter[12] R=$abc$760$n1
.attr src "top.v:11|top.v:35|/usr/bin/../share/yosys/ice40/cells_map.v:2"
.names $undef E
1 1
.names $undef S
1 1
.names $undef W
1 1
.names G counter[21]
1 1
.names N counter[22]
1 1
.names $undef counter[23]
1 1
.names $undef counter[24]
1 1
.names $undef counter[25]
1 1
.names $undef counter[26]
1 1
.names $undef counter[27]
1 1
.names $undef counter[28]
1 1
.names $undef counter[29]
1 1
.names $undef counter[30]
1 1
.names $undef counter[31]
1 1
.names hwclock foo.hwclock
1 1
.names ftdi_tx foo.out
1 1
.names $undef pmod_1
1 1
.end

16
fizzbuzz/pinmap.pcf Normal file
View File

@ -0,0 +1,16 @@
# example.pcf
set_io --warn-no-port N 99
set_io --warn-no-port E 98
set_io --warn-no-port S 97
set_io --warn-no-port W 96
set_io --warn-no-port G 95
set_io --warn-no-port hwclock 21
set_io --warn-no-port pmod_1 78
set_io --warn-no-port pmod_2 79
set_io --warn-no-port ftdi_tx 8
set_io --warn-no-port ftdi_rx 9

75
fizzbuzz/top.v Normal file
View File

@ -0,0 +1,75 @@
module top(output N, output E, output W, output S, output G, input hwclock, output pmod_1, input pmod_2, output ftdi_tx);
reg [31:0] counter = 32'b0;
assign G = counter[21];
assign N = counter[22];
wire busy;
serial foo (hwclock, "q", 0, 1, ftdi_tx, busy);
always @ (posedge hwclock) begin
counter <= counter + 1;
end
endmodule
module serial(input hwclock, input [7:0] char, input reset, input send, output reg out, output busy);
reg [12:0] counter;
reg [7:0] char1;
assign busy = (state == IDLE) ? 1'b1 : 1'b0;
localparam IDLE = 4'd0, START = 4'd1;
localparam BIT0 = 4'd2, BIT1 = 4'd3, BIT2 = 4'd4, BIT3 = 4'd5, BIT4 = 4'd6,
BIT5 = 4'd7, BIT6 = 4'd8, BIT7 = 4'd9, STOP = 4'd10;
localparam SPACE = 1'b0;
localparam MARK = 1'b1;
reg [3:0] state = IDLE;
always @ (posedge hwclock) begin
if (reset) begin
state <= IDLE;
counter <= 0;
end else if (state == IDLE) begin
if (send == 1) begin
state <= START;
counter <= 0;
char1 <= char;
end
end else begin
// 12_000_000 / 9600 = 1250
if (counter < 1250) begin
counter <= counter + 1;
end else begin
counter <= 0;
if (state != STOP) begin
state <= state + 1'b1;
end else begin
state <= IDLE;
end
end
end
end
always @ (*) begin
case (state)
IDLE: out = MARK; // Stop bit is also IDLE
START: out = SPACE;
BIT0: out = char1[0];
BIT1: out = char1[1];
BIT2: out = char1[2];
BIT3: out = char1[3];
BIT4: out = char1[4];
BIT5: out = char1[5];
BIT6: out = char1[6];
BIT7: out = char1[7];
default: out = MARK;
endcase
end
endmodule