Forum Discussion

Altera_Forum's avatar
Altera_Forum
Icon for Honored Contributor rankHonored Contributor
20 years ago

SOPC Builder / Avalon switch fabric problem

Hi all,

I am trying to interface some of my user logic into SOPC builder (V5 build 148). I have succesfully added a simple slave register, using the 'Component Editor'.

Now, what my application needs is master peripheral with a burst transfer interface. As if on cue the Avalon switch fabric now supports burst transfers. The Avalon Interface PDF from Altera (recently updated) describes the burst transfers in detail.

However, no matter what I do I simply cannot create a burst capable peripheral. I simply cannot get the 'Signals' tab of the 'Component Editor' to give me 'Burst count' as a signal option. It's as if the builder simply does not support the creation of user logic with burst interfaces.

Is this true? If not, what signals did you provide to prompt the component editor to give you 'Burst count' as a signal type?

Many Thanks

Tom

5 Replies

  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    I've got the same problem. My solution was to edit manually the class.ptf file for custom component and add port with type = "burstcount". It works! SOPC Builder generates Avalon arbiter with bursts supported.

    Anyway, I wonder why they do not allow to add ports of this type through SOPC Component Editor gui. Who knows, maybe there are problems with correct Avalon burst-aware arbiter generation for user-added components?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Here is the response from Engineering:

    -----------------------------------------------------------------------------------------------------------------------------------------

    The Avalon Interface does support bursting between components. However, the SOPC Builder component editor does not support creating a component with burst support. This delay in adding the support to component editor was decided when an enhanced busting support will be added in Quartus II 6.0 that will change how a user may use burst support.

    Although the component editor does not support creating a component with burst, you can add burst support to a component with some simple editing on the PTF file. Just be aware that in Quartus II 6.0 we will be adding an enhanced version of burst support with byte-enable controls. Any component you implement with the current burst support (5.x) will be forward compatible in 6.0.

    Here is an outline of what you need to manually edit in the PTF file to implemented burst support:

    To obtain bursting support, a manual alteration of the component class.ptf file is required, as below.

    1) Import the hdl into component editor, set burst count signal to export.

    2) Finish defining your component.

    3) In the class.ptf, change burst count to signal type burstcount.

    4) Add this to the component declaration:

    Maximum_Burst_Size = has_burstcount_port? 1 << (burstcountport_width - 1) : 1

    MASTER read_master

    {

    SYSTEM_BUILDER_INFO

    {

    ...

    Maximum_Burst_Size = "XXX";

    }

    }

    NOTES: The Maximum_Burst_Size value “XXX” should be a numerical value of the formula above it. Also when you do a burst, you should not use byte-enables for the burst (This will be changing in version 6.0)

    I hope this helps. If you have any questions please let me know.
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    Hi,

    I am trying to instantiate an Avalon_Slave that allows Burst Transations (I am trying to increase the performance of the read cycles from my custom logic component-any other suggestions besides Burst Transactions to accomplish this ?). I had trouble with instantiating the signal "burstcount" in the Signals Tab of the Component Editor and then I came across this thread. I tried to edit the class.ptf but this didn&#39;t help. I looked through the release notes for Quartus 6.0 but I didn&#39;t see anything about a fix to this feature.

    Can anyone possibly help me ?
  • Altera_Forum's avatar
    Altera_Forum
    Icon for Honored Contributor rankHonored Contributor

    shmueld,

    I haven&#39;t looked into this for a while but in Quartus 5.0 the component editor in SOPC builder did not support the burstcount signal. So you are correct, in order to add it you have to edit the class.ptf file in order to get it to work. Below is the response from Altera support regarding this issue. Note that this is not a real example but it might give you some hints. For my case adding the burstcount signal didn&#39;t increase the efficiency so I just bagged it. I might hit up the Altera bigwigs and let you know what I find out.

    Jake

    RESPONSE FROM ALTERA SUPPORT:

    <div class='quotetop'>QUOTE </div>

    --- Quote Start ---

    After conducting some research on this issue with the factory, it appears that the Component Editor does not support burst signals. Therefore, you will have to modify the class.ptf file by hand to add the burst signals. If you are comfortable with modifying the class.ptf file, then you should be able to do it fairly easily. Here is an example of what to do. (Could not find an example with the burst signals, but this should give you an idea of the modifications to the class.ptf)

    Here is the SSRAM component description and below is the code:

    - You will have to add a PORT section in the PORT_WIRING section for each signal you want to add.

    - You are adding a PORT section for each burst signal and describing the width, direction and such.

    - Is_shared is asking whether you are sharing this signal on a tri-state bus.

    - Type is the Avalon signal type (which is what should be in the pick list in Component Editor).

    Also, I will be submitting an enhancement request with the factory to add support for burst signals in Component Editor."

    MODULE ssram

    {

    class = "altera_avalon_cy7c1380_ssram";

    class_version = "1.0";

    iss_model_name = "altera_memory";

    HDL_INFO

    {

    }

    WIZARD_SCRIPT_ARGUMENTS

    {

    }

    SLAVE s1

    {

    PORT_WIRING

    {

    PORT address

    {

    direction = "input";

    is_shared = "0";

    type = "address";

    width = "19";

    }

    PORT adsc_n

    {

    direction = "input";

    is_shared = "0";

    type = "begintransfer_n";

    width = "1";

    }

    PORT burstcount

    {

    direction = "input";

    is_shared = "0";

    type = "byteenable_n";

    width = "4";

    }[/b]

    --- Quote End ---