##// END OF EJS Templates
Fusion avec martin
pellion -
r197:5c46ab49a3a1 merge JC
parent child
Show More
@@ -0,0 +1,90
1 -- FillFifo.vhd
2 library IEEE;
3 use IEEE.std_logic_1164.all;
4 use IEEE.numeric_std.all;
5
6 entity FillFifo is
7 generic(
8 Data_sz : integer range 1 to 32 := 16;
9 Fifo_cnt : integer range 1 to 8 := 5
10 );
11 port(
12 clk : in std_logic;
13 raz : in std_logic;
14 write : out std_logic_vector(Fifo_cnt-1 downto 0);
15 reuse : out std_logic_vector(Fifo_cnt-1 downto 0);
16 data : out std_logic_vector(Fifo_cnt*Data_sz-1 downto 0)
17 );
18 end entity;
19
20
21 architecture ar_FillFifo of FillFifo is
22
23 signal i : integer := 0;
24
25 type etat is (eX,e0,e00);
26 signal ect : etat;
27
28 type Tbl is array(natural range <>) of std_logic_vector(Data_sz-1 downto 0);
29
30 --constant TblA : Tbl (0 to 255) := (X"FFFF",X"0142",X"0282",X"03C2",X"04FF",X"0638",X"076E",X"08A0",X"09CC",X"0AF2",X"0C11",X"0D29",X"0E39",X"0F40",X"103E",X"1131",X"121A",X"12F8",X"13CA",X"1490",X"1549",X"15F5",X"1694",X"1724",X"17A7",X"181B",X"187F",X"18D5",X"191C",X"1953",X"197A",X"1992",X"199A",X"1992",X"197A",X"1953",X"191C",X"18D5",X"187F",X"181B",X"17A7",X"1724",X"1694",X"15F5",X"1549",X"1490",X"13CA",X"12F8",X"121A",X"1131",X"103E",X"0F40",X"0E39",X"0D29",X"0C11",X"0AF2",X"09CC",X"08A0",X"076E",X"0638",X"04FF",X"03C2",X"0282",X"0142",X"0000",X"FEBE",X"FD7E",X"FC3E",X"FB01",X"F9C8",X"F892",X"F760",X"F634",X"F50E",X"F3EF",X"F2D7",X"F1C7",X"F0C0",X"EFC2",X"EECF",X"EDE6",X"ED08",X"EC36",X"EB70",X"EAB7",X"EA0B",X"E96C",X"E8DC",X"E859",X"E7E5",X"E781",X"E72B",X"E6E4",X"E6AD",X"E686",X"E66E",X"E666",X"E66E",X"E686",X"E6AD",X"E6E4",X"E72B",X"E781",X"E7E5",X"E859",X"E8DC",X"E96C",X"EA0B",X"EAB7",X"EB70",X"EC36",X"ED08",X"EDE6",X"EECF",X"EFC2",X"F0C0",X"F1C7",X"F2D7",X"F3EF",X"F50E",X"F634",X"F760",X"F892",X"F9C8",X"FB01",X"FC3E",X"FD7E",X"FEBE",X"0000",X"0142",X"0282",X"03C2",X"04FF",X"0638",X"076E",X"08A0",X"09CC",X"0AF2",X"0C11",X"0D29",X"0E39",X"0F40",X"103E",X"1131",X"121A",X"12F8",X"13CA",X"1490",X"1549",X"15F5",X"1694",X"1724",X"17A7",X"181B",X"187F",X"18D5",X"191C",X"1953",X"197A",X"1992",X"199A",X"1992",X"197A",X"1953",X"191C",X"18D5",X"187F",X"181B",X"17A7",X"1724",X"1694",X"15F5",X"1549",X"1490",X"13CA",X"12F8",X"121A",X"1131",X"103E",X"0F40",X"0E39",X"0D29",X"0C11",X"0AF2",X"09CC",X"08A0",X"076E",X"0638",X"04FF",X"03C2",X"0282",X"0142",X"0000",X"FEBE",X"FD7E",X"FC3E",X"FB01",X"F9C8",X"F892",X"F760",X"F634",X"F50E",X"F3EF",X"F2D7",X"F1C7",X"F0C0",X"EFC2",X"EECF",X"EDE6",X"ED08",X"EC36",X"EB70",X"EAB7",X"EA0B",X"E96C",X"E8DC",X"E859",X"E7E5",X"E781",X"E72B",
31 --X"E6E4",X"E6AD",X"E686",X"E66E",X"E666",X"E66E",X"E686",X"E6AD",X"E6E4",X"E72B",X"E781",X"E7E5",X"E859",X"E8DC",X"E96C",X"EA0B",X"EAB7",X"EB70",X"EC36",X"ED08",X"EDE6",X"EECF",X"EFC2",X"F0C0",X"F1C7",X"F2D7",X"F3EF",X"F50E",X"F634",X"F760",X"F892",X"F9C8",X"FB01",X"FC3E",X"FD7E",X"FEBE");
32
33 constant TblA : Tbl (0 to 255) := (X"0001",X"0001",X"1FFF",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
34 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
35 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001");
36
37 constant TblB : Tbl (0 to 255) := (X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
38 X"1FFF",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
39 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001");
40
41 constant TblC : Tbl (0 to 255) := (X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
42 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
43 X"1FFF",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001");
44
45 constant TblD : Tbl (0 to 255) := (X"1FFF",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
46 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
47 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001");
48
49 constant TblE : Tbl (0 to 255) := (X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
50 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",
51 X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"1FFF",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001",X"0001");
52
53 begin
54
55 process(clk,raz)
56 begin
57 if(raz='0')then
58 i <= 0;
59 Write <= (others => '1');
60 Reuse <= (others => '0');
61 ect <= e00;
62
63 elsif(clk'event and clk='1')then
64
65 case ect is
66
67 when e00 =>
68 Write <= (others => '0');
69 ect <= e0;
70
71 when e0 =>
72 if(i=255)then
73 Write <= (others => '1');
74 Reuse <= (others => '1');
75 ect <= eX;
76 else
77 i <= i+1;
78 ect <= e0;
79 end if;
80
81 when eX =>
82 null;
83
84 end case;
85 end if;
86 end process;
87
88 data <= TblE(i) & TblD(i) & TblC(i) & TblB(i) & TblA(i);
89
90 end architecture; No newline at end of file
@@ -1,93 +1,100
1 ------------------------------------------------------------------------------
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 -------------------------------------------------------------------------------
18 ------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@lpp.polytechnique.fr
20 -- Mail : alexis.jeandet@lpp.polytechnique.fr
21 ----------------------------------------------------------------------------
21 ------------------------------------------------------------------------------
22 library ieee;
22 library ieee;
23 use ieee.std_logic_1164.all;
23 use ieee.std_logic_1164.all;
24 use IEEE.numeric_std.all;
24 use IEEE.numeric_std.all;
25
25
26 entity RAM_CEL is
26 entity RAM_CEL is
27 port( WD : in std_logic_vector(15 downto 0); RD : out
27 generic(DataSz : integer range 1 to 32 := 8;
28 std_logic_vector(15 downto 0);WEN, REN : in std_logic;
28 abits : integer range 2 to 12 := 8);
29 WADDR : in std_logic_vector(7 downto 0); RADDR : in
29 port( WD : in std_logic_vector(DataSz-1 downto 0); RD : out
30 std_logic_vector(7 downto 0);RWCLK, RESET : in std_logic
30 std_logic_vector(DataSz-1 downto 0);WEN, REN : in std_logic;
31 ) ;
31 WADDR : in std_logic_vector(abits-1 downto 0); RADDR : in
32 end RAM_CEL;
32 std_logic_vector(abits-1 downto 0);RWCLK, RESET : in std_logic
33
33 ) ;
34
34 end RAM_CEL;
35
35
36 architecture ar_RAM_CEL of RAM_CEL is
36
37 type RAMarrayT is array (0 to 255) of std_logic_vector(15 downto 0);
37
38 signal RAMarray : RAMarrayT:=(others => X"0000");
38 architecture ar_RAM_CEL of RAM_CEL is
39 signal RD_int : std_logic_vector(15 downto 0);
39
40
40 constant VectInit : std_logic_vector(DataSz-1 downto 0):=(others => '0');
41 begin
41 constant MAX : integer := 2**(abits);
42
42
43 RD_int <= RAMarray(to_integer(unsigned(RADDR)));
43 type RAMarrayT is array (0 to MAX-1) of std_logic_vector(DataSz-1 downto 0);
44
44
45
45 signal RAMarray : RAMarrayT:=(others => VectInit);
46 process(RWclk,reset)
46 signal RD_int : std_logic_vector(DataSz-1 downto 0);
47 begin
47
48 if reset = '0' then
48 begin
49 RD <= (X"0000");
49
50 rst:for i in 0 to 255 loop
50 RD_int <= RAMarray(to_integer(unsigned(RADDR)));
51 RAMarray(i) <= (others => '0');
51
52 end loop;
52
53
53 process(RWclk,reset)
54 elsif RWclk'event and RWclk = '1' then
54 begin
55 if REN = '0' then
55 if reset = '0' then
56 RD <= RD_int;
56 RD <= VectInit;
57 end if;
57 rst:for i in 0 to MAX-1 loop
58
58 RAMarray(i) <= (others => '0');
59 if WEN = '0' then
59 end loop;
60 RAMarray(to_integer(unsigned(WADDR))) <= WD;
60
61 end if;
61 elsif RWclk'event and RWclk = '1' then
62
62 if REN = '0' then
63 end if;
63 RD <= RD_int;
64 end process;
64 end if;
65 end ar_RAM_CEL;
65
66
66 if WEN = '0' then
67
67 RAMarray(to_integer(unsigned(WADDR))) <= WD;
68
68 end if;
69
69
70
70 end if;
71
71 end process;
72
72 end ar_RAM_CEL;
73
73
74
74
75
75
76
76
77
77
78
78
79
79
80
80
81
81
82
82
83
83
84
84
85
85
86
86
87
87
88
88
89
89
90
90
91
91
92
92
93
93
94
95
96
97
98
99
100
@@ -203,17 +203,15 PACKAGE iir_filter IS
203 ) ;
203 ) ;
204 END COMPONENT;
204 END COMPONENT;
205
205
206 COMPONENT RAM_CEL
206 COMPONENT RAM_CEL is
207 GENERIC (
207 generic(DataSz : integer range 1 to 32 := 8;
208 Sample_SZ : INTEGER);
208 abits : integer range 2 to 12 := 8);
209 PORT (
209 port( WD : in std_logic_vector(DataSz-1 downto 0); RD : out
210 WD : IN STD_LOGIC_VECTOR(Sample_SZ-1 DOWNTO 0);
210 std_logic_vector(DataSz-1 downto 0);WEN, REN : in std_logic;
211 RD : OUT STD_LOGIC_VECTOR(Sample_SZ-1 DOWNTO 0);
211 WADDR : in std_logic_vector(abits-1 downto 0); RADDR : in
212 WEN, REN : IN STD_LOGIC;
212 std_logic_vector(abits-1 downto 0);RWCLK, RESET : in std_logic
213 WADDR : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
213 ) ;
214 RADDR : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
214 end COMPONENT;
215 RWCLK, RESET : IN STD_LOGIC);
216 END COMPONENT;
217
215
218 COMPONENT RAM_CEL_N
216 COMPONENT RAM_CEL_N
219 GENERIC (
217 GENERIC (
@@ -57,21 +57,29 signal Matrix_Param : std_logic_vect
57 signal Write_reg : std_logic;
57 signal Write_reg : std_logic;
58 signal Data_cpt : integer;
58 signal Data_cpt : integer;
59 signal MAX : integer;
59 signal MAX : integer;
60 signal pong_reg : std_logic;
60
61
62 type etat is (idle0,idle1,pong0,pong1);
63 signal ect : etat;
61
64
62 begin
65 begin
63
66
64 process (clkm,rstn)
67 process (clkm,rstn)
65 begin
68 begin
66 if(rstn='0')then
69 if(rstn='0')then
70 ect <= idle0;
67 Valid <= '0';
71 Valid <= '0';
72 pong_reg <= '0';
73 header_val <= '0';
74 header(5 downto 0) <= (others => '0');
68 Write_reg <= '0';
75 Write_reg <= '0';
69 Data_cpt <= 0;
76 Data_cpt <= 0;
70 MAX <= 0;
77 MAX <= 128;
71
78
72
79
73 elsif(clkm' event and clkm='1')then
80 elsif(clkm' event and clkm='1')then
74 Write_reg <= Matrix_Write;
81 Write_reg <= Matrix_Write;
82 pong_reg <= pong;
75
83
76 if(Statu="0001" or Statu="0011" or Statu="0110" or Statu="1010" or Statu="1111")then
84 if(Statu="0001" or Statu="0011" or Statu="0110" or Statu="1010" or Statu="1111")then
77 MAX <= 128;
85 MAX <= 128;
@@ -79,33 +87,102 begin
79 MAX <= 256;
87 MAX <= 256;
80 end if;
88 end if;
81
89
82 if(Write_reg = '0' and Matrix_Write = '1')then
90 -- if(Write_reg = '0' and Matrix_Write = '1')then
83 if(Data_cpt = MAX)then
91 -- if(Data_cpt = MAX)then
84 Data_cpt <= 0;
92 -- Data_cpt <= 0;
85 Valid <= '1';
93 -- Valid <= '1';
86 header_val <= '1';
94 -- header_val <= '1';
87 else
95 -- else
88 Data_cpt <= Data_cpt + 1;
96 -- Data_cpt <= Data_cpt + 1;
89 Valid <= '0';
97 -- Valid <= '0';
90 end if;
98 -- end if;
99 -- end if;
100
101 if(Write_reg = '0' and Matrix_Write = '1')then
102 Data_cpt <= Data_cpt + 1;
103 Valid <= '0';
104 elsif(Data_cpt = MAX)then
105 Data_cpt <= 0;
106 Valid <= '1';
107 header_val <= '1';
108 else
109 Valid <= '0';
91 end if;
110 end if;
92
111
93 if(header_ack = '1')then
112 -- if(header_ack = '1')then
94 header_val <= '0';
113 -- header_val <= '0';
95 end if;
114 -- end if;
96
115
116 -- if(emptyIN = "10")then
117 -- ping <= '0';
118 -- elsif(emptyIN = "01")then
119 -- ping <= '1';
120 -- else
121 -- ping <= ping;
122 -- end if;
123
124
125 case ect is
126
127 when idle0 =>
128 if(header_ack = '1')then
129 header_val <= '0';
130 --if(pong = '1')then
131 ect <= pong0;
132 --elsif(pong = '0')then
133 --ect <= pong1;
134 --end if;
135 end if;
136
137 when pong0 =>
138 header(1 downto 0) <= Matrix_Type;
139 header(5 downto 2) <= Matrix_Param;
140 if(emptyIN(0) = '1')then
141 ect <= idle1;
142 end if;
143
144 when idle1 =>
145 if(header_ack = '1')then
146 header_val <= '0';
147 ect <= pong1;
148 end if;
149
150 when pong1 =>
151 header(1 downto 0) <= Matrix_Type;
152 header(5 downto 2) <= Matrix_Param;
153 if(emptyIN(1) = '1')then
154 ect <= idle0;
155 end if;
156
157 end case;
97 end if;
158 end if;
98 end process;
159 end process;
99
160
100 Matrix_Param <= std_logic_vector(to_unsigned(to_integer(unsigned(Statu))-1,4));
161 Matrix_Param <= std_logic_vector(to_unsigned(to_integer(unsigned(Statu))-1,4));
101
162
102 header(1 downto 0) <= Matrix_Type;
163 --header(1 downto 0) <= Matrix_Type;
103 header(5 downto 2) <= Matrix_Param;
164 --header(5 downto 2) <= Matrix_Param;
104 header(31 downto 6) <= (others => '0');
165 header(31 downto 6) <= (others => '0');
105
166
106 dataOUT <= dataIN(Data_sz-1 downto 0) when pong = '0' else dataIN((2*Data_sz)-1 downto Data_sz);
167 with ect select
107 emptyOUT <= emptyIN(0) when pong = '0' else emptyIN(1);
168 dataOUT <= dataIN(Data_sz-1 downto 0) when pong0,
169 dataIN(Data_sz-1 downto 0) when idle0,
170 dataIN((2*Data_sz)-1 downto Data_sz) when pong1,
171 dataIN((2*Data_sz)-1 downto Data_sz) when idle1,
172 (others => '0') when others;
108
173
109 RenOUT <= '1' & RenIN when pong = '0' else RenIN & '1';
174 with ect select
175 emptyOUT <= emptyIN(0) when pong0,
176 emptyIN(0) when idle0,
177 emptyIN(1) when pong1,
178 emptyIN(1) when idle1,
179 '1' when others;
180
181 with ect select
182 RenOUT <= '1' & RenIN when pong0,
183 '1' & RenIN when idle0,
184 RenIN & '1' when pong1,
185 RenIN & '1' when idle1,
186 "11" when others;
110
187
111 end architecture;
188 end architecture;
@@ -103,6 +103,7 ARCHITECTURE Behavioral OF lpp_dma_ip IS
103 -----------------------------------------------------------------------------
103 -----------------------------------------------------------------------------
104 -----------------------------------------------------------------------------
104 -----------------------------------------------------------------------------
105 TYPE state_DMAWriteBurst IS (IDLE,
105 TYPE state_DMAWriteBurst IS (IDLE,
106 CHECK_COMPONENT_TYPE,
106 TRASH_FIFO,
107 TRASH_FIFO,
107 WAIT_HEADER_ACK,
108 WAIT_HEADER_ACK,
108 SEND_DATA,
109 SEND_DATA,
@@ -182,8 +183,7 BEGIN
182 END PROCESS debug_info;
183 END PROCESS debug_info;
183
184
184
185
185 matrix_type <= header(1 DOWNTO 0);
186
186 component_type <= header(5 DOWNTO 2);
187
187
188 send_matrix <= '1' WHEN matrix_type = "00" AND status_ready_matrix_f0_0 = '0' ELSE
188 send_matrix <= '1' WHEN matrix_type = "00" AND status_ready_matrix_f0_0 = '0' ELSE
189 '1' WHEN matrix_type = "01" AND status_ready_matrix_f0_1 = '0' ELSE
189 '1' WHEN matrix_type = "01" AND status_ready_matrix_f0_1 = '0' ELSE
@@ -191,8 +191,8 BEGIN
191 '1' WHEN matrix_type = "11" AND status_ready_matrix_f2 = '0' ELSE
191 '1' WHEN matrix_type = "11" AND status_ready_matrix_f2 = '0' ELSE
192 '0';
192 '0';
193
193
194 header_check_ok <= '0' WHEN component_type = "1111" ELSE
194 header_check_ok <= '0' WHEN component_type = "1111" ELSE -- ?? component_type_pre = "1111"
195 '1' WHEN component_type = "0000" AND component_type_pre = "1110" ELSE
195 '1' WHEN component_type = "0000" AND component_type_pre = "0000" ELSE
196 '1' WHEN component_type = component_type_pre + "0001" ELSE
196 '1' WHEN component_type = component_type_pre + "0001" ELSE
197 '0';
197 '0';
198
198
@@ -208,6 +208,8 BEGIN
208 DMAWriteFSM_p : PROCESS (HCLK, HRESETn)
208 DMAWriteFSM_p : PROCESS (HCLK, HRESETn)
209 BEGIN -- PROCESS DMAWriteBurst_p
209 BEGIN -- PROCESS DMAWriteBurst_p
210 IF HRESETn = '0' THEN -- asynchronous reset (active low)
210 IF HRESETn = '0' THEN -- asynchronous reset (active low)
211 matrix_type <= (others => '0');
212 component_type <= (others => '0');
211 state <= IDLE;
213 state <= IDLE;
212 header_ack <= '0';
214 header_ack <= '0';
213 ready_matrix_f0_0 <= '0';
215 ready_matrix_f0_0 <= '0';
@@ -216,7 +218,7 BEGIN
216 ready_matrix_f2 <= '0';
218 ready_matrix_f2 <= '0';
217 error_anticipating_empty_fifo <= '0';
219 error_anticipating_empty_fifo <= '0';
218 error_bad_component_error <= '0';
220 error_bad_component_error <= '0';
219 component_type_pre <= "1110";
221 component_type_pre <= "0000";
220 fifo_ren_trash <= '1';
222 fifo_ren_trash <= '1';
221 component_send <= '0';
223 component_send <= '0';
222 address <= (OTHERS => '0');
224 address <= (OTHERS => '0');
@@ -226,7 +228,10 BEGIN
226 ELSIF HCLK'EVENT AND HCLK = '1' THEN -- rising clock edge
228 ELSIF HCLK'EVENT AND HCLK = '1' THEN -- rising clock edge
227
229
228 CASE state IS
230 CASE state IS
229 WHEN IDLE =>
231 WHEN IDLE =>
232 matrix_type <= header(1 DOWNTO 0);
233 --component_type <= header(5 DOWNTO 2);
234
230 ready_matrix_f0_0 <= '0';
235 ready_matrix_f0_0 <= '0';
231 ready_matrix_f0_1 <= '0';
236 ready_matrix_f0_1 <= '0';
232 ready_matrix_f1 <= '0';
237 ready_matrix_f1 <= '0';
@@ -234,9 +239,14 BEGIN
234 error_bad_component_error <= '0';
239 error_bad_component_error <= '0';
235 header_select <= '1';
240 header_select <= '1';
236 IF header_val = '1' AND fifo_empty = '0' AND send_matrix = '1' THEN
241 IF header_val = '1' AND fifo_empty = '0' AND send_matrix = '1' THEN
242 matrix_type <= header(1 DOWNTO 0);
243 component_type <= header(5 DOWNTO 2);
244 component_type_pre <= component_type;
245 state <= CHECK_COMPONENT_TYPE;
246 END IF;
247
248 WHEN CHECK_COMPONENT_TYPE =>
237 IF header_check_ok = '1' THEN
249 IF header_check_ok = '1' THEN
238 header_data <= header;
239 component_type_pre <= header(5 DOWNTO 2);
240 header_ack <= '1';
250 header_ack <= '1';
241 --
251 --
242 header_send <= '1';
252 header_send <= '1';
@@ -247,14 +257,15 BEGIN
247 --
257 --
248 state <= WAIT_HEADER_ACK;
258 state <= WAIT_HEADER_ACK;
249 ELSE
259 ELSE
250 error_bad_component_error <= '1';
260 error_bad_component_error <= '1';
251 component_type_pre <= "1110";
261 component_type_pre <= "0000";
252 header_ack <= '1';
262 header_ack <= '1';
253 state <= TRASH_FIFO;
263 state <= TRASH_FIFO;
254 END IF;
264 END IF;
255 END IF;
265
256
266
257 WHEN TRASH_FIFO =>
267 WHEN TRASH_FIFO =>
268 header_ack <= '0';
258 error_bad_component_error <= '0';
269 error_bad_component_error <= '0';
259 error_anticipating_empty_fifo <= '0';
270 error_anticipating_empty_fifo <= '0';
260 IF fifo_empty = '1' THEN
271 IF fifo_empty = '1' THEN
@@ -263,8 +274,9 BEGIN
263 ELSE
274 ELSE
264 fifo_ren_trash <= '0';
275 fifo_ren_trash <= '0';
265 END IF;
276 END IF;
266
277
267 WHEN WAIT_HEADER_ACK =>
278 WHEN WAIT_HEADER_ACK =>
279 header_ack <= '0';
268 header_send <= '0';
280 header_send <= '0';
269 IF header_send_ko = '1' THEN
281 IF header_send_ko = '1' THEN
270 state <= TRASH_FIFO;
282 state <= TRASH_FIFO;
@@ -279,7 +291,7 BEGIN
279 WHEN SEND_DATA =>
291 WHEN SEND_DATA =>
280 IF fifo_empty = '1' THEN
292 IF fifo_empty = '1' THEN
281 state <= IDLE;
293 state <= IDLE;
282 IF component_type = "1110" THEN
294 IF component_type = "1110" THEN --"1110" -- JC
283 CASE matrix_type IS
295 CASE matrix_type IS
284 WHEN "00" => ready_matrix_f0_0 <= '1';
296 WHEN "00" => ready_matrix_f0_0 <= '1';
285 WHEN "01" => ready_matrix_f0_1 <= '1';
297 WHEN "01" => ready_matrix_f0_1 <= '1';
@@ -287,6 +299,7 BEGIN
287 WHEN "11" => ready_matrix_f2 <= '1';
299 WHEN "11" => ready_matrix_f2 <= '1';
288 WHEN OTHERS => NULL;
300 WHEN OTHERS => NULL;
289 END CASE;
301 END CASE;
302
290 END IF;
303 END IF;
291 ELSE
304 ELSE
292 component_send <= '1';
305 component_send <= '1';
This diff has been collapsed as it changes many lines, (525 lines changed) Show them Hide them
@@ -1,263 +1,264
1 ------------------------------------------------------------------------------
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ------------------------------------------------------------------------------
18 ------------------------------------------------------------------------------
19 -- Author : Alexis Jeandet
19 -- Author : Alexis Jeandet
20 -- Mail : alexis.jeandet@lpp.polytechnique.fr
20 -- Mail : alexis.jeandet@lpp.polytechnique.fr
21 ------------------------------------------------------------------------------
21 ------------------------------------------------------------------------------
22 -- APB_FIFO.vhd
22 -- APB_FIFO.vhd
23 library ieee;
23 library ieee;
24 use ieee.std_logic_1164.all;
24 use ieee.std_logic_1164.all;
25 use IEEE.numeric_std.all;
25 use IEEE.numeric_std.all;
26 library techmap;
26 library techmap;
27 use techmap.gencomp.all;
27 use techmap.gencomp.all;
28 library grlib;
28 library grlib;
29 use grlib.amba.all;
29 use grlib.amba.all;
30 use grlib.stdlib.all;
30 use grlib.stdlib.all;
31 use grlib.devices.all;
31 use grlib.devices.all;
32 library lpp;
32 library lpp;
33 use lpp.lpp_amba.all;
33 use lpp.lpp_amba.all;
34 use lpp.apb_devices_list.all;
34 use lpp.apb_devices_list.all;
35 use lpp.lpp_memory.all;
35 use lpp.lpp_memory.all;
36
36 use lpp.iir_filter.all;
37
37
38 entity APB_FIFO is
38 entity APB_FIFO is
39 generic (
39 generic (
40 tech : integer := apa3;
40 tech : integer := apa3;
41 pindex : integer := 0;
41 pindex : integer := 0;
42 paddr : integer := 0;
42 paddr : integer := 0;
43 pmask : integer := 16#fff#;
43 pmask : integer := 16#fff#;
44 pirq : integer := 0;
44 pirq : integer := 0;
45 abits : integer := 8;
45 abits : integer := 8;
46 FifoCnt : integer := 2;
46 FifoCnt : integer := 2;
47 Data_sz : integer := 16;
47 Data_sz : integer := 16;
48 Addr_sz : integer := 9;
48 Addr_sz : integer := 9;
49 Enable_ReUse : std_logic := '0';
49 Enable_ReUse : std_logic := '0';
50 R : integer := 1;
50 Mem_use : integer := use_RAM;
51 W : integer := 1
51 R : integer := 1;
52 );
52 W : integer := 1
53 port (
53 );
54 clk : in std_logic; --! Horloge du composant
54 port (
55 rst : in std_logic; --! Reset general du composant
55 clk : in std_logic; --! Horloge du composant
56 rclk : in std_logic;
56 rst : in std_logic; --! Reset general du composant
57 wclk : in std_logic;
57 rclk : in std_logic;
58 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
58 wclk : in std_logic;
59 REN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction de lecture en m�moire
59 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
60 WEN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction d'�criture en m�moire
60 REN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction de lecture en m�moire
61 Empty : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire vide
61 WEN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction d'�criture en m�moire
62 Full : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire pleine
62 Empty : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire vide
63 RDATA : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en entr�e
63 Full : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire pleine
64 WDATA : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en sortie
64 RDATA : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en entr�e
65 WADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (�criture)
65 WDATA : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en sortie
66 RADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (lecture)
66 WADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (�criture)
67 apbi : in apb_slv_in_type; --! Registre de gestion des entr�es du bus
67 RADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (lecture)
68 apbo : out apb_slv_out_type --! Registre de gestion des sorties du bus
68 apbi : in apb_slv_in_type; --! Registre de gestion des entr�es du bus
69 );
69 apbo : out apb_slv_out_type --! Registre de gestion des sorties du bus
70 end entity;
70 );
71
71 end entity;
72 architecture ar_APB_FIFO of APB_FIFO is
72
73
73 architecture ar_APB_FIFO of APB_FIFO is
74 constant REVISION : integer := 1;
74
75
75 constant REVISION : integer := 1;
76 constant pconfig : apb_config_type := (
76
77 0 => ahb_device_reg (VENDOR_LPP, LPP_FIFO_PID, 0, REVISION, 0),
77 constant pconfig : apb_config_type := (
78 1 => apb_iobar(paddr, pmask));
78 0 => ahb_device_reg (VENDOR_LPP, LPP_FIFO_PID, 0, REVISION, 0),
79
79 1 => apb_iobar(paddr, pmask));
80 type FIFO_ctrlr_Reg is record
80
81 FIFO_Ctrl : std_logic_vector(31 downto 0);
81 type FIFO_ctrlr_Reg is record
82 FIFO_Wdata : std_logic_vector(Data_sz-1 downto 0);
82 FIFO_Ctrl : std_logic_vector(31 downto 0);
83 FIFO_Rdata : std_logic_vector(Data_sz-1 downto 0);
83 FIFO_Wdata : std_logic_vector(Data_sz-1 downto 0);
84 end record;
84 FIFO_Rdata : std_logic_vector(Data_sz-1 downto 0);
85
85 end record;
86 type FIFO_ctrlr_Reg_Vec is array(FifoCnt-1 downto 0) of FIFO_ctrlr_Reg;
86
87 type fifodatabus is array(FifoCnt-1 downto 0) of std_logic_vector(Data_sz-1 downto 0);
87 type FIFO_ctrlr_Reg_Vec is array(FifoCnt-1 downto 0) of FIFO_ctrlr_Reg;
88 type fifoaddressbus is array(FifoCnt-1 downto 0) of std_logic_vector(Addr_sz-1 downto 0);
88 type fifodatabus is array(FifoCnt-1 downto 0) of std_logic_vector(Data_sz-1 downto 0);
89
89 type fifoaddressbus is array(FifoCnt-1 downto 0) of std_logic_vector(Addr_sz-1 downto 0);
90 signal Rec : FIFO_ctrlr_Reg_Vec;
90
91 signal PRdata : std_logic_vector(31 downto 0);
91 signal Rec : FIFO_ctrlr_Reg_Vec;
92 signal FIFO_ID : std_logic_vector(31 downto 0);
92 signal PRdata : std_logic_vector(31 downto 0);
93 signal autoloaded : std_logic_vector(FifoCnt-1 downto 0);
93 signal FIFO_ID : std_logic_vector(31 downto 0);
94 signal sFull : std_logic_vector(FifoCnt-1 downto 0);
94 signal autoloaded : std_logic_vector(FifoCnt-1 downto 0);
95 signal sEmpty : std_logic_vector(FifoCnt-1 downto 0);
95 signal sFull : std_logic_vector(FifoCnt-1 downto 0);
96 signal sEmpty_d : std_logic_vector(FifoCnt-1 downto 0);
96 signal sEmpty : std_logic_vector(FifoCnt-1 downto 0);
97 signal sWen : std_logic_vector(FifoCnt-1 downto 0);
97 signal sEmpty_d : std_logic_vector(FifoCnt-1 downto 0);
98 signal sRen : std_logic_vector(FifoCnt-1 downto 0);
98 signal sWen : std_logic_vector(FifoCnt-1 downto 0);
99 signal sRclk : std_logic;
99 signal sRen : std_logic_vector(FifoCnt-1 downto 0);
100 signal sWclk : std_logic;
100 signal sRclk : std_logic;
101 signal sWen_APB : std_logic_vector(FifoCnt-1 downto 0);
101 signal sWclk : std_logic;
102 signal sRen_APB : std_logic_vector(FifoCnt-1 downto 0);
102 signal sWen_APB : std_logic_vector(FifoCnt-1 downto 0);
103 signal sRDATA : fifodatabus;
103 signal sRen_APB : std_logic_vector(FifoCnt-1 downto 0);
104 signal sWDATA : fifodatabus;
104 signal sRDATA : fifodatabus;
105 signal sWADDR : fifoaddressbus;
105 signal sWDATA : fifodatabus;
106 signal sRADDR : fifoaddressbus;
106 signal sWADDR : fifoaddressbus;
107 signal sReUse : std_logic_vector(FifoCnt-1 downto 0);
107 signal sRADDR : fifoaddressbus;
108 signal sReUse_APB : std_logic_vector(FifoCnt-1 downto 0);
108 signal sReUse : std_logic_vector(FifoCnt-1 downto 0);
109
109 signal sReUse_APB : std_logic_vector(FifoCnt-1 downto 0);
110 signal regDataValid : std_logic_vector(FifoCnt-1 downto 0);
110
111 signal regData : fifodatabus;
111 signal regDataValid : std_logic_vector(FifoCnt-1 downto 0);
112 signal regREN : std_logic_vector(FifoCnt-1 downto 0);
112 signal regData : fifodatabus;
113
113 signal regREN : std_logic_vector(FifoCnt-1 downto 0);
114 type state_t is (idle,Read);
114
115 signal fiforeadfsmst : state_t;
115 type state_t is (idle,Read);
116
116 signal fiforeadfsmst : state_t;
117 begin
117
118
118 begin
119 FIFO_ID(3 downto 0) <= std_logic_vector(to_unsigned(FifoCnt,4));
119
120 FIFO_ID(15 downto 8) <= std_logic_vector(to_unsigned(Data_sz,8));
120 FIFO_ID(3 downto 0) <= std_logic_vector(to_unsigned(FifoCnt,4));
121 FIFO_ID(23 downto 16) <= std_logic_vector(to_unsigned(Addr_sz,8));
121 FIFO_ID(15 downto 8) <= std_logic_vector(to_unsigned(Data_sz,8));
122
122 FIFO_ID(23 downto 16) <= std_logic_vector(to_unsigned(Addr_sz,8));
123
123
124 Writeint : if W /= 0 generate
124
125 FIFO_ID(4) <= '1';
125 Writeint : if W /= 0 generate
126 sWen <= sWen_APB;
126 FIFO_ID(4) <= '1';
127 sReUse <= sReUse_APB;
127 sWen <= sWen_APB;
128 sWclk <= clk;
128 sReUse <= sReUse_APB;
129 Wrapb: for i in 0 to FifoCnt-1 generate
129 sWclk <= clk;
130 sWDATA(i) <= Rec(i).FIFO_Wdata;
130 Wrapb: for i in 0 to FifoCnt-1 generate
131 end generate;
131 sWDATA(i) <= Rec(i).FIFO_Wdata;
132 end generate;
132 end generate;
133
133 end generate;
134 Writeext : if W = 0 generate
134
135 FIFO_ID(4) <= '0';
135 Writeext : if W = 0 generate
136 sWen <= WEN;
136 FIFO_ID(4) <= '0';
137 sReUse <= ReUse;
137 sWen <= WEN;
138 sWclk <= Wclk;
138 sReUse <= ReUse;
139 Wrext: for i in 0 to FifoCnt-1 generate
139 sWclk <= Wclk;
140 sWDATA(i) <= WDATA((Data_sz*(i+1)-1) downto (Data_sz)*i);
140 Wrext: for i in 0 to FifoCnt-1 generate
141 end generate;
141 sWDATA(i) <= WDATA((Data_sz*(i+1)-1) downto (Data_sz)*i);
142 end generate;
142 end generate;
143
143 end generate;
144 Readint : if R /= 0 generate
144
145 FIFO_ID(5) <= '1';
145 Readint : if R /= 0 generate
146 sRen <= sRen_APB;
146 FIFO_ID(5) <= '1';
147 srclk <= clk;
147 sRen <= sRen_APB;
148 Rdapb: for i in 0 to FifoCnt-1 generate
148 srclk <= clk;
149 Rec(i).FIFO_Rdata <= sRDATA(i);
149 Rdapb: for i in 0 to FifoCnt-1 generate
150 end generate;
150 Rec(i).FIFO_Rdata <= sRDATA(i);
151 end generate;
151 end generate;
152
152 end generate;
153 Readext : if R = 0 generate
153
154 FIFO_ID(5) <= '0';
154 Readext : if R = 0 generate
155 sRen <= REN;
155 FIFO_ID(5) <= '0';
156 srclk <= rclk;
156 sRen <= REN;
157 Drext: for i in 0 to FifoCnt-1 generate
157 srclk <= rclk;
158 RDATA((Data_sz*(i+1))-1 downto (Data_sz)*i) <= sRDATA(i);
158 Drext: for i in 0 to FifoCnt-1 generate
159 end generate;
159 RDATA((Data_sz*(i+1))-1 downto (Data_sz)*i) <= sRDATA(i);
160 end generate;
160 end generate;
161
161 end generate;
162 ctrlregs: for i in 0 to FifoCnt-1 generate
162
163 RADDR((Addr_sz*(i+1))-1 downto (Addr_sz)*i) <= sRADDR(i);
163 ctrlregs: for i in 0 to FifoCnt-1 generate
164 WADDR((Addr_sz*(i+1))-1 downto (Addr_sz)*i) <= sWADDR(i);
164 RADDR((Addr_sz*(i+1))-1 downto (Addr_sz)*i) <= sRADDR(i);
165 Rec(i).FIFO_Ctrl(16) <= sFull(i);
165 WADDR((Addr_sz*(i+1))-1 downto (Addr_sz)*i) <= sWADDR(i);
166 sReUse_APB(i) <= Rec(i).FIFO_Ctrl(1);
166 Rec(i).FIFO_Ctrl(16) <= sFull(i);
167 Rec(i).FIFO_Ctrl(3 downto 2) <= "00";
167 sReUse_APB(i) <= Rec(i).FIFO_Ctrl(1);
168 Rec(i).FIFO_Ctrl(19 downto 17) <= "000";
168 Rec(i).FIFO_Ctrl(3 downto 2) <= "00";
169 Rec(i).FIFO_Ctrl(Addr_sz+3 downto 4) <= sRADDR(i);
169 Rec(i).FIFO_Ctrl(19 downto 17) <= "000";
170 Rec(i).FIFO_Ctrl((Addr_sz+19) downto 20) <= sWADDR(i);
170 Rec(i).FIFO_Ctrl(Addr_sz+3 downto 4) <= sRADDR(i);
171 end generate;
171 Rec(i).FIFO_Ctrl((Addr_sz+19) downto 20) <= sWADDR(i);
172
172 end generate;
173 Empty <= sEmpty;
173
174 Full <= sFull;
174 Empty <= sEmpty;
175
175 Full <= sFull;
176 fifos: for i in 0 to FifoCnt-1 generate
176
177 FIFO0 : lpp_fifo
177 fifos: for i in 0 to FifoCnt-1 generate
178 generic map (tech,Enable_ReUse,Data_sz,Addr_sz)
178 FIFO0 : lpp_fifo
179 port map(rst,sReUse(i),srclk,sRen(i),sRDATA(i),sEmpty(i),sRADDR(i),swclk,sWen(i),sWDATA(i),sFull(i),sWADDR(i));
179 generic map (tech,Mem_use,Enable_ReUse,Data_sz,Addr_sz)
180 end generate;
180 port map(rst,sReUse(i),srclk,sRen(i),sRDATA(i),sEmpty(i),sRADDR(i),swclk,sWen(i),sWDATA(i),sFull(i),sWADDR(i));
181
181 end generate;
182 process(rst,clk)
182
183 begin
183 process(rst,clk)
184 if(rst='0')then
184 begin
185 rstloop1: for i in 0 to FifoCnt-1 loop
185 if(rst='0')then
186 Rec(i).FIFO_Wdata <= (others => '0');
186 rstloop1: for i in 0 to FifoCnt-1 loop
187 Rec(i).FIFO_Ctrl(1) <= '0'; -- ReUse
187 Rec(i).FIFO_Wdata <= (others => '0');
188 sWen_APB(i) <= '1';
188 Rec(i).FIFO_Ctrl(1) <= '0'; -- ReUse
189 end loop;
189 sWen_APB(i) <= '1';
190 elsif(clk'event and clk='1')then
190 end loop;
191
191 elsif(clk'event and clk='1')then
192 --APB Write OP
192
193 if (apbi.psel(pindex) and apbi.penable and apbi.pwrite) = '1' then
193 --APB Write OP
194 writelp: for i in 0 to FifoCnt-1 loop
194 if (apbi.psel(pindex) and apbi.penable and apbi.pwrite) = '1' then
195 if(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+1)) then
195 writelp: for i in 0 to FifoCnt-1 loop
196 Rec(i).FIFO_Ctrl(1) <= apbi.pwdata(1);
196 if(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+1)) then
197 elsif(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) then
197 Rec(i).FIFO_Ctrl(1) <= apbi.pwdata(1);
198 Rec(i).FIFO_Wdata <= apbi.pwdata(Data_sz-1 downto 0);
198 elsif(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) then
199 sWen_APB(i) <= '0';
199 Rec(i).FIFO_Wdata <= apbi.pwdata(Data_sz-1 downto 0);
200 end if;
200 sWen_APB(i) <= '0';
201 end loop;
201 end if;
202 else
202 end loop;
203 sWen_APB <= (others =>'1');
203 else
204 end if;
204 sWen_APB <= (others =>'1');
205
205 end if;
206 --APB Read OP
206
207 if (apbi.psel(pindex) and (not apbi.pwrite)) = '1' then
207 --APB Read OP
208 if(apbi.paddr(abits-1 downto 2)="000000") then
208 if (apbi.psel(pindex) and (not apbi.pwrite)) = '1' then
209 PRdata <= FIFO_ID;
209 if(apbi.paddr(abits-1 downto 2)="000000") then
210 else
210 PRdata <= FIFO_ID;
211 readlp: for i in 0 to FifoCnt-1 loop
211 else
212 if(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+1)) then
212 readlp: for i in 0 to FifoCnt-1 loop
213 PRdata <= Rec(i).FIFO_Ctrl;
213 if(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+1)) then
214 elsif(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) then
214 PRdata <= Rec(i).FIFO_Ctrl;
215 PRdata(Data_sz-1 downto 0) <= Rec(i).FIFO_rdata;
215 elsif(conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) then
216 end if;
216 PRdata(Data_sz-1 downto 0) <= Rec(i).FIFO_rdata;
217 end loop;
217 end if;
218 end if;
218 end loop;
219 end if;
219 end if;
220 end if;
220 end if;
221
221 end if;
222 apbo.pconfig <= pconfig;
222
223
223 apbo.pconfig <= pconfig;
224 end process;
224
225 apbo.prdata <= PRdata when apbi.penable = '1';
225 end process;
226
226 apbo.prdata <= PRdata when apbi.penable = '1';
227 process(rst,clk)
227
228 begin
228 process(rst,clk)
229 if(rst='0')then
229 begin
230 fiforeadfsmst <= idle;
230 if(rst='0')then
231 rstloop: for i in 0 to FifoCnt-1 loop
231 fiforeadfsmst <= idle;
232 sRen_APB(i) <= '1';
232 rstloop: for i in 0 to FifoCnt-1 loop
233 autoloaded(i) <= '1';
233 sRen_APB(i) <= '1';
234 Rec(i).FIFO_Ctrl(0) <= sEmpty(i);
234 autoloaded(i) <= '1';
235 end loop;
235 Rec(i).FIFO_Ctrl(0) <= sEmpty(i);
236 elsif clk'event and clk = '1' then
236 end loop;
237 sEmpty_d <= sEmpty;
237 elsif clk'event and clk = '1' then
238 case fiforeadfsmst is
238 sEmpty_d <= sEmpty;
239 when idle =>
239 case fiforeadfsmst is
240 idlelp: for i in 0 to FifoCnt-1 loop
240 when idle =>
241 if((sEmpty_d(i) = '1' and sEmpty(i) = '0' and autoloaded(i) = '1')or((conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) and (apbi.psel(pindex)='1' and apbi.penable='1' and apbi.pwrite='0'))) then
241 idlelp: for i in 0 to FifoCnt-1 loop
242 if(sEmpty_d(i) = '1' and sEmpty(i) = '0') then
242 if((sEmpty_d(i) = '1' and sEmpty(i) = '0' and autoloaded(i) = '1')or((conv_integer(apbi.paddr(abits-1 downto 2))=((2*i)+2)) and (apbi.psel(pindex)='1' and apbi.penable='1' and apbi.pwrite='0'))) then
243 autoloaded(i) <= '0';
243 if(sEmpty_d(i) = '1' and sEmpty(i) = '0') then
244 else
244 autoloaded(i) <= '0';
245 autoloaded(i) <= '1';
245 else
246 end if;
246 autoloaded(i) <= '1';
247 sRen_APB(i) <= '0';
247 end if;
248 fiforeadfsmst <= read;
248 sRen_APB(i) <= '0';
249 Rec(i).FIFO_Ctrl(0) <= sEmpty(i);
249 fiforeadfsmst <= read;
250 else
250 Rec(i).FIFO_Ctrl(0) <= sEmpty(i);
251 sRen_APB(i) <= '1';
251 else
252 end if;
252 sRen_APB(i) <= '1';
253 end loop;
253 end if;
254 when read =>
254 end loop;
255 sRen_APB <= (others => '1');
255 when read =>
256 fiforeadfsmst <= idle;
256 sRen_APB <= (others => '1');
257 when others =>
257 fiforeadfsmst <= idle;
258 fiforeadfsmst <= idle;
258 when others =>
259 end case;
259 fiforeadfsmst <= idle;
260 end if;
260 end case;
261 end process;
261 end if;
262
262 end process;
263
263 end ar_APB_FIFO; No newline at end of file
264 end ar_APB_FIFO;
@@ -1,64 +1,66
1 ------------------------------------------------------------------------------
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2012, Laboratory of Plasmas Physic - CNRS
3 -- Copyright (C) 2009 - 2012, Laboratory of Plasmas Physic - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ------------------------------------------------------------------------------
18 ------------------------------------------------------------------------------
19 -- Author : Martin Morlot
19 -- Author : Martin Morlot
20 -- Mail : martin.morlot@lpp.polytechnique.fr
20 -- Mail : martin.morlot@lpp.polytechnique.fr
21 ------------------------------------------------------------------------------
21 ------------------------------------------------------------------------------
22 library IEEE;
22 library IEEE;
23 use IEEE.std_logic_1164.all;
23 use IEEE.std_logic_1164.all;
24 use IEEE.numeric_std.all;
24 use IEEE.numeric_std.all;
25 library lpp;
25 library lpp;
26 use lpp.lpp_memory.all;
26 use lpp.lpp_memory.all;
27 library techmap;
27 use lpp.iir_filter.all;
28 use techmap.gencomp.all;
28 library techmap;
29
29 use techmap.gencomp.all;
30 entity lppFIFOxN is
30
31 generic(
31 entity lppFIFOxN is
32 tech : integer := 0;
32 generic(
33 Data_sz : integer range 1 to 32 := 8;
33 tech : integer := 0;
34 Addr_sz : integer range 1 to 32 := 8;
34 Mem_use : integer := use_RAM;
35 FifoCnt : integer := 1;
35 Data_sz : integer range 1 to 32 := 8;
36 Enable_ReUse : std_logic := '0'
36 Addr_sz : integer range 1 to 32 := 8;
37 );
37 FifoCnt : integer := 1;
38 port(
38 Enable_ReUse : std_logic := '0'
39 rst : in std_logic;
39 );
40 wclk : in std_logic;
40 port(
41 rclk : in std_logic;
41 rst : in std_logic;
42 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
42 wclk : in std_logic;
43 wen : in std_logic_vector(FifoCnt-1 downto 0);
43 rclk : in std_logic;
44 ren : in std_logic_vector(FifoCnt-1 downto 0);
44 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
45 wdata : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
45 wen : in std_logic_vector(FifoCnt-1 downto 0);
46 rdata : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
46 ren : in std_logic_vector(FifoCnt-1 downto 0);
47 full : out std_logic_vector(FifoCnt-1 downto 0);
47 wdata : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
48 empty : out std_logic_vector(FifoCnt-1 downto 0)
48 rdata : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
49 );
49 full : out std_logic_vector(FifoCnt-1 downto 0);
50 end entity;
50 empty : out std_logic_vector(FifoCnt-1 downto 0)
51
51 );
52
52 end entity;
53 architecture ar_lppFIFOxN of lppFIFOxN is
53
54
54
55 begin
55 architecture ar_lppFIFOxN of lppFIFOxN is
56
56
57 fifos: for i in 0 to FifoCnt-1 generate
57 begin
58 FIFO0 : lpp_fifo
58
59 generic map (tech,Enable_ReUse,Data_sz,Addr_sz)
59 fifos: for i in 0 to FifoCnt-1 generate
60 port map(rst,ReUse(i),rclk,ren(i),rdata((i+1)*Data_sz-1 downto i*Data_sz),empty(i),open,wclk,wen(i),wdata((i+1)*Data_sz-1 downto i*Data_sz),full(i),open);
60 FIFO0 : lpp_fifo
61 end generate;
61 generic map (tech,Mem_use,Enable_ReUse,Data_sz,Addr_sz)
62
62 port map(rst,ReUse(i),rclk,ren(i),rdata((i+1)*Data_sz-1 downto i*Data_sz),empty(i),open,wclk,wen(i),wdata((i+1)*Data_sz-1 downto i*Data_sz),full(i),open);
63 end architecture;
63 end generate;
64
64
65 end architecture;
66
@@ -31,6 +31,7 use techmap.gencomp.all;
31 entity lpp_fifo is
31 entity lpp_fifo is
32 generic(
32 generic(
33 tech : integer := 0;
33 tech : integer := 0;
34 Mem_use : integer := use_RAM;
34 Enable_ReUse : std_logic := '0';
35 Enable_ReUse : std_logic := '0';
35 DataSz : integer range 1 to 32 := 8;
36 DataSz : integer range 1 to 32 := 8;
36 abits : integer range 2 to 12 := 8
37 abits : integer range 2 to 12 := 8
@@ -75,12 +76,17 begin
75 -- /!\ syncram_2p Write et Read actif a l'�tat haut /!\
76 -- /!\ syncram_2p Write et Read actif a l'�tat haut /!\
76 -- A l'inverse de RAM_CEL !!!
77 -- A l'inverse de RAM_CEL !!!
77 --==================================================================================
78 --==================================================================================
78 SRAM : syncram_2p
79 memRAM : IF Mem_use = use_RAM GENERATE
79 generic map(tech,abits,DataSz)
80 SRAM : syncram_2p
80 port map(RCLK,sRE,Raddr_vect,rdata,WCLK,sWE,Waddr_vect,wdata);
81 generic map(tech,abits,DataSz)
82 port map(RCLK,sRE,Raddr_vect,rdata,WCLK,sWE,Waddr_vect,wdata);
83 END GENERATE;
81 --==================================================================================
84 --==================================================================================
82 --RAM0: entity work.RAM_CEL
85 memCEL : IF Mem_use = use_CEL GENERATE
83 -- port map(wdata, rdata, sWEN, sREN, Waddr_vect, Raddr_vect, WCLK, rstn);
86 CRAM : RAM_CEL
87 generic map(DataSz,abits)
88 port map(wdata, rdata, sWEN, sREN, Waddr_vect, Raddr_vect, WCLK, rstn);
89 END GENERATE;
84 --==================================================================================
90 --==================================================================================
85
91
86 --=============================
92 --=============================
@@ -1,177 +1,163
1 ------------------------------------------------------------------------------
1 ------------------------------------------------------------------------------
2 -- This file is a part of the LPP VHDL IP LIBRARY
2 -- This file is a part of the LPP VHDL IP LIBRARY
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
3 -- Copyright (C) 2009 - 2010, Laboratory of Plasmas Physic - CNRS
4 --
4 --
5 -- This program is free software; you can redistribute it and/or modify
5 -- This program is free software; you can redistribute it and/or modify
6 -- it under the terms of the GNU General Public License as published by
6 -- it under the terms of the GNU General Public License as published by
7 -- the Free Software Foundation; either version 3 of the License, or
7 -- the Free Software Foundation; either version 3 of the License, or
8 -- (at your option) any later version.
8 -- (at your option) any later version.
9 --
9 --
10 -- This program is distributed in the hope that it will be useful,
10 -- This program is distributed in the hope that it will be useful,
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
11 -- but WITHOUT ANY WARRANTY; without even the implied warranty of
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 -- GNU General Public License for more details.
13 -- GNU General Public License for more details.
14 --
14 --
15 -- You should have received a copy of the GNU General Public License
15 -- You should have received a copy of the GNU General Public License
16 -- along with this program; if not, write to the Free Software
16 -- along with this program; if not, write to the Free Software
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 -- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 ------------------------------------------------------------------------------
18 ------------------------------------------------------------------------------
19 -- Author : Martin Morlot
19 -- Author : Martin Morlot
20 -- Mail : martin.morlot@lpp.polytechnique.fr
20 -- Mail : martin.morlot@lpp.polytechnique.fr
21 ------------------------------------------------------------------------------
21 ------------------------------------------------------------------------------
22 library ieee;
22 library ieee;
23 use ieee.std_logic_1164.all;
23 use ieee.std_logic_1164.all;
24 library grlib;
24 library grlib;
25 use grlib.amba.all;
25 use grlib.amba.all;
26 use std.textio.all;
26 use std.textio.all;
27 library lpp;
27 library lpp;
28 use lpp.lpp_amba.all;
28 use lpp.lpp_amba.all;
29 library gaisler;
29 use lpp.iir_filter.all;
30 use gaisler.misc.all;
30 library gaisler;
31 use gaisler.memctrl.all;
31 use gaisler.misc.all;
32 library techmap;
32 use gaisler.memctrl.all;
33 use techmap.gencomp.all;
33 library techmap;
34
34 use techmap.gencomp.all;
35 --! Package contenant tous les programmes qui forment le composant int�gr� dans le l�on
35
36
36 --! Package contenant tous les programmes qui forment le composant int�gr� dans le l�on
37 package lpp_memory is
37
38
38 package lpp_memory is
39 component APB_FIFO is
39
40 generic (
40 component APB_FIFO is
41 tech : integer := apa3;
41 generic (
42 pindex : integer := 0;
42 tech : integer := apa3;
43 paddr : integer := 0;
43 pindex : integer := 0;
44 pmask : integer := 16#fff#;
44 paddr : integer := 0;
45 pirq : integer := 0;
45 pmask : integer := 16#fff#;
46 abits : integer := 8;
46 pirq : integer := 0;
47 FifoCnt : integer := 2;
47 abits : integer := 8;
48 Data_sz : integer := 16;
48 FifoCnt : integer := 2;
49 Addr_sz : integer := 9;
49 Data_sz : integer := 16;
50 Enable_ReUse : std_logic := '0';
50 Addr_sz : integer := 9;
51 R : integer := 1;
51 Enable_ReUse : std_logic := '0';
52 W : integer := 1
52 Mem_use : integer := use_RAM;
53 );
53 R : integer := 1;
54 port (
54 W : integer := 1
55 clk : in std_logic; --! Horloge du composant
55 );
56 rst : in std_logic; --! Reset general du composant
56 port (
57 rclk : in std_logic;
57 clk : in std_logic; --! Horloge du composant
58 wclk : in std_logic;
58 rst : in std_logic; --! Reset general du composant
59 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
59 rclk : in std_logic;
60 REN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction de lecture en m�moire
60 wclk : in std_logic;
61 WEN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction d'�criture en m�moire
61 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
62 Empty : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire vide
62 REN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction de lecture en m�moire
63 Full : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire pleine
63 WEN : in std_logic_vector(FifoCnt-1 downto 0); --! Instruction d'�criture en m�moire
64 RDATA : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en entr�e
64 Empty : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire vide
65 WDATA : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en sortie
65 Full : out std_logic_vector(FifoCnt-1 downto 0); --! Flag, M�moire pleine
66 WADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (�criture)
66 RDATA : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en entr�e
67 RADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (lecture)
67 WDATA : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0); --! Registre de donn�es en sortie
68 apbi : in apb_slv_in_type; --! Registre de gestion des entr�es du bus
68 WADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (�criture)
69 apbo : out apb_slv_out_type --! Registre de gestion des sorties du bus
69 RADDR : out std_logic_vector((FifoCnt*Addr_sz)-1 downto 0); --! Registre d'addresse (lecture)
70 );
70 apbi : in apb_slv_in_type; --! Registre de gestion des entr�es du bus
71 end component;
71 apbo : out apb_slv_out_type --! Registre de gestion des sorties du bus
72
72 );
73
73 end component;
74 component lpp_fifo is
74
75 generic(
75
76 tech : integer := 0;
76 component lpp_fifo is
77 Enable_ReUse : std_logic := '0';
77 generic(
78 DataSz : integer range 1 to 32 := 8;
78 tech : integer := 0;
79 abits : integer range 2 to 12 := 8
79 Mem_use : integer := use_RAM;
80 );
80 Enable_ReUse : std_logic := '0';
81 port(
81 DataSz : integer range 1 to 32 := 8;
82 rstn : in std_logic;
82 abits : integer range 2 to 12 := 8
83 ReUse : in std_logic; --27/01/12
83 );
84 rclk : in std_logic;
84 port(
85 ren : in std_logic;
85 rstn : in std_logic;
86 rdata : out std_logic_vector(DataSz-1 downto 0);
86 ReUse : in std_logic; --27/01/12
87 empty : out std_logic;
87 rclk : in std_logic;
88 raddr : out std_logic_vector(abits-1 downto 0);
88 ren : in std_logic;
89 wclk : in std_logic;
89 rdata : out std_logic_vector(DataSz-1 downto 0);
90 wen : in std_logic;
90 empty : out std_logic;
91 wdata : in std_logic_vector(DataSz-1 downto 0);
91 raddr : out std_logic_vector(abits-1 downto 0);
92 full : out std_logic;
92 wclk : in std_logic;
93 waddr : out std_logic_vector(abits-1 downto 0)
93 wen : in std_logic;
94 );
94 wdata : in std_logic_vector(DataSz-1 downto 0);
95 end component;
95 full : out std_logic;
96
96 waddr : out std_logic_vector(abits-1 downto 0)
97
97 );
98 component lppFIFOxN is
98 end component;
99 generic(
99
100 tech : integer := 0;
100
101 Data_sz : integer range 1 to 32 := 8;
101 component lppFIFOxN is
102 Addr_sz : integer range 1 to 32 := 8;
102 generic(
103 FifoCnt : integer := 1;
103 tech : integer := 0;
104 Enable_ReUse : std_logic := '0'
104 Mem_use : integer := use_RAM;
105 );
105 Data_sz : integer range 1 to 32 := 8;
106 port(
106 Addr_sz : integer range 1 to 32 := 8;
107 rst : in std_logic;
107 FifoCnt : integer := 1;
108 wclk : in std_logic;
108 Enable_ReUse : std_logic := '0'
109 rclk : in std_logic;
109 );
110 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
110 port(
111 wen : in std_logic_vector(FifoCnt-1 downto 0);
111 rst : in std_logic;
112 ren : in std_logic_vector(FifoCnt-1 downto 0);
112 wclk : in std_logic;
113 wdata : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
113 rclk : in std_logic;
114 rdata : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
114 ReUse : in std_logic_vector(FifoCnt-1 downto 0);
115 full : out std_logic_vector(FifoCnt-1 downto 0);
115 wen : in std_logic_vector(FifoCnt-1 downto 0);
116 empty : out std_logic_vector(FifoCnt-1 downto 0)
116 ren : in std_logic_vector(FifoCnt-1 downto 0);
117 );
117 wdata : in std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
118 end component;
118 rdata : out std_logic_vector((FifoCnt*Data_sz)-1 downto 0);
119
119 full : out std_logic_vector(FifoCnt-1 downto 0);
120 component lppFIFOx5 is
120 empty : out std_logic_vector(FifoCnt-1 downto 0)
121 generic(
121 );
122 tech : integer := 0;
122 end component;
123 Data_sz : integer range 1 to 32 := 16;
123
124 Addr_sz : integer range 2 to 12 := 8;
124 component FillFifo is
125 Enable_ReUse : std_logic := '0'
125 generic(
126 );
126 Data_sz : integer range 1 to 32 := 16;
127 port(
127 Fifo_cnt : integer range 1 to 8 := 5
128 rst : in std_logic;
128 );
129 wclk : in std_logic;
129 port(
130 rclk : in std_logic;
130 clk : in std_logic;
131 ReUse : in std_logic_vector(4 downto 0);
131 raz : in std_logic;
132 wen : in std_logic_vector(4 downto 0);
132 write : out std_logic_vector(Fifo_cnt-1 downto 0);
133 ren : in std_logic_vector(4 downto 0);
133 reuse : out std_logic_vector(Fifo_cnt-1 downto 0);
134 wdata : in std_logic_vector((5*Data_sz)-1 downto 0);
134 data : out std_logic_vector(Fifo_cnt*Data_sz-1 downto 0)
135 rdata : out std_logic_vector((5*Data_sz)-1 downto 0);
135 );
136 full : out std_logic_vector(4 downto 0);
136 end component;
137 empty : out std_logic_vector(4 downto 0)
137
138 );
138 component ssram_plugin is
139 end component;
139 generic (tech : integer := 0);
140
140 port
141 component Bridge is
141 (
142 port(
142 clk : in std_logic;
143 clk : in std_logic;
143 mem_ctrlr_o : in memory_out_type;
144 raz : in std_logic;
144 SSRAM_CLK : out std_logic;
145 EmptyUp : in std_logic;
145 nBWa : out std_logic;
146 FullDwn : in std_logic;
146 nBWb : out std_logic;
147 WriteDwn : out std_logic;
147 nBWc : out std_logic;
148 ReadUp : out std_logic
148 nBWd : out std_logic;
149 );
149 nBWE : out std_logic;
150 end component;
150 nADSC : out std_logic;
151
151 nADSP : out std_logic;
152 component ssram_plugin is
152 nADV : out std_logic;
153 generic (tech : integer := 0);
153 nGW : out std_logic;
154 port
154 nCE1 : out std_logic;
155 (
155 CE2 : out std_logic;
156 clk : in std_logic;
156 nCE3 : out std_logic;
157 mem_ctrlr_o : in memory_out_type;
157 nOE : out std_logic;
158 SSRAM_CLK : out std_logic;
158 MODE : out std_logic;
159 nBWa : out std_logic;
159 ZZ : out std_logic
160 nBWb : out std_logic;
160 );
161 nBWc : out std_logic;
161 end component;
162 nBWd : out std_logic;
162
163 nBWE : out std_logic;
163 end;
164 nADSC : out std_logic;
165 nADSP : out std_logic;
166 nADV : out std_logic;
167 nGW : out std_logic;
168 nCE1 : out std_logic;
169 CE2 : out std_logic;
170 nCE3 : out std_logic;
171 nOE : out std_logic;
172 MODE : out std_logic;
173 ZZ : out std_logic
174 );
175 end component;
176
177 end;
@@ -11,7 +11,8 USE techmap.gencomp.ALL;
11
11
12 ENTITY lpp_top_acq IS
12 ENTITY lpp_top_acq IS
13 GENERIC(
13 GENERIC(
14 tech : INTEGER := 0
14 tech : INTEGER := 0;
15 Mem_use : integer := use_RAM
15 );
16 );
16 PORT (
17 PORT (
17 -- ADS7886
18 -- ADS7886
@@ -143,7 +144,7 BEGIN
143 IIR_CEL_CTRLR_v2_1 : IIR_CEL_CTRLR_v2
144 IIR_CEL_CTRLR_v2_1 : IIR_CEL_CTRLR_v2
144 GENERIC MAP (
145 GENERIC MAP (
145 tech => 0,
146 tech => 0,
146 Mem_use => use_CEL, -- use_RAM
147 Mem_use => Mem_use,
147 Sample_SZ => 18,
148 Sample_SZ => 18,
148 Coef_SZ => Coef_SZ,
149 Coef_SZ => Coef_SZ,
149 Coef_Nb => 25, -- TODO
150 Coef_Nb => 25, -- TODO
@@ -16,7 +16,8 PACKAGE lpp_top_lfr_pkg IS
16
16
17 COMPONENT lpp_top_acq
17 COMPONENT lpp_top_acq
18 GENERIC(
18 GENERIC(
19 tech : INTEGER := 0
19 tech : INTEGER := 0;
20 Mem_use : integer := use_RAM
20 );
21 );
21 PORT (
22 PORT (
22 -- ADS7886
23 -- ADS7886
1 NO CONTENT: file was removed
NO CONTENT: file was removed
1 NO CONTENT: file was removed
NO CONTENT: file was removed
General Comments 0
You need to be logged in to leave comments. Login now