-
Notifications
You must be signed in to change notification settings - Fork 52
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
A few more FuTIL questions. #214
Comments
The
When you run this program through a simulator, you will notice that the simulation trace contains a signal 3a. 3b. This is a so-called combinational group---a group that immediately compute the results. Their semantics is not yet precise. See the discussion in #207. |
Thanks Rachit. A few follow-ups & new questions below. Follow-up for 3a, Is there a 1:1, i.e. New Q1: about dot.data: New Q2: Can you tell me where |
Indeed! While FuTIL programs can specify those and we compile them but the semantics are not quite clear. This is also what the discussion about #207 is trying to get at.
Ah, this is true when you're working with CPUs. But with FuTIL, you're the one who's building that specific hardware so you get to decide who many cycles things take! For example, registers (memories) in hardware take one cycle to propagate their state from input to output which is the key way to add more cycles to an operation. For example, you add four registers in a multiplier's logic and now it takes 4 cycles!
The Dahlia compiles to FuTIL by "hoisting" all local variables to the top and turning them into a register. The data is providing a value of that. When we clean up our interfaces a bit more, you shouldn't see that variable.
|
@cgyurgyik if the answers make sense, please close the issue. |
I'm still in the process of figuring out the process of Dahlia -> FuTIL -> verilog, so any help that in regard is great.
Edit: ^
fud
is the answer to this from Slack chat.I had a few more questions on top of that.
inner_multiplies
.I want to do the following:
How come I can't take the
&
of these done cases? Unnecessary perhaps, i.e. is it guaranteed that within a group, reg_inner1 will be completed before reg_inner2, and so on?Given a function component
X(a: 32, b:32) -> (res: 32)
How can I put in some dummy values to actually test the result? I believe I just make a new componentmain() -> () { ... }
and add some values fora, b
, but how do I see the value ofres
?In fib.expect, I see:
3a. What is
<"static"=0>
?3b. You set cond0[done] to 1 immediately. Why is this? Won't this mean that the rest may not necessarily compute, or is this not the case? If it is not the case, why would one put it in the beginning rather than the end of the group?
The text was updated successfully, but these errors were encountered: