- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Why pinahead inferred a vhdl code into a IDDR and give me an error?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
06-07-2012 08:45 AM
Hello ,I have a doubt.
I have a problem with a little part of my code when migrate my project from ISE to PinAhead project.
The question is:
Why pinAhead inferred a IDDR with part of vhdl code?
I don't instantiate DDR.
Can I Do something to Avoid It? In ise I don´t has this problem.
the objective of the code is to sample an input signal with frecuency of 27M
through a clock with frecuency of 270 to find the optimum point of sampling.
captured 8 samples per cycle of the input signal.
I can not use IDDR because it would need 4 iDDR in parallel for the same input pin, and this is not posible.
the error shown in pinahead is as follows:
[NgdBuild 604] logical block 'asi_rx_inst/DVBASI_INST1/asi_receiver/dru_8phase/
the code that gives me problems is:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.NUMERIC_STD.all;
--library UNISIM;
--use UNISIM.VCOMPONENTS.all;
entity DRU is
port(CLK270:in STD_LOGIC_VECTOR(3 downto 0); -- 270MHz 4-phase Clocks (0, 45, 90 and 135 degrees)
SI:in STD_LOGIC; -- 270Mbps Serial Data In
DOUT:out STD_LOGIC_VECTOR(1 downto 0); -- Serial Data Out (0, 1 or 2 bits/clock)
DV:out UNSIGNED(1 downto 0)); -- Number of valid output bits (0, 1 or 2 bits/clock)
end DRU;
architecture TEST of DRU is
signal DATA,DATA1D,DATA2D,DATA3D,DATA4D,cEDGE,EDGE,E:STD_
signal Q:UNSIGNED(2 downto 0):=(others=>'0');
signal DVE:UNSIGNED(DV'range):=(others=>'0');
begin
lk:for K in CLK270'range generate
signal QR,QF,QFD,RQ,FQ:STD_LOGIC:='0';
begin
process(CLK270(K))
begin
if falling_edge(CLK270(K)) then
QF<=SI;
end if;
end process;
process(CLK270(K))
begin
if rising_edge(CLK270(K)) then
QR<=SI;
QFD<=QF;
end if;
end process;
process(CLK270(0))
begin
if rising_edge(CLK270(0)) then
RQ<=QR;
FQ<=QFD;
end if;
end process;
DATA(K)<=FQ;
DATA(K+4)<=RQ;
end generate;
process(CLK270(0))
begin
if rising_edge(CLK270(0)) then
EDGE<=DATA xor DATA(6 downto 0)&DATA1D(7);
E<=EDGE or EDGE(6 downto 0)&EDGE(7) or EDGE(0)&EDGE(7 downto 1);
case Q is
when "000"=>if E(2)='1' then
Q<="111";DVE<="10";
elsif E(6)='1' then
Q<="001";DVE<="01";
else
DVE<="01";
end if;
when "001"=>if E(3)='1' then
Q<="000";DVE<="01";
elsif E(7)='1' then
Q<="010";DVE<="01";
else
DVE<="01";
end if;
when "010"=>if E(4)='1' then
Q<="001";DVE<="01";
elsif E(0)='1' then
Q<="011";DVE<="01";
else
DVE<="01";
end if;
when "011"=>if E(5)='1' then
Q<="010";DVE<="01";
elsif E(1)='1' then
Q<="100";DVE<="01";
else
DVE<="01";
end if;
when "100"=>if E(6)='1' then
Q<="011";DVE<="01";
elsif E(2)='1' then
Q<="101";DVE<="01";
else
DVE<="01";
end if;
when "101"=>if E(7)='1' then
Q<="100";DVE<="01";
elsif E(3)='1' then
Q<="110";DVE<="01";
else
DVE<="01";
end if;
when "110"=>if E(0)='1' then
Q<="101";DVE<="01";
elsif E(4)='1' then
Q<="111";DVE<="01";
else
DVE<="01";
end if;
when "111"=>if E(1)='1' then
Q<="110";DVE<="01";
elsif E(5)='1' then
Q<="000";DVE<="00";
else
DVE<="01";
end if;
when others=>null;
end case;
DATA1D<=DATA;
DATA2D<=DATA1D;
DATA3D<=DATA2D;
DATA4D<=DATA3D;
DOUT<=DATA4D(7)&DATA3D(TO_INTEGER(Q));
DV<=DVE;
end if;
end process;
end TEST;
Re: Why pinahead inferred a vhdl code into a IDDR and give me an error?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
06-08-2012 06:16 AM
You might try adding IOB = "FALSE" attributes to each of your input registers. See the XST manual
for how to do this. This will prevent placement of the registers into the IOB, which is the only
place you can have an IDDR.
-- Gabor
Re: Why pinahead inferred a vhdl code into a IDDR and give me an error?
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
06-12-2012 11:56 PM
Thank, but I try that and it gives the same error.











