Lab 2 - Nallatech Tutorial
You will be working in groups of 4 on this project. Please find group members immediately to avoid late submissions. If you cannot find a group, start the
tutorial by yourself and email me and I will help you find a group. EDGE
students can work individually.
Turn in the project using the e-learning website (there is a link of the main course page).
Please zip all source files from part 2 (DimeTalk dt3 project file, generated bitfile, C files, makefile ) and attach it
to your submission. Please do not turn in files that are generated during
synthesis. You only need one submission per group. Include a readme.txt file
that lists all group members in addition to any other information that might be
needed by the grader.
Introduction
In this lab, you will be learning the basics of the Nallatech board and the
DIMETalk design environment.
Part 1 - Installation/Tutorial
-
Follow the Dimetalk installation instructions that you will receive by email.
Please refer to this following guidelines for installing the tools:
Dimetalk/ISE installation guide (Thanks to Brian Nezvadovitz)
-
After installing the tools, perform this
tutorial to become familiar with the environment
-
You will also need these files, which
are referenced in the tutorial. You can untar and unzip the file with this
command: tar xzvf tutorial.tgz.
Once you are done I highly recommend reading the following. Although not
required for this assignment, you will be using these documents on all
following projects. If you are uncertain about the functionality of anything
in DIMETalk, make sure to find the answer in here, or ask me.
- DIMETalk User Guide
- DIMETalk Reference Guide
Part 2 - Simple application
In the second part of the lab, you will use what you learned in part 1 to
develop a simple application that uses block RAMS inside the FPGA on the
Nallatech board. No VHDL is required for this part.
The architecture will be the same as in the previous part, although if you
like, you may modify the size of the blockRAMs (by changing the width of the
address lines) to reduce the size of your design.
Once you have created the architecture in DIMETalk, you will write a
modified C program that initializes BRAM1 with 10 integers (1 through 10) and
initializes BRAM2 with 10 integers (11 through 20). Your code will then update BRAM3 one element at at time with the product of values from BRAM1 and BRAM2.
The high-level behavior is shown below:
for (i=0; i < 10; i++)
BRAM3[i] = BRAM1[i] * BRAM2[i];
This is not the syntax you would use, but this is the behavior
that should be achieved. Note that you must read/write each individual array element from the block RAMs as
opposed to simply using a temporary array in the C code (in which case no
communication with the board would be performed). For this lab, the multiplication is not
done on the FPGA, you are simply using the memories on the FPGA to
store the arrays.
The pseudocode for the loop looks like the following:
for (i=0; i < 10; i++ {
read 1 32-bit word from address i of BRAM1;
read 1 32-bit word from address i of BRAM2;
multiply the 2 words;
write the product (1 32-bit word) to address i of BRAM3;
}
After the loop has finished, read the contents of BRAM3 into an array and
then print the results to the screen to verify that everything worked.
IMPORTANT: you will not receive any points if you do not follow the pseudocode.
Do not read 10 elements from the BRAM at once and then multipy them all in C
code. You must read one element at a time, multiply once, and then write one
element.
Common Problems
- The lock code that is needed to get an unlock code is provided when you
start Dimetalk.
- Many people will receive an error message while generating network code (i.e., synthesis+place-and-route)
in Dimetalk. The error message states
that there is something wrong with the Xilinx installation. Unfortunately, this
is a default error message that could mean many things, but the most common
problem is from having multiple references to Xilinx installations in your
PATH environment variable. For example, your PATH probably has something like this: %XILINX%\lib\nt, where XILINX is another variable with the path to the
ISE installation (probably C:\Xilinx\10.1\ISE). There will likely also be a
reference in the PATH to the version of ISE installed with Dimetalk: C:\Program Files\Nallatech\HPC Software Toolkit\dtxilinx. For Dimetalk to work, make sure to only include the Dimetalk ISE installation in your PATH. It is important
to check both the system PATH and the user PATH. If you aren't familiar with
environment variables in Windows, a google search will provide you with plenty
of information.
- You will need to connect to the delta cluster remotely using an ssh client.
I personally use putty, but there are other options. Similarly, you will need
a way of transferring files to delta. I use WinSCP.