非阻塞读取 - 2023.2 简体中文

Vitis 高层次综合用户指南 (UG1399)

Document ID
UG1399
Release Date
2023-12-18
Version
2023.2 简体中文

hls::stream.read_nb() 方法会尝试从串流中读取值,成功则返回 true。否则返回 false,队列不受影响。

// Usage of bool read_nb(const T & wdata)

hls::stream<int> my_stream;
int dst_var;

if (my_stream.read_nb(dst_var)) {
 // Perform standard operations
 ...
} else {
 // Read did not occur
 return;
}

非阻塞行为也可以使用含空串流检查的阻塞读取操作来进行建模,如 hls::stream.empty() 方法 中所述。这可能导致不确定行为,应在含复杂测试激励文件的 RTL 仿真中进行验证。

READ_ONLY_LOOP:
while (check != 0) {
   if ( !addr_strm.empty() )
   {
      addr_strm.read_nb(addr_for_HBM);
      hbm[addr_for_HBM] = some_data;
      check[0] = 1;
      ...
   }
   ...
   ...
   check = (check << 1);
   }