[#73220] remove saif trace example
This commit is contained in:
parent
6ebc4fae7f
commit
d54ebaa14b
|
|
@ -1,100 +0,0 @@
|
||||||
This example workflow was tested on Debian 12.
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
|
|
||||||
To demonstrate the workflow of creating a SAIF file from the simulation trace and a power consumption report generation, we have prepared a simple example located in the `Verilator` project directory under the `examples/saif_example` path.
|
|
||||||
|
|
||||||
## Prerequisites
|
|
||||||
|
|
||||||
This example assumes that cloned repositories are located in the `~/dev` directory. You will need to clone and build these projects:
|
|
||||||
|
|
||||||
- `Verilator` from `https://github.com/antmicro/verilator` on branch `saif`. You can build it with running these commands in the project directory
|
|
||||||
|
|
||||||
```
|
|
||||||
autoconf
|
|
||||||
./configure --prefix $(pwd)
|
|
||||||
make -j $(nproc)
|
|
||||||
```
|
|
||||||
|
|
||||||
and then add the binary directory `~/dev/verilator/bin/` to the `PATH` environmental variable.
|
|
||||||
|
|
||||||
- `OpenSTA` from `https://github.com/The-OpenROAD-Project/OpenSTA`. For building instructions, you can refer to the project `README` file. Keep in mind to add the directory where the `sta` binary is located to the `PATH` environmental variable.
|
|
||||||
|
|
||||||
- `OpenROAD-flow-scripts` with `Yosys` from `https://github.com/The-OpenROAD-Project/OpenROAD-flow-scripts`. To build `Yosys` in `OpenROAD-flow-scripts`, you will need to clone it's submodule with
|
|
||||||
|
|
||||||
`git submodule update --init --recursive tools/yosys`
|
|
||||||
|
|
||||||
then go to the `tools/yosys` directory and run
|
|
||||||
|
|
||||||
`make -j $(nproc) PREFIX=~/dev/OpenROAD-flow-scripts/tools/install/yosys install`
|
|
||||||
|
|
||||||
## Workflow
|
|
||||||
|
|
||||||
### Generating SAIF file from trace
|
|
||||||
From the `examples/saif_example` directory in the `verilator` project, run verilation and compile model to executable with SAIF trace flag enabled `--trace-saif`:
|
|
||||||
|
|
||||||
`verilator --cc --exe --build --trace-saif -j -Wno-latch gcd.v saif_trace.cpp`
|
|
||||||
|
|
||||||
Then run simulation with the generated binary
|
|
||||||
|
|
||||||
`./obj_dir/Vgcd`
|
|
||||||
|
|
||||||
This will generate the `simx.saif` file in the current directory with the trace output.
|
|
||||||
|
|
||||||
### Generating power consumption report
|
|
||||||
For power consumption report generation you will need to prepare simulated model sources for `Yosys` synthesis in the `OpenROAD` project directory. This example workflow uses the `asap7` platform. From the `examples/saif_example` directory in the `verilator` project, copy `saif_trace_example` contents to `OpenROAD-flow-scripts/flow/designs/asap7/` and `src/saif_trace_example` to `OpenROAD-flow-scripts/flow/designs/src/`
|
|
||||||
|
|
||||||
```
|
|
||||||
cp -r saif_trace_example ~/dev/OpenROAD-flow-scripts/flow/designs/asap7/
|
|
||||||
cp -r src/saif_trace_example ~/dev/OpenROAD-flow-scripts/flow/designs/src/
|
|
||||||
```
|
|
||||||
|
|
||||||
Then go to the `OpenROAD-flow-scripts` project top directory and run the `Yosys` synthesis with
|
|
||||||
|
|
||||||
`make -C flow DESIGN_CONFIG=designs/asap7/saif_trace_example/config.mk synth`
|
|
||||||
|
|
||||||
Result of the synthesis will be located in the `~/dev/OpenROAD-flow-scripts/flow/results/asap7/saif_trace_example/base/` directory.
|
|
||||||
|
|
||||||
Copy previously generated SAIF file from trace to the synthesis result directory with
|
|
||||||
|
|
||||||
`cp ~/dev/verilator/examples/saif_example/simx.saif ~/dev/OpenROAD-flow-scripts/flow/results/asap7/saif_trace_example/base/`
|
|
||||||
|
|
||||||
For liberty files paths simplicity, you can export the path to their directory as the `LIB_DIR` environmental variable. In this example it will be
|
|
||||||
|
|
||||||
```
|
|
||||||
export LIB_DIR=~/dev/OpenROAD-flow-scripts/flow/platforms/asap7/lib/NLDM/
|
|
||||||
```
|
|
||||||
|
|
||||||
Go to the synthesis results directory, run `sta` and then execute commands below
|
|
||||||
|
|
||||||
```
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
|
|
||||||
|
|
||||||
read_verilog 1_synth.v
|
|
||||||
link_design gcd
|
|
||||||
|
|
||||||
read_sdc 1_synth.sdc
|
|
||||||
|
|
||||||
read_saif -scope gcd simx.saif
|
|
||||||
report_power
|
|
||||||
```
|
|
||||||
|
|
||||||
This will generate power consumption report that should look like this
|
|
||||||
|
|
||||||
```
|
|
||||||
Group Internal Switching Leakage Total
|
|
||||||
Power Power Power Power (Watts)
|
|
||||||
----------------------------------------------------------------
|
|
||||||
Sequential 5.19e-05 5.18e-06 5.34e-09 5.71e-05 43.5%
|
|
||||||
Combinational 4.15e-05 3.26e-05 2.17e-08 7.42e-05 56.5%
|
|
||||||
Clock 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
|
|
||||||
Macro 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
|
|
||||||
Pad 0.00e+00 0.00e+00 0.00e+00 0.00e+00 0.0%
|
|
||||||
----------------------------------------------------------------
|
|
||||||
Total 9.35e-05 3.78e-05 2.70e-08 1.31e-04 100.0%
|
|
||||||
71.2% 28.8% 0.0%
|
|
||||||
```
|
|
||||||
|
|
@ -1,755 +0,0 @@
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnit
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Originally Generated from PyMTL with a few modifications to make it more
|
|
||||||
// friendly to OpenROAD tools
|
|
||||||
|
|
||||||
//module GcdUnit
|
|
||||||
module gcd
|
|
||||||
(
|
|
||||||
input wire clk,
|
|
||||||
input wire [ 31:0] req_msg,
|
|
||||||
output wire req_rdy,
|
|
||||||
input wire req_val,
|
|
||||||
input wire reset,
|
|
||||||
output wire [ 15:0] resp_msg,
|
|
||||||
input wire resp_rdy,
|
|
||||||
output wire resp_val
|
|
||||||
);
|
|
||||||
|
|
||||||
// ctrl temporaries
|
|
||||||
wire [ 0:0] ctrl$is_b_zero;
|
|
||||||
wire [ 0:0] ctrl$resp_rdy;
|
|
||||||
wire [ 0:0] ctrl$clk;
|
|
||||||
wire [ 0:0] ctrl$is_a_lt_b;
|
|
||||||
wire [ 0:0] ctrl$req_val;
|
|
||||||
wire [ 0:0] ctrl$reset;
|
|
||||||
wire [ 1:0] ctrl$a_mux_sel;
|
|
||||||
wire [ 0:0] ctrl$resp_val;
|
|
||||||
wire [ 0:0] ctrl$b_mux_sel;
|
|
||||||
wire [ 0:0] ctrl$b_reg_en;
|
|
||||||
wire [ 0:0] ctrl$a_reg_en;
|
|
||||||
wire [ 0:0] ctrl$req_rdy;
|
|
||||||
|
|
||||||
GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e ctrl
|
|
||||||
(
|
|
||||||
.is_b_zero ( ctrl$is_b_zero ),
|
|
||||||
.resp_rdy ( ctrl$resp_rdy ),
|
|
||||||
.clk ( ctrl$clk ),
|
|
||||||
.is_a_lt_b ( ctrl$is_a_lt_b ),
|
|
||||||
.req_val ( ctrl$req_val ),
|
|
||||||
.reset ( ctrl$reset ),
|
|
||||||
.a_mux_sel ( ctrl$a_mux_sel ),
|
|
||||||
.resp_val ( ctrl$resp_val ),
|
|
||||||
.b_mux_sel ( ctrl$b_mux_sel ),
|
|
||||||
.b_reg_en ( ctrl$b_reg_en ),
|
|
||||||
.a_reg_en ( ctrl$a_reg_en ),
|
|
||||||
.req_rdy ( ctrl$req_rdy )
|
|
||||||
);
|
|
||||||
|
|
||||||
// dpath temporaries
|
|
||||||
wire [ 1:0] dpath$a_mux_sel;
|
|
||||||
wire [ 0:0] dpath$clk;
|
|
||||||
wire [ 15:0] dpath$req_msg_b;
|
|
||||||
wire [ 15:0] dpath$req_msg_a;
|
|
||||||
wire [ 0:0] dpath$b_mux_sel;
|
|
||||||
wire [ 0:0] dpath$reset;
|
|
||||||
wire [ 0:0] dpath$b_reg_en;
|
|
||||||
wire [ 0:0] dpath$a_reg_en;
|
|
||||||
wire [ 0:0] dpath$is_b_zero;
|
|
||||||
wire [ 15:0] dpath$resp_msg;
|
|
||||||
wire [ 0:0] dpath$is_a_lt_b;
|
|
||||||
|
|
||||||
GcdUnitDpathRTL_0x4d0fc71ead8d3d9e dpath
|
|
||||||
(
|
|
||||||
.a_mux_sel ( dpath$a_mux_sel ),
|
|
||||||
.clk ( dpath$clk ),
|
|
||||||
.req_msg_b ( dpath$req_msg_b ),
|
|
||||||
.req_msg_a ( dpath$req_msg_a ),
|
|
||||||
.b_mux_sel ( dpath$b_mux_sel ),
|
|
||||||
.reset ( dpath$reset ),
|
|
||||||
.b_reg_en ( dpath$b_reg_en ),
|
|
||||||
.a_reg_en ( dpath$a_reg_en ),
|
|
||||||
.is_b_zero ( dpath$is_b_zero ),
|
|
||||||
.resp_msg ( dpath$resp_msg ),
|
|
||||||
.is_a_lt_b ( dpath$is_a_lt_b )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign ctrl$clk = clk;
|
|
||||||
assign ctrl$is_a_lt_b = dpath$is_a_lt_b;
|
|
||||||
assign ctrl$is_b_zero = dpath$is_b_zero;
|
|
||||||
assign ctrl$req_val = req_val;
|
|
||||||
assign ctrl$reset = reset;
|
|
||||||
assign ctrl$resp_rdy = resp_rdy;
|
|
||||||
assign dpath$a_mux_sel = ctrl$a_mux_sel;
|
|
||||||
assign dpath$a_reg_en = ctrl$a_reg_en;
|
|
||||||
assign dpath$b_mux_sel = ctrl$b_mux_sel;
|
|
||||||
assign dpath$b_reg_en = ctrl$b_reg_en;
|
|
||||||
assign dpath$clk = clk;
|
|
||||||
assign dpath$req_msg_a = req_msg[31:16];
|
|
||||||
assign dpath$req_msg_b = req_msg[15:0];
|
|
||||||
assign dpath$reset = reset;
|
|
||||||
assign req_rdy = ctrl$req_rdy;
|
|
||||||
assign resp_msg = dpath$resp_msg;
|
|
||||||
assign resp_val = ctrl$resp_val;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnit
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
module GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
(
|
|
||||||
output reg [ 1:0] a_mux_sel,
|
|
||||||
output reg [ 0:0] a_reg_en,
|
|
||||||
output reg [ 0:0] b_mux_sel,
|
|
||||||
output reg [ 0:0] b_reg_en,
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 0:0] is_a_lt_b,
|
|
||||||
input wire [ 0:0] is_b_zero,
|
|
||||||
output reg [ 0:0] req_rdy,
|
|
||||||
input wire [ 0:0] req_val,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 0:0] resp_rdy,
|
|
||||||
output reg [ 0:0] resp_val
|
|
||||||
);
|
|
||||||
|
|
||||||
// register declarations
|
|
||||||
reg [ 1:0] curr_state__0;
|
|
||||||
reg [ 1:0] current_state__1;
|
|
||||||
reg [ 0:0] do_sub;
|
|
||||||
reg [ 0:0] do_swap;
|
|
||||||
reg [ 1:0] next_state__0;
|
|
||||||
reg [ 1:0] state$in_;
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam A_MUX_SEL_B = 2;
|
|
||||||
localparam A_MUX_SEL_IN = 0;
|
|
||||||
localparam A_MUX_SEL_SUB = 1;
|
|
||||||
localparam A_MUX_SEL_X = 0;
|
|
||||||
localparam B_MUX_SEL_A = 0;
|
|
||||||
localparam B_MUX_SEL_IN = 1;
|
|
||||||
localparam B_MUX_SEL_X = 0;
|
|
||||||
localparam STATE_CALC = 1;
|
|
||||||
localparam STATE_DONE = 2;
|
|
||||||
localparam STATE_IDLE = 0;
|
|
||||||
|
|
||||||
// state temporaries
|
|
||||||
wire [ 0:0] state$reset;
|
|
||||||
wire [ 0:0] state$clk;
|
|
||||||
wire [ 1:0] state$out;
|
|
||||||
|
|
||||||
RegRst_0x9f365fdf6c8998a state
|
|
||||||
(
|
|
||||||
.reset ( state$reset ),
|
|
||||||
.in_ ( state$in_ ),
|
|
||||||
.clk ( state$clk ),
|
|
||||||
.out ( state$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign state$clk = clk;
|
|
||||||
assign state$reset = reset;
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def state_transitions():
|
|
||||||
//
|
|
||||||
// curr_state = s.state.out
|
|
||||||
// next_state = s.state.out
|
|
||||||
//
|
|
||||||
// # Transistions out of IDLE state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_IDLE ):
|
|
||||||
// if ( s.req_val and s.req_rdy ):
|
|
||||||
// next_state = s.STATE_CALC
|
|
||||||
//
|
|
||||||
// # Transistions out of CALC state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_CALC ):
|
|
||||||
// if ( not s.is_a_lt_b and s.is_b_zero ):
|
|
||||||
// next_state = s.STATE_DONE
|
|
||||||
//
|
|
||||||
// # Transistions out of DONE state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_DONE ):
|
|
||||||
// if ( s.resp_val and s.resp_rdy ):
|
|
||||||
// next_state = s.STATE_IDLE
|
|
||||||
//
|
|
||||||
// s.state.in_.value = next_state
|
|
||||||
|
|
||||||
// logic for state_transitions()
|
|
||||||
always @ (*) begin
|
|
||||||
curr_state__0 = state$out;
|
|
||||||
next_state__0 = state$out;
|
|
||||||
if ((curr_state__0 == STATE_IDLE)) begin
|
|
||||||
if ((req_val&&req_rdy)) begin
|
|
||||||
next_state__0 = STATE_CALC;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
if ((curr_state__0 == STATE_CALC)) begin
|
|
||||||
if ((!is_a_lt_b&&is_b_zero)) begin
|
|
||||||
next_state__0 = STATE_DONE;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
if ((curr_state__0 == STATE_DONE)) begin
|
|
||||||
if ((resp_val&&resp_rdy)) begin
|
|
||||||
next_state__0 = STATE_IDLE;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
state$in_ = next_state__0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def state_outputs():
|
|
||||||
//
|
|
||||||
// current_state = s.state.out
|
|
||||||
//
|
|
||||||
// # In IDLE state we simply wait for inputs to arrive and latch them
|
|
||||||
//
|
|
||||||
// if current_state == s.STATE_IDLE:
|
|
||||||
// s.req_rdy.value = 1
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_IN
|
|
||||||
// s.a_reg_en.value = 1
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_IN
|
|
||||||
// s.b_reg_en.value = 1
|
|
||||||
//
|
|
||||||
// # In CALC state we iteratively swap/sub to calculate GCD
|
|
||||||
//
|
|
||||||
// elif current_state == s.STATE_CALC:
|
|
||||||
//
|
|
||||||
// s.do_swap.value = s.is_a_lt_b
|
|
||||||
// s.do_sub.value = ~s.is_b_zero
|
|
||||||
//
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_B if s.do_swap else A_MUX_SEL_SUB
|
|
||||||
// s.a_reg_en.value = 1
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_A
|
|
||||||
// s.b_reg_en.value = s.do_swap
|
|
||||||
//
|
|
||||||
// # In DONE state we simply wait for output transaction to occur
|
|
||||||
//
|
|
||||||
// elif current_state == s.STATE_DONE:
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 1
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_X
|
|
||||||
// s.a_reg_en.value = 0
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_X
|
|
||||||
// s.b_reg_en.value = 0
|
|
||||||
//
|
|
||||||
// # Default case that we should not hit
|
|
||||||
//
|
|
||||||
// else:
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_X
|
|
||||||
// s.a_reg_en.value = 0
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_X
|
|
||||||
// s.b_reg_en.value = 0
|
|
||||||
|
|
||||||
// logic for state_outputs()
|
|
||||||
always @ (*) begin
|
|
||||||
current_state__1 = state$out;
|
|
||||||
if ((current_state__1 == STATE_IDLE)) begin
|
|
||||||
req_rdy = 1;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = A_MUX_SEL_IN;
|
|
||||||
a_reg_en = 1;
|
|
||||||
b_mux_sel = B_MUX_SEL_IN;
|
|
||||||
b_reg_en = 1;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
if ((current_state__1 == STATE_CALC)) begin
|
|
||||||
do_swap = is_a_lt_b;
|
|
||||||
do_sub = ~is_b_zero;
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = do_swap ? A_MUX_SEL_B : A_MUX_SEL_SUB;
|
|
||||||
a_reg_en = 1;
|
|
||||||
b_mux_sel = B_MUX_SEL_A;
|
|
||||||
b_reg_en = do_swap;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
if ((current_state__1 == STATE_DONE)) begin
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 1;
|
|
||||||
a_mux_sel = A_MUX_SEL_X;
|
|
||||||
a_reg_en = 0;
|
|
||||||
b_mux_sel = B_MUX_SEL_X;
|
|
||||||
b_reg_en = 0;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = A_MUX_SEL_X;
|
|
||||||
a_reg_en = 0;
|
|
||||||
b_mux_sel = B_MUX_SEL_X;
|
|
||||||
b_reg_en = 0;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// RegRst_0x9f365fdf6c8998a
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 2
|
|
||||||
// reset_value: 0
|
|
||||||
|
|
||||||
|
|
||||||
module RegRst_0x9f365fdf6c8998a
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 1:0] in_,
|
|
||||||
output reg [ 1:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam reset_value = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.posedge_clk
|
|
||||||
// def seq_logic():
|
|
||||||
// if s.reset:
|
|
||||||
// s.out.next = reset_value
|
|
||||||
// else:
|
|
||||||
// s.out.next = s.in_
|
|
||||||
|
|
||||||
// logic for seq_logic()
|
|
||||||
always @ (posedge clk) begin
|
|
||||||
if (reset) begin
|
|
||||||
out <= reset_value;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
out <= in_;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // RegRst_0x9f365fdf6c8998a
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
module GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
(
|
|
||||||
input wire [ 1:0] a_mux_sel,
|
|
||||||
input wire [ 0:0] a_reg_en,
|
|
||||||
input wire [ 0:0] b_mux_sel,
|
|
||||||
input wire [ 0:0] b_reg_en,
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
output wire [ 0:0] is_a_lt_b,
|
|
||||||
output wire [ 0:0] is_b_zero,
|
|
||||||
input wire [ 15:0] req_msg_a,
|
|
||||||
input wire [ 15:0] req_msg_b,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
output wire [ 15:0] resp_msg
|
|
||||||
);
|
|
||||||
|
|
||||||
// wire declarations
|
|
||||||
wire [ 15:0] sub_out;
|
|
||||||
wire [ 15:0] b_reg_out;
|
|
||||||
|
|
||||||
|
|
||||||
// a_reg temporaries
|
|
||||||
wire [ 0:0] a_reg$reset;
|
|
||||||
wire [ 15:0] a_reg$in_;
|
|
||||||
wire [ 0:0] a_reg$clk;
|
|
||||||
wire [ 0:0] a_reg$en;
|
|
||||||
wire [ 15:0] a_reg$out;
|
|
||||||
|
|
||||||
RegEn_0x68db79c4ec1d6e5b a_reg
|
|
||||||
(
|
|
||||||
.reset ( a_reg$reset ),
|
|
||||||
.in_ ( a_reg$in_ ),
|
|
||||||
.clk ( a_reg$clk ),
|
|
||||||
.en ( a_reg$en ),
|
|
||||||
.out ( a_reg$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// a_lt_b temporaries
|
|
||||||
wire [ 0:0] a_lt_b$reset;
|
|
||||||
wire [ 0:0] a_lt_b$clk;
|
|
||||||
wire [ 15:0] a_lt_b$in0;
|
|
||||||
wire [ 15:0] a_lt_b$in1;
|
|
||||||
wire [ 0:0] a_lt_b$out;
|
|
||||||
|
|
||||||
LtComparator_0x422b1f52edd46a85 a_lt_b
|
|
||||||
(
|
|
||||||
.reset ( a_lt_b$reset ),
|
|
||||||
.clk ( a_lt_b$clk ),
|
|
||||||
.in0 ( a_lt_b$in0 ),
|
|
||||||
.in1 ( a_lt_b$in1 ),
|
|
||||||
.out ( a_lt_b$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_zero temporaries
|
|
||||||
wire [ 0:0] b_zero$reset;
|
|
||||||
wire [ 15:0] b_zero$in_;
|
|
||||||
wire [ 0:0] b_zero$clk;
|
|
||||||
wire [ 0:0] b_zero$out;
|
|
||||||
|
|
||||||
ZeroComparator_0x422b1f52edd46a85 b_zero
|
|
||||||
(
|
|
||||||
.reset ( b_zero$reset ),
|
|
||||||
.in_ ( b_zero$in_ ),
|
|
||||||
.clk ( b_zero$clk ),
|
|
||||||
.out ( b_zero$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// a_mux temporaries
|
|
||||||
wire [ 0:0] a_mux$reset;
|
|
||||||
wire [ 15:0] a_mux$in_$000;
|
|
||||||
wire [ 15:0] a_mux$in_$001;
|
|
||||||
wire [ 15:0] a_mux$in_$002;
|
|
||||||
wire [ 0:0] a_mux$clk;
|
|
||||||
wire [ 1:0] a_mux$sel;
|
|
||||||
wire [ 15:0] a_mux$out;
|
|
||||||
|
|
||||||
Mux_0x683fa1a418b072c9 a_mux
|
|
||||||
(
|
|
||||||
.reset ( a_mux$reset ),
|
|
||||||
.in_$000 ( a_mux$in_$000 ),
|
|
||||||
.in_$001 ( a_mux$in_$001 ),
|
|
||||||
.in_$002 ( a_mux$in_$002 ),
|
|
||||||
.clk ( a_mux$clk ),
|
|
||||||
.sel ( a_mux$sel ),
|
|
||||||
.out ( a_mux$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_mux temporaries
|
|
||||||
wire [ 0:0] b_mux$reset;
|
|
||||||
wire [ 15:0] b_mux$in_$000;
|
|
||||||
wire [ 15:0] b_mux$in_$001;
|
|
||||||
wire [ 0:0] b_mux$clk;
|
|
||||||
wire [ 0:0] b_mux$sel;
|
|
||||||
wire [ 15:0] b_mux$out;
|
|
||||||
|
|
||||||
Mux_0xdd6473406d1a99a b_mux
|
|
||||||
(
|
|
||||||
.reset ( b_mux$reset ),
|
|
||||||
.in_$000 ( b_mux$in_$000 ),
|
|
||||||
.in_$001 ( b_mux$in_$001 ),
|
|
||||||
.clk ( b_mux$clk ),
|
|
||||||
.sel ( b_mux$sel ),
|
|
||||||
.out ( b_mux$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// sub temporaries
|
|
||||||
wire [ 0:0] sub$reset;
|
|
||||||
wire [ 0:0] sub$clk;
|
|
||||||
wire [ 15:0] sub$in0;
|
|
||||||
wire [ 15:0] sub$in1;
|
|
||||||
wire [ 15:0] sub$out;
|
|
||||||
|
|
||||||
Subtractor_0x422b1f52edd46a85 sub
|
|
||||||
(
|
|
||||||
.reset ( sub$reset ),
|
|
||||||
.clk ( sub$clk ),
|
|
||||||
.in0 ( sub$in0 ),
|
|
||||||
.in1 ( sub$in1 ),
|
|
||||||
.out ( sub$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_reg temporaries
|
|
||||||
wire [ 0:0] b_reg$reset;
|
|
||||||
wire [ 15:0] b_reg$in_;
|
|
||||||
wire [ 0:0] b_reg$clk;
|
|
||||||
wire [ 0:0] b_reg$en;
|
|
||||||
wire [ 15:0] b_reg$out;
|
|
||||||
|
|
||||||
RegEn_0x68db79c4ec1d6e5b b_reg
|
|
||||||
(
|
|
||||||
.reset ( b_reg$reset ),
|
|
||||||
.in_ ( b_reg$in_ ),
|
|
||||||
.clk ( b_reg$clk ),
|
|
||||||
.en ( b_reg$en ),
|
|
||||||
.out ( b_reg$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign a_lt_b$clk = clk;
|
|
||||||
assign a_lt_b$in0 = a_reg$out;
|
|
||||||
assign a_lt_b$in1 = b_reg$out;
|
|
||||||
assign a_lt_b$reset = reset;
|
|
||||||
assign a_mux$clk = clk;
|
|
||||||
assign a_mux$in_$000 = req_msg_a;
|
|
||||||
assign a_mux$in_$001 = sub_out;
|
|
||||||
assign a_mux$in_$002 = b_reg_out;
|
|
||||||
assign a_mux$reset = reset;
|
|
||||||
assign a_mux$sel = a_mux_sel;
|
|
||||||
assign a_reg$clk = clk;
|
|
||||||
assign a_reg$en = a_reg_en;
|
|
||||||
assign a_reg$in_ = a_mux$out;
|
|
||||||
assign a_reg$reset = reset;
|
|
||||||
assign b_mux$clk = clk;
|
|
||||||
assign b_mux$in_$000 = a_reg$out;
|
|
||||||
assign b_mux$in_$001 = req_msg_b;
|
|
||||||
assign b_mux$reset = reset;
|
|
||||||
assign b_mux$sel = b_mux_sel;
|
|
||||||
assign b_reg$clk = clk;
|
|
||||||
assign b_reg$en = b_reg_en;
|
|
||||||
assign b_reg$in_ = b_mux$out;
|
|
||||||
assign b_reg$reset = reset;
|
|
||||||
assign b_reg_out = b_reg$out;
|
|
||||||
assign b_zero$clk = clk;
|
|
||||||
assign b_zero$in_ = b_reg$out;
|
|
||||||
assign b_zero$reset = reset;
|
|
||||||
assign is_a_lt_b = a_lt_b$out;
|
|
||||||
assign is_b_zero = b_zero$out;
|
|
||||||
assign resp_msg = sub$out;
|
|
||||||
assign sub$clk = clk;
|
|
||||||
assign sub$in0 = a_reg$out;
|
|
||||||
assign sub$in1 = b_reg$out;
|
|
||||||
assign sub$reset = reset;
|
|
||||||
assign sub_out = sub$out;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// RegEn_0x68db79c4ec1d6e5b
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
|
|
||||||
|
|
||||||
module RegEn_0x68db79c4ec1d6e5b
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 0:0] en,
|
|
||||||
input wire [ 15:0] in_,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.posedge_clk
|
|
||||||
// def seq_logic():
|
|
||||||
// if s.en:
|
|
||||||
// s.out.next = s.in_
|
|
||||||
|
|
||||||
// logic for seq_logic()
|
|
||||||
always @ (posedge clk) begin
|
|
||||||
if (en) begin
|
|
||||||
out <= in_;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // RegEn_0x68db79c4ec1d6e5b
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// LtComparator_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module LtComparator_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in0,
|
|
||||||
input wire [ 15:0] in1,
|
|
||||||
output reg [ 0:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in0 < s.in1
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in0 < in1);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // LtComparator_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// ZeroComparator_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module ZeroComparator_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_,
|
|
||||||
output reg [ 0:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in_ == 0
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in_ == 0);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // ZeroComparator_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Mux_0x683fa1a418b072c9
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
// nports: 3
|
|
||||||
|
|
||||||
|
|
||||||
module Mux_0x683fa1a418b072c9
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_$000,
|
|
||||||
input wire [ 15:0] in_$001,
|
|
||||||
input wire [ 15:0] in_$002,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 1:0] sel
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam nports = 3;
|
|
||||||
|
|
||||||
|
|
||||||
// array declarations
|
|
||||||
wire [ 15:0] in_[0:2];
|
|
||||||
assign in_[ 0] = in_$000;
|
|
||||||
assign in_[ 1] = in_$001;
|
|
||||||
assign in_[ 2] = in_$002;
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// assert s.sel < nports
|
|
||||||
// s.out.v = s.in_[ s.sel ]
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = in_[sel];
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Mux_0x683fa1a418b072c9
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Mux_0xdd6473406d1a99a
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
// nports: 2
|
|
||||||
|
|
||||||
|
|
||||||
module Mux_0xdd6473406d1a99a
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_$000,
|
|
||||||
input wire [ 15:0] in_$001,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 0:0] sel
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam nports = 2;
|
|
||||||
|
|
||||||
|
|
||||||
// array declarations
|
|
||||||
wire [ 15:0] in_[0:1];
|
|
||||||
assign in_[ 0] = in_$000;
|
|
||||||
assign in_[ 1] = in_$001;
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// assert s.sel < nports
|
|
||||||
// s.out.v = s.in_[ s.sel ]
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = in_[sel];
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Mux_0xdd6473406d1a99a
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Subtractor_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module Subtractor_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in0,
|
|
||||||
input wire [ 15:0] in1,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in0 - s.in1
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in0-in1);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Subtractor_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
|
|
@ -1,62 +0,0 @@
|
||||||
// -*- mode: C++; c-file-style: "cc-mode" -*-
|
|
||||||
//
|
|
||||||
// DESCRIPTION: Verilator: Verilog Test module
|
|
||||||
//
|
|
||||||
// This file ONLY is placed under the Creative Commons Public Domain, for
|
|
||||||
// any use, without warranty, 2025 by Wilson Snyder.
|
|
||||||
// SPDX-License-Identifier: CC0-1.0
|
|
||||||
|
|
||||||
#include <verilated.h>
|
|
||||||
#include <verilated_saif_c.h>
|
|
||||||
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
#include "Vgcd.h"
|
|
||||||
|
|
||||||
int errors = 0;
|
|
||||||
|
|
||||||
unsigned long long main_time = 0;
|
|
||||||
double sc_time_stamp() { return static_cast<double>(main_time); }
|
|
||||||
|
|
||||||
const char* trace_name() {
|
|
||||||
static char name[1000];
|
|
||||||
VL_SNPRINTF(name, 1000, "simx.saif");
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv) {
|
|
||||||
Verilated::debug(0);
|
|
||||||
Verilated::traceEverOn(true);
|
|
||||||
Verilated::commandArgs(argc, argv);
|
|
||||||
|
|
||||||
std::unique_ptr<Vgcd> top{new Vgcd};
|
|
||||||
|
|
||||||
std::unique_ptr<VerilatedSaifC> tfp{new VerilatedSaifC};
|
|
||||||
|
|
||||||
static constexpr int SIMULATION_DURATION{10000};
|
|
||||||
top->trace(tfp.get(), SIMULATION_DURATION);
|
|
||||||
|
|
||||||
tfp->open(trace_name());
|
|
||||||
|
|
||||||
top->clk = 0;
|
|
||||||
|
|
||||||
while (main_time < SIMULATION_DURATION) {
|
|
||||||
top->clk = !top->clk;
|
|
||||||
top->req_msg = rand() & 0xffffffff;
|
|
||||||
top->req_val = rand() & 0x1;
|
|
||||||
top->reset = rand() & 0x1;
|
|
||||||
top->resp_rdy = rand() & 0x1;
|
|
||||||
|
|
||||||
top->eval();
|
|
||||||
tfp->dump(static_cast<unsigned int>(main_time));
|
|
||||||
++main_time;
|
|
||||||
}
|
|
||||||
|
|
||||||
tfp->close();
|
|
||||||
top->final();
|
|
||||||
tfp.reset();
|
|
||||||
top.reset();
|
|
||||||
printf("*-* All Finished *-*\n");
|
|
||||||
|
|
||||||
return errors;
|
|
||||||
}
|
|
||||||
|
|
@ -1,92 +0,0 @@
|
||||||
{
|
|
||||||
"_SDC_FILE_PATH": "constraint.sdc",
|
|
||||||
"_SDC_CLK_PERIOD": {
|
|
||||||
"type": "float",
|
|
||||||
"minmax": [
|
|
||||||
1200,
|
|
||||||
2000
|
|
||||||
],
|
|
||||||
"step": 0
|
|
||||||
},
|
|
||||||
"CORE_UTILIZATION": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
5,
|
|
||||||
10
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"CORE_ASPECT_RATIO": {
|
|
||||||
"type": "float",
|
|
||||||
"minmax": [
|
|
||||||
0.9,
|
|
||||||
1.1
|
|
||||||
],
|
|
||||||
"step": 0
|
|
||||||
},
|
|
||||||
"CORE_MARGIN": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
2,
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"step": 0
|
|
||||||
},
|
|
||||||
"CELL_PAD_IN_SITES_GLOBAL_PLACEMENT": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
0,
|
|
||||||
3
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"CELL_PAD_IN_SITES_DETAIL_PLACEMENT": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
0,
|
|
||||||
3
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"_FR_LAYER_ADJUST": {
|
|
||||||
"type": "float",
|
|
||||||
"minmax": [
|
|
||||||
0.0,
|
|
||||||
0.1
|
|
||||||
],
|
|
||||||
"step": 0
|
|
||||||
},
|
|
||||||
"PLACE_DENSITY_LB_ADDON": {
|
|
||||||
"type": "float",
|
|
||||||
"minmax": [
|
|
||||||
0.0,
|
|
||||||
0.2
|
|
||||||
],
|
|
||||||
"step": 0
|
|
||||||
},
|
|
||||||
"_PINS_DISTANCE": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"CTS_CLUSTER_SIZE": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
10,
|
|
||||||
200
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"CTS_CLUSTER_DIAMETER": {
|
|
||||||
"type": "int",
|
|
||||||
"minmax": [
|
|
||||||
20,
|
|
||||||
400
|
|
||||||
],
|
|
||||||
"step": 1
|
|
||||||
},
|
|
||||||
"_FR_FILE_PATH": ""
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +0,0 @@
|
||||||
export PLATFORM = asap7
|
|
||||||
|
|
||||||
export DESIGN_NICKNAME = saif_trace_example
|
|
||||||
export DESIGN_NAME = gcd
|
|
||||||
|
|
||||||
export VERILOG_FILES = $(sort $(wildcard $(DESIGN_HOME)/src/$(DESIGN_NICKNAME)/*.v))
|
|
||||||
export SDC_FILE = $(DESIGN_HOME)/$(PLATFORM)/$(DESIGN_NICKNAME)/constraint.sdc
|
|
||||||
|
|
||||||
export CORE_UTILIZATION = 40
|
|
||||||
export CORE_ASPECT_RATIO = 1
|
|
||||||
export CORE_MARGIN = 2
|
|
||||||
export PLACE_DENSITY_LB_ADDON = 0.20
|
|
||||||
|
|
||||||
export ENABLE_DPO = 0
|
|
||||||
|
|
||||||
export TNS_END_PERCENT = 100
|
|
||||||
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
set clk_name core_clock
|
|
||||||
set clk_port_name clk
|
|
||||||
set clk_period 1260
|
|
||||||
set clk_io_pct 0.2
|
|
||||||
|
|
||||||
set clk_port [get_ports $clk_port_name]
|
|
||||||
|
|
||||||
create_clock -name $clk_name -period $clk_period $clk_port
|
|
||||||
|
|
||||||
set non_clock_inputs [lsearch -inline -all -not -exact [all_inputs] $clk_port]
|
|
||||||
|
|
||||||
set_input_delay [expr $clk_period * $clk_io_pct] -clock $clk_name $non_clock_inputs
|
|
||||||
set_output_delay [expr $clk_period * $clk_io_pct] -clock $clk_name [all_outputs]
|
|
||||||
|
|
@ -1,384 +0,0 @@
|
||||||
{
|
|
||||||
"constraints__clocks__count": 1,
|
|
||||||
"constraints__clocks__details": [
|
|
||||||
"core_clock: 1260.0000"
|
|
||||||
],
|
|
||||||
"cts__clock__skew__hold": 128.848,
|
|
||||||
"cts__clock__skew__setup": 154.028,
|
|
||||||
"cts__cpu__total": 90.71,
|
|
||||||
"cts__design__core__area": 5654.27,
|
|
||||||
"cts__design__die__area": 6307.06,
|
|
||||||
"cts__design__instance__area": 2632.36,
|
|
||||||
"cts__design__instance__area__cover": 0,
|
|
||||||
"cts__design__instance__area__macros": 0,
|
|
||||||
"cts__design__instance__area__padcells": 0,
|
|
||||||
"cts__design__instance__area__stdcell": 2632.36,
|
|
||||||
"cts__design__instance__count": 21501,
|
|
||||||
"cts__design__instance__count__cover": 0,
|
|
||||||
"cts__design__instance__count__hold_buffer": 0,
|
|
||||||
"cts__design__instance__count__macros": 0,
|
|
||||||
"cts__design__instance__count__padcells": 0,
|
|
||||||
"cts__design__instance__count__setup_buffer": 62,
|
|
||||||
"cts__design__instance__count__stdcell": 21501,
|
|
||||||
"cts__design__instance__displacement__max": 1.116,
|
|
||||||
"cts__design__instance__displacement__mean": 0.001,
|
|
||||||
"cts__design__instance__displacement__total": 39.259,
|
|
||||||
"cts__design__instance__utilization": 0.465553,
|
|
||||||
"cts__design__instance__utilization__stdcell": 0.465553,
|
|
||||||
"cts__design__io": 264,
|
|
||||||
"cts__design__rows": 278,
|
|
||||||
"cts__design__rows:asap7sc7p5t": 278,
|
|
||||||
"cts__design__sites": 387810,
|
|
||||||
"cts__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"cts__design__violations": 0,
|
|
||||||
"cts__flow__errors__count": 0,
|
|
||||||
"cts__flow__warnings__count": 11,
|
|
||||||
"cts__mem__peak": 723160.0,
|
|
||||||
"cts__power__internal__total": 0.0206542,
|
|
||||||
"cts__power__leakage__total": 2.02506e-06,
|
|
||||||
"cts__power__switching__total": 0.0215231,
|
|
||||||
"cts__power__total": 0.0421793,
|
|
||||||
"cts__route__wirelength__estimated": 94069.5,
|
|
||||||
"cts__runtime__total": "1:31.32",
|
|
||||||
"cts__timing__drv__hold_violation_count": 0,
|
|
||||||
"cts__timing__drv__max_cap": 0,
|
|
||||||
"cts__timing__drv__max_cap_limit": 0.424876,
|
|
||||||
"cts__timing__drv__max_fanout": 0,
|
|
||||||
"cts__timing__drv__max_fanout_limit": 0,
|
|
||||||
"cts__timing__drv__max_slew": 0,
|
|
||||||
"cts__timing__drv__max_slew_limit": 0.219039,
|
|
||||||
"cts__timing__drv__setup_violation_count": 3,
|
|
||||||
"cts__timing__setup__tns": -38.9303,
|
|
||||||
"cts__timing__setup__ws": -32.5814,
|
|
||||||
"design__io__hpwl": 5296159,
|
|
||||||
"design__violations": 0,
|
|
||||||
"detailedplace__cpu__total": 135.62,
|
|
||||||
"detailedplace__design__core__area": 5654.27,
|
|
||||||
"detailedplace__design__die__area": 6307.06,
|
|
||||||
"detailedplace__design__instance__area": 2564.9,
|
|
||||||
"detailedplace__design__instance__area__cover": 0,
|
|
||||||
"detailedplace__design__instance__area__macros": 0,
|
|
||||||
"detailedplace__design__instance__area__padcells": 0,
|
|
||||||
"detailedplace__design__instance__area__stdcell": 2564.9,
|
|
||||||
"detailedplace__design__instance__count": 21241,
|
|
||||||
"detailedplace__design__instance__count__cover": 0,
|
|
||||||
"detailedplace__design__instance__count__macros": 0,
|
|
||||||
"detailedplace__design__instance__count__padcells": 0,
|
|
||||||
"detailedplace__design__instance__count__stdcell": 21241,
|
|
||||||
"detailedplace__design__instance__displacement__max": 2.088,
|
|
||||||
"detailedplace__design__instance__displacement__mean": 0.215,
|
|
||||||
"detailedplace__design__instance__displacement__total": 4584.86,
|
|
||||||
"detailedplace__design__instance__utilization": 0.453622,
|
|
||||||
"detailedplace__design__instance__utilization__stdcell": 0.453622,
|
|
||||||
"detailedplace__design__io": 264,
|
|
||||||
"detailedplace__design__rows": 278,
|
|
||||||
"detailedplace__design__rows:asap7sc7p5t": 278,
|
|
||||||
"detailedplace__design__sites": 387810,
|
|
||||||
"detailedplace__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"detailedplace__design__violations": 0,
|
|
||||||
"detailedplace__flow__errors__count": 0,
|
|
||||||
"detailedplace__flow__warnings__count": 10,
|
|
||||||
"detailedplace__mem__peak": 860888.0,
|
|
||||||
"detailedplace__power__internal__total": 0.0186292,
|
|
||||||
"detailedplace__power__leakage__total": 1.96045e-06,
|
|
||||||
"detailedplace__power__switching__total": 0.0203954,
|
|
||||||
"detailedplace__power__total": 0.0390265,
|
|
||||||
"detailedplace__route__wirelength__estimated": 92018.4,
|
|
||||||
"detailedplace__runtime__total": "2:16.23",
|
|
||||||
"detailedplace__timing__drv__hold_violation_count": 0,
|
|
||||||
"detailedplace__timing__drv__max_cap": 0,
|
|
||||||
"detailedplace__timing__drv__max_cap_limit": 0.42514,
|
|
||||||
"detailedplace__timing__drv__max_fanout": 0,
|
|
||||||
"detailedplace__timing__drv__max_fanout_limit": 0,
|
|
||||||
"detailedplace__timing__drv__max_slew": 0,
|
|
||||||
"detailedplace__timing__drv__max_slew_limit": 0.0523232,
|
|
||||||
"detailedplace__timing__drv__setup_violation_count": 255,
|
|
||||||
"detailedplace__timing__setup__tns": -25892.2,
|
|
||||||
"detailedplace__timing__setup__ws": -168.407,
|
|
||||||
"detailedroute__antenna__violating__nets": 0,
|
|
||||||
"detailedroute__antenna__violating__pins": 0,
|
|
||||||
"detailedroute__antenna_diodes_count": 0,
|
|
||||||
"detailedroute__flow__errors__count": 0,
|
|
||||||
"detailedroute__flow__warnings__count": 11,
|
|
||||||
"detailedroute__route__drc_errors": 0,
|
|
||||||
"detailedroute__route__drc_errors__iter:0": 5192,
|
|
||||||
"detailedroute__route__drc_errors__iter:1": 553,
|
|
||||||
"detailedroute__route__drc_errors__iter:2": 372,
|
|
||||||
"detailedroute__route__drc_errors__iter:3": 7,
|
|
||||||
"detailedroute__route__drc_errors__iter:4": 0,
|
|
||||||
"detailedroute__route__net": 21209,
|
|
||||||
"detailedroute__route__net__special": 2,
|
|
||||||
"detailedroute__route__vias": 214163,
|
|
||||||
"detailedroute__route__vias__multicut": 0,
|
|
||||||
"detailedroute__route__vias__singlecut": 214163,
|
|
||||||
"detailedroute__route__wirelength": 115245,
|
|
||||||
"detailedroute__route__wirelength__iter:0": 116008,
|
|
||||||
"detailedroute__route__wirelength__iter:1": 115332,
|
|
||||||
"detailedroute__route__wirelength__iter:2": 115236,
|
|
||||||
"detailedroute__route__wirelength__iter:3": 115244,
|
|
||||||
"detailedroute__route__wirelength__iter:4": 115245,
|
|
||||||
"finish__clock__skew__hold": 137.921,
|
|
||||||
"finish__clock__skew__setup": 164.227,
|
|
||||||
"finish__cpu__total": 145.58,
|
|
||||||
"finish__design__core__area": 5654.27,
|
|
||||||
"finish__design__die__area": 6307.06,
|
|
||||||
"finish__design__instance__area": 2639.14,
|
|
||||||
"finish__design__instance__area__class:buffer": 234.067,
|
|
||||||
"finish__design__instance__area__class:clock_buffer": 52.765,
|
|
||||||
"finish__design__instance__area__class:clock_inverter": 9.27288,
|
|
||||||
"finish__design__instance__area__class:inverter": 81.4147,
|
|
||||||
"finish__design__instance__area__class:multi_input_combinational_cell": 1410.28,
|
|
||||||
"finish__design__instance__area__class:sequential_cell": 712.481,
|
|
||||||
"finish__design__instance__area__class:tie_cell": 72.7834,
|
|
||||||
"finish__design__instance__area__class:timing_repair_buffer": 37.4998,
|
|
||||||
"finish__design__instance__area__class:timing_repair_inverter": 0.11664,
|
|
||||||
"finish__design__instance__area__cover": 0,
|
|
||||||
"finish__design__instance__area__macros": 0,
|
|
||||||
"finish__design__instance__area__padcells": 0,
|
|
||||||
"finish__design__instance__area__stdcell": 2639.14,
|
|
||||||
"finish__design__instance__count": 21541,
|
|
||||||
"finish__design__instance__count__class:buffer": 1708,
|
|
||||||
"finish__design__instance__count__class:clock_buffer": 140,
|
|
||||||
"finish__design__instance__count__class:clock_inverter": 55,
|
|
||||||
"finish__design__instance__count__class:inverter": 1689,
|
|
||||||
"finish__design__instance__count__class:multi_input_combinational_cell": 12991,
|
|
||||||
"finish__design__instance__count__class:sequential_cell": 1932,
|
|
||||||
"finish__design__instance__count__class:tie_cell": 1664,
|
|
||||||
"finish__design__instance__count__class:timing_repair_buffer": 384,
|
|
||||||
"finish__design__instance__count__class:timing_repair_inverter": 2,
|
|
||||||
"finish__design__instance__count__cover": 0,
|
|
||||||
"finish__design__instance__count__macros": 0,
|
|
||||||
"finish__design__instance__count__padcells": 0,
|
|
||||||
"finish__design__instance__count__stdcell": 21541,
|
|
||||||
"finish__design__instance__utilization": 0.466752,
|
|
||||||
"finish__design__instance__utilization__stdcell": 0.466752,
|
|
||||||
"finish__design__io": 264,
|
|
||||||
"finish__design__rows": 278,
|
|
||||||
"finish__design__rows:asap7sc7p5t": 278,
|
|
||||||
"finish__design__sites": 387810,
|
|
||||||
"finish__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"finish__design_powergrid__drop__average__net:VDD__corner:default": 0.7501,
|
|
||||||
"finish__design_powergrid__drop__average__net:VSS__corner:default": 0.0194608,
|
|
||||||
"finish__design_powergrid__drop__worst__net:VDD__corner:default": 0.052146,
|
|
||||||
"finish__design_powergrid__drop__worst__net:VSS__corner:default": 0.0505833,
|
|
||||||
"finish__design_powergrid__voltage__worst__net:VDD__corner:default": 0.717854,
|
|
||||||
"finish__design_powergrid__voltage__worst__net:VSS__corner:default": 0.0505833,
|
|
||||||
"finish__flow__errors__count": 0,
|
|
||||||
"finish__flow__warnings__count": 10,
|
|
||||||
"finish__mem__peak": 875068.0,
|
|
||||||
"finish__power__internal__total": 0.0205475,
|
|
||||||
"finish__power__leakage__total": 2.03126e-06,
|
|
||||||
"finish__power__switching__total": 0.0227261,
|
|
||||||
"finish__power__total": 0.0432756,
|
|
||||||
"finish__runtime__total": "2:26.72",
|
|
||||||
"finish__timing__drv__hold_violation_count": 0,
|
|
||||||
"finish__timing__drv__max_cap": 0,
|
|
||||||
"finish__timing__drv__max_cap_limit": 0.356024,
|
|
||||||
"finish__timing__drv__max_fanout": 0,
|
|
||||||
"finish__timing__drv__max_fanout_limit": 0,
|
|
||||||
"finish__timing__drv__max_slew": 45,
|
|
||||||
"finish__timing__drv__max_slew_limit": -0.331023,
|
|
||||||
"finish__timing__drv__setup_violation_count": 100,
|
|
||||||
"finish__timing__setup__tns": -2214.04,
|
|
||||||
"finish__timing__setup__ws": -64.3049,
|
|
||||||
"finish__timing__wns_percent_delay": -5.996886,
|
|
||||||
"finish_merge__cpu__total": 4.61,
|
|
||||||
"finish_merge__mem__peak": 559880.0,
|
|
||||||
"finish_merge__runtime__total": "0:05.07",
|
|
||||||
"floorplan__cpu__total": 585.48,
|
|
||||||
"floorplan__design__core__area": 5654.27,
|
|
||||||
"floorplan__design__die__area": 6307.06,
|
|
||||||
"floorplan__design__instance__area": 2276.04,
|
|
||||||
"floorplan__design__instance__area__cover": 0,
|
|
||||||
"floorplan__design__instance__area__macros": 0,
|
|
||||||
"floorplan__design__instance__area__padcells": 0,
|
|
||||||
"floorplan__design__instance__area__stdcell": 2276.04,
|
|
||||||
"floorplan__design__instance__count": 18331,
|
|
||||||
"floorplan__design__instance__count__cover": 0,
|
|
||||||
"floorplan__design__instance__count__hold_buffer": 0,
|
|
||||||
"floorplan__design__instance__count__macros": 0,
|
|
||||||
"floorplan__design__instance__count__padcells": 0,
|
|
||||||
"floorplan__design__instance__count__setup_buffer": 3,
|
|
||||||
"floorplan__design__instance__count__stdcell": 18331,
|
|
||||||
"floorplan__design__instance__utilization": 0.402535,
|
|
||||||
"floorplan__design__instance__utilization__stdcell": 0.402535,
|
|
||||||
"floorplan__design__io": 264,
|
|
||||||
"floorplan__design__rows": 278,
|
|
||||||
"floorplan__design__rows:asap7sc7p5t": 278,
|
|
||||||
"floorplan__design__sites": 387810,
|
|
||||||
"floorplan__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"floorplan__flow__errors__count": 0,
|
|
||||||
"floorplan__flow__warnings__count": 484,
|
|
||||||
"floorplan__mem__peak": 3039120.0,
|
|
||||||
"floorplan__power__internal__total": 0.0178269,
|
|
||||||
"floorplan__power__leakage__total": 1.65498e-06,
|
|
||||||
"floorplan__power__switching__total": 0.0151741,
|
|
||||||
"floorplan__power__total": 0.0330026,
|
|
||||||
"floorplan__runtime__total": "9:47.66",
|
|
||||||
"floorplan__timing__setup__tns": 0,
|
|
||||||
"floorplan__timing__setup__ws": 0.170641,
|
|
||||||
"floorplan_io__cpu__total": 2.17,
|
|
||||||
"floorplan_io__mem__peak": 237568.0,
|
|
||||||
"floorplan_io__runtime__total": "0:02.36",
|
|
||||||
"floorplan_macro__cpu__total": 2.18,
|
|
||||||
"floorplan_macro__mem__peak": 237312.0,
|
|
||||||
"floorplan_macro__runtime__total": "0:02.39",
|
|
||||||
"floorplan_pdn__cpu__total": 2.51,
|
|
||||||
"floorplan_pdn__mem__peak": 241356.0,
|
|
||||||
"floorplan_pdn__runtime__total": "0:02.73",
|
|
||||||
"floorplan_tap__cpu__total": 2.07,
|
|
||||||
"floorplan_tap__mem__peak": 226816.0,
|
|
||||||
"floorplan_tap__runtime__total": "0:02.28",
|
|
||||||
"flow__errors__count": 0,
|
|
||||||
"flow__warnings__count": 10,
|
|
||||||
"globalplace__cpu__total": 1673.62,
|
|
||||||
"globalplace__design__core__area": 5654.27,
|
|
||||||
"globalplace__design__die__area": 6307.06,
|
|
||||||
"globalplace__design__instance__area": 2471.43,
|
|
||||||
"globalplace__design__instance__area__cover": 0,
|
|
||||||
"globalplace__design__instance__area__macros": 0,
|
|
||||||
"globalplace__design__instance__area__padcells": 0,
|
|
||||||
"globalplace__design__instance__area__stdcell": 2471.43,
|
|
||||||
"globalplace__design__instance__count": 19330,
|
|
||||||
"globalplace__design__instance__count__cover": 0,
|
|
||||||
"globalplace__design__instance__count__macros": 0,
|
|
||||||
"globalplace__design__instance__count__padcells": 0,
|
|
||||||
"globalplace__design__instance__count__stdcell": 19330,
|
|
||||||
"globalplace__design__instance__utilization": 0.43709,
|
|
||||||
"globalplace__design__instance__utilization__stdcell": 0.43709,
|
|
||||||
"globalplace__design__io": 264,
|
|
||||||
"globalplace__design__rows": 278,
|
|
||||||
"globalplace__design__rows:asap7sc7p5t": 278,
|
|
||||||
"globalplace__design__sites": 387810,
|
|
||||||
"globalplace__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"globalplace__flow__errors__count": 0,
|
|
||||||
"globalplace__flow__warnings__count": 10,
|
|
||||||
"globalplace__mem__peak": 3478984.0,
|
|
||||||
"globalplace__power__internal__total": 0.018272,
|
|
||||||
"globalplace__power__leakage__total": 1.94505e-06,
|
|
||||||
"globalplace__power__switching__total": 0.0201947,
|
|
||||||
"globalplace__power__total": 0.0384687,
|
|
||||||
"globalplace__runtime__total": "6:32.04",
|
|
||||||
"globalplace__timing__setup__tns": -25495.9,
|
|
||||||
"globalplace__timing__setup__ws": -166.769,
|
|
||||||
"globalplace_io__cpu__total": 2.18,
|
|
||||||
"globalplace_io__mem__peak": 240640.0,
|
|
||||||
"globalplace_io__runtime__total": "0:02.39",
|
|
||||||
"globalplace_skip_io__cpu__total": 981.75,
|
|
||||||
"globalplace_skip_io__mem__peak": 273736.0,
|
|
||||||
"globalplace_skip_io__runtime__total": "1:25.45",
|
|
||||||
"globalroute__antenna__violating__nets": 0,
|
|
||||||
"globalroute__antenna__violating__pins": 0,
|
|
||||||
"globalroute__antenna_diodes_count": 0,
|
|
||||||
"globalroute__clock__skew__hold": 133.021,
|
|
||||||
"globalroute__clock__skew__setup": 159.792,
|
|
||||||
"globalroute__cpu__total": 129.62,
|
|
||||||
"globalroute__design__core__area": 5654.27,
|
|
||||||
"globalroute__design__die__area": 6307.06,
|
|
||||||
"globalroute__design__instance__area": 2639.14,
|
|
||||||
"globalroute__design__instance__area__cover": 0,
|
|
||||||
"globalroute__design__instance__area__macros": 0,
|
|
||||||
"globalroute__design__instance__area__padcells": 0,
|
|
||||||
"globalroute__design__instance__area__stdcell": 2639.14,
|
|
||||||
"globalroute__design__instance__count": 21541,
|
|
||||||
"globalroute__design__instance__count__cover": 0,
|
|
||||||
"globalroute__design__instance__count__hold_buffer": 0,
|
|
||||||
"globalroute__design__instance__count__macros": 0,
|
|
||||||
"globalroute__design__instance__count__padcells": 0,
|
|
||||||
"globalroute__design__instance__count__setup_buffer": 15,
|
|
||||||
"globalroute__design__instance__count__stdcell": 21541,
|
|
||||||
"globalroute__design__instance__displacement__max": 0.648,
|
|
||||||
"globalroute__design__instance__displacement__mean": 0.001,
|
|
||||||
"globalroute__design__instance__displacement__total": 25.38,
|
|
||||||
"globalroute__design__instance__utilization": 0.466752,
|
|
||||||
"globalroute__design__instance__utilization__stdcell": 0.466752,
|
|
||||||
"globalroute__design__io": 264,
|
|
||||||
"globalroute__design__rows": 278,
|
|
||||||
"globalroute__design__rows:asap7sc7p5t": 278,
|
|
||||||
"globalroute__design__sites": 387810,
|
|
||||||
"globalroute__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"globalroute__design__violations": 0,
|
|
||||||
"globalroute__flow__errors__count": 0,
|
|
||||||
"globalroute__flow__warnings__count": 12,
|
|
||||||
"globalroute__mem__peak": 897216.0,
|
|
||||||
"globalroute__power__internal__total": 0.0204573,
|
|
||||||
"globalroute__power__leakage__total": 2.03126e-06,
|
|
||||||
"globalroute__power__switching__total": 0.0224408,
|
|
||||||
"globalroute__power__total": 0.0429002,
|
|
||||||
"globalroute__route__wirelength__estimated": 94576,
|
|
||||||
"globalroute__runtime__total": "1:44.99",
|
|
||||||
"globalroute__timing__clock__slack": -43.838,
|
|
||||||
"globalroute__timing__drv__hold_violation_count": 0,
|
|
||||||
"globalroute__timing__drv__max_cap": 0,
|
|
||||||
"globalroute__timing__drv__max_cap_limit": 0.419739,
|
|
||||||
"globalroute__timing__drv__max_fanout": 0,
|
|
||||||
"globalroute__timing__drv__max_fanout_limit": 0,
|
|
||||||
"globalroute__timing__drv__max_slew": 0,
|
|
||||||
"globalroute__timing__drv__max_slew_limit": 0.196596,
|
|
||||||
"globalroute__timing__drv__setup_violation_count": 36,
|
|
||||||
"globalroute__timing__setup__tns": -764.286,
|
|
||||||
"globalroute__timing__setup__ws": -43.8383,
|
|
||||||
"placeopt__cpu__total": 140.63,
|
|
||||||
"placeopt__design__core__area": 5654.27,
|
|
||||||
"placeopt__design__die__area": 6307.06,
|
|
||||||
"placeopt__design__instance__area": 2564.9,
|
|
||||||
"placeopt__design__instance__area__cover": 0,
|
|
||||||
"placeopt__design__instance__area__macros": 0,
|
|
||||||
"placeopt__design__instance__area__padcells": 0,
|
|
||||||
"placeopt__design__instance__area__stdcell": 2564.9,
|
|
||||||
"placeopt__design__instance__count": 21241,
|
|
||||||
"placeopt__design__instance__count__cover": 0,
|
|
||||||
"placeopt__design__instance__count__macros": 0,
|
|
||||||
"placeopt__design__instance__count__padcells": 0,
|
|
||||||
"placeopt__design__instance__count__stdcell": 21241,
|
|
||||||
"placeopt__design__instance__utilization": 0.453622,
|
|
||||||
"placeopt__design__instance__utilization__stdcell": 0.453622,
|
|
||||||
"placeopt__design__io": 264,
|
|
||||||
"placeopt__design__rows": 278,
|
|
||||||
"placeopt__design__rows:asap7sc7p5t": 278,
|
|
||||||
"placeopt__design__sites": 387810,
|
|
||||||
"placeopt__design__sites:asap7sc7p5t": 387810,
|
|
||||||
"placeopt__flow__errors__count": 0,
|
|
||||||
"placeopt__flow__warnings__count": 10,
|
|
||||||
"placeopt__mem__peak": 1233200.0,
|
|
||||||
"placeopt__power__internal__total": 0.0186429,
|
|
||||||
"placeopt__power__leakage__total": 1.96045e-06,
|
|
||||||
"placeopt__power__switching__total": 0.0203373,
|
|
||||||
"placeopt__power__total": 0.0389822,
|
|
||||||
"placeopt__runtime__total": "2:21.47",
|
|
||||||
"placeopt__timing__drv__floating__nets": 0,
|
|
||||||
"placeopt__timing__drv__floating__pins": 0,
|
|
||||||
"placeopt__timing__drv__hold_violation_count": 0,
|
|
||||||
"placeopt__timing__drv__max_cap": 0,
|
|
||||||
"placeopt__timing__drv__max_cap_limit": 0.427192,
|
|
||||||
"placeopt__timing__drv__max_fanout": 0,
|
|
||||||
"placeopt__timing__drv__max_fanout_limit": 0,
|
|
||||||
"placeopt__timing__drv__max_slew": 0,
|
|
||||||
"placeopt__timing__drv__max_slew_limit": 0.0543873,
|
|
||||||
"placeopt__timing__drv__setup_violation_count": 255,
|
|
||||||
"placeopt__timing__setup__tns": -25503.4,
|
|
||||||
"placeopt__timing__setup__ws": -166.534,
|
|
||||||
"run__flow__design": "ibex",
|
|
||||||
"run__flow__generate_date": "2025-01-28 11:14",
|
|
||||||
"run__flow__metrics_version": "Metrics_2.1.2",
|
|
||||||
"run__flow__openroad_commit": "N/A",
|
|
||||||
"run__flow__openroad_version": "6d69029d9813cb8f1c0e3c1dce919cead101a2c5",
|
|
||||||
"run__flow__platform": "asap7",
|
|
||||||
"run__flow__platform__capacitance_units": "1fF",
|
|
||||||
"run__flow__platform__current_units": "1mA",
|
|
||||||
"run__flow__platform__distance_units": "1um",
|
|
||||||
"run__flow__platform__power_units": "1pW",
|
|
||||||
"run__flow__platform__resistance_units": "1kohm",
|
|
||||||
"run__flow__platform__time_units": "1ps",
|
|
||||||
"run__flow__platform__voltage_units": "1v",
|
|
||||||
"run__flow__platform_commit": "6217504d39d7f0785e87380673de9e8264e1f955",
|
|
||||||
"run__flow__scripts_commit": "6217504d39d7f0785e87380673de9e8264e1f955",
|
|
||||||
"run__flow__uuid": "17dde336-608c-44d7-983e-7d37057dcfc3",
|
|
||||||
"run__flow__variant": "base",
|
|
||||||
"synth__cpu__total": 58.31,
|
|
||||||
"synth__design__instance__area__stdcell": 2275.12152,
|
|
||||||
"synth__design__instance__count__stdcell": 18332.0,
|
|
||||||
"synth__mem__peak": 194816.0,
|
|
||||||
"synth__runtime__total": "0:58.69",
|
|
||||||
"total_time": "0:29:21.790000"
|
|
||||||
}
|
|
||||||
|
|
@ -1,70 +0,0 @@
|
||||||
{
|
|
||||||
"synth__design__instance__area__stdcell": {
|
|
||||||
"value": 2616.39,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"constraints__clocks__count": {
|
|
||||||
"value": 1,
|
|
||||||
"compare": "=="
|
|
||||||
},
|
|
||||||
"placeopt__design__instance__area": {
|
|
||||||
"value": 2950,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"placeopt__design__instance__count__stdcell": {
|
|
||||||
"value": 24427,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"detailedplace__design__violations": {
|
|
||||||
"value": 0,
|
|
||||||
"compare": "=="
|
|
||||||
},
|
|
||||||
"cts__design__instance__count__setup_buffer": {
|
|
||||||
"value": 2124,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"cts__design__instance__count__hold_buffer": {
|
|
||||||
"value": 2124,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"globalroute__antenna_diodes_count": {
|
|
||||||
"value": 0,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"detailedroute__route__wirelength": {
|
|
||||||
"value": 132532,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"detailedroute__route__drc_errors": {
|
|
||||||
"value": 0,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"detailedroute__antenna__violating__nets": {
|
|
||||||
"value": 0,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"detailedroute__antenna_diodes_count": {
|
|
||||||
"value": 0,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"finish__timing__setup__ws": {
|
|
||||||
"value": -127.02,
|
|
||||||
"compare": ">="
|
|
||||||
},
|
|
||||||
"finish__design__instance__area": {
|
|
||||||
"value": 3035,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"finish__timing__drv__setup_violation_count": {
|
|
||||||
"value": 1062,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"finish__timing__drv__hold_violation_count": {
|
|
||||||
"value": 100,
|
|
||||||
"compare": "<="
|
|
||||||
},
|
|
||||||
"finish__timing__wns_percent_delay": {
|
|
||||||
"value": -17.16,
|
|
||||||
"compare": ">="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
filegroup(
|
|
||||||
name = "verilog",
|
|
||||||
srcs = glob(include = ["*.v"]),
|
|
||||||
visibility = ["//visibility:public"],
|
|
||||||
)
|
|
||||||
|
|
@ -1,755 +0,0 @@
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnit
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Originally Generated from PyMTL with a few modifications to make it more
|
|
||||||
// friendly to OpenROAD tools
|
|
||||||
|
|
||||||
//module GcdUnit
|
|
||||||
module gcd
|
|
||||||
(
|
|
||||||
input wire clk,
|
|
||||||
input wire [ 31:0] req_msg,
|
|
||||||
output wire req_rdy,
|
|
||||||
input wire req_val,
|
|
||||||
input wire reset,
|
|
||||||
output wire [ 15:0] resp_msg,
|
|
||||||
input wire resp_rdy,
|
|
||||||
output wire resp_val
|
|
||||||
);
|
|
||||||
|
|
||||||
// ctrl temporaries
|
|
||||||
wire [ 0:0] ctrl$is_b_zero;
|
|
||||||
wire [ 0:0] ctrl$resp_rdy;
|
|
||||||
wire [ 0:0] ctrl$clk;
|
|
||||||
wire [ 0:0] ctrl$is_a_lt_b;
|
|
||||||
wire [ 0:0] ctrl$req_val;
|
|
||||||
wire [ 0:0] ctrl$reset;
|
|
||||||
wire [ 1:0] ctrl$a_mux_sel;
|
|
||||||
wire [ 0:0] ctrl$resp_val;
|
|
||||||
wire [ 0:0] ctrl$b_mux_sel;
|
|
||||||
wire [ 0:0] ctrl$b_reg_en;
|
|
||||||
wire [ 0:0] ctrl$a_reg_en;
|
|
||||||
wire [ 0:0] ctrl$req_rdy;
|
|
||||||
|
|
||||||
GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e ctrl
|
|
||||||
(
|
|
||||||
.is_b_zero ( ctrl$is_b_zero ),
|
|
||||||
.resp_rdy ( ctrl$resp_rdy ),
|
|
||||||
.clk ( ctrl$clk ),
|
|
||||||
.is_a_lt_b ( ctrl$is_a_lt_b ),
|
|
||||||
.req_val ( ctrl$req_val ),
|
|
||||||
.reset ( ctrl$reset ),
|
|
||||||
.a_mux_sel ( ctrl$a_mux_sel ),
|
|
||||||
.resp_val ( ctrl$resp_val ),
|
|
||||||
.b_mux_sel ( ctrl$b_mux_sel ),
|
|
||||||
.b_reg_en ( ctrl$b_reg_en ),
|
|
||||||
.a_reg_en ( ctrl$a_reg_en ),
|
|
||||||
.req_rdy ( ctrl$req_rdy )
|
|
||||||
);
|
|
||||||
|
|
||||||
// dpath temporaries
|
|
||||||
wire [ 1:0] dpath$a_mux_sel;
|
|
||||||
wire [ 0:0] dpath$clk;
|
|
||||||
wire [ 15:0] dpath$req_msg_b;
|
|
||||||
wire [ 15:0] dpath$req_msg_a;
|
|
||||||
wire [ 0:0] dpath$b_mux_sel;
|
|
||||||
wire [ 0:0] dpath$reset;
|
|
||||||
wire [ 0:0] dpath$b_reg_en;
|
|
||||||
wire [ 0:0] dpath$a_reg_en;
|
|
||||||
wire [ 0:0] dpath$is_b_zero;
|
|
||||||
wire [ 15:0] dpath$resp_msg;
|
|
||||||
wire [ 0:0] dpath$is_a_lt_b;
|
|
||||||
|
|
||||||
GcdUnitDpathRTL_0x4d0fc71ead8d3d9e dpath
|
|
||||||
(
|
|
||||||
.a_mux_sel ( dpath$a_mux_sel ),
|
|
||||||
.clk ( dpath$clk ),
|
|
||||||
.req_msg_b ( dpath$req_msg_b ),
|
|
||||||
.req_msg_a ( dpath$req_msg_a ),
|
|
||||||
.b_mux_sel ( dpath$b_mux_sel ),
|
|
||||||
.reset ( dpath$reset ),
|
|
||||||
.b_reg_en ( dpath$b_reg_en ),
|
|
||||||
.a_reg_en ( dpath$a_reg_en ),
|
|
||||||
.is_b_zero ( dpath$is_b_zero ),
|
|
||||||
.resp_msg ( dpath$resp_msg ),
|
|
||||||
.is_a_lt_b ( dpath$is_a_lt_b )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign ctrl$clk = clk;
|
|
||||||
assign ctrl$is_a_lt_b = dpath$is_a_lt_b;
|
|
||||||
assign ctrl$is_b_zero = dpath$is_b_zero;
|
|
||||||
assign ctrl$req_val = req_val;
|
|
||||||
assign ctrl$reset = reset;
|
|
||||||
assign ctrl$resp_rdy = resp_rdy;
|
|
||||||
assign dpath$a_mux_sel = ctrl$a_mux_sel;
|
|
||||||
assign dpath$a_reg_en = ctrl$a_reg_en;
|
|
||||||
assign dpath$b_mux_sel = ctrl$b_mux_sel;
|
|
||||||
assign dpath$b_reg_en = ctrl$b_reg_en;
|
|
||||||
assign dpath$clk = clk;
|
|
||||||
assign dpath$req_msg_a = req_msg[31:16];
|
|
||||||
assign dpath$req_msg_b = req_msg[15:0];
|
|
||||||
assign dpath$reset = reset;
|
|
||||||
assign req_rdy = ctrl$req_rdy;
|
|
||||||
assign resp_msg = dpath$resp_msg;
|
|
||||||
assign resp_val = ctrl$resp_val;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnit
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
module GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
(
|
|
||||||
output reg [ 1:0] a_mux_sel,
|
|
||||||
output reg [ 0:0] a_reg_en,
|
|
||||||
output reg [ 0:0] b_mux_sel,
|
|
||||||
output reg [ 0:0] b_reg_en,
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 0:0] is_a_lt_b,
|
|
||||||
input wire [ 0:0] is_b_zero,
|
|
||||||
output reg [ 0:0] req_rdy,
|
|
||||||
input wire [ 0:0] req_val,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 0:0] resp_rdy,
|
|
||||||
output reg [ 0:0] resp_val
|
|
||||||
);
|
|
||||||
|
|
||||||
// register declarations
|
|
||||||
reg [ 1:0] curr_state__0;
|
|
||||||
reg [ 1:0] current_state__1;
|
|
||||||
reg [ 0:0] do_sub;
|
|
||||||
reg [ 0:0] do_swap;
|
|
||||||
reg [ 1:0] next_state__0;
|
|
||||||
reg [ 1:0] state$in_;
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam A_MUX_SEL_B = 2;
|
|
||||||
localparam A_MUX_SEL_IN = 0;
|
|
||||||
localparam A_MUX_SEL_SUB = 1;
|
|
||||||
localparam A_MUX_SEL_X = 0;
|
|
||||||
localparam B_MUX_SEL_A = 0;
|
|
||||||
localparam B_MUX_SEL_IN = 1;
|
|
||||||
localparam B_MUX_SEL_X = 0;
|
|
||||||
localparam STATE_CALC = 1;
|
|
||||||
localparam STATE_DONE = 2;
|
|
||||||
localparam STATE_IDLE = 0;
|
|
||||||
|
|
||||||
// state temporaries
|
|
||||||
wire [ 0:0] state$reset;
|
|
||||||
wire [ 0:0] state$clk;
|
|
||||||
wire [ 1:0] state$out;
|
|
||||||
|
|
||||||
RegRst_0x9f365fdf6c8998a state
|
|
||||||
(
|
|
||||||
.reset ( state$reset ),
|
|
||||||
.in_ ( state$in_ ),
|
|
||||||
.clk ( state$clk ),
|
|
||||||
.out ( state$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign state$clk = clk;
|
|
||||||
assign state$reset = reset;
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def state_transitions():
|
|
||||||
//
|
|
||||||
// curr_state = s.state.out
|
|
||||||
// next_state = s.state.out
|
|
||||||
//
|
|
||||||
// # Transistions out of IDLE state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_IDLE ):
|
|
||||||
// if ( s.req_val and s.req_rdy ):
|
|
||||||
// next_state = s.STATE_CALC
|
|
||||||
//
|
|
||||||
// # Transistions out of CALC state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_CALC ):
|
|
||||||
// if ( not s.is_a_lt_b and s.is_b_zero ):
|
|
||||||
// next_state = s.STATE_DONE
|
|
||||||
//
|
|
||||||
// # Transistions out of DONE state
|
|
||||||
//
|
|
||||||
// if ( curr_state == s.STATE_DONE ):
|
|
||||||
// if ( s.resp_val and s.resp_rdy ):
|
|
||||||
// next_state = s.STATE_IDLE
|
|
||||||
//
|
|
||||||
// s.state.in_.value = next_state
|
|
||||||
|
|
||||||
// logic for state_transitions()
|
|
||||||
always @ (*) begin
|
|
||||||
curr_state__0 = state$out;
|
|
||||||
next_state__0 = state$out;
|
|
||||||
if ((curr_state__0 == STATE_IDLE)) begin
|
|
||||||
if ((req_val&&req_rdy)) begin
|
|
||||||
next_state__0 = STATE_CALC;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
if ((curr_state__0 == STATE_CALC)) begin
|
|
||||||
if ((!is_a_lt_b&&is_b_zero)) begin
|
|
||||||
next_state__0 = STATE_DONE;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
if ((curr_state__0 == STATE_DONE)) begin
|
|
||||||
if ((resp_val&&resp_rdy)) begin
|
|
||||||
next_state__0 = STATE_IDLE;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
state$in_ = next_state__0;
|
|
||||||
end
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def state_outputs():
|
|
||||||
//
|
|
||||||
// current_state = s.state.out
|
|
||||||
//
|
|
||||||
// # In IDLE state we simply wait for inputs to arrive and latch them
|
|
||||||
//
|
|
||||||
// if current_state == s.STATE_IDLE:
|
|
||||||
// s.req_rdy.value = 1
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_IN
|
|
||||||
// s.a_reg_en.value = 1
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_IN
|
|
||||||
// s.b_reg_en.value = 1
|
|
||||||
//
|
|
||||||
// # In CALC state we iteratively swap/sub to calculate GCD
|
|
||||||
//
|
|
||||||
// elif current_state == s.STATE_CALC:
|
|
||||||
//
|
|
||||||
// s.do_swap.value = s.is_a_lt_b
|
|
||||||
// s.do_sub.value = ~s.is_b_zero
|
|
||||||
//
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_B if s.do_swap else A_MUX_SEL_SUB
|
|
||||||
// s.a_reg_en.value = 1
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_A
|
|
||||||
// s.b_reg_en.value = s.do_swap
|
|
||||||
//
|
|
||||||
// # In DONE state we simply wait for output transaction to occur
|
|
||||||
//
|
|
||||||
// elif current_state == s.STATE_DONE:
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 1
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_X
|
|
||||||
// s.a_reg_en.value = 0
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_X
|
|
||||||
// s.b_reg_en.value = 0
|
|
||||||
//
|
|
||||||
// # Default case that we should not hit
|
|
||||||
//
|
|
||||||
// else:
|
|
||||||
// s.req_rdy.value = 0
|
|
||||||
// s.resp_val.value = 0
|
|
||||||
// s.a_mux_sel.value = A_MUX_SEL_X
|
|
||||||
// s.a_reg_en.value = 0
|
|
||||||
// s.b_mux_sel.value = B_MUX_SEL_X
|
|
||||||
// s.b_reg_en.value = 0
|
|
||||||
|
|
||||||
// logic for state_outputs()
|
|
||||||
always @ (*) begin
|
|
||||||
current_state__1 = state$out;
|
|
||||||
if ((current_state__1 == STATE_IDLE)) begin
|
|
||||||
req_rdy = 1;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = A_MUX_SEL_IN;
|
|
||||||
a_reg_en = 1;
|
|
||||||
b_mux_sel = B_MUX_SEL_IN;
|
|
||||||
b_reg_en = 1;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
if ((current_state__1 == STATE_CALC)) begin
|
|
||||||
do_swap = is_a_lt_b;
|
|
||||||
do_sub = ~is_b_zero;
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = do_swap ? A_MUX_SEL_B : A_MUX_SEL_SUB;
|
|
||||||
a_reg_en = 1;
|
|
||||||
b_mux_sel = B_MUX_SEL_A;
|
|
||||||
b_reg_en = do_swap;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
if ((current_state__1 == STATE_DONE)) begin
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 1;
|
|
||||||
a_mux_sel = A_MUX_SEL_X;
|
|
||||||
a_reg_en = 0;
|
|
||||||
b_mux_sel = B_MUX_SEL_X;
|
|
||||||
b_reg_en = 0;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
req_rdy = 0;
|
|
||||||
resp_val = 0;
|
|
||||||
a_mux_sel = A_MUX_SEL_X;
|
|
||||||
a_reg_en = 0;
|
|
||||||
b_mux_sel = B_MUX_SEL_X;
|
|
||||||
b_reg_en = 0;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnitCtrlRTL_0x4d0fc71ead8d3d9e
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// RegRst_0x9f365fdf6c8998a
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 2
|
|
||||||
// reset_value: 0
|
|
||||||
|
|
||||||
|
|
||||||
module RegRst_0x9f365fdf6c8998a
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 1:0] in_,
|
|
||||||
output reg [ 1:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam reset_value = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.posedge_clk
|
|
||||||
// def seq_logic():
|
|
||||||
// if s.reset:
|
|
||||||
// s.out.next = reset_value
|
|
||||||
// else:
|
|
||||||
// s.out.next = s.in_
|
|
||||||
|
|
||||||
// logic for seq_logic()
|
|
||||||
always @ (posedge clk) begin
|
|
||||||
if (reset) begin
|
|
||||||
out <= reset_value;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
out <= in_;
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // RegRst_0x9f365fdf6c8998a
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
module GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
(
|
|
||||||
input wire [ 1:0] a_mux_sel,
|
|
||||||
input wire [ 0:0] a_reg_en,
|
|
||||||
input wire [ 0:0] b_mux_sel,
|
|
||||||
input wire [ 0:0] b_reg_en,
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
output wire [ 0:0] is_a_lt_b,
|
|
||||||
output wire [ 0:0] is_b_zero,
|
|
||||||
input wire [ 15:0] req_msg_a,
|
|
||||||
input wire [ 15:0] req_msg_b,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
output wire [ 15:0] resp_msg
|
|
||||||
);
|
|
||||||
|
|
||||||
// wire declarations
|
|
||||||
wire [ 15:0] sub_out;
|
|
||||||
wire [ 15:0] b_reg_out;
|
|
||||||
|
|
||||||
|
|
||||||
// a_reg temporaries
|
|
||||||
wire [ 0:0] a_reg$reset;
|
|
||||||
wire [ 15:0] a_reg$in_;
|
|
||||||
wire [ 0:0] a_reg$clk;
|
|
||||||
wire [ 0:0] a_reg$en;
|
|
||||||
wire [ 15:0] a_reg$out;
|
|
||||||
|
|
||||||
RegEn_0x68db79c4ec1d6e5b a_reg
|
|
||||||
(
|
|
||||||
.reset ( a_reg$reset ),
|
|
||||||
.in_ ( a_reg$in_ ),
|
|
||||||
.clk ( a_reg$clk ),
|
|
||||||
.en ( a_reg$en ),
|
|
||||||
.out ( a_reg$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// a_lt_b temporaries
|
|
||||||
wire [ 0:0] a_lt_b$reset;
|
|
||||||
wire [ 0:0] a_lt_b$clk;
|
|
||||||
wire [ 15:0] a_lt_b$in0;
|
|
||||||
wire [ 15:0] a_lt_b$in1;
|
|
||||||
wire [ 0:0] a_lt_b$out;
|
|
||||||
|
|
||||||
LtComparator_0x422b1f52edd46a85 a_lt_b
|
|
||||||
(
|
|
||||||
.reset ( a_lt_b$reset ),
|
|
||||||
.clk ( a_lt_b$clk ),
|
|
||||||
.in0 ( a_lt_b$in0 ),
|
|
||||||
.in1 ( a_lt_b$in1 ),
|
|
||||||
.out ( a_lt_b$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_zero temporaries
|
|
||||||
wire [ 0:0] b_zero$reset;
|
|
||||||
wire [ 15:0] b_zero$in_;
|
|
||||||
wire [ 0:0] b_zero$clk;
|
|
||||||
wire [ 0:0] b_zero$out;
|
|
||||||
|
|
||||||
ZeroComparator_0x422b1f52edd46a85 b_zero
|
|
||||||
(
|
|
||||||
.reset ( b_zero$reset ),
|
|
||||||
.in_ ( b_zero$in_ ),
|
|
||||||
.clk ( b_zero$clk ),
|
|
||||||
.out ( b_zero$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// a_mux temporaries
|
|
||||||
wire [ 0:0] a_mux$reset;
|
|
||||||
wire [ 15:0] a_mux$in_$000;
|
|
||||||
wire [ 15:0] a_mux$in_$001;
|
|
||||||
wire [ 15:0] a_mux$in_$002;
|
|
||||||
wire [ 0:0] a_mux$clk;
|
|
||||||
wire [ 1:0] a_mux$sel;
|
|
||||||
wire [ 15:0] a_mux$out;
|
|
||||||
|
|
||||||
Mux_0x683fa1a418b072c9 a_mux
|
|
||||||
(
|
|
||||||
.reset ( a_mux$reset ),
|
|
||||||
.in_$000 ( a_mux$in_$000 ),
|
|
||||||
.in_$001 ( a_mux$in_$001 ),
|
|
||||||
.in_$002 ( a_mux$in_$002 ),
|
|
||||||
.clk ( a_mux$clk ),
|
|
||||||
.sel ( a_mux$sel ),
|
|
||||||
.out ( a_mux$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_mux temporaries
|
|
||||||
wire [ 0:0] b_mux$reset;
|
|
||||||
wire [ 15:0] b_mux$in_$000;
|
|
||||||
wire [ 15:0] b_mux$in_$001;
|
|
||||||
wire [ 0:0] b_mux$clk;
|
|
||||||
wire [ 0:0] b_mux$sel;
|
|
||||||
wire [ 15:0] b_mux$out;
|
|
||||||
|
|
||||||
Mux_0xdd6473406d1a99a b_mux
|
|
||||||
(
|
|
||||||
.reset ( b_mux$reset ),
|
|
||||||
.in_$000 ( b_mux$in_$000 ),
|
|
||||||
.in_$001 ( b_mux$in_$001 ),
|
|
||||||
.clk ( b_mux$clk ),
|
|
||||||
.sel ( b_mux$sel ),
|
|
||||||
.out ( b_mux$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// sub temporaries
|
|
||||||
wire [ 0:0] sub$reset;
|
|
||||||
wire [ 0:0] sub$clk;
|
|
||||||
wire [ 15:0] sub$in0;
|
|
||||||
wire [ 15:0] sub$in1;
|
|
||||||
wire [ 15:0] sub$out;
|
|
||||||
|
|
||||||
Subtractor_0x422b1f52edd46a85 sub
|
|
||||||
(
|
|
||||||
.reset ( sub$reset ),
|
|
||||||
.clk ( sub$clk ),
|
|
||||||
.in0 ( sub$in0 ),
|
|
||||||
.in1 ( sub$in1 ),
|
|
||||||
.out ( sub$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// b_reg temporaries
|
|
||||||
wire [ 0:0] b_reg$reset;
|
|
||||||
wire [ 15:0] b_reg$in_;
|
|
||||||
wire [ 0:0] b_reg$clk;
|
|
||||||
wire [ 0:0] b_reg$en;
|
|
||||||
wire [ 15:0] b_reg$out;
|
|
||||||
|
|
||||||
RegEn_0x68db79c4ec1d6e5b b_reg
|
|
||||||
(
|
|
||||||
.reset ( b_reg$reset ),
|
|
||||||
.in_ ( b_reg$in_ ),
|
|
||||||
.clk ( b_reg$clk ),
|
|
||||||
.en ( b_reg$en ),
|
|
||||||
.out ( b_reg$out )
|
|
||||||
);
|
|
||||||
|
|
||||||
// signal connections
|
|
||||||
assign a_lt_b$clk = clk;
|
|
||||||
assign a_lt_b$in0 = a_reg$out;
|
|
||||||
assign a_lt_b$in1 = b_reg$out;
|
|
||||||
assign a_lt_b$reset = reset;
|
|
||||||
assign a_mux$clk = clk;
|
|
||||||
assign a_mux$in_$000 = req_msg_a;
|
|
||||||
assign a_mux$in_$001 = sub_out;
|
|
||||||
assign a_mux$in_$002 = b_reg_out;
|
|
||||||
assign a_mux$reset = reset;
|
|
||||||
assign a_mux$sel = a_mux_sel;
|
|
||||||
assign a_reg$clk = clk;
|
|
||||||
assign a_reg$en = a_reg_en;
|
|
||||||
assign a_reg$in_ = a_mux$out;
|
|
||||||
assign a_reg$reset = reset;
|
|
||||||
assign b_mux$clk = clk;
|
|
||||||
assign b_mux$in_$000 = a_reg$out;
|
|
||||||
assign b_mux$in_$001 = req_msg_b;
|
|
||||||
assign b_mux$reset = reset;
|
|
||||||
assign b_mux$sel = b_mux_sel;
|
|
||||||
assign b_reg$clk = clk;
|
|
||||||
assign b_reg$en = b_reg_en;
|
|
||||||
assign b_reg$in_ = b_mux$out;
|
|
||||||
assign b_reg$reset = reset;
|
|
||||||
assign b_reg_out = b_reg$out;
|
|
||||||
assign b_zero$clk = clk;
|
|
||||||
assign b_zero$in_ = b_reg$out;
|
|
||||||
assign b_zero$reset = reset;
|
|
||||||
assign is_a_lt_b = a_lt_b$out;
|
|
||||||
assign is_b_zero = b_zero$out;
|
|
||||||
assign resp_msg = sub$out;
|
|
||||||
assign sub$clk = clk;
|
|
||||||
assign sub$in0 = a_reg$out;
|
|
||||||
assign sub$in1 = b_reg$out;
|
|
||||||
assign sub$reset = reset;
|
|
||||||
assign sub_out = sub$out;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // GcdUnitDpathRTL_0x4d0fc71ead8d3d9e
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// RegEn_0x68db79c4ec1d6e5b
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
|
|
||||||
|
|
||||||
module RegEn_0x68db79c4ec1d6e5b
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 0:0] en,
|
|
||||||
input wire [ 15:0] in_,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.posedge_clk
|
|
||||||
// def seq_logic():
|
|
||||||
// if s.en:
|
|
||||||
// s.out.next = s.in_
|
|
||||||
|
|
||||||
// logic for seq_logic()
|
|
||||||
always @ (posedge clk) begin
|
|
||||||
if (en) begin
|
|
||||||
out <= in_;
|
|
||||||
end
|
|
||||||
else begin
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // RegEn_0x68db79c4ec1d6e5b
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// LtComparator_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module LtComparator_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in0,
|
|
||||||
input wire [ 15:0] in1,
|
|
||||||
output reg [ 0:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in0 < s.in1
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in0 < in1);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // LtComparator_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// ZeroComparator_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module ZeroComparator_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_,
|
|
||||||
output reg [ 0:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in_ == 0
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in_ == 0);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // ZeroComparator_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Mux_0x683fa1a418b072c9
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
// nports: 3
|
|
||||||
|
|
||||||
|
|
||||||
module Mux_0x683fa1a418b072c9
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_$000,
|
|
||||||
input wire [ 15:0] in_$001,
|
|
||||||
input wire [ 15:0] in_$002,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 1:0] sel
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam nports = 3;
|
|
||||||
|
|
||||||
|
|
||||||
// array declarations
|
|
||||||
wire [ 15:0] in_[0:2];
|
|
||||||
assign in_[ 0] = in_$000;
|
|
||||||
assign in_[ 1] = in_$001;
|
|
||||||
assign in_[ 2] = in_$002;
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// assert s.sel < nports
|
|
||||||
// s.out.v = s.in_[ s.sel ]
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = in_[sel];
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Mux_0x683fa1a418b072c9
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Mux_0xdd6473406d1a99a
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// dtype: 16
|
|
||||||
// nports: 2
|
|
||||||
|
|
||||||
|
|
||||||
module Mux_0xdd6473406d1a99a
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in_$000,
|
|
||||||
input wire [ 15:0] in_$001,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset,
|
|
||||||
input wire [ 0:0] sel
|
|
||||||
);
|
|
||||||
|
|
||||||
// localparam declarations
|
|
||||||
localparam nports = 2;
|
|
||||||
|
|
||||||
|
|
||||||
// array declarations
|
|
||||||
wire [ 15:0] in_[0:1];
|
|
||||||
assign in_[ 0] = in_$000;
|
|
||||||
assign in_[ 1] = in_$001;
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// assert s.sel < nports
|
|
||||||
// s.out.v = s.in_[ s.sel ]
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = in_[sel];
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Mux_0xdd6473406d1a99a
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// Subtractor_0x422b1f52edd46a85
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
// nbits: 16
|
|
||||||
|
|
||||||
|
|
||||||
module Subtractor_0x422b1f52edd46a85
|
|
||||||
(
|
|
||||||
input wire [ 0:0] clk,
|
|
||||||
input wire [ 15:0] in0,
|
|
||||||
input wire [ 15:0] in1,
|
|
||||||
output reg [ 15:0] out,
|
|
||||||
input wire [ 0:0] reset
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// PYMTL SOURCE:
|
|
||||||
//
|
|
||||||
// @s.combinational
|
|
||||||
// def comb_logic():
|
|
||||||
// s.out.value = s.in0 - s.in1
|
|
||||||
|
|
||||||
// logic for comb_logic()
|
|
||||||
always @ (*) begin
|
|
||||||
out = (in0-in1);
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
endmodule // Subtractor_0x422b1f52edd46a85
|
|
||||||
|
|
||||||
|
|
@ -1,14 +0,0 @@
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_AO_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_INVBUF_RVT_FF_nldm_220122.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_OA_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_SIMPLE_RVT_FF_nldm_211120.lib.gz
|
|
||||||
read_liberty $::env(LIB_DIR)/asap7sc7p5t_SEQ_RVT_FF_nldm_220123.lib
|
|
||||||
|
|
||||||
read_verilog 1_synth.v
|
|
||||||
link_design gcd
|
|
||||||
|
|
||||||
read_sdc 1_synth.sdc
|
|
||||||
|
|
||||||
read_saif -scope gcd simx.saif
|
|
||||||
report_power
|
|
||||||
exit
|
|
||||||
Loading…
Reference in New Issue