UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

cancel
Showing results for 
Search instead for 
Did you mean: 
Highlighted
Visitor ayush666
Visitor
5,550 Views
Registered: ‎01-30-2016

Xilinx ISE process block not getting implemented

Jump to solution

Hello everyone, i am designing a synchronization logic block for a project, using a process and IF statements:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity logix is
  PORT (
            hcounter : in std_logic_vector(9 downto 0);
            vcounter : in std_logic_vector(9 downto 0);
            enable : in std_logic;
            request_read : out std_logic;
            request_load : out std_logic;
          debugled: out std_logic    
        );


end logix;

architecture Behavioral of logix is

signal htemp : std_logic_vector(4 downto 0) := "00000";
signal flag : std_logic := '1';
signal ledtmp : std_logic;


begin

process(hcounter,vcounter)
begin
       
        htemp <= htemp + 1;
        ledtmp <= '1';
        
if (vcounter = 525 AND enable = '1') then
        
        
        if (flag = '1') then
                    
            htemp <= (others => '0');
            flag <= '0';
            request_read <= '1';
            request_load <= '1';
            

        end if;

       
        if ( (hcounter < 640) AND (vcounter < 480) AND (htemp < 32) ) then
            
            if (htemp > 16) then
                request_read <= '1';
            else
                request_read <= '0';
            end if;
            
            if (htemp = 31) then
                request_load <= '1';
                htemp <= (others => '0');
            else
                request_load <= '0';
         
            end if;
        
        
        else
           request_read <= '0';
            request_load <= '0';    
        end if;

        
    end if;

end process;
debugled <= ledtmp;
end Behavioral;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

However, when i implement the top module, this block gets represented simply as a GROUND connection to all the necessary pins, when i view the RTL schematic. What could be the problem?

 

 

Untitled.jpg
0 Kudos
1 Solution

Accepted Solutions
Scholar u4223374
Scholar
10,522 Views
Registered: ‎04-26-2015

Re: Xilinx ISE process block not getting implemented

Jump to solution

Did you try simulating it? A quick simulation would have revealed the answer almost instantly.

 

The problem is straightforward. Consider request_read. The conditions needed for request_read to be 1 are (vcounter = 525) and (enable = '1') and (hcounter < 640) and (vcounter < 480) and (htemp < 32) and (htemp > 16).

 

These conditions can never be fulfilled, so it must be zero all the time. Same applies for request_load. ledtmp is never set to zero anywhere in the code so it's just tied off to 1.

0 Kudos
2 Replies
Scholar u4223374
Scholar
10,523 Views
Registered: ‎04-26-2015

Re: Xilinx ISE process block not getting implemented

Jump to solution

Did you try simulating it? A quick simulation would have revealed the answer almost instantly.

 

The problem is straightforward. Consider request_read. The conditions needed for request_read to be 1 are (vcounter = 525) and (enable = '1') and (hcounter < 640) and (vcounter < 480) and (htemp < 32) and (htemp > 16).

 

These conditions can never be fulfilled, so it must be zero all the time. Same applies for request_load. ledtmp is never set to zero anywhere in the code so it's just tied off to 1.

0 Kudos
Visitor ayush666
Visitor
5,248 Views
Registered: ‎01-30-2016

Re: Xilinx ISE process block not getting implemented

Jump to solution

Thanks! i did change the conditions a bit and it got synthesized this time. I couldnt simulate it because my timing margins make ISim run for ages! I have another doubt though:

 

process(hcounter,vcounter,enable)
begin
       
        htemp <= htemp + 1;

 

if ( (hcounter < 640) AND (vcounter < 480) AND enable = '1' ) then
            
            if (htemp = 16) then
                request_read <= '1';
                ledtmp <= '1';
            else
                request_read <= '0';
            end if;    
            
            if (htemp = 31) then
                request_load <= '1';
            else
                request_load <= '0';
            
            end if;
            
        
else
           request_read <= '0';
            request_load <= '0';    
end if;
end process;

 

In this process, i want htemp to increment at the same rate as hcounter, but only till a value of 31 and not the entire hcounter value. I have doubts that the way i've incremented htemp will not work. I want to request a read when hcounter reaches 16 and request a load when it reaches 31. For that reason, im using htemp that only counts upto those values.

0 Kudos