Tools for digital circuit design using FPGAs

The CL_Editor is a program package for the graphical design of circuits for the Atmel AT6000 Field Programmable Gate Array architecture (formerly Concurrent Logic, hence the CL abbreviation). The functionality of the software supports the fast design of circuits on the computer screen, downloading of the circuit onto the hardware of a CL_Board for Ceres_3, and testing. Parts of designs can be copied into other designs, thereby allowing the construction of libraries of tested components. Before reading this manual, the user should be acquainted with the AT6000 architecture. Necessary Modules and Files The editor package consists of the following modules: CLGAs Data structures representing designs, loading and storing of designs CLLoader Loader for the CL_Board for Ceres_3 CLi.Scn.Fnt Patterns for the editor CLFramesD Display procedures used by the editor CLFrames Editing operations CL Command module and programming interface for the CL_Board CL.Menu.Text Text displayed in the menu frame CL.Tool Tool text with explanations Latch.Cli Example design CL.Tool contains the most often used commands with short explanations. CL.Menu.Text can be altered by the user to suit his or her needs. If it is not present, a default menu is used. Opening, Storing, and Loading Designs The command CL.Open Name.Cli loads a design from disk and opens a viewer with a graphical representation of the design. File names of designs should end on Cli (convention). Like with other Oberon commands, an arrow (↑) indicates the last text selection to be the argument of a command (CL.Open ↑). If a design gets changed, an exclamation mark in the menu frame of the corresponding viewer indicates this fact. This way, all viewers showing modified designs are clearly marked. Command CL.Store in the menu frame stores a design to a file using the name shown in the menu frame. A backup of the old design is kept on disk under the name Name.Cli.Bak. Hint: To rename a design, one can simply edit the name in the menu frame with the mouse (delete the name in the menu frame using the mouse and type the new name on the keyboard). After storing the design, it is available under the changed name. CL.Load, another command in the menu frame, downloads the displayed design to the CL_Board of a Ceres_3 and notifies the user through a message in the Log viewer (loading done/not done). If the design contains errors, a message with the coordinates of the erroneous cell is printed (−> CL.Locate). 19 Editing: General Remarks The editor is used consistently with the mouse. Mouse button assignments and their functions were kept compatible with the normal Oberon text operations as closely as possible. The command CL.Cells in the menu frame toggles between two display modes. Either all cells are shown − even the ones not used − or only those cells which actually have a content or get used for routing a bus. Furthermore, only those local and express buses are shown which get used by a cell or are connected together via a repeater. Cancelling and Undo By pressing all three buttons at the same time, a started operation can be canceled. The command CL.Undo in the menu frame can be used to undo the last editing operation. Undo is involutory, i.e. invoking it a second time redoes the operation. Usage of Mouse Buttons The left button is used to edit cells, pads, and repeaters. In most cases, a menu will appear from which a certain item can be chosen. By leaving the menu with the mouse and releasing the button, the operation is canceled and no changes take place. The middle button is used to shift the view of a design or to move or copy a cell selection. The right button is used to select a cell stretch, a pad, or a repeater. Editing Cells Cells are edited with the left mouse button. Depending on the location where the button is pressed, different actions take place: Either the inputs or outputs of a cell are edited or the cell's content itself. Figure 1 below shows the sensitive areas of a cell. By pressing the left button in the respective area, the involved states get changed: A/B inputs: The input is turned on or off (toggled). Depending on the selection of inputs the picture inside the cell changes as not selecting an input results in a "1" being supplied at that input. The inputs can be toggled on all four sides of the cell. Near the A output (fat terminal ) lies the B input and near the B output (thin terminal ) the A input. The lower outputs and the upper inputs correspond graphically with the patterns inside the cell. If other directions are chosen, one has to imagine the signal flow since the pattern is not rotated accordingly. L_bus input/output: If the cell reads a local bus (Read, Mux) (middle right and middle left cell in fig. 1) the arrow is drawn from the L_bus to the cell. It is only possible to select one connection from the bus to the cell. If the cell writes the bus (Write, TS) (middle cell in fig. 1) the arrow is drawn from the cell to the L_bus and it is possible to have two connections simultaneously. If the cell implements one of the two corner turns (lower left and upper left cell in fig. 1) two connections can be set, but no arrow is drawn because the bus is bi_directional. It is possible to have the cell perform a corner turn without choosing the cell's content. This can be seen in the lower left cell in fig. 1. The corresponding directions at the cell are chosen without first giving the cell a content. Note: If two connections are made, these must be perpendicular to each other, e.g. north/west or south/west but not north/south. Labels for A and B outputs: The last text selection can be copied to the lower A or B output by additionally pressing the middle button (left/middle interclick). This is analogous to Set Caret/Copy with normal texts. With left/right interclick the label at that position is cleared. If a label exists in a design already, an error message is printed to the Log. Labels may end with a single quote (') to indicate signals with negative logic. CL.LabelA, CL.LabelB, CL.DeleteA, CL.DeleteB are used to label cell stretches (see below).