Download Full report - ECE - Cornell University
Transcript
to display them for the VGA. This means that wider data buses will take up more FPGA register space than smaller buses and more logic resources will be required to manipulate them. Since the Cyclone II is not a large FPGA, a smaller bus width would be preferable. With these considerations in mind, several ICs were examined, and an 8 bit, single sided ADC and an equivalent DAC were selected. The other significant hardware trade off was how to structure the analog signal paths. Adding amplification stages can add flexibility to a design, but also increases the complexity and the number of points of failure in this untested design. A direct connection avoids these pitfalls, but offers no way to manipulate the signals in analog space. Filtering was not considered, as digital filters can be implemented in the FPGA. The solution chosen was to provide both a direct path and an amplified path for each converter. The user can select between them by switching a set of jumpers. This approach combines the benefits of analog manipulation with a backup direct path at little extra design time cost. The main software design decision was where to put the stored values for display on the FPGA. The Cyclone II FPGA has both internal registers and RAM units as well as a large external RAM. Typical VGA applications use the external ram to store a screen's worth of information, as there is not enough internal memory for a 640x480, 8-bit deep matrix. In this case, however, only one 640-element line of 8-bit values was needed. The stored values correspond not to pixel intensity, but to the magnitude of the voltage at each screen column and which row pixel should be lit. Other on screen elements, such as time and voltage divisions, can be procedurally generated rather than stored. This permits the use of a large array register or of internal memory to store the signal data. Initial tests indicated that the large register constructs were expensive in terms of logic, but allowed fast parallel manipulation and simple programming. Memory, on the other hand, was placed in reserved space on the chip and was easy to synthesize, but could only be read or written once per cycle. Both techniques were eventually used in the final design. A register array was created to read in the ADC values and allow them to be shuffled all at once while the input waited to be triggered. A memory array was 7