6502.org http://forum.6502.org/ |
|
ATF1508AS multiple latch testing http://forum.6502.org/viewtopic.php?f=10&t=7022 |
Page 1 of 1 |
Author: | banedon [ Sun Feb 13, 2022 9:30 pm ] |
Post subject: | ATF1508AS multiple latch testing |
Hi guys I'm still shuffling along with my Blue816 65816 design - almost there, though. Presently, I'm running tests on my CPLD logic in WinCUPL + WinSim and have run into (hopefully just) a possible simulation snag and was wondering if anyone has encountered this before. I have two 8 bit latches (used as registers) that I want to use which both read their value from, and write their value to, the data bus. When I try to simulate it I find the the output to the databus is always low. If boil the design down to what is needed to test this, the simulator still has the same issue, but when I write the JED file into an actual ATF1508AS it *seems* to behave correctly, but I'm not entirely trusting of it. For those familiar with ATF1508AS / WinCUPL / Abel, is the follow the correct way of doing this (I added pin numbers in for the actual device testing) / have you encountered this and know of any possible gotchas previously doing the same? I'm at the stage where I've all but completed the CPLD and am about to fix the pin numbers, so want to be sure of this. Code: Name Test;
Partno C; Date 01/01/2022; Revision 01; Designer mjkd; Company None; Assembly None; Location None; Device f1508ispplcc84; property atmel {cascade_logic on }; property atmel {fast_inlatch on }; property atmel {foldback_logic on }; property atmel {logic_doubling on }; property atmel {optimize on }; property atmel {output_fast off }; property atmel {pin_keep off }; property atmel {preassign keep }; property atmel {security off }; property atmel {xor_synthesis off }; Pin 2 = iPHI2; /* Fixed pin 2: Main CPU clock (GCLK2) */ Pin 12 = iRWB; /* Fixed pin 12: CPU read/!write */ /* Data bus pin */ Pin 20 = ioD; /* inputs to indicate which latch to read from or write to */ Pin 21 = OptdataselA; Pin 22 = OptdataselB; /* Latches */ Pinnode = LatchA; Pinnode = LatchB; /* write to or read from latch A */ LatchA.L = ioD; /* connect latch A to the data pin */ LatchA.LE = iPHI2 & OptdataselA & !iRWB; /* latch data to latch A if latch A selected and we're writing */ LatchA.OE = OptdataselA & iRWB; /* allow latch A output if latch A selected and we're reading */ /* write to or read from latch B */ LatchB.L = ioD; /* connect latch B to the data pin */ LatchB.LE = iPHI2 & OptdataselB & !iRWB; /* latch data to latch B if latch B selected and we're writing */ LatchB.OE = OptdataselB & iRWB; /* allow latch B output if latch B selected and we're reading */ ioD = (LatchA # LatchB); /* connect the data pin to the output of both latches */ ioD.OE = (OptdataselA # OptdataselB) & iRWB; /* enable the data pin output if we're reading and one of the latches is selected */ |
Author: | gfoot [ Sun Feb 13, 2022 9:39 pm ] |
Post subject: | Re: ATF1508AS multiple latch testing |
Don't you want: Code: ioD = (LatchA & OptdataselA) # (LatchB & OptdataselB) Maybe you could post your .si file to make it clearer what behaviour you're hoping to get though. |
Author: | gfoot [ Sun Feb 13, 2022 11:12 pm ] |
Post subject: | Re: ATF1508AS multiple latch testing |
Thinking about it more, you might also need to use ".IO" to read the input state of a tristate pin but I'm not sure. Here's an example that works for me, based on yours but cut back quite a bit and extended to provide 8-bit registers as I think that's what you said in your main text: PLD file: Code: Name latch8; Date 13/02/2022; Revision 1; Designer gfoot ; Company gfoot ; Assembly None; Location None; Device f1508ispplcc84; PartNo C; /* inputs */ pin = iPHI2; pin = iRWB; pin = OptdataselA; pin = OptdataselB; /* in/out */ pin = [ioD0..7]; /* intermediates */ pinnode = [LatchA0..7]; pinnode = [LatchB0..7]; /* fields */ Field ioD = [ioD0..7]; Field LatchA = [LatchA0..7]; Field LatchB = [LatchB0..7]; /* latch A input */ LatchA.L = ioD.IO; LatchA.LE = iPHI2 & OptdataselA & !iRWB; /* latch B input */ LatchB.L = ioD.IO; LatchB.LE = iPHI2 & OptdataselB & !iRWB; /* combined latch output */ ioD = (OptdataselA & LatchA) # (OptdataselB & LatchB); ioD.OE = (OptdataselA # OptdataselB) & iRWB & iPHI2; Simulator input file: Code: Name latch8;
Date 13/02/2022; Revision 1; Designer gfoot ; Company gfoot ; Assembly None; Location None; Device f1508ispplcc84; PartNo C; ORDER: iPHI2, " ", iRWB, " ", OptdataselA, OptdataselB, " ", ioD0..7, " ", LatchA0..7, " ", LatchB0..7; VECTORS: 0 0 00 ZZZZZZZZ ******** ******** 0 0 10 ZZZZZZZZ ******** ******** 0 0 01 ZZZZZZZZ ******** ******** 0 1 10 ZZZZZZZZ ******** ******** 0 1 01 ZZZZZZZZ ******** ******** 1 1 10 LLLLLLLL LLLLLLLL LLLLLLLL 1 1 01 LLLLLLLL LLLLLLLL LLLLLLLL 1 0 10 01010101 LHLHLHLH LLLLLLLL 1 0 01 10101010 LHLHLHLH HLHLHLHL 1 1 10 LHLHLHLH LHLHLHLH HLHLHLHL 1 1 01 HLHLHLHL LHLHLHLH HLHLHLHL |
Author: | banedon [ Mon Feb 14, 2022 8:55 am ] |
Post subject: | Re: ATF1508AS multiple latch testing |
I tried copy-pasting the file and I got a strange error in WinCUPL followed by a CTD (crash to desktop): "WINCUPL KEY IS NOT UNIQUE IN COLLECTION" I thought it might be the last 2 lines not being a pin array, but that's not it. I'm thinking of looking for or writing a front end for WinCUPL command line as the editor is just so unstable sometimes. In any event, I applied the major change (ioD = (OptdataselA & LatchA) # (OptdataselB & LatchB);) to my own test design and it appears to look fine now - so many thanks . I'll do some further testing this evening as I've got to go to work. |
Author: | gfoot [ Mon Feb 14, 2022 12:53 pm ] |
Post subject: | Re: ATF1508AS multiple latch testing |
banedon wrote: I tried copy-pasting the file and I got a strange error in WinCUPL followed by a CTD (crash to desktop): "WINCUPL KEY IS NOT UNIQUE IN COLLECTION" I thought it might be the last 2 lines not being a pin array, but that's not it. I'm thinking of looking for or writing a front end for WinCUPL command line as the editor is just so unstable sometimes. Yes, it fails at things that you shouldn't need to care about. I recently posted in another thread a bash script I use to wrap the command line, which transformed the way I work with wincupl. It creates all the output files in a subdirectory to keep them out of the way, runs the simulator, and detects and presents errors more clearly, whether they're from the simulator or the compiler. Maybe you can use it or copy the command line, environment variable, etc into your own front end. |
Page 1 of 1 | All times are UTC |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |