A standard test for a programming language is to print out a list of prime numbers using the sieve method. This sheet gives the source code for a primes test using the C-like subset of the H2 language.
// $Id :
// A basic H2 test: print the primes up to 50.
//
interface PRIMES()
{
const limit = 50;
node [15:0]: i, j, k;
node [3:0] [1000]: PA;
{
printf("Primes test %i starting\n", tnow);
for (i = 0; i<limit; i +=1)
{
wait(1);
PA[i] = 1;
}
j = 2;
wait(1);
printf("Primes test: cleared array at tnow=%i \n", tnow);
while (j<limit)
{
i=j+j;
wait(1);
//printf(" j=%i i=%i j=%i start\n", j, i, j);
while (i<limit) { PA[i] = 0; i += j; wait(1); }
j += 1;
}
printf("The primes are:");
wait(1);
for(i=1; i<limit; i += 1) { if (PA[i]) printf("%i ", i); wait(1); }
wait(1);
printf("\n");
printf("Primes test: complete at tnow=%i.\n", tnow);
sysexit(0);
}
}
// eof
The virtual machine code generated is primes_vm. The number of VM instructions used is 41.
Running this code results in the following output
./h2comp testsrc/basictests.h2 -sim 15000 -root PRIMES Primes test 1 starting Primes test: cleared array at tnow=308 The primes are:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 Primes test: complete at tnow=1735. h2comp done
The microcode assembly language generated is primes.s. This uses 240 memory locations on the micro-controller.
The microcode ISA and assembly language was defined by this spec file microcode_hdr.sml.
Running this code results in the following output
./h2comp testsrc/basictests.h2 -sim 15000 -root PRIMES -ucode 10 -sim-ucode 1 Primes test *UNDEF starting Primes test: cleared array at tnow=2 The primes are:1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 Primes test: complete at tnow=1899. Simulation natural end at 1899 h2comp done
The Verilog RTL design generated is primes.v.
The Verilog RTL was also output as a gate-level design primes.vnl.
Running this code results in the following output
The SystemC output code generated is primes.cpp and primes.h. Note July 2024: SystemC files are seemingly missing.