aboutsummaryrefslogtreecommitdiffstats
path: root/tests/hana
diff options
context:
space:
mode:
Diffstat (limited to 'tests/hana')
-rw-r--r--tests/hana/README14
-rw-r--r--tests/hana/hana_vlib.v1139
-rwxr-xr-xtests/hana/run-test.sh3
-rw-r--r--tests/hana/test_intermout_always_comb_1_test.v13
-rw-r--r--tests/hana/test_intermout_always_comb_3_test.v10
-rw-r--r--tests/hana/test_intermout_always_comb_4_test.v9
-rw-r--r--tests/hana/test_intermout_always_comb_5_test.v11
-rw-r--r--tests/hana/test_intermout_always_ff_3_test.v15
-rw-r--r--tests/hana/test_intermout_always_ff_4_test.v11
-rw-r--r--tests/hana/test_intermout_always_ff_5_test.v13
-rw-r--r--tests/hana/test_intermout_always_ff_6_test.v7
-rw-r--r--tests/hana/test_intermout_always_ff_8_test.v11
-rw-r--r--tests/hana/test_intermout_always_ff_9_test.v14
-rw-r--r--tests/hana/test_intermout_always_latch_1_test.v9
-rw-r--r--tests/hana/test_intermout_bufrm_1_test.v4
-rw-r--r--tests/hana/test_intermout_bufrm_2_test.v7
-rw-r--r--tests/hana/test_intermout_bufrm_6_test.v22
-rw-r--r--tests/hana/test_intermout_bufrm_7_test.v33
-rw-r--r--tests/hana/test_intermout_exprs_add_test.v10
-rw-r--r--tests/hana/test_intermout_exprs_binlogic_test.v13
-rw-r--r--tests/hana/test_intermout_exprs_bitwiseneg_test.v5
-rw-r--r--tests/hana/test_intermout_exprs_buffer_test.v9
-rw-r--r--tests/hana/test_intermout_exprs_condexpr_mux_test.v11
-rw-r--r--tests/hana/test_intermout_exprs_condexpr_tribuf_test.v9
-rw-r--r--tests/hana/test_intermout_exprs_const_test.v7
-rw-r--r--tests/hana/test_intermout_exprs_constshift_test.v12
-rw-r--r--tests/hana/test_intermout_exprs_div_test.v10
-rw-r--r--tests/hana/test_intermout_exprs_logicneg_test.v7
-rw-r--r--tests/hana/test_intermout_exprs_mod_test.v10
-rw-r--r--tests/hana/test_intermout_exprs_mul_test.v10
-rw-r--r--tests/hana/test_intermout_exprs_redand_test.v5
-rw-r--r--tests/hana/test_intermout_exprs_redop_test.v16
-rw-r--r--tests/hana/test_intermout_exprs_sub_test.v10
-rw-r--r--tests/hana/test_intermout_exprs_unaryminus_test.v5
-rw-r--r--tests/hana/test_intermout_exprs_unaryplus_test.v4
-rw-r--r--tests/hana/test_intermout_exprs_varshift_test.v10
-rw-r--r--tests/hana/test_parse2synthtrans_behavopt_1_test.v22
-rw-r--r--tests/hana/test_parse2synthtrans_case_1_test.v26
-rw-r--r--tests/hana/test_parse2synthtrans_contassign_1_test.v7
-rw-r--r--tests/hana/test_parse2synthtrans_module_basic0_test.v2
-rw-r--r--tests/hana/test_parse2synthtrans_operators_1_test.v11
-rw-r--r--tests/hana/test_parse2synthtrans_param_1_test.v7
-rw-r--r--tests/hana/test_parse2synthtrans_port_scalar_1_test.v6
-rw-r--r--tests/hana/test_parse2synthtrans_port_vector_1_test.v9
-rw-r--r--tests/hana/test_parse2synthtrans_v2k_comb_logic_sens_list_test.v9
-rw-r--r--tests/hana/test_parser_constructs_module_basic1_test.v2
-rw-r--r--tests/hana/test_parser_constructs_param_basic0_test.v10
-rw-r--r--tests/hana/test_parser_constructs_port_basic0_test.v8
-rw-r--r--tests/hana/test_parser_directives_define_simpledef_test.v9
-rw-r--r--tests/hana/test_parser_misc_operators_test.v29
-rw-r--r--tests/hana/test_parser_v2k_comb_port_data_type_test.v6
-rw-r--r--tests/hana/test_parser_v2k_comma_sep_sens_list_test.v9
-rw-r--r--tests/hana/test_simulation_always_15_test.v5
-rw-r--r--tests/hana/test_simulation_always_17_test.v13
-rw-r--r--tests/hana/test_simulation_always_18_test.v10
-rw-r--r--tests/hana/test_simulation_always_19_test.v11
-rw-r--r--tests/hana/test_simulation_always_1_test.v5
-rw-r--r--tests/hana/test_simulation_always_20_test.v15
-rw-r--r--tests/hana/test_simulation_always_21_test.v11
-rw-r--r--tests/hana/test_simulation_always_22_test.v7
-rw-r--r--tests/hana/test_simulation_always_23_test.v14
-rw-r--r--tests/hana/test_simulation_always_27_test.v13
-rw-r--r--tests/hana/test_simulation_always_29_test.v9
-rw-r--r--tests/hana/test_simulation_always_31_tt.v50
-rw-r--r--tests/hana/test_simulation_and_1_test.v3
-rw-r--r--tests/hana/test_simulation_and_2_test.v3
-rw-r--r--tests/hana/test_simulation_and_3_test.v3
-rw-r--r--tests/hana/test_simulation_and_4_test.v3
-rw-r--r--tests/hana/test_simulation_and_5_test.v3
-rw-r--r--tests/hana/test_simulation_and_6_test.v3
-rw-r--r--tests/hana/test_simulation_and_7_test.v3
-rw-r--r--tests/hana/test_simulation_buffer_1_test.v3
-rw-r--r--tests/hana/test_simulation_buffer_2_test.v4
-rw-r--r--tests/hana/test_simulation_buffer_3_test.v4
-rw-r--r--tests/hana/test_simulation_decoder_2_test.v14
-rw-r--r--tests/hana/test_simulation_decoder_3_test.v14
-rw-r--r--tests/hana/test_simulation_decoder_4_test.v14
-rw-r--r--tests/hana/test_simulation_decoder_5_test.v17
-rw-r--r--tests/hana/test_simulation_decoder_6_test.v27
-rw-r--r--tests/hana/test_simulation_decoder_7_test.v43
-rw-r--r--tests/hana/test_simulation_decoder_8_test.v76
-rw-r--r--tests/hana/test_simulation_inc_16_test.v5
-rw-r--r--tests/hana/test_simulation_inc_1_test.v5
-rw-r--r--tests/hana/test_simulation_inc_2_test.v5
-rw-r--r--tests/hana/test_simulation_inc_32_test.v5
-rw-r--r--tests/hana/test_simulation_inc_4_test.v5
-rw-r--r--tests/hana/test_simulation_inc_8_test.v5
-rw-r--r--tests/hana/test_simulation_mod_1_xx.v13
-rw-r--r--tests/hana/test_simulation_mux_16_test.v22
-rw-r--r--tests/hana/test_simulation_mux_2_test.v8
-rw-r--r--tests/hana/test_simulation_mux_32_test.v39
-rw-r--r--tests/hana/test_simulation_mux_4_test.v10
-rw-r--r--tests/hana/test_simulation_mux_64_test.v71
-rw-r--r--tests/hana/test_simulation_mux_8_test.v14
-rw-r--r--tests/hana/test_simulation_nand_1_test.v3
-rw-r--r--tests/hana/test_simulation_nand_3_test.v3
-rw-r--r--tests/hana/test_simulation_nand_4_test.v3
-rw-r--r--tests/hana/test_simulation_nand_5_test.v3
-rw-r--r--tests/hana/test_simulation_nand_6_test.v3
-rw-r--r--tests/hana/test_simulation_nor_1_test.v3
-rw-r--r--tests/hana/test_simulation_nor_2_test.v3
-rw-r--r--tests/hana/test_simulation_nor_3_test.v3
-rw-r--r--tests/hana/test_simulation_nor_4_test.v3
-rw-r--r--tests/hana/test_simulation_opt_constprop_contassign_1_test.v3
-rw-r--r--tests/hana/test_simulation_or_1_test.v3
-rw-r--r--tests/hana/test_simulation_or_2_test.v3
-rw-r--r--tests/hana/test_simulation_or_3_test.v3
-rw-r--r--tests/hana/test_simulation_or_4_test.v3
-rw-r--r--tests/hana/test_simulation_or_5_test.v3
-rw-r--r--tests/hana/test_simulation_or_6_test.v3
-rw-r--r--tests/hana/test_simulation_seq_ff_1_test.v4
-rw-r--r--tests/hana/test_simulation_seq_ff_2_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_left_16_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_left_32_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_left_4_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_left_64_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_left_8_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_right_16_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_right_32_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_right_4_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_right_64_test.v4
-rw-r--r--tests/hana/test_simulation_shifter_right_8_test.v4
-rw-r--r--tests/hana/test_simulation_sop_basic_10_test.v8
-rw-r--r--tests/hana/test_simulation_sop_basic_11_test.v10
-rw-r--r--tests/hana/test_simulation_sop_basic_12_test.v14
-rw-r--r--tests/hana/test_simulation_sop_basic_18_test.v5
-rw-r--r--tests/hana/test_simulation_sop_basic_3_test.v3
-rw-r--r--tests/hana/test_simulation_sop_basic_7_test.v3
-rw-r--r--tests/hana/test_simulation_sop_basic_8_test.v3
-rw-r--r--tests/hana/test_simulation_sop_basic_9_test.v3
-rw-r--r--tests/hana/test_simulation_techmap_and_19_tech.v7
-rw-r--r--tests/hana/test_simulation_techmap_and_5_tech.v3
-rw-r--r--tests/hana/test_simulation_techmap_buf_test.v3
-rw-r--r--tests/hana/test_simulation_techmap_inv_test.v3
-rw-r--r--tests/hana/test_simulation_techmap_mux_0_test.v8
-rw-r--r--tests/hana/test_simulation_techmap_mux_128_test.v134
-rw-r--r--tests/hana/test_simulation_techmap_mux_8_test.v14
-rw-r--r--tests/hana/test_simulation_techmap_nand_19_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_nand_2_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_nand_5_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_nor_19_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_nor_2_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_nor_5_tech.v11
-rw-r--r--tests/hana/test_simulation_techmap_or_19_tech.v7
-rw-r--r--tests/hana/test_simulation_techmap_or_5_tech.v3
-rw-r--r--tests/hana/test_simulation_techmap_xnor_2_tech.v6
-rw-r--r--tests/hana/test_simulation_techmap_xnor_5_tech.v6
-rw-r--r--tests/hana/test_simulation_techmap_xor_19_tech.v3
-rw-r--r--tests/hana/test_simulation_techmap_xor_2_tech.v6
-rw-r--r--tests/hana/test_simulation_techmap_xor_5_tech.v6
-rw-r--r--tests/hana/test_simulation_tribuf_2_test.v3
-rw-r--r--tests/hana/test_simulation_xnor_1_test.v3
-rw-r--r--tests/hana/test_simulation_xnor_2_test.v3
-rw-r--r--tests/hana/test_simulation_xnor_3_test.v3
-rw-r--r--tests/hana/test_simulation_xnor_4_test.v3
-rw-r--r--tests/hana/test_simulation_xor_1_test.v3
-rw-r--r--tests/hana/test_simulation_xor_2_test.v3
-rw-r--r--tests/hana/test_simulation_xor_3_test.v3
-rw-r--r--tests/hana/test_simulation_xor_4_test.v3
159 files changed, 2734 insertions, 0 deletions
diff --git a/tests/hana/README b/tests/hana/README
new file mode 100644
index 000000000..37049405d
--- /dev/null
+++ b/tests/hana/README
@@ -0,0 +1,14 @@
+
+This test cases are copied from the hana project:
+https://sourceforge.net/projects/sim-sim/
+
+** Copy tests from hana: **
+while read fn; do cp -v $fn ALL_TESTS/${fn//\//_}; done < <(find test -name '*.v' ! -name '*_gold.v')
+
+** Eliminate test's we can't parse atm: **
+rm -f test_synthesizability*.v
+rm -f test_parse2synthtrans_latch_1_test.v
+rm -f test_parse2synthtrans_always_1_test.v
+rm -f test_parse2synthtrans_always_2_test.v
+for x in test_*.v; do ../../yosys -b "" $x || rm $x; done
+
diff --git a/tests/hana/hana_vlib.v b/tests/hana/hana_vlib.v
new file mode 100644
index 000000000..fc82f1389
--- /dev/null
+++ b/tests/hana/hana_vlib.v
@@ -0,0 +1,1139 @@
+/*
+Copyright (C) 2009-2010 Parvez Ahmad
+Written by Parvez Ahmad <parvez_ahmad@yahoo.co.uk>.
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+
+module BUF (input in, output out);
+
+assign out = in;
+
+endmodule
+
+module TRIBUF(input in, enable, output out);
+
+assign out = enable ? in : 1'bz;
+
+endmodule
+
+module INV(input in, output out);
+
+assign out = ~in;
+
+endmodule
+
+module AND2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = &in;
+
+endmodule
+
+module AND3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = &in;
+
+endmodule
+
+module AND4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = &in;
+
+endmodule
+
+module OR2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = |in;
+
+endmodule
+
+module OR3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = |in;
+
+endmodule
+
+module OR4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = |in;
+
+endmodule
+
+
+module NAND2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = ~&in;
+
+endmodule
+
+module NAND3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = ~&in;
+
+endmodule
+
+module NAND4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = ~&in;
+
+endmodule
+
+module NOR2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = ~|in;
+
+endmodule
+
+module NOR3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = ~|in;
+
+endmodule
+
+module NOR4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = ~|in;
+
+endmodule
+
+
+module XOR2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = ^in;
+
+endmodule
+
+module XOR3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = ^in;
+
+endmodule
+
+module XOR4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = ^in;
+
+endmodule
+
+
+module XNOR2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output out);
+
+assign out = ~^in;
+
+endmodule
+
+module XNOR3 #(parameter SIZE = 3) (input [SIZE-1:0] in, output out);
+
+assign out = ~^in;
+
+endmodule
+
+module XNOR4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output out);
+
+assign out = ~^in;
+
+endmodule
+
+module DEC1 (input in, enable, output reg [1:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 2'b00;
+ else begin
+ case (in)
+ 1'b0 : out = 2'b01;
+ 1'b1 : out = 2'b10;
+ endcase
+ end
+endmodule
+
+module DEC2 (input [1:0] in, input enable, output reg [3:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 4'b0000;
+ else begin
+ case (in)
+ 2'b00 : out = 4'b0001;
+ 2'b01 : out = 4'b0010;
+ 2'b10 : out = 4'b0100;
+ 2'b11 : out = 4'b1000;
+ endcase
+ end
+endmodule
+
+module DEC3 (input [2:0] in, input enable, output reg [7:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 8'b00000000;
+ else begin
+ case (in)
+ 3'b000 : out = 8'b00000001;
+ 3'b001 : out = 8'b00000010;
+ 3'b010 : out = 8'b00000100;
+ 3'b011 : out = 8'b00001000;
+ 3'b100 : out = 8'b00010000;
+ 3'b101 : out = 8'b00100000;
+ 3'b110 : out = 8'b01000000;
+ 3'b111 : out = 8'b10000000;
+ endcase
+ end
+endmodule
+
+module DEC4 (input [3:0] in, input enable, output reg [15:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 16'b0000000000000000;
+ else begin
+ case (in)
+ 4'b0000 : out = 16'b0000000000000001;
+ 4'b0001 : out = 16'b0000000000000010;
+ 4'b0010 : out = 16'b0000000000000100;
+ 4'b0011 : out = 16'b0000000000001000;
+ 4'b0100 : out = 16'b0000000000010000;
+ 4'b0101 : out = 16'b0000000000100000;
+ 4'b0110 : out = 16'b0000000001000000;
+ 4'b0111 : out = 16'b0000000010000000;
+ 4'b1000 : out = 16'b0000000100000000;
+ 4'b1001 : out = 16'b0000001000000000;
+ 4'b1010 : out = 16'b0000010000000000;
+ 4'b1011 : out = 16'b0000100000000000;
+ 4'b1100 : out = 16'b0001000000000000;
+ 4'b1101 : out = 16'b0010000000000000;
+ 4'b1110 : out = 16'b0100000000000000;
+ 4'b1111 : out = 16'b1000000000000000;
+ endcase
+ end
+endmodule
+module DEC5 (input [4:0] in, input enable, output reg [31:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 32'b00000000000000000000000000000000;
+ else begin
+ case (in)
+ 5'b00000 : out = 32'b00000000000000000000000000000001;
+ 5'b00001 : out = 32'b00000000000000000000000000000010;
+ 5'b00010 : out = 32'b00000000000000000000000000000100;
+ 5'b00011 : out = 32'b00000000000000000000000000001000;
+ 5'b00100 : out = 32'b00000000000000000000000000010000;
+ 5'b00101 : out = 32'b00000000000000000000000000100000;
+ 5'b00110 : out = 32'b00000000000000000000000001000000;
+ 5'b00111 : out = 32'b00000000000000000000000010000000;
+ 5'b01000 : out = 32'b00000000000000000000000100000000;
+ 5'b01001 : out = 32'b00000000000000000000001000000000;
+ 5'b01010 : out = 32'b00000000000000000000010000000000;
+ 5'b01011 : out = 32'b00000000000000000000100000000000;
+ 5'b01100 : out = 32'b00000000000000000001000000000000;
+ 5'b01101 : out = 32'b00000000000000000010000000000000;
+ 5'b01110 : out = 32'b00000000000000000100000000000000;
+ 5'b01111 : out = 32'b00000000000000001000000000000000;
+ 5'b10000 : out = 32'b00000000000000010000000000000000;
+ 5'b10001 : out = 32'b00000000000000100000000000000000;
+ 5'b10010 : out = 32'b00000000000001000000000000000000;
+ 5'b10011 : out = 32'b00000000000010000000000000000000;
+ 5'b10100 : out = 32'b00000000000100000000000000000000;
+ 5'b10101 : out = 32'b00000000001000000000000000000000;
+ 5'b10110 : out = 32'b00000000010000000000000000000000;
+ 5'b10111 : out = 32'b00000000100000000000000000000000;
+ 5'b11000 : out = 32'b00000001000000000000000000000000;
+ 5'b11001 : out = 32'b00000010000000000000000000000000;
+ 5'b11010 : out = 32'b00000100000000000000000000000000;
+ 5'b11011 : out = 32'b00001000000000000000000000000000;
+ 5'b11100 : out = 32'b00010000000000000000000000000000;
+ 5'b11101 : out = 32'b00100000000000000000000000000000;
+ 5'b11110 : out = 32'b01000000000000000000000000000000;
+ 5'b11111 : out = 32'b10000000000000000000000000000000;
+ endcase
+ end
+endmodule
+
+module DEC6 (input [5:0] in, input enable, output reg [63:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 64'b0000000000000000000000000000000000000000000000000000000000000000;
+ else begin
+ case (in)
+ 6'b000000 : out = 64'b0000000000000000000000000000000000000000000000000000000000000001;
+ 6'b000001 : out = 64'b0000000000000000000000000000000000000000000000000000000000000010;
+ 6'b000010 : out = 64'b0000000000000000000000000000000000000000000000000000000000000100;
+ 6'b000011 : out = 64'b0000000000000000000000000000000000000000000000000000000000001000;
+ 6'b000100 : out = 64'b0000000000000000000000000000000000000000000000000000000000010000;
+ 6'b000101 : out = 64'b0000000000000000000000000000000000000000000000000000000000100000;
+ 6'b000110 : out = 64'b0000000000000000000000000000000000000000000000000000000001000000;
+ 6'b000111 : out = 64'b0000000000000000000000000000000000000000000000000000000010000000;
+ 6'b001000 : out = 64'b0000000000000000000000000000000000000000000000000000000100000000;
+ 6'b001001 : out = 64'b0000000000000000000000000000000000000000000000000000001000000000;
+ 6'b001010 : out = 64'b0000000000000000000000000000000000000000000000000000010000000000;
+ 6'b001011 : out = 64'b0000000000000000000000000000000000000000000000000000100000000000;
+ 6'b001100 : out = 64'b0000000000000000000000000000000000000000000000000001000000000000;
+ 6'b001101 : out = 64'b0000000000000000000000000000000000000000000000000010000000000000;
+ 6'b001110 : out = 64'b0000000000000000000000000000000000000000000000000100000000000000;
+ 6'b001111 : out = 64'b0000000000000000000000000000000000000000000000001000000000000000;
+ 6'b010000 : out = 64'b0000000000000000000000000000000000000000000000010000000000000000;
+ 6'b010001 : out = 64'b0000000000000000000000000000000000000000000000100000000000000000;
+ 6'b010010 : out = 64'b0000000000000000000000000000000000000000000001000000000000000000;
+ 6'b010011 : out = 64'b0000000000000000000000000000000000000000000010000000000000000000;
+ 6'b010100 : out = 64'b0000000000000000000000000000000000000000000100000000000000000000;
+ 6'b010101 : out = 64'b0000000000000000000000000000000000000000001000000000000000000000;
+ 6'b010110 : out = 64'b0000000000000000000000000000000000000000010000000000000000000000;
+ 6'b010111 : out = 64'b0000000000000000000000000000000000000000100000000000000000000000;
+ 6'b011000 : out = 64'b0000000000000000000000000000000000000001000000000000000000000000;
+ 6'b011001 : out = 64'b0000000000000000000000000000000000000010000000000000000000000000;
+ 6'b011010 : out = 64'b0000000000000000000000000000000000000100000000000000000000000000;
+ 6'b011011 : out = 64'b0000000000000000000000000000000000001000000000000000000000000000;
+ 6'b011100 : out = 64'b0000000000000000000000000000000000010000000000000000000000000000;
+ 6'b011101 : out = 64'b0000000000000000000000000000000000100000000000000000000000000000;
+ 6'b011110 : out = 64'b0000000000000000000000000000000001000000000000000000000000000000;
+ 6'b011111 : out = 64'b0000000000000000000000000000000010000000000000000000000000000000;
+
+ 6'b100000 : out = 64'b0000000000000000000000000000000100000000000000000000000000000000;
+ 6'b100001 : out = 64'b0000000000000000000000000000001000000000000000000000000000000000;
+ 6'b100010 : out = 64'b0000000000000000000000000000010000000000000000000000000000000000;
+ 6'b100011 : out = 64'b0000000000000000000000000000100000000000000000000000000000000000;
+ 6'b100100 : out = 64'b0000000000000000000000000001000000000000000000000000000000000000;
+ 6'b100101 : out = 64'b0000000000000000000000000010000000000000000000000000000000000000;
+ 6'b100110 : out = 64'b0000000000000000000000000100000000000000000000000000000000000000;
+ 6'b100111 : out = 64'b0000000000000000000000001000000000000000000000000000000000000000;
+ 6'b101000 : out = 64'b0000000000000000000000010000000000000000000000000000000000000000;
+ 6'b101001 : out = 64'b0000000000000000000000100000000000000000000000000000000000000000;
+ 6'b101010 : out = 64'b0000000000000000000001000000000000000000000000000000000000000000;
+ 6'b101011 : out = 64'b0000000000000000000010000000000000000000000000000000000000000000;
+ 6'b101100 : out = 64'b0000000000000000000100000000000000000000000000000000000000000000;
+ 6'b101101 : out = 64'b0000000000000000001000000000000000000000000000000000000000000000;
+ 6'b101110 : out = 64'b0000000000000000010000000000000000000000000000000000000000000000;
+ 6'b101111 : out = 64'b0000000000000000100000000000000000000000000000000000000000000000;
+ 6'b110000 : out = 64'b0000000000000001000000000000000000000000000000000000000000000000;
+ 6'b110001 : out = 64'b0000000000000010000000000000000000000000000000000000000000000000;
+ 6'b110010 : out = 64'b0000000000000100000000000000000000000000000000000000000000000000;
+ 6'b110011 : out = 64'b0000000000001000000000000000000000000000000000000000000000000000;
+ 6'b110100 : out = 64'b0000000000010000000000000000000000000000000000000000000000000000;
+ 6'b110101 : out = 64'b0000000000100000000000000000000000000000000000000000000000000000;
+ 6'b110110 : out = 64'b0000000001000000000000000000000000000000000000000000000000000000;
+ 6'b110111 : out = 64'b0000000010000000000000000000000000000000000000000000000000000000;
+ 6'b111000 : out = 64'b0000000100000000000000000000000000000000000000000000000000000000;
+ 6'b111001 : out = 64'b0000001000000000000000000000000000000000000000000000000000000000;
+ 6'b111010 : out = 64'b0000010000000000000000000000000000000000000000000000000000000000;
+ 6'b111011 : out = 64'b0000100000000000000000000000000000000000000000000000000000000000;
+ 6'b111100 : out = 64'b0001000000000000000000000000000000000000000000000000000000000000;
+ 6'b111101 : out = 64'b0010000000000000000000000000000000000000000000000000000000000000;
+ 6'b111110 : out = 64'b0100000000000000000000000000000000000000000000000000000000000000;
+ 6'b111111 : out = 64'b1000000000000000000000000000000000000000000000000000000000000000;
+ endcase
+ end
+endmodule
+
+
+module MUX2(input [1:0] in, input select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ endcase
+endmodule
+
+
+module MUX4(input [3:0] in, input [1:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ endcase
+endmodule
+
+
+module MUX8(input [7:0] in, input [2:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ endcase
+endmodule
+
+module MUX16(input [15:0] in, input [3:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ endcase
+endmodule
+
+module MUX32(input [31:0] in, input [4:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ 16: out = in[16];
+ 17: out = in[17];
+ 18: out = in[18];
+ 19: out = in[19];
+ 20: out = in[20];
+ 21: out = in[21];
+ 22: out = in[22];
+ 23: out = in[23];
+ 24: out = in[24];
+ 25: out = in[25];
+ 26: out = in[26];
+ 27: out = in[27];
+ 28: out = in[28];
+ 29: out = in[29];
+ 30: out = in[30];
+ 31: out = in[31];
+ endcase
+endmodule
+
+module MUX64(input [63:0] in, input [5:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ 16: out = in[16];
+ 17: out = in[17];
+ 18: out = in[18];
+ 19: out = in[19];
+ 20: out = in[20];
+ 21: out = in[21];
+ 22: out = in[22];
+ 23: out = in[23];
+ 24: out = in[24];
+ 25: out = in[25];
+ 26: out = in[26];
+ 27: out = in[27];
+ 28: out = in[28];
+ 29: out = in[29];
+ 30: out = in[30];
+ 31: out = in[31];
+ 32: out = in[32];
+ 33: out = in[33];
+ 34: out = in[34];
+ 35: out = in[35];
+ 36: out = in[36];
+ 37: out = in[37];
+ 38: out = in[38];
+ 39: out = in[39];
+ 40: out = in[40];
+ 41: out = in[41];
+ 42: out = in[42];
+ 43: out = in[43];
+ 44: out = in[44];
+ 45: out = in[45];
+ 46: out = in[46];
+ 47: out = in[47];
+ 48: out = in[48];
+ 49: out = in[49];
+ 50: out = in[50];
+ 51: out = in[51];
+ 52: out = in[52];
+ 53: out = in[53];
+ 54: out = in[54];
+ 55: out = in[55];
+ 56: out = in[56];
+ 57: out = in[57];
+ 58: out = in[58];
+ 59: out = in[59];
+ 60: out = in[60];
+ 61: out = in[61];
+ 62: out = in[62];
+ 63: out = in[63];
+ endcase
+endmodule
+
+module ADD1(input in1, in2, cin, output out, cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module ADD2 #(parameter SIZE = 2)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module ADD4 #(parameter SIZE = 4)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module ADD8 #(parameter SIZE = 8)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module ADD16 #(parameter SIZE = 16)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module ADD32 #(parameter SIZE = 32)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+module ADD64 #(parameter SIZE = 64)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 + in2 + cin;
+
+endmodule
+
+module SUB1(input in1, in2, cin, output out, cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module SUB2 #(parameter SIZE = 2)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module SUB4 #(parameter SIZE = 4)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module SUB8 #(parameter SIZE = 8)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module SUB16 #(parameter SIZE = 16)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module SUB32 #(parameter SIZE = 32)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+module SUB64 #(parameter SIZE = 64)(input [SIZE-1:0] in1, in2,
+ input cin, output [SIZE-1:0] out, output cout);
+
+assign {cout, out} = in1 - in2 - cin;
+
+endmodule
+
+module MUL1 #(parameter SIZE = 1)(input in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL2 #(parameter SIZE = 2)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL4 #(parameter SIZE = 4)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL8 #(parameter SIZE = 8)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL16 #(parameter SIZE = 16)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL32 #(parameter SIZE = 32)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module MUL64 #(parameter SIZE = 64)(input [SIZE-1:0] in1, in2, output [2*SIZE-1:0] out);
+
+assign out = in1*in2;
+
+endmodule
+
+module DIV1 #(parameter SIZE = 1)(input in1, in2, output out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV2 #(parameter SIZE = 2)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV4 #(parameter SIZE = 4)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV8 #(parameter SIZE = 8)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV16 #(parameter SIZE = 16)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV32 #(parameter SIZE = 32)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module DIV64 #(parameter SIZE = 64)(input [SIZE-1:0] in1, in2,
+ output [SIZE-1:0] out, rem);
+
+assign out = in1/in2;
+assign rem = in1%in2;
+
+endmodule
+
+module FF (input d, clk, output reg q);
+always @( posedge clk)
+ q <= d;
+endmodule
+
+
+module RFF(input d, clk, reset, output reg q);
+always @(posedge clk or posedge reset)
+ if(reset)
+ q <= 0;
+ else
+ q <= d;
+endmodule
+
+module SFF(input d, clk, set, output reg q);
+always @(posedge clk or posedge set)
+ if(set)
+ q <= 1;
+ else
+ q <= d;
+endmodule
+
+module RSFF(input d, clk, set, reset, output reg q);
+always @(posedge clk or posedge reset or posedge set)
+ if(reset)
+ q <= 0;
+ else if(set)
+ q <= 1;
+ else
+ q <= d;
+endmodule
+
+module SRFF(input d, clk, set, reset, output reg q);
+always @(posedge clk or posedge set or posedge reset)
+ if(set)
+ q <= 1;
+ else if(reset)
+ q <= 0;
+ else
+ q <= d;
+endmodule
+
+module LATCH(input d, enable, output reg q);
+always @( d or enable)
+ if(enable)
+ q <= d;
+endmodule
+
+module RLATCH(input d, reset, enable, output reg q);
+always @( d or enable or reset)
+ if(enable)
+ if(reset)
+ q <= 0;
+ else
+ q <= d;
+endmodule
+
+module LSHIFT1 #(parameter SIZE = 1)(input in, shift, val, output reg out);
+
+always @ (in, shift, val) begin
+ if(shift)
+ out = val;
+ else
+ out = in;
+end
+
+endmodule
+
+
+module LSHIFT2 #(parameter SIZE = 2)(input [SIZE-1:0] in,
+ input [SIZE-1:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+module LSHIFT4 #(parameter SIZE = 4)(input [SIZE-1:0] in,
+ input [2:0] shift, input val, output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+
+module LSHIFT8 #(parameter SIZE = 8)(input [SIZE-1:0] in,
+ input [3:0] shift, input val, output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+module LSHIFT16 #(parameter SIZE = 16)(input [SIZE-1:0] in,
+ input [4:0] shift, input val, output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+module LSHIFT32 #(parameter SIZE = 32)(input [SIZE-1:0] in,
+ input [5:0] shift, input val, output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+module LSHIFT64 #(parameter SIZE = 64)(input [SIZE-1:0] in,
+ input [6:0] shift, input val, output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in << shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } >> (SIZE-1-shift));
+end
+endmodule
+
+module RSHIFT1 #(parameter SIZE = 1)(input in, shift, val, output reg out);
+
+always @ (in, shift, val) begin
+ if(shift)
+ out = val;
+ else
+ out = in;
+end
+
+endmodule
+
+module RSHIFT2 #(parameter SIZE = 2)(input [SIZE-1:0] in,
+ input [SIZE-1:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+
+endmodule
+
+
+module RSHIFT4 #(parameter SIZE = 4)(input [SIZE-1:0] in,
+ input [2:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+endmodule
+
+module RSHIFT8 #(parameter SIZE = 8)(input [SIZE-1:0] in,
+ input [3:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+
+endmodule
+
+module RSHIFT16 #(parameter SIZE = 16)(input [SIZE-1:0] in,
+ input [4:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+endmodule
+
+
+module RSHIFT32 #(parameter SIZE = 32)(input [SIZE-1:0] in,
+ input [5:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+endmodule
+
+module RSHIFT64 #(parameter SIZE = 64)(input [SIZE-1:0] in,
+ input [6:0] shift, input val,
+ output reg [SIZE-1:0] out);
+
+always @(in or shift or val) begin
+ out = in >> shift;
+ if(val)
+ out = out | ({SIZE-1 {1'b1} } << (SIZE-1-shift));
+end
+endmodule
+
+module CMP1 #(parameter SIZE = 1) (input in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+
+module CMP2 #(parameter SIZE = 2) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module CMP4 #(parameter SIZE = 4) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module CMP8 #(parameter SIZE = 8) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module CMP16 #(parameter SIZE = 16) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module CMP32 #(parameter SIZE = 32) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module CMP64 #(parameter SIZE = 64) (input [SIZE-1:0] in1, in2,
+ output reg equal, unequal, greater, lesser);
+
+always @ (in1 or in2) begin
+ if(in1 == in2) begin
+ equal = 1;
+ unequal = 0;
+ greater = 0;
+ lesser = 0;
+ end
+ else begin
+ equal = 0;
+ unequal = 1;
+
+ if(in1 < in2) begin
+ greater = 0;
+ lesser = 1;
+ end
+ else begin
+ greater = 1;
+ lesser = 0;
+ end
+ end
+end
+endmodule
+
+module VCC (output supply1 out);
+endmodule
+
+module GND (output supply0 out);
+endmodule
+
+
+module INC1 #(parameter SIZE = 1) (input in, output [SIZE:0] out);
+
+assign out = in + 1;
+
+endmodule
+
+module INC2 #(parameter SIZE = 2) (input [SIZE-1:0] in, output [SIZE:0] out);
+
+assign out = in + 1;
+
+endmodule
+
+module INC4 #(parameter SIZE = 4) (input [SIZE-1:0] in, output [SIZE:0] out);
+assign out = in + 1;
+
+endmodule
+
+module INC8 #(parameter SIZE = 8) (input [SIZE-1:0] in, output [SIZE:0] out);
+assign out = in + 1;
+
+endmodule
+
+module INC16 #(parameter SIZE = 16) (input [SIZE-1:0] in, output [SIZE:0] out);
+assign out = in + 1;
+
+endmodule
+
+module INC32 #(parameter SIZE = 32) (input [SIZE-1:0] in, output [SIZE:0] out);
+assign out = in + 1;
+
+endmodule
+module INC64 #(parameter SIZE = 64) (input [SIZE-1:0] in, output [SIZE:0] out);
+assign out = in + 1;
+
+endmodule
+
diff --git a/tests/hana/run-test.sh b/tests/hana/run-test.sh
new file mode 100755
index 000000000..b8e7231c7
--- /dev/null
+++ b/tests/hana/run-test.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+make -C ../.. || exit 1
+exec bash ../tools/autotest.sh -l hana_vlib.v test_*.v
diff --git a/tests/hana/test_intermout_always_comb_1_test.v b/tests/hana/test_intermout_always_comb_1_test.v
new file mode 100644
index 000000000..2d5abc4a6
--- /dev/null
+++ b/tests/hana/test_intermout_always_comb_1_test.v
@@ -0,0 +1,13 @@
+module test(a, b, c, d, z);
+input a, b, c, d;
+output z;
+reg z, temp1, temp2;
+
+always @(a or b or c or d)
+begin
+ temp1 = a ^ b;
+ temp2 = c ^ d;
+ z = temp1 ^ temp2;
+end
+
+endmodule
diff --git a/tests/hana/test_intermout_always_comb_3_test.v b/tests/hana/test_intermout_always_comb_3_test.v
new file mode 100644
index 000000000..234407efd
--- /dev/null
+++ b/tests/hana/test_intermout_always_comb_3_test.v
@@ -0,0 +1,10 @@
+module test (in1, in2, out);
+input in1, in2;
+output reg out;
+
+always @ ( in1 or in2)
+ if(in1 > in2)
+ out = in1;
+ else
+ out = in2;
+endmodule
diff --git a/tests/hana/test_intermout_always_comb_4_test.v b/tests/hana/test_intermout_always_comb_4_test.v
new file mode 100644
index 000000000..b0a94f299
--- /dev/null
+++ b/tests/hana/test_intermout_always_comb_4_test.v
@@ -0,0 +1,9 @@
+module test(a, b, c);
+input b, c;
+output reg a;
+
+always @(b or c) begin
+a = b;
+a = c;
+end
+endmodule
diff --git a/tests/hana/test_intermout_always_comb_5_test.v b/tests/hana/test_intermout_always_comb_5_test.v
new file mode 100644
index 000000000..5152781df
--- /dev/null
+++ b/tests/hana/test_intermout_always_comb_5_test.v
@@ -0,0 +1,11 @@
+module test(ctrl, in1, in2, out);
+input ctrl;
+input in1, in2;
+output reg out;
+
+always @ (ctrl or in1 or in2)
+ if(ctrl)
+ out = in1 & in2;
+ else
+ out = in1 | in2;
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_3_test.v b/tests/hana/test_intermout_always_ff_3_test.v
new file mode 100644
index 000000000..ed8630c37
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_3_test.v
@@ -0,0 +1,15 @@
+module NonBlockingEx(clk, merge, er, xmit, fddi, claim);
+input clk, merge, er, xmit, fddi;
+output reg claim;
+reg fcr;
+
+always @(posedge clk)
+begin
+ fcr = er | xmit;
+
+ if(merge)
+ claim = fcr & fddi;
+ else
+ claim = fddi;
+end
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_4_test.v b/tests/hana/test_intermout_always_ff_4_test.v
new file mode 100644
index 000000000..cac420a47
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_4_test.v
@@ -0,0 +1,11 @@
+module FlipFlop(clk, cs, ns);
+input clk;
+input [31:0] cs;
+output [31:0] ns;
+integer is;
+
+always @(posedge clk)
+ is <= cs;
+
+assign ns = is;
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_5_test.v b/tests/hana/test_intermout_always_ff_5_test.v
new file mode 100644
index 000000000..669b2a5f9
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_5_test.v
@@ -0,0 +1,13 @@
+module FlipFlop(clock, cs, ns);
+input clock;
+input [3:0] cs;
+output reg [3:0] ns;
+reg [3:0] temp;
+
+always @(posedge clock)
+begin
+ temp = cs;
+ ns = temp;
+end
+
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_6_test.v b/tests/hana/test_intermout_always_ff_6_test.v
new file mode 100644
index 000000000..ad0a0df6e
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_6_test.v
@@ -0,0 +1,7 @@
+module inc(clock, counter);
+
+input clock;
+output reg [3:0] counter;
+always @(posedge clock)
+ counter <= counter + 1;
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_8_test.v b/tests/hana/test_intermout_always_ff_8_test.v
new file mode 100644
index 000000000..0f29ea0a4
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_8_test.v
@@ -0,0 +1,11 @@
+module NegEdgeClock(q, d, clk, reset);
+input d, clk, reset;
+output reg q;
+
+always @(negedge clk or negedge reset)
+ if(!reset)
+ q <= 1'b0;
+ else
+ q <= d;
+
+endmodule
diff --git a/tests/hana/test_intermout_always_ff_9_test.v b/tests/hana/test_intermout_always_ff_9_test.v
new file mode 100644
index 000000000..f1f13bbe7
--- /dev/null
+++ b/tests/hana/test_intermout_always_ff_9_test.v
@@ -0,0 +1,14 @@
+module MyCounter (clock, preset, updown, presetdata, counter);
+input clock, preset, updown;
+input [1: 0] presetdata;
+output reg [1:0] counter;
+
+always @(posedge clock)
+ if(preset)
+ counter <= presetdata;
+ else
+ if(updown)
+ counter <= counter + 1;
+ else
+ counter <= counter - 1;
+endmodule
diff --git a/tests/hana/test_intermout_always_latch_1_test.v b/tests/hana/test_intermout_always_latch_1_test.v
new file mode 100644
index 000000000..a83be20d1
--- /dev/null
+++ b/tests/hana/test_intermout_always_latch_1_test.v
@@ -0,0 +1,9 @@
+module test(en, in, out);
+input en;
+input [1:0] in;
+output reg [2:0] out;
+
+always @ (en or in)
+ if(en)
+ out = in + 1;
+endmodule
diff --git a/tests/hana/test_intermout_bufrm_1_test.v b/tests/hana/test_intermout_bufrm_1_test.v
new file mode 100644
index 000000000..8e3d4222e
--- /dev/null
+++ b/tests/hana/test_intermout_bufrm_1_test.v
@@ -0,0 +1,4 @@
+module test(input in, output out);
+//no buffer removal
+assign out = in;
+endmodule
diff --git a/tests/hana/test_intermout_bufrm_2_test.v b/tests/hana/test_intermout_bufrm_2_test.v
new file mode 100644
index 000000000..853f1dc9a
--- /dev/null
+++ b/tests/hana/test_intermout_bufrm_2_test.v
@@ -0,0 +1,7 @@
+module test(input in, output out);
+//intermediate buffers should be removed
+wire w1, w2;
+assign w1 = in;
+assign w2 = w1;
+assign out = w2;
+endmodule
diff --git a/tests/hana/test_intermout_bufrm_6_test.v b/tests/hana/test_intermout_bufrm_6_test.v
new file mode 100644
index 000000000..d4f3878d5
--- /dev/null
+++ b/tests/hana/test_intermout_bufrm_6_test.v
@@ -0,0 +1,22 @@
+module test(in, out);
+input in;
+output out;
+
+wire w1, w2, w3, w4;
+assign w1 = in;
+assign w2 = w1;
+assign w4 = w3;
+assign out = w4;
+mybuf _mybuf(w2, w3);
+endmodule
+
+module mybuf(in, out);
+input in;
+output out;
+wire w1, w2, w3, w4;
+
+assign w1 = in;
+assign w2 = w1;
+assign out = w2;
+endmodule
+
diff --git a/tests/hana/test_intermout_bufrm_7_test.v b/tests/hana/test_intermout_bufrm_7_test.v
new file mode 100644
index 000000000..7b651302a
--- /dev/null
+++ b/tests/hana/test_intermout_bufrm_7_test.v
@@ -0,0 +1,33 @@
+module test(in1, in2, out);
+input in1, in2;
+output out;
+// Y with cluster of mybuf instances at the junction
+
+wire w1, w2, w3, w4, w5, w6, w7, w8, w9, w10;
+assign w1 = in1;
+assign w2 = w1;
+assign w5 = in2;
+assign w6 = w5;
+assign w10 = w9;
+assign out = w10;
+
+mybuf _mybuf0(w2, w3);
+mybuf _mybuf1(w3, w4);
+
+mybuf _mybuf2(w6, w7);
+mybuf _mybuf3(w7, w4);
+
+mybuf _mybuf4(w4, w8);
+mybuf _mybuf5(w8, w9);
+endmodule
+
+module mybuf(in, out);
+input in;
+output out;
+wire w1, w2, w3, w4;
+
+assign w1 = in;
+assign w2 = w1;
+assign out = w2;
+endmodule
+
diff --git a/tests/hana/test_intermout_exprs_add_test.v b/tests/hana/test_intermout_exprs_add_test.v
new file mode 100644
index 000000000..ec70f347b
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_add_test.v
@@ -0,0 +1,10 @@
+module test(out, in1, in2, vin1, vin2, vout1);
+output out;
+input in1, in2;
+input [1:0] vin1;
+input [2:0] vin2;
+output [3:0] vout1;
+
+assign out = in1 + in2;
+assign vout1 = vin1 + vin2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_binlogic_test.v b/tests/hana/test_intermout_exprs_binlogic_test.v
new file mode 100644
index 000000000..eec8c4b1a
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_binlogic_test.v
@@ -0,0 +1,13 @@
+module test(in1, in2, vin1, vin2, out, vout, vin3, vin4, vout1 );
+input in1, in2;
+input [1:0] vin1;
+input [3:0] vin2;
+input [1:0] vin3;
+input [3:0] vin4;
+output vout, vout1;
+output out;
+
+assign out = in1 && in2;
+assign vout = vin1 && vin2;
+assign vout1 = vin3 || vin4;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_bitwiseneg_test.v b/tests/hana/test_intermout_exprs_bitwiseneg_test.v
new file mode 100644
index 000000000..5b62bef09
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_bitwiseneg_test.v
@@ -0,0 +1,5 @@
+module test(output out, input in, output [1:0] vout, input [1:0] vin);
+
+assign out = ~in;
+assign vout = ~vin;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_buffer_test.v b/tests/hana/test_intermout_exprs_buffer_test.v
new file mode 100644
index 000000000..2b4cbc3ed
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_buffer_test.v
@@ -0,0 +1,9 @@
+module buffer(in, out, vin, vout);
+input in;
+output out;
+input [1:0] vin;
+output [1:0] vout;
+
+assign out = in;
+assign vout = vin;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_condexpr_mux_test.v b/tests/hana/test_intermout_exprs_condexpr_mux_test.v
new file mode 100644
index 000000000..11006e8b3
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_condexpr_mux_test.v
@@ -0,0 +1,11 @@
+module test(in1, in2, out, vin1, vin2, vin3, vin4, vout1, vout2, en1, ven1, ven2);
+input in1, in2, en1, ven1;
+input [1:0] ven2;
+output out;
+input [1:0] vin1, vin2, vin3, vin4;
+output [1:0] vout1, vout2;
+
+assign out = en1 ? in1 : in2;
+assign vout1 = ven1 ? vin1 : vin2;
+assign vout2 = ven2 ? vin3 : vin4;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_condexpr_tribuf_test.v b/tests/hana/test_intermout_exprs_condexpr_tribuf_test.v
new file mode 100644
index 000000000..5b778fe98
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_condexpr_tribuf_test.v
@@ -0,0 +1,9 @@
+module test(in, out, en, vin1, vout1, en1);
+input in, en, en1;
+output out;
+input [1:0] vin1;
+output [1:0] vout1;
+
+assign out = en ? in : 1'bz;
+assign vout1 = en1 ? vin1 : 2'bzz;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_const_test.v b/tests/hana/test_intermout_exprs_const_test.v
new file mode 100644
index 000000000..484d81032
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_const_test.v
@@ -0,0 +1,7 @@
+module test (out, vout);
+output out;
+output [7:0] vout;
+
+assign out = 1'b1;
+assign vout = 9;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_constshift_test.v b/tests/hana/test_intermout_exprs_constshift_test.v
new file mode 100644
index 000000000..eb21315d7
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_constshift_test.v
@@ -0,0 +1,12 @@
+module test(in, out, vin, vout, vin1, vout1, vin2, vout2);
+
+input in;
+input [3:0] vin, vin1, vin2;
+output [3:0] vout, vout1, vout2;
+output out;
+
+assign out = in << 1;
+assign vout = vin << 2;
+assign vout1 = vin1 >> 2;
+assign vout2 = vin2 >>> 2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_div_test.v b/tests/hana/test_intermout_exprs_div_test.v
new file mode 100644
index 000000000..21765fcdf
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_div_test.v
@@ -0,0 +1,10 @@
+module test(out, in1, in2, vin1, vin2, vout1);
+output out;
+input in1, in2;
+input [1:0] vin1;
+input [2:0] vin2;
+output [3:0] vout1;
+
+assign out = in1 / in2;
+assign vout1 = vin1 / vin2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_logicneg_test.v b/tests/hana/test_intermout_exprs_logicneg_test.v
new file mode 100644
index 000000000..b45b32b9c
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_logicneg_test.v
@@ -0,0 +1,7 @@
+module test(out, vout, in, vin);
+output out, vout;
+input in;
+input [3:0] vin;
+assign out = !in;
+assign vout = !vin;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_mod_test.v b/tests/hana/test_intermout_exprs_mod_test.v
new file mode 100644
index 000000000..cea6b02d7
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_mod_test.v
@@ -0,0 +1,10 @@
+module test(out, in1, in2, vin1, vin2, vout1);
+output out;
+input in1, in2;
+input [1:0] vin1;
+input [2:0] vin2;
+output [3:0] vout1;
+
+assign out = in1 % in2;
+assign vout1 = vin1 % vin2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_mul_test.v b/tests/hana/test_intermout_exprs_mul_test.v
new file mode 100644
index 000000000..f9973dadc
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_mul_test.v
@@ -0,0 +1,10 @@
+module test(out, in1, in2, vin1, vin2, vout1);
+output out;
+input in1, in2;
+input [1:0] vin1;
+input [2:0] vin2;
+output [3:0] vout1;
+
+assign out = in1 * in2;
+assign vout1 = vin1 * vin2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_redand_test.v b/tests/hana/test_intermout_exprs_redand_test.v
new file mode 100644
index 000000000..35fdf73ac
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_redand_test.v
@@ -0,0 +1,5 @@
+module test(output out, input [1:0] vin, output out1, input [3:0] vin1);
+
+assign out = &vin;
+assign out1 = &vin1;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_redop_test.v b/tests/hana/test_intermout_exprs_redop_test.v
new file mode 100644
index 000000000..93fdb2e57
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_redop_test.v
@@ -0,0 +1,16 @@
+module Reduction (A1, A2, A3, A4, A5, A6, Y1, Y2, Y3, Y4, Y5, Y6);
+input [1:0] A1;
+input [1:0] A2;
+input [1:0] A3;
+input [1:0] A4;
+input [1:0] A5;
+input [1:0] A6;
+output Y1, Y2, Y3, Y4, Y5, Y6;
+//reg Y1, Y2, Y3, Y4, Y5, Y6;
+assign Y1=&A1; //reduction AND
+assign Y2=|A2; //reduction OR
+assign Y3=~&A3; //reduction NAND
+assign Y4=~|A4; //reduction NOR
+assign Y5=^A5; //reduction XOR
+assign Y6=~^A6; //reduction XNOR
+endmodule
diff --git a/tests/hana/test_intermout_exprs_sub_test.v b/tests/hana/test_intermout_exprs_sub_test.v
new file mode 100644
index 000000000..06e3a8149
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_sub_test.v
@@ -0,0 +1,10 @@
+module test(out, in1, in2, vin1, vin2, vout1);
+output out;
+input in1, in2;
+input [1:0] vin1;
+input [2:0] vin2;
+output [3:0] vout1;
+
+assign out = in1 - in2;
+assign vout1 = vin1 - vin2;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_unaryminus_test.v b/tests/hana/test_intermout_exprs_unaryminus_test.v
new file mode 100644
index 000000000..ee3f229a8
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_unaryminus_test.v
@@ -0,0 +1,5 @@
+module test(output out, input in, output [31:0] vout, input [31:0] vin);
+
+assign out = -in;
+assign vout = -vin;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_unaryplus_test.v b/tests/hana/test_intermout_exprs_unaryplus_test.v
new file mode 100644
index 000000000..07be5b240
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_unaryplus_test.v
@@ -0,0 +1,4 @@
+module test(output out, input in);
+
+assign out = +in;
+endmodule
diff --git a/tests/hana/test_intermout_exprs_varshift_test.v b/tests/hana/test_intermout_exprs_varshift_test.v
new file mode 100644
index 000000000..2ca35c091
--- /dev/null
+++ b/tests/hana/test_intermout_exprs_varshift_test.v
@@ -0,0 +1,10 @@
+module test(vin0, vout0);
+input [2:0] vin0;
+output reg [7:0] vout0;
+
+wire [7:0] myreg0, myreg1, myreg2;
+integer i;
+assign myreg0 = vout0 << vin0;
+
+assign myreg1 = myreg2 >> i;
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_behavopt_1_test.v b/tests/hana/test_parse2synthtrans_behavopt_1_test.v
new file mode 100644
index 000000000..c825739c6
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_behavopt_1_test.v
@@ -0,0 +1,22 @@
+module test(in, out, clk, reset);
+input in, reset;
+output reg out;
+input clk;
+reg signed [3:0] a;
+reg signed [3:0] b;
+reg signed [3:0] c;
+reg [5:0] d;
+reg [5:0] e;
+
+always @(clk or reset) begin
+ a = -4;
+ b = 2;
+ c = a + b;
+ d = a + b + c;
+ d = d*d;
+ if(b)
+ e = d*d;
+ else
+ e = d + d;
+end
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_case_1_test.v b/tests/hana/test_parse2synthtrans_case_1_test.v
new file mode 100644
index 000000000..348c566ad
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_case_1_test.v
@@ -0,0 +1,26 @@
+module demultiplexer1_to_4 (out0, out1, out2, out3, in, s1, s0);
+output out0, out1, out2, out3;
+reg out0, out1, out2, out3;
+input in;
+input s1, s0;
+reg [3:0] encoding;
+reg [1:0] state;
+ always @(encoding) begin
+ case (encoding)
+ 4'bxx11: state = 1;
+ 4'bx0xx: state = 3;
+ 4'b11xx: state = 4;
+ 4'bx1xx: state = 2;
+ 4'bxx1x: state = 1;
+ 4'bxxx1: state = 0;
+ default: state = 0;
+ endcase
+ end
+
+ always @(encoding) begin
+ case (encoding)
+ 4'b0000: state = 1;
+ default: state = 0;
+ endcase
+ end
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_contassign_1_test.v b/tests/hana/test_parse2synthtrans_contassign_1_test.v
new file mode 100644
index 000000000..78bf00775
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_contassign_1_test.v
@@ -0,0 +1,7 @@
+module test(in, out);
+
+input wire in;
+output out;
+assign out = (in+in);
+assign out = 74;
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_module_basic0_test.v b/tests/hana/test_parse2synthtrans_module_basic0_test.v
new file mode 100644
index 000000000..67a272df0
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_module_basic0_test.v
@@ -0,0 +1,2 @@
+module test;
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_operators_1_test.v b/tests/hana/test_parse2synthtrans_operators_1_test.v
new file mode 100644
index 000000000..93b5691f3
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_operators_1_test.v
@@ -0,0 +1,11 @@
+module test(in, out);
+input in;
+output out;
+parameter p1 = 10;
+parameter p2 = 5;
+
+assign out = +p1;
+assign out = -p2;
+assign out = p1 + p2;
+assign out = p1 - p2;
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_param_1_test.v b/tests/hana/test_parse2synthtrans_param_1_test.v
new file mode 100644
index 000000000..146eedf42
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_param_1_test.v
@@ -0,0 +1,7 @@
+module test(in, out);
+input in;
+output out;
+parameter p = 10;
+
+assign out = p;
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_port_scalar_1_test.v b/tests/hana/test_parse2synthtrans_port_scalar_1_test.v
new file mode 100644
index 000000000..8cdf495a0
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_port_scalar_1_test.v
@@ -0,0 +1,6 @@
+module test(in, out, io);
+inout io;
+output out;
+input in;
+
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_port_vector_1_test.v b/tests/hana/test_parse2synthtrans_port_vector_1_test.v
new file mode 100644
index 000000000..a740282b3
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_port_vector_1_test.v
@@ -0,0 +1,9 @@
+module test(in1, in2, out1, out2, io1, io2);
+inout [1:0] io1;
+inout [0:1] io2;
+output [1:0] out1;
+output [0:1] out2;
+input [1:0] in1;
+input [0:1] in2;
+
+endmodule
diff --git a/tests/hana/test_parse2synthtrans_v2k_comb_logic_sens_list_test.v b/tests/hana/test_parse2synthtrans_v2k_comb_logic_sens_list_test.v
new file mode 100644
index 000000000..50f1d3531
--- /dev/null
+++ b/tests/hana/test_parse2synthtrans_v2k_comb_logic_sens_list_test.v
@@ -0,0 +1,9 @@
+module test(q, d, clk, reset);
+output reg q;
+input d, clk, reset;
+
+always @ (posedge clk, negedge reset)
+ if(!reset) q <= 0;
+ else q <= d;
+
+endmodule
diff --git a/tests/hana/test_parser_constructs_module_basic1_test.v b/tests/hana/test_parser_constructs_module_basic1_test.v
new file mode 100644
index 000000000..67a272df0
--- /dev/null
+++ b/tests/hana/test_parser_constructs_module_basic1_test.v
@@ -0,0 +1,2 @@
+module test;
+endmodule
diff --git a/tests/hana/test_parser_constructs_param_basic0_test.v b/tests/hana/test_parser_constructs_param_basic0_test.v
new file mode 100644
index 000000000..fd679230e
--- /dev/null
+++ b/tests/hana/test_parser_constructs_param_basic0_test.v
@@ -0,0 +1,10 @@
+module test #( parameter v2kparam = 5)
+(in, out, io, vin, vout, vio);
+input in;
+output out;
+inout io;
+input [3:0] vin;
+output [v2kparam:0] vout;
+inout [0:3] vio;
+parameter myparam = 10;
+endmodule
diff --git a/tests/hana/test_parser_constructs_port_basic0_test.v b/tests/hana/test_parser_constructs_port_basic0_test.v
new file mode 100644
index 000000000..8478e31da
--- /dev/null
+++ b/tests/hana/test_parser_constructs_port_basic0_test.v
@@ -0,0 +1,8 @@
+module test(in, out, io, vin, vout, vio);
+input in;
+output out;
+inout io;
+input [3:0] vin;
+output [3:0] vout;
+inout [0:3] vio;
+endmodule
diff --git a/tests/hana/test_parser_directives_define_simpledef_test.v b/tests/hana/test_parser_directives_define_simpledef_test.v
new file mode 100644
index 000000000..4a5d2345c
--- /dev/null
+++ b/tests/hana/test_parser_directives_define_simpledef_test.v
@@ -0,0 +1,9 @@
+`define parvez ahmad
+`define WIRE wire
+`define TEN 10
+
+module `parvez();
+parameter param = `TEN;
+`WIRE w;
+assign w = `TEN;
+endmodule
diff --git a/tests/hana/test_parser_misc_operators_test.v b/tests/hana/test_parser_misc_operators_test.v
new file mode 100644
index 000000000..8fe8e7bad
--- /dev/null
+++ b/tests/hana/test_parser_misc_operators_test.v
@@ -0,0 +1,29 @@
+module test(out, i0, i1, i2, i3, s1, s0);
+output out;
+input i0, i1, i2, i3;
+input s1, s0;
+
+assign out = (~s1 & s0 & i0) |
+ (~s1 & s0 & i1) |
+ (s1 & ~s0 & i2) |
+ (s1 & s0 & i3);
+
+endmodule
+
+module ternaryop(out, i0, i1, i2, i3, s1, s0);
+output out;
+input i0, i1, i2, i3;
+input s1, s0;
+
+assign out = s1 ? (s0 ? i3 : i2) : (s0 ? i1 : i0);
+
+endmodule
+
+module fulladd4(sum, c_out, a, b, c_in);
+output [3:0] sum;
+output c_out;
+input [3:0] a, b;
+input c_in;
+
+assign {c_out, sum} = a + b + c_in;
+endmodule
diff --git a/tests/hana/test_parser_v2k_comb_port_data_type_test.v b/tests/hana/test_parser_v2k_comb_port_data_type_test.v
new file mode 100644
index 000000000..099585b56
--- /dev/null
+++ b/tests/hana/test_parser_v2k_comb_port_data_type_test.v
@@ -0,0 +1,6 @@
+module adder(sum , co, a, b, ci);
+output reg [31:0] sum;
+output reg co;
+input wire [31:0] a, b;
+input wire ci;
+endmodule
diff --git a/tests/hana/test_parser_v2k_comma_sep_sens_list_test.v b/tests/hana/test_parser_v2k_comma_sep_sens_list_test.v
new file mode 100644
index 000000000..50f1d3531
--- /dev/null
+++ b/tests/hana/test_parser_v2k_comma_sep_sens_list_test.v
@@ -0,0 +1,9 @@
+module test(q, d, clk, reset);
+output reg q;
+input d, clk, reset;
+
+always @ (posedge clk, negedge reset)
+ if(!reset) q <= 0;
+ else q <= d;
+
+endmodule
diff --git a/tests/hana/test_simulation_always_15_test.v b/tests/hana/test_simulation_always_15_test.v
new file mode 100644
index 000000000..5c5fed5b6
--- /dev/null
+++ b/tests/hana/test_simulation_always_15_test.v
@@ -0,0 +1,5 @@
+module test(input [1:0] in, output reg [1:0] out);
+
+always @(in)
+ out = in;
+endmodule
diff --git a/tests/hana/test_simulation_always_17_test.v b/tests/hana/test_simulation_always_17_test.v
new file mode 100644
index 000000000..2d5abc4a6
--- /dev/null
+++ b/tests/hana/test_simulation_always_17_test.v
@@ -0,0 +1,13 @@
+module test(a, b, c, d, z);
+input a, b, c, d;
+output z;
+reg z, temp1, temp2;
+
+always @(a or b or c or d)
+begin
+ temp1 = a ^ b;
+ temp2 = c ^ d;
+ z = temp1 ^ temp2;
+end
+
+endmodule
diff --git a/tests/hana/test_simulation_always_18_test.v b/tests/hana/test_simulation_always_18_test.v
new file mode 100644
index 000000000..234407efd
--- /dev/null
+++ b/tests/hana/test_simulation_always_18_test.v
@@ -0,0 +1,10 @@
+module test (in1, in2, out);
+input in1, in2;
+output reg out;
+
+always @ ( in1 or in2)
+ if(in1 > in2)
+ out = in1;
+ else
+ out = in2;
+endmodule
diff --git a/tests/hana/test_simulation_always_19_test.v b/tests/hana/test_simulation_always_19_test.v
new file mode 100644
index 000000000..5152781df
--- /dev/null
+++ b/tests/hana/test_simulation_always_19_test.v
@@ -0,0 +1,11 @@
+module test(ctrl, in1, in2, out);
+input ctrl;
+input in1, in2;
+output reg out;
+
+always @ (ctrl or in1 or in2)
+ if(ctrl)
+ out = in1 & in2;
+ else
+ out = in1 | in2;
+endmodule
diff --git a/tests/hana/test_simulation_always_1_test.v b/tests/hana/test_simulation_always_1_test.v
new file mode 100644
index 000000000..211369cb6
--- /dev/null
+++ b/tests/hana/test_simulation_always_1_test.v
@@ -0,0 +1,5 @@
+module test(input in, output reg out);
+
+always @(in)
+ out = in;
+endmodule
diff --git a/tests/hana/test_simulation_always_20_test.v b/tests/hana/test_simulation_always_20_test.v
new file mode 100644
index 000000000..6b3e861dc
--- /dev/null
+++ b/tests/hana/test_simulation_always_20_test.v
@@ -0,0 +1,15 @@
+module NonBlockingEx(clk, merge, er, xmit, fddi, claim);
+input clk, merge, er, xmit, fddi;
+output reg claim;
+reg fcr;
+
+always @(posedge clk)
+begin
+ fcr <= er | xmit;
+
+ if(merge)
+ claim <= fcr & fddi;
+ else
+ claim <= fddi;
+end
+endmodule
diff --git a/tests/hana/test_simulation_always_21_test.v b/tests/hana/test_simulation_always_21_test.v
new file mode 100644
index 000000000..6c47b4bdf
--- /dev/null
+++ b/tests/hana/test_simulation_always_21_test.v
@@ -0,0 +1,11 @@
+module FlipFlop(clk, cs, ns);
+input clk;
+input [7:0] cs;
+output [7:0] ns;
+integer is;
+
+always @(posedge clk)
+ is <= cs;
+
+assign ns = is;
+endmodule
diff --git a/tests/hana/test_simulation_always_22_test.v b/tests/hana/test_simulation_always_22_test.v
new file mode 100644
index 000000000..8d91f8154
--- /dev/null
+++ b/tests/hana/test_simulation_always_22_test.v
@@ -0,0 +1,7 @@
+module inc(clock, counter);
+
+input clock;
+output reg [7:0] counter;
+always @(posedge clock)
+ counter <= counter + 1;
+endmodule
diff --git a/tests/hana/test_simulation_always_23_test.v b/tests/hana/test_simulation_always_23_test.v
new file mode 100644
index 000000000..f1f13bbe7
--- /dev/null
+++ b/tests/hana/test_simulation_always_23_test.v
@@ -0,0 +1,14 @@
+module MyCounter (clock, preset, updown, presetdata, counter);
+input clock, preset, updown;
+input [1: 0] presetdata;
+output reg [1:0] counter;
+
+always @(posedge clock)
+ if(preset)
+ counter <= presetdata;
+ else
+ if(updown)
+ counter <= counter + 1;
+ else
+ counter <= counter - 1;
+endmodule
diff --git a/tests/hana/test_simulation_always_27_test.v b/tests/hana/test_simulation_always_27_test.v
new file mode 100644
index 000000000..577378fd6
--- /dev/null
+++ b/tests/hana/test_simulation_always_27_test.v
@@ -0,0 +1,13 @@
+module FlipFlop(clock, cs, ns);
+input clock;
+input cs;
+output reg ns;
+reg temp;
+
+always @(posedge clock)
+begin
+ temp <= cs;
+ ns <= temp;
+end
+
+endmodule
diff --git a/tests/hana/test_simulation_always_29_test.v b/tests/hana/test_simulation_always_29_test.v
new file mode 100644
index 000000000..55606832a
--- /dev/null
+++ b/tests/hana/test_simulation_always_29_test.v
@@ -0,0 +1,9 @@
+module test(input in, output reg [1:0] out);
+
+ always @(in)
+ begin
+ out = in;
+ out = out + in;
+ end
+
+endmodule
diff --git a/tests/hana/test_simulation_always_31_tt.v b/tests/hana/test_simulation_always_31_tt.v
new file mode 100644
index 000000000..299c0ca46
--- /dev/null
+++ b/tests/hana/test_simulation_always_31_tt.v
@@ -0,0 +1,50 @@
+module test(clk, cond, data);
+input cond;
+input clk;
+output data;
+
+wire synth_net;
+wire synth_net_0;
+wire synth_net_1;
+wire synth_net_2;
+
+wire synth_net_3;
+wire synth_net_4;
+wire synth_net_5;
+wire synth_net_6;
+
+wire synth_net_7;
+wire synth_net_8;
+wire synth_net_9;
+wire synth_net_10;
+
+wire synth_net_11;
+wire tmp;
+AND2 synth_AND(.in({synth_net_0, synth_net_1}), .
+ out(synth_net_2));
+AND2 synth_AND_0(.in({synth_net_3, synth_net_4}), .out(
+ synth_net_5));
+AND2 synth_AND_1(.in({synth_net_6, synth_net_7}), .out(
+ synth_net_8));
+AND2 synth_AND_2(.in({synth_net_9, synth_net_10}), .out(
+ synth_net_11));
+BUF synth_BUF(.in(synth_net), .out(synth_net_0));
+BUF
+ synth_BUF_0(.in(data), .out(synth_net_3));
+BUF synth_BUF_1(.in(synth_net_8)
+ , .out(tmp));
+BUF synth_BUF_2(.in(tmp), .out(synth_net_9));
+MUX2 synth_MUX(.
+ in({synth_net_2, synth_net_5}), .select(cond), .out(synth_net_6));
+MUX2
+ synth_MUX_0(.in({synth_net_1, synth_net_4}), .select(cond), .out(synth_net_7
+ ));
+FF synth_FF(.d(synth_net_11), .clk(clk), .q(data));
+VCC synth_VCC(.out(
+ synth_net));
+VCC synth_VCC_0(.out(synth_net_1));
+VCC synth_VCC_1(.out(
+ synth_net_4));
+VCC synth_VCC_2(.out(synth_net_10));
+endmodule
+
diff --git a/tests/hana/test_simulation_and_1_test.v b/tests/hana/test_simulation_and_1_test.v
new file mode 100644
index 000000000..fba639ca8
--- /dev/null
+++ b/tests/hana/test_simulation_and_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = in[0] & in[1];
+endmodule
diff --git a/tests/hana/test_simulation_and_2_test.v b/tests/hana/test_simulation_and_2_test.v
new file mode 100644
index 000000000..715bc7ca6
--- /dev/null
+++ b/tests/hana/test_simulation_and_2_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = in[0] && in[1];
+endmodule
diff --git a/tests/hana/test_simulation_and_3_test.v b/tests/hana/test_simulation_and_3_test.v
new file mode 100644
index 000000000..74dccabf8
--- /dev/null
+++ b/tests/hana/test_simulation_and_3_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = in[0] & in[1] & in[2];
+endmodule
diff --git a/tests/hana/test_simulation_and_4_test.v b/tests/hana/test_simulation_and_4_test.v
new file mode 100644
index 000000000..48ed9102a
--- /dev/null
+++ b/tests/hana/test_simulation_and_4_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = in[0] && in[1] && in[2];
+endmodule
diff --git a/tests/hana/test_simulation_and_5_test.v b/tests/hana/test_simulation_and_5_test.v
new file mode 100644
index 000000000..29a355786
--- /dev/null
+++ b/tests/hana/test_simulation_and_5_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = in[0] & in[1] & in[2] & in[3];
+endmodule
diff --git a/tests/hana/test_simulation_and_6_test.v b/tests/hana/test_simulation_and_6_test.v
new file mode 100644
index 000000000..ebce4eebf
--- /dev/null
+++ b/tests/hana/test_simulation_and_6_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = in[0] && in[1] && in[2] && in[3];
+endmodule
diff --git a/tests/hana/test_simulation_and_7_test.v b/tests/hana/test_simulation_and_7_test.v
new file mode 100644
index 000000000..d394adad7
--- /dev/null
+++ b/tests/hana/test_simulation_and_7_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+and myand(out, in[0], in[1], in[2], in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_buffer_1_test.v b/tests/hana/test_simulation_buffer_1_test.v
new file mode 100644
index 000000000..e9bb7f617
--- /dev/null
+++ b/tests/hana/test_simulation_buffer_1_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = in;
+endmodule
diff --git a/tests/hana/test_simulation_buffer_2_test.v b/tests/hana/test_simulation_buffer_2_test.v
new file mode 100644
index 000000000..9a3f5aa3a
--- /dev/null
+++ b/tests/hana/test_simulation_buffer_2_test.v
@@ -0,0 +1,4 @@
+module test(input [1:0] in, output [1:0] out);
+assign out[0] = in[0];
+assign out[1] = in[1];
+endmodule
diff --git a/tests/hana/test_simulation_buffer_3_test.v b/tests/hana/test_simulation_buffer_3_test.v
new file mode 100644
index 000000000..9bca426d1
--- /dev/null
+++ b/tests/hana/test_simulation_buffer_3_test.v
@@ -0,0 +1,4 @@
+module test(input in, output [1:0] out);
+assign out[0] = in;
+assign out[1] = in;
+endmodule
diff --git a/tests/hana/test_simulation_decoder_2_test.v b/tests/hana/test_simulation_decoder_2_test.v
new file mode 100644
index 000000000..5bdf19717
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_2_test.v
@@ -0,0 +1,14 @@
+module test (input [1:0] in, input enable, output reg out);
+
+always @(in or enable)
+ if(!enable)
+ out = 4'b0000;
+ else begin
+ case (in)
+ 2'b00 : out = 0 ;
+ 2'b01 : out = 1;
+ 2'b10 : out = 0;
+ 2'b11 : out = 1;
+ endcase
+ end
+endmodule
diff --git a/tests/hana/test_simulation_decoder_3_test.v b/tests/hana/test_simulation_decoder_3_test.v
new file mode 100644
index 000000000..44f5de12b
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_3_test.v
@@ -0,0 +1,14 @@
+module test (input [1:0] in, input enable, output reg [2:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 3'b000;
+ else begin
+ case (in)
+ 2'b00 : out = 3'b001 ;
+ 2'b01 : out = 3'b010;
+ 2'b10 : out = 3'b010;
+ 2'b11 : out = 3'b100;
+ endcase
+ end
+endmodule
diff --git a/tests/hana/test_simulation_decoder_4_test.v b/tests/hana/test_simulation_decoder_4_test.v
new file mode 100644
index 000000000..871a5bbfd
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_4_test.v
@@ -0,0 +1,14 @@
+module test (input [2:0] in, output reg [7:0] out);
+
+always @(in )
+ case (in)
+ 3'b000 : out = 8'b00000001;
+ 3'b001 : out = 8'b00000010;
+ 3'b010 : out = 8'b00000100;
+ 3'b011 : out = 8'b00001000;
+ 3'b100 : out = 8'b00010000;
+ 3'b101 : out = 8'b00100000;
+ 3'b110 : out = 8'b01000000;
+ 3'b111 : out = 8'b10000000;
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_decoder_5_test.v b/tests/hana/test_simulation_decoder_5_test.v
new file mode 100644
index 000000000..497fa4bfd
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_5_test.v
@@ -0,0 +1,17 @@
+module test (input [2:0] in, input enable, output reg [7:0] out);
+
+always @(in or enable )
+ if(!enable)
+ out = 8'b00000000;
+ else
+ case (in)
+ 3'b000 : out = 8'b00000001;
+ 3'b001 : out = 8'b00000010;
+ 3'b010 : out = 8'b00000100;
+ 3'b011 : out = 8'b00001000;
+ 3'b100 : out = 8'b00010000;
+ 3'b101 : out = 8'b00100000;
+ 3'b110 : out = 8'b01000000;
+ 3'b111 : out = 8'b10000000;
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_decoder_6_test.v b/tests/hana/test_simulation_decoder_6_test.v
new file mode 100644
index 000000000..fd19ad609
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_6_test.v
@@ -0,0 +1,27 @@
+module test (input [3:0] in, input enable, output reg [15:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 16'b0000000000000000;
+ else begin
+ case (in)
+ 4'b0000 : out = 16'b0000000000000001;
+ 4'b0001 : out = 16'b0000000000000010;
+ 4'b0010 : out = 16'b0000000000000100;
+ 4'b0011 : out = 16'b0000000000001000;
+ 4'b0100 : out = 16'b0000000000010000;
+ 4'b0101 : out = 16'b0000000000100000;
+ 4'b0110 : out = 16'b0000000001000000;
+ 4'b0111 : out = 16'b0000000010000000;
+ 4'b1000 : out = 16'b0000000100000000;
+ 4'b1001 : out = 16'b0000001000000000;
+ 4'b1010 : out = 16'b0000010000000000;
+ 4'b1011 : out = 16'b0000100000000000;
+ 4'b1100 : out = 16'b0001000000000000;
+ 4'b1101 : out = 16'b0010000000000000;
+ 4'b1110 : out = 16'b0100000000000000;
+ 4'b1111 : out = 16'b1000000000000000;
+ endcase
+ end
+endmodule
+
diff --git a/tests/hana/test_simulation_decoder_7_test.v b/tests/hana/test_simulation_decoder_7_test.v
new file mode 100644
index 000000000..462e94199
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_7_test.v
@@ -0,0 +1,43 @@
+module test (input [4:0] in, input enable, output reg [31:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 32'b00000000000000000000000000000000;
+ else begin
+ case (in)
+ 5'b00000 : out = 32'b00000000000000000000000000000001;
+ 5'b00001 : out = 32'b00000000000000000000000000000010;
+ 5'b00010 : out = 32'b00000000000000000000000000000100;
+ 5'b00011 : out = 32'b00000000000000000000000000001000;
+ 5'b00100 : out = 32'b00000000000000000000000000010000;
+ 5'b00101 : out = 32'b00000000000000000000000000100000;
+ 5'b00110 : out = 32'b00000000000000000000000001000000;
+ 5'b00111 : out = 32'b00000000000000000000000010000000;
+ 5'b01000 : out = 32'b00000000000000000000000100000000;
+ 5'b01001 : out = 32'b00000000000000000000001000000000;
+ 5'b01010 : out = 32'b00000000000000000000010000000000;
+ 5'b01011 : out = 32'b00000000000000000000100000000000;
+ 5'b01100 : out = 32'b00000000000000000001000000000000;
+ 5'b01101 : out = 32'b00000000000000000010000000000000;
+ 5'b01110 : out = 32'b00000000000000000100000000000000;
+ 5'b01111 : out = 32'b00000000000000001000000000000000;
+ 5'b10000 : out = 32'b00000000000000010000000000000000;
+ 5'b10001 : out = 32'b00000000000000100000000000000000;
+ 5'b10010 : out = 32'b00000000000001000000000000000000;
+ 5'b10011 : out = 32'b00000000000010000000000000000000;
+ 5'b10100 : out = 32'b00000000000100000000000000000000;
+ 5'b10101 : out = 32'b00000000001000000000000000000000;
+ 5'b10110 : out = 32'b00000000010000000000000000000000;
+ 5'b10111 : out = 32'b00000000100000000000000000000000;
+ 5'b11000 : out = 32'b00000001000000000000000000000000;
+ 5'b11001 : out = 32'b00000010000000000000000000000000;
+ 5'b11010 : out = 32'b00000100000000000000000000000000;
+ 5'b11011 : out = 32'b00001000000000000000000000000000;
+ 5'b11100 : out = 32'b00010000000000000000000000000000;
+ 5'b11101 : out = 32'b00100000000000000000000000000000;
+ 5'b11110 : out = 32'b01000000000000000000000000000000;
+ 5'b11111 : out = 32'b10000000000000000000000000000000;
+ endcase
+ end
+endmodule
+
diff --git a/tests/hana/test_simulation_decoder_8_test.v b/tests/hana/test_simulation_decoder_8_test.v
new file mode 100644
index 000000000..751d60f67
--- /dev/null
+++ b/tests/hana/test_simulation_decoder_8_test.v
@@ -0,0 +1,76 @@
+module test (input [5:0] in, input enable, output reg [63:0] out);
+
+always @(in or enable)
+ if(!enable)
+ out = 64'b0000000000000000000000000000000000000000000000000000000000000000;
+ else begin
+ case (in)
+ 6'b000000 : out = 64'b0000000000000000000000000000000000000000000000000000000000000001;
+ 6'b000001 : out = 64'b0000000000000000000000000000000000000000000000000000000000000010;
+ 6'b000010 : out = 64'b0000000000000000000000000000000000000000000000000000000000000100;
+ 6'b000011 : out = 64'b0000000000000000000000000000000000000000000000000000000000001000;
+ 6'b000100 : out = 64'b0000000000000000000000000000000000000000000000000000000000010000;
+ 6'b000101 : out = 64'b0000000000000000000000000000000000000000000000000000000000100000;
+ 6'b000110 : out = 64'b0000000000000000000000000000000000000000000000000000000001000000;
+ 6'b000111 : out = 64'b0000000000000000000000000000000000000000000000000000000010000000;
+ 6'b001000 : out = 64'b0000000000000000000000000000000000000000000000000000000100000000;
+ 6'b001001 : out = 64'b0000000000000000000000000000000000000000000000000000001000000000;
+ 6'b001010 : out = 64'b0000000000000000000000000000000000000000000000000000010000000000;
+ 6'b001011 : out = 64'b0000000000000000000000000000000000000000000000000000100000000000;
+ 6'b001100 : out = 64'b0000000000000000000000000000000000000000000000000001000000000000;
+ 6'b001101 : out = 64'b0000000000000000000000000000000000000000000000000010000000000000;
+ 6'b001110 : out = 64'b0000000000000000000000000000000000000000000000000100000000000000;
+ 6'b001111 : out = 64'b0000000000000000000000000000000000000000000000001000000000000000;
+ 6'b010000 : out = 64'b0000000000000000000000000000000000000000000000010000000000000000;
+ 6'b010001 : out = 64'b0000000000000000000000000000000000000000000000100000000000000000;
+ 6'b010010 : out = 64'b0000000000000000000000000000000000000000000001000000000000000000;
+ 6'b010011 : out = 64'b0000000000000000000000000000000000000000000010000000000000000000;
+ 6'b010100 : out = 64'b0000000000000000000000000000000000000000000100000000000000000000;
+ 6'b010101 : out = 64'b0000000000000000000000000000000000000000001000000000000000000000;
+ 6'b010110 : out = 64'b0000000000000000000000000000000000000000010000000000000000000000;
+ 6'b010111 : out = 64'b0000000000000000000000000000000000000000100000000000000000000000;
+ 6'b011000 : out = 64'b0000000000000000000000000000000000000001000000000000000000000000;
+ 6'b011001 : out = 64'b0000000000000000000000000000000000000010000000000000000000000000;
+ 6'b011010 : out = 64'b0000000000000000000000000000000000000100000000000000000000000000;
+ 6'b011011 : out = 64'b0000000000000000000000000000000000001000000000000000000000000000;
+ 6'b011100 : out = 64'b0000000000000000000000000000000000010000000000000000000000000000;
+ 6'b011101 : out = 64'b0000000000000000000000000000000000100000000000000000000000000000;
+ 6'b011110 : out = 64'b0000000000000000000000000000000001000000000000000000000000000000;
+ 6'b011111 : out = 64'b0000000000000000000000000000000010000000000000000000000000000000;
+
+ 6'b100000 : out = 64'b0000000000000000000000000000000100000000000000000000000000000000;
+ 6'b100001 : out = 64'b0000000000000000000000000000001000000000000000000000000000000000;
+ 6'b100010 : out = 64'b0000000000000000000000000000010000000000000000000000000000000000;
+ 6'b100011 : out = 64'b0000000000000000000000000000100000000000000000000000000000000000;
+ 6'b100100 : out = 64'b0000000000000000000000000001000000000000000000000000000000000000;
+ 6'b100101 : out = 64'b0000000000000000000000000010000000000000000000000000000000000000;
+ 6'b100110 : out = 64'b0000000000000000000000000100000000000000000000000000000000000000;
+ 6'b100111 : out = 64'b0000000000000000000000001000000000000000000000000000000000000000;
+ 6'b101000 : out = 64'b0000000000000000000000010000000000000000000000000000000000000000;
+ 6'b101001 : out = 64'b0000000000000000000000100000000000000000000000000000000000000000;
+ 6'b101010 : out = 64'b0000000000000000000001000000000000000000000000000000000000000000;
+ 6'b101011 : out = 64'b0000000000000000000010000000000000000000000000000000000000000000;
+ 6'b101100 : out = 64'b0000000000000000000100000000000000000000000000000000000000000000;
+ 6'b101101 : out = 64'b0000000000000000001000000000000000000000000000000000000000000000;
+ 6'b101110 : out = 64'b0000000000000000010000000000000000000000000000000000000000000000;
+ 6'b101111 : out = 64'b0000000000000000100000000000000000000000000000000000000000000000;
+ 6'b110000 : out = 64'b0000000000000001000000000000000000000000000000000000000000000000;
+ 6'b110001 : out = 64'b0000000000000010000000000000000000000000000000000000000000000000;
+ 6'b110010 : out = 64'b0000000000000100000000000000000000000000000000000000000000000000;
+ 6'b110011 : out = 64'b0000000000001000000000000000000000000000000000000000000000000000;
+ 6'b110100 : out = 64'b0000000000010000000000000000000000000000000000000000000000000000;
+ 6'b110101 : out = 64'b0000000000100000000000000000000000000000000000000000000000000000;
+ 6'b110110 : out = 64'b0000000001000000000000000000000000000000000000000000000000000000;
+ 6'b110111 : out = 64'b0000000010000000000000000000000000000000000000000000000000000000;
+ 6'b111000 : out = 64'b0000000100000000000000000000000000000000000000000000000000000000;
+ 6'b111001 : out = 64'b0000001000000000000000000000000000000000000000000000000000000000;
+ 6'b111010 : out = 64'b0000010000000000000000000000000000000000000000000000000000000000;
+ 6'b111011 : out = 64'b0000100000000000000000000000000000000000000000000000000000000000;
+ 6'b111100 : out = 64'b0001000000000000000000000000000000000000000000000000000000000000;
+ 6'b111101 : out = 64'b0010000000000000000000000000000000000000000000000000000000000000;
+ 6'b111110 : out = 64'b0100000000000000000000000000000000000000000000000000000000000000;
+ 6'b111111 : out = 64'b1000000000000000000000000000000000000000000000000000000000000000;
+ endcase
+ end
+endmodule
+
diff --git a/tests/hana/test_simulation_inc_16_test.v b/tests/hana/test_simulation_inc_16_test.v
new file mode 100644
index 000000000..7ff42ff50
--- /dev/null
+++ b/tests/hana/test_simulation_inc_16_test.v
@@ -0,0 +1,5 @@
+module test(input [15:0] in, output [15:0] out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_inc_1_test.v b/tests/hana/test_simulation_inc_1_test.v
new file mode 100644
index 000000000..02bec2c27
--- /dev/null
+++ b/tests/hana/test_simulation_inc_1_test.v
@@ -0,0 +1,5 @@
+module test(input in, output out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_inc_2_test.v b/tests/hana/test_simulation_inc_2_test.v
new file mode 100644
index 000000000..b96e05a2d
--- /dev/null
+++ b/tests/hana/test_simulation_inc_2_test.v
@@ -0,0 +1,5 @@
+module test(input [1:0] in, output [1:0] out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_inc_32_test.v b/tests/hana/test_simulation_inc_32_test.v
new file mode 100644
index 000000000..5700d0ce7
--- /dev/null
+++ b/tests/hana/test_simulation_inc_32_test.v
@@ -0,0 +1,5 @@
+module test(input [31:0] in, output [31:0] out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_inc_4_test.v b/tests/hana/test_simulation_inc_4_test.v
new file mode 100644
index 000000000..34940d63e
--- /dev/null
+++ b/tests/hana/test_simulation_inc_4_test.v
@@ -0,0 +1,5 @@
+module test(input [3:0] in, output [3:0] out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_inc_8_test.v b/tests/hana/test_simulation_inc_8_test.v
new file mode 100644
index 000000000..c36d69f07
--- /dev/null
+++ b/tests/hana/test_simulation_inc_8_test.v
@@ -0,0 +1,5 @@
+module test(input [7:0] in, output [7:0] out);
+
+assign out = -in;
+
+endmodule
diff --git a/tests/hana/test_simulation_mod_1_xx.v b/tests/hana/test_simulation_mod_1_xx.v
new file mode 100644
index 000000000..75144a8e5
--- /dev/null
+++ b/tests/hana/test_simulation_mod_1_xx.v
@@ -0,0 +1,13 @@
+module test(in1, in2, out);
+input in1;
+input in2;
+output out;
+
+wire synth_net_0;
+wire synth_net_1;
+BUF synth_BUF_0(.in(synth_net_1), .out(out
+ ));
+DIV1 synth_DIV(.in1(in1), .in2(in2), .rem(synth_net_0), .out(synth_net_1
+ ));
+endmodule
+
diff --git a/tests/hana/test_simulation_mux_16_test.v b/tests/hana/test_simulation_mux_16_test.v
new file mode 100644
index 000000000..de4b6f8e9
--- /dev/null
+++ b/tests/hana/test_simulation_mux_16_test.v
@@ -0,0 +1,22 @@
+module test(input [15:0] in, input [3:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_mux_2_test.v b/tests/hana/test_simulation_mux_2_test.v
new file mode 100644
index 000000000..bc676c70b
--- /dev/null
+++ b/tests/hana/test_simulation_mux_2_test.v
@@ -0,0 +1,8 @@
+module test(input [1:0] in, input select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_mux_32_test.v b/tests/hana/test_simulation_mux_32_test.v
new file mode 100644
index 000000000..16de4d7f7
--- /dev/null
+++ b/tests/hana/test_simulation_mux_32_test.v
@@ -0,0 +1,39 @@
+module test(input [31:0] in, input [4:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ 16: out = in[16];
+ 17: out = in[17];
+ 18: out = in[18];
+ 19: out = in[19];
+ 20: out = in[20];
+ 21: out = in[21];
+ 22: out = in[22];
+ 23: out = in[23];
+ 24: out = in[24];
+ 25: out = in[25];
+ 26: out = in[26];
+ 27: out = in[27];
+ 28: out = in[28];
+ 29: out = in[29];
+ 30: out = in[30];
+ 31: out = in[31];
+ endcase
+endmodule
+
diff --git a/tests/hana/test_simulation_mux_4_test.v b/tests/hana/test_simulation_mux_4_test.v
new file mode 100644
index 000000000..6a112c6a9
--- /dev/null
+++ b/tests/hana/test_simulation_mux_4_test.v
@@ -0,0 +1,10 @@
+module test(input [3:0] in, input [1:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_mux_64_test.v b/tests/hana/test_simulation_mux_64_test.v
new file mode 100644
index 000000000..420239c6e
--- /dev/null
+++ b/tests/hana/test_simulation_mux_64_test.v
@@ -0,0 +1,71 @@
+module test(input [63:0] in, input [5:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ 16: out = in[16];
+ 17: out = in[17];
+ 18: out = in[18];
+ 19: out = in[19];
+ 20: out = in[20];
+ 21: out = in[21];
+ 22: out = in[22];
+ 23: out = in[23];
+ 24: out = in[24];
+ 25: out = in[25];
+ 26: out = in[26];
+ 27: out = in[27];
+ 28: out = in[28];
+ 29: out = in[29];
+ 30: out = in[30];
+ 31: out = in[31];
+ 32: out = in[32];
+ 33: out = in[33];
+ 34: out = in[34];
+ 35: out = in[35];
+ 36: out = in[36];
+ 37: out = in[37];
+ 38: out = in[38];
+ 39: out = in[39];
+ 40: out = in[40];
+ 41: out = in[41];
+ 42: out = in[42];
+ 43: out = in[43];
+ 44: out = in[44];
+ 45: out = in[45];
+ 46: out = in[46];
+ 47: out = in[47];
+ 48: out = in[48];
+ 49: out = in[49];
+ 50: out = in[50];
+ 51: out = in[51];
+ 52: out = in[52];
+ 53: out = in[53];
+ 54: out = in[54];
+ 55: out = in[55];
+ 56: out = in[56];
+ 57: out = in[57];
+ 58: out = in[58];
+ 59: out = in[59];
+ 60: out = in[60];
+ 61: out = in[61];
+ 62: out = in[62];
+ 63: out = in[63];
+ endcase
+endmodule
+
diff --git a/tests/hana/test_simulation_mux_8_test.v b/tests/hana/test_simulation_mux_8_test.v
new file mode 100644
index 000000000..f53a2c570
--- /dev/null
+++ b/tests/hana/test_simulation_mux_8_test.v
@@ -0,0 +1,14 @@
+module test(input [7:0] in, input [2:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_nand_1_test.v b/tests/hana/test_simulation_nand_1_test.v
new file mode 100644
index 000000000..d8f34ee1f
--- /dev/null
+++ b/tests/hana/test_simulation_nand_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = ~(in[0] & in[1]);
+endmodule
diff --git a/tests/hana/test_simulation_nand_3_test.v b/tests/hana/test_simulation_nand_3_test.v
new file mode 100644
index 000000000..8926cebb9
--- /dev/null
+++ b/tests/hana/test_simulation_nand_3_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = !(in[0] & in[1] & in[2]);
+endmodule
diff --git a/tests/hana/test_simulation_nand_4_test.v b/tests/hana/test_simulation_nand_4_test.v
new file mode 100644
index 000000000..703a2de45
--- /dev/null
+++ b/tests/hana/test_simulation_nand_4_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = ~(in[0] && in[1] && in[2]);
+endmodule
diff --git a/tests/hana/test_simulation_nand_5_test.v b/tests/hana/test_simulation_nand_5_test.v
new file mode 100644
index 000000000..adef3c903
--- /dev/null
+++ b/tests/hana/test_simulation_nand_5_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = !(in[0] & in[1] & in[2] & in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_nand_6_test.v b/tests/hana/test_simulation_nand_6_test.v
new file mode 100644
index 000000000..a2136f211
--- /dev/null
+++ b/tests/hana/test_simulation_nand_6_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = !(in[0] && in[1] && in[2] && in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_nor_1_test.v b/tests/hana/test_simulation_nor_1_test.v
new file mode 100644
index 000000000..df4e8bfaa
--- /dev/null
+++ b/tests/hana/test_simulation_nor_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = ~(in[0] | in[1]);
+endmodule
diff --git a/tests/hana/test_simulation_nor_2_test.v b/tests/hana/test_simulation_nor_2_test.v
new file mode 100644
index 000000000..2cfffc45f
--- /dev/null
+++ b/tests/hana/test_simulation_nor_2_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = ~(in[0] | in[1] | in[2]);
+endmodule
diff --git a/tests/hana/test_simulation_nor_3_test.v b/tests/hana/test_simulation_nor_3_test.v
new file mode 100644
index 000000000..9f1ef8fec
--- /dev/null
+++ b/tests/hana/test_simulation_nor_3_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = ~(in[0] | in[1] | in[2] | in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_nor_4_test.v b/tests/hana/test_simulation_nor_4_test.v
new file mode 100644
index 000000000..d8e685049
--- /dev/null
+++ b/tests/hana/test_simulation_nor_4_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+nor mynor(out, in[0], in[1], in[2], in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_opt_constprop_contassign_1_test.v b/tests/hana/test_simulation_opt_constprop_contassign_1_test.v
new file mode 100644
index 000000000..a39b58b42
--- /dev/null
+++ b/tests/hana/test_simulation_opt_constprop_contassign_1_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = 1'b1;
+endmodule
diff --git a/tests/hana/test_simulation_or_1_test.v b/tests/hana/test_simulation_or_1_test.v
new file mode 100644
index 000000000..bdfffd3d7
--- /dev/null
+++ b/tests/hana/test_simulation_or_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = in[0] | in[1];
+endmodule
diff --git a/tests/hana/test_simulation_or_2_test.v b/tests/hana/test_simulation_or_2_test.v
new file mode 100644
index 000000000..291c8c765
--- /dev/null
+++ b/tests/hana/test_simulation_or_2_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = in[0] || in[1];
+endmodule
diff --git a/tests/hana/test_simulation_or_3_test.v b/tests/hana/test_simulation_or_3_test.v
new file mode 100644
index 000000000..ad00c7084
--- /dev/null
+++ b/tests/hana/test_simulation_or_3_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = in[0] | in[1] | in[2];
+endmodule
diff --git a/tests/hana/test_simulation_or_4_test.v b/tests/hana/test_simulation_or_4_test.v
new file mode 100644
index 000000000..2ec57fa93
--- /dev/null
+++ b/tests/hana/test_simulation_or_4_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = in[0] || in[1] || in[2];
+endmodule
diff --git a/tests/hana/test_simulation_or_5_test.v b/tests/hana/test_simulation_or_5_test.v
new file mode 100644
index 000000000..f6a2d14d4
--- /dev/null
+++ b/tests/hana/test_simulation_or_5_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = in[0] | in[1] | in[2] | in[3];
+endmodule
diff --git a/tests/hana/test_simulation_or_6_test.v b/tests/hana/test_simulation_or_6_test.v
new file mode 100644
index 000000000..ecd85c363
--- /dev/null
+++ b/tests/hana/test_simulation_or_6_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = in[0] || in[1] || in[2] || in[3];
+endmodule
diff --git a/tests/hana/test_simulation_seq_ff_1_test.v b/tests/hana/test_simulation_seq_ff_1_test.v
new file mode 100644
index 000000000..5aac49c03
--- /dev/null
+++ b/tests/hana/test_simulation_seq_ff_1_test.v
@@ -0,0 +1,4 @@
+module test(input in, input clk, output reg out);
+always @(posedge clk)
+ out <= in;
+endmodule
diff --git a/tests/hana/test_simulation_seq_ff_2_test.v b/tests/hana/test_simulation_seq_ff_2_test.v
new file mode 100644
index 000000000..f1d2b7b42
--- /dev/null
+++ b/tests/hana/test_simulation_seq_ff_2_test.v
@@ -0,0 +1,4 @@
+module test(input in, input clk, output reg out);
+always @(negedge clk)
+ out <= in;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_left_16_test.v b/tests/hana/test_simulation_shifter_left_16_test.v
new file mode 100644
index 000000000..a57dac499
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_left_16_test.v
@@ -0,0 +1,4 @@
+module test(input [15:0] IN, input [4:0] SHIFT, output [15:0] OUT);
+
+assign OUT = IN << SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_left_32_test.v b/tests/hana/test_simulation_shifter_left_32_test.v
new file mode 100644
index 000000000..672938ace
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_left_32_test.v
@@ -0,0 +1,4 @@
+module test(input [31:0] IN, input [5:0] SHIFT, output [31:0] OUT);
+
+assign OUT = IN << SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_left_4_test.v b/tests/hana/test_simulation_shifter_left_4_test.v
new file mode 100644
index 000000000..c525401f1
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_left_4_test.v
@@ -0,0 +1,4 @@
+module test(input [3:0] IN, input [2:0] SHIFT, output [3:0] OUT);
+
+assign OUT = IN << SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_left_64_test.v b/tests/hana/test_simulation_shifter_left_64_test.v
new file mode 100644
index 000000000..276a7c5a8
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_left_64_test.v
@@ -0,0 +1,4 @@
+module test(input [63:0] IN, input [6:0] SHIFT, output [63:0] OUT);
+
+assign OUT = IN << SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_left_8_test.v b/tests/hana/test_simulation_shifter_left_8_test.v
new file mode 100644
index 000000000..c17277001
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_left_8_test.v
@@ -0,0 +1,4 @@
+module test(input [7:0] IN, input [3:0] SHIFT, output [7:0] OUT);
+
+assign OUT = IN << SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_right_16_test.v b/tests/hana/test_simulation_shifter_right_16_test.v
new file mode 100644
index 000000000..6152adc06
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_right_16_test.v
@@ -0,0 +1,4 @@
+module test(input [15:0] IN, input [4:0] SHIFT, output [15:0] OUT);
+
+assign OUT = IN >> SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_right_32_test.v b/tests/hana/test_simulation_shifter_right_32_test.v
new file mode 100644
index 000000000..e910cdd6d
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_right_32_test.v
@@ -0,0 +1,4 @@
+module test(input [31:0] IN, input [5:0] SHIFT, output [31:0] OUT);
+
+assign OUT = IN >> SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_right_4_test.v b/tests/hana/test_simulation_shifter_right_4_test.v
new file mode 100644
index 000000000..608c196de
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_right_4_test.v
@@ -0,0 +1,4 @@
+module test(input [3:0] IN, input [2:0] SHIFT, output [3:0] OUT);
+
+assign OUT = IN >> SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_right_64_test.v b/tests/hana/test_simulation_shifter_right_64_test.v
new file mode 100644
index 000000000..c26d5938e
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_right_64_test.v
@@ -0,0 +1,4 @@
+module test(input [63:0] IN, input [6:0] SHIFT, output [63:0] OUT);
+
+assign OUT = IN >> SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_shifter_right_8_test.v b/tests/hana/test_simulation_shifter_right_8_test.v
new file mode 100644
index 000000000..a91c594e5
--- /dev/null
+++ b/tests/hana/test_simulation_shifter_right_8_test.v
@@ -0,0 +1,4 @@
+module test(input [7:0] IN, input [3:0] SHIFT, output [7:0] OUT);
+
+assign OUT = IN >> SHIFT;
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_10_test.v b/tests/hana/test_simulation_sop_basic_10_test.v
new file mode 100644
index 000000000..bc676c70b
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_10_test.v
@@ -0,0 +1,8 @@
+module test(input [1:0] in, input select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_11_test.v b/tests/hana/test_simulation_sop_basic_11_test.v
new file mode 100644
index 000000000..6a112c6a9
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_11_test.v
@@ -0,0 +1,10 @@
+module test(input [3:0] in, input [1:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_12_test.v b/tests/hana/test_simulation_sop_basic_12_test.v
new file mode 100644
index 000000000..f53a2c570
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_12_test.v
@@ -0,0 +1,14 @@
+module test(input [7:0] in, input [2:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_18_test.v b/tests/hana/test_simulation_sop_basic_18_test.v
new file mode 100644
index 000000000..03fc35b32
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_18_test.v
@@ -0,0 +1,5 @@
+module test(input [7:0] in, output out);
+
+assign out = ~^in;
+
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_3_test.v b/tests/hana/test_simulation_sop_basic_3_test.v
new file mode 100644
index 000000000..81759c25d
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_3_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = ~in;
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_7_test.v b/tests/hana/test_simulation_sop_basic_7_test.v
new file mode 100644
index 000000000..e9bb7f617
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_7_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = in;
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_8_test.v b/tests/hana/test_simulation_sop_basic_8_test.v
new file mode 100644
index 000000000..a51ead0b2
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_8_test.v
@@ -0,0 +1,3 @@
+module test(output out);
+assign out = 1'b0;
+endmodule
diff --git a/tests/hana/test_simulation_sop_basic_9_test.v b/tests/hana/test_simulation_sop_basic_9_test.v
new file mode 100644
index 000000000..81759c25d
--- /dev/null
+++ b/tests/hana/test_simulation_sop_basic_9_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = ~in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_and_19_tech.v b/tests/hana/test_simulation_techmap_and_19_tech.v
new file mode 100644
index 000000000..2491087cd
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_and_19_tech.v
@@ -0,0 +1,7 @@
+module TECH_AND18(input [17:0] in, output out);
+assign out = &in;
+endmodule
+
+module TECH_AND4(input [3:0] in, output out);
+assign out = &in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_and_5_tech.v b/tests/hana/test_simulation_techmap_and_5_tech.v
new file mode 100644
index 000000000..6ec6a61c4
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_and_5_tech.v
@@ -0,0 +1,3 @@
+module TECH_AND5(input [4:0] in, output out);
+assign out = &in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_buf_test.v b/tests/hana/test_simulation_techmap_buf_test.v
new file mode 100644
index 000000000..e9bb7f617
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_buf_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_inv_test.v b/tests/hana/test_simulation_techmap_inv_test.v
new file mode 100644
index 000000000..81759c25d
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_inv_test.v
@@ -0,0 +1,3 @@
+module test(input in, output out);
+assign out = ~in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_mux_0_test.v b/tests/hana/test_simulation_techmap_mux_0_test.v
new file mode 100644
index 000000000..bc676c70b
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_mux_0_test.v
@@ -0,0 +1,8 @@
+module test(input [1:0] in, input select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_techmap_mux_128_test.v b/tests/hana/test_simulation_techmap_mux_128_test.v
new file mode 100644
index 000000000..544c016a8
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_mux_128_test.v
@@ -0,0 +1,134 @@
+module test(input [127:0] in, input [6:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ 8: out = in[8];
+ 9: out = in[9];
+ 10: out = in[10];
+ 11: out = in[11];
+ 12: out = in[12];
+ 13: out = in[13];
+ 14: out = in[14];
+ 15: out = in[15];
+ 16: out = in[16];
+ 17: out = in[17];
+ 18: out = in[18];
+ 19: out = in[19];
+ 20: out = in[20];
+ 21: out = in[21];
+ 22: out = in[22];
+ 23: out = in[23];
+ 24: out = in[24];
+ 25: out = in[25];
+ 26: out = in[26];
+ 27: out = in[27];
+ 28: out = in[28];
+ 29: out = in[29];
+ 30: out = in[30];
+ 31: out = in[31];
+ 32: out = in[32];
+ 33: out = in[33];
+ 34: out = in[34];
+ 35: out = in[35];
+ 36: out = in[36];
+ 37: out = in[37];
+ 38: out = in[38];
+ 39: out = in[39];
+ 40: out = in[40];
+ 41: out = in[41];
+ 42: out = in[42];
+ 43: out = in[43];
+ 44: out = in[44];
+ 45: out = in[45];
+ 46: out = in[46];
+ 47: out = in[47];
+ 48: out = in[48];
+ 49: out = in[49];
+ 50: out = in[50];
+ 51: out = in[51];
+ 52: out = in[52];
+ 53: out = in[53];
+ 54: out = in[54];
+ 55: out = in[55];
+ 56: out = in[56];
+ 57: out = in[57];
+ 58: out = in[58];
+ 59: out = in[59];
+ 60: out = in[60];
+ 61: out = in[61];
+ 62: out = in[62];
+ 63: out = in[63];
+ 64: out = in[64];
+ 65: out = in[65];
+ 66: out = in[66];
+ 67: out = in[67];
+ 68: out = in[68];
+ 69: out = in[69];
+ 70: out = in[70];
+ 71: out = in[71];
+ 72: out = in[72];
+ 73: out = in[73];
+ 74: out = in[74];
+ 75: out = in[75];
+ 76: out = in[76];
+ 77: out = in[77];
+ 78: out = in[78];
+ 79: out = in[79];
+ 80: out = in[80];
+ 81: out = in[81];
+ 82: out = in[82];
+ 83: out = in[83];
+ 84: out = in[84];
+ 85: out = in[85];
+ 86: out = in[86];
+ 87: out = in[87];
+ 88: out = in[88];
+ 89: out = in[89];
+ 90: out = in[90];
+ 91: out = in[91];
+ 92: out = in[92];
+ 93: out = in[93];
+ 94: out = in[94];
+ 95: out = in[95];
+ 96: out = in[96];
+ 97: out = in[97];
+ 98: out = in[98];
+ 99: out = in[99];
+ 100: out = in[100];
+ 101: out = in[101];
+ 102: out = in[102];
+ 103: out = in[103];
+ 104: out = in[104];
+ 105: out = in[105];
+ 106: out = in[106];
+ 107: out = in[107];
+ 108: out = in[108];
+ 109: out = in[109];
+ 110: out = in[110];
+ 111: out = in[111];
+ 112: out = in[112];
+ 113: out = in[113];
+ 114: out = in[114];
+ 115: out = in[115];
+ 116: out = in[116];
+ 117: out = in[117];
+ 118: out = in[118];
+ 119: out = in[119];
+ 120: out = in[120];
+ 121: out = in[121];
+ 122: out = in[122];
+ 123: out = in[123];
+ 124: out = in[124];
+ 125: out = in[125];
+ 126: out = in[126];
+ 127: out = in[127];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_techmap_mux_8_test.v b/tests/hana/test_simulation_techmap_mux_8_test.v
new file mode 100644
index 000000000..f53a2c570
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_mux_8_test.v
@@ -0,0 +1,14 @@
+module test(input [7:0] in, input [2:0] select, output reg out);
+
+always @( in or select)
+ case (select)
+ 0: out = in[0];
+ 1: out = in[1];
+ 2: out = in[2];
+ 3: out = in[3];
+ 4: out = in[4];
+ 5: out = in[5];
+ 6: out = in[6];
+ 7: out = in[7];
+ endcase
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nand_19_tech.v b/tests/hana/test_simulation_techmap_nand_19_tech.v
new file mode 100644
index 000000000..6a119e1ee
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nand_19_tech.v
@@ -0,0 +1,11 @@
+module TECH_NAND18(input [17:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND4(input [3:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND2(input [1:0] in, output out);
+assign out = ~(&in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nand_2_tech.v b/tests/hana/test_simulation_techmap_nand_2_tech.v
new file mode 100644
index 000000000..6a119e1ee
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nand_2_tech.v
@@ -0,0 +1,11 @@
+module TECH_NAND18(input [17:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND4(input [3:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND2(input [1:0] in, output out);
+assign out = ~(&in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nand_5_tech.v b/tests/hana/test_simulation_techmap_nand_5_tech.v
new file mode 100644
index 000000000..6a119e1ee
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nand_5_tech.v
@@ -0,0 +1,11 @@
+module TECH_NAND18(input [17:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND4(input [3:0] in, output out);
+assign out = ~(&in);
+endmodule
+
+module TECH_NAND2(input [1:0] in, output out);
+assign out = ~(&in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nor_19_tech.v b/tests/hana/test_simulation_techmap_nor_19_tech.v
new file mode 100644
index 000000000..89fb2c7e8
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nor_19_tech.v
@@ -0,0 +1,11 @@
+module TECH_NOR18(input [17:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR4(input [3:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR2(input [1:0] in, output out);
+assign out = ~(|in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nor_2_tech.v b/tests/hana/test_simulation_techmap_nor_2_tech.v
new file mode 100644
index 000000000..89fb2c7e8
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nor_2_tech.v
@@ -0,0 +1,11 @@
+module TECH_NOR18(input [17:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR4(input [3:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR2(input [1:0] in, output out);
+assign out = ~(|in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_nor_5_tech.v b/tests/hana/test_simulation_techmap_nor_5_tech.v
new file mode 100644
index 000000000..89fb2c7e8
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_nor_5_tech.v
@@ -0,0 +1,11 @@
+module TECH_NOR18(input [17:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR4(input [3:0] in, output out);
+assign out = ~(|in);
+endmodule
+
+module TECH_NOR2(input [1:0] in, output out);
+assign out = ~(|in);
+endmodule
diff --git a/tests/hana/test_simulation_techmap_or_19_tech.v b/tests/hana/test_simulation_techmap_or_19_tech.v
new file mode 100644
index 000000000..745d7b71c
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_or_19_tech.v
@@ -0,0 +1,7 @@
+module TECH_OR18(input [17:0] in, output out);
+assign out = |in;
+endmodule
+
+module TECH_OR4(input [3:0] in, output out);
+assign out = |in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_or_5_tech.v b/tests/hana/test_simulation_techmap_or_5_tech.v
new file mode 100644
index 000000000..05c38b670
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_or_5_tech.v
@@ -0,0 +1,3 @@
+module TECH_OR5(input [4:0] in, output out);
+assign out = |in;
+endmodule
diff --git a/tests/hana/test_simulation_techmap_xnor_2_tech.v b/tests/hana/test_simulation_techmap_xnor_2_tech.v
new file mode 100644
index 000000000..4eb05683f
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_xnor_2_tech.v
@@ -0,0 +1,6 @@
+module TECH_XOR5(input [4:0] in, output out);
+assign out = in[0] ^ in[1] ^ in[2] ^ in[3] ^ in[4];
+endmodule
+module TECH_XOR2(input [1:0] in, output out);
+assign out = in[0] ^ in[1];
+endmodule
diff --git a/tests/hana/test_simulation_techmap_xnor_5_tech.v b/tests/hana/test_simulation_techmap_xnor_5_tech.v
new file mode 100644
index 000000000..4eb05683f
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_xnor_5_tech.v
@@ -0,0 +1,6 @@
+module TECH_XOR5(input [4:0] in, output out);
+assign out = in[0] ^ in[1] ^ in[2] ^ in[3] ^ in[4];
+endmodule
+module TECH_XOR2(input [1:0] in, output out);
+assign out = in[0] ^ in[1];
+endmodule
diff --git a/tests/hana/test_simulation_techmap_xor_19_tech.v b/tests/hana/test_simulation_techmap_xor_19_tech.v
new file mode 100644
index 000000000..2042a0ad0
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_xor_19_tech.v
@@ -0,0 +1,3 @@
+module TECH_XOR2(input [1:0] in, output out);
+assign out = in[0] ^ in[1];
+endmodule
diff --git a/tests/hana/test_simulation_techmap_xor_2_tech.v b/tests/hana/test_simulation_techmap_xor_2_tech.v
new file mode 100644
index 000000000..4eb05683f
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_xor_2_tech.v
@@ -0,0 +1,6 @@
+module TECH_XOR5(input [4:0] in, output out);
+assign out = in[0] ^ in[1] ^ in[2] ^ in[3] ^ in[4];
+endmodule
+module TECH_XOR2(input [1:0] in, output out);
+assign out = in[0] ^ in[1];
+endmodule
diff --git a/tests/hana/test_simulation_techmap_xor_5_tech.v b/tests/hana/test_simulation_techmap_xor_5_tech.v
new file mode 100644
index 000000000..4eb05683f
--- /dev/null
+++ b/tests/hana/test_simulation_techmap_xor_5_tech.v
@@ -0,0 +1,6 @@
+module TECH_XOR5(input [4:0] in, output out);
+assign out = in[0] ^ in[1] ^ in[2] ^ in[3] ^ in[4];
+endmodule
+module TECH_XOR2(input [1:0] in, output out);
+assign out = in[0] ^ in[1];
+endmodule
diff --git a/tests/hana/test_simulation_tribuf_2_test.v b/tests/hana/test_simulation_tribuf_2_test.v
new file mode 100644
index 000000000..1e82aaf04
--- /dev/null
+++ b/tests/hana/test_simulation_tribuf_2_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, input enable, output [1:0] out);
+assign out = enable ? in : 2'bzz;
+endmodule
diff --git a/tests/hana/test_simulation_xnor_1_test.v b/tests/hana/test_simulation_xnor_1_test.v
new file mode 100644
index 000000000..adc6ae5ca
--- /dev/null
+++ b/tests/hana/test_simulation_xnor_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = ~(in[0] ^ in[1]);
+endmodule
diff --git a/tests/hana/test_simulation_xnor_2_test.v b/tests/hana/test_simulation_xnor_2_test.v
new file mode 100644
index 000000000..701bcc775
--- /dev/null
+++ b/tests/hana/test_simulation_xnor_2_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = ~(in[0] ^ in[1] ^ in[2]);
+endmodule
diff --git a/tests/hana/test_simulation_xnor_3_test.v b/tests/hana/test_simulation_xnor_3_test.v
new file mode 100644
index 000000000..a8c87cc62
--- /dev/null
+++ b/tests/hana/test_simulation_xnor_3_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = ~(in[0] ^ in[1] ^ in[2] ^ in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_xnor_4_test.v b/tests/hana/test_simulation_xnor_4_test.v
new file mode 100644
index 000000000..fa671ff93
--- /dev/null
+++ b/tests/hana/test_simulation_xnor_4_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+xnor myxnor(out, in[0], in[1], in[2], in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_xor_1_test.v b/tests/hana/test_simulation_xor_1_test.v
new file mode 100644
index 000000000..f6447f817
--- /dev/null
+++ b/tests/hana/test_simulation_xor_1_test.v
@@ -0,0 +1,3 @@
+module test(input [1:0] in, output out);
+assign out = (in[0] ^ in[1]);
+endmodule
diff --git a/tests/hana/test_simulation_xor_2_test.v b/tests/hana/test_simulation_xor_2_test.v
new file mode 100644
index 000000000..d94081df7
--- /dev/null
+++ b/tests/hana/test_simulation_xor_2_test.v
@@ -0,0 +1,3 @@
+module test(input [2:0] in, output out);
+assign out = (in[0] ^ in[1] ^ in[2]);
+endmodule
diff --git a/tests/hana/test_simulation_xor_3_test.v b/tests/hana/test_simulation_xor_3_test.v
new file mode 100644
index 000000000..cfa13187f
--- /dev/null
+++ b/tests/hana/test_simulation_xor_3_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+assign out = (in[0] ^ in[1] ^ in[2] ^ in[3]);
+endmodule
diff --git a/tests/hana/test_simulation_xor_4_test.v b/tests/hana/test_simulation_xor_4_test.v
new file mode 100644
index 000000000..be6cab633
--- /dev/null
+++ b/tests/hana/test_simulation_xor_4_test.v
@@ -0,0 +1,3 @@
+module test(input [3:0] in, output out);
+xor myxor(out, in[0], in[1], in[2], in[3]);
+endmodule