... | ... | @@ -12,84 +12,77 @@ CoreGen. |
|
|
|
|
|
### QDRII controller developing steps:
|
|
|
|
|
|
\# Writing VHDL code and functional test for QDRII memory controller
|
|
|
(based on QDRII+ MIG from Xilinx) **Completed**
|
|
|
|
|
|
\#\# Generation of QDRII+ memory interface from Xilinx Core Generator
|
|
|
(ISE 13.1). QDRII+ is supported by MIG (Memory interface Generator) but
|
|
|
not QDRII. (doc: “UG406.Virtex-6 FPGA Memory Interface Solutions”)
|
|
|
|
|
|
\#\# Functional test simulated and internal understanding of the
|
|
|
generated VHDL in part 1.1.
|
|
|
|
|
|
\#\# Differences between QDRII devices and QDRII+ devices made us modify
|
|
|
the provided code. (doc: “xapp886.Interfacing QDRII\_SRAM Devices with
|
|
|
V6 FPGAs”)
|
|
|
|
|
|
\* Modification of parameter values to adapt it to QDRII specifications.
|
|
|
|
|
|
\* Modification of memory words burst. Following this QDRII
|
|
|
specifications and datasheet: the QDRII is two-words burst whereas the
|
|
|
given design is a four-words burst design. That involved:
|
|
|
|
|
|
* Modify the W/R state machine to operate properly for two-words
|
|
|
burst.
|
|
|
|
|
|
* Modify the testbench to verify correct operation for two-words
|
|
|
burst.
|
|
|
|
|
|
\#\# Modify the generic testbench and verify the functional test for our
|
|
|
QDRII memory CY7C1314CV18. For that purpose the verilog model provided
|
|
|
by Cypress was downloaded and used. **Test completed and passed
|
|
|
successfully**
|
|
|
|
|
|
1. Once the SCBv3 was released, we tested and implemented in hardware
|
|
|
1. Writing VHDL code and functional test for QDRII memory controller
|
|
|
(based on QDRII+ MIG from Xilinx) **Completed**
|
|
|
1. Generation of QDRII+ memory interface from Xilinx Core Generator
|
|
|
(ISE 13.1). QDRII+ is supported by MIG (Memory interface
|
|
|
Generator) but not QDRII. (doc: “UG406.Virtex-6 FPGA Memory
|
|
|
Interface Solutions”)
|
|
|
2. Functional test simulated and internal understanding of the
|
|
|
generated VHDL in part 1.1.
|
|
|
3. Differences between QDRII devices and QDRII+ devices made us
|
|
|
modify the provided code. (doc: “xapp886.Interfacing QDRII\_SRAM
|
|
|
Devices with V6 FPGAs”)
|
|
|
- Modification of parameter values to adapt it to QDRII
|
|
|
specifications.
|
|
|
- Modification of memory words burst. Following this QDRII
|
|
|
specifications and datasheet: the QDRII is two-words burst
|
|
|
whereas the given design is a four-words burst design. That
|
|
|
involved:
|
|
|
- Modify the W/R state machine to operate properly for
|
|
|
two-words burst.
|
|
|
- Modify the testbench to verify correct operation for
|
|
|
two-words burst.
|
|
|
4. Modify the generic testbench and verify the functional test for
|
|
|
our QDRII memory CY7C1314CV18. For that purpose the verilog
|
|
|
model provided by Cypress was downloaded and used. **Test
|
|
|
completed and passed successfully**
|
|
|
2. Once the SCBv3 was released, we tested and implemented in hardware
|
|
|
the QDRII controller done in step 1. **(red) Completed**
|
|
|
|
|
|
\#\# An ISE project was created in order to implement the memory
|
|
|
controller inside de FPGA. In this design, we had to take into account
|
|
|
temporal constrains and FPGA pins (following SCBv3 schematics). At
|
|
|
first, the project did not work properly (no writing neither reading was
|
|
|
properly done), we also noticed that the behaviour was different from
|
|
|
simulation. Since it was quite difficult to find the problem with this
|
|
|
amount of possibilities and variables, we decided to step back and start
|
|
|
testing the hardware first (2.2 and 2.3 steps).
|
|
|
|
|
|
\#\# To avoid hardware related problems (pin errors, short-circuits,
|
|
|
clock problems,…), it was created another simple ISE project where the
|
|
|
main QDRII tracks were tested with the Oscilloscope.
|
|
|
|
|
|
\#\# Following the 2.2 step and the QDRII datasheet (CY7C1314CV18), we
|
|
|
created a basic project where the reading and writing processes were
|
|
|
done and successfully achieved. We checked the result with ChipScope
|
|
|
(Xilinx tool that inserts logic analyzer, system analyzer, and virtual
|
|
|
I/O low-profile software cores directly into the design, allowing us to
|
|
|
view any internal signal or node “in real time”). Although this project
|
|
|
proves the correct operation of the memory, it can not be used as a real
|
|
|
controller since it is not efficient and the frequency used is too slow.
|
|
|
If we try to increase frequency in order to use it more efficiently, we
|
|
|
will start having problems with temporal constrains within internal FPGA
|
|
|
track, PCB tracks and clock delays. This is out of the scope of this
|
|
|
small and functional design.
|
|
|
|
|
|
\#\# Once the PCB and hardware had been checked, we continued testing
|
|
|
the project from step 2.1(QDRII controller based on MIG) in order to
|
|
|
make it worked properly. For that reason we introduced the ChipScope
|
|
|
analyzer inside this project, testing and checking all main signals in
|
|
|
the design. Further tests provided that the problem was located in the
|
|
|
calibration process, the delay in some tracks were out of the range, so
|
|
|
the design could never start without these proper delays. Once it was
|
|
|
fixed, we tested all memory addresses and data bits successfully.
|
|
|
Bandwidth: 2 channel of 72 data bits for writing and reading
|
|
|
simultaneously over a frequency of 100MHz or, in order words, it is
|
|
|
possible to write and read 72 bits from/to the memory in the same 200MHz
|
|
|
cycle.
|
|
|
|
|
|
\#\# Implementation and test of the second QDRII memory controller from
|
|
|
SCB board. Modification of FPGA pins and minor changes inside the
|
|
|
controller. **Test completed and passed successfully**
|
|
|
|
|
|
1. Development of a bridge interface between the QDRII memory
|
|
|
1. An ISE project was created in order to implement the memory
|
|
|
controller inside de FPGA. In this design, we had to take into
|
|
|
account temporal constrains and FPGA pins (following SCBv3
|
|
|
schematics). At first, the project did not work properly (no
|
|
|
writing neither reading was properly done), we also noticed that
|
|
|
the behaviour was different from simulation. Since it was quite
|
|
|
difficult to find the problem with this amount of possibilities
|
|
|
and variables, we decided to step back and start testing the
|
|
|
hardware first (2.2 and 2.3 steps).
|
|
|
2. To avoid hardware related problems (pin errors, short-circuits,
|
|
|
clock problems,…), it was created another simple ISE project
|
|
|
where the main QDRII tracks were tested with the Oscilloscope.
|
|
|
3. Following the 2.2 step and the QDRII datasheet (CY7C1314CV18),
|
|
|
we created a basic project where the reading and writing
|
|
|
processes were done and successfully achieved. We checked the
|
|
|
result with ChipScope (Xilinx tool that inserts logic analyzer,
|
|
|
system analyzer, and virtual I/O low-profile software cores
|
|
|
directly into the design, allowing us to view any internal
|
|
|
signal or node “in real time”). Although this project proves the
|
|
|
correct operation of the memory, it can not be used as a real
|
|
|
controller since it is not efficient and the frequency used is
|
|
|
too slow. If we try to increase frequency in order to use it
|
|
|
more efficiently, we will start having problems with temporal
|
|
|
constrains within internal FPGA track, PCB tracks and clock
|
|
|
delays. This is out of the scope of this small and functional
|
|
|
design.
|
|
|
4. Once the PCB and hardware had been checked, we continued testing
|
|
|
the project from step 2.1(QDRII controller based on MIG) in
|
|
|
order to make it worked properly. For that reason we introduced
|
|
|
the ChipScope analyzer inside this project, testing and checking
|
|
|
all main signals in the design. Further tests provided that the
|
|
|
problem was located in the calibration process, the delay in
|
|
|
some tracks were out of the range, so the design could never
|
|
|
start without these proper delays. Once it was fixed, we tested
|
|
|
all memory addresses and data bits successfully. Bandwidth: 2
|
|
|
channel of 72 data bits for writing and reading simultaneously
|
|
|
over a frequency of 100MHz or, in order words, it is possible to
|
|
|
write and read 72 bits from/to the memory in the same 200MHz
|
|
|
cycle.
|
|
|
5. Implementation and test of the second QDRII memory controller
|
|
|
from SCB board. Modification of FPGA pins and minor changes
|
|
|
inside the controller. **Test completed and passed
|
|
|
successfully**
|
|
|
3. Development of a bridge interface between the QDRII memory
|
|
|
controller and wishbone bus. ****
|
|
|
|
|
|
# Documents
|
... | ... | @@ -109,7 +102,7 @@ http://www.xilinx.com/support/documentation/ipmeminterfacestorelement_meminterfa |
|
|
</tr>
|
|
|
<tr class="even">
|
|
|
<td>23-11-2011</td>
|
|
|
<td>First simulation prototype (QDRII memory controller docs and code)</td>
|
|
|
<td>First prototype in simulation (QDRII memory controller docs and code)</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table>
|
... | ... | |