[#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