Having a problem with the Qsys CFI memory interface: when a CFI interface is added to a Qsys Nios system, there are very important memory control lines that are not "brought out" of the system, specifically the lines shown in the Cyclone III Device Handbook page 9-26 (DCLK, Reset_L, Wait, and ADV_L).How does one get Qsys to present these control lines? To demonstrate the problem create a simple Qsys embedded system with a Nios II CPU, a FLASH and a RAM. Instructions below are for the Quartus II 13.1 Web Edition:
- Start a new Quartus II project using the new project wizard. Choose a Cyclone III EP3C40F780I7.
- Open Qsys under the Tools menu
- Add a Nios II processor (Economy version)
- Add a JTAG UART (as always), connect it's clock, and connect it to the Nios instruction-master and data_master. Also, wire in the JTAG UART's interrupt to the Nios processor
- Add a System ID (as always), connect it's clock and connect it to the Nios data-master.
- Add a Generic Tri-State Controller for a FLASH memory and select and apply the "Preset" for the Flash Memory Interface (CFI) and press "Finish" to accept the default parameters.
- Add a Tri-State Conduit (to bring the address, data, and memory control lines out of the cpu system) and export the signals by entering a name "flash" in the export column
- Connect the Tri-State controller and bridge together (connect the tcm to tcs).
- Connect the Flash Tri-State Controller to the data_master and instruction_master of the Nios processor
- Connect the clocks of the controller and bridge to the system clock.
- Connect the reset lines of the controller and bridge by having Qsys Create Global Reset Network (under the System menu item).
- Add a second Tri-State Controller for an SRAM, select the Preset for the IDT71V416 SRAM and press the Apply button, press finish to accept the defaults.
- Add a second Tri-State Bridge for the SRAM & "wire" up the SRAM controller to the bridge
- Connect the Tri-State Controller to the Nios data-Master and instruction-master
- Wire in clocks, again.
- Wire in the resets by using System - Create Global Reset Network
- Assign the base addresses for all the components added above by letting Qsys assign base addresses. Select "Assign Base Addresses" under the System menu.
- Generate the system. When asked, give it a name like "CPU_1".
Found the problem:Altera does not support synchronous operations with FLASH memory. Apparently, FLASH memory access is all done asynchronously even during FPGA configuration memory access. So, to make it work, hold the memory's four synchronous control lines (DCLK, RESET_L, WAIT, and ADV_L) in their un-asserted states on the board. A quick review of the Nios Embedded Evaluation Kit (NEEK) will show this being done, with the appropriate pull up resistors. Regarding the errors with the pin assignments, the problem was with the configuration setting for this particular project. To configure an FPGA using a parallel flash with the Cylcone III device, Quartus must be told to use the Active Parallel configuration scheme which is done from the Quartus Assignments menu. So select Assignments - Device, then press the "Device and Pin Options...." button. A new window will appear - choose the "Configuration" category then set the configuration scheme to active parallel. The problem with the project above is that it was set to active serial which made a conflict with the same pins that connect to a parallel flash. We can close the book on this post. Thanks.