Welcome to our site! EDAboard.com is an international Electronic Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.
sorry but i don't know the exact answer to ur question but u should consider taking a low voltage cpld and put a free ip-core in it. This u can do for 3v and u will require less milliamps (if u choose right cpld)
Your chip have 64 macro that is ~1200 gate.
A full 8254 chip in vhdl have ~5000 gate, in fpga it use ~700 cell,
and in clpd i belive ~256+ (i think).
It's a bigest cpld.(a lot of cost in compare with the 8254 chip).
Try a 10k gates fpga from cypress if you like work with them,
i like more the fammily of 1k of @letra (you can use 1k10 all the system design) they are not exp(~15$ not sure) but you need work with that comp great & easy tool evaluation tool work with the most componnents.
Note: i don't know exactly what you need from the 8254, but i belive
that you don't need all the format work or all the timmers/counter,
you can desing yourself conuter/timmer that will more small then the
If you want declare what you need from the counter i can explain/design
you how to build and how much cell you will need.
timmer 16 bit reg X3(you have 3) = 48 (flipflops=cells)
auto reload for timmer 16 bit X3 = 48
main control reg 8 bit = 8
control timmer reg 8 bit X3 = 24
interface 8 bit bus 8 bit = 8
timmer output 1 bit X3 = 3
functionnaly design ??? = ????
total minimum know cells = 141+ cells
Now my 82C54 was used like that:
3MHz --->| clk1
When IO is set high, the counter begins to count down (or count up) .
When IO is cleared, couter ends up and data is read by MSP430.
You will need for simple desingn if i understand you correct(rpair me if you
need other changes).
(16bit counter +1 bit sync io to clock) X2 reg = 34 cells
8bit interface data bus = 8 cells
few cell for the control
i think 34+8+(2 or 4) = 44 to 46 cell in best case;
see a simple example in high level langue (translate it for your dev langue)
* the counter data will read correctly in this sample only when the counter is stop (i hope you drive the io for on of other is more complicate design).
First i repair the line :i think 34+8+(2 or 4) = 44 to 46(not56) cell in best case;
Now after you tell me that the cost only 58 but the comp make eror in 64 macrocell, i belive that is because:
The clpd have a specific no wiring internal line that make the connection
btwen the lcells and the io , is small clpds (also more rare in big) when you
use over 80%-90% it have problem to fit that wires from the cells to cells or io.
The solve of the problem is don't fix the io but is no simple if you have design and evry compilation the io on the chpis are change.
The second option is to go to a bigger chip and that solve your problems in most case(are pins that you can't incrase evry time like special pins"clock" or cotrol for oe of outputs).
Is good reason from you if want to see how the end desing look.
"If you puzzle too, do you mind to read my program? "
It's simple ,first because your design in no big,
second design must no have puzzle.
The answer is on your hands, when you compile the sorce
you get some outputs file one of them for the cpld, but
you have a file that is report txt file.(some time you need to enable that
function on your compiller for get it).
In that file you can see evryting how was design,
how much cells and the equation for evry cell.
I'm an @ltera fammiliar design, but send to me the files (source and report) and i can tell you if i see some wrong i increase my know in other chips and comp. I pm my email.
A small note about the design i think we need to add also one more function
for know if the timmers got overflow(simple stop them when they gone to ffffh
stop_cnt_a :lcell; --(force the comp to use cells for equation)
-- ( you can use also node but in some case if the equation is over 16 signal he increase the cells on the cnt from 16 to Nx16 bacause that i use the lcell force, you can make a test with node and se that this cost you in cells if yes use the cell declaration that will cost only 1 cells)
stop_cnt_a = !(conuter_a[15..0] == ffffh);
stop_cnt_a = !(conuter_a[15..0] == ffffh);
(sorry for my spelling langue conuter =>counter)
repair lines :
1. If io_in_a then to => If (io_in_a & stop_cnt_a) then
2. If io_in_b then to => If (io_in_a & stop_cnt_b) then
Forth. Note after you stop the counter from the io you must wait for one clock last of the counter before the data will valid for read.