-
Notifications
You must be signed in to change notification settings - Fork 7
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
Customized IP Guidelines #3
Comments
Hi Bernardo, The iir_lpf_{real,complex} IP are not a implementation of a generic IIR filter (aka with a_i, b_i coefficients). By the way, a generic IIR is really missing, let discuss about it here. |
Because I haven't really understood the intricacies of how you configure the IP to be handled by the user and that would require a lot more digging through your code and try to emulate the structure - I have been avoiding that. So my system looks a bit like: Finally I connect it to a data_real_to_ram to see the transfer function, but it has been outputting zero - which means something is wrong either with the IP or the setup. My inexperience with fpga's and vhdl really shines from here on out... would a s00_axi port be necessary to change dynamically the coefficients? I notice a pattern between the blocks that you can change through PS-PL communication (add const, nco_counter, data{real,complex}_to_ram) and others which are more "static" (dupp, mixer). I thought that by avoiding the need to communicate with the host computer I could avoid having to deal with the axi interface but maybe I am wrong here. Anyway, here is the .vhdl source: |
I kept working on this generalized IIR filter, and even if the design uses DSP48 slices there will still be negative slack of 0.2-0.4 ns bringing the total delay to 8.2-8.4. This doesn't respect the timing constraints and therefore always results in a timing failure. The logic takes most of this time, as expected (a1, a2 from feedback * input). I have tried all the Direct Forms, I, II, TFI, TFII. As expected, none obeys the timing constraints. Making a pipelined IIR filter is out of my expertise at the moment, but could be an option to solve this problem. Calculation of the coefficients is rather convoluted and has been a mental block to invest more time exploring this option. In order to respect timing I have been thinking of 3 solutions: I'd really love to contribute with a generalized IIR, but at the moment I am struggling a lot with timing closure when decimating (either by dividing the clock or by using a clock enable). Implementing and calculating the coefficients for a pipelined IIR filter is extremely convoluted. What approach do you think might be the best? Best regards, |
Hello everyone.
I am a user of the OscimpDigital framework and I would like to start by thanking you guys all the good work.
I use a 14b RedPitaya to do some signal processing on my sensors and wanted to implement a biquad structured IIR lpf with coefficients that could be accessed externally by the user and injected through the add_const IP. There would be no need to add these to the libOscimpDig libraries since I could change the coefficients in such a simple way like in the FIR IP.
I saw an (unfinished?) implementation of the IIR lpf (https://github.com/oscimp/fpga_ip/blob/master/iir_lpf_complex/hdl/iir_lpf_complex.vhd). I have tried to adapt this script (annexed) for my implementation, but when I tried connecting it to the other IPs the connections did not match.
I used Vivado's IP Packager.
Are there guidelines to make customized IP compatible with the OscimpDigital library? Or could you point me in a direction where I could make this specific source compatible?
Thank you!
Bernardo
The text was updated successfully, but these errors were encountered: