📄 descript.txt
字号:
unused variables, etc. Also slightly altered the header structure of the program to better check function definitions against function declarations in util.c and graphics.c. Someday I should make all local functions static and put declarations for all functions called across modules in header files. Added an ARCH_TYPE flag to the makefile so that machine dependent code (random number generator right now) is altered merely by changing the makefile. This version should now work fine on both SUN and HP.- Fixed a minor error message bug Guy found.- When there is only 1 location for a clb (nx = ny = 1, with 1 clb) the placer goes into an infinite loop trying to move the block. Added a check for this so it now just refuses to place the circuit.- Added an option to specify FPGA size (-nx and -ny) on the command line for Guy. ny can now be bigger than nx, so I had to change a couple of things in the range limiter routines.- Added -aspect_ratio option to allow simulation of nonsquare FPGAs. Cleaned up a few bits of ugly code I found while checking that I always used nx and ny properly. Had to change the range limiter routine to make nonsquare FPGAs work properly.Version 3.21- Added delta channel width description function. Makes only one channel extra wide (or narrow).- Changed channel width code so that io channel widths are no longer tied to the maximum channel width in the rest of the array.- Added -fixed_pins option to lock the pins in their initial random positions.Version 3.20- Added nonlinear congestion option to the placer. Can either replace the circuit for every channel width or just place once to a suggested width.- Changed the router so that it only resets the pathcost element of channel segments that were reached in the last routing phase. This only sped up the router by 5% -- rather disappointing.- Added code to recompute the cost (quickly) after each placement temp. is finished so the check_cost checks won't fail due to round off accumulation.Version 3.13- Fixed bug in netlist parser that went into an infinite loop if a global net was not the first item in it's hash table entry.- Added -place_cost_exp option to set the exponent to which we take the average number of tracks per channel factor in the cost function. Setting this option to be greater than 1 allows more sever penalization of narrow channels during placement.- Made Pathfinder algorithm with init_pres_fac = 0.5 and acc_fac_mult = 0.2 the default for the router. Gives about 9% better results than the old router options.- Changed the -pin_block_update_type option to -block_update_type and allowed it to take a value of "pathfinder". This invokes a true Pathfinder algorithm, where some costs are updated immediately and others are updated after all nets are routed. This Pathfinder algorithm is new this version.- Fixed a minor bug in the placer cost function that led to incorrect bounding boxes (and hence costs) of nets that had more than one pin connected to the same block. The initial bounding box set up overcounted the number of blocks on the bb edges. This bug caused an error message in Mike's big run of vpr on all mcnc circuits.Version 3.12- Added a new option, -pin_block_update_type, to allow selection of a mixed Pathfinder, immediate-update algorithm where pin costs are updated immediately and channel costs are updated in the Pathfinder manner.- Now computes and prints out routed wirelength statistics (requested by Mike). - Fixed a minor bug in the routine that counted the number of bends in the routed circuit. The bug counted an extra bend in rare cases (specifically when wires came out of an OPIN into more than one channel), causing the bend numbers to be about 1% higher than they should have been. Version 3.11- Added a few more routing options. Set a couple of defaults to what I've determined to be better values. I compute statistics on how many bends there are per net. This version is going to Jonathan.Version 3.10- Changed the bounding box update method so that large nets have their bounding boxes incrementally updated whenever possible. This has sped up the bounding box calculation for bigkey_mod by a factor of about 34. For other netlists with fewer high fanout nets the improvement is smaller, but still significant.- Changed the cost function calculation so that as much data as possible is precomputed. This and the bounding box change together speed up placement of small circuits (e64) by 2x, and large circuits (alu4) by 15x.- Added more options to allow more control over the router.Code maintenance changes: Restructured the options parser to make it more modular. Added checks to determine that the parameters supplied for each option are of the correct (integer, float or string) type. Version 3.02- Changed the cost function's for the router. Pins that are not oversubscribed now have a cost of 0., not 1. The costs of all pins should be 1 less than in version 3.01. Channels are penalized for overuse via formulae like cost = 1. + (chan_occ - chan_width) * fac rather than the old cost = 1. + (chan_occ / chan_width - 1.) * fac. This new cost penalizes absolute rather than relative overuse, and should be faster to compute and lead to larger penalties (regardless of channel width) with smaller penalty factors, fac. It's magnitude should be more in line with that of the pin overuse cost. The one drawback is that the relative overuse cost considered using 11 tracks in a 10 track channel to be less severe than using 2 tracks in a 1 track channel, which is probably the way it should be.Version 3.01- Allocated small chunks of memory with calls to my_small_malloc instead of my_malloc. My_small_malloc is my custom memory handler that avoids the 8-byte or so storage overhead of malloc, at the cost of not keeping enough information to free the data structures.- Removed the temporary code from the routing serial number generator, routing print routine, and channel cost and occupancy dumping routine that allowed direct comparison with Version 2.22a's results. All information is now printed with the true (new) pin numbering scheme.- Removed temporary code that set CLB's opin cost to 0. Now it is 1; it shouldn't make much difference.Version 3.00This version evolved from Version 2.22, not 2.22a. The changes are:- Input netlist format changed from blif to that produced by blifmap (.net).- Architecture description file is changed to allow the definition of more arbitrary clbs, with general classes of logically equivalent pins.- The entire program has been altered to place and route general clbs rather than just LUTs with one output.- The program allows global nets to be flagged via .global statements in the input netlist file. These nets are ignored in all subsequent place and route steps by the program, but the blocks they must connect are listed in the final routing output.- The routing output now goes to a file, which is specified on the command line.- Added two new command line options -route_only and -place_only. If -route_only is specified, an existing placement is read in from the place_file and is routed. If -place_only is specified, the program quits after writing out the final placement of a circuit (no routing is done).Bug Fixes and minor alterations:- Changed the chan_y.occ vs. chan_width_y check in check_routing. It had the wrong subscript (this would have been bad!).- Changed the placement output file to include subblock information for IOs.- Increased the input buffer size for all parsers and added a check for lines so long that they overflow the input buffer (motivated by J.P.).- Changed binary search for minimum necessary track width so that tiny circuits that succeed with a width_factor of 0 are properly handled (motivated by J.P.).- Fixed minor mistake drawing to the OPINs of IO blocks.- Partially fixed the inaccurate drawing problem caused by X Windows' apparent inability to handle coordinates outside the range -15000 to 15000. I clip point by point to the -15000 to 15000 range. This means drawrect, fillrect and drawtext will always work properly. Drawline (fillpoly) will always work for horizontal or vertical lines (polygon edges) but will be incorrect for extremely zoomed diagonal ones. Drawarc will also be incorrect at extreme zooms. The PostScript output always looks correct. The only complete fix for this problem is for me to write my own clipping routines. This is a lot of code, and will hurt performance since I'll be duplicating X Windows' own checks. I don't think it's worthwhile to overcome a problem that only shows up when people zoom in on the graphics absurdly (like a bored Steve, who found the inaccurate drawing).- Routing serial number generator now only considers the pin numbers of traceback segments that are of type OPIN or IPIN.Version 2.22aMade some minor changes to Version 2.22 to allow this program's output tobe compared to that of Version 3.0 in order to be sure the programs workthe same way. Fixed a nasty bug in check_routing where the chan_width_ynot exceeded check was incorrect. Changed the serial number generationto avoid taking the pin numbers of things that were not IPINS or OPINs.Version 2.22Same as version 2.21 with a few changes to make util.c and util.h a bitmore modular.Version 2.21Updated the router graphics, and fixed the unsaved routing bug, andthe improper abort sequence when the PostScript file can't be opened.This version is fully functional, but can handle only clbs with 1 LUTin them.Version 2.20This version correctly routes nets and updates the cost functions. Itis a complete place and route tool. The router graphics have now beenimplemented, and all graphics allow a text message and selection of clbs.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -