Moved all tests in arch sub directory
authorMiodrag Milanovic <mmicko@gmail.com>
Fri, 18 Oct 2019 09:06:12 +0000 (11:06 +0200)
committerMiodrag Milanovic <mmicko@gmail.com>
Fri, 18 Oct 2019 09:06:12 +0000 (11:06 +0200)
301 files changed:
Makefile
tests/anlogic/.gitignore [deleted file]
tests/anlogic/add_sub.v [deleted file]
tests/anlogic/add_sub.ys [deleted file]
tests/anlogic/counter.v [deleted file]
tests/anlogic/counter.ys [deleted file]
tests/anlogic/dffs.v [deleted file]
tests/anlogic/dffs.ys [deleted file]
tests/anlogic/fsm.v [deleted file]
tests/anlogic/fsm.ys [deleted file]
tests/anlogic/latches.v [deleted file]
tests/anlogic/latches.ys [deleted file]
tests/anlogic/memory.v [deleted file]
tests/anlogic/memory.ys [deleted file]
tests/anlogic/mux.v [deleted file]
tests/anlogic/mux.ys [deleted file]
tests/anlogic/run-test.sh [deleted file]
tests/anlogic/shifter.v [deleted file]
tests/anlogic/shifter.ys [deleted file]
tests/anlogic/tribuf.v [deleted file]
tests/anlogic/tribuf.ys [deleted file]
tests/arch/anlogic/.gitignore [new file with mode: 0644]
tests/arch/anlogic/add_sub.v [new file with mode: 0644]
tests/arch/anlogic/add_sub.ys [new file with mode: 0644]
tests/arch/anlogic/counter.v [new file with mode: 0644]
tests/arch/anlogic/counter.ys [new file with mode: 0644]
tests/arch/anlogic/dffs.v [new file with mode: 0644]
tests/arch/anlogic/dffs.ys [new file with mode: 0644]
tests/arch/anlogic/fsm.v [new file with mode: 0644]
tests/arch/anlogic/fsm.ys [new file with mode: 0644]
tests/arch/anlogic/latches.v [new file with mode: 0644]
tests/arch/anlogic/latches.ys [new file with mode: 0644]
tests/arch/anlogic/memory.v [new file with mode: 0644]
tests/arch/anlogic/memory.ys [new file with mode: 0644]
tests/arch/anlogic/mux.v [new file with mode: 0644]
tests/arch/anlogic/mux.ys [new file with mode: 0644]
tests/arch/anlogic/run-test.sh [new file with mode: 0755]
tests/arch/anlogic/shifter.v [new file with mode: 0644]
tests/arch/anlogic/shifter.ys [new file with mode: 0644]
tests/arch/anlogic/tribuf.v [new file with mode: 0644]
tests/arch/anlogic/tribuf.ys [new file with mode: 0644]
tests/arch/ecp5/.gitignore [new file with mode: 0644]
tests/arch/ecp5/add_sub.v [new file with mode: 0644]
tests/arch/ecp5/add_sub.ys [new file with mode: 0644]
tests/arch/ecp5/adffs.v [new file with mode: 0644]
tests/arch/ecp5/adffs.ys [new file with mode: 0644]
tests/arch/ecp5/counter.v [new file with mode: 0644]
tests/arch/ecp5/counter.ys [new file with mode: 0644]
tests/arch/ecp5/dffs.v [new file with mode: 0644]
tests/arch/ecp5/dffs.ys [new file with mode: 0644]
tests/arch/ecp5/dpram.v [new file with mode: 0644]
tests/arch/ecp5/dpram.ys [new file with mode: 0644]
tests/arch/ecp5/fsm.v [new file with mode: 0644]
tests/arch/ecp5/fsm.ys [new file with mode: 0644]
tests/arch/ecp5/latches.v [new file with mode: 0644]
tests/arch/ecp5/latches.ys [new file with mode: 0644]
tests/arch/ecp5/logic.v [new file with mode: 0644]
tests/arch/ecp5/logic.ys [new file with mode: 0644]
tests/arch/ecp5/macc.v [new file with mode: 0644]
tests/arch/ecp5/macc.ys [new file with mode: 0644]
tests/arch/ecp5/memory.v [new file with mode: 0644]
tests/arch/ecp5/memory.ys [new file with mode: 0644]
tests/arch/ecp5/mul.v [new file with mode: 0644]
tests/arch/ecp5/mul.ys [new file with mode: 0644]
tests/arch/ecp5/mux.v [new file with mode: 0644]
tests/arch/ecp5/mux.ys [new file with mode: 0644]
tests/arch/ecp5/rom.v [new file with mode: 0644]
tests/arch/ecp5/rom.ys [new file with mode: 0644]
tests/arch/ecp5/run-test.sh [new file with mode: 0755]
tests/arch/ecp5/shifter.v [new file with mode: 0644]
tests/arch/ecp5/shifter.ys [new file with mode: 0644]
tests/arch/ecp5/tribuf.v [new file with mode: 0644]
tests/arch/ecp5/tribuf.ys [new file with mode: 0644]
tests/arch/efinix/.gitignore [new file with mode: 0644]
tests/arch/efinix/add_sub.v [new file with mode: 0644]
tests/arch/efinix/add_sub.ys [new file with mode: 0644]
tests/arch/efinix/adffs.v [new file with mode: 0644]
tests/arch/efinix/adffs.ys [new file with mode: 0644]
tests/arch/efinix/counter.v [new file with mode: 0644]
tests/arch/efinix/counter.ys [new file with mode: 0644]
tests/arch/efinix/dffs.v [new file with mode: 0644]
tests/arch/efinix/dffs.ys [new file with mode: 0644]
tests/arch/efinix/fsm.v [new file with mode: 0644]
tests/arch/efinix/fsm.ys [new file with mode: 0644]
tests/arch/efinix/latches.v [new file with mode: 0644]
tests/arch/efinix/latches.ys [new file with mode: 0644]
tests/arch/efinix/logic.v [new file with mode: 0644]
tests/arch/efinix/logic.ys [new file with mode: 0644]
tests/arch/efinix/memory.v [new file with mode: 0644]
tests/arch/efinix/memory.ys [new file with mode: 0644]
tests/arch/efinix/mux.v [new file with mode: 0644]
tests/arch/efinix/mux.ys [new file with mode: 0644]
tests/arch/efinix/run-test.sh [new file with mode: 0755]
tests/arch/efinix/shifter.v [new file with mode: 0644]
tests/arch/efinix/shifter.ys [new file with mode: 0644]
tests/arch/efinix/tribuf.v [new file with mode: 0644]
tests/arch/efinix/tribuf.ys [new file with mode: 0644]
tests/arch/ice40/.gitignore [new file with mode: 0644]
tests/arch/ice40/add_sub.v [new file with mode: 0644]
tests/arch/ice40/add_sub.ys [new file with mode: 0644]
tests/arch/ice40/adffs.v [new file with mode: 0644]
tests/arch/ice40/adffs.ys [new file with mode: 0644]
tests/arch/ice40/alu.v [new file with mode: 0644]
tests/arch/ice40/alu.ys [new file with mode: 0644]
tests/arch/ice40/counter.v [new file with mode: 0644]
tests/arch/ice40/counter.ys [new file with mode: 0644]
tests/arch/ice40/dffs.v [new file with mode: 0644]
tests/arch/ice40/dffs.ys [new file with mode: 0644]
tests/arch/ice40/div_mod.v [new file with mode: 0644]
tests/arch/ice40/div_mod.ys [new file with mode: 0644]
tests/arch/ice40/dpram.v [new file with mode: 0644]
tests/arch/ice40/dpram.ys [new file with mode: 0644]
tests/arch/ice40/fsm.v [new file with mode: 0644]
tests/arch/ice40/fsm.ys [new file with mode: 0644]
tests/arch/ice40/ice40_opt.ys [new file with mode: 0644]
tests/arch/ice40/latches.v [new file with mode: 0644]
tests/arch/ice40/latches.ys [new file with mode: 0644]
tests/arch/ice40/logic.v [new file with mode: 0644]
tests/arch/ice40/logic.ys [new file with mode: 0644]
tests/arch/ice40/macc.v [new file with mode: 0644]
tests/arch/ice40/macc.ys [new file with mode: 0644]
tests/arch/ice40/memory.v [new file with mode: 0644]
tests/arch/ice40/memory.ys [new file with mode: 0644]
tests/arch/ice40/mul.v [new file with mode: 0644]
tests/arch/ice40/mul.ys [new file with mode: 0644]
tests/arch/ice40/mux.v [new file with mode: 0644]
tests/arch/ice40/mux.ys [new file with mode: 0644]
tests/arch/ice40/rom.v [new file with mode: 0644]
tests/arch/ice40/rom.ys [new file with mode: 0644]
tests/arch/ice40/run-test.sh [new file with mode: 0755]
tests/arch/ice40/shifter.v [new file with mode: 0644]
tests/arch/ice40/shifter.ys [new file with mode: 0644]
tests/arch/ice40/tribuf.v [new file with mode: 0644]
tests/arch/ice40/tribuf.ys [new file with mode: 0644]
tests/arch/ice40/wrapcarry.ys [new file with mode: 0644]
tests/arch/xilinx/.gitignore [new file with mode: 0644]
tests/arch/xilinx/add_sub.v [new file with mode: 0644]
tests/arch/xilinx/add_sub.ys [new file with mode: 0644]
tests/arch/xilinx/adffs.v [new file with mode: 0644]
tests/arch/xilinx/adffs.ys [new file with mode: 0644]
tests/arch/xilinx/counter.v [new file with mode: 0644]
tests/arch/xilinx/counter.ys [new file with mode: 0644]
tests/arch/xilinx/dffs.v [new file with mode: 0644]
tests/arch/xilinx/dffs.ys [new file with mode: 0644]
tests/arch/xilinx/dsp_simd.ys [new file with mode: 0644]
tests/arch/xilinx/fsm.v [new file with mode: 0644]
tests/arch/xilinx/fsm.ys [new file with mode: 0644]
tests/arch/xilinx/latches.v [new file with mode: 0644]
tests/arch/xilinx/latches.ys [new file with mode: 0644]
tests/arch/xilinx/logic.v [new file with mode: 0644]
tests/arch/xilinx/logic.ys [new file with mode: 0644]
tests/arch/xilinx/macc.sh [new file with mode: 0644]
tests/arch/xilinx/macc.v [new file with mode: 0644]
tests/arch/xilinx/macc.ys [new file with mode: 0644]
tests/arch/xilinx/macc_tb.v [new file with mode: 0644]
tests/arch/xilinx/memory.v [new file with mode: 0644]
tests/arch/xilinx/memory.ys [new file with mode: 0644]
tests/arch/xilinx/mul.v [new file with mode: 0644]
tests/arch/xilinx/mul.ys [new file with mode: 0644]
tests/arch/xilinx/mul_unsigned.v [new file with mode: 0644]
tests/arch/xilinx/mul_unsigned.ys [new file with mode: 0644]
tests/arch/xilinx/mux.v [new file with mode: 0644]
tests/arch/xilinx/mux.ys [new file with mode: 0644]
tests/arch/xilinx/pmgen_xilinx_srl.ys [new file with mode: 0644]
tests/arch/xilinx/run-test.sh [new file with mode: 0755]
tests/arch/xilinx/shifter.v [new file with mode: 0644]
tests/arch/xilinx/shifter.ys [new file with mode: 0644]
tests/arch/xilinx/tribuf.v [new file with mode: 0644]
tests/arch/xilinx/tribuf.ys [new file with mode: 0644]
tests/arch/xilinx/xilinx_srl.v [new file with mode: 0644]
tests/arch/xilinx/xilinx_srl.ys [new file with mode: 0644]
tests/ecp5/.gitignore [deleted file]
tests/ecp5/add_sub.v [deleted file]
tests/ecp5/add_sub.ys [deleted file]
tests/ecp5/adffs.v [deleted file]
tests/ecp5/adffs.ys [deleted file]
tests/ecp5/counter.v [deleted file]
tests/ecp5/counter.ys [deleted file]
tests/ecp5/dffs.v [deleted file]
tests/ecp5/dffs.ys [deleted file]
tests/ecp5/dpram.v [deleted file]
tests/ecp5/dpram.ys [deleted file]
tests/ecp5/fsm.v [deleted file]
tests/ecp5/fsm.ys [deleted file]
tests/ecp5/latches.v [deleted file]
tests/ecp5/latches.ys [deleted file]
tests/ecp5/logic.v [deleted file]
tests/ecp5/logic.ys [deleted file]
tests/ecp5/macc.v [deleted file]
tests/ecp5/macc.ys [deleted file]
tests/ecp5/memory.v [deleted file]
tests/ecp5/memory.ys [deleted file]
tests/ecp5/mul.v [deleted file]
tests/ecp5/mul.ys [deleted file]
tests/ecp5/mux.v [deleted file]
tests/ecp5/mux.ys [deleted file]
tests/ecp5/rom.v [deleted file]
tests/ecp5/rom.ys [deleted file]
tests/ecp5/run-test.sh [deleted file]
tests/ecp5/shifter.v [deleted file]
tests/ecp5/shifter.ys [deleted file]
tests/ecp5/tribuf.v [deleted file]
tests/ecp5/tribuf.ys [deleted file]
tests/efinix/.gitignore [deleted file]
tests/efinix/add_sub.v [deleted file]
tests/efinix/add_sub.ys [deleted file]
tests/efinix/adffs.v [deleted file]
tests/efinix/adffs.ys [deleted file]
tests/efinix/counter.v [deleted file]
tests/efinix/counter.ys [deleted file]
tests/efinix/dffs.v [deleted file]
tests/efinix/dffs.ys [deleted file]
tests/efinix/fsm.v [deleted file]
tests/efinix/fsm.ys [deleted file]
tests/efinix/latches.v [deleted file]
tests/efinix/latches.ys [deleted file]
tests/efinix/logic.v [deleted file]
tests/efinix/logic.ys [deleted file]
tests/efinix/memory.v [deleted file]
tests/efinix/memory.ys [deleted file]
tests/efinix/mux.v [deleted file]
tests/efinix/mux.ys [deleted file]
tests/efinix/run-test.sh [deleted file]
tests/efinix/shifter.v [deleted file]
tests/efinix/shifter.ys [deleted file]
tests/efinix/tribuf.v [deleted file]
tests/efinix/tribuf.ys [deleted file]
tests/ice40/.gitignore [deleted file]
tests/ice40/add_sub.v [deleted file]
tests/ice40/add_sub.ys [deleted file]
tests/ice40/adffs.v [deleted file]
tests/ice40/adffs.ys [deleted file]
tests/ice40/alu.v [deleted file]
tests/ice40/alu.ys [deleted file]
tests/ice40/counter.v [deleted file]
tests/ice40/counter.ys [deleted file]
tests/ice40/dffs.v [deleted file]
tests/ice40/dffs.ys [deleted file]
tests/ice40/div_mod.v [deleted file]
tests/ice40/div_mod.ys [deleted file]
tests/ice40/dpram.v [deleted file]
tests/ice40/dpram.ys [deleted file]
tests/ice40/fsm.v [deleted file]
tests/ice40/fsm.ys [deleted file]
tests/ice40/ice40_opt.ys [deleted file]
tests/ice40/latches.v [deleted file]
tests/ice40/latches.ys [deleted file]
tests/ice40/logic.v [deleted file]
tests/ice40/logic.ys [deleted file]
tests/ice40/macc.v [deleted file]
tests/ice40/macc.ys [deleted file]
tests/ice40/memory.v [deleted file]
tests/ice40/memory.ys [deleted file]
tests/ice40/mul.v [deleted file]
tests/ice40/mul.ys [deleted file]
tests/ice40/mux.v [deleted file]
tests/ice40/mux.ys [deleted file]
tests/ice40/rom.v [deleted file]
tests/ice40/rom.ys [deleted file]
tests/ice40/run-test.sh [deleted file]
tests/ice40/shifter.v [deleted file]
tests/ice40/shifter.ys [deleted file]
tests/ice40/tribuf.v [deleted file]
tests/ice40/tribuf.ys [deleted file]
tests/ice40/wrapcarry.ys [deleted file]
tests/xilinx/.gitignore [deleted file]
tests/xilinx/add_sub.v [deleted file]
tests/xilinx/add_sub.ys [deleted file]
tests/xilinx/adffs.v [deleted file]
tests/xilinx/adffs.ys [deleted file]
tests/xilinx/counter.v [deleted file]
tests/xilinx/counter.ys [deleted file]
tests/xilinx/dffs.v [deleted file]
tests/xilinx/dffs.ys [deleted file]
tests/xilinx/dsp_simd.ys [deleted file]
tests/xilinx/fsm.v [deleted file]
tests/xilinx/fsm.ys [deleted file]
tests/xilinx/latches.v [deleted file]
tests/xilinx/latches.ys [deleted file]
tests/xilinx/logic.v [deleted file]
tests/xilinx/logic.ys [deleted file]
tests/xilinx/macc.sh [deleted file]
tests/xilinx/macc.v [deleted file]
tests/xilinx/macc.ys [deleted file]
tests/xilinx/macc_tb.v [deleted file]
tests/xilinx/memory.v [deleted file]
tests/xilinx/memory.ys [deleted file]
tests/xilinx/mul.v [deleted file]
tests/xilinx/mul.ys [deleted file]
tests/xilinx/mul_unsigned.v [deleted file]
tests/xilinx/mul_unsigned.ys [deleted file]
tests/xilinx/mux.v [deleted file]
tests/xilinx/mux.ys [deleted file]
tests/xilinx/pmgen_xilinx_srl.ys [deleted file]
tests/xilinx/run-test.sh [deleted file]
tests/xilinx/shifter.v [deleted file]
tests/xilinx/shifter.ys [deleted file]
tests/xilinx/tribuf.v [deleted file]
tests/xilinx/tribuf.ys [deleted file]
tests/xilinx/xilinx_srl.v [deleted file]
tests/xilinx/xilinx_srl.ys [deleted file]

index 70d683c340377f4fcc455237cb32aac6d73ddc16..a24f19b6a6d31b4316ba571d39a269a1102ce341 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -713,12 +713,12 @@ test: $(TARGETS) $(EXTRA_TARGETS)
        +cd tests/opt && bash run-test.sh
        +cd tests/aiger && bash run-test.sh $(ABCOPT)
        +cd tests/arch && bash run-test.sh
-       +cd tests/ice40 && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/ice40 && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/xilinx && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/ecp5 && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/efinix && bash run-test.sh $(SEEDOPT)
+       +cd tests/arch/anlogic && bash run-test.sh $(SEEDOPT)
        +cd tests/rpc && bash run-test.sh
-       +cd tests/efinix && bash run-test.sh $(SEEDOPT)
-       +cd tests/anlogic && bash run-test.sh $(SEEDOPT)
-       +cd tests/ecp5 && bash run-test.sh $(SEEDOPT)
-       +cd tests/xilinx && bash run-test.sh $(SEEDOPT)
        @echo ""
        @echo "  Passed \"make test\"."
        @echo ""
