| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -37,6 +37,9 @@ architecture rtl of fifo is | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  type t_fifo_mem is array (t_fifo_pnt'low to t_fifo_pnt'high) of std_logic_vector(Din_i'range); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  signal s_fifo_mem : t_fifo_mem; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  signal s_almost_full  : boolean; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  signal s_almost_empty : boolean; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  function incr_pnt (data : t_fifo_pnt) return t_fifo_pnt is | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  begin | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (data = t_fifo_mem'high) then | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -49,6 +52,12 @@ architecture rtl of fifo is | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					begin | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  s_almost_full <= (s_write_pnt = s_read_pnt - 1) or | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                   (s_write_pnt = t_fifo_mem'high and s_read_pnt = t_fifo_mem'low); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  s_almost_empty <= (s_read_pnt = s_write_pnt - 1) or | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                    (s_read_pnt = t_fifo_mem'high and s_write_pnt = t_fifo_mem'low); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  WriteP : process (Reset_n_i, Clk_i) is | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  begin | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if (Reset_n_i = '0') then | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -85,16 +94,14 @@ begin | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      Full_o  <= '0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      Empty_o <= '1'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    elsif (rising_edge(Clk_i)) then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (Wen_i = '1' and Ren_i = '0') then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ((s_write_pnt = s_read_pnt - 1) or | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            (s_write_pnt = t_fifo_mem'high and s_read_pnt = t_fifo_mem'low)) then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (Wen_i = '1') then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (Ren_i = '0' and s_almost_full) then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          Full_o <= '1'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        end if; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Empty_o <= '0'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      end if; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (Ren_i = '1' and Wen_i = '0') then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if ((s_read_pnt = s_write_pnt - 1) or | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            (s_read_pnt = t_fifo_mem'high and s_write_pnt = t_fifo_mem'low)) then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (Ren_i = '1') then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        if (Wen_i = '0' and s_almost_empty) then | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          Empty_o <= '1'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        end if; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        Full_o <= '0'; | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |