diff --git a/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.blif b/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.blif new file mode 100644 index 000000000..317233080 --- /dev/null +++ b/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.blif @@ -0,0 +1,10 @@ +.model discrete_dffn +.inputs clk_ni d_i +.outputs d_o + +.names clk_ni int_clk +0 1 + +.subckt dff D=d_i Q=d_o C=int_clk + +.end diff --git a/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.v b/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.v new file mode 100644 index 000000000..fce53a8cd --- /dev/null +++ b/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.v @@ -0,0 +1,23 @@ +///////////////////////////////////////// +// Functionality: A FF with inverted clk. This is useful to test if an FPGA supports clock generation internally or an FPGA supports negative-edged clock +// Author: Xifan Tang +//////////////////////////////////////// +`timescale 1ns / 1ps + +module discrete_dffn( + clk_ni, + d_i, + d_o); +input wire clk_ni; +input wire d_i; +output reg d_o; + +wire int_clk; + +assign int_clk = ~clk_ni; + +always @(posedge int_clk) begin + d_o <= d_i; +end + +endmodule diff --git a/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_pin_constraints.xml b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_pin_constraints.xml new file mode 100644 index 000000000..e0aeb4cd2 --- /dev/null +++ b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_pin_constraints.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_repack_design_constraints.xml b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_repack_design_constraints.xml new file mode 100644 index 000000000..a84216e64 --- /dev/null +++ b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/dffn_repack_design_constraints.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/task.conf b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/task.conf index 6e4b75067..5bffd2c6a 100644 --- a/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/task.conf +++ b/openfpga_flow/tasks/basic_tests/k4_series/k4n4_clk_gen/config/task.conf @@ -13,7 +13,8 @@ power_analysis = false spice_output=false verilog_output=true timeout_each_job = 3*60 -fpga_flow=yosys_vpr +#fpga_flow=yosys_vpr +fpga_flow=vpr_blif [OpenFPGA_SHELL] openfpga_shell_template=${PATH:OPENFPGA_PATH}/openfpga_flow/openfpga_shell_scripts/local_clk_gen_example_script.openfpga @@ -25,7 +26,8 @@ openfpga_repack_design_constraint_file=${PATH:TASK_DIR}/config/repack_design_con arch0=${PATH:OPENFPGA_PATH}/openfpga_flow/vpr_arch/k4_frac_N4_tileable_fracff_localClkGen_40nm.xml [BENCHMARKS] -bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/clk_divider/clk_divider.v +bench0=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.blif +#bench1=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/clk_divider/clk_divider.v [SYNTHESIS_PARAM] # Yosys script parameters @@ -35,10 +37,15 @@ bench_read_verilog_options_common = -nolatches bench_yosys_common=${PATH:OPENFPGA_PATH}/openfpga_flow/misc/ys_tmpl_yosys_vpr_dff_flow.ys bench_yosys_rewrite_common=${PATH:OPENFPGA_PATH}/openfpga_flow/misc/ys_tmpl_yosys_vpr_flow_with_rewrite.ys;${PATH:OPENFPGA_PATH}/openfpga_flow/misc/ys_tmpl_rewrite_flow.ys -bench0_top = clk_divider -bench0_openfpga_pin_constraints_file = ${PATH:TASK_DIR}/config/pin_constraints.xml +bench0_top = discrete_dffn +bench0_verilog=${PATH:OPENFPGA_PATH}/openfpga_flow/benchmarks/micro_benchmark/discrete_dffn/discrete_dffn.v +bench0_openfpga_pin_constraints_file = ${PATH:TASK_DIR}/config/dffn_pin_constraints.xml +bench0_openfpga_repack_design_constraint_file=${PATH:TASK_DIR}/config/dffn_repack_design_constraints.xml + +#bench1_top = clk_divider +#bench1_openfpga_pin_constraints_file = ${PATH:TASK_DIR}/config/pin_constraints.xml [SCRIPT_PARAM_MIN_ROUTE_CHAN_WIDTH] # FIXME: Enable this once VPR can accept clock routing for specific clock signals -#end_flow_with_test= -#vpr_fpga_verilog_formal_verification_top_netlist= +end_flow_with_test= +vpr_fpga_verilog_formal_verification_top_netlist=