diff --git a/tests/anlogic/.gitignore b/tests/anlogic/.gitignore
deleted file mode 100644 (file)
index 9a71dca..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.log
-/run-test.mk
-+*_synth.v
-+*_testbench
diff --git a/tests/anlogic/add_sub.v b/tests/anlogic/add_sub.v
deleted file mode 100644 (file)
index 177c32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x + y;
-assign B =  x - y;
-
-endmodule
diff --git a/tests/anlogic/add_sub.ys b/tests/anlogic/add_sub.ys
deleted file mode 100644 (file)
index b8b67cc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog add_sub.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 10 t:AL_MAP_ADDER
-select -assert-count 4 t:AL_MAP_LUT1
-
-select -assert-none t:AL_MAP_LUT1 t:AL_MAP_ADDER %% t:* %D
diff --git a/tests/anlogic/counter.v b/tests/anlogic/counter.v
deleted file mode 100644 (file)
index 52852f8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-reset\r
-);\r
-    output [7:0] out;\r
-    input clk, reset;\r
-    reg [7:0] out;\r
-\r
-    always @(posedge clk, posedge reset)\r
-               if (reset) begin\r
-                       out <= 8'b0 ;\r
-               end else\r
-                       out <= out + 1;\r
-\r
-\r
-endmodule\r
diff --git a/tests/anlogic/counter.ys b/tests/anlogic/counter.ys
deleted file mode 100644 (file)
index 036fdba..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog counter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 9 t:AL_MAP_ADDER
-select -assert-count 8 t:AL_MAP_SEQ
-select -assert-none t:AL_MAP_SEQ t:AL_MAP_ADDER %% t:* %D
diff --git a/tests/anlogic/dffs.v b/tests/anlogic/dffs.v
deleted file mode 100644 (file)
index 3418787..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-module dff
-    ( input d, clk, output reg q );
-       always @( posedge clk )
-            q <= d;
-endmodule
-
-module dffe
-    ( input d, clk, en, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/anlogic/dffs.ys b/tests/anlogic/dffs.ys
deleted file mode 100644 (file)
index 9cbe5fc..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-read_verilog dffs.v
-design -save read
-
-hierarchy -top dff
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dff # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_SEQ
-select -assert-none t:AL_MAP_SEQ %% t:* %D
-
-design -load read
-hierarchy -top dffe
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffe # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT3
-select -assert-count 1 t:AL_MAP_SEQ
-select -assert-none t:AL_MAP_LUT3 t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/anlogic/fsm.v b/tests/anlogic/fsm.v
deleted file mode 100644 (file)
index 368fbaa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
- module fsm (\r
- clock,\r
- reset,\r
- req_0,\r
- req_1,\r
- gnt_0,\r
- gnt_1\r
- );\r
- input   clock,reset,req_0,req_1;\r
- output  gnt_0,gnt_1;\r
- wire    clock,reset,req_0,req_1;\r
- reg     gnt_0,gnt_1;\r
-\r
- parameter SIZE = 3           ;\r
- parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
-\r
- reg [SIZE-1:0] state;\r
- reg [SIZE-1:0] next_state;\r
-\r
- always @ (posedge clock)\r
- begin : FSM\r
- if (reset == 1'b1) begin\r
-   state <=  #1  IDLE;\r
-   gnt_0 <= 0;\r
-   gnt_1 <= 0;\r
- end else\r
-  case(state)\r
-    IDLE : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-                 gnt_0 <= 1;\r
-               end else if (req_1 == 1'b1) begin\r
-                 gnt_1 <= 1;\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT0 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 gnt_0 <= 0;\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT1 : if (req_1 == 1'b1) begin\r
-                 state <=  #1  GNT2;\r
-                                gnt_1 <= req_0;\r
-               end\r
-    GNT2 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT1;\r
-                                gnt_1 <= req_1;\r
-               end\r
-    default : state <=  #1  IDLE;\r
- endcase\r
- end\r
-\r
-endmodule\r
diff --git a/tests/anlogic/fsm.ys b/tests/anlogic/fsm.ys
deleted file mode 100644 (file)
index 452ef92..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-read_verilog fsm.v
-hierarchy -top fsm
-proc
-#flatten
-#ERROR: Found 4 unproven $equiv cells in 'equiv_status -assert'.
-#equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-equiv_opt -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd fsm # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT2
-select -assert-count 5 t:AL_MAP_LUT5
-select -assert-count 1 t:AL_MAP_LUT6
-select -assert-count 6 t:AL_MAP_SEQ
-
-select -assert-none t:AL_MAP_LUT2 t:AL_MAP_LUT5 t:AL_MAP_LUT6 t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/anlogic/latches.v b/tests/anlogic/latches.v
deleted file mode 100644 (file)
index adb5d53..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module latchp
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( en )
-                       q <= d;
-endmodule
-
-module latchn
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( !en )
-                       q <= d;
-endmodule
-
-module latchsr
-    ( input d, clk, en, clr, pre, output reg q );
-       always @*
-               if ( clr )
-                       q <= 1'b0;
-               else if ( pre )
-                       q <= 1'b1;
-               else if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/anlogic/latches.ys b/tests/anlogic/latches.ys
deleted file mode 100644 (file)
index c00c7a2..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-read_verilog latches.v
-design -save read
-
-hierarchy -top latchp
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_anlogic
-cd latchp # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT3
-
-select -assert-none t:AL_MAP_LUT3 %% t:* %D
-
-
-design -load read
-hierarchy -top latchn
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_anlogic
-cd latchn # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT3
-
-select -assert-none t:AL_MAP_LUT3 %% t:* %D
-
-
-design -load read
-hierarchy -top latchsr
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_anlogic
-cd latchsr # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT5
-
-select -assert-none t:AL_MAP_LUT5 %% t:* %D
diff --git a/tests/anlogic/memory.v b/tests/anlogic/memory.v
deleted file mode 100644 (file)
index cb7753f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-module top
-(
-       input [7:0] data_a,
-       input [6:1] addr_a,
-       input we_a, clk,
-       output reg [7:0] q_a
-);
-       // Declare the RAM variable
-       reg [7:0] ram[63:0];
-
-       // Port A
-       always @ (posedge clk)
-       begin
-               if (we_a)
-               begin
-                       ram[addr_a] <= data_a;
-                       q_a <= data_a;
-               end
-               q_a <= ram[addr_a];
-       end
-endmodule
diff --git a/tests/anlogic/memory.ys b/tests/anlogic/memory.ys
deleted file mode 100644 (file)
index 8c0ce84..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-read_verilog memory.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/anlogic/cells_sim.v synth_anlogic
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-#ERROR: Failed to import cell gate.mem.0.0.0 (type EG_LOGIC_DRAM16X4) to SAT database.
-#sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-
-select -assert-count 8  t:AL_MAP_LUT2
-select -assert-count 8  t:AL_MAP_LUT4
-select -assert-count 8   t:AL_MAP_LUT5
-select -assert-count 36 t:AL_MAP_SEQ
-select -assert-count 8  t:EG_LOGIC_DRAM16X4 #Why not AL_LOGIC_BRAM?
-select -assert-none t:AL_MAP_LUT2 t:AL_MAP_LUT4 t:AL_MAP_LUT5 t:AL_MAP_SEQ t:EG_LOGIC_DRAM16X4 %% t:* %D
diff --git a/tests/anlogic/mux.v b/tests/anlogic/mux.v
deleted file mode 100644 (file)
index 27bc0bf..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-module mux2 (S,A,B,Y);
-    input S;
-    input A,B;
-    output reg Y;
-
-    always @(*)
-               Y = (S)? B : A;
-endmodule
-
-module mux4 ( S, D, Y );
-
-input[1:0] S;
-input[3:0] D;
-output Y;
-
-reg Y;
-wire[1:0] S;
-wire[3:0] D;
-
-always @*
-begin
-    case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-   endcase
-end
-
-endmodule
-
-module mux8 ( S, D, Y );
-
-input[2:0] S;
-input[7:0] D;
-output Y;
-
-reg Y;
-wire[2:0] S;
-wire[7:0] D;
-
-always @*
-begin
-   case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-       4 : Y = D[4];
-       5 : Y = D[5];
-       6 : Y = D[6];
-       7 : Y = D[7];
-   endcase
-end
-
-endmodule
-
-module mux16 (D, S, Y);
-       input  [15:0] D;
-       input  [3:0] S;
-       output Y;
-
-assign Y = D[S];
-
-endmodule
diff --git a/tests/anlogic/mux.ys b/tests/anlogic/mux.ys
deleted file mode 100644 (file)
index 64ed2a2..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-read_verilog mux.v
-design -save read
-
-hierarchy -top mux2
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT3
-
-select -assert-none t:AL_MAP_LUT3 %% t:* %D
-
-design -load read
-hierarchy -top mux4
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux4 # Constrain all select calls below inside the top module
-select -assert-count 1 t:AL_MAP_LUT6
-
-select -assert-none t:AL_MAP_LUT6 %% t:* %D
-
-design -load read
-hierarchy -top mux8
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux8 # Constrain all select calls below inside the top module
-select -assert-count 3 t:AL_MAP_LUT4
-select -assert-count 1 t:AL_MAP_LUT6
-
-select -assert-none t:AL_MAP_LUT4 t:AL_MAP_LUT6 %% t:* %D
-
-design -load read
-hierarchy -top mux16
-proc
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux16 # Constrain all select calls below inside the top module
-select -assert-count 5 t:AL_MAP_LUT6
-
-select -assert-none t:AL_MAP_LUT6 %% t:* %D
diff --git a/tests/anlogic/run-test.sh b/tests/anlogic/run-test.sh
deleted file mode 100755 (executable)
index 46716f9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/anlogic/shifter.v b/tests/anlogic/shifter.v
deleted file mode 100644 (file)
index 04ae49d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-in\r
-);\r
-    output [7:0] out;\r
-    input signed clk, in;\r
-    reg signed [7:0] out = 0;\r
-\r
-    always @(posedge clk)\r
-       begin\r
-               out    <= out >> 1;\r
-               out[7] <= in;\r
-       end\r
-\r
-endmodule\r
diff --git a/tests/anlogic/shifter.ys b/tests/anlogic/shifter.ys
deleted file mode 100644 (file)
index 5eaed30..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog shifter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 8 t:AL_MAP_SEQ
-
-select -assert-none t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/anlogic/tribuf.v b/tests/anlogic/tribuf.v
deleted file mode 100644 (file)
index 90dd314..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-module tristate (en, i, o);
-    input en;
-    input i;
-    output o;
-
-       assign o = en ? i : 1'bz;
-
-endmodule
diff --git a/tests/anlogic/tribuf.ys b/tests/anlogic/tribuf.ys
deleted file mode 100644 (file)
index 0eb1338..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog tribuf.v
-hierarchy -top tristate
-proc
-flatten
-equiv_opt -assert -map +/anlogic/cells_sim.v -map +/simcells.v synth_anlogic # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd tristate # Constrain all select calls below inside the top module
-select -assert-count 1 t:$_TBUF_
-select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/anlogic/.gitignore b/tests/arch/anlogic/.gitignore
new file mode 100644 (file)
index 0000000..9a71dca
--- /dev/null
@@ -0,0 +1,4 @@
+*.log
+/run-test.mk
++*_synth.v
++*_testbench
diff --git a/tests/arch/anlogic/add_sub.v b/tests/arch/anlogic/add_sub.v
new file mode 100644 (file)
index 0000000..177c32e
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x + y;
+assign B =  x - y;
+
+endmodule
diff --git a/tests/arch/anlogic/add_sub.ys b/tests/arch/anlogic/add_sub.ys
new file mode 100644 (file)
index 0000000..b8b67cc
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog add_sub.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 10 t:AL_MAP_ADDER
+select -assert-count 4 t:AL_MAP_LUT1
+
+select -assert-none t:AL_MAP_LUT1 t:AL_MAP_ADDER %% t:* %D
diff --git a/tests/arch/anlogic/counter.v b/tests/arch/anlogic/counter.v
new file mode 100644 (file)
index 0000000..52852f8
--- /dev/null
@@ -0,0 +1,17 @@
+module top    (\r
+out,\r
+clk,\r
+reset\r
+);\r
+    output [7:0] out;\r
+    input clk, reset;\r
+    reg [7:0] out;\r
+\r
+    always @(posedge clk, posedge reset)\r
+               if (reset) begin\r
+                       out <= 8'b0 ;\r
+               end else\r
+                       out <= out + 1;\r
+\r
+\r
+endmodule\r
diff --git a/tests/arch/anlogic/counter.ys b/tests/arch/anlogic/counter.ys
new file mode 100644 (file)
index 0000000..036fdba
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog counter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 9 t:AL_MAP_ADDER
+select -assert-count 8 t:AL_MAP_SEQ
+select -assert-none t:AL_MAP_SEQ t:AL_MAP_ADDER %% t:* %D
diff --git a/tests/arch/anlogic/dffs.v b/tests/arch/anlogic/dffs.v
new file mode 100644 (file)
index 0000000..3418787
--- /dev/null
@@ -0,0 +1,15 @@
+module dff
+    ( input d, clk, output reg q );
+       always @( posedge clk )
+            q <= d;
+endmodule
+
+module dffe
+    ( input d, clk, en, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/anlogic/dffs.ys b/tests/arch/anlogic/dffs.ys
new file mode 100644 (file)
index 0000000..9cbe5fc
--- /dev/null
@@ -0,0 +1,20 @@
+read_verilog dffs.v
+design -save read
+
+hierarchy -top dff
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dff # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_SEQ
+select -assert-none t:AL_MAP_SEQ %% t:* %D
+
+design -load read
+hierarchy -top dffe
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffe # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT3
+select -assert-count 1 t:AL_MAP_SEQ
+select -assert-none t:AL_MAP_LUT3 t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/arch/anlogic/fsm.v b/tests/arch/anlogic/fsm.v
new file mode 100644 (file)
index 0000000..368fbaa
--- /dev/null
@@ -0,0 +1,55 @@
+ module fsm (\r
+ clock,\r
+ reset,\r
+ req_0,\r
+ req_1,\r
+ gnt_0,\r
+ gnt_1\r
+ );\r
+ input   clock,reset,req_0,req_1;\r
+ output  gnt_0,gnt_1;\r
+ wire    clock,reset,req_0,req_1;\r
+ reg     gnt_0,gnt_1;\r
+\r
+ parameter SIZE = 3           ;\r
+ parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
+\r
+ reg [SIZE-1:0] state;\r
+ reg [SIZE-1:0] next_state;\r
+\r
+ always @ (posedge clock)\r
+ begin : FSM\r
+ if (reset == 1'b1) begin\r
+   state <=  #1  IDLE;\r
+   gnt_0 <= 0;\r
+   gnt_1 <= 0;\r
+ end else\r
+  case(state)\r
+    IDLE : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+                 gnt_0 <= 1;\r
+               end else if (req_1 == 1'b1) begin\r
+                 gnt_1 <= 1;\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT0 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 gnt_0 <= 0;\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT1 : if (req_1 == 1'b1) begin\r
+                 state <=  #1  GNT2;\r
+                                gnt_1 <= req_0;\r
+               end\r
+    GNT2 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT1;\r
+                                gnt_1 <= req_1;\r
+               end\r
+    default : state <=  #1  IDLE;\r
+ endcase\r
+ end\r
+\r
+endmodule\r
diff --git a/tests/arch/anlogic/fsm.ys b/tests/arch/anlogic/fsm.ys
new file mode 100644 (file)
index 0000000..452ef92
--- /dev/null
@@ -0,0 +1,15 @@
+read_verilog fsm.v
+hierarchy -top fsm
+proc
+#flatten
+#ERROR: Found 4 unproven $equiv cells in 'equiv_status -assert'.
+#equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+equiv_opt -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd fsm # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT2
+select -assert-count 5 t:AL_MAP_LUT5
+select -assert-count 1 t:AL_MAP_LUT6
+select -assert-count 6 t:AL_MAP_SEQ
+
+select -assert-none t:AL_MAP_LUT2 t:AL_MAP_LUT5 t:AL_MAP_LUT6 t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/arch/anlogic/latches.v b/tests/arch/anlogic/latches.v
new file mode 100644 (file)
index 0000000..adb5d53
--- /dev/null
@@ -0,0 +1,24 @@
+module latchp
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( en )
+                       q <= d;
+endmodule
+
+module latchn
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( !en )
+                       q <= d;
+endmodule
+
+module latchsr
+    ( input d, clk, en, clr, pre, output reg q );
+       always @*
+               if ( clr )
+                       q <= 1'b0;
+               else if ( pre )
+                       q <= 1'b1;
+               else if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/anlogic/latches.ys b/tests/arch/anlogic/latches.ys
new file mode 100644 (file)
index 0000000..c00c7a2
--- /dev/null
@@ -0,0 +1,33 @@
+read_verilog latches.v
+design -save read
+
+hierarchy -top latchp
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_anlogic
+cd latchp # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT3
+
+select -assert-none t:AL_MAP_LUT3 %% t:* %D
+
+
+design -load read
+hierarchy -top latchn
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_anlogic
+cd latchn # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT3
+
+select -assert-none t:AL_MAP_LUT3 %% t:* %D
+
+
+design -load read
+hierarchy -top latchsr
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_anlogic
+cd latchsr # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT5
+
+select -assert-none t:AL_MAP_LUT5 %% t:* %D
diff --git a/tests/arch/anlogic/memory.v b/tests/arch/anlogic/memory.v
new file mode 100644 (file)
index 0000000..cb7753f
--- /dev/null
@@ -0,0 +1,21 @@
+module top
+(
+       input [7:0] data_a,
+       input [6:1] addr_a,
+       input we_a, clk,
+       output reg [7:0] q_a
+);
+       // Declare the RAM variable
+       reg [7:0] ram[63:0];
+
+       // Port A
+       always @ (posedge clk)
+       begin
+               if (we_a)
+               begin
+                       ram[addr_a] <= data_a;
+                       q_a <= data_a;
+               end
+               q_a <= ram[addr_a];
+       end
+endmodule
diff --git a/tests/arch/anlogic/memory.ys b/tests/arch/anlogic/memory.ys
new file mode 100644 (file)
index 0000000..8c0ce84
--- /dev/null
@@ -0,0 +1,21 @@
+read_verilog memory.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/anlogic/cells_sim.v synth_anlogic
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+#ERROR: Failed to import cell gate.mem.0.0.0 (type EG_LOGIC_DRAM16X4) to SAT database.
+#sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+
+select -assert-count 8  t:AL_MAP_LUT2
+select -assert-count 8  t:AL_MAP_LUT4
+select -assert-count 8   t:AL_MAP_LUT5
+select -assert-count 36 t:AL_MAP_SEQ
+select -assert-count 8  t:EG_LOGIC_DRAM16X4 #Why not AL_LOGIC_BRAM?
+select -assert-none t:AL_MAP_LUT2 t:AL_MAP_LUT4 t:AL_MAP_LUT5 t:AL_MAP_SEQ t:EG_LOGIC_DRAM16X4 %% t:* %D
diff --git a/tests/arch/anlogic/mux.v b/tests/arch/anlogic/mux.v
new file mode 100644 (file)
index 0000000..27bc0bf
--- /dev/null
@@ -0,0 +1,65 @@
+module mux2 (S,A,B,Y);
+    input S;
+    input A,B;
+    output reg Y;
+
+    always @(*)
+               Y = (S)? B : A;
+endmodule
+
+module mux4 ( S, D, Y );
+
+input[1:0] S;
+input[3:0] D;
+output Y;
+
+reg Y;
+wire[1:0] S;
+wire[3:0] D;
+
+always @*
+begin
+    case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+   endcase
+end
+
+endmodule
+
+module mux8 ( S, D, Y );
+
+input[2:0] S;
+input[7:0] D;
+output Y;
+
+reg Y;
+wire[2:0] S;
+wire[7:0] D;
+
+always @*
+begin
+   case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+       4 : Y = D[4];
+       5 : Y = D[5];
+       6 : Y = D[6];
+       7 : Y = D[7];
+   endcase
+end
+
+endmodule
+
+module mux16 (D, S, Y);
+       input  [15:0] D;
+       input  [3:0] S;
+       output Y;
+
+assign Y = D[S];
+
+endmodule
diff --git a/tests/arch/anlogic/mux.ys b/tests/arch/anlogic/mux.ys
new file mode 100644 (file)
index 0000000..64ed2a2
--- /dev/null
@@ -0,0 +1,42 @@
+read_verilog mux.v
+design -save read
+
+hierarchy -top mux2
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT3
+
+select -assert-none t:AL_MAP_LUT3 %% t:* %D
+
+design -load read
+hierarchy -top mux4
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux4 # Constrain all select calls below inside the top module
+select -assert-count 1 t:AL_MAP_LUT6
+
+select -assert-none t:AL_MAP_LUT6 %% t:* %D
+
+design -load read
+hierarchy -top mux8
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux8 # Constrain all select calls below inside the top module
+select -assert-count 3 t:AL_MAP_LUT4
+select -assert-count 1 t:AL_MAP_LUT6
+
+select -assert-none t:AL_MAP_LUT4 t:AL_MAP_LUT6 %% t:* %D
+
+design -load read
+hierarchy -top mux16
+proc
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux16 # Constrain all select calls below inside the top module
+select -assert-count 5 t:AL_MAP_LUT6
+
+select -assert-none t:AL_MAP_LUT6 %% t:* %D
diff --git a/tests/arch/anlogic/run-test.sh b/tests/arch/anlogic/run-test.sh
new file mode 100755 (executable)
index 0000000..46716f9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+set -e
+{
+echo "all::"
+for x in *.ys; do
+       echo "all:: run-$x"
+       echo "run-$x:"
+       echo "  @echo 'Running $x..'"
+       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
+done
+for s in *.sh; do
+       if [ "$s" != "run-test.sh" ]; then
+               echo "all:: run-$s"
+               echo "run-$s:"
+               echo "  @echo 'Running $s..'"
+               echo "  @bash $s"
+       fi
+done
+} > run-test.mk
+exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/arch/anlogic/shifter.v b/tests/arch/anlogic/shifter.v
new file mode 100644 (file)
index 0000000..04ae49d
--- /dev/null
@@ -0,0 +1,16 @@
+module top    (\r
+out,\r
+clk,\r
+in\r
+);\r
+    output [7:0] out;\r
+    input signed clk, in;\r
+    reg signed [7:0] out = 0;\r
+\r
+    always @(posedge clk)\r
+       begin\r
+               out    <= out >> 1;\r
+               out[7] <= in;\r
+       end\r
+\r
+endmodule\r
diff --git a/tests/arch/anlogic/shifter.ys b/tests/arch/anlogic/shifter.ys
new file mode 100644 (file)
index 0000000..5eaed30
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog shifter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/anlogic/cells_sim.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 8 t:AL_MAP_SEQ
+
+select -assert-none t:AL_MAP_SEQ %% t:* %D
diff --git a/tests/arch/anlogic/tribuf.v b/tests/arch/anlogic/tribuf.v
new file mode 100644 (file)
index 0000000..90dd314
--- /dev/null
@@ -0,0 +1,8 @@
+module tristate (en, i, o);
+    input en;
+    input i;
+    output o;
+
+       assign o = en ? i : 1'bz;
+
+endmodule
diff --git a/tests/arch/anlogic/tribuf.ys b/tests/arch/anlogic/tribuf.ys
new file mode 100644 (file)
index 0000000..0eb1338
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog tribuf.v
+hierarchy -top tristate
+proc
+flatten
+equiv_opt -assert -map +/anlogic/cells_sim.v -map +/simcells.v synth_anlogic # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd tristate # Constrain all select calls below inside the top module
+select -assert-count 1 t:$_TBUF_
+select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/ecp5/.gitignore b/tests/arch/ecp5/.gitignore
new file mode 100644 (file)
index 0000000..1d329c9
--- /dev/null
@@ -0,0 +1,2 @@
+*.log
+/run-test.mk
diff --git a/tests/arch/ecp5/add_sub.v b/tests/arch/ecp5/add_sub.v
new file mode 100644 (file)
index 0000000..177c32e
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x + y;
+assign B =  x - y;
+
+endmodule
diff --git a/tests/arch/ecp5/add_sub.ys b/tests/arch/ecp5/add_sub.ys
new file mode 100644 (file)
index 0000000..ee72d73
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog add_sub.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 10 t:LUT4
+select -assert-none t:LUT4 %% t:* %D
+
diff --git a/tests/arch/ecp5/adffs.v b/tests/arch/ecp5/adffs.v
new file mode 100644 (file)
index 0000000..223b52d
--- /dev/null
@@ -0,0 +1,47 @@
+module adff
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, posedge clr )
+               if ( clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module adffn
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, negedge clr )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module dffs
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( pre )
+                       q <= 1'b1;
+               else
+            q <= d;
+endmodule
+
+module ndffnr
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( negedge clk )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
diff --git a/tests/arch/ecp5/adffs.ys b/tests/arch/ecp5/adffs.ys
new file mode 100644 (file)
index 0000000..c6780e5
--- /dev/null
@@ -0,0 +1,40 @@
+read_verilog adffs.v
+design -save read
+
+hierarchy -top adff
+proc
+equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adff # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-none t:TRELLIS_FF %% t:* %D
+
+design -load read
+hierarchy -top adffn
+proc
+equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adffn # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-count 1 t:LUT4
+select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
+
+design -load read
+hierarchy -top dffs
+proc
+equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffs # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-count 1 t:LUT4
+select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
+
+design -load read
+hierarchy -top ndffnr
+proc
+equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd ndffnr # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-count 1 t:LUT4
+select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
diff --git a/tests/arch/ecp5/counter.v b/tests/arch/ecp5/counter.v
new file mode 100644 (file)
index 0000000..52852f8
--- /dev/null
@@ -0,0 +1,17 @@
+module top    (\r
+out,\r
+clk,\r
+reset\r
+);\r
+    output [7:0] out;\r
+    input clk, reset;\r
+    reg [7:0] out;\r
+\r
+    always @(posedge clk, posedge reset)\r
+               if (reset) begin\r
+                       out <= 8'b0 ;\r
+               end else\r
+                       out <= out + 1;\r
+\r
+\r
+endmodule\r
diff --git a/tests/arch/ecp5/counter.ys b/tests/arch/ecp5/counter.ys
new file mode 100644 (file)
index 0000000..8ef7077
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog counter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 4 t:CCU2C
+select -assert-count 8 t:TRELLIS_FF
+select -assert-none t:CCU2C t:TRELLIS_FF %% t:* %D
diff --git a/tests/arch/ecp5/dffs.v b/tests/arch/ecp5/dffs.v
new file mode 100644 (file)
index 0000000..3418787
--- /dev/null
@@ -0,0 +1,15 @@
+module dff
+    ( input d, clk, output reg q );
+       always @( posedge clk )
+            q <= d;
+endmodule
+
+module dffe
+    ( input d, clk, en, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/ecp5/dffs.ys b/tests/arch/ecp5/dffs.ys
new file mode 100644 (file)
index 0000000..a4f45d2
--- /dev/null
@@ -0,0 +1,19 @@
+read_verilog dffs.v
+design -save read
+
+hierarchy -top dff
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dff # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-none t:TRELLIS_FF %% t:* %D
+
+design -load read
+hierarchy -top dffe
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffe # Constrain all select calls below inside the top module
+select -assert-count 1 t:TRELLIS_FF
+select -assert-none t:TRELLIS_FF %% t:* %D
\ No newline at end of file
diff --git a/tests/arch/ecp5/dpram.v b/tests/arch/ecp5/dpram.v
new file mode 100644 (file)
index 0000000..3ea4c1f
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72].
+*/
+module top (din, write_en, waddr, wclk, raddr, rclk, dout);
+parameter addr_width = 8;
+parameter data_width = 8;
+input [addr_width-1:0] waddr, raddr;
+input [data_width-1:0] din;
+input write_en, wclk, rclk;
+output [data_width-1:0] dout;
+reg [data_width-1:0] dout;
+reg [data_width-1:0] mem [(1<<addr_width)-1:0]
+/* synthesis syn_ramstyle = "no_rw_check" */ ;
+always @(posedge wclk) // Write memory.
+begin
+if (write_en)
+mem[waddr] <= din; // Using write address bus.
+end
+always @(posedge rclk) // Read memory.
+begin
+dout <= mem[raddr]; // Using read address bus.
+end
+endmodule
diff --git a/tests/arch/ecp5/dpram.ys b/tests/arch/ecp5/dpram.ys
new file mode 100644 (file)
index 0000000..3bc6bc1
--- /dev/null
@@ -0,0 +1,18 @@
+read_verilog dpram.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/ecp5/cells_sim.v synth_ecp5
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+
+#Blocked by issue #1358 (Missing ECP5 simulation models)
+#ERROR: Failed to import cell gate.mem.0.0.0 (type DP16KD) to SAT database.
+#sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 1 t:DP16KD
+select -assert-none t:DP16KD %% t:* %D
diff --git a/tests/arch/ecp5/fsm.v b/tests/arch/ecp5/fsm.v
new file mode 100644 (file)
index 0000000..368fbaa
--- /dev/null
@@ -0,0 +1,55 @@
+ module fsm (\r
+ clock,\r
+ reset,\r
+ req_0,\r
+ req_1,\r
+ gnt_0,\r
+ gnt_1\r
+ );\r
+ input   clock,reset,req_0,req_1;\r
+ output  gnt_0,gnt_1;\r
+ wire    clock,reset,req_0,req_1;\r
+ reg     gnt_0,gnt_1;\r
+\r
+ parameter SIZE = 3           ;\r
+ parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
+\r
+ reg [SIZE-1:0] state;\r
+ reg [SIZE-1:0] next_state;\r
+\r
+ always @ (posedge clock)\r
+ begin : FSM\r
+ if (reset == 1'b1) begin\r
+   state <=  #1  IDLE;\r
+   gnt_0 <= 0;\r
+   gnt_1 <= 0;\r
+ end else\r
+  case(state)\r
+    IDLE : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+                 gnt_0 <= 1;\r
+               end else if (req_1 == 1'b1) begin\r
+                 gnt_1 <= 1;\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT0 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 gnt_0 <= 0;\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT1 : if (req_1 == 1'b1) begin\r
+                 state <=  #1  GNT2;\r
+                                gnt_1 <= req_0;\r
+               end\r
+    GNT2 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT1;\r
+                                gnt_1 <= req_1;\r
+               end\r
+    default : state <=  #1  IDLE;\r
+ endcase\r
+ end\r
+\r
+endmodule\r
diff --git a/tests/arch/ecp5/fsm.ys b/tests/arch/ecp5/fsm.ys
new file mode 100644 (file)
index 0000000..ded91e5
--- /dev/null
@@ -0,0 +1,12 @@
+read_verilog fsm.v
+hierarchy -top fsm
+proc
+flatten
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd fsm # Constrain all select calls below inside the top module
+select -assert-count 1 t:L6MUX21
+select -assert-count 13 t:LUT4
+select -assert-count 5 t:PFUMX
+select -assert-count 5 t:TRELLIS_FF
+select -assert-none t:L6MUX21 t:LUT4 t:PFUMX t:TRELLIS_FF %% t:* %D
diff --git a/tests/arch/ecp5/latches.v b/tests/arch/ecp5/latches.v
new file mode 100644 (file)
index 0000000..adb5d53
--- /dev/null
@@ -0,0 +1,24 @@
+module latchp
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( en )
+                       q <= d;
+endmodule
+
+module latchn
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( !en )
+                       q <= d;
+endmodule
+
+module latchsr
+    ( input d, clk, en, clr, pre, output reg q );
+       always @*
+               if ( clr )
+                       q <= 1'b0;
+               else if ( pre )
+                       q <= 1'b1;
+               else if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/ecp5/latches.ys b/tests/arch/ecp5/latches.ys
new file mode 100644 (file)
index 0000000..fc15a69
--- /dev/null
@@ -0,0 +1,35 @@
+
+read_verilog latches.v
+design -save read
+
+hierarchy -top latchp
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_ecp5
+cd latchp # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT4
+
+select -assert-none t:LUT4 %% t:* %D
+
+
+design -load read
+hierarchy -top latchn
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_ecp5
+cd latchn # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT4
+
+select -assert-none t:LUT4 %% t:* %D
+
+
+design -load read
+hierarchy -top latchsr
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_ecp5
+cd latchsr # Constrain all select calls below inside the top module
+select -assert-count 2 t:LUT4
+select -assert-count 1 t:PFUMX
+
+select -assert-none t:LUT4 t:PFUMX %% t:* %D
diff --git a/tests/arch/ecp5/logic.v b/tests/arch/ecp5/logic.v
new file mode 100644 (file)
index 0000000..e5343ca
--- /dev/null
@@ -0,0 +1,18 @@
+module top
+(
+ input [0:7] in,
+ output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
+ );
+
+   assign     B1 =  in[0] & in[1];
+   assign     B2 =  in[0] | in[1];
+   assign     B3 =  in[0] ~& in[1];
+   assign     B4 =  in[0] ~| in[1];
+   assign     B5 =  in[0] ^ in[1];
+   assign     B6 =  in[0] ~^ in[1];
+   assign     B7 =  ~in[0];
+   assign     B8 =  in[0];
+   assign     B9 =  in[0:1] && in [2:3];
+   assign     B10 =  in[0:1] || in [2:3];
+
+endmodule
diff --git a/tests/arch/ecp5/logic.ys b/tests/arch/ecp5/logic.ys
new file mode 100644 (file)
index 0000000..4f113a1
--- /dev/null
@@ -0,0 +1,8 @@
+read_verilog logic.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 9 t:LUT4
+select -assert-none t:LUT4 %% t:* %D
diff --git a/tests/arch/ecp5/macc.v b/tests/arch/ecp5/macc.v
new file mode 100644 (file)
index 0000000..63a3d3a
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77].
+*/
+module top(clk,a,b,c,set);
+parameter A_WIDTH = 4;
+parameter B_WIDTH = 3;
+input set;
+input clk;
+input signed [(A_WIDTH - 1):0] a;
+input signed [(B_WIDTH - 1):0] b;
+output signed [(A_WIDTH + B_WIDTH - 1):0] c;
+reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
+assign c = reg_tmp_c;
+always @(posedge clk)
+begin
+if(set)
+begin
+reg_tmp_c <= 0;
+end
+else
+begin
+reg_tmp_c <= a * b + c;
+end
+end
+endmodule
diff --git a/tests/arch/ecp5/macc.ys b/tests/arch/ecp5/macc.ys
new file mode 100644 (file)
index 0000000..1863ea4
--- /dev/null
@@ -0,0 +1,13 @@
+read_verilog macc.v
+hierarchy -top top
+proc
+# Blocked by issue #1358 (Missing ECP5 simulation models)
+#equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:MULT18X18D
+select -assert-count 4 t:CCU2C
+select -assert-count 7 t:TRELLIS_FF
+
+select -assert-none t:CCU2C t:MULT18X18D t:TRELLIS_FF %% t:* %D
diff --git a/tests/arch/ecp5/memory.v b/tests/arch/ecp5/memory.v
new file mode 100644 (file)
index 0000000..cb7753f
--- /dev/null
@@ -0,0 +1,21 @@
+module top
+(
+       input [7:0] data_a,
+       input [6:1] addr_a,
+       input we_a, clk,
+       output reg [7:0] q_a
+);
+       // Declare the RAM variable
+       reg [7:0] ram[63:0];
+
+       // Port A
+       always @ (posedge clk)
+       begin
+               if (we_a)
+               begin
+                       ram[addr_a] <= data_a;
+                       q_a <= data_a;
+               end
+               q_a <= ram[addr_a];
+       end
+endmodule
diff --git a/tests/arch/ecp5/memory.ys b/tests/arch/ecp5/memory.ys
new file mode 100644 (file)
index 0000000..9b475f1
--- /dev/null
@@ -0,0 +1,19 @@
+read_verilog memory.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/ecp5/cells_sim.v synth_ecp5
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 24 t:L6MUX21
+select -assert-count 71 t:LUT4
+select -assert-count 32 t:PFUMX
+select -assert-count 8 t:TRELLIS_DPR16X4
+select -assert-count 35 t:TRELLIS_FF
+select -assert-none t:L6MUX21 t:LUT4 t:PFUMX t:TRELLIS_DPR16X4 t:TRELLIS_FF %% t:* %D
diff --git a/tests/arch/ecp5/mul.v b/tests/arch/ecp5/mul.v
new file mode 100644 (file)
index 0000000..d5b48b1
--- /dev/null
@@ -0,0 +1,11 @@
+module top
+(
+ input [5:0] x,
+ input [5:0] y,
+
+ output [11:0] A,
+ );
+
+assign A =  x * y;
+
+endmodule
diff --git a/tests/arch/ecp5/mul.ys b/tests/arch/ecp5/mul.ys
new file mode 100644 (file)
index 0000000..0a91f89
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog mul.v
+hierarchy -top top
+proc
+# Blocked by issue #1358 (Missing ECP5 simulation models)
+#equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:MULT18X18D
+select -assert-none t:MULT18X18D %% t:* %D
diff --git a/tests/arch/ecp5/mux.v b/tests/arch/ecp5/mux.v
new file mode 100644 (file)
index 0000000..782424a
--- /dev/null
@@ -0,0 +1,66 @@
+module mux2 (S,A,B,Y);
+    input S;
+    input A,B;
+    output reg Y;
+
+    always @(*)
+               Y = (S)? B : A;
+endmodule
+
+module mux4 ( S, D, Y );
+
+input[1:0] S;
+input[3:0] D;
+output Y;
+
+reg Y;
+wire[1:0] S;
+wire[3:0] D;
+
+always @*
+begin
+    case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+   endcase
+end
+
+endmodule
+
+module mux8 ( S, D, Y );
+
+input[2:0] S;
+input[7:0] D;
+output Y;
+
+reg Y;
+wire[2:0] S;
+wire[7:0] D;
+
+always @*
+begin
+   case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+       4 : Y = D[4];
+       5 : Y = D[5];
+       6 : Y = D[6];
+       7 : Y = D[7];
+   endcase
+end
+
+endmodule
+
+module mux16 (D, S, Y);
+       input  [15:0] D;
+       input  [3:0] S;
+       output Y;
+
+assign Y = D[S];
+
+endmodule
+
diff --git a/tests/arch/ecp5/mux.ys b/tests/arch/ecp5/mux.ys
new file mode 100644 (file)
index 0000000..8cfbd54
--- /dev/null
@@ -0,0 +1,46 @@
+read_verilog mux.v
+design -save read
+
+hierarchy -top mux2
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT4
+select -assert-none t:LUT4 %% t:* %D
+
+design -load read
+hierarchy -top mux4
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux4 # Constrain all select calls below inside the top module
+select -assert-count 1 t:L6MUX21
+select -assert-count 4 t:LUT4
+select -assert-count 2 t:PFUMX
+
+select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
+
+design -load read
+hierarchy -top mux8
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux8 # Constrain all select calls below inside the top module
+select -assert-count 1 t:L6MUX21
+select -assert-count 7 t:LUT4
+select -assert-count 2 t:PFUMX
+
+select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
+
+design -load read
+hierarchy -top mux16
+proc
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux16 # Constrain all select calls below inside the top module
+select -assert-count 8 t:L6MUX21
+select -assert-count 26 t:LUT4
+select -assert-count 12 t:PFUMX
+
+select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
diff --git a/tests/arch/ecp5/rom.v b/tests/arch/ecp5/rom.v
new file mode 100644 (file)
index 0000000..0a0f41f
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 74].
+*/
+module top(data, addr);
+output [3:0] data;
+input [4:0] addr;
+always @(addr) begin
+case (addr)
+0 : data = 'h4;
+1 : data = 'h9;
+2 : data = 'h1;
+15 : data = 'h8;
+16 : data = 'h1;
+17 : data = 'h0;
+default : data = 'h0;
+endcase
+end
+endmodule
diff --git a/tests/arch/ecp5/rom.ys b/tests/arch/ecp5/rom.ys
new file mode 100644 (file)
index 0000000..98645ae
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog rom.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 6 t:LUT4
+select -assert-count 3 t:PFUMX
+select -assert-none t:LUT4 t:PFUMX %% t:* %D
diff --git a/tests/arch/ecp5/run-test.sh b/tests/arch/ecp5/run-test.sh
new file mode 100755 (executable)
index 0000000..46716f9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+set -e
+{
+echo "all::"
+for x in *.ys; do
+       echo "all:: run-$x"
+       echo "run-$x:"
+       echo "  @echo 'Running $x..'"
+       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
+done
+for s in *.sh; do
+       if [ "$s" != "run-test.sh" ]; then
+               echo "all:: run-$s"
+               echo "run-$s:"
+               echo "  @echo 'Running $s..'"
+               echo "  @bash $s"
+       fi
+done
+} > run-test.mk
+exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/arch/ecp5/shifter.v b/tests/arch/ecp5/shifter.v
new file mode 100644 (file)
index 0000000..04ae49d
--- /dev/null
@@ -0,0 +1,16 @@
+module top    (\r
+out,\r
+clk,\r
+in\r
+);\r
+    output [7:0] out;\r
+    input signed clk, in;\r
+    reg signed [7:0] out = 0;\r
+\r
+    always @(posedge clk)\r
+       begin\r
+               out    <= out >> 1;\r
+               out[7] <= in;\r
+       end\r
+\r
+endmodule\r
diff --git a/tests/arch/ecp5/shifter.ys b/tests/arch/ecp5/shifter.ys
new file mode 100644 (file)
index 0000000..e1901e1
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog shifter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 8 t:TRELLIS_FF
+select -assert-none t:TRELLIS_FF %% t:* %D
diff --git a/tests/arch/ecp5/tribuf.v b/tests/arch/ecp5/tribuf.v
new file mode 100644 (file)
index 0000000..90dd314
--- /dev/null
@@ -0,0 +1,8 @@
+module tristate (en, i, o);
+    input en;
+    input i;
+    output o;
+
+       assign o = en ? i : 1'bz;
+
+endmodule
diff --git a/tests/arch/ecp5/tribuf.ys b/tests/arch/ecp5/tribuf.ys
new file mode 100644 (file)
index 0000000..a6e9c95
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog tribuf.v
+hierarchy -top tristate
+proc
+flatten
+equiv_opt -assert -map +/ecp5/cells_sim.v -map +/simcells.v synth_ecp5 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd tristate # Constrain all select calls below inside the top module
+select -assert-count 1 t:$_TBUF_
+select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/efinix/.gitignore b/tests/arch/efinix/.gitignore
new file mode 100644 (file)
index 0000000..b48f808
--- /dev/null
@@ -0,0 +1,3 @@
+/*.log
+/*.out
+/run-test.mk
diff --git a/tests/arch/efinix/add_sub.v b/tests/arch/efinix/add_sub.v
new file mode 100644 (file)
index 0000000..177c32e
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x + y;
+assign B =  x - y;
+
+endmodule
diff --git a/tests/arch/efinix/add_sub.ys b/tests/arch/efinix/add_sub.ys
new file mode 100644 (file)
index 0000000..8bd28c6
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog add_sub.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 10 t:EFX_ADD
+select -assert-count 4  t:EFX_LUT4
+select -assert-none t:EFX_ADD t:EFX_LUT4 %% t:* %D
+
diff --git a/tests/arch/efinix/adffs.v b/tests/arch/efinix/adffs.v
new file mode 100644 (file)
index 0000000..223b52d
--- /dev/null
@@ -0,0 +1,47 @@
+module adff
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, posedge clr )
+               if ( clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module adffn
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, negedge clr )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module dffs
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( pre )
+                       q <= 1'b1;
+               else
+            q <= d;
+endmodule
+
+module ndffnr
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( negedge clk )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
diff --git a/tests/arch/efinix/adffs.ys b/tests/arch/efinix/adffs.ys
new file mode 100644 (file)
index 0000000..1069c6c
--- /dev/null
@@ -0,0 +1,50 @@
+read_verilog adffs.v
+design -save read
+
+hierarchy -top adff
+proc
+equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adff # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
+
+
+design -load read
+hierarchy -top adffn
+proc
+equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adffn # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
+
+
+design -load read
+hierarchy -top dffs
+proc
+equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffs # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
+
+
+design -load read
+hierarchy -top ndffnr
+proc
+equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd ndffnr # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/counter.v b/tests/arch/efinix/counter.v
new file mode 100644 (file)
index 0000000..52852f8
--- /dev/null
@@ -0,0 +1,17 @@
+module top    (\r
+out,\r
+clk,\r
+reset\r
+);\r
+    output [7:0] out;\r
+    input clk, reset;\r
+    reg [7:0] out;\r
+\r
+    always @(posedge clk, posedge reset)\r
+               if (reset) begin\r
+                       out <= 8'b0 ;\r
+               end else\r
+                       out <= out + 1;\r
+\r
+\r
+endmodule\r
diff --git a/tests/arch/efinix/counter.ys b/tests/arch/efinix/counter.ys
new file mode 100644 (file)
index 0000000..82e61d3
--- /dev/null
@@ -0,0 +1,12 @@
+read_verilog counter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:EFX_GBUFCE
+select -assert-count 8 t:EFX_FF
+select -assert-count 9 t:EFX_ADD
+select -assert-none t:EFX_GBUFCE t:EFX_FF t:EFX_ADD %% t:* %D
diff --git a/tests/arch/efinix/dffs.v b/tests/arch/efinix/dffs.v
new file mode 100644 (file)
index 0000000..3418787
--- /dev/null
@@ -0,0 +1,15 @@
+module dff
+    ( input d, clk, output reg q );
+       always @( posedge clk )
+            q <= d;
+endmodule
+
+module dffe
+    ( input d, clk, en, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/efinix/dffs.ys b/tests/arch/efinix/dffs.ys
new file mode 100644 (file)
index 0000000..cdd2882
--- /dev/null
@@ -0,0 +1,24 @@
+read_verilog dffs.v
+design -save read
+
+hierarchy -top dff
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dff # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
+
+design -load read
+hierarchy -top dffe
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffe # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_FF
+select -assert-count 1 t:EFX_GBUFCE
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/fsm.v b/tests/arch/efinix/fsm.v
new file mode 100644 (file)
index 0000000..368fbaa
--- /dev/null
@@ -0,0 +1,55 @@
+ module fsm (\r
+ clock,\r
+ reset,\r
+ req_0,\r
+ req_1,\r
+ gnt_0,\r
+ gnt_1\r
+ );\r
+ input   clock,reset,req_0,req_1;\r
+ output  gnt_0,gnt_1;\r
+ wire    clock,reset,req_0,req_1;\r
+ reg     gnt_0,gnt_1;\r
+\r
+ parameter SIZE = 3           ;\r
+ parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
+\r
+ reg [SIZE-1:0] state;\r
+ reg [SIZE-1:0] next_state;\r
+\r
+ always @ (posedge clock)\r
+ begin : FSM\r
+ if (reset == 1'b1) begin\r
+   state <=  #1  IDLE;\r
+   gnt_0 <= 0;\r
+   gnt_1 <= 0;\r
+ end else\r
+  case(state)\r
+    IDLE : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+                 gnt_0 <= 1;\r
+               end else if (req_1 == 1'b1) begin\r
+                 gnt_1 <= 1;\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT0 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 gnt_0 <= 0;\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT1 : if (req_1 == 1'b1) begin\r
+                 state <=  #1  GNT2;\r
+                                gnt_1 <= req_0;\r
+               end\r
+    GNT2 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT1;\r
+                                gnt_1 <= req_1;\r
+               end\r
+    default : state <=  #1  IDLE;\r
+ endcase\r
+ end\r
+\r
+endmodule\r
diff --git a/tests/arch/efinix/fsm.ys b/tests/arch/efinix/fsm.ys
new file mode 100644 (file)
index 0000000..2ec7521
--- /dev/null
@@ -0,0 +1,14 @@
+read_verilog fsm.v
+hierarchy -top fsm
+proc
+flatten
+#ERROR: Found 4 unproven $equiv cells in 'equiv_status -assert'.
+#equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+equiv_opt -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd fsm # Constrain all select calls below inside the top module
+
+select -assert-count 1  t:EFX_GBUFCE
+select -assert-count 6  t:EFX_FF
+select -assert-count 15 t:EFX_LUT4
+select -assert-none t:EFX_GBUFCE t:EFX_FF t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/latches.v b/tests/arch/efinix/latches.v
new file mode 100644 (file)
index 0000000..adb5d53
--- /dev/null
@@ -0,0 +1,24 @@
+module latchp
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( en )
+                       q <= d;
+endmodule
+
+module latchn
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( !en )
+                       q <= d;
+endmodule
+
+module latchsr
+    ( input d, clk, en, clr, pre, output reg q );
+       always @*
+               if ( clr )
+                       q <= 1'b0;
+               else if ( pre )
+                       q <= 1'b1;
+               else if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/efinix/latches.ys b/tests/arch/efinix/latches.ys
new file mode 100644 (file)
index 0000000..899d024
--- /dev/null
@@ -0,0 +1,33 @@
+read_verilog latches.v
+design -save read
+
+hierarchy -top latchp
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_efinix
+cd latchp # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
+
+
+design -load read
+hierarchy -top latchn
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_efinix
+cd latchn # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
+
+
+design -load read
+hierarchy -top latchsr
+proc
+# Can't run any sort of equivalence check because latches are blown to LUTs
+synth_efinix
+cd latchsr # Constrain all select calls below inside the top module
+select -assert-count 2 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/logic.v b/tests/arch/efinix/logic.v
new file mode 100644 (file)
index 0000000..e5343ca
--- /dev/null
@@ -0,0 +1,18 @@
+module top
+(
+ input [0:7] in,
+ output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
+ );
+
+   assign     B1 =  in[0] & in[1];
+   assign     B2 =  in[0] | in[1];
+   assign     B3 =  in[0] ~& in[1];
+   assign     B4 =  in[0] ~| in[1];
+   assign     B5 =  in[0] ^ in[1];
+   assign     B6 =  in[0] ~^ in[1];
+   assign     B7 =  ~in[0];
+   assign     B8 =  in[0];
+   assign     B9 =  in[0:1] && in [2:3];
+   assign     B10 =  in[0:1] || in [2:3];
+
+endmodule
diff --git a/tests/arch/efinix/logic.ys b/tests/arch/efinix/logic.ys
new file mode 100644 (file)
index 0000000..fdedb33
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog logic.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 9 t:EFX_LUT4
+select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/memory.v b/tests/arch/efinix/memory.v
new file mode 100644 (file)
index 0000000..5634d65
--- /dev/null
@@ -0,0 +1,21 @@
+module top
+(
+       input [7:0] data_a,
+       input [8:1] addr_a,
+       input we_a, clk,
+       output reg [7:0] q_a
+);
+       // Declare the RAM variable
+       reg [7:0] ram[63:0];
+
+       // Port A
+       always @ (posedge clk)
+       begin
+               if (we_a)
+               begin
+                       ram[addr_a] <= data_a;
+                       q_a <= data_a;
+               end
+               q_a <= ram[addr_a];
+       end
+endmodule
diff --git a/tests/arch/efinix/memory.ys b/tests/arch/efinix/memory.ys
new file mode 100644 (file)
index 0000000..fe24b0a
--- /dev/null
@@ -0,0 +1,18 @@
+read_verilog memory.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/efinix/cells_sim.v synth_efinix
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+#ERROR: Called with -verify and proof did fail!
+#sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
+sat -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 1 t:EFX_GBUFCE
+select -assert-count 1 t:EFX_RAM_5K
+select -assert-none t:EFX_GBUFCE t:EFX_RAM_5K %% t:* %D
diff --git a/tests/arch/efinix/mux.v b/tests/arch/efinix/mux.v
new file mode 100644 (file)
index 0000000..27bc0bf
--- /dev/null
@@ -0,0 +1,65 @@
+module mux2 (S,A,B,Y);
+    input S;
+    input A,B;
+    output reg Y;
+
+    always @(*)
+               Y = (S)? B : A;
+endmodule
+
+module mux4 ( S, D, Y );
+
+input[1:0] S;
+input[3:0] D;
+output Y;
+
+reg Y;
+wire[1:0] S;
+wire[3:0] D;
+
+always @*
+begin
+    case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+   endcase
+end
+
+endmodule
+
+module mux8 ( S, D, Y );
+
+input[2:0] S;
+input[7:0] D;
+output Y;
+
+reg Y;
+wire[2:0] S;
+wire[7:0] D;
+
+always @*
+begin
+   case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+       4 : Y = D[4];
+       5 : Y = D[5];
+       6 : Y = D[6];
+       7 : Y = D[7];
+   endcase
+end
+
+endmodule
+
+module mux16 (D, S, Y);
+       input  [15:0] D;
+       input  [3:0] S;
+       output Y;
+
+assign Y = D[S];
+
+endmodule
diff --git a/tests/arch/efinix/mux.ys b/tests/arch/efinix/mux.ys
new file mode 100644 (file)
index 0000000..71a9681
--- /dev/null
@@ -0,0 +1,41 @@
+read_verilog mux.v
+design -save read
+
+hierarchy -top mux2
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
+
+design -load read
+hierarchy -top mux4
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux4 # Constrain all select calls below inside the top module
+select -assert-count 2 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
+
+design -load read
+hierarchy -top mux8
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux8 # Constrain all select calls below inside the top module
+select -assert-count 5 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
+
+design -load read
+hierarchy -top mux16
+proc
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux16 # Constrain all select calls below inside the top module
+select -assert-count 12 t:EFX_LUT4
+
+select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/arch/efinix/run-test.sh b/tests/arch/efinix/run-test.sh
new file mode 100755 (executable)
index 0000000..46716f9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+set -e
+{
+echo "all::"
+for x in *.ys; do
+       echo "all:: run-$x"
+       echo "run-$x:"
+       echo "  @echo 'Running $x..'"
+       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
+done
+for s in *.sh; do
+       if [ "$s" != "run-test.sh" ]; then
+               echo "all:: run-$s"
+               echo "run-$s:"
+               echo "  @echo 'Running $s..'"
+               echo "  @bash $s"
+       fi
+done
+} > run-test.mk
+exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/arch/efinix/shifter.v b/tests/arch/efinix/shifter.v
new file mode 100644 (file)
index 0000000..ce2c81d
--- /dev/null
@@ -0,0 +1,16 @@
+module top    (\r
+out,\r
+clk,\r
+in\r
+);\r
+    output [7:0] out;\r
+    input signed clk, in;\r
+    reg signed [7:0] out = 0;\r
+\r
+    always @(posedge clk)\r
+       begin\r
+               out    <= out << 1;\r
+               out[7] <= in;\r
+       end\r
+\r
+endmodule\r
diff --git a/tests/arch/efinix/shifter.ys b/tests/arch/efinix/shifter.ys
new file mode 100644 (file)
index 0000000..1a6b556
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog shifter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1  t:EFX_GBUFCE
+select -assert-count 8  t:EFX_FF
+select -assert-none t:EFX_GBUFCE t:EFX_FF %% t:* %D
diff --git a/tests/arch/efinix/tribuf.v b/tests/arch/efinix/tribuf.v
new file mode 100644 (file)
index 0000000..c644682
--- /dev/null
@@ -0,0 +1,8 @@
+module tristate (en, i, o);
+    input en;
+    input i;
+    output reg o;
+    
+    always @(en or i)
+               o <= (en)? i : 1'bZ;
+endmodule
diff --git a/tests/arch/efinix/tribuf.ys b/tests/arch/efinix/tribuf.ys
new file mode 100644 (file)
index 0000000..2e2ab9e
--- /dev/null
@@ -0,0 +1,12 @@
+read_verilog tribuf.v
+hierarchy -top tristate
+proc
+tribuf
+flatten
+synth
+equiv_opt -assert -map +/efinix/cells_sim.v -map +/simcells.v synth_efinix # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd tristate # Constrain all select calls below inside the top module
+#Internal cell type used. Need support it.
+select -assert-count 1 t:$_TBUF_
+select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/ice40/.gitignore b/tests/arch/ice40/.gitignore
new file mode 100644 (file)
index 0000000..9a71dca
--- /dev/null
@@ -0,0 +1,4 @@
+*.log
+/run-test.mk
++*_synth.v
++*_testbench
diff --git a/tests/arch/ice40/add_sub.v b/tests/arch/ice40/add_sub.v
new file mode 100644 (file)
index 0000000..177c32e
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x + y;
+assign B =  x - y;
+
+endmodule
diff --git a/tests/arch/ice40/add_sub.ys b/tests/arch/ice40/add_sub.ys
new file mode 100644 (file)
index 0000000..4a998d9
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog add_sub.v
+hierarchy -top top
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 11 t:SB_LUT4
+select -assert-count 6 t:SB_CARRY
+select -assert-none t:SB_LUT4 t:SB_CARRY %% t:* %D
+
diff --git a/tests/arch/ice40/adffs.v b/tests/arch/ice40/adffs.v
new file mode 100644 (file)
index 0000000..09dc360
--- /dev/null
@@ -0,0 +1,87 @@
+module adff
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, posedge clr )
+               if ( clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module adffn
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, negedge clr )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module dffs
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, posedge pre )
+               if ( pre )
+                       q <= 1'b1;
+               else
+            q <= d;
+endmodule
+
+module ndffnr
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( negedge clk, negedge pre )
+               if ( !pre )
+                       q <= 1'b1;
+               else
+            q <= d;
+endmodule
+
+module top (
+input clk,
+input clr,
+input pre,
+input a,
+output b,b1,b2,b3
+);
+
+dffs u_dffs (
+        .clk (clk ),
+        .clr (clr),
+        .pre (pre),
+        .d (a ),
+        .q (b )
+    );
+
+ndffnr u_ndffnr (
+        .clk (clk ),
+        .clr (clr),
+        .pre (pre),
+        .d (a ),
+        .q (b1 )
+    );
+
+adff u_adff (
+        .clk (clk ),
+        .clr (clr),
+        .d (a ),
+        .q (b2 )
+    );
+
+adffn u_adffn (
+        .clk (clk ),
+        .clr (clr),
+        .d (a ),
+        .q (b3 )
+    );
+
+endmodule
diff --git a/tests/arch/ice40/adffs.ys b/tests/arch/ice40/adffs.ys
new file mode 100644 (file)
index 0000000..548060b
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog adffs.v
+proc
+flatten
+equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_DFFNS
+select -assert-count 2 t:SB_DFFR
+select -assert-count 1 t:SB_DFFS
+select -assert-count 2 t:SB_LUT4
+select -assert-none t:SB_DFFNS t:SB_DFFR t:SB_DFFS t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/alu.v b/tests/arch/ice40/alu.v
new file mode 100644 (file)
index 0000000..f82cc2e
--- /dev/null
@@ -0,0 +1,19 @@
+module top (
+       input clock,
+       input [31:0] dinA, dinB,
+       input [2:0] opcode,
+       output reg [31:0] dout
+);
+       always @(posedge clock) begin
+               case (opcode)
+               0: dout <= dinA + dinB;
+               1: dout <= dinA - dinB;
+               2: dout <= dinA >> dinB;
+               3: dout <= $signed(dinA) >>> dinB;
+               4: dout <= dinA << dinB;
+               5: dout <= dinA & dinB;
+               6: dout <= dinA | dinB;
+               7: dout <= dinA ^ dinB;
+               endcase
+       end
+endmodule
diff --git a/tests/arch/ice40/alu.ys b/tests/arch/ice40/alu.ys
new file mode 100644 (file)
index 0000000..bd859ef
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog alu.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 62 t:SB_CARRY
+select -assert-count 32 t:SB_DFF
+select -assert-count 655 t:SB_LUT4
+select -assert-none t:SB_CARRY t:SB_DFF t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/counter.v b/tests/arch/ice40/counter.v
new file mode 100644 (file)
index 0000000..52852f8
--- /dev/null
@@ -0,0 +1,17 @@
+module top    (\r
+out,\r
+clk,\r
+reset\r
+);\r
+    output [7:0] out;\r
+    input clk, reset;\r
+    reg [7:0] out;\r
+\r
+    always @(posedge clk, posedge reset)\r
+               if (reset) begin\r
+                       out <= 8'b0 ;\r
+               end else\r
+                       out <= out + 1;\r
+\r
+\r
+endmodule\r
diff --git a/tests/arch/ice40/counter.ys b/tests/arch/ice40/counter.ys
new file mode 100644 (file)
index 0000000..c65c216
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog counter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 6 t:SB_CARRY
+select -assert-count 8 t:SB_DFFR
+select -assert-count 8 t:SB_LUT4
+select -assert-none t:SB_CARRY t:SB_DFFR t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/dffs.v b/tests/arch/ice40/dffs.v
new file mode 100644 (file)
index 0000000..d97840c
--- /dev/null
@@ -0,0 +1,37 @@
+module dff
+    ( input d, clk, output reg q );
+       always @( posedge clk )
+            q <= d;
+endmodule
+
+module dffe
+    ( input d, clk, en, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( en )
+                       q <= d;
+endmodule
+
+module top (
+input clk,
+input en,
+input a,
+output b,b1,
+);
+
+dff u_dff (
+        .clk (clk ),
+        .d (a ),
+        .q (b )
+    );
+
+dffe u_ndffe (
+        .clk (clk ),
+        .en (en),
+        .d (a ),
+        .q (b1 )
+    );
+
+endmodule
diff --git a/tests/arch/ice40/dffs.ys b/tests/arch/ice40/dffs.ys
new file mode 100644 (file)
index 0000000..ee7f884
--- /dev/null
@@ -0,0 +1,10 @@
+read_verilog dffs.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_DFF
+select -assert-count 1 t:SB_DFFE
+select -assert-none t:SB_DFF t:SB_DFFE %% t:* %D
diff --git a/tests/arch/ice40/div_mod.v b/tests/arch/ice40/div_mod.v
new file mode 100644 (file)
index 0000000..64a3670
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x % y;
+assign B =  x / y;
+
+endmodule
diff --git a/tests/arch/ice40/div_mod.ys b/tests/arch/ice40/div_mod.ys
new file mode 100644 (file)
index 0000000..821d6c3
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog div_mod.v
+hierarchy -top top
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 59 t:SB_LUT4
+select -assert-count 41 t:SB_CARRY
+select -assert-none t:SB_LUT4 t:SB_CARRY %% t:* %D
diff --git a/tests/arch/ice40/dpram.v b/tests/arch/ice40/dpram.v
new file mode 100644 (file)
index 0000000..3ea4c1f
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72].
+*/
+module top (din, write_en, waddr, wclk, raddr, rclk, dout);
+parameter addr_width = 8;
+parameter data_width = 8;
+input [addr_width-1:0] waddr, raddr;
+input [data_width-1:0] din;
+input write_en, wclk, rclk;
+output [data_width-1:0] dout;
+reg [data_width-1:0] dout;
+reg [data_width-1:0] mem [(1<<addr_width)-1:0]
+/* synthesis syn_ramstyle = "no_rw_check" */ ;
+always @(posedge wclk) // Write memory.
+begin
+if (write_en)
+mem[waddr] <= din; // Using write address bus.
+end
+always @(posedge rclk) // Read memory.
+begin
+dout <= mem[raddr]; // Using read address bus.
+end
+endmodule
diff --git a/tests/arch/ice40/dpram.ys b/tests/arch/ice40/dpram.ys
new file mode 100644 (file)
index 0000000..4f6a253
--- /dev/null
@@ -0,0 +1,15 @@
+read_verilog dpram.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 1 t:SB_RAM40_4K
+select -assert-none t:SB_RAM40_4K %% t:* %D
diff --git a/tests/arch/ice40/fsm.v b/tests/arch/ice40/fsm.v
new file mode 100644 (file)
index 0000000..0605bd1
--- /dev/null
@@ -0,0 +1,73 @@
+ module fsm (\r
+ clock,\r
+ reset,\r
+ req_0,\r
+ req_1,\r
+ gnt_0,\r
+ gnt_1\r
+ );\r
+ input   clock,reset,req_0,req_1;\r
+ output  gnt_0,gnt_1;\r
+ wire    clock,reset,req_0,req_1;\r
+ reg     gnt_0,gnt_1;\r
+\r
+ parameter SIZE = 3           ;\r
+ parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
+\r
+ reg [SIZE-1:0] state;\r
+ reg [SIZE-1:0] next_state;\r
+\r
+ always @ (posedge clock)\r
+ begin : FSM\r
+ if (reset == 1'b1) begin\r
+   state <=  #1  IDLE;\r
+   gnt_0 <= 0;\r
+   gnt_1 <= 0;\r
+ end else\r
+  case(state)\r
+    IDLE : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+                 gnt_0 <= 1;\r
+               end else if (req_1 == 1'b1) begin\r
+                 gnt_1 <= 1;\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT0 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 gnt_0 <= 0;\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT1 : if (req_1 == 1'b1) begin\r
+                 state <=  #1  GNT2;\r
+                                gnt_1 <= req_0;\r
+               end\r
+    GNT2 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT1;\r
+                                gnt_1 <= req_1;\r
+               end\r
+    default : state <=  #1  IDLE;\r
+ endcase\r
+ end\r
+\r
+ endmodule\r
+\r
+ module top (\r
+input clk,\r
+input rst,\r
+input a,\r
+input b,\r
+output g0,\r
+output g1\r
+);\r
+\r
+fsm u_fsm ( .clock(clk),\r
+            .reset(rst),\r
+            .req_0(a),\r
+            .req_1(b),\r
+            .gnt_0(g0),\r
+            .gnt_1(g1));\r
+\r
+endmodule\r
diff --git a/tests/arch/ice40/fsm.ys b/tests/arch/ice40/fsm.ys
new file mode 100644 (file)
index 0000000..4cc8629
--- /dev/null
@@ -0,0 +1,13 @@
+read_verilog fsm.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 2 t:SB_DFFESR
+select -assert-count 2 t:SB_DFFSR
+select -assert-count 1 t:SB_DFFSS
+select -assert-count 13 t:SB_LUT4
+select -assert-none t:SB_DFFESR t:SB_DFFSR t:SB_DFFSS t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/ice40_opt.ys b/tests/arch/ice40/ice40_opt.ys
new file mode 100644 (file)
index 0000000..b17c69c
--- /dev/null
@@ -0,0 +1,26 @@
+read_verilog -icells -formal <<EOT
+module top(input CI, I0, output [1:0] CO, output O);
+    wire A = 1'b0, B = 1'b0;
+       \$__ICE40_CARRY_WRAPPER #(
+               //    A[0]: 1010 1010 1010 1010
+               //    A[1]: 1100 1100 1100 1100
+               //    A[2]: 1111 0000 1111 0000
+               //    A[3]: 1111 1111 0000 0000
+               .LUT(~16'b 0110_1001_1001_0110)
+       ) u0 (
+               .A(A),
+               .B(B),
+               .CI(CI),
+               .I0(I0),
+               .I3(CI),
+               .CO(CO[0]),
+               .O(O)
+       );
+    SB_CARRY u1 (.I0(~A), .I1(~B), .CI(CI), .CO(CO[1]));
+endmodule
+EOT
+
+equiv_opt -assert -map +/ice40/cells_map.v -map +/ice40/cells_sim.v ice40_opt
+design -load postopt
+select -assert-count 1 t:*
+select -assert-count 1 t:$lut
diff --git a/tests/arch/ice40/latches.v b/tests/arch/ice40/latches.v
new file mode 100644 (file)
index 0000000..9dc43e4
--- /dev/null
@@ -0,0 +1,58 @@
+module latchp
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( en )
+                       q <= d;
+endmodule
+
+module latchn
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( !en )
+                       q <= d;
+endmodule
+
+module latchsr
+    ( input d, clk, en, clr, pre, output reg q );
+       always @*
+               if ( clr )
+                       q <= 1'b0;
+               else if ( pre )
+                       q <= 1'b1;
+               else if ( en )
+                       q <= d;
+endmodule
+
+
+module top (
+input clk,
+input clr,
+input pre,
+input a,
+output b,b1,b2
+);
+
+
+latchp u_latchp (
+        .en (clk ),
+        .d (a ),
+        .q (b )
+    );
+
+
+latchn u_latchn (
+        .en (clk ),
+        .d (a ),
+        .q (b1 )
+    );
+
+
+latchsr u_latchsr (
+        .en (clk ),
+        .clr (clr),
+        .pre (pre),
+        .d (a ),
+        .q (b2 )
+    );
+
+endmodule
diff --git a/tests/arch/ice40/latches.ys b/tests/arch/ice40/latches.ys
new file mode 100644 (file)
index 0000000..708734e
--- /dev/null
@@ -0,0 +1,12 @@
+read_verilog latches.v
+
+proc
+flatten
+# Can't run any sort of equivalence check because latches are blown to LUTs
+#equiv_opt -async2sync -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+
+#design -load preopt
+synth_ice40
+cd top
+select -assert-count 4 t:SB_LUT4
+select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/logic.v b/tests/arch/ice40/logic.v
new file mode 100644 (file)
index 0000000..e5343ca
--- /dev/null
@@ -0,0 +1,18 @@
+module top
+(
+ input [0:7] in,
+ output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
+ );
+
+   assign     B1 =  in[0] & in[1];
+   assign     B2 =  in[0] | in[1];
+   assign     B3 =  in[0] ~& in[1];
+   assign     B4 =  in[0] ~| in[1];
+   assign     B5 =  in[0] ^ in[1];
+   assign     B6 =  in[0] ~^ in[1];
+   assign     B7 =  ~in[0];
+   assign     B8 =  in[0];
+   assign     B9 =  in[0:1] && in [2:3];
+   assign     B10 =  in[0:1] || in [2:3];
+
+endmodule
diff --git a/tests/arch/ice40/logic.ys b/tests/arch/ice40/logic.ys
new file mode 100644 (file)
index 0000000..fc5e5b1
--- /dev/null
@@ -0,0 +1,7 @@
+read_verilog logic.v
+hierarchy -top top
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 9 t:SB_LUT4
+select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/macc.v b/tests/arch/ice40/macc.v
new file mode 100644 (file)
index 0000000..6f68e75
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77].
+*/
+module top(clk,a,b,c,set);
+parameter A_WIDTH = 6 /*4*/;
+parameter B_WIDTH = 6 /*3*/;
+input set;
+input clk;
+input signed [(A_WIDTH - 1):0] a;
+input signed [(B_WIDTH - 1):0] b;
+output signed [(A_WIDTH + B_WIDTH - 1):0] c;
+reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
+assign c = reg_tmp_c;
+always @(posedge clk)
+begin
+    if(set)
+    begin
+        reg_tmp_c <= 0;
+    end
+    else
+    begin
+        reg_tmp_c <= a * b + c;
+    end
+end
+endmodule
+
+module top2(clk,a,b,c,hold);
+parameter A_WIDTH = 6 /*4*/;
+parameter B_WIDTH = 6 /*3*/;
+input hold;
+input clk;
+input signed [(A_WIDTH - 1):0] a;
+input signed [(B_WIDTH - 1):0] b;
+output signed [(A_WIDTH + B_WIDTH - 1):0] c;
+reg signed [A_WIDTH-1:0] reg_a;
+reg signed [B_WIDTH-1:0] reg_b;
+reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
+assign c = reg_tmp_c;
+always @(posedge clk)
+begin
+    if (!hold) begin
+        reg_a <= a;
+        reg_b <= b;
+        reg_tmp_c <= reg_a * reg_b + c;
+    end
+end
+endmodule
diff --git a/tests/arch/ice40/macc.ys b/tests/arch/ice40/macc.ys
new file mode 100644 (file)
index 0000000..fd30e79
--- /dev/null
@@ -0,0 +1,25 @@
+read_verilog macc.v
+proc
+design -save read
+
+hierarchy -top top
+equiv_opt -assert -multiclock -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_MAC16
+select -assert-none t:SB_MAC16 %% t:* %D
+
+design -load read
+hierarchy -top top2
+
+#equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+
+equiv_opt -run :prove -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+clk2fflogic
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -set-init-zero -seq 4 -verify -prove-asserts -show-ports miter
+
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_MAC16
+select -assert-none t:SB_MAC16 %% t:* %D
diff --git a/tests/arch/ice40/memory.v b/tests/arch/ice40/memory.v
new file mode 100644 (file)
index 0000000..cb7753f
--- /dev/null
@@ -0,0 +1,21 @@
+module top
+(
+       input [7:0] data_a,
+       input [6:1] addr_a,
+       input we_a, clk,
+       output reg [7:0] q_a
+);
+       // Declare the RAM variable
+       reg [7:0] ram[63:0];
+
+       // Port A
+       always @ (posedge clk)
+       begin
+               if (we_a)
+               begin
+                       ram[addr_a] <= data_a;
+                       q_a <= data_a;
+               end
+               q_a <= ram[addr_a];
+       end
+endmodule
diff --git a/tests/arch/ice40/memory.ys b/tests/arch/ice40/memory.ys
new file mode 100644 (file)
index 0000000..a66afba
--- /dev/null
@@ -0,0 +1,15 @@
+read_verilog memory.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 1 t:SB_RAM40_4K
+select -assert-none t:SB_RAM40_4K %% t:* %D
diff --git a/tests/arch/ice40/mul.v b/tests/arch/ice40/mul.v
new file mode 100644 (file)
index 0000000..d5b48b1
--- /dev/null
@@ -0,0 +1,11 @@
+module top
+(
+ input [5:0] x,
+ input [5:0] y,
+
+ output [11:0] A,
+ );
+
+assign A =  x * y;
+
+endmodule
diff --git a/tests/arch/ice40/mul.ys b/tests/arch/ice40/mul.ys
new file mode 100644 (file)
index 0000000..8a0822a
--- /dev/null
@@ -0,0 +1,7 @@
+read_verilog mul.v
+hierarchy -top top
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:SB_MAC16
+select -assert-none t:SB_MAC16 %% t:* %D
diff --git a/tests/arch/ice40/mux.v b/tests/arch/ice40/mux.v
new file mode 100644 (file)
index 0000000..0814b73
--- /dev/null
@@ -0,0 +1,100 @@
+module mux2 (S,A,B,Y);
+    input S;
+    input A,B;
+    output reg Y;
+
+    always @(*)
+               Y = (S)? B : A;
+endmodule
+
+module mux4 ( S, D, Y );
+
+input[1:0] S;
+input[3:0] D;
+output Y;
+
+reg Y;
+wire[1:0] S;
+wire[3:0] D;
+
+always @*
+begin
+    case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+   endcase
+end
+
+endmodule
+
+module mux8 ( S, D, Y );
+
+input[2:0] S;
+input[7:0] D;
+output Y;
+
+reg Y;
+wire[2:0] S;
+wire[7:0] D;
+
+always @*
+begin
+   case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+       4 : Y = D[4];
+       5 : Y = D[5];
+       6 : Y = D[6];
+       7 : Y = D[7];
+   endcase
+end
+
+endmodule
+
+module mux16 (D, S, Y);
+       input  [15:0] D;
+       input  [3:0] S;
+       output Y;
+
+assign Y = D[S];
+
+endmodule
+
+
+module top (
+input [3:0] S,
+input [15:0] D,
+output M2,M4,M8,M16
+);
+
+mux2 u_mux2 (
+        .S (S[0]),
+        .A (D[0]),
+        .B (D[1]),
+        .Y (M2)
+    );
+
+
+mux4 u_mux4 (
+        .S (S[1:0]),
+        .D (D[3:0]),
+        .Y (M4)
+    );
+
+mux8 u_mux8 (
+        .S (S[2:0]),
+        .D (D[7:0]),
+        .Y (M8)
+    );
+
+mux16 u_mux16 (
+        .S (S[3:0]),
+        .D (D[15:0]),
+        .Y (M16)
+    );
+
+endmodule
diff --git a/tests/arch/ice40/mux.ys b/tests/arch/ice40/mux.ys
new file mode 100644 (file)
index 0000000..182b494
--- /dev/null
@@ -0,0 +1,8 @@
+read_verilog mux.v
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 19 t:SB_LUT4
+select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/rom.v b/tests/arch/ice40/rom.v
new file mode 100644 (file)
index 0000000..0a0f41f
--- /dev/null
@@ -0,0 +1,18 @@
+/*
+Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 74].
+*/
+module top(data, addr);
+output [3:0] data;
+input [4:0] addr;
+always @(addr) begin
+case (addr)
+0 : data = 'h4;
+1 : data = 'h9;
+2 : data = 'h1;
+15 : data = 'h8;
+16 : data = 'h1;
+17 : data = 'h0;
+default : data = 'h0;
+endcase
+end
+endmodule
diff --git a/tests/arch/ice40/rom.ys b/tests/arch/ice40/rom.ys
new file mode 100644 (file)
index 0000000..41d214e
--- /dev/null
@@ -0,0 +1,8 @@
+read_verilog rom.v
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 5 t:SB_LUT4
+select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/arch/ice40/run-test.sh b/tests/arch/ice40/run-test.sh
new file mode 100755 (executable)
index 0000000..46716f9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+set -e
+{
+echo "all::"
+for x in *.ys; do
+       echo "all:: run-$x"
+       echo "run-$x:"
+       echo "  @echo 'Running $x..'"
+       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
+done
+for s in *.sh; do
+       if [ "$s" != "run-test.sh" ]; then
+               echo "all:: run-$s"
+               echo "run-$s:"
+               echo "  @echo 'Running $s..'"
+               echo "  @bash $s"
+       fi
+done
+} > run-test.mk
+exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/arch/ice40/shifter.v b/tests/arch/ice40/shifter.v
new file mode 100644 (file)
index 0000000..c556325
--- /dev/null
@@ -0,0 +1,22 @@
+module top    (\r
+out,\r
+clk,\r
+in\r
+);\r
+    output [7:0] out;\r
+    input signed clk, in;\r
+    reg signed [7:0] out = 0;\r
+\r
+    always @(posedge clk)\r
+       begin\r
+`ifndef BUG\r
+               out    <= out >> 1;\r
+               out[7] <= in;\r
+`else\r
+\r
+               out    <= out << 1;\r
+               out[7] <= in;\r
+`endif\r
+       end\r
+\r
+endmodule\r
diff --git a/tests/arch/ice40/shifter.ys b/tests/arch/ice40/shifter.ys
new file mode 100644 (file)
index 0000000..47d95d2
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog shifter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 8 t:SB_DFF
+select -assert-none t:SB_DFF %% t:* %D
diff --git a/tests/arch/ice40/tribuf.v b/tests/arch/ice40/tribuf.v
new file mode 100644 (file)
index 0000000..870a025
--- /dev/null
@@ -0,0 +1,23 @@
+module tristate (en, i, o);
+    input en;
+    input i;
+    output o;
+
+       assign o = en ? i : 1'bz;
+
+endmodule
+
+
+module top (
+input en,
+input a,
+output b
+);
+
+tristate u_tri (
+        .en (en ),
+        .i (a ),
+        .o (b )
+    );
+
+endmodule
diff --git a/tests/arch/ice40/tribuf.ys b/tests/arch/ice40/tribuf.ys
new file mode 100644 (file)
index 0000000..d1e1b31
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog tribuf.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/ice40/cells_sim.v -map +/simcells.v synth_ice40 # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 1 t:$_TBUF_
+select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/ice40/wrapcarry.ys b/tests/arch/ice40/wrapcarry.ys
new file mode 100644 (file)
index 0000000..10c029e
--- /dev/null
@@ -0,0 +1,22 @@
+read_verilog <<EOT
+module top(input A, B, CI, output O, CO);
+       SB_CARRY carry (
+               .I0(A),
+               .I1(B),
+               .CI(CI),
+               .CO(CO)
+       );
+       SB_LUT4 #(
+               .LUT_INIT(16'b 0110_1001_1001_0110)
+       ) adder (
+               .I0(1'b0),
+               .I1(A),
+               .I2(B),
+               .I3(1'b0),
+               .O(O)
+       );
+endmodule
+EOT
+
+ice40_wrapcarry
+select -assert-count 1 t:$__ICE40_CARRY_WRAPPER
diff --git a/tests/arch/xilinx/.gitignore b/tests/arch/xilinx/.gitignore
new file mode 100644 (file)
index 0000000..c99b793
--- /dev/null
@@ -0,0 +1,5 @@
+/*.log
+/*.out
+/run-test.mk
+/*_uut.v
+/test_macc
diff --git a/tests/arch/xilinx/add_sub.v b/tests/arch/xilinx/add_sub.v
new file mode 100644 (file)
index 0000000..177c32e
--- /dev/null
@@ -0,0 +1,13 @@
+module top
+(
+ input [3:0] x,
+ input [3:0] y,
+
+ output [3:0] A,
+ output [3:0] B
+ );
+
+assign A =  x + y;
+assign B =  x - y;
+
+endmodule
diff --git a/tests/arch/xilinx/add_sub.ys b/tests/arch/xilinx/add_sub.ys
new file mode 100644 (file)
index 0000000..f06e7fa
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog add_sub.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+select -assert-count 14 t:LUT2
+select -assert-count 6 t:MUXCY
+select -assert-count 8 t:XORCY
+select -assert-none t:LUT2 t:MUXCY t:XORCY %% t:* %D
+
diff --git a/tests/arch/xilinx/adffs.v b/tests/arch/xilinx/adffs.v
new file mode 100644 (file)
index 0000000..223b52d
--- /dev/null
@@ -0,0 +1,47 @@
+module adff
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, posedge clr )
+               if ( clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module adffn
+    ( input d, clk, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk, negedge clr )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
+
+module dffs
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( pre )
+                       q <= 1'b1;
+               else
+            q <= d;
+endmodule
+
+module ndffnr
+    ( input d, clk, pre, clr, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( negedge clk )
+               if ( !clr )
+                       q <= 1'b0;
+               else
+            q <= d;
+endmodule
diff --git a/tests/arch/xilinx/adffs.ys b/tests/arch/xilinx/adffs.ys
new file mode 100644 (file)
index 0000000..1923b98
--- /dev/null
@@ -0,0 +1,51 @@
+read_verilog adffs.v
+design -save read
+
+hierarchy -top adff
+proc
+equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adff # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDCE
+
+select -assert-none t:BUFG t:FDCE %% t:* %D
+
+
+design -load read
+hierarchy -top adffn
+proc
+equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd adffn # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDCE
+select -assert-count 1 t:LUT1
+
+select -assert-none t:BUFG t:FDCE t:LUT1 %% t:* %D
+
+
+design -load read
+hierarchy -top dffs
+proc
+equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffs # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE
+select -assert-count 1 t:LUT2
+
+select -assert-none t:BUFG t:FDRE t:LUT2 %% t:* %D
+
+
+design -load read
+hierarchy -top ndffnr
+proc
+equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd ndffnr # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE_1
+select -assert-count 1 t:LUT2
+
+select -assert-none t:BUFG t:FDRE_1 t:LUT2 %% t:* %D
diff --git a/tests/arch/xilinx/counter.v b/tests/arch/xilinx/counter.v
new file mode 100644 (file)
index 0000000..52852f8
--- /dev/null
@@ -0,0 +1,17 @@
+module top    (\r
+out,\r
+clk,\r
+reset\r
+);\r
+    output [7:0] out;\r
+    input clk, reset;\r
+    reg [7:0] out;\r
+\r
+    always @(posedge clk, posedge reset)\r
+               if (reset) begin\r
+                       out <= 8'b0 ;\r
+               end else\r
+                       out <= out + 1;\r
+\r
+\r
+endmodule\r
diff --git a/tests/arch/xilinx/counter.ys b/tests/arch/xilinx/counter.ys
new file mode 100644 (file)
index 0000000..4595416
--- /dev/null
@@ -0,0 +1,14 @@
+read_verilog counter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:BUFG
+select -assert-count 8 t:FDCE
+select -assert-count 1 t:LUT1
+select -assert-count 7 t:MUXCY
+select -assert-count 8 t:XORCY
+select -assert-none t:BUFG t:FDCE t:LUT1 t:MUXCY t:XORCY %% t:* %D
diff --git a/tests/arch/xilinx/dffs.v b/tests/arch/xilinx/dffs.v
new file mode 100644 (file)
index 0000000..3418787
--- /dev/null
@@ -0,0 +1,15 @@
+module dff
+    ( input d, clk, output reg q );
+       always @( posedge clk )
+            q <= d;
+endmodule
+
+module dffe
+    ( input d, clk, en, output reg q );
+    initial begin
+      q = 0;
+    end
+       always @( posedge clk )
+               if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/xilinx/dffs.ys b/tests/arch/xilinx/dffs.ys
new file mode 100644 (file)
index 0000000..f1716da
--- /dev/null
@@ -0,0 +1,25 @@
+read_verilog dffs.v
+design -save read
+
+hierarchy -top dff
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dff # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE
+
+select -assert-none t:BUFG t:FDRE %% t:* %D
+
+
+design -load read
+hierarchy -top dffe
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd dffe # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE
+
+select -assert-none t:BUFG t:FDRE %% t:* %D
+
diff --git a/tests/arch/xilinx/dsp_simd.ys b/tests/arch/xilinx/dsp_simd.ys
new file mode 100644 (file)
index 0000000..9569523
--- /dev/null
@@ -0,0 +1,25 @@
+read_verilog <<EOT
+module simd(input [12*4-1:0] a, input [12*4-1:0] b, (* use_dsp="simd" *) output [7*12-1:0] o12, (* use_dsp="simd" *) output [2*24-1:0] o24);
+generate
+    genvar i;
+    // 4 x 12-bit adder
+    for (i = 0; i < 4; i++)
+        assign o12[i*12+:12] = a[i*12+:12] + b[i*12+:12];
+    // 2 x 24-bit subtract
+    for (i = 0; i < 2; i++)
+        assign o24[i*24+:24] = a[i*24+:24] - b[i*24+:24];
+endgenerate
+reg [3*12-1:0] ro;
+always @* begin
+    ro[0*12+:12] = a[0*10+:10] + b[0*10+:10];
+    ro[1*12+:12] = a[1*10+:10] + b[1*10+:10];
+    ro[2*12+:12] = a[2*8+:8] + b[2*8+:8];
+end
+assign o12[4*12+:3*12] = ro;
+endmodule
+EOT
+
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx
+design -load postopt
+select -assert-count 3 t:DSP48E1
diff --git a/tests/arch/xilinx/fsm.v b/tests/arch/xilinx/fsm.v
new file mode 100644 (file)
index 0000000..368fbaa
--- /dev/null
@@ -0,0 +1,55 @@
+ module fsm (\r
+ clock,\r
+ reset,\r
+ req_0,\r
+ req_1,\r
+ gnt_0,\r
+ gnt_1\r
+ );\r
+ input   clock,reset,req_0,req_1;\r
+ output  gnt_0,gnt_1;\r
+ wire    clock,reset,req_0,req_1;\r
+ reg     gnt_0,gnt_1;\r
+\r
+ parameter SIZE = 3           ;\r
+ parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
+\r
+ reg [SIZE-1:0] state;\r
+ reg [SIZE-1:0] next_state;\r
+\r
+ always @ (posedge clock)\r
+ begin : FSM\r
+ if (reset == 1'b1) begin\r
+   state <=  #1  IDLE;\r
+   gnt_0 <= 0;\r
+   gnt_1 <= 0;\r
+ end else\r
+  case(state)\r
+    IDLE : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+                 gnt_0 <= 1;\r
+               end else if (req_1 == 1'b1) begin\r
+                 gnt_1 <= 1;\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT0 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT0;\r
+               end else begin\r
+                 gnt_0 <= 0;\r
+                 state <=  #1  IDLE;\r
+               end\r
+    GNT1 : if (req_1 == 1'b1) begin\r
+                 state <=  #1  GNT2;\r
+                                gnt_1 <= req_0;\r
+               end\r
+    GNT2 : if (req_0 == 1'b1) begin\r
+                 state <=  #1  GNT1;\r
+                                gnt_1 <= req_1;\r
+               end\r
+    default : state <=  #1  IDLE;\r
+ endcase\r
+ end\r
+\r
+endmodule\r
diff --git a/tests/arch/xilinx/fsm.ys b/tests/arch/xilinx/fsm.ys
new file mode 100644 (file)
index 0000000..a9e94c2
--- /dev/null
@@ -0,0 +1,14 @@
+read_verilog fsm.v
+hierarchy -top fsm
+proc
+flatten
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd fsm # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:BUFG
+select -assert-count 5 t:FDRE
+select -assert-count 1 t:LUT3
+select -assert-count 2 t:LUT4
+select -assert-count 4 t:LUT6
+select -assert-none t:BUFG t:FDRE t:LUT3 t:LUT4 t:LUT6 %% t:* %D
diff --git a/tests/arch/xilinx/latches.v b/tests/arch/xilinx/latches.v
new file mode 100644 (file)
index 0000000..adb5d53
--- /dev/null
@@ -0,0 +1,24 @@
+module latchp
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( en )
+                       q <= d;
+endmodule
+
+module latchn
+    ( input d, clk, en, output reg q );
+       always @*
+               if ( !en )
+                       q <= d;
+endmodule
+
+module latchsr
+    ( input d, clk, en, clr, pre, output reg q );
+       always @*
+               if ( clr )
+                       q <= 1'b0;
+               else if ( pre )
+                       q <= 1'b1;
+               else if ( en )
+                       q <= d;
+endmodule
diff --git a/tests/arch/xilinx/latches.ys b/tests/arch/xilinx/latches.ys
new file mode 100644 (file)
index 0000000..3eb550a
--- /dev/null
@@ -0,0 +1,35 @@
+read_verilog latches.v
+design -save read
+
+hierarchy -top latchp
+proc
+equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd latchp # Constrain all select calls below inside the top module
+select -assert-count 1 t:LDCE
+
+select -assert-none t:LDCE %% t:* %D
+
+
+design -load read
+hierarchy -top latchn
+proc
+equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd latchn # Constrain all select calls below inside the top module
+select -assert-count 1 t:LDCE
+select -assert-count 1 t:LUT1
+
+select -assert-none t:LDCE t:LUT1 %% t:* %D
+
+
+design -load read
+hierarchy -top latchsr
+proc
+equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd latchsr # Constrain all select calls below inside the top module
+select -assert-count 1 t:LDCE
+select -assert-count 2 t:LUT3
+
+select -assert-none t:LDCE t:LUT3 %% t:* %D
diff --git a/tests/arch/xilinx/logic.v b/tests/arch/xilinx/logic.v
new file mode 100644 (file)
index 0000000..e5343ca
--- /dev/null
@@ -0,0 +1,18 @@
+module top
+(
+ input [0:7] in,
+ output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
+ );
+
+   assign     B1 =  in[0] & in[1];
+   assign     B2 =  in[0] | in[1];
+   assign     B3 =  in[0] ~& in[1];
+   assign     B4 =  in[0] ~| in[1];
+   assign     B5 =  in[0] ^ in[1];
+   assign     B6 =  in[0] ~^ in[1];
+   assign     B7 =  ~in[0];
+   assign     B8 =  in[0];
+   assign     B9 =  in[0:1] && in [2:3];
+   assign     B10 =  in[0:1] || in [2:3];
+
+endmodule
diff --git a/tests/arch/xilinx/logic.ys b/tests/arch/xilinx/logic.ys
new file mode 100644 (file)
index 0000000..9ae5993
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog logic.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:LUT1
+select -assert-count 6 t:LUT2
+select -assert-count 2 t:LUT4
+select -assert-none t:LUT1 t:LUT2 t:LUT4 %% t:* %D
diff --git a/tests/arch/xilinx/macc.sh b/tests/arch/xilinx/macc.sh
new file mode 100644 (file)
index 0000000..86e4c2b
--- /dev/null
@@ -0,0 +1,3 @@
+../../yosys -qp "synth_xilinx -top macc2; rename -top macc2_uut" macc.v -o macc_uut.v
+iverilog -o test_macc macc_tb.v macc_uut.v macc.v ../../techlibs/xilinx/cells_sim.v
+vvp -N ./test_macc
diff --git a/tests/arch/xilinx/macc.v b/tests/arch/xilinx/macc.v
new file mode 100644 (file)
index 0000000..e36b2ba
--- /dev/null
@@ -0,0 +1,84 @@
+// Signed 40-bit streaming accumulator with 16-bit inputs
+// File: HDL_Coding_Techniques/multipliers/multipliers4.v
+//
+// Source:
+// https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug901-vivado-synthesis.pdf p.90
+//
+module macc # (parameter SIZEIN = 16, SIZEOUT = 40) (
+       input clk, ce, sload,
+       input signed [SIZEIN-1:0] a, b,
+       output signed [SIZEOUT-1:0] accum_out
+);
+// Declare registers for intermediate values
+reg signed [SIZEIN-1:0] a_reg, b_reg;
+reg sload_reg;
+reg signed [2*SIZEIN-1:0] mult_reg;
+reg signed [SIZEOUT-1:0] adder_out, old_result;
+always @* /*(adder_out or sload_reg)*/ begin // Modification necessary to fix sim/synth mismatch
+       if (sload_reg)
+               old_result <= 0;
+       else
+               // 'sload' is now active (=low) and opens the accumulation loop.
+               // The accumulator takes the next multiplier output in
+               // the same cycle.
+               old_result <= adder_out;
+end
+
+always @(posedge clk)
+       if (ce)
+       begin
+               a_reg <= a;
+               b_reg <= b;
+               mult_reg <= a_reg * b_reg;
+               sload_reg <= sload;
+               // Store accumulation result into a register
+               adder_out <= old_result + mult_reg;
+       end
+
+// Output accumulation result
+assign accum_out = adder_out;
+
+endmodule
+
+// Adapted variant of above
+module macc2 # (parameter SIZEIN = 16, SIZEOUT = 40) (
+       input clk,
+       input ce,
+       input rst,
+       input signed [SIZEIN-1:0] a, b,
+       output signed [SIZEOUT-1:0] accum_out,
+       output overflow
+);
+// Declare registers for intermediate values
+reg signed [SIZEIN-1:0] a_reg, b_reg, a_reg2, b_reg2;
+reg signed [2*SIZEIN-1:0] mult_reg = 0;
+reg signed [SIZEOUT:0] adder_out = 0;
+reg overflow_reg;
+always @(posedge clk) begin
+       //if (ce)
+       begin
+               a_reg <= a;
+               b_reg <= b;
+               a_reg2 <= a_reg;
+               b_reg2 <= b_reg;
+               mult_reg <= a_reg2 * b_reg2;
+               // Store accumulation result into a register
+               adder_out <= adder_out + mult_reg;
+               overflow_reg <= overflow;
+       end
+       if (rst) begin
+               a_reg <= 0;
+               a_reg2 <= 0;
+               b_reg <= 0;
+               b_reg2 <= 0;
+               mult_reg <= 0;
+               adder_out <= 0;
+               overflow_reg <= 1'b0;
+       end
+end
+assign overflow = (adder_out >= 2**(SIZEOUT-1)) | overflow_reg;
+
+// Output accumulation result
+assign accum_out = overflow ? 2**(SIZEOUT-1)-1 : adder_out;
+
+endmodule
diff --git a/tests/arch/xilinx/macc.ys b/tests/arch/xilinx/macc.ys
new file mode 100644 (file)
index 0000000..6e884b3
--- /dev/null
@@ -0,0 +1,31 @@
+read_verilog macc.v
+design -save read
+
+hierarchy -top macc
+proc
+#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
+equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd macc # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:FDRE
+select -assert-count 1 t:DSP48E1
+select -assert-none t:BUFG t:FDRE t:DSP48E1 %% t:* %D
+
+design -load read
+hierarchy -top macc2
+proc
+#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
+equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd macc2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:DSP48E1
+select -assert-count 1 t:FDRE
+select -assert-count 1 t:LUT2
+select -assert-count 41 t:LUT3
+select -assert-none t:BUFG t:DSP48E1 t:FDRE t:LUT2 t:LUT3 %% t:* %D
diff --git a/tests/arch/xilinx/macc_tb.v b/tests/arch/xilinx/macc_tb.v
new file mode 100644 (file)
index 0000000..64aed05
--- /dev/null
@@ -0,0 +1,96 @@
+`timescale 1ns / 1ps
+
+module testbench;
+
+    parameter SIZEIN = 16, SIZEOUT = 40;
+       reg clk, ce, rst;
+       reg signed [SIZEIN-1:0] a, b;
+       output signed [SIZEOUT-1:0] REF_accum_out, accum_out;
+       output REF_overflow, overflow;
+
+       integer errcount = 0;
+
+       reg ERROR_FLAG = 0;
+
+       task clkcycle;
+               begin
+                       #5;
+                       clk = ~clk;
+                       #10;
+                       clk = ~clk;
+                       #2;
+                       ERROR_FLAG = 0;
+                       if (REF_accum_out !== accum_out) begin
+                               $display("ERROR at %1t: REF_accum_out=%b UUT_accum_out=%b DIFF=%b", $time, REF_accum_out, accum_out, REF_accum_out ^ accum_out);
+                               errcount = errcount + 1;
+                               ERROR_FLAG = 1;
+                       end
+                       if (REF_overflow !== overflow) begin
+                               $display("ERROR at %1t: REF_overflow=%b UUT_overflow=%b DIFF=%b", $time, REF_overflow, overflow, REF_overflow ^ overflow);
+                               errcount = errcount + 1;
+                               ERROR_FLAG = 1;
+                       end
+                       #3;
+               end
+       endtask
+
+       initial begin
+               //$dumpfile("test_macc.vcd");
+               //$dumpvars(0, testbench);
+
+               #2;
+               clk = 1'b0;
+        ce = 1'b0;
+        a = 0;
+        b = 0;
+
+        rst = 1'b1;
+               repeat (10) begin
+                       #10;
+                       clk = 1'b1;
+                       #10;
+                       clk = 1'b0;
+                       #10;
+                       clk = 1'b1;
+                       #10;
+                       clk = 1'b0;
+               end
+               rst = 1'b0;
+
+               repeat (10000) begin
+                       clkcycle;
+            ce = 1; //$urandom & $urandom;
+                       //rst = $urandom & $urandom & $urandom & $urandom & $urandom & $urandom;
+                       a = $urandom & ~(1 << (SIZEIN-1));
+                       b = $urandom & ~(1 << (SIZEIN-1));
+               end
+
+               if (errcount == 0) begin
+                       $display("All tests passed.");
+                       $finish;
+               end else begin
+                       $display("Caught %1d errors.", errcount);
+                       $stop;
+               end
+       end
+
+       macc2 ref (
+        .clk(clk),
+        .ce(ce),
+        .rst(rst),
+        .a(a),
+        .b(b),
+        .accum_out(REF_accum_out),
+        .overflow(REF_overflow)
+       );
+
+       macc2_uut uut (
+        .clk(clk),
+        .ce(ce),
+        .rst(rst),
+        .a(a),
+        .b(b),
+        .accum_out(accum_out),
+        .overflow(overflow)
+       );
+endmodule
diff --git a/tests/arch/xilinx/memory.v b/tests/arch/xilinx/memory.v
new file mode 100644 (file)
index 0000000..cb7753f
--- /dev/null
@@ -0,0 +1,21 @@
+module top
+(
+       input [7:0] data_a,
+       input [6:1] addr_a,
+       input we_a, clk,
+       output reg [7:0] q_a
+);
+       // Declare the RAM variable
+       reg [7:0] ram[63:0];
+
+       // Port A
+       always @ (posedge clk)
+       begin
+               if (we_a)
+               begin
+                       ram[addr_a] <= data_a;
+                       q_a <= data_a;
+               end
+               q_a <= ram[addr_a];
+       end
+endmodule
diff --git a/tests/arch/xilinx/memory.ys b/tests/arch/xilinx/memory.ys
new file mode 100644 (file)
index 0000000..5402513
--- /dev/null
@@ -0,0 +1,17 @@
+read_verilog memory.v
+hierarchy -top top
+proc
+memory -nomap
+equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
+memory
+opt -full
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
+
+design -load postopt
+cd top
+select -assert-count 1 t:BUFG
+select -assert-count 8 t:FDRE
+select -assert-count 8 t:RAM64X1D
+select -assert-none t:BUFG t:FDRE t:RAM64X1D %% t:* %D
diff --git a/tests/arch/xilinx/mul.v b/tests/arch/xilinx/mul.v
new file mode 100644 (file)
index 0000000..d5b48b1
--- /dev/null
@@ -0,0 +1,11 @@
+module top
+(
+ input [5:0] x,
+ input [5:0] y,
+
+ output [11:0] A,
+ );
+
+assign A =  x * y;
+
+endmodule
diff --git a/tests/arch/xilinx/mul.ys b/tests/arch/xilinx/mul.ys
new file mode 100644 (file)
index 0000000..66a06ef
--- /dev/null
@@ -0,0 +1,9 @@
+read_verilog mul.v
+hierarchy -top top
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:DSP48E1
+select -assert-none t:DSP48E1 %% t:* %D
diff --git a/tests/arch/xilinx/mul_unsigned.v b/tests/arch/xilinx/mul_unsigned.v
new file mode 100644 (file)
index 0000000..e3713a6
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+Example from: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf [p. 89].
+*/
+
+// Unsigned 16x24-bit Multiplier
+// 1 latency stage on operands
+// 3 latency stage after the multiplication
+// File: multipliers2.v
+//
+module mul_unsigned (clk, A, B, RES);
+parameter WIDTHA = /*16*/ 6;
+parameter WIDTHB = /*24*/ 9;
+input clk;
+input [WIDTHA-1:0] A;
+input [WIDTHB-1:0] B;
+output [WIDTHA+WIDTHB-1:0] RES;
+reg [WIDTHA-1:0] rA;
+reg [WIDTHB-1:0] rB;
+reg [WIDTHA+WIDTHB-1:0] M [3:0];
+integer i;
+always @(posedge clk)
+ begin
+ rA <= A;
+ rB <= B;
+ M[0] <= rA * rB;
+ for (i = 0; i < 3; i = i+1)
+ M[i+1] <= M[i];
+ end
+assign RES = M[3];
+endmodule
diff --git a/tests/arch/xilinx/mul_unsigned.ys b/tests/arch/xilinx/mul_unsigned.ys
new file mode 100644 (file)
index 0000000..62495b9
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog mul_unsigned.v
+hierarchy -top mul_unsigned
+proc
+
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mul_unsigned # Constrain all select calls below inside the top module
+select -assert-count 1 t:BUFG
+select -assert-count 1 t:DSP48E1
+select -assert-count 30 t:FDRE
+select -assert-none t:DSP48E1 t:FDRE t:BUFG %% t:* %D
diff --git a/tests/arch/xilinx/mux.v b/tests/arch/xilinx/mux.v
new file mode 100644 (file)
index 0000000..27bc0bf
--- /dev/null
@@ -0,0 +1,65 @@
+module mux2 (S,A,B,Y);
+    input S;
+    input A,B;
+    output reg Y;
+
+    always @(*)
+               Y = (S)? B : A;
+endmodule
+
+module mux4 ( S, D, Y );
+
+input[1:0] S;
+input[3:0] D;
+output Y;
+
+reg Y;
+wire[1:0] S;
+wire[3:0] D;
+
+always @*
+begin
+    case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+   endcase
+end
+
+endmodule
+
+module mux8 ( S, D, Y );
+
+input[2:0] S;
+input[7:0] D;
+output Y;
+
+reg Y;
+wire[2:0] S;
+wire[7:0] D;
+
+always @*
+begin
+   case( S )
+       0 : Y = D[0];
+       1 : Y = D[1];
+       2 : Y = D[2];
+       3 : Y = D[3];
+       4 : Y = D[4];
+       5 : Y = D[5];
+       6 : Y = D[6];
+       7 : Y = D[7];
+   endcase
+end
+
+endmodule
+
+module mux16 (D, S, Y);
+       input  [15:0] D;
+       input  [3:0] S;
+       output Y;
+
+assign Y = D[S];
+
+endmodule
diff --git a/tests/arch/xilinx/mux.ys b/tests/arch/xilinx/mux.ys
new file mode 100644 (file)
index 0000000..420dece
--- /dev/null
@@ -0,0 +1,45 @@
+read_verilog mux.v
+design -save read
+
+hierarchy -top mux2
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux2 # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT3
+
+select -assert-none t:LUT3 %% t:* %D
+
+
+design -load read
+hierarchy -top mux4
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux4 # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT6
+
+select -assert-none t:LUT6 %% t:* %D
+
+
+design -load read
+hierarchy -top mux8
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux8 # Constrain all select calls below inside the top module
+select -assert-count 1 t:LUT3
+select -assert-count 2 t:LUT6
+
+select -assert-none t:LUT3 t:LUT6 %% t:* %D
+
+
+design -load read
+hierarchy -top mux16
+proc
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd mux16 # Constrain all select calls below inside the top module
+select -assert-count 5 t:LUT6
+
+select -assert-none t:LUT6 %% t:* %D
diff --git a/tests/arch/xilinx/pmgen_xilinx_srl.ys b/tests/arch/xilinx/pmgen_xilinx_srl.ys
new file mode 100644 (file)
index 0000000..ea2f204
--- /dev/null
@@ -0,0 +1,57 @@
+read_verilog -icells <<EOT
+module \$__XILINX_SHREG_ (input C, input D, input [31:0] L, input E, output Q, output SO);
+  parameter DEPTH = 1;
+  parameter [DEPTH-1:0] INIT = 0;
+  parameter CLKPOL = 1;
+  parameter ENPOL = 2;
+
+  wire pos_clk = C == CLKPOL;
+  reg pos_en;
+  always @(E)
+    if (ENPOL == 2) pos_en = 1'b1;
+    else pos_en = (E == ENPOL[0]);
+
+  reg [DEPTH-1:0] r;
+  always @(posedge pos_clk)
+    if (pos_en)
+      r <= {r[DEPTH-2:0], D};
+
+  assign Q = r[L];
+  assign SO = r[DEPTH-1];
+endmodule
+EOT
+read_verilog +/xilinx/cells_sim.v
+proc
+design -save model
+
+test_pmgen -generate xilinx_srl.fixed
+hierarchy -top pmtest_xilinx_srl_pm_fixed
+flatten; opt_clean
+
+design -save gold
+xilinx_srl -fixed
+techmap -autoproc -map %model
+design -stash gate
+
+design -copy-from gold -as gold pmtest_xilinx_srl_pm_fixed
+design -copy-from gate -as gate pmtest_xilinx_srl_pm_fixed
+dff2dffe -unmap # sat does not support flops-with-enable yet
+miter -equiv -flatten -make_assert gold gate miter
+sat -set-init-zero -seq 5 -verify -prove-asserts miter
+
+design -load model
+
+test_pmgen -generate xilinx_srl.variable
+hierarchy -top pmtest_xilinx_srl_pm_variable
+flatten; opt_clean
+
+design -save gold
+xilinx_srl -variable
+techmap -autoproc -map %model
+design -stash gate
+
+design -copy-from gold -as gold pmtest_xilinx_srl_pm_variable
+design -copy-from gate -as gate pmtest_xilinx_srl_pm_variable
+dff2dffe -unmap # sat does not support flops-with-enable yet
+miter -equiv -flatten -make_assert gold gate miter
+sat -set-init-zero -seq 5 -verify -prove-asserts miter
diff --git a/tests/arch/xilinx/run-test.sh b/tests/arch/xilinx/run-test.sh
new file mode 100755 (executable)
index 0000000..46716f9
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/env bash
+set -e
+{
+echo "all::"
+for x in *.ys; do
+       echo "all:: run-$x"
+       echo "run-$x:"
+       echo "  @echo 'Running $x..'"
+       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
+done
+for s in *.sh; do
+       if [ "$s" != "run-test.sh" ]; then
+               echo "all:: run-$s"
+               echo "run-$s:"
+               echo "  @echo 'Running $s..'"
+               echo "  @bash $s"
+       fi
+done
+} > run-test.mk
+exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/arch/xilinx/shifter.v b/tests/arch/xilinx/shifter.v
new file mode 100644 (file)
index 0000000..04ae49d
--- /dev/null
@@ -0,0 +1,16 @@
+module top    (\r
+out,\r
+clk,\r
+in\r
+);\r
+    output [7:0] out;\r
+    input signed clk, in;\r
+    reg signed [7:0] out = 0;\r
+\r
+    always @(posedge clk)\r
+       begin\r
+               out    <= out >> 1;\r
+               out[7] <= in;\r
+       end\r
+\r
+endmodule\r
diff --git a/tests/arch/xilinx/shifter.ys b/tests/arch/xilinx/shifter.ys
new file mode 100644 (file)
index 0000000..84e16f4
--- /dev/null
@@ -0,0 +1,11 @@
+read_verilog shifter.v
+hierarchy -top top
+proc
+flatten
+equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd top # Constrain all select calls below inside the top module
+
+select -assert-count 1 t:BUFG
+select -assert-count 8 t:FDRE
+select -assert-none t:BUFG t:FDRE %% t:* %D
diff --git a/tests/arch/xilinx/tribuf.v b/tests/arch/xilinx/tribuf.v
new file mode 100644 (file)
index 0000000..c644682
--- /dev/null
@@ -0,0 +1,8 @@
+module tristate (en, i, o);
+    input en;
+    input i;
+    output reg o;
+    
+    always @(en or i)
+               o <= (en)? i : 1'bZ;
+endmodule
diff --git a/tests/arch/xilinx/tribuf.ys b/tests/arch/xilinx/tribuf.ys
new file mode 100644 (file)
index 0000000..c9cfb85
--- /dev/null
@@ -0,0 +1,12 @@
+read_verilog tribuf.v
+hierarchy -top tristate
+proc
+tribuf
+flatten
+synth
+equiv_opt -assert -map +/xilinx/cells_sim.v -map +/simcells.v synth_xilinx # equivalency check
+design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
+cd tristate # Constrain all select calls below inside the top module
+# TODO :: Tristate logic not yet supported; see https://github.com/YosysHQ/yosys/issues/1225
+select -assert-count 1 t:$_TBUF_
+select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/arch/xilinx/xilinx_srl.v b/tests/arch/xilinx/xilinx_srl.v
new file mode 100644 (file)
index 0000000..bc2a15a
--- /dev/null
@@ -0,0 +1,40 @@
+module xilinx_srl_static_test(input i, clk, output [1:0] q);
+reg head = 1'b0;
+reg [3:0] shift1 = 4'b0000;
+reg [3:0] shift2 = 4'b0000;
+
+always @(posedge clk) begin
+    head <= i;
+    shift1 <= {shift1[2:0], head};
+    shift2 <= {shift2[2:0], head};
+end
+
+assign q = {shift2[3], shift1[3]};
+endmodule
+
+module xilinx_srl_variable_test(input i, clk, input [1:0] l1, l2, output [1:0] q);
+reg head = 1'b0;
+reg [3:0] shift1 = 4'b0000;
+reg [3:0] shift2 = 4'b0000;
+
+always @(posedge clk) begin
+    head <= i;
+    shift1 <= {shift1[2:0], head};
+    shift2 <= {shift2[2:0], head};
+end
+
+assign q = {shift2[l2], shift1[l1]};
+endmodule
+
+module $__XILINX_SHREG_(input C, D, E, input [1:0] L, output Q);
+parameter CLKPOL = 1;
+parameter ENPOL = 1;
+parameter DEPTH = 1;
+parameter [DEPTH-1:0] INIT = {DEPTH{1'b0}};
+reg [DEPTH-1:0] r = INIT;
+wire clk = C ^ CLKPOL;
+always @(posedge C)
+    if (E) 
+        r <= { r[DEPTH-2:0], D };
+assign Q = r[L];
+endmodule
diff --git a/tests/arch/xilinx/xilinx_srl.ys b/tests/arch/xilinx/xilinx_srl.ys
new file mode 100644 (file)
index 0000000..b8df0e5
--- /dev/null
@@ -0,0 +1,67 @@
+read_verilog xilinx_srl.v
+design -save read
+
+design -copy-to model $__XILINX_SHREG_
+hierarchy -top xilinx_srl_static_test
+prep
+design -save gold
+
+techmap
+xilinx_srl -fixed
+opt
+
+# stat
+# show -width
+select -assert-count 1 t:$_DFF_P_
+select -assert-count 2 t:$__XILINX_SHREG_
+
+design -stash gate
+
+design -import gold -as gold
+design -import gate -as gate
+design -copy-from model -as $__XILINX_SHREG_ \$__XILINX_SHREG_
+prep
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+dump gate
+sat -verify -prove-asserts -show-ports -seq 5 miter
+
+#design -load gold
+#stat
+
+#design -load gate
+#stat
+
+##########
+
+design -load read
+design -copy-to model $__XILINX_SHREG_
+hierarchy -top xilinx_srl_variable_test
+prep
+design -save gold
+
+xilinx_srl -variable
+opt
+
+#stat
+# show -width
+# write_verilog -noexpr -norename
+select -assert-count 1 t:$dff
+select -assert-count 1 t:$dff r:WIDTH=1 %i
+select -assert-count 2 t:$__XILINX_SHREG_
+
+design -stash gate
+
+design -import gold -as gold
+design -import gate -as gate
+design -copy-from model -as $__XILINX_SHREG_ \$__XILINX_SHREG_
+prep
+
+miter -equiv -flatten -make_assert -make_outputs gold gate miter
+sat -verify -prove-asserts -show-ports -seq 5 miter
+
+# design -load gold
+# stat
+
+# design -load gate
+# stat
diff --git a/tests/ecp5/.gitignore b/tests/ecp5/.gitignore
deleted file mode 100644 (file)
index 1d329c9..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-*.log
-/run-test.mk
diff --git a/tests/ecp5/add_sub.v b/tests/ecp5/add_sub.v
deleted file mode 100644 (file)
index 177c32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x + y;
-assign B =  x - y;
-
-endmodule
diff --git a/tests/ecp5/add_sub.ys b/tests/ecp5/add_sub.ys
deleted file mode 100644 (file)
index ee72d73..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog add_sub.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 10 t:LUT4
-select -assert-none t:LUT4 %% t:* %D
-
diff --git a/tests/ecp5/adffs.v b/tests/ecp5/adffs.v
deleted file mode 100644 (file)
index 223b52d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-module adff
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, posedge clr )
-               if ( clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module adffn
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, negedge clr )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module dffs
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( pre )
-                       q <= 1'b1;
-               else
-            q <= d;
-endmodule
-
-module ndffnr
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( negedge clk )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
diff --git a/tests/ecp5/adffs.ys b/tests/ecp5/adffs.ys
deleted file mode 100644 (file)
index c6780e5..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-read_verilog adffs.v
-design -save read
-
-hierarchy -top adff
-proc
-equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adff # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-none t:TRELLIS_FF %% t:* %D
-
-design -load read
-hierarchy -top adffn
-proc
-equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adffn # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-count 1 t:LUT4
-select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
-
-design -load read
-hierarchy -top dffs
-proc
-equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffs # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-count 1 t:LUT4
-select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
-
-design -load read
-hierarchy -top ndffnr
-proc
-equiv_opt -async2sync -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd ndffnr # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-count 1 t:LUT4
-select -assert-none t:TRELLIS_FF t:LUT4 %% t:* %D
diff --git a/tests/ecp5/counter.v b/tests/ecp5/counter.v
deleted file mode 100644 (file)
index 52852f8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-reset\r
-);\r
-    output [7:0] out;\r
-    input clk, reset;\r
-    reg [7:0] out;\r
-\r
-    always @(posedge clk, posedge reset)\r
-               if (reset) begin\r
-                       out <= 8'b0 ;\r
-               end else\r
-                       out <= out + 1;\r
-\r
-\r
-endmodule\r
diff --git a/tests/ecp5/counter.ys b/tests/ecp5/counter.ys
deleted file mode 100644 (file)
index 8ef7077..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog counter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 4 t:CCU2C
-select -assert-count 8 t:TRELLIS_FF
-select -assert-none t:CCU2C t:TRELLIS_FF %% t:* %D
diff --git a/tests/ecp5/dffs.v b/tests/ecp5/dffs.v
deleted file mode 100644 (file)
index 3418787..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-module dff
-    ( input d, clk, output reg q );
-       always @( posedge clk )
-            q <= d;
-endmodule
-
-module dffe
-    ( input d, clk, en, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/ecp5/dffs.ys b/tests/ecp5/dffs.ys
deleted file mode 100644 (file)
index a4f45d2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-read_verilog dffs.v
-design -save read
-
-hierarchy -top dff
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dff # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-none t:TRELLIS_FF %% t:* %D
-
-design -load read
-hierarchy -top dffe
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffe # Constrain all select calls below inside the top module
-select -assert-count 1 t:TRELLIS_FF
-select -assert-none t:TRELLIS_FF %% t:* %D
\ No newline at end of file
diff --git a/tests/ecp5/dpram.v b/tests/ecp5/dpram.v
deleted file mode 100644 (file)
index 3ea4c1f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72].
-*/
-module top (din, write_en, waddr, wclk, raddr, rclk, dout);
-parameter addr_width = 8;
-parameter data_width = 8;
-input [addr_width-1:0] waddr, raddr;
-input [data_width-1:0] din;
-input write_en, wclk, rclk;
-output [data_width-1:0] dout;
-reg [data_width-1:0] dout;
-reg [data_width-1:0] mem [(1<<addr_width)-1:0]
-/* synthesis syn_ramstyle = "no_rw_check" */ ;
-always @(posedge wclk) // Write memory.
-begin
-if (write_en)
-mem[waddr] <= din; // Using write address bus.
-end
-always @(posedge rclk) // Read memory.
-begin
-dout <= mem[raddr]; // Using read address bus.
-end
-endmodule
diff --git a/tests/ecp5/dpram.ys b/tests/ecp5/dpram.ys
deleted file mode 100644 (file)
index 3bc6bc1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-read_verilog dpram.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/ecp5/cells_sim.v synth_ecp5
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-
-#Blocked by issue #1358 (Missing ECP5 simulation models)
-#ERROR: Failed to import cell gate.mem.0.0.0 (type DP16KD) to SAT database.
-#sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 1 t:DP16KD
-select -assert-none t:DP16KD %% t:* %D
diff --git a/tests/ecp5/fsm.v b/tests/ecp5/fsm.v
deleted file mode 100644 (file)
index 368fbaa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
- module fsm (\r
- clock,\r
- reset,\r
- req_0,\r
- req_1,\r
- gnt_0,\r
- gnt_1\r
- );\r
- input   clock,reset,req_0,req_1;\r
- output  gnt_0,gnt_1;\r
- wire    clock,reset,req_0,req_1;\r
- reg     gnt_0,gnt_1;\r
-\r
- parameter SIZE = 3           ;\r
- parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
-\r
- reg [SIZE-1:0] state;\r
- reg [SIZE-1:0] next_state;\r
-\r
- always @ (posedge clock)\r
- begin : FSM\r
- if (reset == 1'b1) begin\r
-   state <=  #1  IDLE;\r
-   gnt_0 <= 0;\r
-   gnt_1 <= 0;\r
- end else\r
-  case(state)\r
-    IDLE : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-                 gnt_0 <= 1;\r
-               end else if (req_1 == 1'b1) begin\r
-                 gnt_1 <= 1;\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT0 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 gnt_0 <= 0;\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT1 : if (req_1 == 1'b1) begin\r
-                 state <=  #1  GNT2;\r
-                                gnt_1 <= req_0;\r
-               end\r
-    GNT2 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT1;\r
-                                gnt_1 <= req_1;\r
-               end\r
-    default : state <=  #1  IDLE;\r
- endcase\r
- end\r
-\r
-endmodule\r
diff --git a/tests/ecp5/fsm.ys b/tests/ecp5/fsm.ys
deleted file mode 100644 (file)
index ded91e5..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-read_verilog fsm.v
-hierarchy -top fsm
-proc
-flatten
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd fsm # Constrain all select calls below inside the top module
-select -assert-count 1 t:L6MUX21
-select -assert-count 13 t:LUT4
-select -assert-count 5 t:PFUMX
-select -assert-count 5 t:TRELLIS_FF
-select -assert-none t:L6MUX21 t:LUT4 t:PFUMX t:TRELLIS_FF %% t:* %D
diff --git a/tests/ecp5/latches.v b/tests/ecp5/latches.v
deleted file mode 100644 (file)
index adb5d53..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module latchp
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( en )
-                       q <= d;
-endmodule
-
-module latchn
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( !en )
-                       q <= d;
-endmodule
-
-module latchsr
-    ( input d, clk, en, clr, pre, output reg q );
-       always @*
-               if ( clr )
-                       q <= 1'b0;
-               else if ( pre )
-                       q <= 1'b1;
-               else if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/ecp5/latches.ys b/tests/ecp5/latches.ys
deleted file mode 100644 (file)
index fc15a69..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-
-read_verilog latches.v
-design -save read
-
-hierarchy -top latchp
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_ecp5
-cd latchp # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT4
-
-select -assert-none t:LUT4 %% t:* %D
-
-
-design -load read
-hierarchy -top latchn
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_ecp5
-cd latchn # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT4
-
-select -assert-none t:LUT4 %% t:* %D
-
-
-design -load read
-hierarchy -top latchsr
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_ecp5
-cd latchsr # Constrain all select calls below inside the top module
-select -assert-count 2 t:LUT4
-select -assert-count 1 t:PFUMX
-
-select -assert-none t:LUT4 t:PFUMX %% t:* %D
diff --git a/tests/ecp5/logic.v b/tests/ecp5/logic.v
deleted file mode 100644 (file)
index e5343ca..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-module top
-(
- input [0:7] in,
- output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
- );
-
-   assign     B1 =  in[0] & in[1];
-   assign     B2 =  in[0] | in[1];
-   assign     B3 =  in[0] ~& in[1];
-   assign     B4 =  in[0] ~| in[1];
-   assign     B5 =  in[0] ^ in[1];
-   assign     B6 =  in[0] ~^ in[1];
-   assign     B7 =  ~in[0];
-   assign     B8 =  in[0];
-   assign     B9 =  in[0:1] && in [2:3];
-   assign     B10 =  in[0:1] || in [2:3];
-
-endmodule
diff --git a/tests/ecp5/logic.ys b/tests/ecp5/logic.ys
deleted file mode 100644 (file)
index 4f113a1..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-read_verilog logic.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 9 t:LUT4
-select -assert-none t:LUT4 %% t:* %D
diff --git a/tests/ecp5/macc.v b/tests/ecp5/macc.v
deleted file mode 100644 (file)
index 63a3d3a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77].
-*/
-module top(clk,a,b,c,set);
-parameter A_WIDTH = 4;
-parameter B_WIDTH = 3;
-input set;
-input clk;
-input signed [(A_WIDTH - 1):0] a;
-input signed [(B_WIDTH - 1):0] b;
-output signed [(A_WIDTH + B_WIDTH - 1):0] c;
-reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
-assign c = reg_tmp_c;
-always @(posedge clk)
-begin
-if(set)
-begin
-reg_tmp_c <= 0;
-end
-else
-begin
-reg_tmp_c <= a * b + c;
-end
-end
-endmodule
diff --git a/tests/ecp5/macc.ys b/tests/ecp5/macc.ys
deleted file mode 100644 (file)
index 1863ea4..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-read_verilog macc.v
-hierarchy -top top
-proc
-# Blocked by issue #1358 (Missing ECP5 simulation models)
-#equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:MULT18X18D
-select -assert-count 4 t:CCU2C
-select -assert-count 7 t:TRELLIS_FF
-
-select -assert-none t:CCU2C t:MULT18X18D t:TRELLIS_FF %% t:* %D
diff --git a/tests/ecp5/memory.v b/tests/ecp5/memory.v
deleted file mode 100644 (file)
index cb7753f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-module top
-(
-       input [7:0] data_a,
-       input [6:1] addr_a,
-       input we_a, clk,
-       output reg [7:0] q_a
-);
-       // Declare the RAM variable
-       reg [7:0] ram[63:0];
-
-       // Port A
-       always @ (posedge clk)
-       begin
-               if (we_a)
-               begin
-                       ram[addr_a] <= data_a;
-                       q_a <= data_a;
-               end
-               q_a <= ram[addr_a];
-       end
-endmodule
diff --git a/tests/ecp5/memory.ys b/tests/ecp5/memory.ys
deleted file mode 100644 (file)
index 9b475f1..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-read_verilog memory.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/ecp5/cells_sim.v synth_ecp5
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 24 t:L6MUX21
-select -assert-count 71 t:LUT4
-select -assert-count 32 t:PFUMX
-select -assert-count 8 t:TRELLIS_DPR16X4
-select -assert-count 35 t:TRELLIS_FF
-select -assert-none t:L6MUX21 t:LUT4 t:PFUMX t:TRELLIS_DPR16X4 t:TRELLIS_FF %% t:* %D
diff --git a/tests/ecp5/mul.v b/tests/ecp5/mul.v
deleted file mode 100644 (file)
index d5b48b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-module top
-(
- input [5:0] x,
- input [5:0] y,
-
- output [11:0] A,
- );
-
-assign A =  x * y;
-
-endmodule
diff --git a/tests/ecp5/mul.ys b/tests/ecp5/mul.ys
deleted file mode 100644 (file)
index 0a91f89..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog mul.v
-hierarchy -top top
-proc
-# Blocked by issue #1358 (Missing ECP5 simulation models)
-#equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-equiv_opt -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:MULT18X18D
-select -assert-none t:MULT18X18D %% t:* %D
diff --git a/tests/ecp5/mux.v b/tests/ecp5/mux.v
deleted file mode 100644 (file)
index 782424a..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-module mux2 (S,A,B,Y);
-    input S;
-    input A,B;
-    output reg Y;
-
-    always @(*)
-               Y = (S)? B : A;
-endmodule
-
-module mux4 ( S, D, Y );
-
-input[1:0] S;
-input[3:0] D;
-output Y;
-
-reg Y;
-wire[1:0] S;
-wire[3:0] D;
-
-always @*
-begin
-    case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-   endcase
-end
-
-endmodule
-
-module mux8 ( S, D, Y );
-
-input[2:0] S;
-input[7:0] D;
-output Y;
-
-reg Y;
-wire[2:0] S;
-wire[7:0] D;
-
-always @*
-begin
-   case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-       4 : Y = D[4];
-       5 : Y = D[5];
-       6 : Y = D[6];
-       7 : Y = D[7];
-   endcase
-end
-
-endmodule
-
-module mux16 (D, S, Y);
-       input  [15:0] D;
-       input  [3:0] S;
-       output Y;
-
-assign Y = D[S];
-
-endmodule
-
diff --git a/tests/ecp5/mux.ys b/tests/ecp5/mux.ys
deleted file mode 100644 (file)
index 8cfbd54..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-read_verilog mux.v
-design -save read
-
-hierarchy -top mux2
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT4
-select -assert-none t:LUT4 %% t:* %D
-
-design -load read
-hierarchy -top mux4
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux4 # Constrain all select calls below inside the top module
-select -assert-count 1 t:L6MUX21
-select -assert-count 4 t:LUT4
-select -assert-count 2 t:PFUMX
-
-select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
-
-design -load read
-hierarchy -top mux8
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux8 # Constrain all select calls below inside the top module
-select -assert-count 1 t:L6MUX21
-select -assert-count 7 t:LUT4
-select -assert-count 2 t:PFUMX
-
-select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
-
-design -load read
-hierarchy -top mux16
-proc
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux16 # Constrain all select calls below inside the top module
-select -assert-count 8 t:L6MUX21
-select -assert-count 26 t:LUT4
-select -assert-count 12 t:PFUMX
-
-select -assert-none t:LUT4 t:L6MUX21 t:PFUMX %% t:* %D
diff --git a/tests/ecp5/rom.v b/tests/ecp5/rom.v
deleted file mode 100644 (file)
index 0a0f41f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 74].
-*/
-module top(data, addr);
-output [3:0] data;
-input [4:0] addr;
-always @(addr) begin
-case (addr)
-0 : data = 'h4;
-1 : data = 'h9;
-2 : data = 'h1;
-15 : data = 'h8;
-16 : data = 'h1;
-17 : data = 'h0;
-default : data = 'h0;
-endcase
-end
-endmodule
diff --git a/tests/ecp5/rom.ys b/tests/ecp5/rom.ys
deleted file mode 100644 (file)
index 98645ae..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog rom.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 6 t:LUT4
-select -assert-count 3 t:PFUMX
-select -assert-none t:LUT4 t:PFUMX %% t:* %D
diff --git a/tests/ecp5/run-test.sh b/tests/ecp5/run-test.sh
deleted file mode 100755 (executable)
index 46716f9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/ecp5/shifter.v b/tests/ecp5/shifter.v
deleted file mode 100644 (file)
index 04ae49d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-in\r
-);\r
-    output [7:0] out;\r
-    input signed clk, in;\r
-    reg signed [7:0] out = 0;\r
-\r
-    always @(posedge clk)\r
-       begin\r
-               out    <= out >> 1;\r
-               out[7] <= in;\r
-       end\r
-\r
-endmodule\r
diff --git a/tests/ecp5/shifter.ys b/tests/ecp5/shifter.ys
deleted file mode 100644 (file)
index e1901e1..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog shifter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ecp5/cells_sim.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 8 t:TRELLIS_FF
-select -assert-none t:TRELLIS_FF %% t:* %D
diff --git a/tests/ecp5/tribuf.v b/tests/ecp5/tribuf.v
deleted file mode 100644 (file)
index 90dd314..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-module tristate (en, i, o);
-    input en;
-    input i;
-    output o;
-
-       assign o = en ? i : 1'bz;
-
-endmodule
diff --git a/tests/ecp5/tribuf.ys b/tests/ecp5/tribuf.ys
deleted file mode 100644 (file)
index a6e9c95..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog tribuf.v
-hierarchy -top tristate
-proc
-flatten
-equiv_opt -assert -map +/ecp5/cells_sim.v -map +/simcells.v synth_ecp5 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd tristate # Constrain all select calls below inside the top module
-select -assert-count 1 t:$_TBUF_
-select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/efinix/.gitignore b/tests/efinix/.gitignore
deleted file mode 100644 (file)
index b48f808..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-/*.log
-/*.out
-/run-test.mk
diff --git a/tests/efinix/add_sub.v b/tests/efinix/add_sub.v
deleted file mode 100644 (file)
index 177c32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x + y;
-assign B =  x - y;
-
-endmodule
diff --git a/tests/efinix/add_sub.ys b/tests/efinix/add_sub.ys
deleted file mode 100644 (file)
index 8bd28c6..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog add_sub.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 10 t:EFX_ADD
-select -assert-count 4  t:EFX_LUT4
-select -assert-none t:EFX_ADD t:EFX_LUT4 %% t:* %D
-
diff --git a/tests/efinix/adffs.v b/tests/efinix/adffs.v
deleted file mode 100644 (file)
index 223b52d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-module adff
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, posedge clr )
-               if ( clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module adffn
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, negedge clr )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module dffs
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( pre )
-                       q <= 1'b1;
-               else
-            q <= d;
-endmodule
-
-module ndffnr
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( negedge clk )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
diff --git a/tests/efinix/adffs.ys b/tests/efinix/adffs.ys
deleted file mode 100644 (file)
index 1069c6c..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-read_verilog adffs.v
-design -save read
-
-hierarchy -top adff
-proc
-equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adff # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
-
-
-design -load read
-hierarchy -top adffn
-proc
-equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adffn # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
-
-
-design -load read
-hierarchy -top dffs
-proc
-equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffs # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
-
-
-design -load read
-hierarchy -top ndffnr
-proc
-equiv_opt -async2sync -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd ndffnr # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/counter.v b/tests/efinix/counter.v
deleted file mode 100644 (file)
index 52852f8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-reset\r
-);\r
-    output [7:0] out;\r
-    input clk, reset;\r
-    reg [7:0] out;\r
-\r
-    always @(posedge clk, posedge reset)\r
-               if (reset) begin\r
-                       out <= 8'b0 ;\r
-               end else\r
-                       out <= out + 1;\r
-\r
-\r
-endmodule\r
diff --git a/tests/efinix/counter.ys b/tests/efinix/counter.ys
deleted file mode 100644 (file)
index 82e61d3..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-read_verilog counter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:EFX_GBUFCE
-select -assert-count 8 t:EFX_FF
-select -assert-count 9 t:EFX_ADD
-select -assert-none t:EFX_GBUFCE t:EFX_FF t:EFX_ADD %% t:* %D
diff --git a/tests/efinix/dffs.v b/tests/efinix/dffs.v
deleted file mode 100644 (file)
index 3418787..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-module dff
-    ( input d, clk, output reg q );
-       always @( posedge clk )
-            q <= d;
-endmodule
-
-module dffe
-    ( input d, clk, en, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/efinix/dffs.ys b/tests/efinix/dffs.ys
deleted file mode 100644 (file)
index cdd2882..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-read_verilog dffs.v
-design -save read
-
-hierarchy -top dff
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dff # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE %% t:* %D
-
-design -load read
-hierarchy -top dffe
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffe # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_FF
-select -assert-count 1 t:EFX_GBUFCE
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_FF t:EFX_GBUFCE t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/fsm.v b/tests/efinix/fsm.v
deleted file mode 100644 (file)
index 368fbaa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
- module fsm (\r
- clock,\r
- reset,\r
- req_0,\r
- req_1,\r
- gnt_0,\r
- gnt_1\r
- );\r
- input   clock,reset,req_0,req_1;\r
- output  gnt_0,gnt_1;\r
- wire    clock,reset,req_0,req_1;\r
- reg     gnt_0,gnt_1;\r
-\r
- parameter SIZE = 3           ;\r
- parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
-\r
- reg [SIZE-1:0] state;\r
- reg [SIZE-1:0] next_state;\r
-\r
- always @ (posedge clock)\r
- begin : FSM\r
- if (reset == 1'b1) begin\r
-   state <=  #1  IDLE;\r
-   gnt_0 <= 0;\r
-   gnt_1 <= 0;\r
- end else\r
-  case(state)\r
-    IDLE : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-                 gnt_0 <= 1;\r
-               end else if (req_1 == 1'b1) begin\r
-                 gnt_1 <= 1;\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT0 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 gnt_0 <= 0;\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT1 : if (req_1 == 1'b1) begin\r
-                 state <=  #1  GNT2;\r
-                                gnt_1 <= req_0;\r
-               end\r
-    GNT2 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT1;\r
-                                gnt_1 <= req_1;\r
-               end\r
-    default : state <=  #1  IDLE;\r
- endcase\r
- end\r
-\r
-endmodule\r
diff --git a/tests/efinix/fsm.ys b/tests/efinix/fsm.ys
deleted file mode 100644 (file)
index 2ec7521..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-read_verilog fsm.v
-hierarchy -top fsm
-proc
-flatten
-#ERROR: Found 4 unproven $equiv cells in 'equiv_status -assert'.
-#equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-equiv_opt -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd fsm # Constrain all select calls below inside the top module
-
-select -assert-count 1  t:EFX_GBUFCE
-select -assert-count 6  t:EFX_FF
-select -assert-count 15 t:EFX_LUT4
-select -assert-none t:EFX_GBUFCE t:EFX_FF t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/latches.v b/tests/efinix/latches.v
deleted file mode 100644 (file)
index adb5d53..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module latchp
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( en )
-                       q <= d;
-endmodule
-
-module latchn
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( !en )
-                       q <= d;
-endmodule
-
-module latchsr
-    ( input d, clk, en, clr, pre, output reg q );
-       always @*
-               if ( clr )
-                       q <= 1'b0;
-               else if ( pre )
-                       q <= 1'b1;
-               else if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/efinix/latches.ys b/tests/efinix/latches.ys
deleted file mode 100644 (file)
index 899d024..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-read_verilog latches.v
-design -save read
-
-hierarchy -top latchp
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_efinix
-cd latchp # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
-
-
-design -load read
-hierarchy -top latchn
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_efinix
-cd latchn # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
-
-
-design -load read
-hierarchy -top latchsr
-proc
-# Can't run any sort of equivalence check because latches are blown to LUTs
-synth_efinix
-cd latchsr # Constrain all select calls below inside the top module
-select -assert-count 2 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/logic.v b/tests/efinix/logic.v
deleted file mode 100644 (file)
index e5343ca..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-module top
-(
- input [0:7] in,
- output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
- );
-
-   assign     B1 =  in[0] & in[1];
-   assign     B2 =  in[0] | in[1];
-   assign     B3 =  in[0] ~& in[1];
-   assign     B4 =  in[0] ~| in[1];
-   assign     B5 =  in[0] ^ in[1];
-   assign     B6 =  in[0] ~^ in[1];
-   assign     B7 =  ~in[0];
-   assign     B8 =  in[0];
-   assign     B9 =  in[0:1] && in [2:3];
-   assign     B10 =  in[0:1] || in [2:3];
-
-endmodule
diff --git a/tests/efinix/logic.ys b/tests/efinix/logic.ys
deleted file mode 100644 (file)
index fdedb33..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog logic.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 9 t:EFX_LUT4
-select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/memory.v b/tests/efinix/memory.v
deleted file mode 100644 (file)
index 5634d65..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-module top
-(
-       input [7:0] data_a,
-       input [8:1] addr_a,
-       input we_a, clk,
-       output reg [7:0] q_a
-);
-       // Declare the RAM variable
-       reg [7:0] ram[63:0];
-
-       // Port A
-       always @ (posedge clk)
-       begin
-               if (we_a)
-               begin
-                       ram[addr_a] <= data_a;
-                       q_a <= data_a;
-               end
-               q_a <= ram[addr_a];
-       end
-endmodule
diff --git a/tests/efinix/memory.ys b/tests/efinix/memory.ys
deleted file mode 100644 (file)
index fe24b0a..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-read_verilog memory.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/efinix/cells_sim.v synth_efinix
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-#ERROR: Called with -verify and proof did fail!
-#sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
-sat -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 1 t:EFX_GBUFCE
-select -assert-count 1 t:EFX_RAM_5K
-select -assert-none t:EFX_GBUFCE t:EFX_RAM_5K %% t:* %D
diff --git a/tests/efinix/mux.v b/tests/efinix/mux.v
deleted file mode 100644 (file)
index 27bc0bf..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-module mux2 (S,A,B,Y);
-    input S;
-    input A,B;
-    output reg Y;
-
-    always @(*)
-               Y = (S)? B : A;
-endmodule
-
-module mux4 ( S, D, Y );
-
-input[1:0] S;
-input[3:0] D;
-output Y;
-
-reg Y;
-wire[1:0] S;
-wire[3:0] D;
-
-always @*
-begin
-    case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-   endcase
-end
-
-endmodule
-
-module mux8 ( S, D, Y );
-
-input[2:0] S;
-input[7:0] D;
-output Y;
-
-reg Y;
-wire[2:0] S;
-wire[7:0] D;
-
-always @*
-begin
-   case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-       4 : Y = D[4];
-       5 : Y = D[5];
-       6 : Y = D[6];
-       7 : Y = D[7];
-   endcase
-end
-
-endmodule
-
-module mux16 (D, S, Y);
-       input  [15:0] D;
-       input  [3:0] S;
-       output Y;
-
-assign Y = D[S];
-
-endmodule
diff --git a/tests/efinix/mux.ys b/tests/efinix/mux.ys
deleted file mode 100644 (file)
index 71a9681..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-read_verilog mux.v
-design -save read
-
-hierarchy -top mux2
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
-
-design -load read
-hierarchy -top mux4
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux4 # Constrain all select calls below inside the top module
-select -assert-count 2 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
-
-design -load read
-hierarchy -top mux8
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux8 # Constrain all select calls below inside the top module
-select -assert-count 5 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
-
-design -load read
-hierarchy -top mux16
-proc
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux16 # Constrain all select calls below inside the top module
-select -assert-count 12 t:EFX_LUT4
-
-select -assert-none t:EFX_LUT4 %% t:* %D
diff --git a/tests/efinix/run-test.sh b/tests/efinix/run-test.sh
deleted file mode 100755 (executable)
index 46716f9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/efinix/shifter.v b/tests/efinix/shifter.v
deleted file mode 100644 (file)
index ce2c81d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-in\r
-);\r
-    output [7:0] out;\r
-    input signed clk, in;\r
-    reg signed [7:0] out = 0;\r
-\r
-    always @(posedge clk)\r
-       begin\r
-               out    <= out << 1;\r
-               out[7] <= in;\r
-       end\r
-\r
-endmodule\r
diff --git a/tests/efinix/shifter.ys b/tests/efinix/shifter.ys
deleted file mode 100644 (file)
index 1a6b556..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog shifter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/efinix/cells_sim.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1  t:EFX_GBUFCE
-select -assert-count 8  t:EFX_FF
-select -assert-none t:EFX_GBUFCE t:EFX_FF %% t:* %D
diff --git a/tests/efinix/tribuf.v b/tests/efinix/tribuf.v
deleted file mode 100644 (file)
index c644682..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-module tristate (en, i, o);
-    input en;
-    input i;
-    output reg o;
-    
-    always @(en or i)
-               o <= (en)? i : 1'bZ;
-endmodule
diff --git a/tests/efinix/tribuf.ys b/tests/efinix/tribuf.ys
deleted file mode 100644 (file)
index 2e2ab9e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-read_verilog tribuf.v
-hierarchy -top tristate
-proc
-tribuf
-flatten
-synth
-equiv_opt -assert -map +/efinix/cells_sim.v -map +/simcells.v synth_efinix # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd tristate # Constrain all select calls below inside the top module
-#Internal cell type used. Need support it.
-select -assert-count 1 t:$_TBUF_
-select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/ice40/.gitignore b/tests/ice40/.gitignore
deleted file mode 100644 (file)
index 9a71dca..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-*.log
-/run-test.mk
-+*_synth.v
-+*_testbench
diff --git a/tests/ice40/add_sub.v b/tests/ice40/add_sub.v
deleted file mode 100644 (file)
index 177c32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x + y;
-assign B =  x - y;
-
-endmodule
diff --git a/tests/ice40/add_sub.ys b/tests/ice40/add_sub.ys
deleted file mode 100644 (file)
index 4a998d9..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog add_sub.v
-hierarchy -top top
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 11 t:SB_LUT4
-select -assert-count 6 t:SB_CARRY
-select -assert-none t:SB_LUT4 t:SB_CARRY %% t:* %D
-
diff --git a/tests/ice40/adffs.v b/tests/ice40/adffs.v
deleted file mode 100644 (file)
index 09dc360..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-module adff
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, posedge clr )
-               if ( clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module adffn
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, negedge clr )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module dffs
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, posedge pre )
-               if ( pre )
-                       q <= 1'b1;
-               else
-            q <= d;
-endmodule
-
-module ndffnr
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( negedge clk, negedge pre )
-               if ( !pre )
-                       q <= 1'b1;
-               else
-            q <= d;
-endmodule
-
-module top (
-input clk,
-input clr,
-input pre,
-input a,
-output b,b1,b2,b3
-);
-
-dffs u_dffs (
-        .clk (clk ),
-        .clr (clr),
-        .pre (pre),
-        .d (a ),
-        .q (b )
-    );
-
-ndffnr u_ndffnr (
-        .clk (clk ),
-        .clr (clr),
-        .pre (pre),
-        .d (a ),
-        .q (b1 )
-    );
-
-adff u_adff (
-        .clk (clk ),
-        .clr (clr),
-        .d (a ),
-        .q (b2 )
-    );
-
-adffn u_adffn (
-        .clk (clk ),
-        .clr (clr),
-        .d (a ),
-        .q (b3 )
-    );
-
-endmodule
diff --git a/tests/ice40/adffs.ys b/tests/ice40/adffs.ys
deleted file mode 100644 (file)
index 548060b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog adffs.v
-proc
-flatten
-equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_DFFNS
-select -assert-count 2 t:SB_DFFR
-select -assert-count 1 t:SB_DFFS
-select -assert-count 2 t:SB_LUT4
-select -assert-none t:SB_DFFNS t:SB_DFFR t:SB_DFFS t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/alu.v b/tests/ice40/alu.v
deleted file mode 100644 (file)
index f82cc2e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-module top (
-       input clock,
-       input [31:0] dinA, dinB,
-       input [2:0] opcode,
-       output reg [31:0] dout
-);
-       always @(posedge clock) begin
-               case (opcode)
-               0: dout <= dinA + dinB;
-               1: dout <= dinA - dinB;
-               2: dout <= dinA >> dinB;
-               3: dout <= $signed(dinA) >>> dinB;
-               4: dout <= dinA << dinB;
-               5: dout <= dinA & dinB;
-               6: dout <= dinA | dinB;
-               7: dout <= dinA ^ dinB;
-               endcase
-       end
-endmodule
diff --git a/tests/ice40/alu.ys b/tests/ice40/alu.ys
deleted file mode 100644 (file)
index bd859ef..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog alu.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 62 t:SB_CARRY
-select -assert-count 32 t:SB_DFF
-select -assert-count 655 t:SB_LUT4
-select -assert-none t:SB_CARRY t:SB_DFF t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/counter.v b/tests/ice40/counter.v
deleted file mode 100644 (file)
index 52852f8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-reset\r
-);\r
-    output [7:0] out;\r
-    input clk, reset;\r
-    reg [7:0] out;\r
-\r
-    always @(posedge clk, posedge reset)\r
-               if (reset) begin\r
-                       out <= 8'b0 ;\r
-               end else\r
-                       out <= out + 1;\r
-\r
-\r
-endmodule\r
diff --git a/tests/ice40/counter.ys b/tests/ice40/counter.ys
deleted file mode 100644 (file)
index c65c216..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog counter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 6 t:SB_CARRY
-select -assert-count 8 t:SB_DFFR
-select -assert-count 8 t:SB_LUT4
-select -assert-none t:SB_CARRY t:SB_DFFR t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/dffs.v b/tests/ice40/dffs.v
deleted file mode 100644 (file)
index d97840c..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-module dff
-    ( input d, clk, output reg q );
-       always @( posedge clk )
-            q <= d;
-endmodule
-
-module dffe
-    ( input d, clk, en, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( en )
-                       q <= d;
-endmodule
-
-module top (
-input clk,
-input en,
-input a,
-output b,b1,
-);
-
-dff u_dff (
-        .clk (clk ),
-        .d (a ),
-        .q (b )
-    );
-
-dffe u_ndffe (
-        .clk (clk ),
-        .en (en),
-        .d (a ),
-        .q (b1 )
-    );
-
-endmodule
diff --git a/tests/ice40/dffs.ys b/tests/ice40/dffs.ys
deleted file mode 100644 (file)
index ee7f884..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-read_verilog dffs.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_DFF
-select -assert-count 1 t:SB_DFFE
-select -assert-none t:SB_DFF t:SB_DFFE %% t:* %D
diff --git a/tests/ice40/div_mod.v b/tests/ice40/div_mod.v
deleted file mode 100644 (file)
index 64a3670..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x % y;
-assign B =  x / y;
-
-endmodule
diff --git a/tests/ice40/div_mod.ys b/tests/ice40/div_mod.ys
deleted file mode 100644 (file)
index 821d6c3..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog div_mod.v
-hierarchy -top top
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 59 t:SB_LUT4
-select -assert-count 41 t:SB_CARRY
-select -assert-none t:SB_LUT4 t:SB_CARRY %% t:* %D
diff --git a/tests/ice40/dpram.v b/tests/ice40/dpram.v
deleted file mode 100644 (file)
index 3ea4c1f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 72].
-*/
-module top (din, write_en, waddr, wclk, raddr, rclk, dout);
-parameter addr_width = 8;
-parameter data_width = 8;
-input [addr_width-1:0] waddr, raddr;
-input [data_width-1:0] din;
-input write_en, wclk, rclk;
-output [data_width-1:0] dout;
-reg [data_width-1:0] dout;
-reg [data_width-1:0] mem [(1<<addr_width)-1:0]
-/* synthesis syn_ramstyle = "no_rw_check" */ ;
-always @(posedge wclk) // Write memory.
-begin
-if (write_en)
-mem[waddr] <= din; // Using write address bus.
-end
-always @(posedge rclk) // Read memory.
-begin
-dout <= mem[raddr]; // Using read address bus.
-end
-endmodule
diff --git a/tests/ice40/dpram.ys b/tests/ice40/dpram.ys
deleted file mode 100644 (file)
index 4f6a253..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-read_verilog dpram.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 3 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 1 t:SB_RAM40_4K
-select -assert-none t:SB_RAM40_4K %% t:* %D
diff --git a/tests/ice40/fsm.v b/tests/ice40/fsm.v
deleted file mode 100644 (file)
index 0605bd1..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
- module fsm (\r
- clock,\r
- reset,\r
- req_0,\r
- req_1,\r
- gnt_0,\r
- gnt_1\r
- );\r
- input   clock,reset,req_0,req_1;\r
- output  gnt_0,gnt_1;\r
- wire    clock,reset,req_0,req_1;\r
- reg     gnt_0,gnt_1;\r
-\r
- parameter SIZE = 3           ;\r
- parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
-\r
- reg [SIZE-1:0] state;\r
- reg [SIZE-1:0] next_state;\r
-\r
- always @ (posedge clock)\r
- begin : FSM\r
- if (reset == 1'b1) begin\r
-   state <=  #1  IDLE;\r
-   gnt_0 <= 0;\r
-   gnt_1 <= 0;\r
- end else\r
-  case(state)\r
-    IDLE : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-                 gnt_0 <= 1;\r
-               end else if (req_1 == 1'b1) begin\r
-                 gnt_1 <= 1;\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT0 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 gnt_0 <= 0;\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT1 : if (req_1 == 1'b1) begin\r
-                 state <=  #1  GNT2;\r
-                                gnt_1 <= req_0;\r
-               end\r
-    GNT2 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT1;\r
-                                gnt_1 <= req_1;\r
-               end\r
-    default : state <=  #1  IDLE;\r
- endcase\r
- end\r
-\r
- endmodule\r
-\r
- module top (\r
-input clk,\r
-input rst,\r
-input a,\r
-input b,\r
-output g0,\r
-output g1\r
-);\r
-\r
-fsm u_fsm ( .clock(clk),\r
-            .reset(rst),\r
-            .req_0(a),\r
-            .req_1(b),\r
-            .gnt_0(g0),\r
-            .gnt_1(g1));\r
-\r
-endmodule\r
diff --git a/tests/ice40/fsm.ys b/tests/ice40/fsm.ys
deleted file mode 100644 (file)
index 4cc8629..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-read_verilog fsm.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 2 t:SB_DFFESR
-select -assert-count 2 t:SB_DFFSR
-select -assert-count 1 t:SB_DFFSS
-select -assert-count 13 t:SB_LUT4
-select -assert-none t:SB_DFFESR t:SB_DFFSR t:SB_DFFSS t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/ice40_opt.ys b/tests/ice40/ice40_opt.ys
deleted file mode 100644 (file)
index b17c69c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-read_verilog -icells -formal <<EOT
-module top(input CI, I0, output [1:0] CO, output O);
-    wire A = 1'b0, B = 1'b0;
-       \$__ICE40_CARRY_WRAPPER #(
-               //    A[0]: 1010 1010 1010 1010
-               //    A[1]: 1100 1100 1100 1100
-               //    A[2]: 1111 0000 1111 0000
-               //    A[3]: 1111 1111 0000 0000
-               .LUT(~16'b 0110_1001_1001_0110)
-       ) u0 (
-               .A(A),
-               .B(B),
-               .CI(CI),
-               .I0(I0),
-               .I3(CI),
-               .CO(CO[0]),
-               .O(O)
-       );
-    SB_CARRY u1 (.I0(~A), .I1(~B), .CI(CI), .CO(CO[1]));
-endmodule
-EOT
-
-equiv_opt -assert -map +/ice40/cells_map.v -map +/ice40/cells_sim.v ice40_opt
-design -load postopt
-select -assert-count 1 t:*
-select -assert-count 1 t:$lut
diff --git a/tests/ice40/latches.v b/tests/ice40/latches.v
deleted file mode 100644 (file)
index 9dc43e4..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-module latchp
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( en )
-                       q <= d;
-endmodule
-
-module latchn
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( !en )
-                       q <= d;
-endmodule
-
-module latchsr
-    ( input d, clk, en, clr, pre, output reg q );
-       always @*
-               if ( clr )
-                       q <= 1'b0;
-               else if ( pre )
-                       q <= 1'b1;
-               else if ( en )
-                       q <= d;
-endmodule
-
-
-module top (
-input clk,
-input clr,
-input pre,
-input a,
-output b,b1,b2
-);
-
-
-latchp u_latchp (
-        .en (clk ),
-        .d (a ),
-        .q (b )
-    );
-
-
-latchn u_latchn (
-        .en (clk ),
-        .d (a ),
-        .q (b1 )
-    );
-
-
-latchsr u_latchsr (
-        .en (clk ),
-        .clr (clr),
-        .pre (pre),
-        .d (a ),
-        .q (b2 )
-    );
-
-endmodule
diff --git a/tests/ice40/latches.ys b/tests/ice40/latches.ys
deleted file mode 100644 (file)
index 708734e..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-read_verilog latches.v
-
-proc
-flatten
-# Can't run any sort of equivalence check because latches are blown to LUTs
-#equiv_opt -async2sync -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-
-#design -load preopt
-synth_ice40
-cd top
-select -assert-count 4 t:SB_LUT4
-select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/logic.v b/tests/ice40/logic.v
deleted file mode 100644 (file)
index e5343ca..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-module top
-(
- input [0:7] in,
- output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
- );
-
-   assign     B1 =  in[0] & in[1];
-   assign     B2 =  in[0] | in[1];
-   assign     B3 =  in[0] ~& in[1];
-   assign     B4 =  in[0] ~| in[1];
-   assign     B5 =  in[0] ^ in[1];
-   assign     B6 =  in[0] ~^ in[1];
-   assign     B7 =  ~in[0];
-   assign     B8 =  in[0];
-   assign     B9 =  in[0:1] && in [2:3];
-   assign     B10 =  in[0:1] || in [2:3];
-
-endmodule
diff --git a/tests/ice40/logic.ys b/tests/ice40/logic.ys
deleted file mode 100644 (file)
index fc5e5b1..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-read_verilog logic.v
-hierarchy -top top
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 9 t:SB_LUT4
-select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/macc.v b/tests/ice40/macc.v
deleted file mode 100644 (file)
index 6f68e75..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 77].
-*/
-module top(clk,a,b,c,set);
-parameter A_WIDTH = 6 /*4*/;
-parameter B_WIDTH = 6 /*3*/;
-input set;
-input clk;
-input signed [(A_WIDTH - 1):0] a;
-input signed [(B_WIDTH - 1):0] b;
-output signed [(A_WIDTH + B_WIDTH - 1):0] c;
-reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
-assign c = reg_tmp_c;
-always @(posedge clk)
-begin
-    if(set)
-    begin
-        reg_tmp_c <= 0;
-    end
-    else
-    begin
-        reg_tmp_c <= a * b + c;
-    end
-end
-endmodule
-
-module top2(clk,a,b,c,hold);
-parameter A_WIDTH = 6 /*4*/;
-parameter B_WIDTH = 6 /*3*/;
-input hold;
-input clk;
-input signed [(A_WIDTH - 1):0] a;
-input signed [(B_WIDTH - 1):0] b;
-output signed [(A_WIDTH + B_WIDTH - 1):0] c;
-reg signed [A_WIDTH-1:0] reg_a;
-reg signed [B_WIDTH-1:0] reg_b;
-reg [(A_WIDTH + B_WIDTH - 1):0] reg_tmp_c;
-assign c = reg_tmp_c;
-always @(posedge clk)
-begin
-    if (!hold) begin
-        reg_a <= a;
-        reg_b <= b;
-        reg_tmp_c <= reg_a * reg_b + c;
-    end
-end
-endmodule
diff --git a/tests/ice40/macc.ys b/tests/ice40/macc.ys
deleted file mode 100644 (file)
index fd30e79..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-read_verilog macc.v
-proc
-design -save read
-
-hierarchy -top top
-equiv_opt -assert -multiclock -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_MAC16
-select -assert-none t:SB_MAC16 %% t:* %D
-
-design -load read
-hierarchy -top top2
-
-#equiv_opt -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
-
-equiv_opt -run :prove -multiclock -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
-clk2fflogic
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -set-init-zero -seq 4 -verify -prove-asserts -show-ports miter
-
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_MAC16
-select -assert-none t:SB_MAC16 %% t:* %D
diff --git a/tests/ice40/memory.v b/tests/ice40/memory.v
deleted file mode 100644 (file)
index cb7753f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-module top
-(
-       input [7:0] data_a,
-       input [6:1] addr_a,
-       input we_a, clk,
-       output reg [7:0] q_a
-);
-       // Declare the RAM variable
-       reg [7:0] ram[63:0];
-
-       // Port A
-       always @ (posedge clk)
-       begin
-               if (we_a)
-               begin
-                       ram[addr_a] <= data_a;
-                       q_a <= data_a;
-               end
-               q_a <= ram[addr_a];
-       end
-endmodule
diff --git a/tests/ice40/memory.ys b/tests/ice40/memory.ys
deleted file mode 100644 (file)
index a66afba..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-read_verilog memory.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/ice40/cells_sim.v synth_ice40
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 1 t:SB_RAM40_4K
-select -assert-none t:SB_RAM40_4K %% t:* %D
diff --git a/tests/ice40/mul.v b/tests/ice40/mul.v
deleted file mode 100644 (file)
index d5b48b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-module top
-(
- input [5:0] x,
- input [5:0] y,
-
- output [11:0] A,
- );
-
-assign A =  x * y;
-
-endmodule
diff --git a/tests/ice40/mul.ys b/tests/ice40/mul.ys
deleted file mode 100644 (file)
index 8a0822a..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-read_verilog mul.v
-hierarchy -top top
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 -dsp # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:SB_MAC16
-select -assert-none t:SB_MAC16 %% t:* %D
diff --git a/tests/ice40/mux.v b/tests/ice40/mux.v
deleted file mode 100644 (file)
index 0814b73..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-module mux2 (S,A,B,Y);
-    input S;
-    input A,B;
-    output reg Y;
-
-    always @(*)
-               Y = (S)? B : A;
-endmodule
-
-module mux4 ( S, D, Y );
-
-input[1:0] S;
-input[3:0] D;
-output Y;
-
-reg Y;
-wire[1:0] S;
-wire[3:0] D;
-
-always @*
-begin
-    case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-   endcase
-end
-
-endmodule
-
-module mux8 ( S, D, Y );
-
-input[2:0] S;
-input[7:0] D;
-output Y;
-
-reg Y;
-wire[2:0] S;
-wire[7:0] D;
-
-always @*
-begin
-   case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-       4 : Y = D[4];
-       5 : Y = D[5];
-       6 : Y = D[6];
-       7 : Y = D[7];
-   endcase
-end
-
-endmodule
-
-module mux16 (D, S, Y);
-       input  [15:0] D;
-       input  [3:0] S;
-       output Y;
-
-assign Y = D[S];
-
-endmodule
-
-
-module top (
-input [3:0] S,
-input [15:0] D,
-output M2,M4,M8,M16
-);
-
-mux2 u_mux2 (
-        .S (S[0]),
-        .A (D[0]),
-        .B (D[1]),
-        .Y (M2)
-    );
-
-
-mux4 u_mux4 (
-        .S (S[1:0]),
-        .D (D[3:0]),
-        .Y (M4)
-    );
-
-mux8 u_mux8 (
-        .S (S[2:0]),
-        .D (D[7:0]),
-        .Y (M8)
-    );
-
-mux16 u_mux16 (
-        .S (S[3:0]),
-        .D (D[15:0]),
-        .Y (M16)
-    );
-
-endmodule
diff --git a/tests/ice40/mux.ys b/tests/ice40/mux.ys
deleted file mode 100644 (file)
index 182b494..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-read_verilog mux.v
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 19 t:SB_LUT4
-select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/rom.v b/tests/ice40/rom.v
deleted file mode 100644 (file)
index 0a0f41f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Example from: https://www.latticesemi.com/-/media/LatticeSemi/Documents/UserManuals/EI/iCEcube201701UserGuide.ashx?document_id=52071 [p. 74].
-*/
-module top(data, addr);
-output [3:0] data;
-input [4:0] addr;
-always @(addr) begin
-case (addr)
-0 : data = 'h4;
-1 : data = 'h9;
-2 : data = 'h1;
-15 : data = 'h8;
-16 : data = 'h1;
-17 : data = 'h0;
-default : data = 'h0;
-endcase
-end
-endmodule
diff --git a/tests/ice40/rom.ys b/tests/ice40/rom.ys
deleted file mode 100644 (file)
index 41d214e..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-read_verilog rom.v
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 5 t:SB_LUT4
-select -assert-none t:SB_LUT4 %% t:* %D
diff --git a/tests/ice40/run-test.sh b/tests/ice40/run-test.sh
deleted file mode 100755 (executable)
index 46716f9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/ice40/shifter.v b/tests/ice40/shifter.v
deleted file mode 100644 (file)
index c556325..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-in\r
-);\r
-    output [7:0] out;\r
-    input signed clk, in;\r
-    reg signed [7:0] out = 0;\r
-\r
-    always @(posedge clk)\r
-       begin\r
-`ifndef BUG\r
-               out    <= out >> 1;\r
-               out[7] <= in;\r
-`else\r
-\r
-               out    <= out << 1;\r
-               out[7] <= in;\r
-`endif\r
-       end\r
-\r
-endmodule\r
diff --git a/tests/ice40/shifter.ys b/tests/ice40/shifter.ys
deleted file mode 100644 (file)
index 47d95d2..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog shifter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 8 t:SB_DFF
-select -assert-none t:SB_DFF %% t:* %D
diff --git a/tests/ice40/tribuf.v b/tests/ice40/tribuf.v
deleted file mode 100644 (file)
index 870a025..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-module tristate (en, i, o);
-    input en;
-    input i;
-    output o;
-
-       assign o = en ? i : 1'bz;
-
-endmodule
-
-
-module top (
-input en,
-input a,
-output b
-);
-
-tristate u_tri (
-        .en (en ),
-        .i (a ),
-        .o (b )
-    );
-
-endmodule
diff --git a/tests/ice40/tribuf.ys b/tests/ice40/tribuf.ys
deleted file mode 100644 (file)
index d1e1b31..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog tribuf.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/ice40/cells_sim.v -map +/simcells.v synth_ice40 # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 1 t:$_TBUF_
-select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/ice40/wrapcarry.ys b/tests/ice40/wrapcarry.ys
deleted file mode 100644 (file)
index 10c029e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-read_verilog <<EOT
-module top(input A, B, CI, output O, CO);
-       SB_CARRY carry (
-               .I0(A),
-               .I1(B),
-               .CI(CI),
-               .CO(CO)
-       );
-       SB_LUT4 #(
-               .LUT_INIT(16'b 0110_1001_1001_0110)
-       ) adder (
-               .I0(1'b0),
-               .I1(A),
-               .I2(B),
-               .I3(1'b0),
-               .O(O)
-       );
-endmodule
-EOT
-
-ice40_wrapcarry
-select -assert-count 1 t:$__ICE40_CARRY_WRAPPER
diff --git a/tests/xilinx/.gitignore b/tests/xilinx/.gitignore
deleted file mode 100644 (file)
index c99b793..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/*.log
-/*.out
-/run-test.mk
-/*_uut.v
-/test_macc
diff --git a/tests/xilinx/add_sub.v b/tests/xilinx/add_sub.v
deleted file mode 100644 (file)
index 177c32e..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-module top
-(
- input [3:0] x,
- input [3:0] y,
-
- output [3:0] A,
- output [3:0] B
- );
-
-assign A =  x + y;
-assign B =  x - y;
-
-endmodule
diff --git a/tests/xilinx/add_sub.ys b/tests/xilinx/add_sub.ys
deleted file mode 100644 (file)
index f06e7fa..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog add_sub.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-select -assert-count 14 t:LUT2
-select -assert-count 6 t:MUXCY
-select -assert-count 8 t:XORCY
-select -assert-none t:LUT2 t:MUXCY t:XORCY %% t:* %D
-
diff --git a/tests/xilinx/adffs.v b/tests/xilinx/adffs.v
deleted file mode 100644 (file)
index 223b52d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-module adff
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, posedge clr )
-               if ( clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module adffn
-    ( input d, clk, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk, negedge clr )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
-
-module dffs
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( pre )
-                       q <= 1'b1;
-               else
-            q <= d;
-endmodule
-
-module ndffnr
-    ( input d, clk, pre, clr, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( negedge clk )
-               if ( !clr )
-                       q <= 1'b0;
-               else
-            q <= d;
-endmodule
diff --git a/tests/xilinx/adffs.ys b/tests/xilinx/adffs.ys
deleted file mode 100644 (file)
index 1923b98..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-read_verilog adffs.v
-design -save read
-
-hierarchy -top adff
-proc
-equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adff # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDCE
-
-select -assert-none t:BUFG t:FDCE %% t:* %D
-
-
-design -load read
-hierarchy -top adffn
-proc
-equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd adffn # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDCE
-select -assert-count 1 t:LUT1
-
-select -assert-none t:BUFG t:FDCE t:LUT1 %% t:* %D
-
-
-design -load read
-hierarchy -top dffs
-proc
-equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffs # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDRE
-select -assert-count 1 t:LUT2
-
-select -assert-none t:BUFG t:FDRE t:LUT2 %% t:* %D
-
-
-design -load read
-hierarchy -top ndffnr
-proc
-equiv_opt -async2sync  -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd ndffnr # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDRE_1
-select -assert-count 1 t:LUT2
-
-select -assert-none t:BUFG t:FDRE_1 t:LUT2 %% t:* %D
diff --git a/tests/xilinx/counter.v b/tests/xilinx/counter.v
deleted file mode 100644 (file)
index 52852f8..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-reset\r
-);\r
-    output [7:0] out;\r
-    input clk, reset;\r
-    reg [7:0] out;\r
-\r
-    always @(posedge clk, posedge reset)\r
-               if (reset) begin\r
-                       out <= 8'b0 ;\r
-               end else\r
-                       out <= out + 1;\r
-\r
-\r
-endmodule\r
diff --git a/tests/xilinx/counter.ys b/tests/xilinx/counter.ys
deleted file mode 100644 (file)
index 4595416..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-read_verilog counter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:BUFG
-select -assert-count 8 t:FDCE
-select -assert-count 1 t:LUT1
-select -assert-count 7 t:MUXCY
-select -assert-count 8 t:XORCY
-select -assert-none t:BUFG t:FDCE t:LUT1 t:MUXCY t:XORCY %% t:* %D
diff --git a/tests/xilinx/dffs.v b/tests/xilinx/dffs.v
deleted file mode 100644 (file)
index 3418787..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-module dff
-    ( input d, clk, output reg q );
-       always @( posedge clk )
-            q <= d;
-endmodule
-
-module dffe
-    ( input d, clk, en, output reg q );
-    initial begin
-      q = 0;
-    end
-       always @( posedge clk )
-               if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/xilinx/dffs.ys b/tests/xilinx/dffs.ys
deleted file mode 100644 (file)
index f1716da..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-read_verilog dffs.v
-design -save read
-
-hierarchy -top dff
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dff # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDRE
-
-select -assert-none t:BUFG t:FDRE %% t:* %D
-
-
-design -load read
-hierarchy -top dffe
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd dffe # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDRE
-
-select -assert-none t:BUFG t:FDRE %% t:* %D
-
diff --git a/tests/xilinx/dsp_simd.ys b/tests/xilinx/dsp_simd.ys
deleted file mode 100644 (file)
index 9569523..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-read_verilog <<EOT
-module simd(input [12*4-1:0] a, input [12*4-1:0] b, (* use_dsp="simd" *) output [7*12-1:0] o12, (* use_dsp="simd" *) output [2*24-1:0] o24);
-generate
-    genvar i;
-    // 4 x 12-bit adder
-    for (i = 0; i < 4; i++)
-        assign o12[i*12+:12] = a[i*12+:12] + b[i*12+:12];
-    // 2 x 24-bit subtract
-    for (i = 0; i < 2; i++)
-        assign o24[i*24+:24] = a[i*24+:24] - b[i*24+:24];
-endgenerate
-reg [3*12-1:0] ro;
-always @* begin
-    ro[0*12+:12] = a[0*10+:10] + b[0*10+:10];
-    ro[1*12+:12] = a[1*10+:10] + b[1*10+:10];
-    ro[2*12+:12] = a[2*8+:8] + b[2*8+:8];
-end
-assign o12[4*12+:3*12] = ro;
-endmodule
-EOT
-
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx
-design -load postopt
-select -assert-count 3 t:DSP48E1
diff --git a/tests/xilinx/fsm.v b/tests/xilinx/fsm.v
deleted file mode 100644 (file)
index 368fbaa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
- module fsm (\r
- clock,\r
- reset,\r
- req_0,\r
- req_1,\r
- gnt_0,\r
- gnt_1\r
- );\r
- input   clock,reset,req_0,req_1;\r
- output  gnt_0,gnt_1;\r
- wire    clock,reset,req_0,req_1;\r
- reg     gnt_0,gnt_1;\r
-\r
- parameter SIZE = 3           ;\r
- parameter IDLE  = 3'b001,GNT0 = 3'b010,GNT1 = 3'b100,GNT2 = 3'b101 ;\r
-\r
- reg [SIZE-1:0] state;\r
- reg [SIZE-1:0] next_state;\r
-\r
- always @ (posedge clock)\r
- begin : FSM\r
- if (reset == 1'b1) begin\r
-   state <=  #1  IDLE;\r
-   gnt_0 <= 0;\r
-   gnt_1 <= 0;\r
- end else\r
-  case(state)\r
-    IDLE : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-                 gnt_0 <= 1;\r
-               end else if (req_1 == 1'b1) begin\r
-                 gnt_1 <= 1;\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT0 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT0;\r
-               end else begin\r
-                 gnt_0 <= 0;\r
-                 state <=  #1  IDLE;\r
-               end\r
-    GNT1 : if (req_1 == 1'b1) begin\r
-                 state <=  #1  GNT2;\r
-                                gnt_1 <= req_0;\r
-               end\r
-    GNT2 : if (req_0 == 1'b1) begin\r
-                 state <=  #1  GNT1;\r
-                                gnt_1 <= req_1;\r
-               end\r
-    default : state <=  #1  IDLE;\r
- endcase\r
- end\r
-\r
-endmodule\r
diff --git a/tests/xilinx/fsm.ys b/tests/xilinx/fsm.ys
deleted file mode 100644 (file)
index a9e94c2..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-read_verilog fsm.v
-hierarchy -top fsm
-proc
-flatten
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd fsm # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:BUFG
-select -assert-count 5 t:FDRE
-select -assert-count 1 t:LUT3
-select -assert-count 2 t:LUT4
-select -assert-count 4 t:LUT6
-select -assert-none t:BUFG t:FDRE t:LUT3 t:LUT4 t:LUT6 %% t:* %D
diff --git a/tests/xilinx/latches.v b/tests/xilinx/latches.v
deleted file mode 100644 (file)
index adb5d53..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module latchp
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( en )
-                       q <= d;
-endmodule
-
-module latchn
-    ( input d, clk, en, output reg q );
-       always @*
-               if ( !en )
-                       q <= d;
-endmodule
-
-module latchsr
-    ( input d, clk, en, clr, pre, output reg q );
-       always @*
-               if ( clr )
-                       q <= 1'b0;
-               else if ( pre )
-                       q <= 1'b1;
-               else if ( en )
-                       q <= d;
-endmodule
diff --git a/tests/xilinx/latches.ys b/tests/xilinx/latches.ys
deleted file mode 100644 (file)
index 3eb550a..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-read_verilog latches.v
-design -save read
-
-hierarchy -top latchp
-proc
-equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd latchp # Constrain all select calls below inside the top module
-select -assert-count 1 t:LDCE
-
-select -assert-none t:LDCE %% t:* %D
-
-
-design -load read
-hierarchy -top latchn
-proc
-equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd latchn # Constrain all select calls below inside the top module
-select -assert-count 1 t:LDCE
-select -assert-count 1 t:LUT1
-
-select -assert-none t:LDCE t:LUT1 %% t:* %D
-
-
-design -load read
-hierarchy -top latchsr
-proc
-equiv_opt -async2sync -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd latchsr # Constrain all select calls below inside the top module
-select -assert-count 1 t:LDCE
-select -assert-count 2 t:LUT3
-
-select -assert-none t:LDCE t:LUT3 %% t:* %D
diff --git a/tests/xilinx/logic.v b/tests/xilinx/logic.v
deleted file mode 100644 (file)
index e5343ca..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-module top
-(
- input [0:7] in,
- output B1,B2,B3,B4,B5,B6,B7,B8,B9,B10
- );
-
-   assign     B1 =  in[0] & in[1];
-   assign     B2 =  in[0] | in[1];
-   assign     B3 =  in[0] ~& in[1];
-   assign     B4 =  in[0] ~| in[1];
-   assign     B5 =  in[0] ^ in[1];
-   assign     B6 =  in[0] ~^ in[1];
-   assign     B7 =  ~in[0];
-   assign     B8 =  in[0];
-   assign     B9 =  in[0:1] && in [2:3];
-   assign     B10 =  in[0:1] || in [2:3];
-
-endmodule
diff --git a/tests/xilinx/logic.ys b/tests/xilinx/logic.ys
deleted file mode 100644 (file)
index 9ae5993..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog logic.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:LUT1
-select -assert-count 6 t:LUT2
-select -assert-count 2 t:LUT4
-select -assert-none t:LUT1 t:LUT2 t:LUT4 %% t:* %D
diff --git a/tests/xilinx/macc.sh b/tests/xilinx/macc.sh
deleted file mode 100644 (file)
index 86e4c2b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-../../yosys -qp "synth_xilinx -top macc2; rename -top macc2_uut" macc.v -o macc_uut.v
-iverilog -o test_macc macc_tb.v macc_uut.v macc.v ../../techlibs/xilinx/cells_sim.v
-vvp -N ./test_macc
diff --git a/tests/xilinx/macc.v b/tests/xilinx/macc.v
deleted file mode 100644 (file)
index e36b2ba..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-// Signed 40-bit streaming accumulator with 16-bit inputs
-// File: HDL_Coding_Techniques/multipliers/multipliers4.v
-//
-// Source:
-// https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_2/ug901-vivado-synthesis.pdf p.90
-//
-module macc # (parameter SIZEIN = 16, SIZEOUT = 40) (
-       input clk, ce, sload,
-       input signed [SIZEIN-1:0] a, b,
-       output signed [SIZEOUT-1:0] accum_out
-);
-// Declare registers for intermediate values
-reg signed [SIZEIN-1:0] a_reg, b_reg;
-reg sload_reg;
-reg signed [2*SIZEIN-1:0] mult_reg;
-reg signed [SIZEOUT-1:0] adder_out, old_result;
-always @* /*(adder_out or sload_reg)*/ begin // Modification necessary to fix sim/synth mismatch
-       if (sload_reg)
-               old_result <= 0;
-       else
-               // 'sload' is now active (=low) and opens the accumulation loop.
-               // The accumulator takes the next multiplier output in
-               // the same cycle.
-               old_result <= adder_out;
-end
-
-always @(posedge clk)
-       if (ce)
-       begin
-               a_reg <= a;
-               b_reg <= b;
-               mult_reg <= a_reg * b_reg;
-               sload_reg <= sload;
-               // Store accumulation result into a register
-               adder_out <= old_result + mult_reg;
-       end
-
-// Output accumulation result
-assign accum_out = adder_out;
-
-endmodule
-
-// Adapted variant of above
-module macc2 # (parameter SIZEIN = 16, SIZEOUT = 40) (
-       input clk,
-       input ce,
-       input rst,
-       input signed [SIZEIN-1:0] a, b,
-       output signed [SIZEOUT-1:0] accum_out,
-       output overflow
-);
-// Declare registers for intermediate values
-reg signed [SIZEIN-1:0] a_reg, b_reg, a_reg2, b_reg2;
-reg signed [2*SIZEIN-1:0] mult_reg = 0;
-reg signed [SIZEOUT:0] adder_out = 0;
-reg overflow_reg;
-always @(posedge clk) begin
-       //if (ce)
-       begin
-               a_reg <= a;
-               b_reg <= b;
-               a_reg2 <= a_reg;
-               b_reg2 <= b_reg;
-               mult_reg <= a_reg2 * b_reg2;
-               // Store accumulation result into a register
-               adder_out <= adder_out + mult_reg;
-               overflow_reg <= overflow;
-       end
-       if (rst) begin
-               a_reg <= 0;
-               a_reg2 <= 0;
-               b_reg <= 0;
-               b_reg2 <= 0;
-               mult_reg <= 0;
-               adder_out <= 0;
-               overflow_reg <= 1'b0;
-       end
-end
-assign overflow = (adder_out >= 2**(SIZEOUT-1)) | overflow_reg;
-
-// Output accumulation result
-assign accum_out = overflow ? 2**(SIZEOUT-1)-1 : adder_out;
-
-endmodule
diff --git a/tests/xilinx/macc.ys b/tests/xilinx/macc.ys
deleted file mode 100644 (file)
index 6e884b3..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-read_verilog macc.v
-design -save read
-
-hierarchy -top macc
-proc
-#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
-equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd macc # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:FDRE
-select -assert-count 1 t:DSP48E1
-select -assert-none t:BUFG t:FDRE t:DSP48E1 %% t:* %D
-
-design -load read
-hierarchy -top macc2
-proc
-#equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx ### TODO
-equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 10 -show-inputs -show-outputs miter
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd macc2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:DSP48E1
-select -assert-count 1 t:FDRE
-select -assert-count 1 t:LUT2
-select -assert-count 41 t:LUT3
-select -assert-none t:BUFG t:DSP48E1 t:FDRE t:LUT2 t:LUT3 %% t:* %D
diff --git a/tests/xilinx/macc_tb.v b/tests/xilinx/macc_tb.v
deleted file mode 100644 (file)
index 64aed05..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-`timescale 1ns / 1ps
-
-module testbench;
-
-    parameter SIZEIN = 16, SIZEOUT = 40;
-       reg clk, ce, rst;
-       reg signed [SIZEIN-1:0] a, b;
-       output signed [SIZEOUT-1:0] REF_accum_out, accum_out;
-       output REF_overflow, overflow;
-
-       integer errcount = 0;
-
-       reg ERROR_FLAG = 0;
-
-       task clkcycle;
-               begin
-                       #5;
-                       clk = ~clk;
-                       #10;
-                       clk = ~clk;
-                       #2;
-                       ERROR_FLAG = 0;
-                       if (REF_accum_out !== accum_out) begin
-                               $display("ERROR at %1t: REF_accum_out=%b UUT_accum_out=%b DIFF=%b", $time, REF_accum_out, accum_out, REF_accum_out ^ accum_out);
-                               errcount = errcount + 1;
-                               ERROR_FLAG = 1;
-                       end
-                       if (REF_overflow !== overflow) begin
-                               $display("ERROR at %1t: REF_overflow=%b UUT_overflow=%b DIFF=%b", $time, REF_overflow, overflow, REF_overflow ^ overflow);
-                               errcount = errcount + 1;
-                               ERROR_FLAG = 1;
-                       end
-                       #3;
-               end
-       endtask
-
-       initial begin
-               //$dumpfile("test_macc.vcd");
-               //$dumpvars(0, testbench);
-
-               #2;
-               clk = 1'b0;
-        ce = 1'b0;
-        a = 0;
-        b = 0;
-
-        rst = 1'b1;
-               repeat (10) begin
-                       #10;
-                       clk = 1'b1;
-                       #10;
-                       clk = 1'b0;
-                       #10;
-                       clk = 1'b1;
-                       #10;
-                       clk = 1'b0;
-               end
-               rst = 1'b0;
-
-               repeat (10000) begin
-                       clkcycle;
-            ce = 1; //$urandom & $urandom;
-                       //rst = $urandom & $urandom & $urandom & $urandom & $urandom & $urandom;
-                       a = $urandom & ~(1 << (SIZEIN-1));
-                       b = $urandom & ~(1 << (SIZEIN-1));
-               end
-
-               if (errcount == 0) begin
-                       $display("All tests passed.");
-                       $finish;
-               end else begin
-                       $display("Caught %1d errors.", errcount);
-                       $stop;
-               end
-       end
-
-       macc2 ref (
-        .clk(clk),
-        .ce(ce),
-        .rst(rst),
-        .a(a),
-        .b(b),
-        .accum_out(REF_accum_out),
-        .overflow(REF_overflow)
-       );
-
-       macc2_uut uut (
-        .clk(clk),
-        .ce(ce),
-        .rst(rst),
-        .a(a),
-        .b(b),
-        .accum_out(accum_out),
-        .overflow(overflow)
-       );
-endmodule
diff --git a/tests/xilinx/memory.v b/tests/xilinx/memory.v
deleted file mode 100644 (file)
index cb7753f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-module top
-(
-       input [7:0] data_a,
-       input [6:1] addr_a,
-       input we_a, clk,
-       output reg [7:0] q_a
-);
-       // Declare the RAM variable
-       reg [7:0] ram[63:0];
-
-       // Port A
-       always @ (posedge clk)
-       begin
-               if (we_a)
-               begin
-                       ram[addr_a] <= data_a;
-                       q_a <= data_a;
-               end
-               q_a <= ram[addr_a];
-       end
-endmodule
diff --git a/tests/xilinx/memory.ys b/tests/xilinx/memory.ys
deleted file mode 100644 (file)
index 5402513..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-read_verilog memory.v
-hierarchy -top top
-proc
-memory -nomap
-equiv_opt -run :prove -map +/xilinx/cells_sim.v synth_xilinx
-memory
-opt -full
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -seq 5 -set-init-zero -show-inputs -show-outputs miter
-
-design -load postopt
-cd top
-select -assert-count 1 t:BUFG
-select -assert-count 8 t:FDRE
-select -assert-count 8 t:RAM64X1D
-select -assert-none t:BUFG t:FDRE t:RAM64X1D %% t:* %D
diff --git a/tests/xilinx/mul.v b/tests/xilinx/mul.v
deleted file mode 100644 (file)
index d5b48b1..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-module top
-(
- input [5:0] x,
- input [5:0] y,
-
- output [11:0] A,
- );
-
-assign A =  x * y;
-
-endmodule
diff --git a/tests/xilinx/mul.ys b/tests/xilinx/mul.ys
deleted file mode 100644 (file)
index 66a06ef..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-read_verilog mul.v
-hierarchy -top top
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:DSP48E1
-select -assert-none t:DSP48E1 %% t:* %D
diff --git a/tests/xilinx/mul_unsigned.v b/tests/xilinx/mul_unsigned.v
deleted file mode 100644 (file)
index e3713a6..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Example from: https://www.xilinx.com/support/documentation/sw_manuals/xilinx2019_1/ug901-vivado-synthesis.pdf [p. 89].
-*/
-
-// Unsigned 16x24-bit Multiplier
-// 1 latency stage on operands
-// 3 latency stage after the multiplication
-// File: multipliers2.v
-//
-module mul_unsigned (clk, A, B, RES);
-parameter WIDTHA = /*16*/ 6;
-parameter WIDTHB = /*24*/ 9;
-input clk;
-input [WIDTHA-1:0] A;
-input [WIDTHB-1:0] B;
-output [WIDTHA+WIDTHB-1:0] RES;
-reg [WIDTHA-1:0] rA;
-reg [WIDTHB-1:0] rB;
-reg [WIDTHA+WIDTHB-1:0] M [3:0];
-integer i;
-always @(posedge clk)
- begin
- rA <= A;
- rB <= B;
- M[0] <= rA * rB;
- for (i = 0; i < 3; i = i+1)
- M[i+1] <= M[i];
- end
-assign RES = M[3];
-endmodule
diff --git a/tests/xilinx/mul_unsigned.ys b/tests/xilinx/mul_unsigned.ys
deleted file mode 100644 (file)
index 62495b9..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog mul_unsigned.v
-hierarchy -top mul_unsigned
-proc
-
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mul_unsigned # Constrain all select calls below inside the top module
-select -assert-count 1 t:BUFG
-select -assert-count 1 t:DSP48E1
-select -assert-count 30 t:FDRE
-select -assert-none t:DSP48E1 t:FDRE t:BUFG %% t:* %D
diff --git a/tests/xilinx/mux.v b/tests/xilinx/mux.v
deleted file mode 100644 (file)
index 27bc0bf..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-module mux2 (S,A,B,Y);
-    input S;
-    input A,B;
-    output reg Y;
-
-    always @(*)
-               Y = (S)? B : A;
-endmodule
-
-module mux4 ( S, D, Y );
-
-input[1:0] S;
-input[3:0] D;
-output Y;
-
-reg Y;
-wire[1:0] S;
-wire[3:0] D;
-
-always @*
-begin
-    case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-   endcase
-end
-
-endmodule
-
-module mux8 ( S, D, Y );
-
-input[2:0] S;
-input[7:0] D;
-output Y;
-
-reg Y;
-wire[2:0] S;
-wire[7:0] D;
-
-always @*
-begin
-   case( S )
-       0 : Y = D[0];
-       1 : Y = D[1];
-       2 : Y = D[2];
-       3 : Y = D[3];
-       4 : Y = D[4];
-       5 : Y = D[5];
-       6 : Y = D[6];
-       7 : Y = D[7];
-   endcase
-end
-
-endmodule
-
-module mux16 (D, S, Y);
-       input  [15:0] D;
-       input  [3:0] S;
-       output Y;
-
-assign Y = D[S];
-
-endmodule
diff --git a/tests/xilinx/mux.ys b/tests/xilinx/mux.ys
deleted file mode 100644 (file)
index 420dece..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-read_verilog mux.v
-design -save read
-
-hierarchy -top mux2
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux2 # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT3
-
-select -assert-none t:LUT3 %% t:* %D
-
-
-design -load read
-hierarchy -top mux4
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux4 # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT6
-
-select -assert-none t:LUT6 %% t:* %D
-
-
-design -load read
-hierarchy -top mux8
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux8 # Constrain all select calls below inside the top module
-select -assert-count 1 t:LUT3
-select -assert-count 2 t:LUT6
-
-select -assert-none t:LUT3 t:LUT6 %% t:* %D
-
-
-design -load read
-hierarchy -top mux16
-proc
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd mux16 # Constrain all select calls below inside the top module
-select -assert-count 5 t:LUT6
-
-select -assert-none t:LUT6 %% t:* %D
diff --git a/tests/xilinx/pmgen_xilinx_srl.ys b/tests/xilinx/pmgen_xilinx_srl.ys
deleted file mode 100644 (file)
index ea2f204..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-read_verilog -icells <<EOT
-module \$__XILINX_SHREG_ (input C, input D, input [31:0] L, input E, output Q, output SO);
-  parameter DEPTH = 1;
-  parameter [DEPTH-1:0] INIT = 0;
-  parameter CLKPOL = 1;
-  parameter ENPOL = 2;
-
-  wire pos_clk = C == CLKPOL;
-  reg pos_en;
-  always @(E)
-    if (ENPOL == 2) pos_en = 1'b1;
-    else pos_en = (E == ENPOL[0]);
-
-  reg [DEPTH-1:0] r;
-  always @(posedge pos_clk)
-    if (pos_en)
-      r <= {r[DEPTH-2:0], D};
-
-  assign Q = r[L];
-  assign SO = r[DEPTH-1];
-endmodule
-EOT
-read_verilog +/xilinx/cells_sim.v
-proc
-design -save model
-
-test_pmgen -generate xilinx_srl.fixed
-hierarchy -top pmtest_xilinx_srl_pm_fixed
-flatten; opt_clean
-
-design -save gold
-xilinx_srl -fixed
-techmap -autoproc -map %model
-design -stash gate
-
-design -copy-from gold -as gold pmtest_xilinx_srl_pm_fixed
-design -copy-from gate -as gate pmtest_xilinx_srl_pm_fixed
-dff2dffe -unmap # sat does not support flops-with-enable yet
-miter -equiv -flatten -make_assert gold gate miter
-sat -set-init-zero -seq 5 -verify -prove-asserts miter
-
-design -load model
-
-test_pmgen -generate xilinx_srl.variable
-hierarchy -top pmtest_xilinx_srl_pm_variable
-flatten; opt_clean
-
-design -save gold
-xilinx_srl -variable
-techmap -autoproc -map %model
-design -stash gate
-
-design -copy-from gold -as gold pmtest_xilinx_srl_pm_variable
-design -copy-from gate -as gate pmtest_xilinx_srl_pm_variable
-dff2dffe -unmap # sat does not support flops-with-enable yet
-miter -equiv -flatten -make_assert gold gate miter
-sat -set-init-zero -seq 5 -verify -prove-asserts miter
diff --git a/tests/xilinx/run-test.sh b/tests/xilinx/run-test.sh
deleted file mode 100755 (executable)
index 46716f9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/env bash
-set -e
-{
-echo "all::"
-for x in *.ys; do
-       echo "all:: run-$x"
-       echo "run-$x:"
-       echo "  @echo 'Running $x..'"
-       echo "  @../../yosys -ql ${x%.ys}.log -w 'Yosys has only limited support for tri-state logic at the moment.' $x"
-done
-for s in *.sh; do
-       if [ "$s" != "run-test.sh" ]; then
-               echo "all:: run-$s"
-               echo "run-$s:"
-               echo "  @echo 'Running $s..'"
-               echo "  @bash $s"
-       fi
-done
-} > run-test.mk
-exec ${MAKE:-make} -f run-test.mk
diff --git a/tests/xilinx/shifter.v b/tests/xilinx/shifter.v
deleted file mode 100644 (file)
index 04ae49d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-module top    (\r
-out,\r
-clk,\r
-in\r
-);\r
-    output [7:0] out;\r
-    input signed clk, in;\r
-    reg signed [7:0] out = 0;\r
-\r
-    always @(posedge clk)\r
-       begin\r
-               out    <= out >> 1;\r
-               out[7] <= in;\r
-       end\r
-\r
-endmodule\r
diff --git a/tests/xilinx/shifter.ys b/tests/xilinx/shifter.ys
deleted file mode 100644 (file)
index 84e16f4..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-read_verilog shifter.v
-hierarchy -top top
-proc
-flatten
-equiv_opt -assert -map +/xilinx/cells_sim.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd top # Constrain all select calls below inside the top module
-
-select -assert-count 1 t:BUFG
-select -assert-count 8 t:FDRE
-select -assert-none t:BUFG t:FDRE %% t:* %D
diff --git a/tests/xilinx/tribuf.v b/tests/xilinx/tribuf.v
deleted file mode 100644 (file)
index c644682..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-module tristate (en, i, o);
-    input en;
-    input i;
-    output reg o;
-    
-    always @(en or i)
-               o <= (en)? i : 1'bZ;
-endmodule
diff --git a/tests/xilinx/tribuf.ys b/tests/xilinx/tribuf.ys
deleted file mode 100644 (file)
index c9cfb85..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-read_verilog tribuf.v
-hierarchy -top tristate
-proc
-tribuf
-flatten
-synth
-equiv_opt -assert -map +/xilinx/cells_sim.v -map +/simcells.v synth_xilinx # equivalency check
-design -load postopt # load the post-opt design (otherwise equiv_opt loads the pre-opt design)
-cd tristate # Constrain all select calls below inside the top module
-# TODO :: Tristate logic not yet supported; see https://github.com/YosysHQ/yosys/issues/1225
-select -assert-count 1 t:$_TBUF_
-select -assert-none t:$_TBUF_ %% t:* %D
diff --git a/tests/xilinx/xilinx_srl.v b/tests/xilinx/xilinx_srl.v
deleted file mode 100644 (file)
index bc2a15a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-module xilinx_srl_static_test(input i, clk, output [1:0] q);
-reg head = 1'b0;
-reg [3:0] shift1 = 4'b0000;
-reg [3:0] shift2 = 4'b0000;
-
-always @(posedge clk) begin
-    head <= i;
-    shift1 <= {shift1[2:0], head};
-    shift2 <= {shift2[2:0], head};
-end
-
-assign q = {shift2[3], shift1[3]};
-endmodule
-
-module xilinx_srl_variable_test(input i, clk, input [1:0] l1, l2, output [1:0] q);
-reg head = 1'b0;
-reg [3:0] shift1 = 4'b0000;
-reg [3:0] shift2 = 4'b0000;
-
-always @(posedge clk) begin
-    head <= i;
-    shift1 <= {shift1[2:0], head};
-    shift2 <= {shift2[2:0], head};
-end
-
-assign q = {shift2[l2], shift1[l1]};
-endmodule
-
-module $__XILINX_SHREG_(input C, D, E, input [1:0] L, output Q);
-parameter CLKPOL = 1;
-parameter ENPOL = 1;
-parameter DEPTH = 1;
-parameter [DEPTH-1:0] INIT = {DEPTH{1'b0}};
-reg [DEPTH-1:0] r = INIT;
-wire clk = C ^ CLKPOL;
-always @(posedge C)
-    if (E) 
-        r <= { r[DEPTH-2:0], D };
-assign Q = r[L];
-endmodule
diff --git a/tests/xilinx/xilinx_srl.ys b/tests/xilinx/xilinx_srl.ys
deleted file mode 100644 (file)
index b8df0e5..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-read_verilog xilinx_srl.v
-design -save read
-
-design -copy-to model $__XILINX_SHREG_
-hierarchy -top xilinx_srl_static_test
-prep
-design -save gold
-
-techmap
-xilinx_srl -fixed
-opt
-
-# stat
-# show -width
-select -assert-count 1 t:$_DFF_P_
-select -assert-count 2 t:$__XILINX_SHREG_
-
-design -stash gate
-
-design -import gold -as gold
-design -import gate -as gate
-design -copy-from model -as $__XILINX_SHREG_ \$__XILINX_SHREG_
-prep
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-dump gate
-sat -verify -prove-asserts -show-ports -seq 5 miter
-
-#design -load gold
-#stat
-
-#design -load gate
-#stat
-
-##########
-
-design -load read
-design -copy-to model $__XILINX_SHREG_
-hierarchy -top xilinx_srl_variable_test
-prep
-design -save gold
-
-xilinx_srl -variable
-opt
-
-#stat
-# show -width
-# write_verilog -noexpr -norename
-select -assert-count 1 t:$dff
-select -assert-count 1 t:$dff r:WIDTH=1 %i
-select -assert-count 2 t:$__XILINX_SHREG_
-
-design -stash gate
-
-design -import gold -as gold
-design -import gate -as gate
-design -copy-from model -as $__XILINX_SHREG_ \$__XILINX_SHREG_
-prep
-
-miter -equiv -flatten -make_assert -make_outputs gold gate miter
-sat -verify -prove-asserts -show-ports -seq 5 miter
-
-# design -load gold
-# stat
-
-# design -load gate
-# stat