Discussion:
How big is my vhdl and am I approaching some size limitation on the chip.
(too old to reply)
jleslie48
2009-03-20 15:49:19 UTC
Permalink
I'm working with a new chipset and I've got to add some functionality
to this coolrunner cpld xpla3 but I can't figure out its reports after
I get through with the synth--translate--fit. A report comes out in
html that looks like this:

Summary
Design Name OATS_TOP
Fitting Status Successful
Software Version K.39
Device Used XCR3512XL-12-PQ208
Date 3-20-2009, 10:42AM


RESOURCES SUMMARY
Macrocells Used Pterms Used Registers Used Pins Used Function Block
Inputs Used
402/512 (79%) 854/1536 (56%) 374/512 (74%) 124/176 (71%) 858/1280
(68%)


LOCAL CONTROL TERM RESOURCES
...

and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed, how to I find out
if I'm hitting a resource limit elsewhere on this chipset?


the html page has available as links:


Summary
Errors/Warnings
Logic
Inputs
Function Blocks
Equations
Pin List
Compiler Options
Text Report
Help

The 'text report' seems to have a lot in it, it seems that the html
reports are just organized parts of it.
Mike Treseler
2009-03-20 17:41:40 UTC
Permalink
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.

-- Mike Treseler
jleslie48
2009-03-20 18:58:55 UTC
Permalink
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
I"m getting:

Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.

any idea on how to make it fit?
jleslie48
2009-03-20 19:15:23 UTC
Permalink
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
ok, before I added my functionality, I had:
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)


so from my errors, I can see I added some 600 macrocells, and 1200
pterms,

how can I find out who is the piggy, and what can I due to trim things
down?

also, what is a macrocell and pterm?

I originally ran this program on a virtexII, and everthing looked
liked it
was pretty small and effecient:



Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%

Number of 4 input LUTs
1,545
27,392
5%

Logic Distribution




Number of occupied Slices
1,302
13,696
9%

Number of Slices containing only related logic
1,302
1,302
100%

Number of Slices containing unrelated logic
0
1,302
0%

Total Number of 4 input LUTs
1,589
27,392
5%

Number used as logic
1,545



Number used as a route-thru
44



Number of bonded IOBs
Number of bonded
15
556
2%

IOB Flip Flops
1



Number of RAMB16s
2
136
1%

Number of BUFGMUXs
3
16
18%



but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
Jonathan Bromley
2009-03-20 20:17:22 UTC
Permalink
Post by jleslie48
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
It really IS apples and oranges. The structures are so different
that you can't expect design size considerations to map
meaningfully from one to the other.

CPLDs excel at wide decoding functions. Each logic cell
(typically, but not necessarily, including a flip-flop)
computes the logical OR of a bunch of "product terms".
Each product term is the logical AND of any selection
of a very large number of signals - resource cost is
driven by number of PTs, NOT by the number of inputs
to a given PT. PT inputs are basically free.

FPGAs have a much higher ratio of flip-flops to logic. The
basic logic function is a 4-input lookup table, i.e. any
logical function you care - but only with 4 inputs. Wide
AND functions and decodes are quite expensive of area.
Inputs to a logic function are expensive as soon as you
have more than 4 of them. (OK, it might be 5 or 6 in
some newer devices.)

Of course, synthesis tools will cram your specified
VHDL functionality into either, and will get reasonably
good optimization in either. But to say "adding this
function made my FPGA only 20% bigger. so why does it
make my CPLD 40% bigger?" is a question with no
sensible answer. The devil is in the detail.
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
***@MYCOMPANY.com
http://www.MYCOMPANY.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
glen herrmannsfeldt
2009-03-20 20:49:36 UTC
Permalink
Jonathan Bromley <***@mycompany.com> wrote:
(big snip)
Post by Jonathan Bromley
FPGAs have a much higher ratio of flip-flops to logic. The
basic logic function is a 4-input lookup table, i.e. any
logical function you care - but only with 4 inputs. Wide
AND functions and decodes are quite expensive of area.
Inputs to a logic function are expensive as soon as you
have more than 4 of them. (OK, it might be 5 or 6 in
some newer devices.)
I think some can use the carry chain logic to
do wide AND (or NOR if inverted) logic. Maybe
still not quite the same as CPLD (PAL) logic,
but fast and not too expensive.

-- glen
jleslie48
2009-03-21 00:56:39 UTC
Permalink
Well this is a bummer. Here I think I'm being careful, working things
out with
test bench, re-building all the while and checking for growth, only to
be blind sided
when I hook up the pin to the generated signal.

Meantime I've got some more info and questions.

1) >> any idea on how to make it fit?

If it has to be that device, I would need two of them.

that chip we are getting for around $100, I don't even know where to
buy them, and where do I get a Virtex II-PRO chip? digikey says they
are $1000?? Wouldn't I be better off getting the Virtex II-PRO?
Meantime the old chip is
mounted on a custom board layout, I guess my hardware guys are going
to have to re-lay out the board with
two of these chips? that won't work anyway as I added 600 macrocells
to a chip that only had 512 to begin with...
I think I was able to chip that down to under 512 though, but not by
much.

2) what exactly is a macrocell anyway?



3) "Rerun synthesis and check the % utilization "
that's what I've been doing. basically I added the equivalent of soft
uart and the data generator state machine that Jonathan so kindly set
me up with. So I started backing out that code bit by bit to see
where I pop the %s. When I took out the data generator I only freed
up a few macro cells, I tried reducing the fixed buffers, and that
again only freed up some of the small weeds. When I deleted the UART
however, it cleared up the whole mess. But now I don't know if thats
because I've effectively dead ended other parts, ... I'm still
driving the output now, but I can't believe my little uart is that big
a deal. I'm wondering if there is an expense in the separate
modules, and instantiations, or maybe the
'reverse' function. My next step is to start stubbing out sections
and see what causes the growth. It would be nice if in all those
reports that get generated they assigned macrocells/pterms etc back to
the source code that generated them.


Directory of C:\jon\oats

03/20/2009 10:36 AM 19,460 data_gen_40.vhd
03/19/2009 03:48 PM 8,795 OATS_TOP.ucf
03/20/2009 04:56 PM 263,536 OATS_Top.vhd

03/09/2009 11:21 AM 941 mod_m_counter.vhd
03/04/2009 05:23 PM 3,486 fifo.vhd
03/19/2009 03:23 PM 5,635 oats_top_tb.vhd
03/20/2009 01:10 PM 3,851 uart_core40.vhd
03/12/2009 09:22 AM 2,756 uart_rx40.vhd
03/12/2009 12:31 PM 3,734 uart_tx40.vhd





Now clearly source size doesn't make much difference, the OATS_TOP.VHD
program is ridiculously big, but as shown above used reasonable
amounts of resources. I added some clocking and counters to OATS_TOP:

------------------------------

