1  | library ieee;
  | 
2  | 
  | 
3  | use ieee.std_logic_1164.all;
  | 
4  | use ieee.std_logic_unsigned.all;
  | 
5  | use ieee.std_logic_arith.all;
  | 
6  | 
  | 
7  | use work.zlm2k4_pkg.all;
  | 
8  | 
  | 
9  | entity xj2bin32 is
  | 
10  |   generic(
  | 
11  |     delay:  time:=  1.0 ns);    -- Generic delay
  | 
12  |   port (
  | 
13  |     HCLK :  in std_logic;      -- High Clock,  240 MHz
  | 
14  |     RESET :  in std_logic;      -- System Reset, high active, asynchron
  | 
15  |     --
  | 
16  |     Z :    in slv32;        -- Measurement interface
  | 
17  | --    MASK :  in slv6;        -- Mask
  | 
18  |     --
  | 
19  |     X :    out slv32);
  | 
20  | end xj2bin32;
  | 
21  | 
  | 
22  | 
  | 
23  | architecture rtl of xj2bin32 is
  | 
24  |   --
  | 
25  |   -- component declaration
  | 
26  |   --
  | 
27  |   component udc26
  | 
28  |     port (
  | 
29  |     Q: OUT std_logic_VECTOR(25 downto 0);
  | 
30  |     CLK: IN std_logic;
  | 
31  |     UP: IN std_logic;
  | 
32  |     CE: IN std_logic;
  | 
33  |     ACLR: IN std_logic);
  | 
34  |   end component;
  | 
35  | 
  | 
36  |   --
  | 
37  |   -- Signal declaration
  | 
38  |   --
  | 
