-------------------------------------------------------------------------------- -- Copyright 2007 Actel Corporation. All rights reserved. -- ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN -- ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED -- IN ADVANCE IN WRITING. -- Revision 3.0 April 30, 2007 : v3.0 CoreFFT Release -- File: primitives.vhd -- Description: CoreFFT -- FFT primitives module -- Rev: 0.1 8/31/2005 4:53PM VD : Pre Production -- -- -------------------------------------------------------------------------------- -- counts up to TERMCOUNT, then jumps to 0. -- Generates tc signal on count==TERMCOUNT-1 LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.numeric_std.all; USE work.fft_components.all; ENTITY counter IS GENERIC ( WIDTH : integer := 7; TERMCOUNT : integer := 127 ); PORT ( clk, nGrst, rst, cntEn : IN std_logic; tc : OUT std_logic; Q : OUT std_logic_vector(WIDTH-1 DOWNTO 0) ); END ENTITY counter; ARCHITECTURE translated OF counter IS SIGNAL tc_out : std_logic; SIGNAL Q_out : unsigned(WIDTH-1 DOWNTO 0); BEGIN tc <= tc_out; Q <= std_logic_vector(Q_out); PROCESS (clk, nGrst) BEGIN IF (nGrst = '0') THEN Q_out <= (OTHERS => '0'); tc_out <= '0'; ELSIF (clk'EVENT AND clk = '1') THEN -- nGrst!=0 IF (rst = '1') THEN Q_out <= (OTHERS => '0'); tc_out <= '0'; ELSE IF (cntEn = '1') THEN -- start cntEn tc_out <= to_logic( Q_out = to_unsigned((TERMCOUNT-1),WIDTH)); IF (Q_out = to_unsigned(TERMCOUNT, WIDTH)) THEN Q_out <= (OTHERS => '0'); ELSE Q_out <= unsigned(Q_out) + to_unsigned(1, WIDTH); END IF; END IF; -- end cntEn END IF; -- end rst END IF; -- end nGrst END PROCESS; END ARCHITECTURE translated; -------------------------------------------------------------------------- -- binary counter with no feedback. Counts up to 2^WIDTH - 1 LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.numeric_std.all; ENTITY bcounter IS GENERIC (WIDTH : integer:=7 ); PORT (clk, nGrst, rst, cntEn : IN std_logic; Q : OUT std_logic_vector(WIDTH-1 DOWNTO 0)); END ENTITY bcounter; ARCHITECTURE translated OF bcounter IS SIGNAL Q_out : unsigned(WIDTH-1 DOWNTO 0); BEGIN Q <= std_logic_vector(Q_out); PROCESS (clk, nGrst) BEGIN IF (nGrst = '0') THEN Q_out <= (OTHERS => '0'); ELSIF (clk'EVENT AND clk = '1') THEN IF (cntEn = '1') THEN IF (rst = '1') THEN Q_out <= (OTHERS => '0'); ELSE Q_out <= unsigned(Q_out) + to_unsigned(1, WIDTH); END IF; END IF; END IF; END PROCESS; END ARCHITECTURE translated; -------------------------------------------------------------------------- -- rising-falling edge detector LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY edgeDetect IS GENERIC ( INPIPE :integer := 0; --if (INPIPE==1) insert input pipeline reg FEDGE :integer := 0);--If FEDGE==1 detect falling edge, else-rising edge PORT ( clk, clkEn, edgeIn : IN std_logic; edgeOut : OUT std_logic); END ENTITY edgeDetect; ARCHITECTURE translated OF edgeDetect IS SIGNAL in_pipe, in_t1 : std_logic; -- regs SIGNAL temp_input : std_logic; SIGNAL in_w : std_logic; SIGNAL temp_output : std_logic; SIGNAL out_w : std_logic; SIGNAL output_reg : std_logic; BEGIN edgeOut <= output_reg; temp_input <= (in_pipe) WHEN INPIPE /= 0 ELSE edgeIn; in_w <= temp_input ; temp_output<= ((NOT in_w) AND in_t1) WHEN FEDGE /= 0 ELSE (in_w AND (NOT in_t1)); out_w <= temp_output ; PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN in_pipe <= edgeIn; in_t1 <= in_w; output_reg <= out_w; END IF; END PROCESS; END ARCHITECTURE translated;