J
Joseph H Allen
Guest
I've been wondering if there could be a successful (not too large,
reasonable clock frequency) soft-core FPGA version of a low end variant of
the Mill. One issue with FPGAs is that only two-port memory is available.
It's not so hard to make extra read ports with these, but extra write ports
are a big problem. This pretty much precludes any sane implementation of
Tomasulo's algorithm for OOE.
If I understand "the belt" properly, the number of write ports is set to
just the number of pipelines (or maybe to two to support the spilling). The
pipes need to be able to read from anywhere, but we can do that with extra
read ports and one extra mux stage. Anyway, it seems like a nice way to get
superscalar on an FPGA.
Perhaps Out of the Box Computing has an FPGA version now already for bring
up? Very curious what clock frequency they are getting..
--
/* jhallen@world.std.com AB1GO */ /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0%79-77?1:0<1659?79:0>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}
reasonable clock frequency) soft-core FPGA version of a low end variant of
the Mill. One issue with FPGAs is that only two-port memory is available.
It's not so hard to make extra read ports with these, but extra write ports
are a big problem. This pretty much precludes any sane implementation of
Tomasulo's algorithm for OOE.
If I understand "the belt" properly, the number of write ports is set to
just the number of pipelines (or maybe to two to support the spilling). The
pipes need to be able to read from anywhere, but we can do that with extra
read ports and one extra mux stage. Anyway, it seems like a nice way to get
superscalar on an FPGA.
Perhaps Out of the Box Computing has an FPGA version now already for bring
up? Very curious what clock frequency they are getting..
--
/* jhallen@world.std.com AB1GO */ /* Joseph H. Allen */
int a[1817];main(z,p,q,r){for(p=80;q+p-80;p-=2*a[p])for(z=9;z--q=3&(r=time(0)
+r*57)/7,q=q?q-1?q-2?1-p%79?-1:0%79-77?1:0<1659?79:0>158?-79:0,q?!a[p+q*2
]?a[p+=a[p+=q]=q]=q:0:0;for(;q++-1817printf(q%79?"%c":"%c\n"," #"[!a[q-1]]);}