OpenCores
URL https://opencores.org/ocsvn/microprocessor/microprocessor/trunk

Subversion Repositories microprocessor

[/] [microprocessor/] [trunk/] [bench/] [VHDL/] [UPRO_lib.vhd] - Rev 4

Compare with Previous | Blame | View Log

-------------------------------------------------------------------------------
-- function, procedure librery 
-- 
-- 
-------------------------------------------------------------------------------
 
library IEEE;
use IEEE.STD_LOGIC_1164.all;
 
package upro_lib is	  
 
 
end upro_lib ; 
 
-----------------------------------------------
-----------------------------------------------
 
library IEEE;    -- begin of Full adder 
use IEEE.STD_LOGIC_1164.all;
 
entity fa is 	
port ( x,y,cin,clk : in std_logic ; s,cout:out std_logic ) ;
end fa ;
 
architecture archi_fa of fa is
begin 						   
 
process (clk)	
begin
 
if (clk'event and (clk = '1') and (clk'last_value = '0')) then	
  s<=(x xor y) xor cin   ;
  cout<=((x xor y) and cin) or (x and y)  ;	
end if;
 
end process	;
end	archi_fa ;	 --- end of Full adder   
 
-----------------------------------------------
-----------------------------------------------
 
library IEEE;    -- begin of select1 ALU  
use IEEE.STD_LOGIC_1164.all;
 
entity selec1 is  
port ( a1,b1 : in std_logic ; 
       selec : in std_logic_vector (3 downto 0);
	   s1:     out std_logic 
	  ) ;
end selec1 ;
 
architecture archi_selec1 of selec1 is
begin  
 
process (selec,a1,b1)
begin
 
case selec is 
	when "0001" =>
	s1<= a1;           -- load a1
	when "0010" =>
	s1<= not a1;       -- inverse a1
	when "0011" => 
	s1<=  b1;  	       -- b1-1
	when "0100" =>
	s1<= a1 xor b1;	   -- a1 xor b1
	when "0101" =>
	s1<= a1 and b1;	   -- a1 and b1
	when "0110" =>
	s1<= a1 or b1;	   -- a1 or b1
	when "0111" =>
	s1<= a1 ;		   -- a1 + b1
	when "1000" =>
	s1<= a1 ;		   -- a1 - b1
	when "1001" =>
	s1<= a1 ;		   -- a1 - 1
	when "1010" =>
	s1<= a1 ;		   -- a1 + 1
	when "1011" => 
	s1<=  b1; 	       -- b1+1 
	when "1100" => 	       
	s1<= '0';		   -- not b 
	when others => null ;
 
end case ; 
 
end process ;
end	archi_selec1 ; -- end of selec1	
 
-----------------------------------------------
-----------------------------------------------
 
library IEEE; -- begin of select2 ALU  
use IEEE.STD_LOGIC_1164.all;
 
entity selec2 is  
port ( b1:     in std_logic ; 
       selec : in std_logic_vector (3 downto 0);
	   s2:     out std_logic 
	  ) ;
end selec2 ;
 
architecture archi_selec2 of selec2 is
begin 
 
process (selec,b1)
begin
 
case selec is 
	when "0001" =>
	s2<= '0';         -- load a1
	when "0010" =>
	s2<= '0';         -- inverse a1
	when "0011" => 
	s2<= '0'; 		  -- b1-1
	when "0100" =>
	s2<= '0';		  -- a1 xor b1
	when "0101" =>
	s2<= '0';		  -- a1 and b1
	when "0110" =>
	s2<= '0';		  -- a1 or b1
	when "0111" =>
	s2<= b1 ;		  -- a1 + b1
	when "1000" =>
	s2<= not b1 ;	  -- a1 - b1
	when "1001" =>
	s2<= '1' ;		  -- a1 - 1
	when "1010" =>
	s2<= '0' ; 		  -- a1 + 1
	when "1011" => 
	s2<= '1'; 		  -- b1+1 
	when "1100" => 	       
	s2<= not b1 ;	  -- not b 
	when others => null ;
end case ; 
 
end process ;
end	archi_selec2 ; -- end of selec2		
 
-----------------------------------------------
----------------------------------------------- 
 
library IEEE; -- debut de select3 ALU  
use IEEE.STD_LOGIC_1164.all;
 
entity selec3 is  
port ( 
      selec : in std_logic_vector (3 downto 0);
	  s3:     out std_logic 
	  ) ;
end selec3 ;
 
architecture archi_selec3 of selec3 is
begin  
 
process (selec)	 
begin
 
case selec is 
	when "1000" =>
	s3<= '1' ;	 -- a1-b1
	when "1010" =>
	s3<= '1' ;   -- a1+1
	when "0011" =>
	s3<= '1' ;   -- b1+1
	when others => 
	s3<= '0' ;	 -- others operations 		
end case ;
 
end process ; 
end	archi_selec3 ; -- end of selec3	 
 
-----------------------------------------------
----------------------------------------------- 
 
library IEEE; -- comparison
use IEEE.STD_LOGIC_1164.all;
 
entity compar1 is  
port ( 
      x :     in  std_logic ;
	  y :     in  std_logic ;
	  ck :    in  std_logic ;
	  Sin0 :  in  std_logic ;
	  Sin1 :  in  std_logic ; 
	  Sout0 : out std_logic ; 
	  Sout1 : out std_logic ;
	  Sout2 : out std_logic 
	  ) ;
end compar1 ;
 
architecture archi_compar1 of compar1 is 
signal s_in : std_logic_vector (1 downto 0);
begin
 
process (ck,Sin1,Sin0)
begin 
s_in <= (not Sin1)&(not Sin0) ;	
 
    if (ck'event and ck='1')then
      if (s_in ="11")then	
	    Sout1<= (x) and (not y) ;		   -- x>y = '1'
		Sout0<= (y) and (not x) ;		   -- x<y = '1'	
		Sout2<= not((y) xor (x)) ;		   -- x=y = '1'	
	  end if ;
	end if ;
 
end process ;
end archi_compar1 ; 
 
-----------------------------------------------
-----------------------------------------------
 
package body upro_lib is
 
 
end upro_lib ;  
 
 
 
 
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.