Spring 2009: EE 382N-4 Unique: 16695
Advanced Embedded Systems Architecture
Lab Assignment #1: Due March 13, 2009
TASK:
Write an ARM assembly language program (ALP) implementation of a memory test
and execute it on the ARM emulator.
Specification:
1) Write a memory test that does a pseudo random address and data test of the DRAM memory.
a) Randomly vary the data while randomly varying the address. Use a linear feedback shift register (LFSR) to generate the address and the data patterns. Recall that an LFSR cannot generate the "zero" value.
b) Randomly vary the
(write -> read-back/validate) timing so that the memory has the time to loose
its state. In other words, the time between the write and the corresponding
read should also vary randomly.
2) The test should be run in DRAM memory and
dynamically relocate itself during testing. This means that not all of the memory
locations can be tested at once. You should relocate your code. The key point
to note here is that the instructions should not refer to absolute addresses.
Using relative addressing makes the program run anywhere without any
modification and also relocatable.
3) The program needs to test DRAM memory that is 8 times the code size (modulo 2), i.e., if the code size is 1Kbytes, then the program needs to test 8192 bytes.
Environment Setup:
a) Linux Machines
Machine id: soc1.ece.utexas.edu, soc2.ece.utexas.edu & soc3.ece.utexas.edu.
You will need to use Secure Shell to access these machines. Execute the following command to access soc1:
ssh –X –Y
soc1.ece.utexas.edu
The options allow remote X-Windows viewing. Substitute machine number to reach the other 3 machines
If you do not have an ECE account, check with an LRC proctor.
b) Disk space:
Please use the /scratch directory on the ece machines as your workspace. The scratch directory will never be wiped out. Execute the following commands:
%> cd /scratch
If you do not have your directory,
%> mkdir <your
id>
c) ARM compiler & linker
C Shell (csh or tcsh) - execute the following commands:
%> source /usr/local/packages/coware/arm/lrc_asetup.csh
%> source /usr/local/packages/coware/arm/env_linux.csh
Bash Shell (bash) - execute the following commands:
%> source /usr/local/packages/coware/arm/lrc_asetup.bash
%> source /usr/local/packages/coware/arm/env_linux.sh
Compiling and running programs using the ARM ADS tools:
a) Compiling the assembly language program
%> armcc
-o <executable> <assembly_file>.s
b) Running the program in the arm emulator
%> armsd
armsd: load
<executable>
armsd: go
armsd: quit
Collateral:
3.
ARM assembly language guide ;
has a lot of example programs, almost every example uses relative addressing
4.
Introduction
to the GNU Assembler
Deliverables:
1.
Submit
a well-commented version of your assembly program to the blackboard
2.
Describe
your LFSR
3.
Comment
on the coverage of your LFSR. How do you know that all memory locations have
been tested?
Addtional references:
http://www.heyrick.co.uk/assembler/index.html#01
http://www.coranac.com/tonc/text/asm.htm
http://nocash.emubase.de/gbatek.htm#arminstructionset
http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf