diff --git a/.gitignore b/.gitignore index 700239f3e..c01ccb392 100644 --- a/.gitignore +++ b/.gitignore @@ -32,7 +32,7 @@ testsBP/*/*/*.elf* testsBP/*/OBJ/* testsBP/*/*.a tests/wally-riscv-arch-test/riscv-test-suite/*/I/*/* -tests/riscof/riscof_work*/* +tests/riscof/riscof_work/ tests/riscof/config32.ini tests/riscof/config64.ini tests/linux-testgen/linux-testvectors/* diff --git a/benchmarks/embench/Makefile b/benchmarks/embench/Makefile index 3d1680585..255ea8be5 100644 --- a/benchmarks/embench/Makefile +++ b/benchmarks/embench/Makefile @@ -4,20 +4,29 @@ embench_dir = ../../addins/embench-iot -all: sim size +all: build sim size allClean: clean all build: buildspeed buildsize +buildspeed: build_speedopt_speed build_sizeopt_speed +buildsize: build_speedopt_size build_sizeopt_size -# uses the build_all.py python file to build the tests in addins/embench-iot/bd_speed/ optimized for speed -buildspeed: - $(embench_dir)/build_all.py --builddir=bd_speed --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/crt0.S" --cflags="-O2 -nostartfiles" - find $(embench_dir)/bd_speed/ -type f ! -name "*.*" | while read f; do cp "$$f" "$$f.elf"; done +# uses the build_all.py python file to build the tests in addins/embench-iot/bd_speed/ optimized for speed and size +build_speedopt_speed: + $(embench_dir)/build_all.py --builddir=bd_speedopt_speed --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/crt0.S" --cflags="-O2 -nostartfiles" + find $(embench_dir)/bd_speedopt_speed/ -type f ! -name "*.*" | while read f; do cp "$$f" "$$f.elf"; done -# uses the build_all.py python file to build the tests in addins/embench-iot/bd_speed/ optimized for size -buildsize: - $(embench_dir)/build_all.py --builddir=bd_size --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostdlib -nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/dummy.S" --cflags="-Os -msave-restore" --dummy-libs="libgcc libm libc crt0" +build_sizeopt_speed: + $(embench_dir)/build_all.py --builddir=bd_sizeopt_speed --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/crt0.S" --cflags="-Os -nostartfiles" + find $(embench_dir)/bd_sizeopt_speed/ -type f ! -name "*.*" | while read f; do cp "$$f" "$$f.elf"; done + +# uses the build_all.py python file to build the tests in addins/embench-iot/bd_speed/ optimized for speed and size +build_speedopt_size: + $(embench_dir)/build_all.py --builddir=bd_speedopt_size --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostdlib -nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/dummy.S" --cflags="-O2 -msave-restore" --dummy-libs="libgcc libm libc crt0" + +build_sizeopt_size: + $(embench_dir)/build_all.py --builddir=bd_sizeopt_size --arch riscv32 --chip generic --board rv32wallyverilog --ldflags="-nostdlib -nostartfiles ../../../config/riscv32/boards/rv32wallyverilog/startup/dummy.S" --cflags="-Os -msave-restore" --dummy-libs="libgcc libm libc crt0" # builds dependencies, then launches modelsim and finally runs python wrapper script to present results sim: modelsim_build_memfile modelsim_run speed @@ -28,35 +37,37 @@ modelsim_run: cd ../../benchmarks/embench/ # builds the objdump based on the compiled c elf files -objdump: buildspeed - find $(embench_dir)/bd_speed/ -type f -name "*.elf" | while read f; do riscv64-unknown-elf-objdump -S -D "$$f" > "$$f.objdump"; done +objdump: + find $(embench_dir)/bd_*_speed/ -type f -name "*.elf" | while read f; do riscv64-unknown-elf-objdump -S -D "$$f" > "$$f.objdump"; done # build memfiles, objdump.lab and objdump.addr files modelsim_build_memfile: objdump - find $(embench_dir)/bd_speed/ -type f -name "*.elf" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 32 --input "$$f" --output "$$f.memfile"; done - find $(embench_dir)/bd_speed/ -type f -name "*.elf.objdump" | while read f; do extractFunctionRadix.sh $$f; done + find $(embench_dir)/bd_*_speed/ -type f -name "*.elf" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 32 --input "$$f" --output "$$f.memfile"; done + find $(embench_dir)/bd_*_speed/ -type f -name "*.elf.objdump" | while read f; do extractFunctionRadix.sh $$f; done # builds the tests for speed, runs them on spike and then launches python script to present results # note that the speed python script benchmark_speed.py can get confused if there's both a .output file created from spike and modelsim # you'll need to manually remove one of the two .output files, or run make clean -spike: buildspeed objdump spike_run speed +spike: buildspeed spike_run speed # command to run spike on all of the benchmarks spike_run: - find $(embench_dir)/bd_speed/ -type f -name "*.elf" | while read f; do spike --isa=rv32imac +signature=$$f.spike.output +signature-granularity=4 $$f; done + find $(embench_dir)/bd_*opt_speed/ -type f -name "*.elf" | while read f; do spike --isa=rv32imac +signature=$$f.spike.output +signature-granularity=4 $$f; done # python wrapper to present results of embench size benchmark size: buildsize - $(embench_dir)/benchmark_size.py --builddir=bd_size --json-output > wallySize.json + $(embench_dir)/benchmark_size.py --builddir=bd_speedopt_size --json-output > wallySpeedOpt_size.json + $(embench_dir)/benchmark_size.py --builddir=bd_sizeopt_size --json-output > wallySizeOpt_size.json # python wrapper to present results of embench speed benchmark speed: - $(embench_dir)/benchmark_speed.py --builddir=bd_speed --target-module run_wally --cpu-mhz=1 --json-output > wallySpeed.json + $(embench_dir)/benchmark_speed.py --builddir=bd_sizeopt_speed --target-module run_wally --cpu-mhz=1 --json-output > wallySizeOpt_speed.json + $(embench_dir)/benchmark_speed.py --builddir=bd_speedopt_speed --target-module run_wally --cpu-mhz=1 --json-output > wallySpeedOpt_speed.json # deletes all files clean: - rm -rf $(embench_dir)/bd_speed/ - rm -rf $(embench_dir)/bd_size/ + rm -rf $(embench_dir)/bd_*_speed/ + rm -rf $(embench_dir)/bd_*_size/ allclean: clean rm -rf $(embench_dir)/logs/ diff --git a/benchmarks/graphGen.py b/benchmarks/graphGen.py index 7c16a4577..de8b70ce9 100755 --- a/benchmarks/graphGen.py +++ b/benchmarks/graphGen.py @@ -3,9 +3,8 @@ import subprocess import sys import json import plotly.graph_objects as go +from plotly.subplots import make_subplots -coremarkData = {} -embenchData = {} debug = True def loadCoremark(): @@ -21,61 +20,85 @@ def loadCoremark(): if (debug): print(coremarkData) return coremarkData -def loadEmbench(): +def loadEmbench(embenchPath, embenchData): """loads the embench data dictionary""" - embenchPath = "embench/wallySpeed.json" f = open(embenchPath) embenchData = json.load(f) if (debug): print(embenchData) return embenchData -def graphEmbench(embenchData): - ydata = list(embenchData["speed results"]["detailed speed results"].keys()) + ["speed geometric mean","speed geometric sd","speed geometric range"] - xdata = list(embenchData["speed results"]["detailed speed results"].values()) + [embenchData["speed results"]["speed geometric mean"],embenchData["speed results"]["speed geometric sd"],embenchData["speed results"]["speed geometric range"]] - fig = go.Figure(go.Bar( +def graphEmbench(embenchSpeedOpt_SpeedData, embenchSizeOpt_SpeedData, embenchSpeedOpt_SizeData, embenchSizeOpt_SizeData): + fig = make_subplots(rows=2, cols=4, + # subplot_titles( "Wally's Embench Cycles and Instret (with -O2)","Wally's Embench Cycles Per Instruction (with -O2)")) + subplot_titles=( "Wally's Embench Cycles and Instret (with -O2)","Wally's Embench Cycles Per Instruction (with -O2)","Wally's Embench Speed Score (with -O2)","Wally's Embench Size Score (with -O2)", + "Wally's Embench Cycles and Instret (with -Os)","Wally's Embench Cycles Per Instruction (with -Os)","Wally's Embench Speed Score (with -Os)","Wally's Embench Size Score (with -Os)")) + + ydata = list(embenchSpeedOpt_SpeedData["speed results"]["detailed speed results"].keys()) + ["speed geometric mean","speed geometric sd","speed geometric range"] + xdata = list(embenchSpeedOpt_SpeedData["speed results"]["detailed speed results"].values()) + [embenchSpeedOpt_SpeedData["speed results"]["speed geometric mean"],embenchSpeedOpt_SpeedData["speed results"]["speed geometric sd"],embenchSpeedOpt_SpeedData["speed results"]["speed geometric range"]] + + fig.add_trace( go.Bar( y=ydata, x=xdata, - orientation='h')) + textposition='outside', text=xdata, + orientation='h'), + row=1,col=3) - fig.show() + ydata = list(embenchSizeOpt_SpeedData["speed results"]["detailed speed results"].keys()) + ["speed geometric mean","speed geometric sd","speed geometric range"] + xdata = list(embenchSizeOpt_SpeedData["speed results"]["detailed speed results"].values()) + [embenchSizeOpt_SpeedData["speed results"]["speed geometric mean"],embenchSizeOpt_SpeedData["speed results"]["speed geometric sd"],embenchSizeOpt_SpeedData["speed results"]["speed geometric range"]] + + fig.add_trace( go.Bar( + y=ydata, + x=xdata, + textposition='outside', text=xdata, + orientation='h'), + row=2,col=3) + + + ydata = list(embenchSpeedOpt_SizeData["size results"]["detailed size results"].keys()) + ["size geometric mean","size geometric sd","size geometric range"] + xdata = list(embenchSpeedOpt_SizeData["size results"]["detailed size results"].values()) + [embenchSpeedOpt_SizeData["size results"]["size geometric mean"],embenchSpeedOpt_SizeData["size results"]["size geometric sd"],embenchSpeedOpt_SizeData["size results"]["size geometric range"]] + + fig.add_trace( go.Bar( + y=ydata, + x=xdata, + textposition='outside', text=xdata, + orientation='h'), + row=1,col=4) + + ydata = list(embenchSizeOpt_SizeData["size results"]["detailed size results"].keys()) + ["size geometric mean","size geometric sd","size geometric range"] + xdata = list(embenchSizeOpt_SizeData["size results"]["detailed size results"].values()) + [embenchSizeOpt_SizeData["size results"]["size geometric mean"],embenchSizeOpt_SizeData["size results"]["size geometric sd"],embenchSizeOpt_SizeData["size results"]["size geometric range"]] + + fig.add_trace( go.Bar( + y=ydata, + x=xdata, + textposition='outside', text=xdata, + orientation='h'), + row=2,col=4) + + # facet_row="Score", facet_col="Optimization Flag", + # category_orders={"Score": ["Cycles & Instr", "CPI", "SpeedScore", "SizeScore"], + # "Optimization Flag": ["O2", "Os"]}), + # orientation='h') + fig.update_layout(height=1500,width=4000, title_text="Wally Embench Scores", showlegend=False) + + fig.write_image("figure.png", engine="kaleido") + # fig.show() def main(): - coremarkData = loadCoremark() - embenchData = loadEmbench() - graphEmbench(embenchData) + coremarkData = {} + embenchSizeOpt_SpeedData = {} + embenchSpeedOpt_SpeedData = {} + embenchSizeOpt_SizeData = {} + embenchSpeedOpt_SizeData = {} + # coremarkData = loadCoremark() + embenchSpeedOpt_SpeedData = loadEmbench("embench/wallySpeedOpt_speed.json", embenchSpeedOpt_SpeedData) + embenchSizeOpt_SpeedData = loadEmbench("embench/wallySizeOpt_speed.json", embenchSizeOpt_SpeedData) + embenchSpeedOpt_SizeData = loadEmbench("embench/wallySpeedOpt_size.json", embenchSpeedOpt_SizeData) + embenchSizeOpt_SizeData = loadEmbench("embench/wallySizeOpt_size.json", embenchSizeOpt_SizeData) + + graphEmbench(embenchSpeedOpt_SpeedData, embenchSizeOpt_SpeedData, embenchSpeedOpt_SizeData, embenchSizeOpt_SizeData) if __name__ == '__main__': sys.exit(main()) -# x = -# y = - -# df = px.data.tips() -# fig = px.bar(df, x="total_bill", y="day", orientation='h') -# fig.show() -# import plotly.express as px - - -# result = sp.run(['ls', '-l'], stdout=sp.PIPE) -# result.stdout - -# fig = go.Figure( go.Bar( -# x=[], -# y=[], -# color="species", -# facet_col="species", -# title="Using update_traces() With Plotly Express Figures"), -# orientation='h') - -# fig.show() - -# -# "ls -Art ../addins/embench-iot/logs/*speed* | tail -n 1 " # gets most recent embench speed log -# "ls -Art ../addins/embench-iot/logs/*size* | tail -n 1 " # gets most recent embench speed log - -## get coremark score - -# cat coremarkPath | grep "CoreMark 1.0" | cut -d ':' -f 2 | cut -d " " -f 2 -# cat coremarkPath | grep "MTIME" | cut -d ':' -f 2 | cut -d " " -f 2 | tail -1 -# cat coremarkPath | grep "MINSTRET" | cut -d ':' -f 2 | cut -d " " -f 2 | tail -1 \ No newline at end of file +# "ls -Art ../addins/embench-iot/logs/*speed* | tail -n 1 " # gets most recent embench speed log \ No newline at end of file diff --git a/pipelined/config/shared/wally-shared.vh b/pipelined/config/shared/wally-shared.vh index d9bf77df7..afe822f46 100644 --- a/pipelined/config/shared/wally-shared.vh +++ b/pipelined/config/shared/wally-shared.vh @@ -95,6 +95,7 @@ // largest length in IEU/FPU `define LGLEN ((`NF<`XLEN) ? `XLEN : `NF) +`define LLEN ((`FLEN<`XLEN) ? `XLEN : `FLEN) `define LOGLGLEN $unsigned($clog2(`LGLEN+1)) `define NORMSHIFTSZ ((`LGLEN+`NF) > (3*`NF+8) ? (`LGLEN+`NF+1) : (3*`NF+9)) `define CORRSHIFTSZ ((`LGLEN+`NF) > (3*`NF+8) ? (`LGLEN+`NF+1) : (3*`NF+6)) diff --git a/pipelined/regression/Makefile b/pipelined/regression/Makefile index 302ee4a92..0a9e7d993 100644 --- a/pipelined/regression/Makefile +++ b/pipelined/regression/Makefile @@ -3,7 +3,7 @@ make allclean: make all make clean: - make clean -C ../../addins/riscv-arch-test + make clean -C ../../tests/riscof make clean -C ../../tests/wally-riscv-arch-test # make allclean -C ../../tests/imperas-riscv-tests @@ -15,8 +15,8 @@ make all: #make -C ../../tests/imperas-riscv-tests XLEN=64 --jobs # Build riscv-arch-test 64 and 32-bit versions - make -C ../../addins/riscv-arch-test --jobs - make -C ../../addins/riscv-arch-test XLEN=32 --jobs + make -C ../../tests/riscof/ --jobs + make -C ../../tests/riscof/ XLEN=32 --jobs # Build wally-riscv-arch-test make -C ../../tests/wally-riscv-arch-test/ --jobs diff --git a/pipelined/regression/makefile-memfile b/pipelined/regression/makefile-memfile index 33af19538..c41963864 100644 --- a/pipelined/regression/makefile-memfile +++ b/pipelined/regression/makefile-memfile @@ -1,6 +1,6 @@ ROOT := ../.. SUFFIX := work -ARCHDIR := $(ROOT)/addins/riscv-arch-test +ARCHDIR := $(ROOT)/tests/riscof WALLYDIR:= $(ROOT)/tests/wally-riscv-arch-test # IMPERASDIR := $(ROOT)/tests/imperas-riscv-tests # ALLDIRS := $(ARCHDIR)/$(SUFFIX) $(WALLYDIR)/$(SUFFIX) $(IMPERASDIR)/$(SUFFIX) @@ -8,8 +8,9 @@ IMPERASDIR := $(ROOT)/tests/imperas-riscv-tests ALLDIRS := $(ARCHDIR)/$(SUFFIX) $(WALLYDIR)/$(SUFFIX) ELFFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf") +OBJDUMPFILES ?= $(shell find $(ALLDIRS) -type f -regex ".*\.elf.objdump") MEMFILES ?= $(ELFFILES:.elf=.elf.memfile) -ADDRFILES ?= $(ELFFILES:.elf=.elf.objdump.addr) +ADDRFILES ?= $(OBJDUMPFILES:.objdump=.objdump.addr) print: echo "files in $(ALLDIRS) are $(ELFFILES)." diff --git a/pipelined/src/fpu/fctrl.sv b/pipelined/src/fpu/fctrl.sv index b7f6b2e60..60d260027 100755 --- a/pipelined/src/fpu/fctrl.sv +++ b/pipelined/src/fpu/fctrl.sv @@ -121,11 +121,11 @@ module fctrl ( assign FmtD = 0; else if (`FPSIZES == 2)begin logic [1:0] FmtTmp; - assign FmtTmp = (FResSelD == 2'b10)&~FWriteIntD ? {~Funct3D[1], ~(Funct3D[1]^Funct3D[0])} : ((Funct7D[6:3] == 4'b0100)&OpD[4]) ? Rs2D[1:0] : Funct7D[1:0]; + assign FmtTmp = ((Funct7D[6:3] == 4'b0100)&OpD[4]) ? Rs2D[1:0] : Funct7D[1:0]; assign FmtD = (`FMT == FmtTmp); end else if (`FPSIZES == 3|`FPSIZES == 4) - assign FmtD = (FResSelD == 2'b10)&~FWriteIntD ? {~Funct3D[1], ~(Funct3D[1]^Funct3D[0])} : ((Funct7D[6:3] == 4'b0100)&OpD[4]) ? Rs2D[1:0] : Funct7D[1:0]; + assign FmtD = ((Funct7D[6:3] == 4'b0100)&OpD[4]) ? Rs2D[1:0] : Funct7D[1:0]; // Final Res Sel: // fp int diff --git a/pipelined/src/fpu/fpu.sv b/pipelined/src/fpu/fpu.sv index f839e2ad6..be73e9e7a 100755 --- a/pipelined/src/fpu/fpu.sv +++ b/pipelined/src/fpu/fpu.sv @@ -34,13 +34,14 @@ module fpu ( input logic reset, input logic [2:0] FRM_REGW, // Rounding mode from CSR input logic [31:0] InstrD, // instruction from IFU - input logic [`XLEN-1:0] ReadDataW,// Read data from memory + input logic [`FLEN-1:0] ReadDataW,// Read data from memory input logic [`XLEN-1:0] ForwardedSrcAE, // Integer input being processed (from IEU) input logic StallE, StallM, StallW, // stall signals from HZU input logic FlushE, FlushM, FlushW, // flush signals from HZU input logic [4:0] RdM, RdW, // which FP register to write to (from IEU) input logic [1:0] STATUS_FS, // Is floating-point enabled? output logic FRegWriteM, // FP register write enable + output logic FpLoadM, // Fp load instruction? output logic FStallD, // Stall the decode stage output logic FWriteIntE, // integer register write enables output logic [`XLEN-1:0] FWriteDataE, // Data to be written to memory @@ -348,6 +349,8 @@ module fpu ( // ||| ||| ////////////////////////////////////////////////////////////////////////////////////////// + assign FpLoadM = FResSelM[1]; + postprocess postprocess(.XSgnM, .ZExpM, .XManM, .YManM, .ZManM, .FrmM, .FmtM, .ProdExpM, .AddendStickyM, .KillProdM, .XZeroM, .YZeroM, .ZZeroM, .XInfM, .YInfM, .ZInfM, .XNaNM, .YNaNM, .ZNaNM, .XSNaNM, .YSNaNM, .ZSNaNM, .SumM, @@ -378,21 +381,7 @@ module fpu ( // ||| ||| ////////////////////////////////////////////////////////////////////////////////////////// - // put ReadData into NaN-blocking format - // - if there are any unsused bits the most significant bits are filled with 1s - // - for load instruction - generate - if(`FPSIZES == 1) assign ReadResW = {{`FLEN-`XLEN{1'b1}}, ReadDataW}; - else if(`FPSIZES == 2) - mux2 #(`FLEN) SrcAMux ({{`FLEN-`LEN1{1'b1}}, ReadDataW[`LEN1-1:0]}, {{`FLEN-`XLEN{1'b1}}, ReadDataW}, FmtW, ReadResW); - else if(`FPSIZES == 3 | `FPSIZES == 4) - mux4 #(`FLEN) SrcAMux ({{`FLEN-`S_LEN{1'b1}}, ReadDataW[`S_LEN-1:0]}, - {{`FLEN-`D_LEN{1'b1}}, ReadDataW[`D_LEN-1:0]}, - {{`FLEN-`H_LEN{1'b1}}, ReadDataW[`H_LEN-1:0]}, - {{`FLEN-`XLEN{1'b1}}, ReadDataW}, FmtW, ReadResW); // NaN boxing zeroes - endgenerate - // select the result to be written to the FP register - mux2 #(`FLEN) FPUResultMux (FpResW, ReadResW, FResSelW[1], FPUResultW); + mux2 #(`FLEN) FPUResultMux (FpResW, ReadDataW, FResSelW[1], FPUResultW); endmodule // fpu diff --git a/pipelined/src/ieu/comparator.sv b/pipelined/src/ieu/comparator.sv index 61a17ad9f..c7c004dff 100644 --- a/pipelined/src/ieu/comparator.sv +++ b/pipelined/src/ieu/comparator.sv @@ -80,7 +80,7 @@ module comparator #(parameter WIDTH=64) ( assign flags = {eq, lt, ltu}; endmodule -// This comaprator is best +// This comparator is best module comparator_dc_flip #(parameter WIDTH=64) ( input logic [WIDTH-1:0] a, b, input logic sgnd, @@ -94,7 +94,7 @@ module comparator_dc_flip #(parameter WIDTH=64) ( assign bf = {b[WIDTH-1] ^ sgnd, b[WIDTH-2:0]}; // behavioral description gives best results - assign eq = (af == bf); + assign eq = (a == b); assign lt = (af < bf); assign flags = {eq, lt}; endmodule diff --git a/pipelined/src/ieu/controller.sv b/pipelined/src/ieu/controller.sv index 2818812e6..cd2246759 100644 --- a/pipelined/src/ieu/controller.sv +++ b/pipelined/src/ieu/controller.sv @@ -41,7 +41,7 @@ module controller( output logic IllegalBaseInstrFaultD, // Execute stage control signals input logic StallE, FlushE, - input logic [2:0] FlagsE, + input logic [1:0] FlagsE, input logic FWriteIntE, output logic PCSrcE, // for datapath and Hazard Unit output logic [2:0] ALUControlE, @@ -52,6 +52,7 @@ module controller( output logic MDUE, W64E, output logic JumpE, output logic SCE, + output logic BranchSignedE, // Memory stage control signals input logic StallM, FlushM, output logic [1:0] MemRWM, @@ -211,8 +212,9 @@ module controller( {IEURegWriteE, ResultSrcE, MemRWE, JumpE, BranchE, ALUControlE, ALUSrcAE, ALUSrcBE, ALUResultSrcE, CSRReadE, CSRWriteE, PrivilegedE, Funct3E, W64E, MDUE, AtomicE, InvalidateICacheE, FlushDCacheE, FencePendingE, InstrValidE}); // Branch Logic - assign {eqE, ltE, ltuE} = FlagsE; - mux4 #(1) branchflagmux(eqE, 1'b0, ltE, ltuE, Funct3E[2:1], BranchFlagE); + assign BranchSignedE = ~(Funct3E[2:1] == 2'b11); + assign {eqE, ltE} = FlagsE; + mux3 #(1) branchflagmux(eqE, 1'b0, ltE, Funct3E[2:1], BranchFlagE); assign BranchTakenE = BranchFlagE ^ Funct3E[0]; assign PCSrcE = JumpE | BranchE & BranchTakenE; diff --git a/pipelined/src/ieu/datapath.sv b/pipelined/src/ieu/datapath.sv index 4002826f5..b7a6a9644 100644 --- a/pipelined/src/ieu/datapath.sv +++ b/pipelined/src/ieu/datapath.sv @@ -43,11 +43,12 @@ module datapath ( input logic ALUSrcAE, ALUSrcBE, input logic ALUResultSrcE, input logic JumpE, + input logic BranchSignedE, input logic IllegalFPUInstrE, input logic [`XLEN-1:0] FWriteDataE, input logic [`XLEN-1:0] PCE, input logic [`XLEN-1:0] PCLinkE, - output logic [2:0] FlagsE, + output logic [1:0] FlagsE, output logic [`XLEN-1:0] IEUAdrE, output logic [`XLEN-1:0] ForwardedSrcAE, ForwardedSrcBE, // *** these are the src outputs before the mux choosing between them and PCE to put in srcA/B // Memory stage signals @@ -63,9 +64,9 @@ module datapath ( input logic [2:0] ResultSrcW, input logic [`XLEN-1:0] FCvtIntResW, input logic [1:0] FResSelW, - output logic [`XLEN-1:0] ReadDataW, + input logic [`XLEN-1:0] ReadDataW, // input logic [`XLEN-1:0] PCLinkW, - input logic [`XLEN-1:0] CSRReadValW, ReadDataM, MDUResultW, + input logic [`XLEN-1:0] CSRReadValW, MDUResultW, // Hazard Unit signals output logic [4:0] Rs1D, Rs2D, Rs1E, Rs2E, output logic [4:0] RdE, RdM, RdW @@ -106,7 +107,7 @@ module datapath ( mux3 #(`XLEN) faemux(R1E, ResultW, IFResultM, ForwardAE, ForwardedSrcAE); mux3 #(`XLEN) fbemux(R2E, ResultW, IFResultM, ForwardBE, ForwardedSrcBE); - comparator #(`XLEN) comp(ForwardedSrcAE, ForwardedSrcBE, FlagsE); + comparator_dc_flip #(`XLEN) comp(ForwardedSrcAE, ForwardedSrcBE, BranchSignedE, FlagsE); mux2 #(`XLEN) srcamux(ForwardedSrcAE, PCE, ALUSrcAE, SrcAE); mux2 #(`XLEN) srcbmux(ForwardedSrcBE, ExtImmE, ALUSrcBE, SrcBE); alu #(`XLEN) alu(SrcAE, SrcBE, ALUControlE, Funct3E, ALUResultE, IEUAdrE); @@ -121,7 +122,6 @@ module datapath ( // Writeback stage pipeline register and logic flopenrc #(`XLEN) IFResultWReg(clk, reset, FlushW, ~StallW, IFResultM, IFResultW); flopenrc #(5) RdWReg(clk, reset, FlushW, ~StallW, RdM, RdW); - flopen #(`XLEN) ReadDataWReg(clk, ~StallW, ReadDataM, ReadDataW); // floating point interactions: fcvt, fp stores if (`F_SUPPORTED) begin:fpmux diff --git a/pipelined/src/ieu/ieu.sv b/pipelined/src/ieu/ieu.sv index f1aee68cd..b47cd1d2d 100644 --- a/pipelined/src/ieu/ieu.sv +++ b/pipelined/src/ieu/ieu.sv @@ -60,11 +60,11 @@ module ieu ( output logic InvalidateICacheM, FlushDCacheM, // Writeback stage - input logic [`XLEN-1:0] CSRReadValW, ReadDataM, MDUResultW, + input logic [`XLEN-1:0] CSRReadValW, MDUResultW, input logic [1:0] FResSelW, input logic [`XLEN-1:0] FCvtIntResW, output logic [4:0] RdW, - output logic [`XLEN-1:0] ReadDataW, + input logic [`XLEN-1:0] ReadDataW, // input logic [`XLEN-1:0] PCLinkW, output logic InstrValidM, // hazards @@ -78,7 +78,7 @@ module ieu ( ); logic [2:0] ImmSrcD; - logic [2:0] FlagsE; + logic [1:0] FlagsE; logic [2:0] ALUControlE; logic ALUSrcAE, ALUSrcBE; logic [2:0] ResultSrcW; @@ -93,23 +93,24 @@ module ieu ( logic RegWriteM, RegWriteW; logic MemReadE, CSRReadE; logic JumpE; + logic BranchSignedE; controller c( .clk, .reset, .StallD, .FlushD, .InstrD, .ImmSrcD, .IllegalIEUInstrFaultD, .IllegalBaseInstrFaultD, .StallE, .FlushE, .FlagsE, .FWriteIntE, .PCSrcE, .ALUControlE, .ALUSrcAE, .ALUSrcBE, .ALUResultSrcE, .MemReadE, .CSRReadE, - .Funct3E, .MDUE, .W64E, .JumpE, .StallM, .FlushM, .MemRWM, - .CSRReadM, .CSRWriteM, .PrivilegedM, .SCE, .AtomicM, .Funct3M, + .Funct3E, .MDUE, .W64E, .JumpE, .SCE, .BranchSignedE, .StallM, .FlushM, .MemRWM, + .CSRReadM, .CSRWriteM, .PrivilegedM, .AtomicM, .Funct3M, .RegWriteM, .InvalidateICacheM, .FlushDCacheM, .InstrValidM, .FWriteIntM, .StallW, .FlushW, .RegWriteW, .ResultSrcW, .CSRWriteFencePendingDEM, .StoreStallD); datapath dp( .clk, .reset, .ImmSrcD, .InstrD, .StallE, .FlushE, .ForwardAE, .ForwardBE, - .ALUControlE, .Funct3E, .ALUSrcAE, .ALUSrcBE, .ALUResultSrcE, .JumpE, .IllegalFPUInstrE, + .ALUControlE, .Funct3E, .ALUSrcAE, .ALUSrcBE, .ALUResultSrcE, .JumpE, .BranchSignedE, .IllegalFPUInstrE, .FWriteDataE, .PCE, .PCLinkE, .FlagsE, .IEUAdrE, .ForwardedSrcAE, .ForwardedSrcBE, .StallM, .FlushM, .FWriteIntM, .FIntResM, .SrcAM, .WriteDataE, .FResSelW, .StallW, .FlushW, .RegWriteW, .SquashSCW, .ResultSrcW, .ReadDataW, .FCvtIntResW, - .CSRReadValW, .ReadDataM, .MDUResultW, .Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW); + .CSRReadValW, .MDUResultW, .Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW); forward fw( .Rs1D, .Rs2D, .Rs1E, .Rs2E, .RdE, .RdM, .RdW, diff --git a/pipelined/src/lsu/bigendianswap.sv b/pipelined/src/lsu/bigendianswap.sv index bf1a732ac..29c717edc 100644 --- a/pipelined/src/lsu/bigendianswap.sv +++ b/pipelined/src/lsu/bigendianswap.sv @@ -30,12 +30,32 @@ `include "wally-config.vh" -module bigendianswap ( +module bigendianswap #(parameter LEN=`XLEN) ( input logic BigEndianM, - input logic [`XLEN-1:0] a, - output logic [`XLEN-1:0] y); + input logic [LEN-1:0] a, + output logic [LEN-1:0] y); - if(`XLEN == 64) begin + if(LEN == 128) begin + always_comb + if (BigEndianM) begin // swap endianness + y[127:120] = a[7:0]; + y[119:112] = a[15:8]; + y[111:104] = a[23:16]; + y[103:96] = a[31:24]; + y[95:88] = a[39:32]; + y[87:80] = a[47:40]; + y[79:72] = a[55:48]; + y[71:64] = a[63:56]; + y[63:56] = a[71:64]; + y[55:48] = a[79:72]; + y[47:40] = a[87:80]; + y[39:32] = a[95:88]; + y[31:24] = a[103:96]; + y[23:16] = a[111:104]; + y[15:8] = a[119:112]; + y[7:0] = a[127:120]; + end else y = a; + end else if(LEN == 64) begin always_comb if (BigEndianM) begin // swap endianness y[63:56] = a[7:0]; diff --git a/pipelined/src/lsu/lsu.sv b/pipelined/src/lsu/lsu.sv index dbd043d76..7234a7cac 100644 --- a/pipelined/src/lsu/lsu.sv +++ b/pipelined/src/lsu/lsu.sv @@ -51,11 +51,13 @@ module lsu ( input logic [`XLEN-1:0] IEUAdrE, (* mark_debug = "true" *)output logic [`XLEN-1:0] IEUAdrM, input logic [`XLEN-1:0] WriteDataE, - output logic [`XLEN-1:0] ReadDataM, + output logic [`LLEN-1:0] ReadDataW, // cpu privilege input logic [1:0] PrivilegeModeW, input logic BigEndianM, input logic sfencevmaM, + // fpu + input logic FpLoadM, // faults output logic LoadPageFaultM, StoreAmoPageFaultM, output logic LoadMisalignedFaultM, LoadAccessFaultM, @@ -110,6 +112,7 @@ module lsu ( logic [`XLEN-1:0] LSUWriteDataM; logic [(`XLEN-1)/8:0] ByteMaskM; logic [`XLEN-1:0] WriteDataM; + logic [`LLEN-1:0] ReadDataM; // *** TO DO: Burst mode @@ -128,7 +131,7 @@ module lsu ( .DTLBMissM, .DTLBWriteM, .InstrDAPageFaultF, .DataDAPageFaultM, .TrapM, .DCacheStallM, .SATP_REGW, .PCF, .STATUS_MXR, .STATUS_SUM, .STATUS_MPRV, .STATUS_MPP, .PrivilegeModeW, - .ReadDataM, .WriteDataM, .Funct3M, .LSUFunct3M, .Funct7M, .LSUFunct7M, + .ReadDataM(ReadDataM[`XLEN-1:0]), .WriteDataM, .Funct3M, .LSUFunct3M, .Funct7M, .LSUFunct7M, .IEUAdrExtM, .PTE, .LSUWriteDataM, .PageType, .PreLSURWM, .LSUAtomicM, .IEUAdrE, .LSUAdrE, .PreLSUPAdrM, .CPUBusy, .InterlockStall, .SelHPTW, .IgnoreRequestTLB, .IgnoreRequestTrapM); @@ -187,8 +190,8 @@ module lsu ( // Either Data Cache or Data Tightly Integrated Memory or just bus interface ///////////////////////////////////////////////////////////////////////////////////////////// logic [`XLEN-1:0] AMOWriteDataM, FinalWriteDataM, LittleEndianWriteDataM; - logic [`XLEN-1:0] ReadDataWordM, LittleEndianReadDataWordM; - logic [`XLEN-1:0] ReadDataWordMuxM; + logic [`LLEN-1:0] ReadDataWordM, LittleEndianReadDataWordM; + logic [`LLEN-1:0] ReadDataWordMuxM; logic IgnoreRequest; logic SelUncachedAdr; assign IgnoreRequest = IgnoreRequestTLB | IgnoreRequestTrapM; @@ -197,7 +200,7 @@ module lsu ( // *** directly instantiate RAM or ROM here. Instantiate SRAM1P1RW. // Merge SimpleRAM and SRAM1p1rw into one that is good for synthesis and RAM libraries and flops dtim dtim(.clk, .reset, .CPUBusy, .LSURWM, .IEUAdrM, .IEUAdrE, .TrapM, .FinalWriteDataM, - .ReadDataWordM, .BusStall, .LSUBusWrite,.LSUBusRead, .BusCommittedM, + .ReadDataWordM(ReadDataWordM[`XLEN-1:0]), .BusStall, .LSUBusWrite,.LSUBusRead, .BusCommittedM, .DCacheStallM, .DCacheCommittedM, .ByteMaskM, .Cacheable(CacheableM), .DCacheMiss, .DCacheAccess); end @@ -222,14 +225,14 @@ module lsu ( .SelUncachedAdr, .IgnoreRequest, .LSURWM, .CPUBusy, .CacheableM, .BusStall, .BusCommittedM); - mux2 #(`XLEN) UnCachedDataMux(.d0(LittleEndianReadDataWordM), .d1(DCacheBusWriteData[`XLEN-1:0]), + mux2 #(`LLEN) UnCachedDataMux(.d0(LittleEndianReadDataWordM), .d1({{`LLEN-`XLEN{1'b0}}, DCacheBusWriteData[`XLEN-1:0]}), .s(SelUncachedAdr), .y(ReadDataWordMuxM)); - mux2 #(`XLEN) LsuBushwdataMux(.d0(ReadDataWordM), .d1(FinalWriteDataM), + mux2 #(`XLEN) LsuBushwdataMux(.d0(ReadDataWordM[`XLEN-1:0]), .d1(FinalWriteDataM), .s(SelUncachedAdr), .y(LSUBusHWDATA)); if(CACHE_ENABLED) begin : dcache cache #(.LINELEN(`DCACHE_LINELENINBITS), .NUMLINES(`DCACHE_WAYSIZEINBYTES*8/LINELEN), - .NUMWAYS(`DCACHE_NUMWAYS), .LOGWPL(LOGWPL), .WORDLEN(`XLEN), .MUXINTERVAL(`XLEN), .DCACHE(1)) dcache( + .NUMWAYS(`DCACHE_NUMWAYS), .LOGWPL(LOGWPL), .WORDLEN(`LLEN), .MUXINTERVAL(`XLEN), .DCACHE(1)) dcache( .clk, .reset, .CPUBusy, .LSUBusWriteCrit, .RW(LSURWM), .Atomic(LSUAtomicM), .FlushCache(FlushDCacheM), .NextAdr(LSUAdrE), .PAdr(LSUPAdrM), .ByteMask(ByteMaskM), .WordCount, @@ -253,7 +256,7 @@ module lsu ( // Atomic operations ///////////////////////////////////////////////////////////////////////////////////////////// if (`A_SUPPORTED) begin:atomic - atomic atomic(.clk, .reset, .StallW, .ReadDataM, .LSUWriteDataM, .LSUPAdrM, + atomic atomic(.clk, .reset, .StallW, .ReadDataM(ReadDataM[`XLEN-1:0]), .LSUWriteDataM, .LSUPAdrM, .LSUFunct7M, .LSUFunct3M, .LSUAtomicM, .PreLSURWM, .IgnoreRequest, .AMOWriteDataM, .SquashSCW, .LSURWM); end else begin:lrsc @@ -266,7 +269,13 @@ module lsu ( subwordwrite subwordwrite(.LSUPAdrM(LSUPAdrM[2:0]), .LSUFunct3M, .AMOWriteDataM, .LittleEndianWriteDataM, .ByteMaskM); subwordread subwordread(.ReadDataWordMuxM, .LSUPAdrM(LSUPAdrM[2:0]), - .Funct3M(LSUFunct3M), .ReadDataM); + .FpLoadM, .Funct3M(LSUFunct3M), .ReadDataM); + + ///////////////////////////////////////////////////////////////////////////////////////////// + // MW Pipeline Register + ///////////////////////////////////////////////////////////////////////////////////////////// + + flopen #(`LLEN) ReadDataMWReg(clk, ~StallW, ReadDataM, ReadDataW); ///////////////////////////////////////////////////////////////////////////////////////////// // Big Endian Byte Swapper @@ -274,8 +283,8 @@ module lsu ( // swap the bytes when read from big-endian memory ///////////////////////////////////////////////////////////////////////////////////////////// if (`BIGENDIAN_SUPPORTED) begin:endian - bigendianswap storeswap(.BigEndianM, .a(LittleEndianWriteDataM), .y(FinalWriteDataM)); - bigendianswap loadswap(.BigEndianM, .a(ReadDataWordM), .y(LittleEndianReadDataWordM)); + bigendianswap #(`XLEN) storeswap(.BigEndianM, .a(LittleEndianWriteDataM), .y(FinalWriteDataM)); + bigendianswap #(`LLEN) loadswap(.BigEndianM, .a(ReadDataWordM), .y(LittleEndianReadDataWordM)); end else begin assign FinalWriteDataM = LittleEndianWriteDataM; assign LittleEndianReadDataWordM = ReadDataWordM; diff --git a/pipelined/src/lsu/subwordread.sv b/pipelined/src/lsu/subwordread.sv index f66c6f858..4a6d99bfc 100644 --- a/pipelined/src/lsu/subwordread.sv +++ b/pipelined/src/lsu/subwordread.sv @@ -32,10 +32,11 @@ module subwordread ( - input logic [`XLEN-1:0] ReadDataWordMuxM, + input logic [`LLEN-1:0] ReadDataWordMuxM, input logic [2:0] LSUPAdrM, input logic [2:0] Funct3M, - output logic [`XLEN-1:0] ReadDataM + input logic FpLoadM, + output logic [`LLEN-1:0] ReadDataM ); logic [7:0] ByteM; @@ -74,18 +75,31 @@ module subwordread 1'b1: WordM = ReadDataWordMuxM[63:32]; endcase - // sign extension + logic [63:0] DblWordM; + assign DblWordM = ReadDataWordMuxM[63:0]; + + // sign extension/ NaN boxing always_comb case(Funct3M) - 3'b000: ReadDataM = {{56{ByteM[7]}}, ByteM}; // lb - 3'b001: ReadDataM = {{48{HalfwordM[15]}}, HalfwordM[15:0]}; // lh - 3'b010: ReadDataM = {{32{WordM[31]}}, WordM[31:0]}; // lw - 3'b011: ReadDataM = ReadDataWordMuxM; // ld - 3'b100: ReadDataM = {56'b0, ByteM[7:0]}; // lbu - 3'b101: ReadDataM = {48'b0, HalfwordM[15:0]}; // lhu - 3'b110: ReadDataM = {32'b0, WordM[31:0]}; // lwu + 3'b000: ReadDataM = {{`LLEN-8{ByteM[7]}}, ByteM}; // lb + 3'b001: if(`ZFH_SUPPORTED) + ReadDataM = {{`LLEN-16{HalfwordM[15]|FpLoadM}}, HalfwordM[15:0]}; // lh/flh + else ReadDataM = {{`LLEN-16{HalfwordM[15]}}, HalfwordM[15:0]}; // lh + 3'b010: if(`F_SUPPORTED) + ReadDataM = {{`LLEN-32{WordM[31]|FpLoadM}}, WordM[31:0]}; // lw/flw + else ReadDataM = {{`LLEN-32{WordM[31]}}, WordM[31:0]}; // lw + 3'b011: if(`D_SUPPORTED) + ReadDataM = {{`LLEN-64{DblWordM[63]|FpLoadM}}, DblWordM[63:0]}; // ld/fld + else ReadDataM = {{`LLEN-64{DblWordM[63]}}, DblWordM[63:0]}; // ld/fld + 3'b100: if(`Q_SUPPORTED) + ReadDataM = FpLoadM ? ReadDataWordMuxM : {{`LLEN-8{1'b0}}, ByteM[7:0]}; // lbu/flq + else + ReadDataM = {{`LLEN-8{1'b0}}, ByteM[7:0]}; // lbu + 3'b101: ReadDataM = {{`LLEN-16{1'b0}}, HalfwordM[15:0]}; // lhu + 3'b110: ReadDataM = {{`LLEN-32{1'b0}}, WordM[31:0]}; // lwu default: ReadDataM = ReadDataWordMuxM; // Shouldn't happen endcase + end else begin:swrmux // 32-bit // byte mux always_comb @@ -105,13 +119,18 @@ module subwordread // sign extension always_comb - case(Funct3M) - 3'b000: ReadDataM = {{24{ByteM[7]}}, ByteM}; // lb - 3'b001: ReadDataM = {{16{HalfwordM[15]}}, HalfwordM[15:0]}; // lh - 3'b010: ReadDataM = ReadDataWordMuxM; // lw - 3'b100: ReadDataM = {24'b0, ByteM[7:0]}; // lbu - 3'b101: ReadDataM = {16'b0, HalfwordM[15:0]}; // lhu - default: ReadDataM = ReadDataWordMuxM; + case(Funct3M) + 3'b000: ReadDataM = {{`LLEN-8{ByteM[7]}}, ByteM}; // lb + 3'b001: if(`ZFH_SUPPORTED) + ReadDataM = {{`LLEN-16{HalfwordM[15]|FpLoadM}}, HalfwordM[15:0]}; // lh/flh + else ReadDataM = {{`LLEN-16{HalfwordM[15]}}, HalfwordM[15:0]}; // lh + 3'b010: if(`F_SUPPORTED) + ReadDataM = {{`LLEN-32{ReadDataWordMuxM[31]|FpLoadM}}, ReadDataWordMuxM[31:0]}; // lw/flw + else ReadDataM = {{`LLEN-32{ReadDataWordMuxM[31]}}, ReadDataWordMuxM[31:0]}; // lw + 3'b011: ReadDataM = ReadDataWordMuxM; // fld + 3'b100: ReadDataM = {{`LLEN-8{1'b0}}, ByteM[7:0]}; // lbu + 3'b101: ReadDataM = {{`LLEN-16{1'b0}}, HalfwordM[15:0]}; // lhu + default: ReadDataM = ReadDataWordMuxM; // Shouldn't happen endcase end endmodule diff --git a/pipelined/src/wally/wallypipelinedcore.sv b/pipelined/src/wally/wallypipelinedcore.sv index bc9b2014d..b3f11680b 100644 --- a/pipelined/src/wally/wallypipelinedcore.sv +++ b/pipelined/src/wally/wallypipelinedcore.sv @@ -98,6 +98,7 @@ module wallypipelinedcore ( logic IllegalFPUInstrD, IllegalFPUInstrE; logic FRegWriteM; logic FPUStallD; + logic FpLoadM; logic [1:0] FResSelW; logic [4:0] SetFflagsM; @@ -128,8 +129,7 @@ module wallypipelinedcore ( logic [`XLEN-1:0] IEUAdrE; (* mark_debug = "true" *) logic [`XLEN-1:0] WriteDataE; (* mark_debug = "true" *) logic [`XLEN-1:0] IEUAdrM; - (* mark_debug = "true" *) logic [`XLEN-1:0] ReadDataM; - logic [`XLEN-1:0] ReadDataW; + logic [`LLEN-1:0] ReadDataW; logic CommittedM; // AHB ifu interface @@ -229,8 +229,8 @@ module wallypipelinedcore ( .RdM, .FIntResM, .InvalidateICacheM, .FlushDCacheM, // Writeback stage - .CSRReadValW, .ReadDataM, .MDUResultW, - .RdW, .ReadDataW, + .CSRReadValW, .MDUResultW, + .RdW, .ReadDataW(ReadDataW[`XLEN-1:0]), .InstrValidM, .FCvtIntResW, .FResSelW, @@ -253,9 +253,10 @@ module wallypipelinedcore ( .AtomicM, .TrapM, .CommittedM, .DCacheMiss, .DCacheAccess, .SquashSCW, + .FpLoadM, //.DataMisalignedM(DataMisalignedM), .IEUAdrE, .IEUAdrM, .WriteDataE, - .ReadDataM, .FlushDCacheM, + .ReadDataW, .FlushDCacheM, // connected to ahb (all stay the same) .LSUBusAdr, .LSUBusRead, .LSUBusWrite, .LSUBusAck, .LSUBusInit, .LSUBusHRDATA, .LSUBusHWDATA, .LSUBusSize, .LSUBurstType, .LSUTransType, .LSUTransComplete, @@ -383,13 +384,14 @@ module wallypipelinedcore ( .clk, .reset, .FRM_REGW, // Rounding mode from CSR .InstrD, // instruction from IFU - .ReadDataW,// Read data from memory + .ReadDataW(ReadDataW[`FLEN-1:0]),// Read data from memory .ForwardedSrcAE, // Integer input being processed (from IEU) .StallE, .StallM, .StallW, // stall signals from HZU .FlushE, .FlushM, .FlushW, // flush signals from HZU .RdM, .RdW, // which FP register to write to (from IEU) .STATUS_FS, // is floating-point enabled? .FRegWriteM, // FP register write enable + .FpLoadM, .FStallD, // Stall the decode stage .FWriteIntE, // integer register write enable .FWriteDataE, // Data to be written to memory diff --git a/pipelined/srt/Makefile b/pipelined/srt/Makefile index c3c69df8c..63146339c 100644 --- a/pipelined/srt/Makefile +++ b/pipelined/srt/Makefile @@ -1,4 +1,4 @@ -all: exptestgen testgen qslc_r4a2 +all: exptestgen testgen qslc_r4a2 qslc_r4a2b sqrttestgen: sqrttestgen.c gcc sqrttestgen.c -o sqrttestgen -lm @@ -15,5 +15,9 @@ qslc_r4a2: qslc_r4a2.c gcc qslc_r4a2.c -o qslc_r4a2 -lm ./qslc_r4a2 > qslc_r4a2.sv +qslc_r4a2b: qslc_r4a2b.c + gcc qslc_r4a2b.c -o qslc_r4a2b -lm + ./qslc_r4a2b > qslc_r4a2b.tv + clean: rm -f testgen exptestgen qslc_r4a2 diff --git a/pipelined/srt/lint-srt b/pipelined/srt/lint-srt index 399201be0..fd42df887 100755 --- a/pipelined/srt/lint-srt +++ b/pipelined/srt/lint-srt @@ -1 +1,2 @@ verilator --lint-only --top-module srt srt.sv -I../config/rv64gc -I../config/shared ../src/generic/*.sv ../src/generic/flop/*.sv +verilator --lint-only --top-module srtradix4 srt-radix4.sv qsel4.sv -I../config/rv64gc -I../config/shared ../src/generic/*.sv ../src/generic/flop/*.sv diff --git a/pipelined/srt/qsel4.sv b/pipelined/srt/qsel4.sv new file mode 100644 index 000000000..069f4268c --- /dev/null +++ b/pipelined/srt/qsel4.sv @@ -0,0 +1,1048 @@ +`include "wally-config.vh" +`define DIVLEN ((`NF<(`XLEN)) ? (`XLEN) : `NF) + +module qsel4 ( + input logic [`DIVLEN+3:0] D, + input logic [`DIVLEN+3:0] WS, WC, + output logic [3:0] q +); + logic [6:0] Wmsbs; + logic [7:0] PreWmsbs; + logic [2:0] Dmsbs; + assign PreWmsbs = WC[`DIVLEN+3:`DIVLEN-4] + WS[`DIVLEN+3:`DIVLEN-4]; + assign Wmsbs = PreWmsbs[7:1]; + assign Dmsbs = D[`DIVLEN-1:`DIVLEN-3]; + // D = 0001.xxx... + // Dmsbs = | | + // W = xxxx.xxx... + // Wmsbs = | | + + always_comb + case({Dmsbs,Wmsbs}) + 10'b000_0000000: q = 4'b0000; + 10'b000_0000001: q = 4'b0000; + 10'b000_0000010: q = 4'b0000; + 10'b000_0000011: q = 4'b0000; + 10'b000_0000100: q = 4'b0100; + 10'b000_0000101: q = 4'b0100; + 10'b000_0000110: q = 4'b0100; + 10'b000_0000111: q = 4'b0100; + 10'b000_0001000: q = 4'b0100; + 10'b000_0001001: q = 4'b0100; + 10'b000_0001010: q = 4'b0100; + 10'b000_0001011: q = 4'b0100; + 10'b000_0001100: q = 4'b1000; + 10'b000_0001101: q = 4'b1000; + 10'b000_0001110: q = 4'b1000; + 10'b000_0001111: q = 4'b1000; + 10'b000_0010000: q = 4'b1000; + 10'b000_0010001: q = 4'b1000; + 10'b000_0010010: q = 4'b1000; + 10'b000_0010011: q = 4'b1000; + 10'b000_0010100: q = 4'b1000; + 10'b000_0010101: q = 4'b1000; + 10'b000_0010110: q = 4'b1000; + 10'b000_0010111: q = 4'b1000; + 10'b000_0011000: q = 4'b1000; + 10'b000_0011001: q = 4'b1000; + 10'b000_0011010: q = 4'b1000; + 10'b000_0011011: q = 4'b1000; + 10'b000_0011100: q = 4'b1000; + 10'b000_0011101: q = 4'b1000; + 10'b000_0011110: q = 4'b1000; + 10'b000_0011111: q = 4'b1000; + 10'b000_0100000: q = 4'b1000; + 10'b000_0100001: q = 4'b1000; + 10'b000_0100010: q = 4'b1000; + 10'b000_0100011: q = 4'b1000; + 10'b000_0100100: q = 4'b1000; + 10'b000_0100101: q = 4'b1000; + 10'b000_0100110: q = 4'b1000; + 10'b000_0100111: q = 4'b1000; + 10'b000_0101000: q = 4'b1000; + 10'b000_0101001: q = 4'b1000; + 10'b000_0101010: q = 4'b1000; + 10'b000_0101011: q = 4'b1000; + 10'b000_0101100: q = 4'b1000; + 10'b000_0101101: q = 4'b1000; + 10'b000_0101110: q = 4'b1000; + 10'b000_0101111: q = 4'b1000; + 10'b000_0110000: q = 4'b1000; + 10'b000_0110001: q = 4'b1000; + 10'b000_0110010: q = 4'b1000; + 10'b000_0110011: q = 4'b1000; + 10'b000_0110100: q = 4'b1000; + 10'b000_0110101: q = 4'b1000; + 10'b000_0110110: q = 4'b1000; + 10'b000_0110111: q = 4'b1000; + 10'b000_0111000: q = 4'b1000; + 10'b000_0111001: q = 4'b1000; + 10'b000_0111010: q = 4'b1000; + 10'b000_0111011: q = 4'b1000; + 10'b000_0111100: q = 4'b1000; + 10'b000_0111101: q = 4'b1000; + 10'b000_0111110: q = 4'b1000; + 10'b000_0111111: q = 4'b1000; + 10'b000_1000000: q = 4'b0001; + 10'b000_1000001: q = 4'b0001; + 10'b000_1000010: q = 4'b0001; + 10'b000_1000011: q = 4'b0001; + 10'b000_1000100: q = 4'b0001; + 10'b000_1000101: q = 4'b0001; + 10'b000_1000110: q = 4'b0001; + 10'b000_1000111: q = 4'b0001; + 10'b000_1001000: q = 4'b0001; + 10'b000_1001001: q = 4'b0001; + 10'b000_1001010: q = 4'b0001; + 10'b000_1001011: q = 4'b0001; + 10'b000_1001100: q = 4'b0001; + 10'b000_1001101: q = 4'b0001; + 10'b000_1001110: q = 4'b0001; + 10'b000_1001111: q = 4'b0001; + 10'b000_1010000: q = 4'b0001; + 10'b000_1010001: q = 4'b0001; + 10'b000_1010010: q = 4'b0001; + 10'b000_1010011: q = 4'b0001; + 10'b000_1010100: q = 4'b0001; + 10'b000_1010101: q = 4'b0001; + 10'b000_1010110: q = 4'b0001; + 10'b000_1010111: q = 4'b0001; + 10'b000_1011000: q = 4'b0001; + 10'b000_1011001: q = 4'b0001; + 10'b000_1011010: q = 4'b0001; + 10'b000_1011011: q = 4'b0001; + 10'b000_1011100: q = 4'b0001; + 10'b000_1011101: q = 4'b0001; + 10'b000_1011110: q = 4'b0001; + 10'b000_1011111: q = 4'b0001; + 10'b000_1100000: q = 4'b0001; + 10'b000_1100001: q = 4'b0001; + 10'b000_1100010: q = 4'b0001; + 10'b000_1100011: q = 4'b0001; + 10'b000_1100100: q = 4'b0001; + 10'b000_1100101: q = 4'b0001; + 10'b000_1100110: q = 4'b0001; + 10'b000_1100111: q = 4'b0001; + 10'b000_1101000: q = 4'b0001; + 10'b000_1101001: q = 4'b0001; + 10'b000_1101010: q = 4'b0001; + 10'b000_1101011: q = 4'b0001; + 10'b000_1101100: q = 4'b0001; + 10'b000_1101101: q = 4'b0001; + 10'b000_1101110: q = 4'b0001; + 10'b000_1101111: q = 4'b0001; + 10'b000_1110000: q = 4'b0001; + 10'b000_1110001: q = 4'b0001; + 10'b000_1110010: q = 4'b0001; + 10'b000_1110011: q = 4'b0010; + 10'b000_1110100: q = 4'b0010; + 10'b000_1110101: q = 4'b0010; + 10'b000_1110110: q = 4'b0010; + 10'b000_1110111: q = 4'b0010; + 10'b000_1111000: q = 4'b0010; + 10'b000_1111001: q = 4'b0010; + 10'b000_1111010: q = 4'b0010; + 10'b000_1111011: q = 4'b0010; + 10'b000_1111100: q = 4'b0000; + 10'b000_1111101: q = 4'b0000; + 10'b000_1111110: q = 4'b0000; + 10'b000_1111111: q = 4'b0000; + 10'b001_0000000: q = 4'b0000; + 10'b001_0000001: q = 4'b0000; + 10'b001_0000010: q = 4'b0000; + 10'b001_0000011: q = 4'b0000; + 10'b001_0000100: q = 4'b0100; + 10'b001_0000101: q = 4'b0100; + 10'b001_0000110: q = 4'b0100; + 10'b001_0000111: q = 4'b0100; + 10'b001_0001000: q = 4'b0100; + 10'b001_0001001: q = 4'b0100; + 10'b001_0001010: q = 4'b0100; + 10'b001_0001011: q = 4'b0100; + 10'b001_0001100: q = 4'b0100; + 10'b001_0001101: q = 4'b0100; + 10'b001_0001110: q = 4'b1000; + 10'b001_0001111: q = 4'b1000; + 10'b001_0010000: q = 4'b1000; + 10'b001_0010001: q = 4'b1000; + 10'b001_0010010: q = 4'b1000; + 10'b001_0010011: q = 4'b1000; + 10'b001_0010100: q = 4'b1000; + 10'b001_0010101: q = 4'b1000; + 10'b001_0010110: q = 4'b1000; + 10'b001_0010111: q = 4'b1000; + 10'b001_0011000: q = 4'b1000; + 10'b001_0011001: q = 4'b1000; + 10'b001_0011010: q = 4'b1000; + 10'b001_0011011: q = 4'b1000; + 10'b001_0011100: q = 4'b1000; + 10'b001_0011101: q = 4'b1000; + 10'b001_0011110: q = 4'b1000; + 10'b001_0011111: q = 4'b1000; + 10'b001_0100000: q = 4'b1000; + 10'b001_0100001: q = 4'b1000; + 10'b001_0100010: q = 4'b1000; + 10'b001_0100011: q = 4'b1000; + 10'b001_0100100: q = 4'b1000; + 10'b001_0100101: q = 4'b1000; + 10'b001_0100110: q = 4'b1000; + 10'b001_0100111: q = 4'b1000; + 10'b001_0101000: q = 4'b1000; + 10'b001_0101001: q = 4'b1000; + 10'b001_0101010: q = 4'b1000; + 10'b001_0101011: q = 4'b1000; + 10'b001_0101100: q = 4'b1000; + 10'b001_0101101: q = 4'b1000; + 10'b001_0101110: q = 4'b1000; + 10'b001_0101111: q = 4'b1000; + 10'b001_0110000: q = 4'b1000; + 10'b001_0110001: q = 4'b1000; + 10'b001_0110010: q = 4'b1000; + 10'b001_0110011: q = 4'b1000; + 10'b001_0110100: q = 4'b1000; + 10'b001_0110101: q = 4'b1000; + 10'b001_0110110: q = 4'b1000; + 10'b001_0110111: q = 4'b1000; + 10'b001_0111000: q = 4'b1000; + 10'b001_0111001: q = 4'b1000; + 10'b001_0111010: q = 4'b1000; + 10'b001_0111011: q = 4'b1000; + 10'b001_0111100: q = 4'b1000; + 10'b001_0111101: q = 4'b1000; + 10'b001_0111110: q = 4'b1000; + 10'b001_0111111: q = 4'b1000; + 10'b001_1000000: q = 4'b0001; + 10'b001_1000001: q = 4'b0001; + 10'b001_1000010: q = 4'b0001; + 10'b001_1000011: q = 4'b0001; + 10'b001_1000100: q = 4'b0001; + 10'b001_1000101: q = 4'b0001; + 10'b001_1000110: q = 4'b0001; + 10'b001_1000111: q = 4'b0001; + 10'b001_1001000: q = 4'b0001; + 10'b001_1001001: q = 4'b0001; + 10'b001_1001010: q = 4'b0001; + 10'b001_1001011: q = 4'b0001; + 10'b001_1001100: q = 4'b0001; + 10'b001_1001101: q = 4'b0001; + 10'b001_1001110: q = 4'b0001; + 10'b001_1001111: q = 4'b0001; + 10'b001_1010000: q = 4'b0001; + 10'b001_1010001: q = 4'b0001; + 10'b001_1010010: q = 4'b0001; + 10'b001_1010011: q = 4'b0001; + 10'b001_1010100: q = 4'b0001; + 10'b001_1010101: q = 4'b0001; + 10'b001_1010110: q = 4'b0001; + 10'b001_1010111: q = 4'b0001; + 10'b001_1011000: q = 4'b0001; + 10'b001_1011001: q = 4'b0001; + 10'b001_1011010: q = 4'b0001; + 10'b001_1011011: q = 4'b0001; + 10'b001_1011100: q = 4'b0001; + 10'b001_1011101: q = 4'b0001; + 10'b001_1011110: q = 4'b0001; + 10'b001_1011111: q = 4'b0001; + 10'b001_1100000: q = 4'b0001; + 10'b001_1100001: q = 4'b0001; + 10'b001_1100010: q = 4'b0001; + 10'b001_1100011: q = 4'b0001; + 10'b001_1100100: q = 4'b0001; + 10'b001_1100101: q = 4'b0001; + 10'b001_1100110: q = 4'b0001; + 10'b001_1100111: q = 4'b0001; + 10'b001_1101000: q = 4'b0001; + 10'b001_1101001: q = 4'b0001; + 10'b001_1101010: q = 4'b0001; + 10'b001_1101011: q = 4'b0001; + 10'b001_1101100: q = 4'b0001; + 10'b001_1101101: q = 4'b0001; + 10'b001_1101110: q = 4'b0001; + 10'b001_1101111: q = 4'b0001; + 10'b001_1110000: q = 4'b0001; + 10'b001_1110001: q = 4'b0010; + 10'b001_1110010: q = 4'b0010; + 10'b001_1110011: q = 4'b0010; + 10'b001_1110100: q = 4'b0010; + 10'b001_1110101: q = 4'b0010; + 10'b001_1110110: q = 4'b0010; + 10'b001_1110111: q = 4'b0010; + 10'b001_1111000: q = 4'b0010; + 10'b001_1111001: q = 4'b0010; + 10'b001_1111010: q = 4'b0000; + 10'b001_1111011: q = 4'b0000; + 10'b001_1111100: q = 4'b0000; + 10'b001_1111101: q = 4'b0000; + 10'b001_1111110: q = 4'b0000; + 10'b001_1111111: q = 4'b0000; + 10'b010_0000000: q = 4'b0000; + 10'b010_0000001: q = 4'b0000; + 10'b010_0000010: q = 4'b0000; + 10'b010_0000011: q = 4'b0000; + 10'b010_0000100: q = 4'b0100; + 10'b010_0000101: q = 4'b0100; + 10'b010_0000110: q = 4'b0100; + 10'b010_0000111: q = 4'b0100; + 10'b010_0001000: q = 4'b0100; + 10'b010_0001001: q = 4'b0100; + 10'b010_0001010: q = 4'b0100; + 10'b010_0001011: q = 4'b0100; + 10'b010_0001100: q = 4'b0100; + 10'b010_0001101: q = 4'b0100; + 10'b010_0001110: q = 4'b0100; + 10'b010_0001111: q = 4'b1000; + 10'b010_0010000: q = 4'b1000; + 10'b010_0010001: q = 4'b1000; + 10'b010_0010010: q = 4'b1000; + 10'b010_0010011: q = 4'b1000; + 10'b010_0010100: q = 4'b1000; + 10'b010_0010101: q = 4'b1000; + 10'b010_0010110: q = 4'b1000; + 10'b010_0010111: q = 4'b1000; + 10'b010_0011000: q = 4'b1000; + 10'b010_0011001: q = 4'b1000; + 10'b010_0011010: q = 4'b1000; + 10'b010_0011011: q = 4'b1000; + 10'b010_0011100: q = 4'b1000; + 10'b010_0011101: q = 4'b1000; + 10'b010_0011110: q = 4'b1000; + 10'b010_0011111: q = 4'b1000; + 10'b010_0100000: q = 4'b1000; + 10'b010_0100001: q = 4'b1000; + 10'b010_0100010: q = 4'b1000; + 10'b010_0100011: q = 4'b1000; + 10'b010_0100100: q = 4'b1000; + 10'b010_0100101: q = 4'b1000; + 10'b010_0100110: q = 4'b1000; + 10'b010_0100111: q = 4'b1000; + 10'b010_0101000: q = 4'b1000; + 10'b010_0101001: q = 4'b1000; + 10'b010_0101010: q = 4'b1000; + 10'b010_0101011: q = 4'b1000; + 10'b010_0101100: q = 4'b1000; + 10'b010_0101101: q = 4'b1000; + 10'b010_0101110: q = 4'b1000; + 10'b010_0101111: q = 4'b1000; + 10'b010_0110000: q = 4'b1000; + 10'b010_0110001: q = 4'b1000; + 10'b010_0110010: q = 4'b1000; + 10'b010_0110011: q = 4'b1000; + 10'b010_0110100: q = 4'b1000; + 10'b010_0110101: q = 4'b1000; + 10'b010_0110110: q = 4'b1000; + 10'b010_0110111: q = 4'b1000; + 10'b010_0111000: q = 4'b1000; + 10'b010_0111001: q = 4'b1000; + 10'b010_0111010: q = 4'b1000; + 10'b010_0111011: q = 4'b1000; + 10'b010_0111100: q = 4'b1000; + 10'b010_0111101: q = 4'b1000; + 10'b010_0111110: q = 4'b1000; + 10'b010_0111111: q = 4'b1000; + 10'b010_1000000: q = 4'b0001; + 10'b010_1000001: q = 4'b0001; + 10'b010_1000010: q = 4'b0001; + 10'b010_1000011: q = 4'b0001; + 10'b010_1000100: q = 4'b0001; + 10'b010_1000101: q = 4'b0001; + 10'b010_1000110: q = 4'b0001; + 10'b010_1000111: q = 4'b0001; + 10'b010_1001000: q = 4'b0001; + 10'b010_1001001: q = 4'b0001; + 10'b010_1001010: q = 4'b0001; + 10'b010_1001011: q = 4'b0001; + 10'b010_1001100: q = 4'b0001; + 10'b010_1001101: q = 4'b0001; + 10'b010_1001110: q = 4'b0001; + 10'b010_1001111: q = 4'b0001; + 10'b010_1010000: q = 4'b0001; + 10'b010_1010001: q = 4'b0001; + 10'b010_1010010: q = 4'b0001; + 10'b010_1010011: q = 4'b0001; + 10'b010_1010100: q = 4'b0001; + 10'b010_1010101: q = 4'b0001; + 10'b010_1010110: q = 4'b0001; + 10'b010_1010111: q = 4'b0001; + 10'b010_1011000: q = 4'b0001; + 10'b010_1011001: q = 4'b0001; + 10'b010_1011010: q = 4'b0001; + 10'b010_1011011: q = 4'b0001; + 10'b010_1011100: q = 4'b0001; + 10'b010_1011101: q = 4'b0001; + 10'b010_1011110: q = 4'b0001; + 10'b010_1011111: q = 4'b0001; + 10'b010_1100000: q = 4'b0001; + 10'b010_1100001: q = 4'b0001; + 10'b010_1100010: q = 4'b0001; + 10'b010_1100011: q = 4'b0001; + 10'b010_1100100: q = 4'b0001; + 10'b010_1100101: q = 4'b0001; + 10'b010_1100110: q = 4'b0001; + 10'b010_1100111: q = 4'b0001; + 10'b010_1101000: q = 4'b0001; + 10'b010_1101001: q = 4'b0001; + 10'b010_1101010: q = 4'b0001; + 10'b010_1101011: q = 4'b0001; + 10'b010_1101100: q = 4'b0001; + 10'b010_1101101: q = 4'b0001; + 10'b010_1101110: q = 4'b0001; + 10'b010_1101111: q = 4'b0001; + 10'b010_1110000: q = 4'b0010; + 10'b010_1110001: q = 4'b0010; + 10'b010_1110010: q = 4'b0010; + 10'b010_1110011: q = 4'b0010; + 10'b010_1110100: q = 4'b0010; + 10'b010_1110101: q = 4'b0010; + 10'b010_1110110: q = 4'b0010; + 10'b010_1110111: q = 4'b0010; + 10'b010_1111000: q = 4'b0010; + 10'b010_1111001: q = 4'b0010; + 10'b010_1111010: q = 4'b0000; + 10'b010_1111011: q = 4'b0000; + 10'b010_1111100: q = 4'b0000; + 10'b010_1111101: q = 4'b0000; + 10'b010_1111110: q = 4'b0000; + 10'b010_1111111: q = 4'b0000; + 10'b011_0000000: q = 4'b0000; + 10'b011_0000001: q = 4'b0000; + 10'b011_0000010: q = 4'b0000; + 10'b011_0000011: q = 4'b0000; + 10'b011_0000100: q = 4'b0100; + 10'b011_0000101: q = 4'b0100; + 10'b011_0000110: q = 4'b0100; + 10'b011_0000111: q = 4'b0100; + 10'b011_0001000: q = 4'b0100; + 10'b011_0001001: q = 4'b0100; + 10'b011_0001010: q = 4'b0100; + 10'b011_0001011: q = 4'b0100; + 10'b011_0001100: q = 4'b0100; + 10'b011_0001101: q = 4'b0100; + 10'b011_0001110: q = 4'b0100; + 10'b011_0001111: q = 4'b0100; + 10'b011_0010000: q = 4'b1000; + 10'b011_0010001: q = 4'b1000; + 10'b011_0010010: q = 4'b1000; + 10'b011_0010011: q = 4'b1000; + 10'b011_0010100: q = 4'b1000; + 10'b011_0010101: q = 4'b1000; + 10'b011_0010110: q = 4'b1000; + 10'b011_0010111: q = 4'b1000; + 10'b011_0011000: q = 4'b1000; + 10'b011_0011001: q = 4'b1000; + 10'b011_0011010: q = 4'b1000; + 10'b011_0011011: q = 4'b1000; + 10'b011_0011100: q = 4'b1000; + 10'b011_0011101: q = 4'b1000; + 10'b011_0011110: q = 4'b1000; + 10'b011_0011111: q = 4'b1000; + 10'b011_0100000: q = 4'b1000; + 10'b011_0100001: q = 4'b1000; + 10'b011_0100010: q = 4'b1000; + 10'b011_0100011: q = 4'b1000; + 10'b011_0100100: q = 4'b1000; + 10'b011_0100101: q = 4'b1000; + 10'b011_0100110: q = 4'b1000; + 10'b011_0100111: q = 4'b1000; + 10'b011_0101000: q = 4'b1000; + 10'b011_0101001: q = 4'b1000; + 10'b011_0101010: q = 4'b1000; + 10'b011_0101011: q = 4'b1000; + 10'b011_0101100: q = 4'b1000; + 10'b011_0101101: q = 4'b1000; + 10'b011_0101110: q = 4'b1000; + 10'b011_0101111: q = 4'b1000; + 10'b011_0110000: q = 4'b1000; + 10'b011_0110001: q = 4'b1000; + 10'b011_0110010: q = 4'b1000; + 10'b011_0110011: q = 4'b1000; + 10'b011_0110100: q = 4'b1000; + 10'b011_0110101: q = 4'b1000; + 10'b011_0110110: q = 4'b1000; + 10'b011_0110111: q = 4'b1000; + 10'b011_0111000: q = 4'b1000; + 10'b011_0111001: q = 4'b1000; + 10'b011_0111010: q = 4'b1000; + 10'b011_0111011: q = 4'b1000; + 10'b011_0111100: q = 4'b1000; + 10'b011_0111101: q = 4'b1000; + 10'b011_0111110: q = 4'b1000; + 10'b011_0111111: q = 4'b1000; + 10'b011_1000000: q = 4'b0001; + 10'b011_1000001: q = 4'b0001; + 10'b011_1000010: q = 4'b0001; + 10'b011_1000011: q = 4'b0001; + 10'b011_1000100: q = 4'b0001; + 10'b011_1000101: q = 4'b0001; + 10'b011_1000110: q = 4'b0001; + 10'b011_1000111: q = 4'b0001; + 10'b011_1001000: q = 4'b0001; + 10'b011_1001001: q = 4'b0001; + 10'b011_1001010: q = 4'b0001; + 10'b011_1001011: q = 4'b0001; + 10'b011_1001100: q = 4'b0001; + 10'b011_1001101: q = 4'b0001; + 10'b011_1001110: q = 4'b0001; + 10'b011_1001111: q = 4'b0001; + 10'b011_1010000: q = 4'b0001; + 10'b011_1010001: q = 4'b0001; + 10'b011_1010010: q = 4'b0001; + 10'b011_1010011: q = 4'b0001; + 10'b011_1010100: q = 4'b0001; + 10'b011_1010101: q = 4'b0001; + 10'b011_1010110: q = 4'b0001; + 10'b011_1010111: q = 4'b0001; + 10'b011_1011000: q = 4'b0001; + 10'b011_1011001: q = 4'b0001; + 10'b011_1011010: q = 4'b0001; + 10'b011_1011011: q = 4'b0001; + 10'b011_1011100: q = 4'b0001; + 10'b011_1011101: q = 4'b0001; + 10'b011_1011110: q = 4'b0001; + 10'b011_1011111: q = 4'b0001; + 10'b011_1100000: q = 4'b0001; + 10'b011_1100001: q = 4'b0001; + 10'b011_1100010: q = 4'b0001; + 10'b011_1100011: q = 4'b0001; + 10'b011_1100100: q = 4'b0001; + 10'b011_1100101: q = 4'b0001; + 10'b011_1100110: q = 4'b0001; + 10'b011_1100111: q = 4'b0001; + 10'b011_1101000: q = 4'b0001; + 10'b011_1101001: q = 4'b0001; + 10'b011_1101010: q = 4'b0001; + 10'b011_1101011: q = 4'b0001; + 10'b011_1101100: q = 4'b0001; + 10'b011_1101101: q = 4'b0001; + 10'b011_1101110: q = 4'b0010; + 10'b011_1101111: q = 4'b0010; + 10'b011_1110000: q = 4'b0010; + 10'b011_1110001: q = 4'b0010; + 10'b011_1110010: q = 4'b0010; + 10'b011_1110011: q = 4'b0010; + 10'b011_1110100: q = 4'b0010; + 10'b011_1110101: q = 4'b0010; + 10'b011_1110110: q = 4'b0010; + 10'b011_1110111: q = 4'b0010; + 10'b011_1111000: q = 4'b0010; + 10'b011_1111001: q = 4'b0010; + 10'b011_1111010: q = 4'b0000; + 10'b011_1111011: q = 4'b0000; + 10'b011_1111100: q = 4'b0000; + 10'b011_1111101: q = 4'b0000; + 10'b011_1111110: q = 4'b0000; + 10'b011_1111111: q = 4'b0000; + 10'b100_0000000: q = 4'b0000; + 10'b100_0000001: q = 4'b0000; + 10'b100_0000010: q = 4'b0000; + 10'b100_0000011: q = 4'b0000; + 10'b100_0000100: q = 4'b0000; + 10'b100_0000101: q = 4'b0000; + 10'b100_0000110: q = 4'b0100; + 10'b100_0000111: q = 4'b0100; + 10'b100_0001000: q = 4'b0100; + 10'b100_0001001: q = 4'b0100; + 10'b100_0001010: q = 4'b0100; + 10'b100_0001011: q = 4'b0100; + 10'b100_0001100: q = 4'b0100; + 10'b100_0001101: q = 4'b0100; + 10'b100_0001110: q = 4'b0100; + 10'b100_0001111: q = 4'b0100; + 10'b100_0010000: q = 4'b0100; + 10'b100_0010001: q = 4'b0100; + 10'b100_0010010: q = 4'b1000; + 10'b100_0010011: q = 4'b1000; + 10'b100_0010100: q = 4'b1000; + 10'b100_0010101: q = 4'b1000; + 10'b100_0010110: q = 4'b1000; + 10'b100_0010111: q = 4'b1000; + 10'b100_0011000: q = 4'b1000; + 10'b100_0011001: q = 4'b1000; + 10'b100_0011010: q = 4'b1000; + 10'b100_0011011: q = 4'b1000; + 10'b100_0011100: q = 4'b1000; + 10'b100_0011101: q = 4'b1000; + 10'b100_0011110: q = 4'b1000; + 10'b100_0011111: q = 4'b1000; + 10'b100_0100000: q = 4'b1000; + 10'b100_0100001: q = 4'b1000; + 10'b100_0100010: q = 4'b1000; + 10'b100_0100011: q = 4'b1000; + 10'b100_0100100: q = 4'b1000; + 10'b100_0100101: q = 4'b1000; + 10'b100_0100110: q = 4'b1000; + 10'b100_0100111: q = 4'b1000; + 10'b100_0101000: q = 4'b1000; + 10'b100_0101001: q = 4'b1000; + 10'b100_0101010: q = 4'b1000; + 10'b100_0101011: q = 4'b1000; + 10'b100_0101100: q = 4'b1000; + 10'b100_0101101: q = 4'b1000; + 10'b100_0101110: q = 4'b1000; + 10'b100_0101111: q = 4'b1000; + 10'b100_0110000: q = 4'b1000; + 10'b100_0110001: q = 4'b1000; + 10'b100_0110010: q = 4'b1000; + 10'b100_0110011: q = 4'b1000; + 10'b100_0110100: q = 4'b1000; + 10'b100_0110101: q = 4'b1000; + 10'b100_0110110: q = 4'b1000; + 10'b100_0110111: q = 4'b1000; + 10'b100_0111000: q = 4'b1000; + 10'b100_0111001: q = 4'b1000; + 10'b100_0111010: q = 4'b1000; + 10'b100_0111011: q = 4'b1000; + 10'b100_0111100: q = 4'b1000; + 10'b100_0111101: q = 4'b1000; + 10'b100_0111110: q = 4'b1000; + 10'b100_0111111: q = 4'b1000; + 10'b100_1000000: q = 4'b0001; + 10'b100_1000001: q = 4'b0001; + 10'b100_1000010: q = 4'b0001; + 10'b100_1000011: q = 4'b0001; + 10'b100_1000100: q = 4'b0001; + 10'b100_1000101: q = 4'b0001; + 10'b100_1000110: q = 4'b0001; + 10'b100_1000111: q = 4'b0001; + 10'b100_1001000: q = 4'b0001; + 10'b100_1001001: q = 4'b0001; + 10'b100_1001010: q = 4'b0001; + 10'b100_1001011: q = 4'b0001; + 10'b100_1001100: q = 4'b0001; + 10'b100_1001101: q = 4'b0001; + 10'b100_1001110: q = 4'b0001; + 10'b100_1001111: q = 4'b0001; + 10'b100_1010000: q = 4'b0001; + 10'b100_1010001: q = 4'b0001; + 10'b100_1010010: q = 4'b0001; + 10'b100_1010011: q = 4'b0001; + 10'b100_1010100: q = 4'b0001; + 10'b100_1010101: q = 4'b0001; + 10'b100_1010110: q = 4'b0001; + 10'b100_1010111: q = 4'b0001; + 10'b100_1011000: q = 4'b0001; + 10'b100_1011001: q = 4'b0001; + 10'b100_1011010: q = 4'b0001; + 10'b100_1011011: q = 4'b0001; + 10'b100_1011100: q = 4'b0001; + 10'b100_1011101: q = 4'b0001; + 10'b100_1011110: q = 4'b0001; + 10'b100_1011111: q = 4'b0001; + 10'b100_1100000: q = 4'b0001; + 10'b100_1100001: q = 4'b0001; + 10'b100_1100010: q = 4'b0001; + 10'b100_1100011: q = 4'b0001; + 10'b100_1100100: q = 4'b0001; + 10'b100_1100101: q = 4'b0001; + 10'b100_1100110: q = 4'b0001; + 10'b100_1100111: q = 4'b0001; + 10'b100_1101000: q = 4'b0001; + 10'b100_1101001: q = 4'b0001; + 10'b100_1101010: q = 4'b0001; + 10'b100_1101011: q = 4'b0001; + 10'b100_1101100: q = 4'b0010; + 10'b100_1101101: q = 4'b0010; + 10'b100_1101110: q = 4'b0010; + 10'b100_1101111: q = 4'b0010; + 10'b100_1110000: q = 4'b0010; + 10'b100_1110001: q = 4'b0010; + 10'b100_1110010: q = 4'b0010; + 10'b100_1110011: q = 4'b0010; + 10'b100_1110100: q = 4'b0010; + 10'b100_1110101: q = 4'b0010; + 10'b100_1110110: q = 4'b0010; + 10'b100_1110111: q = 4'b0010; + 10'b100_1111000: q = 4'b0000; + 10'b100_1111001: q = 4'b0000; + 10'b100_1111010: q = 4'b0000; + 10'b100_1111011: q = 4'b0000; + 10'b100_1111100: q = 4'b0000; + 10'b100_1111101: q = 4'b0000; + 10'b100_1111110: q = 4'b0000; + 10'b100_1111111: q = 4'b0000; + 10'b101_0000000: q = 4'b0000; + 10'b101_0000001: q = 4'b0000; + 10'b101_0000010: q = 4'b0000; + 10'b101_0000011: q = 4'b0000; + 10'b101_0000100: q = 4'b0000; + 10'b101_0000101: q = 4'b0000; + 10'b101_0000110: q = 4'b0100; + 10'b101_0000111: q = 4'b0100; + 10'b101_0001000: q = 4'b0100; + 10'b101_0001001: q = 4'b0100; + 10'b101_0001010: q = 4'b0100; + 10'b101_0001011: q = 4'b0100; + 10'b101_0001100: q = 4'b0100; + 10'b101_0001101: q = 4'b0100; + 10'b101_0001110: q = 4'b0100; + 10'b101_0001111: q = 4'b0100; + 10'b101_0010000: q = 4'b0100; + 10'b101_0010001: q = 4'b0100; + 10'b101_0010010: q = 4'b0100; + 10'b101_0010011: q = 4'b0100; + 10'b101_0010100: q = 4'b1000; + 10'b101_0010101: q = 4'b1000; + 10'b101_0010110: q = 4'b1000; + 10'b101_0010111: q = 4'b1000; + 10'b101_0011000: q = 4'b1000; + 10'b101_0011001: q = 4'b1000; + 10'b101_0011010: q = 4'b1000; + 10'b101_0011011: q = 4'b1000; + 10'b101_0011100: q = 4'b1000; + 10'b101_0011101: q = 4'b1000; + 10'b101_0011110: q = 4'b1000; + 10'b101_0011111: q = 4'b1000; + 10'b101_0100000: q = 4'b1000; + 10'b101_0100001: q = 4'b1000; + 10'b101_0100010: q = 4'b1000; + 10'b101_0100011: q = 4'b1000; + 10'b101_0100100: q = 4'b1000; + 10'b101_0100101: q = 4'b1000; + 10'b101_0100110: q = 4'b1000; + 10'b101_0100111: q = 4'b1000; + 10'b101_0101000: q = 4'b1000; + 10'b101_0101001: q = 4'b1000; + 10'b101_0101010: q = 4'b1000; + 10'b101_0101011: q = 4'b1000; + 10'b101_0101100: q = 4'b1000; + 10'b101_0101101: q = 4'b1000; + 10'b101_0101110: q = 4'b1000; + 10'b101_0101111: q = 4'b1000; + 10'b101_0110000: q = 4'b1000; + 10'b101_0110001: q = 4'b1000; + 10'b101_0110010: q = 4'b1000; + 10'b101_0110011: q = 4'b1000; + 10'b101_0110100: q = 4'b1000; + 10'b101_0110101: q = 4'b1000; + 10'b101_0110110: q = 4'b1000; + 10'b101_0110111: q = 4'b1000; + 10'b101_0111000: q = 4'b1000; + 10'b101_0111001: q = 4'b1000; + 10'b101_0111010: q = 4'b1000; + 10'b101_0111011: q = 4'b1000; + 10'b101_0111100: q = 4'b1000; + 10'b101_0111101: q = 4'b1000; + 10'b101_0111110: q = 4'b1000; + 10'b101_0111111: q = 4'b1000; + 10'b101_1000000: q = 4'b0001; + 10'b101_1000001: q = 4'b0001; + 10'b101_1000010: q = 4'b0001; + 10'b101_1000011: q = 4'b0001; + 10'b101_1000100: q = 4'b0001; + 10'b101_1000101: q = 4'b0001; + 10'b101_1000110: q = 4'b0001; + 10'b101_1000111: q = 4'b0001; + 10'b101_1001000: q = 4'b0001; + 10'b101_1001001: q = 4'b0001; + 10'b101_1001010: q = 4'b0001; + 10'b101_1001011: q = 4'b0001; + 10'b101_1001100: q = 4'b0001; + 10'b101_1001101: q = 4'b0001; + 10'b101_1001110: q = 4'b0001; + 10'b101_1001111: q = 4'b0001; + 10'b101_1010000: q = 4'b0001; + 10'b101_1010001: q = 4'b0001; + 10'b101_1010010: q = 4'b0001; + 10'b101_1010011: q = 4'b0001; + 10'b101_1010100: q = 4'b0001; + 10'b101_1010101: q = 4'b0001; + 10'b101_1010110: q = 4'b0001; + 10'b101_1010111: q = 4'b0001; + 10'b101_1011000: q = 4'b0001; + 10'b101_1011001: q = 4'b0001; + 10'b101_1011010: q = 4'b0001; + 10'b101_1011011: q = 4'b0001; + 10'b101_1011100: q = 4'b0001; + 10'b101_1011101: q = 4'b0001; + 10'b101_1011110: q = 4'b0001; + 10'b101_1011111: q = 4'b0001; + 10'b101_1100000: q = 4'b0001; + 10'b101_1100001: q = 4'b0001; + 10'b101_1100010: q = 4'b0001; + 10'b101_1100011: q = 4'b0001; + 10'b101_1100100: q = 4'b0001; + 10'b101_1100101: q = 4'b0001; + 10'b101_1100110: q = 4'b0001; + 10'b101_1100111: q = 4'b0001; + 10'b101_1101000: q = 4'b0001; + 10'b101_1101001: q = 4'b0001; + 10'b101_1101010: q = 4'b0001; + 10'b101_1101011: q = 4'b0001; + 10'b101_1101100: q = 4'b0010; + 10'b101_1101101: q = 4'b0010; + 10'b101_1101110: q = 4'b0010; + 10'b101_1101111: q = 4'b0010; + 10'b101_1110000: q = 4'b0010; + 10'b101_1110001: q = 4'b0010; + 10'b101_1110010: q = 4'b0010; + 10'b101_1110011: q = 4'b0010; + 10'b101_1110100: q = 4'b0010; + 10'b101_1110101: q = 4'b0010; + 10'b101_1110110: q = 4'b0010; + 10'b101_1110111: q = 4'b0010; + 10'b101_1111000: q = 4'b0000; + 10'b101_1111001: q = 4'b0000; + 10'b101_1111010: q = 4'b0000; + 10'b101_1111011: q = 4'b0000; + 10'b101_1111100: q = 4'b0000; + 10'b101_1111101: q = 4'b0000; + 10'b101_1111110: q = 4'b0000; + 10'b101_1111111: q = 4'b0000; + 10'b110_0000000: q = 4'b0000; + 10'b110_0000001: q = 4'b0000; + 10'b110_0000010: q = 4'b0000; + 10'b110_0000011: q = 4'b0000; + 10'b110_0000100: q = 4'b0000; + 10'b110_0000101: q = 4'b0000; + 10'b110_0000110: q = 4'b0000; + 10'b110_0000111: q = 4'b0000; + 10'b110_0001000: q = 4'b0100; + 10'b110_0001001: q = 4'b0100; + 10'b110_0001010: q = 4'b0100; + 10'b110_0001011: q = 4'b0100; + 10'b110_0001100: q = 4'b0100; + 10'b110_0001101: q = 4'b0100; + 10'b110_0001110: q = 4'b0100; + 10'b110_0001111: q = 4'b0100; + 10'b110_0010000: q = 4'b0100; + 10'b110_0010001: q = 4'b0100; + 10'b110_0010010: q = 4'b0100; + 10'b110_0010011: q = 4'b0100; + 10'b110_0010100: q = 4'b1000; + 10'b110_0010101: q = 4'b1000; + 10'b110_0010110: q = 4'b1000; + 10'b110_0010111: q = 4'b1000; + 10'b110_0011000: q = 4'b1000; + 10'b110_0011001: q = 4'b1000; + 10'b110_0011010: q = 4'b1000; + 10'b110_0011011: q = 4'b1000; + 10'b110_0011100: q = 4'b1000; + 10'b110_0011101: q = 4'b1000; + 10'b110_0011110: q = 4'b1000; + 10'b110_0011111: q = 4'b1000; + 10'b110_0100000: q = 4'b1000; + 10'b110_0100001: q = 4'b1000; + 10'b110_0100010: q = 4'b1000; + 10'b110_0100011: q = 4'b1000; + 10'b110_0100100: q = 4'b1000; + 10'b110_0100101: q = 4'b1000; + 10'b110_0100110: q = 4'b1000; + 10'b110_0100111: q = 4'b1000; + 10'b110_0101000: q = 4'b1000; + 10'b110_0101001: q = 4'b1000; + 10'b110_0101010: q = 4'b1000; + 10'b110_0101011: q = 4'b1000; + 10'b110_0101100: q = 4'b1000; + 10'b110_0101101: q = 4'b1000; + 10'b110_0101110: q = 4'b1000; + 10'b110_0101111: q = 4'b1000; + 10'b110_0110000: q = 4'b1000; + 10'b110_0110001: q = 4'b1000; + 10'b110_0110010: q = 4'b1000; + 10'b110_0110011: q = 4'b1000; + 10'b110_0110100: q = 4'b1000; + 10'b110_0110101: q = 4'b1000; + 10'b110_0110110: q = 4'b1000; + 10'b110_0110111: q = 4'b1000; + 10'b110_0111000: q = 4'b1000; + 10'b110_0111001: q = 4'b1000; + 10'b110_0111010: q = 4'b1000; + 10'b110_0111011: q = 4'b1000; + 10'b110_0111100: q = 4'b1000; + 10'b110_0111101: q = 4'b1000; + 10'b110_0111110: q = 4'b1000; + 10'b110_0111111: q = 4'b1000; + 10'b110_1000000: q = 4'b0001; + 10'b110_1000001: q = 4'b0001; + 10'b110_1000010: q = 4'b0001; + 10'b110_1000011: q = 4'b0001; + 10'b110_1000100: q = 4'b0001; + 10'b110_1000101: q = 4'b0001; + 10'b110_1000110: q = 4'b0001; + 10'b110_1000111: q = 4'b0001; + 10'b110_1001000: q = 4'b0001; + 10'b110_1001001: q = 4'b0001; + 10'b110_1001010: q = 4'b0001; + 10'b110_1001011: q = 4'b0001; + 10'b110_1001100: q = 4'b0001; + 10'b110_1001101: q = 4'b0001; + 10'b110_1001110: q = 4'b0001; + 10'b110_1001111: q = 4'b0001; + 10'b110_1010000: q = 4'b0001; + 10'b110_1010001: q = 4'b0001; + 10'b110_1010010: q = 4'b0001; + 10'b110_1010011: q = 4'b0001; + 10'b110_1010100: q = 4'b0001; + 10'b110_1010101: q = 4'b0001; + 10'b110_1010110: q = 4'b0001; + 10'b110_1010111: q = 4'b0001; + 10'b110_1011000: q = 4'b0001; + 10'b110_1011001: q = 4'b0001; + 10'b110_1011010: q = 4'b0001; + 10'b110_1011011: q = 4'b0001; + 10'b110_1011100: q = 4'b0001; + 10'b110_1011101: q = 4'b0001; + 10'b110_1011110: q = 4'b0001; + 10'b110_1011111: q = 4'b0001; + 10'b110_1100000: q = 4'b0001; + 10'b110_1100001: q = 4'b0001; + 10'b110_1100010: q = 4'b0001; + 10'b110_1100011: q = 4'b0001; + 10'b110_1100100: q = 4'b0001; + 10'b110_1100101: q = 4'b0001; + 10'b110_1100110: q = 4'b0001; + 10'b110_1100111: q = 4'b0001; + 10'b110_1101000: q = 4'b0001; + 10'b110_1101001: q = 4'b0001; + 10'b110_1101010: q = 4'b0010; + 10'b110_1101011: q = 4'b0010; + 10'b110_1101100: q = 4'b0010; + 10'b110_1101101: q = 4'b0010; + 10'b110_1101110: q = 4'b0010; + 10'b110_1101111: q = 4'b0010; + 10'b110_1110000: q = 4'b0010; + 10'b110_1110001: q = 4'b0010; + 10'b110_1110010: q = 4'b0010; + 10'b110_1110011: q = 4'b0010; + 10'b110_1110100: q = 4'b0010; + 10'b110_1110101: q = 4'b0010; + 10'b110_1110110: q = 4'b0010; + 10'b110_1110111: q = 4'b0010; + 10'b110_1111000: q = 4'b0000; + 10'b110_1111001: q = 4'b0000; + 10'b110_1111010: q = 4'b0000; + 10'b110_1111011: q = 4'b0000; + 10'b110_1111100: q = 4'b0000; + 10'b110_1111101: q = 4'b0000; + 10'b110_1111110: q = 4'b0000; + 10'b110_1111111: q = 4'b0000; + 10'b111_0000000: q = 4'b0000; + 10'b111_0000001: q = 4'b0000; + 10'b111_0000010: q = 4'b0000; + 10'b111_0000011: q = 4'b0000; + 10'b111_0000100: q = 4'b0000; + 10'b111_0000101: q = 4'b0000; + 10'b111_0000110: q = 4'b0000; + 10'b111_0000111: q = 4'b0000; + 10'b111_0001000: q = 4'b0100; + 10'b111_0001001: q = 4'b0100; + 10'b111_0001010: q = 4'b0100; + 10'b111_0001011: q = 4'b0100; + 10'b111_0001100: q = 4'b0100; + 10'b111_0001101: q = 4'b0100; + 10'b111_0001110: q = 4'b0100; + 10'b111_0001111: q = 4'b0100; + 10'b111_0010000: q = 4'b0100; + 10'b111_0010001: q = 4'b0100; + 10'b111_0010010: q = 4'b0100; + 10'b111_0010011: q = 4'b0100; + 10'b111_0010100: q = 4'b0100; + 10'b111_0010101: q = 4'b0100; + 10'b111_0010110: q = 4'b0100; + 10'b111_0010111: q = 4'b0100; + 10'b111_0011000: q = 4'b1000; + 10'b111_0011001: q = 4'b1000; + 10'b111_0011010: q = 4'b1000; + 10'b111_0011011: q = 4'b1000; + 10'b111_0011100: q = 4'b1000; + 10'b111_0011101: q = 4'b1000; + 10'b111_0011110: q = 4'b1000; + 10'b111_0011111: q = 4'b1000; + 10'b111_0100000: q = 4'b1000; + 10'b111_0100001: q = 4'b1000; + 10'b111_0100010: q = 4'b1000; + 10'b111_0100011: q = 4'b1000; + 10'b111_0100100: q = 4'b1000; + 10'b111_0100101: q = 4'b1000; + 10'b111_0100110: q = 4'b1000; + 10'b111_0100111: q = 4'b1000; + 10'b111_0101000: q = 4'b1000; + 10'b111_0101001: q = 4'b1000; + 10'b111_0101010: q = 4'b1000; + 10'b111_0101011: q = 4'b1000; + 10'b111_0101100: q = 4'b1000; + 10'b111_0101101: q = 4'b1000; + 10'b111_0101110: q = 4'b1000; + 10'b111_0101111: q = 4'b1000; + 10'b111_0110000: q = 4'b1000; + 10'b111_0110001: q = 4'b1000; + 10'b111_0110010: q = 4'b1000; + 10'b111_0110011: q = 4'b1000; + 10'b111_0110100: q = 4'b1000; + 10'b111_0110101: q = 4'b1000; + 10'b111_0110110: q = 4'b1000; + 10'b111_0110111: q = 4'b1000; + 10'b111_0111000: q = 4'b1000; + 10'b111_0111001: q = 4'b1000; + 10'b111_0111010: q = 4'b1000; + 10'b111_0111011: q = 4'b1000; + 10'b111_0111100: q = 4'b1000; + 10'b111_0111101: q = 4'b1000; + 10'b111_0111110: q = 4'b1000; + 10'b111_0111111: q = 4'b1000; + 10'b111_1000000: q = 4'b0001; + 10'b111_1000001: q = 4'b0001; + 10'b111_1000010: q = 4'b0001; + 10'b111_1000011: q = 4'b0001; + 10'b111_1000100: q = 4'b0001; + 10'b111_1000101: q = 4'b0001; + 10'b111_1000110: q = 4'b0001; + 10'b111_1000111: q = 4'b0001; + 10'b111_1001000: q = 4'b0001; + 10'b111_1001001: q = 4'b0001; + 10'b111_1001010: q = 4'b0001; + 10'b111_1001011: q = 4'b0001; + 10'b111_1001100: q = 4'b0001; + 10'b111_1001101: q = 4'b0001; + 10'b111_1001110: q = 4'b0001; + 10'b111_1001111: q = 4'b0001; + 10'b111_1010000: q = 4'b0001; + 10'b111_1010001: q = 4'b0001; + 10'b111_1010010: q = 4'b0001; + 10'b111_1010011: q = 4'b0001; + 10'b111_1010100: q = 4'b0001; + 10'b111_1010101: q = 4'b0001; + 10'b111_1010110: q = 4'b0001; + 10'b111_1010111: q = 4'b0001; + 10'b111_1011000: q = 4'b0001; + 10'b111_1011001: q = 4'b0001; + 10'b111_1011010: q = 4'b0001; + 10'b111_1011011: q = 4'b0001; + 10'b111_1011100: q = 4'b0001; + 10'b111_1011101: q = 4'b0001; + 10'b111_1011110: q = 4'b0001; + 10'b111_1011111: q = 4'b0001; + 10'b111_1100000: q = 4'b0001; + 10'b111_1100001: q = 4'b0001; + 10'b111_1100010: q = 4'b0001; + 10'b111_1100011: q = 4'b0001; + 10'b111_1100100: q = 4'b0001; + 10'b111_1100101: q = 4'b0001; + 10'b111_1100110: q = 4'b0001; + 10'b111_1100111: q = 4'b0001; + 10'b111_1101000: q = 4'b0010; + 10'b111_1101001: q = 4'b0010; + 10'b111_1101010: q = 4'b0010; + 10'b111_1101011: q = 4'b0010; + 10'b111_1101100: q = 4'b0010; + 10'b111_1101101: q = 4'b0010; + 10'b111_1101110: q = 4'b0010; + 10'b111_1101111: q = 4'b0010; + 10'b111_1110000: q = 4'b0010; + 10'b111_1110001: q = 4'b0010; + 10'b111_1110010: q = 4'b0010; + 10'b111_1110011: q = 4'b0010; + 10'b111_1110100: q = 4'b0010; + 10'b111_1110101: q = 4'b0010; + 10'b111_1110110: q = 4'b0010; + 10'b111_1110111: q = 4'b0010; + 10'b111_1111000: q = 4'b0000; + 10'b111_1111001: q = 4'b0000; + 10'b111_1111010: q = 4'b0000; + 10'b111_1111011: q = 4'b0000; + 10'b111_1111100: q = 4'b0000; + 10'b111_1111101: q = 4'b0000; + 10'b111_1111110: q = 4'b0000; + 10'b111_1111111: q = 4'b0000; + endcase + +endmodule \ No newline at end of file diff --git a/pipelined/srt/qslc_r4a2b b/pipelined/srt/qslc_r4a2b new file mode 100755 index 000000000..f719bbf47 Binary files /dev/null and b/pipelined/srt/qslc_r4a2b differ diff --git a/pipelined/srt/qslc_r4a2b.c b/pipelined/srt/qslc_r4a2b.c new file mode 100644 index 000000000..94a3a4cd4 --- /dev/null +++ b/pipelined/srt/qslc_r4a2b.c @@ -0,0 +1,190 @@ +/* + Program: qslc_r4a2.c + Description: Prints out Quotient Selection Table (assumes CPA is utilized to reduce memory) + User: James E. Stine + +*/ + +#include +#include + +#define DIVISOR_SIZE 3 +#define CARRY_SIZE 7 +#define SUM_SIZE 7 +#define TOT_SIZE 7 + +void disp_binary(double, int, int); + +struct bits { + unsigned int divisor : DIVISOR_SIZE; + int tot : TOT_SIZE; +} pla; + +/* + + Function: disp_binary + Description: This function displays a Double-Precision number into + four 16 bit integers using the global union variable + dp_number + Argument List: double x The value to be converted + int bits_to_left Number of bits left of radix point + int bits_to_right Number of bits right of radix point + Return value: none + +*/ +void disp_binary(double x, int bits_to_left, int bits_to_right) { + int i; + double diff; + + if (fabs(x) < pow(2.0, ((double) -bits_to_right)) ) { + for (i = -bits_to_left + 1; i <= bits_to_right; i++) { + printf("0"); + } + if (i == bits_to_right+1) + ; + + return; + } + + if (x < 0.0) + x = pow(2.0, ((double) bits_to_left)) + x; + + for (i = -bits_to_left + 1; i <= bits_to_right; i++) { + diff = pow(2.0, ((double) -i) ); + if (x < diff) + printf("0"); + else { + printf("1"); + x -= diff; + } + if (i == 0) + ; + + } + +} + +int main() { + int m; + int n; + int o; + pla.divisor = 0; + pla.tot = 0; + for (o=0; o < pow(2.0, DIVISOR_SIZE); o++) { + for (m=0; m < pow(2.0, TOT_SIZE); m++) { + /* + 4 bits for Radix 4 (a=2) + 1000 = +2 + 0100 = +1 + 0000 = 0 + 0010 = -1 + 0001 = -2 + */ + switch (pla.divisor) { + case 0: + if ((pla.tot) >= 12) + printf("8"); + else if ((pla.tot) >= 4) + printf("4"); + else if ((pla.tot) >= -4) + printf("0"); + else if ((pla.tot) >= -13) + printf("2"); + else + printf("1"); + break; + case 1: + if ((pla.tot) >= 14) + printf("8"); + else if ((pla.tot) >= 4) + printf("4"); + else if ((pla.tot) >= -6) + printf("0"); + else if ((pla.tot) >= -15) + printf("2"); + else + printf("1"); + break; + case 2: + if ((pla.tot) >= 15) + printf("8"); + else if ((pla.tot) >= 4) + printf("4"); + else if ((pla.tot) >= -6) + printf("0"); + else if ((pla.tot) >= -16) + printf("2"); + else + printf("1"); + break; + case 3: + if ((pla.tot) >= 16) + printf("8"); + else if ((pla.tot) >= 4) + printf("4"); + else if ((pla.tot) >= -6) + printf("0"); + else if ((pla.tot) >= -18) + printf("2"); + else + printf("1"); + break; + case 4: + if ((pla.tot) >= 18) + printf("8"); + else if ((pla.tot) >= 6) + printf("4"); + else if ((pla.tot) >= -8) + printf("0"); + else if ((pla.tot) >= -20) + printf("2"); + else + printf("1"); + break; + case 5: + if ((pla.tot) >= 20) + printf("8"); + else if ((pla.tot) >= 6) + printf("4"); + else if ((pla.tot) >= -8) + printf("0"); + else if ((pla.tot) >= -20) + printf("2"); + else + printf("1"); + break; + case 6: + if ((pla.tot) >= 20) + printf("8"); + else if ((pla.tot) >= 8) + printf("4"); + else if ((pla.tot) >= -8) + printf("0"); + else if ((pla.tot) >= -22) + printf("2"); + else + printf("1"); + break; + case 7: + if ((pla.tot) >= 24) + printf("8"); + else if ((pla.tot) >= 8) + printf("4"); + else if ((pla.tot) >= -8) + printf("0"); + else if ((pla.tot) >= -24) + printf("2"); + else + printf("1"); + break; + default: printf ("X"); + + } + + printf("\n"); + (pla.tot)++; + } + (pla.divisor)++; + } + +} diff --git a/pipelined/srt/qslc_r4a2b.tv b/pipelined/srt/qslc_r4a2b.tv new file mode 100644 index 000000000..b92d81e8e --- /dev/null +++ b/pipelined/srt/qslc_r4a2b.tv @@ -0,0 +1,1024 @@ +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +8 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/pipelined/srt/sim-srt4 b/pipelined/srt/sim-srt4 new file mode 100755 index 000000000..1293b7261 --- /dev/null +++ b/pipelined/srt/sim-srt4 @@ -0,0 +1,2 @@ +vsim -do "do srt-radix4.do" + diff --git a/pipelined/srt/sim-srt4-batch b/pipelined/srt/sim-srt4-batch new file mode 100755 index 000000000..56cbcecb9 --- /dev/null +++ b/pipelined/srt/sim-srt4-batch @@ -0,0 +1 @@ +vsim -c -do "do srt-radix4.do" diff --git a/pipelined/srt/srt-radix4.do b/pipelined/srt/srt-radix4.do new file mode 100644 index 000000000..b213aa994 --- /dev/null +++ b/pipelined/srt/srt-radix4.do @@ -0,0 +1,31 @@ +# srt.do +# +# David_Harris@hmc.edu 19 October 2021 + +# Use this wally-pipelined.do file to run this example. +# Either bring up ModelSim and type the following at the "ModelSim>" prompt: +# do wally-pipelined.do +# or, to run from a shell, type the following at the shell prompt: +# vsim -do wally-pipelined.do -c +# (omit the "-c" to see the GUI while running from the shell) + +onbreak {resume} + +# create library +if [file exists work] { + vdel -all +} +vlib work + +vlog +incdir+../config/rv64gc +incdir+../config/shared srt-radix4.sv testbench-radix4.sv qsel4.sv ../src/generic/flop/flop*.sv ../src/generic/mux.sv ../src/generic/lzc.sv +vopt +acc work.testbenchradix4 -o workopt +vsim workopt + +-- display input and output signals as hexidecimal values +add wave /testbenchradix4/* +add wave /testbenchradix4/srtradix4/* +add wave /testbenchradix4/srtradix4/qsel4/* +add wave /testbenchradix4/srtradix4/otfc4/* + +-- Run the Simulation +run -all diff --git a/pipelined/srt/srt-radix4.sv b/pipelined/srt/srt-radix4.sv new file mode 100644 index 000000000..ccb6453c0 --- /dev/null +++ b/pipelined/srt/srt-radix4.sv @@ -0,0 +1,323 @@ +/////////////////////////////////////////// +// srt.sv +// +// Written: David_Harris@hmc.edu 13 January 2022 +// Modified: +// +// Purpose: Combined Divide and Square Root Floating Point and Integer Unit +// +// A component of the Wally configurable RISC-V project. +// +// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University +// +// MIT LICENSE +// Permission is hereby granted, free of charge, to any person obtaining a copy of this +// software and associated documentation files (the "Software"), to deal in the Software +// without restriction, including without limitation the rights to use, copy, modify, merge, +// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons +// to whom the Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +// OR OTHER DEALINGS IN THE SOFTWARE. +//////////////////////////////////////////////////////////////////////////////////////////////// + +`include "wally-config.vh" + +`define DIVLEN ((`NF<(`XLEN)) ? (`XLEN) : `NF) + +module srtradix4 ( + input logic clk, + input logic Start, + input logic Stall, // *** multiple pipe stages + input logic Flush, // *** multiple pipe stages + // Floating Point Inputs + // later add exponents, signs, special cases + input logic XSign, YSign, + input logic [`NE-1:0] XExp, YExp, + input logic [`NF-1:0] XFrac, YFrac, + input logic [`XLEN-1:0] SrcA, SrcB, + input logic [1:0] Fmt, // Floats: 00 = 16 bit, 01 = 32 bit, 10 = 64 bit, 11 = 128 bit + input logic W64, // 32-bit ints on XLEN=64 + input logic Signed, // Interpret integers as signed 2's complement + input logic Int, // Choose integer inputs + input logic Sqrt, // perform square root, not divide + output logic rsign, + output logic [`DIVLEN-1:0] Quot, Rem, // *** later handle integers + output logic [`NE-1:0] rExp, + output logic [3:0] Flags +); + + // logic qp, qz, qm; // quotient is +1, 0, or -1 + logic [3:0] q; + logic [`NE-1:0] calcExp; + logic calcSign; + logic [`DIVLEN-1:0] X, Dpreproc; + logic [`DIVLEN+3:0] WS, WSA, WSN; + logic [`DIVLEN+3:0] WC, WCA, WCN; + logic [`DIVLEN+3:0] D, DBar, D2, DBar2, Dsel; + logic [$clog2(`XLEN+1)-1:0] intExp; + logic intSign; + + srtpreproc preproc(SrcA, SrcB, XFrac, YFrac, Fmt, W64, Signed, Int, Sqrt, X, Dpreproc, intExp, intSign); + + // Top Muxes and Registers + // When start is asserted, the inputs are loaded into the divider. + // Otherwise, the divisor is retained and the partial remainder + // is fed back for the next iteration. + // - assumed one is added here since all numbers are normlaized + // *** wait what about zero? is that specal case? can the divider handle it? + // - when the start signal is asserted X and 0 are loaded into WS and WC + // - otherwise load WSA into the flipflop + // *** what does N and A stand for? + // *** change shift amount for radix4 + mux2 #(`DIVLEN+4) wsmux({WSA[`DIVLEN+1:0], 2'b0}, {4'b0001, X}, Start, WSN); + flop #(`DIVLEN+4) wsflop(clk, WSN, WS); + mux2 #(`DIVLEN+4) wcmux({WCA[`DIVLEN+1:0], 2'b0}, {`DIVLEN+4{1'b0}}, Start, WCN); + flop #(`DIVLEN+4) wcflop(clk, WCN, WC); + flopen #(`DIVLEN+4) dflop(clk, Start, {4'b0001, Dpreproc}, D); + + // Quotient Selection logic + // Given partial remainder, select quotient of +1, 0, or -1 (qp, qz, pm) + // *** change this for radix 4 - generate w/ stine code + // q encoding: + // 1000 = +2 + // 0100 = +1 + // 0000 = 0 + // 0010 = -1 + // 0001 = -2 + qsel4 qsel4(.D, .WS, .WC, .q); + + // Store the expoenent and sign until division is done + flopen #(`NE) expflop(clk, Start, calcExp, rExp); + flopen #(1) signflop(clk, Start, calcSign, rsign); + + // Divisor Selection logic + // *** radix 4 change to choose -2 to 2 + // - choose the negitive version of what's being selected + assign DBar = ~D; + assign DBar2 = {~D[`DIVLEN+2:0], 1'b1}; + assign D2 = {D[`DIVLEN+2:0], 1'b0}; + + always_comb + case (q) + 4'b1000: Dsel = DBar2; + 4'b0100: Dsel = DBar; + 4'b0000: Dsel = {(`DIVLEN+4){1'b0}}; + 4'b0010: Dsel = D; + 4'b0001: Dsel = D2; + default: Dsel = {`DIVLEN+4{1'bx}}; + endcase + + // Partial Product Generation + // WSA, WCA = WS + WC - qD + csa #(`DIVLEN+4) csa(WS, WC, Dsel, |q[3:2], WSA, WCA); + + //*** change for radix 4 + otfc4 #(`DIVLEN) otfc4(clk, Start, q, Quot); + + expcalc expcalc(.XExp, .YExp, .calcExp); + + signcalc signcalc(.XSign, .YSign, .calcSign); + +endmodule + +//////////////// +// Submodules // +//////////////// + +/////////////////// +// Preprocessing // +/////////////////// +module srtpreproc ( + input logic [`XLEN-1:0] SrcA, SrcB, + input logic [`NF-1:0] XFrac, YFrac, + input logic [1:0] Fmt, // Floats: 00 = 16 bit, 01 = 32 bit, 10 = 64 bit, 11 = 128 bit + input logic W64, // 32-bit ints on XLEN=64 + input logic Signed, // Interpret integers as signed 2's complement + input logic Int, // Choose integer inputs + input logic Sqrt, // perform square root, not divide + output logic [`DIVLEN-1:0] X, D, + output logic [$clog2(`XLEN+1)-1:0] intExp, // Quotient integer exponent + output logic intSign // Quotient integer sign +); + + logic [$clog2(`XLEN+1)-1:0] zeroCntA, zeroCntB; + logic [`XLEN-1:0] PosA, PosB; + logic [`DIVLEN-1:0] ExtraA, ExtraB, PreprocA, PreprocB, PreprocX, PreprocY; + + assign PosA = (Signed & SrcA[`XLEN - 1]) ? -SrcA : SrcA; + assign PosB = (Signed & SrcB[`XLEN - 1]) ? -SrcB : SrcB; + + lzc #(`XLEN) lzcA (PosA, zeroCntA); + lzc #(`XLEN) lzcB (PosB, zeroCntB); + + assign ExtraA = {PosA, {`DIVLEN-`XLEN{1'b0}}}; + assign ExtraB = {PosB, {`DIVLEN-`XLEN{1'b0}}}; + + assign PreprocA = ExtraA << zeroCntA; + assign PreprocB = ExtraB << (zeroCntB + 1); + assign PreprocX = {XFrac, {`DIVLEN-`NF{1'b0}}}; + assign PreprocY = {YFrac, {`DIVLEN-`NF{1'b0}}}; + + + assign X = Int ? PreprocA : PreprocX; + assign D = Int ? PreprocB : PreprocY; + assign intExp = zeroCntB - zeroCntA + 1; + assign intSign = Signed & (SrcA[`XLEN - 1] ^ SrcB[`XLEN - 1]); +endmodule + +///////////////////////////////// +// Quotient Selection, Radix 2 // +///////////////////////////////// +module qsel2 ( // *** eventually just change to 4 bits + input logic [`DIVLEN+3:`DIVLEN] ps, pc, + output logic qp, qz, qm +); + + logic [`DIVLEN+3:`DIVLEN] p, g; + logic magnitude, sign, cout; + + // The quotient selection logic is presented for simplicity, not + // for efficiency. You can probably optimize your logic to + // select the proper divisor with less delay. + + // Quotient equations from EE371 lecture notes 13-20 + assign p = ps ^ pc; + assign g = ps & pc; + + assign #1 magnitude = ~(&p[`DIVLEN+2:`DIVLEN]); + assign #1 cout = g[`DIVLEN+2] | (p[`DIVLEN+2] & (g[`DIVLEN+1] | p[`DIVLEN+1] & g[`DIVLEN])); + assign #1 sign = p[`DIVLEN+3] ^ cout; +/* assign #1 magnitude = ~((ps[54]^pc[54]) & (ps[53]^pc[53]) & + (ps[52]^pc[52])); + assign #1 sign = (ps[55]^pc[55])^ + (ps[54] & pc[54] | ((ps[54]^pc[54]) & + (ps[53]&pc[53] | ((ps[53]^pc[53]) & + (ps[52]&pc[52]))))); */ + + // Produce quotient = +1, 0, or -1 + assign #1 qp = magnitude & ~sign; + assign #1 qz = ~magnitude; + assign #1 qm = magnitude & sign; +endmodule + + +/////////////////////////////////// +// On-The-Fly Converter, Radix 2 // +/////////////////////////////////// +module otfc4 #(parameter N=65) ( + input logic clk, + input logic Start, + input logic [3:0] q, + output logic [N-1:0] r +); + + // The on-the-fly converter transfers the quotient + // bits to the quotient as they come. + // + // This code follows the psuedocode presented in the + // floating point chapter of the book. Right now, + // it is written for Radix-2 division. + // + // QM is Q-1. It allows us to write negative bits + // without using a costly CPA. + logic [N+2:0] Q, QM, QNext, QMNext, QMux, QMMux; + // QR and QMR are the shifted versions of Q and QM. + // They are treated as [N-1:r] size signals, and + // discard the r most significant bits of Q and QM. + logic [N:0] QR, QMR; + // if starting a new divison set Q to 0 and QM to -1 + mux2 #(N+3) Qmux(QNext, {N+3{1'b0}}, Start, QMux); + mux2 #(N+3) QMmux(QMNext, {N+3{1'b1}}, Start, QMMux); + flop #(N+3) Qreg(clk, QMux, Q); + flop #(N+3) QMreg(clk, QMMux, QM); + + // shift Q (quotent) and QM (quotent-1) + // if q = 2 Q = {Q, 10} QM = {Q, 01} + // else if q = 1 Q = {Q, 01} QM = {Q, 00} + // else if q = 0 Q = {Q, 00} QM = {QM, 11} + // else if q = -1 Q = {QM, 11} QM = {QM, 10} + // else if q = -2 Q = {QM, 10} QM = {QM, 01} + // *** how does the 0 concatination numbers work? + + + + always_comb begin + QR = Q[N:0]; + QMR = QM[N:0]; // Shift Q and QM + if (q[3]) begin // +2 + QNext = {QR, 2'b10}; + QMNext = {QR, 2'b01}; + end else if (q[2]) begin // +1 + QNext = {QR, 2'b01}; + QMNext = {QR, 2'b00}; + end else if (q[1]) begin // -1 + QNext = {QMR, 2'b11}; + QMNext = {QMR, 2'b10}; + end else if (q[0]) begin // -2 + QNext = {QMR, 2'b10}; + QMNext = {QMR, 2'b01}; + end else begin // 0 + QNext = {QR, 2'b00}; + QMNext = {QMR, 2'b11}; + end + end + assign r = Q[N+2] ? Q[N+1:2] : Q[N:1]; + +endmodule + + + +///////// +// csa // +///////// +module csa #(parameter N=69) ( + input logic [N-1:0] in1, in2, in3, + input logic cin, + output logic [N-1:0] out1, out2 +); + + // This block adds in1, in2, in3, and cin to produce + // a result out1 / out2 in carry-save redundant form. + // cin is just added to the least significant bit and + // is required to handle adding a negative divisor. + // Fortunately, the carry (out2) is shifted left by one + // bit, leaving room in the least significant bit to + // insert cin. + + assign #1 out1 = in1 ^ in2 ^ in3; + assign #1 out2 = {in1[N-2:0] & (in2[N-2:0] | in3[N-2:0]) | + (in2[N-2:0] & in3[N-2:0]), cin}; +endmodule + + +////////////// +// expcalc // +////////////// +module expcalc( + input logic [`NE-1:0] XExp, YExp, + output logic [`NE-1:0] calcExp +); + + assign calcExp = XExp - YExp + (`NE)'(`BIAS); + +endmodule + +////////////// +// signcalc // +////////////// +module signcalc( + input logic XSign, YSign, + output logic calcSign +); + + assign calcSign = XSign ^ YSign; + +endmodule \ No newline at end of file diff --git a/pipelined/srt/srt-waves.do b/pipelined/srt/srt-waves.do index 5db638055..e8db577d1 100644 --- a/pipelined/srt/srt-waves.do +++ b/pipelined/srt/srt-waves.do @@ -1 +1,3 @@ -add wave -noupdate /testbench/clk +add wave -noupdate /testbench/* +add wave -noupdate /testbench/srt/* +add wave -noupdate /testbench/srt/otfc2/* diff --git a/pipelined/srt/stine/Makefile b/pipelined/srt/stine/Makefile index a019b3880..8f745b47a 100644 --- a/pipelined/srt/stine/Makefile +++ b/pipelined/srt/stine/Makefile @@ -1,17 +1,26 @@ -CC = gcc -CFLAGS = -lm -LIBS = -OBJS = disp.o srt4div.o +CC = gcc +CFLAGS = -lm +LIBS = +OBJS4 = disp.o srt4div.o +OBJS2 = disp.o srt2div.o -srt4div: $(OBJS) - $(CC) -g -O3 -o srt4div $(OBJS) $(CFLAGS) +all: srt4div srt2div disp.o: disp.h disp.c - $(CC) -g -c -o disp.o disp.c $(CFLAGS) + $(CC) -g -c -o disp.o disp.c srt4div.o: srt4div.c - $(CC) -g -c -o srt4div.o srt4div.c $(CFLAGS) + $(CC) -g -c -o srt4div.o srt4div.c + +srt2div.o: srt2div.c + $(CC) -g -c -o srt2div.o srt2div.c + +srt4div: $(OBJS4) + $(CC) -g -O3 -o srt4div $(OBJS4) $(CFLAGS) + +srt2div: $(OBJS2) + $(CC) -g -O3 -o srt2div $(OBJS2) $(CFLAGS) clean: rm -f *.o *~ diff --git a/pipelined/srt/stine/notes b/pipelined/srt/stine/notes new file mode 100644 index 000000000..77311b177 --- /dev/null +++ b/pipelined/srt/stine/notes @@ -0,0 +1,30 @@ +Dividend x --(0.10101111), divisord --(0.11000101)(i -- 16(0.1100)2- 12) + +X = 175 (xAF) +D = 197 (xC5) + +X = 175/256 = 0.68359375 +D = 197/256 = 0.76953125 + +Note: Add lg(r) extra iterations due to shifting of computed q + q_{computed} = q / radix + +./srt4div 0.68359375 0.76953125 8 10 + +r=2 +X = 0.10011111 +D = 0.11000101 + +X = 159 (9F) +D = 197 (C5) + +X = 159/256 = 0.62109375 +D = 197/256 = 0.76953125 + +./srt2div 0.62109375 0.76953125 8 9 + + + + + + diff --git a/pipelined/srt/stine/pd_bad.png b/pipelined/srt/stine/pd_bad.png new file mode 100644 index 000000000..39df5cdaa Binary files /dev/null and b/pipelined/srt/stine/pd_bad.png differ diff --git a/pipelined/srt/stine/pd_cpa.png b/pipelined/srt/stine/pd_cpa.png new file mode 100644 index 000000000..d80104024 Binary files /dev/null and b/pipelined/srt/stine/pd_cpa.png differ diff --git a/pipelined/srt/stine/pd_csa.pdf b/pipelined/srt/stine/pd_csa.pdf new file mode 100644 index 000000000..00a67f88b Binary files /dev/null and b/pipelined/srt/stine/pd_csa.pdf differ diff --git a/pipelined/srt/stine/pd_csa.png b/pipelined/srt/stine/pd_csa.png new file mode 100644 index 000000000..9cf58ce48 Binary files /dev/null and b/pipelined/srt/stine/pd_csa.png differ diff --git a/pipelined/srt/stine/srt2div b/pipelined/srt/stine/srt2div new file mode 100755 index 000000000..92734241f Binary files /dev/null and b/pipelined/srt/stine/srt2div differ diff --git a/pipelined/srt/stine/srt2div.c b/pipelined/srt/stine/srt2div.c new file mode 100755 index 000000000..9b404d94b --- /dev/null +++ b/pipelined/srt/stine/srt2div.c @@ -0,0 +1,114 @@ +#include "disp.h" + +// QSLC is for division by recuerrence for +// r=2 using a CPA - See 5.109 EL +int qst (double D, double prem) { + + int q; + + // For Debugging + printf("rw --> %lg\n", prem); + + if (prem >= 0.5) { + q = 1; + } else if (prem >= -0.5) { + q = 0; + } else { + q = -1; + } + return q; + +} + +/* + This routine performs a radix-2 SRT division + algorithm. The user inputs the numerator, the denominator, + and the number of iterations. It assumes that 0.5 <= D < 1. + +*/ + +int main(int argc, char* argv[]) { + + double P, N, D, Q, RQ, RD, RREM, scale; + int q; + int num_iter, i; + int prec; + int radix = 2; + + if (argc < 5) { + fprintf(stderr, + "Usage: %s numerator denominator num_iterations prec\n", + argv[0]); + exit(1); + } + sscanf(argv[1],"%lg", &N); + sscanf(argv[2],"%lg", &D); + sscanf(argv[3],"%d", &num_iter); + sscanf(argv[4],"%d", &prec); + // Round to precision + N = rne(N, prec); + D = rne(D, prec); + printf("N = "); + disp_bin(N, 3, prec, stdout); + printf("\n"); + printf("D = "); + disp_bin(D, 3, prec, stdout); + printf("\n"); + + Q = 0; + P = N * pow(2.0, -log2(radix)); + printf("N = %lg, D = %lg, N/D = %lg, num_iter = %d \n\n", + N, D, N/D, num_iter); + for (scale = 1, i = 0; i < num_iter; i++) { + scale = scale * pow(2.0, -log2(radix)); + q = qst(flr(2*D, 1), 2*P); + printf("2*W[n] = "); + disp_bin(radix*P, 3, prec, stdout); + printf("\n"); + printf("q*D = "); + disp_bin(q*D, 3, prec, stdout); + printf("\n"); + printf("W[n+1] = "); + disp_bin(P ,3, prec, stdout); + printf("\n"); + // Recurrence + P = radix * P - q * D; + Q = Q + q*scale; + printf("i = %d, q = %d, Q = %1.18lf, W = %1.18lf\n", i, q, Q, P); + printf("i = %d, q = %d", i, q); + printf(", Q = "); + disp_bin(Q, 3, prec, stdout); + printf(", W = "); + disp_bin(P, 3, prec, stdout); + printf("\n\n"); + } + if (P < 0) { + Q = Q - scale; + P = P + D; + printf("\nCorrecting Negative Remainder\n"); + printf("Q = %1.18lf, W = %1.18lf\n", Q, P); + printf("Q = "); + disp_bin(Q, 3, prec, stdout); + printf(", W = "); + disp_bin(P, 3, prec, stdout); + printf("\n"); + } + + // Output Results + RQ = N/D; + // Since q_{computed} = q / radix, multiply by radix + RD = Q * radix; + printf("true = %1.18lf, computed = %1.18lf, \n", RQ, RD); + printf("true = "); + disp_bin(RQ, 3, prec, stdout); + printf(", computed = "); + disp_bin(RD, 3, prec, stdout); + printf("\n\n"); + printf("REM = %1.18lf \n", P); + printf("REM = "); + disp_bin(P, 3, prec, stdout); + printf("\n\n"); + + return 0; + +} diff --git a/pipelined/srt/stine/srt4_pd.m b/pipelined/srt/stine/srt4_pd.m new file mode 100644 index 000000000..815c84c75 --- /dev/null +++ b/pipelined/srt/stine/srt4_pd.m @@ -0,0 +1,508 @@ +% +% PD Region for Np = 3; Nd = 4; +% w/CPA +% +% Clear all variables and screen +clear +clf +% Define the number of bits (input Dividend) +n = 4; +% +% Define Divisor Range +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dminimum = 1.0/2; +Dmaximum = 2.0/2; +% Define an ulp +ulp = 2^(-n); +% radix = beta +beta = 4; +% rho = redundancy factor -> SHOULD ALWAYS BE >= THAN 1/2 +% +% SD representations have alpha < beta - 1 +% +% alpha = ceil(beta/2) minimially redundant +% alpha = beta -1 maximally redundant (rho = 1) +% alpha = (beta-1)/2 nonredundant +% alpha > beta - 1 over-redundant +% +rho = 2/3; +% Calculation of max digit set +alpha = rho*(beta-1); +% Da contains digit set +q = []; +for i = -alpha:alpha + q = [q; i]; +end +% 4r(i-1)/D values +hold on +% figure(1) +grid off +for i = 1:length(q) + x = -rho+q(i):ulp:rho+q(i); + % Plot redundancy (overlap) Positive + z = [rho+q(i),rho+q(i)]; + y = [x(length(x))-q(i),0]; + % Plot redundancy (overlap) Negative + if (i ~= length(q)) + w = [-rho+q(i+1)-q(i+1),0]; + u = [-rho+q(i+1),-rho+q(i+1)]; + % plot(u,w,'b') + end + % plot(x,x-q(i)) + % plot(z,y,'r') + +end +% title('Robertson Diagram for Radix-4 SRT Divison') + +Np = 3; +Nd = 4; +Dmin = Dminimum; +Dmax = Dmaximum; +ulpd = 2^(-Nd); +ulpp = 2^(-Np); + +% +% Plot Atkins P-D plot +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dmin = Dminimum; +Dmax = Dmaximum; +for i = 1:length(q) + D = Dmin:ulp:Dmax; + P1 = (rho+q(i))*D; + P2 = (-rho+q(i))*D; + hold on + p1 = plot(D,P1); + p1.Color = '#0000ff'; + p2 = plot(D,P2); + p2.Color = '#ff0000'; + axis([Dmin Dmax -beta*rho*Dmaximum beta*rho*Dmaximum]) + xticks(D) + p1.LineWidth = 2.0; + p2.LineWidth = 2.0; +end + +% Let's make x/y axis binary +j = []; +for i=1:length(D) + j = [j disp_bin(D(i), 1, 4)]; +end +yk = []; +yk2 = []; +for i=-2.5:0.5:2.5; + yk = [yk disp_bin(i, 3, 3)]; + yk2 = [yk2 i]; +end +xtickangle(90) +xticklabels(j) +yticklabels(yk) + +% Let's draw allow points on PD plot +% Positive Portions +index = 1; +i = 0:ulpp:rho*beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k') +end + +j = Dmin:ulpd:Dmax; +for i = 0:ulpp:rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k') +end + +% Negative Portions +index = 1; +i = 0:-ulpp:rho*-beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k') +end + +j = Dmin:ulpd:Dmax; +for i = 0:-ulpp:-rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k') +end + +% Labels and Printing +xlh = xlabel(['Divisor (d)']); +%xlh.FontSize = 18; +xlh.Position(2) = xlh.Position(2) - 0.1; +ylh = ylabel(['P = 4 \cdot w_i']); +ylh.Position(1) = ylh.Position(1)-0.02; +%ylh.FontSize = 18; + +% Containment Values (placed manually although not bad) +m2 = [3/4 7/8 1.0 1.0 5/4 5/4 5/4 3/2 3/2]; +m1 = [1/4 1/4 1/4 1/4 1/2 1/2 1/2 1/2 1/2]; +m0 = [-1/4 -1/4 -1/4 -1/4 -1/2 -1/2 -1/2 -1/2 -1/2]; +m1b = [-3/4 -7/8 -1 -1 -5/4 -5/4 -5/4 -3/2 -3/2]; +x2 = Dmin:ulpd:Dmax; +s2 = stairs(x2, m2); +s2.Color = '#8f08d1'; +s2.LineWidth = 3.0; +%s2.LineStyle = '--'; +s1 = stairs(x2, m1); +s1.Color = '#8f08d1'; +s1.LineWidth = 3.0; +s0 = stairs(x2, m0); +s0.Color = '#8f08d1'; +s0.LineWidth = 3.0; +s1b = stairs(x2, m1b); +s1b.Color = '#8f08d1'; +s1b.LineWidth = 3.0; + +% Place manually Quotient (ugh) +j = Dmin+ulpd/2:ulpd:Dmax; +i = rho*beta*Dmaximum-ulpp*3/4:-ulpp:-rho*beta*Dmaximum; +text(j(1), i(1), '2') +text(j(1), i(2), '2') +text(j(1), i(3), '2') +text(j(1), i(4), '2') +text(j(1), i(5), '2') +text(j(1), i(6), '2') +text(j(1), i(7), '2') +text(j(1), i(8), '2') +text(j(1), i(9), '2') +text(j(1), i(10), '2') +text(j(1), i(11), '2') +text(j(1), i(12), '2') +text(j(1), i(13), '2') +text(j(1), i(14), '2') +text(j(1), i(15), '2') +text(j(1), i(16), '1') +text(j(1), i(17), '1') +text(j(1), i(18), '1') +text(j(1), i(19), '1') +text(j(1), i(20), '0') +text(j(1), i(21), '0') +text(j(1), i(22), '0') +text(j(1), i(23), '0') +text(j(1), i(24), '-1') +text(j(1), i(25), '-1') +text(j(1), i(26), '-1') +text(j(1), i(27), '-1') +text(j(1), i(28), '-2') +text(j(1), i(29), '-2') +text(j(1), i(30), '-2') +text(j(1), i(31), '-2') +text(j(1), i(32), '-2') +text(j(1), i(33), '-2') +text(j(1), i(34), '-2') +text(j(1), i(35), '-2') +text(j(1), i(36), '-2') +text(j(1), i(37), '-2') +text(j(1), i(38), '-2') +text(j(1), i(39), '-2') +text(j(1), i(40), '-2') +text(j(1), i(41), '-2') +text(j(1), i(42), '-2') + +text(j(2), i(1), '2') +text(j(2), i(2), '2') +text(j(2), i(3), '2') +text(j(2), i(4), '2') +text(j(2), i(5), '2') +text(j(2), i(6), '2') +text(j(2), i(7), '2') +text(j(2), i(8), '2') +text(j(2), i(9), '2') +text(j(2), i(10), '2') +text(j(2), i(11), '2') +text(j(2), i(12), '2') +text(j(2), i(13), '2') +text(j(2), i(14), '2') +text(j(2), i(15), '1') +text(j(2), i(16), '1') +text(j(2), i(17), '1') +text(j(2), i(18), '1') +text(j(2), i(19), '1') +text(j(2), i(20), '0') +text(j(2), i(21), '0') +text(j(2), i(22), '0') +text(j(2), i(23), '0') +text(j(2), i(24), '-1') +text(j(2), i(25), '-1') +text(j(2), i(26), '-1') +text(j(2), i(27), '-1') +text(j(2), i(28), '-1') +text(j(2), i(29), '-2') +text(j(2), i(30), '-2') +text(j(2), i(31), '-2') +text(j(2), i(32), '-2') +text(j(2), i(33), '-2') +text(j(2), i(34), '-2') +text(j(2), i(35), '-2') +text(j(2), i(36), '-2') +text(j(2), i(37), '-2') +text(j(2), i(38), '-2') +text(j(2), i(39), '-2') +text(j(2), i(40), '-2') +text(j(2), i(41), '-2') +text(j(2), i(42), '-2') + +text(j(3), i(1), '2') +text(j(3), i(2), '2') +text(j(3), i(3), '2') +text(j(3), i(4), '2') +text(j(3), i(5), '2') +text(j(3), i(6), '2') +text(j(3), i(7), '2') +text(j(3), i(8), '2') +text(j(3), i(9), '2') +text(j(3), i(10), '2') +text(j(3), i(11), '2') +text(j(3), i(12), '2') +text(j(3), i(13), '2') +text(j(3), i(14), '1') +text(j(3), i(15), '1') +text(j(3), i(16), '1') +text(j(3), i(17), '1') +text(j(3), i(18), '1') +text(j(3), i(19), '1') +text(j(3), i(20), '0') +text(j(3), i(21), '0') +text(j(3), i(22), '0') +text(j(3), i(23), '0') +text(j(3), i(24), '-1') +text(j(3), i(25), '-1') +text(j(3), i(26), '-1') +text(j(3), i(27), '-1') +text(j(3), i(28), '-1') +text(j(3), i(29), '-1') +text(j(3), i(30), '-2') +text(j(3), i(31), '-2') +text(j(3), i(32), '-2') +text(j(3), i(33), '-2') +text(j(3), i(34), '-2') +text(j(3), i(35), '-2') +text(j(3), i(36), '-2') +text(j(3), i(37), '-2') +text(j(3), i(38), '-2') +text(j(3), i(39), '-2') +text(j(3), i(40), '-2') +text(j(3), i(41), '-2') +text(j(3), i(42), '-2') + +text(j(4), i(1), '2') +text(j(4), i(2), '2') +text(j(4), i(3), '2') +text(j(4), i(4), '2') +text(j(4), i(5), '2') +text(j(4), i(6), '2') +text(j(4), i(7), '2') +text(j(4), i(8), '2') +text(j(4), i(9), '2') +text(j(4), i(10), '2') +text(j(4), i(11), '2') +text(j(4), i(12), '2') +text(j(4), i(13), '2') +text(j(4), i(14), '1') +text(j(4), i(15), '1') +text(j(4), i(16), '1') +text(j(4), i(17), '1') +text(j(4), i(18), '1') +text(j(4), i(19), '1') +text(j(4), i(20), '0') +text(j(4), i(21), '0') +text(j(4), i(22), '0') +text(j(4), i(23), '0') +text(j(4), i(24), '-1') +text(j(4), i(25), '-1') +text(j(4), i(26), '-1') +text(j(4), i(27), '-1') +text(j(4), i(28), '-1') +text(j(4), i(29), '-1') +text(j(4), i(30), '-2') +text(j(4), i(31), '-2') +text(j(4), i(32), '-2') +text(j(4), i(33), '-2') +text(j(4), i(34), '-2') +text(j(4), i(35), '-2') +text(j(4), i(36), '-2') +text(j(4), i(37), '-2') +text(j(4), i(38), '-2') +text(j(4), i(39), '-2') +text(j(4), i(40), '-2') +text(j(4), i(41), '-2') +text(j(4), i(42), '-2') + +text(j(5), i(1), '2') +text(j(5), i(2), '2') +text(j(5), i(3), '2') +text(j(5), i(4), '2') +text(j(5), i(5), '2') +text(j(5), i(6), '2') +text(j(5), i(7), '2') +text(j(5), i(8), '2') +text(j(5), i(9), '2') +text(j(5), i(10), '2') +text(j(5), i(11), '2') +text(j(5), i(12), '1') +text(j(5), i(13), '1') +text(j(5), i(14), '1') +text(j(5), i(15), '1') +text(j(5), i(16), '1') +text(j(5), i(17), '1') +text(j(5), i(18), '0') +text(j(5), i(19), '0') +text(j(5), i(20), '0') +text(j(5), i(21), '0') +text(j(5), i(22), '0') +text(j(5), i(23), '0') +text(j(5), i(24), '0') +text(j(5), i(25), '0') +text(j(5), i(26), '-1') +text(j(5), i(27), '-1') +text(j(5), i(28), '-1') +text(j(5), i(29), '-1') +text(j(5), i(30), '-1') +text(j(5), i(31), '-1') +text(j(5), i(32), '-2') +text(j(5), i(33), '-2') +text(j(5), i(34), '-2') +text(j(5), i(35), '-2') +text(j(5), i(36), '-2') +text(j(5), i(37), '-2') +text(j(5), i(38), '-2') +text(j(5), i(39), '-2') +text(j(5), i(40), '-2') +text(j(5), i(41), '-2') +text(j(5), i(42), '-2') + +text(j(6), i(1), '2') +text(j(6), i(2), '2') +text(j(6), i(3), '2') +text(j(6), i(4), '2') +text(j(6), i(5), '2') +text(j(6), i(6), '2') +text(j(6), i(7), '2') +text(j(6), i(8), '2') +text(j(6), i(9), '2') +text(j(6), i(10), '2') +text(j(6), i(11), '2') +text(j(6), i(12), '1') +text(j(6), i(13), '1') +text(j(6), i(14), '1') +text(j(6), i(15), '1') +text(j(6), i(16), '1') +text(j(6), i(17), '1') +text(j(6), i(18), '0') +text(j(6), i(19), '0') +text(j(6), i(20), '0') +text(j(6), i(21), '0') +text(j(6), i(22), '0') +text(j(6), i(23), '0') +text(j(6), i(24), '0') +text(j(6), i(25), '0') +text(j(6), i(26), '-1') +text(j(6), i(27), '-1') +text(j(6), i(28), '-1') +text(j(6), i(29), '-1') +text(j(6), i(30), '-1') +text(j(6), i(31), '-1') +text(j(6), i(32), '-2') +text(j(6), i(33), '-2') +text(j(6), i(34), '-2') +text(j(6), i(35), '-2') +text(j(6), i(36), '-2') +text(j(6), i(37), '-2') +text(j(6), i(38), '-2') +text(j(6), i(39), '-2') +text(j(6), i(40), '-2') +text(j(6), i(41), '-2') +text(j(6), i(42), '-2') + +text(j(7), i(1), '2') +text(j(7), i(2), '2') +text(j(7), i(3), '2') +text(j(7), i(4), '2') +text(j(7), i(5), '2') +text(j(7), i(6), '2') +text(j(7), i(7), '2') +text(j(7), i(8), '2') +text(j(7), i(9), '2') +text(j(7), i(10), '2') +text(j(7), i(11), '2') +text(j(7), i(12), '1') +text(j(7), i(13), '1') +text(j(7), i(14), '1') +text(j(7), i(15), '1') +text(j(7), i(16), '1') +text(j(7), i(17), '1') +text(j(7), i(18), '0') +text(j(7), i(19), '0') +text(j(7), i(20), '0') +text(j(7), i(21), '0') +text(j(7), i(22), '0') +text(j(7), i(23), '0') +text(j(7), i(24), '0') +text(j(7), i(25), '0') +text(j(7), i(26), '-1') +text(j(7), i(27), '-1') +text(j(7), i(28), '-1') +text(j(7), i(29), '-1') +text(j(7), i(30), '-1') +text(j(7), i(31), '-1') +text(j(7), i(32), '-2') +text(j(7), i(33), '-2') +text(j(7), i(34), '-2') +text(j(7), i(35), '-2') +text(j(7), i(36), '-2') +text(j(7), i(37), '-2') +text(j(7), i(38), '-2') +text(j(7), i(39), '-2') +text(j(7), i(40), '-2') +text(j(7), i(41), '-2') +text(j(7), i(42), '-2') + +text(j(8), i(1), '2') +text(j(8), i(2), '2') +text(j(8), i(3), '2') +text(j(8), i(4), '2') +text(j(8), i(5), '2') +text(j(8), i(6), '2') +text(j(8), i(7), '2') +text(j(8), i(8), '2') +text(j(8), i(9), '2') +text(j(8), i(10), '1') +text(j(8), i(11), '1') +text(j(8), i(12), '1') +text(j(8), i(13), '1') +text(j(8), i(14), '1') +text(j(8), i(15), '1') +text(j(8), i(16), '1') +text(j(8), i(17), '1') +text(j(8), i(18), '0') +text(j(8), i(19), '0') +text(j(8), i(20), '0') +text(j(8), i(21), '0') +text(j(8), i(22), '0') +text(j(8), i(23), '0') +text(j(8), i(24), '0') +text(j(8), i(25), '0') +text(j(8), i(26), '-1') +text(j(8), i(27), '-1') +text(j(8), i(28), '-1') +text(j(8), i(29), '-1') +text(j(8), i(30), '-2') +text(j(8), i(31), '-2') +text(j(8), i(32), '-2') +text(j(8), i(33), '-2') +text(j(8), i(34), '-2') +text(j(8), i(35), '-2') +text(j(8), i(36), '-2') +text(j(8), i(37), '-2') +text(j(8), i(38), '-2') +text(j(8), i(39), '-2') +text(j(8), i(40), '-2') +text(j(8), i(41), '-2') +text(j(8), i(42), '-2') + +print -dpng pd_cpa.png + + + + + diff --git a/pipelined/srt/stine/srt4_pd2.m b/pipelined/srt/stine/srt4_pd2.m new file mode 100644 index 000000000..9c60923aa --- /dev/null +++ b/pipelined/srt/stine/srt4_pd2.m @@ -0,0 +1,333 @@ +% +% Clear all variables and screen +clear +clf +% Define the number of bits (input Dividend) +n = 4; +% +% Define Divisor Range +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dminimum = 1.0/2; +Dmaximum = 2.0/2; +% Define an ulp +ulp = 2^(-n); +% radix = beta +beta = 4; +% rho = redundancy factor -> SHOULD ALWAYS BE >= THAN 1/2 +% +% SD representations have alpha < beta - 1 +% +% alpha = ceil(beta/2) minimially redundant +% alpha = beta -1 maximally redundant (rho = 1) +% alpha = (beta-1)/2 nonredundant +% alpha > beta - 1 over-redundant +% +rho = 2/3; +% Calculation of max digit set +alpha = rho*(beta-1); +% Da contains digit set +q = []; +for i = -alpha:alpha + q = [q; i]; +end +% 4r(i-1)/D values +hold on +% figure(1) +grid off +for i = 1:length(q) + x = -rho+q(i):ulp:rho+q(i); + % Plot redundancy (overlap) Positive + z = [rho+q(i),rho+q(i)]; + y = [x(length(x))-q(i),0]; + % Plot redundancy (overlap) Negative + if (i ~= length(q)) + w = [-rho+q(i+1)-q(i+1),0]; + u = [-rho+q(i+1),-rho+q(i+1)]; + % plot(u,w,'b') + end + % plot(x,x-q(i)) + % plot(z,y,'r') + +end +% title('Robertson Diagram for Radix-4 SRT Divison') + +Np = 3; +Nd = 3; +Dmin = Dminimum; +Dmax = Dmaximum; +ulpd = 2^(-Nd); +ulpp = 2^(-Np); + +% +% Plot Atkins P-D plot +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dmin = Dminimum; +Dmax = Dmaximum; +for i = 1:length(q) + D = Dmin:ulpd:Dmax; + P1 = (rho+q(i))*D; + P2 = (-rho+q(i))*D; + hold on + p1 = plot(D,P1,'b'); + p2 = plot(D,P2,'r'); + axis([Dmin Dmax -beta*rho*Dmaximum beta*rho*Dmaximum]) + xticks(D) + p1.LineWidth = 2.0; + p2.LineWidth = 2.0; +end + +% Let's make x axis binary +D = Dmin:ulpd:Dmax; +j = []; +for i=1:length(D) + j = [j disp_bin(D(i), 1, 3)]; +end +yk = []; +yk2 = []; +for i=-2.5:0.5:2.5; + yk = [yk disp_bin(i, 3, 3)]; + yk2 = [yk2 i]; +end +xtickangle(90) +xticklabels(j) +yticklabels(yk) + +% Let's draw allow points on PD plot +% Positive Portions +index = 1; +i = 0:ulpp:rho*beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k'); +end + +j = Dmin:ulpd:Dmax; +for i = 0:ulpp:rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k'); +end + +% Negative Portions +index = 1; +i = 0:-ulpp:rho*-beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k'); +end + +j = Dmin:ulpd:Dmax; +for i = 0:-ulpp:-rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k'); +end + +% Labels and Printing +xlh = xlabel(['Divisor (d)']); +xlh.Position(2) = xlh.Position(2) - 0.1; +xlh.FontSize = 18; +ylh = ylabel(['P = 4 \cdot w_i']); +ylh.Position(1) = ylh.Position(1)-0.02; +ylh.FontSize = 18; + +% Containment Values (placed manually although not bad) +m2 = [5/6 1.0 5/4 11/8 11/8]; +m1 = [1/4 1/4 1/2 1/2 1/2]; +m0 = [-1/4 -1/4 -1/2 -1/2 -1/2]; +m1b = [-5/6 -1 -5/4 -11/8 -11/8]; +x2 = Dmin:ulpd:Dmax; +s2 = stairs(x2, m2); +s2.Color = '#8f08d1'; +s2.LineWidth = 3.0; +s1 = stairs(x2, m1); +s1.Color = '#8f08d1'; +s1.LineWidth = 3.0; +s0 = stairs(x2, m0); +s0.Color = '#8f08d1'; +s0.LineWidth = 3.0; +s1b = stairs(x2, m1b); +s1b.Color = '#8f08d1'; +s1b.LineWidth = 3.0; + +% Place manually Quotient (ugh) +j = Dmin+ulpd/2:ulpd:Dmax; +i = rho*beta*Dmaximum-ulpp*3/4:-ulpp:-rho*beta*Dmaximum; +text(j(1), i(1), '2') +text(j(1), i(2), '2') +text(j(1), i(3), '2') +text(j(1), i(4), '2') +text(j(1), i(5), '2') +text(j(1), i(6), '2') +text(j(1), i(7), '2') +text(j(1), i(8), '2') +text(j(1), i(9), '2') +text(j(1), i(10), '2') +text(j(1), i(11), '2') +text(j(1), i(12), '2') +text(j(1), i(13), '2') +text(j(1), i(14), '2') +error1 = text(j(1), i(15), 'Full Precision', 'FontSize', 16); +text(j(1), i(16), '1') +text(j(1), i(17), '1') +text(j(1), i(18), '1') +text(j(1), i(19), '1') +text(j(1), i(20), '0') +text(j(1), i(21), '0') +text(j(1), i(22), '0') +text(j(1), i(23), '0') +text(j(1), i(24), '-1') +text(j(1), i(25), '-1') +text(j(1), i(26), '-1') +text(j(1), i(27), '-1') +error2 = text(j(1), i(28), 'Full Precision', 'FontSize', 16); +text(j(1), i(29), '-2') +text(j(1), i(30), '-2') +text(j(1), i(31), '-2') +text(j(1), i(32), '-2') +text(j(1), i(33), '-2') +text(j(1), i(34), '-2') +text(j(1), i(35), '-2') +text(j(1), i(36), '-2') +text(j(1), i(37), '-2') +text(j(1), i(38), '-2') +text(j(1), i(39), '-2') +text(j(1), i(40), '-2') +text(j(1), i(41), '-2') +text(j(1), i(42), '-2') + +text(j(2), i(1), '2') +text(j(2), i(2), '2') +text(j(2), i(3), '2') +text(j(2), i(4), '2') +text(j(2), i(5), '2') +text(j(2), i(6), '2') +text(j(2), i(7), '2') +text(j(2), i(8), '2') +text(j(2), i(9), '2') +text(j(2), i(10), '2') +text(j(2), i(11), '2') +text(j(2), i(12), '2') +text(j(2), i(13), '2') +text(j(2), i(14), '1') +text(j(2), i(15), '1') +text(j(2), i(16), '1') +text(j(2), i(17), '1') +text(j(2), i(18), '1') +text(j(2), i(19), '1') +text(j(2), i(20), '0') +text(j(2), i(21), '0') +text(j(2), i(22), '0') +text(j(2), i(23), '0') +text(j(2), i(24), '-1') +text(j(2), i(25), '-1') +text(j(2), i(26), '-1') +text(j(2), i(27), '-1') +text(j(2), i(28), '-1') +text(j(2), i(29), '-1') +text(j(2), i(30), '-2') +text(j(2), i(31), '-2') +text(j(2), i(32), '-2') +text(j(2), i(33), '-2') +text(j(2), i(34), '-2') +text(j(2), i(35), '-2') +text(j(2), i(36), '-2') +text(j(2), i(37), '-2') +text(j(2), i(38), '-2') +text(j(2), i(39), '-2') +text(j(2), i(40), '-2') +text(j(2), i(41), '-2') +text(j(2), i(42), '-2') + +text(j(3), i(1), '2') +text(j(3), i(2), '2') +text(j(3), i(3), '2') +text(j(3), i(4), '2') +text(j(3), i(5), '2') +text(j(3), i(6), '2') +text(j(3), i(7), '2') +text(j(3), i(8), '2') +text(j(3), i(9), '2') +text(j(3), i(10), '2') +text(j(3), i(11), '2') +text(j(3), i(12), '1') +text(j(3), i(13), '1') +text(j(3), i(14), '1') +text(j(3), i(15), '1') +text(j(3), i(16), '1') +text(j(3), i(17), '1') +text(j(3), i(18), '0') +text(j(3), i(19), '0') +text(j(3), i(20), '0') +text(j(3), i(21), '0') +text(j(3), i(22), '0') +text(j(3), i(23), '0') +text(j(3), i(24), '0') +text(j(3), i(25), '0') +text(j(3), i(26), '-1') +text(j(3), i(27), '-1') +text(j(3), i(28), '-1') +text(j(3), i(29), '-1') +text(j(3), i(30), '-1') +text(j(3), i(31), '-1') +text(j(3), i(32), '-2') +text(j(3), i(33), '-2') +text(j(3), i(34), '-2') +text(j(3), i(35), '-2') +text(j(3), i(36), '-2') +text(j(3), i(37), '-2') +text(j(3), i(38), '-2') +text(j(3), i(39), '-2') +text(j(3), i(40), '-2') +text(j(3), i(41), '-2') +text(j(3), i(42), '-2') + +text(j(4), i(1), '2') +text(j(4), i(2), '2') +text(j(4), i(3), '2') +text(j(4), i(4), '2') +text(j(4), i(5), '2') +text(j(4), i(6), '2') +text(j(4), i(7), '2') +text(j(4), i(8), '2') +text(j(4), i(9), '2') +text(j(4), i(10), '2') +text(j(4), i(11), '1') +text(j(4), i(12), '1') +text(j(4), i(13), '1') +text(j(4), i(14), '1') +text(j(4), i(15), '1') +text(j(4), i(16), '1') +text(j(4), i(17), '1') +text(j(4), i(18), '0') +text(j(4), i(19), '0') +text(j(4), i(20), '0') +text(j(4), i(21), '0') +text(j(4), i(22), '0') +text(j(4), i(23), '0') +text(j(4), i(24), '0') +text(j(4), i(25), '0') +text(j(4), i(26), '-1') +text(j(4), i(27), '-1') +text(j(4), i(28), '-1') +text(j(4), i(29), '-1') +text(j(4), i(30), '-1') +text(j(4), i(31), '-1') +text(j(4), i(32), '-1') +text(j(4), i(33), '-2') +text(j(4), i(34), '-2') +text(j(4), i(35), '-2') +text(j(4), i(36), '-2') +text(j(4), i(37), '-2') +text(j(4), i(38), '-2') +text(j(4), i(39), '-2') +text(j(4), i(40), '-2') +text(j(4), i(41), '-2') +text(j(4), i(42), '-2') + + + +print -dpng pd_bad.png + + + + + diff --git a/pipelined/srt/stine/srt4_pd3.m b/pipelined/srt/stine/srt4_pd3.m new file mode 100644 index 000000000..695b3c7f6 --- /dev/null +++ b/pipelined/srt/stine/srt4_pd3.m @@ -0,0 +1,855 @@ +% +% Clear all variables and screen +clear +clf +% Define the number of bits (input Dividend) +n = 4; +% +% Define Divisor Range +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dminimum = 1.0/2; +Dmaximum = 2.0/2; +% Define an ulp +ulp = 2^(-n); +% radix = beta +beta = 4; +% rho = redundancy factor -> SHOULD ALWAYS BE >= THAN 1/2 +% +% SD representations have alpha < beta - 1 +% +% alpha = ceil(beta/2) minimially redundant +% alpha = beta -1 maximally redundant (rho = 1) +% alpha = (beta-1)/2 nonredundant +% alpha > beta - 1 over-redundant +% +rho = 2/3; +% Calculation of max digit set +alpha = rho*(beta-1); +% Da contains digit set +q = []; +for i = -alpha:alpha + q = [q; i]; +end +% 4r(i-1)/D values +hold on +% figure(1) +grid off +for i = 1:length(q) + x = -rho+q(i):ulp:rho+q(i); + % Plot redundancy (overlap) Positive + z = [rho+q(i),rho+q(i)]; + y = [x(length(x))-q(i),0]; + % Plot redundancy (overlap) Negative + if (i ~= length(q)) + w = [-rho+q(i+1)-q(i+1),0]; + u = [-rho+q(i+1),-rho+q(i+1)]; + % plot(u,w,'b') + end + % plot(x,x-q(i)) + % plot(z,y,'r') + +end +% title('Robertson Diagram for Radix-4 SRT Divison') + +% +% Plot Atkins P-D plot +% Normalized Floating Point [Dmin,Dmax] = [1,2] +% Normalized Fixed Point [Dmin, Dmax] =[1/2,1] +% +Dmin = Dminimum; +Dmax = Dmaximum; +for i = 1:length(q) + D = Dmin:ulp:Dmax; + P1 = (rho+q(i))*D; + P2 = (-rho+q(i))*D; + hold on + p1 = plot(D,P1,'b'); + p2 = plot(D,P2,'r'); + axis([Dmin Dmax -beta*rho*Dmaximum beta*rho*Dmaximum]) + xticks(D) + p1.LineWidth = 2.0; + p2.LineWidth = 2.0; +end + +% Let's make x axis binary +j = []; +for i=1:length(D) + j = [j disp_bin(D(i), 1, 4)]; +end +yk = []; +yk2 = []; +for i=-2.5:0.5:2.5; + yk = [yk disp_bin(i, 3, 4)]; + yk2 = [yk2 i]; +end +xtickangle(90) +xticklabels(j) +yticklabels(yk) + +Np = 4; +Nd = 4; +Dmin = Dminimum; +Dmax = Dmaximum; +ulpd = 2^(-Nd); +ulpp = 2^(-Np); + +% Let's draw allow points on PD plot +% Positive Portions +index = 1; +i = 0:ulpp:rho*beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k'); +end + +j = Dmin:ulpd:Dmax; +for i = 0:ulpp:rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k'); +end + +% Negative Portions +index = 1; +i = 0:-ulpp:rho*-beta*Dmaximum; +for j = Dmin:ulpd:Dmax + plot(j*ones(1,length(i)),i,'k'); +end + +j = Dmin:ulpd:Dmax; +for i = 0:-ulpp:-rho*beta*Dmaximum + plot(j,i*ones(length(j)),'k'); +end + +% Labels and Printing +xlh = xlabel(['Divisor (d)']); +xlh.Position(2) = xlh.Position(2) - 0.1; +%xlh.FontSize = 18; +ylh = ylabel(['P = 4 \cdot w_i']); +ylh.Position(1) = ylh.Position(1)-0.02; +%ylh.FontSize = 18; + +% Containment Values (placed manually although not bad) +m2 = [3/4 7/8 15/16 1.0 9/8 19/16 5/4 6/4 6/4]; +m1 = [1/4 1/4 1/4 1/4 3/8 3/8 1/2 1/2 1/2]; +m0 = [-1/4 -3/8 -3/8 -3/8 -1/2 -1/2 -1/2 -1/2 -1/2]; +m1b = [-13/16 -15/16 -1 -9/8 -5/4 -5/4 -11/8 -6/4 -6/4]; +x2 = Dmin:ulpd:Dmax; +s2 = stairs(x2, m2); +s2.Color = '#8f08d1'; +s2.LineWidth = 3.0; +s1 = stairs(x2, m1); +s1.Color = '#8f08d1'; +s1.LineWidth = 3.0; +s0 = stairs(x2, m0); +s0.Color = '#8f08d1'; +s0.LineWidth = 3.0; +s1b = stairs(x2, m1b); +s1b.Color = '#8f08d1'; +s1b.LineWidth = 3.0; + +% Place manually Quotient (ugh) +j = Dmin+ulpd/2:ulpd:Dmax; +i = rho*beta*Dmaximum-ulpp:-ulpp:-rho*beta*Dmaximum; + +% 1 +text(j(1), i(1), '2') +text(j(1), i(2), '2') +text(j(1), i(3), '2') +text(j(1), i(4), '2') +text(j(1), i(5), '2') +text(j(1), i(6), '2') +text(j(1), i(7), '2') +text(j(1), i(8), '2') +text(j(1), i(9), '2') +text(j(1), i(10), '2') +text(j(1), i(11), '2') +text(j(1), i(12), '2') +text(j(1), i(13), '2') +text(j(1), i(14), '2') +text(j(1), i(15), '2') +text(j(1), i(16), '2') +text(j(1), i(17), '2') +text(j(1), i(18), '2') +text(j(1), i(19), '2') +text(j(1), i(20), '2') +text(j(1), i(21), '2') +text(j(1), i(22), '2') +text(j(1), i(23), '2') +text(j(1), i(24), '2') +text(j(1), i(25), '2') +text(j(1), i(26), '2') +text(j(1), i(27), '2') +text(j(1), i(28), '2') +text(j(1), i(29), '2') +text(j(1), i(30), '2') +text(j(1), i(31), '1') +text(j(1), i(32), '1') +text(j(1), i(33), '1') +text(j(1), i(34), '1') +text(j(1), i(35), '1') +text(j(1), i(36), '1') +text(j(1), i(37), '1') +text(j(1), i(38), '1') +text(j(1), i(39), '0') +text(j(1), i(40), '0') +text(j(1), i(41), '0') +text(j(1), i(42), '0') + +text(j(1), i(43), '0') +text(j(1), i(44), '0') +text(j(1), i(45), '0') +text(j(1), i(46), '0') +text(j(1), i(47), '-1') +text(j(1), i(48), '-1') +text(j(1), i(49), '-1') +text(j(1), i(50), '-1') +text(j(1), i(51), '-1') +text(j(1), i(52), '-1') +text(j(1), i(53), '-1') +text(j(1), i(54), '-1') +text(j(1), i(55), '-1') +text(j(1), i(56), '-2') +text(j(1), i(57), '-2') +text(j(1), i(58), '-2') +text(j(1), i(59), '-2') +text(j(1), i(60), '-2') +text(j(1), i(61), '-2') +text(j(1), i(62), '-2') +text(j(1), i(63), '-2') +text(j(1), i(64), '-2') +text(j(1), i(65), '-2') +text(j(1), i(66), '-2') +text(j(1), i(67), '-2') +text(j(1), i(68), '-2') +text(j(1), i(69), '-2') +text(j(1), i(70), '-2') +text(j(1), i(71), '-2') +text(j(1), i(72), '-2') +text(j(1), i(73), '-2') +text(j(1), i(74), '-2') +text(j(1), i(75), '-2') +text(j(1), i(76), '-2') +text(j(1), i(77), '-2') +text(j(1), i(78), '-2') +text(j(1), i(79), '-2') +text(j(1), i(80), '-2') +text(j(1), i(81), '-2') +text(j(1), i(82), '-2') +text(j(1), i(83), '-2') +text(j(1), i(84), '-2') + +text(j(2), i(1), '2') +text(j(2), i(2), '2') +text(j(2), i(3), '2') +text(j(2), i(4), '2') +text(j(2), i(5), '2') +text(j(2), i(6), '2') +text(j(2), i(7), '2') +text(j(2), i(8), '2') +text(j(2), i(9), '2') +text(j(2), i(10), '2') +text(j(2), i(11), '2') +text(j(2), i(12), '2') +text(j(2), i(13), '2') +text(j(2), i(14), '2') +text(j(2), i(15), '2') +text(j(2), i(16), '2') +text(j(2), i(17), '2') +text(j(2), i(18), '2') +text(j(2), i(19), '2') +text(j(2), i(20), '2') +text(j(2), i(21), '2') +text(j(2), i(22), '2') +text(j(2), i(23), '2') +text(j(2), i(24), '2') +text(j(2), i(25), '2') +text(j(2), i(26), '2') +text(j(2), i(27), '2') +text(j(2), i(28), '2') +text(j(2), i(29), '1') +text(j(2), i(30), '1') +text(j(2), i(31), '1') +text(j(2), i(32), '1') +text(j(2), i(33), '1') +text(j(2), i(34), '1') +text(j(2), i(35), '1') +text(j(2), i(36), '1') +text(j(2), i(37), '1') +text(j(2), i(38), '1') +text(j(2), i(39), '0') +text(j(2), i(40), '0') +text(j(2), i(41), '0') +text(j(2), i(42), '0') + +text(j(2), i(43), '0') +text(j(2), i(44), '0') +text(j(2), i(45), '0') +text(j(2), i(46), '0') +text(j(2), i(47), '0') +text(j(2), i(48), '0') +text(j(2), i(49), '-1') +text(j(2), i(50), '-1') +text(j(2), i(51), '-1') +text(j(2), i(52), '-1') +text(j(2), i(53), '-1') +text(j(2), i(54), '-1') +text(j(2), i(55), '-1') +text(j(2), i(56), '-1') +text(j(2), i(57), '-1') +text(j(2), i(58), '-2') +text(j(2), i(59), '-2') +text(j(2), i(60), '-2') +text(j(2), i(61), '-2') +text(j(2), i(62), '-2') +text(j(2), i(63), '-2') +text(j(2), i(64), '-2') +text(j(2), i(65), '-2') +text(j(2), i(66), '-2') +text(j(2), i(67), '-2') +text(j(2), i(68), '-2') +text(j(2), i(69), '-2') +text(j(2), i(70), '-2') +text(j(2), i(71), '-2') +text(j(2), i(72), '-2') +text(j(2), i(73), '-2') +text(j(2), i(74), '-2') +text(j(2), i(75), '-2') +text(j(2), i(76), '-2') +text(j(2), i(77), '-2') +text(j(2), i(78), '-2') +text(j(2), i(79), '-2') +text(j(2), i(80), '-2') +text(j(2), i(81), '-2') +text(j(2), i(82), '-2') +text(j(2), i(83), '-2') +text(j(2), i(84), '-2') + +% 3 +text(j(3), i(1), '2') +text(j(3), i(2), '2') +text(j(3), i(3), '2') +text(j(3), i(4), '2') +text(j(3), i(5), '2') +text(j(3), i(6), '2') +text(j(3), i(7), '2') +text(j(3), i(8), '2') +text(j(3), i(9), '2') +text(j(3), i(10), '2') +text(j(3), i(11), '2') +text(j(3), i(12), '2') +text(j(3), i(13), '2') +text(j(3), i(14), '2') +text(j(3), i(15), '2') +text(j(3), i(16), '2') +text(j(3), i(17), '2') +text(j(3), i(18), '2') +text(j(3), i(19), '2') +text(j(3), i(20), '2') +text(j(3), i(21), '2') +text(j(3), i(22), '2') +text(j(3), i(23), '2') +text(j(3), i(24), '2') +text(j(3), i(25), '2') +text(j(3), i(26), '2') +text(j(3), i(27), '2') +text(j(3), i(28), '1') +text(j(3), i(29), '1') +text(j(3), i(30), '1') +text(j(3), i(31), '1') +text(j(3), i(32), '1') +text(j(3), i(33), '1') +text(j(3), i(34), '1') +text(j(3), i(35), '1') +text(j(3), i(36), '1') +text(j(3), i(37), '1') +text(j(3), i(38), '1') +text(j(3), i(39), '0') +text(j(3), i(40), '0') +text(j(3), i(41), '0') +text(j(3), i(42), '0') + +text(j(3), i(43), '0') +text(j(3), i(44), '0') +text(j(3), i(45), '0') +text(j(3), i(46), '0') +text(j(3), i(47), '0') +text(j(3), i(48), '0') +text(j(3), i(49), '-1') +text(j(3), i(50), '-1') +text(j(3), i(51), '-1') +text(j(3), i(52), '-1') +text(j(3), i(53), '-1') +text(j(3), i(54), '-1') +text(j(3), i(55), '-1') +text(j(3), i(56), '-1') +text(j(3), i(57), '-1') +text(j(3), i(58), '-1') +text(j(3), i(59), '-2') +text(j(3), i(60), '-2') +text(j(3), i(61), '-2') +text(j(3), i(62), '-2') +text(j(3), i(63), '-2') +text(j(3), i(64), '-2') +text(j(3), i(65), '-2') +text(j(3), i(66), '-2') +text(j(3), i(67), '-2') +text(j(3), i(68), '-2') +text(j(3), i(69), '-2') +text(j(3), i(70), '-2') +text(j(3), i(71), '-2') +text(j(3), i(72), '-2') +text(j(3), i(73), '-2') +text(j(3), i(74), '-2') +text(j(3), i(75), '-2') +text(j(3), i(76), '-2') +text(j(3), i(77), '-2') +text(j(3), i(78), '-2') +text(j(3), i(79), '-2') +text(j(3), i(80), '-2') +text(j(3), i(81), '-2') +text(j(3), i(82), '-2') +text(j(3), i(83), '-2') +text(j(3), i(84), '-2') + +% 4 +text(j(4), i(1), '2') +text(j(4), i(2), '2') +text(j(4), i(3), '2') +text(j(4), i(4), '2') +text(j(4), i(5), '2') +text(j(4), i(6), '2') +text(j(4), i(7), '2') +text(j(4), i(8), '2') +text(j(4), i(9), '2') +text(j(4), i(10), '2') +text(j(4), i(11), '2') +text(j(4), i(12), '2') +text(j(4), i(13), '2') +text(j(4), i(14), '2') +text(j(4), i(15), '2') +text(j(4), i(16), '2') +text(j(4), i(17), '2') +text(j(4), i(18), '2') +text(j(4), i(19), '2') +text(j(4), i(20), '2') +text(j(4), i(21), '2') +text(j(4), i(22), '2') +text(j(4), i(23), '2') +text(j(4), i(24), '2') +text(j(4), i(25), '2') +text(j(4), i(26), '2') +text(j(4), i(27), '1') +text(j(4), i(28), '1') +text(j(4), i(29), '1') +text(j(4), i(30), '1') +text(j(4), i(31), '1') +text(j(4), i(32), '1') +text(j(4), i(33), '1') +text(j(4), i(34), '1') +text(j(4), i(35), '1') +text(j(4), i(36), '1') +text(j(4), i(37), '1') +text(j(4), i(38), '1') +text(j(4), i(39), '0') +text(j(4), i(40), '0') +text(j(4), i(41), '0') +text(j(4), i(42), '0') + +text(j(4), i(43), '0') +text(j(4), i(44), '0') +text(j(4), i(45), '0') +text(j(4), i(46), '0') +text(j(4), i(47), '0') +text(j(4), i(48), '0') +text(j(4), i(49), '-1') +text(j(4), i(50), '-1') +text(j(4), i(51), '-1') +text(j(4), i(52), '-1') +text(j(4), i(53), '-1') +text(j(4), i(54), '-1') +text(j(4), i(55), '-1') +text(j(4), i(56), '-1') +text(j(4), i(57), '-1') +text(j(4), i(58), '-1') +text(j(4), i(59), '-1') +text(j(4), i(60), '-1') +text(j(4), i(61), '-2') +text(j(4), i(62), '-2') +text(j(4), i(63), '-2') +text(j(4), i(64), '-2') +text(j(4), i(65), '-2') +text(j(4), i(66), '-2') +text(j(4), i(67), '-2') +text(j(4), i(68), '-2') +text(j(4), i(69), '-2') +text(j(4), i(70), '-2') +text(j(4), i(71), '-2') +text(j(4), i(72), '-2') +text(j(4), i(73), '-2') +text(j(4), i(74), '-2') +text(j(4), i(75), '-2') +text(j(4), i(76), '-2') +text(j(4), i(77), '-2') +text(j(4), i(78), '-2') +text(j(4), i(79), '-2') +text(j(4), i(80), '-2') +text(j(4), i(81), '-2') +text(j(4), i(82), '-2') +text(j(4), i(83), '-2') +text(j(4), i(84), '-2') + +% 5 +text(j(5), i(1), '2') +text(j(5), i(2), '2') +text(j(5), i(3), '2') +text(j(5), i(4), '2') +text(j(5), i(5), '2') +text(j(5), i(6), '2') +text(j(5), i(7), '2') +text(j(5), i(8), '2') +text(j(5), i(9), '2') +text(j(5), i(10), '2') +text(j(5), i(11), '2') +text(j(5), i(12), '2') +text(j(5), i(13), '2') +text(j(5), i(14), '2') +text(j(5), i(15), '2') +text(j(5), i(16), '2') +text(j(5), i(17), '2') +text(j(5), i(18), '2') +text(j(5), i(19), '2') +text(j(5), i(20), '2') +text(j(5), i(21), '2') +text(j(5), i(22), '2') +text(j(5), i(23), '2') +text(j(5), i(24), '2') +text(j(5), i(25), '1') +text(j(5), i(26), '1') +text(j(5), i(27), '1') +text(j(5), i(28), '1') +text(j(5), i(29), '1') +text(j(5), i(30), '1') +text(j(5), i(31), '1') +text(j(5), i(32), '1') +text(j(5), i(33), '1') +text(j(5), i(34), '1') +text(j(5), i(35), '1') +text(j(5), i(36), '1') +text(j(5), i(37), '0') +text(j(5), i(38), '0') +text(j(5), i(39), '0') +text(j(5), i(40), '0') +text(j(5), i(41), '0') +text(j(5), i(42), '0') + +text(j(5), i(43), '0') +text(j(5), i(44), '0') +text(j(5), i(45), '0') +text(j(5), i(46), '0') +text(j(5), i(47), '0') +text(j(5), i(48), '0') +text(j(5), i(49), '0') +text(j(5), i(50), '0') +text(j(5), i(51), '-1') +text(j(5), i(52), '-1') +text(j(5), i(53), '-1') +text(j(5), i(54), '-1') +text(j(5), i(55), '-1') +text(j(5), i(56), '-1') +text(j(5), i(57), '-1') +text(j(5), i(58), '-1') +text(j(5), i(59), '-1') +text(j(5), i(60), '-1') +text(j(5), i(61), '-1') +text(j(5), i(62), '-1') +text(j(5), i(63), '-2') +text(j(5), i(64), '-2') +text(j(5), i(65), '-2') +text(j(5), i(66), '-2') +text(j(5), i(67), '-2') +text(j(5), i(68), '-2') +text(j(5), i(69), '-2') +text(j(5), i(70), '-2') +text(j(5), i(71), '-2') +text(j(5), i(72), '-2') +text(j(5), i(73), '-2') +text(j(5), i(74), '-2') +text(j(5), i(75), '-2') +text(j(5), i(76), '-2') +text(j(5), i(77), '-2') +text(j(5), i(78), '-2') +text(j(5), i(79), '-2') +text(j(5), i(80), '-2') +text(j(5), i(81), '-2') +text(j(5), i(82), '-2') +text(j(5), i(83), '-2') +text(j(5), i(84), '-2') + +% 6 +text(j(6), i(1), '2') +text(j(6), i(2), '2') +text(j(6), i(3), '2') +text(j(6), i(4), '2') +text(j(6), i(5), '2') +text(j(6), i(6), '2') +text(j(6), i(7), '2') +text(j(6), i(8), '2') +text(j(6), i(9), '2') +text(j(6), i(10), '2') +text(j(6), i(11), '2') +text(j(6), i(12), '2') +text(j(6), i(13), '2') +text(j(6), i(14), '2') +text(j(6), i(15), '2') +text(j(6), i(16), '2') +text(j(6), i(17), '2') +text(j(6), i(18), '2') +text(j(6), i(19), '2') +text(j(6), i(20), '2') +text(j(6), i(21), '2') +text(j(6), i(22), '2') +text(j(6), i(23), '2') +text(j(6), i(24), '1') +text(j(6), i(25), '1') +text(j(6), i(26), '1') +text(j(6), i(27), '1') +text(j(6), i(28), '1') +text(j(6), i(29), '1') +text(j(6), i(30), '1') +text(j(6), i(31), '1') +text(j(6), i(32), '1') +text(j(6), i(33), '1') +text(j(6), i(34), '1') +text(j(6), i(35), '1') +text(j(6), i(36), '1') +text(j(6), i(37), '0') +text(j(6), i(38), '0') +text(j(6), i(39), '0') +text(j(6), i(40), '0') +text(j(6), i(41), '0') +text(j(6), i(42), '0') + +text(j(6), i(43), '0') +text(j(6), i(44), '0') +text(j(6), i(45), '0') +text(j(6), i(46), '0') +text(j(6), i(47), '0') +text(j(6), i(48), '0') +text(j(6), i(49), '0') +text(j(6), i(50), '0') +text(j(6), i(51), '-1') +text(j(6), i(52), '-1') +text(j(6), i(53), '-1') +text(j(6), i(54), '-1') +text(j(6), i(55), '-1') +text(j(6), i(56), '-1') +text(j(6), i(57), '-1') +text(j(6), i(58), '-1') +text(j(6), i(59), '-1') +text(j(6), i(60), '-1') +text(j(6), i(61), '-1') +text(j(6), i(62), '-1') +text(j(6), i(63), '-2') +text(j(6), i(64), '-2') +text(j(6), i(65), '-2') +text(j(6), i(66), '-2') +text(j(6), i(67), '-2') +text(j(6), i(68), '-2') +text(j(6), i(69), '-2') +text(j(6), i(70), '-2') +text(j(6), i(71), '-2') +text(j(6), i(72), '-2') +text(j(6), i(73), '-2') +text(j(6), i(74), '-2') +text(j(6), i(75), '-2') +text(j(6), i(76), '-2') +text(j(6), i(77), '-2') +text(j(6), i(78), '-2') +text(j(6), i(79), '-2') +text(j(6), i(80), '-2') +text(j(6), i(81), '-2') +text(j(6), i(82), '-2') +text(j(6), i(83), '-2') +text(j(6), i(84), '-2') + +% 7 +text(j(7), i(1), '2') +text(j(7), i(2), '2') +text(j(7), i(3), '2') +text(j(7), i(4), '2') +text(j(7), i(5), '2') +text(j(7), i(6), '2') +text(j(7), i(7), '2') +text(j(7), i(8), '2') +text(j(7), i(9), '2') +text(j(7), i(10), '2') +text(j(7), i(11), '2') +text(j(7), i(12), '2') +text(j(7), i(13), '2') +text(j(7), i(14), '2') +text(j(7), i(15), '2') +text(j(7), i(16), '2') +text(j(7), i(17), '2') +text(j(7), i(18), '2') +text(j(7), i(19), '2') +text(j(7), i(20), '2') +text(j(7), i(21), '2') +text(j(7), i(22), '2') +text(j(7), i(23), '1') +text(j(7), i(24), '1') +text(j(7), i(25), '1') +text(j(7), i(26), '1') +text(j(7), i(27), '1') +text(j(7), i(28), '1') +text(j(7), i(29), '1') +text(j(7), i(30), '1') +text(j(7), i(31), '1') +text(j(7), i(32), '1') +text(j(7), i(33), '1') +text(j(7), i(34), '1') +text(j(7), i(35), '0') +text(j(7), i(36), '0') +text(j(7), i(37), '0') +text(j(7), i(38), '0') +text(j(7), i(39), '0') +text(j(7), i(40), '0') +text(j(7), i(41), '0') +text(j(7), i(42), '0') + +text(j(7), i(43), '0') +text(j(7), i(44), '0') +text(j(7), i(45), '0') +text(j(7), i(46), '0') +text(j(7), i(47), '0') +text(j(7), i(48), '0') +text(j(7), i(49), '0') +text(j(7), i(50), '0') +text(j(7), i(51), '-1') +text(j(7), i(52), '-1') +text(j(7), i(53), '-1') +text(j(7), i(54), '-1') +text(j(7), i(55), '-1') +text(j(7), i(56), '-1') +text(j(7), i(57), '-1') +text(j(7), i(58), '-1') +text(j(7), i(59), '-1') +text(j(7), i(60), '-1') +text(j(7), i(61), '-1') +text(j(7), i(62), '-1') +text(j(7), i(63), '-1') +text(j(7), i(64), '-1') +text(j(7), i(65), '-2') +text(j(7), i(66), '-2') +text(j(7), i(67), '-2') +text(j(7), i(68), '-2') +text(j(7), i(69), '-2') +text(j(7), i(70), '-2') +text(j(7), i(71), '-2') +text(j(7), i(72), '-2') +text(j(7), i(73), '-2') +text(j(7), i(74), '-2') +text(j(7), i(75), '-2') +text(j(7), i(76), '-2') +text(j(7), i(77), '-2') +text(j(7), i(78), '-2') +text(j(7), i(79), '-2') +text(j(7), i(80), '-2') +text(j(7), i(81), '-2') +text(j(7), i(82), '-2') +text(j(7), i(83), '-2') +text(j(7), i(84), '-2') + +% 8 +text(j(8), i(1), '2') +text(j(8), i(2), '2') +text(j(8), i(3), '2') +text(j(8), i(4), '2') +text(j(8), i(5), '2') +text(j(8), i(6), '2') +text(j(8), i(7), '2') +text(j(8), i(8), '2') +text(j(8), i(9), '2') +text(j(8), i(10), '2') +text(j(8), i(11), '2') +text(j(8), i(12), '2') +text(j(8), i(13), '2') +text(j(8), i(14), '2') +text(j(8), i(15), '2') +text(j(8), i(16), '2') +text(j(8), i(17), '2') +text(j(8), i(18), '2') +text(j(8), i(19), '1') +text(j(8), i(20), '1') +text(j(8), i(21), '1') +text(j(8), i(22), '1') +text(j(8), i(23), '1') +text(j(8), i(24), '1') +text(j(8), i(25), '1') +text(j(8), i(26), '1') +text(j(8), i(27), '1') +text(j(8), i(28), '1') +text(j(8), i(29), '1') +text(j(8), i(30), '1') +text(j(8), i(31), '1') +text(j(8), i(32), '1') +text(j(8), i(33), '1') +text(j(8), i(34), '1') +text(j(8), i(35), '0') +text(j(8), i(36), '0') +text(j(8), i(37), '0') +text(j(8), i(38), '0') +text(j(8), i(39), '0') +text(j(8), i(40), '0') +text(j(8), i(41), '0') +text(j(8), i(42), '0') + +text(j(8), i(43), '0') +text(j(8), i(44), '0') +text(j(8), i(45), '0') +text(j(8), i(46), '0') +text(j(8), i(47), '0') +text(j(8), i(48), '0') +text(j(8), i(49), '0') +text(j(8), i(50), '0') +text(j(8), i(51), '-1') +text(j(8), i(52), '-1') +text(j(8), i(53), '-1') +text(j(8), i(54), '-1') +text(j(8), i(55), '-1') +text(j(8), i(56), '-1') +text(j(8), i(57), '-1') +text(j(8), i(58), '-1') +text(j(8), i(59), '-1') +text(j(8), i(60), '-1') +text(j(8), i(61), '-1') +text(j(8), i(62), '-1') +text(j(8), i(63), '-1') +text(j(8), i(64), '-1') +text(j(8), i(65), '-1') +text(j(8), i(66), '-1') +text(j(8), i(67), '-2') +text(j(8), i(68), '-2') +text(j(8), i(69), '-2') +text(j(8), i(70), '-2') +text(j(8), i(71), '-2') +text(j(8), i(72), '-2') +text(j(8), i(73), '-2') +text(j(8), i(74), '-2') +text(j(8), i(75), '-2') +text(j(8), i(76), '-2') +text(j(8), i(77), '-2') +text(j(8), i(78), '-2') +text(j(8), i(79), '-2') +text(j(8), i(80), '-2') +text(j(8), i(81), '-2') +text(j(8), i(82), '-2') +text(j(8), i(83), '-2') +text(j(8), i(84), '-2') + +orient('landscape') +print -dpng 'pd_csa.png' + + + + + diff --git a/pipelined/srt/stine/srt4div b/pipelined/srt/stine/srt4div index ff76638fa..a780abd4b 100755 Binary files a/pipelined/srt/stine/srt4div and b/pipelined/srt/stine/srt4div differ diff --git a/pipelined/srt/stine/srt4div.c b/pipelined/srt/stine/srt4div.c index cbf0d8224..65fdac53b 100755 --- a/pipelined/srt/stine/srt4div.c +++ b/pipelined/srt/stine/srt4div.c @@ -1,83 +1,45 @@ #include "disp.h" #include +// QSLC is for division by recuerrence for +// r=4 using a CPA - See Table 5.9 EL int qslc (double prem, double d) { int q; + // For Debugging printf("d --> %lg\n", d); printf("rw --> %lg\n", prem); - if ((d>=0.0)&&(d<1.0)) { - if (prem>=1.0) - q = 2; - else if (prem>=0.25) - q = 1; - else if (prem>=-0.25) - q = 0; - else if (prem >= -1) - q = -1; - else - q = -2; - return q; - } - - if ((d>=1.0)&&(d<2.0)) { - if (prem>=2.0) - q = 2; - else if (prem>=0.66667) - q = 1; - else if (prem>=-0.6667) - q = 0; - else if (prem >= -2) - q = -1; - else - q = -2; - return q; - } - - if ((d>=2.0)&&(d<3.0)) { - if (prem>=4.0) - q = 2; - else if (prem>=1.25) - q = 1; - else if (prem>=-1.25) - q = 0; - else if (prem >= -4) - q = -1; - else - q = -2; - return q; - } - - if ((d>=3.0)&&(d<4.0)) { - if (prem>=5.0) + + if ((d>=8.0)&&(d<9.0)) { + if (prem>=6.0) q = 2; else if (prem>=2.0) q = 1; else if (prem>=-2.0) q = 0; - else if (prem >= -5) + else if (prem >= -6) q = -1; else q = -2; return q; } - if ((d>=4.0)&&(d<5.0)) { - if (prem>=6.66667) + if ((d>=9.0)&&(d<10.0)) { + if (prem>=7) q = 2; else if (prem>=2.0) q = 1; else if (prem>=-2.0) q = 0; - else if (prem >= -6.66667) + else if (prem >= 7.0) q = -1; else q = -2; return q; } - if ((d>=5.0)&&(d<6.0)) { + if ((d>=10.0)&&(d<11.0)) { if (prem>=8.0) q = 2; else if (prem>=2.0) @@ -91,7 +53,21 @@ int qslc (double prem, double d) { return q; } - if ((d>=6.0)&&(d<7.0)) { + if ((d>=11.0)&&(d<12.0)) { + if (prem>=8.0) + q = 2; + else if (prem>=2.0) + q = 1; + else if (prem>=-2.0) + q = 0; + else if (prem >= -8.0) + q = -1; + else + q = -2; + return q; + } + + if ((d>=12.0)&&(d<13.0)) { if (prem>=10.0) q = 2; else if (prem>=4.0) @@ -105,21 +81,35 @@ int qslc (double prem, double d) { return q; } - if ((d>=7.0)&&(d<8.0)) { - if (prem>=11.0) + if ((d>=13.0)&&(d<14.0)) { + if (prem>=10.0) q = 2; else if (prem>=4.0) q = 1; else if (prem>=-4.0) q = 0; - else if (prem >= -11.0) + else if (prem >= -10.0) q = -1; else q = -2; return q; } - if ((d>=8.0)&&(d<9.0)) { + if ((d>=14.0)&&(d<15.0)) { + if (prem>=10.0) + q = 2; + else if (prem>=4.0) + q = 1; + else if (prem>=-4.0) + q = 0; + else if (prem >= -10.0) + q = -1; + else + q = -2; + return q; + } + + if ((d>=15.0)&&(d<16.0)) { if (prem>=12.0) q = 2; else if (prem>=4.0) @@ -133,106 +123,9 @@ int qslc (double prem, double d) { return q; } - if ((d>=9.0)&&(d<10.0)) { - if (prem>=15.0) - q = 2; - else if (prem>=4.0) - q = 1; - else if (prem>=-4.0) - q = 0; - else if (prem >= -15.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=10.0)&&(d<11.0)) { - if (prem>=15.0) - q = 2; - else if (prem>=4.0) - q = 1; - else if (prem>=-4.0) - q = 0; - else if (prem >= -15.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=11.0)&&(d<12.0)) { - if (prem>=16.0) - q = 2; - else if (prem>=4.0) - q = 1; - else if (prem>=-4.0) - q = 0; - else if (prem >= -16.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=12.0)&&(d<13.0)) { - if (prem>=20.0) - q = 2; - else if (prem>=8.0) - q = 1; - else if (prem>=-8.0) - q = 0; - else if (prem >= -20.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=13.0)&&(d<14.0)) { - if (prem>=20.0) - q = 2; - else if (prem>=8.0) - q = 1; - else if (prem>=-8.0) - q = 0; - else if (prem >= -20.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=14.0)&&(d<15.0)) { - if (prem>=20.0) - q = 2; - else if (prem>=8.0) - q = 1; - else if (prem>=-8.0) - q = 0; - else if (prem >= -20.0) - q = -1; - else - q = -2; - return q; - } - - if ((d>=15.0)&&(d<16.0)) { - if (prem>=24.0) - q = 2; - else if (prem>=8.0) - q = 1; - else if (prem>=-8.0) - q = 0; - else if (prem >= -24.0) - q = -1; - else - q = -2; - return q; - } - } + /* This routine performs a radix-4 SRT division algorithm. The user inputs the numerator, the denominator, @@ -246,6 +139,8 @@ int main(int argc, char* argv[]) { int q; int num_iter, i; int prec; + int radix = 4; + if (argc < 5) { fprintf(stderr, "Usage: %s numerator denominator num_iterations prec\n", @@ -267,27 +162,29 @@ int main(int argc, char* argv[]) { printf("\n"); Q = 0; - P = N*0.25; + P = N * pow(2.0, -log2(radix)); printf("N = %lg, D = %lg, N/D = %lg, num_iter = %d \n\n", N, D, N/D, num_iter); for (scale = 1, i = 0; i < num_iter; i++) { // Shift by r - scale = scale*0.25; - q = qslc(flr((4*P)*16,3), D*16); - //q = -q; + scale = scale * pow(2.0, -log2(radix)); + // (4*P)*8 because of footnote in Table 5.9, page 296 EL + // i.e., real value = shown value / 8 + // D*16 since we use 4 bits of D (1 bit known) + q = qslc(flr((radix * P) * 8, 3), D*16); printf("4*W[n] = "); - disp_bin(4*P,3,prec,stdout); + disp_bin(radix*P, 3, prec, stdout); printf("\n"); printf("q*D = "); - disp_bin(q*D,3,prec,stdout); + disp_bin(q*D, 3, prec, stdout); printf("\n"); printf("W[n+1] = "); - disp_bin(P ,3,prec,stdout); + disp_bin(P ,3, prec, stdout); printf("\n"); // Recurrence - P = 4*P - q*D; + P = radix * P - q * D; // OTFC - Q = Q + q*scale; + Q = Q + q * scale; printf("i = %d, q = %d, Q = %1.18lf, W = %1.18lf\n", i, q, Q, P); printf("i = %d, q = %d", i, q); printf(", Q = "); @@ -296,8 +193,9 @@ int main(int argc, char* argv[]) { disp_bin(P, 3, prec, stdout); printf("\n\n"); } + // Is shifted partial remainder negative? if (P < 0) { - Q = Q - scale; + Q = Q - pow(2.0, -prec); P = P + D; printf("\nCorrecting Negative Remainder\n"); printf("Q = %1.18lf, W = %1.18lf\n", Q, P); @@ -306,9 +204,12 @@ int main(int argc, char* argv[]) { printf(", W = "); disp_bin(P, 3, prec, stdout); printf("\n"); - } - RQ = flr(N/D, (double) prec); - RD = Q*4; + } + + // Output Results + RQ = flr(N/D, prec); + // Since q_{computed} = q / radix, multiply by radix + RD = Q * radix; printf("true = %1.18lf, computed = %1.18lf, \n", RQ, RD); printf("true = "); disp_bin(RQ, 3, prec, stdout); diff --git a/pipelined/srt/testbench-radix4.sv b/pipelined/srt/testbench-radix4.sv new file mode 100644 index 000000000..6ac616ed6 --- /dev/null +++ b/pipelined/srt/testbench-radix4.sv @@ -0,0 +1,148 @@ + +`include "wally-config.vh" +`define DIVLEN ((`NF<`XLEN) ? `XLEN : `NF) + +///////////// +// counter // +///////////// +module counter(input logic clk, + input logic req, + output logic done); + + logic [5:0] count; + + // This block of control logic sequences the divider + // through its iterations. You may modify it if you + // build a divider which completes in fewer iterations. + // You are not responsible for the (trivial) circuit + // design of the block. + + always @(posedge clk) + begin + if (count == `DIVLEN/2+1) done <= #1 1; + else if (done | req) done <= #1 0; + if (req) count <= #1 0; + else count <= #1 count+1; + end +endmodule + +/////////// +// clock // +/////////// +module clock(clk); + output clk; + + // Internal clk signal + logic clk; + +endmodule + +////////// +// testbench // +////////// +module testbenchradix4; + logic clk; + logic req; + logic done; + logic [63:0] a, b; + logic [51:0] afrac, bfrac; + logic [10:0] aExp, bExp; + logic asign, bsign; + logic [51:0] r, rOTFC; + logic [`DIVLEN-1:0] Quot, QuotOTFC; + logic [54:0] rp, rm; // positive quotient digits + + // Test parameters + parameter MEM_SIZE = 40000; + parameter MEM_WIDTH = 64+64+64; + + `define memr 63:0 + `define memb 127:64 + `define mema 191:128 + + // Test logicisters + logic [MEM_WIDTH-1:0] Tests [0:MEM_SIZE]; // Space for input file + logic [MEM_WIDTH-1:0] Vec; // Verilog doesn't allow direct access to a + // bit field of an array + logic [63:0] correctr, nextr, diffn, diffp; + logic [10:0] rExp; + logic rsign; + integer testnum, errors; + + // Divider + srtradix4 srtradix4(.clk, .Start(req), + .Stall(1'b0), .Flush(1'b0), + .XExp(aExp), .YExp(bExp), .rExp, + .XSign(asign), .YSign(bsign), .rsign, + .XFrac(afrac), .YFrac(bfrac), + .SrcA('0), .SrcB('0), .Fmt(2'b00), + .W64(1'b0), .Signed(1'b0), .Int(1'b0), .Sqrt(1'b0), + .Quot, .Rem(), .Flags()); + + // Counter + counter counter(clk, req, done); + + + initial + forever + begin + clk = 1; #17; + clk = 0; #17; + end + + + // Read test vectors from disk + initial + begin + testnum = 0; + errors = 0; + $readmemh ("testvectors", Tests); + Vec = Tests[testnum]; + a = Vec[`mema]; + {asign, aExp, afrac} = a; + b = Vec[`memb]; + {bsign, bExp, bfrac} = b; + nextr = Vec[`memr]; + r = Quot[`DIVLEN-1:`DIVLEN - 52]; + req <= 1; + end + + // Apply directed test vectors read from file. + + always @(posedge clk) + begin + r = Quot[`DIVLEN-1:`DIVLEN - 52]; + if (done) begin + req <= 1; + diffp = correctr[51:0] - r; + diffn = r - correctr[51:0]; + if ((rsign !== correctr[63]) | (rExp !== correctr[62:52]) | ($signed(diffn) > 1) | ($signed(diffp) > 1) | (diffn === 64'bx) | (diffp === 64'bx)) // check if accurate to 1 ulp + begin + errors = errors+1; + $display("result was %h_%h, should be %h %h %h\n", rExp, r, correctr, diffn, diffp); + $display("failed\n"); + $stop; + end + if (afrac === 52'hxxxxxxxxxxxxx) + begin + $display("%d Tests completed successfully", testnum); + $stop; + end + end + if (req) + begin + req <= 0; + correctr = nextr; + testnum = testnum+1; + Vec = Tests[testnum]; + $display("a = %h b = %h",a,b); + a = Vec[`mema]; + {asign, aExp, afrac} = a; + b = Vec[`memb]; + {bsign, bExp, bfrac} = b; + nextr = Vec[`memr]; + end + end + +endmodule + diff --git a/pipelined/srt/testbench.sv b/pipelined/srt/testbench.sv index d4143f20b..93da74752 100644 --- a/pipelined/srt/testbench.sv +++ b/pipelined/srt/testbench.sv @@ -7,7 +7,7 @@ module counter(input logic clk, input logic req, output logic done); - logic [5:0] count; + logic [7:0] count; // This block of control logic sequences the divider // through its iterations. You may modify it if you @@ -17,7 +17,7 @@ module counter(input logic clk, always @(posedge clk) begin - if (count == 54) done <= #1 1; + if (count == `DIVLEN+1) done <= #1 1; else if (done | req) done <= #1 0; if (req) count <= #1 0; else count <= #1 count+1; @@ -110,12 +110,14 @@ module testbench; always @(posedge clk) begin + r = Quot[`DIVLEN:`DIVLEN - 52]; + rOTFC = QuotOTFC[`DIVLEN:`DIVLEN - 52]; if (done) begin req <= #5 1; diffp = correctr[51:0] - r; diffn = r - correctr[51:0]; - if ((rsign !== correctr[63]) | (rExp !== correctr[62:52]) | ($signed(diffn) > 1) | ($signed(diffp) > 1)) // check if accurate to 1 ulp + if ((rsign !== correctr[63]) | (rExp !== correctr[62:52]) | ($signed(diffn) > 1) | ($signed(diffp) > 1) | (diffn === 64'bx) | (diffp === 64'bx)) // check if accurate to 1 ulp begin errors = errors+1; $display("result was %h_%h, should be %h %h %h\n", rExp, r, correctr, diffn, diffp); diff --git a/pipelined/testbench/testbench-linux.sv b/pipelined/testbench/testbench-linux.sv index feec46d10..e7f64033c 100644 --- a/pipelined/testbench/testbench-linux.sv +++ b/pipelined/testbench/testbench-linux.sv @@ -559,11 +559,11 @@ module testbench; if ((dut.core.lsu.LSUPAdrM == 'h10000002) | (dut.core.lsu.LSUPAdrM == 'h10000005) | (dut.core.lsu.LSUPAdrM == 'h10000006)) begin \ if(!NO_SPOOFING) begin \ $display("%tns, %d instrs: Overwrite UART's Register in memory stage.", $time, AttemptedInstructionCount); \ - force dut.core.ieu.dp.ReadDataM = ExpectedMemReadDataM; \ + force dut.core.lsu.ReadDataM = ExpectedMemReadDataM; \ end \ end else \ if(!NO_SPOOFING) \ - release dut.core.ieu.dp.ReadDataM; \ + release dut.core.lsu.ReadDataM; \ if(textM.substr(0,5) == "rdtime") begin \ //$display("%tns, %d instrs: Overwrite MTIME_CLINT on read of MTIME in memory stage.", $time, InstrCountW-1); \ if(!NO_SPOOFING) \ diff --git a/pipelined/testbench/testbench.sv b/pipelined/testbench/testbench.sv index 6c2e0b89b..4a6874c44 100644 --- a/pipelined/testbench/testbench.sv +++ b/pipelined/testbench/testbench.sv @@ -51,7 +51,6 @@ module testbench; string tests[]; logic [3:0] dummy; - string ProgramAddrMapFile, ProgramLabelMapFile; logic [`AHBW-1:0] HRDATAEXT; logic HREADYEXT, HRESPEXT; logic [31:0] HADDR; @@ -65,6 +64,9 @@ logic [3:0] dummy; logic HCLK, HRESETn; logic [`XLEN-1:0] PCW; + string ProgramAddrMapFile, ProgramLabelMapFile; + integer ProgramAddrLabelArray [string] = '{ "begin_signature" : 0, "tohost" : 0 }; + logic DCacheFlushDone, DCacheFlushStart; flopenr #(`XLEN) PCWReg(clk, reset, ~dut.core.ieu.dp.StallW, dut.core.ifu.PCM, PCW); @@ -117,6 +119,7 @@ logic [3:0] dummy; "wally32i": tests = wally32i; "wally32e": tests = wally32e; "wally32priv": tests = wally32priv; + "wally32periph": tests = wally32periph; "embench": tests = embench; endcase end @@ -127,7 +130,7 @@ logic [3:0] dummy; end string signame, memfilename, pathname, objdumpfilename, adrstr, outputfile; - integer outputFilePointer, ProgramLabelMap, ProgramAddrMap; + integer outputFilePointer; logic [31:0] GPIOPinsIn, GPIOPinsOut, GPIOPinsEn; logic UARTSin, UARTSout; @@ -193,6 +196,9 @@ logic [3:0] dummy; ProgramAddrMapFile = {pathname, tests[test], ".elf.objdump.addr"}; ProgramLabelMapFile = {pathname, tests[test], ".elf.objdump.lab"}; + // declare memory labels that interest us, the updateProgramAddrLabelArray task will find the addr of each label and fill the array + // to expand, add more elements to this array and initialize them to zero (also initilaize them to zero at the start of the next test) + updateProgramAddrLabelArray(ProgramAddrMapFile, ProgramLabelMapFile, ProgramAddrLabelArray); $display("Read memfile %s", memfilename); reset_ext = 1; # 42; reset_ext = 0; end @@ -217,30 +223,12 @@ logic [3:0] dummy; end // Termination condition (i.e. we finished running current test) if (DCacheFlushDone) begin - // Gets the memory location of begin_signature - adrstr = "0"; - ProgramLabelMap = $fopen(ProgramLabelMapFile, "r"); - ProgramAddrMap = $fopen(ProgramAddrMapFile, "r"); - if (ProgramLabelMap & ProgramAddrMap) begin // check we found both files - while (!$feof(ProgramLabelMap)) begin - string label; - integer returncode; - returncode = $fgets(label, ProgramLabelMap); - returncode = $fgets(adrstr, ProgramAddrMap); - if (label == "begin_signature\n") begin - if (DEBUG) $display("%s begin_signature adrstr: %s", TEST, adrstr); - break; - end - end - end - if (adrstr == "0") begin + integer begin_signature_addr; + begin_signature_addr = ProgramAddrLabelArray["begin_signature"]; + if (!begin_signature_addr) $display("begin_signature addr not found in %s", ProgramLabelMapFile); - end - $fclose(ProgramLabelMap); - $fclose(ProgramAddrMap); - - testadr = ($unsigned(adrstr.atohex()))/(`XLEN/8); - testadrNoBase = (adrstr.atohex() - `RAM_BASE)/(`XLEN/8); + testadr = ($unsigned(begin_signature_addr))/(`XLEN/8); + testadrNoBase = (begin_signature_addr - `RAM_BASE)/(`XLEN/8); #600; // give time for instructions in pipeline to finish if (TEST == "embench") begin // Writes contents of begin_signature to .sim.output file @@ -262,8 +250,10 @@ logic [3:0] dummy; for(i=0; i XLEN unleses data cache is supported"); assert (`DCACHE_WAYSIZEINBYTES <= 4096 | (`DMEM != `MEM_CACHE) | `VIRTMEM_SUPPORTED == 0) else $error("DCACHE_WAYSIZEINBYTES cannot exceed 4 KiB when caches and vitual memory is enabled (to prevent aliasing)"); assert (`DCACHE_LINELENINBITS >= 128 | (`DMEM != `MEM_CACHE)) else $error("DCACHE_LINELENINBITS must be at least 128 when caches are enabled"); @@ -523,5 +515,26 @@ module copyShadow end end -endmodule +endmodule +task automatic updateProgramAddrLabelArray; + input string ProgramAddrMapFile, ProgramLabelMapFile; + inout integer ProgramAddrLabelArray [string]; + // Gets the memory location of begin_signature + integer ProgramLabelMapFP, ProgramAddrMapFP; + ProgramLabelMapFP = $fopen(ProgramLabelMapFile, "r"); + ProgramAddrMapFP = $fopen(ProgramAddrMapFile, "r"); + + if (ProgramLabelMapFP & ProgramAddrMapFP) begin // check we found both files + while (!$feof(ProgramLabelMapFP)) begin + string label, adrstr; + integer returncode; + returncode = $fscanf(ProgramLabelMapFP, "%s\n", label); + returncode = $fscanf(ProgramAddrMapFP, "%s\n", adrstr); + if (ProgramAddrLabelArray.exists(label)) + ProgramAddrLabelArray[label] = adrstr.atohex(); + end + end + $fclose(ProgramLabelMapFP); + $fclose(ProgramAddrMapFP); +endtask \ No newline at end of file diff --git a/pipelined/testbench/tests.vh b/pipelined/testbench/tests.vh index f01d849b1..c17cef914 100644 --- a/pipelined/testbench/tests.vh +++ b/pipelined/testbench/tests.vh @@ -33,12 +33,12 @@ string tvpaths[] = '{ "../../addins/imperas-riscv-tests/work/", - "../../addins/riscv-arch-test/work/", + "../../tests/riscof/work/", "../../tests/wally-riscv-arch-test/work/", "../../tests/imperas-riscv-tests/work/", "../../benchmarks/riscv-coremark/work/", - "../../addins/embench-iot/bd_speed/src/" -}; + "../../addins/embench-iot/" + }; string coremark[] = '{ `COREMARK, @@ -47,28 +47,50 @@ string tvpaths[] = '{ string embench[] = '{ `EMBENCH, - "aha-mont64/aha-mont64", - "crc32/crc32", - "cubic/cubic", - "edn/edn", - "huffbench/huffbench", - "matmult-int/matmult-int", - "md5sum/md5sum", - "minver/minver", - "nbody/nbody", - "nettle-aes/nettle-aes", - "nettle-sha256/nettle-sha256", - "nsichneu/nsichneu", - "picojpeg/picojpeg", - "primecount/primecount", - "qrduino/qrduino", - "sglib-combined/sglib-combined", - "slre/slre", - "st/st", - "statemate/statemate", - "tarfind/tarfind", - "ud/ud", - "wikisort/wikisort" + "bd_speedopt_speed/src/aha-mont64/aha-mont64", + "bd_speedopt_speed/src/crc32/crc32", + "bd_speedopt_speed/src/cubic/cubic", + "bd_speedopt_speed/src/edn/edn", + "bd_speedopt_speed/src/huffbench/huffbench", + "bd_speedopt_speed/src/matmult-int/matmult-int", + "bd_speedopt_speed/src/md5sum/md5sum", + "bd_speedopt_speed/src/minver/minver", + "bd_speedopt_speed/src/nbody/nbody", + "bd_speedopt_speed/src/nettle-aes/nettle-aes", + "bd_speedopt_speed/src/nettle-sha256/nettle-sha256", + "bd_speedopt_speed/src/nsichneu/nsichneu", + "bd_speedopt_speed/src/picojpeg/picojpeg", + "bd_speedopt_speed/src/primecount/primecount", + "bd_speedopt_speed/src/qrduino/qrduino", + "bd_speedopt_speed/src/sglib-combined/sglib-combined", + "bd_speedopt_speed/src/slre/slre", + "bd_speedopt_speed/src/st/st", + "bd_speedopt_speed/src/statemate/statemate", + "bd_speedopt_speed/src/tarfind/tarfind", + "bd_speedopt_speed/src/ud/ud", + "bd_speedopt_speed/src/wikisort/wikisort", + "bd_sizeopt_speed/src/aha-mont64/aha-mont64", + "bd_sizeopt_speed/src/crc32/crc32", + "bd_sizeopt_speed/src/cubic/cubic", + "bd_sizeopt_speed/src/edn/edn", + "bd_sizeopt_speed/src/huffbench/huffbench", + "bd_sizeopt_speed/src/matmult-int/matmult-int", + "bd_sizeopt_speed/src/md5sum/md5sum", + "bd_sizeopt_speed/src/minver/minver", + "bd_sizeopt_speed/src/nbody/nbody", + "bd_sizeopt_speed/src/nettle-aes/nettle-aes", + "bd_sizeopt_speed/src/nettle-sha256/nettle-sha256", + "bd_sizeopt_speed/src/nsichneu/nsichneu", + "bd_sizeopt_speed/src/picojpeg/picojpeg", + "bd_sizeopt_speed/src/primecount/primecount", + "bd_sizeopt_speed/src/qrduino/qrduino", + "bd_sizeopt_speed/src/sglib-combined/sglib-combined", + "bd_sizeopt_speed/src/slre/slre", + "bd_sizeopt_speed/src/st/st", + "bd_sizeopt_speed/src/statemate/statemate", + "bd_sizeopt_speed/src/tarfind/tarfind", + "bd_sizeopt_speed/src/ud/ud", + "bd_sizeopt_speed/src/wikisort/wikisort" }; string wally64a[] = '{ @@ -900,573 +922,570 @@ string imperas32f[] = '{ string arch64priv[] = '{ `RISCVARCHTEST, - "rv64i_m/privilege/ebreak", - "rv64i_m/privilege/ecall", - "rv64i_m/privilege/misalign-beq-01", - "rv64i_m/privilege/misalign-bge-01", - "rv64i_m/privilege/misalign-bgeu-01", - "rv64i_m/privilege/misalign-blt-01", - "rv64i_m/privilege/misalign-bltu-01", - "rv64i_m/privilege/misalign-bne-01", - "rv64i_m/privilege/misalign-jal-01", - "rv64i_m/privilege/misalign-ld-01", - "rv64i_m/privilege/misalign-lh-01", - "rv64i_m/privilege/misalign-lhu-01", - "rv64i_m/privilege/misalign-lw-01", - "rv64i_m/privilege/misalign-lwu-01", - "rv64i_m/privilege/misalign-sd-01", - "rv64i_m/privilege/misalign-sh-01", - "rv64i_m/privilege/misalign-sw-01", - "rv64i_m/privilege/misalign1-jalr-01", - "rv64i_m/privilege/misalign2-jalr-01" + "rv64i_m/privilege/src/ebreak.S/ref/Ref", + "rv64i_m/privilege/src/ecall.S/ref/Ref", + "rv64i_m/privilege/src/misalign1-jalr-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign2-jalr-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-beq-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-bge-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-bgeu-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-blt-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-bltu-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-bne-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-jal-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-ld-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-lh-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-lhu-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-lw-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-lwu-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-sd-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-sh-01.S/ref/Ref", + "rv64i_m/privilege/src/misalign-sw-01.S/ref/Ref" }; string arch64m[] = '{ `RISCVARCHTEST, - "rv64i_m/M/div-01", - "rv64i_m/M/divu-01", - "rv64i_m/M/divuw-01", - "rv64i_m/M/divw-01", - "rv64i_m/M/mul-01", - "rv64i_m/M/mulh-01", - "rv64i_m/M/mulhsu-01", - "rv64i_m/M/mulhu-01", - "rv64i_m/M/mulw-01", - "rv64i_m/M/rem-01", - "rv64i_m/M/remu-01", - "rv64i_m/M/remuw-01", - "rv64i_m/M/remw-01" + "rv64i_m/M/src/div-01.S/ref/Ref", + "rv64i_m/M/src/divu-01.S/ref/Ref", + "rv64i_m/M/src/divuw-01.S/ref/Ref", + "rv64i_m/M/src/divw-01.S/ref/Ref", + "rv64i_m/M/src/mul-01.S/ref/Ref", + "rv64i_m/M/src/mulh-01.S/ref/Ref", + "rv64i_m/M/src/mulhsu-01.S/ref/Ref", + "rv64i_m/M/src/mulhu-01.S/ref/Ref", + "rv64i_m/M/src/mulw-01.S/ref/Ref", + "rv64i_m/M/src/rem-01.S/ref/Ref", + "rv64i_m/M/src/remu-01.S/ref/Ref", + "rv64i_m/M/src/remuw-01.S/ref/Ref", + "rv64i_m/M/src/remw-01.S/ref/Ref" }; string arch64c[] = '{ `RISCVARCHTEST, - "rv64i_m/C/cadd-01", - "rv64i_m/C/caddi-01", - "rv64i_m/C/caddi16sp-01", - "rv64i_m/C/caddi4spn-01", - "rv64i_m/C/caddiw-01", - "rv64i_m/C/caddw-01", - "rv64i_m/C/cand-01", - "rv64i_m/C/candi-01", - "rv64i_m/C/cbeqz-01", - "rv64i_m/C/cbnez-01", - "rv64i_m/C/cj-01", - "rv64i_m/C/cjalr-01", - "rv64i_m/C/cjr-01", - "rv64i_m/C/cld-01", - "rv64i_m/C/cldsp-01", - "rv64i_m/C/cli-01", - "rv64i_m/C/clui-01", - "rv64i_m/C/clw-01", - "rv64i_m/C/clwsp-01", - "rv64i_m/C/cmv-01", - "rv64i_m/C/cnop-01", - "rv64i_m/C/cor-01", - "rv64i_m/C/csd-01", - "rv64i_m/C/csdsp-01", - "rv64i_m/C/cslli-01", - "rv64i_m/C/csrai-01", - "rv64i_m/C/csrli-01", - "rv64i_m/C/csub-01", - "rv64i_m/C/csubw-01", - "rv64i_m/C/csw-01", - "rv64i_m/C/cswsp-01", - "rv64i_m/C/cxor-01" + "rv64i_m/C/src/cadd-01.S/ref/Ref", + "rv64i_m/C/src/caddi-01.S/ref/Ref", + "rv64i_m/C/src/caddi16sp-01.S/ref/Ref", + "rv64i_m/C/src/caddi4spn-01.S/ref/Ref", + "rv64i_m/C/src/caddiw-01.S/ref/Ref", + "rv64i_m/C/src/caddw-01.S/ref/Ref", + "rv64i_m/C/src/cand-01.S/ref/Ref", + "rv64i_m/C/src/candi-01.S/ref/Ref", + "rv64i_m/C/src/cbeqz-01.S/ref/Ref", + "rv64i_m/C/src/cbnez-01.S/ref/Ref", + "rv64i_m/C/src/cj-01.S/ref/Ref", + "rv64i_m/C/src/cjalr-01.S/ref/Ref", + "rv64i_m/C/src/cjr-01.S/ref/Ref", + "rv64i_m/C/src/cld-01.S/ref/Ref", + "rv64i_m/C/src/cldsp-01.S/ref/Ref", + "rv64i_m/C/src/cli-01.S/ref/Ref", + "rv64i_m/C/src/clui-01.S/ref/Ref", + "rv64i_m/C/src/clw-01.S/ref/Ref", + "rv64i_m/C/src/clwsp-01.S/ref/Ref", + "rv64i_m/C/src/cmv-01.S/ref/Ref", + "rv64i_m/C/src/cnop-01.S/ref/Ref", + "rv64i_m/C/src/cor-01.S/ref/Ref", + "rv64i_m/C/src/csd-01.S/ref/Ref", + "rv64i_m/C/src/csdsp-01.S/ref/Ref", + "rv64i_m/C/src/cslli-01.S/ref/Ref", + "rv64i_m/C/src/csrai-01.S/ref/Ref", + "rv64i_m/C/src/csrli-01.S/ref/Ref", + "rv64i_m/C/src/csub-01.S/ref/Ref", + "rv64i_m/C/src/csubw-01.S/ref/Ref", + "rv64i_m/C/src/csw-01.S/ref/Ref", + "rv64i_m/C/src/cswsp-01.S/ref/Ref", + "rv64i_m/C/src/cxor-01.S/ref/Ref" }; string arch64cpriv[] = '{ // `RISCVARCHTEST, - "rv64i_m/C/cebreak-01" + "rv64i_m/C/src/cebreak-01.S/ref/Ref" }; string arch64i[] = '{ `RISCVARCHTEST, - "rv64i_m/I/add-01", - "rv64i_m/I/addi-01", - "rv64i_m/I/addiw-01", - "rv64i_m/I/addw-01", - "rv64i_m/I/and-01", - "rv64i_m/I/andi-01", - "rv64i_m/I/auipc-01", - "rv64i_m/I/beq-01", - "rv64i_m/I/bge-01", - "rv64i_m/I/bgeu-01", - "rv64i_m/I/blt-01", - "rv64i_m/I/bltu-01", - "rv64i_m/I/bne-01", - "rv64i_m/I/fence-01", - "rv64i_m/I/jal-01", - "rv64i_m/I/jalr-01", - "rv64i_m/I/lb-align-01", - "rv64i_m/I/lbu-align-01", - "rv64i_m/I/ld-align-01", - "rv64i_m/I/lh-align-01", - "rv64i_m/I/lhu-align-01", - "rv64i_m/I/lui-01", - "rv64i_m/I/lw-align-01", - "rv64i_m/I/lwu-align-01", - "rv64i_m/I/or-01", - "rv64i_m/I/ori-01", - "rv64i_m/I/sb-align-01", - "rv64i_m/I/sd-align-01", - "rv64i_m/I/sh-align-01", - "rv64i_m/I/sll-01", - "rv64i_m/I/slli-01", - "rv64i_m/I/slliw-01", - "rv64i_m/I/sllw-01", - "rv64i_m/I/slt-01", - "rv64i_m/I/slti-01", - "rv64i_m/I/sltiu-01", - "rv64i_m/I/sltu-01", - "rv64i_m/I/sra-01", - "rv64i_m/I/srai-01", - "rv64i_m/I/sraiw-01", - "rv64i_m/I/sraw-01", - "rv64i_m/I/srl-01", - "rv64i_m/I/srli-01", - "rv64i_m/I/srliw-01", - "rv64i_m/I/srlw-01", - "rv64i_m/I/sub-01", - "rv64i_m/I/subw-01", - "rv64i_m/I/sw-align-01", - "rv64i_m/I/xor-01", - "rv64i_m/I/xori-01" + "rv64i_m/I/src/add-01.S/ref/Ref", + "rv64i_m/I/src/addi-01.S/ref/Ref", + "rv64i_m/I/src/addiw-01.S/ref/Ref", + "rv64i_m/I/src/addw-01.S/ref/Ref", + "rv64i_m/I/src/and-01.S/ref/Ref", + "rv64i_m/I/src/andi-01.S/ref/Ref", + "rv64i_m/I/src/auipc-01.S/ref/Ref", + "rv64i_m/I/src/beq-01.S/ref/Ref", + "rv64i_m/I/src/bge-01.S/ref/Ref", + "rv64i_m/I/src/bgeu-01.S/ref/Ref", + "rv64i_m/I/src/blt-01.S/ref/Ref", + "rv64i_m/I/src/bltu-01.S/ref/Ref", + "rv64i_m/I/src/bne-01.S/ref/Ref", + "rv64i_m/I/src/fence-01.S/ref/Ref", + "rv64i_m/I/src/jal-01.S/ref/Ref", + "rv64i_m/I/src/jalr-01.S/ref/Ref", + "rv64i_m/I/src/lb-align-01.S/ref/Ref", + "rv64i_m/I/src/lbu-align-01.S/ref/Ref", + "rv64i_m/I/src/ld-align-01.S/ref/Ref", + "rv64i_m/I/src/lh-align-01.S/ref/Ref", + "rv64i_m/I/src/lhu-align-01.S/ref/Ref", + "rv64i_m/I/src/lui-01.S/ref/Ref", + "rv64i_m/I/src/lw-align-01.S/ref/Ref", + "rv64i_m/I/src/lwu-align-01.S/ref/Ref", + "rv64i_m/I/src/or-01.S/ref/Ref", + "rv64i_m/I/src/ori-01.S/ref/Ref", + "rv64i_m/I/src/sb-align-01.S/ref/Ref", + "rv64i_m/I/src/sd-align-01.S/ref/Ref", + "rv64i_m/I/src/sh-align-01.S/ref/Ref", + "rv64i_m/I/src/sll-01.S/ref/Ref", + "rv64i_m/I/src/slli-01.S/ref/Ref", + "rv64i_m/I/src/slliw-01.S/ref/Ref", + "rv64i_m/I/src/sllw-01.S/ref/Ref", + "rv64i_m/I/src/slt-01.S/ref/Ref", + "rv64i_m/I/src/slti-01.S/ref/Ref", + "rv64i_m/I/src/sltiu-01.S/ref/Ref", + "rv64i_m/I/src/sltu-01.S/ref/Ref", + "rv64i_m/I/src/sra-01.S/ref/Ref", + "rv64i_m/I/src/srai-01.S/ref/Ref", + "rv64i_m/I/src/sraiw-01.S/ref/Ref", + "rv64i_m/I/src/sraw-01.S/ref/Ref", + "rv64i_m/I/src/srl-01.S/ref/Ref", + "rv64i_m/I/src/srli-01.S/ref/Ref", + "rv64i_m/I/src/srliw-01.S/ref/Ref", + "rv64i_m/I/src/srlw-01.S/ref/Ref", + "rv64i_m/I/src/sub-01.S/ref/Ref", + "rv64i_m/I/src/subw-01.S/ref/Ref", + "rv64i_m/I/src/sw-align-01.S/ref/Ref", + "rv64i_m/I/src/xor-01.S/ref/Ref", + "rv64i_m/I/src/xori-01.S/ref/Ref" }; - string arch64d[] = '{ `RISCVARCHTEST, - "rv64i_m/D/d_fadd_b10-01", - "rv64i_m/D/d_fadd_b1-01", - "rv64i_m/D/d_fadd_b11-01", - "rv64i_m/D/d_fadd_b12-01", - "rv64i_m/D/d_fadd_b13-01", - "rv64i_m/D/d_fadd_b2-01", - "rv64i_m/D/d_fadd_b3-01", - "rv64i_m/D/d_fadd_b4-01", - "rv64i_m/D/d_fadd_b5-01", - "rv64i_m/D/d_fadd_b7-01", - "rv64i_m/D/d_fadd_b8-01", - "rv64i_m/D/d_fclass_b1-01", - "rv64i_m/D/d_fcvt.d.l_b25-01", - "rv64i_m/D/d_fcvt.d.l_b26-01", - "rv64i_m/D/d_fcvt.d.lu_b25-01", - "rv64i_m/D/d_fcvt.d.lu_b26-01", - "rv64i_m/D/d_fcvt.d.s_b1-01", - "rv64i_m/D/d_fcvt.d.s_b22-01", - "rv64i_m/D/d_fcvt.d.s_b23-01", - "rv64i_m/D/d_fcvt.d.s_b24-01", - "rv64i_m/D/d_fcvt.d.s_b27-01", - "rv64i_m/D/d_fcvt.d.s_b28-01", - "rv64i_m/D/d_fcvt.d.s_b29-01", - "rv64i_m/D/d_fcvt.d.w_b25-01", - "rv64i_m/D/d_fcvt.d.w_b26-01", - "rv64i_m/D/d_fcvt.d.wu_b25-01", - "rv64i_m/D/d_fcvt.d.wu_b26-01", - "rv64i_m/D/d_fcvt.l.d_b1-01", - "rv64i_m/D/d_fcvt.l.d_b22-01", - "rv64i_m/D/d_fcvt.l.d_b23-01", - "rv64i_m/D/d_fcvt.l.d_b24-01", - "rv64i_m/D/d_fcvt.l.d_b27-01", - "rv64i_m/D/d_fcvt.l.d_b28-01", - "rv64i_m/D/d_fcvt.l.d_b29-01", - "rv64i_m/D/d_fcvt.lu.d_b1-01", - "rv64i_m/D/d_fcvt.lu.d_b22-01", - "rv64i_m/D/d_fcvt.lu.d_b23-01", - "rv64i_m/D/d_fcvt.lu.d_b24-01", - "rv64i_m/D/d_fcvt.lu.d_b27-01", - "rv64i_m/D/d_fcvt.lu.d_b28-01", - "rv64i_m/D/d_fcvt.lu.d_b29-01", - "rv64i_m/D/d_fcvt.s.d_b1-01", - "rv64i_m/D/d_fcvt.s.d_b22-01", - "rv64i_m/D/d_fcvt.s.d_b23-01", - "rv64i_m/D/d_fcvt.s.d_b24-01", - "rv64i_m/D/d_fcvt.s.d_b27-01", - "rv64i_m/D/d_fcvt.s.d_b28-01", - "rv64i_m/D/d_fcvt.s.d_b29-01", - "rv64i_m/D/d_fcvt.w.d_b1-01", - "rv64i_m/D/d_fcvt.w.d_b22-01", - "rv64i_m/D/d_fcvt.w.d_b23-01", - "rv64i_m/D/d_fcvt.w.d_b24-01", - "rv64i_m/D/d_fcvt.w.d_b27-01", - "rv64i_m/D/d_fcvt.w.d_b28-01", - "rv64i_m/D/d_fcvt.w.d_b29-01", - "rv64i_m/D/d_fcvt.wu.d_b1-01", - "rv64i_m/D/d_fcvt.wu.d_b22-01", - "rv64i_m/D/d_fcvt.wu.d_b23-01", - "rv64i_m/D/d_fcvt.wu.d_b24-01", - "rv64i_m/D/d_fcvt.wu.d_b27-01", - "rv64i_m/D/d_fcvt.wu.d_b28-01", - "rv64i_m/D/d_fcvt.wu.d_b29-01", - // "rv64i_m/D/d_fdiv_b1-01", // RV NaNs need to be positive - // "rv64i_m/D/d_fdiv_b20-01", // looks like flags - // "rv64i_m/D/d_fdiv_b2-01", // also flags - // "rv64i_m/D/d_fdiv_b21-01", // positive NaNs again - // "rv64i_m/D/d_fdiv_b3-01", - // "rv64i_m/D/d_fdiv_b4-01", // flags - // "rv64i_m/D/d_fdiv_b5-01", - // "rv64i_m/D/d_fdiv_b6-01", // flags - // "rv64i_m/D/d_fdiv_b7-01", - // "rv64i_m/D/d_fdiv_b8-01", // flags - // "rv64i_m/D/d_fdiv_b9-01", might be a flag too - "rv64i_m/D/d_feq_b1-01", - "rv64i_m/D/d_feq_b19-01", - "rv64i_m/D/d_fld-align-01", - "rv64i_m/D/d_fle_b1-01", - "rv64i_m/D/d_fle_b19-01", - "rv64i_m/D/d_flt_b1-01", - "rv64i_m/D/d_flt_b19-01", - "rv64i_m/D/d_fmadd_b14-01", - "rv64i_m/D/d_fmadd_b16-01", - "rv64i_m/D/d_fmadd_b17-01", - "rv64i_m/D/d_fmadd_b18-01", - "rv64i_m/D/d_fmadd_b2-01", - "rv64i_m/D/d_fmadd_b3-01", - "rv64i_m/D/d_fmadd_b4-01", - "rv64i_m/D/d_fmadd_b5-01", - "rv64i_m/D/d_fmadd_b6-01", - "rv64i_m/D/d_fmadd_b7-01", - "rv64i_m/D/d_fmadd_b8-01", - "rv64i_m/D/d_fmax_b1-01", - "rv64i_m/D/d_fmax_b19-01", - "rv64i_m/D/d_fmin_b1-01", - "rv64i_m/D/d_fmin_b19-01", - "rv64i_m/D/d_fmsub_b14-01", - "rv64i_m/D/d_fmsub_b16-01", - "rv64i_m/D/d_fmsub_b17-01", - "rv64i_m/D/d_fmsub_b18-01", - "rv64i_m/D/d_fmsub_b2-01", - "rv64i_m/D/d_fmsub_b3-01", - "rv64i_m/D/d_fmsub_b4-01", - "rv64i_m/D/d_fmsub_b5-01", - "rv64i_m/D/d_fmsub_b6-01", - "rv64i_m/D/d_fmsub_b7-01", - "rv64i_m/D/d_fmsub_b8-01", - "rv64i_m/D/d_fmul_b1-01", - "rv64i_m/D/d_fmul_b2-01", - "rv64i_m/D/d_fmul_b3-01", - "rv64i_m/D/d_fmul_b4-01", - "rv64i_m/D/d_fmul_b5-01", - "rv64i_m/D/d_fmul_b6-01", - "rv64i_m/D/d_fmul_b7-01", - "rv64i_m/D/d_fmul_b8-01", - "rv64i_m/D/d_fmul_b9-01", - "rv64i_m/D/d_fmv.d.x_b25-01", - "rv64i_m/D/d_fmv.d.x_b26-01", - "rv64i_m/D/d_fmv.x.d_b1-01", - "rv64i_m/D/d_fmv.x.d_b22-01", - "rv64i_m/D/d_fmv.x.d_b23-01", - "rv64i_m/D/d_fmv.x.d_b24-01", - "rv64i_m/D/d_fmv.x.d_b27-01", - "rv64i_m/D/d_fmv.x.d_b28-01", - "rv64i_m/D/d_fmv.x.d_b29-01", - "rv64i_m/D/d_fnmadd_b14-01", - "rv64i_m/D/d_fnmadd_b16-01", - "rv64i_m/D/d_fnmadd_b17-01", - "rv64i_m/D/d_fnmadd_b18-01", - "rv64i_m/D/d_fnmadd_b2-01", - "rv64i_m/D/d_fnmadd_b3-01", - "rv64i_m/D/d_fnmadd_b4-01", - "rv64i_m/D/d_fnmadd_b5-01", - "rv64i_m/D/d_fnmadd_b6-01", - "rv64i_m/D/d_fnmadd_b7-01", - "rv64i_m/D/d_fnmadd_b8-01", - "rv64i_m/D/d_fnmsub_b14-01", - "rv64i_m/D/d_fnmsub_b16-01", - "rv64i_m/D/d_fnmsub_b17-01", - "rv64i_m/D/d_fnmsub_b18-01", - "rv64i_m/D/d_fnmsub_b2-01", - "rv64i_m/D/d_fnmsub_b3-01", - "rv64i_m/D/d_fnmsub_b4-01", - "rv64i_m/D/d_fnmsub_b5-01", - "rv64i_m/D/d_fnmsub_b6-01", - "rv64i_m/D/d_fnmsub_b7-01", - "rv64i_m/D/d_fnmsub_b8-01", - "rv64i_m/D/d_fsd-align-01", - "rv64i_m/D/d_fsgnj_b1-01", - "rv64i_m/D/d_fsgnjn_b1-01", - "rv64i_m/D/d_fsgnjx_b1-01", - // "rv64i_m/D/d_fsqrt_b1-01", // flg - // "rv64i_m/D/d_fsqrt_b20-01", // flg - // "rv64i_m/D/d_fsqrt_b2-01", // flg - I'm going to stop here with the sqrt - // "rv64i_m/D/d_fsqrt_b3-01", - // "rv64i_m/D/d_fsqrt_b4-01", - // "rv64i_m/D/d_fsqrt_b5-01", - // "rv64i_m/D/d_fsqrt_b7-01", - // "rv64i_m/D/d_fsqrt_b8-01", - // "rv64i_m/D/d_fsqrt_b9-01", - "rv64i_m/D/d_fsub_b10-01", - "rv64i_m/D/d_fsub_b1-01", - "rv64i_m/D/d_fsub_b11-01", - "rv64i_m/D/d_fsub_b12-01", - "rv64i_m/D/d_fsub_b13-01", - "rv64i_m/D/d_fsub_b2-01", - "rv64i_m/D/d_fsub_b3-01", - "rv64i_m/D/d_fsub_b4-01", - "rv64i_m/D/d_fsub_b5-01", - "rv64i_m/D/d_fsub_b7-01", - "rv64i_m/D/d_fsub_b8-01" - }; + "rv64i_m/D/src/d_fadd_b10-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b11-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b12-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b13-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fadd_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fclass_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.l_b25-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.l_b26-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.lu_b25-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.lu_b26-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.s_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.w_b25-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.w_b26-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.wu_b25-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.d.wu_b26-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.l.d_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.lu.d_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.s.d_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.w.d_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fcvt.wu.d_b29-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b1-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b20-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b2-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b21-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b3-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b4-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b5-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b6-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b7-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b8-01.S/ref/Ref", + // "rv64i_m/D/src/d_fdiv_b9-01.S/ref/Ref", + "rv64i_m/D/src/d_feq_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_feq_b19-01.S/ref/Ref", + "rv64i_m/D/src/d_fle_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fle_b19-01.S/ref/Ref", + "rv64i_m/D/src/d_flt_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_flt_b19-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b14-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b16-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b17-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b18-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b6-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fmadd_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fmax_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fmax_b19-01.S/ref/Ref", + "rv64i_m/D/src/d_fmin_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fmin_b19-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b14-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b16-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b17-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b18-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b6-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fmsub_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b6-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fmul_b9-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.d.x_b25-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.d.x_b26-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b22-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b23-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b24-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b27-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b28-01.S/ref/Ref", + "rv64i_m/D/src/d_fmv.x.d_b29-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b14-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b16-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b17-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b18-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b6-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmadd_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b14-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b16-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b17-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b18-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b6-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fnmsub_b8-01.S/ref/Ref", + "rv64i_m/D/src/d_fsgnj_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fsgnjn_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fsgnjx_b1-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b1-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b20-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b2-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b3-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b4-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b5-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b7-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b8-01.S/ref/Ref", + // "rv64i_m/D/src/d_fsqrt_b9-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b10-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b1-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b11-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b12-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b13-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b2-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b3-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b4-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b5-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b7-01.S/ref/Ref", + "rv64i_m/D/src/d_fsub_b8-01.S/ref/Ref" +}; string arch32priv[] = '{ `RISCVARCHTEST, - "rv32i_m/privilege/ebreak", - "rv32i_m/privilege/ecall", - "rv32i_m/privilege/misalign-beq-01", - "rv32i_m/privilege/misalign-bge-01", - "rv32i_m/privilege/misalign-bgeu-01", - "rv32i_m/privilege/misalign-blt-01", - "rv32i_m/privilege/misalign-bltu-01", - "rv32i_m/privilege/misalign-bne-01", - "rv32i_m/privilege/misalign-jal-01", - "rv32i_m/privilege/misalign-lh-01", - "rv32i_m/privilege/misalign-lhu-01", - "rv32i_m/privilege/misalign-lw-01", - "rv32i_m/privilege/misalign-sh-01", - "rv32i_m/privilege/misalign-sw-01", - "rv32i_m/privilege/misalign1-jalr-01", - "rv32i_m/privilege/misalign2-jalr-01" + "rv32i_m/privilege/src/ebreak.S/ref/Ref", + "rv32i_m/privilege/src/ecall.S/ref/Ref", + "rv32i_m/privilege/src/misalign1-jalr-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign2-jalr-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-beq-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-bge-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-bgeu-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-blt-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-bltu-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-bne-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-jal-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-lh-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-lhu-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-lw-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-sh-01.S/ref/Ref", + "rv32i_m/privilege/src/misalign-sw-01.S/ref/Ref" }; string arch32m[] = '{ `RISCVARCHTEST, - "rv32i_m/M/div-01", - "rv32i_m/M/divu-01", - "rv32i_m/M/mul-01", - "rv32i_m/M/mulh-01", - "rv32i_m/M/mulhsu-01", - "rv32i_m/M/mulhu-01", - "rv32i_m/M/rem-01", - "rv32i_m/M/remu-01" + "rv32i_m/M/src/div-01.S/ref/Ref", + "rv32i_m/M/src/divu-01.S/ref/Ref", + "rv32i_m/M/src/mul-01.S/ref/Ref", + "rv32i_m/M/src/mulh-01.S/ref/Ref", + "rv32i_m/M/src/mulhsu-01.S/ref/Ref", + "rv32i_m/M/src/mulhu-01.S/ref/Ref", + "rv32i_m/M/src/rem-01.S/ref/Ref", + "rv32i_m/M/src/remu-01.S/ref/Ref" }; string arch32f[] = '{ `RISCVARCHTEST, - "rv32i_m/F/fadd_b1-01", - "rv32i_m/F/fadd_b10-01", - "rv32i_m/F/fadd_b11-01", - "rv32i_m/F/fadd_b12-01", - "rv32i_m/F/fadd_b13-01", - "rv32i_m/F/fadd_b2-01", - "rv32i_m/F/fadd_b3-01", - "rv32i_m/F/fadd_b4-01", - "rv32i_m/F/fadd_b5-01", - "rv32i_m/F/fadd_b7-01", - "rv32i_m/F/fadd_b8-01", - "rv32i_m/F/fclass_b1-01", - "rv32i_m/F/fcvt.s.w_b25-01", - "rv32i_m/F/fcvt.s.w_b26-01", - "rv32i_m/F/fcvt.s.wu_b25-01", - "rv32i_m/F/fcvt.s.wu_b26-01", - "rv32i_m/F/fcvt.w.s_b1-01", - "rv32i_m/F/fcvt.w.s_b22-01", - "rv32i_m/F/fcvt.w.s_b23-01", - "rv32i_m/F/fcvt.w.s_b24-01", - "rv32i_m/F/fcvt.w.s_b27-01", - "rv32i_m/F/fcvt.w.s_b28-01", - "rv32i_m/F/fcvt.w.s_b29-01", - "rv32i_m/F/fcvt.wu.s_b1-01", - "rv32i_m/F/fcvt.wu.s_b22-01", - "rv32i_m/F/fcvt.wu.s_b23-01", - "rv32i_m/F/fcvt.wu.s_b24-01", - "rv32i_m/F/fcvt.wu.s_b27-01", - "rv32i_m/F/fcvt.wu.s_b28-01", - "rv32i_m/F/fcvt.wu.s_b29-01", - // "rv32i_m/F/fdiv_b1-01", // NaN i'm going to skip div, probably the same problems as the double version - // "rv32i_m/F/fdiv_b2-01", - // "rv32i_m/F/fdiv_b20-01", - // "rv32i_m/F/fdiv_b21-01", - // "rv32i_m/F/fdiv_b3-01", - // "rv32i_m/F/fdiv_b4-01", - // "rv32i_m/F/fdiv_b5-01", - // "rv32i_m/F/fdiv_b6-01", - // "rv32i_m/F/fdiv_b7-01", - // "rv32i_m/F/fdiv_b8-01", - // "rv32i_m/F/fdiv_b9-01", - "rv32i_m/F/feq_b1-01", - "rv32i_m/F/feq_b19-01", - "rv32i_m/F/fle_b1-01", - "rv32i_m/F/fle_b19-01", - "rv32i_m/F/flt_b1-01", - "rv32i_m/F/flt_b19-01", - "rv32i_m/F/flw-align-01", - "rv32i_m/F/fmadd_b1-01", - "rv32i_m/F/fmadd_b14-01", -// --passes but is timeconsuming "rv32i_m/F/fmadd_b15-01", - "rv32i_m/F/fmadd_b16-01", - "rv32i_m/F/fmadd_b17-01", - "rv32i_m/F/fmadd_b18-01", - "rv32i_m/F/fmadd_b2-01", - "rv32i_m/F/fmadd_b3-01", - "rv32i_m/F/fmadd_b4-01", - "rv32i_m/F/fmadd_b5-01", - "rv32i_m/F/fmadd_b6-01", - "rv32i_m/F/fmadd_b7-01", - "rv32i_m/F/fmadd_b8-01", - "rv32i_m/F/fmax_b1-01", - "rv32i_m/F/fmax_b19-01", - "rv32i_m/F/fmin_b1-01", - "rv32i_m/F/fmin_b19-01", - "rv32i_m/F/fmsub_b1-01", - "rv32i_m/F/fmsub_b14-01", - "rv32i_m/F/fmsub_b15-01", - "rv32i_m/F/fmsub_b16-01", - "rv32i_m/F/fmsub_b17-01", - "rv32i_m/F/fmsub_b18-01", - "rv32i_m/F/fmsub_b2-01", - "rv32i_m/F/fmsub_b3-01", - "rv32i_m/F/fmsub_b4-01", - "rv32i_m/F/fmsub_b5-01", - "rv32i_m/F/fmsub_b6-01", - "rv32i_m/F/fmsub_b7-01", - "rv32i_m/F/fmsub_b8-01", - "rv32i_m/F/fmul_b1-01", - "rv32i_m/F/fmul_b2-01", - "rv32i_m/F/fmul_b3-01", - "rv32i_m/F/fmul_b4-01", - "rv32i_m/F/fmul_b5-01", - "rv32i_m/F/fmul_b6-01", - "rv32i_m/F/fmul_b7-01", - "rv32i_m/F/fmul_b8-01", - "rv32i_m/F/fmul_b9-01", - "rv32i_m/F/fmv.w.x_b25-01", - "rv32i_m/F/fmv.w.x_b26-01", - "rv32i_m/F/fmv.x.w_b1-01", - "rv32i_m/F/fmv.x.w_b22-01", - "rv32i_m/F/fmv.x.w_b23-01", - "rv32i_m/F/fmv.x.w_b24-01", - "rv32i_m/F/fmv.x.w_b27-01", - "rv32i_m/F/fmv.x.w_b28-01", - "rv32i_m/F/fmv.x.w_b29-01", - "rv32i_m/F/fnmadd_b1-01", - "rv32i_m/F/fnmadd_b14-01", -// timeconsuming "rv32i_m/F/fnmadd_b15-01", - "rv32i_m/F/fnmadd_b16-01", - "rv32i_m/F/fnmadd_b17-01", - "rv32i_m/F/fnmadd_b18-01", - "rv32i_m/F/fnmadd_b2-01", - "rv32i_m/F/fnmadd_b3-01", - "rv32i_m/F/fnmadd_b4-01", - "rv32i_m/F/fnmadd_b5-01", - "rv32i_m/F/fnmadd_b6-01", - "rv32i_m/F/fnmadd_b7-01", - "rv32i_m/F/fnmadd_b8-01", - "rv32i_m/F/fnmsub_b1-01", - "rv32i_m/F/fnmsub_b14-01", -// timeconsuming "rv32i_m/F/fnmsub_b15-01", - "rv32i_m/F/fnmsub_b16-01", - "rv32i_m/F/fnmsub_b17-01", - "rv32i_m/F/fnmsub_b18-01", - "rv32i_m/F/fnmsub_b2-01", - "rv32i_m/F/fnmsub_b3-01", - "rv32i_m/F/fnmsub_b4-01", - "rv32i_m/F/fnmsub_b5-01", - "rv32i_m/F/fnmsub_b6-01", - "rv32i_m/F/fnmsub_b7-01", - "rv32i_m/F/fnmsub_b8-01", - "rv32i_m/F/fsgnj_b1-01", - "rv32i_m/F/fsgnjn_b1-01", - "rv32i_m/F/fsgnjx_b1-01", - // "rv32i_m/F/fsqrt_b1-01", // flag i am skiping sqrt - // "rv32i_m/F/fsqrt_b2-01", - // "rv32i_m/F/fsqrt_b20-01", - // "rv32i_m/F/fsqrt_b3-01", - // "rv32i_m/F/fsqrt_b4-01", - // "rv32i_m/F/fsqrt_b5-01", - // "rv32i_m/F/fsqrt_b7-01", - // "rv32i_m/F/fsqrt_b8-01", - // "rv32i_m/F/fsqrt_b9-01", - "rv32i_m/F/fsub_b1-01", - "rv32i_m/F/fsub_b10-01", - "rv32i_m/F/fsub_b11-01", - "rv32i_m/F/fsub_b12-01", - "rv32i_m/F/fsub_b13-01", - "rv32i_m/F/fsub_b2-01", - "rv32i_m/F/fsub_b3-01", - "rv32i_m/F/fsub_b4-01", - "rv32i_m/F/fsub_b5-01", - "rv32i_m/F/fsub_b7-01", - "rv32i_m/F/fsub_b8-01", - "rv32i_m/F/fsw-align-01" -}; + "rv32i_m/F/src/fadd_b10-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b1-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b11-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b12-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b13-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b2-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b3-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b4-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b5-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b7-01.S/ref/Ref", + "rv32i_m/F/src/fadd_b8-01.S/ref/Ref", + "rv32i_m/F/src/fclass_b1-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.s.w_b25-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.s.w_b26-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.s.wu_b25-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.s.wu_b26-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b1-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b22-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b23-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b24-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b27-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b28-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.w.s_b29-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b1-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b22-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b23-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b24-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b27-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b28-01.S/ref/Ref", + "rv32i_m/F/src/fcvt.wu.s_b29-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b1-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b20-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b2-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b21-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b3-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b4-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b5-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b6-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b7-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b8-01.S/ref/Ref", + // "rv32i_m/F/src/fdiv_b9-01.S/ref/Ref", + "rv32i_m/F/src/feq_b1-01.S/ref/Ref", + "rv32i_m/F/src/feq_b19-01.S/ref/Ref", + "rv32i_m/F/src/fle_b1-01.S/ref/Ref", + "rv32i_m/F/src/fle_b19-01.S/ref/Ref", + "rv32i_m/F/src/flt_b1-01.S/ref/Ref", + "rv32i_m/F/src/flt_b19-01.S/ref/Ref", + "rv32i_m/F/src/flw-align-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b14-01.S/ref/Ref", + // "rv32i_m/F/src/fmadd_b15-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b16-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b17-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b18-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b2-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b3-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b4-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b5-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b6-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b7-01.S/ref/Ref", + "rv32i_m/F/src/fmadd_b8-01.S/ref/Ref", + "rv32i_m/F/src/fmax_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmax_b19-01.S/ref/Ref", + "rv32i_m/F/src/fmin_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmin_b19-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b14-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b15-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b16-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b17-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b18-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b2-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b3-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b4-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b5-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b6-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b7-01.S/ref/Ref", + "rv32i_m/F/src/fmsub_b8-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b2-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b3-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b4-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b5-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b6-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b7-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b8-01.S/ref/Ref", + "rv32i_m/F/src/fmul_b9-01.S/ref/Ref", + "rv32i_m/F/src/fmv.w.x_b25-01.S/ref/Ref", + "rv32i_m/F/src/fmv.w.x_b26-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b1-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b22-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b23-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b24-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b27-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b28-01.S/ref/Ref", + "rv32i_m/F/src/fmv.x.w_b29-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b1-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b14-01.S/ref/Ref", + // "rv32i_m/F/src/fnmadd_b15-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b16-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b17-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b18-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b2-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b3-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b4-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b5-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b6-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b7-01.S/ref/Ref", + "rv32i_m/F/src/fnmadd_b8-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b1-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b14-01.S/ref/Ref", + // "rv32i_m/F/src/fnmsub_b15-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b16-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b17-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b18-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b2-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b3-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b4-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b5-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b6-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b7-01.S/ref/Ref", + "rv32i_m/F/src/fnmsub_b8-01.S/ref/Ref", + "rv32i_m/F/src/fsgnj_b1-01.S/ref/Ref", + "rv32i_m/F/src/fsgnjn_b1-01.S/ref/Ref", + "rv32i_m/F/src/fsgnjx_b1-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b1-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b20-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b2-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b3-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b4-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b5-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b7-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b8-01.S/ref/Ref", + // "rv32i_m/F/src/fsqrt_b9-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b10-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b1-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b11-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b12-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b13-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b2-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b3-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b4-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b5-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b7-01.S/ref/Ref", + "rv32i_m/F/src/fsub_b8-01.S/ref/Ref", + "rv32i_m/F/src/fsw-align-01.S/ref/Ref" + }; string arch32c[] = '{ `RISCVARCHTEST, - "rv32i_m/C/cadd-01", - "rv32i_m/C/caddi-01", - "rv32i_m/C/caddi16sp-01", - "rv32i_m/C/caddi4spn-01", - "rv32i_m/C/cand-01", - "rv32i_m/C/candi-01", - "rv32i_m/C/cbeqz-01", - "rv32i_m/C/cbnez-01", - "rv32i_m/C/cj-01", - "rv32i_m/C/cjal-01", - "rv32i_m/C/cjalr-01", - "rv32i_m/C/cjr-01", - "rv32i_m/C/cli-01", - "rv32i_m/C/clui-01", - "rv32i_m/C/clw-01", - "rv32i_m/C/clwsp-01", - "rv32i_m/C/cmv-01", - "rv32i_m/C/cnop-01", - "rv32i_m/C/cor-01", - "rv32i_m/C/cslli-01", - "rv32i_m/C/csrai-01", - "rv32i_m/C/csrli-01", - "rv32i_m/C/csub-01", - "rv32i_m/C/csw-01", - "rv32i_m/C/cswsp-01", - "rv32i_m/C/cxor-01" + "rv32i_m/C/src/cadd-01.S/ref/Ref", + "rv32i_m/C/src/caddi-01.S/ref/Ref", + "rv32i_m/C/src/caddi16sp-01.S/ref/Ref", + "rv32i_m/C/src/caddi4spn-01.S/ref/Ref", + "rv32i_m/C/src/cand-01.S/ref/Ref", + "rv32i_m/C/src/candi-01.S/ref/Ref", + "rv32i_m/C/src/cbeqz-01.S/ref/Ref", + "rv32i_m/C/src/cbnez-01.S/ref/Ref", + "rv32i_m/C/src/cj-01.S/ref/Ref", + "rv32i_m/C/src/cjal-01.S/ref/Ref", + "rv32i_m/C/src/cjalr-01.S/ref/Ref", + "rv32i_m/C/src/cjr-01.S/ref/Ref", + "rv32i_m/C/src/cli-01.S/ref/Ref", + "rv32i_m/C/src/clui-01.S/ref/Ref", + "rv32i_m/C/src/clw-01.S/ref/Ref", + "rv32i_m/C/src/clwsp-01.S/ref/Ref", + "rv32i_m/C/src/cmv-01.S/ref/Ref", + "rv32i_m/C/src/cnop-01.S/ref/Ref", + "rv32i_m/C/src/cor-01.S/ref/Ref", + "rv32i_m/C/src/cslli-01.S/ref/Ref", + "rv32i_m/C/src/csrai-01.S/ref/Ref", + "rv32i_m/C/src/csrli-01.S/ref/Ref", + "rv32i_m/C/src/csub-01.S/ref/Ref", + "rv32i_m/C/src/csw-01.S/ref/Ref", + "rv32i_m/C/src/cswsp-01.S/ref/Ref", + "rv32i_m/C/src/cxor-01.S/ref/Ref" }; string arch32cpriv[] = '{ // `RISCVARCHTEST, - "rv32i_m/C/cebreak-01" + "rv32i_m/C/src/cebreak-01.S/ref/Ref" }; string arch32i[] = '{ `RISCVARCHTEST, - "rv32i_m/I/add-01", - "rv32i_m/I/addi-01", - "rv32i_m/I/and-01", - "rv32i_m/I/andi-01", - "rv32i_m/I/auipc-01", - "rv32i_m/I/beq-01", - "rv32i_m/I/bge-01", - "rv32i_m/I/bgeu-01", - "rv32i_m/I/blt-01", - "rv32i_m/I/bltu-01", - "rv32i_m/I/bne-01", - "rv32i_m/I/fence-01", - "rv32i_m/I/jal-01", - "rv32i_m/I/jalr-01", - "rv32i_m/I/lb-align-01", - "rv32i_m/I/lbu-align-01", - "rv32i_m/I/lh-align-01", - "rv32i_m/I/lhu-align-01", - "rv32i_m/I/lui-01", - "rv32i_m/I/lw-align-01", - "rv32i_m/I/or-01", - "rv32i_m/I/ori-01", - "rv32i_m/I/sb-align-01", - "rv32i_m/I/sh-align-01", - "rv32i_m/I/sll-01", - "rv32i_m/I/slli-01", - "rv32i_m/I/slt-01", - "rv32i_m/I/slti-01", - "rv32i_m/I/sltiu-01", - "rv32i_m/I/sltu-01", - "rv32i_m/I/sra-01", - "rv32i_m/I/srai-01", - "rv32i_m/I/srl-01", - "rv32i_m/I/srli-01", - "rv32i_m/I/sub-01", - "rv32i_m/I/sw-align-01", - "rv32i_m/I/xor-01", - "rv32i_m/I/xori-01" + "rv32i_m/I/src/add-01.S/ref/Ref", + "rv32i_m/I/src/addi-01.S/ref/Ref", + "rv32i_m/I/src/and-01.S/ref/Ref", + "rv32i_m/I/src/andi-01.S/ref/Ref", + "rv32i_m/I/src/auipc-01.S/ref/Ref", + "rv32i_m/I/src/beq-01.S/ref/Ref", + "rv32i_m/I/src/bge-01.S/ref/Ref", + "rv32i_m/I/src/bgeu-01.S/ref/Ref", + "rv32i_m/I/src/blt-01.S/ref/Ref", + "rv32i_m/I/src/bltu-01.S/ref/Ref", + "rv32i_m/I/src/bne-01.S/ref/Ref", + "rv32i_m/I/src/fence-01.S/ref/Ref", + "rv32i_m/I/src/jal-01.S/ref/Ref", + "rv32i_m/I/src/jalr-01.S/ref/Ref", + "rv32i_m/I/src/lb-align-01.S/ref/Ref", + "rv32i_m/I/src/lbu-align-01.S/ref/Ref", + "rv32i_m/I/src/lh-align-01.S/ref/Ref", + "rv32i_m/I/src/lhu-align-01.S/ref/Ref", + "rv32i_m/I/src/lui-01.S/ref/Ref", + "rv32i_m/I/src/lw-align-01.S/ref/Ref", + "rv32i_m/I/src/or-01.S/ref/Ref", + "rv32i_m/I/src/ori-01.S/ref/Ref", + "rv32i_m/I/src/sb-align-01.S/ref/Ref", + "rv32i_m/I/src/sh-align-01.S/ref/Ref", + "rv32i_m/I/src/sll-01.S/ref/Ref", + "rv32i_m/I/src/slli-01.S/ref/Ref", + "rv32i_m/I/src/slt-01.S/ref/Ref", + "rv32i_m/I/src/slti-01.S/ref/Ref", + "rv32i_m/I/src/sltiu-01.S/ref/Ref", + "rv32i_m/I/src/sltu-01.S/ref/Ref", + "rv32i_m/I/src/sra-01.S/ref/Ref", + "rv32i_m/I/src/srai-01.S/ref/Ref", + "rv32i_m/I/src/srl-01.S/ref/Ref", + "rv32i_m/I/src/srli-01.S/ref/Ref", + "rv32i_m/I/src/sub-01.S/ref/Ref", + "rv32i_m/I/src/sw-align-01.S/ref/Ref", + "rv32i_m/I/src/xor-01.S/ref/Ref", + "rv32i_m/I/src/xori-01.S/ref/Ref" }; string wally64i[] = '{ @@ -1581,6 +1600,7 @@ string wally32i[] = '{ }; string wally32periph[] = '{ - `WALLYTEST + `WALLYTEST, + "rv32i_m/privilege/WALLY-gpio-01" }; diff --git a/synthDC/Makefile b/synthDC/Makefile index b8a79fbdf..193153cac 100755 --- a/synthDC/Makefile +++ b/synthDC/Makefile @@ -29,7 +29,7 @@ k = 3 6 ifeq ($(TECH), sky130) FREQS = 25 50 100 150 200 250 300 350 400 -else +else ifeq ($(TECH), sky90) FREQS = 500 550 600 650 700 750 800 850 900 950 1000 endif diff --git a/synthDC/bestSynths.csv b/synthDC/bestSynths.csv index ab047e485..7e3d35569 100644 --- a/synthDC/bestSynths.csv +++ b/synthDC/bestSynths.csv @@ -1,101 +1,101 @@ -Module,Tech,Width,Target Freq,Delay,Area,L Power (nW),D energy (fJ) -priorityencoder,sky90,8,7683,0.12508649056358195,50.960001,24.761,1.0685929975270078e-05 -priorityencoder,sky90,16,5773,0.16977016282695304,136.220003,77.243,2.1773774467348e-05 -priorityencoder,sky90,32,4500,0.2218912222222222,372.400007,189.626,4.371111111111111e-05 -priorityencoder,sky90,64,4098,0.2439914738897023,797.720015,382.205,7.393850658857981e-05 -priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,0.0001261366969785861 -add,sky90,8,3658,0.27337042810278844,253.820005,154.438,0.00010825587752870422 -add,sky90,16,2942,0.3393218266485384,722.260013,485.109,0.00032460910944935416 -add,sky90,32,2468,0.40496338573743923,1440.600027,714.057,0.0006580226904376014 -add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,0.0009392239364188873 -add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,0.0021480106100795755 -csa,sky90,8,5758,0.16536141368530738,266.560005,154.202,0.00013650573115665162 -csa,sky90,16,5931,0.1654056314280897,533.12001,308.404,0.00027263530601922105 -csa,sky90,32,5758,0.16536141368530738,1066.240021,616.808,0.0005448072247308093 -csa,sky90,64,5931,0.1654056314280897,2132.480042,1230.0,0.0010905412240768842 -csa,sky90,128,5931,0.1654056314280897,4264.960083,2470.0,0.002178553363682347 -shiftleft,sky90,8,4327,0.23025600254217704,259.700005,196.451,7.534088282874971e-05 -shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,0.00019552906110283157 -shiftleft,sky90,32,2503,0.39951757530962845,1475.880027,768.262,0.0003807431082700759 -shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,0.001144802541988198 -shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,0.0029008914525432616 -comparator,sky90,8,4839,0.20629126741062204,200.900004,136.6,5.001033271337053e-05 -comparator,sky90,16,4018,0.24806303982080635,358.680007,189.253,6.321553011448482e-05 -comparator,sky90,32,3602,0.276293542476402,690.900013,315.709,0.00010771793448084398 -comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,0.0002048577820389901 -comparator,sky90,128,2791,0.35824651809387315,2744.980052,796.047,0.0003439627373701182 -flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.000193835 -flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.00038715000000000006 -flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.0007723000000000001 -flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,0.00154955 -flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,0.003094 -mux2,sky90,8,5299,0.1883518518588413,63.700001,21.541,1.932440083034535e-05 -mux2,sky90,16,4850,0.20207356701030926,119.560002,32.354,3.884536082474227e-05 -mux2,sky90,32,5003,0.19908807195682593,375.340008,259.372,0.00013671796921846892 -mux2,sky90,64,3989,0.24961239583855604,479.220007,148.175,0.00016570569064928555 -mux2,sky90,128,4004,0.24974824975024976,1302.420025,767.078,0.0004665334665334665 -mux4,sky90,8,4661,0.21448923471358078,164.640002,88.494,4.31452478009011e-05 -mux4,sky90,16,4392,0.22421770309653916,359.659999,419.855,0.0001006375227686703 -mux4,sky90,32,4118,0.24283532831471588,594.860011,331.197,0.00013161728994657602 -mux4,sky90,64,3710,0.26931477897574124,899.640016,344.331,0.00028625336927223723 -mux4,sky90,128,3167,0.31575023618566467,2016.840039,722.109,0.0005917271866119355 -mux8,sky90,8,3585,0.2789170278940028,287.140006,116.648,6.089260808926081e-05 -mux8,sky90,16,3362,0.295237998810232,582.120003,282.366,0.00014455681142177274 -mux8,sky90,32,3178,0.3140553102580239,1319.079995,670.683,0.0003577721837633732 -mux8,sky90,64,2906,0.3440756228492774,2132.48004,808.482,0.0004428768066070199 -mux8,sky90,128,2667,0.3749401308586427,4575.620089,1830.0,0.0009786276715410573 -mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,0.0014213740458015268 -mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,0.0063761283851554666 -mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,0.024931847968545216 -mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,0.08884651898734176 -mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,0.2733148854961832 -priorityencoder,tsmc28,8,31335,0.031912196106590074,8.316,34.836,1.716929950534546e-06 -priorityencoder,tsmc28,16,21253,0.04703118086858326,21.672,78.026,4.008845810003294e-06 -priorityencoder,tsmc28,32,16464,0.06071258114674442,61.614,207.499,9.323372206025267e-06 -priorityencoder,tsmc28,64,13804,0.07239877021153289,137.466,425.592,1.847290640394089e-05 -priorityencoder,tsmc28,128,11440,0.0874065874125874,317.646,973.649,4.117132867132867e-05 -add,tsmc28,8,13838,0.07207477814713109,34.272,187.089,1.3311172134701546e-05 -add,tsmc28,16,11521,0.08678002100512108,90.972001,475.207,3.367763214998698e-05 -add,tsmc28,32,9812,0.1018860211985324,209.286002,1060.0,8.153281695882594e-05 -add,tsmc28,64,8206,0.12185605215695831,388.836003,1770.0,0.0001409943943456008 -add,tsmc28,128,7354,0.13597341881968997,907.452008,4360.0,0.00034511830296437315 -csa,tsmc28,8,24524,0.040663382319360626,52.416,482.462,2.173381177621921e-05 -csa,tsmc28,16,24524,0.040663382319360626,104.832,964.99,4.346762355243842e-05 -csa,tsmc28,32,24524,0.040663382319360626,209.664,1930.0,8.677214157559942e-05 -csa,tsmc28,64,24524,0.040663382319360626,419.327999,3860.0,0.00017342195400424075 -csa,tsmc28,128,24524,0.040663382319360626,838.655998,7720.0,0.00034717011906703634 -shiftleft,tsmc28,8,15202,0.0656078183133798,50.652,367.074,1.6991185370346006e-05 -shiftleft,tsmc28,16,11804,0.08465604506946797,127.511999,602.29,3.388681802778719e-05 -shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,0.00010180452696359654 -shiftleft,tsmc28,64,8272,0.12086674854932303,1041.263998,5460.0,0.0002895309477756286 -shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,0.000566566994162039 -comparator,tsmc28,8,17422,0.05733769130983814,35.784,170.595,9.488003673516243e-06 -comparator,tsmc28,16,13736,0.07273839778683751,54.558,250.167,1.4349155503785673e-05 -comparator,tsmc28,32,12139,0.08236710865804432,145.782,622.975,3.567015404893319e-05 -comparator,tsmc28,64,11080,0.09024670758122744,294.21,1250.0,6.84115523465704e-05 -comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,0.00012794792444776438 -flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,2.7246000000000003e-05 -flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,5.4290000000000004e-05 -flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.00010908 -flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.00021765500000000003 -flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.00043579999999999997 -mux2,tsmc28,8,29614,0.03374481252110488,16.758,114.564,5.436617815897886e-06 -mux2,tsmc28,16,18767,0.053046021580433735,15.75,88.025,5.142004582511856e-06 -mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,9.897782494553986e-06 -mux2,tsmc28,64,18568,0.05371109651012495,91.35,523.884,2.757432141318397e-05 -mux2,tsmc28,128,16637,0.05991099044298852,176.525999,941.106,5.012923002945243e-05 -mux4,tsmc28,8,18151,0.055092383284667513,27.971999,133.963,8.032615282904523e-06 -mux4,tsmc28,16,16486,0.06057952759917506,39.438,186.231,1.2556108213029237e-05 -mux4,tsmc28,32,15196,0.06580579126085812,69.174,324.969,2.3229797315082915e-05 -mux4,tsmc28,64,13926,0.07180612868016659,137.465999,648.086,4.5741777969266124e-05 -mux4,tsmc28,128,13090,0.07636619404125286,294.335997,1420.0,9.358288770053477e-05 -mux8,tsmc28,8,12902,0.07750336319950395,44.604,214.286,1.17501162610448e-05 -mux8,tsmc28,16,12264,0.08147446510110894,128.771998,548.714,2.666340508806262e-05 -mux8,tsmc28,32,11713,0.08517122410996329,172.115999,823.633,4.695637326047981e-05 -mux8,tsmc28,64,11014,0.09067453550027238,304.163999,1460.0,8.498274922825495e-05 -mux8,tsmc28,128,10474,0.09542350830628223,683.045996,2820.0,0.00015705556616383426 -mult,tsmc28,8,5200,0.1922996923076923,577.206,4340.0,0.00037769230769230767 -mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,0.0014553548049227546 -mult,tsmc28,32,3033,0.3295775611605671,6343.721998,47200.0,0.0063033300362677225 -mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,0.01854602510460251 -mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,0.05001177730192719 +Module,Tech,Width,Target Freq,Delay,Area,L Power (nW),D energy (nJ) +priorityencoder,sky90,8,7683,0.12508649056358195,50.960001,24.761,0.010685929975270078 +priorityencoder,sky90,16,5773,0.16977016282695304,136.220003,77.243,0.021773774467348 +priorityencoder,sky90,32,4500,0.2218912222222222,372.400007,189.626,0.04371111111111111 +priorityencoder,sky90,64,4098,0.2439914738897023,797.720015,382.205,0.07393850658857981 +priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,0.1261366969785861 +add,sky90,8,3658,0.27337042810278844,253.820005,154.438,0.10825587752870422 +add,sky90,16,2942,0.3393218266485384,722.260013,485.109,0.32460910944935417 +add,sky90,32,2468,0.40496338573743923,1440.600027,714.057,0.6580226904376014 +add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,0.9392239364188874 +add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,2.1480106100795755 +csa,sky90,8,5758,0.16536141368530738,266.560005,154.202,0.13650573115665163 +csa,sky90,16,5931,0.1654056314280897,533.12001,308.404,0.27263530601922104 +csa,sky90,32,5758,0.16536141368530738,1066.240021,616.808,0.5448072247308093 +csa,sky90,64,5931,0.1654056314280897,2132.480042,1230.0,1.0905412240768841 +csa,sky90,128,5931,0.1654056314280897,4264.960083,2470.0,2.178553363682347 +shiftleft,sky90,8,4327,0.23025600254217704,259.700005,196.451,0.07534088282874972 +shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,0.19552906110283155 +shiftleft,sky90,32,2503,0.39951757530962845,1475.880027,768.262,0.3807431082700759 +shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,1.144802541988198 +shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,2.9008914525432616 +comparator,sky90,8,4839,0.20629126741062204,200.900004,136.6,0.05001033271337053 +comparator,sky90,16,4018,0.24806303982080635,358.680007,189.253,0.06321553011448482 +comparator,sky90,32,3602,0.276293542476402,690.900013,315.709,0.10771793448084398 +comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,0.2048577820389901 +comparator,sky90,128,2791,0.35824651809387315,2744.980052,796.047,0.34396273737011823 +flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.193835 +flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.38715000000000005 +flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.7723000000000001 +flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,1.54955 +flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,3.094 +mux2,sky90,8,5299,0.1883518518588413,63.700001,21.541,0.01932440083034535 +mux2,sky90,16,4850,0.20207356701030926,119.560002,32.354,0.03884536082474227 +mux2,sky90,32,5003,0.19908807195682593,375.340008,259.372,0.13671796921846893 +mux2,sky90,64,4073,0.24517727326295113,479.220009,115.22,0.15148539160324087 +mux2,sky90,128,4004,0.24974824975024976,1302.420025,767.078,0.4665334665334665 +mux4,sky90,8,4726,0.21123742953872196,148.960002,66.984,0.04026661024121879 +mux4,sky90,16,4455,0.2231388911335578,392.0,398.313,0.1037037037037037 +mux4,sky90,32,4118,0.24283532831471588,594.860011,331.197,0.131617289946576 +mux4,sky90,64,3710,0.26931477897574124,899.640016,344.331,0.2862533692722372 +mux4,sky90,128,3249,0.3077210113881194,2013.900038,818.249,0.6094182825484764 +mux8,sky90,8,3585,0.2789170278940028,287.140006,116.648,0.06089260808926081 +mux8,sky90,16,3362,0.295237998810232,582.120003,282.366,0.14455681142177274 +mux8,sky90,32,3178,0.3140553102580239,1319.079995,670.683,0.35777218376337316 +mux8,sky90,64,2906,0.3440756228492774,2132.48004,808.482,0.44287680660701995 +mux8,sky90,128,2667,0.3749401308586427,4575.620089,1830.0,0.9786276715410572 +mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,1.421374045801527 +mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,6.376128385155466 +mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,24.931847968545217 +mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,88.84651898734177 +mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,273.3148854961832 +priorityencoder,tsmc28,8,31335,0.031912196106590074,8.316,34.836,0.001716929950534546 +priorityencoder,tsmc28,16,21253,0.04703118086858326,21.672,78.026,0.004008845810003294 +priorityencoder,tsmc28,32,16464,0.06071258114674442,61.614,207.499,0.009323372206025266 +priorityencoder,tsmc28,64,13804,0.07239877021153289,137.466,425.592,0.01847290640394089 +priorityencoder,tsmc28,128,11440,0.0874065874125874,317.646,973.649,0.041171328671328666 +add,tsmc28,8,13838,0.07207477814713109,34.272,187.089,0.013311172134701546 +add,tsmc28,16,11521,0.08678002100512108,90.972001,475.207,0.03367763214998698 +add,tsmc28,32,9812,0.1018860211985324,209.286002,1060.0,0.08153281695882594 +add,tsmc28,64,8206,0.12185605215695831,388.836003,1770.0,0.1409943943456008 +add,tsmc28,128,7354,0.13597341881968997,907.452008,4360.0,0.3451183029643731 +csa,tsmc28,8,24524,0.040663382319360626,52.416,482.462,0.02173381177621921 +csa,tsmc28,16,24524,0.040663382319360626,104.832,964.99,0.04346762355243842 +csa,tsmc28,32,24524,0.040663382319360626,209.664,1930.0,0.08677214157559941 +csa,tsmc28,64,24524,0.040663382319360626,419.327999,3860.0,0.17342195400424076 +csa,tsmc28,128,24524,0.040663382319360626,838.655998,7720.0,0.3471701190670363 +shiftleft,tsmc28,8,15202,0.0656078183133798,50.652,367.074,0.016991185370346006 +shiftleft,tsmc28,16,11804,0.08465604506946797,127.511999,602.29,0.03388681802778719 +shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,0.10180452696359654 +shiftleft,tsmc28,64,8272,0.12086674854932303,1041.263998,5460.0,0.2895309477756286 +shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,0.566566994162039 +comparator,tsmc28,8,17422,0.05733769130983814,35.784,170.595,0.009488003673516243 +comparator,tsmc28,16,13736,0.07273839778683751,54.558,250.167,0.014349155503785673 +comparator,tsmc28,32,12139,0.08236710865804432,145.782,622.975,0.03567015404893319 +comparator,tsmc28,64,11080,0.09024670758122744,294.21,1250.0,0.0684115523465704 +comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,0.12794792444776437 +flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,0.027246000000000003 +flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,0.054290000000000005 +flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.10908000000000001 +flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.21765500000000004 +flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.43579999999999997 +mux2,tsmc28,8,29614,0.03374481252110488,16.758,114.564,0.005436617815897886 +mux2,tsmc28,16,18767,0.053046021580433735,15.75,88.025,0.005142004582511856 +mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,0.009897782494553985 +mux2,tsmc28,64,18568,0.05371109651012495,91.35,523.884,0.027574321413183972 +mux2,tsmc28,128,16637,0.05991099044298852,176.525999,941.106,0.05012923002945243 +mux4,tsmc28,8,18151,0.055092383284667513,27.971999,133.963,0.008032615282904523 +mux4,tsmc28,16,16486,0.06057952759917506,39.438,186.231,0.012556108213029236 +mux4,tsmc28,32,15196,0.06580579126085812,69.174,324.969,0.023229797315082915 +mux4,tsmc28,64,13926,0.07180612868016659,137.465999,648.086,0.04574177796926612 +mux4,tsmc28,128,13090,0.07636619404125286,294.335997,1420.0,0.09358288770053477 +mux8,tsmc28,8,12902,0.07750336319950395,44.604,214.286,0.0117501162610448 +mux8,tsmc28,16,12264,0.08147446510110894,128.771998,548.714,0.02666340508806262 +mux8,tsmc28,32,11713,0.08517122410996329,172.115999,823.633,0.046956373260479814 +mux8,tsmc28,64,11014,0.09067453550027238,304.163999,1460.0,0.08498274922825495 +mux8,tsmc28,128,10474,0.09542350830628223,683.045996,2820.0,0.15705556616383426 +mult,tsmc28,8,5200,0.1922996923076923,577.206,4340.0,0.37769230769230766 +mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,1.4553548049227547 +mult,tsmc28,32,3033,0.3295775611605671,6343.721998,47200.0,6.303330036267723 +mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,18.54602510460251 +mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,50.01177730192719 diff --git a/synthDC/ppa b/synthDC/ppa deleted file mode 100755 index dcf3d15d2..000000000 --- a/synthDC/ppa +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# David_Harris@hmc.edu and Madeleine Masser-Frye 11 May 2022 -# Run PPA experiments on different modules -rm -rf runs/ppa* -make synth DESIGN=ppa_add_16 TECH=sky90 DRIVE=INV FREQ=10 MAXOPT=1 & -make synth DESIGN=ppa_add_32 TECH=sky90 DRIVE=INV FREQ=1 MAXOPT=1 & -make synth DESIGN=ppa_add_64 TECH=sky90 DRIVE=INV FREQ=10 MAXOPT=1 & -make synth DESIGN=ppa_add_16 TECH=sky90 DRIVE=INV FREQ=4000 MAXOPT=1 & -make synth DESIGN=ppa_add_32 TECH=sky90 DRIVE=INV FREQ=4000 MAXOPT=1 & -make synth DESIGN=ppa_add_64 TECH=sky90 DRIVE=INV FREQ=4000 MAXOPT=1 & -make synth DESIGN=ppa_add_16 TECH=sky90 DRIVE=INV FREQ=5000 MAXOPT=1 & -make synth DESIGN=ppa_add_32 TECH=sky90 DRIVE=INV FREQ=5000 MAXOPT=1 & -make synth DESIGN=ppa_add_64 TECH=sky90 DRIVE=INV FREQ=5000 MAXOPT=1 & -make synth DESIGN=ppa_add_16 TECH=sky90 DRIVE=INV FREQ=6000 MAXOPT=1 & -make synth DESIGN=ppa_add_32 TECH=sky90 DRIVE=INV FREQ=6000 MAXOPT=1 & -make synth DESIGN=ppa_add_64 TECH=sky90 DRIVE=INV FREQ=6000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_16 TECH=sky90 DRIVE=INV FREQ=10 MAXOPT=1 & -make synth DESIGN=ppa_comparator_32 TECH=sky90 DRIVE=INV FREQ=10 MAXOPT=1 & -make synth DESIGN=ppa_comparator_64 TECH=sky90 DRIVE=INV FREQ=10 MAXOPT=1 & -make synth DESIGN=ppa_comparator_16 TECH=sky90 DRIVE=INV FREQ=8000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_32 TECH=sky90 DRIVE=INV FREQ=8000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_64 TECH=sky90 DRIVE=INV FREQ=8000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_16 TECH=sky90 DRIVE=INV FREQ=10000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_32 TECH=sky90 DRIVE=INV FREQ=10000 MAXOPT=1 & -make synth DESIGN=ppa_comparator_64 TECH=sky90 DRIVE=INV FREQ=10000 MAXOPT=1 & -wait -grep "Critical Path Length" runs/ppa_*/reports/*qor* -grep "Design Area" runs/ppa_*/reports/*qor* diff --git a/synthDC/ppaAnalyze.py b/synthDC/ppaAnalyze.py index 6205011d5..db97d0f95 100755 --- a/synthDC/ppaAnalyze.py +++ b/synthDC/ppaAnalyze.py @@ -41,7 +41,7 @@ def synthsintocsv(): file = open("ppaData.csv", "w") writer = csv.writer(file) - writer.writerow(['Module', 'Tech', 'Width', 'Target Freq', 'Delay', 'Area', 'L Power (nW)', 'D energy (fJ)']) + writer.writerow(['Module', 'Tech', 'Width', 'Target Freq', 'Delay', 'Area', 'L Power (nW)', 'D energy (nJ)']) for oneSynth in allSynths: module, width, risc, tech, freq = specReg.findall(oneSynth)[2:7] @@ -60,7 +60,7 @@ def synthsintocsv(): delay = 1000/int(freq) - metrics[0] area = metrics[1] lpower = metrics[4] - denergy = (metrics[2] + metrics[3])/int(freq) # (switching + internal powers)*delay, more practical units for regression coefs + denergy = (metrics[2] + metrics[3])/int(freq)*1000 # (switching + internal powers)*delay, more practical units for regression coefs if ('flop' in module): # since two flops in each module [area, lpower, denergy] = [n/2 for n in [area, lpower, denergy]] @@ -85,7 +85,7 @@ def cleanup(): output = subprocess.check_output(['bash','-c', bashCommand]) allSynths = output.decode("utf-8").split('\n')[:-1] for oneSynth in allSynths: - for phrase in [['Path Length', 'qor']]: #, ['Design Area', 'qor'], ['100', 'power']]: + for phrase in [['Path Length', 'qor']]: bashCommand = 'grep "{}" '+ oneSynth[2:]+'/reports/*{}*' bashCommand = bashCommand.format(*phrase) try: output = subprocess.check_output(['bash','-c', bashCommand]) @@ -131,54 +131,18 @@ def csvOfBest(filename): for w in widths: m = np.Inf # large number to start best = None - if ([mod, tech, w] in leftblue): - for oneSynth in allSynths: # leftmost blue - if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod): - if (oneSynth.freq < m) & (1000/oneSynth.delay < oneSynth.freq): - # if ([mod, tech, w] != ['mux2', 'sky90', 128]) or (oneSynth.area < 1100): - m = oneSynth.freq - best = oneSynth - else: - for oneSynth in allSynths: # best achievable, rightmost green - if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod): - if (oneSynth.delay < m) & (1000/oneSynth.delay > oneSynth.freq): - m = oneSynth.delay - best = oneSynth - # contenders = [] - # delays = [] - # for oneSynth in allSynths: # choose synth w minimal delay - # if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod): - # contenders += [oneSynth] - # delays += [oneSynth.delay] - # if oneSynth.delay < m: - # m = oneSynth.delay - # best = oneSynth - - # for oneSynth in contenders: # if m is min delay, choose best area within s as percent of m - # s = oneSynth.delay/m - 1 - # if s < 0.1: - # if oneSynth.area < best.area: - # best = oneSynth - - # bestval = 1.9 # score algorithm - # for oneSynth in contenders: - # delaydif = abs(1 - oneSynth.delay/best.delay) - # areadif = 1 - oneSynth.area/best.area - # try: val = areadif/delaydif - # except: val = 1 - # # if (oneSynth.width == 64) & (oneSynth.tech == 'sky90') & (oneSynth.module == 'comparator'): - # # print(oneSynth.freq, ' ', delaydif, ' ', areadif, ' ', val) - # if val > bestval: - # bestval = val - # best = oneSynth + for oneSynth in allSynths: # best achievable, rightmost green + if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == mod): + if (oneSynth.delay < m) & (1000/oneSynth.delay > oneSynth.freq): + m = oneSynth.delay + best = oneSynth if (best != None) & (best not in bestSynths): bestSynths += [best] - file = open(filename, "w") writer = csv.writer(file) - writer.writerow(['Module', 'Tech', 'Width', 'Target Freq', 'Delay', 'Area', 'L Power (nW)', 'D energy (fJ)']) + writer.writerow(['Module', 'Tech', 'Width', 'Target Freq', 'Delay', 'Area', 'L Power (nW)', 'D energy (nJ)']) for synth in bestSynths: writer.writerow(list(synth)) file.close() @@ -265,7 +229,7 @@ def oneMetricPlot(module, var, freq=None, ax=None, fits='clsgn', norm=True, colo if norm: ylabeldic = {"lpower": "Leakage Power (add32)", "denergy": "Energy/Op (add32)", "area": "Area (add32)", "delay": "Delay (FO4)"} else: - ylabeldic = {"lpower": "Leakage Power (nW)", "denergy": "Dynamic Energy (fJ)", "area": "Area (sq microns)", "delay": "Delay (ns)"} + ylabeldic = {"lpower": "Leakage Power (nW)", "denergy": "Dynamic Energy (nJ)", "area": "Area (sq microns)", "delay": "Delay (ns)"} ax.set_ylabel(ylabeldic[var]) ax.set_xticks(widths) @@ -549,13 +513,12 @@ def squarify(fig): l = (1.-axs/h)/2 fig.subplots_adjust(bottom=l, top=1-l) - def plotPPA(mod, freq=None, norm=True, aleOpt=False): ''' for the module specified, plots width vs delay, area, leakage power, and dynamic energy with fits if no freq specified, uses the synthesis with best achievable delay for each width overlays data from both techs ''' - plt.rcParams["figure.figsize"] = (7,3.6) + plt.rcParams["figure.figsize"] = (7,3.46) fig, axs = plt.subplots(2, 2) arr = [['delay', 'area'], ['lpower', 'denergy']] @@ -591,13 +554,7 @@ def plotPPA(mod, freq=None, norm=True, aleOpt=False): plt.savefig(saveStr) # plt.show() -def plotBestAreas(mod): - fig, axs = plt.subplots(1, 1) - oneMetricPlot(mod, 'area', freq=10) - plt.title(mod + ' Optimized Areas (target freq 10MHz)') - plt.savefig('./plots/bestAreas/' + mod + '.png') - -def makeDaLegend(): +def makeLineLegend(): plt.rcParams["figure.figsize"] = (5.5,0.3) fig = plt.figure() fullLeg = [lines.Line2D([0], [0], color='black', label='fastest', linestyle='-')] @@ -609,25 +566,6 @@ def makeDaLegend(): saveStr = './plots/PPA/legend.png' plt.savefig(saveStr) -def calcAvgRsq(): - with open('ppaFitting.csv', newline='') as csvfile: - csvreader = csv.reader(csvfile) - allSynths = list(csvreader)[1:] - csvfile.close() - - others = [] - muxes = [] - - for synth in allSynths: - if ('easy' not in synth) or ('delay' not in synth): - if 'mux' in synth[0]: - muxes += [float(synth[8])] - elif '0.0' != synth[8]: - others += [float(synth[8])] - - print('Others: ', np.mean(others)) - print('Muxes: ', np.mean(muxes)) - def muxPlot(fits='clsgn', norm=True): ''' module: string module name freq: int freq (MHz) @@ -660,6 +598,7 @@ def muxPlot(fits='clsgn', norm=True): techdict = spec._asdict() norm = techdict['delay'] metric = [m/norm for m in metric] + # print(spec.tech, ' ', metric) if len(metric) == 3: # don't include the spec if we don't have points for all xp, pred, coefs, r2 = regress(inputs, metric, fits, ale=False) @@ -679,23 +618,71 @@ def muxPlot(fits='clsgn', norm=True): ax.legend(handles = fullLeg) plt.savefig('./plots/PPA/mux.png') +def stdDevError(): + for var in ['delay', 'area', 'lpower', 'denergy']: + errlist = [] + for module in modules: + ale = (var != 'delay') + metL = [] + modFit = fitDict[module] + fits = modFit[ale] + funcArr = genFuncs(fits) + + for spec in techSpecs: + metric = getVals(spec.tech, module, var) + techdict = spec._asdict() + norm = techdict[var] + metL += [m/norm for m in metric] + + if ale: + ws = [w/normAddWidth for w in widths] + else: + ws = widths + ws = ws*2 + mat = [] + for w in ws: + row = [] + for func in funcArr: + row += [func(w)] + mat += [row] + + y = np.array(metL, dtype=np.float) + coefs = opt.nnls(mat, y)[0] + + yp = [] + for w in ws: + n = [func(w) for func in funcArr] + yp += [sum(np.multiply(coefs, n))] + + if (var == 'delay') & (module == 'flop'): + pass + elif (module == 'mult') & ale: + pass + else: + for i in range(len(y)): + errlist += [abs(y[i]/yp[i]-1)] + # print(module, ' ', var, ' ', np.mean(errlist[-10:])) + + avgErr = np.mean(errlist) + stdv = np.std(errlist) + + print(var, ' ', avgErr, ' ', stdv) + if __name__ == '__main__': ############################## # set up stuff, global variables widths = [8, 16, 32, 64, 128] - modules = ['priorityencoder', 'add', 'csa', 'shiftleft', 'comparator', 'flop', 'mux2', 'mux4', 'mux8', 'mult'] # 'mux2d', 'mux4d', 'mux8d'] + modules = ['priorityencoder', 'add', 'csa', 'shiftleft', 'comparator', 'flop', 'mux2', 'mux4', 'mux8', 'mult'] #, 'mux2d', 'mux4d', 'mux8d'] normAddWidth = 32 # divisor to use with N since normalizing to add_32 - fitDict = {'add': ['cg', 'l', 'l'], 'mult': ['cg', 'ls', 'ls'], 'comparator': ['cg', 'l', 'l'], 'csa': ['c', 'l', 'l'], 'shiftleft': ['cg', 'l', 'ln'], 'flop': ['c', 'l', 'l'], 'priorityencoder': ['cg', 'l', 'l']} + fitDict = {'add': ['cg', 'l', 'l'], 'mult': ['cg', 's', 's'], 'comparator': ['cg', 'l', 'l'], 'csa': ['c', 'l', 'l'], 'shiftleft': ['cg', 'l', 'ln'], 'flop': ['c', 'l', 'l'], 'priorityencoder': ['cg', 'l', 'l']} fitDict.update(dict.fromkeys(['mux2', 'mux4', 'mux8'], ['cg', 'l', 'l'])) - leftblue = [] #[['mux2', 'tsmc28', 8], ['mux4', 'sky90', 16]] TechSpec = namedtuple("TechSpec", "tech color shape delay area lpower denergy") - techSpecs = [['sky90', 'green', 'o', 43.2e-3, 1330.84, 582.81, 520.66], ['tsmc28', 'blue', '^', 12.2e-3, 209.29, 1060, 81.43]] + techSpecs = [['sky90', 'green', 'o', 43.2e-3, 1440.600027, 714.057, 0.658022690438], ['tsmc28', 'blue', '^', 12.2e-3, 209.286002, 1060.0, .08153281695882594]] techSpecs = [TechSpec(*t) for t in techSpecs] combined = TechSpec('combined fit', 'red', '_', 0, 0, 0, 0) - # invz1arealeakage = [['sky90', 1.96, 1.98], ['gf32', .351, .3116], ['tsmc28', .252, 1.09]] #['gf32', 'purple', 's', 15e-3] ############################## # cleanup() # run to remove garbage synth runs @@ -704,21 +691,21 @@ if __name__ == '__main__': allSynths = synthsfromcsv('ppaData.csv') # your csv here! bestSynths = csvOfBest('bestSynths.csv') - # ### plotting examples + # ### function examples # squareAreaDelay('sky90', 'add', 32) - # oneMetricPlot('add', 'area') + # oneMetricPlot('mult', 'lpower') # freqPlot('sky90', 'mux4', 16) # plotBestAreas('add') # makeCoefTable() - # calcAvgRsq() # makeEqTable() - # makeDaLegend() + # makeLineLegend() # muxPlot() + # stdDevError() - # for mod in modules: - # # plotPPA(mod, norm=False) - # # plotPPA(mod, aleOpt=True) - # for w in widths: - # freqPlot('sky90', mod, w) - # freqPlot('tsmc28', mod, w) - # plt.close('all') \ No newline at end of file + for mod in modules: + plotPPA(mod, norm=False) + plotPPA(mod, aleOpt=True) + for w in widths: + freqPlot('sky90', mod, w) + freqPlot('tsmc28', mod, w) + plt.close('all') \ No newline at end of file diff --git a/synthDC/ppaData.csv b/synthDC/ppaData.csv index 86fcf2c5e..601e74652 100644 --- a/synthDC/ppaData.csv +++ b/synthDC/ppaData.csv @@ -1,1123 +1,1221 @@ -Module,Tech,Width,Target Freq,Delay,Area,L Power (nW),D energy (fJ) -mux2,sky90,1,12770,0.08300853563038371,13.72,12.3,3.9075959279561475e-06 -comparator,sky90,32,3674,0.2733739069134458,699.720013,330.048,0.000108056614044638 -mux4,tsmc28,16,15167,0.0651646168655634,32.886,134.911,1.0127249950550539e-05 -priorityencoder,sky90,8,7522,0.1322263661260303,47.040001,18.57,1.0276522201542143e-05 -add,tsmc28,64,8534,0.12049834544176237,447.300003,2220.0,0.0001683852823998125 -mux8,tsmc28,1,17693,0.060110527496750124,9.072,57.908,2.7977166110891313e-06 -mult,sky90,8,1389,0.7681404046076313,2209.900042,1430.0,0.001470842332613391 -add,sky90,8,3439,0.2897002041291073,243.040005,146.139,0.00011805757487641757 -priorityencoder,tsmc28,32,17451,0.058905306400779324,66.15,236.198,9.907741676694746e-06 -shiftleft,tsmc28,16,10,0.16585499999999342,43.722,137.701,1.291e-05 -mux8d,sky90,1,10,0.22809599999999364,34.300001,4.606,6.09e-06 -comparator,sky90,32,3890,0.2804184087403599,745.780014,371.064,0.00012262210796915168 -mux2,sky90,8,5299,0.1883518518588413,63.700001,21.541,1.932440083034535e-05 -flop,sky90,8,9270,0.11434386515641856,133.279999,64.8145,0.00019360302049622438 -mult,tsmc28,32,2973,0.3363555785401951,5141.430011,36900.0,0.005416414396232761 -mux4,tsmc28,64,13926,0.07180612868016659,137.465999,648.086,4.5741777969266124e-05 -csa,sky90,32,5998,0.16643624074691563,1178.940023,650.306,0.0006495498499499834 -flop,sky90,32,8921,0.11434405660800359,533.119995,259.258,0.0007742405559914808 -mux8,sky90,128,2453,0.40739008479412964,3629.920071,818.07,0.0007240114145943742 -csa,tsmc28,32,24524,0.040663382319360626,209.664,1930.0,8.677214157559942e-05 -mult,tsmc28,128,1943,0.525260039114771,48676.82422,299000.0,0.0558780236747298 -priorityencoder,tsmc28,16,20828,0.048207291146533514,20.79,73.76,3.797772229690801e-06 -csa,tsmc28,8,22562,0.04244531185178619,31.248001,240.54,1.3850722453683184e-05 -mux8,sky90,16,3636,0.28388450275027505,608.580012,247.862,0.00013091309130913094 -mult,tsmc28,8,5301,0.19483965214110546,531.468,3930.0,0.00035106583663459723 -csa,sky90,128,6294,0.16536147442008264,6117.160119,3640.0,0.002729583730537019 -mux8,sky90,128,2667,0.3749401308586427,4575.620089,1830.0,0.0009786276715410573 -shiftleft,tsmc28,16,12748,0.08287467743959838,125.243999,615.906,3.451521807342328e-05 -add,tsmc28,32,10597,0.10036333009342267,240.030002,1260.0,9.266773615174106e-05 -flop,sky90,64,8221,0.1143447031991242,1066.23999,520.0,0.0015482909621700523 -csa,tsmc28,32,24034,0.04077672239327619,197.567999,1890.0,8.558708496296912e-05 -flop,sky90,32,8571,0.11434450029168125,533.119995,259.258,0.0007741803756854509 -mux4d,tsmc28,1,30585,0.03259276589831617,2.898,17.893,8.850743828674186e-07 -mux8,tsmc28,128,9636,0.10367850103777501,559.943997,2620.0,0.00014061851390618515 -csa,tsmc28,32,23543,0.04244547041583485,124.992002,962.249,5.5090685129337814e-05 -flop,sky90,8,8746,0.11434398307797851,133.279999,64.8145,0.00019362565744340267 -mux4,sky90,128,3231,0.3096037022593624,2019.780039,760.934,0.0006196224079232435 -mux2,tsmc28,128,15972,0.06228256674179814,173.502,1060.0,5.503380916604057e-05 -mux2,sky90,64,4396,0.24216452684258416,487.060007,132.876,0.00016014558689717926 -csa,tsmc28,16,25995,0.040894936333910364,100.799999,947.479,4.30467397576457e-05 -priorityencoder,sky90,32,4596,0.2183225047867711,367.500007,196.77,4.5648389904264576e-05 -flop,tsmc28,128,20454,0.04889119262735895,241.919998,1260.0,0.00043563606140608187 -mux8d,sky90,1,7754,0.13242769512509672,89.180001,45.284,1.5991746195511993e-05 -mult,tsmc28,16,4125,0.25523324242424245,2007.432002,15100.0,0.0017086060606060606 -mux2,sky90,32,4702,0.21088845725223307,368.480007,245.044,0.0001344108889834113 -comparator,tsmc28,128,10,0.6097180000000009,256.787999,853.776,5.66e-05 -csa,sky90,32,5518,0.1796730815512867,1150.520022,813.107,0.0005889815150416818 -add,tsmc28,32,10,0.9349590000000063,67.157999,230.644,3.24e-05 -csa,sky90,64,5931,0.1654056314280897,2132.480042,1230.0,0.0010905412240768842 -comparator,sky90,32,3314,0.30097215087507545,694.820014,185.626,9.897404948702473e-05 -mux8,sky90,32,10,0.9133680000000055,822.220016,56.003,0.0001386 -add,tsmc28,8,13561,0.07281987456677236,31.878,172.3,1.2683430425484846e-05 -mux8,sky90,16,3293,0.30339846097783174,678.160006,347.764,0.00017096872153051927 -mult,tsmc28,16,3743,0.2671573753673524,1399.734003,9840.0,0.0012831952978893935 -csa,tsmc28,8,10,0.06758100000000411,17.136,57.229,7.2100000000000004e-06 -comparator,sky90,64,2942,0.33983282664853837,1331.820026,241.079,0.0001947654656696125 -csa,sky90,16,5810,0.1707250395869191,572.320011,399.957,0.0002900172117039587 -add,tsmc28,8,13838,0.07207477814713109,34.272,187.089,1.3311172134701546e-05 -add,tsmc28,64,8041,0.12432664146250468,391.860003,1880.0,0.0001491108071135431 -mux4,sky90,64,3710,0.26931477897574124,899.640016,344.331,0.00028625336927223723 -mux8,sky90,128,2560,0.390515,4343.360071,1680.0,0.00093203125 -shiftleft,sky90,32,2353,0.4249323752656184,1232.840023,566.074,0.00032171695707607306 -csa,sky90,16,5931,0.1654056314280897,533.12001,308.404,0.00027263530601922105 -mux2,sky90,64,3826,0.25709657658128593,462.560009,162.042,0.00016989022477783587 -mult,sky90,32,794,1.3013988438287152,26529.580464,17000.0,0.026575566750629723 -mult,tsmc28,128,1905,0.5249343832020997,47318.418271,290000.0,0.05471338582677165 -add,sky90,16,2883,0.351801908775581,694.82001,489.311,0.00033159902878945543 -csa,tsmc28,128,25505,0.04036599843168006,806.399994,7610.0,0.00034122721035091154 -mux8,tsmc28,128,9846,0.10152608693885842,674.477993,2900.0,0.0001568149502335974 -mux2,sky90,8,4981,0.1993458990162618,59.780001,23.364,2.17024693836579e-05 -mux2,sky90,32,3700,0.2533642702702703,227.360004,74.563,8.324324324324324e-05 -shiftleft,tsmc28,128,6883,0.1452804859799506,1687.769984,7890.0,0.0004971669330233909 -mux4,sky90,16,4750,0.25584431578947364,359.660007,120.182,7.389473684210526e-05 -mux8,tsmc28,32,10,0.16755700000000218,105.713999,407.748,1.928e-05 -mux2,tsmc28,64,17825,0.055663981767180924,83.033999,417.316,2.3338008415147267e-05 -shiftleft,sky90,64,2247,0.4693798282153983,3562.300063,1920.0,0.0009403649310191366 -mux2,tsmc28,8,30798,0.0337446408857718,16.758,114.743,5.454899668809662e-06 -csa,sky90,128,6415,0.1639816453624318,5895.680054,3630.0,0.002797661730319564 -comparator,tsmc28,8,18446,0.058025295348585054,37.548,189.059,9.611839965304132e-06 -mux8,tsmc28,32,11713,0.08517122410996329,172.115999,823.633,4.695637326047981e-05 -mux8,sky90,128,2507,0.3981901272437176,3752.420073,821.695,0.0006968488232947746 -flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,0.003094 -priorityencoder,sky90,64,4426,0.25084764121102576,804.580015,353.584,7.162223226389517e-05 -flop,tsmc28,16,22091,0.048891303426734874,30.24,157.29,5.447693630890407e-05 -mult,sky90,64,607,1.6473724579901154,75321.821095,29500.0,0.07259637561779242 -add,sky90,128,1923,0.5214358008320333,6239.660121,2280.0,0.00212532501300052 -mux2,sky90,64,3989,0.24961239583855604,479.220007,148.175,0.00016570569064928555 -mux2,tsmc28,32,18261,0.05585551360823613,32.130001,171.146,9.900881660369093e-06 -mux4,sky90,128,2977,0.3352126328518643,2350.040007,969.13,0.0008307020490426603 -add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,0.0009392239364188873 -add,tsmc28,8,13284,0.07456053056308341,33.264,180.682,1.306082505269497e-05 -csa,sky90,64,5568,0.17497270114942529,2314.760045,1640.0,0.0011876795977011493 -mux4,tsmc28,1,24680,0.04009963857374392,2.898,17.89,8.812803889789302e-07 -csa,tsmc28,16,25014,0.04049261253697929,104.832,964.99,4.3495642440233474e-05 -mux2,tsmc28,64,18568,0.05371109651012495,91.35,523.884,2.757432141318397e-05 -csa,sky90,16,5568,0.17497270114942529,574.280011,400.9,0.00029220545977011496 -mux8,tsmc28,64,11234,0.08957548869503294,446.795996,2070.0,9.337724764108954e-05 -mux8d,sky90,1,7008,0.14061306392694065,110.740002,96.387,2.54708904109589e-05 -mux8,tsmc28,1,15690,0.06278186297004462,11.718,79.753,3.6966220522625877e-06 -mux4,tsmc28,128,10,0.3817059999999941,212.561998,731.833,7.329999999999999e-05 -mux4,sky90,8,4568,0.21942118563922944,136.220003,45.945,3.850700525394045e-05 -comparator,tsmc28,16,14010,0.07188958743754462,52.92,242.622,1.4039971448965025e-05 -priorityencoder,tsmc28,32,15146,0.06594503274792025,47.502,151.098,7.2956556186451876e-06 -priorityencoder,tsmc28,32,17122,0.059302392010279176,59.598001,207.143,8.871627146361405e-06 -priorityencoder,sky90,128,3273,0.30545509471432936,1551.340029,539.05,0.00010785212343415826 -mux4d,sky90,1,9701,0.10307715647871353,51.940001,49.18,1.3627461086485928e-05 -mux2,tsmc28,16,18001,0.05470446930726071,14.994,80.805,4.971946002999833e-06 -add,sky90,8,3512,0.2841480410022779,244.020004,156.809,0.00013069476082004555 -comparator,tsmc28,32,11896,0.08406186953597848,140.238,622.659,3.4045057162071284e-05 -comparator,sky90,32,3530,0.28273311898016995,722.260014,318.387,0.00011784702549575072 -mux2,sky90,8,4875,0.20357220512820512,60.760001,22.812,2.1271794871794873e-05 -mux8,tsmc28,8,11869,0.08421509630128908,59.094,255.901,1.325301204819277e-05 -mux4d,sky90,1,10,0.188477000000006,13.72,1.708,3.25e-06 -priorityencoder,tsmc28,128,11211,0.08919110900008921,283.248002,843.21,3.559004549103559e-05 -mux4,tsmc28,128,12043,0.08302378842481109,260.315998,1150.0,8.394918209748403e-05 -flop,tsmc28,64,20454,0.04889119262735895,120.959999,630.0,0.0002178302532511978 -mult,sky90,32,824,1.2735492330097087,28626.780516,20200.0,0.029580097087378642 -mux8,tsmc28,32,11245,0.08892641262783459,215.837997,958.69,4.899955535793685e-05 -csa,tsmc28,64,22562,0.04244531185178619,249.984005,1920.0,0.00011022958957539226 -mux2,tsmc28,8,28429,0.03986434911533997,11.466,61.225,3.1622638854690635e-06 -shiftleft,sky90,32,2553,0.39648804386995695,1666.980028,1060.0,0.0004888366627497062 -csa,sky90,8,6238,0.1653617909586406,338.100007,209.02,0.00015581917281179864 -priorityencoder,sky90,8,7683,0.12508649056358195,50.960001,24.761,1.0685929975270078e-05 -flop,tsmc28,16,20864,0.048891447852760735,30.24,157.289,5.4469421012269945e-05 -mux2,tsmc28,128,16637,0.05991099044298852,176.525999,941.106,5.012923002945243e-05 -shiftleft,tsmc28,64,8603,0.1211845214460072,1153.529997,6100.0,0.0003193072184121818 -csa,tsmc28,64,25505,0.04036599843168006,403.199997,3800.0,0.0001704763771809449 -shiftleft,sky90,128,1831,0.5460426450027308,8026.200142,4230.0,0.002304205352266521 -shiftleft,tsmc28,16,10860,0.09202503130755064,79.632,346.968,2.283609576427256e-05 -comparator,tsmc28,32,13110,0.08841365064836003,147.798,653.398,3.607932875667429e-05 -shiftleft,tsmc28,8,15202,0.0656078183133798,50.652,367.074,1.6991185370346006e-05 -mult,tsmc28,64,2486,0.41838261464199517,17830.386041,123000.0,0.02040506838294449 -add,sky90,32,10,3.640808000000007,456.679995,55.753,0.0001603 -priorityencoder,sky90,32,5171,0.20654319222587508,394.940008,211.398,4.892670663314639e-05 -comparator,tsmc28,16,13461,0.07416968583314762,48.888,209.064,1.2599361117301834e-05 -add,sky90,8,3365,0.2960748202080238,240.100004,135.697,0.00012124814264487371 -flop,tsmc28,32,19636,0.04889186901609289,60.4799995,314.5785,0.00010893257282542271 -mux4,tsmc28,32,14285,0.06951250017500875,70.056,308.062,2.170108505425271e-05 -mux4,tsmc28,32,15196,0.06580579126085812,69.174,324.969,2.3229797315082915e-05 -add,sky90,64,2096,0.4770132366412214,2851.800056,1100.0,0.0009990458015267174 -mux4,tsmc28,128,12304,0.08125338231469441,292.949997,1310.0,8.566319895968791e-05 -flop,tsmc28,64,19636,0.04889186901609289,120.959999,630.0,0.00021783968221633732 -mux8,sky90,8,3585,0.2789170278940028,287.140006,116.648,6.089260808926081e-05 -mux2d,sky90,1,12160,0.07841884210526316,18.62,16.576,5.9210526315789485e-06 -mult,tsmc28,32,10,2.1397929999999974,1770.426003,6970.0,0.001456 -mux8,sky90,64,3027,0.33226909250082587,2210.880042,855.564,0.0004800132144037 -priorityencoder,sky90,32,4979,0.2094015428800964,372.400007,230.625,4.500903795942961e-05 -comparator,sky90,8,5226,0.20861193761959435,224.420003,142.569,5.778798316111749e-05 -mux8,sky90,128,2720,0.37196705882352943,4226.740078,1240.0,0.0008011029411764706 -comparator,tsmc28,128,8621,0.11599382415033059,419.705999,1440.0,9.163670107876117e-05 -flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.00043579999999999997 -mult,tsmc28,128,1719,0.5817325660267597,38214.666162,205000.0,0.03961605584642233 -mux4,sky90,1,7478,0.1283835950788981,28.420001,21.808,6.33859320673977e-06 -flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,5.4290000000000004e-05 -comparator,sky90,8,4645,0.21420925296017224,196.000004,116.123,4.736275565123789e-05 -shiftleft,sky90,16,3288,0.30390325304136256,618.380008,475.055,0.0001648418491484185 -mult,sky90,64,594,1.6834886835016836,71780.100958,24600.0,0.06342255892255892 -mux4,sky90,1,7322,0.13543670636438132,32.340001,22.173,6.787762906309752e-06 -mux2,tsmc28,8,31391,0.03374526453442069,16.758,114.743,5.456978114746265e-06 -mux4,tsmc28,32,10,0.12346599999999341,54.431999,199.177,1.354e-05 -csa,sky90,32,5758,0.16536141368530738,1066.240021,616.808,0.0005448072247308093 -mux8d,sky90,1,7605,0.13242743918474686,89.180001,45.284,1.604207758053912e-05 -priorityencoder,tsmc28,32,15805,0.06325111673521037,49.896,157.04,7.586206896551723e-06 -mux4,tsmc28,64,13369,0.07450691024010771,136.331999,609.938,4.383274740070312e-05 -flop,tsmc28,128,22091,0.048891303426734874,241.919998,1260.0,0.0004356525281788964 -comparator,sky90,8,4452,0.22251914914645105,175.420003,102.05,4.4609164420485174e-05 -mux2d,sky90,1,12688,0.07841862799495587,18.62,16.576,5.918978562421185e-06 -csa,tsmc28,16,25505,0.04036599843168006,100.799999,950.751,4.277592628896295e-05 -mux4,sky90,16,4213,0.2508225506764776,283.220006,87.245,7.239496795632566e-05 -flop,sky90,32,9096,0.11434443447669304,533.119995,259.258,0.0007742414248021108 -priorityencoder,tsmc28,64,14080,0.07119772727272727,165.312001,544.165,2.166193181818182e-05 -mux4,tsmc28,32,16108,0.06632995356344673,93.239999,437.954,2.675689098584554e-05 -priorityencoder,tsmc28,16,20403,0.048862400137234724,20.412,65.051,3.661226290251433e-06 -mux8,sky90,8,3729,0.2746434097613301,422.380008,228.3,9.680879592384017e-05 -priorityencoder,sky90,64,3852,0.25960539979231567,720.300014,251.028,5.9449636552440295e-05 -mux4,sky90,8,4661,0.21448923471358078,164.640002,88.494,4.31452478009011e-05 -mux4,sky90,32,3813,0.25986668712300026,471.380009,153.367,0.0001403094676108051 -priorityencoder,tsmc28,128,10982,0.09105009506465125,249.984,708.42,3.1050810417046075e-05 -mux4,sky90,64,3488,0.29027124770642204,1076.04002,336.513,0.00028526376146788995 -mux2,sky90,1,11324,0.08482301836806781,11.76,9.281,3.726598375132462e-06 -flop,sky90,64,8571,0.11434450029168125,1066.23999,520.0,0.001548302415120756 -flop,sky90,64,9270,0.11434386515641856,1066.23999,520.0,0.0015483279395900756 -flop,tsmc28,128,20864,0.048891447852760735,241.919998,1260.0,0.00043563075153374236 -flop,sky90,8,8396,0.11434433539780849,133.279999,64.8145,0.0001935921867555979 -mux4d,tsmc28,1,33909,0.02948569568551122,6.426,53.381,1.967029402223598e-06 -mux4,tsmc28,64,14483,0.07128446827314783,225.287996,1000.0,5.792998688117103e-05 -shiftleft,sky90,64,2336,0.4500001917808219,4441.360059,3810.0,0.0013458904109589043 -csa,sky90,32,6238,0.1653617909586406,1349.460026,801.907,0.0006146200705354279 -mux2,tsmc28,1,49852,0.019658375752226592,2.142,15.112,6.017812725667977e-07 -comparator,tsmc28,16,12912,0.07736533581164808,50.4,200.11,1.2732342007434943e-05 -mux8,sky90,64,2906,0.3440756228492774,2132.48004,808.482,0.0004428768066070199 -mux8,sky90,32,3242,0.32156957310302287,1071.14002,340.021,0.00022270203578038248 -flop,tsmc28,32,20045,0.04889175255674732,60.4799995,314.5785,0.00010893739087054129 -mux4,sky90,64,3933,0.30270983549453345,1673.840027,1300.0,0.0004558860920416985 -mux4,sky90,16,4571,0.26359750973528767,358.680007,100.453,7.941369503390942e-05 -comparator,sky90,128,2522,0.3958217057890563,2654.820052,488.071,0.0003370340999206979 -mux2,sky90,32,3400,0.29179964705882355,223.440004,42.391,7.158823529411765e-05 -add,tsmc28,16,11290,0.08851795925597875,85.428,437.897,3.153232949512843e-05 -flop,sky90,8,8921,0.11434405660800359,133.279999,64.8145,0.00019361058177334379 -add,sky90,8,3585,0.2792020278940028,268.520005,182.205,0.00013361227336122734 -priorityencoder,sky90,128,3341,0.29916058335827594,1694.420031,709.89,0.0001343909009278659 -comparator,tsmc28,16,12637,0.07900370554720265,43.218,177.517,1.1403022869351904e-05 -mux4,sky90,64,3414,0.2928525407147042,1048.60002,252.076,0.00026859988283538374 -csa,tsmc28,32,25995,0.040894936333910364,201.599998,1900.0,8.578572802462011e-05 -add,tsmc28,8,12731,0.07846142510407667,28.98,157.91,1.1994344513392507e-05 -mux4,tsmc28,8,10,0.07530199999999354,15.12,54.869,3.56e-06 -flop,sky90,16,8046,0.11434435918468804,266.5599975,129.629,0.0003871488938603033 -mux2,tsmc28,128,17636,0.05977820004536176,201.347999,1400.0,6.707870265366295e-05 -mux4d,sky90,1,9507,0.10386665267697485,50.960001,47.194,1.3484800673188175e-05 -mux4,tsmc28,128,13875,0.07613907207207207,305.927997,1490.0,9.643243243243243e-05 -mux4,tsmc28,1,27305,0.03808832906061161,5.292,41.928,1.7103094671305622e-06 -shiftleft,tsmc28,32,9012,0.11093316023080337,245.951999,1140.0,6.746560142032845e-05 -priorityencoder,tsmc28,16,22954,0.04644439165287096,26.712,104.46,4.752984229328221e-06 -mux2,tsmc28,32,17545,0.05664229524080935,30.366001,167.377,9.905956112852665e-06 -mult,sky90,8,1337,0.7566541563201197,2445.100044,1850.0,0.0016222887060583396 -priorityencoder,sky90,32,5075,0.20628333497536946,382.200007,257.609,5.142857142857143e-05 -comparator,sky90,16,10,0.9970469999999949,252.840005,31.402,2.61e-05 -mult,sky90,16,1057,1.005271793755913,8161.440151,5800.0,0.007126773888363293 -priorityencoder,tsmc28,128,12355,0.08705389113719142,300.006001,970.795,4.05503844597329e-05 -mux4,tsmc28,16,16816,0.06093117411988582,41.202,195.667,1.2725975261655565e-05 -shiftleft,sky90,16,3154,0.3167537045022194,546.840011,299.663,0.00012682308180088776 -csa,tsmc28,32,25014,0.04049261253697929,209.664,1930.0,8.675141920524506e-05 -mux2,tsmc28,32,10,0.17166100000000029,28.728001,146.078,9.79e-06 -mux4,tsmc28,1,26255,0.03808798324128737,5.292,41.928,1.7101504475338032e-06 -mux2d,tsmc28,1,50709,0.019658365221163897,2.142,15.112,6.014711392454988e-07 -add,tsmc28,8,14945,0.07161801070592172,40.068,231.181,1.5396453663432585e-05 -mux8,sky90,16,3705,0.2855275330634278,599.760012,190.243,0.0001214574898785425 -mult,sky90,128,534,1.9193641760299625,301809.624151,125000.0,0.28923595505617977 -mux2,tsmc28,16,17618,0.054704131683505505,14.994,80.805,4.972187535475082e-06 -add,tsmc28,128,7787,0.1333521601386927,1023.246011,5130.0,0.000381533324772056 -add,tsmc28,16,10829,0.0922426301597562,72.45,357.027,2.7241665897128086e-05 -shiftleft,tsmc28,64,7942,0.12590886829513975,745.289994,3610.0,0.00021191135734072023 -mux4,sky90,32,3889,0.2611895104139882,714.420014,328.777,0.00019002314219593726 -mux2,tsmc28,1,46800,0.021009521367521367,1.89,12.344,5.767094017094017e-07 -mux4,sky90,1,8412,0.12749279362815027,28.420001,25.098,6.490727532097004e-06 -mult,sky90,64,10,15.014533999999998,46801.860227,5460.0,0.019459999999999998 -mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,0.08884651898734176 -mux4,sky90,16,4840,0.2558435702479339,359.660007,120.182,7.37603305785124e-05 -mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,0.0014213740458015268 -mux8,tsmc28,64,11675,0.09174310492505353,303.407999,1480.0,8.35117773019272e-05 -mux2,tsmc28,128,16970,0.05955851915144372,179.045998,924.038,4.908662345315262e-05 -shiftleft,sky90,16,3087,0.32345509944930356,604.660009,407.488,0.00016747651441528994 -flop,tsmc28,16,19636,0.04889186901609289,30.24,157.289,5.4466286412711354e-05 -shiftleft,tsmc28,16,11804,0.08465604506946797,127.511999,602.29,3.388681802778719e-05 -csa,sky90,64,5810,0.16922003958691909,2696.960052,1950.0,0.0013139414802065404 -mux2,sky90,1,11565,0.0848227907479464,11.76,9.281,3.7267617812364893e-06 -priorityencoder,tsmc28,128,10754,0.09298165538404315,237.636,654.025,2.9105449135205505e-05 -shiftleft,tsmc28,64,8934,0.12338694537721065,1131.605996,5920.0,0.0003117304678755317 -mux4,sky90,16,4123,0.24214683846713558,291.060006,99.813,7.20834343924327e-05 -shiftleft,tsmc28,16,12276,0.08213775887911372,128.771999,599.581,3.3154121863799286e-05 -mux4,tsmc28,128,14137,0.07497236556553724,331.505997,1600.0,9.705029355591708e-05 -mux2,tsmc28,16,19533,0.052470412891004965,15.372,84.373,5.0427481697639896e-06 -flop,tsmc28,64,20864,0.048891447852760735,120.959999,630.0,0.00021783934049079753 -shiftleft,sky90,32,2503,0.39951757530962845,1475.880027,768.262,0.0003807431082700759 -csa,tsmc28,128,22562,0.04244531185178619,499.96801,3850.0,0.0002204591791507845 -flop,tsmc28,8,21273,0.0488919443425939,15.12,78.6345,2.72364029520989e-05 -mux2d,tsmc28,1,55991,0.01893201321640978,3.276,26.574,9.269346859316676e-07 -csa,sky90,32,10,0.2641830000000027,470.399994,55.245,0.0001684 -shiftleft,sky90,8,4154,0.2387968247472316,217.560004,130.113,5.30091478093404e-05 -mux8,tsmc28,8,12644,0.07905289591901297,44.352,215.422,1.1839607719076242e-05 -mux2,tsmc28,1,54939,0.019658005861045887,2.142,15.112,6.006661934145143e-07 -flop,tsmc28,128,20045,0.04889175255674732,241.919998,1260.0,0.00043564479920179595 -flop,tsmc28,16,20454,0.04889119262735895,30.24,157.289,5.4471008115771985e-05 -mux2,sky90,32,4903,0.20096176116663267,374.360008,257.036,0.0001366510299816439 -shiftleft,tsmc28,32,9204,0.10864541373315949,288.539999,1370.0,8.192090395480226e-05 -comparator,tsmc28,64,10645,0.09393481728511037,278.712,1140.0,6.519492719586659e-05 -mux4,sky90,32,3737,0.26718032700026756,447.860009,138.381,0.00013647310677013648 -csa,sky90,16,6415,0.1639816453624318,736.960007,453.967,0.0003499610288386594 -add,sky90,128,1847,0.5413075165132648,6010.340117,1930.0,0.0020184082295614508 -csa,tsmc28,8,26486,0.040226795514611495,52.416,489.192,2.1860605602960054e-05 -flop,tsmc28,64,19227,0.048891193998023615,120.959999,630.0,0.0002178186924637229 -flop,tsmc28,32,19227,0.048891193998023615,60.4799995,314.5785,0.00010892754979976075 -mux4,sky90,32,3584,0.27880885714285714,450.800009,134.823,0.000138671875 -mux8,tsmc28,8,13934,0.07549890110521028,46.494,225.202,1.2243433328548873e-05 -csa,sky90,16,10,0.2641830000000027,235.199997,27.622,8.46e-05 -mux2,sky90,8,5617,0.18835097739006587,64.680001,21.541,1.931636104682215e-05 -mux2,sky90,32,3550,0.26887414084507044,226.380004,71.139,7.999999999999999e-05 -mux2,sky90,16,4751,0.20207400378867607,119.560002,32.354,3.896021890128394e-05 -shiftleft,tsmc28,16,11568,0.08636336652835408,114.407998,555.079,3.224412171507607e-05 -mux2,tsmc28,128,10,0.31761899999999343,113.274004,578.362,4.75e-05 -add,sky90,8,3731,0.2784306582685607,282.240005,170.25,0.00014312516751541142 -mux2,sky90,128,4004,0.24974824975024976,1302.420025,767.078,0.0004665334665334665 -add,sky90,32,2226,0.44901729829290205,1172.080023,417.603,0.0004492362982929021 -mux2d,tsmc28,1,57047,0.018932405577856855,3.276,26.574,9.273055550686277e-07 -mux2,tsmc28,16,10,0.08560900000000515,14.49,74.123,4.85e-06 -mux4,sky90,128,10,1.923141000000001,1662.080032,111.431,0.000439 -comparator,sky90,16,4179,0.24596069657812875,417.480006,278.291,8.542713567839195e-05 -shiftleft,sky90,32,2704,0.3823014852071006,1741.460027,1220.0,0.00047928994082840237 -mux4,tsmc28,128,13351,0.07571775649764062,330.245998,1650.0,0.00010074151748932666 -comparator,sky90,32,3746,0.2740004148424987,769.300014,392.725,0.00012786972770955686 -comparator,tsmc28,32,11653,0.08639581163648846,133.308,567.495,3.226636917531966e-05 -shiftleft,sky90,128,1984,0.5263342580645162,9846.060141,7380.0,0.0031139112903225807 -flop,sky90,16,8396,0.11434433539780849,266.5599975,129.629,0.0003870890900428776 -flop,tsmc28,64,20045,0.04889175255674732,120.959999,630.0,0.00021780992766275877 -add,sky90,16,3177,0.3287743544224111,734.020014,502.145,0.00032892666037141955 -mux8,tsmc28,32,11947,0.08545102167908261,294.588,1430.0,6.0684690717334894e-05 -add,tsmc28,32,10401,0.10034260148062688,236.250002,1260.0,9.133737140659552e-05 -mult,tsmc28,32,3151,0.330004568390987,6357.077997,47200.0,0.006362424627102508 -comparator,tsmc28,64,11514,0.09154979034219211,276.192001,1270.0,6.513809275664408e-05 -csa,tsmc28,8,25014,0.04049261253697929,52.416,482.462,2.1707843607579752e-05 -priorityencoder,sky90,64,4098,0.2439914738897023,797.720015,382.205,7.393850658857981e-05 -csa,tsmc28,64,25995,0.040894936333910364,403.199997,3790.0,0.00017187920753991152 -add,sky90,8,3951,0.26842548089091367,271.460005,148.556,0.00012401923563654772 -priorityencoder,sky90,64,10,1.535827999999995,436.100008,29.529,2.2689999999999998e-05 -mux2,sky90,64,4315,0.2418707103128621,485.100007,130.641,0.000159675550405562 -csa,tsmc28,128,24524,0.040663382319360626,838.655998,7720.0,0.00034717011906703634 -add,tsmc28,128,7210,0.13869425520110956,868.140006,4090.0,0.0003313453536754508 -mux8,sky90,32,3432,0.3320732913752914,899.640018,274.871,0.00017424242424242425 -mux8,sky90,8,3872,0.2781554628099173,312.620006,98.575,5.6611570247933886e-05 -add,sky90,16,10,1.9208679999999987,221.479998,28.13,7.88e-05 -priorityencoder,tsmc28,64,14908,0.07170007888382077,148.932001,495.463,2.0056345586262412e-05 -csa,tsmc28,128,24034,0.04077672239327619,790.271996,7570.0,0.0003422651244070899 -add,tsmc28,64,7713,0.12962723816932453,359.478003,1670.0,0.0001358744976014521 -csa,sky90,8,6478,0.16536163229391787,375.340007,216.172,0.00015930842852732326 -mux8,sky90,128,2827,0.37011887124159887,4557.000083,1680.0,0.0009458790237000354 -comparator,sky90,128,2469,0.4048802762251924,2907.660056,623.203,0.000317942486836776 -comparator,tsmc28,64,9994,0.10003003602161296,225.54,848.556,5.1731038623173903e-05 -add,sky90,64,2310,0.4818804329004329,2896.880056,1140.0,0.0010454545454545454 -csa,tsmc28,128,23543,0.04244547041583485,499.96801,3850.0,0.00022049016692859874 -mux4,tsmc28,32,15804,0.06679512022272842,75.221999,360.596,2.372817008352316e-05 -mux2,tsmc28,1,51887,0.019658650182126546,2.142,15.112,6.013066856823481e-07 -add,sky90,64,2268,0.46467410758377425,2989.000058,1150.0,0.0010533509700176367 -flop,sky90,128,8921,0.11434405660800359,2132.4799805,1035.0,0.003096457796211187 -shiftleft,tsmc28,16,11096,0.09008356669069935,82.907999,376.563,2.4062725306416728e-05 -mux4,tsmc28,64,12812,0.07728182641273805,113.399999,453.176,3.660630658757415e-05 -comparator,tsmc28,128,8809,0.11351826336701101,441.503999,1580.0,9.774094675899647e-05 -comparator,tsmc28,32,12381,0.082321920119538,163.044,743.896,3.941523301833454e-05 -flop,sky90,128,9270,0.11434386515641856,2132.4799805,1035.0,0.0030964940668824163 -mux4,sky90,128,3167,0.31575023618566467,2016.840039,722.109,0.0005917271866119355 -comparator,sky90,32,10,1.0165939999999978,495.88001,66.41,4.24e-05 -comparator,sky90,16,3938,0.25292600812595223,388.080008,208.857,7.71965464702895e-05 -priorityencoder,sky90,16,6244,0.1666287475976938,185.220003,132.902,3.294362588084561e-05 -flop,tsmc28,16,21682,0.04889120653076284,30.24,157.29,5.447606309381053e-05 -mux4d,sky90,1,10284,0.10307742862699339,51.940001,49.18,1.3642551536367171e-05 -comparator,tsmc28,8,16055,0.062218892245406415,26.208,124.888,7.144191840548115e-06 -mux2,tsmc28,1,52905,0.01965880512238919,2.142,15.112,6.010774028919762e-07 -mux4,sky90,128,3357,0.3042110163836759,2132.480041,762.467,0.0005895144474232947 -shiftleft,sky90,8,4414,0.25993588038060716,218.540004,115.4,5.822383325781604e-05 -add,tsmc28,64,7549,0.13246087653993907,330.372002,1490.0,0.0001241224003179229 -add,tsmc28,8,14668,0.07161662039814562,39.06,231.044,1.5387237523861467e-05 -comparator,sky90,128,2791,0.35824651809387315,2744.980052,796.047,0.0003439627373701182 -shiftleft,tsmc28,32,10163,0.10229014287119945,394.632001,2000.0,0.00011040047230148578 -priorityencoder,sky90,8,7362,0.1356376541700625,49.980001,33.776,9.277370279815267e-06 -mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,0.024931847968545216 -mux2,sky90,8,10,0.41516099999999767,58.800001,10.206,1.7860000000000002e-05 -mult,sky90,32,10,8.063384999999997,12417.580067,1180.0,0.00464 -mux4,tsmc28,8,17425,0.05691080918220947,19.782,89.585,6.134863701578192e-06 -mult,sky90,128,514,1.9488052918287937,289359.703832,109000.0,0.2630311284046693 -flop,tsmc28,128,19227,0.048891193998023615,241.919998,1260.0,0.0004356113798304468 -priorityencoder,sky90,8,10,0.47602799999999945,34.300001,2.489,4.279e-06 -add,tsmc28,32,9616,0.10391334442595675,202.104002,1010.0,7.945091514143094e-05 -add,tsmc28,32,9223,0.10841559069717012,174.132001,855.479,7.090968231594925e-05 -priorityencoder,sky90,16,10,0.660728000000006,85.260002,5.247,6.92e-06 -csa,sky90,64,6294,0.16398147442008262,3136.000061,1970.0,0.0014483635208134731 -mux4,tsmc28,64,14205,0.0709287472720873,145.655999,671.083,4.618092221048926e-05 -mux2,tsmc28,128,17968,0.05788449688334818,210.924,1240.0,6.077471059661621e-05 -mux8,tsmc28,16,11282,0.08828276653075696,76.356,313.906,1.9553270696684985e-05 -mult,tsmc28,128,10,8.397948999999997,26059.445743,91700.0,0.02569 -mux4,sky90,8,4288,0.2311609552238806,120.540002,34.353,3.362873134328358e-05 -priorityencoder,sky90,32,4500,0.2218912222222222,372.400007,189.626,4.371111111111111e-05 -add,tsmc28,8,14391,0.07025787436592315,37.422,203.854,1.4008755472170106e-05 -csa,tsmc28,64,10,0.06758100000000411,137.087997,458.434,5.7700000000000007e-05 -mux2d,tsmc28,1,48596,0.019658825335418552,2.142,15.112,6.029302823277636e-07 -mux8,tsmc28,8,13160,0.07636884194528876,46.494,227.561,1.222644376899696e-05 -mux8,tsmc28,32,12416,0.08657423711340206,248.723997,1220.0,5.404317010309279e-05 -mux8,sky90,16,3362,0.295237998810232,582.120003,282.366,0.00014455681142177274 -mux4,tsmc28,16,10,0.092804000000001,28.224,102.974,6.9e-06 -mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,0.2733148854961832 -flop,tsmc28,32,20864,0.048891447852760735,60.4799995,314.5785,0.00010891487730061351 -csa,sky90,16,6294,0.16398147442008262,784.000015,491.595,0.0003627264061010486 -mux8,tsmc28,16,11528,0.08572431575294935,77.994,322.722,1.940492713393477e-05 -comparator,sky90,8,10,0.7786030000000039,118.580002,16.053,1.3359999999999999e-05 -mux2,sky90,128,3764,0.26554481402763014,1265.179998,702.615,0.00047662061636556853 -csa,tsmc28,16,22562,0.04244531185178619,62.496001,481.11,2.765712259551458e-05 -comparator,tsmc28,128,10121,0.10600846596186148,551.376001,2560.0,0.00012597569410137337 -priorityencoder,sky90,64,3770,0.2649169893899205,720.300013,283.102,6.1007957559681694e-05 -mult,sky90,8,1232,0.8116313116883117,1834.560034,953.397,0.0011055194805194807 -add,tsmc28,128,10,3.638641000000007,272.789995,918.55,0.0001339 -add,tsmc28,16,12212,0.08589166885031116,99.792001,541.144,3.807730101539469e-05 -mux2,sky90,16,4652,0.21329230696474635,115.640002,41.725,4.3121238177128115e-05 -priorityencoder,sky90,8,8483,0.12521182447247436,64.680001,49.589,1.4629258517034069e-05 -mult,tsmc28,32,2795,0.35777975313059035,3901.212023,26100.0,0.004221466905187835 -mux2,tsmc28,8,27245,0.03986398238208846,11.466,61.225,3.160212883097816e-06 -mult,sky90,64,619,1.6154428852988691,82141.641305,36600.0,0.08404200323101776 -add,sky90,32,2420,0.4132191404958678,1330.840024,582.809,0.0005206611570247934 -mux2,sky90,64,4071,0.25437589191844756,466.480009,106.771,0.00015131417342176368 -mux2,sky90,1,12288,0.08300820833333333,13.72,12.3,3.90625e-06 -priorityencoder,sky90,16,5537,0.1802842147372223,126.420002,65.822,1.8945277225934624e-05 -mux8,sky90,1,6114,0.17152604481517827,86.240001,79.616,1.625776905462872e-05 -comparator,sky90,64,3004,0.33252048069241014,1401.400026,500.904,0.00020972037283621838 -mult,tsmc28,64,2581,0.41287172607516465,18964.008028,134000.0,0.021443626501356065 -mux8,tsmc28,1,15356,0.06469512529304507,6.804,32.934,1.8566032821047149e-06 -priorityencoder,sky90,64,4262,0.24266362834350072,888.860015,460.967,8.305959643359925e-05 -flop,sky90,8,8046,0.11434435918468804,133.279999,64.8145,0.00019361794680586625 -mux2d,sky90,1,13482,0.07565897136923305,19.6,18.562,6.03767986945557e-06 -mux2,sky90,32,10,0.9805759999999992,222.460004,38.896,8.66e-05 -add,tsmc28,16,11751,0.08525914049868095,95.382001,501.111,3.625223385243809e-05 -flop,sky90,32,9270,0.11434386515641856,533.119995,259.258,0.0007742718446601942 -shiftleft,tsmc28,32,10,0.2576830000000001,108.108,362.436,3.12e-05 -csa,tsmc28,8,25995,0.040894936333910364,50.4,473.705,2.154260434698981e-05 -csa,tsmc28,64,25014,0.04049261253697929,419.327999,3860.0,0.00017346286079795317 -comparator,tsmc28,32,12139,0.08236710865804432,145.782,622.975,3.567015404893319e-05 -mult,tsmc28,64,2533,0.4110307879984208,19456.542013,137000.0,0.022258981444926967 -csa,tsmc28,64,26486,0.040226795514611495,419.327997,3910.0,0.00017428075209544665 -comparator,tsmc28,64,10863,0.09205360158335635,281.736,1150.0,6.526742152259966e-05 -mux8,tsmc28,32,11479,0.08648460240439063,162.288,783.316,4.564857565990069e-05 -shiftleft,sky90,16,3489,0.3163680759529951,644.840009,367.22,0.00018515333906563486 -csa,tsmc28,64,23053,0.04244530217325294,249.984005,1920.0,0.00011022426582223572 -mux4,tsmc28,128,13613,0.07641319341805627,307.943996,1470.0,9.696613531183428e-05 -add,tsmc28,64,10,1.836310999999995,135.701998,459.885,6.620000000000001e-05 -mux2,sky90,128,10,0.9859239999999971,882.000017,273.775,0.00041000000000000005 -mux2,sky90,64,4152,0.24532878420038537,472.360009,114.673,0.00015221579961464355 -mux2,tsmc28,128,16305,0.0613148800981294,190.008,1070.0,5.636307881018093e-05 -mux4,sky90,16,4392,0.22421770309653916,359.659999,419.855,0.0001006375227686703 -shiftleft,sky90,64,2291,0.44757461545176774,3929.800064,2900.0,0.0010781318201658664 -comparator,sky90,16,4340,0.2460047465437788,415.520007,287.169,8.80184331797235e-05 -mux2d,sky90,1,14275,0.07565853940455342,19.6,18.562,6.038528896672504e-06 -flop,sky90,32,8746,0.11434398307797851,533.119995,259.258,0.0007742396524125315 -flop,tsmc28,8,18818,0.04889161005420342,15.12,78.634,2.7231905622276542e-05 -flop,tsmc28,32,22091,0.048891303426734874,60.4799995,314.581,0.0001089312389660948 -shiftleft,sky90,16,3221,0.3100215892579944,568.400009,361.777,0.00015088481837938528 -flop,tsmc28,16,20045,0.04889175255674732,30.24,157.289,5.446994262908456e-05 -mux8,tsmc28,16,10,0.1332400000000007,55.314,209.828,9.77e-06 -add,sky90,64,2011,0.4972310422675286,2600.920051,698.518,0.0007419194430631526 -mux4,tsmc28,16,17146,0.06054764084917765,41.454,196.466,1.294762626851744e-05 -mux8,tsmc28,32,12650,0.08457538339920949,166.194,848.034,4.5138339920948614e-05 -mux8d,tsmc28,1,21936,0.045586162654996355,20.664,171.151,6.614697301239971e-06 -shiftleft,sky90,32,2654,0.37915475131876414,1722.840029,1260.0,0.00048342125094197433 -add,sky90,8,3658,0.27337042810278844,253.820005,154.438,0.00010825587752870422 -mult,sky90,32,732,1.366111218579235,22404.76038,10600.0,0.021352459016393443 -mult,sky90,16,1077,1.0042961067780873,8138.90015,5900.0,0.007317548746518106 -add,sky90,16,3118,0.3282264092366902,736.960014,480.371,0.000340602950609365 -shiftleft,tsmc28,8,10,0.12195599999999729,15.624,50.976,4.68e-06 -shiftleft,sky90,128,2022,0.5271028417408506,10014.620149,7320.0,0.0031434223541048465 -shiftleft,sky90,64,2380,0.45773406722689075,3919.020064,2710.0,0.0011453781512605042 -add,sky90,64,1968,0.5080270813008131,2562.700049,727.43,0.0008257113821138212 -mux4,tsmc28,16,17476,0.06042933211261158,44.603999,221.905,1.3962005035477226e-05 -mux4,tsmc28,16,17805,0.060904998876720025,41.454,205.138,1.2580735748385285e-05 -mult,sky90,64,657,1.5743890152207,91424.201493,51700.0,0.09910806697108068 -add,sky90,16,3060,0.33280138562091505,654.640013,402.982,0.00030130718954248366 -shiftleft,tsmc28,16,12512,0.083927273657289,133.055999,664.296,3.56457800511509e-05 -mux8,sky90,16,3499,0.2878559416976279,651.700012,325.896,0.0001434695627322092 -mux4,sky90,1,7633,0.12838308777675883,28.420001,22.994,6.406393292283505e-06 -shiftleft,tsmc28,8,14290,0.06990600629811056,40.95,293.744,1.3638908327501751e-05 -mux8,sky90,1,6349,0.1691041189163648,77.420002,50.656,1.2364151834934635e-05 -priorityencoder,tsmc28,8,31962,0.035221153494775045,9.198,37.469,1.8521994868906827e-06 -shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,0.00019552906110283157 -mux4,tsmc28,8,17062,0.05850077611065526,19.53,84.328,5.68514828273356e-06 -comparator,tsmc28,128,9746,0.10437919741432382,625.338001,2880.0,0.0001468294684998974 -add,tsmc28,16,12442,0.08824893039704226,113.274001,694.899,4.436585757916734e-05 -priorityencoder,tsmc28,64,14632,0.0725743570256971,137.214,427.879,1.797430289775834e-05 -mux8d,tsmc28,1,23253,0.04558620362963919,20.664,171.151,6.596998236786652e-06 -mux2,sky90,32,4602,0.21088882746631898,368.480007,245.044,0.00013450673620165146 -flop,tsmc28,16,19227,0.048891193998023615,30.24,157.289,5.4465075154730334e-05 -flop,sky90,16,9096,0.11434443447669304,266.5599975,129.629,0.0003871481970096746 -flop,sky90,128,8221,0.1143447031991242,2132.4799805,1035.0,0.003096338644933706 -mult,tsmc28,8,5000,0.19998100000000002,444.150001,3260.0,0.000307 -mult,sky90,16,977,1.0235154534288637,7283.360133,4580.0,0.006243602865916069 -flop,tsmc28,128,19636,0.04889186901609289,241.919998,1260.0,0.0004356284375636586 -shiftleft,sky90,128,1945,0.5336378174807198,8909.180133,5830.0,0.002820051413881748 -comparator,sky90,64,3192,0.3360462080200501,1335.740026,391.156,0.00017794486215538848 -comparator,sky90,8,4742,0.21876148460565162,196.980003,82.494,3.829607760438633e-05 -mux2d,tsmc28,1,10,0.029228000000003362,0.882,4.502,2.6400000000000003e-07 -flop,tsmc28,64,21682,0.04889120653076284,120.959999,630.0,0.0002178535190480583 -mux4d,sky90,1,9895,0.1030771419909045,51.940001,49.18,1.3633148054573016e-05 -flop,tsmc28,32,21682,0.04889120653076284,60.4799995,314.581,0.00010892675952402915 -mult,sky90,8,1206,0.8280323963515754,1868.860035,988.885,0.0011044776119402983 -priorityencoder,tsmc28,64,12975,0.07704429094412331,114.912,326.132,1.5221579961464355e-05 -mux8,sky90,16,3430,0.2957901895043732,640.920012,234.96,0.00012128279883381925 -mux4,sky90,1,7945,0.12749332410320954,28.420001,23.453,6.4191315292636886e-06 -mux2,tsmc28,8,27837,0.039864411287135824,11.466,61.225,3.1612601932679526e-06 -mult,sky90,64,670,1.561193313432836,92421.841521,53500.0,0.10142388059701492 -priorityencoder,tsmc28,8,33842,0.033048081023580166,11.34,48.981,2.0950298445718337e-06 -shiftleft,sky90,8,10,0.705528000000001,130.340003,10.712,2.4439999999999996e-05 -comparator,sky90,128,2737,0.3784935367190354,2763.600053,937.534,0.00036244062842528317 -priorityencoder,tsmc28,128,11440,0.0874065874125874,317.646,973.649,4.117132867132867e-05 -mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,0.01854602510460251 -mux2d,tsmc28,1,54934,0.018931662576910473,3.276,26.574,9.265664251647432e-07 -csa,sky90,128,5931,0.1654056314280897,4264.960083,2470.0,0.002178553363682347 -csa,sky90,8,5878,0.16847689316093908,282.240005,197.88,0.0001439265056141545 -mux4,sky90,16,10,0.5659639999999939,219.520004,14.317,4.940000000000001e-05 -csa,tsmc28,64,24524,0.040663382319360626,419.327999,3860.0,0.00017342195400424075 -shiftleft,sky90,32,2604,0.38592357757296464,1571.920027,1010.0,0.0004178187403993856 -shiftleft,tsmc28,64,7611,0.1313867793982394,518.489997,2380.0,0.00016371041913020628 -shiftleft,sky90,128,2060,0.5385058932038835,10222.380152,7230.0,0.0031378640776699033 -csa,tsmc28,64,24034,0.04077672239327619,395.135998,3790.0,0.00017113256220354495 -priorityencoder,sky90,8,8163,0.12799298137939483,56.840001,37.422,1.1674629425456327e-05 -priorityencoder,sky90,128,3545,0.30223844710860365,1650.320031,568.632,0.00011565585331452751 -mux4,sky90,16,4661,0.2587782347135808,443.940009,202.299,0.00010319673889723235 -mux8d,tsmc28,1,10,0.06624600000000669,5.04,17.289,1.224e-06 -mux2d,sky90,1,14010,0.07565858743754461,19.6,18.562,6.038543897216275e-06 -mux8,sky90,16,3225,0.30794551937984493,805.560013,497.282,0.00018387596899224805 -priorityencoder,tsmc28,8,33216,0.033047973025048166,11.34,48.981,2.0953757225433523e-06 -mux8,sky90,128,10,1.955451999999994,3207.540062,224.085,0.000581 -mux8,tsmc28,8,13676,0.07518479555425563,51.281999,237.31,1.3044749926879204e-05 -mult,sky90,16,1037,1.0221291542912248,7597.940137,5000.0,0.006758919961427194 -mux2,sky90,8,5723,0.18835053136466887,64.680001,21.541,1.930805521579591e-05 -flop,tsmc28,32,20454,0.04889119262735895,60.4799995,314.5785,0.00010891757113523028 -mux4,sky90,32,3965,0.26433580958385877,694.820013,296.704,0.00017225725094577554 -priorityencoder,sky90,8,8323,0.12521198474107895,62.720001,47.365,1.3949297128439266e-05 -mux4d,tsmc28,1,32579,0.030080619233248413,4.158,30.464,1.2799656220264588e-06 -mux2,sky90,16,5246,0.20207342584826535,119.560002,32.354,3.8810522302706825e-05 -mux2,sky90,128,3684,0.2709390825190011,1077.020021,395.706,0.00035640608034744845 -shiftleft,tsmc28,128,6602,0.1514602517418964,1247.021993,5430.0,0.00039003332323538325 -add,tsmc28,16,10,0.4766620000000046,32.886,116.238,1.565e-05 -comparator,sky90,8,4548,0.2197028689533861,190.120003,121.871,4.243623570800352e-05 -mult,tsmc28,16,3895,0.26150940949935814,1844.136,13600.0,0.0015527599486521181 -csa,tsmc28,8,23543,0.04244547041583485,31.248001,240.54,1.3859745996686912e-05 -shiftleft,tsmc28,8,14594,0.06865231012744964,34.398,218.032,1.1299164040016445e-05 -priorityencoder,tsmc28,32,17781,0.06230780653506551,56.826,201.644,8.762161858163208e-06 -mux2,sky90,64,3908,0.25440036335721594,471.380009,138.856,0.00015916069600818833 -flop,sky90,32,8396,0.11434433539780849,533.119995,259.258,0.0007741781800857552 -mult,tsmc28,32,2735,0.3656287129798903,3643.290023,23700.0,0.0038815356489945154 -shiftleft,tsmc28,8,15810,0.06615910689437064,48.762,352.527,1.6299810246679318e-05 -csa,sky90,32,5638,0.16671386094359703,1160.320023,826.559,0.0005954239091876552 -add,sky90,8,3878,0.26842487880350696,273.420005,147.185,0.00012325941206807632 -csa,sky90,128,5568,0.17497270114942529,4635.40009,3290.0,0.002380387931034483 -mux2,sky90,128,4084,0.2551629823702253,1146.600021,479.203,0.00038687561214495594 -mux4,sky90,64,10,1.1701199999999972,834.960016,55.508,0.0002097 -priorityencoder,tsmc28,8,30709,0.032285743527955976,8.19,32.782,1.6770327916897328e-06 -priorityencoder,sky90,16,5773,0.16977016282695304,136.220003,77.243,2.1773774467348e-05 -comparator,tsmc28,128,9559,0.10898145329009311,543.06,2390.0,0.00012511769013495136 -priorityencoder,tsmc28,16,22529,0.04496223423143504,30.114,121.215,5.3974876825425005e-06 -mux8,tsmc28,8,12902,0.07750336319950395,44.604,214.286,1.17501162610448e-05 -shiftleft,sky90,32,2403,0.4160544835622139,1370.040025,695.62,0.00038077403245942573 -mult,tsmc28,8,5100,0.19653543137254903,514.458001,3810.0,0.0003413725490196079 -comparator,tsmc28,8,10,0.138023000000004,14.994,49.297,3.45e-06 -comparator,sky90,64,3380,0.3280749881656805,1322.020025,392.984,0.00018047337278106508 -comparator,sky90,128,2576,0.38793975776397516,2632.280051,550.607,0.0003796583850931677 -comparator,tsmc28,8,17763,0.05672979671226708,37.296,188.549,9.902606541687779e-06 -mux8d,sky90,1,7158,0.13412482788488406,85.260001,40.078,1.5129924559932944e-05 -flop,tsmc28,128,21682,0.04889120653076284,241.919998,1260.0,0.0004356378562863204 -shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,0.000566566994162039 -mux8,sky90,32,3305,0.32156986081694405,1068.20002,336.387,0.00022208774583963692 -priorityencoder,tsmc28,128,11669,0.08626314628502871,290.808,928.813,3.890650441340304e-05 -flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.00010908 -add,tsmc28,64,8206,0.12185605215695831,388.836003,1770.0,0.0001409943943456008 -priorityencoder,tsmc28,64,10,0.4980240000000009,55.313999,146.464,7.96e-06 -mult,tsmc28,64,2199,0.45474816007276037,12441.870079,76300.0,0.013955434288312871 -flop,sky90,64,9445,0.11434412493382742,1066.23999,520.0,0.0015483324510322922 -mult,tsmc28,8,4900,0.20404963265306122,402.318001,2820.0,0.00027326530612244897 -mux2,sky90,128,4244,0.255888767200754,1307.320024,674.031,0.00042412818096135724 -shiftleft,sky90,16,3422,0.30792076797194623,625.240012,393.788,0.0001604324956165985 -add,sky90,8,10,1.0608979999999946,103.879999,14.319,3.76e-05 -mult,sky90,16,937,1.0669988591248665,6421.94011,3210.0,0.0051366061899679825 -mux8,sky90,8,3800,0.2700248947368421,316.540006,115.77,6.139473684210526e-05 -csa,sky90,8,10,0.2641830000000027,117.599998,13.811,4.23e-05 -add,sky90,32,2517,0.4132753710766786,1551.340027,760.812,0.0006495828367103694 -mult,sky90,32,717,1.394444139470014,21700.140365,9390.0,0.018781032078103208 -shiftleft,sky90,8,4500,0.23008222222222222,262.640004,204.113,7.422222222222221e-05 -mux8,tsmc28,64,11014,0.09067453550027238,304.163999,1460.0,8.498274922825495e-05 -shiftleft,tsmc28,128,6742,0.14831493948383268,1348.955989,6120.0,0.00040418273509344407 -comparator,tsmc28,16,14560,0.07291231868131869,65.394,294.431,1.7046703296703294e-05 -shiftleft,sky90,32,2303,0.4341202396873643,1227.940022,465.632,0.00030916196265740335 -mux8,tsmc28,1,17359,0.06011100501180944,9.072,57.908,2.793939743072758e-06 -flop,sky90,8,9096,0.11434443447669304,133.279999,64.8145,0.00019359608619173263 -mux8d,tsmc28,1,22814,0.045585734285964755,20.664,171.151,6.601209783466293e-06 -priorityencoder,tsmc28,32,16793,0.06043762144941345,66.654,245.564,1.0272137200023819e-05 -mux2,tsmc28,16,18767,0.053046021580433735,15.75,88.025,5.142004582511856e-06 -priorityencoder,tsmc28,8,30082,0.033050470580413535,8.946,35.541,1.8349843760388272e-06 -mux2d,sky90,1,13217,0.07565913467503972,19.6,18.562,6.037678747068169e-06 -add,tsmc28,128,7643,0.13338867591259976,1025.51401,5130.0,0.0003834881590998299 -mux2,tsmc28,32,19336,0.055856004551096405,32.130001,171.146,9.898634671079852e-06 -shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,0.00010180452696359654 -mux8,sky90,8,3370,0.29463590504451037,279.300005,102.669,5.480712166172106e-05 -mux2,tsmc28,8,30206,0.03374500542938489,16.758,114.743,5.459180295305568e-06 -priorityencoder,sky90,32,4883,0.2067641359819783,376.320006,232.357,4.872004915011264e-05 -mux4,tsmc28,16,16486,0.06057952759917506,39.438,186.231,1.2556108213029237e-05 -mux8,tsmc28,128,10055,0.09943300845350571,719.333996,3300.0,0.00016489308801591248 -mux4,tsmc28,16,16157,0.06161267809618122,39.06,181.31,1.242804976171319e-05 -mux8,sky90,128,2613,0.3825318752391887,4084.640077,1310.0,0.0008308457711442787 -mux2,sky90,16,5147,0.20207393471925392,119.560002,32.354,3.8915873324266564e-05 -shiftleft,sky90,8,4587,0.22936441225201656,246.960005,191.922,6.562023108785698e-05 -mux8,tsmc28,128,11312,0.0964546973125884,642.473997,3330.0,0.00017494695898161245 -mult,sky90,64,645,1.552430596899225,92630.581541,51300.0,0.09767906976744187 -csa,sky90,64,5689,0.16671381683951486,2320.640045,1650.0,0.0011935313763403058 -mux4,sky90,32,4042,0.2655582761009401,686.980013,310.401,0.00017491340920336467 -mult,tsmc28,32,2854,0.35038242396636304,4257.414022,28900.0,0.004601261387526279 -shiftleft,sky90,16,10,0.8858720000000062,350.840007,23.053,5.5100000000000004e-05 -mux8,sky90,32,3178,0.3140553102580239,1319.079995,670.683,0.0003577721837633732 -flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.0007723000000000001 -add,sky90,32,2323,0.43015783039173483,1235.780024,448.937,0.0004567369780456306 -priorityencoder,tsmc28,64,13528,0.07389375694855116,136.584,433.326,1.848018923713779e-05 -shiftleft,tsmc28,32,8820,0.11336868480725625,202.986,923.446,6.020408163265305e-05 -mux4,sky90,16,4302,0.23042302324500233,358.679999,417.161,9.9721059972106e-05 -shiftleft,tsmc28,32,9971,0.10217084344599339,306.179999,1470.0,8.78547788586902e-05 -mux8,tsmc28,128,10683,0.09720766479453338,908.333989,4170.0,0.00018440512964523076 -mult,sky90,8,10,2.0858690000000024,1009.399998,188.656,0.00028900000000000003 -shiftleft,sky90,16,3624,0.3116181898454746,610.540011,408.291,0.0001705298013245033 -csa,tsmc28,128,10,0.06758100000000411,274.175995,917.068,0.00011559999999999999 -mux8,tsmc28,32,11010,0.09082652134423251,200.717998,917.695,4.695731153496821e-05 -mux2,sky90,8,5405,0.18835087604070305,64.680001,21.541,1.9315448658649397e-05 -add,sky90,16,2765,0.3615926528028933,553.70001,272.075,0.00024267631103074144 -add,tsmc28,16,11060,0.09034091320072332,70.434,348.689,2.631103074141049e-05 -priorityencoder,tsmc28,16,22104,0.04620368041983351,25.956,96.244,4.546688382193269e-06 -add,sky90,32,2468,0.40496338573743923,1440.600027,714.057,0.0006580226904376014 -priorityencoder,tsmc28,16,19978,0.04995306056662329,17.514,56.066,3.2535789368305136e-06 -mux2,sky90,16,4949,0.2020740224287735,119.560002,32.354,3.893715902202465e-05 -comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,0.0002048577820389901 -priorityencoder,tsmc28,32,16464,0.06071258114674442,61.614,207.499,9.323372206025267e-06 -mux2,tsmc28,32,18978,0.05585559142164612,32.130001,171.146,9.900937928127306e-06 -priorityencoder,tsmc28,8,31335,0.031912196106590074,8.316,34.836,1.716929950534546e-06 -priorityencoder,sky90,16,6362,0.1666292756994656,185.220003,132.902,3.325998113800692e-05 -shiftleft,tsmc28,16,11332,0.08822167596187787,107.603999,530.934,3.1327214966466645e-05 -mult,tsmc28,32,2914,0.3431698991077557,4572.666019,32100.0,0.004948181194234729 -mux8,sky90,8,10,0.5354459999999932,234.220005,15.482,3.2890000000000005e-05 -comparator,sky90,32,3818,0.27776223415400736,694.820013,315.258,0.00010371922472498691 -flop,sky90,8,9445,0.11434412493382742,133.279999,64.8145,0.00019358920063525676 -mux4d,sky90,1,9313,0.10687378513905293,53.900001,55.277,1.4087834210243744e-05 -mux4,tsmc28,128,13090,0.07636619404125286,294.335997,1420.0,9.358288770053477e-05 -priorityencoder,sky90,128,3205,0.31198348049922,1572.900029,499.236,0.00010826833073322932 -shiftleft,tsmc28,128,7164,0.14037182300390844,2240.027998,10800.0,0.0006394472361809045 -mux8,sky90,8,3298,0.29833006913280774,249.900005,75.262,4.993935718617343e-05 -mux8,sky90,8,3514,0.28218398178713716,245.980005,77.05,4.9516220830961866e-05 -shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,0.0029008914525432616 -mult,tsmc28,16,3514,0.2845729817871372,1120.014004,7380.0,0.001008537279453614 -csa,sky90,8,5758,0.16536141368530738,266.560005,154.202,0.00013650573115665162 -shiftleft,sky90,8,3981,0.25095116754584273,259.700005,172.787,7.309721175584023e-05 -priorityencoder,sky90,64,4180,0.25021144976076554,817.320015,379.7,7.320574162679427e-05 -mux4d,sky90,1,10090,0.10307702775024777,51.940001,49.18,1.3637264618434093e-05 -comparator,tsmc28,64,10,0.28591199999999617,134.946,464.047,2.94e-05 -csa,sky90,64,10,0.2641830000000027,940.799988,110.49,0.0003369 -flop,tsmc28,8,21682,0.04889120653076284,15.12,78.635,2.7239184577068535e-05 -mult,tsmc28,128,1756,0.5694750820045558,38955.924167,213000.0,0.041384965831435076 -mux2,sky90,32,5303,0.21904050612860645,233.240005,55.502,7.542900245144259e-05 -priorityencoder,sky90,128,10,2.830100999999999,891.800017,56.107,4.24e-05 -mux8,tsmc28,16,12264,0.08147446510110894,128.771998,548.714,2.666340508806262e-05 -shiftleft,tsmc28,64,8438,0.12204549561507466,993.761998,5040.0,0.00027885754918227065 -mux4,tsmc28,32,16412,0.06514902607847917,89.837999,413.021,2.5834755057275164e-05 -mux8,tsmc28,64,10133,0.09847845682423764,312.353999,1540.0,8.516727523931708e-05 -mux2,tsmc28,64,19682,0.0517638447312265,99.036,577.742,2.9976628391423636e-05 -mux8,sky90,1,5409,0.18314205675725645,69.580001,41.904,1.212793492327602e-05 -mux2,tsmc28,1,47818,0.020583627044209293,2.016,13.728,5.876448199422811e-07 -add,tsmc28,64,8862,0.12251134506883322,461.034004,2360.0,0.000176596705032724 -mux4,tsmc28,1,27830,0.038088446999640674,5.292,41.928,1.710384477182896e-06 -shiftleft,tsmc28,32,10354,0.10129703148541626,390.725998,1980.0,0.00010633571566544331 -mux4,sky90,64,3785,0.2729937926023778,919.240018,338.811,0.00028084544253632757 -mux4,tsmc28,128,12566,0.07951181855801369,277.199998,1300.0,8.95272958777654e-05 -mult,sky90,128,493,2.028396565922921,264363.823149,77300.0,0.20879107505070993 -priorityencoder,tsmc28,128,10525,0.09499787648456057,223.902,621.526,2.888361045130641e-05 -priorityencoder,tsmc28,8,10,0.05780799999999431,4.284,14.558,8.620000000000001e-07 -flop,sky90,128,8571,0.11434450029168125,2132.4799805,1035.0,0.0030963131489907827 -comparator,tsmc28,128,9184,0.10887901742160278,507.15,2030.0,0.00011378484320557491 -add,tsmc28,16,10599,0.09414852344560808,71.064001,359.005,2.887064817435607e-05 -mux4,sky90,1,7166,0.13686586491766678,26.460001,19.975,5.4563215182807695e-06 -mux4,sky90,8,10,0.3993300000000062,116.620002,9.077,2.3939999999999998e-05 -mux4d,tsmc28,1,33244,0.030080616051016723,4.158,30.464,1.2811334376128022e-06 -priorityencoder,tsmc28,16,21253,0.04703118086858326,21.672,78.026,4.008845810003294e-06 -priorityencoder,sky90,8,7843,0.12626623128904757,49.980001,32.378,1.0850439882697946e-05 -mux4d,sky90,1,9119,0.1094081470555982,48.020001,46.22,1.3071608729027306e-05 -mux2,tsmc28,64,17082,0.05841015443156539,84.041999,419.594,2.3650626390352418e-05 -mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,0.0063761283851554666 -add,sky90,32,2614,0.42499447054322875,1406.300027,636.339,0.000598699311400153 -mult,sky90,8,1258,0.794436559618442,1926.680037,1050.0,0.001279014308426073 -mux2,sky90,8,5087,0.19261551641438962,70.560001,12.959,1.8812659720857085e-05 -csa,tsmc28,32,23053,0.04244530217325294,124.992002,962.249,5.5133822062204484e-05 -mult,tsmc28,8,10,0.5050959999999947,142.631998,499.628,6.35e-05 -priorityencoder,tsmc28,32,16134,0.06174490987975703,54.054,163.63,8.478988471550762e-06 -mux8,tsmc28,64,10,0.24052399999999352,206.513999,803.317,4.04e-05 -add,sky90,8,3804,0.2758531777076761,257.740005,154.606,0.00012381703470031545 -csa,tsmc28,8,25505,0.04036599843168006,50.4,475.36,2.136835914526563e-05 -mux8d,sky90,1,7903,0.13242722750854108,89.180001,45.284,1.6031886625332153e-05 -mux4,sky90,64,3562,0.28061815665356543,1076.040021,276.31,0.0002768107804604155 -mux4d,sky90,1,8925,0.11149681792717087,50.960001,49.104,1.3602240896358545e-05 -mux8,sky90,32,3369,0.3275659833778569,1058.400021,328.34,0.0002143069159988127 -flop,sky90,16,8221,0.1143447031991242,266.5599975,129.629,0.00038711835543121277 -shiftleft,sky90,64,10,1.4229579999999942,2117.780041,153.751,0.00036299999999999993 -flop,sky90,128,9096,0.11434443447669304,2132.4799805,1035.0,0.003096470976253298 -mux2,tsmc28,8,29614,0.03374481252110488,16.758,114.564,5.436617815897886e-06 -shiftleft,sky90,128,10,2.072533000000007,4988.200097,311.979,0.0009559999999999999 -priorityencoder,sky90,32,4692,0.21690972975277067,370.440007,198.644,4.471440750213128e-05 -comparator,sky90,8,5129,0.20861177968414896,224.420003,142.569,5.790602456619224e-05 -add,sky90,32,2372,0.42075916020236087,1269.100024,537.997,0.0005189713322091062 -mux2,sky90,32,5203,0.21903980953296176,237.160005,57.793,7.68787238131847e-05 -shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,0.001144802541988198 -mult,tsmc28,8,5401,0.1935488979818552,545.076,3950.0,0.0003588224402888354 -mult,sky90,32,809,1.2962689431396788,27029.380482,17800.0,0.027053152039555006 -mult,tsmc28,32,3033,0.3295775611605671,6343.721998,47200.0,0.0063033300362677225 -mux4,sky90,32,10,0.8744200000000006,423.360008,27.792,0.00010449999999999999 -flop,sky90,64,8746,0.11434398307797851,1066.23999,520.0,0.001548364966841985 -flop,tsmc28,16,18818,0.04889161005420342,30.24,157.289,5.4461154214050376e-05 -priorityencoder,sky90,16,5419,0.18031289223103894,125.440002,50.563,1.8305960509319066e-05 -mult,sky90,64,581,1.721128395869191,68673.500832,21700.0,0.0573459552495697 -priorityencoder,sky90,64,4344,0.2409075782688766,890.820015,461.143,9.231123388581953e-05 -comparator,sky90,64,3067,0.36997951613955005,1251.460024,221.953,0.00014150635800456472 -mux2,tsmc28,16,19150,0.05221932114882506,15.75,88.448,5.159268929503916e-06 -mux8,sky90,1,6232,0.16910413093709886,77.420002,50.656,1.2355584082156611e-05 -priorityencoder,sky90,32,10,0.8791959999999932,196.980004,12.728,1.1870000000000002e-05 -comparator,tsmc28,16,13736,0.07273839778683751,54.558,250.167,1.4349155503785673e-05 -comparator,sky90,8,5032,0.2153801399046105,244.020004,169.251,6.279809220985691e-05 -comparator,tsmc28,64,11732,0.09292495874531197,284.886,1320.0,6.657006478008864e-05 -mult,tsmc28,64,10,4.225143000000003,6729.029936,23600.0,0.00606 -shiftleft,tsmc28,64,8272,0.12086674854932303,1041.263998,5460.0,0.0002895309477756286 -csa,sky90,128,6173,0.16536178810950916,5394.900105,3330.0,0.0024791835412279286 -mux8,tsmc28,1,16357,0.059911905117075254,7.182,38.342,1.8878767500152838e-06 -mux8d,tsmc28,1,21059,0.04721963559523244,6.804,34.408,1.8092027161783562e-06 -mux8d,sky90,1,8052,0.1324277471435668,91.140001,43.658,1.6008445106805763e-05 -mux2,tsmc28,8,29021,0.03376780641604355,16.884,113.726,5.440887633093277e-06 -comparator,tsmc28,16,10,0.16839600000000132,29.736,97.848,6.8e-06 -add,tsmc28,64,7877,0.12692688523549575,367.920002,1700.0,0.0001405357369556938 -mux4,sky90,128,3294,0.3065102707953855,2226.560042,1070.0,0.0006715239829993928 -priorityencoder,tsmc28,16,10,0.11891900000000533,10.962,32.132,1.91e-06 -csa,sky90,8,5518,0.1796730815512867,280.280005,194.202,0.00014244291409931136 -mux2,sky90,1,12529,0.08300882959533881,13.72,12.3,3.902945167212068e-06 -shiftleft,sky90,8,4674,0.2294615079161318,243.040005,191.378,6.546854942233633e-05 -mux2,tsmc28,16,19916,0.0524708857200241,15.372,84.373,5.0461940148624224e-06 -flop,sky90,128,8046,0.11434435918468804,2132.4799805,1035.0,0.0030963211533681333 -add,tsmc28,8,13007,0.07612567909587145,30.366,161.839,1.1855154916583379e-05 -mult,sky90,16,10,5.005561999999998,3869.040009,641.517,0.0016879999999999998 -comparator,tsmc28,64,10428,0.09588966551591867,260.82,1030.0,5.9742999616417336e-05 -mux2,sky90,32,5003,0.19908807195682593,375.340008,259.372,0.00013671796921846892 -mult,tsmc28,16,10,1.0536270000000059,539.405992,1830.0,0.000368 -priorityencoder,tsmc28,64,12699,0.07861935798094338,104.706,306.577,1.392235609103079e-05 -mux2,sky90,1,13011,0.08300904319422028,13.72,12.3,3.9043885942663895e-06 -mult,sky90,128,555,1.9449018018018018,305166.124288,139000.0,0.31631891891891895 -mux2,sky90,16,4850,0.20207356701030926,119.560002,32.354,3.884536082474227e-05 -shiftleft,sky90,8,4327,0.23025600254217704,259.700005,196.451,7.534088282874971e-05 -comparator,tsmc28,8,18105,0.058020360950013804,35.154,195.216,9.64374482187241e-06 -mux8,sky90,1,5879,0.16984595526450078,75.460001,60.639,1.4237115155638713e-05 -comparator,sky90,64,10,1.1199110000000019,1008.42002,127.626,8.309999999999999e-05 -priorityencoder,sky90,32,4405,0.22696975595913735,348.880006,159.17,4.079455164585698e-05 -mux8,sky90,64,3088,0.3305971968911917,2143.260041,777.3,0.00047409326424870465 -mux2,sky90,8,5511,0.18835127127563056,64.680001,21.541,1.930684086372709e-05 -mult,tsmc28,16,3590,0.2785115320334262,1216.278005,8230.0,0.0011376044568245124 -flop,tsmc28,8,19227,0.048891193998023615,15.12,78.634,2.7232537577365167e-05 -mux2,sky90,1,12047,0.08300821781356355,13.72,12.3,3.909687059018843e-06 -priorityencoder,tsmc28,16,19553,0.05112504710274639,17.136,56.184,3.283383623996318e-06 -mux8,tsmc28,128,10,0.39436299999999846,411.011997,1610.0,8.53e-05 -add,sky90,128,1810,0.552345187845304,5897.640112,1960.0,0.0018342541436464088 -mux2,sky90,16,10,0.6069949999999977,113.680002,19.729,3.86e-05 -mux2,sky90,16,5345,0.20207373900841907,119.560002,32.354,3.889616463985033e-05 -mult,sky90,8,1284,0.778472199376947,2067.800038,1220.0,0.0012710280373831777 -mux4d,sky90,1,10478,0.10307706069860662,51.940001,49.18,1.3638098873830883e-05 -shiftleft,sky90,64,2027,0.492941911198816,2849.840051,1050.0,0.0006729156388751849 -csa,tsmc28,32,26486,0.040226795514611495,209.663999,1960.0,8.717813184323794e-05 -mux4,tsmc28,128,12828,0.07792147458684127,296.603998,1450.0,9.588400374181478e-05 -flop,tsmc28,128,18818,0.04889161005420342,241.919998,1260.0,0.00043562015091933254 -mux2,tsmc28,8,10,0.08170300000000452,7.56,38.026,2.41e-06 -flop,sky90,16,8571,0.11434450029168125,266.5599975,129.629,0.0003871193559677984 -mux8d,tsmc28,1,21498,0.04628595497255559,17.514,137.759,5.730765652618848e-06 -priorityencoder,sky90,16,5655,0.1753866595932803,133.280002,84.414,2.0176834659593283e-05 -mux2,tsmc28,64,17454,0.057247457087200644,79.254,433.639,2.3719491234101066e-05 -mux4,sky90,128,2914,0.34151589910775565,1962.940038,488.841,0.0005243651338366507 -comparator,sky90,32,3602,0.276293542476402,690.900013,315.709,0.00010771793448084398 -add,sky90,128,1960,0.5343460816326531,6824.72013,2820.0,0.0024168367346938777 -mux8d,tsmc28,1,23691,0.04558612198725254,20.664,171.151,6.631210164197375e-06 -mux2,tsmc28,8,31983,0.03374461038676797,16.758,114.743,5.449770190413657e-06 -mux2,sky90,64,3745,0.26633369692923897,459.620009,146.5,0.00016555407209612816 -mux2,sky90,32,4802,0.20550356393169514,369.460007,247.031,0.00013473552686380676 -shiftleft,tsmc28,128,7585,0.14153315622940013,2560.949989,13000.0,0.0007444957152274226 -comparator,sky90,64,3255,0.32338666205837174,1354.360026,436.796,0.00018525345622119816 -mux2,tsmc28,16,20299,0.0524705105177595,15.372,84.373,5.039657125966796e-06 -shiftleft,tsmc28,8,16418,0.06592875867949811,61.488,451.858,2.028261664027287e-05 -shiftleft,sky90,64,2159,0.4631083969430292,3537.800054,2160.0,0.0010490968040759612 -mux4,tsmc28,1,28355,0.038088148651031564,5.292,41.928,1.7069299947099276e-06 -add,sky90,64,2225,0.466599202247191,2894.920056,1040.0,0.0009842696629213483 -csa,tsmc28,16,10,0.06758100000000411,34.271999,114.459,1.4410000000000001e-05 -comparator,sky90,128,2898,0.39185256245686684,2667.560051,751.018,0.00031573498964803314 -comparator,tsmc28,64,10211,0.09791160101850946,246.708,1010.0,5.7389090196846535e-05 -mux4,tsmc28,64,10,0.17948199999999304,106.847999,391.422,2.7700000000000002e-05 -priorityencoder,tsmc28,64,14356,0.07864628615213151,128.268,410.848,1.6996377821120088e-05 -mux8d,sky90,1,7456,0.13268717167381974,88.200001,42.371,1.636266094420601e-05 -mux2,sky90,32,5103,0.2190401589261219,237.160005,57.793,7.681755829903978e-05 -mux8,tsmc28,16,12999,0.07783899453804138,166.823999,864.695,3.3387183629509965e-05 -comparator,tsmc28,32,11410,0.08759541893076249,133.056,523.589,3.242769500438212e-05 -add,tsmc28,128,7499,0.13434411348179756,1029.54601,5030.0,0.0003831177490332045 -mult,sky90,16,957,1.044805079414838,6996.220129,4080.0,0.005647857889237199 -csa,sky90,8,5998,0.16669324074691563,332.220006,234.084,0.00017305768589529844 -csa,sky90,16,5689,0.16671381683951486,580.160011,413.956,0.0002984707329934962 -add,tsmc28,128,6922,0.1444319170759896,814.212006,3770.0,0.0003185495521525571 -flop,sky90,64,8046,0.11434435918468804,1066.23999,520.0,0.0015482848620432515 -mux8,sky90,32,3115,0.32077628731942215,1099.560021,345.681,0.00020513643659711076 -mult,sky90,16,1017,1.006137169124877,7719.460138,5170.0,0.006812192723697148 -comparator,tsmc28,128,9933,0.10677251927917045,498.834,2190.0,0.0001120507399577167 -add,sky90,16,2824,0.35254064872521246,562.520011,272.42,0.00022839943342776206 -mux2,sky90,128,4324,0.2587083450508788,1099.560018,533.373,0.0003878353376503238 -mux4,tsmc28,8,16699,0.05960982537876519,20.16,94.804,5.9764057728007666e-06 -comparator,tsmc28,8,16738,0.0595542944198829,34.524,177.167,9.355956506153663e-06 -comparator,sky90,32,3458,0.2884604997108155,709.520014,223.226,9.485251590514749e-05 -csa,sky90,64,6537,0.1653613709652746,2947.840057,1740.0,0.001271837234205293 -mux2,tsmc28,64,18939,0.05314609826284387,84.797999,432.492,2.3971698611331112e-05 -mux2,sky90,64,10,0.9630970000000048,444.920009,77.207,0.00016800000000000002 -flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,2.7246000000000003e-05 -comparator,tsmc28,8,17422,0.05733769130983814,35.784,170.595,9.488003673516243e-06 -flop,tsmc28,8,20864,0.048891447852760735,15.12,78.634,2.723590874233129e-05 -mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,0.05001177730192719 -add,sky90,128,10,13.960425999999998,1867.879976,221.488,0.000653 -mux2,tsmc28,64,10,0.18685899999999833,56.826002,290.226,2.082e-05 -flop,sky90,32,8046,0.11434435918468804,533.119995,259.258,0.0007741735023614218 -priorityencoder,tsmc28,8,28829,0.03459129404419161,6.174,23.212,1.3423982795102154e-06 -mux2d,tsmc28,1,49652,0.019658175622331426,2.142,15.112,6.021912511077097e-07 -mux2,sky90,32,4150,0.23922785542168676,230.300004,85.432,8.602409638554217e-05 -mux8d,sky90,1,6859,0.1408138474996355,110.740002,89.514,2.4901589152937747e-05 -mux8,tsmc28,128,10893,0.09798407472688883,830.591987,3990.0,0.00018727623244285321 -csa,sky90,16,6537,0.1653613709652746,736.960014,439.259,0.00031910662383356276 -mult,sky90,128,482,2.0746737966804982,251002.502634,63000.0,0.17444190871369292 -mux8,sky90,32,3051,0.32773938970829236,1253.419994,557.88,0.0003352999016715831 -mux2,sky90,1,11806,0.08300869354565475,13.72,12.3,3.896323903100119e-06 -priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,0.0001261366969785861 -mux2,tsmc28,32,16471,0.060023767895088335,29.484001,155.318,9.586546050634447e-06 -mux2,sky90,8,5193,0.19048991700365878,59.780001,16.177,1.919892162526478e-05 -add,sky90,64,2182,0.463233142071494,2916.480057,1140.0,0.0010664527956003667 -mux2,sky90,1,11083,0.08482327754218172,11.76,9.281,3.7264278624921055e-06 -mux8,tsmc28,1,18027,0.06011034703500305,9.072,57.908,2.7958062905641537e-06 -mux4d,tsmc28,1,35239,0.029485649763046625,6.426,53.388,1.9552200686739124e-06 -mux4,sky90,8,4847,0.21051618341242007,160.720002,75.759,4.120074272746029e-05 -mux8,sky90,64,3269,0.3220959461609055,2250.080042,750.807,0.0004717038849801162 -flop,tsmc28,64,18818,0.04889161005420342,120.959999,630.0,0.00021784993091720692 -flop,tsmc28,128,21273,0.0488919443425939,241.919998,1260.0,0.00043564612419498897 -mult,tsmc28,64,2247,0.44503082821539836,13239.198086,83600.0,0.015089452603471295 -mux4,sky90,8,4754,0.2126581796381994,145.040003,62.861,3.9103912494741275e-05 -mux4d,tsmc28,1,31250,0.03008,4.158,30.468,1.2819199999999999e-06 -shiftleft,tsmc28,128,10,0.6244959999999935,621.683997,1970.0,0.00022 -comparator,sky90,128,2844,0.3556604402250352,2858.660053,1040.0,0.00037095639943741205 -flop,tsmc28,32,18818,0.04889161005420342,60.4799995,314.5785,0.00010892230842810075 -mux4,sky90,128,3421,0.30357918941829876,2183.440041,857.282,0.0006033323589593687 -add,sky90,128,2036,0.5260351355599214,6531.700127,2540.0,0.0022264243614931235 -mult,sky90,8,1415,0.7822477809187279,2212.840039,1440.0,0.0015420494699646642 -mult,tsmc28,64,2294,0.43591579075850045,14614.866081,95200.0,0.01697384481255449 -mux4,tsmc28,64,14762,0.06852549844194553,305.42399,1370.0,7.119631486248477e-05 -flop,tsmc28,8,22091,0.048891303426734874,15.12,78.635,2.7239599837037708e-05 -mux4,sky90,64,3859,0.3036454908007256,1512.140028,861.823,0.00041176470588235296 -flop,sky90,32,9445,0.11434412493382742,533.119995,259.258,0.000774219163578613 -mux8,sky90,1,5526,0.17846672167933406,70.560001,50.725,1.4115092290988057e-05 -mux8,tsmc28,16,12018,0.08288952055250458,91.728,436.205,2.5212181727408887e-05 -flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.000193835 -mux8,tsmc28,8,10,0.11437999999999704,30.114,111.042,5.12e-06 -add,sky90,32,2275,0.4382754395604396,1143.660022,372.681,0.00043208791208791214 -mux4,sky90,1,8257,0.12749336175366355,28.420001,25.098,6.479350853821e-06 -csa,tsmc28,16,24034,0.04077672239327619,98.783999,946.879,4.289756178746776e-05 -mux8,sky90,64,2967,0.34396478193461405,1982.540038,605.952,0.0003788338388945063 -mult,sky90,16,917,1.0904565408942202,6101.480106,2770.0,0.004877862595419847 -csa,tsmc28,16,23543,0.04244547041583485,62.496001,481.11,2.7609055770292657e-05 -add,sky90,16,2707,0.3688706339120798,554.68001,193.792,0.00023125230882896196 -mult,tsmc28,16,4048,0.25795957312252965,1922.886,14300.0,0.0016385869565217392 -mux2,tsmc28,1,53922,0.01965830618300508,2.142,15.112,6.008679203293646e-07 -mux2d,tsmc28,1,51765,0.01893207205640877,3.276,26.574,9.27267458707621e-07 -shiftleft,sky90,128,1755,0.5695325698005698,7463.680134,3390.0,0.001932763532763533 -mult,tsmc28,64,2342,0.4269854824935952,15405.390085,103000.0,0.017771562766865926 -mux2d,sky90,1,12953,0.0756591925422682,19.6,18.562,6.0294912375511465e-06 -mux4d,tsmc28,1,35904,0.02948604991087344,6.426,53.388,1.957999108734403e-06 -mult,tsmc28,64,2438,0.41469727235438886,17618.832028,122000.0,0.020132895816242825 -csa,tsmc28,16,23053,0.04244530217325294,62.496001,481.11,2.7631978484362122e-05 -mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,9.897782494553986e-06 -mult,tsmc28,128,2017,0.521343820525533,50239.728229,312000.0,0.05793257312840853 -priorityencoder,sky90,16,6126,0.16939465491348352,166.600002,113.104,2.8778974861247145e-05 -csa,tsmc28,16,24524,0.040663382319360626,104.832,964.99,4.346762355243842e-05 -mux2,tsmc28,32,18619,0.05585557725978839,32.130001,171.146,9.898490788979e-06 -comparator,tsmc28,32,12867,0.08809919382917542,147.924,654.69,3.567265096759152e-05 -mux4,tsmc28,32,14588,0.06829549273375377,76.103999,363.48,2.495201535508637e-05 -flop,tsmc28,64,21273,0.0488919443425939,120.959999,630.0,0.00021783481408358014 -add,sky90,64,2054,0.48669491723466407,2674.420052,957.825,0.0009522882181110029 -mult,tsmc28,16,3972,0.2571083363544814,2139.101998,16200.0,0.0017797079556898287 -mult,sky90,128,566,1.9132164522968198,301979.16406,136000.0,0.30831448763250885 -mux4,sky90,32,4118,0.24283532831471588,594.860011,331.197,0.00013161728994657602 -shiftleft,tsmc28,128,7304,0.14135928148959476,2368.547985,11900.0,0.0006592278203723987 -mult,tsmc28,8,4700,0.21274895744680852,334.404002,2220.0,0.00022914893617021276 -mux8,sky90,16,3156,0.31606278073510774,523.32001,180.283,0.00010963244613434726 -flop,tsmc28,32,21273,0.0488919443425939,60.4799995,314.5805,0.00010892210783622432 -mult,sky90,32,702,1.4242284245014245,19874.400305,7550.0,0.016801994301994302 -shiftleft,sky90,128,1869,0.5349974788657036,8478.960135,5130.0,0.002594970572498662 -comparator,sky90,128,2683,0.37266110771524413,2825.340055,784.95,0.000462541930674618 -mux8,sky90,32,2924,0.34153726402188783,1064.280021,239.507,0.00019220246238030097 -mux8d,sky90,1,7307,0.1341250704803613,85.260001,40.078,1.506774325988778e-05 -mux4,sky90,8,5034,0.2207511855383393,203.840004,102.281,4.67222884386174e-05 -priorityencoder,sky90,128,3682,0.28672152634437803,1864.940032,910.869,0.00017191743617599132 -mult,sky90,128,10,29.683678,180759.040854,18000.0,0.07809999999999999 -mult,sky90,128,545,1.924225385321101,300240.644153,129000.0,0.302308256880734 -mux4,sky90,8,4474,0.22174063433169425,122.500002,39.907,3.520339740724184e-05 -shiftleft,sky90,64,2115,0.47275823877068557,3320.240051,2040.0,0.0009394799054373523 -flop,sky90,16,9270,0.11434386515641856,266.5599975,129.629,0.00038710895361380803 -mux4,tsmc28,1,24155,0.0400992962119644,2.898,17.89,8.818050093148417e-07 -mux4,tsmc28,16,15827,0.06317816800404372,33.894,142.636,1.0412586087066406e-05 -mux4,sky90,128,3104,0.32191194845360827,2060.94004,567.296,0.0005341494845360824 -flop,sky90,64,8396,0.11434433539780849,1066.23999,520.0,0.0015482968080038112 -comparator,tsmc28,8,17080,0.058468009367681505,32.256,148.439,8.588992974238876e-06 -mux8,tsmc28,16,12754,0.07864877434530344,105.21,501.447,2.7755998118237415e-05 -comparator,sky90,16,4099,0.2462409419370578,410.620007,284.523,8.587460356184434e-05 -mux4,tsmc28,64,13648,0.07299580890973037,141.623999,661.956,4.645369284876905e-05 -mult,sky90,128,503,1.9880695705765408,271535.463355,88700.0,0.23536978131212724 -priorityencoder,tsmc28,8,32589,0.03304820052778545,11.592,49.654,2.1387584767866457e-06 -mux8,tsmc28,64,11455,0.09107112309035356,312.353999,1550.0,8.57267568747272e-05 -flop,tsmc28,8,20045,0.04889175255674732,15.12,78.634,2.72362185083562e-05 -mux8d,tsmc28,1,22375,0.0455857374301676,20.664,171.151,6.610055865921788e-06 -mux8,tsmc28,8,12128,0.08243582585751978,41.706,181.866,1.0183047493403694e-05 -comparator,sky90,32,3386,0.2947787271116361,655.620013,173.527,7.67867690490254e-05 -add,tsmc28,128,6777,0.14755591648221927,813.960006,3780.0,0.0003209384683488269 -csa,sky90,128,6052,0.16536163317911434,5269.460103,3280.0,0.0024631526768010576 -csa,sky90,8,6118,0.16536210853220007,330.260006,208.877,0.00015495259888852566 -mult,sky90,32,778,1.2898160437017996,26921.580481,17200.0,0.026807197943444733 -add,tsmc28,32,9812,0.1018860211985324,209.286002,1060.0,8.153281695882594e-05 -mux4,sky90,32,3508,0.28452071379703536,449.820009,129.665,0.00013768529076396807 -mux4,sky90,64,3636,0.27624650275027507,889.840016,304.841,0.0002714521452145215 -comparator,sky90,16,4018,0.24806303982080635,358.680007,189.253,6.321553011448482e-05 -mux8,sky90,1,5761,0.17009697552508246,70.560001,49.874,1.256726262801597e-05 -mux2,sky90,32,5403,0.21904036165093466,233.240005,55.502,7.551360355358135e-05 -shiftleft,tsmc28,128,7445,0.14241033445265278,2676.617983,13800.0,0.0007658831430490262 -mux2,tsmc28,1,48835,0.01965811682195147,2.142,15.112,6.020272345653731e-07 -mux8,tsmc28,128,10264,0.09738990335151988,700.937992,3100.0,0.0001601714731098987 -csa,sky90,32,6118,0.16536210853220007,1318.100026,832.166,0.0006181758744687807 -comparator,tsmc28,16,14285,0.07632350017500876,54.054,235.74,1.3860693034651733e-05 -mux2,tsmc28,16,18384,0.053569126196692775,15.246,84.024,5.064186248912098e-06 -mux2d,sky90,1,12424,0.07841937540244688,18.62,16.576,5.92401802962009e-06 -mux4,tsmc28,64,13091,0.07627735841417768,132.551999,603.132,4.529829653960736e-05 -mux8,tsmc28,8,13418,0.07609875510508272,46.368,224.828,1.2132955731107468e-05 -mult,tsmc28,16,3666,0.2727758685215494,1281.546006,8860.0,0.001188761593016912 -add,tsmc28,64,8370,0.11969531302270012,439.488003,2130.0,0.00016439665471923535 -mux4,tsmc28,8,18877,0.05756651925623775,22.302,111.045,6.3834295703766485e-06 -flop,sky90,128,8396,0.11434433539780849,2132.4799805,1035.0,0.0030962958551691284 -mux8,sky90,1,5644,0.1749683054571226,70.560001,47.501,1.2331679659815733e-05 -comparator,sky90,16,4259,0.24596490068091104,414.540007,269.17,8.499647804648979e-05 -mux4,sky90,128,3041,0.32867219763235783,1891.400037,563.999,0.0005004932587964485 -comparator,sky90,16,3697,0.2704605861509332,354.760007,114.334,5.923721936705437e-05 -comparator,tsmc28,32,12624,0.08578519518377693,146.412,662.137,3.548795944233207e-05 -comparator,tsmc28,32,11168,0.08951854727793697,114.408,448.212,2.7489255014326646e-05 -priorityencoder,sky90,32,4788,0.21353147201336675,384.160007,267.54,5.2631578947368424e-05 -priorityencoder,sky90,128,3614,0.30526071555063644,1695.400033,611.905,0.00013198671831765357 -mux4,tsmc28,32,13981,0.07113564194263644,68.04,282.367,2.0813961805307204e-05 -mux4,sky90,8,4381,0.22772738849577723,120.540002,34.353,3.362246062542799e-05 -mux4,tsmc28,32,15500,0.06548612903225806,73.961999,360.628,2.432258064516129e-05 -mux2d,sky90,1,13746,0.07565843590862796,19.6,18.562,6.030845336825258e-06 -mux2,tsmc28,64,20053,0.05297485019697801,87.318,456.882,2.4634717997307136e-05 -csa,sky90,128,6537,0.1653613709652746,5895.680115,3510.0,0.002548569680281475 -mux4,sky90,1,7789,0.12838318564642445,28.420001,22.994,6.4064706637565795e-06 -mux8,sky90,64,2846,0.35130134434293747,2092.30004,580.155,0.000392832044975404 -csa,tsmc28,32,10,0.06758100000000411,68.543999,229.117,2.8800000000000002e-05 -mult,sky90,8,1363,0.7637627153338225,2251.060042,1540.0,0.0015766691122523844 -priorityencoder,tsmc28,32,15476,0.06460917989144482,52.164,168.016,8.516412509692426e-06 -add,tsmc28,32,10008,0.10399206394884093,207.900002,1070.0,8.363309352517985e-05 -priorityencoder,sky90,16,6008,0.16939474034620508,166.600002,115.018,2.9061251664447404e-05 -mux8d,tsmc28,1,20620,0.04721960523763336,6.804,34.356,1.8234723569350146e-06 -shiftleft,tsmc28,8,13986,0.0711090715000715,27.468,148.616,8.336908336908337e-06 -mux4d,tsmc28,1,10,0.044273000000004004,2.268,8.147,4.85e-07 -csa,tsmc28,128,23053,0.04244530217325294,499.96801,3850.0,0.00022049190994664469 -mux2,sky90,32,4450,0.2224351011235955,230.300004,63.574,7.730337078651685e-05 -add,tsmc28,16,11521,0.08678002100512108,90.972001,475.207,3.367763214998698e-05 -priorityencoder,sky90,64,4016,0.248852984063745,788.900013,356.748,7.246015936254982e-05 -shiftleft,sky90,32,2453,0.40740408479412965,1381.800025,768.035,0.0003530370974317163 -csa,sky90,8,6358,0.16398216420257944,392.000008,245.798,0.0001818181818181818 -add,tsmc28,8,10,0.25532499999999914,15.75,58.809,7.1299999999999995e-06 -shiftleft,tsmc28,32,9779,0.10537294477962983,359.604,1700.0,9.990796604969833e-05 -mux2,sky90,32,3850,0.2503912597402597,226.380004,76.383,8.337662337662337e-05 -comparator,tsmc28,32,10,0.21334099999999978,64.26,218.094,1.492e-05 -csa,sky90,16,6052,0.16536163317911434,659.540013,409.513,0.00030799735624586913 -mux2d,tsmc28,1,53878,0.01893245139017781,3.276,26.574,9.280225695088904e-07 -priorityencoder,tsmc28,32,10,0.24741400000000624,25.326,69.772,3.94e-06 -add,tsmc28,32,10204,0.10141978400627205,225.792002,1180.0,8.653469227753823e-05 -mux2,sky90,32,4000,0.246172,228.340004,80.334,8.45e-05 -mux2,tsmc28,128,15639,0.06391170733422853,145.782001,1020.0,5.204936377006203e-05 -add,tsmc28,16,11981,0.08588248702111677,95.886001,511.735,3.722560721141808e-05 -mux2,tsmc28,16,20682,0.05247022328594913,15.372,84.373,5.043032588724495e-06 -csa,sky90,16,6173,0.16536178810950916,675.220013,421.312,0.0003111939089583671 -flop,sky90,8,8571,0.11434450029168125,133.279999,64.8145,0.0001936355151090888 -comparator,sky90,64,2879,0.3470918273706148,1519.98003,422.272,0.00021778395276137548 -mux4,tsmc28,64,15041,0.07022094116082707,145.277999,710.673,4.7337278106508875e-05 -add,tsmc28,8,14114,0.07275363667280714,35.028001,197.931,1.38869207878702e-05 -add,tsmc28,128,7354,0.13597341881968997,907.452008,4360.0,0.00034511830296437315 -mux8,tsmc28,128,11102,0.09522286056566384,640.079998,3170.0,0.00017096018735362998 -add,tsmc28,128,7066,0.1415187851684121,858.942007,3940.0,0.00032352108689499007 -comparator,sky90,64,3317,0.3259782384684956,1324.960026,375.296,0.00017244498040397952 -shiftleft,tsmc28,8,14898,0.06690610377231844,51.912,383.207,1.8042690293999192e-05 -priorityencoder,tsmc28,128,10,0.9983220000000017,114.533999,291.024,1.597e-05 -mux4,tsmc28,1,26780,0.0380882994772218,5.292,41.928,1.7102315160567588e-06 -comparator,tsmc28,16,13186,0.07577501001061733,47.754,197.671,1.2619444865766721e-05 -add,sky90,64,10,7.080673000000004,927.079988,110.998,0.00032490000000000004 -flop,sky90,32,8221,0.1143447031991242,533.119995,259.258,0.000774175891010826 -comparator,sky90,8,4839,0.20629126741062204,200.900004,136.6,5.001033271337053e-05 -comparator,tsmc28,8,16397,0.06087376587180582,27.846,124.214,7.355003964139782e-06 -csa,sky90,64,6173,0.16536178810950916,2697.940053,1670.0,0.0012418597116474973 -mult,tsmc28,8,4600,0.2172923043478261,316.512001,2070.0,0.00021195652173913043 -shiftleft,sky90,64,2071,0.4824885224529213,3215.380053,1760.0,0.0008614196040560116 -shiftleft,sky90,16,3557,0.297124788585887,608.58001,422.656,0.00015434354793365194 -mux8,tsmc28,1,17025,0.06011015124816446,9.072,57.908,2.795888399412629e-06 -shiftleft,tsmc28,8,15506,0.06589716471043468,44.856,300.094,1.4413775312782148e-05 -flop,sky90,64,8921,0.11434405660800359,1066.23999,520.0,0.0015483690169263535 -priorityencoder,tsmc28,16,21678,0.04626771676353907,23.688,87.326,4.17935233877664e-06 -mux4,tsmc28,8,18514,0.055939179215728635,24.066,117.217,7.232364696986064e-06 -mux8,tsmc28,64,11895,0.08861193652795293,585.647993,2900.0,0.00011197982345523327 -comparator,tsmc28,128,8996,0.11113551578479325,480.438,1900.0,0.00010704757670075588 -mux4,sky90,64,4007,0.2932652642874969,1421.980024,895.196,0.0003533815822310956 -mux4d,tsmc28,1,34574,0.0294854685023428,6.426,53.388,1.9581188176086075e-06 -csa,sky90,128,5689,0.16671381683951486,4641.28009,3300.0,0.002386183863596414 -priorityencoder,sky90,16,5890,0.1697722869269949,136.220003,75.053,2.0950764006791172e-05 -mux4,tsmc28,1,25730,0.0384481379712398,4.158,30.449,1.2922658375437233e-06 -csa,sky90,32,6478,0.16536163229391787,1499.400029,862.282,0.000633683235566533 -csa,sky90,32,6358,0.16398216420257944,1568.000031,983.19,0.0007239698018244731 -flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,0.00154955 -flop,sky90,16,9445,0.11434412493382742,266.5599975,129.629,0.00038713605082054 -csa,tsmc28,128,25014,0.04049261253697929,838.655998,7720.0,0.0003472055648836652 -mux8,sky90,64,10,1.3133009999999956,1610.140031,110.909,0.00028 -add,sky90,16,2942,0.3393218266485384,722.260013,485.109,0.00032460910944935416 -comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,0.00012794792444776438 -mux8,sky90,64,2785,0.3587524272890485,2023.700038,635.117,0.00040430879712746856 -mux4,tsmc28,32,14892,0.066647147730325,77.238,364.152,2.5248455546602203e-05 -shiftleft,tsmc28,32,9396,0.10641326734780758,311.723998,1470.0,8.343976160068115e-05 -mux8,tsmc28,32,10776,0.09256081217520415,171.989999,780.419,4.101707498144023e-05 -priorityencoder,sky90,128,3136,0.31840255102040815,1579.760031,453.063,0.00010427295918367345 -mux8,sky90,32,2987,0.33436006427854037,1412.180011,763.713,0.00034181452962838967 -mux8,sky90,16,3568,0.2891280582959641,618.380012,225.209,0.00012780269058295965 -mux8,tsmc28,16,11773,0.08486411721736176,83.664,357.291,2.1404909538775164e-05 -add,tsmc28,128,6633,0.15075334479119554,792.414006,3640.0,0.0003086084727875773 -mux4,tsmc28,8,17788,0.05615667483696874,23.814,113.824,7.252080053968968e-06 -add,sky90,32,2565,0.41661854775828455,1395.520026,647.273,0.0005734892787524367 -csa,tsmc28,128,26486,0.040226795514611495,838.655994,7830.0,0.0003485615041908933 -mux8,sky90,128,2773,0.36877026685899744,4476.640087,1520.0,0.0008755860079336458 -mux2,tsmc28,64,18196,0.05494513343591998,83.285999,419.089,2.3411738843701914e-05 -priorityencoder,sky90,64,3934,0.2539222043721403,760.480014,316.203,6.507371631926792e-05 -priorityencoder,tsmc28,128,12126,0.08674642536698005,321.048001,1060.0,4.395513772060037e-05 -mult,tsmc28,32,3211,0.33017946122703207,6265.475998,46700.0,0.006259732170663345 -csa,sky90,128,10,0.2641830000000027,1881.599976,220.98,0.000675 -mult,tsmc28,128,1793,0.5577244841048522,40469.058207,229000.0,0.04365476854433909 -mult,tsmc28,128,1831,0.5461486450027307,42969.906237,251000.0,0.04786892408519934 -comparator,sky90,16,3777,0.27152939184537994,360.640007,157.74,5.9571088165210487e-05 -mux2d,tsmc28,1,52822,0.018931505811972286,3.276,26.574,9.27643784786642e-07 -flop,tsmc28,64,22091,0.048891303426734874,120.959999,630.0,0.00021782626408944816 -priorityencoder,sky90,8,8003,0.12495914257153568,60.760001,44.346,1.3444958140697239e-05 -comparator,sky90,128,2630,0.38016313688212927,2700.880053,641.273,0.0004171102661596958 -priorityencoder,tsmc28,8,29455,0.033933093362756746,8.316,36.118,1.8095399762349347e-06 -flop,sky90,16,8921,0.11434405660800359,266.5599975,129.629,0.0003871202779957404 -csa,sky90,128,5810,0.16922003958691909,4700.080091,3350.0,0.0024051635111876075 -mux2,sky90,16,5048,0.20207425673534074,119.560002,32.354,3.8827258320126784e-05 -shiftleft,sky90,8,4241,0.23524044494223062,255.780005,194.529,6.908747936807357e-05 -mux8d,tsmc28,1,20182,0.049365103161232785,11.718,79.832,3.7260925577247055e-06 -comparator,sky90,128,10,1.136650000000003,1997.240039,243.506,0.0001572 -mux8,tsmc28,64,10353,0.09590236028204385,266.615998,1150.0,6.799961363855887e-05 -mux4d,tsmc28,1,31914,0.030080210691232692,4.158,30.468,1.2831359278059786e-06 -csa,tsmc28,8,24524,0.040663382319360626,52.416,482.462,2.173381177621921e-05 -flop,sky90,8,8221,0.1143447031991242,133.279999,64.8145,0.00019360175161172607 -mux2,tsmc28,128,15306,0.06522285600418137,160.02,948.941,5.017640141121129e-05 -csa,sky90,32,5878,0.1696478931609391,1365.140027,921.68,0.0006731881592378359 -csa,tsmc28,32,22562,0.04244531185178619,124.992002,962.249,5.509263363177023e-05 -mux8,tsmc28,8,12386,0.08048931519457453,41.832,167.156,1.0229291135152591e-05 -mux2,tsmc28,32,16829,0.058776237150157465,29.736001,158.536,9.673777408045636e-06 -csa,tsmc28,8,23053,0.04244530217325294,31.248001,240.54,1.385502971413699e-05 -mux8,tsmc28,32,12182,0.08988432703989492,202.104,984.173,4.703661139385979e-05 -shiftleft,sky90,128,1793,0.5575724841048522,7695.940136,3730.0,0.002007250418293363 -priorityencoder,tsmc28,64,13252,0.07544330787805614,123.228,381.105,1.619378207063085e-05 -shiftleft,tsmc28,64,8107,0.12333419119279634,757.385999,3630.0,0.00021438263229308006 -csa,tsmc28,32,25505,0.04036599843168006,201.599998,1900.0,8.519898059204077e-05 -mux2,sky90,64,4233,0.24139207394283013,486.080007,135.616,0.00016182376565083867 -csa,sky90,64,6052,0.16536163317911434,2631.300051,1640.0,0.0012321546596166558 -mux8,tsmc28,16,13245,0.08118818875047187,86.814,421.512,2.3556058890147224e-05 -mux2,tsmc28,1,50870,0.01965795164143896,2.142,15.112,6.034991153921761e-07 -mux8,sky90,64,3148,0.3316140076238882,2234.400043,750.071,0.0004453621346886913 -csa,tsmc28,8,24034,0.04077672239327619,49.392,473.393,2.151119247732379e-05 -priorityencoder,tsmc28,64,13804,0.07239877021153289,137.466,425.592,1.847290640394089e-05 -mux8,sky90,8,3657,0.27529718156959254,447.860008,277.646,9.625375991249658e-05 -csa,sky90,8,5638,0.16671386094359703,290.080006,207.654,0.0001493437389145087 -mux8,tsmc28,128,10474,0.09542350830628223,683.045996,2820.0,0.00015705556616383426 -mux8,tsmc28,1,16691,0.05956652770954406,10.206,62.604,3.217302738002516e-06 -flop,sky90,16,8746,0.11434398307797851,266.5599975,129.629,0.00038714841070203523 -add,sky90,128,1734,0.5763442687427912,5613.440109,1880.0,0.0017687427912341407 -csa,sky90,64,6415,0.1639816453624318,2947.840027,1820.0,0.0013995323460639128 -comparator,sky90,16,3857,0.26124686180969664,392.000008,180.236,7.311381903033447e-05 -add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,0.0021480106100795755 -mux4,tsmc28,8,18151,0.055092383284667513,27.971999,133.963,8.032615282904523e-06 -mux4,sky90,1,8101,0.12749355042587335,28.420001,25.098,6.493025552400939e-06 -comparator,tsmc28,16,14835,0.07291515638692282,54.18,251.929,1.3050219076508257e-05 -priorityencoder,sky90,8,8643,0.12521256693277796,64.680001,49.589,1.4636121716996413e-05 -csa,tsmc28,64,23543,0.04244547041583485,249.984005,1920.0,0.00011022384572909146 -add,sky90,16,3001,0.3504502592469177,648.760012,358.879,0.0002715761412862379 -comparator,sky90,8,4935,0.21438524518743668,196.980003,103.039,4.137791286727457e-05 -add,tsmc28,32,9027,0.11067877478675085,180.054001,870.864,7.411100033233633e-05 -priorityencoder,tsmc28,128,11898,0.08643973911581779,300.636001,944.678,3.8914103210623635e-05 -mux2,tsmc28,128,17303,0.05864344622319829,177.785999,958.338,5.06848523377449e-05 -mux4,tsmc28,16,15497,0.06397261844227915,33.768,141.323,1.046008904949345e-05 -shiftleft,tsmc28,16,12040,0.08349647840531561,122.093999,588.646,3.1727574750830563e-05 -csa,tsmc28,16,26486,0.040226795514611495,104.831999,978.516,4.36834554104055e-05 -mux8,tsmc28,1,16024,0.06212039041437843,8.568,46.793,2.1779830254618073e-06 -add,tsmc28,32,9419,0.10615638305552606,183.834001,912.393,7.357468945747956e-05 -flop,sky90,128,9445,0.11434412493382742,2132.4799805,1035.0,0.0030964531498147165 -mux2d,sky90,1,10,0.16890700000000436,6.86,1.19,1.981e-06 -mux8,sky90,128,2880,0.3583902222222222,4552.100084,1800.0,0.0009871527777777778 -mux4,tsmc28,8,19240,0.05756705197505198,22.302,111.045,6.382536382536383e-06 -mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,0.0014553548049227546 -mux4,tsmc28,8,19604,0.05756699795960008,22.302,111.045,6.38135074474597e-06 -mult,tsmc28,8,4800,0.20832833333333334,367.416001,2600.0,0.00026166666666666667 -mult,tsmc28,128,1980,0.5215165050505051,50452.794237,316000.0,0.05841464646464647 -add,tsmc28,64,8698,0.12149495838123707,434.448005,2180.0,0.00016360082777650036 -flop,tsmc28,8,19636,0.04889186901609289,15.12,78.634,2.7233143206355677e-05 -mux8,sky90,16,10,0.7726059999999961,430.220008,28.957,6.88e-05 -shiftleft,tsmc28,64,10,0.40777599999999836,270.395999,887.005,7.88e-05 -mux8,sky90,1,5997,0.16975504168751043,72.520001,56.57,1.3206603301650824e-05 -mux8,sky90,8,3442,0.2903377623474724,275.380005,60.636,4.953515398024404e-05 -mult,sky90,32,748,1.357571395721925,22731.100368,11200.0,0.021080213903743317 -mux2,sky90,32,4300,0.23126713953488373,230.300004,88.215,8.534883720930233e-05 -mux4,sky90,32,3660,0.272303043715847,453.740008,144.844,0.00014262295081967215 -mux8,tsmc28,64,10794,0.09243606151565685,301.77,1480.0,8.45840281637947e-05 -shiftleft,tsmc28,128,6461,0.15476280266212658,1215.647996,5280.0,0.00036867357994118554 -add,sky90,128,1772,0.5643280857787811,5611.480109,1710.0,0.001696388261851016 -comparator,tsmc28,8,15714,0.06352952068219422,25.578,121.375,6.783759704721904e-06 -priorityencoder,sky90,128,3477,0.3124412565429968,1500.380028,438.268,9.86482599942479e-05 -comparator,tsmc28,64,11297,0.09384907586084801,291.06,1290.0,6.84252456404355e-05 -shiftleft,tsmc28,64,7776,0.12859482304526748,654.695996,3090.0,0.0001949588477366255 -shiftleft,sky90,32,10,1.1897809999999964,882.980017,61.087,0.00014890000000000001 -mux8,tsmc28,16,12509,0.08081944144216165,99.036,498.654,2.7260372531777117e-05 -flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.00038715000000000006 -flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.00021765500000000003 -mux2,sky90,16,4553,0.21640140522732265,114.660002,40.216,4.256534153305513e-05 -shiftleft,sky90,8,4068,0.24550304228121925,232.260005,140.797,6.0521140609636184e-05 -shiftleft,tsmc28,64,8769,0.11943108872163302,1183.769998,6450.0,0.0003350439046641578 -mux2,tsmc28,32,17187,0.05813651079304125,29.862001,160.059,9.699191249199977e-06 -mux2,tsmc28,64,19310,0.05253463904712584,123.858,794.333,3.702744691869498e-05 -flop,tsmc28,16,21273,0.0488919443425939,30.24,157.29,5.44728059041978e-05 -flop,sky90,64,9096,0.11434443447669304,1066.23999,520.0,0.0015483179419525067 -mux2,sky90,128,3924,0.258784997961264,955.500018,279.611,0.0003093781855249745 -mult,tsmc28,8,5200,0.1922996923076923,577.206,4340.0,0.00037769230769230767 -shiftleft,tsmc28,8,16114,0.0664628379049274,49.392,346.537,1.6277770882462455e-05 -mux2,sky90,128,4164,0.2565836983669548,1165.220021,656.972,0.0004205091258405379 -mux8,tsmc28,64,10573,0.09440153532582994,294.965999,1460.0,8.256880733944954e-05 -mux4,tsmc28,1,25205,0.038448667724657805,4.158,30.449,1.2933941678238445e-06 -mux8,sky90,64,3209,0.3308795587410408,2240.280042,852.73,0.0004923652228108446 -flop,sky90,128,8746,0.11434398307797851,2132.4799805,1035.0,0.003096444088726275 -add,sky90,128,1998,0.5428695005005005,6510.140126,2360.0,0.0023248248248248244 -csa,tsmc28,128,25995,0.040894936333910364,806.399994,7580.0,0.0003438353529524909 -mult,sky90,64,683,1.5572078433382137,95922.401617,59200.0,0.10805124450951685 -comparator,tsmc28,64,11080,0.09024670758122744,294.21,1250.0,6.84115523465704e-05 -mux4,sky90,8,4941,0.21053718053025702,164.640002,96.679,4.430277271807326e-05 -mult,tsmc28,32,3092,0.32732826520051744,6660.989998,50100.0,0.006573091849935316 -flop,tsmc28,8,20454,0.04889119262735895,15.12,78.6345,2.7236726312701675e-05 -mux4,sky90,16,4482,0.22884868094600624,436.100003,418.878,0.00010352521195894689 -mux2,sky90,128,3844,0.26160968158168574,1387.680005,841.057,0.0004934963579604578 +Module,Tech,Width,Target Freq,Delay,Area,L Power (nW),D energy (nJ) +mux2,sky90,1,12770,0.08300853563038371,13.72,12.3,0.0039075959279561475 +comparator,sky90,32,3674,0.2733739069134458,699.720013,330.048,0.108056614044638 +mux4,tsmc28,16,15167,0.0651646168655634,32.886,134.911,0.010127249950550539 +priorityencoder,sky90,8,7522,0.1322263661260303,47.040001,18.57,0.010276522201542142 +add,tsmc28,64,8534,0.12049834544176237,447.300003,2220.0,0.1683852823998125 +mux4,sky90,16,4529,0.263597293442261,358.680007,100.453,0.07948774563921396 +mux8,tsmc28,1,17693,0.060110527496750124,9.072,57.908,0.002797716611089131 +mult,sky90,8,1389,0.7681404046076313,2209.900042,1430.0,1.470842332613391 +add,sky90,8,3439,0.2897002041291073,243.040005,146.139,0.11805757487641758 +priorityencoder,tsmc28,32,17451,0.058905306400779324,66.15,236.198,0.009907741676694747 +shiftleft,tsmc28,16,10,0.16585499999999342,43.722,137.701,0.01291 +mux8d,sky90,1,10,0.22809599999999364,34.300001,4.606,0.00609 +comparator,sky90,32,3890,0.2804184087403599,745.780014,371.064,0.12262210796915168 +mux2,sky90,8,5299,0.1883518518588413,63.700001,21.541,0.01932440083034535 +flop,sky90,8,9270,0.11434386515641856,133.279999,64.8145,0.19360302049622438 +mult,tsmc28,32,2973,0.3363555785401951,5141.430011,36900.0,5.416414396232761 +mux4,tsmc28,64,13926,0.07180612868016659,137.465999,648.086,0.04574177796926612 +csa,sky90,32,5998,0.16643624074691563,1178.940023,650.306,0.6495498499499833 +flop,sky90,32,8921,0.11434405660800359,533.119995,259.258,0.7742405559914808 +mux8,sky90,128,2453,0.40739008479412964,3629.920071,818.07,0.7240114145943742 +csa,tsmc28,32,24524,0.040663382319360626,209.664,1930.0,0.08677214157559941 +mult,tsmc28,128,1943,0.525260039114771,48676.82422,299000.0,55.878023674729796 +priorityencoder,tsmc28,16,20828,0.048207291146533514,20.79,73.76,0.003797772229690801 +csa,tsmc28,8,22562,0.04244531185178619,31.248001,240.54,0.013850722453683184 +mux8,sky90,16,3636,0.28388450275027505,608.580012,247.862,0.13091309130913092 +mult,tsmc28,8,5301,0.19483965214110546,531.468,3930.0,0.35106583663459723 +csa,sky90,128,6294,0.16536147442008264,6117.160119,3640.0,2.729583730537019 +mux8,sky90,128,2667,0.3749401308586427,4575.620089,1830.0,0.9786276715410572 +shiftleft,tsmc28,16,12748,0.08287467743959838,125.243999,615.906,0.03451521807342328 +add,tsmc28,32,10597,0.10036333009342267,240.030002,1260.0,0.09266773615174106 +flop,sky90,64,8221,0.1143447031991242,1066.23999,520.0,1.5482909621700522 +csa,tsmc28,32,24034,0.04077672239327619,197.567999,1890.0,0.08558708496296911 +flop,sky90,32,8571,0.11434450029168125,533.119995,259.258,0.774180375685451 +mux4d,tsmc28,1,30585,0.03259276589831617,2.898,17.893,0.0008850743828674187 +mux8,tsmc28,128,9636,0.10367850103777501,559.943997,2620.0,0.14061851390618516 +csa,tsmc28,32,23543,0.04244547041583485,124.992002,962.249,0.05509068512933781 +flop,sky90,8,8746,0.11434398307797851,133.279999,64.8145,0.19362565744340268 +mux4,sky90,128,3231,0.3096037022593624,2019.780039,760.934,0.6196224079232435 +mux2,tsmc28,128,15972,0.06228256674179814,173.502,1060.0,0.055033809166040566 +mux2,sky90,64,4396,0.24216452684258416,487.060007,132.876,0.16014558689717925 +csa,tsmc28,16,25995,0.040894936333910364,100.799999,947.479,0.0430467397576457 +priorityencoder,sky90,32,4596,0.2183225047867711,367.500007,196.77,0.04564838990426458 +flop,tsmc28,128,20454,0.04889119262735895,241.919998,1260.0,0.43563606140608185 +mux8d,sky90,1,7754,0.13242769512509672,89.180001,45.284,0.015991746195511993 +mult,tsmc28,16,4125,0.25523324242424245,2007.432002,15100.0,1.7086060606060607 +mux2,sky90,32,4702,0.21088845725223307,368.480007,245.044,0.1344108889834113 +comparator,tsmc28,128,10,0.6097180000000009,256.787999,853.776,0.0566 +csa,sky90,32,5518,0.1796730815512867,1150.520022,813.107,0.5889815150416817 +add,tsmc28,32,10,0.9349590000000063,67.157999,230.644,0.0324 +csa,sky90,64,5931,0.1654056314280897,2132.480042,1230.0,1.0905412240768841 +comparator,sky90,32,3314,0.30097215087507545,694.820014,185.626,0.09897404948702472 +mux8,sky90,32,10,0.9133680000000055,822.220016,56.003,0.1386 +mux4,sky90,128,3324,0.30201935860409146,2346.12003,1140.0,0.7806859205776172 +add,tsmc28,8,13561,0.07281987456677236,31.878,172.3,0.012683430425484846 +mux2,sky90,64,4059,0.2456681000246366,514.50001,165.954,0.164079822616408 +mux8,sky90,16,3293,0.30339846097783174,678.160006,347.764,0.17096872153051929 +mult,tsmc28,16,3743,0.2671573753673524,1399.734003,9840.0,1.2831952978893935 +csa,tsmc28,8,10,0.06758100000000411,17.136,57.229,0.00721 +comparator,sky90,64,2942,0.33983282664853837,1331.820026,241.079,0.1947654656696125 +csa,sky90,16,5810,0.1707250395869191,572.320011,399.957,0.2900172117039587 +mux4,sky90,16,4486,0.22884773785109228,436.100003,418.878,0.10365581810075791 +add,tsmc28,8,13838,0.07207477814713109,34.272,187.089,0.013311172134701546 +add,tsmc28,64,8041,0.12432664146250468,391.860003,1880.0,0.14911080711354308 +mux4,sky90,64,3710,0.26931477897574124,899.640016,344.331,0.2862533692722372 +mux8,sky90,128,2560,0.390515,4343.360071,1680.0,0.93203125 +shiftleft,sky90,32,2353,0.4249323752656184,1232.840023,566.074,0.32171695707607306 +csa,sky90,16,5931,0.1654056314280897,533.12001,308.404,0.27263530601922104 +mux2,sky90,64,3826,0.25709657658128593,462.560009,162.042,0.16989022477783589 +mult,sky90,32,794,1.3013988438287152,26529.580464,17000.0,26.575566750629722 +mult,tsmc28,128,1905,0.5249343832020997,47318.418271,290000.0,54.71338582677165 +mux2,sky90,64,4543,0.2432308641866608,491.96001,108.197,0.14990094651111602 +add,sky90,16,2883,0.351801908775581,694.82001,489.311,0.3315990287894554 +csa,tsmc28,128,25505,0.04036599843168006,806.399994,7610.0,0.3412272103509115 +mux8,tsmc28,128,9846,0.10152608693885842,674.477993,2900.0,0.1568149502335974 +mux2,sky90,8,4981,0.1993458990162618,59.780001,23.364,0.021702469383657903 +mux2,sky90,32,3700,0.2533642702702703,227.360004,74.563,0.08324324324324324 +shiftleft,tsmc28,128,6883,0.1452804859799506,1687.769984,7890.0,0.49716693302339093 +mux4,sky90,16,4750,0.25584431578947364,359.660007,120.182,0.07389473684210526 +mux8,tsmc28,32,10,0.16755700000000218,105.713999,407.748,0.01928 +mux2,tsmc28,64,17825,0.055663981767180924,83.033999,417.316,0.023338008415147268 +shiftleft,sky90,64,2247,0.4693798282153983,3562.300063,1920.0,0.9403649310191367 +mux2,tsmc28,8,30798,0.0337446408857718,16.758,114.743,0.005454899668809662 +mux4,sky90,16,4427,0.224217604924328,359.659999,419.855,0.10074542579625027 +csa,sky90,128,6415,0.1639816453624318,5895.680054,3630.0,2.7976617303195637 +comparator,tsmc28,8,18446,0.058025295348585054,37.548,189.059,0.009611839965304132 +mux8,tsmc28,32,11713,0.08517122410996329,172.115999,823.633,0.046956373260479814 +mux8,sky90,128,2507,0.3981901272437176,3752.420073,821.695,0.6968488232947746 +flop,sky90,128,10,0.1143419999999935,2132.4799805,1035.0,3.094 +priorityencoder,sky90,64,4426,0.25084764121102576,804.580015,353.584,0.07162223226389516 +flop,tsmc28,16,22091,0.048891303426734874,30.24,157.29,0.05447693630890407 +mult,sky90,64,607,1.6473724579901154,75321.821095,29500.0,72.59637561779242 +mux4,sky90,16,4226,0.24670538334122102,318.500005,131.356,0.08305726455276859 +add,sky90,128,1923,0.5214358008320333,6239.660121,2280.0,2.12532501300052 +mux2,sky90,64,3989,0.24961239583855604,479.220007,148.175,0.16570569064928556 +mux2,tsmc28,32,18261,0.05585551360823613,32.130001,171.146,0.009900881660369093 +mux4,sky90,128,2977,0.3352126328518643,2350.040007,969.13,0.8307020490426603 +mux2,sky90,64,4127,0.248457760358614,479.220009,106.14,0.15144172522413374 +add,sky90,64,2139,0.4674681813931744,2781.240054,1050.0,0.9392239364188874 +mux4,sky90,128,3260,0.3103584662576687,2170.700039,1040.0,0.694478527607362 +add,tsmc28,8,13284,0.07456053056308341,33.264,180.682,0.01306082505269497 +csa,sky90,64,5568,0.17497270114942529,2314.760045,1640.0,1.1876795977011494 +mux4,sky90,8,5287,0.22075118138831096,203.840004,102.281,0.046718365802912803 +mux4,tsmc28,1,24680,0.04009963857374392,2.898,17.89,0.0008812803889789302 +csa,tsmc28,16,25014,0.04049261253697929,104.832,964.99,0.043495642440233476 +mux2,tsmc28,64,18568,0.05371109651012495,91.35,523.884,0.027574321413183972 +csa,sky90,16,5568,0.17497270114942529,574.280011,400.9,0.292205459770115 +mux8,tsmc28,64,11234,0.08957548869503294,446.795996,2070.0,0.09337724764108954 +mux8d,sky90,1,7008,0.14061306392694065,110.740002,96.387,0.025470890410958902 +mux8,tsmc28,1,15690,0.06278186297004462,11.718,79.753,0.0036966220522625876 +mux4,tsmc28,128,10,0.3817059999999941,212.561998,731.833,0.07329999999999999 +mux4,sky90,8,4568,0.21942118563922944,136.220003,45.945,0.038507005253940456 +mux4,sky90,8,4693,0.21214331557639038,145.040003,64.775,0.0389729384189218 +comparator,tsmc28,16,14010,0.07188958743754462,52.92,242.622,0.014039971448965025 +priorityencoder,tsmc28,32,15146,0.06594503274792025,47.502,151.098,0.007295655618645188 +priorityencoder,tsmc28,32,17122,0.059302392010279176,59.598001,207.143,0.008871627146361406 +priorityencoder,sky90,128,3273,0.30545509471432936,1551.340029,539.05,0.10785212343415826 +mux4d,sky90,1,9701,0.10307715647871353,51.940001,49.18,0.013627461086485928 +mux2,tsmc28,16,18001,0.05470446930726071,14.994,80.805,0.004971946002999833 +add,sky90,8,3512,0.2841480410022779,244.020004,156.809,0.13069476082004555 +comparator,tsmc28,32,11896,0.08406186953597848,140.238,622.659,0.034045057162071284 +comparator,sky90,32,3530,0.28273311898016995,722.260014,318.387,0.11784702549575071 +mux2,sky90,8,4875,0.20357220512820512,60.760001,22.812,0.021271794871794873 +mux8,tsmc28,8,11869,0.08421509630128908,59.094,255.901,0.01325301204819277 +mux4d,sky90,1,10,0.188477000000006,13.72,1.708,0.00325 +priorityencoder,tsmc28,128,11211,0.08919110900008921,283.248002,843.21,0.03559004549103559 +mux4,tsmc28,128,12043,0.08302378842481109,260.315998,1150.0,0.08394918209748403 +flop,tsmc28,64,20454,0.04889119262735895,120.959999,630.0,0.21783025325119781 +mult,sky90,32,824,1.2735492330097087,28626.780516,20200.0,29.580097087378643 +mux8,tsmc28,32,11245,0.08892641262783459,215.837997,958.69,0.048999555357936854 +mux4,sky90,32,4283,0.24468120476301655,847.700016,518.861,0.18001400887228577 +csa,tsmc28,64,22562,0.04244531185178619,249.984005,1920.0,0.11022958957539225 +mux2,tsmc28,8,28429,0.03986434911533997,11.466,61.225,0.0031622638854690633 +shiftleft,sky90,32,2553,0.39648804386995695,1666.980028,1060.0,0.4888366627497062 +csa,sky90,8,6238,0.1653617909586406,338.100007,209.02,0.15581917281179863 +priorityencoder,sky90,8,7683,0.12508649056358195,50.960001,24.761,0.010685929975270078 +mux2,sky90,128,3956,0.2642535864509606,1007.440002,394.624,0.3660262891809909 +flop,tsmc28,16,20864,0.048891447852760735,30.24,157.289,0.054469421012269946 +mux2,tsmc28,128,16637,0.05991099044298852,176.525999,941.106,0.05012923002945243 +mux4,sky90,128,3303,0.3069780711474417,2001.160038,779.991,0.5818952467453831 +shiftleft,tsmc28,64,8603,0.1211845214460072,1153.529997,6100.0,0.3193072184121818 +csa,tsmc28,64,25505,0.04036599843168006,403.199997,3800.0,0.17047637718094488 +shiftleft,sky90,128,1831,0.5460426450027308,8026.200142,4230.0,2.3042053522665213 +shiftleft,tsmc28,16,10860,0.09202503130755064,79.632,346.968,0.02283609576427256 +comparator,tsmc28,32,13110,0.08841365064836003,147.798,653.398,0.03607932875667429 +shiftleft,tsmc28,8,15202,0.0656078183133798,50.652,367.074,0.016991185370346006 +mult,tsmc28,64,2486,0.41838261464199517,17830.386041,123000.0,20.405068382944492 +mux4,sky90,16,3827,0.25013328037627386,234.220005,65.786,0.06731120982492814 +mux4,sky90,32,3953,0.2646354260055654,694.820013,302.215,0.17227422210979004 +add,sky90,32,10,3.640808000000007,456.679995,55.753,0.1603 +priorityencoder,sky90,32,5171,0.20654319222587508,394.940008,211.398,0.04892670663314639 +comparator,tsmc28,16,13461,0.07416968583314762,48.888,209.064,0.012599361117301833 +add,sky90,8,3365,0.2960748202080238,240.100004,135.697,0.12124814264487371 +flop,tsmc28,32,19636,0.04889186901609289,60.4799995,314.5785,0.10893257282542271 +mux4,tsmc28,32,14285,0.06951250017500875,70.056,308.062,0.021701085054252712 +mux4,tsmc28,32,15196,0.06580579126085812,69.174,324.969,0.023229797315082915 +add,sky90,64,2096,0.4770132366412214,2851.800056,1100.0,0.9990458015267174 +mux4,tsmc28,128,12304,0.08125338231469441,292.949997,1310.0,0.08566319895968791 +flop,tsmc28,64,19636,0.04889186901609289,120.959999,630.0,0.21783968221633732 +mux8,sky90,8,3585,0.2789170278940028,287.140006,116.648,0.06089260808926081 +mux2,sky90,64,4088,0.2460983953033268,482.160008,124.422,0.15557729941291584 +mux2d,sky90,1,12160,0.07841884210526316,18.62,16.576,0.005921052631578948 +mult,tsmc28,32,10,2.1397929999999974,1770.426003,6970.0,1.456 +mux2,sky90,128,3652,0.2735615629791895,942.760018,230.203,0.3044906900328587 +mux8,sky90,64,3027,0.33226909250082587,2210.880042,855.564,0.4800132144037 +priorityencoder,sky90,32,4979,0.2094015428800964,372.400007,230.625,0.04500903795942961 +comparator,sky90,8,5226,0.20861193761959435,224.420003,142.569,0.05778798316111749 +mux8,sky90,128,2720,0.37196705882352943,4226.740078,1240.0,0.8011029411764705 +mux4,sky90,128,3663,0.306884273000273,2294.180044,743.289,0.5511875511875511 +comparator,tsmc28,128,8621,0.11599382415033059,419.705999,1440.0,0.09163670107876117 +mux4,sky90,128,3256,0.3071863071253071,2184.420042,693.138,0.5810810810810811 +flop,tsmc28,128,10,0.048889000000002625,241.919998,1260.0,0.43579999999999997 +mult,tsmc28,128,1719,0.5817325660267597,38214.666162,205000.0,39.616055846422334 +mux4,sky90,1,7478,0.1283835950788981,28.420001,21.808,0.006338593206739769 +flop,tsmc28,16,10,0.048889000000002625,30.24,157.29,0.054290000000000005 +comparator,sky90,8,4645,0.21420925296017224,196.000004,116.123,0.04736275565123789 +mux2,sky90,64,3980,0.25226428140703516,526.259999,203.192,0.19095477386934673 +shiftleft,sky90,16,3288,0.30390325304136256,618.380008,475.055,0.1648418491484185 +mult,sky90,64,594,1.6834886835016836,71780.100958,24600.0,63.42255892255892 +mux4,sky90,1,7322,0.13543670636438132,32.340001,22.173,0.006787762906309752 +mux2,tsmc28,8,31391,0.03374526453442069,16.758,114.743,0.005456978114746265 +mux4,tsmc28,32,10,0.12346599999999341,54.431999,199.177,0.01354 +csa,sky90,32,5758,0.16536141368530738,1066.240021,616.808,0.5448072247308093 +mux8d,sky90,1,7605,0.13242743918474686,89.180001,45.284,0.01604207758053912 +priorityencoder,tsmc28,32,15805,0.06325111673521037,49.896,157.04,0.007586206896551723 +mux4,tsmc28,64,13369,0.07450691024010771,136.331999,609.938,0.043832747400703115 +flop,tsmc28,128,22091,0.048891303426734874,241.919998,1260.0,0.43565252817889644 +comparator,sky90,8,4452,0.22251914914645105,175.420003,102.05,0.044609164420485174 +mux2d,sky90,1,12688,0.07841862799495587,18.62,16.576,0.005918978562421185 +csa,tsmc28,16,25505,0.04036599843168006,100.799999,950.751,0.04277592628896295 +mux4,sky90,16,4213,0.2508225506764776,283.220006,87.245,0.07239496795632566 +flop,sky90,32,9096,0.11434443447669304,533.119995,259.258,0.7742414248021108 +priorityencoder,tsmc28,64,14080,0.07119772727272727,165.312001,544.165,0.02166193181818182 +mux4,tsmc28,32,16108,0.06632995356344673,93.239999,437.954,0.02675689098584554 +priorityencoder,tsmc28,16,20403,0.048862400137234724,20.412,65.051,0.0036612262902514328 +mux8,sky90,8,3729,0.2746434097613301,422.380008,228.3,0.09680879592384017 +priorityencoder,sky90,64,3852,0.25960539979231567,720.300014,251.028,0.059449636552440295 +mux4,sky90,8,4661,0.21448923471358078,164.640002,88.494,0.0431452478009011 +mux4,sky90,32,3813,0.25986668712300026,471.380009,153.367,0.14030946761080512 +priorityencoder,tsmc28,128,10982,0.09105009506465125,249.984,708.42,0.031050810417046076 +mux4,sky90,64,3488,0.29027124770642204,1076.04002,336.513,0.28526376146788995 +mux2,sky90,1,11324,0.08482301836806781,11.76,9.281,0.0037265983751324622 +flop,sky90,64,8571,0.11434450029168125,1066.23999,520.0,1.548302415120756 +flop,sky90,64,9270,0.11434386515641856,1066.23999,520.0,1.5483279395900755 +flop,tsmc28,128,20864,0.048891447852760735,241.919998,1260.0,0.43563075153374237 +flop,sky90,8,8396,0.11434433539780849,133.279999,64.8145,0.19359218675559792 +mux4d,tsmc28,1,33909,0.02948569568551122,6.426,53.381,0.001967029402223598 +mux4,tsmc28,64,14483,0.07128446827314783,225.287996,1000.0,0.05792998688117103 +shiftleft,sky90,64,2336,0.4500001917808219,4441.360059,3810.0,1.3458904109589043 +csa,sky90,32,6238,0.1653617909586406,1349.460026,801.907,0.6146200705354279 +mux2,tsmc28,1,49852,0.019658375752226592,2.142,15.112,0.0006017812725667977 +comparator,tsmc28,16,12912,0.07736533581164808,50.4,200.11,0.012732342007434944 +mux8,sky90,64,2906,0.3440756228492774,2132.48004,808.482,0.44287680660701995 +mux8,sky90,32,3242,0.32156957310302287,1071.14002,340.021,0.22270203578038247 +flop,tsmc28,32,20045,0.04889175255674732,60.4799995,314.5785,0.10893739087054129 +mux4,sky90,64,3933,0.30270983549453345,1673.840027,1300.0,0.4558860920416985 +mux4,sky90,16,4571,0.26359750973528767,358.680007,100.453,0.07941369503390942 +comparator,sky90,128,2522,0.3958217057890563,2654.820052,488.071,0.3370340999206979 +mux2,sky90,32,3400,0.29179964705882355,223.440004,42.391,0.07158823529411765 +add,tsmc28,16,11290,0.08851795925597875,85.428,437.897,0.03153232949512843 +mux4,sky90,16,4500,0.2284882222222222,437.080003,420.382,0.10422222222222222 +flop,sky90,8,8921,0.11434405660800359,133.279999,64.8145,0.19361058177334378 +add,sky90,8,3585,0.2792020278940028,268.520005,182.205,0.13361227336122733 +priorityencoder,sky90,128,3341,0.29916058335827594,1694.420031,709.89,0.1343909009278659 +comparator,tsmc28,16,12637,0.07900370554720265,43.218,177.517,0.011403022869351903 +mux4,sky90,64,3414,0.2928525407147042,1048.60002,252.076,0.2685998828353837 +csa,tsmc28,32,25995,0.040894936333910364,201.599998,1900.0,0.08578572802462012 +add,tsmc28,8,12731,0.07846142510407667,28.98,157.91,0.011994344513392508 +mux4,tsmc28,8,10,0.07530199999999354,15.12,54.869,0.00356 +flop,sky90,16,8046,0.11434435918468804,266.5599975,129.629,0.38714889386030327 +mux2,tsmc28,128,17636,0.05977820004536176,201.347999,1400.0,0.06707870265366295 +mux4,sky90,16,4484,0.22884816503122213,436.100003,418.878,0.10347903657448705 +mux4d,sky90,1,9507,0.10386665267697485,50.960001,47.194,0.013484800673188175 +mux4,tsmc28,128,13875,0.07613907207207207,305.927997,1490.0,0.09643243243243244 +mux4,tsmc28,1,27305,0.03808832906061161,5.292,41.928,0.0017103094671305622 +shiftleft,tsmc28,32,9012,0.11093316023080337,245.951999,1140.0,0.06746560142032845 +priorityencoder,tsmc28,16,22954,0.04644439165287096,26.712,104.46,0.004752984229328221 +mux2,tsmc28,32,17545,0.05664229524080935,30.366001,167.377,0.009905956112852665 +mult,sky90,8,1337,0.7566541563201197,2445.100044,1850.0,1.6222887060583395 +priorityencoder,sky90,32,5075,0.20628333497536946,382.200007,257.609,0.05142857142857143 +comparator,sky90,16,10,0.9970469999999949,252.840005,31.402,0.0261 +mult,sky90,16,1057,1.005271793755913,8161.440151,5800.0,7.126773888363293 +priorityencoder,tsmc28,128,12355,0.08705389113719142,300.006001,970.795,0.0405503844597329 +mux4,tsmc28,16,16816,0.06093117411988582,41.202,195.667,0.012725975261655566 +shiftleft,sky90,16,3154,0.3167537045022194,546.840011,299.663,0.12682308180088775 +csa,tsmc28,32,25014,0.04049261253697929,209.664,1930.0,0.08675141920524505 +mux2,tsmc28,32,10,0.17166100000000029,28.728001,146.078,0.00979 +mux4,tsmc28,1,26255,0.03808798324128737,5.292,41.928,0.0017101504475338031 +mux2d,tsmc28,1,50709,0.019658365221163897,2.142,15.112,0.0006014711392454988 +add,tsmc28,8,14945,0.07161801070592172,40.068,231.181,0.015396453663432584 +mux8,sky90,16,3705,0.2855275330634278,599.760012,190.243,0.1214574898785425 +mult,sky90,128,534,1.9193641760299625,301809.624151,125000.0,289.23595505617976 +mux2,tsmc28,16,17618,0.054704131683505505,14.994,80.805,0.004972187535475082 +add,tsmc28,128,7787,0.1333521601386927,1023.246011,5130.0,0.38153332477205604 +add,tsmc28,16,10829,0.0922426301597562,72.45,357.027,0.027241665897128085 +shiftleft,tsmc28,64,7942,0.12590886829513975,745.289994,3610.0,0.21191135734072022 +mux4,sky90,32,3889,0.2611895104139882,714.420014,328.777,0.19002314219593724 +mux2,tsmc28,1,46800,0.021009521367521367,1.89,12.344,0.0005767094017094016 +mux4,sky90,1,8412,0.12749279362815027,28.420001,25.098,0.0064907275320970036 +mult,sky90,64,10,15.014533999999998,46801.860227,5460.0,19.459999999999997 +mult,sky90,64,632,1.5822664810126583,86011.661365,42600.0,88.84651898734177 +mux4,sky90,16,4840,0.2558435702479339,359.660007,120.182,0.0737603305785124 +mult,sky90,8,1310,0.7631557786259543,2194.220041,1440.0,1.421374045801527 +mux8,tsmc28,64,11675,0.09174310492505353,303.407999,1480.0,0.0835117773019272 +mux2,tsmc28,128,16970,0.05955851915144372,179.045998,924.038,0.04908662345315262 +shiftleft,sky90,16,3087,0.32345509944930356,604.660009,407.488,0.16747651441528993 +flop,tsmc28,16,19636,0.04889186901609289,30.24,157.289,0.054466286412711354 +shiftleft,tsmc28,16,11804,0.08465604506946797,127.511999,602.29,0.03388681802778719 +csa,sky90,64,5810,0.16922003958691909,2696.960052,1950.0,1.3139414802065403 +mux2,sky90,1,11565,0.0848227907479464,11.76,9.281,0.0037267617812364894 +priorityencoder,tsmc28,128,10754,0.09298165538404315,237.636,654.025,0.029105449135205505 +mux2,sky90,128,4032,0.24862387301587302,1305.360024,778.01,0.45907738095238093 +shiftleft,tsmc28,64,8934,0.12338694537721065,1131.605996,5920.0,0.3117304678755317 +mux4,sky90,16,4123,0.24214683846713558,291.060006,99.813,0.0720834343924327 +shiftleft,tsmc28,16,12276,0.08213775887911372,128.771999,599.581,0.033154121863799284 +mux2,sky90,64,3954,0.25284044714213455,482.160009,158.571,0.16514921598381385 +mux4,tsmc28,128,14137,0.07497236556553724,331.505997,1600.0,0.09705029355591709 +mux2,tsmc28,16,19533,0.052470412891004965,15.372,84.373,0.00504274816976399 +mux4,sky90,128,3237,0.30838301977139326,2062.900036,880.935,0.6774791473586654 +mux4,sky90,128,3249,0.3077210113881194,2013.900038,818.249,0.6094182825484764 +flop,tsmc28,64,20864,0.048891447852760735,120.959999,630.0,0.21783934049079753 +shiftleft,sky90,32,2503,0.39951757530962845,1475.880027,768.262,0.3807431082700759 +csa,tsmc28,128,22562,0.04244531185178619,499.96801,3850.0,0.2204591791507845 +flop,tsmc28,8,21273,0.0488919443425939,15.12,78.6345,0.027236402952098903 +mux2d,tsmc28,1,55991,0.01893201321640978,3.276,26.574,0.0009269346859316676 +csa,sky90,32,10,0.2641830000000027,470.399994,55.245,0.1684 +shiftleft,sky90,8,4154,0.2387968247472316,217.560004,130.113,0.0530091478093404 +mux8,tsmc28,8,12644,0.07905289591901297,44.352,215.422,0.011839607719076242 +mux2,tsmc28,1,54939,0.019658005861045887,2.142,15.112,0.0006006661934145144 +flop,tsmc28,128,20045,0.04889175255674732,241.919998,1260.0,0.43564479920179594 +flop,tsmc28,16,20454,0.04889119262735895,30.24,157.289,0.054471008115771984 +mux2,sky90,32,4903,0.20096176116663267,374.360008,257.036,0.1366510299816439 +shiftleft,tsmc28,32,9204,0.10864541373315949,288.539999,1370.0,0.08192090395480227 +comparator,tsmc28,64,10645,0.09393481728511037,278.712,1140.0,0.06519492719586659 +mux4,sky90,32,3737,0.26718032700026756,447.860009,138.381,0.1364731067701365 +csa,sky90,16,6415,0.1639816453624318,736.960007,453.967,0.3499610288386594 +add,sky90,128,1847,0.5413075165132648,6010.340117,1930.0,2.0184082295614507 +csa,tsmc28,8,26486,0.040226795514611495,52.416,489.192,0.021860605602960055 +flop,tsmc28,64,19227,0.048891193998023615,120.959999,630.0,0.2178186924637229 +flop,tsmc28,32,19227,0.048891193998023615,60.4799995,314.5785,0.10892754979976076 +mux4,sky90,32,3584,0.27880885714285714,450.800009,134.823,0.138671875 +mux8,tsmc28,8,13934,0.07549890110521028,46.494,225.202,0.012243433328548874 +csa,sky90,16,10,0.2641830000000027,235.199997,27.622,0.0846 +mux2,sky90,8,5617,0.18835097739006587,64.680001,21.541,0.019316361046822147 +mux2,sky90,32,3550,0.26887414084507044,226.380004,71.139,0.07999999999999999 +mux2,sky90,16,4751,0.20207400378867607,119.560002,32.354,0.03896021890128394 +mux4,sky90,16,3668,0.26406813522355504,238.140005,68.275,0.0723009814612868 +shiftleft,tsmc28,16,11568,0.08636336652835408,114.407998,555.079,0.032244121715076075 +mux2,tsmc28,128,10,0.31761899999999343,113.274004,578.362,0.0475 +add,sky90,8,3731,0.2784306582685607,282.240005,170.25,0.14312516751541143 +mux2,sky90,128,4004,0.24974824975024976,1302.420025,767.078,0.4665334665334665 +add,sky90,32,2226,0.44901729829290205,1172.080023,417.603,0.44923629829290207 +mux2d,tsmc28,1,57047,0.018932405577856855,3.276,26.574,0.0009273055550686277 +mux2,tsmc28,16,10,0.08560900000000515,14.49,74.123,0.00485 +mux4,sky90,32,3871,0.26118918057349527,714.420014,329.878,0.19064841126323948 +mux4,sky90,128,10,1.923141000000001,1662.080032,111.431,0.439 +comparator,sky90,16,4179,0.24596069657812875,417.480006,278.291,0.08542713567839195 +shiftleft,sky90,32,2704,0.3823014852071006,1741.460027,1220.0,0.47928994082840237 +mux4,tsmc28,128,13351,0.07571775649764062,330.245998,1650.0,0.10074151748932667 +comparator,sky90,32,3746,0.2740004148424987,769.300014,392.725,0.12786972770955685 +comparator,tsmc28,32,11653,0.08639581163648846,133.308,567.495,0.03226636917531966 +shiftleft,sky90,128,1984,0.5263342580645162,9846.060141,7380.0,3.1139112903225805 +flop,sky90,16,8396,0.11434433539780849,266.5599975,129.629,0.38708909004287756 +flop,tsmc28,64,20045,0.04889175255674732,120.959999,630.0,0.21780992766275878 +add,sky90,16,3177,0.3287743544224111,734.020014,502.145,0.32892666037141954 +mux8,tsmc28,32,11947,0.08545102167908261,294.588,1430.0,0.06068469071733489 +add,tsmc28,32,10401,0.10034260148062688,236.250002,1260.0,0.09133737140659552 +mult,tsmc28,32,3151,0.330004568390987,6357.077997,47200.0,6.3624246271025084 +comparator,tsmc28,64,11514,0.09154979034219211,276.192001,1270.0,0.06513809275664408 +csa,tsmc28,8,25014,0.04049261253697929,52.416,482.462,0.02170784360757975 +priorityencoder,sky90,64,4098,0.2439914738897023,797.720015,382.205,0.07393850658857981 +csa,tsmc28,64,25995,0.040894936333910364,403.199997,3790.0,0.17187920753991154 +add,sky90,8,3951,0.26842548089091367,271.460005,148.556,0.12401923563654771 +priorityencoder,sky90,64,10,1.535827999999995,436.100008,29.529,0.02269 +mux2,sky90,64,4315,0.2418707103128621,485.100007,130.641,0.159675550405562 +csa,tsmc28,128,24524,0.040663382319360626,838.655998,7720.0,0.3471701190670363 +add,tsmc28,128,7210,0.13869425520110956,868.140006,4090.0,0.33134535367545076 +mux8,sky90,32,3432,0.3320732913752914,899.640018,274.871,0.17424242424242425 +mux8,sky90,8,3872,0.2781554628099173,312.620006,98.575,0.05661157024793389 +add,sky90,16,10,1.9208679999999987,221.479998,28.13,0.07880000000000001 +priorityencoder,tsmc28,64,14908,0.07170007888382077,148.932001,495.463,0.020056345586262413 +csa,tsmc28,128,24034,0.04077672239327619,790.271996,7570.0,0.3422651244070899 +add,tsmc28,64,7713,0.12962723816932453,359.478003,1670.0,0.1358744976014521 +csa,sky90,8,6478,0.16536163229391787,375.340007,216.172,0.15930842852732327 +mux8,sky90,128,2827,0.37011887124159887,4557.000083,1680.0,0.9458790237000354 +comparator,sky90,128,2469,0.4048802762251924,2907.660056,623.203,0.317942486836776 +comparator,tsmc28,64,9994,0.10003003602161296,225.54,848.556,0.0517310386231739 +add,sky90,64,2310,0.4818804329004329,2896.880056,1140.0,1.0454545454545454 +csa,tsmc28,128,23543,0.04244547041583485,499.96801,3850.0,0.22049016692859874 +mux2,sky90,128,3880,0.25698395876288654,1652.280032,1290.0,0.5945876288659794 +mux4,tsmc28,32,15804,0.06679512022272842,75.221999,360.596,0.02372817008352316 +mux2,tsmc28,1,51887,0.019658650182126546,2.142,15.112,0.0006013066856823482 +add,sky90,64,2268,0.46467410758377425,2989.000058,1150.0,1.0533509700176367 +flop,sky90,128,8921,0.11434405660800359,2132.4799805,1035.0,3.096457796211187 +shiftleft,tsmc28,16,11096,0.09008356669069935,82.907999,376.563,0.02406272530641673 +mux4,tsmc28,64,12812,0.07728182641273805,113.399999,453.176,0.03660630658757415 +comparator,tsmc28,128,8809,0.11351826336701101,441.503999,1580.0,0.09774094675899647 +comparator,tsmc28,32,12381,0.082321920119538,163.044,743.896,0.03941523301833454 +flop,sky90,128,9270,0.11434386515641856,2132.4799805,1035.0,3.0964940668824164 +mux2,sky90,64,4032,0.24874687301587303,475.300009,113.443,0.1515376984126984 +mux4,sky90,128,3167,0.31575023618566467,2016.840039,722.109,0.5917271866119356 +comparator,sky90,32,10,1.0165939999999978,495.88001,66.41,0.0424 +comparator,sky90,16,3938,0.25292600812595223,388.080008,208.857,0.07719654647028949 +priorityencoder,sky90,16,6244,0.1666287475976938,185.220003,132.902,0.03294362588084561 +flop,tsmc28,16,21682,0.04889120653076284,30.24,157.29,0.05447606309381053 +mux4d,sky90,1,10284,0.10307742862699339,51.940001,49.18,0.01364255153636717 +comparator,tsmc28,8,16055,0.062218892245406415,26.208,124.888,0.007144191840548115 +mux2,tsmc28,1,52905,0.01965880512238919,2.142,15.112,0.0006010774028919763 +mux4,sky90,128,3357,0.3042110163836759,2132.480041,762.467,0.5895144474232946 +shiftleft,sky90,8,4414,0.25993588038060716,218.540004,115.4,0.05822383325781604 +add,tsmc28,64,7549,0.13246087653993907,330.372002,1490.0,0.1241224003179229 +add,tsmc28,8,14668,0.07161662039814562,39.06,231.044,0.015387237523861466 +comparator,sky90,128,2791,0.35824651809387315,2744.980052,796.047,0.34396273737011823 +shiftleft,tsmc28,32,10163,0.10229014287119945,394.632001,2000.0,0.11040047230148578 +priorityencoder,sky90,8,7362,0.1356376541700625,49.980001,33.776,0.009277370279815267 +mult,sky90,32,763,1.3106129895150722,25200.700446,14900.0,24.931847968545217 +mux2,sky90,8,10,0.41516099999999767,58.800001,10.206,0.01786 +mult,sky90,32,10,8.063384999999997,12417.580067,1180.0,4.64 +mux4,tsmc28,8,17425,0.05691080918220947,19.782,89.585,0.006134863701578192 +mult,sky90,128,514,1.9488052918287937,289359.703832,109000.0,263.0311284046693 +flop,tsmc28,128,19227,0.048891193998023615,241.919998,1260.0,0.4356113798304468 +priorityencoder,sky90,8,10,0.47602799999999945,34.300001,2.489,0.004279 +add,tsmc28,32,9616,0.10391334442595675,202.104002,1010.0,0.07945091514143095 +add,tsmc28,32,9223,0.10841559069717012,174.132001,855.479,0.07090968231594924 +priorityencoder,sky90,16,10,0.660728000000006,85.260002,5.247,0.00692 +csa,sky90,64,6294,0.16398147442008262,3136.000061,1970.0,1.448363520813473 +mux4,tsmc28,64,14205,0.0709287472720873,145.655999,671.083,0.046180922210489264 +mux2,tsmc28,128,17968,0.05788449688334818,210.924,1240.0,0.06077471059661621 +mux4,sky90,8,4726,0.21123742953872196,148.960002,66.984,0.04026661024121879 +mux8,tsmc28,16,11282,0.08828276653075696,76.356,313.906,0.019553270696684985 +mult,tsmc28,128,10,8.397948999999997,26059.445743,91700.0,25.69 +mux4,sky90,128,3391,0.3066542601002654,2248.120044,733.383,0.5682689472132114 +mux4,sky90,8,4288,0.2311609552238806,120.540002,34.353,0.03362873134328358 +priorityencoder,sky90,32,4500,0.2218912222222222,372.400007,189.626,0.04371111111111111 +add,tsmc28,8,14391,0.07025787436592315,37.422,203.854,0.014008755472170106 +csa,tsmc28,64,10,0.06758100000000411,137.087997,458.434,0.05770000000000001 +mux2d,tsmc28,1,48596,0.019658825335418552,2.142,15.112,0.0006029302823277636 +mux8,tsmc28,8,13160,0.07636884194528876,46.494,227.561,0.01222644376899696 +mux8,tsmc28,32,12416,0.08657423711340206,248.723997,1220.0,0.054043170103092786 +mux4,sky90,8,5091,0.22075106383814574,203.840004,102.281,0.046768807699862504 +mux8,sky90,16,3362,0.295237998810232,582.120003,282.366,0.14455681142177274 +mux4,tsmc28,16,10,0.092804000000001,28.224,102.974,0.0069 +mult,sky90,128,524,1.9083759465648855,296198.144128,114000.0,273.3148854961832 +flop,tsmc28,32,20864,0.048891447852760735,60.4799995,314.5785,0.10891487730061351 +csa,sky90,16,6294,0.16398147442008262,784.000015,491.595,0.36272640610104856 +mux8,tsmc28,16,11528,0.08572431575294935,77.994,322.722,0.01940492713393477 +comparator,sky90,8,10,0.7786030000000039,118.580002,16.053,0.013359999999999999 +mux2,sky90,128,3764,0.26554481402763014,1265.179998,702.615,0.4766206163655685 +csa,tsmc28,16,22562,0.04244531185178619,62.496001,481.11,0.02765712259551458 +comparator,tsmc28,128,10121,0.10600846596186148,551.376001,2560.0,0.12597569410137338 +priorityencoder,sky90,64,3770,0.2649169893899205,720.300013,283.102,0.06100795755968169 +mult,sky90,8,1232,0.8116313116883117,1834.560034,953.397,1.1055194805194806 +add,tsmc28,128,10,3.638641000000007,272.789995,918.55,0.1339 +add,tsmc28,16,12212,0.08589166885031116,99.792001,541.144,0.03807730101539469 +mux2,sky90,16,4652,0.21329230696474635,115.640002,41.725,0.04312123817712812 +priorityencoder,sky90,8,8483,0.12521182447247436,64.680001,49.589,0.01462925851703407 +mult,tsmc28,32,2795,0.35777975313059035,3901.212023,26100.0,4.221466905187835 +mux2,tsmc28,8,27245,0.03986398238208846,11.466,61.225,0.0031602128830978157 +mult,sky90,64,619,1.6154428852988691,82141.641305,36600.0,84.04200323101776 +add,sky90,32,2420,0.4132191404958678,1330.840024,582.809,0.5206611570247934 +mux2,sky90,64,4071,0.25437589191844756,466.480009,106.771,0.15131417342176368 +mux2,sky90,1,12288,0.08300820833333333,13.72,12.3,0.00390625 +priorityencoder,sky90,16,5537,0.1802842147372223,126.420002,65.822,0.018945277225934625 +mux8,sky90,1,6114,0.17152604481517827,86.240001,79.616,0.01625776905462872 +comparator,sky90,64,3004,0.33252048069241014,1401.400026,500.904,0.2097203728362184 +mult,tsmc28,64,2581,0.41287172607516465,18964.008028,134000.0,21.443626501356064 +mux8,tsmc28,1,15356,0.06469512529304507,6.804,32.934,0.0018566032821047149 +priorityencoder,sky90,64,4262,0.24266362834350072,888.860015,460.967,0.08305959643359925 +flop,sky90,8,8046,0.11434435918468804,133.279999,64.8145,0.19361794680586625 +mux2d,sky90,1,13482,0.07565897136923305,19.6,18.562,0.006037679869455571 +mux2,sky90,32,10,0.9805759999999992,222.460004,38.896,0.08660000000000001 +add,tsmc28,16,11751,0.08525914049868095,95.382001,501.111,0.03625223385243809 +mux4,sky90,8,4895,0.21053709193054138,164.640002,96.679,0.04439223697650664 +flop,sky90,32,9270,0.11434386515641856,533.119995,259.258,0.7742718446601942 +mux2,sky90,64,4459,0.24442353038797937,564.480008,225.034,0.1910742318905584 +shiftleft,tsmc28,32,10,0.2576830000000001,108.108,362.436,0.0312 +csa,tsmc28,8,25995,0.040894936333910364,50.4,473.705,0.02154260434698981 +csa,tsmc28,64,25014,0.04049261253697929,419.327999,3860.0,0.17346286079795317 +comparator,tsmc28,32,12139,0.08236710865804432,145.782,622.975,0.03567015404893319 +mult,tsmc28,64,2533,0.4110307879984208,19456.542013,137000.0,22.258981444926967 +csa,tsmc28,64,26486,0.040226795514611495,419.327997,3910.0,0.17428075209544666 +comparator,tsmc28,64,10863,0.09205360158335635,281.736,1150.0,0.06526742152259966 +mux8,tsmc28,32,11479,0.08648460240439063,162.288,783.316,0.045648575659900686 +shiftleft,sky90,16,3489,0.3163680759529951,644.840009,367.22,0.18515333906563486 +csa,tsmc28,64,23053,0.04244530217325294,249.984005,1920.0,0.11022426582223571 +mux4,sky90,8,4993,0.2106033925495694,159.740002,79.159,0.04195874223913479 +mux4,tsmc28,128,13613,0.07641319341805627,307.943996,1470.0,0.09696613531183428 +add,tsmc28,64,10,1.836310999999995,135.701998,459.885,0.06620000000000001 +mux2,sky90,128,10,0.9859239999999971,882.000017,273.775,0.41000000000000003 +mux2,sky90,64,4152,0.24532878420038537,472.360009,114.673,0.15221579961464354 +mux2,sky90,128,3576,0.2794420581655481,939.820018,331.591,0.34004474272930646 +mux2,tsmc28,128,16305,0.0613148800981294,190.008,1070.0,0.05636307881018093 +mux4,sky90,16,4392,0.22421770309653916,359.659999,419.855,0.1006375227686703 +shiftleft,sky90,64,2291,0.44757461545176774,3929.800064,2900.0,1.0781318201658665 +comparator,sky90,16,4340,0.2460047465437788,415.520007,287.169,0.08801843317972351 +mux2d,sky90,1,14275,0.07565853940455342,19.6,18.562,0.006038528896672504 +flop,sky90,32,8746,0.11434398307797851,533.119995,259.258,0.7742396524125315 +flop,tsmc28,8,18818,0.04889161005420342,15.12,78.634,0.027231905622276543 +flop,tsmc28,32,22091,0.048891303426734874,60.4799995,314.581,0.1089312389660948 +shiftleft,sky90,16,3221,0.3100215892579944,568.400009,361.777,0.15088481837938528 +flop,tsmc28,16,20045,0.04889175255674732,30.24,157.289,0.05446994262908456 +mux8,tsmc28,16,10,0.1332400000000007,55.314,209.828,0.00977 +add,sky90,64,2011,0.4972310422675286,2600.920051,698.518,0.7419194430631526 +mux4,tsmc28,16,17146,0.06054764084917765,41.454,196.466,0.01294762626851744 +mux2,sky90,64,4046,0.24701768660405338,470.400009,113.216,0.15076618882847256 +mux8,tsmc28,32,12650,0.08457538339920949,166.194,848.034,0.045138339920948616 +mux8d,tsmc28,1,21936,0.045586162654996355,20.664,171.151,0.0066146973012399714 +shiftleft,sky90,32,2654,0.37915475131876414,1722.840029,1260.0,0.48342125094197436 +add,sky90,8,3658,0.27337042810278844,253.820005,154.438,0.10825587752870422 +mult,sky90,32,732,1.366111218579235,22404.76038,10600.0,21.352459016393443 +mult,sky90,16,1077,1.0042961067780873,8138.90015,5900.0,7.317548746518106 +add,sky90,16,3118,0.3282264092366902,736.960014,480.371,0.340602950609365 +shiftleft,tsmc28,8,10,0.12195599999999729,15.624,50.976,0.00468 +shiftleft,sky90,128,2022,0.5271028417408506,10014.620149,7320.0,3.1434223541048465 +shiftleft,sky90,64,2380,0.45773406722689075,3919.020064,2710.0,1.1453781512605041 +add,sky90,64,1968,0.5080270813008131,2562.700049,727.43,0.8257113821138212 +mux4,tsmc28,16,17476,0.06042933211261158,44.603999,221.905,0.013962005035477227 +mux4,tsmc28,16,17805,0.060904998876720025,41.454,205.138,0.012580735748385285 +mult,sky90,64,657,1.5743890152207,91424.201493,51700.0,99.10806697108069 +add,sky90,16,3060,0.33280138562091505,654.640013,402.982,0.30130718954248364 +shiftleft,tsmc28,16,12512,0.083927273657289,133.055999,664.296,0.0356457800511509 +mux8,sky90,16,3499,0.2878559416976279,651.700012,325.896,0.1434695627322092 +mux4,sky90,1,7633,0.12838308777675883,28.420001,22.994,0.006406393292283505 +shiftleft,tsmc28,8,14290,0.06990600629811056,40.95,293.744,0.013638908327501751 +mux8,sky90,1,6349,0.1691041189163648,77.420002,50.656,0.012364151834934636 +priorityencoder,tsmc28,8,31962,0.035221153494775045,9.198,37.469,0.0018521994868906828 +mux4,sky90,8,4709,0.21214331195582928,145.040003,60.946,0.03909534933106817 +shiftleft,sky90,16,3355,0.29803959314456036,666.400006,558.433,0.19552906110283155 +mux4,tsmc28,8,17062,0.05850077611065526,19.53,84.328,0.00568514828273356 +comparator,tsmc28,128,9746,0.10437919741432382,625.338001,2880.0,0.1468294684998974 +add,tsmc28,16,12442,0.08824893039704226,113.274001,694.899,0.04436585757916734 +priorityencoder,tsmc28,64,14632,0.0725743570256971,137.214,427.879,0.017974302897758337 +mux8d,tsmc28,1,23253,0.04558620362963919,20.664,171.151,0.006596998236786652 +mux2,sky90,32,4602,0.21088882746631898,368.480007,245.044,0.13450673620165146 +flop,tsmc28,16,19227,0.048891193998023615,30.24,157.289,0.054465075154730334 +flop,sky90,16,9096,0.11434443447669304,266.5599975,129.629,0.3871481970096746 +flop,sky90,128,8221,0.1143447031991242,2132.4799805,1035.0,3.096338644933706 +mult,tsmc28,8,5000,0.19998100000000002,444.150001,3260.0,0.307 +mult,sky90,16,977,1.0235154534288637,7283.360133,4580.0,6.243602865916069 +flop,tsmc28,128,19636,0.04889186901609289,241.919998,1260.0,0.4356284375636586 +shiftleft,sky90,128,1945,0.5336378174807198,8909.180133,5830.0,2.820051413881748 +comparator,sky90,64,3192,0.3360462080200501,1335.740026,391.156,0.1779448621553885 +mux4,sky90,8,4700,0.2121439574468085,145.040003,64.775,0.03893617021276596 +comparator,sky90,8,4742,0.21876148460565162,196.980003,82.494,0.03829607760438633 +mux2d,tsmc28,1,10,0.029228000000003362,0.882,4.502,0.000264 +flop,tsmc28,64,21682,0.04889120653076284,120.959999,630.0,0.2178535190480583 +mux4d,sky90,1,9895,0.1030771419909045,51.940001,49.18,0.013633148054573016 +flop,tsmc28,32,21682,0.04889120653076284,60.4799995,314.581,0.10892675952402915 +mult,sky90,8,1206,0.8280323963515754,1868.860035,988.885,1.1044776119402984 +priorityencoder,tsmc28,64,12975,0.07704429094412331,114.912,326.132,0.015221579961464355 +mux8,sky90,16,3430,0.2957901895043732,640.920012,234.96,0.12128279883381925 +mux4,sky90,1,7945,0.12749332410320954,28.420001,23.453,0.006419131529263688 +mux2,tsmc28,8,27837,0.039864411287135824,11.466,61.225,0.0031612601932679524 +mult,sky90,64,670,1.561193313432836,92421.841521,53500.0,101.42388059701491 +priorityencoder,tsmc28,8,33842,0.033048081023580166,11.34,48.981,0.002095029844571834 +shiftleft,sky90,8,10,0.705528000000001,130.340003,10.712,0.024439999999999996 +comparator,sky90,128,2737,0.3784935367190354,2763.600053,937.534,0.3624406284252832 +priorityencoder,tsmc28,128,11440,0.0874065874125874,317.646,973.649,0.041171328671328666 +mult,tsmc28,64,2390,0.4184090418410042,16045.092071,109000.0,18.54602510460251 +mux2d,tsmc28,1,54934,0.018931662576910473,3.276,26.574,0.0009265664251647431 +csa,sky90,128,5931,0.1654056314280897,4264.960083,2470.0,2.178553363682347 +csa,sky90,8,5878,0.16847689316093908,282.240005,197.88,0.1439265056141545 +mux4,sky90,16,10,0.5659639999999939,219.520004,14.317,0.049400000000000006 +csa,tsmc28,64,24524,0.040663382319360626,419.327999,3860.0,0.17342195400424076 +mux4,sky90,128,3221,0.31600558925799443,2300.060044,812.053,0.6184414778019248 +shiftleft,sky90,32,2604,0.38592357757296464,1571.920027,1010.0,0.4178187403993856 +shiftleft,tsmc28,64,7611,0.1313867793982394,518.489997,2380.0,0.16371041913020629 +shiftleft,sky90,128,2060,0.5385058932038835,10222.380152,7230.0,3.1378640776699034 +csa,tsmc28,64,24034,0.04077672239327619,395.135998,3790.0,0.17113256220354495 +priorityencoder,sky90,8,8163,0.12799298137939483,56.840001,37.422,0.011674629425456327 +mux2,sky90,64,4112,0.2462356614785992,484.120009,110.88,0.15126459143968873 +priorityencoder,sky90,128,3545,0.30223844710860365,1650.320031,568.632,0.1156558533145275 +mux4,sky90,16,4661,0.2587782347135808,443.940009,202.299,0.10319673889723234 +mux8d,tsmc28,1,10,0.06624600000000669,5.04,17.289,0.001224 +mux2d,sky90,1,14010,0.07565858743754461,19.6,18.562,0.006038543897216275 +mux8,sky90,16,3225,0.30794551937984493,805.560013,497.282,0.18387596899224806 +priorityencoder,tsmc28,8,33216,0.033047973025048166,11.34,48.981,0.0020953757225433524 +mux8,sky90,128,10,1.955451999999994,3207.540062,224.085,0.5810000000000001 +mux8,tsmc28,8,13676,0.07518479555425563,51.281999,237.31,0.013044749926879203 +mult,sky90,16,1037,1.0221291542912248,7597.940137,5000.0,6.758919961427194 +mux2,sky90,8,5723,0.18835053136466887,64.680001,21.541,0.01930805521579591 +flop,tsmc28,32,20454,0.04889119262735895,60.4799995,314.5785,0.10891757113523029 +mux4,sky90,32,3965,0.26433580958385877,694.820013,296.704,0.17225725094577554 +priorityencoder,sky90,8,8323,0.12521198474107895,62.720001,47.365,0.013949297128439266 +mux4d,tsmc28,1,32579,0.030080619233248413,4.158,30.464,0.0012799656220264589 +mux2,sky90,16,5246,0.20207342584826535,119.560002,32.354,0.038810522302706825 +mux2,sky90,128,3684,0.2709390825190011,1077.020021,395.706,0.3564060803474485 +shiftleft,tsmc28,128,6602,0.1514602517418964,1247.021993,5430.0,0.39003332323538326 +mux4,sky90,128,3270,0.3079683975535168,2259.880041,888.365,0.6391437308868501 +add,tsmc28,16,10,0.4766620000000046,32.886,116.238,0.01565 +comparator,sky90,8,4548,0.2197028689533861,190.120003,121.871,0.04243623570800352 +mult,tsmc28,16,3895,0.26150940949935814,1844.136,13600.0,1.5527599486521182 +csa,tsmc28,8,23543,0.04244547041583485,31.248001,240.54,0.013859745996686912 +shiftleft,tsmc28,8,14594,0.06865231012744964,34.398,218.032,0.011299164040016445 +priorityencoder,tsmc28,32,17781,0.06230780653506551,56.826,201.644,0.008762161858163208 +mux2,sky90,64,3908,0.25440036335721594,471.380009,138.856,0.15916069600818833 +flop,sky90,32,8396,0.11434433539780849,533.119995,259.258,0.7741781800857551 +mult,tsmc28,32,2735,0.3656287129798903,3643.290023,23700.0,3.8815356489945154 +shiftleft,tsmc28,8,15810,0.06615910689437064,48.762,352.527,0.016299810246679317 +csa,sky90,32,5638,0.16671386094359703,1160.320023,826.559,0.5954239091876552 +add,sky90,8,3878,0.26842487880350696,273.420005,147.185,0.12325941206807632 +csa,sky90,128,5568,0.17497270114942529,4635.40009,3290.0,2.380387931034483 +mux2,sky90,128,4084,0.2551629823702253,1146.600021,479.203,0.3868756121449559 +mux4,sky90,64,10,1.1701199999999972,834.960016,55.508,0.2097 +priorityencoder,tsmc28,8,30709,0.032285743527955976,8.19,32.782,0.0016770327916897328 +priorityencoder,sky90,16,5773,0.16977016282695304,136.220003,77.243,0.021773774467348 +comparator,tsmc28,128,9559,0.10898145329009311,543.06,2390.0,0.12511769013495136 +priorityencoder,tsmc28,16,22529,0.04496223423143504,30.114,121.215,0.0053974876825425 +mux8,tsmc28,8,12902,0.07750336319950395,44.604,214.286,0.0117501162610448 +shiftleft,sky90,32,2403,0.4160544835622139,1370.040025,695.62,0.3807740324594257 +mult,tsmc28,8,5100,0.19653543137254903,514.458001,3810.0,0.3413725490196079 +comparator,tsmc28,8,10,0.138023000000004,14.994,49.297,0.00345 +comparator,sky90,64,3380,0.3280749881656805,1322.020025,392.984,0.1804733727810651 +mux4,sky90,8,4797,0.20979962309776945,163.660002,93.256,0.043923285386700026 +comparator,sky90,128,2576,0.38793975776397516,2632.280051,550.607,0.3796583850931677 +comparator,tsmc28,8,17763,0.05672979671226708,37.296,188.549,0.00990260654168778 +mux8d,sky90,1,7158,0.13412482788488406,85.260001,40.078,0.015129924559932943 +flop,tsmc28,128,21682,0.04889120653076284,241.919998,1260.0,0.4356378562863204 +shiftleft,tsmc28,128,7023,0.14238329232521713,1836.953994,8670.0,0.566566994162039 +mux8,sky90,32,3305,0.32156986081694405,1068.20002,336.387,0.22208774583963692 +priorityencoder,tsmc28,128,11669,0.08626314628502871,290.808,928.813,0.038906504413403036 +mux2,sky90,64,3870,0.25809293281653745,474.320009,156.263,0.1684754521963824 +flop,tsmc28,32,10,0.048889000000002625,60.4799995,314.5805,0.10908000000000001 +add,tsmc28,64,8206,0.12185605215695831,388.836003,1770.0,0.1409943943456008 +priorityencoder,tsmc28,64,10,0.4980240000000009,55.313999,146.464,0.00796 +mux4,sky90,8,4771,0.2097996646405366,162.680002,90.237,0.04353385034583944 +mult,tsmc28,64,2199,0.45474816007276037,12441.870079,76300.0,13.95543428831287 +flop,sky90,64,9445,0.11434412493382742,1066.23999,520.0,1.5483324510322922 +mult,tsmc28,8,4900,0.20404963265306122,402.318001,2820.0,0.273265306122449 +mux2,sky90,128,4244,0.255888767200754,1307.320024,674.031,0.42412818096135724 +shiftleft,sky90,16,3422,0.30792076797194623,625.240012,393.788,0.1604324956165985 +add,sky90,8,10,1.0608979999999946,103.879999,14.319,0.0376 +mult,sky90,16,937,1.0669988591248665,6421.94011,3210.0,5.136606189967982 +mux8,sky90,8,3800,0.2700248947368421,316.540006,115.77,0.061394736842105266 +csa,sky90,8,10,0.2641830000000027,117.599998,13.811,0.0423 +add,sky90,32,2517,0.4132753710766786,1551.340027,760.812,0.6495828367103694 +mult,sky90,32,717,1.394444139470014,21700.140365,9390.0,18.78103207810321 +mux4,sky90,16,4067,0.24427448512417016,245.000004,71.922,0.07489550036882223 +shiftleft,sky90,8,4500,0.23008222222222222,262.640004,204.113,0.07422222222222222 +mux4,sky90,32,4036,0.26555906937561946,686.980013,310.401,0.1749256689791873 +mux8,tsmc28,64,11014,0.09067453550027238,304.163999,1460.0,0.08498274922825495 +shiftleft,tsmc28,128,6742,0.14831493948383268,1348.955989,6120.0,0.40418273509344405 +comparator,tsmc28,16,14560,0.07291231868131869,65.394,294.431,0.017046703296703294 +shiftleft,sky90,32,2303,0.4341202396873643,1227.940022,465.632,0.30916196265740337 +mux8,tsmc28,1,17359,0.06011100501180944,9.072,57.908,0.002793939743072758 +flop,sky90,8,9096,0.11434443447669304,133.279999,64.8145,0.19359608619173263 +mux8d,tsmc28,1,22814,0.045585734285964755,20.664,171.151,0.006601209783466293 +priorityencoder,tsmc28,32,16793,0.06043762144941345,66.654,245.564,0.01027213720002382 +mux2,tsmc28,16,18767,0.053046021580433735,15.75,88.025,0.005142004582511856 +priorityencoder,tsmc28,8,30082,0.033050470580413535,8.946,35.541,0.0018349843760388273 +mux2d,sky90,1,13217,0.07565913467503972,19.6,18.562,0.006037678747068169 +add,tsmc28,128,7643,0.13338867591259976,1025.51401,5130.0,0.3834881590998299 +mux2,sky90,64,4291,0.24377191004427873,497.840007,137.147,0.1610347238405966 +mux2,tsmc28,32,19336,0.055856004551096405,32.130001,171.146,0.009898634671079851 +shiftleft,tsmc28,32,9587,0.10430391697089808,384.803997,1940.0,0.10180452696359654 +mux8,sky90,8,3370,0.29463590504451037,279.300005,102.669,0.05480712166172106 +mux2,tsmc28,8,30206,0.03374500542938489,16.758,114.743,0.005459180295305568 +priorityencoder,sky90,32,4883,0.2067641359819783,376.320006,232.357,0.04872004915011264 +mux4,tsmc28,16,16486,0.06057952759917506,39.438,186.231,0.012556108213029236 +mux8,tsmc28,128,10055,0.09943300845350571,719.333996,3300.0,0.1648930880159125 +mux4,tsmc28,16,16157,0.06161267809618122,39.06,181.31,0.012428049761713189 +mux8,sky90,128,2613,0.3825318752391887,4084.640077,1310.0,0.8308457711442787 +mux2,sky90,16,5147,0.20207393471925392,119.560002,32.354,0.03891587332426656 +shiftleft,sky90,8,4587,0.22936441225201656,246.960005,191.922,0.06562023108785697 +mux8,tsmc28,128,11312,0.0964546973125884,642.473997,3330.0,0.17494695898161244 +mult,sky90,64,645,1.552430596899225,92630.581541,51300.0,97.67906976744187 +csa,sky90,64,5689,0.16671381683951486,2320.640045,1650.0,1.1935313763403057 +mux4,sky90,32,4042,0.2655582761009401,686.980013,310.401,0.17491340920336468 +mult,tsmc28,32,2854,0.35038242396636304,4257.414022,28900.0,4.601261387526279 +shiftleft,sky90,16,10,0.8858720000000062,350.840007,23.053,0.0551 +mux8,sky90,32,3178,0.3140553102580239,1319.079995,670.683,0.35777218376337316 +flop,sky90,32,10,0.1143419999999935,533.119995,259.258,0.7723000000000001 +add,sky90,32,2323,0.43015783039173483,1235.780024,448.937,0.4567369780456306 +priorityencoder,tsmc28,64,13528,0.07389375694855116,136.584,433.326,0.01848018923713779 +shiftleft,tsmc28,32,8820,0.11336868480725625,202.986,923.446,0.060204081632653055 +mux4,sky90,8,5189,0.2207513594141453,203.840004,102.281,0.046733474657930235 +mux4,sky90,16,4302,0.23042302324500233,358.679999,417.161,0.09972105997210601 +shiftleft,tsmc28,32,9971,0.10217084344599339,306.179999,1470.0,0.08785477885869021 +mux8,tsmc28,128,10683,0.09720766479453338,908.333989,4170.0,0.18440512964523076 +mult,sky90,8,10,2.0858690000000024,1009.399998,188.656,0.28900000000000003 +shiftleft,sky90,16,3624,0.3116181898454746,610.540011,408.291,0.1705298013245033 +csa,tsmc28,128,10,0.06758100000000411,274.175995,917.068,0.1156 +mux2,sky90,64,4100,0.24623543902439024,485.100009,111.924,0.15146341463414634 +mux8,tsmc28,32,11010,0.09082652134423251,200.717998,917.695,0.04695731153496821 +mux2,sky90,8,5405,0.18835087604070305,64.680001,21.541,0.019315448658649398 +mux4,sky90,128,3190,0.31594562382445146,2003.120039,751.54,0.5626959247648903 +add,sky90,16,2765,0.3615926528028933,553.70001,272.075,0.24267631103074144 +add,tsmc28,16,11060,0.09034091320072332,70.434,348.689,0.02631103074141049 +priorityencoder,tsmc28,16,22104,0.04620368041983351,25.956,96.244,0.0045466883821932685 +add,sky90,32,2468,0.40496338573743923,1440.600027,714.057,0.6580226904376014 +priorityencoder,tsmc28,16,19978,0.04995306056662329,17.514,56.066,0.0032535789368305134 +mux2,sky90,16,4949,0.2020740224287735,119.560002,32.354,0.03893715902202465 +comparator,sky90,64,3129,0.31954192361776923,1372.980026,508.393,0.2048577820389901 +mux4,sky90,16,4396,0.22421752684258417,359.659999,419.855,0.10077343039126477 +priorityencoder,tsmc28,32,16464,0.06071258114674442,61.614,207.499,0.009323372206025266 +mux2,tsmc28,32,18978,0.05585559142164612,32.130001,171.146,0.009900937928127306 +priorityencoder,tsmc28,8,31335,0.031912196106590074,8.316,34.836,0.001716929950534546 +priorityencoder,sky90,16,6362,0.1666292756994656,185.220003,132.902,0.03325998113800692 +shiftleft,tsmc28,16,11332,0.08822167596187787,107.603999,530.934,0.03132721496646664 +mult,tsmc28,32,2914,0.3431698991077557,4572.666019,32100.0,4.94818119423473 +mux8,sky90,8,10,0.5354459999999932,234.220005,15.482,0.03289 +comparator,sky90,32,3818,0.27776223415400736,694.820013,315.258,0.10371922472498692 +flop,sky90,8,9445,0.11434412493382742,133.279999,64.8145,0.19358920063525675 +mux4d,sky90,1,9313,0.10687378513905293,53.900001,55.277,0.014087834210243745 +mux4,tsmc28,128,13090,0.07636619404125286,294.335997,1420.0,0.09358288770053477 +priorityencoder,sky90,128,3205,0.31198348049922,1572.900029,499.236,0.10826833073322932 +shiftleft,tsmc28,128,7164,0.14037182300390844,2240.027998,10800.0,0.6394472361809045 +mux8,sky90,8,3298,0.29833006913280774,249.900005,75.262,0.049939357186173434 +mux8,sky90,8,3514,0.28218398178713716,245.980005,77.05,0.04951622083096187 +mux4,sky90,128,3527,0.31660207683583785,2254.980037,793.173,0.6024950382761554 +shiftleft,sky90,128,1907,0.5242938489774515,9192.400136,6080.0,2.9008914525432616 +mult,tsmc28,16,3514,0.2845729817871372,1120.014004,7380.0,1.008537279453614 +csa,sky90,8,5758,0.16536141368530738,266.560005,154.202,0.13650573115665163 +shiftleft,sky90,8,3981,0.25095116754584273,259.700005,172.787,0.07309721175584023 +mux4,sky90,128,3595,0.31559411682892907,2224.600043,699.898,0.5652294853963838 +mux4,sky90,128,3210,0.3111464797507788,1931.580038,685.348,0.5700934579439252 +priorityencoder,sky90,64,4180,0.25021144976076554,817.320015,379.7,0.07320574162679426 +mux4d,sky90,1,10090,0.10307702775024777,51.940001,49.18,0.013637264618434094 +comparator,tsmc28,64,10,0.28591199999999617,134.946,464.047,0.0294 +csa,sky90,64,10,0.2641830000000027,940.799988,110.49,0.3369 +flop,tsmc28,8,21682,0.04889120653076284,15.12,78.635,0.027239184577068535 +mult,tsmc28,128,1756,0.5694750820045558,38955.924167,213000.0,41.384965831435075 +mux2,sky90,32,5303,0.21904050612860645,233.240005,55.502,0.07542900245144259 +priorityencoder,sky90,128,10,2.830100999999999,891.800017,56.107,0.0424 +mux8,tsmc28,16,12264,0.08147446510110894,128.771998,548.714,0.02666340508806262 +shiftleft,tsmc28,64,8438,0.12204549561507466,993.761998,5040.0,0.2788575491822707 +mux4,tsmc28,32,16412,0.06514902607847917,89.837999,413.021,0.025834755057275165 +mux4,sky90,128,3179,0.31437432840515883,1886.500037,637.622,0.5533186536646744 +mux8,tsmc28,64,10133,0.09847845682423764,312.353999,1540.0,0.08516727523931708 +mux2,tsmc28,64,19682,0.0517638447312265,99.036,577.742,0.029976628391423635 +mux8,sky90,1,5409,0.18314205675725645,69.580001,41.904,0.01212793492327602 +mux2,tsmc28,1,47818,0.020583627044209293,2.016,13.728,0.0005876448199422811 +add,tsmc28,64,8862,0.12251134506883322,461.034004,2360.0,0.17659670503272398 +mux4,tsmc28,1,27830,0.038088446999640674,5.292,41.928,0.0017103844771828962 +shiftleft,tsmc28,32,10354,0.10129703148541626,390.725998,1980.0,0.10633571566544331 +mux4,sky90,64,3785,0.2729937926023778,919.240018,338.811,0.2808454425363276 +mux4,tsmc28,128,12566,0.07951181855801369,277.199998,1300.0,0.08952729587776541 +mult,sky90,128,493,2.028396565922921,264363.823149,77300.0,208.79107505070994 +priorityencoder,tsmc28,128,10525,0.09499787648456057,223.902,621.526,0.028883610451306413 +mux4,sky90,128,3459,0.3162518962127782,2229.500043,871.583,0.6551026308181555 +priorityencoder,tsmc28,8,10,0.05780799999999431,4.284,14.558,0.000862 +flop,sky90,128,8571,0.11434450029168125,2132.4799805,1035.0,3.0963131489907827 +comparator,tsmc28,128,9184,0.10887901742160278,507.15,2030.0,0.11378484320557491 +add,tsmc28,16,10599,0.09414852344560808,71.064001,359.005,0.02887064817435607 +mux4,sky90,1,7166,0.13686586491766678,26.460001,19.975,0.005456321518280769 +mux4,sky90,8,10,0.3993300000000062,116.620002,9.077,0.02394 +mux4d,tsmc28,1,33244,0.030080616051016723,4.158,30.464,0.0012811334376128022 +priorityencoder,tsmc28,16,21253,0.04703118086858326,21.672,78.026,0.004008845810003294 +priorityencoder,sky90,8,7843,0.12626623128904757,49.980001,32.378,0.010850439882697946 +mux4,sky90,8,4740,0.2126584641350211,145.040003,62.861,0.03919831223628691 +mux4d,sky90,1,9119,0.1094081470555982,48.020001,46.22,0.013071608729027306 +mux2,tsmc28,64,17082,0.05841015443156539,84.041999,419.594,0.023650626390352418 +mult,sky90,16,997,1.0029260270812437,7519.540137,4940.0,6.376128385155466 +add,sky90,32,2614,0.42499447054322875,1406.300027,636.339,0.598699311400153 +mult,sky90,8,1258,0.794436559618442,1926.680037,1050.0,1.279014308426073 +mux2,sky90,8,5087,0.19261551641438962,70.560001,12.959,0.018812659720857085 +csa,tsmc28,32,23053,0.04244530217325294,124.992002,962.249,0.055133822062204484 +mult,tsmc28,8,10,0.5050959999999947,142.631998,499.628,0.0635 +priorityencoder,tsmc28,32,16134,0.06174490987975703,54.054,163.63,0.008478988471550762 +mux8,tsmc28,64,10,0.24052399999999352,206.513999,803.317,0.0404 +add,sky90,8,3804,0.2758531777076761,257.740005,154.606,0.12381703470031545 +csa,tsmc28,8,25505,0.04036599843168006,50.4,475.36,0.02136835914526563 +mux8d,sky90,1,7903,0.13242722750854108,89.180001,45.284,0.016031886625332153 +mux4,sky90,64,3562,0.28061815665356543,1076.040021,276.31,0.27681078046041546 +mux4d,sky90,1,8925,0.11149681792717087,50.960001,49.104,0.013602240896358544 +mux8,sky90,32,3369,0.3275659833778569,1058.400021,328.34,0.2143069159988127 +flop,sky90,16,8221,0.1143447031991242,266.5599975,129.629,0.38711835543121276 +shiftleft,sky90,64,10,1.4229579999999942,2117.780041,153.751,0.36299999999999993 +flop,sky90,128,9096,0.11434443447669304,2132.4799805,1035.0,3.096470976253298 +mux4,sky90,16,3748,0.26579596478121664,232.260005,65.645,0.0672358591248666 +mux2,tsmc28,8,29614,0.03374481252110488,16.758,114.564,0.005436617815897886 +shiftleft,sky90,128,10,2.072533000000007,4988.200097,311.979,0.956 +priorityencoder,sky90,32,4692,0.21690972975277067,370.440007,198.644,0.04471440750213128 +comparator,sky90,8,5129,0.20861177968414896,224.420003,142.569,0.05790602456619224 +add,sky90,32,2372,0.42075916020236087,1269.100024,537.997,0.5189713322091062 +mux2,sky90,32,5203,0.21903980953296176,237.160005,57.793,0.0768787238131847 +shiftleft,sky90,64,2203,0.45385946391284615,3914.120062,2680.0,1.144802541988198 +mult,tsmc28,8,5401,0.1935488979818552,545.076,3950.0,0.3588224402888354 +mult,sky90,32,809,1.2962689431396788,27029.380482,17800.0,27.053152039555005 +mult,tsmc28,32,3033,0.3295775611605671,6343.721998,47200.0,6.303330036267723 +mux4,sky90,32,10,0.8744200000000006,423.360008,27.792,0.1045 +flop,sky90,64,8746,0.11434398307797851,1066.23999,520.0,1.548364966841985 +flop,tsmc28,16,18818,0.04889161005420342,30.24,157.289,0.05446115421405038 +mux4,sky90,16,4455,0.2231388911335578,392.0,398.313,0.1037037037037037 +priorityencoder,sky90,16,5419,0.18031289223103894,125.440002,50.563,0.018305960509319066 +mult,sky90,64,581,1.721128395869191,68673.500832,21700.0,57.345955249569705 +priorityencoder,sky90,64,4344,0.2409075782688766,890.820015,461.143,0.09231123388581954 +comparator,sky90,64,3067,0.36997951613955005,1251.460024,221.953,0.14150635800456474 +mux2,tsmc28,16,19150,0.05221932114882506,15.75,88.448,0.005159268929503916 +mux8,sky90,1,6232,0.16910413093709886,77.420002,50.656,0.01235558408215661 +priorityencoder,sky90,32,10,0.8791959999999932,196.980004,12.728,0.011870000000000002 +comparator,tsmc28,16,13736,0.07273839778683751,54.558,250.167,0.014349155503785673 +comparator,sky90,8,5032,0.2153801399046105,244.020004,169.251,0.06279809220985691 +comparator,tsmc28,64,11732,0.09292495874531197,284.886,1320.0,0.06657006478008863 +mult,tsmc28,64,10,4.225143000000003,6729.029936,23600.0,6.0600000000000005 +shiftleft,tsmc28,64,8272,0.12086674854932303,1041.263998,5460.0,0.2895309477756286 +csa,sky90,128,6173,0.16536178810950916,5394.900105,3330.0,2.4791835412279286 +mux8,tsmc28,1,16357,0.059911905117075254,7.182,38.342,0.0018878767500152837 +mux8d,tsmc28,1,21059,0.04721963559523244,6.804,34.408,0.0018092027161783562 +mux8d,sky90,1,8052,0.1324277471435668,91.140001,43.658,0.016008445106805762 +mux2,tsmc28,8,29021,0.03376780641604355,16.884,113.726,0.005440887633093278 +comparator,tsmc28,16,10,0.16839600000000132,29.736,97.848,0.0068000000000000005 +add,tsmc28,64,7877,0.12692688523549575,367.920002,1700.0,0.1405357369556938 +mux4,sky90,128,3294,0.3065102707953855,2226.560042,1070.0,0.6715239829993928 +priorityencoder,tsmc28,16,10,0.11891900000000533,10.962,32.132,0.00191 +csa,sky90,8,5518,0.1796730815512867,280.280005,194.202,0.14244291409931137 +mux2,sky90,1,12529,0.08300882959533881,13.72,12.3,0.0039029451672120677 +shiftleft,sky90,8,4674,0.2294615079161318,243.040005,191.378,0.06546854942233632 +mux2,tsmc28,16,19916,0.0524708857200241,15.372,84.373,0.005046194014862422 +flop,sky90,128,8046,0.11434435918468804,2132.4799805,1035.0,3.0963211533681334 +add,tsmc28,8,13007,0.07612567909587145,30.366,161.839,0.011855154916583378 +mult,sky90,16,10,5.005561999999998,3869.040009,641.517,1.6879999999999997 +comparator,tsmc28,64,10428,0.09588966551591867,260.82,1030.0,0.05974299961641734 +mux2,sky90,32,5003,0.19908807195682593,375.340008,259.372,0.13671796921846893 +mult,tsmc28,16,10,1.0536270000000059,539.405992,1830.0,0.368 +priorityencoder,tsmc28,64,12699,0.07861935798094338,104.706,306.577,0.01392235609103079 +mux2,sky90,1,13011,0.08300904319422028,13.72,12.3,0.0039043885942663895 +mult,sky90,128,555,1.9449018018018018,305166.124288,139000.0,316.31891891891894 +mux2,sky90,16,4850,0.20207356701030926,119.560002,32.354,0.03884536082474227 +shiftleft,sky90,8,4327,0.23025600254217704,259.700005,196.451,0.07534088282874972 +comparator,tsmc28,8,18105,0.058020360950013804,35.154,195.216,0.00964374482187241 +mux8,sky90,1,5879,0.16984595526450078,75.460001,60.639,0.014237115155638714 +comparator,sky90,64,10,1.1199110000000019,1008.42002,127.626,0.0831 +priorityencoder,sky90,32,4405,0.22696975595913735,348.880006,159.17,0.040794551645856984 +mux8,sky90,64,3088,0.3305971968911917,2143.260041,777.3,0.4740932642487046 +mux2,sky90,8,5511,0.18835127127563056,64.680001,21.541,0.019306840863727092 +mult,tsmc28,16,3590,0.2785115320334262,1216.278005,8230.0,1.1376044568245125 +mux2,sky90,128,3728,0.26636334334763945,934.920018,235.084,0.3076716738197425 +flop,tsmc28,8,19227,0.048891193998023615,15.12,78.634,0.027232537577365167 +mux2,sky90,1,12047,0.08300821781356355,13.72,12.3,0.003909687059018843 +priorityencoder,tsmc28,16,19553,0.05112504710274639,17.136,56.184,0.003283383623996318 +mux8,tsmc28,128,10,0.39436299999999846,411.011997,1610.0,0.0853 +add,sky90,128,1810,0.552345187845304,5897.640112,1960.0,1.8342541436464088 +mux2,sky90,16,10,0.6069949999999977,113.680002,19.729,0.0386 +mux2,sky90,16,5345,0.20207373900841907,119.560002,32.354,0.03889616463985033 +mult,sky90,8,1284,0.778472199376947,2067.800038,1220.0,1.2710280373831777 +mux4d,sky90,1,10478,0.10307706069860662,51.940001,49.18,0.013638098873830882 +mux4,sky90,16,4411,0.22421796236681027,359.659999,419.855,0.10088415325323055 +shiftleft,sky90,64,2027,0.492941911198816,2849.840051,1050.0,0.6729156388751849 +csa,tsmc28,32,26486,0.040226795514611495,209.663999,1960.0,0.08717813184323794 +mux4,tsmc28,128,12828,0.07792147458684127,296.603998,1450.0,0.09588400374181479 +flop,tsmc28,128,18818,0.04889161005420342,241.919998,1260.0,0.43562015091933254 +mux2,tsmc28,8,10,0.08170300000000452,7.56,38.026,0.00241 +flop,sky90,16,8571,0.11434450029168125,266.5599975,129.629,0.3871193559677984 +mux2,sky90,64,4020,0.25170921890547265,533.119997,224.115,0.2 +mux8d,tsmc28,1,21498,0.04628595497255559,17.514,137.759,0.005730765652618848 +priorityencoder,sky90,16,5655,0.1753866595932803,133.280002,84.414,0.020176834659593284 +mux2,tsmc28,64,17454,0.057247457087200644,79.254,433.639,0.023719491234101067 +mux4,sky90,128,2914,0.34151589910775565,1962.940038,488.841,0.5243651338366507 +comparator,sky90,32,3602,0.276293542476402,690.900013,315.709,0.10771793448084398 +add,sky90,128,1960,0.5343460816326531,6824.72013,2820.0,2.4168367346938777 +mux8d,tsmc28,1,23691,0.04558612198725254,20.664,171.151,0.006631210164197375 +mux2,tsmc28,8,31983,0.03374461038676797,16.758,114.743,0.0054497701904136575 +mux4,sky90,128,3120,0.32006682051282054,2008.020039,557.55,0.5423076923076923 +mux2,sky90,64,3745,0.26633369692923897,459.620009,146.5,0.16555407209612816 +mux2,sky90,32,4802,0.20550356393169514,369.460007,247.031,0.13473552686380677 +shiftleft,tsmc28,128,7585,0.14153315622940013,2560.949989,13000.0,0.7444957152274226 +comparator,sky90,64,3255,0.32338666205837174,1354.360026,436.796,0.18525345622119815 +mux2,tsmc28,16,20299,0.0524705105177595,15.372,84.373,0.005039657125966796 +shiftleft,tsmc28,8,16418,0.06592875867949811,61.488,451.858,0.02028261664027287 +shiftleft,sky90,64,2159,0.4631083969430292,3537.800054,2160.0,1.0490968040759612 +mux4,tsmc28,1,28355,0.038088148651031564,5.292,41.928,0.0017069299947099275 +add,sky90,64,2225,0.466599202247191,2894.920056,1040.0,0.9842696629213483 +csa,tsmc28,16,10,0.06758100000000411,34.271999,114.459,0.014410000000000001 +comparator,sky90,128,2898,0.39185256245686684,2667.560051,751.018,0.31573498964803315 +comparator,tsmc28,64,10211,0.09791160101850946,246.708,1010.0,0.057389090196846536 +mux4,tsmc28,64,10,0.17948199999999304,106.847999,391.422,0.027700000000000002 +mux2,sky90,128,4108,0.25670645861733205,1104.460019,443.391,0.37000973709834467 +priorityencoder,tsmc28,64,14356,0.07864628615213151,128.268,410.848,0.01699637782112009 +mux8d,sky90,1,7456,0.13268717167381974,88.200001,42.371,0.01636266094420601 +mux2,sky90,32,5103,0.2190401589261219,237.160005,57.793,0.07681755829903977 +mux8,tsmc28,16,12999,0.07783899453804138,166.823999,864.695,0.033387183629509966 +comparator,tsmc28,32,11410,0.08759541893076249,133.056,523.589,0.03242769500438212 +add,tsmc28,128,7499,0.13434411348179756,1029.54601,5030.0,0.3831177490332045 +mult,sky90,16,957,1.044805079414838,6996.220129,4080.0,5.647857889237199 +csa,sky90,8,5998,0.16669324074691563,332.220006,234.084,0.17305768589529844 +csa,sky90,16,5689,0.16671381683951486,580.160011,413.956,0.2984707329934962 +add,tsmc28,128,6922,0.1444319170759896,814.212006,3770.0,0.3185495521525571 +flop,sky90,64,8046,0.11434435918468804,1066.23999,520.0,1.5482848620432514 +mux8,sky90,32,3115,0.32077628731942215,1099.560021,345.681,0.20513643659711076 +mult,sky90,16,1017,1.006137169124877,7719.460138,5170.0,6.812192723697148 +comparator,tsmc28,128,9933,0.10677251927917045,498.834,2190.0,0.1120507399577167 +add,sky90,16,2824,0.35254064872521246,562.520011,272.42,0.22839943342776206 +mux2,sky90,128,4324,0.2587083450508788,1099.560018,533.373,0.3878353376503238 +mux4,tsmc28,8,16699,0.05960982537876519,20.16,94.804,0.005976405772800767 +comparator,tsmc28,8,16738,0.0595542944198829,34.524,177.167,0.009355956506153663 +mux4,sky90,128,3168,0.3155825656565656,1988.420039,716.011,0.5792297979797979 +comparator,sky90,32,3458,0.2884604997108155,709.520014,223.226,0.0948525159051475 +csa,sky90,64,6537,0.1653613709652746,2947.840057,1740.0,1.271837234205293 +mux2,tsmc28,64,18939,0.05314609826284387,84.797999,432.492,0.023971698611331114 +mux2,sky90,64,10,0.9630970000000048,444.920009,77.207,0.168 +flop,tsmc28,8,10,0.048889000000002625,15.12,78.6345,0.027246000000000003 +comparator,tsmc28,8,17422,0.05733769130983814,35.784,170.595,0.009488003673516243 +flop,tsmc28,8,20864,0.048891447852760735,15.12,78.634,0.02723590874233129 +mult,tsmc28,128,1868,0.5353279057815846,44272.49428,262000.0,50.01177730192719 +add,sky90,128,10,13.960425999999998,1867.879976,221.488,0.653 +mux2,tsmc28,64,10,0.18685899999999833,56.826002,290.226,0.02082 +flop,sky90,32,8046,0.11434435918468804,533.119995,259.258,0.7741735023614218 +priorityencoder,tsmc28,8,28829,0.03459129404419161,6.174,23.212,0.0013423982795102154 +mux2d,tsmc28,1,49652,0.019658175622331426,2.142,15.112,0.0006021912511077097 +mux2,sky90,32,4150,0.23922785542168676,230.300004,85.432,0.08602409638554216 +mux8d,sky90,1,6859,0.1408138474996355,110.740002,89.514,0.024901589152937748 +mux8,tsmc28,128,10893,0.09798407472688883,830.591987,3990.0,0.1872762324428532 +csa,sky90,16,6537,0.1653613709652746,736.960014,439.259,0.31910662383356275 +mult,sky90,128,482,2.0746737966804982,251002.502634,63000.0,174.44190871369292 +mux8,sky90,32,3051,0.32773938970829236,1253.419994,557.88,0.3352999016715831 +mux2,sky90,1,11806,0.08300869354565475,13.72,12.3,0.0038963239031001187 +priorityencoder,sky90,128,3409,0.2933331557641537,1602.300031,610.009,0.1261366969785861 +mux2,tsmc28,32,16471,0.060023767895088335,29.484001,155.318,0.009586546050634446 +mux2,sky90,8,5193,0.19048991700365878,59.780001,16.177,0.01919892162526478 +mux2,sky90,64,4038,0.24874735017335314,475.300009,113.443,0.15156017830609214 +mux4,sky90,16,4469,0.23470170552696354,411.600005,351.781,0.09599462967106737 +add,sky90,64,2182,0.463233142071494,2916.480057,1140.0,1.0664527956003667 +mux2,sky90,1,11083,0.08482327754218172,11.76,9.281,0.0037264278624921056 +mux8,tsmc28,1,18027,0.06011034703500305,9.072,57.908,0.0027958062905641535 +mux4d,tsmc28,1,35239,0.029485649763046625,6.426,53.388,0.0019552200686739126 +mux4,sky90,8,4847,0.21051618341242007,160.720002,75.759,0.04120074272746029 +mux8,sky90,64,3269,0.3220959461609055,2250.080042,750.807,0.4717038849801162 +flop,tsmc28,64,18818,0.04889161005420342,120.959999,630.0,0.21784993091720692 +flop,tsmc28,128,21273,0.0488919443425939,241.919998,1260.0,0.43564612419498894 +mult,tsmc28,64,2247,0.44503082821539836,13239.198086,83600.0,15.089452603471296 +mux4,sky90,8,4754,0.2126581796381994,145.040003,62.861,0.03910391249474127 +mux2,sky90,64,4060,0.24566741871921183,514.50001,165.954,0.16403940886699508 +mux4d,tsmc28,1,31250,0.03008,4.158,30.468,0.00128192 +shiftleft,tsmc28,128,10,0.6244959999999935,621.683997,1970.0,0.22 +comparator,sky90,128,2844,0.3556604402250352,2858.660053,1040.0,0.37095639943741204 +flop,tsmc28,32,18818,0.04889161005420342,60.4799995,314.5785,0.10892230842810076 +mux4,sky90,128,3421,0.30357918941829876,2183.440041,857.282,0.6033323589593687 +add,sky90,128,2036,0.5260351355599214,6531.700127,2540.0,2.2264243614931236 +mult,sky90,8,1415,0.7822477809187279,2212.840039,1440.0,1.542049469964664 +mult,tsmc28,64,2294,0.43591579075850045,14614.866081,95200.0,16.97384481255449 +mux4,tsmc28,64,14762,0.06852549844194553,305.42399,1370.0,0.07119631486248477 +flop,tsmc28,8,22091,0.048891303426734874,15.12,78.635,0.027239599837037706 +mux4,sky90,64,3859,0.3036454908007256,1512.140028,861.823,0.411764705882353 +flop,sky90,32,9445,0.11434412493382742,533.119995,259.258,0.7742191635786131 +mux8,sky90,1,5526,0.17846672167933406,70.560001,50.725,0.014115092290988058 +mux8,tsmc28,16,12018,0.08288952055250458,91.728,436.205,0.025212181727408887 +flop,sky90,8,10,0.1143419999999935,133.279999,64.8145,0.193835 +mux8,tsmc28,8,10,0.11437999999999704,30.114,111.042,0.00512 +add,sky90,32,2275,0.4382754395604396,1143.660022,372.681,0.43208791208791214 +mux4,sky90,1,8257,0.12749336175366355,28.420001,25.098,0.006479350853821 +csa,tsmc28,16,24034,0.04077672239327619,98.783999,946.879,0.04289756178746776 +mux8,sky90,64,2967,0.34396478193461405,1982.540038,605.952,0.3788338388945063 +mult,sky90,16,917,1.0904565408942202,6101.480106,2770.0,4.877862595419847 +csa,tsmc28,16,23543,0.04244547041583485,62.496001,481.11,0.027609055770292656 +add,sky90,16,2707,0.3688706339120798,554.68001,193.792,0.23125230882896194 +mult,tsmc28,16,4048,0.25795957312252965,1922.886,14300.0,1.6385869565217392 +mux2,tsmc28,1,53922,0.01965830618300508,2.142,15.112,0.0006008679203293645 +mux2d,tsmc28,1,51765,0.01893207205640877,3.276,26.574,0.000927267458707621 +shiftleft,sky90,128,1755,0.5695325698005698,7463.680134,3390.0,1.932763532763533 +mult,tsmc28,64,2342,0.4269854824935952,15405.390085,103000.0,17.771562766865927 +mux2d,sky90,1,12953,0.0756591925422682,19.6,18.562,0.006029491237551147 +mux4d,tsmc28,1,35904,0.02948604991087344,6.426,53.388,0.0019579991087344028 +mult,tsmc28,64,2438,0.41469727235438886,17618.832028,122000.0,20.132895816242826 +csa,tsmc28,16,23053,0.04244530217325294,62.496001,481.11,0.02763197848436212 +mux2,tsmc28,32,17903,0.05585556035301346,32.130001,171.146,0.009897782494553985 +mult,tsmc28,128,2017,0.521343820525533,50239.728229,312000.0,57.93257312840853 +priorityencoder,sky90,16,6126,0.16939465491348352,166.600002,113.104,0.028778974861247145 +csa,tsmc28,16,24524,0.040663382319360626,104.832,964.99,0.04346762355243842 +mux2,tsmc28,32,18619,0.05585557725978839,32.130001,171.146,0.009898490788979 +comparator,tsmc28,32,12867,0.08809919382917542,147.924,654.69,0.035672650967591514 +mux4,tsmc28,32,14588,0.06829549273375377,76.103999,363.48,0.02495201535508637 +flop,tsmc28,64,21273,0.0488919443425939,120.959999,630.0,0.21783481408358013 +add,sky90,64,2054,0.48669491723466407,2674.420052,957.825,0.952288218111003 +mult,tsmc28,16,3972,0.2571083363544814,2139.101998,16200.0,1.7797079556898288 +mult,sky90,128,566,1.9132164522968198,301979.16406,136000.0,308.3144876325089 +mux4,sky90,32,4118,0.24283532831471588,594.860011,331.197,0.131617289946576 +mux4,sky90,16,4471,0.2374716099306643,392.980007,336.716,0.09349138895101766 +shiftleft,tsmc28,128,7304,0.14135928148959476,2368.547985,11900.0,0.6592278203723987 +mult,tsmc28,8,4700,0.21274895744680852,334.404002,2220.0,0.22914893617021276 +mux8,sky90,16,3156,0.31606278073510774,523.32001,180.283,0.10963244613434726 +flop,tsmc28,32,21273,0.0488919443425939,60.4799995,314.5805,0.10892210783622433 +mult,sky90,32,702,1.4242284245014245,19874.400305,7550.0,16.801994301994302 +shiftleft,sky90,128,1869,0.5349974788657036,8478.960135,5130.0,2.594970572498662 +mux4,sky90,16,3907,0.2556648574353724,232.260005,65.86,0.0664704376759662 +comparator,sky90,128,2683,0.37266110771524413,2825.340055,784.95,0.462541930674618 +mux8,sky90,32,2924,0.34153726402188783,1064.280021,239.507,0.19220246238030098 +mux8d,sky90,1,7307,0.1341250704803613,85.260001,40.078,0.01506774325988778 +mux4,sky90,8,5034,0.2207511855383393,203.840004,102.281,0.0467222884386174 +priorityencoder,sky90,128,3682,0.28672152634437803,1864.940032,910.869,0.1719174361759913 +mult,sky90,128,10,29.683678,180759.040854,18000.0,78.1 +mult,sky90,128,545,1.924225385321101,300240.644153,129000.0,302.308256880734 +mux4,sky90,8,4474,0.22174063433169425,122.500002,39.907,0.03520339740724184 +shiftleft,sky90,64,2115,0.47275823877068557,3320.240051,2040.0,0.9394799054373523 +flop,sky90,16,9270,0.11434386515641856,266.5599975,129.629,0.38710895361380804 +mux4,tsmc28,1,24155,0.0400992962119644,2.898,17.89,0.0008818050093148417 +mux4,tsmc28,16,15827,0.06317816800404372,33.894,142.636,0.010412586087066406 +mux4,sky90,128,3104,0.32191194845360827,2060.94004,567.296,0.5341494845360825 +flop,sky90,64,8396,0.11434433539780849,1066.23999,520.0,1.5482968080038113 +comparator,tsmc28,8,17080,0.058468009367681505,32.256,148.439,0.008588992974238877 +mux2,sky90,64,4008,0.249340998003992,509.600006,173.87,0.17190618762475052 +mux8,tsmc28,16,12754,0.07864877434530344,105.21,501.447,0.027755998118237413 +comparator,sky90,16,4099,0.2462409419370578,410.620007,284.523,0.08587460356184434 +mux4,sky90,8,4504,0.22543886678507993,168.560003,60.445,0.04054174067495559 +mux4,tsmc28,64,13648,0.07299580890973037,141.623999,661.956,0.04645369284876905 +mult,sky90,128,503,1.9880695705765408,271535.463355,88700.0,235.36978131212723 +priorityencoder,tsmc28,8,32589,0.03304820052778545,11.592,49.654,0.002138758476786646 +mux8,tsmc28,64,11455,0.09107112309035356,312.353999,1550.0,0.0857267568747272 +mux4,sky90,128,3291,0.3176560094196293,2053.100039,760.125,0.5870556061987238 +mux4,sky90,128,3232,0.3149519405940594,2190.300041,889.429,0.651299504950495 +flop,tsmc28,8,20045,0.04889175255674732,15.12,78.634,0.0272362185083562 +mux8d,tsmc28,1,22375,0.0455857374301676,20.664,171.151,0.0066100558659217875 +mux8,tsmc28,8,12128,0.08243582585751978,41.706,181.866,0.010183047493403694 +comparator,sky90,32,3386,0.2947787271116361,655.620013,173.527,0.0767867690490254 +add,tsmc28,128,6777,0.14755591648221927,813.960006,3780.0,0.3209384683488269 +csa,sky90,128,6052,0.16536163317911434,5269.460103,3280.0,2.4631526768010574 +csa,sky90,8,6118,0.16536210853220007,330.260006,208.877,0.15495259888852567 +mult,sky90,32,778,1.2898160437017996,26921.580481,17200.0,26.807197943444734 +add,tsmc28,32,9812,0.1018860211985324,209.286002,1060.0,0.08153281695882594 +mux4,sky90,32,3508,0.28452071379703536,449.820009,129.665,0.13768529076396807 +mux4,sky90,64,3636,0.27624650275027507,889.840016,304.841,0.2714521452145215 +comparator,sky90,16,4018,0.24806303982080635,358.680007,189.253,0.06321553011448482 +mux8,sky90,1,5761,0.17009697552508246,70.560001,49.874,0.01256726262801597 +mux2,sky90,32,5403,0.21904036165093466,233.240005,55.502,0.07551360355358135 +shiftleft,tsmc28,128,7445,0.14241033445265278,2676.617983,13800.0,0.7658831430490262 +mux2,tsmc28,1,48835,0.01965811682195147,2.142,15.112,0.0006020272345653731 +mux4,sky90,16,4306,0.2304230919647004,358.679999,417.161,0.09962842545285648 +mux8,tsmc28,128,10264,0.09738990335151988,700.937992,3100.0,0.16017147310989868 +csa,sky90,32,6118,0.16536210853220007,1318.100026,832.166,0.6181758744687806 +comparator,tsmc28,16,14285,0.07632350017500876,54.054,235.74,0.013860693034651733 +mux2,tsmc28,16,18384,0.053569126196692775,15.246,84.024,0.0050641862489120976 +mux2d,sky90,1,12424,0.07841937540244688,18.62,16.576,0.005924018029620091 +mux4,tsmc28,64,13091,0.07627735841417768,132.551999,603.132,0.04529829653960736 +mux8,tsmc28,8,13418,0.07609875510508272,46.368,224.828,0.012132955731107469 +mult,tsmc28,16,3666,0.2727758685215494,1281.546006,8860.0,1.188761593016912 +add,tsmc28,64,8370,0.11969531302270012,439.488003,2130.0,0.16439665471923534 +mux4,tsmc28,8,18877,0.05756651925623775,22.302,111.045,0.006383429570376648 +flop,sky90,128,8396,0.11434433539780849,2132.4799805,1035.0,3.0962958551691284 +mux8,sky90,1,5644,0.1749683054571226,70.560001,47.501,0.012331679659815733 +comparator,sky90,16,4259,0.24596490068091104,414.540007,269.17,0.08499647804648978 +mux4,sky90,16,4514,0.22817500841825433,462.560009,352.002,0.11541869738591051 +mux4,sky90,128,3041,0.32867219763235783,1891.400037,563.999,0.5004932587964486 +comparator,sky90,16,3697,0.2704605861509332,354.760007,114.334,0.05923721936705437 +comparator,tsmc28,32,12624,0.08578519518377693,146.412,662.137,0.035487959442332066 +comparator,tsmc28,32,11168,0.08951854727793697,114.408,448.212,0.027489255014326645 +priorityencoder,sky90,32,4788,0.21353147201336675,384.160007,267.54,0.052631578947368425 +priorityencoder,sky90,128,3614,0.30526071555063644,1695.400033,611.905,0.13198671831765357 +mux4,tsmc28,32,13981,0.07113564194263644,68.04,282.367,0.020813961805307205 +mux4,sky90,8,4381,0.22772738849577723,120.540002,34.353,0.03362246062542799 +mux4,tsmc28,32,15500,0.06548612903225806,73.961999,360.628,0.024322580645161292 +mux2d,sky90,1,13746,0.07565843590862796,19.6,18.562,0.006030845336825259 +mux2,tsmc28,64,20053,0.05297485019697801,87.318,456.882,0.024634717997307137 +csa,sky90,128,6537,0.1653613709652746,5895.680115,3510.0,2.548569680281475 +mux4,sky90,1,7789,0.12838318564642445,28.420001,22.994,0.006406470663756579 +mux8,sky90,64,2846,0.35130134434293747,2092.30004,580.155,0.392832044975404 +csa,tsmc28,32,10,0.06758100000000411,68.543999,229.117,0.028800000000000003 +mult,sky90,8,1363,0.7637627153338225,2251.060042,1540.0,1.5766691122523844 +priorityencoder,tsmc28,32,15476,0.06460917989144482,52.164,168.016,0.008516412509692426 +add,tsmc28,32,10008,0.10399206394884093,207.900002,1070.0,0.08363309352517985 +priorityencoder,sky90,16,6008,0.16939474034620508,166.600002,115.018,0.029061251664447403 +mux8d,tsmc28,1,20620,0.04721960523763336,6.804,34.356,0.0018234723569350146 +shiftleft,tsmc28,8,13986,0.0711090715000715,27.468,148.616,0.008336908336908337 +mux4d,tsmc28,1,10,0.044273000000004004,2.268,8.147,0.000485 +csa,tsmc28,128,23053,0.04244530217325294,499.96801,3850.0,0.2204919099466447 +mux2,sky90,32,4450,0.2224351011235955,230.300004,63.574,0.07730337078651685 +add,tsmc28,16,11521,0.08678002100512108,90.972001,475.207,0.03367763214998698 +priorityencoder,sky90,64,4016,0.248852984063745,788.900013,356.748,0.07246015936254982 +shiftleft,sky90,32,2453,0.40740408479412965,1381.800025,768.035,0.3530370974317163 +csa,sky90,8,6358,0.16398216420257944,392.000008,245.798,0.1818181818181818 +add,tsmc28,8,10,0.25532499999999914,15.75,58.809,0.007129999999999999 +shiftleft,tsmc28,32,9779,0.10537294477962983,359.604,1700.0,0.09990796604969833 +mux2,sky90,32,3850,0.2503912597402597,226.380004,76.383,0.08337662337662337 +comparator,tsmc28,32,10,0.21334099999999978,64.26,218.094,0.01492 +mux2,sky90,64,4141,0.2484585633904854,479.220009,102.601,0.1504467519922724 +csa,sky90,16,6052,0.16536163317911434,659.540013,409.513,0.30799735624586916 +mux2d,tsmc28,1,53878,0.01893245139017781,3.276,26.574,0.0009280225695088904 +priorityencoder,tsmc28,32,10,0.24741400000000624,25.326,69.772,0.003940000000000001 +add,tsmc28,32,10204,0.10141978400627205,225.792002,1180.0,0.08653469227753822 +mux2,sky90,32,4000,0.246172,228.340004,80.334,0.08449999999999999 +mux2,tsmc28,128,15639,0.06391170733422853,145.782001,1020.0,0.05204936377006203 +add,tsmc28,16,11981,0.08588248702111677,95.886001,511.735,0.03722560721141808 +mux2,tsmc28,16,20682,0.05247022328594913,15.372,84.373,0.005043032588724495 +csa,sky90,16,6173,0.16536178810950916,675.220013,421.312,0.31119390895836707 +flop,sky90,8,8571,0.11434450029168125,133.279999,64.8145,0.1936355151090888 +comparator,sky90,64,2879,0.3470918273706148,1519.98003,422.272,0.21778395276137547 +mux4,tsmc28,64,15041,0.07022094116082707,145.277999,710.673,0.047337278106508875 +mux4,sky90,32,3789,0.26225787912377935,459.620009,152.167,0.1419899709685933 +add,tsmc28,8,14114,0.07275363667280714,35.028001,197.931,0.0138869207878702 +add,tsmc28,128,7354,0.13597341881968997,907.452008,4360.0,0.3451183029643731 +mux8,tsmc28,128,11102,0.09522286056566384,640.079998,3170.0,0.17096018735362997 +add,tsmc28,128,7066,0.1415187851684121,858.942007,3940.0,0.3235210868949901 +comparator,sky90,64,3317,0.3259782384684956,1324.960026,375.296,0.17244498040397951 +shiftleft,tsmc28,8,14898,0.06690610377231844,51.912,383.207,0.018042690293999193 +priorityencoder,tsmc28,128,10,0.9983220000000017,114.533999,291.024,0.01597 +mux4,tsmc28,1,26780,0.0380882994772218,5.292,41.928,0.0017102315160567587 +comparator,tsmc28,16,13186,0.07577501001061733,47.754,197.671,0.012619444865766721 +mux2,sky90,64,3994,0.24961056334501755,479.220007,139.961,0.16399599399098647 +add,sky90,64,10,7.080673000000004,927.079988,110.998,0.3249 +flop,sky90,32,8221,0.1143447031991242,533.119995,259.258,0.774175891010826 +comparator,sky90,8,4839,0.20629126741062204,200.900004,136.6,0.05001033271337053 +comparator,tsmc28,8,16397,0.06087376587180582,27.846,124.214,0.007355003964139782 +csa,sky90,64,6173,0.16536178810950916,2697.940053,1670.0,1.2418597116474974 +mult,tsmc28,8,4600,0.2172923043478261,316.512001,2070.0,0.21195652173913043 +mux2,sky90,64,4207,0.2429750729736154,517.44001,134.725,0.157594485381507 +shiftleft,sky90,64,2071,0.4824885224529213,3215.380053,1760.0,0.8614196040560116 +shiftleft,sky90,16,3557,0.297124788585887,608.58001,422.656,0.15434354793365193 +mux8,tsmc28,1,17025,0.06011015124816446,9.072,57.908,0.0027958883994126287 +shiftleft,tsmc28,8,15506,0.06589716471043468,44.856,300.094,0.014413775312782148 +flop,sky90,64,8921,0.11434405660800359,1066.23999,520.0,1.5483690169263535 +priorityencoder,tsmc28,16,21678,0.04626771676353907,23.688,87.326,0.00417935233877664 +mux4,tsmc28,8,18514,0.055939179215728635,24.066,117.217,0.007232364696986064 +mux8,tsmc28,64,11895,0.08861193652795293,585.647993,2900.0,0.11197982345523327 +comparator,tsmc28,128,8996,0.11113551578479325,480.438,1900.0,0.10704757670075589 +mux4,sky90,64,4007,0.2932652642874969,1421.980024,895.196,0.35338158223109556 +mux4d,tsmc28,1,34574,0.0294854685023428,6.426,53.388,0.0019581188176086076 +csa,sky90,128,5689,0.16671381683951486,4641.28009,3300.0,2.386183863596414 +priorityencoder,sky90,16,5890,0.1697722869269949,136.220003,75.053,0.020950764006791172 +mux4,tsmc28,1,25730,0.0384481379712398,4.158,30.449,0.0012922658375437233 +mux4,sky90,16,4146,0.251916333815726,245.000004,80.791,0.06343463579353595 +mux4,sky90,16,4545,0.26359700220022003,358.680007,100.453,0.07942794279427942 +csa,sky90,32,6478,0.16536163229391787,1499.400029,862.282,0.6336832355665329 +mux2,sky90,64,4073,0.24517727326295113,479.220009,115.22,0.15148539160324087 +csa,sky90,32,6358,0.16398216420257944,1568.000031,983.19,0.7239698018244731 +flop,sky90,64,10,0.1143419999999935,1066.23999,520.0,1.54955 +flop,sky90,16,9445,0.11434412493382742,266.5599975,129.629,0.38713605082054 +csa,tsmc28,128,25014,0.04049261253697929,838.655998,7720.0,0.34720556488366516 +mux8,sky90,64,10,1.3133009999999956,1610.140031,110.909,0.27999999999999997 +add,sky90,16,2942,0.3393218266485384,722.260013,485.109,0.32460910944935417 +comparator,tsmc28,128,9371,0.10671119720414043,558.432,2400.0,0.12794792444776437 +mux8,sky90,64,2785,0.3587524272890485,2023.700038,635.117,0.40430879712746853 +mux4,tsmc28,32,14892,0.066647147730325,77.238,364.152,0.025248455546602204 +shiftleft,tsmc28,32,9396,0.10641326734780758,311.723998,1470.0,0.08343976160068114 +mux8,tsmc28,32,10776,0.09256081217520415,171.989999,780.419,0.04101707498144023 +mux2,sky90,64,4122,0.248458679281902,479.220009,106.14,0.15138282387190685 +priorityencoder,sky90,128,3136,0.31840255102040815,1579.760031,453.063,0.10427295918367345 +mux8,sky90,32,2987,0.33436006427854037,1412.180011,763.713,0.34181452962838965 +mux8,sky90,16,3568,0.2891280582959641,618.380012,225.209,0.12780269058295965 +mux4,sky90,128,3280,0.3066450487804878,2166.780041,981.943,0.6625 +mux8,tsmc28,16,11773,0.08486411721736176,83.664,357.291,0.021404909538775163 +add,tsmc28,128,6633,0.15075334479119554,792.414006,3640.0,0.3086084727875773 +mux4,tsmc28,8,17788,0.05615667483696874,23.814,113.824,0.007252080053968968 +add,sky90,32,2565,0.41661854775828455,1395.520026,647.273,0.5734892787524366 +csa,tsmc28,128,26486,0.040226795514611495,838.655994,7830.0,0.3485615041908933 +mux8,sky90,128,2773,0.36877026685899744,4476.640087,1520.0,0.8755860079336458 +mux2,tsmc28,64,18196,0.05494513343591998,83.285999,419.089,0.023411738843701915 +priorityencoder,sky90,64,3934,0.2539222043721403,760.480014,316.203,0.06507371631926792 +priorityencoder,tsmc28,128,12126,0.08674642536698005,321.048001,1060.0,0.04395513772060037 +mult,tsmc28,32,3211,0.33017946122703207,6265.475998,46700.0,6.259732170663345 +csa,sky90,128,10,0.2641830000000027,1881.599976,220.98,0.675 +mux4,sky90,16,3987,0.2507101492350138,273.420005,78.903,0.07123150238274392 +mux4,sky90,32,4365,0.2416230744558992,755.580015,452.834,0.1628865979381443 +mult,tsmc28,128,1793,0.5577244841048522,40469.058207,229000.0,43.65476854433909 +mult,tsmc28,128,1831,0.5461486450027307,42969.906237,251000.0,47.86892408519934 +comparator,sky90,16,3777,0.27152939184537994,360.640007,157.74,0.059571088165210485 +mux2d,tsmc28,1,52822,0.018931505811972286,3.276,26.574,0.0009276437847866419 +flop,tsmc28,64,22091,0.048891303426734874,120.959999,630.0,0.21782626408944816 +priorityencoder,sky90,8,8003,0.12495914257153568,60.760001,44.346,0.013444958140697238 +comparator,sky90,128,2630,0.38016313688212927,2700.880053,641.273,0.41711026615969576 +priorityencoder,tsmc28,8,29455,0.033933093362756746,8.316,36.118,0.0018095399762349347 +flop,sky90,16,8921,0.11434405660800359,266.5599975,129.629,0.3871202779957404 +csa,sky90,128,5810,0.16922003958691909,4700.080091,3350.0,2.4051635111876077 +mux2,sky90,16,5048,0.20207425673534074,119.560002,32.354,0.03882725832012678 +shiftleft,sky90,8,4241,0.23524044494223062,255.780005,194.529,0.06908747936807356 +mux8d,tsmc28,1,20182,0.049365103161232785,11.718,79.832,0.0037260925577247057 +comparator,sky90,128,10,1.136650000000003,1997.240039,243.506,0.1572 +mux8,tsmc28,64,10353,0.09590236028204385,266.615998,1150.0,0.06799961363855887 +mux4d,tsmc28,1,31914,0.030080210691232692,4.158,30.468,0.0012831359278059787 +csa,tsmc28,8,24524,0.040663382319360626,52.416,482.462,0.02173381177621921 +flop,sky90,8,8221,0.1143447031991242,133.279999,64.8145,0.19360175161172608 +mux2,tsmc28,128,15306,0.06522285600418137,160.02,948.941,0.05017640141121129 +csa,sky90,32,5878,0.1696478931609391,1365.140027,921.68,0.6731881592378359 +csa,tsmc28,32,22562,0.04244531185178619,124.992002,962.249,0.05509263363177023 +mux8,tsmc28,8,12386,0.08048931519457453,41.832,167.156,0.010229291135152592 +mux2,tsmc28,32,16829,0.058776237150157465,29.736001,158.536,0.009673777408045637 +csa,tsmc28,8,23053,0.04244530217325294,31.248001,240.54,0.013855029714136989 +mux8,tsmc28,32,12182,0.08988432703989492,202.104,984.173,0.04703661139385979 +shiftleft,sky90,128,1793,0.5575724841048522,7695.940136,3730.0,2.007250418293363 +priorityencoder,tsmc28,64,13252,0.07544330787805614,123.228,381.105,0.01619378207063085 +shiftleft,tsmc28,64,8107,0.12333419119279634,757.385999,3630.0,0.21438263229308005 +csa,tsmc28,32,25505,0.04036599843168006,201.599998,1900.0,0.08519898059204077 +mux2,sky90,64,4233,0.24139207394283013,486.080007,135.616,0.16182376565083867 +csa,sky90,64,6052,0.16536163317911434,2631.300051,1640.0,1.232154659616656 +mux8,tsmc28,16,13245,0.08118818875047187,86.814,421.512,0.023556058890147225 +mux2,tsmc28,1,50870,0.01965795164143896,2.142,15.112,0.0006034991153921761 +mux8,sky90,64,3148,0.3316140076238882,2234.400043,750.071,0.4453621346886913 +mux4,sky90,128,3200,0.317297,2058.00004,772.668,0.5843750000000001 +csa,tsmc28,8,24034,0.04077672239327619,49.392,473.393,0.02151119247732379 +priorityencoder,tsmc28,64,13804,0.07239877021153289,137.466,425.592,0.01847290640394089 +mux8,sky90,8,3657,0.27529718156959254,447.860008,277.646,0.09625375991249657 +csa,sky90,8,5638,0.16671386094359703,290.080006,207.654,0.1493437389145087 +mux8,tsmc28,128,10474,0.09542350830628223,683.045996,2820.0,0.15705556616383426 +mux8,tsmc28,1,16691,0.05956652770954406,10.206,62.604,0.0032173027380025163 +flop,sky90,16,8746,0.11434398307797851,266.5599975,129.629,0.3871484107020352 +add,sky90,128,1734,0.5763442687427912,5613.440109,1880.0,1.7687427912341407 +csa,sky90,64,6415,0.1639816453624318,2947.840027,1820.0,1.3995323460639129 +comparator,sky90,16,3857,0.26124686180969664,392.000008,180.236,0.07311381903033447 +add,sky90,128,1885,0.5304949787798409,6186.740118,2230.0,2.1480106100795755 +mux4,tsmc28,8,18151,0.055092383284667513,27.971999,133.963,0.008032615282904523 +mux4,sky90,1,8101,0.12749355042587335,28.420001,25.098,0.006493025552400939 +mux2,sky90,128,3804,0.2615571777076761,1302.420012,772.39,0.48291272344900105 +comparator,tsmc28,16,14835,0.07291515638692282,54.18,251.929,0.013050219076508256 +priorityencoder,sky90,8,8643,0.12521256693277796,64.680001,49.589,0.014636121716996414 +csa,tsmc28,64,23543,0.04244547041583485,249.984005,1920.0,0.11022384572909145 +add,sky90,16,3001,0.3504502592469177,648.760012,358.879,0.2715761412862379 +comparator,sky90,8,4935,0.21438524518743668,196.980003,103.039,0.04137791286727457 +add,tsmc28,32,9027,0.11067877478675085,180.054001,870.864,0.07411100033233632 +priorityencoder,tsmc28,128,11898,0.08643973911581779,300.636001,944.678,0.038914103210623635 +mux2,tsmc28,128,17303,0.05864344622319829,177.785999,958.338,0.050684852337744904 +mux4,sky90,32,4447,0.24214169934787497,752.640015,483.31,0.16820328311221047 +mux4,tsmc28,16,15497,0.06397261844227915,33.768,141.323,0.01046008904949345 +shiftleft,tsmc28,16,12040,0.08349647840531561,122.093999,588.646,0.031727574750830566 +csa,tsmc28,16,26486,0.040226795514611495,104.831999,978.516,0.043683455410405504 +mux8,tsmc28,1,16024,0.06212039041437843,8.568,46.793,0.0021779830254618072 +add,tsmc28,32,9419,0.10615638305552606,183.834001,912.393,0.07357468945747957 +flop,sky90,128,9445,0.11434412493382742,2132.4799805,1035.0,3.0964531498147165 +mux2d,sky90,1,10,0.16890700000000436,6.86,1.19,0.001981 +mux4,sky90,8,4787,0.20980010173386257,163.660002,93.256,0.043451013160643405 +mux8,sky90,128,2880,0.3583902222222222,4552.100084,1800.0,0.9871527777777778 +mux4,tsmc28,8,19240,0.05756705197505198,22.302,111.045,0.006382536382536383 +mux2,sky90,128,3500,0.2797142857142857,1177.960023,654.082,0.3911428571428572 +mux2,sky90,64,4375,0.24280542857142856,490.980007,134.477,0.16045714285714283 +mult,tsmc28,16,3819,0.26184265147944485,1634.472002,11800.0,1.4553548049227547 +mux4,tsmc28,8,19604,0.05756699795960008,22.302,111.045,0.00638135074474597 +mult,tsmc28,8,4800,0.20832833333333334,367.416001,2600.0,0.26166666666666666 +mult,tsmc28,128,1980,0.5215165050505051,50452.794237,316000.0,58.41464646464647 +add,tsmc28,64,8698,0.12149495838123707,434.448005,2180.0,0.16360082777650037 +flop,tsmc28,8,19636,0.04889186901609289,15.12,78.634,0.027233143206355677 +mux8,sky90,16,10,0.7726059999999961,430.220008,28.957,0.0688 +shiftleft,tsmc28,64,10,0.40777599999999836,270.395999,887.005,0.07880000000000001 +mux8,sky90,1,5997,0.16975504168751043,72.520001,56.57,0.013206603301650825 +mux8,sky90,8,3442,0.2903377623474724,275.380005,60.636,0.049535153980244044 +mult,sky90,32,748,1.357571395721925,22731.100368,11200.0,21.080213903743317 +mux2,sky90,32,4300,0.23126713953488373,230.300004,88.215,0.08534883720930232 +mux4,sky90,32,4200,0.2820362380952381,735.980014,257.203,0.17547619047619048 +mux4,sky90,32,3660,0.272303043715847,453.740008,144.844,0.14262295081967213 +mux8,tsmc28,64,10794,0.09243606151565685,301.77,1480.0,0.0845840281637947 +shiftleft,tsmc28,128,6461,0.15476280266212658,1215.647996,5280.0,0.36867357994118555 +add,sky90,128,1772,0.5643280857787811,5611.480109,1710.0,1.696388261851016 +comparator,tsmc28,8,15714,0.06352952068219422,25.578,121.375,0.0067837597047219035 +priorityencoder,sky90,128,3477,0.3124412565429968,1500.380028,438.268,0.0986482599942479 +comparator,tsmc28,64,11297,0.09384907586084801,291.06,1290.0,0.0684252456404355 +shiftleft,tsmc28,64,7776,0.12859482304526748,654.695996,3090.0,0.1949588477366255 +shiftleft,sky90,32,10,1.1897809999999964,882.980017,61.087,0.1489 +mux8,tsmc28,16,12509,0.08081944144216165,99.036,498.654,0.027260372531777117 +flop,sky90,16,10,0.1143419999999935,266.5599975,129.629,0.38715000000000005 +flop,tsmc28,64,10,0.048889000000002625,120.959999,630.0,0.21765500000000004 +mux2,sky90,16,4553,0.21640140522732265,114.660002,40.216,0.04256534153305513 +shiftleft,sky90,8,4068,0.24550304228121925,232.260005,140.797,0.06052114060963618 +shiftleft,tsmc28,64,8769,0.11943108872163302,1183.769998,6450.0,0.3350439046641578 +mux2,tsmc28,32,17187,0.05813651079304125,29.862001,160.059,0.009699191249199978 +mux2,tsmc28,64,19310,0.05253463904712584,123.858,794.333,0.03702744691869498 +flop,tsmc28,16,21273,0.0488919443425939,30.24,157.29,0.054472805904197806 +flop,sky90,64,9096,0.11434443447669304,1066.23999,520.0,1.5483179419525066 +mux2,sky90,128,3924,0.258784997961264,955.500018,279.611,0.30937818552497454 +mult,tsmc28,8,5200,0.1922996923076923,577.206,4340.0,0.37769230769230766 +shiftleft,tsmc28,8,16114,0.0664628379049274,49.392,346.537,0.016277770882462454 +mux2,sky90,128,4164,0.2565836983669548,1165.220021,656.972,0.4205091258405379 +mux8,tsmc28,64,10573,0.09440153532582994,294.965999,1460.0,0.08256880733944953 +mux4,sky90,8,4602,0.21713182746631898,134.260003,42.968,0.036701434159061276 +mux4,tsmc28,1,25205,0.038448667724657805,4.158,30.449,0.0012933941678238445 +mux8,sky90,64,3209,0.3308795587410408,2240.280042,852.73,0.49236522281084455 +flop,sky90,128,8746,0.11434398307797851,2132.4799805,1035.0,3.0964440887262747 +add,sky90,128,1998,0.5428695005005005,6510.140126,2360.0,2.3248248248248244 +csa,tsmc28,128,25995,0.040894936333910364,806.399994,7580.0,0.34383535295249085 +mult,sky90,64,683,1.5572078433382137,95922.401617,59200.0,108.05124450951685 +comparator,tsmc28,64,11080,0.09024670758122744,294.21,1250.0,0.0684115523465704 +mux4,sky90,8,4941,0.21053718053025702,164.640002,96.679,0.04430277271807326 +mult,tsmc28,32,3092,0.32732826520051744,6660.989998,50100.0,6.573091849935317 +flop,tsmc28,8,20454,0.04889119262735895,15.12,78.6345,0.027236726312701676 +mux4,sky90,16,4482,0.22884868094600624,436.100003,418.878,0.10352521195894689 +mux2,sky90,128,3844,0.26160968158168574,1387.680005,841.057,0.49349635796045777 diff --git a/synthDC/ppaEquations.csv b/synthDC/ppaEquations.csv index 9b517daba..5c52db0bb 100644 --- a/synthDC/ppaEquations.csv +++ b/synthDC/ppaEquations.csv @@ -1,11 +1,11 @@ Element,Best delay,Fast area,Fast leakage,Fast energy,Small area,Small leakage,Small energy -priorityencoder,0.98$log_2$(N),0.33S,0.25S,0.093S,0.15S,0.046S,0.00046S -add,1.8 + 1.4$log_2$(N),1.1S,0.95S,1S,0.34S,0.16S,0.025S -csa,3.6,0.93S,1.5S,1.1S,0.34S,0.16S,0.00055S -shiftleft,0.48 + 1.6$log_2$(N),1.9S,2.3S,1.5S,0.8S,0.29S,0.0059S -comparator,2 + 0.94$log_2$(N),0.6S,0.47S,0.31S,0.34S,0.16S,0.00089S -flop,3.3,0.34S,0.37S,0.0012S,0.34S,0.37S,0.0012S -mux2,2.8 + 0.38$log_2$(N),0.2S,0.18S,0.16S,0.15S,0.12S,0.0011S -mux4,3.1 + 0.51$log_2$(N),0.36S,0.32S,0.28S,0.28S,0.11S,0.0021S -mux8,5 + 0.45$log_2$(N),0.76S,0.66S,0.45S,0.55S,0.24S,0.0029S -mult,6$log_2$(N),13S + 10$S^2$,26S + 7.3$S^2$,42S + 25$S^2$,1.1S + 7.9$S^2$,1S + 3.4$S^2$,2.1$S^2$ +priorityencoder,0.98$log_2$(N),0.32S,0.22S,0.087S,0.14S,0.044S,0.033S +add,1.9 + 1.4$log_2$(N),1S,0.89S,0.91S,0.32S,0.15S,0.33S +csa,3.6,0.87S,1.3S,0.95S,0.33S,0.15S,0.31S +shiftleft,0.46 + 1.6$log_2$(N),1.9S,2.1S,1.4S,0.77S,0.28S,0.48S +comparator,2.1 + 0.91$log_2$(N),0.58S,0.44S,0.27S,0.33S,0.15S,0.12S +flop,3.3,0.33S,0.33S,1.3S,0.33S,0.33S,1.3S +mux2,2.6 + 0.41$log_2$(N),0.21S,0.23S,0.16S,0.14S,0.11S,0.14S +mux4,3.1 + 0.5$log_2$(N),0.35S,0.31S,0.26S,0.27S,0.11S,0.19S +mux8,4.9 + 0.46$log_2$(N),0.8S,0.66S,0.43S,0.53S,0.23S,0.24S +mult,6$log_2$(N),13$S^2$,13$S^2$,33$S^2$,7.8$S^2$,3.5$S^2$,14$S^2$ diff --git a/synthDC/ppaFitting.csv b/synthDC/ppaFitting.csv index def67c07d..ef4159ecf 100644 --- a/synthDC/ppaFitting.csv +++ b/synthDC/ppaFitting.csv @@ -1,41 +1,81 @@ -Module,Metric,1,N,N^2,log2(N),Nlog2(N),R^2 -priorityencoder,delay,4.865032478368464,,,1.0346781590203091,,0.990533246983837 -priorityencoder,area,,0.3296349181169891,,,,0.9718942704677337 -priorityencoder,lpower,,0.2508481588069769,,,,0.9418329012771585 -priorityencoder,denergy,,0.09327161156406552,,,,0.8065924672945542 -add,delay,8.961254531683414,,,1.4310340215065527,,0.9564367595740637 -add,area,,1.0710989265923485,,,,0.988580182173048 -add,lpower,,0.9470245397661955,,,,0.9951383820581323 -add,denergy,,0.9954952282287014,,,,0.9928308616130285 -csa,delay,3.590384717869601,,,,,0.0 -csa,area,,0.9312877569527923,,,,0.999393942859829 -csa,lpower,,1.5320774877598933,,,,0.9400384192534433 -csa,denergy,,1.1454135769936609,,,,0.9735205275004183 -shiftleft,delay,8.66019468793489,,,1.6351711913499432,,0.9873681453602638 -shiftleft,area,,1.9102134686740575,,,,0.9466461680123697 -shiftleft,lpower,,2.277088275290811,,,,0.9624044038708768 -shiftleft,denergy,,1.4931073444617051,,,,0.9454881696599784 -comparator,delay,6.680678539086959,,,0.9397668550976327,,0.98789326603378 -comparator,area,,0.6003877936704982,,,,0.9672416909621802 -comparator,lpower,,0.46756802348373877,,,,0.8609362596824635 -comparator,denergy,,0.3089180049610159,,,,0.8267293340232036 -flop,delay,3.3270503187614153,,,,,0.0 -flop,area,,0.34478305655859876,,,,0.9433629202566682 -flop,lpower,,0.3707856336608904,,,,0.9170347531086821 -flop,denergy,,0.0011765517257429892,,,,0.688648230209356 -mux2,delay,4.732514086885074,,,0.38138175938205005,,0.5638177354804589 -mux2,area,,0.19794547955000782,,,,0.9753613114571431 -mux2,lpower,,0.1881638557015794,,,,0.7572248871637561 -mux2,denergy,,0.16278100836605952,,,,0.9811112115671446 -mux4,delay,5.67790744523475,,,0.5081925137582493,,0.8316415055210026 -mux4,area,,0.35778033738856435,,,,0.9880049722019894 -mux4,lpower,,0.32236674794207065,,,,0.8279138454959137 -mux4,denergy,,0.28073375091037084,,,,0.9943662618662574 -mux8,delay,7.252700330388384,,,0.45254210999717837,,0.8464368692304263 -mux8,area,,0.7614128432326613,,,,0.9863118376555963 -mux8,lpower,,0.6570734849206145,,,,0.9855956038468652 -mux8,denergy,,0.4496346388149245,,,,0.9785597135426944 -mult,delay,29.562138166420393,,,6.711916207386673,,0.9833266087176287 -mult,area,,,13.838943348894976,,,0.9875861886135875 -mult,lpower,,,14.380577146903335,,,0.9349609233308782 -mult,denergy,,,36.51397409545879,,,0.9719012952478829 +Module,Metric,Target,1,N,N^2,log2(N),Nlog2(N),R^2 +priorityencoder,delay,easy,0.0,,,6.815655848737334,,0.5471505976585844 +priorityencoder,area,easy,,0.14996313076366272,,,,0.9751246139683207 +priorityencoder,lpower,easy,,0.04628232776780845,,,,0.6646449382421588 +priorityencoder,denergy,easy,,0.00046338953826781273,,,,0.8843605490100168 +priorityencoder,delay,hard,0.0,,,0.9775747670327015,,0.987274834491306 +priorityencoder,area,hard,,0.3296349181169891,,,,0.9718942704677337 +priorityencoder,lpower,hard,,0.2508481588069769,,,,0.9418329012771585 +priorityencoder,denergy,hard,,0.09327161156406552,,,,0.8065924672945542 +add,delay,easy,0.0,,,27.820556626526365,,0.5330240516496716 +add,area,easy,,0.33740563909904386,,,,0.9968636684818916 +add,lpower,easy,,0.1559461482654009,,,,0.7403794995975848 +add,denergy,easy,,0.025219887569037786,,,,0.6462978476180771 +add,delay,hard,1.8060844241506506,,,1.4310340215065525,,0.9564367595740637 +add,area,hard,,1.0710989265923485,,,,0.988580182173048 +add,lpower,hard,,0.9470245397661955,,,,0.9951383820581323 +add,denergy,hard,,0.9954952282287014,,,,0.9928308616130285 +csa,delay,easy,5.827386725865409,,,,,0.0 +csa,area,easy,,0.3404841239399024,,,,0.9966821820865757 +csa,lpower,easy,,0.1555300133584381,,,,0.7410756093594764 +csa,denergy,easy,,0.0005478126632729184,,,,0.5798854696439455 +csa,delay,hard,3.590384717869601,,,,,0.0 +csa,area,hard,,0.9312877569527923,,,,0.9993939428598292 +csa,lpower,hard,,1.5320774877598933,,,,0.9400384192534433 +csa,denergy,hard,,1.1454135769936609,,,,0.9735205275004183 +shiftleft,delay,easy,0.0,,,5.744537363106859,,0.7778961884907117 +shiftleft,area,easy,,0.8000093911038876,,,,0.9576897492378456 +shiftleft,lpower,easy,,0.28913702096331206,,,,0.623995386847899 +shiftleft,denergy,easy,,0.005924456057944899,,,,0.7200057939838627 +shiftleft,delay,hard,0.48433873118517795,,,1.635171191349943,,0.9873681453602638 +shiftleft,area,hard,,1.9102134686740575,,,,0.9466461680123697 +shiftleft,lpower,hard,,2.277088275290811,,,,0.9624044038708768 +shiftleft,denergy,hard,,1.4931073444617051,,,,0.9454881696599784 +comparator,delay,easy,0.0,,,4.706704191403,,0.5450694752498024 +comparator,area,easy,,0.3425601443761704,,,,0.978537426983507 +comparator,lpower,easy,,0.15525826941742596,,,,0.8078417286943447 +comparator,denergy,easy,,0.0008896717814426517,,,,0.9267090446396561 +comparator,delay,hard,1.9818442635987938,,,0.9397668550976329,,0.9878932660337799 +comparator,area,hard,,0.6003877936704982,,,,0.9672416909621802 +comparator,lpower,hard,,0.46756802348373877,,,,0.8609362596824635 +comparator,denergy,hard,,0.3089180049610159,,,,0.8267293340232036 +flop,delay,easy,3.3270503187614153,,,,,0.0 +flop,area,easy,,0.34478305655859876,,,,0.9433629202566682 +flop,lpower,easy,,0.3707856336608904,,,,0.9170347531086821 +flop,denergy,easy,,0.0011765517257429892,,,,0.688648230209356 +flop,delay,hard,3.3270503187614153,,,,,0.0 +flop,area,hard,,0.34478305655859876,,,,0.9433629202566682 +flop,lpower,hard,,0.3707856336608904,,,,0.9170347531086821 +flop,denergy,hard,,0.0011765517257429892,,,,0.688648230209356 +mux2,delay,easy,0.0,,,3.276654474184255,,0.7130397298335213 +mux2,area,easy,,0.15083561354737726,,,,0.976644158286422 +mux2,lpower,easy,,0.12067626255418841,,,,0.9344813545348312 +mux2,denergy,easy,,0.0011206170933885473,,,,0.5565267433319017 +mux2,delay,hard,2.539326242287272,,,0.4143154417811283,,0.550540330173853 +mux2,area,hard,,0.2261714754439734,,,,0.9792793539936671 +mux2,lpower,hard,,0.27830936017352714,,,,0.9042661125086188 +mux2,denergy,hard,,0.19333666277894856,,,,0.9525189311701613 +mux4,delay,easy,0.0,,,3.934462222278399,,0.5700865267151127 +mux4,area,easy,,0.2839183647889992,,,,0.9755791039549218 +mux4,lpower,easy,,0.11187597259171647,,,,0.5559362399863286 +mux4,denergy,easy,,0.0021483489610266407,,,,0.5348528431713737 +mux4,delay,hard,3.1369448764435073,,,0.5081925137582488,,0.8316415055210026 +mux4,area,hard,,0.35778033738856435,,,,0.9880049722019894 +mux4,lpower,hard,,0.32236674794207065,,,,0.8279138454959137 +mux4,denergy,hard,,0.28073375091037084,,,,0.9943662618662574 +mux8,delay,easy,0.0,,,4.439779694843578,,0.6601108415004824 +mux8,area,easy,,0.5486426664163658,,,,0.9756934275959698 +mux8,lpower,easy,,0.2380559585648822,,,,0.5468728724048277 +mux8,denergy,easy,,0.0029053391137917966,,,,0.5231276299250225 +mux8,delay,hard,4.9490961359025585,,,0.45254210999717775,,0.8846872287553096 +mux8,area,hard,,0.7645051946159651,,,,0.9834986761377894 +mux8,lpower,hard,,0.6697504633436362,,,,0.9599639296705227 +mux8,denergy,hard,,0.4542825975429124,,,,0.9698068520398291 +mult,delay,easy,0.0,,,61.777235436483835,,0.539191885251039 +mult,area,easy,,1.1322969325198273,7.852086512913157,,,0.997120506119588 +mult,lpower,easy,,1.0320514230056876,3.411671281132248,,,0.7465081509218953 +mult,denergy,easy,,0.0,2.146924193738219,,,0.8988257654810033 +mult,delay,hard,0.0,,,5.971649009143529,,0.9704083045351518 +mult,area,hard,,13.296909763669026,10.2773763878058,,,0.9969630019304513 +mult,lpower,hard,,26.397088944265164,7.310137358727654,,,0.9703772416232848 +mult,denergy,hard,,41.5120348723692,25.39500777044283,,,0.9849195751440497 diff --git a/synthDC/ppaSynth.py b/synthDC/ppaSynth.py index 73578de44..842140b55 100755 --- a/synthDC/ppaSynth.py +++ b/synthDC/ppaSynth.py @@ -1,16 +1,13 @@ #!/usr/bin/python3 -# Madeleine Masser-Frye mmasserfrye@hmc.edu 5/22 +# Madeleine Masser-Frye mmasserfrye@hmc.edu 6/22 -from collections import namedtuple -import csv import subprocess import re -from multiprocessing import Pool, cpu_count +from multiprocessing import Pool from ppaAnalyze import synthsfromcsv - def runCommand(module, width, tech, freq): - command = "make synth DESIGN=ppa_{}_{} TECH={} DRIVE=INV FREQ={} MAXOPT=1".format(module, width, tech, freq) + command = "make synth DESIGN=ppa_{}_{} TECH={} DRIVE=INV FREQ={} MAXOPT=1 MAXCORES=1".format(module, width, tech, freq) subprocess.Popen(command, shell=True) def deleteRedundant(LoT): @@ -20,58 +17,40 @@ def deleteRedundant(LoT): bashCommand = synthStr.format(*synth) outputCPL = subprocess.check_output(['bash','-c', bashCommand]) -def getData(filename): - Synth = namedtuple("Synth", "module tech width freq delay area lpower denergy") - with open(filename, newline='') as csvfile: - csvreader = csv.reader(csvfile) - global allSynths - allSynths = list(csvreader) - for i in range(len(allSynths)): - for j in range(len(allSynths[0])): - try: allSynths[i][j] = int(allSynths[i][j]) - except: - try: allSynths[i][j] = float(allSynths[i][j]) - except: pass - allSynths[i] = Synth(*allSynths[i]) +if __name__ == '__main__': + + LoT = [] + synthsToRun = [] + ##### Run specific syntheses + # widths = [8] + # modules = ['mult', 'add', 'shiftleft', 'flop', 'comparator', 'priorityencoder', 'add', 'csa', 'mux2', 'mux4', 'mux8'] + # techs = ['sky90'] + # freqs = [5000] + # for w in widths: + # for module in modules: + # for tech in techs: + # for freq in freqs: + # LoT += [[module, str(w), tech, str(freq)]] -# arr = [-5, -3, -1, 1, 3, 5] -arr2 = [-8, -6, -4, -2, 0, 2, 4, 6, 8] + ##### Run a sweep based on best delay found in existing syntheses + arr = [-8, -6, -4, -2, 0, 2, 4, 6, 8] + allSynths = synthsfromcsv('bestSynths.csv') + for synth in allSynths: + f = 1000/synth.delay + for freq in [round(f+f*x/100) for x in arr]: + LoT += [[synth.module, str(synth.width), synth.tech, str(freq)]] + + ##### Only do syntheses for which a run doesn't already exist + bashCommand = "find . -path '*runs/ppa*rv32e*' -prune" + output = subprocess.check_output(['bash','-c', bashCommand]) + specReg = re.compile('[a-zA-Z0-9]+') + allSynths = output.decode("utf-8").split('\n')[:-1] + allSynths = [specReg.findall(oneSynth)[2:7] for oneSynth in allSynths] + allSynths = [oneSynth[0:2] + [oneSynth[3][:-2]] + [oneSynth[4]] for oneSynth in allSynths] + for synth in LoT: + if (synth not in allSynths): + synthsToRun += [synth] -widths = [128] -modules = ['mux2', 'mux4', 'mux8', 'shiftleft', 'flop', 'comparator', 'mult', 'priorityencoder', 'add', 'csa'] -techs = ['tsmc28'] -LoT = [] - - -allSynths = synthsfromcsv('ppaData.csv') - -for w in widths: - for module in modules: - for tech in techs: - m = 100000 # large number to start - for oneSynth in allSynths: - if (oneSynth.width == w) & (oneSynth.tech == tech) & (oneSynth.module == module): - if (oneSynth.delay < m): - m = oneSynth.delay - synth = oneSynth - # f = 1000/synth.delay - for freq in [10]: #[round(f+f*x/100) for x in arr2]: - LoT += [[synth.module, str(synth.width), synth.tech, str(freq)]] - - -bashCommand = "find . -path '*runs/ppa*rv32e*' -prune" -output = subprocess.check_output(['bash','-c', bashCommand]) -specReg = re.compile('[a-zA-Z0-9]+') -allSynths = output.decode("utf-8").split('\n')[:-1] -allSynths = [specReg.findall(oneSynth)[2:7] for oneSynth in allSynths] -allSynths = [oneSynth[0:2] + [oneSynth[3][:-2]] + [oneSynth[4]] for oneSynth in allSynths] - -synthsToRun = [] -for synth in LoT: - if synth not in allSynths: - synthsToRun += [synth] - -pool = Pool(processes=25) -pool.starmap(runCommand, synthsToRun) -pool.close() \ No newline at end of file + pool = Pool(processes=25) + pool.starmap(runCommand, synthsToRun) \ No newline at end of file diff --git a/synthDC/runFrequencySynth.sh b/synthDC/runFrequencySynth.sh index cf603cfd3..5aa998997 100755 --- a/synthDC/runFrequencySynth.sh +++ b/synthDC/runFrequencySynth.sh @@ -1,5 +1,5 @@ #!/usr/bin/bash -rm -r runs/* +# rm -r runs/* make clean make del make freqs TECH=$1 diff --git a/tests/riscof/Makefile b/tests/riscof/Makefile index 49f762f8f..dc121f4f0 100644 --- a/tests/riscof/Makefile +++ b/tests/riscof/Makefile @@ -1,31 +1,17 @@ arch_dir = ../../addins/riscv-arch-test -work_dir = "./riscof_work" +work_dir = ./riscof_work current_dir = $(shell pwd) +XLEN ?= 64 -all: clone memfile +all: build -clone: +build: mkdir -p $(work_dir) mkdir -p work - sed 's,{0},$(current_dir),g;s,{1},32imc,g' config.ini > config32.ini - sed 's,{0},$(current_dir),g;s,{1},64gc,g' config.ini > config64.ini - riscof run --work-dir=$(work_dir) --config=config64.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env - cp -r $(work_dir)/rv64i_m work/ - riscof run --work-dir=$(work_dir) --config=config32.ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env - cp -r $(work_dir)/rv32i_m work/ -# sed >> config64.ini -# (cd $(arch_dir) && riscof validateyaml --config=config.ini) -# (cd $(arch_dir) && riscof --verbose info arch-test --clone) -# (cd $(arch_dir) && riscof testlist --config=config.ini --suite=riscv-arch-test/riscv-test-suite/ --env=riscv-arch-test/riscv-test-suite/env) -# sed -i 's/riscv{.}-unknown-/riscv64-unknown-/g' $(arch_dir)/spike/riscof_spike.py -# sed -i 's/riscv{.}-unknown-/riscv64-unknown-/g' $(arch_dir)/sail_cSim/riscof_sail_cSim.py - -memfile: - sleep 1 - find work/rv*/*/ -type f -name "*ref.elf" | while read f; do riscv64-unknown-elf-objdump -S -D "$$f" > "$$f.objdump"; done - find work/rv32*/*/ -type f -name "*ref.elf" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 32 --input "$$f" --output "$$f.memfile"; done - find work/rv64*/*/ -type f -name "*ref.elf" | while read f; do riscv64-unknown-elf-elf2hex --bit-width 64 --input "$$f" --output "$$f.memfile"; done - find work/rv*/*/ -type f -name "*.objdump" | while read f; do extractFunctionRadix.sh $$f; done + sed 's,{0},$(current_dir),g;s,{1},$(XLEN)$(if $(findstring 64,$(XLEN)),gc,imc),g' config.ini > config$(XLEN).ini + riscof run --work-dir=$(work_dir) --config=config$(XLEN).ini --suite=$(arch_dir)/riscv-test-suite/ --env=$(arch_dir)/riscv-test-suite/env --no-browser + rm -rf work/rv$(XLEN)i_m + mv -f $(work_dir)/rv$(XLEN)i_m work/ clean: rm -f config64.ini diff --git a/tests/riscof/sail_cSim/riscof_sail_cSim.py b/tests/riscof/sail_cSim/riscof_sail_cSim.py index c253dd632..7a7d16afb 100644 --- a/tests/riscof/sail_cSim/riscof_sail_cSim.py +++ b/tests/riscof/sail_cSim/riscof_sail_cSim.py @@ -90,7 +90,7 @@ class sail_cSim(pluginTemplate): test_dir = testentry['work_dir'] test_name = test.rsplit('/',1)[1][:-2] - elf = 'ref.elf' + elf = 'Ref.elf' execute = "@cd "+testentry['work_dir']+";" @@ -98,7 +98,7 @@ class sail_cSim(pluginTemplate): compile_cmd = cmd + ' -D' + " -D".join(testentry['macros']) execute+=compile_cmd+";" - execute += self.objdump_cmd.format(elf, self.xlen, 'ref.disass') + execute += self.objdump_cmd.format(elf, self.xlen, 'Ref.elf.objdump') sig_file = os.path.join(test_dir, self.name[:-1] + ".signature") execute += self.sail_exe[self.xlen] + ' --test-signature={0} {1} > {2}.log 2>&1;'.format(sig_file, elf, test_name) diff --git a/tests/riscof/spike/spike_rv32imc_isa.yaml b/tests/riscof/spike/spike_rv32imc_isa.yaml index fe8f8b115..644e97316 100644 --- a/tests/riscof/spike/spike_rv32imc_isa.yaml +++ b/tests/riscof/spike/spike_rv32imc_isa.yaml @@ -1,11 +1,11 @@ hart_ids: [0] hart0: - ISA: RV32IMCZicsr_Zifencei + ISA: RV32IMFCZicsr_Zifencei physical_addr_sz: 32 User_Spec_Version: '2.3' supported_xlen: [32] misa: - reset-val: 0x40001104 + reset-val: 0x40001124 rv32: accessible: true mxl: @@ -23,7 +23,7 @@ hart0: warl: dependency_fields: [] legal: - - extensions[25:0] bitmask [0x0001104, 0x0000000] + - extensions[25:0] bitmask [0x0001124, 0x0000000] wr_illegal: - Unchanged diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S index 98916a7c0..860df5d2e 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-ADD.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.392776// +// Created 2022-06-17 22:58:09.906970// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S index c65543d05..dd63389c4 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLT.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.393471// +// Created 2022-06-17 22:58:09.909889// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S index f91493d31..510438de7 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SLTU.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.393741// +// Created 2022-06-17 22:58:09.911056// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S index e4653f209..1d3e81d80 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-SUB.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.393180// +// Created 2022-06-17 22:58:09.908718// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S index d531f14d0..900849761 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv32i_m/I/src/WALLY-XOR.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.394013// +// Created 2022-06-17 22:58:09.913218// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/Makefrag b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/Makefrag index b48db0871..5d98f81cc 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/Makefrag +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/Makefrag @@ -53,8 +53,8 @@ target_tests_nosim = \ WALLY-status-fp-enabled-01 \ WALLY-status-sie-01 \ WALLY-status-tw-01 \ + WALLY-gpio-01 \ -# unclear why wfi, status-fp-enabled, status-sie, and status-tw fail rv32i_tests = $(addsuffix .elf, $(rv32i_sc_tests)) diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-gpio-01.reference_output b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-gpio-01.reference_output new file mode 100644 index 000000000..278e0aa70 --- /dev/null +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/references/WALLY-gpio-01.reference_output @@ -0,0 +1,7 @@ +00000000 +00000000 +A5A5A5A5 +5A5AFFFF +00000000 +5A5A0000 +A55A0000 diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-gpio-01.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-gpio-01.S new file mode 100644 index 000000000..e4792a78c --- /dev/null +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv32i_m/privilege/src/WALLY-gpio-01.S @@ -0,0 +1,99 @@ +/////////////////////////////////////////// +// +// WALLY-gpio +// +// Author: David_Harris@hmc.edu and Nicholas Lucio +// +// Created 2022-06-16 +// +// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +// is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +/////////////////////////////////////////// + +#include "WALLY-TEST-LIB-32.h" + +INIT_TESTS + +TRAP_HANDLER m + +j run_test_loop // begin test loop/table tests instead of executing inline code. + +INIT_TEST_TABLE + +END_TESTS + +TEST_STACK_AND_DATA + +.align 2 +test_cases: +# --------------------------------------------------------------------------------------------- +# Test Contents +# +# Here is where the actual tests are held, or rather, what the actual tests do. +# each entry consists of 3 values that will be read in as follows: +# +# '.4byte [x28 Value], [x29 Value], [x30 value]' +# or +# '.4byte [address], [value], [test type]' +# +# The encoding for x30 test type values can be found in the test handler in the framework file +# +# --------------------------------------------------------------------------------------------- + +.equ GPIO, 0x10060000 +.equ input_val, (GPIO+0x00) +.equ input_en, (GPIO+0x04) +.equ output_en, (GPIO+0x08) +.equ output_val, (GPIO+0x0C) +.equ rise_ie, (GPIO+0x18) +.equ rise_ip, (GPIO+0x1C) +.equ fall_ie, (GPIO+0x20) +.equ fall_ip, (GPIO+0x24) +.equ high_ie, (GPIO+0x28) +.equ high_ip, (GPIO+0x2C) +.equ low_ie, (GPIO+0x30) +.equ low_ip, (GPIO+0x34) +.equ iof_en, (GPIO+0x38) +.equ iof_sel, (GPIO+0x3C) +.equ out_xor, (GPIO+0x40) + +# =========== Verify all registers reset to zero =========== + +.4byte input_val, 0x00000000, read32_test # input_val reset to zero +.4byte input_en, 0x00000000, read32_test # input_en reset to zero + +# =========== Test output and input pins =========== + +.4byte output_en, 0xFFFFFFFF, write32_test # enable all output pins +.4byte output_val, 0xA5A5A5A5, write32_test # write alternating pattern to output pins +.4byte input_en, 0xFFFFFFFF, write32_test # enable all input pins +.4byte input_val, 0xA5A5A5A5, read32_test # read pattern from output pins +.4byte output_val, 0x5A5AFFFF, write32_test # write different pattern to output pins +.4byte input_val, 0x5A5AFFFF, read32_test # read different pattern from output pins + +# =========== Test input enables =========== +.4byte input_en, 0x00000000, write32_test # disable all input pins +.4byte input_val, 0x00000000, read32_test # read 0 since input pins are disabled +.4byte input_en, 0xFFFF0000, write32_test # enable a few input pins +.4byte input_val, 0x5A5A0000, read32_test # read part of pattern set above. + +# =========== Test output enables(?) =========== + +.4byte output_en, 0xFFFFFFFF, write32_test # undo changes made to output enable + +# =========== Test XOR functionality =========== +.4byte out_xor, 0xFF00FF00, write32_test # invert certain pin values +.4byte input_val, 0xA55A0000, read32_test # read inverted pins and verify input enable is working + +.4byte 0x0, 0x0, terminate_test # terminate tests diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S index ac596d0f8..817693dcb 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-ADD.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.394307// +// Created 2022-06-17 22:58:09.914370// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S index 8a94d265f..76d3fc285 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLT.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.394785// +// Created 2022-06-17 22:58:09.916813// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S index d55aec980..8206bc6f6 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SLTU.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.395005// +// Created 2022-06-17 22:58:09.917963// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S index 00ca2aaef..7e82499b3 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-SUB.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.394545// +// Created 2022-06-17 22:58:09.915580// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation diff --git a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S index f4bc6aa9f..d34f057ba 100644 --- a/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S +++ b/tests/wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S @@ -1,7 +1,7 @@ /////////////////////////////////////////// // ../wally-riscv-arch-test/riscv-test-suite/rv64i_m/I/src/WALLY-XOR.S // David_Harris@hmc.edu & Katherine Parry -// Created 2022-01-27 08:08:42.395231// +// Created 2022-06-17 22:58:09.919138// // Copyright (C) 2021 Harvey Mudd College & Oklahoma State University // // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation