仅对英特尔可见 — GUID: axa1566448364572
Ixiasoft
4.2. 可变延时MM主接口的LSU控制
控制 Intel® HLS Compiler Pro Edition使用的load-store units(LSU)类型,以与可变延时Memory Mapped (MM) Host接口互动,有助于节省设计中的面积。您还可能遇到禁用加载/存储与其他负载/存储操作静态合并的情况,以有益于设计性能。
查看以下教程,了解有关控制LSU的信息: <quartus_installdir>/hls/examples/tutorials/best_practices/lsu_control.
要想知道是否需要LSU控制,可查看组件的High-Level Design Reports,尤其是Function Memory Viewer,以查看 Intel® HLS Compiler Pro Edition推断的存储器访问码型(及其相关LSU)是否符合预期的存储器访问码型。如果不符合,则请考虑控制LSU类型,LSU合并,或两者兼顾。
控制创建的LSU类型
Intel® HLS Compiler Pro Edition创建突发合并型LSU或流水线型LSU。
通常, 当希望LSU处理连续存储器字的多个加载/存储请求时,请用突发合并LSU。突发合并LSU会尝试将请求“动态合并”为较大突发,以便更加有效地利用存储器带宽。
流水线化LSU显著减少占用FPGA面积,且无需合并即可单独处理加载/存储请求。当您的设计空间有限或对无需连续访问可变延迟MM Host接口时,该处理很有用。
component void
dut(mm_host<int, dwidth<128>, awidth<32>, aspace<4>, latency<0>, waitrequest<1>> &Buff1,
mm_host<int, dwidth<32>, awidth<32>, aspace<5>, latency<0>, waitrequest<1>> &Buff2) {
int Temp[SIZE];
using pipelined = lsu<style<PIPELINED>>;
using burst_coalesced = lsu<style<BURST_COALESCED>>;
for (int i = 0; i<SIZE; i++) {
Temp[i] = burst_coalesced::load(&Buff1[i]); // Burst-Coalesced LSU
}
for (int i = 0; i<SIZE; i++) {
pipelined::store(&Buff2[i], 2*Temp[i]); // Pipelined LSU
}
}
禁用静态合并
静态合并通常都可获益,因为通过将多个加载/存储操作静态合并为更宽的加载/存储操作可减少设计中LSU的总数
但也存在静态合并导致的访问未对齐,而您可能并不希望出现这种情况。此外还会出现您打算一次仅运行其中一部分,但多个加载/存储被合并的情形。该情况下,请考虑禁用您不希望合并的加载/存储操作的静态合并。
component int dut(mm_host<int, dwidth<256>, awidth<32>, aspace<1>, latency<0>, waitrequest<1>> &Buff1, int i, bool Cond1, bool Cond2) { using no_coalescing = lsu<style<PIPELINED>, static_coalescing<false>>; int Val = 0; if (Cond1) { Val = no_coalescing::load(&Buff1[i]); } if (Cond2) { Val = no_coalescing::load(&Buff1[i + 1]); } return Val; }