MIT 6.004 Nerd Kit MIT 6.004 Nerd Kit comes with an array of 16 computational blocks. You can configure these blocks to do anything from computing just ANDs and ORs to being a Beta microprocessor. In addition to those FPGA blocks, there is one breadboard strip, IO block, switches and a few other features of the kit that you need to be know before you get started with the lab asignments that uses the lab kit. Configurable Application Modules Bank of 16 LEDs Detail View I/O connector I0 I1 I2 I3 I4 I5 I6 I7 I8 I9 O0 O1 O2 O3 O4 O5 O6 O7 O8 O9 Each computational block has a 20-pin socket. It s the grey plastic box near the bottom of the computational block with silvery rivets. Each of those rivets is actually a receptacle for the stripped end of a wire. When you run a single wire from one block to another, you are actually making a connection that carries 32 bits. Each of the 32 bits are sent one at a time down the wire, in serial. Thus, we call them serial wires. This is a convenient abstraction which allows you to wire up very complex and powerful circuits without the pain of having to run 32 individual wires for every bussed connection. You can use the same wire to transmit just one bit. Read more on this in Data Transmission section of this document. Switches On the bottom left of the kit right above white breadboard, you will see a row of ten switches. Switches are numbered from right to left (0... 9). Switches 0..7 can be configured to be momentary or push buttons. If a switch is configured to be a momentary button, the wire connected to the switch will carry Vcc only when the switch is pressed. While the same switch configured as a push button will toggle between Vcc and GND at each switch-press. Read about IO block on how to get outputs from a switch. Switch 8: is a push button and can be used to select between free-run and single step mode. When the switch s LED is on, you are in free-run mode. This means that all registers in your circuit are
continuously clocked. When the LED is off, you are in single-step mode. This means that the clock is frozen unless you instruct it to go off with switch #9. Switch 9: single-step advance. Pressing this switch while switch 8 is in single-step mode sends exactly one clock pulse to all the registers that use the clock on the kit. This allows you to step through your circuit slowly to facilitate debugging. Switch 9 is functional only when Switch 8 is in off state. Reset button: does a cold boot of the kit. Initializes computational blocks and the underlying logic. NMI button: halts the on-board processor in case it wedges without initializing the computational blocks. LEDs There is a bank of 16 LEDs in each computational block. Different circuit modules use those LEDs in different ways. For instance, echo block uses those LEDs to output each of its 16 Bit input. There are ten LEDs between breadboard and the row of switches. These LEDs can be configured to output the state of the switch (lit = on, not lit = off). You can also use these LEDs to ouput the state of logic level set though DI lines in the IO module. There is one eight digit hex LED display on the first computational block. You can use this LED to display serialized data. Just run the wire that carries serialized data to the second pin from the right. Clocks The kit comes with an internal clock that runs at 20 MHz. A lot of the circuits have implicit clock inputs (Even some combinational circuits have clock inputs!). Most of the clocked circuits use clock that runs slower than the main clock. You can change the frequency of this clock that is used by clocked components by setting Tpd in JTerm. As you learned in class, the critical path is the longest path in a combinational circuit. On these kits, every module has an identical delay, and the critical path is simply the longest path between register elements multiplied by 2. Thus, if you went from a register to an AND gate, to an adder, and back to a register, the critical path length in this example is 6, one for T c-q of the register, one for T pdand, and one fore T pdadd. Your kit will not produce a correct result in free-run mode if you do not set the critical path length correctly. IO Block The white strip on the bottom of the kit is the I/O block. It has pins for power and ground. You will use these if you want certain inputs to be permanently tied to Vcc or GND. You can use DI[0..7] to use the LEDs to output state of a signal (helpful for debugging). Use DO[0..7] to output the state of the switch to a wire that you can run to other part of the circuitry (user inputs to the modules) IO block also has control ROM outputs, to be used when implementing a Beta at the logic level.
Breadboard The upper white block near the bottom of the kit. General breadboarding space. Might be used to add some additional circuit to the lab kit. For example: D/A Data Transmission Data is transferred between different application modules in serialized or non-serialized format. Serialized format is used whenever there is a need to transmit more than one bit of data with a single wire. Each bit is send sequentially in each clock cycle though the same wire. Our implementation transmits the least significant bit first and then works it way up to the most significant bit (total 32 bits). Following waveform graph shows our implementation of serialized transmission. Non serialized format will let you transmit one bit though one wire. Vcc is logical high and GND is logical low. In order to transmit the data you just tie the wire to GND or Vcc depnding on what you Clk Sync Data: 0x1EE 0 1 1 1 0 1 1 1 1 want to transmit. Using the Lab Kit You will use a program called JTerm on the workstation to configure the kit. There should be an icon for JTerm on win98 desktop. Start JTerm by double clicking on that icon. If JTerm icon is not on your desktop, change to JTerm folder at an MS-DOS prompt and start JTerm by typying java JTerm. JTerm is your window into the kit. The left half has a GUI which allows you to configure the computational blocks of the kit. You can also hack in the terminal window on the right half, which gives you a direct access to the ROM monitor running on the kit. There is one-to-one correspondence between the buttons you see on the left half of JTerm and the computational block array on the kit. In JTerm, when you click on a button labelled comp block n, you are presented with a dialog box. The top pulldown menu in this dialog box allows you to set the function of the block. The constant field in this dialog sets the number that is output on the constant generator port (if applicable). State button is active for some of the circuit modules only. If you are using any of those modules (eg. ROM, RAM, Const generator), select the function from the pulldown menu. Click on OK. When you go to the same block configuration for the second time, the
state button will be enabled. When you click on State, relevant state configuration dialog will show up. You will check on Display binary Input for Display block only. Display block will not function if you forget to check this option. General work flow 1 Start JTerm 2 Click on open port (button on bottom left) 3 Make sure the kit is connected to the host, and power it on 4 Wait until the kit finishes its power-on initialization (about 10-15 seconds) 5 Click on computational block buttons to set their functions. 6 Adjust kit switches and clocking according to your design 7 Click Configure Kit. You can watch what JTerm is doing by looking at the MS-DOS window that you used to start JTerm. Configuration takes about a minute the first time, but after that, as long as Use Dirty Bits is selected, small changes take less than a second to update. 8 After stuff stops scrolling by on the MS-DOS window, your kit is now ready to use. 9 If you are using free-run circuit, don t forget to set appropriate critical-path. 10 If you change any of the configurations (with the exception of setting state, clocking, and switches ), you MUST hit Configure Kit again before the changes are uploaded to the kit. 11 If you power down or reset your kit without restarting JTerm, you will have to clear the Use Dirty Bits box for the first configuration, because the dirty bits maintained by JTerm internally are now all invalid. Be sure to reset Use Dirty Bits after the first configuration for faster configuration updates. Revision History: Omprakash Gnawali, Spring 99 Andrew Huang, Fall 98
JTerm Screen Shots