On Tue, Sep 4, 2018 at 6:55 PM Ashish Chaudhari <ashish.chaudh...@ettus.com> wrote:
> On Tue, Sep 4, 2018 at 8:07 AM, Brian Padalino via USRP-users > <usrp-users@lists.ettus.com> wrote: > > Recently there was a significant change to the noc_block_vector_iir > > (specifically the vector_iir): > > > > > > > https://github.com/EttusResearch/fpga/commit/05ca30fe91330d54dcd005a3af4aeaa0dc26c8f8#diff-4b21f52231ba9f82bf132f633d594187 > > > > It's a pretty significant re-write of the block, and this behavior has me > > asking a few questions: > > > > 1) Can anyone at Ettus expand on the reason for the major re-write? It > > appears that the block itself worked previously so it seems like > re-writing > > it was a lot of effort to potentially add new bugs to things which > weren't > > there previously. > > > > There were several reasons that contributed to the re-writing that > block. First off, there was a bug in the delay line implementation > that needed to be fixed. Secondly, we wanted to improve the > readability and resource utilization of blocks where users hand-write > their DSP (as opposed to using third-party AXI-Stream IP). The old > approach was to implement a DSP algorithm using basic operations like > addition, multiplication, rounding, etc each with AXI-Stream > handshaking. This has the following drawbacks: 1) The code is a bit > hard to read because the AXI-Stream stuff takes up code real-estate 2) > It's hard to let the tools infer DSP primitives automatically because > AXI-Stream can get in the way of the standard Xilinx-intended control > sets. 3) The AXI-Stream logic takes up more fabric resources. The > Vector IIR block is the first block that wraps AXI-Stream around the > entire DSP algorithm instead of around basic functions. This is the > way we intend to write future blocks with hand-implemented DSP. The > change is actually a step forward in terms of stability because the > API to the actual DSP kernel is much simpler and intuitive, and is > much closer to how FPGA DSP implementation is taught. The simpler API > also makes it easy for the Xilinx tools to perform > optimization/mapping because AXI-Stream handshaking is not in the way. > Don't get me wrong, AXI-Stream is great, we are just changing the > granularity at which we implement it. > Why start with this block instead of just blocks going forward? I saw the addition of the biquad - great! But, ideally, you'd fix the bug in the delay line and move on if that's what drove people looking into the behavior to begin with? I prefer less AXI streaming interfaces as well, but it just seems like a poor idea to rewrite an already written block and change something out from underneath everyone. > > 2) Why wasn't this re-written block added as a second option for a > vectored > > IIR implementation? There are 64-bits worth of RFNoC block ID's out > there. > > I understand if you don't want to support specific RFNoC blocks anymore, > and > > want to move onto new ones, but can you retire them in a better, more > > thought out way? Moving them to a deprecated folder is fine and giving > one > > or two releases to get people to move away is fine, but please stop > gutting > > and re-writing something like it hasn't completely changed. There are > > people who may want to stick with the old way of doing things (the old > > DDC/DUCs are another recent re-write that could have been handled > better). > > Please give us a chance at trying to maintain stability. > > > > Other than fixing the delay line issue, we did not change the behavior > of the block. We also did not change the software or FPGA interface to > the block. All that changed was the implementation, and that does not > warrant a new block or a deprecated copy. You can argue that if > something/anything changes in a piece of functional code, that it is > inherently unstable. However, that applies to everything from a one > liner bugfix to complete rewrite. That said, if you noticed a bug in > the code, then we will absolutely need to and will fix it. > > In general, RFNoC is still evolving and we are slowly cleaning up > interfaces to reach a point where we are confident that it is easy to > use and it efficiently supports what our customers want to do. We > always try to balance improvements with backwards compatibility, but > there are cases where we cannot guarantee compatibility. In those > cases we will try to minimize the incompatible changes, and increment > the compatibility number to ensure that changes don't go unnoticed to > software. None of that was true for this particular block change. > No offense, but you're wrong in many ways. From an implementation standpoint, your re-write isn't a drop-in replacement. It requires code changes for anyone utilizing the vector_iir module. On top of that, if bugs were found in new implementations, but not in old ones, it's not easy to roll back the changes. Take the DDC/DUC changes for example. I understand why they were done. I understand they are more efficient. If I wanted to use the old verion of the DDC/DUC in a design, it is very difficult to bring that back - even to just do an A/B comparison in case there is a bug. The old code worked fine. It was not broken or riddled with bugs, but for some reason Ettus decided to just ditch it all. Another example is the noc_shell compatibility jump from 4 to 5 changing the RB_FIFOSIZE to be bytes instead of log2(bytes): https://github.com/EttusResearch/fpga/commit/32a0b8985ae9ab636957321c5b51e7d55cf30bb7 I understand the flow control is now byte based in FPGA's master, but if it's the case that the buffering doesn't need to be a power of 2, then why wasn't STR_SINK_FIFOSIZE changed as well during this modification? Moreover, if this is the only real change for the noc_shell, can't the host understand version 4 or 5 of the noc_shell and handle the readback pretty easily? Why did this need to be deprecated and thrown out on the host side code? Lastly, if this FPGA code, being in it's own repository, has a corresponding commit or set of commits associated with the uhd repository, can you please have one, the other, or both reference the changed commits in the other repositories? You have an interest in RFNoC from the community, but you're making it very difficult to embrace due to changes that are not conveyed very well and seemingly random changes that cause problems finding and maintaining stability. It makes code bisection on the host side pretty much impossible to do when trying to find newly introduced bugs. I'll ask once more, though I think it'll fall on deaf ears: please consider keeping old code around a little bit longer, and phasing things out to allow people to get their footing as you make your design changes with RFNoC. Brian
_______________________________________________ USRP-users mailing list USRP-users@lists.ettus.com http://lists.ettus.com/mailman/listinfo/usrp-users_lists.ettus.com