6502.org Forum  Projects  Code  Documents  Tools  Forum
It is currently Wed Sep 25, 2024 6:27 pm

All times are UTC




Post new topic Reply to topic  [ 10 posts ] 
Author Message
PostPosted: Fri Jun 07, 2013 12:51 am 
Offline
User avatar

Joined: Sat Sep 29, 2012 10:15 pm
Posts: 899
I noticed that Michael's MAM65C02 core has a revision designed specifically to run on a Xilinx XC3S50 chip. After cloning the github repo I was confused as to how to go about it. Has anyone done it? Michael, perhaps you (or anyone else) can give me a hand. A clean verilog design for this chip would also make a nice showcase for the core - it seems to be clean enough to be a drop-in replacement for a 65c02.

I happen to have a spare XC3S50 breakout board ready to go:
Image

This breakout board exposes all the pins from an XC3S50-VQ100-5. I think I will wire-wrap the next one as the breadboards give me endless problems.

_________________
In theory, there is no difference between theory and practice. In practice, there is. ...Jan van de Snepscheut


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 2:19 am 
Offline
User avatar

Joined: Mon Apr 23, 2012 12:28 am
Posts: 760
Location: Huntsville, AL
Enso:

Would be glad to answer specific questions regarding the expected use and performance.

I have gone so far as to have a board built for the last posted update. However, I have been tied up on work, so I've not had the time to bring up the design on the board. The parts are burning a hole in the carpet in my office.

Let me clear up a few of things first regarding the M65C02 implementation:

(1) it is not intended as a replacement or emulation of the WDC 65C02S.

It is an example of how to take the core, M65C02_Core, and add the external components needed to construct a 65C02-compatible processor. In another thread, I think that you defined four or five categories of cores. I generally agree with your categories. I would place the M65C02_Core in your category of cores which are capable of executing 65C02 instructions generated by a standard 65C02 assembler. It has never been my intention that the core be anything other than that; I am not particularly interested in playing 6502 games or other retro-computing activities. On the other hand, I am interested in creating a processor core that can be used to power specialized application-specific, FPGA-based products, and I'd like to be able to make use of freely available tools and such.

(2) the M65C02 processor implementation attempts to implement an external memory interface similar to that of a 6502

To provide a bus interface similar to that of a real 6502 mechanism, I decided to use a four clock cycle microcycle. This fixed microcycle length can be extended by an external device, and each additional "wait" state is a multiple of four clock cycles. Thus, the 50% duty cycle relationship of Phi1 and Phi2 is maintained.

(3) I generally adhere to the policy of using synchronous I/O.

I've found over the years that it is difficult to control the differential path delays for asynchronous signal paths. This is particularly true for signals that may drive multiple I/O pins. The M65C02 processor was implemented in a manner that places registers in most (if not all) I/O pins. There is a performance penalty for this design approach, but I was willing to accept the results.

In the process, I've found that I have some asynchronous logic paths in the implementation of my basic core that limit the maximum clock rate at which I can operate the core with synchronous I/O. I've worked out an improvement to the implementation that greatly reduces these delays. However, in the process, the internal architecture has changed so much that it will require a new control structure, i.e. a different microprogram control word, and I've not completed that change.

(4) I wanted to target a low-cost FPGA packaged in a TQFP package.

Although I am comfortable designing with FPGAs packaged in BGAs. On a commercial basis, I can afford to have someone place and attach these components to my designs. Doing FPGA designs for myself, I don't want that expense, and I don't have the patience to develop a reflow plate (like you were looking at doing) for soldering BGAs to my boards.

Thus, the Spartan-3 XC3S50A-1VQx100I FPGA is my target. I have several reasons for choosing that FPGA and package. One of them is that the XC3S200A-1VQG100I is a drop-in upgrade. Another is that I wanted to see how much stuff I could fit into the XC3S50A part.

(5) I designed the clock circuitry to use a standard baud rate oscillator.

In the -1 speed grade, the current core will not work at a bus clock rate greater than 16 MHz. A 14.7456 MHz oscillator is the nearest baud rate frequency. With a -2 speed grade, (not available in industrial temp from Digi-Key when I ordered my parts) an 18.432 MHz oscillator will work just fine. The internal frequency of operation is always 4x that provided. Phi1 and Phi2 are essentially the same as the supplied reference clock. There may a phase shift, so I recommend using Phi1 as the reference for any external UARTs that you may decide to attach to the M65C02.

(6) I have not attempted to implement the nSO pin or function.

This may be of use in some applications, but I believe that the nNMI and nIRQ pins and functions, along with the BRK instruction, should suffice for most applications. I believe that I have implemented the WAI instruction correctly, and also the nVP pin and function. Altogether, the M65C02 should be capable of emulating the external interface of a 6502-compatible processor in a sufficiently accurate manner that you should be able execute most existing code.

(7) The memory interface supports asynchronous SRAMs and EPROMs.

Separate read enable and write strobes are provided. I believe that the basic memory cycle that I've built into the M65C02 will let you easily use low-cost 10-12ns asynchronous SRAMs (0 wait state), and low-cost 70 ns asynchronous Flash EPROMs (1 wait state). I've also used all three of the Block RAMs that are available in the XC3S50A part. Two are used for the microprogram, and 1 is used as a 2kx8 Boot ROM.

An external input pin can be used to write protect the vector area. An on-chip PU enables writes to the 2kx8 Boot ROM so both the ROM and the vectors can be changed by software/firmware.

If these restrictions/limitations are acceptable, then I would be glad for you to use the M65C02 processor implementation that I posted. I will provide as much help as I can given my current schedule and time commitments. If it would help, I would be happy to send you (via PM) a ZIP of the ISE 10.1i project that I used to develop the M65C02. I am confident that the behavioral simulation I have performed has fully tested the design, and it should be fairly simple to bring it up on your prototype HW.

_________________
Michael A.


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 2:22 am 
Offline

Joined: Mon Mar 02, 2009 7:27 pm
Posts: 3258
Location: NC, USA
In addition to what Michael stated, since I see he posted while I was typing in a response regarding your hardware plans:

I see 3 Voltage Regulators on the left of your pic. Where is the FPGA PROM? Does ISE Impact see the PFGA & PROM correctly?

In the short run bread board is quick and dirty, easy to see where the wires go, etc. Wire wrap is much more reliable, good to speeds close to 100MHz, reportedly. Crays ran to 80MHz with wire wrap. Although, you will have to train yourself for the mirrored pins when wiring from your schematics.

_________________
65Org16:https://github.com/ElEctric-EyE/verilog-6502


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 2:42 am 
Offline
User avatar

Joined: Sat Sep 29, 2012 10:15 pm
Posts: 899
Michael, thank you. I would love to get started - please send me the design files. I will try to convert them to ISE 13.3 as that's my current setup.
Your limitations pose no problem. I think it would be great to have a good 6502 core on the minimal Xilinx setup.

I like the solderability andof the TQFP package. The 64 IO pins should to be good enough for many projects.

Oh, I will be wiring in a 128K SRAM (K6R1008V1C-JC10) - I have a bunch of these in stock. I think your core can co-exist with that SRAM without any problems.

Thanks a bunch. Looking forward to getting this to work.

_________________
In theory, there is no difference between theory and practice. In practice, there is. ...Jan van de Snepscheut


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 2:53 am 
Offline
User avatar

Joined: Sat Sep 29, 2012 10:15 pm
Posts: 899
ElEctric_EyE wrote:
I see 3 Voltage Regulators on the left of your pic. Where is the FPGA PROM? Does ISE Impact see the PFGA & PROM correctly?

This breakout board does not have any PROM. I have an XCF01 breakout board, but haven't got to it yet. Impact sees and programs this board without any problems. I have a 60MHz crystal in the upper left, hard to see, on a separate board with the green wire.

After hard-to-debug configuration issues (actually, my wiring errors) with the first iteration of the 6502 playground board I am paranoid, so I made separate breakout boards for everything. This way I can put together a system and verify all connections. The final board will have, in the same form factor (hopefully),

-XC3S50
-XCF01
-2.5V and 1.2V regulators (3.3V expected from outside)
-128KB SRAM
-60MHz crystal

_________________
In theory, there is no difference between theory and practice. In practice, there is. ...Jan van de Snepscheut


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 3:23 am 
Offline
User avatar

Joined: Mon Apr 23, 2012 12:28 am
Posts: 760
Location: Huntsville, AL
Enso:

Sent you the design files by PM.

I will be tied up tomorrow until the evening. Send me a PM or post any questions that you may have. I will try to answer them as quickly as I can.

Keep me posted on your results.

_________________
Michael A.


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 3:40 am 
Offline
User avatar

Joined: Mon Apr 23, 2012 12:28 am
Posts: 760
Location: Huntsville, AL
Enso:

Also yields similar synthesis performance and PAR results using ISE 14.4i. You should have no issues with ISE 13.3

_________________
Michael A.


Top
 Profile  
Reply with quote  
PostPosted: Fri Jun 07, 2013 12:56 pm 
Offline
User avatar

Joined: Mon Apr 23, 2012 12:28 am
Posts: 760
Location: Huntsville, AL
I haven't added the following timing diagram to my GitHUB wiki on the M65C02. It may help in understanding the basic memory cycle of the most recently released implementation.

Attachment:
M65C02 Timing Diagram.JPG
M65C02 Timing Diagram.JPG [ 74.25 KiB | Viewed 2865 times ]

_________________
Michael A.


Top
 Profile  
Reply with quote  
PostPosted: Sat Jun 08, 2013 2:45 pm 
Offline
User avatar

Joined: Thu Dec 11, 2008 1:28 pm
Posts: 10938
Location: England
Thanks for posting the diagram!


Top
 Profile  
Reply with quote  
PostPosted: Tue Jun 11, 2013 6:29 pm 
Offline
User avatar

Joined: Sat Sep 29, 2012 10:15 pm
Posts: 899
Fit the core to the '50.

Interestingly enough, the XC3S50A has only 3 BRAMs while the old XC3S50 has 4!

The pinout is completely different too.

_________________
In theory, there is no difference between theory and practice. In practice, there is. ...Jan van de Snepscheut


Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 10 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 28 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: