StanfordVLSI / dragonphy2

Open Source PHY v2
Apache License 2.0
22 stars 2 forks source link

Add runtime-updatable step response functions #109

Closed sgherbst closed 4 years ago

sgherbst commented 4 years ago

Summary

This PR leverages new features in msdsl and svreal to model channel dynamics in a way that can be updated at runtime, without requiring the bitstream to be rebuilt. The feature has been added to both high-level and low-level emulator architectures. Emulator throughput was not affected by this change, but it was interesting to note that BRAM utilization is up while LUT utilization is down. This suggests that Vivado synthesis had been using LUTs to implement some synchronous ROMs in the previous implementations of channel dynamics.

Here's an example of what updating the step response function at runtime looks like from a user perspective:

placeholder = PlaceholderFunction(...)  # defines fixed-point formatting of piecewise-polynomial coefficients
chan_func = ...  # can use a regular Python function here
coeffs_bin = placeholder.get_coeffs_bin_fmt(chan_func)
coeff_tuples = list(zip(*coeffs_bin))
update_chan(coeff_tuples)  # transmits coefficients to FPGA over USB-UART

Details

sgherbst commented 4 years ago

Switched reviewer to @zamyers since he will be running some tests on the emulator soon & may want to change the channel dynamics.