-
Notifications
You must be signed in to change notification settings - Fork 240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature Request: Expanded CFS I/O #13
Comments
I should have seen it coming that 32-bit of CFS in/outs might be a limiting factor...
I have to admit, this is an elegant solution! However, personally I do not like having multi-dimensional array data types in the top entity. Also, I am not sure if high-level designs (like the Vivado IP packager) might struggle with these interface types. How-about a trade-off? We could transform your [N][M] IO array into a single [N*M] array. New generic for neorv32_top: And the modified CFS IO conduits:
But I am open for a discussion 😉 |
Personally, I don't mind port types of multi-dimensional arrays (or arrays of records, record with arrays, records of records,... well, just about anything VHDL allows 😄) at any level of the hierarchy (except the true top that connects to FPGA I/O). But, that is just my coding style; I'm not saying it's better than anyone else's coding style. Plus, if you want to use a higher level IP stitching tool, it's best to avoid crazy port types. Anyway, what you suggested is fine with me -- in the end it's just wires! I have two comments though:
Thanks! |
I can confirm, that the IP packager doesn't work with multidimensional arrays |
You could still leave all unused wires unconnected.
That's a nice fail-safe approach.
Thanks for clearing this. What about having a generic to define the size of a top entity signal? Maybe changing the generic would have no immediate effect at all and the IP would require re-packaging to adapt signals sizes. Have you ever tried that? |
Generic sizes are working, I have done that before. |
Good to know! I will add separate size configuration generics for the CFS input and output conduits 👍 |
* IO_CFS_IN_SIZE defines size of cfs_in_i signal * IO_CFS_OUT_SIZE defines size of cfs_out_o signal * generic type is "positive" * default value for both generics = 32
I have added the CFS IO-size configuration generics
and modified the according CFS signals
Feel free to open a new issue if something isn't working as expected. |
FTR, GHDL allows processing any VHDL code and generating a VHDL 1993 netlist that any vendor tool can accept. It can effectively be used for adding "VHDL 2008" support to the vendors that don't support it. See https://ghdl.github.io/ghdl/using/Synthesis.html#cmdoption-ghdl-out. |
Having only two 32-bit ports, one input and one output, for the CFS is a little limiting. I know I can just modify the design and add whatever I want, But, it would be nice if the core allowed more CFS I/O without core modification.
Some like:
Add this type to neorv32_package.vhd:
type cfs_io_t is array (integer range <>) of std_ulogic_vector(31 downto 0);
Add new generics to neorv32_top:
Change CFS I/O ports to:
And, of course, update the port hierarchy, for the CFS to match.
This way end users could have as many CFS 32-bit I/O ports as they wished.
The text was updated successfully, but these errors were encountered: