Can you elaborate what you mean by "I didn't get the output".
process( RST, CLK, LE, UD, D )
begin
if RST='1' then
Q_IN <= "0000";
elsif CLK='1' and CLK'event then
if LE='1' then
Q_IN <= D;
if UD='1' then
Q_IN <= Q_IN + '1';
else
Q_IN <= Q_IN - '1';
end if;
end if;
end if;
end process;
Your "Q_IN <= D" line will never have any effect - it will always be over-ridden by the +'1' or -'1' lines.
I use numeric_std rather than std_logic_unsigned (which isn't actually an IEEE standard despite the cheeky act by the simulator companies of compiling it into the IEEE library); but try +1 and -1 rather than +'1' and -'1' - the former gives you std_logic_vector + integer, the latter gives you std_logic_vector + std_logic.
That might not make any difference - as I said I don't use that particular package.
have a think about the order of your code - I think that you might need to try:
process( RST, CLK)
begin
if RST='1' then
Q_IN <= "0000";
elsif CLK='1' and CLK'event then
if LE='1' then
Q_IN <= D;
elsif UD='1' then
Q_IN <= Q_IN + '1';
else
Q_IN <= Q_IN - '1';
end if;
end if;
end process;
Make sure you've got the polarity of the reset correct. Are you saying it doesn't work in simulation or on the FPGA?
It shouldn't actually affect the function but bear in mind that you only need the RST and CLK in the sensitivity list.
Hope this helps.