Lab 5: Machine instructions
The purpose of this lab is to go over the new design for a programmable light display. The new design has a more complex instruction set that enables more general purpose programs.
The project this week involves designing a more general programmable
circuit. The conceptual organization of the circuit is shown below.
The program is stored in the ROM. The accumulator and light register are general purpose 8-bit registers. The IR holds the current instruction, and the PC holds the address of the next instruction.
We will implement four types of instructions for this circuit: move, binary operations, unconditional branch, and a conditional branch. The move instruction will copy bits from a source to a destination. The binary operations will execute some binary operation on two source operands and write the result to a destination. One of the source operands will also be the destination. The unconditional branch will write an address value from the IR to the PC. The conditional branch will write an address value from the IR to the PC if the selected test register (ACC or LR) is equal to 0.
The instruction set for this machine will be 10 bits. The two leftmost bits will specify the type of instruction. The remaining bits will specify the rest of the required information. The table below shows the organization of the four instructions.
Opcode Format Description 00 [C1 C0] [Dest1 Dest0] [Src1 Src0] [Val3 Val2 Val1 Val0] Move from
SRC to DEST
Dest10: 00 = ACC, 01 = LR, 10 = ACC low 4 bits, 11 = ACC high 4 bits Src10: 00 = ACC, 01 = LR, 10 = IR low 4 bits sign extended, 11 = all 1s 01 [C1 C0] [Op2 Op1 Op0] [Src1 Src0] [Dest0] [Val1 Val0] Binary operator
DEST = DEST op SRC
Op210: 000 = add, 001 = sub, 010 = shift left, 011 = shift right maintain sign bit Op210: 100 = xor, 101 = and, 110 = rotate left, 111 = rotate right Src10: 00 = ACC, 01 = LR, 10 = IR low 2 bits sign extended, 11 = all 1s Dest0: 0 = ACC, 1 = LR 10 [C1 C0] [U3 U2 U1 U0] [Addr3 Addr2 Addr1 Addr0] Branch to ADDR 11 [C1 C0] [Src0] [U2 U1 U0] [Addr3 Addr2 Addr1 Addr0] Branch to ADDR if SRC is 0 Src0: 0 = ACC, 1 = LR
Try writing a program, by hand, that does the following.
Load an alternating series of bits, 10101010 into the light register. Then make the register switch back and forth between 10101010 and 01010101 eight times. The program should then return to the beginning.
Here is one possible solution
When you have completed the lab assignment, go ahead and get started on the current project.