39  |   signal Z_Q :    std_logic_vector(Z'range);
  | 
40  |   signal Z_QQ :    std_logic_vector(Z'range);
  | 
41  |   signal Z_QQQ :    std_logic_vector(Z'range);
  | 
42  |   signal Q :      slv26;            -- Output 26-bit-up/down counter
  | 
43  |   signal O :      slv32;            -- Counter + decoder
  | 
44  |   signal XLOW :    slv6;            -- Decoder output
  | 
45  |   signal XZOUT:    slv32;
  | 
46  | 
  | 
47  |   signal CE :     std_logic;          -- Count Enable
  | 
48  |   signal UP :       std_logic;          -- 1:UP, 0:DOWN
  | 
49  |   
  | 
50  |   signal C1 :      slv3;
  | 
51  |   signal C2 :      slv3;
  | 
52  | 
  | 
53  | begin
  | 
54  | 
  | 
55  | 
  | 
56  |   PSYNCZ:process(RESET,HCLK)
  | 
57  |   begin
  | 
58  |     if RESET = '1' then
  | 
59  |       Z_Q <=    (Z'range => '0') after delay;
  | 
60  |       Z_QQ <=    (Z'range => '0') after delay;
  | 
61  |       Z_QQQ <=  (Z'range => '0') after delay;
  | 
62  |     elsif rising_edge(HCLK) then
  | 
63  |       Z_Q <=    Z after delay;
  | 
64  |       Z_QQ <=    Z_Q after delay;
  | 
65  |       Z_QQQ <=  Z_QQ after delay;
  | 
66  |     end if;
  | 
67  |   end process PSYNCZ;
  | 
68  |   
  | 
69  |   
  | 
70  |   C1 <= Z_Q(0)  & Z_QQ(0)  & Z_Q(16) after delay;
  | 
71  |   C2 <= Z_Q(16) & Z_QQ(16) & Z_Q(0) after delay;
  | 
72  |   
  | 
73  |   P100:process(RESET,HCLK)
  | 
74  |   begin
  | 
75  |     if RESET = '1' then
  | 
76  |       CE <=  '0' after delay;
  | 
77  |       UP <=  '0' after delay;
  | 
78  |     elsif rising_edge(HCLK) then
  | 
79  |       if    C1 = "100" then  
  | 
80  |         UP <=  '1' after delay;
  | 
81  |         CE <=  '1' after delay;
  | 
82  |       elsif C2 = "101" then
  | 
83  |         UP <=  '1' after delay;
  | 
84  |         CE <=  '0' after delay;
  | 
85  |       elsif C1 = "011" then
  | 
86  |         UP <=  '1' after delay;
  | 
87  |         CE <=  '0' after delay;
  | 
88  |       elsif C2 = "010" then
  | 
89  |         UP <=  '1' after delay;
  | 
90  |         CE <=  '0' after delay;
  | 
91  |       elsif C1 = "010" then
  | 
92  |         UP <=  '0' after delay;
  | 
93  |         CE <=  '1' after delay;
  | 
94  |       elsif C2 = "100" then
  | 
95  |         UP <=  '0' after delay;
  | 
96  |         CE <=  '0' after delay;
  | 
97  |       elsif C1 = "101" then
  | 
98  |         UP <=  '0' after delay;
  | 
99  |         CE <=  '0' after delay;
  | 
100  |       elsif C2 = "011" then
  | 
101  |         UP <=  '0' after delay;
  | 
102  |         CE <=  '0' after delay;
  | 
103  |       else
  | 
104  |         CE <=  '0' after delay;
  | 
105  |       end if;
  | 
106  |     end if;
  | 
107  |   end process P100;
  | 
108  | 
  | 
109  |   --
  | 
110  |   -- 26 up/down counter
  | 
111  |   --
  | 
112  |   U1: udc26
  | 
113  |     port map (
  | 
114  |       Q =>   Q,
  | 
115  |       CLK =>  HCLK,
  | 
116  |       UP =>  UP,
  | 
117  |       CE =>  CE,
  | 
118  |       ACLR => RESET);
  | 
119  | 
  | 
120  | XLOW <=  convert4(Z_QQQ);
  | 
121  | --  XZOUT(0) <= Z_QQQ(0);
  | 
122  | --  XZOUT(1) <= Z_QQQ(1);
  | 
123  | --  XZOUT(2) <= Z_QQQ(2);
  | 
124  | --  XZOUT(3) <= Z_QQQ(3);
  | 
125  | --  XZOUT(4) <= Z_QQQ(4);
  | 
126  | --  XZOUT(5) <= Z_QQQ(5);
  | 
127  | --  XZOUT(6) <= Z_QQQ(6);
  | 
128  | --  XZOUT(7) <= Z_QQQ(7);
  | 
129  | --  XZOUT(8) <= Z_QQQ(8);
  | 
130  | --  XZOUT(9) <= Z_QQQ(9);
  | 
131  | --  XZOUT(10) <= Z_QQQ(10);
  | 
132  | --  XZOUT(11) <= Z_QQQ(11);
  | 
133  | --  XZOUT(12) <= Z_QQQ(12);
  | 
134  | --  XZOUT(13) <= Z_QQQ(13);
  | 
135  | --  XZOUT(14) <= Z_QQQ(14);
  | 
136  | --  XZOUT(15) <= Z_QQQ(15);
  | 
137  | --  XZOUT(16) <= Z_QQQ(16);
  | 
138  | --  XZOUT(17) <= Z_QQQ(17);
  | 
139  | --  XZOUT(18) <= Z_QQQ(18);
  | 
140  | --  XZOUT(19) <= Z_QQQ(19);
  | 
141  | --  XZOUT(20) <= Z_QQQ(20);
  | 
142  | --  XZOUT(21) <= Z_QQQ(21);
  | 
143  | --  XZOUT(22) <= Z_QQQ(22);
  | 
144  | --  XZOUT(23) <= Z_QQQ(23);
  | 
145  | --  XZOUT(24) <= Z_QQQ(24);
  | 
146  | --  XZOUT(25) <= Z_QQQ(25);
  | 
147  | --  XZOUT(26) <= Z_QQQ(26);
  | 
148  | --  XZOUT(27) <= Z_QQQ(27);
  | 
149  | --  XZOUT(28) <= Z_QQQ(28);
  | 
150  | --  XZOUT(29) <= Z_QQQ(29);
  | 
151  | --  XZOUT(30) <= Z_QQQ(30);
  | 
152  | --  XZOUT(31) <= Z_QQQ(31);
  | 
153  | 
  | 
154  | --  XZOUT <= bitclear(Z_QQQ);
  | 
155  | --  XLOW(0) := '0';
  | 
156  | --  XLOW(1) := '0';
  | 
157  | --  XLOW(2) := '0';
  | 
158  | --  XLOW(3) := '0';
  | 
159  | --  XLOW(4) := '0';
  | 
160  | --  XLOW(5) := '0';
  | 
161  | 
  | 
162  | 
  | 
163  | 
  | 
164  |   POUT:process(RESET,HCLK)
  | 
165  |     variable O  : slv32;            -- Counter + decoder
  | 
166  |     variable T  : slv6;
  | 
167  |   begin
  | 
168  |     if RESET = '1' then
  | 
169  |       X <=  (X'range =>  '0') after delay;
  | 
170  |     elsif rising_edge(HCLK) then
  | 
171  | --      O :=  Q & XLOW;
  | 
172  | --      T :=  MASK and O(5 downto 0);
  | 
173  | --      X <=  O(31 downto 6) & T after delay;
  | 
174  | --      X <=  Q & XLOW after delay;
  | 
175  | --      X <= XZOUT after delay;
  | 
176  | 
  | 
177  |       X <= Q & XLOW after delay;
  | 
178  | 
  | 
179  | 
  | 
180  | 
  | 
181  |     end if;
  | 
182  |   end process POUT;
  | 
183  | 
  | 
184  | 
  | 
185  | end rtl;
  |