Comments (3)
Page 208 of the manual says that when Vivado can't figure the value of a dynamic iterator, it assumes that all reads depend on write and vice-versa.
In this example:
for (row = 0; row < rows + 1; row++) {
for (col = 0; col < cols + 1; col++) {
#pragma HLS PIPELINE II=1
if (col < cols) {
buff_A[2][col] = buff_A[1][col]; // read from buff_A[1][col]
buff_A[1][col] = buff_A[0][col]; // write to buff_A[1][col]
buff_B[1][col] = buff_B[0][col];
temp = buff_A[0][col];
}
Vivado will not respect a PIPELINE
pragma. The manual states that program has to manually specify the lack of dependency using DEPENDENCE
pragma.
Since we are already very conservative with pipelining and don't allow bank conflicts, we should aggressively use this pragma.
from dahlia.
While thinking about an implementation strategy, I came across this discussion
This comment in the thread is slightly concerning to me:
When a loop or function is pipelined, Vivado HLS unrolls all loops in the hierarchy below the function or loop so as to meet your pipeline directive.
This would mean that some new syntax of the form:
for (let ...) unroll .. pipeline k {
for (...) ... pipeline l {
}
}
might not preserve the semantics we claim it has (where the inner loops has an initiation interval of l
while the outer loops has k
). I'm trying to find more in depth explanation of the pragma. The explanation in Vivado manual isn't complete. @sa2257 do you know of any other sources I should read?
A higher level point is we need to clarify the semantics of pipelining in nested loops.
from dahlia.
The occurrence pragma also seems important for pipelining things effectively. Not sure if there is a clean semantics for those.
from dahlia.
Related Issues (20)
- `--lower` flag handling memory parameters incorrectly.
- Double imports for FuTIL backend HOT 5
- Using fixed point in futil imports or function definitions doesn't work. HOT 3
- Fixed point division not using correct primitive. HOT 1
- Support reverse range iteration HOT 1
- Remove fixed point constants from Dahlia.
- Hoist slow binops incorrectly hoists
- Current Fixed Point Constant Implementation parses numbers incorrectly.
- Multi-cycle binary operations emit incorrect `write_en` guard.
- UnrollBank doesn't re-write same local variable names in different definitions.
- Add `@bound` attribute for loops with statically known bounds. HOT 1
- [Calyx] Don't generate conflicting assignments when lowering unrolled loops
- `split` views not lowered correctly
- [Calyx] Generate non-combinational reads for memories HOT 2
- Support for Constants and Dynamic Loops HOT 4
- Typechecker isSubtype does not handle alias type
- Typechecker Issue HOT 3
- Split views bypass typechecker and allow incorrect loop unrolling
- Parse error in let expression for bitwidth 32 and above
- Test has incorrect lowering HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dahlia.