// Handel-C version of (one-clock) ALU #include "alu.h" extern "C" int printf(const char *fmt, ... ); set clock = external "Dummy"; void main (void) { signed 8 A, B, F; OpCodes 4 Op; unsigned 1 Cout; chanout unsigned 9 results with { outfile = "results.txt", base = 2 }; static unsigned 1 stop = 0; par { // Stimulus seq { A = 1; B = 2; Op = AplusB; A = 2; B = 3; Op = AminusB; delay; // To allow for the final test result to be written out stop = 1; } // Write results to a file while (!stop) results ! (unsigned)F @ Cout; // ALU - Generate F and Cout from A, B and Op while (!stop) par { signal signed 9 A9, B9; signal signed 9 Temp; // Sign extend A and B A9 = A[7] @ A; B9 = B[7] @ B; switch (Op) { case AplusB : Temp = A9 + B9; break; case AminusB: Temp = A9 - B9; break; case BminusA: Temp = B9 - A9; break; case onlyA: Temp = A9; break; case onlyB: Temp = B9; break; case minusA: Temp = -A9; break; case minusB: Temp = -B9; break; case slA: Temp = A9<<1; break; case srA: Temp = 0@A[7:1]; break; case rlA: Temp = A@A[7]; break; case rrA: Temp = 0@A[0]@A[7:1]; break; case allzeroes: Temp = 0; break; case allones: Temp = 0x1ff; break; default: Temp = 0; break; } Cout = (unsigned 1)Temp[8]; F = Temp[7:0]; } } }