www.pudn.com > viterbi213.rar > ACS_3.vhd


--ACS_3.vhd  
--add-compare-select unit of viterbi 
--v0.1 
 
library ieee; 
use ieee.std_logic_1164.all; 
use ieee.std_logic_arith.all; 
 
entity ACS_3 is 
	port( 
		clk: in std_logic; 
		reset: in std_logic; 
		rc : in std_logic_vector(1 downto 0); 
		im_1: in std_logic_vector(5 downto 0); 
		im_3: in std_logic_vector(5 downto 0); 
		acs_3: out std_logic; 
		om_3: out std_logic_vector(5 downto 0) 
		); 
end ACS_3; 
 
architecture a of ACS_3 is 
 
begin 
	process(clk,reset) 
	variable mc_1: std_logic_vector(1 downto 0); 
	variable mc_3: std_logic_vector(1 downto 0); 
	variable up  : unsigned(5 downto 0); 
	variable low : unsigned(5 downto 0); 
	begin	 
		if rising_edge(clk) then 
			if reset='1' then 
				mc_1:="00"; 
				mc_3:="00"; 
				acs_3<='0'; 
				om_3<="100000"; 
			else 
			mc_1(0):= rc(0) xor (not rc(1));   
			mc_1(1):= rc(0) and (not rc(1));   
			mc_3(0):= (not rc(0)) xor  rc(1); 
			mc_3(1):= (not rc(0)) and rc(1); 
			 
			up:=unsigned(im_1)+unsigned(mc_1); 
			low:=unsigned(im_3)+unsigned(mc_3); 
			 
				if up<=low then 
					acs_3<='0'; 
					om_3<=conv_std_logic_vector(up,6); 
				else 
					acs_3<='1'; 
					om_3<=conv_std_logic_vector(low,6); 
				end if;		 
			end if; 
		end if; 
	end process; 
end a;