-
Notifications
You must be signed in to change notification settings - Fork 101
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
Interfacing to Xilinx Vivado block design environment #26
base: master
Are you sure you want to change the base?
Conversation
…port in block design does not work in 2019.2) replaced localparam, removed default_nettype none
… module axim2wbsp
…ERFACE_INFO wishbone4 to wbp2classic to use the module in Xilinx Vivado block design
…terface definitions
Thank you for the work you've put into this, and your willingness/desire to share back. Please allow for the following critiques:
I look forward to seeing the above items addressed. Again, thank you for your work on this behalf, Dan |
Hi Dan,
Regards, |
As for naming: I think I slowly start understanding that there are at least following modes:
where busy assertion will differ between reading and writing. |
Well, sort of ... WB pipeline is much more capable than that. STALL should be high if you aren't ready to accept a new transfer. ACK should go high when you are complete. In between the two, you might have many requests being processed. Take this SDRAM controller for example. It will allow multiple requests to be in process at the same time. Also, WB classic is really the same as WB classic synchronous--it's just a matter of whether or not you are taking a clock to do the processing or not. Either way, WB classic often cannot maintain one beat per clock without significantly slowing the clock rate down. Let's do this: let's apply the version names B3 and B4, and then have two protocol names--something for wb classic and something else for wb pipelined. While I'd like to call WB pipelined just WB, I'll admit that others have been confused by this in the past. Perhaps WBC and WBP? Perhaps WBClassic and WBPipeline? What do you think there? Also, the AXI_LSBS thing is still not right. Why not, for 8-bit slaves, just let Vivado drop the bus size to 8-bits before switching to WB? This core's purpose is not bus size adjustment. Dan |
Hi Dan, I will run Monday some tests to see whether Vivado allows connecting different interfaces, or interfaces with different version IDs. I tend towards simply using opencores.org : bus : wishbone for both B3 and B4. It might be still versioned on top of that. But I need to first play more with the tools. Tomasz |
Awesome! Please keep me posted. |
OK, it looks that Vivado block design GUI connects interfaces only when the complete name including version matches. I have decided to use the following names: Therefore it is not possible to connect B3 and B4 interfaces with a bus connection, which might be a good thing. It is still possible to connect them wire-by-wire. I have seen that Xilinx itself uses the same interface definition/name/version for both AXI and AXI-Lite, so they really have no better solution. I have tried to pack the I have decided to use names like M_WBP for pipelined master and S_WPC for classic slave for example. This is more or less my final version. Of course the new wishbone and AXI X_INTERFACE_INFO labels might be added to all other wb2axip cores, I have only added them where I needed. Best regards, Tomasz |
Just writing back to see the status of this. Looks like I missed the "final version" comment. Should I test this and merge it then? Dan |
I have reached a point where axim2wbsp and wbm2axisp and wbp2classic integrate well in Xilinx block design with AXI and WB interfaces recognized as bus structure.
I had to change localparam to param at one place because of the same reasons as discussed in Vivado block design changes #18 .
I would be fine with replacing them completely with formulas as done there.
As for
why not use this at the beginning instead?:
I hope that you like the naming convention for WB signals I had defined in interfaces. In this way internal in/out names may use any naming convention while they are recognized as master or slave bus with uniform signal naming.
As for parameter AXI_LSBS I need it to support narrow transaction see
https://community.arm.com/developer/ip-products/system/f/soc-design-forum/10107/narrow-burst-32-bit-read-on-a-64-bit-data-bus-axi-read-transaction
That means on 64 bit data AXI addr[2:0] are significant. Reading 32 bit from 0x1000 (data[31:0] used, addr 0x1000) is different from reading 32 bit @ 0x1004 (data[63:32] used, addr=0x1004). I may connect 32 bit WB slave connecting addr[15:2] to ADR_I and {DAT_O,DAT_O} to 64 bit DAT_I WB master.
Writing may be easily solved as well using addr[2] to multiplex masters DAT_O into slave .DAT_I( addr[2] ? DAT_O[63:32] : DAT_O[31:0]). SEL_O must be multiplexed as well.
I agree it will probably work only for single AXI transactions, not for burst. Anyway, it is very useful for me and costs no other changes. AXI_LSBS parameter should be marked experimental.
Regards,
Tomasz