ice40: Pack constants to LCs
Signed-off-by: David Shah <davey1576@gmail.com>
This commit is contained in:
parent
f72807f790
commit
67a5cedbe3
@ -1,3 +1,3 @@
|
|||||||
read_verilog blinky.v
|
read_verilog blinky.v
|
||||||
synth_ice40 -nocarry -top blinky
|
synth_ice40 -nocarry -top blinky
|
||||||
write_json blinky.json
|
write_json blinky_nopack.json
|
||||||
|
8
ice40/blinky_noyspack.sh
Executable file
8
ice40/blinky_noyspack.sh
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -ex
|
||||||
|
yosys blinky_nopack.ys
|
||||||
|
../nextpnr-ice40 --json blinky_nopack.json --asc blinky.asc --pack
|
||||||
|
icepack blinky.asc blinky.bin
|
||||||
|
icebox_vlog blinky.asc > blinky_chip.v
|
||||||
|
iverilog -o blinky_tb blinky_chip.v blinky_tb.v
|
||||||
|
vvp -N ./blinky_tb
|
@ -1,9 +1,3 @@
|
|||||||
read_verilog icebreaker.v
|
read_verilog icebreaker.v
|
||||||
read_verilog -lib +/ice40/cells_sim.v
|
synth_ice40 -nocarry -top icebreaker
|
||||||
synth -top icebreaker
|
|
||||||
abc -lut 4
|
|
||||||
techmap -map blinky_map.v
|
|
||||||
splitnets
|
|
||||||
opt_clean
|
|
||||||
stat
|
|
||||||
write_json icebreaker.json
|
write_json icebreaker.json
|
||||||
|
@ -89,9 +89,34 @@ static void pack_nonlut_ffs(Design *design)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Pack constants (simple implementation)
|
||||||
|
static void pack_constants(Design *design) {
|
||||||
|
CellInfo *gnd_cell = create_ice_cell(design, "ICESTORM_LC",
|
||||||
|
"$PACKER_GND");
|
||||||
|
gnd_cell->attrs["LUT_INIT"] = "0";
|
||||||
|
|
||||||
|
CellInfo *vcc_cell = create_ice_cell(design, "ICESTORM_LC",
|
||||||
|
"$PACKER_VCC");
|
||||||
|
vcc_cell->attrs["LUT_INIT"] = "1";
|
||||||
|
|
||||||
|
for (auto net : design->nets) {
|
||||||
|
NetInfo *ni = net.second;
|
||||||
|
if (ni->driver.cell != nullptr && ni->driver.cell->type == "GND") {
|
||||||
|
ni->driver.cell = gnd_cell;
|
||||||
|
ni->driver.port = "O";
|
||||||
|
design->cells[gnd_cell->name] = gnd_cell;
|
||||||
|
} else if (ni->driver.cell != nullptr && ni->driver.cell->type == "VCC") {
|
||||||
|
ni->driver.cell = vcc_cell;
|
||||||
|
ni->driver.port = "O";
|
||||||
|
design->cells[vcc_cell->name] = vcc_cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Main pack function
|
// Main pack function
|
||||||
void pack_design(Design *design)
|
void pack_design(Design *design)
|
||||||
{
|
{
|
||||||
|
pack_constants(design);
|
||||||
pack_lut_lutffs(design);
|
pack_lut_lutffs(design);
|
||||||
pack_nonlut_ffs(design);
|
pack_nonlut_ffs(design);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user