Verilog, Allocation, and Dynamic Languages
May 12, 2022

Verilog gives programmers direct parallel hardware, yet conventional FPGA flows allocate every LUT, register, and wire before runtime. Software languages let a program create objects, fields, references, and memory as needs change.

Cartilage joins those worlds: a distributed fabric that can allocate regions, instantiate dynamic types, and reconfigure local hardware while the application runs.

Static Elaboration Meets Dynamic Work

An FPGA build fixes resource use into a bitstream. When every LUT has a role, another line of hardware logic requires a new allocation and compile cycle. C and C++ offer malloc and new; JavaScript and Python let objects gain relationships at runtime.

Accelerator APIs still force programmers to manage kernels, buffers, and communication across artificial boundaries. That machinery obscures the application’s own object model.

Give Reconfigurable Hardware a Native Runtime

Cartilage treats regions and connections as allocatable resources. Objects can create contained objects, attach ports, move references, and reshape local logic without turning the whole machine into a centrally managed FPGA build.

Software-language designers and FPGA engineers can work together on this post-von-Neumann model. Bring dynamic semantics to the fabric and let hardware scale as one homogeneous program.

Locate Allocation in the FPGA Fabric

The architecture chapter shows where LUTs, registers, wires, and routes live; the parallel-language and multiplier links carry allocation into source semantics and arithmetic structure.

See where LUTs, registers, wires, and routed module connections live inside an FPGA · Who Is Solving Parallel Source Code? · Bit-Serial Bubbles-Free Multiplier

Originally posted on LinkedIn

Brian Greenforest · (2022-05-12 07:16:00 UTC)

Open the original LinkedIn post · LinkedIn activity 6930415265725771776

LinkedIn status when archived: Visible to anyone on or off LinkedIn.

Yes, but: 1. After all LUTs are occupied, I can't add a new line of Verilog. In C and C++ I can. 2. In C I can malloc(), in C++ I can new. In Verilog all I can do is to reserve a fixed-size array and waste a lot of resources. 3. In JavaScript and Python I can say "obj.newField = anotherObjRef" and then "obj.newField.anotherObjRef.method(arg)". In OpenCL, oneAPI, CUDA, etc. nonsense I have to use MPI to even pass function arguments between kernels. No, FPGAs are NOT cool. In fact, they are just CHIPS, but programmatically defined (and redefined). We (software developers!) demand a post-von Neumann architecture! Reactive programmers who love OOP got tired of the von Neumann bottleneck, and FPGAs in their pure globally managed state are not a solution, even in a Kubernetes cloud cluster with clever Linux drivers. We need a new distributed massively parallel PROGRAMMING LANGUAGE that runs on a breakthrough new innovation, a cluster of organically and scalably managed FPGAs. That can scale by just adding more servers to it. Homogeneously.

Original LinkedIn media