[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: New PCI card developing






>From: "Sergey Platovskikh" <sergey.platovskikh@vissim.no>
>To: <pci-sig@znyx.com>
>Subject: New PCI card developing
>Date: Thu, 25 Apr 2002 16:51:34 +0400
>
>We have been using AMCC S5935 for a long time, but it is PCI2.1 compatible
>only, so we expecting some problems (and we have already met) in the newest
>motherboards.


        What were the problems?
I don't believe PCI 2.2 is that different from PCI 2.1.
Isn't the problem specific to AMCC's one rather than the PCI specification 
differences?
For example, I heard that Intel chipsets and SiS chipsets handle target 
transactions differently (SiS chipsets keep deasserting IRDY# for a few 
cycles during the first microaccess. This is allowed by the PCI 
specification. See Master Data Latency 3.5.2.), although they are both PCI 
2.1 or 2.2 compliant.



>Considering this we decided to find a new PCI controller or
>take a PCI core from Altera/PLDA/etc.
>The controller will be connected to Altera APEX chip. Required data rate is
>about 40Mb/s.
>I have checked PLX, Tundra, Galileo, Intel - all of them seems too
>complicated and require complex logic in the Altera chip. PLX9056 seems
>good, but still too complicated (and I haven't foud where to buy it).
>I would really appreciate any advice. May be some other manufacturers are
>producing PCI controllers?
>May be somebody has a successful experience of implementing of PCI cores?
>Can they be used "as is" or two years of investigation will be necessary?


        Opencores.org has a PCI IP core that's free.

http://www.opencores.org/projects/pci/


I have been working on a PCI IP core of my own for about 14 months (Still 
not done, but it will be eventually.), and if you do your own, depending on 
your skill level, it can really take more than a year for development/timing 
closure/verification if you don't know much about HDL and/or FPGA, which was 
the case in my case.
After you try out Opencores.org PCI IP core, and not happy with it for 
whatever reason (The code is, in my own biased opinion, pretty hard to 
understand what's going on . . . ), I can consider letting you use my PCI IP 
core if we can agree on terms, although I have no intention of giving out my 
work for free.
The fee I am thinking of charging will be substantially less than what other 
vendors will charge, which seems to be at least $5,000 for a 
target/initiator PCI IP core. (The only exception will be Xilinx's $2,000 
LogiCORE PCI Spartan-II 'single' project license.)
Whether you use mine or Opencore's one, if your board is going to be a 5V 
PCI card, from my own experience dealing with Xilinx and Altera FPGAs, I 
recommend using Xilinx devices like Spartan-II or Virtex (not Virtex-E or 
-II) rather than Altera's FLEX10KE or APEX20K.
First of all, although FLEX10KE-1 supports 5V PCI, APEX20K doesn't 
officially support 5V PCI. (The APEX20K datasheet says it does, but Altera 
website admits that APEX20K can drive only 8-loads, 2-loads short of the 
requirement. If someone doesn't believe me, I will get the URL that says 
that for you.)
The second reason will be that FLEX10KE and APEX20K have only one IOE (I/O 
Element) FF per IOE, furthermore, an IOE FF cannot do asynchronous preset 
(When RST# is asserted, set IOE FFs to 1.), so PCI control signals like 
FRAME#, IRDY#, TRDY#, etc.'s output FFs cannot be pushed into IOEs.
Spartan-II and Virtex IOB (I/O Block) have three FFs per IOB, an input FF, 
an output FF, and an OE (Output Enable) FF, plus they can handle 
asynchronous reset and preset, so the IOB is more suited for PCI than 
Altera's.
The third reason will be that because Altera IOE isn't suited for PCI, most 
output FFs and OE FFs will come from LABs, and because Altera's fitter 
doesn't seem to do a good job meeting setup/clock-to-output time, I have 
seen highly questionable placements of output/OE FFs. (FFs getting placed 
very far away from the pin, wasting time on routing.)
To give some credit to Altera's fitter, it seems to excel in maximizing fmax 
compared to Xilinx's PAR, but for 33MHz PCI, frequency above 33MHz isn't 
that important, but meeting setup/clock-to-output time is.
I am sure some wlll argue that I should use Quartus II's floorplanner, which 
I have tried in the past, however, once I tried to assign 4 to 5 FFs to a 
LAB, the fitter complained that it cannot assign the FFs to that LAB.
Is that suppose to be a bug or is it FLEX10KE's limitation?
Anyhow, even with all these these bad experiences with FLEX10KE, it is still 
possible to meet 33MHz PCI's timing requirements if you do some manual 
floorplanning, and somehow avoid upsetting the fitter, but I will guess that 
you will have a much easier time with Spartan-II meeting PCI timings since 
my PCI IP core can meet 33MHz PCI timings with only 36 FFs having to be 
placed near the center of the chip to prevent a positive hold time. (Th < 
0ns in PCI.)
Sure, use of a handplaced PCI IP cores from Altera/PLDA can probably solve 
the timing issues, but that costs at least $5,000 for a target/initiator PCI 
IP core, and you sound like that's too much.
Although I said X is better than A here, I work for neither company nor 
their distributors, and the opinions I expressed came from my own 
experiences.
I don't own their stocks either.
        Going back to my shameless self-promotion (Sorry!), I did mine in 
Verilog RTL (You probably use VHDL, since almost all Europeans seem to stick 
to VHDL rather than Verilog.), and the code is vendor independent although I 
added a few Virtex/Spartan-II specific features that can easily be disabled.
I used Xilinx's free ISE WebPACK for the development, and I have done some 
simple (target mode only) testing using Insight Electronics Spartan-II PCI 
card, although the PCI IP core itself can handle no-wait target/initiator 
burst cycles.
It can meet Tsu < 7ns with only automatic P&R (Takes only a few minutes.), 
although 36 FFs have to be handplaced far away from the pin to prevent a 
positive hold time.



Kevin Brace

_________________________________________________________________
MSN Photos is the easiest way to share and print your photos: 
http://photos.msn.com/support/worldwide.aspx