Assignment 1: KySMet Encoding And Assembler

KySMet is a SIMD instruction set created for Spring EE480. It's described in detail in this document. We'll be using this instruction set for the remainder of this course. The current project is simply to design the instruction set encoding and implement an assembler using AIK.

In the last project, you'll be dealing with KySMet as it is really intended to be: a SIMD machine with multiple processing elements. However, until then, we can simply worry about a single processing element -- yes, KySMet is designed to have many processing elements, but everything can still work with just one. In other words, for now you'll assume that $NPROC is 1 and $IPROC is 0. This also means that there is just one .data segment in addition to the one .text segment.

The following isn't a working program, but it should pass through your AIK-generated assembler:

	.text
	.origin	0x0000
start:	add	$u0,$zero,$IPROC
	allen
	and	$u1,$NPROC,$sp
	call	func
	gor	$u2,$fp
	jump	here
	jumpf	$u3,here
	left	$u4,$rv
	li8	$u5,42
	lnot	$u6,$u7
	load	$u8,$u9
	lu8	$u5,0x42
	mul	$u0,$u1,$u2
	neg	$u3,$u4
	or	$u5,$u6,$u7
	popen
	pushen
func:	ret
	right	$u8,$u9
	sll	$u0,$NPROC,$NPROC
	slt	$u1,$u2,$u3
	sra	$u4,$NPROC,$NPROC
	store	$u5,$u6
	trap
	xor	$u7,$u8,$u9
	.data
	.origin	0x0000
yuck:	.word	42
	.text
here:	li	$u5,yuck
	li	$u5,yuck-100
	li	$u5,128
The last three are testing that you have correctly implemented the li pseudo-instruction. Only the last should generate the two-instruction li8, lu8 sequence. Of course, passing this little input through isn't really proving your assembler makes valid bit pattern assignments for the instruction set.

Details For The Implementor's Notes

You should be submitting an implementor's notes document with your project. The implementor's notes are particularly important here in explaining how and why you assigned bit patterns for the instructions as you did. Keep in mind that the implementor's notes may prove very useful to you as you try to modify your assembler and instruction encoding to simplify later projects. Also be sure to explain how you dealt with cramming the encoding of 25 different types of instructions into a format with a 4-bit opcode.

Due Dates

The recommended due date for this assignment is before class, Monday, February 12, 2018. This submission window will close when class begins on Wednesday, February 14, 2018: Happy Valentine's Day! You may submit as many times as you wish, but only the last submission that you make before class begins on Wednesday, February 14, 2018 will be counted toward your course grade.

Again, you can ensure that you get at least half credit for this project by simply submitting a tar of an "implementor's notes" document explaining that your project doesn't work because you have not done it yet. Given that, perhaps you should start by immediately making and submitting your implementor's notes document? (I would!)

Submission Procedure

For this project, you will be submitting a tarball (i.e., a file with the name ending in .tar or .tgz) that contains all things relevant to your work on the project. Minimally, this tarball includes the source code for the project and a semi-formal "implementors notes" document as a PDF named notes.pdf. It also may include test cases, sample output, a make file, etc., but should not include any files that are built by your Makefile (e.g., no binary executables). For this particular project, name the AIK definition of the KySMet assembler kysmet.aik.

Submit your tarball below. The file can be either an ordinary .tar file created using tar cvf file.tar yourprojectfiles or a compressed .tgz file file created using tar zcvf file.tgz yourprojectfiles. Be careful about using * as a shorthand in listing yourprojectfiles on the command line, because if the output tar file is listed in the expansion, the result can be an infinite file (which is not ok).

Submissions are logged using the account name by which you registered for EE480, which generally is 6 or 7 characters long and has uppercase letters.

Your account is .

Your password is


EE480 Advanced Computer Architecture.