R
Rick C
Guest
Just had my first taste of the company supplied software from Gowin Semiconductor. It\'s ok. Documentation is terrible being not much more than a listing of the menu items. Lots of features are lacking.
My test file is a simple 11 bit down counter described three slightly different ways to see what might be the best for my current design which is going to have a lot of counters. Typically they need an enable input to kick the counter off and a carry output to indicate the counter has reached it\'s terminal count (zero). A bit of combining enable logic and it\'s ready to act as the main state machine control for nearly everything I\'m going to have to do.
To be able to halt the counter the carry output is directly carry driven, not registered. So that means the counter has to be a signal... I would have liked encapsulating it in the process as a variable. So the process just has the counter being incremented on the enable input combined with the inverted carry.
In a couple of versions I use a procedure to generate nxt_cnt and carry_out as a concurrent statement, one using unsigned and one using integers, the carry being generated by adding a msb to the adder in each case. The third version uses an integer for the counter and does a modular subtract of one in the process. The carry is a concurrent statement testing for the counter being equal to zero. To my surprise when tested on Synplify for Lattice, all three gave the same logic! So if testing for zero can be equated to a carry out of a decrementer it\'s all good.
But it\'s not all good. The Gowin software seems to make a dog\'s breakfast out of it and adds a bunch of logic that shouldn\'t be needed. They don\'t have an RTL view feature, so it\'s hard to tell just what they\'ve done. For one the zero test is being done as a zero test by oring every bit. I can\'t figure out the rest without drawing the schematic or something. It is using the same number of LUTs, but also listed is 10 ALUs which seem to be LUTs used as adders. I would expect to see 33 or 36 of those, not 10!
Maybe the FAE can help.
--
Rick C.
- Get 1,000 miles of free Supercharging
- Tesla referral code - https://ts.la/richard11209
My test file is a simple 11 bit down counter described three slightly different ways to see what might be the best for my current design which is going to have a lot of counters. Typically they need an enable input to kick the counter off and a carry output to indicate the counter has reached it\'s terminal count (zero). A bit of combining enable logic and it\'s ready to act as the main state machine control for nearly everything I\'m going to have to do.
To be able to halt the counter the carry output is directly carry driven, not registered. So that means the counter has to be a signal... I would have liked encapsulating it in the process as a variable. So the process just has the counter being incremented on the enable input combined with the inverted carry.
In a couple of versions I use a procedure to generate nxt_cnt and carry_out as a concurrent statement, one using unsigned and one using integers, the carry being generated by adding a msb to the adder in each case. The third version uses an integer for the counter and does a modular subtract of one in the process. The carry is a concurrent statement testing for the counter being equal to zero. To my surprise when tested on Synplify for Lattice, all three gave the same logic! So if testing for zero can be equated to a carry out of a decrementer it\'s all good.
But it\'s not all good. The Gowin software seems to make a dog\'s breakfast out of it and adds a bunch of logic that shouldn\'t be needed. They don\'t have an RTL view feature, so it\'s hard to tell just what they\'ve done. For one the zero test is being done as a zero test by oring every bit. I can\'t figure out the rest without drawing the schematic or something. It is using the same number of LUTs, but also listed is 10 ALUs which seem to be LUTs used as adders. I would expect to see 33 or 36 of those, not 10!
Maybe the FAE can help.
--
Rick C.
- Get 1,000 miles of free Supercharging
- Tesla referral code - https://ts.la/richard11209