##// END OF EJS Templates
Few fixes....
Few fixes. Whole LFR simulation WIP.

File last commit:

r631:df7b3a51dab6 simu_with_Leon3
r682:c53e1b6b3045 default
Show More
primitives.vhd
133 lines | 3.9 KiB | text/x-vhdl | VhdlLexer
--------------------------------------------------------------------------------
-- 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;