Feedback nodes / delays and Resource Usage on FPGA

Again it's time for an exotic FPGA semi-noob question from myself.
This has been bugging me for a long time:
When implementing a delay stage on a Virtex-5 target, we have a few options available.
Feedback nodes : Uses LUTs.  Virtex 5 has 6-input LUTs.  Does this mean that a Feedback node with delay 1 requires the same resources as a Feedback node with delay 6 and a Feedback node with delay 7 requires double the LUTs as one with delay 6?
Example: A single unit delay feedback node for a U16 requires 16 LUTs.  What is the LUT usage for 6, 7, 9 delay?
BRAM : Uses few LUTs and Registers. I reckon I understand this one.
Discrete Delay : Can't be used as feedback but is more efficient than feedback nodes?  It is written in the help that feedback nodes with the reset support disabled CAN be implemented as SRLs allowing the compiler to choose th ebest option whereas the Discrete Delay primitive forces an SRL  Is the SRL implemented using LUTs?.
Which of these options is recommended for which purpose.  We're really filling our chip and need to start considering such aspects of number storage.
Sorry for the over-reaching vague questions again.
On the other hand, being on a steep learning curve is actually almost thrilling.  Every bit of information helps me learn so thanks for that in advance.
Shane
Say hello to my little friend.
RFC 2323 FHE-Compliant

JLewis wrote:
The number of inputs is only indirectly related to the supported delay. The V-5 and above CLBs (Configurable Logic Blocks) can be configured as dedicated shift registers with delays up to 32 in a single LUT per bit. The main restriction is that these shift registers are not resettable, so you only get this implementation when configured without an initialization value. Delays above 32 can be efficiently implemented in multiple LUTs (ie, 1 LUT per 32 delay). These shift registers are known as SRL16 or SRL32, depending on the target family.
So does this mean that on a LUT-basis, a shift register (with the reset conditions met) with a delay between 1 and 32 costs the same amount of resources?  33-64 delay costs twise that of a single delay?  Is this correct?  I think I need some benchmarking code.....
JLewis wrote:
Discrete Delay maps to the same shift register implementation as feedback nodes if the reset condition is met. Otherwise, the main difference is that the Discrete Delay exposes the dynamic delay feature available in the hardware shift registers and, as you noted, can't be used in a feedback cycle. If neither of those considerations is a factor in your design, it's just a matter of preference.
This document from Xilinx contains the keys to the kingdom, as far as what hardware capabilities are available: http://www.xilinx.com/support/documentation/user_guides/ug474_7Series_CLB.pdf
That's kind of what I thought.
JLewis wrote:
Hi Shane,
Great questions!
Well thank you,  Thanks for the answers.
Say hello to my little friend.
RFC 2323 FHE-Compliant

