Skip to content

Commit 75fc84d

Browse files
committed
VPR 4.22 Release
Released: 1999-02-17 Downloaded from: http://www.eecg.utoronto.ca/~vaughn/vpr/downloadfiles/vpr422.tar.Z
1 parent 3c1fc56 commit 75fc84d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+17085
-4990
lines changed

README

Lines changed: 0 additions & 142 deletions
This file was deleted.

README.422

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
This archive contains VPR, an FPGA placement and routing tool, and VPack,
2+
a program to pack LUTs and flip flops into coarser grained logic blocks and
3+
convert a netlist from blif format to VPR's .net format. There is a detailed
4+
postscript manual covering everything from how to compile the programs
5+
to how to use them in manual422.ps
6+
7+
To see VPR in action on the (small) sample circuit (e64 from the MCNC
8+
benchmark suite) and the sample FPGA architecture files type:
9+
10+
cd vpr (if not already there)
11+
vpr e64-4x4lut.net 4x4lut_sanitized.arch e64.p e64.r -route_chan_width 40 -inner_num 3
12+
13+
The logic block for this architecture contains 4, 4-input look-up tables and
14+
4 flip flops along with local routing (a cluster-based logic block of size
15+
4). The routing wire segments all span 4 logic blocks in this architecture.
16+
17+
18+
I've also included a simpler architecture in which a logic block is only a
19+
4 LUT plus a flip flop, and in which all routing wires span only one logic
20+
block. To run this case, try:
21+
22+
cd vpr (if not already there)
23+
vpr e64-4lut.net 4lut_sanitized.arch e64.p e64.r -route_chan_width 10 -inner_num 3
24+
25+
26+
The two netlists (e64-4x4lut.net and e64-4lut.net) were created using VPack
27+
on a technology-mapped netlist in .blif format, with the appropriate options
28+
in each case:
29+
30+
cd vpack (if not already there)
31+
vpack e64.blif e64-4x4lut.net -cluster_size 4 -inputs_per_cluster 10
32+
33+
and
34+
35+
cd vpack (if not already there)
36+
vpack e64.blif e64-4lut.net -no_clustering
37+
38+
39+
40+
There are a lot of different ways to use VPR and VPack -- see manual422.ps
41+
for details.
42+
43+
-- Vaughn Betz, Jan. 26, 1999
44+
45+
46+
==============================================================================
47+
Contents of the archive:
48+
49+
manual422.ps: Postscript manual of VPR.
50+
README.422: This file.
51+
52+
./vpr
53+
54+
*.c, *.h: Source code for VPR.
55+
56+
makefile: Makefile for VPR. Currently set for Solaris and gcc; you may
57+
have to modify the library paths and compiler options on your
58+
machine.
59+
60+
descript.txt: A revision history of VPR.
61+
62+
e64-4x4lut.net: A sample netlist file from the MCNC bencmark set. The logic
63+
block contains 4 4-input LUTs and 4 FFs.
64+
65+
e64-4lut.net: A sample netlist file from the MCNC benchmark set. The logic
66+
block contains 1 4-LUT and 1 FF.
67+
68+
4x4lut_sanitized.arch: A sample FPGA architecture file, with a logic block
69+
containing 4 4-input LUTs and 4 FFs.
70+
71+
4lut_sanitized.arch: A sample FPGA architecture file, with a logic block
72+
containing 1 4-LUT and 1 FF.
73+
74+
75+
./vpack
76+
77+
*.c, *.h: Source code for VPACK.
78+
79+
makefile: Makefile for VPACK. May have to be modified for non Solaris
80+
machines or for compilers other than gcc.
81+
82+
descript.txt: Revision history of VPACK.
83+
84+
e64.blif: MCNC benchmark circuit e64 technology-mapped by Flowmap to
85+
4-input LUTs. This is a combinational circuit.
86+
87+
s1423.blif: A sequential MCNC benchmark circuit. It has been technology-
88+
mapped to 4-input LUTs and flip flops by Flowmap.
89+
90+
91+
==============================================================================
92+
93+
Major changes from VPR Version 3.99 to this Version (4.22)
94+
95+
1) A timing-driven router has been added to VPR, and is used by default.
96+
97+
2) VPR now supports routing architectures with wires that span more than
98+
1 logic block, and architectures that include both pass transistor and
99+
buffered routing switches.
100+
101+
3) Delay extraction and timing analysis have been added to VPR, so it now
102+
outputs the speed of a placed and routed circuit.
103+
104+
4) An area model has been incorporated, so it now estimates the area required
105+
to lay out an FPGA's routing.

