Silicon Zeroes

Silicon Zeroes

View Stats:
Jokokoe Sep 20, 2017 @ 5:10am
"Product" level
Hello everyone ! I've been working on this level and I must admit I have some troubles because of the clock period.

Here is what I've done so far :

I use a counter that start at 0 and another one that start at 1. I multiply to two values from the reading modules associated then write the result so when a new cycle start, the first value multiplied will be the result of the last cycle.

Problem : Doing like this take 32mTick per cycle which is far more than the 22 required.

If I put some latches (or register) between the reading modules and the multiplier module I have 22mTick (sounds like I have to dig this way), but the problem is that it take one more turn to write the value in the good slot, so the value multiplied at next cycle is no more the overwritten slot but the initial value.

Any advice ? Thank you !
< >
Showing 1-3 of 3 comments
Kitsune Zeta Sep 20, 2017 @ 11:52am 
Ah, the Products level? set every slot to the product of itself and all prior numbers?

You are on the right track with the use of Registers to cut down the cycle time (there's a reason it gives you a "Plus 22 more mTicks" on the time limit). You may need to find a more efficient setup. My solution (which is over the ideal module count, but whatever) has a 15mTick cycle, with the longest path shared by two paths. It also has a single read module.

A couple suggestions, influenced by my own solution:

1. Only ever read from a memory address once. I suspect this is where you're failing.
2. When you write a product, don't discard the number you just got as a result, especially if you're otherwise just going to re-read it from memory anyways.
3. don't forget you can have up 8 different values on a single register module, and the number of values has no effect on its speed.
Jokokoe Sep 21, 2017 @ 1:23pm 
Thanks for the advice ! I'm now only using one read module and some registers. I definitely need to improve my solution tought ( 20 modules, 190 ticks). I used 8 multiplier modules, but I know I could only use one and make some kind of loop with it, but I still need to find how ! ;)
FeedbackControl Sep 22, 2017 @ 4:28pm 
For the first multply, there's no data yet. I used an input selector, with the Select being a '1' through a latch to start it at '0' for the first cycle.

I used 1 multiply module, and store that in a register along with its target address so that the cycle time doesn't have to have a multiply + a write. This register also doubled as my 'history', so that I could use it for the next cycle's multiply.


One trick I found out to use is to make a solution that functionally works (it may time out), and then add a register stack (usually after the 1st read) to pipeline that solution. You have to find a spot in your modules to insert it before the inputs of all the dependent modules to the right.
< >
Showing 1-3 of 3 comments
Per page: 1530 50