5KK73: Embedded Computer Architecture
Please note that these documents are confidential. Please do not redistribute the material posted here.
• Using X-server with Putty and Xming (courtesy Sander)
• Assignment (Updated on 2/10/10)
• Relevant documentation for Silicon Hive
Updates
4/10/10: It seems that co4 doesn't work either. Please use co5 or co6 only.
2/10/2010: The source code for the updated assignment is available here. This is an integer implementation of forward DCT (Discrete Cosine Transform). A general description about DCT can be found here. A general implementation (provided here for your understanding) may look something like below:
#define M_PI 3.14159265358979323846
long bin,k;
double arg;
for (bin = 0; bin < transformLength; bin++) {
transformData[bin] = 0.;
for (k = 0; k < transformLength; k++) {
arg = (float)bin * M_PI *(float)k / (float)transformLength;
transformData[bin] += inputData[k] * cos(arg);
}
}
The implementation provided to you does not contain any cosine or sine operations. More details about the program can be found in the file fdct_original.c. To compile the program please use the command:
gcc test_main.c fdct_original.c
./a.out
You should see the following output
Testing frame 0
Success!
Testing frame 1
Success!
Testing frame 2
Success!
Testing frame 3
Success!
Testing frame 4
Success!
Testing frame 5
Success!
Press any key to continue
6/11/2009: To help better comparison of different processor architectures alternatives, you can also compute power consumption of your application on your chosen processor. A complete guide may be found in $HIVEBIN/../doc/power_estimation_tutorial.pdf. The perl script for power computation can be called using $HIVEBIN/pw_estimation.pl. A small demo and explanation will be given in the class on Monday, 9th November. To compute power please use the command: $HIVEBIN/pw_estimation.pl -f normalized_values -s file.apex -t listing_file
The normalized_values file can be downloaded here. The file.apex can be copied from your processor generation and the listing file unzipped from the application/sched folder.
28/10/09: It seems that co4 is also down now. Please use either co5 or co6 for your assignment.
20/11/09: Please email the report as a pdf attachment.
28/10/08: It seems that processor compilation doesn't work on co7. Please use other servers for it.
FAQs
Ques: Error - memory pearl_is3_bp_dmem_mem not found.
Ans: Use the memory name without pearl_is3_. The correct name in this case should be bp_dmem_mem.
Ques: Processor design gets stuck in scheduling stage; it keeps generating random seeds and doesn't terminate.
Ans: (From Menno) The problem occurs in a compile stage, but as part of generating the core. This indicates that this happens during code generation for emulation functions. What this usually means is that the core has additional standard operations, but placed in issue slots that are not sufficiently connected. The scheduler then tries to use these operations for generic C code mapping, but it can not find a route to get arguments into them or results out. So, your core has been generated and you could actually start using it (although you could not use emulation for integer divide and float). However, you do need to take into account that connections are missing within the core and also during building of other code (using exhaustive scheduler), you can quickly run into this same issue. If you do not want to do this, there are several other "solutions":
? The most elegant solution is to add the exact right amount of connectivity to your core to allow the scheduler to route inputs and outputs. You will need to experiment with providing additional interconnections in your core.
? If you do not want to modify the processor and you just want to get rid of the error message, but do not need emulation (int division, floats), you can switch off the emulation library construction, by adding the following line to your core makefile: NO_EMULATION_LIB = 1
? - If you do need emulation and you do not want to change the core, check the error messages carefully to determine in which function the problem occurs. Then you look at the sources in $HIVEBIN/../share/runtime/emulate/ to find the function in there. It is likely that you will find a pre-processor macro through switch controlling exhaustive scheduling for this function. For example, to switch off exhaustive scheduling for unsigned division, you can add the following line to your processor makefile: HDFCFLAGS+=-DNO_DIVU_PIPELINING