Skip to content

HackerFoo/poprc

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
afl
 
 
 
 
css
 
 
 
 
gen
 
 
ir
 
 
 
 
nix
 
 
org
 
 
 
 
 
 
pic
 
 
 
 
 
 
 
 
 
 
 
 
tex
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Popr Compiler Build Status

This project implements a compiler for the Popr language.

Please see this presentation for more information, and the tutorial to understand the language semantics.

More examples can be found in lib.ppr and tests.ppr.

You can try the compiler online using the PoprC web version.

PoprC targets both C and Verilog. For example, the familiar Fibonacci function:

fib: [dup 1 <= !] [dup 1- dup 1- fib swap fib + swap 1 > !] | pushl head

can be compiled to Verilog and synthesized or simulated:

fib wave

Note the stack pointer (sp). Recursion is fully supported, but must be bounded.

Here's a working AXI4-Lite slave:

stream_read_array: swap [swap read_array swap] map_with

stream_write_array: swap2 [-swap2 swap write_array dup True swap seq swap] zip_with

stream_read_write_array:
  swap3 dup_array [-swap2 swap stream_write_array] dip31 swap
    [swap stream_read_array] dip21

when wrapped with a bit of Verilog to map the signals properly.

License

The license for the Popr Compiler is GPL3. See LICENSE for more information.