Site Home Archive Home FAQ Home How to search the Archive How to Navigate the Archive
Compare FPGA features and resources
Threads starting:
Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Russell Shaw <rjshaw@iprimus.com.au> wrote in message news:<3C042F4B.917F85F8@iprimus.com.au>... > What is a CLB? configurable logic block? Is that the basic logic > cell with ram/flip-flop kind of thing? Hi Russell, A CLB is the most basic unit for Xilinx's parts... Altera has something called an LCELL which is just like a CLB. For Altera's LCELL you basically have 4 inputs that you can "program" with various logic functions. Both the CLB and LCELL work sort of like a RAM lookup table but they have a few other d-flip-flops and carry in/out logic. Take care, >Asher<Article: 37376
Peter Alfke <palfke@earthlink.net> wrote in message news:<3C015E9A.B98CA518@earthlink.net>... > 3. And finally, Altera makes bogus claims about LVDS power consumption, where > they quote not the consumed power (Vcc x Icc ) in the driver, but rather the > power dissipated in the 100 Ohm termination resistor. Nobody cares about this > nice low number, which makes it a candidate for the "Misleading Marketing" > award of the year. Hi Peter, Isn't power consumption for a dynamic circuit is Power=(Capacitance)(Voltage^2)(Freq) not Vcc x Icc. LVDS circuits are typically running at 70+ Mhz...? >Asher<Article: 37377
I think we can handle this in English, but Markus, you can also send me e-mail in German... The only problem occurs when both ports access the same address location. Since you seem to write one port and read the other ( alternating between the two, I suppose), you can never "damage" any data. But you might occasionally read one location while it is being updated by a write on the other port. ( As I posted previously, this problem only occurs when the two accesses occur within the same nanosecond.) Your read may then be a mixture of the "old" and the "new" content. How you solve this problem depends on your overall system. One brute-force way would be two double the RAM size and alternate between the two halves. That costs you RAM and latency, so I call it brute force.... Gruss ins Schweizerland... Peter Alfke, Xilinx Applications ============================= Markus Meng wrote: > "Falk Brunner" <Falk.Brunner@gmx.de> wrote in message news:<9ut9lj$aq0uv$1@ID-84877.news.dfncis.de>... > > "Markus Meng" <meng.engineering@bluewin.ch> schrieb im Newsbeitrag > > news:3c121b73_3@news.bluewin.ch... > > > > > Hi all, > > > > > > We are using the Block RAM's inside the Spartan-II device > > > in order to get a synchronous true dual-ported RAM buffer. > > > > > > The block RAM buffer clocks are being sourced from two different > > > clock domains. > > > > > > When using the design in real word we get sometimes 'data-flicker' on the > > > data we push from one clock domain to the other, not always, > > > only sometimes. As a second test we put in values on one side PortA > > > using a staircase generator - well a counter -. On PortB of the block RAM > > > we read out the the 'staircase'. However sometimes we see something like > > > an interference, a modulation on top of our digital generated staircase, > > > maybe > > > once per thousand scans. The dual ported synchronous RAM we generated > > > with the CoreLoigc tool from Xilinx using version 3.1i. Those are really > > > true > > > dual-ported, right ?? The clocks are really asynchronous to eatch other > > ... > > > > They are. > > > > > The question: How to you have to apply timing constraints for the block > > > ram, or is it not needed? Actually we did constraint the two clocks. Is > > that > > > enough, or is there a need for an additional block ram constraint ?? > > > > ;-)) The constraints only make sure that data within ONE clock domain makes > > it way from FlipFlop to FlipFlop or RAM within on clock cycle. It does NOT > > do anything about synchronization. This is YOUR part. It is the classic data > > crossing clock domain problem, and so it can (and must) be solved. You need > > to synchronize both port access somehow, you have to make sure that the FF > > on the synchonizer going metastable dont kick your system. Go to the Xilinx > > website and have a look at the TechXclusives, there is one article > > discussing exactly your problem. There are also some appnotes about > > asynchronous FIFOs, read them carefully. Twice. Or as long as you really got > > the point of asynchronous clocks. > > > > > Any idea how to furhter find the reason for the problem? > > > > See avove. > > Hi Falk, > > maybe my english is not clear enough. The address generator and > the data FF for PortA are clocked with the clk for PortA. The > same applies for the address generator and the data FF on PortB > of the DualPorted RAM block. Those parts are clocked with the clock > for PortB of the dual ported memory. > > The access can interleave, however the DPM is somehow 'splitted' > in two pages. When a read burst appears on page 0, a write burst > can only appear on page 1. Therefore what kind of additional syn- > chronization is needed in your opinion. I don't get this point > > best regards > markusArticle: 37379
Good news: You can use the BlockRAM and the multiplier independent of each other, with one exception: If you use the BlockRAM in its widest configuation, 36 bits wide, then you have lost access to the multiplier. In all other cases the two functions do NOT overlap. Peter Alfke, Xilinx Applications ================= Sul Weh wrote: > If you use a multiplier does that mean you can't use the block ram that is > associated with it and vice versa. > For example, the virtex II 250 has 24 multipliers and 24 block ram. If I > use all of the multipliers does that mean I cannot use any of the block ram. > > thanks > > SWArticle: 37380
There are two ways to calculate power, I x V or C x Vsquared x f The question is which calculation is appropriate. If the circuit switches rail-to-rail you can figure it either way, and you get identical results. If the switching is not rail-to-rail, you have to think a little: The charge ( each coulomb of it ) that is put on the capacitor comes from the supply, so one of the two voltages in the Vsquared is Vcc. The other V is the switching amplitude. When a device manufacturer quotes power consumption, it has to be the total power "consumed", i.e. the power taken from the Vcc supply, whether it is dissipated in a load resistor or in the drive transistors. ( Power can only end up in a resistive element, ideal capacitors do not dissipate any power. ) Anything else is what I called "bogus", just to avoid the more appropriate words " blatant marketing lie". ( Their choice of words indicated that they knew exactly what kind of wool they were trying to pull over our eyes. I am much more friendly when somebody makes an honest mistake, everybody does occasionally...) I mean, we all got an engineering degree somewhere, sometime, maybe long ago, but this stuff has not changed in more than 100 years... Peter Alfke, Xilinx Applications ============================= "Asher C. Martin" wrote: > Peter Alfke <palfke@earthlink.net> wrote in message news:<3C015E9A.B98CA518@earthlink.net>... > > 3. And finally, Altera makes bogus claims about LVDS power consumption, where > > they quote not the consumed power (Vcc x Icc ) in the driver, but rather the > > power dissipated in the 100 Ohm termination resistor. Nobody cares about this > > nice low number, which makes it a candidate for the "Misleading Marketing" > > award of the year. > > Hi Peter, > > Isn't power consumption for a dynamic circuit is > Power=(Capacitance)(Voltage^2)(Freq) not Vcc x Icc. LVDS circuits are > typically running at 70+ Mhz...? > > >Asher<Article: 37381
Please be specific: Do you mean Moore vs Mealey? A combinatorial state machine is a contradiction in terms. Peter Alfke ============================= Warren Wisnewski wrote: > Is there any way to get Aldec FSM editor to produce a sequential state > machine (vs combinatorial) ? > thanksArticle: 37382
I hadn't tried since 3.1 sp2 or 3. Can you elaborate on the flow to put it in there? I don't believe it is in the library, so I assume you are passing it into the edif as a black box. Do you need to include an edif netlist for it too? Duane Clark wrote: > Ray Andraka wrote: > > > > Yes, in a -6 I believe you will need the TRDY box to make the timing > > for PCI66, and even then it *just* makes it. Unfortunately, that TRDY > > box is onlly accessible in the FPGA editor and it is pretty much > > undocumented, at least publicly. > > > > Create a small test design with the block in it. Run ngd2vhdl. The > result is a small file with a VHDL model of the PCILOGIC. And as I > mentioned "above", I am able to use the PCILOGIC block with the Xilinx > 3.3i (and earlier) tools such as ngdbuild, map, and par. > > -- > Duane -- --Ray Andraka, P.E. President, the Andraka Consulting Group, Inc. 401/884-7930 Fax 401/884-7950 email ray@andraka.com http://www.andraka.com "They that give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety." -Benjamin Franklin, 1759Article: 37383
Duane Clark <dclark@akamail.com> writes: > And by the way, the 3.3i tools handle the PCILOGIC aka "magic TRDY" just > fine for me, despite Xilinx claims that they do not support it. That > includes ngdbuild, map and par, and includes support for timing > constraints on paths that pass through the PCILOGIC. I did not find that > the use of fpga_editor was required. What did you put in your VHDL or Verilog source code to make it use the magic TRDY logic?Article: 37384
Hallo Peter und Falk, your right the missing question is how do I make shure that I don't get this overlapp reading and writing from the same address at the same time. It's done in logic using kind of a master/slave data processing flow. First on PortA all data are written, then an interrupt is being generated and the page bit is toggeled - previous '0' now '1'. On the other side - PortB - a DSP from Analog Device does DMA read bursts and reads out all the required data. In the meantime writing continues but on page '1'. It should work and most of of the time is does. Therefore it mayed get a situation where this overlap happens, but it should not. I will keep you informed. I have to think about how I can measure or catch this problem ... markus Peter Alfke <palfke@earthlink.net> wrote in message news:<3C12D0F8.BFB1CAE@earthlink.net>... > I think we can handle this in English, but Markus, you can also send me e-mail in German... > The only problem occurs when both ports access the same address location. Since you seem to write one > port and read the other ( alternating between the two, I suppose), you can never "damage" any data. But > you might occasionally read one location while it is being updated by a write on the other port. ( As I > posted previously, this problem only occurs when the two accesses occur within the same nanosecond.) > Your read may then be a mixture of the "old" and the "new" content. > > How you solve this problem depends on your overall system. > One brute-force way would be two double the RAM size and alternate between the two halves. That costs you > RAM and latency, so I call it brute force.... > > Gruss ins Schweizerland... > Peter Alfke, Xilinx Applications > ============================= > Markus Meng wrote: > > > "Falk Brunner" <Falk.Brunner@gmx.de> wrote in message news:<9ut9lj$aq0uv$1@ID-84877.news.dfncis.de>... > > > "Markus Meng" <meng.engineering@bluewin.ch> schrieb im Newsbeitrag > > > news:3c121b73_3@news.bluewin.ch... > > > > > > > Hi all, > > > > > > > > We are using the Block RAM's inside the Spartan-II device > > > > in order to get a synchronous true dual-ported RAM buffer. > > > > > > > > The block RAM buffer clocks are being sourced from two different > > > > clock domains. > > > > > > > > When using the design in real word we get sometimes 'data-flicker' on the > > > > data we push from one clock domain to the other, not always, > > > > only sometimes. As a second test we put in values on one side PortA > > > > using a staircase generator - well a counter -. On PortB of the block RAM > > > > we read out the the 'staircase'. However sometimes we see something like > > > > an interference, a modulation on top of our digital generated staircase, > > > > maybe > > > > once per thousand scans. The dual ported synchronous RAM we generated > > > > with the CoreLoigc tool from Xilinx using version 3.1i. Those are really > > > > true > > > > dual-ported, right ?? The clocks are really asynchronous to eatch other > > > ... > > > > > > They are. > > > > > > > The question: How to you have to apply timing constraints for the block > > > > ram, or is it not needed? Actually we did constraint the two clocks. Is > that > > > > enough, or is there a need for an additional block ram constraint ?? > > > > > > ;-)) The constraints only make sure that data within ONE clock domain makes > > > it way from FlipFlop to FlipFlop or RAM within on clock cycle. It does NOT > > > do anything about synchronization. This is YOUR part. It is the classic data > > > crossing clock domain problem, and so it can (and must) be solved. You need > > > to synchronize both port access somehow, you have to make sure that the FF > > > on the synchonizer going metastable dont kick your system. Go to the Xilinx > > > website and have a look at the TechXclusives, there is one article > > > discussing exactly your problem. There are also some appnotes about > > > asynchronous FIFOs, read them carefully. Twice. Or as long as you really got > > > the point of asynchronous clocks. > > > > > > > Any idea how to furhter find the reason for the problem? > > > > > > See avove. > > > > Hi Falk, > > > > maybe my english is not clear enough. The address generator and > > the data FF for PortA are clocked with the clk for PortA. The > > same applies for the address generator and the data FF on PortB > > of the DualPorted RAM block. Those parts are clocked with the clock > > for PortB of the dual ported memory. > > > > The access can interleave, however the DPM is somehow 'splitted' > > in two pages. When a read burst appears on page 0, a write burst > > can only appear on page 1. Therefore what kind of additional syn- > > chronization is needed in your opinion. I don't get this point > > > > best regards > > markusArticle: 37385
I realize that it is not a big deal at all, but I got my PCI IP core to meet 33MHz PCI timings if I synthesized it and floorplanned it for Spartan-II speed grade -6 (XC2S150-6CPQ208). I didn't use the special TRDY logic you were talking about because I wanted my PCI IP to be vendor independent, and ISE WebPack doesn't come with FPGA Editor (I wish ISE WebPack came with FPGA Editor. It still comes with Floorplanner though). In fact, the part I had the most problems was keeping the Tsu of paths starting from either FRAME# (pin 23) or IRDY# (pin 24) propagating through 4 levels of LUTs, ultimately reaching AD[0] (pin 67) or AD[31] (pin 203) below 7 ns. I must say that Floorplanner is very effective in reducing routing delay, and also shows that how bad Map and PAR are in grouping and placing LUTs. Now the problem is to meet 33MHz PCI timings for Spartan-II speed grade -5 (XC2S150-5CPQ208) because Insight Electronics Spartan-II Development Kit has Spartan-II speed grade -5 on the PCI card . . . For speed grade -5, I reduced Tsu down to 8.302 ns with the help of Floorplanner, but haven't been successful reducing it further. Currently, the worst path I got starts from IRDY# (pin 24), and goes through 4 levels of LUTs, and reaches AD[2]'s (pin 62) IOB output FF. The logic delay is 5.372 ns and route delay is 5.371 ns. Clock skew of 2.441ns brings the total Tsu down to 8.302ns. Does anyone know how I can ruduce the route delay further? I have sort of already tried grouping relavent LUTs together within a CLB, or if that is not possible, placing relavent CLBs horizontally (rather than vertically to take advantage of Virtex architecture's fast direct connections between horizontally adjacent CLBs). Kevin Brace (don't respond to me directly, respond within the newsgroup) Ray Andraka <ray@andraka.com> wrote in message news:<3C1122D4.EA124F08@andraka.com>... > The VIrtex parts can support a fuly compliant PCI33 design, but the timing is not met over worst case unless you use that special TRDY > logic. I think 5v Virtex-6 just met the PCI66 timing. > > > -- > --Ray Andraka, P.E. > President, the Andraka Consulting Group, Inc. > 401/884-7930 Fax 401/884-7950 > email ray@andraka.com > http://www.andraka.com > > "They that give up essential liberty to obtain a little > temporary safety deserve neither liberty nor safety." > -Benjamin Franklin, 1759Article: 37386
Arthur wrote: > I'd be wary of this - > 1. who knows what precautions were taken when the parts were removed from the board > 2. current Xilinx software doesn't support these devices If they are parts that have been removed then warning #1 is very important. When we moved from the Intel Altera EPX780 parts [the original Intel FX780 CPLD range that had had been bought by Altera] to the XC95K range after Altera stopped making EPX780s we still had to build one more batch of boards with the old parts. All we could find were some "reclaimed" parts and they gave us no end of trouble. About 1/4 didn't work at all and another 20% died during soak test. Fortunately, with a lot of effort, we did manage to find some "real" unused stock by pleading with the client for whom we'd designed in the FX780/880.Article: 37388
Hi Markus, Earlier this week I wrote two brilliant articles, with a subject of "Crossing a clock domain" I think you might be helped by reading these, as they discuss the issue of passing a flag from one clock domain to another. In your case, you need to pass a flag from the portA side to the DSP to tell it when the page is available to be read (when the writes have finished), and you need to pass a flag from the DSP (portB side) back to the portA side to tell it when the DSP has finished reading, and it is OK to write to that page again on the portA side. Another name for the memory structure you have designed is a "Ping-Pong" memory. This is true regardless of whether you use a dual port memory, or two separate memories. You usage of a "page" address bit is an efficient way to do a ping-pong memory with just 1 DP RAM. Another important issue is the higher level system view, which includes the analysis of bandwidth. You have not mentioned: - portA write rate - portA number of words written - is there any slack time between end of writing to one page and then the other - portB read rate - portB number of words read (should be same as number of words written) - is there any slack time between end of reading of one page and then the other For instance, if the portA data is a continuous data stream, there will be no delay between writing to one page and then the other. This will only work if the logic to read the page (DSP side) reads at a faster rate than the writes. You may want to do something like this: A master FF that indicates which side is using which page: 0 : portA writing page 0, portB reading page 1 1 : portA writing page 1, portB reading page 0 You say that the A side is the master, so when it has finished writing, it could toggle the FF. On the portB side, the synchronized version of this FF (see my other articles) is monitored by the B side logic. If the FF changes state while the DSP is still reading, then an error has occured. Set an error FF, that turns on a red LED or triggers a scope or logic analyzer. Or here's another possibility: While the DSP is reading, pass a signal to the A side (through a synchronizer !) saying that the B side is busy (page "n" in use). When the A side has finished writing, it looks at the synchronized busy flag. If it is busy, it waits till it goes non-busy before flipping the master FF. This works well if you don't have to write blocks of data on the A side at some fixed rate. If you do have deadlines to meet on the A side (a new block must be written every "x" microseconds), then you can still wait for the non-busy indication, but if you don't get it in time for when the A side must start writing another block, set an error FF, that turns on a red LED (or a status signal that triggers a scope or logic analyzer). All the best, Philip Freidin On 9 Dec 2001 00:16:55 -0800, meng.engineering@bluewin.ch (Markus Meng) wrote: >Hallo Peter und Falk, > >your right the missing question is how do I make shure that I don't get >this overlapp reading and writing from the same address at the same time. > >It's done in logic using kind of a master/slave data processing flow. >First on PortA all data are written, then an interrupt is being generated >and the page bit is toggeled - previous '0' now '1'. >On the other side - PortB - a DSP from Analog Device >does DMA read bursts and reads out all the required data. In the meantime >writing continues but on page '1'. It should work and most of of the time >is does. Therefore it mayed get a situation where this overlap happens, but >it should not. I will keep you informed. I have to think about how I can >measure or catch this problem ... > >markus Philip Freidin FliptronicsArticle: 37389
Ray Andraka wrote: > > I hadn't tried since 3.1 sp2 or 3. Can you elaborate on the flow to put it > in there? I don't believe it is in the library, so I assume you are passing > it into the edif as a black box. Do you need to include an edif netlist for > it too? > Yes, I just stuck it in as a black box. Looking at it in fpga_editor, it appeared to be a primitive named PCILOGIC with input pins IRDY, TRDY, I1, I2, and I3 and output PCI_CE. And how the connections were used was also easily seen. So I tried a blackbox with that primitive name and pins and ... it worked. Basically I just tied all the input pins of the primitive to FPGA device input pins, and then had two other device pins as input and output with CE controlled by PCI_CE. The simplest possible circuit. About all that is missing is a VHDL model in the unisim library. But once I determined with ngd2vhdl what that model was, I just stuck a file with a simplified version into the unisim directory and compiled it into the unisim library. DuaneArticle: 37390
I think its just as easy to regard the bus as asynchronous and just build edge detectors to detect bus operations-- bringing them into your local clock domain http://www.mesanet.com/4i34.zip (support code for our FPGA based PC/104 card) Has some PC104 examples including 16 bit bus interface/interrupt generation logic... PCWArticle: 37391
Actually 2 layer boards are better for PCI in some respects (lower trace capacitance for PCI bus stub lines) Its just very hard to do good 2 layer board designs as power integrity and crosstalk are more of a problem. Unless you have very high volumes, 4 layer is the way to go (and _much_ easier to layout) PCWArticle: 37392
Eric Smith wrote: > > Duane Clark <dclark@akamail.com> writes: > > And by the way, the 3.3i tools handle the PCILOGIC aka "magic TRDY" just > > fine for me, despite Xilinx claims that they do not support it. That > > includes ngdbuild, map and par, and includes support for timing > > constraints on paths that pass through the PCILOGIC. I did not find that > > the use of fpga_editor was required. > > What did you put in your VHDL or Verilog source code to make it > use the magic TRDY logic? A black box primitive. component PCILOGIC port ( IRDY: in std_logic; TRDY: in std_logic; I1: in std_logic; I2: in std_logic; I3: in std_logic; PCILOGIC: out std_logic ); end component;Article: 37394
Hello Jason, For implementation of the PC104/ISA interface, I suggest you to use read/write strobes, address ADDR[], address enable AEN, and CH READY (if delay is required) signals, without the clock. Thus, the design will include [inferred, in the case of VHDL] register and comparator; no state machines is required. Best Regards, Igor KauranenArticle: 37395
Thanks for the examples, it always help to see how others have approached the task, my only worry with the asyncronous exchange is that some fo the data might be lost, I'm fairly confident that it won't but you never know. Have you ever noticed any wierd or unexplained data exchanges in your design for your PC/104 FPGA card? The reason I ask is at present the card we have, which I\m trying to debug seems to have inconsistent readings unless we install another card onto the stack. I have a feeling it's beacause the ISA bus isn't handled very well in that code. Jason "Peter Wallace" <pcw@mesanet.com> wrote in message news:ee739ce.0@WebX.sUN8CHnE... > I think its just as easy to regard the bus as asynchronous and just build edge detectors to detect bus operations-- bringing them into your local clock domain > > http://www.mesanet.com/4i34.zip > > (support code for our FPGA based PC/104 card) > > Has some PC104 examples including 16 bit bus interface/interrupt generation logic... > > PCWArticle: 37396
Hi, there, I'm going to use FPGA or DSP to demodulate ODFM, especially for DVB-T. However, I just wondered if general DSP chip, like C6211 133MHz, is fast enough to do that? Or if FPGA must be used, around how many equivalant gates/cells will the design be? Thanks. DavidArticle: 37397
Duane Clark wrote: > > A black box primitive. > > component PCILOGIC > port ( > IRDY: in std_logic; > TRDY: in std_logic; > I1: in std_logic; > I2: in std_logic; > I3: in std_logic; > PCILOGIC: out std_logic > ); > end component; Oops, that is of course PCI_CE: out std_logicArticle: 37398
acher@in.tum.de (Georg Acher) wrote in message news:<9ug1l7$hvp$1@sunsystem5.informatik.tu-muenchen.de>... > In article <u0m7n0ku4ccvd2@corp.supernews.com>, > "Austin Franklin" <austin@dark98room.com> writes: > |> Did you read the PCI spec carefully? The PCI spec requires power and ground > |> planes, since the maximum distance for the PCI power/ground connector pads > |> to the plane is .25", as stated in 4.4.2.1. <...> > > Then 80% of the cheaper network and soundcards violate the spec. I have never > seen a RTL8139 based network card with a multilayer PCB. I always wondered how come those Made in Taiwan/China PCI Ethernet cards or sound cards be sold that cheaply (US $10 to $15 at a mom and pop computer dealer). I guess that shows that companies that make low cost/quality products in Taiwan or China only care about making a buck, and don't care at all for complying with the specification. I guess that makes companies that follow the specification very difficult to compete because most consumers don't know that some companies violate the specification in order to sell it cheap. I have a Realtek based PCI Ethernet card in my main computer, but the card didn't fit inside my computer, because the bracket was sticking out a little (by a few millimeters), so I had to remove the bracket to fit it in. I suppose that can be my computer case's fault. I just have it installed to use LeonardoSpectrum-Altera in my computer, but I personally hate that tool because it is unstable. Kevin Brace (don't respond to me directly, respond within the newsgroup)Article: 37399
"Falk Brunner" <Falk.Brunner@gmx.de> wrote in message news:9ur0fs$a5b36$4@ID-84877.news.dfncis.de... > "Andrea Sabatini" <sabatini@nergal.it> schrieb im Newsbeitrag > news:9uqo7c$2jko$1@newsreader1.mclink.it... > > hi all, > > > > i'm designing an fpga usign altera max-plus and/or quartusII (we still > > haven't decided which one) and i have a question about it. does anybody > > I suggest to drop MAx-plus as fast as possible, because it is a real pain to > work with. Max plus is the easiest tool i've ever used. > > > knows if these softwares automatically place IO buffers? or do i have to > > For Max-plus, Yes. For Quartus, I dont know, but guess it does. Quartus does depending on which FPGA > > -- > MfG > Falk > > > > > >
Site Home Archive Home FAQ Home How to search the Archive How to Navigate the Archive
Compare FPGA features and resources
Threads starting:
Authors:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z