I have worked hard on finding a more synchronous design by using a higher frequency oscillator on the System controller CPLD.
So the test frequency right now is 64MHz, which I am dividing down to 32MHz, which drives the 286_CLK.
Further divisions then drive the PCLOCK and SYS_CLK main clock frequencies of the PC/AT system control logic.
Well, the idea is to use the much faster clock frequency of 64MHz and try to modify more areas of the system control to storing and clearing signals by clocking only, rather than using the asynchronous preset and clear of flipflops.
In the current stable asynchronous version of system control I am using some signals that drive the cycle termination in the READY logic which has managed to shift the timing to obtain a functional READY at 22.4MHz.
So these days I am looking at trying to find ways to separate these different areas more, particularly so we could then simplify the READY logic more to include/need only the minimal signals necessary and still arrive at the functional READY timing for all cycle types.
The idea is using the double input clock frequency to clock the READY sampled conditions. I named the new double clock signal 2FCLOCK to indicate it's double the input clock. This signal basically can register and shift data at the resolution of the FCLOCK transitions, rising or falling edge, or mid way in the high or low half of the FCLOCK signal, around 7.8125 ns granularity when being able to choose the rising or falling edge.
In addition, have linked the command on/off timing to the 286_CLK falling edge for all commands.
Because of the timing in the system controller CPLD it has been proven difficult to be able to do functional testing because when testing a certain logic, the outcome also depends on the accuracy of all the logic combined.
I have noticed today that very subtle compilation differences may occur where one result is fully functional and stable, while the other result of the same functional logic does display some timing issues.
After switching to the 2FCLOCK design, I have removed some gates previously used to shift the timing because these now stopped the entire design from even working. After that I got a POST 10 pause, some beeping, and the system continued to execute the POST and booted partially.
After more modifications where I am now resetting the 286 CPU with the 2FCLOCK falling edge, I changed the ARDY register to a normal flipflop combined with a logic gate, I was able to then remove IOCH_RDY from the READY sample stage, including it only in the ARDY stage itself. I was also able to use READY to reset the termination cycle shifter because END_CYC is no longer needed when the READY end stage is already active.
The problem is really that I am not sure when the test result differs whether this is due to a compilation variation, or that the changed circuit is actually functionally valid. This kind of randomness during the testing does make it more difficult to make any assumptions. So I have experienced a lot of moments where I had to take a few steps back and continue from the last functional version of the development process. I am trying to interpret what is going on with the test results in order to determine a possible direction for the whole design where I can proceed to what I would like to see more in the design.
What I am trying to do is just separate areas of the design so we can have the clear view on which signal is doing what, and to attempt to use signals only where they are actually being needed, and not anywhere else for shifting the timing. Otherwise I also aim to reduce the number of "dual purpose" signals in the design, trying to assign clear functional parts while dealing with the above limitations with sometimes stable, and then suddenly not, where the cause actually turned out to be from compilation results from the same logic being different.
As I removed the dynamic clock, I am clocking the 286 CPU currently at 16MHz because I know this should be able to run fully stable with VGA cycles, loading the BIOS etc at full unmodified speeds. Well, for a long time I have seen DOS text errors happening and getting only to POST 10 or beeping and continuing on to a partial boot. Even with the dual clock model, the lower CPU clock speeds around 16MHz didn't work well yet. Sure I could have created alternative projects to support this but of course the ultimate goal is still running at highest clocks, so this was not a priority.
Anyway, this afternoon I finally got a design compiled which is able to run without any beeping from the MR BIOS when turning the system on! It was pretty weird because I thought the system got stuck on the POST and not able to beep because of that, but then I suddenly saw the system passing the POST and doing a complete boot! This is a pretty significant progress in our project because I had not yet been able to get this result at a lower 16MHz CPU clock even since the start of working on the REV3D system. So we definitely seem to be getting some rewards now from using the higher clock speed. I will also do more tests at even lower clock speeds just to see what happens. If the design is synchronous enough, it may now even be able to function at the lower clocks, I will get back on that after more testing.
I also added some tiny stick-on heatsinks on the data bus driver and system controller today, which indeed enabled the system to run stable with a 8cm fan blowing on the CPLD area, and now with pleasantly low RPMs. So indeed having the heatsinks on the 100 pin CPLDs allows these CPLDs to cool down much more easily, which is definitely noticeable with the warmer ambient temperatures these days. It's a lot better for my development and testing efforts because the fan is really relatively quiet again, and it's the same fan speed as I was used to having before.
Okay, I will do more testing and look at more areas to get the circuits more synchronous. The READY logic is now almost fully synchronous, except the asynchronous clear of the first sample register stage. Though this may be necessary for now because of compilation outcomes differing. I may be able to find ways to eliminate this later on, though having an asynchronous clear to turn off a sample stage is for now a lot more acceptable thing to have. I will be pleased if the eventual outcome would be able to provide us at least with a more synchronous than before design, and if possible, of course I will try to get as many more areas synchronous as possible.
I have uploaded this more synchronous fixed 16MHz CPU clock fully stable version to GitHub.
The JEDEC file is included in the archive and can be directly programmed.
Builders can try to compile and convert to JEDEC again however if this is not fully working, then better use the JEDEC file itself and keep the downloaded archive as a backup. All other CPLDs can be programmed with the may archive in the same GitHub. So you can program the project I uploaded today into the System controller and then swap the oscillator to 64MHz, and you can test this version. Switching back to the original system controller programming, you can swap the oscillator back to 44.8MHz and update the system controller CPLD again.
So a big progress has been made for the project today!
Kind regards,
Rodney
So the test frequency right now is 64MHz, which I am dividing down to 32MHz, which drives the 286_CLK.
Further divisions then drive the PCLOCK and SYS_CLK main clock frequencies of the PC/AT system control logic.
Well, the idea is to use the much faster clock frequency of 64MHz and try to modify more areas of the system control to storing and clearing signals by clocking only, rather than using the asynchronous preset and clear of flipflops.
In the current stable asynchronous version of system control I am using some signals that drive the cycle termination in the READY logic which has managed to shift the timing to obtain a functional READY at 22.4MHz.
So these days I am looking at trying to find ways to separate these different areas more, particularly so we could then simplify the READY logic more to include/need only the minimal signals necessary and still arrive at the functional READY timing for all cycle types.
The idea is using the double input clock frequency to clock the READY sampled conditions. I named the new double clock signal 2FCLOCK to indicate it's double the input clock. This signal basically can register and shift data at the resolution of the FCLOCK transitions, rising or falling edge, or mid way in the high or low half of the FCLOCK signal, around 7.8125 ns granularity when being able to choose the rising or falling edge.
In addition, have linked the command on/off timing to the 286_CLK falling edge for all commands.
Because of the timing in the system controller CPLD it has been proven difficult to be able to do functional testing because when testing a certain logic, the outcome also depends on the accuracy of all the logic combined.
I have noticed today that very subtle compilation differences may occur where one result is fully functional and stable, while the other result of the same functional logic does display some timing issues.
After switching to the 2FCLOCK design, I have removed some gates previously used to shift the timing because these now stopped the entire design from even working. After that I got a POST 10 pause, some beeping, and the system continued to execute the POST and booted partially.
After more modifications where I am now resetting the 286 CPU with the 2FCLOCK falling edge, I changed the ARDY register to a normal flipflop combined with a logic gate, I was able to then remove IOCH_RDY from the READY sample stage, including it only in the ARDY stage itself. I was also able to use READY to reset the termination cycle shifter because END_CYC is no longer needed when the READY end stage is already active.
The problem is really that I am not sure when the test result differs whether this is due to a compilation variation, or that the changed circuit is actually functionally valid. This kind of randomness during the testing does make it more difficult to make any assumptions. So I have experienced a lot of moments where I had to take a few steps back and continue from the last functional version of the development process. I am trying to interpret what is going on with the test results in order to determine a possible direction for the whole design where I can proceed to what I would like to see more in the design.
What I am trying to do is just separate areas of the design so we can have the clear view on which signal is doing what, and to attempt to use signals only where they are actually being needed, and not anywhere else for shifting the timing. Otherwise I also aim to reduce the number of "dual purpose" signals in the design, trying to assign clear functional parts while dealing with the above limitations with sometimes stable, and then suddenly not, where the cause actually turned out to be from compilation results from the same logic being different.
As I removed the dynamic clock, I am clocking the 286 CPU currently at 16MHz because I know this should be able to run fully stable with VGA cycles, loading the BIOS etc at full unmodified speeds. Well, for a long time I have seen DOS text errors happening and getting only to POST 10 or beeping and continuing on to a partial boot. Even with the dual clock model, the lower CPU clock speeds around 16MHz didn't work well yet. Sure I could have created alternative projects to support this but of course the ultimate goal is still running at highest clocks, so this was not a priority.
Anyway, this afternoon I finally got a design compiled which is able to run without any beeping from the MR BIOS when turning the system on! It was pretty weird because I thought the system got stuck on the POST and not able to beep because of that, but then I suddenly saw the system passing the POST and doing a complete boot! This is a pretty significant progress in our project because I had not yet been able to get this result at a lower 16MHz CPU clock even since the start of working on the REV3D system. So we definitely seem to be getting some rewards now from using the higher clock speed. I will also do more tests at even lower clock speeds just to see what happens. If the design is synchronous enough, it may now even be able to function at the lower clocks, I will get back on that after more testing.
I also added some tiny stick-on heatsinks on the data bus driver and system controller today, which indeed enabled the system to run stable with a 8cm fan blowing on the CPLD area, and now with pleasantly low RPMs. So indeed having the heatsinks on the 100 pin CPLDs allows these CPLDs to cool down much more easily, which is definitely noticeable with the warmer ambient temperatures these days. It's a lot better for my development and testing efforts because the fan is really relatively quiet again, and it's the same fan speed as I was used to having before.
Okay, I will do more testing and look at more areas to get the circuits more synchronous. The READY logic is now almost fully synchronous, except the asynchronous clear of the first sample register stage. Though this may be necessary for now because of compilation outcomes differing. I may be able to find ways to eliminate this later on, though having an asynchronous clear to turn off a sample stage is for now a lot more acceptable thing to have. I will be pleased if the eventual outcome would be able to provide us at least with a more synchronous than before design, and if possible, of course I will try to get as many more areas synchronous as possible.
I have uploaded this more synchronous fixed 16MHz CPU clock fully stable version to GitHub.
The JEDEC file is included in the archive and can be directly programmed.
Builders can try to compile and convert to JEDEC again however if this is not fully working, then better use the JEDEC file itself and keep the downloaded archive as a backup. All other CPLDs can be programmed with the may archive in the same GitHub. So you can program the project I uploaded today into the System controller and then swap the oscillator to 64MHz, and you can test this version. Switching back to the original system controller programming, you can swap the oscillator back to 44.8MHz and update the system controller CPLD again.
So a big progress has been made for the project today!
Kind regards,
Rodney
Last edited: