aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md20
-rw-r--r--scripts/vivado/tabtest.sh14
-rw-r--r--scripts/vivado/tabtest.v4
3 files changed, 26 insertions, 12 deletions
diff --git a/README.md b/README.md
index 2b7d5b2..af9bcf7 100644
--- a/README.md
+++ b/README.md
@@ -533,7 +533,7 @@ The following evaluations have been performed with Vivado 2015.1.
#### Timing on Xilinx 7-Series FPGAs
-The `picorv32_axi` module in its default configuration has been placed and
+The `picorv32_axi` module with enabled `TWO_CYCLE_COMPARE` has been placed and
routed for Xilinx Artix-7T (xc7a15t-fgg484), Xilinx Kintex-7T (xc7k70t-fbg676),
and Xilinx Virtex-7T (xc7v585t-ffg1761) devices in all speed grades. A binary
search is used to find the lowest clock period for which the design meets
@@ -543,15 +543,15 @@ See `make table.txt` in [scripts/vivado/](scripts/vivado/).
| Device | Speedgrade | Clock Period (Freq.) |
|:-------------------- |:----------:| --------------------:|
-| Xilinx Artix-7T | -1 | 4.8 ns (208 MHz) |
-| Xilinx Artix-7T | -2 | 3.9 ns (256 MHz) |
+| Xilinx Artix-7T | -1 | 4.6 ns (217 MHz) |
+| Xilinx Artix-7T | -2 | 4.0 ns (250 MHz) |
| Xilinx Artix-7T | -3 | 3.4 ns (294 MHz) |
-| Xilinx Kintex-7T | -1 | 3.2 ns (312 MHz) |
-| Xilinx Kintex-7T | -2 | 2.5 ns (400 MHz) |
-| Xilinx Kintex-7T | -3 | 2.6 ns (384 MHz) |
+| Xilinx Kintex-7T | -1 | 3.0 ns (333 MHz) |
+| Xilinx Kintex-7T | -2 | 2.7 ns (370 MHz) |
+| Xilinx Kintex-7T | -3 | 2.5 ns (400 MHz) |
| Xilinx Virtex-7T | -1 | 3.0 ns (333 MHz) |
-| Xilinx Virtex-7T | -2 | 2.7 ns (370 MHz) |
-| Xilinx Virtex-7T | -3 | 2.3 ns (434 MHz) |
+| Xilinx Virtex-7T | -2 | 2.5 ns (400 MHz) |
+| Xilinx Virtex-7T | -3 | 2.2 ns (454 MHz) |
#### Utilization on Xilinx 7-Series FPGAs
@@ -572,6 +572,6 @@ See `make area` in [scripts/vivado/](scripts/vivado/).
| Core Variant | Slice LUTs | LUTs as Memory | Slice Registers |
|:------------------ | ----------:| --------------:| ---------------:|
| PicoRV32 (small) | 775 | 48 | 422 |
-| PicoRV32 (regular) | 963 | 48 | 564 |
-| PicoRV32 (large) | 1800 | 88 | 1002 |
+| PicoRV32 (regular) | 960 | 48 | 564 |
+| PicoRV32 (large) | 1684 | 88 | 1002 |
diff --git a/scripts/vivado/tabtest.sh b/scripts/vivado/tabtest.sh
index f9e03ed..b481014 100644
--- a/scripts/vivado/tabtest.sh
+++ b/scripts/vivado/tabtest.sh
@@ -51,13 +51,16 @@ synth_case() {
mv test_${1}.log test_${1}.txt
}
-while [ $step -gt 0 ]; do
+countdown=2
+while [ $countdown -gt 0 ]; do
synth_case $speed
if grep -q '^Slack.*(VIOLATED)' test_${speed}.txt; then
+ echo " tab_${ip}_${dev}_${grade}/test_${speed} VIOLATED"
[ $speed -eq 38 ] || step=$((step / 2))
speed=$((speed + step))
elif grep -q '^Slack.*(MET)' test_${speed}.txt; then
+ echo " tab_${ip}_${dev}_${grade}/test_${speed} MET"
[ $speed -lt $best_speed ] && best_speed=$speed
step=$((step / 2))
speed=$((speed - step))
@@ -65,7 +68,16 @@ while [ $step -gt 0 ]; do
echo "ERROR: No slack line found in $PWD/test_${speed}.txt!"
exit 1
fi
+
+ if [ $step -eq 0 ]; then
+ countdown=$((countdown - 1))
+ speed=$((best_speed - 2))
+ step=1
+ fi
done
+echo "-----------------------"
+echo "Best speed for tab_${ip}_${dev}_${grade}: $best_speed"
+echo "-----------------------"
echo $best_speed > results.txt
diff --git a/scripts/vivado/tabtest.v b/scripts/vivado/tabtest.v
index 3a7677f..de75b11 100644
--- a/scripts/vivado/tabtest.v
+++ b/scripts/vivado/tabtest.v
@@ -72,7 +72,9 @@ module top (
delay4 #(32) delay_irq (clk, io_irq , irq );
delay4 #(32) delay_eoi (clk, eoi , io_eoi );
- picorv32_axi core (
+ picorv32_axi #(
+ .TWO_CYCLE_COMPARE(1)
+ ) cpu (
.clk (clk ),
.resetn (resetn ),
.trap (trap ),