From: Griffin on
I'm working on a ML402 (Virtex-4) EDK project which has one custom IP
("event_getter") that was created using the EDK Create Peripheral
Wizard and then I added my code (included below) to the generated
user_logic.vhdl file. I am able to generate a netlist without issue,
but when I compile the bitstream, I get the following warnings:

WARNING:LIT:243 - Logical network my_peripheral_pin_0_IBUF has no
load.

and

WARNING:MapLib:701 - Signal my_peripheral_pin<0> connected to top
level port my_peripheral_pin<0> has been removed.

and it is repeated for pins my_peripheral_pin<1 - 6> (ie, all my
external pins). Synthesis continues, however, and a bitstream is
generated.

My peripheral code is:

pin_in: std_logic_vector(0 to 6);

[...]

signal pixel_0 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_1 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_2 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_3 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_4 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_5 : std_logic_vector(0 to 15):= (others => '0');
signal pixel_6 : std_logic_vector(0 to 15):= (others => '0');

signal s0: std_logic_vector(0 to C_SLV_DWIDTH-1):= (others => '0');
signal s1: std_logic_vector(0 to C_SLV_DWIDTH-1):= (others => '0');
signal s2: std_logic_vector(0 to C_SLV_DWIDTH-1):= (others => '0');
signal s3: std_logic_vector(0 to C_SLV_DWIDTH-1):= (others => '0');

[...]

-- purpose: peek at pixels and increment corresponding counters
-- type : combinational
-- inputs : pin_in(i)
-- outputs: pixel_(i)

check0: process (pin_in(0)) is
begin
if rising_edge(pin_in(0)) then
pixel_0 <= pixel_0 + '1';
s0(0 to 15) <= pixel_0;
end if;
end process;

check1: process (pin_in(1)) is
begin
if rising_edge(pin_in(1)) then
pixel_1 <= pixel_1 + '1';
s0(16 to 31) <= pixel_1;
end if;
end process;

(the above two blocks are repeated for pixels 2-6)

-- purpose: update registers to pixel count values
-- inputs : Bus2IP_Clk
-- outputs: slv_reg(i)
UPDATE_REGISTERS : process (Bus2IP_Clk) is
begin -- process
slv_reg0 <= s0;
slv_reg1 <= s1;
slv_reg2 <= s2;
slv_reg3 <= s3;
end process;



slv_reg0..3 are read out by EDK's automatically generated ReadReg
functions so I can access them from the C-level part of my project.


Firstly, I'm not sure what the first message means, no where in the
code I wrote have I defined anything including '_IBUF' (albeit I
suspect it to be something EDK generates automatically, in such a
case, can someone tell me what it is?

Secondly, if I understand correctly, the pins of my custom peripheral
are being removed from the project. I've looked around the internet a
bit and suspect this might be done due to auto-optimization, but
considering that these pins are, indeed, being used in the user_logic
file, and the registers that they store their values in are being read
out by my applicateion C code, I'm not sure why this would happen.
Does anyone have an idea why EDK could be removing my pins?

I assigned them to be external ports in EDK via System Assembly View -
> Ports -> My_peripheral -> (net column menu) Make External.

Thanks in advance,

Sean.

From: Mike Treseler on
Griffin wrote:

> Secondly, if I understand correctly, the pins of my custom peripheral
> are being removed from the project. I've looked around the internet a
> bit and suspect this might be done due to auto-optimization, but
> considering that these pins are, indeed, being used in the user_logic

It's not enough for a signal to be used by a process.
If a top level output port is not driven by a process -- no output pin.
If a top input input port is not read by a process -- no input pin.


> file, and the registers that they store their values in are being read
> out by my application C code,

correctly or all zeros?

-- Mike Treseler