Sign In

Don't have a Xilinx account yet?

  • Choose to receive important news and product information
  • Gain access to special content
  • Personalize your web experience on Xilinx.com

Create Account

Username

Password

Forgot your password?
XClose Panel
Xilinx Home
Reply
Regular Visitor
xinuver
Posts: 20
Registered: ‎11-21-2008
0

input never used in synthesizing

When I implement my CAM I get this warning:

Synthesizing Unit <read_RAM>.   

      WARNING:Xst:647 - Input <stateArray<63:1>> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved.
    ...
Unit <read_RAM> synthesized.

 

I can't figure out how to change my implementation.

The code of the implicated component is:

entity read_RAM is
    Generic (    ADDR : integer := 5;
                    WIDTH : integer := 13;
                    DEPTH : integer := 63
        );
    Port ( stateArray : in  STD_LOGIC_VECTOR (DEPTH downto 0);
              clk : std_logic;
           enable : in  STD_LOGIC; -- rd or dl
--         rdX : out  STD_LOGIC; -- rd1 or rd2
           aX : out  STD_LOGIC_VECTOR (ADDR downto 0)); -- a1 or a2
end read_RAM;

architecture Behavioral of read_RAM is
--    signal read_enable : std_logic;
begin
    process(clk, enable)
    begin
        if (rising_edge(clk)) then
            if enable = '1' then
                for i in DEPTH downto 0 loop
                    if stateArray(i) = '1' then
--                        read_enable <= '1';
                        aX <= std_logic_vector(conv_unsigned(i, 6));
                    else
--                        read_enable <= not(read_enable);
                        aX <= "ZZZZZZ";
                    end if;
                end loop;
            else
--                read_enable <= not(read_enable);
                aX <= "ZZZZZZ";
            end if;
        end if;
    end process;
--    rdX <= read_enable;
end Behavioral;

Can anyone help me with this warning? It's getting me nuts.

Xilinx Employee
driesd
Posts: 538
Registered: ‎11-28-2007
0

Re: input never used in synthesizing

Hello,

 

I would recommend you to check the connectivity of this stateArray signal.

is it indeed connected to a full 64 bit wide array? or is most of it static and does XST therefor optimize it away.

 

also, if you don't find it: synthesize this read_RAM block as a toplevel. looking at the code, it shouldn't give this warning anymore and this should make you confident it is not caused by this block.

 

probably checking the netlist with the XST RTL viewer or PlanAhead would be easiest.

running a simulation should also reveal why only 1 of the 64-bits is used.

 

 

best regards,

Dries 

Regular Visitor
xinuver
Posts: 20
Registered: ‎11-21-2008
0

Re: input never used in synthesizing

Hi Dries,

thank you for the advice. Since you mentioned simulation, I ask you (or who would like to help me) how should I run a simulation. I made a test bench file whith the utility "create a new source" and then selecting "test bench waveform" but then I can run it.

Can someone explain the simulation procedure?

thanks in advance 

Xilinx Employee
driesd
Posts: 538
Registered: ‎11-28-2007
0

Re: input never used in synthesizing

that's quite difficult to explain easily.

 

maybe you can find what you need in the ISE quickstart guide: http://www.xilinx.com/itp/xilinx10/books/docs/qst/qst.pdf

page 16 starts an explanaition on how to simulate.

 

 

best regards,

Dries

Regular Visitor
xinuver
Posts: 20
Registered: ‎11-21-2008
0

Re: input never used in synthesizing

Thanks again Dries. I'm going to try it and feed back as soon as possible.
Regular Visitor
xinuver
Posts: 20
Registered: ‎11-21-2008
0

Re: input never used in synthesizing

[ Edited ]

driesd wrote:
running a simulation should also reveal why only 1 of the 64-bits is used.

Actually I ran a simulation as shown in the pdf you linked in your previous post. In the simulation it seems that no output is affected by the incoming signals. It may mean that my coding is uncorrect but I also implemented a dual port ram as shown in VHDL Coding Examples from the software manuals and even in that case no output is affected. What could be the reason?

I modeled the waveforms without payng too much attention to their reliability: can it possibly be the cause of it all?

 

Also I wonder how can I synthetize a block as top-level.

 

At any rate it stopped giving me warning messages when I completed the else branches with null statements as follows:

entity read_RAM is
    Generic (    ADDR : integer := 5;
                    WIDTH : integer := 13;
                    DEPTH : integer := 63
        );
    Port ( stateArray : in  STD_LOGIC_VECTOR (DEPTH downto 0);
              clk : std_logic;
           enable : in  STD_LOGIC; -- rd or dl
--         rdX : out  STD_LOGIC; -- rd1 or rd2
           aX : out  STD_LOGIC_VECTOR (ADDR downto 0)); -- a1 or a2
end read_RAM;

architecture Behavioral of read_RAM is
--    signal read_enable : std_logic;
begin
    process(clk, enable)
    begin
        if (rising_edge(clk)) then
            if enable = '1' then
                for i in DEPTH downto 0 loop
                    if stateArray(i) = '1' then
--                        read_enable <= '1';
                        aX <= std_logic_vector(conv_unsigned(i, 6));
                    else
--                        read_enable <= not(read_enable);
                        null;
                    end if;
                end loop;
            else
--                read_enable <= not(read_enable);
                null;
            end if;
        end if;
    end process;
--    rdX <= read_enable;
end Behavioral;

 

This doesn't make sense to me, but it works.

Message Edited by xinuver on 12-22-2008 11:30 PM
Xilinx Employee
driesd
Posts: 538
Registered: ‎11-28-2007
0

Re: input never used in synthesizing

Hello,

 

I would invest time in running simulations of your design. if you don't get an output, then you need to find out why and correct the testbench or your design if necessary.

 

the world of FPGA design is unfortunately not a push-a-button world.

 

 

best regards,

Dries

Regular Visitor
xinuver
Posts: 20
Registered: ‎11-21-2008
0

Re: input never used in synthesizing

I'm going to do as you suggest.

I want to ask you another question:

when I synthetize a block with an instance of a dual port RAM I obtain thes warnings:


LIT:243 - Logical network RAM/Mram_RAM_ren1/SPO has no load.
LIT:395 - The above warning message base_net_load_rule is repeated 27 more times for the following (max. 5 shown):
RAM/Mram_RAM_ren2/SPO.
RAM/Mram_RAM_ren3/SPO.
RAM/Mram_RAM_ren4/SPO.
RAM/Mram_RAM_ren5/SPO.
RAM/Mram_RAM_ren6/SPO.
To see the details of these warning messages, please use the -detail switch.

 

I tried to use the -detail switch with the command line mode but it says that "Option -detail is not available for command run". How should I get the details of those warning messages?

 

Thanks a lot for the support you're giving me.