The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

App::Scheme79asm - assemble sexp to Verilog ROM for SIMPLE processor

SYNOPSIS

  use App::Scheme79asm;
  my $asm = App::Scheme79asm->new(type_bits => 3, addr_bits => 5);
  $asm->parse_and_print('(number 70)');

DESCRIPTION

SIMPLE is a LISP processor defined in the 1979 Design of LISP-Based Processors paper by Steele and Sussman.

The SIMPLE processor expects input in a particular tagged-pointer format. This module takes a string containing a sequence of S-expressions. Each S-expression is a list of one of three types:

(tag value), for example (symbol nil), represents a value to be put in memory (for example a number, or a symbol, or a variable reference).

(tag list), where list is of one of these three types, represents a tagged pointer. In this case, list is (recursively) laid out in memory as per these rules, and a pointer to that location (and tagged tag) is put somewhere in memory.

(tag list1 list2), where list1 and list2 are of one of these three types (not necessarily the same type). In this case, list1 and list2 are (recursively) laid out in memory such that list1 is at position X and list2 is at position X+1, and a pointer of type tag and value X is put somewhere in memory.

After this process the very last pointer placed in memory is moved to the special location 5 (which is where SIMPLE expects to find the expression to be evaluated).

In normal use a single S-expression will be supplied, representing an entire program.

The parse_and_print method takes such a string and prints a block of verilog code assigning the memory contents to an array named mem.

More documentation and features to follow.

SEE ALSO

http://repository.readscheme.org/ftp/papers/ai-lab-pubs/AIM-514.pdf

AUTHOR

Marius Gavrilescu, <marius@ieval.ro>

COPYRIGHT AND LICENSE

Copyright (C) 2018 by Marius Gavrilescu

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.24.3 or, at your option, any later version of Perl 5 you may have available.