Engineering: the art of performing miracles every day,
at nearly no cost, never witnessed/rewarded
by the people around or above you.
Of course, if an elevator, an aircraft, or a space station
should decide to unintentionally fall from the sky
while your electronics is somehow part of the game,
everybody will instantly blame you.
Got stuck with a logic design, too big for a PAL/GAL,
but too small for a FPGA/CPLD ?
Indecisive about installing another licence managing thing on your PC ?
Fed up with colourful user interfaces, that show all the important buttons
at different places while refusing to open your old project files after
each software update ?
Want to have a data retention time > 20 years ?
And most important: are you aware, that sometimes the definition of words
such as "mature" and "reliable" by marketing and engineering department
sometimes does not overlap ?
If you don't fear the "propagation delay", try EPROMs.
Quite reliable, versatile, cheap, can be bought at nearly every corner,
and every now and then a faster and bigger version goes into production.
[2012: Edit: things are starting to look a bit different now...]
Best of all: no vendor specific/special hardware/software is required for
logic design and programming.
Enough of pointless ranting. Example:
/* * * pal16l8.c V1.0 (c) Dieter Mueller 08/2004 * * example: using a 64kB EPROM as programmable logic device. * 27512, gives 16 Input_Pins and 8 Output_Pins. * * Note: unlike with PALs/GALS, the number/complexity of * product_terms/equations is only limited by the Pin count * of the EPROM... and the abilities of your compiler. * * Not much memory used, generating 1MB files for 27080 * should be possible under DOS. * */ #include <stdio.h> #include <stdlib.h> int main(void); char do_rom(long addr); int main(void) { FILE *outstream; long i; outstream=fopen("pal16l8.bin","wb"); if(outstream==NULL) { printf("\nFile open error.\n"); return(-1); } for(i=0; i<0x10000; i++) //try all possible input patterns, 64 kBytes { fputc(do_rom(i),outstream); //write one EPROM Byte } fclose(outstream); return(0); } char do_rom(long addr) //do one Byte { char out; char a,b,c; char q0,q1,q2; //default = Zero. a=0; b=0; c=0; q0=0; q1=0; q2=0; //scan input_pins. //WARNING: casting HAS to be, avoiding funny results. if((long)addr & 0x01) a=-1; if((long)addr & 0x02) b=-1; if((long)addr & 0x04) c=-1; //equations. //WARNING: thou shalt not use ! to negate. q0=a|b; q1=a&b; q2=(~a&b)^c; //((NOT A) AND B) XOR C //last stage of a full adder //now to throw all the results together. out=0; //default = Zero. if(q0) out|=0x01; if(q1) out|=0x02; if(q2) out|=0x04; //done. return(out); }
Is it possible to implement an ALU using EPROMs ?
Yes, it is, and a few hobbyists already successfully did.
[HOME] [UP]/ [BACK] [1] [2] [3] [4] [5] [6] [7] [8] [NEXT]
(c) Dieter Mueller 2004