FUNCTION to_slv (c: character) RETURN
STD_LOGIC_VECTOR IS
BEGIN
RETURN std_logic_vector(to_unsigned(character'pos(c), 8));
END;

FUNCTION reverse (a : IN STD_LOGIC_VECTOR) RETURN
STD_LOGIC_VECTOR IS
VARIABLE
result : STD_LOGIC_VECTOR(a'RANGE);
ALIAS aa : STD_LOGIC_VECTOR(a'REVERSE_RANGE) IS a;
BEGIN
FOR i IN aa'RANGE LOOP
result(i) := aa(i);
END LOOP;
RETURN result;
END;

...

clock_4hz: PROCESS ( system_clock_used )
BEGIN
IF ( rising_edge(system_clock_used)) then
IF ( clk_4hz_countdown = 0) THEN
clk_4hz_countdown <= human_clock_count;
clk_4hz <= NOT clk_4hz;
else
clk_4hz_countdown <= clk_4hz_countdown -1;
End if; -- countdown ife

END IF;
END PROCESS clock_4hz;

clock_2mhz: PROCESS ( system_clock_used )
BEGIN
IF ( rising_edge(system_clock_used)) then
IF ( clk_2mhz_countdown = 0) THEN
clk_2mhz_countdown <= clk_2mhz_clock_count; --
base clock choice
clk_2mhz <= NOT clk_2mhz;
else
clk_2mhz_countdown <= clk_2mhz_countdown -1;
End if; -- countdown ife
END IF;
END PROCESS clock_2mhz;

clock_2mhz_ctr: PROCESS ( clk_2mhz )
BEGIN
IF ( rising_edge(clk_2mhz)) then
time_cntr_500ns <= time_cntr_500ns +1;
END IF;
END PROCESS clock_2mhz_ctr;

-- this clock is not uart related
clock_7812hz: PROCESS ( system_clock_used )
BEGIN
IF ( rising_edge(system_clock_used)) then
IF ( clk_7812hz_countdown = 0) THEN
clk_7812hz_countdown <= clk_7812hz_clock_count; --
base clock choice
clk_7812hz <= NOT clk_7812hz;
if (clk_7812hz = '0') Then
clk_7812hz_tick <= '1';
end if;
else
clk_7812hz_tick <= '0';
clk_7812hz_countdown <= clk_7812hz_countdown -1;
if ( (initialize_done = '0' ) AND
(clk_7812hz_countdown = 1276) ) Then
initialize_done <= '1';
initialize_data_gen <= '1';
else
initialize_data_gen <= '0';

end if; -- initialize_done
End if; -- countdown ife

END IF;
END PROCESS clock_7812hz;


clock_7812_ctr: PROCESS ( clk_7812hz )
BEGIN
IF ( rising_edge(clk_7812hz)) then
time_cntr_128us <= time_cntr_128us +1;
uptime_at_128us <= time_cntr_500ns;

a2mhz_parity_plus(7) <=
( (time_cntr_500ns(39) xor time_cntr_500ns(38))
xor
(time_cntr_500ns(37) xor time_cntr_500ns(36))
) xor
( (time_cntr_500ns(35) xor time_cntr_500ns(34))
xor
(time_cntr_500ns(33) xor time_cntr_500ns(32))
);
a2mhz_parity_plus(6) <=
( (time_cntr_500ns(31) xor time_cntr_500ns(30))
xor
(time_cntr_500ns(29) xor time_cntr_500ns(28))
) xor
( (time_cntr_500ns(27) xor time_cntr_500ns(26))
xor
(time_cntr_500ns(25) xor time_cntr_500ns(24))
);
a2mhz_parity_plus(5) <=
( (time_cntr_500ns(23) xor time_cntr_500ns(22))
xor
(time_cntr_500ns(21) xor time_cntr_500ns(20))
) xor
( (time_cntr_500ns(19) xor time_cntr_500ns(18))
xor
(time_cntr_500ns(17) xor time_cntr_500ns(16))
);
a2mhz_parity_plus(4) <=
( (time_cntr_500ns(15) xor time_cntr_500ns(14))
xor
(time_cntr_500ns(13) xor time_cntr_500ns(12))
) xor
( (time_cntr_500ns(11) xor time_cntr_500ns(10))
xor
(time_cntr_500ns(09) xor time_cntr_500ns(08))
);
a2mhz_parity_plus(3) <=
( (time_cntr_500ns(07) xor time_cntr_500ns(06))
xor
(time_cntr_500ns(05) xor time_cntr_500ns(04))
) xor
( (time_cntr_500ns(03) xor time_cntr_500ns(02))
xor
(time_cntr_500ns(01) xor time_cntr_500ns(00))
);

END IF;
END PROCESS clock_7812_ctr;



data_message_handler: PROCESS ( system_clock_used)
BEGIN
IF ( rising_edge(system_clock_used) ) THEN
if ( (w40_wanted = '1' ) and
(clk_7812hz_tick = '1')
) then
w40_data_from_main <=
reverse(
a2mhz_optional_message
& std_logic_vector(uptime_at_128us)
& a2mhz_parity_plus
& a2mhz_optional_message
) ; -- big endian for BAE.

w40_ready <= '1';
else
w40_ready <= '0';
end if; -- w40_wanted ite
else
--w40_ready <= '0';
END IF; --clock edge

END PROCESS data_message_handler;

---------------------
--2mhz communications uart begin

-- instantiate uart
a2mhz_uart_unit: entity work.uart40(str_arch)
generic map (
dbit => a2mhz_data_bit_count,
sb_tick => a2mhz_clock_tick_per_sampling_rate,
dvsr => a2mhz_baud_rate_divisor,
dvsr_bit => 2, -- number of bits necessary to hold
dvsr
FIFO_W => 2 -- 2**(value) is the number of chars
that can be queued.
) -- generic map


port map(
clk => system_clock_used,
reset => initialize_data_gen,
rd_uart => a2mhz_RX_READ_BUFFER_STB,
wr_uart => a2mhz_TX_WRITE_BUFFER_STB,
rx => a2mhz_HUART_RX_LINE,
w_data => a2mhz_TX_1CHAR_BUF,
tx_full => a2mhz_TX_BUFFER_FULL,
rx_empty => open,
rx_not_empty => a2mhz_RX_BUFFER_DATA_PRESENT,
r_data => a2mhz_RX_1CHAR_BUF,
tx => a2mhz_HUART_TX_LINE,
baud_rate_tick => a2mhz_UART_EN_16_x_BAUD
);



a2mhz_DATA_GENERATOR: entity work.data_gen_40
generic map
( PC_bits => 5
, dbit => a2mhz_data_bit_count
, the_program =>

-- Long startup delay
op40_DELAY & 200
& --2 bytes long

op40_LABEL & 04 &
op40_WAIT_FOR_W40 &
op40_GOTOL & 04 & -- spin on
printing W40's from here on in.

op40_HALT
)
port map
( clock => system_clock_used
, reset => initialize_data_gen
, timer => a2mhz_UART_EN_16_x_BAUD
, tx_data => a2mhz_TX_1CHAR_BUF
, tx_valid => a2mhz_tx_valid
, tx_ready => a2mhz_tx_ready
, rx_data => a2mhz_RX_1CHAR_BUF
, lbl_data => a2mhz_lbl_data_from_main
, rx_valid => a2mhz_RX_BUFFER_DATA_PRESENT
, rx_needed => a2mhz_rx_wanted
, reset_out => open --UART_RESET_BUFFER
, lbl_needed => a2mhz_lbl_wanted
, halted => a2mhz_halted
, error_cond => a2mhz_error_cond_main
, w40_data => w40_data_from_main
, w40_ready => w40_ready
, w40_needed => w40_wanted
);




-- JSEB: Conditioning of interface signals between UART and data
generator

a2mhz_tx_ready <= not a2mhz_TX_BUFFER_FULL;
a2mhz_TX_WRITE_BUFFER_STB <= a2mhz_tx_valid and a2mhz_tx_ready; --
Write only when it's safe

a2mhz_RX_READ_BUFFER_STB <= a2mhz_rx_wanted and
a2mhz_RX_BUFFER_DATA_PRESENT;
a2mhz_HUART_TX_CK_LINE <= clk_2mhz;


--2mhz communications uart end
---------------------




now by removing the a2mhz_uart_unit entity, I return to acceptable
levels the old levels. That leads me to believe
I just put all the logic in the unused/don't bother pile and once I
put the uart back in, Is the REVERSE function the problem?




The uart is pretty simple:






----------Uart_core40.vhd-------------
-- Listing 7.4
--
-- jl 090226 First working. WATCH OUT!!! DVSR_BIT!!! for 19200
baud,
-- the DVSR was 325, and guess what? that means that you
need
-- 9 bits instead of 8 for the DVSR_BIT, this still synthed
ok
-- but generated 175 warnings. changing it to 9 bits (or
115,200 baud means
-- the synth gets through with 5 warnings, and works.
-- 090312 copy and redo of uart_core.vhd. this one is to
customize to the to the 40 bit
-- (probably expand to 64) comm port for BAE.
--

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity uart40 is
generic(
-- Default setting:
-- xxx baud, 8 data bis, 1 stop its, 2^2 FIFO

DBIT : integer:=8; -- # data bits
SB_TICK : integer:=16; -- # ticks for stop bits, 16/24/32
-- for 1/1.5/2 stop bits
DVSR : integer:= 325; -- baud rate divisor
-- DVSR = 50M/(16*baud rate(19200))
== 162.76
-- 100m/(16*19200) ==325.52
-- 100m/(16*115200) ==54.25
DVSR_BIT : integer:=9; -- # bits of DVSR 325 needs 9
bits!!!!!
FIFO_W : integer:=2 -- # addr bits of FIFO
-- # words in FIFO=2^FIFO_W
);
port(
clk,
reset: in std_logic;
rd_uart,
wr_uart: in std_logic;
rx: in std_logic;
w_data: in std_logic_vector((dbit-1) downto 0);
tx_full,
rx_empty: out std_logic;
rx_not_empty: out std_logic;
r_data: out std_logic_vector((dbit-1) downto 0);
tx: out std_logic;
baud_rate_tick: out std_logic
);
end uart40;

architecture str_arch of uart40 is
signal tick: std_logic;
signal rx_done_tick: std_logic;
signal tx_fifo_out: std_logic_vector((dbit-1) downto 0);
signal rx_data_out: std_logic_vector((dbit-1) downto 0);
signal tx_empty, tx_fifo_not_empty: std_logic;
signal tx_done_tick: std_logic;
begin
baud_gen_unit: entity work.mod_m_counter(arch)
generic map(M=>DVSR,
N=>DVSR_BIT)
port map(clk =>clk,
reset =>reset,
q =>open,
max_tick =>tick
);

uart40_rx_unit: entity work.uart40_rx(arch)
generic map(DBIT=>DBIT,
SB_TICK=>SB_TICK)
port map(clk=>clk,
reset=>reset,
rx=>rx,
s_tick=>tick,
rx_done_tick=>rx_done_tick,
dout=>rx_data_out);

fifo_rx_unit: entity work.fifo(arch)
generic map(B=>DBIT, W=>FIFO_W)
port map(clk=>clk,
reset=>reset,
rd=>rd_uart,
wr=>rx_done_tick,
w_data=>rx_data_out,
empty=>rx_empty,
notempty=>rx_not_empty,
full=>open,
r_data=>r_data);

fifo_tx_unit: entity work.fifo(arch)
generic map(B=>DBIT,
W=>FIFO_W)
port map(clk=>clk,
reset=>reset,
rd=>tx_done_tick,
wr=>wr_uart,
w_data=>w_data,
empty=>tx_empty,
notempty=>open,
full=>tx_full,
r_data=>tx_fifo_out);

uart40_tx_unit: entity work.uart40_tx(arch)
generic map(DBIT=>DBIT,
SB_TICK=>SB_TICK)
port map(clk=>clk,
reset=>reset,
tx_start=>tx_fifo_not_empty,
s_tick=>tick,
din=>tx_fifo_out,
tx_done_tick=> tx_done_tick,
tx=>tx);

tx_fifo_not_empty <= not tx_empty;
baud_rate_tick <= tick;

end str_arch;


-----fifo.vhd-----
-- Listing 4.20
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity fifo is
generic(
B: natural:=8; -- number of bits
W: natural:=4 -- number of address bits
);
port(
clk, reset: in std_logic;
rd, wr: in std_logic;
w_data: in std_logic_vector (B-1 downto 0);
empty,
notempty,
full: out std_logic;
r_data: out std_logic_vector (B-1 downto 0)
);
end fifo;

architecture arch of fifo is
type reg_file_type is array (2**W-1 downto 0) of
std_logic_vector(B-1 downto 0);
signal array_reg: reg_file_type;
signal w_ptr_reg, w_ptr_next, w_ptr_succ:
std_logic_vector(W-1 downto 0);
signal r_ptr_reg, r_ptr_next, r_ptr_succ:
std_logic_vector(W-1 downto 0);
signal full_reg, empty_reg, full_next, empty_next:
std_logic;
signal wr_op: std_logic_vector(1 downto 0);
signal wr_en: std_logic;
begin
--=================================================
-- register file
--=================================================
process(clk,reset)
begin
if (reset='1') then
array_reg <= (others=>(others=>'0'));
elsif (clk'event and clk='1') then
if wr_en='1' then
array_reg(to_integer(unsigned(w_ptr_reg)))
<= w_data;
end if;
end if;
end process;
-- read port
r_data <= array_reg(to_integer(unsigned(r_ptr_reg)));
-- write enabled only when FIFO is not full
wr_en <= wr and (not full_reg);

--=================================================
-- fifo control logic
--=================================================
-- register for read and write pointers
process(clk,reset)
begin
if (reset='1') then
w_ptr_reg <= (others=>'0');
r_ptr_reg <= (others=>'0');
full_reg <= '0';
empty_reg <= '1';
elsif (clk'event and clk='1') then
w_ptr_reg <= w_ptr_next;
r_ptr_reg <= r_ptr_next;
full_reg <= full_next;
empty_reg <= empty_next;
end if;
end process;

-- successive pointer values
w_ptr_succ <= std_logic_vector(unsigned(w_ptr_reg)+1);
r_ptr_succ <= std_logic_vector(unsigned(r_ptr_reg)+1);

-- next-state logic for read and write pointers
wr_op <= wr & rd;
process(w_ptr_reg,w_ptr_succ,r_ptr_reg,r_ptr_succ,wr_op,
empty_reg,full_reg)
begin
w_ptr_next <= w_ptr_reg;
r_ptr_next <= r_ptr_reg;
full_next <= full_reg;
empty_next <= empty_reg;
case wr_op is
when "00" => -- no op
when "01" => -- read
if (empty_reg /= '1') then -- not empty
r_ptr_next <= r_ptr_succ;
full_next <= '0';
if (r_ptr_succ=w_ptr_reg) then
empty_next <='1';
end if;
end if;
when "10" => -- write
if (full_reg /= '1') then -- not full
w_ptr_next <= w_ptr_succ;
empty_next <= '0';
if (w_ptr_succ=r_ptr_reg) then
full_next <='1';
end if;
end if;
when others => -- write/read;
w_ptr_next <= w_ptr_succ;
r_ptr_next <= r_ptr_succ;
end case;
end process;
-- output
full <= full_reg;
empty <= empty_reg;
notempty <= not empty_reg;
end arch;

------------------mod_m_counter.vhd

-- Listing 4.11
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity mod_m_counter is
generic(
N: integer := 4; -- number of bits
M: integer := 10 -- mod-M
);
port(
clk,
reset : in std_logic;
max_tick : out std_logic;
q : out std_logic_vector(N-1 downto 0)
);
end mod_m_counter;

architecture arch of mod_m_counter is
signal r_reg: unsigned(N-1 downto 0);
signal r_next: unsigned(N-1 downto 0);
begin
-- register
process(clk,reset)
begin
if (reset='1') then
r_reg <= (others=>'0');
elsif (clk'event and clk='1') then
r_reg <= r_next;
end if;
end process;
-- next-state logic
r_next <= (others=>'0') when r_reg=(M-1) else
r_reg + 1;
-- output logic
q <= std_logic_vector(r_reg);
max_tick <= '1' when r_reg=(M-1) else '0';
end arch;


---------uart_tx40.vhd

-- Listing 7.3

-- JL 090309 changing hard coded '15' to (sb_tick-1) for length of
-- each bit. hard coded '7' for databits now (dbit-1) as
well.
-- JL 090312 custom version of uart_tx for the BAE comm link.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity uart40_tx is
generic(
DBIT: integer:=8; -- # data bits
SB_TICK: integer:=16 -- # ticks for stop bits
);
port(
clk, reset: in std_logic;
tx_start: in std_logic;
s_tick: in std_logic;
din: in std_logic_vector((dbit-1) downto 0);
tx_done_tick: out std_logic;
tx: out std_logic
);
end uart40_tx ;

architecture arch of uart40_tx is
type state_type is (idle, start, data, stop);

constant go_high : std_logic := '1';
constant go_low : std_logic := '0';

signal state_reg, state_next: state_type;
signal s_reg, s_next: unsigned(7 downto 0);
signal n_reg, n_next: unsigned(7 downto 0);
signal b_reg, b_next: std_logic_vector((dbit-1) downto 0);
signal tx_reg, tx_next: std_logic;
signal bit_length: std_logic := '0'; -- testbench watching
only. use with din watch.
begin
-- FSMD state & data registers
process(clk,reset)
begin
if reset='1' then
state_reg <= idle;
s_reg <= (others=>'0');
n_reg <= (others=>'0');
b_reg <= (others=>'0');
tx_reg <= go_high;
elsif (clk'event and clk='1') then
state_reg <= state_next;
s_reg <= s_next;
n_reg <= n_next;
b_reg <= b_next;
tx_reg <= tx_next;
end if;
end process;
-- next-state logic & data path functional units/routing
process(state_reg,s_reg,n_reg,b_reg,s_tick,
tx_reg,tx_start,din)
begin
state_next <= state_reg;
s_next <= s_reg;
n_next <= n_reg;
b_next <= b_reg;
tx_next <= tx_reg ;
tx_done_tick <= '0';
case state_reg is
when idle =>
tx_next <= go_low;
if tx_start='1' then
state_next <= start;
s_next <= (others=>'0');
b_next <= din;
end if;
when start =>
tx_next <= go_high;
if (s_tick = '1') then
if s_reg=(sb_tick-1) then
state_next <= data;
s_next <= (others=>'0');
n_next <= (others=>'0');
else
s_next <= s_reg + 1;
end if;
end if;
when data =>
tx_next <= b_reg(0);
if (s_tick = '1') then
if s_reg=(sb_tick-1) then
bit_length <= not bit_length; -- measure a bit.
s_next <= (others=>'0');
b_next <= '0' & b_reg((dbit-1) downto 1) ;
if n_reg=(DBIT-1) then
state_next <= idle; -- stop ; --lets skip the
stop bit.
tx_done_tick <= '1'; -- moved in from
stop
else
n_next <= n_reg + 1;
end if;
else
s_next <= s_reg + 1;
end if;
end if;
when stop =>
tx_next <= go_high;
if (s_tick = '1') then
if s_reg=(SB_TICK*4-1) then -- lets make it stick out
for now.
state_next <= idle;
tx_done_tick <= '1';
else
s_next <= s_reg + 1;
end if;
end if;
end case;
end process;
tx <= tx_reg;
end arch;





---------------uart_rx40.vhd ----
-- Listing 7.1
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity uart40_rx is
generic(
DBIT: integer:=8; -- # data bits
SB_TICK: integer:=16 -- # ticks for stop bits
);
port(
clk, reset: in std_logic;
rx: in std_logic;
s_tick: in std_logic;
rx_done_tick: out std_logic;
dout: out std_logic_vector((dbit-1) downto 0)
);
end uart40_rx ;

architecture arch of uart40_rx is
type state_type is (idle, start, data, stop);
signal state_reg, state_next: state_type;
signal s_reg, s_next: unsigned(3 downto 0);
signal n_reg, n_next: unsigned(2 downto 0);
signal b_reg, b_next: std_logic_vector((dbit-1) downto 0);
begin
-- FSMD state & data registers
process(clk,reset)
begin
if reset='1' then
state_reg <= idle;
s_reg <= (others=>'0');
n_reg <= (others=>'0');
b_reg <= (others=>'0');
elsif (clk'event and clk='1') then
state_reg <= state_next;
s_reg <= s_next;
n_reg <= n_next;
b_reg <= b_next;
end if;
end process;
-- next-state logic & data path functional units/routing
process(state_reg,s_reg,n_reg,b_reg,s_tick,rx)
begin
state_next <= state_reg;
s_next <= s_reg;
n_next <= n_reg;
b_next <= b_reg;
rx_done_tick <='0';
case state_reg is
when idle =>
if rx='0' then
state_next <= start;
s_next <= (others=>'0');
end if;
when start =>
if (s_tick = '1') then
if s_reg=(sb_tick/2 -1) then
state_next <= data;
s_next <= (others=>'0');
n_next <= (others=>'0');
else
s_next <= s_reg + 1;
end if;
end if;
when data =>
if (s_tick = '1') then
if s_reg=(sb_tick-1) then
s_next <= (others=>'0');
b_next <= rx & b_reg((dbit-1) downto 1) ;
if n_reg=(DBIT-1) then
state_next <= stop ;
else
n_next <= n_reg + 1;
end if;
else
s_next <= s_reg + 1;
end if;
end if;
when stop =>
if (s_tick = '1') then
if s_reg=(SB_TICK-1) then
state_next <= idle;
rx_done_tick <='1';
else
s_next <= s_reg + 1;
end if;
end if;
end case;
end process;
dout <= b_reg;
end arch;
Jonathan Bromley
2009-03-21 09:24:20 UTC
Permalink
Post by jleslie48
re-building all the while and checking for growth, only to
be blind sided when I hook up the pin to the generated signal.
So you need to identify each functional block in your
design, and synthesise it - on its own - in an FPGA
with every input and output of the block hooked to
a pin (the synth tool will automatically put pads
on the ports of your top-level VHDL entity, so
that's no effort). That way you can quickly get
a feel for the size of each block. If you synthesise
with some pins not connected, the tool will surely
strip away loads of unused logic and you will get
an over-optimistic size estimate.

Interconnect between blocks costs propagation delay,
but only rather a little logic, so that's OK.

Your reverse() function is pretty much free - it's
just interconnect.
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
***@MYCOMPANY.com
http://www.MYCOMPANY.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
Brian Drummond
2009-03-21 12:42:22 UTC
Permalink
Post by jleslie48
Well this is a bummer. Here I think I'm being careful, working things
out with
test bench, re-building all the while and checking for growth, only to
be blind sided
when I hook up the pin to the generated signal.
Meantime I've got some more info and questions.
1) >> any idea on how to make it fit?
If it has to be that device, I would need two of them.
that chip we are getting for around $100, I don't even know where to
buy them, and where do I get a Virtex II-PRO chip? digikey says they
are $1000?? Wouldn't I be better off getting the Virtex II-PRO?
Spartan-3 gives a sizeable resource for well under $100. (V2Pro with the same
capacity would be $500 up - ballpark numbers)
em.avnet.com lists the XC3S1500 for $74 (1 off) $55 (100 off) and you can
upgrade to larger versioss if necessary.

http://www.enterpoint.co.uk/moelbryn/raggedstone1.html
Here's one example of a complete board with XC3S1500 for about $250.
Post by jleslie48
Meantime the old chip is
mounted on a custom board layout, I guess my hardware guys are going
to have to re-lay out the board with
two of these chips?
Consider a Spartan-3 layout for room to grow.
Post by jleslie48
3) "Rerun synthesis and check the % utilization "
that's what I've been doing. basically I added the equivalent of soft
uart and the data generator state machine that Jonathan so kindly set
me up with. So I started backing out that code bit by bit to see
where I pop the %s.
Not the best way - as you discovered.

Find the "do not allocate I/O pin" synthesis option and synth each major
subsystem as a separate project. Crosscheck that a simple sum of the results is
approx (say within 10%) of the overall size. Note any major surprises...

This option is used to build separate re-usable modules (black boxes) so it is
not allowed to optimize away anything not connected to a pin; therefore it is a
better way to determine resource usage.

(Just another way to achieve what Jonathan advised, but without the labour of
adding the pins)

- Brian
jleslie48
2009-03-21 15:10:07 UTC
Permalink
Post by Brian Drummond
Post by jleslie48
Well this is a bummer. Here I think I'm being careful, working things
out with
test bench, re-building all the while and checking for growth, only to
be blind sided
when I hook up the pin to the generated signal.
Meantime I've got some more info and questions.
1) >> any idea on how to make it fit?
If it has to be that device, I would need two of them.
that chip we are getting for around $100, I don't even know where to
buy them, and where do I get a Virtex II-PRO chip? digikey says they
are $1000?? Wouldn't I be better off getting the Virtex II-PRO?
Spartan-3 gives a sizeable resource for well under $100. (V2Pro with the same
capacity would be $500 up - ballpark numbers)
em.avnet.com lists the XC3S1500 for $74 (1 off) $55 (100 off) and you can
upgrade to larger versioss if necessary.
http://www.enterpoint.co.uk/moelbryn/raggedstone1.html
Here's one example of a complete board with XC3S1500 for about $250.
Post by jleslie48
Meantime the old chip is
mounted on a custom board layout, I guess my hardware guys are going
to have to re-lay out the board with
two of these chips?
Consider a Spartan-3 layout for room to grow.
Post by jleslie48
3) "Rerun synthesis and check the % utilization "
that's what I've been doing. basically I added the equivalent of soft
uart and the data generator state machine that Jonathan so kindly set
me up with. So I started backing out that code bit by bit to see
where I pop the %s.
Not the best way - as you discovered.
Find the "do not allocate I/O pin" synthesis option and synth each major
subsystem as a separate project. Crosscheck that a simple sum of the results is
approx (say within 10%) of the overall size. Note any major surprises...
This option is used to build separate re-usable modules (black boxes) so it is
not allowed to optimize away anything not connected to a pin; therefore it is a
better way to determine resource usage.
(Just another way to achieve what Jonathan advised, but without the labour of
adding the pins)
- Brian
Hey everybody, thanks for all the good suggestions.

1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?


2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?

2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?

2B) The specs for the XC3S1500 are:

Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
Search within this category only
Search within this manufacturer only
Feature Description Feature Value
Package 676FCBGA
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 487
RAM Bits 589824
Re-programmability Support Yes

Whats the deal withe the "PACKAGE" ( 676FCBGA)

I see from AVNET that the XC3S1500 comes in lots of flavors:

http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId=500201&catalogId=500201&term=XC3S1500&x=0&y=0&N=0&action=products


XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320

how interchangeable are these parts? the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...


3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
rickman
2009-03-21 16:11:06 UTC
Permalink
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that. A UART can be done in a small number of FFs, or
in your case, a small number of macrocells. I expect it to be easy to
get ten UARTs into the 3512. But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data. If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs. In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
Search within this category only
Search within this manufacturer only
Feature Description Feature Value
Package 676FCBGA
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 487
RAM Bits 589824
Re-programmability Support Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts? the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.

The first digit after the dash -4 or -5 is the speed of the part. The
parts are the same, but they are tested to different speeds. The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial). The rest of the suffix
is the package. Mostly all the different sized parts have similar
timing. But some timing numbers are different. Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.

If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package. So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power. Other than that, you need to consult the
data sheet for the board. They should provide specs on how to use the
board stand alone.

Rick
jleslie48
2009-03-21 16:52:40 UTC
Permalink
Post by rickman
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that. A UART can be done in a small number of FFs, or
in your case, a small number of macrocells. I expect it to be easy to
get ten UARTs into the 3512. But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data. If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs. In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
Search within this category only
Search within this manufacturer only
Feature Description Feature Value
Package 676FCBGA
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 487
RAM Bits 589824
Re-programmability Support Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts? the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.
The first digit after the dash -4 or -5 is the speed of the part. The
parts are the same, but they are tested to different speeds. The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial). The rest of the suffix
is the package. Mostly all the different sized parts have similar
timing. But some timing numbers are different. Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.
If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package. So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power. Other than that, you need to consult the
data sheet for the board. They should provide specs on how to use the
board stand alone.
Rick
"Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill. "

I don't get this, but I get it from a lot of hardware folks. The
s1500 is a $74 chip. the coolrunner, that is 1/100 the chip, is what
$60? so for $14 I get 100x the power?

This is a no-brainer IMO for a production run of less than 10,000 and
your total system cost is over $1000. Especially when you are
basically prototyping. The system I'm supposed to integrate with has
in the box a green hills stack with a 1553 card, the 1553 card alone
is $16,000. The amount of engineering time I've spent fighting with
the $14 decision to go with the coolrunner on a subsystem vs something
bigger and a .001% increase in cost (to the whole system) is
ridiculous. If I can't get this to fit on the coolrunner I'm looking
at adding another card and as such all the implications to SWAP (size
weight and power) , that it in-tails, re-laying out the box, etc, all
for a $14 decision on a $25,000 box... don't even get me started on
how stupid the the sub-system card was laid out. You can't even tell
if it gets power, it doesn't have a single LED on it...
rickman
2009-03-21 22:33:18 UTC
Permalink
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that.  A UART can be done in a small number of FFs, or
in your case, a small number of macrocells.  I expect it to be easy to
get ten UARTs into the 3512.  But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data.  If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs.  In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes.  If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
        Search within this category only
        Search within this manufacturer only
        Feature Description     Feature Value
        Package         676FCBGA
        Family Name     Spartan®-3
        Device Logic Cells      29952
        Device Logic Units      3328
        Device System Gates     1500000
        Number of Registers     N/A
        Maximum Internal Frequency      630 MHz
        Typical Operating Supply Voltage        1.2 V
        Maximum Number of User I/Os     487
        RAM Bits        589824
        Re-programmability Support      Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts?  the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.
The first digit after the dash -4 or -5 is the speed of the part.  The
parts are the same, but they are tested to different speeds.  The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial).  The rest of the suffix
is the package.  Mostly all the different sized parts have similar
timing.  But some timing numbers are different.  Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.
If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package.  So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1  has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power.  Other than that, you need to consult the
data sheet for the board.  They should provide specs on how to use the
board stand alone.
Rick
"Yes.  If four UARTs is all you want, the XC3S1500 is very much
overkill. "
I don't get this, but I get it from a lot of hardware folks.  The
s1500 is a $74 chip. the coolrunner, that is 1/100 the chip, is what
$60?   so for $14 I get 100x the power?
Coolrunner chips are not about "logic" power. They are about Watt
power. They are very low current, require no booting, and power up
immediately (ns) rather than requiring some milliseconds before they
can operate.
This is a no-brainer IMO for a production run of less than 10,000 and
your total system cost is over $1000.  Especially when you are
basically prototyping. The system I'm supposed to integrate with has
in the box a green hills stack with a 1553 card, the 1553 card alone
is $16,000. The amount of engineering time I've spent  fighting with
the $14 decision to go with the coolrunner on a subsystem vs something
bigger and a .001% increase in cost (to the whole system) is
ridiculous.  If I can't get this to fit on the coolrunner I'm looking
at adding another card and as such all the implications to SWAP (size
weight and power) , that it in-tails, re-laying out the box, etc, all
for a $14 decision on a $25,000 box...  don't even get me started on
how stupid the the sub-system card was laid out. You can't even tell
if it gets power, it doesn't have a single LED on it...
Well, you could always bring in a consultant to help fit your logic
into the device or even redesign the card with the Coolrunner on it.
What is the cost of further schedule delays? ;^)

Rick
jleslie48
2009-03-22 02:32:53 UTC
Permalink
Post by rickman
Post by jleslie48
Post by rickman
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that. A UART can be done in a small number of FFs, or
in your case, a small number of macrocells. I expect it to be easy to
get ten UARTs into the 3512. But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data. If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs. In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
Search within this category only
Search within this manufacturer only
Feature Description Feature Value
Package 676FCBGA
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 487
RAM Bits 589824
Re-programmability Support Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts? the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.
The first digit after the dash -4 or -5 is the speed of the part. The
parts are the same, but they are tested to different speeds. The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial). The rest of the suffix
is the package. Mostly all the different sized parts have similar
timing. But some timing numbers are different. Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.
If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package. So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power. Other than that, you need to consult the
data sheet for the board. They should provide specs on how to use the
board stand alone.
Rick
"Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill. "
I don't get this, but I get it from a lot of hardware folks. The
s1500 is a $74 chip. the coolrunner, that is 1/100 the chip, is what
$60? so for $14 I get 100x the power?
Coolrunner chips are not about "logic" power. They are about Watt
power. They are very low current, require no booting, and power up
immediately (ns) rather than requiring some milliseconds before they
can operate.
Post by jleslie48
This is a no-brainer IMO for a production run of less than 10,000 and
your total system cost is over $1000. Especially when you are
basically prototyping. The system I'm supposed to integrate with has
in the box a green hills stack with a 1553 card, the 1553 card alone
is $16,000. The amount of engineering time I've spent fighting with
the $14 decision to go with the coolrunner on a subsystem vs something
bigger and a .001% increase in cost (to the whole system) is
ridiculous. If I can't get this to fit on the coolrunner I'm looking
at adding another card and as such all the implications to SWAP (size
weight and power) , that it in-tails, re-laying out the box, etc, all
for a $14 decision on a $25,000 box... don't even get me started on
how stupid the the sub-system card was laid out. You can't even tell
if it gets power, it doesn't have a single LED on it...
Well, you could always bring in a consultant to help fit your logic
into the device or even redesign the card with the Coolrunner on it.
What is the cost of further schedule delays? ;^)
Rick
Ok, so the coolrunner was a total mis-cue from the ancestors on this
project. They are looking at powering
PC104 stacks, they've got a 28volt power supply in this beast, plus
who knows what else; I'm sure why the coolrunner was picked had
nothing to do with Watt power or boot up speed, that pc104 stack is a
dog and a FPGA bootup is small potatos in the scheme of things.

"Actually, after I made the post I realized that the generic W
defaults
to 4, specifying 16 bytes in the FIFO, but is set to 2 in the calling
code specifying only 4 registers. Still, that is 64 FFs even if it
doesn't get you back under the wire, it will help."

Ah yes, that is true, but what isn't made clear is that my data is no
longer 8 bit ASCII. Its a 64 bit custom bitstream, so those 4
registers are holding 64 bit data not 8. How does that FF calcuation
work again against the coolrunners jury-rigged, FF based registers?
I'm hoping this is the solution, get rid of the FIFO and the simple
state machine, bit shifting UART is tiny.
rickman
2009-03-22 14:13:59 UTC
Permalink
Post by jleslie48
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that.  A UART can be done in a small number of FFs, or
in your case, a small number of macrocells.  I expect it to be easy to
get ten UARTs into the 3512.  But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data.  If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs.  In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes.  If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
        Search within this category only
        Search within this manufacturer only
        Feature Description     Feature Value
        Package         676FCBGA
        Family Name     Spartan®-3
        Device Logic Cells      29952
        Device Logic Units      3328
        Device System Gates     1500000
        Number of Registers     N/A
        Maximum Internal Frequency      630 MHz
        Typical Operating Supply Voltage        1.2 V
        Maximum Number of User I/Os     487
        RAM Bits        589824
        Re-programmability Support      Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts?  the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.
The first digit after the dash -4 or -5 is the speed of the part.  The
parts are the same, but they are tested to different speeds.  The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial).  The rest of the suffix
is the package.  Mostly all the different sized parts have similar
timing.  But some timing numbers are different.  Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.
If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package.  So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1  has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power.  Other than that, you need to consult the
data sheet for the board.  They should provide specs on how to use the
board stand alone.
Rick
"Yes.  If four UARTs is all you want, the XC3S1500 is very much
overkill. "
I don't get this, but I get it from a lot of hardware folks.  The
s1500 is a $74 chip. the coolrunner, that is 1/100 the chip, is what
$60?   so for $14 I get 100x the power?
Coolrunner chips are not about "logic" power.  They are about Watt
power.  They are very low current, require no booting, and power up
immediately (ns) rather than requiring some milliseconds before they
can operate.
This is a no-brainer IMO for a production run of less than 10,000 and
your total system cost is over $1000.  Especially when you are
basically prototyping. The system I'm supposed to integrate with has
in the box a green hills stack with a 1553 card, the 1553 card alone
is $16,000. The amount of engineering time I've spent  fighting with
the $14 decision to go with the coolrunner on a subsystem vs something
bigger and a .001% increase in cost (to the whole system) is
ridiculous.  If I can't get this to fit on the coolrunner I'm looking
at adding another card and as such all the implications to SWAP (size
weight and power) , that it in-tails, re-laying out the box, etc, all
for a $14 decision on a $25,000 box...  don't even get me started on
how stupid the the sub-system card was laid out. You can't even tell
if it gets power, it doesn't have a single LED on it...
Well, you could always bring in a consultant to help fit your logic
into the device or even redesign the card with the Coolrunner on it.
What is the cost of further schedule delays?  ;^)
Rick
Ok, so the coolrunner was a total mis-cue from the ancestors on this
project.  They are looking at powering
PC104 stacks, they've got a 28volt power supply in this beast, plus
who knows what else; I'm sure why the coolrunner was picked had
nothing to do with Watt power or boot up speed, that pc104 stack is a
dog and a FPGA bootup is small potatos in the scheme of things.
It's hard to say why they picked the parts they did. Is this a custom
board the coolrunner is on? Is this a complex board? If not, this
can be redone with a different part without too much difficulty or
time. Board houses can turn a board in literally a couple of days if
you don't mind paying a premium. But then you said you were out of
hardware money.
Post by jleslie48
"Actually, after I made the post I realized that the generic W
defaults
to 4, specifying 16 bytes in the FIFO, but is set to 2 in the calling
code specifying only 4 registers.  Still, that is 64 FFs even if it
doesn't get you back under the wire, it will help."
Ah yes, that is true, but what isn't made clear is that my data is no
longer 8 bit ASCII.  Its a 64 bit custom bitstream, so those 4
registers are holding 64 bit data not 8.  How does that FF calcuation
work again against the coolrunners jury-rigged, FF based registers?
I'm hoping this is the solution, get rid of the FIFO and the simple
state machine, bit shifting UART is tiny.
Actually, I said the above wrong. The default for W is something like
16 registers in the FIFO. The value passed into the FIFO code is 4
which means it is only using 64 FFs for the FIFO buffer, plus what
ever shakes out in the control logic.

If you have a 64 bit register, and it is custom, do you really need a
UART? Does this need to be async serial? If you are receiving this
in another controlled device SPI would let you do what you want and be
simpler. SPI is like a UART, but no start/stop bits, just data. Plug
a byte into the shifter and it sends out the data; keep plugging in
bytes until your burst is done and the whole thing is transferred as
if it were one word. SPI transmit and receive use the same register,
so that also cuts resource usage. A lot of this depends on what the
other logic is like. However, CPLDs tend to be rich in logic so you
should be able to generate the data in this part if you can get the FF
count down. But the devil is in the details.

If you are sending this to a PC serial port then you need to keep the
UART, just make a very simple UART.

In the thread where you are discussing the boot prom with Josep, yes,
most FPGAs require a boot prom or direct boot control by a CPU. Some
have internal Flash, Lattice parts notably. But certainly any board
level product will include at least one means of booting the FPGA if
not several.

Rick
jleslie48
2009-03-22 14:42:56 UTC
Permalink
Post by rickman
Post by jleslie48
Post by rickman
Post by jleslie48
Post by rickman
Post by jleslie48
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would not say that. A UART can be done in a small number of FFs, or
in your case, a small number of macrocells. I expect it to be easy to
get ten UARTs into the 3512. But the code you have for a UART is very
large and overly complex if you just want to do serial transmission
and reception of data. If you just want to *send* data the size can
be reduced further.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Certainly an XC3S1500 is plenty large enough for four UARTs. In that
size part you could have not only the UARTs, but also the CPU!
Post by jleslie48
2A) I really want to put 3 or 4 UARTS onto the chip, Is it big enough
for that?
Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill.
Post by jleslie48
Xilinx XC3S1500-4FG676C
FPGA Spartan®-3 Family 1.5M Gates 29952 Cells 630MHz Commercial 90nm
Technology 1.2V 676-Pin FCBGA
Cross to Alternate Parts by selecting most important features and
values below and then search again
Search within this category only
Search within this manufacturer only
Feature Description Feature Value
Package 676FCBGA
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 487
RAM Bits 589824
Re-programmability Support Yes
Whats the deal withe the "PACKAGE" ( 676FCBGA)
http://avnetexpress.avnet.com/store/em/EMController?langId=-1&storeId...
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
XC3S1500-4FGG456C
XC3S1500-5FG456C
XC3S1500-5FGG456C
XC3S1500-4FGG320C
XC3S1500-4FGG320I
XC3S1500-5FGG676C
XC3S1500-4FGG676C
XC3S1500-4FG320I
XC3S1500-4FG456I
XC3S1500-4FG676I
XC3S1500-4FGG456I
XC3S1500-4FGG676I
XC3S1500-5FG320C
XC3S1500-5FG676C
XC3S1500-5FGG320C
XC3S1500-5FGG320
how interchangeable are these parts? the ds0099.pdf data sheet is not
geared towards just eh xc3s1500, I'm getting confused within its 219
pages...
They are all the same die and will likely all run the same bitstream.
You really only need to worry about the package you are using unless
you want to target different boards.
The first digit after the dash -4 or -5 is the speed of the part. The
parts are the same, but they are tested to different speeds. The
letter at the end is the temperature rating, C for commerical
(normally 0 to 70 C ambient, but I think Xilinx specs a higher number
and says this has to be the die temperature) and I for industrial (-20
to +85 C with the same issue as commercial). The rest of the suffix
is the package. Mostly all the different sized parts have similar
timing. But some timing numbers are different. Anything that is
widely distributed across the chip has further to go in the larger
chips, so it runs slower.
If you want to design for a range of packages you mainly need to limit
your design to the I/O pins that are used on the smallest package. So
make sure every package you want to use supports all of those pins.
Otherwise you should have no problems.
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
The board will need power. Other than that, you need to consult the
data sheet for the board. They should provide specs on how to use the
board stand alone.
Rick
"Yes. If four UARTs is all you want, the XC3S1500 is very much
overkill. "
I don't get this, but I get it from a lot of hardware folks. The
s1500 is a $74 chip. the coolrunner, that is 1/100 the chip, is what
$60? so for $14 I get 100x the power?
Coolrunner chips are not about "logic" power. They are about Watt
power. They are very low current, require no booting, and power up
immediately (ns) rather than requiring some milliseconds before they
can operate.
Post by jleslie48
This is a no-brainer IMO for a production run of less than 10,000 and
your total system cost is over $1000. Especially when you are
basically prototyping. The system I'm supposed to integrate with has
in the box a green hills stack with a 1553 card, the 1553 card alone
is $16,000. The amount of engineering time I've spent fighting with
the $14 decision to go with the coolrunner on a subsystem vs something
bigger and a .001% increase in cost (to the whole system) is
ridiculous. If I can't get this to fit on the coolrunner I'm looking
at adding another card and as such all the implications to SWAP (size
weight and power) , that it in-tails, re-laying out the box, etc, all
for a $14 decision on a $25,000 box... don't even get me started on
how stupid the the sub-system card was laid out. You can't even tell
if it gets power, it doesn't have a single LED on it...
Well, you could always bring in a consultant to help fit your logic
into the device or even redesign the card with the Coolrunner on it.
What is the cost of further schedule delays? ;^)
Rick
Ok, so the coolrunner was a total mis-cue from the ancestors on this
project. They are looking at powering
PC104 stacks, they've got a 28volt power supply in this beast, plus
who knows what else; I'm sure why the coolrunner was picked had
nothing to do with Watt power or boot up speed, that pc104 stack is a
dog and a FPGA bootup is small potatos in the scheme of things.
It's hard to say why they picked the parts they did. Is this a custom
board the coolrunner is on? Is this a complex board? If not, this
can be redone with a different part without too much difficulty or
time. Board houses can turn a board in literally a couple of days if
you don't mind paying a premium. But then you said you were out of
hardware money.
Post by jleslie48
"Actually, after I made the post I realized that the generic W
defaults
to 4, specifying 16 bytes in the FIFO, but is set to 2 in the calling
code specifying only 4 registers. Still, that is 64 FFs even if it
doesn't get you back under the wire, it will help."
Ah yes, that is true, but what isn't made clear is that my data is no
longer 8 bit ASCII. Its a 64 bit custom bitstream, so those 4
registers are holding 64 bit data not 8. How does that FF calcuation
work again against the coolrunners jury-rigged, FF based registers?
I'm hoping this is the solution, get rid of the FIFO and the simple
state machine, bit shifting UART is tiny.
Actually, I said the above wrong. The default for W is something like
16 registers in the FIFO. The value passed into the FIFO code is 4
which means it is only using 64 FFs for the FIFO buffer, plus what
ever shakes out in the control logic.
If you have a 64 bit register, and it is custom, do you really need a
UART? Does this need to be async serial? If you are receiving this
in another controlled device SPI would let you do what you want and be
simpler. SPI is like a UART, but no start/stop bits, just data. Plug
a byte into the shifter and it sends out the data; keep plugging in
bytes until your burst is done and the whole thing is transferred as
if it were one word. SPI transmit and receive use the same register,
so that also cuts resource usage. A lot of this depends on what the
other logic is like. However, CPLDs tend to be rich in logic so you
should be able to generate the data in this part if you can get the FF
count down. But the devil is in the details.
If you are sending this to a PC serial port then you need to keep the
UART, just make a very simple UART.
In the thread where you are discussing the boot prom with Josep, yes,
most FPGAs require a boot prom or direct boot control by a CPU. Some
have internal Flash, Lattice parts notably. But certainly any board
level product will include at least one means of booting the FPGA if
not several.
Rick
Morning Rick.
Post by rickman
It's hard to say why they picked the parts they did. Is this a custom
board the coolrunner is on? Is this a complex board? If not, this
can be redone with a different part without too much difficulty or
time. Board houses can turn a board in literally a couple of days if
you don't mind paying a premium. But then you said you were out of
hardware money.
Its a custom board, and we've already allocated $$$ to the re-sping to
the board house. When I say we are out of money its that there is
nothing left for anything new. Actually that's a load of bunk anyway,
we have a deliverable and we are going to pay to whatever we have to
to make sure we deliver, but I best do my due-diligence to make it as
least painful as possible.

Every time we go to the board houses its a mess. it always takes the
hardware boys 3-4 times to get it right. I don't have the time for
that to fix this problem. It's bad enough they will have to modify
the current board for the additonal features, If the pin layout is
different, voltage levels different, etc, (and I'm sure they are) Its
gonna be a big mess.
Post by rickman
If you have a 64 bit register, and it is custom, do you really need a
UART? Does this need to be async serial? If you are receiving this
in another controlled device SPI would let you do what you want and be
simpler. SPI is like a UART, but no start/stop bits, just data. Plug
a byte into the shifter and it sends out the data; keep plugging in
bytes until your burst is done and the whole thing is transferred as
if it were one word.
yes it has to be async serial. Its not my protocol, its a functional
spec. and have you looked at my UART?

all it is is a shifter, I don't think is can get any simpler. I think
you really hit the nail on the head before with the
fifo que not being efficient in a coolrunner environment. I'll be
trying that out first thing on Monday.
Post by rickman
But certainly any board
level product will include at least one means of booting the FPGA if
not several.
-- yeah, josep and I had a mis-communication. He thought I was just
looking at a replacement chip for the
custom board that is currently housing the coolrunner chip. I was
talking about using the enterpoint BOARDS as
a stand alone solution to my communcations needs. I'll be on the
phone with enterpoint on monday morning and clarifying this stuff.
I'll be able to push through the purchase of the boards; so long as
they get the job done. If they don't work then I'm in trouble. My
biggest problem is that I set the expectation that I could get it done
with the coolrunner as it is, with ZERO addtional hardware. I know I
told them that there might be a space problem and I might have to go
with a second board, but that of course is the first thing the PM has
forgotten. All he remembers is that I said no additional hardware and
now I'm looking at a new board for the stack. I shoulda sent a memo...
Brian Drummond
2009-03-22 00:39:46 UTC
Permalink
Post by jleslie48
Hey everybody, thanks for all the good suggestions.
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would expect it can easily handle a UART - or several.
But a UART and whatever else lies behind it - that could be another matter.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Seems well over 10x the chip you have now.
And there are XC3S2000 and 4000 if it isn't...
Post by jleslie48
Whats the deal withe the "PACKAGE" ( 676FCBGA)
well it's not something you'd hand solder...
Post by jleslie48
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
3 packages, 2 speed grades (say 15-20% apart), leaded/lead-free,
commercial/industrial speed grades, but basically all the same chip.
Take your pick. (The larger 2000/4000 devices may only be available in the
largest package)
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
I'd guess you can power it and use the headers for I/O even without the PCI
header. It's far from being the only option but it's an attractively large FPGA
for the money. (If the package, or hand soldering, is an issue, look at the DIP
or pin-grid-array replacements on the same site).

If you need to save every milliwatt, stay with the Coolrunner.

Otherwise given the cost constraints you mentioned, I'd say you shouldn't be
wasting time trying to fit a too-small device. Is your software team trying to
keep their executable below 4K?

- Brian
jleslie48
2009-03-22 02:19:09 UTC
Permalink
Post by Brian Drummond
Post by jleslie48
Hey everybody, thanks for all the good suggestions.
1) So it is reasonable to conclude that the cold runner 3512 is way
too small to even run a uart yes?
I would expect it can easily handle a UART - or several.
But a UART and whatever else lies behind it - that could be another matter.
Post by jleslie48
2) is the board that Brian suggested, the raggedstone1 with the
spartan XC3S1500 is big enough?
Seems well over 10x the chip you have now.
And there are XC3S2000 and 4000 if it isn't...
Post by jleslie48
Whats the deal withe the "PACKAGE" ( 676FCBGA)
well it's not something you'd hand solder...
Post by jleslie48
XC3S1500-4FG320C
XC3S1500-4FG456C
XC3S1500-4FG676C
3 packages, 2 speed grades (say 15-20% apart), leaded/lead-free,
commercial/industrial speed grades, but basically all the same chip.
Take your pick. (The larger 2000/4000 devices may only be available in the
largest package)
Post by jleslie48
3) The raggedstone1 has an added feature that I was told to consider,
mounting into a PC. Initially I want to put it a stand alone box, so I
will need to order the board, the PCI I/O header, and the Ocsillator
and then I'm good to go yes?
I'd guess you can power it and use the headers for I/O even without the PCI
header. It's far from being the only option but it's an attractively large FPGA
for the money. (If the package, or hand soldering, is an issue, look at the DIP
or pin-grid-array replacements on the same site).
If you need to save every milliwatt, stay with the Coolrunner.
Otherwise given the cost constraints you mentioned, I'd say you shouldn't be
wasting time trying to fit a too-small device. Is your software team trying to
keep their executable below 4K?
- Brian
"Is your software team trying to keep their executable below 4K?"

first off the software team is me. For 20 years now I keep getting
suckered into these solo missions into [the companies] no man land...

I'm sorry are you referring to $4k or some size requirement of 4k???
We have yet to discuss a unit of measure for the size of the
executable, is that something else I'm overlooking? Is that an Issue
with the enterpoint solutions? I'm assuming I can load the program
into the enterpoint solutions and on powerup they start to
function...The coolrunner was able to do that, although I dont know
about any limitation to the executable size on the coolrunner that I'm
having trouble with other than the resource issues that started this
conversation.

The guys on this project have blown their budget for hardware already,
at least for this next deliverable, so any $$$ I spend (not counting
labor) are being watched carefully. Meantime they forgot this whole
set of functionality and now have to patch it in somehow. So they
brought me in. On the one card that is freed up, they have the
coolrunner chip, and as I was having so much fun with fpga-vhdl up
until a month ago, I figured I could use it and not have to add any
hardware components to the project. this was a very attractive
solution to the PM (program manager) The board is going to be re-spun
anyway to fix some cross talk issues, so breaking out a few of the
unused pins on the coolrunner for the added functionality wasn't
really going to impact the project at all. So while I got the new
functionality to work on my virtex II chip, the hardware boys built me
a jury-rigged daughter board for the old coldrunner board: they
actually hand soldered 30 gauge wire to the pins of the coolrunner,
broke it out to a DB15 where I could attach a daughter board to get
the digital I/O onto a scope/leds/level shifters. All was going well
until I popped the FF thing on the coolrunner.

So I Imagine I'm gonna either get it all to fit on the coolrunner, or
go with a new card, those cards from enterpoint look quite reasonable,
especially the really small ones. That solution is gonna add to my
footprint, the boss is gonna be pissed but hey, at least its no longer
a dead fish. SWAP is more of an issue than even the money. Actually I
don't even care about Power, its just the size and weight. Those
really little cards will be a lot easier to sell than the bigger
raggedstone1.

So back to the issue at had, the

1) Drigmorn1 has a XC3S500E-4CPG132C spartan-3 chip:
Xilinx XC3S500E-4CPG132C
FPGA Spartan®-3E Family
500K Gates
10476 Cells
572MHz
Commercial 90nm (CMOS) Technology
1.2V 132-Pin CSBGA
Package 132CSBGA
Family Name Spartan®-3E
Device Logic Cells 10476
Device Logic Units 1164
Device System Gates 500000
Number of Registers 9312
Maximum Internal Frequency 572 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 92
RAM Bits 368640
Re-programmability Support Yes


2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,

3) the Raggedstone1 has a XC3S1500 chip:
Xilinx XC3S1500-4FG320C
FPGA Spartan®-3 Family
1.5M Gates
29952 Cells
630MHz
Commercial 90nm Technology
1.2V
320-Pin FPBGA
Package ??? 320FPBGA ????
Family Name Spartan®-3
Device Logic Cells 29952
Device Logic Units 3328
Device System Gates 1500000
Number of Registers N/A
Maximum Internal Frequency 630 MHz
Typical Operating Supply Voltage 1.2 V
Maximum Number of User I/Os 221
RAM Bits 589824
Re-programmability Support Yes

Which of these products will do the job and not be too small like the
coolrunner?
djj08230
2009-03-22 11:41:02 UTC
Permalink
Post by jleslie48
So back to the issue at had, the
2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,
Which of these products will do the job and not be too small like the
coolrunner?
IMHO any of these should be enough. A UART can be made very simple, or
it may have lots of bells and whistles.
The good thing is that you can run place and route and see what device
fits better.
You really should.
Of course, you are aware that you need the FPGA + some sort of device
to boot it.

Good luck.


Josep Duran
jleslie48
2009-03-22 12:22:14 UTC
Permalink
Post by djj08230
Post by jleslie48
So back to the issue at had, the
2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,
Which of these products will do the job and not be too small like the
coolrunner?
IMHO any of these should be enough. A UART can be made very simple, or
it may have lots of bells and whistles.
The good thing is that you can run place and route and see what device
fits better.
You really should.
Of course, you are aware that you need the FPGA + some sort of device
to boot it.
Good luck.
Josep Duran
Good morning.

"Of course, you are aware that you need the FPGA + some sort of device
to boot it."

No I'm not aware, are you saying these devices can't be loaded with
the software so when they
power up they start running?
Hal Murray
2009-03-22 17:41:48 UTC
Permalink
Post by jleslie48
No I'm not aware, are you saying these devices can't be loaded with
the software so when they
power up they start running?
Why haven't you looked at the data sheet? Yes, it's huge, but
you should have looked close enough to found the section
that describes loading it.
--
These are my opinions, not necessarily my employer's. I hate spam.
jleslie48
2009-03-22 18:30:31 UTC
Permalink
Post by Hal Murray
Post by jleslie48
No I'm not aware, are you saying these devices can't be loaded with
the software so when they
power up they start running?
Why haven't you looked at the data sheet? Yes, it's huge, but
you should have looked close enough to found the section
that describes loading it.
--
These are my opinions, not necessarily my employer's. I hate spam.
I did and was comfortable that I saw I could load it up. However when
Josep
stated:
"Of course, you are aware that you need the FPGA + some sort of device
to boot it. "

I thought I mis-understood something. Josep is clearly warning me
that this needs some sort of device to boot it. The last thing I
need is to push a PO on my boss only to find out it isn't going to do
the job.

Plus I'm sorry these data sheets don't spell this stuff out. They
seem to spend a lot of time telling you stuff so they can say "it was
in the data sheet" meantime the data sheet doesn't say the basics in
plain english. for example in chapter 1, page one should be a heading
"FEATURES OF THIS BOARD "

1) xxx01 FF's
2) xxx02 macrocells
3) xxx03 pterms
4) onboard oscillator of xxx04 MHZ
5) slot for a different oscillator up to xxx05 MHZ
6) eprom for autoboot
7) xxx06-xxx07 input voltage range
8) peak amps: xxx08 ma
9) typical amps running: xxx09 ma
10) ) load your program from ISE Project manager into the onboard
prom.
11) load program using included xxx10 cable, or xxx11 cable (available
separately) or
xxx12 cable from xilinx...
12) <<detailed photograph of top side all lettering easily readable>>
13) <<detailed photograph of back side all lettering easily readable>>
14) <<detailed photographs of all sides if connectors are at 90
degrees>>
15) << one or two isometric views with either a ruler or some scale
reference (a pen, computer CD or such >>
16) << picture/drawing of expected runtime deployment environment>>
17) << picture/drawing of expected programming envionment>>
18) list of what is included in the package
19) list of what is not included but required to program/run
20) list of what are the optional parts.
21) ...

Plus every board should come with a "hello world" program, that the
user should be able to follow a step-by-step
guide and get results and thus confirm that all is in working order.

I see that the raggedstone1 has really tried to get that "hello world"
program and step-by-step guide in place:
http://www.enterpoint.co.uk/techitips/Programming%20Raggedstone1%20User%20Guide.pdf

On the strength of that document alone they are going to get me as a
customer. Its as good as I've seen, even though it fails to show the
cable connections for the board to the PC/ power supplies. I only
wish my diligent board and ISE 10.1 project navigator had a document
like that when I purchased that way back. If I had seen the
raggedstone1 then I would have bought 5 of those instead of the 1
diligent board.

That reminds me, I was looking at the waggle test for the drigmorn:
http://www.enterpoint.co.uk/component_replacements/drigmorn1_apps.html

in the user manual it said the the waggle test has a loopback for the
rs232 but I don't see th at in the .vhd code:
http://www.enterpoint.co.uk/component_replacements/DRIGMORN1_WAGGLE_TEST1.VHD

what's am I missing?
jleslie48
2009-03-22 12:44:14 UTC
Permalink
Post by djj08230
Post by jleslie48
So back to the issue at had, the
2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,
Which of these products will do the job and not be too small like the
coolrunner?
IMHO any of these should be enough. A UART can be made very simple, or
it may have lots of bells and whistles.
The good thing is that you can run place and route and see what device
fits better.
You really should.
Of course, you are aware that you need the FPGA + some sort of device
to boot it.
Good luck.
Josep Duran
Now you got me all freaked out again.

I'm looking at this wonderful manual:
http://www.enterpoint.co.uk/techitips/Programming%20Raggedstone1%20User%20Guide.pdf

and its beautiful. why xilinx can't make something like this is
ridiculous. This is what is needed.

Anyway, it seems to me on page 23 of this guide it is programming a
PROM. I read this as the raggedstone1 has built in a "some sort of
device to boot it." as in the FPGA that is on the card will boot from
its own onboard PROM. I'm also assuming that the PROM is big enough
so I can load my UART program into this PROM, power down the unit and
when I power it up the program starts up, starts talking on the UART,
blinking whatever LED's I tell it to blink, etc...

I ASSUMED the other two devices the craig and the drigmorn were
similiar, Can someone confirm or deny this?
djj08230
2009-03-22 13:10:56 UTC
Permalink
Post by jleslie48
Post by djj08230
Post by jleslie48
So back to the issue at had, the
2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,
Which of these products will do the job and not be too small like the
coolrunner?
IMHO any of these should be enough. A UART can be made very simple, or
it may have lots of bells and whistles.
The good thing is that you can run place and route and see what device
fits better.
You really should.
Of course, you are aware that you need the FPGA + some sort of device
to boot it.
Good luck.
Josep Duran
Now you got me all freaked out again.
I'm looking at this wonderful manual:http://www.enterpoint.co.uk/techitips/Programming%20Raggedstone1%20Us...
and its beautiful.  why xilinx can't make something like this is
ridiculous.  This is what is needed.
Anyway, it seems to me on page 23 of this guide it is programming a
PROM.  I read this as the raggedstone1 has built in a "some sort of
device to boot it."  as in the FPGA that is on the card will boot from
its own onboard PROM.  I'm also assuming that the PROM is big enough
so I can load my UART program into this PROM, power down the unit and
when I power it up the program starts up, starts talking on the UART,
blinking whatever LED's I tell it to blink, etc...
I ASSUMED the other two devices the craig and the drigmorn were
similiar, Can someone confirm or deny this?
I've been reading the thread, and I may have missed something. The
responses you get are from 'experts' so there really is nothing I can
add.

Raggedstone and the other products from ENTERPOINT are complete boards
that include the FPGA and all the support needed to make a fully
functional board. (May include other unneeded functionality). If I
recall correctly, Raggedstone board actually includes an interface to
a PCI BUS.

I was under the impresion that you wanted to replace a Coolrunner for
an FPGA in order to get more gates. If this is so, just be aware that
the spartan-3 series usually need and external memory to load the
configuration at power on. You also need 3 different supplies 3.3v,
2.5v and 1.2v. (not sure if 3.3v is mandatory) And of course some sort
of external oscillator that you probably already have.
(as somenone already mentioned, the Spartan3AN has some flash memory
on chip)

I am also under the impresion that you are in a hurry. If this is so,
probably your best move would be get help from a professional external
source. Not that this is rocket science, but you should expect to be
bitten by the tools in the first few weeks.

I never meant to scare you, this is just my point of view.

Josep Duran
jleslie48
2009-03-22 14:00:03 UTC
Permalink
Post by djj08230
Post by jleslie48
Post by djj08230
Post by jleslie48
So back to the issue at had, the
2) the Craignell has a (Xilinx XC3S500E) Spartan-3E chip as well,
Which of these products will do the job and not be too small like the
coolrunner?
IMHO any of these should be enough. A UART can be made very simple, or
it may have lots of bells and whistles.
The good thing is that you can run place and route and see what device
fits better.
You really should.
Of course, you are aware that you need the FPGA + some sort of device
to boot it.
Good luck.
Josep Duran
Now you got me all freaked out again.
I'm looking at this wonderful manual:http://www.enterpoint.co.uk/techitips/Programming%20Raggedstone1%20Us...
and its beautiful. why xilinx can't make something like this is
ridiculous. This is what is needed.
Anyway, it seems to me on page 23 of this guide it is programming a
PROM. I read this as the raggedstone1 has built in a "some sort of
device to boot it." as in the FPGA that is on the card will boot from
its own onboard PROM. I'm also assuming that the PROM is big enough
so I can load my UART program into this PROM, power down the unit and
when I power it up the program starts up, starts talking on the UART,
blinking whatever LED's I tell it to blink, etc...
I ASSUMED the other two devices the craig and the drigmorn were
similiar, Can someone confirm or deny this?
I've been reading the thread, and I may have missed something. The
responses you get are from 'experts' so there really is nothing I can
add.
Raggedstone and the other products from ENTERPOINT are complete boards
that include the FPGA and all the support needed to make a fully
functional board. (May include other unneeded functionality). If I
recall correctly, Raggedstone board actually includes an interface to
a PCI BUS.
I was under the impresion that you wanted to replace a Coolrunner for
an FPGA in order to get more gates. If this is so, just be aware that
the spartan-3 series usually need and external memory to load the
configuration at power on. You also need 3 different supplies 3.3v,
2.5v and 1.2v. (not sure if 3.3v is mandatory) And of course some sort
of external oscillator that you probably already have.
(as somenone already mentioned, the Spartan3AN has some flash memory
on chip)
I am also under the impresion that you are in a hurry. If this is so,
probably your best move would be get help from a professional external
source. Not that this is rocket science, but you should expect to be
bitten by the tools in the first few weeks.
I never meant to scare you, this is just my point of view.
Josep Duran
Ahh!!! ok whew!!!!

My first choice is to get it all to fit on the coolrunner: I'm not
sure it will, but I'm not convinced it won't either. This is the best
path as it requires the least amount of re-engineering of the
hardware.

Replacing the coolrunner chip is probably the best solution, but it
will be a huge effort, and is not in the time constraints I have. I'd
love to replace the coolrunner CHIP on the custom made interface
board, but that will not be something I can do quick. I realize
that. The entire board will have to be redone to match the new chip,
the traces all redone, etc, plus there is an old program written for
the coolrunner and if nothing else all its pins have to be moved to
the new chip, let alone any programming subtilties that might pop up.
No I would not attempt this without knowing full well what the
coolrunner was doing originally, and making sure the new chip meets
that needs. That's not going to be a quick fix.

No, at this time, I'm just hoping to ADD an entire new card to do the
functionality that I need, That's the best I can hope for in my
timeframe.

The idea is to get one of the three (I'll probably buy all three just
to try them out.) to do my UART thing, and then just program the old
coldrunner with some new digital outputs and inputs to tell the new
board to start, stop, ack etc. An ugly patch job, but it will work, SO
LONG AS WHATEVER BOARD I USE BOOTS UP, AND RUNS THE NEW UARTS.

The boss will hate it, but at least it will work. That's a whole lot
better than the paperweight he has now. Next time he should of spec-
ed out the scope of the functionality a bit better. Also the pred-
ecessors should of been a little more forward thinking of growth. It
is ridiculous that they picked a $75 coolrunner and loaded it up to
70% of capacity. I'm looking at the Spartan chips, at $20- $70 that
are 10-50x more powerful, and shaking my head as to why they went with
the coolrunner. The guy that picked it is long gone. My guess is
that he used it before, and knew it would do what he was asked to do.
My rule of thumb is for a first prototype is to never be more than 25%
of capacity.

When you have to a production run of more than 1000 units, then you
worry about right-sizing. Meantime the spartan would still have been
way cheaper anyway for all their "right-sizing" effort. Right-sizing
is only important if it saves you something.

I looked over the BOM for the box. These knuckleheads managed to find
a $30 momentary switch to use as a reset switch on the box and then
tell me they saved money by right-sizing the chip...
djj08230
2009-03-22 18:04:29 UTC
Permalink
Post by jleslie48
When you have to a production run of more than 1000 units, then you
worry about right-sizing. Meantime the spartan would still have been
way cheaper anyway for all their "right-sizing" effort. Right-sizing
is only important if it saves you something.
Please, allow me to point in a completely different direction. As you
are a software guy, you have probably considered implementing the
UARTS in a uC. I think a small AVR (or PIC) could easily handle 10
serial channels, particullarly at slow baud rates. Is there a reason
why you wouldn't follow this path ?
(I am talking about a complete software implementation here)

It is not about cost, but about development time.


Josep Duràn
jleslie48
2009-03-22 18:55:02 UTC
Permalink
Post by djj08230
Post by jleslie48
When you have to a production run of more than 1000 units, then you
worry about right-sizing. Meantime the spartan would still have been
way cheaper anyway for all their "right-sizing" effort. Right-sizing
is only important if it saves you something.
Please, allow me to point in a completely different direction. As you
are a software guy, you have probably considered implementing the
UARTS in a uC. I think a small AVR (or PIC) could easily handle 10
serial channels, particullarly at slow baud rates. Is there a reason
why you wouldn't follow this path ?
(I am talking about a complete software implementation here)
It is not about cost, but about development time.
Josep Duràn
"you have probably considered implementing the
UARTS in a uC. I think a small AVR (or PIC) "

ahh, no I havent.
I don't know what those things are: uC, AVR, PIC.
I was told our company wants to have things done in FPGA so that is
were I have been looking for solutions. I was hired to figure it out
on the strength of my wits to keep looking and not give up. I had 10
years of experience in PLC programming, and Prior to this job I spent
10 years on wall st in the forex data processing dept. However, DSP,
FPGA, VHDL, were are brand new terms to me when I started with this
company and you have just introduced me to 3 more terms.

Plus I've hinted at the fact, but not declared it, I am only using the
UART as an methodology for controlling a digital signal. I have to
speed these things up into the MHZ "baud" rate environment.

In addition, without even knowing what a line of VHDL code looked like
3 months ago, I'm getting pretty good at controlling digital signals
already. so the development time curve is not that bad. I'd hate to
think how much time it will take me to pick out a uC/AVR/PIC
solution. It took me 8 man days to program the entire solution to to
our product's deficiencies on my Virtex-II Pro, a day to move the
code into the coolrunner and on Friday at 1:00pm I fell into the tiger
trap on the size problems on the coolrunner. Here it is 2 days later
(10 man days ok so I've been working on the weekend) and Its beginning
to look like I've got a workaround.

I don't see another solution having a faster development time than 2
weeks.

Shoot, it took the original boys 3 months just to pick out the
coolrunner... and for a nickel I'd give them all an atomic wedgie for
being so bone ass short sighted...
djj08230
2009-03-22 19:07:38 UTC
Permalink
Post by jleslie48
It took me 8 man days to program the entire solution to to
our product's deficiencies on my Virtex-II Pro,  a day to move the
code into the coolrunner and on Friday at 1:00pm I fell into the tiger
trap on the size problems on the coolrunner. Here it is 2 days later
(10 man days ok so I've been working on the weekend) and Its beginning
to look like I've got a workaround.
I don't see another solution having a faster development time than 2
weeks.
Shoot, it took the original boys 3 months just to pick out the
coolrunner...  and for a nickel I'd give them all an atomic wedgie for
being so bone ass short sighted...
I know from experience that these man-days thing is not a reliable
unit. Sometimes we are talking about different men, sometimes
different days. ;)

Good luck


Josep Duran
glen herrmannsfeldt
2009-03-22 19:23:24 UTC
Permalink
Post by djj08230
I know from experience that these man-days thing is not a reliable
unit. Sometimes we are talking about different men, sometimes
different days. ;)
There is a whole book, "Mythical Man-Month" about that.
Specifically about software engineering, though now probably
could be extended to hardware, too.

-- glen
jleslie48
2009-03-22 19:30:46 UTC
Permalink
Post by glen herrmannsfeldt
Post by djj08230
I know from experience that these man-days thing is not a reliable
unit. Sometimes we are talking about different men, sometimes
different days. ;)
There is a whole book, "Mythical Man-Month" about that.
Specifically about software engineering, though now probably
could be extended to hardware, too.
-- glen
LOL. I bought for my PM a pair of 10-sided dice. I marked one of the
die red. when he wants to know how long something is going to take me
I told him to roll the dice. the red one is the tens column and the
white one is the ones.

I swear its the truth:

http://cgi.ebay.com/Lot-of-20-white-odd-size-10-sided-game-dice-NEW_W0QQitemZ310127393388QQihZ021QQcategoryZ7317QQssPageNameZWDVWQQrdZ1QQcmdZViewItem
Jonathan Bromley
2009-03-22 22:31:58 UTC
Permalink
Post by jleslie48
LOL. I bought for my PM a pair of 10-sided dice. I marked one of the
die red. when he wants to know how long something is going to take me
I told him to roll the dice. the red one is the tens column and the
white one is the ones.
But don't you see... your _whole_team_ is playing Russian roulette
with the project! Because you're so unfamiliar with the way FPGA
designs get done, the whole thing becomes a research exercise for
you as you learn the background. That learning is a great thing
to do, but makes it impossible to estimate project schedules.

Way back when you first approached comp.arch.fpga, several of us
urged you to get (a) some formal training, (b) some paid help.
Unless you work for nothing, the amount of salaried time you've
burned up on this could have bought you, several times over,
a good training class for yourself and a couple of weeks of a
first-rate contractor's time to kick-start the details of your
project(s). It's abundantly obvious that you have ample
talent and enthusiasm but nowhere near enough knowledge.

I've seen many not-invented-here projects in my time, and have
been guilty of a good few of them myself, but I don't recall
ever seeing such a spectacular waste of time and resources as
seems to be going on in what you're doing.

Good luck...
--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
***@MYCOMPANY.com
http://www.MYCOMPANY.com

The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
jleslie48
2009-03-22 23:22:24 UTC
Permalink
Post by Jonathan Bromley
Post by jleslie48
LOL. I bought for my PM a pair of 10-sided dice. I marked one of the
die red. when he wants to know how long something is going to take me
I told him to roll the dice. the red one is the tens column and the
white one is the ones.
But don't you see... your _whole_team_ is playing Russian roulette
with the project! Because you're so unfamiliar with the way FPGA
designs get done, the whole thing becomes a research exercise for
you as you learn the background. That learning is a great thing
to do, but makes it impossible to estimate project schedules.
Way back when you first approached comp.arch.fpga, several of us
urged you to get (a) some formal training, (b) some paid help.
Unless you work for nothing, the amount of salaried time you've
burned up on this could have bought you, several times over,
a good training class for yourself and a couple of weeks of a
first-rate contractor's time to kick-start the details of your
project(s). It's abundantly obvious that you have ample
talent and enthusiasm but nowhere near enough knowledge.
I've seen many not-invented-here projects in my time, and have
been guilty of a good few of them myself, but I don't recall
ever seeing such a spectacular waste of time and resources as
seems to be going on in what you're doing.
Good luck...
--
Jonathan Bromley, Consultant
DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services
Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
The contents of this message may contain personal views which
are not the views of Doulos Ltd., unless specifically stated.
I hear what you are saying and I am steering my boss in that
direction. I'm actually interviewing several candidates this up-
coming week. Hopefully I'll see some talent. We are actually looking
to hire full time people, as many as 5. That's not bad in this economy
and especially as we are only a company of 50. I was at one point
half a heartbeat away from spending a week with a professional in MD;
but the PM put that on hold for at least the next 3-6 months.

Meantime I don't think I'm really that far off on this one. Only 500
FF''s/macrocells away...
Actually the first one is not that far off from done either. When it
picks up again in 3-6 months I actually get a real schedule, 18
months, so I can actually plan for some training.

I'm also light years ahead of the other 4 guys that HAVE tried to do
fpga/vhdl in the company. All of them have tried and failed; and that
is with going to classes and calling in hired guns.
jleslie48
2009-03-22 19:23:34 UTC
Permalink
Post by djj08230
Post by jleslie48
It took me 8 man days to program the entire solution to to
our product's deficiencies on my Virtex-II Pro, a day to move the
code into the coolrunner and on Friday at 1:00pm I fell into the tiger
trap on the size problems on the coolrunner. Here it is 2 days later
(10 man days ok so I've been working on the weekend) and Its beginning
to look like I've got a workaround.
I don't see another solution having a faster development time than 2
weeks.
Shoot, it took the original boys 3 months just to pick out the
coolrunner... and for a nickel I'd give them all an atomic wedgie for
being so bone ass short sighted...
I know from experience that these man-days thing is not a reliable
unit. Sometimes we are talking about different men, sometimes
different days. ;)
Good luck
Josep Duran
quite true. I've had I guy working on some message passing stuff for 2
months now, something I thought would of been a weeks project at
most. Meantime, I got put on this project on March 1st, my PM has
given me to May 1st to get a programming solution to the missing
signal. You can imagine his surprise when on March 18, I showed him
his missing signal generated by the Virtex-IIP. Now I just have to
get it to fit into the box.
Brian Drummond
2009-03-22 14:23:52 UTC
Permalink
Post by jleslie48
Post by Brian Drummond
Otherwise given the cost constraints you mentioned, I'd say you shouldn't be
wasting time trying to fit a too-small device. Is your software team trying to
keep their executable below 4K?
- Brian
"Is your software team trying to keep their executable below 4K?"
first off the software team is me. For 20 years now I keep getting
suckered into these solo missions into [the companies] no man land...
I'm sorry are you referring to $4k or some size requirement of 4k???
I meant 4k bytes. As in, I was trying to find the SW equivalent of squeezing a
hardware design into a Coolrunner...

It's a valid thing to do ... sometimes. If it's easy to eliminate the large
storage that is currently causing problems, and that avoids a board re-spin for
example.

But often it's a waste of time to conserve a low value resource.

I'm sorry I was unclear.
Post by jleslie48
I'm assuming I can load the program
into the enterpoint solutions and on powerup they start to
function...
Look for configuration storage, such as...
"Drigmorn1 have a M25P40 (4 Mbit) serial flash that is used for both
configuration of the FPGA and ..." so I'd have to say yes for that one.
Post by jleslie48
The guys on this project have blown their budget for hardware already,
at least for this next deliverable, so any $$$ I spend (not counting
labor) are being watched carefully.
Xilinx XC3S500E-4CPG132C
FPGA Spartan®-3E Family
500K Gates
Number of Registers 9312
RAM Bits 368640
Which of these products will do the job and not be too small like the
coolrunner?
I would expect any of them to be overkill, quite frankly.

It should be a few minutes work to select say the Spartan3-100 (the smallest
available on Drigmorn) and synthesize the current design for that, and see how
much space is left over.

