aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-06-26 16:04:10 +0200
committerDavid Shah <davey1576@gmail.com>2018-06-26 16:04:10 +0200
commit841d126672112e65450322c5f905bbf22b7dfa54 (patch)
tree5eed7149e47d668ccd38e4bfa281c537c2005ef5
parent95de0a36b43776ffd07993ff7d2be994981aa8fb (diff)
downloadnextpnr-841d126672112e65450322c5f905bbf22b7dfa54.tar.gz
nextpnr-841d126672112e65450322c5f905bbf22b7dfa54.tar.bz2
nextpnr-841d126672112e65450322c5f905bbf22b7dfa54.zip
CarryInSet added to bitstream gen, add counter tb
Signed-off-by: David Shah <davey1576@gmail.com>
-rw-r--r--ice40/bitstream.cc7
-rw-r--r--ice40/carry_tests/.gitignore2
-rw-r--r--ice40/carry_tests/counter_tb.v23
-rwxr-xr-xice40/carry_tests/test.sh15
4 files changed, 36 insertions, 11 deletions
diff --git a/ice40/bitstream.cc b/ice40/bitstream.cc
index 6ccad2fe..942c9977 100644
--- a/ice40/bitstream.cc
+++ b/ice40/bitstream.cc
@@ -174,6 +174,13 @@ void write_asc(const Context *ctx, std::ostream &out)
set_config(ti, config.at(y).at(x), "LC_" + std::to_string(z), lc.at(i), i);
if (dff_enable)
set_config(ti, config.at(y).at(x), "NegClk", neg_clk);
+
+ bool carry_const = get_param_or_def(cell.second.get(), ctx->id("CIN_CONST"));
+ bool carry_set = get_param_or_def(cell.second.get(), ctx->id("CIN_SET"));
+ if (carry_const) {
+ assert(z == 0);
+ set_config(ti, config.at(y).at(x), "CarryInSet", carry_set);
+ }
} else if (cell.second->type == ctx->id("SB_IO")) {
const TileInfoPOD &ti = bi.tiles_nonrouting[TILE_IO];
unsigned pin_type = get_param_or_def(cell.second.get(), ctx->id("PIN_TYPE"));
diff --git a/ice40/carry_tests/.gitignore b/ice40/carry_tests/.gitignore
index 749cb303..427dd825 100644
--- a/ice40/carry_tests/.gitignore
+++ b/ice40/carry_tests/.gitignore
@@ -1,2 +1,4 @@
*.vcd
*_out.v
+*.out
+
diff --git a/ice40/carry_tests/counter_tb.v b/ice40/carry_tests/counter_tb.v
new file mode 100644
index 00000000..ede133a7
--- /dev/null
+++ b/ice40/carry_tests/counter_tb.v
@@ -0,0 +1,23 @@
+module counter_tb;
+ reg clk;
+ always #5 clk = (clk === 1'b0);
+
+ wire outa, outb, outc, outd;
+
+ chip uut (
+ .clk(clk),
+ .cen(1'b1),
+ .rst(1'b0),
+ .outa(outa),
+ .outb(outb),
+ .outc(outc),
+ .outd(outd)
+ );
+
+ initial begin
+ $dumpfile("counter_tb.vcd");
+ $dumpvars(0, counter_tb);
+ repeat (100000) @(posedge clk);
+ $finish;
+ end
+endmodule
diff --git a/ice40/carry_tests/test.sh b/ice40/carry_tests/test.sh
index 9f6b00b2..01aa4209 100755
--- a/ice40/carry_tests/test.sh
+++ b/ice40/carry_tests/test.sh
@@ -2,15 +2,8 @@
set -ex
NAME=${1%.v}
yosys -p "synth_ice40 -top top; write_json ${NAME}.json" $1
-../../nextpnr-ice40 --force --json ${NAME}.json --pcf test.pcf --asc ${NAME}.asc --verbose ../../python/dump_design.py
-#icebox_vlog -p test.pcf ${NAME}.asc > ${NAME}_out.v
+../../nextpnr-ice40 --json ${NAME}.json --pcf test.pcf --asc ${NAME}.asc --verbose
+icebox_vlog -p test.pcf ${NAME}.asc > ${NAME}_out.v
+iverilog -o ${NAME}_sim.out ${NAME}_tb.v ${NAME}_out.v
+vvp ${NAME}_sim.out
-#yosys -p "read_verilog +/ice40/cells_sim.v;\
-# rename chip gate;\
-# read_verilog $1;\
-# rename top gold;\
-# hierarchy;\
-# proc;\
-# clk2fflogic;\
-# miter -equiv -flatten -ignore_gold_x -make_outputs -make_outcmp gold gate miter;\
-# sat -dump_vcd equiv_${NAME}.vcd -verify-no-timeout -timeout 60 -seq 50 -prove trigger 0 -prove-skip 1 -show-inputs -show-outputs miter" ${NAME}_out.v