Hi Jack & Edmond, thanks a lot for your answers.
Concerning memory customization, I was not considering it as a priority but there is indeed a lot of interesting stuff in the article you shared.
FPGA shells are also an interesting concept, that we might dig especially when it comes to abstracting PCIe layers.
However and to be perfectly honest this will not be a priority either since we have a large existing infrastructure composed of costly FPGA boards.
Hence for us, adding a new board reference in such an infrastructure, is a strategic move and often a cost-driven decision.
As it is rare, assigning an engineer on adapting the top module and the constraints file is not a big deal.
To introduce my first contribution idea, let me set a bit of context:
1. Routing FPGA is hard and long (especially Xilinx's ones but that is not the point)
2. Reset is primordial on ASIC since at t=0 (power-up) register's states are unknown
3. FPGA offers the ability to set any register at a precise state at t=0 (programming)
and a simple way of expressing this in verilog is for example reg my_valid = '0;
4. Using this "programming-reset" allows us to kick out the reset tree routing constraint which highly improves the routing capabilities of the design
5. Chisel offers automatic clock & reset inference, which is nice but comes with a drawback for us :
val my_valid = RegInit(false.B) will infer a synchronous reset process for my_valid which is not what we want.
I would hence like to somehow add an option to FIRRTL in order to would translate Chisel's val x = RegInit(value) into (downto verilog) reg x = value;
Actually I don't know what could be the best way of doing this :
- Adding a new construct to Chisel ? Such as RegT0()
- Adding an option to RegInit ? Such as RegInit(value, method)
- Adding an option (global/local?) to FIRRTL to use a different transform which would translates reg my_valid : UInt<1>, clock with : (reset => (reset, UInt<1>("h00"))) into another form
Additionally register randomization should be turned off on those registers.
I would be glad to hear your inputs on this first idea and to join the next Chisel/FIRRTL developers meeting (on Friday, January 7 ?), just let me know how to reach you technically speaking.
John