Alternatively you mentioned a PC104 stack - have you seen the Hollybush I and II
PC104 cards from the same site?

I don't know how PC104 cards stack but it's possible you may just have to plug
one of these straight in. Or a larger one may swallow some of the functionality
from the rest of the stack.

- Brian
jleslie48
2009-03-22 14:59:10 UTC
Permalink
Post by Brian Drummond
Post by jleslie48
Post by Brian Drummond
Otherwise given the cost constraints you mentioned, I'd say you shouldn't be
wasting time trying to fit a too-small device. Is your software team trying to
keep their executable below 4K?
- Brian
"Is your software team trying to keep their executable below 4K?"
first off the software team is me. For 20 years now I keep getting
suckered into these solo missions into [the companies] no man land...
I'm sorry are you referring to $4k or some size requirement of 4k???
I meant 4k bytes. As in, I was trying to find the SW equivalent of squeezing a
hardware design into a Coolrunner...
It's a valid thing to do ... sometimes. If it's easy to eliminate the large
storage that is currently causing problems, and that avoids a board re-spin for
example.
But often it's a waste of time to conserve a low value resource.
I'm sorry I was unclear.
Post by jleslie48
I'm assuming I can load the program
into the enterpoint solutions and on powerup they start to
function...
Look for configuration storage, such as...
"Drigmorn1 have a M25P40 (4 Mbit) serial flash that is used for both
configuration of the FPGA and ..." so I'd have to say yes for that one.
Post by jleslie48
The guys on this project have blown their budget for hardware already,
at least for this next deliverable, so any $$$ I spend (not counting
labor) are being watched carefully.
Xilinx XC3S500E-4CPG132C
FPGA Spartan®-3E Family
500K Gates
Number of Registers 9312
RAM Bits 368640
Which of these products will do the job and not be too small like the
coolrunner?
I would expect any of them to be overkill, quite frankly.
It should be a few minutes work to select say the Spartan3-100 (the smallest
available on Drigmorn) and synthesize the current design for that, and see how
much space is left over.
Alternatively you mentioned a PC104 stack - have you seen the Hollybush I and II
PC104 cards from the same site?
I don't know how PC104 cards stack but it's possible you may just have to plug
one of these straight in. Or a larger one may swallow some of the functionality
from the rest of the stack.
- Brian
Ok good. this is all falling into place now. That's what I wanted to
hear:
"I would expect any of them to be overkill"
I am sick to death of busting out the resources of a device. I want
from now on 10x capable size growth... It just seems so ridiculous in
a prototyping environment to right-size this low-cost items. These
chips are under $100 and in that price range you can get hundreds of
times the performance from one chip to another. This is not the area
to be worrying about overkill.

I saw that holly bush too. Those guys (ok there were some other
software guys on the team, but strictly C programmers on the PC 104
stack) have managed to make that PC104 stack 5+ cards already, I'm
pretty sure they said they were over the limit already. Besides I'm
not going near that stack for what they paid for it. That's the stack
that has the $16,000 1553 card, And I'm pretty sure they paid over
$100,000 for some green hills programing suite. And now my PM is
gonna give me a hard time for $700 worth of FPGA boards. How stupid
is that...
John Adair
2009-03-22 18:53:49 UTC
Permalink
If it's a PCI version of the PC104 stack usually the biggest
limitation it is the grant/request signals and only 4 available for
bus mastering negotiation that are usually the problem. For the money
they are spending they could have had a custom board, or boards, with
all the features smaller, lighter and cheaper and so on from us.

It's not particularly well known but a major part of of our business
is either custom derivatives of development boards an/or full custom
boards. We actually design and build several times the amount of
development boards as customer boards and if it's based on FPGAs we
use and parts we can get quickly we can do boards on very short
timescales. Our record for a whole new board being designed,
manufactured, tested and delivered to the customer is 18 days and
that's not a particular unique event not that I would want to that
every week.

John Adair
Enterpoint Ltd.
Post by jleslie48
Post by Brian Drummond
Post by Brian Drummond
Otherwise given the cost constraints you mentioned, I'd say you shouldn't be
wasting time trying to fit a too-small device. Is your software team trying to
keep their executable below 4K?
- Brian
"Is your software team trying to  keep their executable below 4K?"
first off the software team is me.  For 20 years now I keep getting
suckered into these solo missions into [the companies] no man land...
I'm sorry are you referring to $4k or some size requirement of 4k???
I meant 4k bytes. As in, I was trying to find the SW equivalent of squeezing a
hardware design into a Coolrunner...
It's a valid thing to do ... sometimes. If it's easy to eliminate the large
storage that is currently causing problems, and that avoids a board re-spin for
example.
But often it's a waste of time to conserve a low value resource.
I'm sorry I was unclear.
I'm assuming I can load the program
into the enterpoint solutions and on powerup they start to
function...
Look for configuration storage, such as...
"Drigmorn1 have a M25P40 (4 Mbit) serial flash that is used for both
configuration of the FPGA and ..." so I'd have to say yes for that one.
The guys on this project have blown their budget for hardware already,
at least for this next deliverable, so any $$$ I spend (not counting
labor) are being watched carefully.
Xilinx XC3S500E-4CPG132C
FPGA Spartan®-3E Family
500K Gates
   Number of Registers     9312
   RAM Bits        368640
Which of these products will do the job and not be too small like the
coolrunner?
I would expect any of them to be overkill, quite frankly.
It should be a few minutes work to select say the Spartan3-100 (the smallest
available on Drigmorn) and synthesize the current design for that, and see how
much space is left over.
Alternatively you mentioned a PC104 stack - have you seen the Hollybush I and II
PC104 cards from the same site?
I don't know how PC104 cards stack but it's possible you may just have to plug
one of these straight in. Or a larger one may swallow some of the functionality
from the rest of the stack.
- Brian
Ok good. this is all falling into place now. That's what I wanted to
"I would expect any of them to be overkill"
I am sick to death of busting  out the resources of a device.  I want
from now on 10x capable size growth... It just seems so ridiculous in
a prototyping environment to right-size this low-cost items. These
chips are under $100 and in that price range you can get hundreds of
times the performance from one chip to another.  This is not the area
to be worrying about overkill.
I saw that holly bush too.  Those guys (ok there were some other
software guys on the team, but strictly C programmers on the PC 104
stack) have managed to make that PC104 stack 5+ cards already, I'm
pretty sure they said they were over the limit already.  Besides I'm
not going near that stack for what they paid for it.  That's the stack
that has the $16,000 1553 card, And I'm pretty sure they paid over
$100,000 for some green hills programing suite.  And now my PM is
gonna give me a hard time for $700 worth of FPGA boards.  How stupid
is that...- Hide quoted text -
- Show quoted text -
jleslie48
2009-03-22 19:15:40 UTC
Permalink
John,

Oh don't worry, you've got me sold. You'll be getting a call from me
on Monday morning. I wasn't on the project when they first designed
it about a year ago, I was only put on it starting March 1st 2009 to
bail them out. I remember when I first heard they bought a $100,000
development suite I jokingly asked did it come packaged in a Porsche
928... I can't believe what they have spent on this project.

Anyway the PC104 is the stack version (the squares, the cards in the
stack look like the hollybush2:
http://www.enterpoint.co.uk/oem_industrial/hollybush2.html
I really don't know what the PCI means. I thought it meant "card slot
for a PC" but I'm not sure.
Again I'm just going by what I heard the other guys talking about.
They told me to stay away from the PC104 stack. fine by me.


Assuming all goes well I'm gonna end up needing about a 10 of the
patch job drigmorn/craignell/raggedstone1 solutions for for this run,
and we are gearing up for a real production run after that. We are
eventually going to need to minaturize, but I keep reminding the PM to
get it to at least work ANY way first. I will definitely be thinking
of this conversation when it comes to the miniaturization effort.
Post by John Adair
If it's a PCI version of the PC104 stack usually the biggest
limitation it is the grant/request signals and only 4 available for
bus mastering negotiation that are usually the problem. For the money
they are spending they could have had a custom board, or boards, with
all the features smaller, lighter and cheaper and so on from us.
It's not particularly well known but a major part of of our business
is either custom derivatives of development boards an/or full custom
boards. We actually design and build several times the amount of
development boards as customer boards and if it's based on FPGAs we
use and parts we can get quickly we can do boards on very short
timescales. Our record for a whole new board being designed,
manufactured, tested and delivered to the customer is 18 days and
that's not a particular unique event not that I would want to that
every week.
John Adair
Enterpoint Ltd.
John Adair
2009-03-22 19:47:42 UTC
Permalink
PC104 has something of an organic growth with the initial 8 bit ISA
based connect having a 16 bit extension. That's the connector with the
funny layout. The PCI is located at the opposite end and is a a
uniform 30x4 connector on 2mm pitch. There are now also PCIE
extensions of the standard. HB2 supports both ISA and PCI connections.
HB1 only supports PCI. We have another product CR1 which supports only
the ISA connector.

The PCI is basically the same as what you get on PC motherboards
except rather than having individual connectors the cards stack into
one another.

John Adair
Enterpoint Ltd.
John,
Oh don't worry, you've got me sold.  You'll be getting a call from me
on Monday morning.   I wasn't on the project when they first designed
it about a year ago, I was only put on it starting March 1st 2009  to
bail them out.  I remember when I first heard they bought a $100,000
development suite I jokingly asked did it come packaged in a Porsche
928...   I can't believe what they have spent on this project.
Anyway the PC104 is the stack version (the squares, the cards in the
stack look like the hollybush2:http://www.enterpoint.co.uk/oem_industrial/hollybush2.html
I really don't know what the PCI means.  I thought it meant "card slot
for a PC" but I'm not sure.
Again I'm just going by what I heard the other guys talking about.
They told me to stay away from the PC104 stack. fine by me.
Assuming all goes well I'm gonna end up needing about a 10 of the
patch job drigmorn/craignell/raggedstone1 solutions for  for this run,
and we are gearing up for a real production run after that.  We are
eventually going to need to minaturize, but I keep reminding the PM to
get it to at least work ANY way first.  I will definitely be thinking
of this conversation when it comes to the miniaturization effort.
Post by John Adair
If it's a PCI version of the PC104 stack usually the biggest
limitation it is the grant/request signals and only 4 available for
bus mastering negotiation that are usually the problem. For the money
they are spending they could have had a custom board, or boards, with
all the features smaller, lighter and cheaper and so on from us.
It's not particularly well known but a major part of of our business
is either custom derivatives of development boards an/or full custom
boards. We actually design and build several times the amount of
development boards as customer boards and if it's based on FPGAs we
use and parts we can get quickly we can do boards on very short
timescales. Our record for a whole new board being designed,
manufactured, tested and delivered to the customer is 18 days and
that's not a particular unique event not that I would want to that
every week.
John Adair
Enterpoint Ltd.
wrote:- Hide quoted text -
- Show quoted text -
Mike Treseler
2009-03-20 20:48:47 UTC
Permalink
Post by jleslie48
Post by jleslie48
any idea on how to make it fit?
If it has to be that device, I would need two of them.
Post by jleslie48
how can I find out who is the piggy, and what can I due to trim things
down?
Synthesis has already done the trimming.
The device is too small.
Post by jleslie48
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
Rerun synthesis and check the % utilization

-- Mike Treseler
rickman
2009-03-21 04:12:04 UTC
Permalink
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question. To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used. But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately. In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together. But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count. Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs. Not a good fit!

You won't find much in the way of optimizations that will make this
fit. The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel. But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part. So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail... A macrocell
is the unit block of a CPLD. It typically include one or two FFs, an
output, often to a pin along with some amount of logic. The logic in
a macrocell is made of p-terms and OR gates. P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms. The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output. There is also a p-term or two devoted to controlling the tri-
state driver on the output. The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.

That is a lot to absorb from a description. I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs. So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited. Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs. But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
Number of Slices containing only related logic
1,302
1,302
100%
Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
Number used as logic
1,545
Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells. (I think they also have input
FFs) The FPGA is using some 1300 out of 27,000! The FPGA is using
1500 LUTs for logic. It does not look to me like that couldn't fit in
the logic of 512 macrocells. But the number of FFs has to be
reduced. Are they all necessary?

Rick
jleslie48
2009-03-21 05:14:38 UTC
Permalink
Post by rickman
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question. To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used. But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately. In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together. But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count. Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs. Not a good fit!
You won't find much in the way of optimizations that will make this
fit. The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel. But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part. So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail... A macrocell
is the unit block of a CPLD. It typically include one or two FFs, an
output, often to a pin along with some amount of logic. The logic in
a macrocell is made of p-terms and OR gates. P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms. The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output. There is also a p-term or two devoted to controlling the tri-
state driver on the output. The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.
That is a lot to absorb from a description. I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs. So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited. Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs. But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
Number of Slices containing only related logic
1,302
1,302
100%
Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
Number used as logic
1,545
Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells. (I think they also have input
FFs) The FPGA is using some 1300 out of 27,000! The FPGA is using
1500 LUTs for logic. It does not look to me like that couldn't fit in
the logic of 512 macrocells. But the number of FFs has to be
reduced. Are they all necessary?
Rick
"But I think it will be a major job to cut the design size by more
than half!"

Well this is what has me scratching my head, I only added one uart to
the 3512, the listing from the Virtex II has two
separate UARTS, to make up the 1300 slice flip flops. I've only
moved one of the uarts to the 3512 so far and it blew its top. I
can't see how one uart can take up the entire chip, Or that the
difference between the $90 3512 and the
$1200 Virtex II Pro?


I'm not sure of what you are getting out with me reducing the number
of FF's, I'm just getting the hand of VHDL but I'm not aware of what
code makes up the FF's, I inlcuded the code I put in up above, It
seems very straight-forward, state machine,

"The FPGA is using some 1300 out of 27,000! " I'm assuming you mean
the 1282/27,392 number. What I'm guessing is that in order for this
design I have to get these 1282 to fit into the the 512 macrocells of
the 3512 but I can only put 1 in each macrocell, aka I've got to get
down to under 512 slice FF. Thats not counting the problem I'm having
with the pterms,
John Adair
2009-03-21 14:14:53 UTC
Permalink
CPLDs are generally very small devices compared to a FPGAs. They are
generally slightly easier to use for the novice but I won't let that
put you off going for FPGA. Virtex-IIPro is a very old and expensive
familiy now. Xilinx offers 2 sets of families. The Virtex range is
big, very fast and expensive. Virtex-5 is readily available with
Virtex-6 just announced. The Spartan families go from small to medium
size in comparision. Coolrunner etc. I would describe as tiny to give
a reference.

If you have the ability to choose a part now then the Spartan-3A or
Spartan-3AN are probably a good choice. The S3-A needs an external
Flash memory that is used to configure the device at power up. The S3-
AN has an internal Flash that is used for that purpose.

The smallest S3-AN is the XC3S50AN and it has about 1400 flip-flops as
a comparision to the Coolrunner with 512 macrocells which have 512
flip-flops available. It is very difficult to make a simple
comparision between CPLD and FPGA technologies but I would suggest
just trail building the design in a XC3S50AN to get a better
comparision. ISE Webpack I presume you already have and it will only
take a few minutes to change the part type and re-build.

If you do want a development board we supply lots of choice with some
more shortly in this market sector soon. You may find some of the
links on our Techitips page useful - http://www.enterpoint.co.uk/techitips/techitips.html.

John Adair
Enterpoint Ltd.
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
      -- Mike Treseler
ahhh,  well that is a bummer.  I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
   512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
   limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
   the selected implementation options.
any idea on how to make it fit?
Macrocells Used         Pterms Used     Registers Used  Pins Used       Function
Block Inputs Used
379/512  (75%)  831/1536  (55%)         354/512  (70%)  118/176  (68%)
779/1280  (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question.  To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used.  But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately.  In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together.  But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count.  Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs.  Not a good fit!
You won't find much in the way of optimizations that will make this
fit.  The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel.  But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part.  So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail...  A macrocell
is the unit block of a CPLD.  It typically include one or two FFs, an
output, often to a pin along with some amount of logic.  The logic in
a macrocell is made of p-terms and OR gates.  P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms.  The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output.  There is also a p-term or two devoted to controlling the tri-
state driver on the output.  The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.
That is a lot to absorb from a description.  I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs.  So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited.  Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs.  But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
    Number of Slices containing only related logic
1,302
1,302
100%
    Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
    Number used as logic
1,545
    Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
    IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells.  (I think they also have input
FFs)  The FPGA is using some 1300 out of 27,000!  The FPGA is using
1500 LUTs for logic.  It does not look to me like that couldn't fit in
the logic of 512 macrocells.  But the number of FFs has to be
reduced.  Are they all necessary?
Rick
"But I think it will be a major job to cut the design size by more
than half!"
Well this is what has me scratching my head,  I only added one uart to
the 3512,  the listing from the Virtex II has two
separate UARTS,  to make up the 1300 slice flip flops.    I've only
moved one of the uarts to the 3512 so far and it blew its top.  I
can't see how one uart can take up the entire chip, Or that the
difference between the $90 3512 and the
$1200 Virtex II Pro?
I'm not sure of what you are getting out with me reducing the number
of FF's,  I'm just getting the hand of VHDL but I'm not aware of what
code makes up the FF's,   I inlcuded the code I put in up above, It
seems very straight-forward, state machine,
"The FPGA is using some 1300 out of 27,000!  "  I'm assuming you mean
the 1282/27,392 number.   What I'm guessing is that in order for this
design I have to get these 1282 to fit into the the 512 macrocells of
the 3512 but I can only put 1 in each macrocell, aka I've got to get
down to under 512 slice FF.  Thats not counting the problem I'm having
with the pterms,- Hide quoted text -
- Show quoted text -
jleslie48
2009-03-21 17:25:27 UTC
Permalink
Post by John Adair
CPLDs are generally very small devices compared to a FPGAs. They are
generally slightly easier to use for the novice but I won't let that
put you off going for FPGA. Virtex-IIPro is a very old and expensive
familiy now. Xilinx offers 2 sets of families. The Virtex range is
big, very fast and expensive. Virtex-5 is readily available with
Virtex-6 just announced. The Spartan families go from small to medium
size in comparision. Coolrunner etc. I would describe as tiny to give
a reference.
If you have the ability to choose a part now then the Spartan-3A or
Spartan-3AN are probably a good choice. The S3-A needs an external
Flash memory that is used to configure the device at power up. The S3-
AN has an internal Flash that is used for that purpose.
The smallest S3-AN is the XC3S50AN and it has about 1400 flip-flops as
a comparision to the Coolrunner with 512 macrocells which have 512
flip-flops available. It is very difficult to make a simple
comparision between CPLD and FPGA technologies but I would suggest
just trail building the design in a XC3S50AN to get a better
comparision. ISE Webpack I presume you already have and it will only
take a few minutes to change the part type and re-build.
If you do want a development board we supply lots of choice with some
more shortly in this market sector soon. You may find some of the
links on our Techitips page useful -http://www.enterpoint.co.uk/techitips/techitips.html.
John Adair
Enterpoint Ltd.
Post by jleslie48
Post by rickman
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question. To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used. But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately. In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together. But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count. Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs. Not a good fit!
You won't find much in the way of optimizations that will make this
fit. The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel. But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part. So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail... A macrocell
is the unit block of a CPLD. It typically include one or two FFs, an
output, often to a pin along with some amount of logic. The logic in
a macrocell is made of p-terms and OR gates. P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms. The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output. There is also a p-term or two devoted to controlling the tri-
state driver on the output. The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.
That is a lot to absorb from a description. I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs. So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited. Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs. But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
Number of Slices containing only related logic
1,302
1,302
100%
Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
Number used as logic
1,545
Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells. (I think they also have input
FFs) The FPGA is using some 1300 out of 27,000! The FPGA is using
1500 LUTs for logic. It does not look to me like that couldn't fit in
the logic of 512 macrocells. But the number of FFs has to be
reduced. Are they all necessary?
Rick
"But I think it will be a major job to cut the design size by more
than half!"
Well this is what has me scratching my head, I only added one uart to
the 3512, the listing from the Virtex II has two
separate UARTS, to make up the 1300 slice flip flops. I've only
moved one of the uarts to the 3512 so far and it blew its top. I
can't see how one uart can take up the entire chip, Or that the
difference between the $90 3512 and the
$1200 Virtex II Pro?
I'm not sure of what you are getting out with me reducing the number
of FF's, I'm just getting the hand of VHDL but I'm not aware of what
code makes up the FF's, I inlcuded the code I put in up above, It
seems very straight-forward, state machine,
"The FPGA is using some 1300 out of 27,000! " I'm assuming you mean
the 1282/27,392 number. What I'm guessing is that in order for this
design I have to get these 1282 to fit into the the 512 macrocells of
the 3512 but I can only put 1 in each macrocell, aka I've got to get
down to under 512 slice FF. Thats not counting the problem I'm having
with the pterms,- Hide quoted text -
- Show quoted text -
John,

You have me very interested in this board and your products. I
imagine I will be getting one to try out very soon. I am concerned
though, you have put on the raggedstone1 board voltage regulators
right in the middle of the GPIO pin
layouts. In the case of he RHS DIL headers, there is a voltage
regulator (read: huge heat source that needs to be ventilated) between
the mid and right column. You have a similar arrangement on the LHS
as well. I will need to put a daughter board onto this card and I
would love to snap it in right on top of the DIL headers, but I'll
have to trap that voltage regulator on 4 sides, Its even worse since
you put the ground on one column and power on the other so I can't
even just have the daughter card on the two headers and skip the third
letting the voltage regulator vent.
jleslie48
2009-03-21 17:46:06 UTC
Permalink
Post by jleslie48
Post by John Adair
CPLDs are generally very small devices compared to a FPGAs. They are
generally slightly easier to use for the novice but I won't let that
put you off going for FPGA. Virtex-IIPro is a very old and expensive
familiy now. Xilinx offers 2 sets of families. The Virtex range is
big, very fast and expensive. Virtex-5 is readily available with
Virtex-6 just announced. The Spartan families go from small to medium
size in comparision. Coolrunner etc. I would describe as tiny to give
a reference.
If you have the ability to choose a part now then the Spartan-3A or
Spartan-3AN are probably a good choice. The S3-A needs an external
Flash memory that is used to configure the device at power up. The S3-
AN has an internal Flash that is used for that purpose.
The smallest S3-AN is the XC3S50AN and it has about 1400 flip-flops as
a comparision to the Coolrunner with 512 macrocells which have 512
flip-flops available. It is very difficult to make a simple
comparision between CPLD and FPGA technologies but I would suggest
just trail building the design in a XC3S50AN to get a better
comparision. ISE Webpack I presume you already have and it will only
take a few minutes to change the part type and re-build.
If you do want a development board we supply lots of choice with some
more shortly in this market sector soon. You may find some of the
links on our Techitips page useful -http://www.enterpoint.co.uk/techitips/techitips.html.
John Adair
Enterpoint Ltd.
John,
You have me very interested in this board and your products. I
imagine I will be getting one to try out very soon. I am concerned
though, you have put on the raggedstone1 board voltage regulators
right in the middle of the GPIO pin
layouts. In the case of he RHS DIL headers, there is a voltage
regulator (read: huge heat source that needs to be ventilated) between
the mid and right column. You have a similar arrangement on the LHS
as well. I will need to put a daughter board onto this card and I
would love to snap it in right on top of the DIL headers, but I'll
have to trap that voltage regulator on 4 sides, Its even worse since
you put the ground on one column and power on the other so I can't
even just have the daughter card on the two headers and skip the third
letting the voltage regulator vent.
Actually you have me very interested. I've been poking around, what
about
these products?

the drigmorn:
http://www.enterpoint.co.uk/component_replacements/drigmorn1.html

the craignell:
http://www.enterpoint.co.uk/component_replacements/craignell.html

I love the size of these guys, and If I'm not mistaken they have all
the "nutrition facts" that I need. why would these
not be appropriate vs the raggedstone1?

I guess I'm looking for a comparison sheet for all three of these
boards.
John Adair
2009-03-22 17:34:42 UTC
Permalink
Ok lets start with the easy thing and say Drigmorn1 is a development
board version of Craignell. We added a serial port and made the JTAG
and SPI 7x2 2mm headers and added a power jack. We lost a few I/O on
the Drigmorn to the serial port but otherwise it is just an easier way
to play with the same design as the Craignell. I will mention the new
launch Craignell2 which a very big brother of Craignell1. Same concept
as the original but starting at a DIL40 and going up. The team did a
very good job on this new product and I have had it run our production
I/O test running logic from about 1.2V up to about 5.5V without
adjustment. I even JTAG programmed it at 2V a few times just to see if
it would do it. Those out of spec voltages won't be officialy
supported 3-5V will be the official range. Other nice things are the
128Mbit Flash and 256Mbit SDRAM so the Craignell2 is a serious
processor taget. If you happen to be into older processors we also
made a wide ramge of power pin options (solder bridge).

Back to comparision I will list the following as short list bracket
figure is Craignell/Drigmorn figure:

Raggedstone General main headers I/O (not including PCI) - 116 (38)

FPGA size - 400K or 1500K notional gates (100K or 500K gates)

Board Size - 170x75mm (50x57mm not including pin overhand)

Power - 5V + 3.3V (Single 5V)

Price - From GBP£135 (from GBP£40)

Summary as play board the Drigmorn1 is a good basic board to start on.
It can even be used as a Raggedstone1 (and others) co-processor if the
I/O pins are changed to vertical types.

We are currently increasing our GBP£ prices across the range mainly
because of substantial increases in component pricing we have seen in
the last few months. These increases due to the US dollar swing and
other price increases we are seeing from major suppliers. Most these
increases won't be seen by customers outside the UK as the dollar and
euro swings are off-setting most of these increases to customers based
in countries with those, and other, currencies. There is a special
offer that starts today for FEDEX at GBP£20 and thats for any quantity
and any place. Details of that are in tomorrows newsletter for those
that are on the list.

We have some other things coming that might be of interest at the
simplier end. Polmaddies2,3,4 and 5 will appear shortly. These simple
boards are great for playing with. We aimed them at the student lab
market and all 5 in the series have similar features the main one
being 4 sets of traffic light LEDs

Going back to the concerns on Raggedstone1. There are occasional foul
problems on one of the regulators with new modules (supporting inner
power pins). Usually the simple way with this is to used a spacer
header or chop off the the inner module pins and take power from the
top ones on the main run. We may be doing a an update on this board in
the future and several improvements are planned including for this
issue. The sister products Raggedstone2 and Raggedstone3 won't have
this issue as they will have the full power strips that can be seen on
the new product Mulldonnoch2.

Regulator heating is not an issue on Raggedstone1. There are
substantial thermal take away planes. Most implementations take
between 0.2-1 amps through the regs which are rated for 4 amps. Even
with a module fitted the ambient would have to be very warm for there
to be any likelyhood of a thermal issue.

John Adair
Enterpoint Ltd.
Post by John Adair
CPLDs are generally very small devices compared to a FPGAs. They are
generally slightly easier to use for the novice but I won't let that
put you off going for FPGA. Virtex-IIPro is a very old and expensive
familiy now. Xilinx offers 2 sets of families. The Virtex range is
big, very fast and expensive. Virtex-5 is readily available with
Virtex-6 just announced. The Spartan families go from small to medium
size in comparision. Coolrunner etc. I would describe as tiny to give
a reference.
If you have the ability to choose a part now then the Spartan-3A or
Spartan-3AN are probably a good choice. The S3-A needs an external
Flash memory that is used to configure the device at power up. The S3-
AN has an internal Flash that is used for that purpose.
The smallest S3-AN is the XC3S50AN and it has about 1400 flip-flops as
a comparision to the Coolrunner with 512 macrocells which have 512
flip-flops available. It is very difficult to make a simple
comparision between CPLD and FPGA technologies but I would suggest
just trail building the design in a XC3S50AN to get a better
comparision. ISE Webpack I presume you already have and it will only
take a few minutes to change the part type and re-build.
If you do want a development board we supply lots of choice with some
more shortly in this market sector soon. You may find some of the
links on our Techitips page useful -http://www.enterpoint.co.uk/techitips/techitips.html.
John Adair
Enterpoint Ltd.
John,
You have me very interested in this board and your products.  I
imagine I will be getting one to try out very soon.  I am concerned
though, you have put on the raggedstone1 board voltage regulators
right in the middle of the GPIO pin
layouts.  In the case of he RHS DIL headers, there is a voltage
regulator (read: huge heat source that needs to be ventilated) between
the mid and right column.  You have a similar arrangement on the LHS
as well.  I will need to put a daughter board onto this card and I
would love to snap it in right on top of the DIL headers, but I'll
have to trap that voltage regulator on 4 sides, Its even worse since
you put the ground on one column and power on the other so I can't
even just have the daughter card on the two headers and skip the third
letting the voltage regulator vent.
Actually you have me very interested.  I've been poking around, what
about
these products?
the drigmorn:http://www.enterpoint.co.uk/component_replacements/drigmorn1.html
the craignell:http://www.enterpoint.co.uk/component_replacements/craignell.html
I love the size of these guys, and If I'm not mistaken they have all
the "nutrition facts" that I need.  why would these
not be appropriate vs the raggedstone1?
I guess I'm looking for a comparison sheet for all three of these
boards.- Hide quoted text -
- Show quoted text -
rickman
2009-03-21 14:47:30 UTC
Permalink
Post by jleslie48
Post by rickman
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question. To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used. But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately. In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together. But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count. Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs. Not a good fit!
You won't find much in the way of optimizations that will make this
fit. The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel. But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part. So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail... A macrocell
is the unit block of a CPLD. It typically include one or two FFs, an
output, often to a pin along with some amount of logic. The logic in
a macrocell is made of p-terms and OR gates. P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms. The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output. There is also a p-term or two devoted to controlling the tri-
state driver on the output. The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.
That is a lot to absorb from a description. I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs. So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited. Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs. But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
Number of Slices containing only related logic
1,302
1,302
100%
Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
Number used as logic
1,545
Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells. (I think they also have input
FFs) The FPGA is using some 1300 out of 27,000! The FPGA is using
1500 LUTs for logic. It does not look to me like that couldn't fit in
the logic of 512 macrocells. But the number of FFs has to be
reduced. Are they all necessary?
Rick
"But I think it will be a major job to cut the design size by more
than half!"
Well this is what has me scratching my head, I only added one uart to
the 3512, the listing from the Virtex II has two
separate UARTS, to make up the 1300 slice flip flops. I've only
moved one of the uarts to the 3512 so far and it blew its top. I
can't see how one uart can take up the entire chip, Or that the
difference between the $90 3512 and the
$1200 Virtex II Pro?
Somewhere we did not communicate. The VIIP part has some 27,000 FFs.
Yes, that was 27 *thousand* FFs. The 3512 has 512 FFs for logic. So
there is no way that you can expect the CPLD to hold anywhere near the
same number of UARTs as the FPGA you are using. The two UARTs in the
VIIP are using 1300 FFs. Divide that by two (assuming they don't
share any logic like the baud rate generator) and you get 650 FFs per
UART. Will that fit into 512 FFs in the CPLD? It is very likely that
the UART you are using is very much more complex than you really
need. I expect you could fit some 10 or more UARTs into this CPLD if
they are streamlined a bit. A UART is nothing but a pair of shift
registers with some control logic and should fit into a couple of
dozen FFs if coded minimally. To do that requires that you understand
how to design hardware so that you know what you want from the HDL
code and then to code the HDL to produce that hardware.
Post by jleslie48
I'm not sure of what you are getting out with me reducing the number
of FF's, I'm just getting the hand of VHDL but I'm not aware of what
code makes up the FF's, I inlcuded the code I put in up above, It
seems very straight-forward, state machine,
"The FPGA is using some 1300 out of 27,000! " I'm assuming you mean
the 1282/27,392 number. What I'm guessing is that in order for this
design I have to get these 1282 to fit into the the 512 macrocells of
the 3512 but I can only put 1 in each macrocell, aka I've got to get
down to under 512 slice FF. Thats not counting the problem I'm having
with the pterms,
Yes, that is what you need to do. I'm not sure what the p-term count
is a problem.
Post by jleslie48
Post by rickman
Post by jleslie48
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
If you get your FF count down, the p-term count will also likely
decrease as well. But I'm not clear on why there are so few p-terms
in this device. A typical CPLD will have macrocells with a range of p-
terms per macrocell of 4 to 12 or more. I would have to look at the
data sheet of the 3512 to see how they are organized.

Ahhh... I found your culprit.

architecture arch of fifo is
type reg_file_type is array (2**W-1 downto 0) of
std_logic_vector(B-1 downto 0);
signal array_reg: reg_file_type;

This FIFO is implemented using memory resources in the FPGA. In the
CPLD there are no memory resouces... at least in Xilinx CPLDs. Other
brands have memory. With 8 bits and 16 words, each FIFO uses 128
FFs. A UART has two FIFOs using 256 FFs. That's half the CPLD right
there!

If you want a UART in the CPLD you need to take out the FIFOs. If you
are still running the same code for the Hello World program, you don't
need the FIFOs anyway. Instead of letting the data generator push
chars into the FIFO, let the data generator be throttled by the UART
handshake directly.

The UART clearly has other complexities that is eating up FFs. You
need to find or code a simpler UART to suit your requirements. Think
of the CPLD as an MCU with only 2 kB of program space. You wouldn't
pull the UART driver out of Linux and try to use it in that device
would you? In essence, that is what you are doing.

Rick
jleslie48
2009-03-21 16:28:16 UTC
Permalink
Post by rickman
Post by jleslie48
Post by rickman
Post by jleslie48
Post by Mike Treseler
Post by jleslie48
and when I added some digital outputs, the %'s went up, but then I
added a whole bunch of logic, and nothing changed,
If the number of cells or Pterms used didn't change at all,
I would expect that a "whole bunch" of logic does not make it
out to a pin. I would run a sim to check.
-- Mike Treseler
ahhh, well that is a bummer. I just tied the output to a pin and now
Fitting...
.
ERROR:Cpld:1063 - Design requires at least 947 macrocells, exceeds
device limit
512.
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
ERROR:Cpld:1064 - Design rules checking error. Fitting process
stopped.
...o
ERROR:Cpld:868 - Cannot fit the design into any of the specified
devices with
the selected implementation options.
any idea on how to make it fit?
Macrocells Used Pterms Used Registers Used Pins Used Function
Block Inputs Used
379/512 (75%) 831/1536 (55%) 354/512 (70%) 118/176 (68%)
779/1280 (61%)
so from my errors, I can see I added some 600 macrocells, and 1200
pterms,
how can I find out who is the piggy, and what can I due to trim things
down?
I don't think you really got an answer to this question. To some
extent you can look at the code and estimate the number of macrocells
or other logic elements used. But to measure it, you need to break
the code into modules and let the tool tell you about each module
separately. In an FPGA the logic has a finer grain, so there are not
as much optimizations to affect these counts when you use the block
all together. But a CPLD can put a lot of logic into each macrocell
and will be much more limited by the FF count. Your design counts
above indicate that your design uses 1300 FFs and your CPLD only has
512 FFs. Not a good fit!
You won't find much in the way of optimizations that will make this
fit. The best thing to trim your logic is to change your algorithm.
If there are parts of your design that can run slowly compared to the
clock rate, you can let them run sequentially rather than in
parallel. But if your design has to run at the full rate of the clock
with everything in parallel, you just need a larger part. So take a
good, hard at your design and see if there is anything you can do to
reduce it.
also, what is a macrocell and pterm?
I think these got answered, but a little more detail... A macrocell
is the unit block of a CPLD. It typically include one or two FFs, an
output, often to a pin along with some amount of logic. The logic in
a macrocell is made of p-terms and OR gates. P-terms are very wide
AND gates with inputs from all of the inputs to that block, all of the
FFs in that block as well as, in some devices, some inputs from other
macrocell p-terms. The p-terms of a given macrocell are OR'd together
to produce the input to the FF or it can be routed directly to the
output. There is also a p-term or two devoted to controlling the tri-
state driver on the output. The OR gate and FF outputs are connected
back to the logic matrix for use in other or the same macrocells.
Some devices have "buried" FFs which allow some of the logic in the
macrocell to be split off and used with this second FF, but the output
can only be routed back to the routing matrix, not an output pin.
That is a lot to absorb from a description. I am sure the data sheet
has a picture that is very clear and can portray the detail better.
The main thing to understand is that the p-term (and) are unlimited
(or more accurately only limited by the inputs to the block routing)
and an FPGA typically has much smaller LUTs, usually 1 LUT per FF or
sometimes 4 LUTs to 3 FFs. So a CPLD is often FF count limited while
an FPGA is mostly LUT count limited. Certainly there are things you
can change in your design to use more logic and fewer FF to target
CPLDs. But I think it will be a major job to cut the design size by
more than half!
I originally ran this program on a virtexII, and everthing looked
liked it
Device Utilization Summary
[-]
Logic Utilization
Used
Available
Utilization
Note(s)
Number of Slice Flip Flops
1,282
27,392
4%
Number of 4 input LUTs
1,545
27,392
5%
Logic Distribution
Number of occupied Slices
1,302
13,696
9%
Number of Slices containing only related logic
1,302
1,302
100%
Number of Slices containing unrelated logic
0
1,302
0%
Total Number of 4 input LUTs
1,589
27,392
5%
Number used as logic
1,545
Number used as a route-thru
44
Number of bonded IOBs
Number of bonded
15
556
2%
IOB Flip Flops
1
Number of RAMB16s
2
136
1%
Number of BUFGMUXs
3
16
18%
but I cant seem to compare these two chips, the VIRTEX II vs the
XCR3512XL-12-PQ208
its apples to oranges, how does it work?
The 3512 has 512 FFs in the macrocells. (I think they also have input
FFs) The FPGA is using some 1300 out of 27,000! The FPGA is using
1500 LUTs for logic. It does not look to me like that couldn't fit in
the logic of 512 macrocells. But the number of FFs has to be
reduced. Are they all necessary?
Rick
"But I think it will be a major job to cut the design size by more
than half!"
Well this is what has me scratching my head, I only added one uart to
the 3512, the listing from the Virtex II has two
separate UARTS, to make up the 1300 slice flip flops. I've only
moved one of the uarts to the 3512 so far and it blew its top. I
can't see how one uart can take up the entire chip, Or that the
difference between the $90 3512 and the
$1200 Virtex II Pro?
Somewhere we did not communicate. The VIIP part has some 27,000 FFs.
Yes, that was 27 *thousand* FFs. The 3512 has 512 FFs for logic. So
there is no way that you can expect the CPLD to hold anywhere near the
same number of UARTs as the FPGA you are using. The two UARTs in the
VIIP are using 1300 FFs. Divide that by two (assuming they don't
share any logic like the baud rate generator) and you get 650 FFs per
UART. Will that fit into 512 FFs in the CPLD? It is very likely that
the UART you are using is very much more complex than you really
need. I expect you could fit some 10 or more UARTs into this CPLD if
they are streamlined a bit. A UART is nothing but a pair of shift
registers with some control logic and should fit into a couple of
dozen FFs if coded minimally. To do that requires that you understand
how to design hardware so that you know what you want from the HDL
code and then to code the HDL to produce that hardware.
Post by jleslie48
I'm not sure of what you are getting out with me reducing the number
of FF's, I'm just getting the hand of VHDL but I'm not aware of what
code makes up the FF's, I inlcuded the code I put in up above, It
seems very straight-forward, state machine,
"The FPGA is using some 1300 out of 27,000! " I'm assuming you mean
the 1282/27,392 number. What I'm guessing is that in order for this
design I have to get these 1282 to fit into the the 512 macrocells of
the 3512 but I can only put 1 in each macrocell, aka I've got to get
down to under 512 slice FF. Thats not counting the problem I'm having
with the pterms,
Yes, that is what you need to do. I'm not sure what the p-term count
is a problem.
Post by jleslie48
Post by rickman
Post by jleslie48
ERROR:Cpld:1062 - Design contains 2004 unique product terms, exceeds
device
limit 1536.
If you get your FF count down, the p-term count will also likely
decrease as well. But I'm not clear on why there are so few p-terms
in this device. A typical CPLD will have macrocells with a range of p-
terms per macrocell of 4 to 12 or more. I would have to look at the
data sheet of the 3512 to see how they are organized.
Ahhh... I found your culprit.
architecture arch of fifo is
type reg_file_type is array (2**W-1 downto 0) of
std_logic_vector(B-1 downto 0);
signal array_reg: reg_file_type;
This FIFO is implemented using memory resources in the FPGA. In the
CPLD there are no memory resouces... at least in Xilinx CPLDs. Other
brands have memory. With 8 bits and 16 words, each FIFO uses 128
FFs. A UART has two FIFOs using 256 FFs. That's half the CPLD right
there!
If you want a UART in the CPLD you need to take out the FIFOs. If you
are still running the same code for the Hello World program, you don't
need the FIFOs anyway. Instead of letting the data generator push
chars into the FIFO, let the data generator be throttled by the UART
handshake directly.
The UART clearly has other complexities that is eating up FFs. You
need to find or code a simpler UART to suit your requirements. Think
of the CPLD as an MCU with only 2 kB of program space. You wouldn't
pull the UART driver out of Linux and try to use it in that device
would you? In essence, that is what you are doing.
Rick
AHHH!!! This sounds exactly like the tumor I'm looking for. This
will be the first order of business on monday. If you look, I have
changed my UART driver, its as simple as they get, a state machine
with a bit shift, and I *thought" my fifo was just as simple; but the
fifo was definitely designed with the Spartan 3 in mind, and I suspect
that the Spartan-3 also has memory resources. BTW, where exactly is
the list of ingredients for these chips? I didn't know to ask for the
"memory resources" data on the coolrunner.

It would be so nice if these chips had one of those Ralph Nader
listings like on the real chips, you know the "Nutrition Facts"
listing on the back of the package of Lay's potato chips? Only for
this chip, saturated fat would be FF, and sodium would be LUT's,
etc.

Xilinx has a terrible habit of completely overwhelming us with
documentation, 99.999% of it useless and as a result anything useful
is hidden. This is a pure CYA attitude; they can claim its all
documented but for all practical purposes, it might as well not be.
rickman
2009-03-21 22:45:34 UTC
Permalink
Post by jleslie48
Post by rickman
If you get your FF count down, the p-term count will also likely
decrease as well. But I'm not clear on why there are so few p-terms
in this device. A typical CPLD will have macrocells with a range of p-
terms per macrocell of 4 to 12 or more. I would have to look at the
data sheet of the 3512 to see how they are organized.
Ahhh... I found your culprit.
architecture arch of fifo is
type reg_file_type is array (2**W-1 downto 0) of
std_logic_vector(B-1 downto 0);
signal array_reg: reg_file_type;
This FIFO is implemented using memory resources in the FPGA. In the
CPLD there are no memory resouces... at least in Xilinx CPLDs. Other
brands have memory. With 8 bits and 16 words, each FIFO uses 128
FFs. A UART has two FIFOs using 256 FFs. That's half the CPLD right
there!
If you want a UART in the CPLD you need to take out the FIFOs. If you
are still running the same code for the Hello World program, you don't
need the FIFOs anyway. Instead of letting the data generator push
chars into the FIFO, let the data generator be throttled by the UART
handshake directly.
The UART clearly has other complexities that is eating up FFs. You
need to find or code a simpler UART to suit your requirements. Think
of the CPLD as an MCU with only 2 kB of program space. You wouldn't
pull the UART driver out of Linux and try to use it in that device
would you? In essence, that is what you are doing.
Rick
AHHH!!! This sounds exactly like the tumor I'm looking for. This
will be the first order of business on monday. If you look, I have
changed my UART driver, its as simple as they get, a state machine
with a bit shift, and I *thought" my fifo was just as simple; but the
fifo was definitely designed with the Spartan 3 in mind, and I suspect
that the Spartan-3 also has memory resources. BTW, where exactly is
the list of ingredients for these chips? I didn't know to ask for the
"memory resources" data on the coolrunner.
Actually, after I made the post I realized that the generic W defaults
to 4, specifying 16 bytes in the FIFO, but is set to 2 in the calling
code specifying only 4 registers. Still, that is 64 FFs even if it
doesn't get you back under the wire, it will help. I suspect you need
a rewite of the UART code to make is completely streamlined doing only
what you really need from it. For example, does this have a
programmable baud rate generator and do you just need a single rate?
Post by jleslie48
It would be so nice if these chips had one of those Ralph Nader
listings like on the real chips, you know the "Nutrition Facts"
listing on the back of the package of Lay's potato chips? Only for
this chip, saturated fat would be FF, and sodium would be LUT's,
etc.
Xilinx has a terrible habit of completely overwhelming us with
documentation, 99.999% of it useless and as a result anything useful
is hidden. This is a pure CYA attitude; they can claim its all
documented but for all practical purposes, it might as well not be.
Reading data sheets is also a skill. There is a lot in these parts
that is very complex and really needs to be well documented. I
understand what you mean about the info you need hiding in the volume,
but I wouldn't characterize the volume as "useless". If anything the
issue is just one of organization and references. I once had a ...
discussion ... about how the pullups on the Spartan 3 parts were
documented. It was all there, and over there, and some more here and
more there. So if you had read every page of the data sheet you would
have everything you needed. But even just the info on the pullups
needed to make configuration work was not on a single page. After,
discussing, this in this newsgroup, some changes were made to the
doc. But it took a large stick to get anyone to admit that a change
was needed.

Rick
Martin Thompson
2009-03-23 09:54:37 UTC
Permalink
Post by jleslie48
I'm working with a new chipset and I've got to add some functionality
to this coolrunner cpld xpla3 but I can't figure out its reports after
I get through with the synth--translate--fit. A report comes out in
Having looked over the whole thread, it's probably a bit late, but if
you are going to target an FPGA rather than a CPLD (in which case you
problem goes away :), you can use this tool to see where your
resources are going:

http://www.conekt.net/fpgaoptim.html

Disclaimer: I wrote it :) Mail me if you want a download link...

It was written for precisely the issue you have ("my code is too big -
what's using all the resources?"). You can sort the design on various
types of design elements (eg LUTs, FFs, multipliers, RAMs) by clicking
the column headings and then you can see where in the hierarchy the
FFs are "coming from".

Cheers,
Martin
--
***@trw.com
TRW Conekt - Consultancy in Engineering, Knowledge and Technology
http://www.conekt.net/electronics.html
c***@yahoo.com
2009-03-23 10:43:17 UTC
Permalink
Hopefully I'm not throwing a big spanner in the works but..

Have you considered using an ALTERA MAXII. They market it as a CPLD
but is is really a very small (but bigger that your coolrunner) FPGA.

They only need 3v3 and while not a drop in replacement it will replace
your coolrunner very easily. All FPGAs need several supplies.

Some time ago I designed a 40 pin DIL which just has a MAXII on it so
if you only need 36 IO it would only take a short time to install the
ALTERA dev tools and see if it fits. I have several bare PCBs so I
could easily sort you something out.

Colin
A***@googlemail.com
2009-03-23 11:03:34 UTC
Permalink
Post by c***@yahoo.com
Hopefully I'm not throwing a big spanner in the works but..
Have you considered using an ALTERA MAXII. They market it as a CPLD
but is is really a very small (but bigger that your coolrunner) FPGA.
They only need 3v3 and while not a drop in replacement it will replace
your coolrunner very easily. All FPGAs need several supplies.
Some time ago I designed a 40 pin DIL which just has a MAXII on it so
if you only need 36 IO it would only take a short time to install the
ALTERA dev tools and see if it fits. I have several bare PCBs so I
could easily sort you something out.
Colin
Lattice XP FPGA's are TRUE single supply FPGA's
also much better price/performance ratio then maxII or machXO

Antti
rickman
2009-03-23 14:47:40 UTC
Permalink
Post by A***@googlemail.com
Post by c***@yahoo.com
Hopefully I'm not throwing a big spanner in the works but..
Have you considered using an ALTERA MAXII. They market it as a CPLD
but is is really a very small (but bigger that your coolrunner) FPGA.
They only need 3v3 and while not a drop in replacement it will replace
your coolrunner very easily. All FPGAs need several supplies.
Some time ago I designed a 40 pin DIL which just has a MAXII on it so
if you only need 36 IO it would only take a short time to install the
ALTERA dev tools and see if it fits. I have several bare PCBs so I
could easily sort you something out.
Colin
Lattice XP FPGA's are TRUE single supply FPGA's
also much better price/performance ratio then maxII or machXO
Antti
How is that different from the MAXII parts? Are you saying that the
MAXII parts are not true single supply, or not true FPGAs? They use
4LUTs and have routing based on individual cells rather than blocks,
so why wouldn't they be FPGAs? The only reason they aren't called
FPGAs that I can tell is because they use Flash. But Flash doesn't
really make it a CPLD in my mind.

Rick
A***@googlemail.com
2009-03-23 15:00:07 UTC
Permalink
Post by A***@googlemail.com
Post by c***@yahoo.com
Hopefully I'm not throwing a big spanner in the works but..
Have you considered using an ALTERA MAXII. They market it as a CPLD
but is is really a very small (but bigger that your coolrunner) FPGA.
They only need 3v3 and while not a drop in replacement it will replace
your coolrunner very easily. All FPGAs need several supplies.
Some time ago I designed a 40 pin DIL which just has a MAXII on it so
if you only need 36 IO it would only take a short time to install the
ALTERA dev tools and see if it fits. I have several bare PCBs so I
could easily sort you something out.
Colin
Lattice XP FPGA's are TRUE single supply FPGA's
also much better price/performance ratio then maxII or machXO
Antti
How is that different from the MAXII parts?  Are you saying that the
MAXII parts are not true single supply, or not true FPGAs?  They use
4LUTs and have routing based on individual cells rather than blocks,
so why wouldn't they be FPGAs?  The only reason they aren't called
FPGAs that I can tell is because they use Flash.  But Flash doesn't
really make it a CPLD in my mind.
Rick
eh ok, its the NAMING issue :)

MAX II is marketed as PLD
machXO is markted as "crossover device"
XP is marketed as FPGA

so while we may think of the maxii and machxo as FPGA, they arent
marketed as FPGA, and being so tiny, not classifying as FPGAs (too
small), similarly i would not call IGLOO10 an FPGA as it too small (it
still marketed as FPGA)

so if all confused named not taken into account, then XP is the only
FPGA (also marketed as FPGA) that is true single chip and single
supply

Antti

Loading...