Similar Messages

  • Feedback Node error and NXT

    I'm trying to create a simple counter using a LabView 8.5 and the NXT.  I'm using a Feedback Node and it does not show an error while editing the VI.  When I try to download the VI to the NXT I get the following error.
    ERROR: An error occurred during parsing.  Node was unable to be parsed. ((Class: FeedbackNode) (VI:Teleop.vi))
    List of errors:
    ERROR: An error occurred during parsing.  Node was unable to be parsed.
    When I click on the error it highlights the feedback node (arrow pointing left).
    Sean

    I found the problem after reading this document:
    ftp://ftp.ni.com/evaluation/mindstorms/LabVIEW_for_NXT_Advanced_Programming_Guide.pdf
    Feedback nodes are not supported in a while loop.  But, you can convert it to a shift register and it will function.
    Sean

  • Program Design decisions and resource usage.

    OK I have a rather lengthy method, and I am trying to decide whether to make it a static method or an instance method.
    ok, so I have an object called obj of class ObjectA and a method called validate. I expect that at any one time there will be many many instances of class ObjectA in existence.
    I can either make the method an instance method, and refer to it as obj.validate()
    or I can make the method static, change the code slightly, put it anywhere, and refer to it as validate(obj)
    given that there are many many instances of this class of which obj is an instance, are there any performance or resource decisions involved in deciding whether the method will be static or instance?
    Thanks in advance.

    BigDaddyLoveHandles wrote:
    Fguy wrote:
    I don't follow. Why is performance irrelevant?"Performance" isn't irrelevant. If I have a task that needs to run in 1 second and it's currently taking 47 hours, it's certainly relevant.
    But that's not what you brought up. You brought up static versus non-static method, The difference is tiny. It's like someone who trying to get the best mileage out of their car asking if they should listen to AM or FM radio.
    But we understand. Fixating on micro efficiencies is a disease that's endemic among newbies. The sooner you get over it and focus on writing clean simple code, the better.Itsy bitsy means it goes along the lines of "no difference".
    It's possible that it diverges as usage increases but the rate of divergence is also itsy bitsy.
    So I guess you don't need to worry, I recommend just writing cleaner, easier to understand code which would rather increase your productivity in the future.

  • Feedback Node Initializer Being Ignored ?

    Hi
    I have a feedback node sat in a For Loop, the number of iterations is determined by an input array. The same input array is wired to the initializer terminal of the Feedback node.  The Feedback node delay is set to 3 and yet the output of the node only contains the first value of the array for the first 3 iterations. It's easier to show than describe.
    So I would expect the output Array to contain the values 3,1,0,0,1,2 yet it actually contains 3,3,3,0,1,2
    If I wire the scalar value 99 to the initializer then I get the expected 99,99,99,0,1,2
    What am I missing ?
    This is LabVIEW 2011 for MAC OS X
    Don't forget to give Kudo's for a good answer !
    LabVIEW Champion
    Certified LabVIEW Architect
    Certified TestStand Architect
    Solved!
    Go to Solution.
    Attachments:
    Feedback Node.vi ‏8 KB

    To expand on Swatts answer a bit more.  You are actually only initializing the feedback node with a single element because you have the array auto-indexing at the loop tunnel.
    If you fed the entire array into the For Loop and the initializer terminal, it would have worked the way you expected.
    Attachments:
    Feedback%20Node[1].png ‏6 KB

  • Feedback nodes in Error cluster

    Some time back I
    had posted a VI called Simple StateMachine template. Based on the
    comments from fellow members I have redone it and am attaching it
    herewith. ( LV7.1 + Win_XP Professional )
    If you just open it and check the block diagram, you will notice that
    LV has introduced a feedback node in the error cluster looping between
    DAQMx function Write Digital Output and Read Analog input. I am not
    sure why LV does this even though the two functions have no common
    reference or relevance between them.
    You can also try this : Just remove the data lines to the two Digital
    Out functions, and also the error cluster with Feedback node . Rewire
    the Error cluster but this time without the feedback node. And now if
    you try to connect the Digital Out data lines, you will find that the
    Data lines are drawn with feed back nodes !!
    I am sure LV is trying to tell me something - only that I don't understand what it is. Can some one  elaborate on this ?
    Thanks
    Raghunathan
    Message Edited by Raghunathan on 07-04-2005 08:29 PM
    Raghunathan
    LV2012 to Automate Hydraulic Test rigs.
    Attachments:
    PRP_Main.vi ‏288 KB

    You have an impossible loop in your code (Run it with execution highlighting to verify):
    Dig8-15 relies on data from the case structure.
    analog input 0-7 provides data into the big case structure
    This means that Dig8-15 cannot execute until the case has executed, but the case must wait for data from analog out. LabVIEW is smart enough to insert a feeback node such that AI0-7 gets the error from the previous interation. This is NOT a desirable situration. 
    Without the feedback node, yuor code is broken. AI0-7 cannnot run because it must wait for DO8-15 to execute. DO8-15 cannot execute because it must wait for AI0-7.
    You should:
    Uncheck the diagram option "Auto insert feedback nodes in cycles" to make sure to get broken wires so it is easier to find the problem.
    FIx your dataflow. Please make sure your wires flow left-to-right, it make errors like this less likely. You need to wire the error clusters in the order the subVIS execute.
    I hope this is clear enough, but please ask is you continue to have problems. Good luck!
    Message Edited by altenbach on 07-04-2005 07:18 PM
    LabVIEW Champion . Do more with less code and in less time .

  • Feedback Node Bug?

    I came across an odd situation when using a Feedback Node where a established a delay of more than 1 iteration.  (LV2011)
    I have a waveform datatype.  I wanted to delay the waveform by an iteration of the loop before displaying in a graph, so I added a feedback node.
    Then I realized I wanted to delay it by a few more iterations, so I went into the properties and set the delay to be greater than 1.
    Because I had stale data in the feedback node after 1 run, I wanted to intialize the feedback node, so I right clicked on the initializer terminal and picked create constant.  An array of waveforms was created, and this broke the output of my feedback node since it was wired to a scalar waveform type.
    If I do not have a delay longer than 1, (more normal feedback node), then a scalar waveform is created and no problems.
    Interestingly, I tried the same thing with the more basic numeric datatype, an array was created in one case, a scalar in the other, but the array did not break the output of the feeback node.  I'm not exactly sure what an array into the intializer would mean for a long delay feedback node.  It might make sense that it allows you to create an array of different initial values for each step, and this link on the web help mentions that http://zone.ni.com/reference/en-XX/help/371361H-01/glang/feedback_node/.  But the help embedded in LabVIEW doesn't mention that.  (See attached image.)
    See attached snippet.
    Attachments:
    Example_VI_BD.png ‏33 KB
    Feedback Node Help.PNG ‏145 KB

    Ravens Fan wrote:
    The only other question I have is whether it is appropriate for an array of elements to be generated at the intializer rather than just an element.  A 1 item delay feedback node generates an element,  a 2 or more delay generates an array as default.  What is the difference in the feedback node that treats the creation of that constant differently if Z=1 vs. Z = 2 or more.  It is just a feedback node with a different delay.  While an array would make sense as a data for the initializer for multi-delay feedback nodes, it is just as valid to have a single element as the input if you want the same output to repeat.
    I say yes, it is appropriate to generate an array for a node with a delay > 1, especially given the connection to the unilateral Z transform.  However, you are under no obligation to provide an initial value for all values, you can put a single value into the array and it is equivalent to the scalar input.  You can even put two values in and the second will be repeated until the delay is reached.  With the SR you have to initialize all or none.
    Not everyone has my handy-dandy QD shortcut to convert scalars to arrays (why not?), but I still think it is easier to either live with single element arrays or rip the constant out of the array and rewire than it would be to create a scalar and then reach for the array container or build array.
    My 2c, I rarely increase the delay personally, but I do not do FPGA either.

  • SubVi with feedback nodes used more than once inside a While Loop

    All,
    I have a subvi that does a set of operations and uses 3 feedback nodes. I am using this subvi inside a While Loop a total of 4 times. I've noticed that all instances used share the same result at each corresponding feedback node but I would like to have an individual result from each of them. Is there an easy way to go around this problem? I have come up with ways to avoid this: a) create a different vi for each time the subvi was used. b) use global variables instead of feedback nodes. Is there any easier way to go around this issue?
    ExamplePlease note that both subvi's are the same) If on my first subvi I calculate a maximum value and get 1.29 (then goes to feedback node) on my second subvi i get 1.01 my feedback node at the second subvi still registers the maximum value to be 1.29. (and I want it to be 1.01!)
    Hope this is not too confusing, I've been scratching my head with this for a while, can't find the "easy" button. Thanks in advance.
    -Pop
    Im using 9.0.
    Solved!
    Go to Solution.

    Attaching the code would be helpful. Anyway, I am not sure how multiple feedback nodes are supposed to operate so I will defer that to others to answer. As far as being able to use distinct values or instances if you are using a subVI you could mark it as reentrant. That way each call to it will behave as it it were a copy of the VI and it will have its own memory space. This should include the feedback node. You may be ending up with a single subVI and in reality a single feedback node. If you need to pass data between calls than simply wire the data through. You could also use an Action Engine to store and retrieve values. An AE is a MUCH better solution than a global variable.
    Mark Yedinak
    "Does anyone know where the love of God goes when the waves turn the minutes to hours?"
    Wreck of the Edmund Fitzgerald - Gordon Lightfoot

  • Access to serial and ethernet port in FPGA for cRIO-9068

    hi
    i want to know if i can Access to serial and ethernet port in FPGA for cRIO-9068 like camera IP
    thanks for help

    dalyto wrote:
    thanks
    but how i can i acquire image with IP camera and fpga ???
    The Ethernet hardware interface in the cRIO is not directly connected to the FPGA backplane in a way that you could directly access it. Even if you could it would be a pretty bad idea to try to do. A fully operational TCP/IP network stack implementation in the FPGA would not leave much resources for anything else even on the biggest FPGAs available. That doesn't include support for the typical image compression algorithmes which are even more complicated to implement on FPGA. Even if you would go to highly optimized VHDL code directly it would be a pretty difficult thing to do!
    In fact implemenintg the MAC and PHY of an ethernet interface on the FPGA is totally trivial in comparison. The IP level could also be implemented fairly easily in the FPGA but anything above that is going to give you bad headaches and still will be very limited in number of connections and packet sizes it can support.
    Rolf Kalbermatter
    CIT Engineering Netherlands
    a division of Test & Measurement Solutions

  • Is it possible to put two different colors in tree parent node background and child nodes background?

    Is it possible to put two different colors in tree parent
    node background and child nodes background?
    Any help will be very helpful.
    Thanks

    Hi PanosE,
    Yes, you can set up another Standard Edition Server in child domain and then deploy pool pairing.
    You need to deploy a new Front End Pool for the new Standard Edition Server.
    A similar case for your reference.
    https://social.technet.microsoft.com/Forums/office/en-US/eca4299c-8edb-481e-b328-c7deba2a79ba/lync-2013-standard-edition-lync-fe-pools-in-multiple-domain-single-forest-senario?forum=lyncdeploy
    Best regards,
    Eric
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact [email protected]

  • Project Online - offline project plan prompts for date range to be entered when accessing Resource Usage view

    When I save a project plan to my local computer from Project Online and open it up in an offline mode and access Resource Usage view I get prompted with Date Range dialog boxes with the first one saying "Show resources/assignments that start or finish
    after:" and the second one with "And before:".
    I don't have any filters that are setup in Project Online that are not available in offline mode to trigger these prompts.
    Please let me know what could be causing the date range prompts. Thanks.

    Hi,
    You probably retrieve an enterprise filter into your local file. Just open the organizer from MS Project, go to the filter tab (be sure to have your project selected in the drop down menu at the top left of right of the organizer) and delete the date range
    filter.
    Hope this helps,
    Guillaume Rouyre, MBA, MCP, MCTS |

  • Project Management and Resource Management Reporting Views

    I am wondering if anyone would have and is willing to share some documentation they may have put together around reporting views related to Project Management and Resource Management modules. We are installing the projects suite and I have never done custom reporting out of these modules and would be interested in feedback or documentation anyone may have related to these or any offer of assistance or direction in designing the reporting views.
    Thank you in advance!
    Matt

    hello Tony,
    What I can say. Maybe you should use SAP PPM as a operational Project Management tool and integrate it with WBS elements and projects in SAP PS. Probably it will be the best solution for you.
    The second way is to use a second project structure for project management as you wrote, with different number of this project. So you will have 2 structures one for actual posting of costs and the second for rest management needs and statistical posting of costs. Probably you will need CO substitution for posting of costs to post costs on these 2 structures.
    There will be many other conditions to get right solution but I think this 2 ways are possible.
    Adam

  • Feedback node crashing bug

    I have came across a nasty bug that caused Labview 2010 SP1 (Runnnig Win 7 Ultimate x64 bit) to crash without any warning.
    To replicate the bug do the following:
    Add a numeric control and another indicator to the front panel
    Switch to block diagram and add a feed back node
    Connect the initializer terminal of the feed back node to the output of the control
    Now do ANY of the following to cause the bug:
    Press the run buttong (which is broken due to not connecting the input of the feed back node) it will turn to a normal run without displaying the error
    Do an extra action and undo it, the run button will turn from list error normal
    So far the Vi can be saved normally. Now connect the output of the feed back node to the indicator and try any of the followings:
    Save the VI
    Close the VI
    Create a new project and select to add the VI to the project
    This will cause Labview to crash without any notice!
    When you are at step 4, the bug is there but harmless. Once you combine it with step 5 (connect to indicator), the bug is active and cause crashing. I have attached a snapshot of how the Front panel/block diagram look like before saving (since it can't be saved). Notice how the run button is enabled although the input of the feedback node is not connected.
    I have tried to replicate the error on Labview 2009 but couldn't.
    Attachments:
    FBN Bug.jpg ‏56 KB

    Dear ªL¡
    Thank you for briging our attention to this issue.
    I replicated it on LabVIEW 2010 SP1 and confirmed, that in LabVIEW 2011 it has been fixed.
    Thanks again!
    Best regards,
    Mateusz Stokłosa
    Applications Engineer
    National Instruments

  • Clearing of Feedback Node

    Greetings,
    Is it possible for the Feedback Node to be cleared from our VI?
    So that the feedback node will not use the previous value for the next execution.
    My project is dealing with optics and motorized stages.
    After running it once, for about 1 degree, when we change the movement to 5 degrees,
    the programme will run 1 degree, then 5 degrees.
    Apparently, this is not what we desired.
    So please do assist me.
    Your help is much appreciated.

    Hi,
    Could you post the ocde you've already done?
    Do you know which behavior you expected?
    The behavior you're explaining seems to rely on commands you've done. Where is the problem?
    Olivier L. | Certified LabVIEW Developer

  • Error with target resource of the FPGA in project tree

     Good evening
    I am completing the tutorial about NIeval quit of CompactRIO.
    I am using a RIO 9631 and after compiling the 1st example(simple counter example)
    I get this error:
    "you cannot run this VI because the because the target resource does not match the actual type of device"
    I go to project and I see than FPGA resouerce is RIO0, the same that is by default in the project, the same is in the tutorial guide and the same appears in MAX.
    I have to say I had installed the Labview before testing the card so I only have copied the folder of the tutorials in my desktop and I have opened from there.
    Can u help to solve this error??

    Hi,
    Ok here is some update on the issue:
    After again querying the WF table
    we found that this is the WF which ran
    "PA Mass Assignment Transaction Workflow" (PARMATRX) 5109937 -10001.
    Also the notification went to a person who is not at all related to this project in any way. Want to find out how to over the come with the problem of blue dots and need to find how the submitter attribute value in the WF is getting populated.
    Please let me know your views/hints.
    Thanks
    Anand.

  • Feedback nodes in subvis with multiple instances

    I have a subvi that implements a state machine.  I am using a feedback node to pass the state from one iteration to the next.  I would like to have multiple instances of this subvi, but the problem is that the feedback is shared between all instances so the states get messed up.  I need each instance of the subvi to run independent of the other instances and that its feedback only feeds back from the previous itereation of that subvi instance.  Is this possible or do I need to rename the subvis to make them different and independent?

    You will need to make the subVI's reentrant in order for them to maintain there own dataspace.

Maybe you are looking for