Reference Design Instructions

Please read refdes_rel.txt for current and previous changes to the reference design.


A. How to extract and build the SA1200 microcode reference designs (WNT)

1. Extract all files to a single working directory from
 	ucode\refdes\*		(packet forwarding .uc, .ind and .h files)
	ucode\include\*		(stdmac.h)
	bin\rtm.exe			(transactor, assembler, route table manager, 
						and microcode loader)		
	bin\bridge.exe		(transactor, assembler, bridge manager, 
						and microcode loader)
	bin\uca.exe			microcode assembler		
	bin\ucld.exe		( microcode linker)
	bin\uword.def		assembler microword definitions
	bin\ucc.def			assembler definitions

2. Assemble microcode

12 100Mport design:
-------------------
pfwd12.bat


16 100Mport (2 octal mac) design:
---------------------------------
pfwd16.bat


1Gig, 16 100M port design:

pfwd16_1f.bat



C. How to Build Reference Designs and Run the benchmarks(WNT)


1. Twelve 100M Port Design.
This uses rec_scheduler.uc and and level 3 forwarding. pfwd_packet.ind repeatedly sends a set of 12 
good ip packets through the fbi pinside. Each packet routes to a different destination port.  

pfwd*init.ind calls watch_pfwd.ind, which displays the pcs for receive, transmit and scheduler threads.
run_receives(n) run runs until n 64 byte elements have been queued. 
run_transmits(n) transmits n 64 byte elements. 
calc_rate() tells you the packet rate in elements/per sec (eps). For min-size packets,
this it the packet per second (pps) rate.

The measurements shown below were taken on the following dates on previous releases:
(The measurements are old)
	7-23-99	rtm.exe
	4-16-99 bridge.exe


pfwd12.bat
rtm
*>@pfwd12_bi_min						// bi-directional, min-size 64 byte IP packets
*>run_receives(10);						// to get to steady state
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 7/23/99 results: 2531645 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 7/23/99 results: 2325581 pps
*>exit

rtm
*>@pfwd12_uni_min						// uni-directional, min-size 64 byte IP packets
*>run_receives(10);						// to get to steady state
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 7/23/99 results: 2512562 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 7/23/99 results: 2288329 pps
*>exit

rtm
*>@pfwd12_bi_var						// bi-directional, 64-512 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/23/99 results: 3333333 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/23/99 results: 2202643 eps
*>exit

rtm
*>@pfwd12_uni_var						// uni-directional, 64-512 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/23/99 results: 3378378 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/23/99 results: 2337136 eps
*>exit

bridge
*>@pfwd12_bi_min_br						// bi-directional, 64 byte bridge packets
*>run_receives(10);
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 4/16/99 results: 2680965 pps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 4/16/99 results: 2237136 pps
*>exit

pfwd12_hw.bat
rtm
*>#define LITTLE_ENDIAN					// to make packet_gen create LITTLE_ENDIAN
*>@pfwd12_bi_min						// little-endian, buffer count 300
*>goto freelist_created#				// to create freelist of 300 nodes takes a while
*>run_receives(10);
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/26/99 results: 2336448 pps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/26/99 results: 2169197 pps
*>exit


2. Sixteen 100M Port Design.

pfwd16.bat
rtm
*>@pfwd16_bi_min						// bi-directional, min-size 64 byte IP packets
*>run_receives(10);						// to get to steady state
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 7/23/99 results: 2525252 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 7/23/99 results: 2237136 pps
*>exit


rtm
*>@pfwd16_uni_min						// uni-directional, min-size 64 byte IP packets
*>run_receives(10);						// to get to steady state
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 7/23/99 results: 2506265 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 7/23/99 results: 2298850 pps
*>exit


rtm
*>@pfwd16_bi_var						// bi-directional, 64-512 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/23/99 results: 3322259 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/23/99 results: 2597402 eps
*>exit


rtm
*>@pfwd16_uni_var						// uni-directional, 64-512 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/23/99 results: 3460207 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/23/99 results: 2564102 eps
*>exit


pfwd16_hw.bat
rtm
*>#define LITTLE_ENDIAN					// to make packet_gen create LITTLE_ENDIAN
*>@pfwd16_bi_min						// little-endian, buffer count 300
*>goto freelist_created#				// to create freelist of 300 nodes takes a while
*>run_receives(10);
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 7/26/99 results: 2364066 pps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 7/26/99 results: 2267573 pps
*>exit



3. 1Gigport/16 100M port design. 
This sets FAST_PORT_ENABLED and FAST_PORT1, causing gigabit microcode to be assembled. It uses rec_scheduler_f.uc
which dynamically assigns ports to threads, alternates between fast and slow ports. It also performs level 3 
forwarding. 9 ports, 1 gigabit and 8 100M, are exercised. The port ready bits are turned on and off, emulating
the filling and draining of MAC buffers. Fast port sequence check occurs to insure that multiple min-size packets
from the fast port to a given slow port are enqueued in order.


pfwd16_1f.bat
rtm
*>@pfwd16_1f_bi_min						// bi-directional, min-size 64 byte IP packets
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 2/4/99 results: 2380952 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 2/4/99 results: 2409638 pps
*>exit


rtm
*>@pfwd16_1f_uni_min					// uni-directional, min-size 64 byte IP packets
*>run_receives(100);					// store and queue 100 packets
*>calc_rate(100);						// 2/4/99 results: 2358490 pps
*>run_transmits(100);					// forward 100 packets
*>calc_rate(100);						// 2/4/99 results: 2375296 pps
*>exit


rtm
*>pfwd16_1f_bi_var						// bi-directional, 256 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 2/4/99 results: 3355704 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 2/4/99 results: 2666666 eps
*>exit


rtm
*>pfwd16_1f_uni_var						// uni-directional, 192 byte IP packets
										// keep headers in the performance mix
										// therefore run from the beginning
*>run_receives(100);					// store and queue 100 elements
*>calc_rate(100);						// 2/4/99 results: 3030303 eps
*>run_transmits(100);					// forward 100 elements
*>calc_rate(100);						// 2/4/99 results: 2364066 eps
*>exit


