Closed ikwzm closed 8 years ago
Something like following should work, but I guess I have to fix the initializations on reset issue here too. // BEGIN object Fib = Kernel.clone();
channel Fib.in = int; channel Fib.out = int;
def Fib.main() { while (true) { int param = in; int curr; int next; int prev; int i; curr = 0; next = 1; for (i = 0; i < param; ++i) { prev = curr; curr = next; next = next + prev; } out = curr; } }
Fib.compile(); Fib.writeHdl("fib.v"); // END
oops. wrong indent. I'll let you know when confirmation is done.
I fixed uninitialized output registers on reset, but I found while(true) loop is not working :cry:
Looking into it...
btw. the above code will output verilog input/output like
module fib(clk, rst, channel_out_data, channel_out_en, channel_out_rdy, channel_in_data, channel_in_en, channel_in_rdy);
Both channel_out and channel_in have _data, _rdy and _en to handshake the timing.
It seems almost working, but there are some remaining issues around optimizers.. still investigating.
I wrote fib.n
generated fib.v
I wrote fib_test.v(test_bench for fib.v)
simulation on Xilinx Vivado 2015.3
Without becoming infinite loop , it seems they've been out of the loop at one time . Do I make a mistake in anything?