So something like this should avoid 3 ported RAM?
Code:
BRK0: AB = { QAWXYS[SEL_SPP], regfile };
Before all the modifications to make a relocatable stack and zero page, with what is presently on Github(commit#b4acf177ad300aa40a48cb280f66aca6becaeed3), max speed with a constraint of 10.7ns was 97MHz.
If the above is ok, (it does seem to work in simulation), max speed is 89MHz with a constraint of 11.2ns. 11.0ns fails. I made 2 opcodes at the base matrix $xx00_xx00_00x0_0111, so there are 32 opcodes total that transfer a value from any accumulator to either the ZeroPage Pointer or the StackPage Pointer. That should be enough I think.
EDIT: I reread, and see that I still need to make the 'shadow' register. Half way there! I'll post what I have so far on Github since we're confident in a good outcome.
EDIT: Oh, now I follow you! Thanks for the code. Working... 11.0ns passes! Trying 10.8ns constraint... Drat! It fails, but this is on the laptop
without the SmartXPlorer optimizations. Firing up the desktop with the optimizations... Fails 11.0ns. Rerunning SmartXPlorer, it's following a different approach this time... Now it passes 11.0ns on the desktop. Trying 10.8ns... Fails.
Conclusion: I didn't retry a SmartXPlorer run on the desktop before the addition of the shadow write registers, which may have gotten the constraint to pass at 11.0ns as well, but as Arlet has said, anything added afterwards we would notice a substantially bigger decrease in speed. Overall, I'm glad the speed is back up to a 11.0ns constraint! even with this powerful feature of zero page and stack page relocation feature that's been added.
Testing continues... I see something I don't like with the INC A ($001A) opcode. It's a decode and reg opcode, but the IR seems to only recognize the DECODE portion and not the REG. Everything works, but IR is skewed from 'statename" for the rest of the simulation. The thing is, all other accumulator INC's($xx1A) display properly in ISim. Any suggestions where the problem my lie?
Here's the proof of speed from ISE13.4 before all recent mod's:
Code:
Timing summary:
---------------
Timing errors: 0 Score: 0 (Setup/Max: 0, Hold: 0)
Constraints cover 1115709 paths, 0 nets, and 8144 connections
Design statistics:
Minimum period: 10.246ns{1} (Maximum frequency: 97.599MHz)
------------------------------------Footnotes-----------------------------------
1) The minimum period statistic assumes all single cycle delays.
Analysis completed Mon Apr 23 00:31:08 2012
--------------------------------------------------------------------------------
And after all mod's with Arlet's shadow write reg's and SmartXPlorer:
Code:
Timing summary:
---------------
Timing errors: 0 Score: 0 (Setup/Max: 0, Hold: 0)
Constraints cover 1370332 paths, 0 nets, and 8928 connections
Design statistics:
Minimum period: 10.759ns{1} (Maximum frequency: 92.945MHz)
------------------------------------Footnotes-----------------------------------
1) The minimum period statistic assumes all single cycle delays.
Analysis completed Mon Apr 23 06:30:28 2012
--------------------------------------------------------------------------------