FPGA Intellectual Property
PCI Express*, Networking and Connectivity, Memory Interfaces, DSP IP, and Video IP
6343 Discussions

Avalon St IPs "firstSymbolInHighOrderBits" parameter

Altera_Forum
Honored Contributor II
965 Views

Hi all! 

 

I have a problem when connecting my IP to standard Altera's AvST IPs. My IP has AvST interfaces with "firstSymbolInHighOrderBits" parameter set to "false". But when I'm trying to connect it to AvST Demultiplexer or AvST Adaptor Qsys reports an error: "demultiplexer_1.in has its first symbol in the high-order bit positions, but myIP.ast_data_out does not". And there's no such parameter in Altera's IPs. 

 

Please advise.  

BR, Ilya.
0 Kudos
1 Reply
Altera_Forum
Honored Contributor II
244 Views

Pretty much *all* of the Av-ST Altera IP cores work on having the first symbol in the upper bits. So if possible you should to so as to make things easier. 

 

If your core has only one symbol per beat (i.e. the data symbol width is equal to the data bus width), then you just need to set the "firstSymbolInHighOrderBits" parameter on the interface to be "true" - doing so in this case will not change anything. 

 

If the core has multiple symbols per beat, it can be a little trickier. But there are three options: 

 

1) you redesign the logic with the first symbol in the upper bits. 

 

2) you leave the logic the same, but add a simple remapping to the input and output port, for example in Verilog: 

 

genvar idx; generate for (idx = 0; idx < NUMBER_OF_SYMBOLS; idx=idx+1) begin : remap_loop localparam newidx = NUMBER_OF_SYMBOLS - idx - 1; assign external_src_data = internal_src_data; assign internal_snk_data = external_snk_data; end endgenerate  

 

That will add no additional logic in the final design (it just rearranges the bus) and allows you to set the "firstSymbolInHighOrderBits" parameter set to "true" without having to redesign any of your internal logic. In fact if you are using the core for other things as well as Qsys, you can control the above using a parameter: 

 

genvar idx; generate if (FIRST_SYMBOL_IN_UPPER) begin for (idx = 0; idx < NUMBER_OF_SYMBOLS; idx=idx+1) begin : remap_loop localparam newidx = NUMBER_OF_SYMBOLS - idx - 1; assign external_src_data = internal_src_data; assign internal_snk_data = external_snk_data; end end else begin assign external_src_data = internal_src_data; assign internal_snk_data = external_snk_data; end endgenerate  

 

3) I believe there is an Avalon-ST data format adapter core. I can't remember off the top of my head, but this may provide the capability of doing the above remapping. You instantiate an instance of the format adapter and match the "source" setting to your modules source, and the "sink" setting to the demultiplexer cores sink. The module then handles the adaption. The downside of this compared to (2) is you end up having to instantiate multiple copies of the format adapter which can be a pain.
0 Kudos
Reply