manual422.ps

225 KB
Binary file not shown.

manual5.ps

-176 KB
Binary file not shown.

vpack/cluster.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <stdio.h>
2-
#include "vpack.h"
3-
#include "ext.h"
42
#include "util.h"
3+
#include "vpack.h"
4+
#include "globals.h"
55
#include "cluster.h"
66
#include "output_clustering.h"
77

@@ -139,14 +139,17 @@ static void check_clocks (boolean *is_clock, int lut_size) {
139139
block[iblk].type == LUT_AND_LATCH) {
140140
for (ipin=1;ipin<lut_size+1;ipin++) {
141141
inet = block[iblk].nets[ipin];
142-
if (is_clock[inet]) {
143-
printf("Error in check_clocks. Net %d (%s) is a clock, but also\n"
144-
"connects to a LUT input on block %d (%s).\n", inet,
145-
net[inet].name, iblk, block[iblk].name);
146-
printf("This would break the current clustering implementation \n"
147-
"and is electrically questionable, so clustering has been\n"
148-
"aborted.\n");
149-
exit (1);
142+
if (inet != OPEN) {
143+
if (is_clock[inet]) {
144+
printf("Error in check_clocks. Net %d (%s) is a clock, but "
145+
"also\n"
146+
"\tconnects to a LUT input on block %d (%s).\n", inet,
147+
net[inet].name, iblk, block[iblk].name);
148+
printf("This would break the current clustering "
149+
"implementation and is electrically\n"
150+
"\tquestionable, so clustering has been aborted.\n");
151+
exit (1);
152+
}
150153
}
151154
}
152155
}
@@ -353,13 +356,18 @@ static int get_block_by_num_ext_inputs (int ext_inps, int lut_size, int
353356

354357
while (ptr != NULL) {
355358
iblk = ptr->iblk;
359+
356360
if (cluster_of_block[iblk] == NO_CLUSTER) {
357361
if (clocks_feasible (iblk, 0, clocks_avail, lut_size, NULL))
358362
return (iblk);
363+
364+
prev_ptr = ptr;
359365
}
366+
360367
else if (remove_flag == REMOVE_CLUSTERED) {
361368
prev_ptr->next = ptr->next;
362369
}
370+
363371
ptr = ptr->next;
364372
}
365373

@@ -1232,7 +1240,8 @@ static void check_clustering (int num_clusters, int cluster_size,
12321240
void do_clustering (int cluster_size, int inputs_per_cluster,
12331241
int clocks_per_cluster, int lut_size, boolean global_clocks,
12341242
boolean *is_clock, boolean hill_climbing_flag,
1235-
enum e_cluster_seed cluster_seed_type, char *out_fname) {
1243+
enum e_cluster_seed cluster_seed_type, boolean
1244+
muxes_to_cluster_output_pins, char *out_fname) {
12361245

12371246
/* Does the actual work of clustering multiple LUT+FF logic blocks *
12381247
* into clusters. */
@@ -1288,10 +1297,11 @@ void do_clustering (int cluster_size, int inputs_per_cluster,
12881297
cluster_occupancy);
12891298
output_clustering (cluster_contents, cluster_occupancy, cluster_size,
12901299
inputs_per_cluster, clocks_per_cluster, num_clusters,
1291-
lut_size, global_clocks, is_clock, out_fname);
1300+
lut_size, global_clocks, muxes_to_cluster_output_pins,
1301+
is_clock, out_fname);
12921302

12931303
free (cluster_occupancy);
1294-
free_matrix ((void **) cluster_contents, 0, num_clusters-1, 0,
1304+
free_matrix (cluster_contents, 0, num_clusters-1, 0,
12951305
sizeof (int));
12961306
free_clustering ();
12971307
}

vpack/cluster.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
void do_clustering (int cluster_size, int inputs_per_cluster,
22
int clocks_per_cluster, int lut_size, boolean global_clocks,
33
boolean *is_clock, boolean hill_climbing_flag,
4-
enum e_cluster_seed cluster_seed_type, char *out_fname);
4+
enum e_cluster_seed cluster_seed_type, boolean
5+
muxes_to_cluster_output_pins, char *out_fname);
56
int num_input_pins (int iblk);

0 commit comments

Comments
 (0)