source: trunk/IPs/systemC/processor/Morpheo/Documentation/doc/document-morpheo-vhdl_generation/tex/document-morpheo-vhdl_generation-fr-06_testbench.tex @ 100

Last change on this file since 100 was 100, checked in by rosiere, 15 years ago

1) Bug fix (Operation, Instruction)
2) Modif Return Address Stack
3) Add Soft Test
4) Add Soc Test

  • Property svn:keywords set to Id
File size: 25.6 KB
Line 
1%------------------------------------------------------------------------------
2% $Id: document-morpheo-vhdl_generation-fr-06_testbench.tex 100 2009-01-08 13:06:27Z rosiere $
3%------------------------------------------------------------------------------
4
5\Section {Test du VHDL}\label{testbench}
6
7Lors d'une simulation systemC, \cpu va générer des fichiers de tests pour le modèle VHDL de chaque composant interne.
8Ces tests sont tous écrits de la même façon. Soit l'interface X et le signal Y :
9\begin{itemize}
10\item Une variable {\it counter} indique le numéro de cycle courant. Elle est initialisée à 0. Elle est incrémentée à chaque cycle.
11\item Le composant est instancé avec des signaux internes de même nom.
12\item Pour chaque cycle, on affecte à chaque entrée la valeur obtenue lors de la simulation systemC.
13\item Pour chaque sortie, on définit un signal dont le nom est {\it out\_X\_Y\_test}. Ces signaux sont affectés à la valeur obtenue des sorties lors de la simulation systemC.
14\item Le signal {\it interface\_X\_test\_ok} est égal à 1 si chaque sortie calculée par la simulation VHDL est égal à la sortie attendue (calculé par la simulation systemC).
15\item Le signal {\it interface\_X\_test\_transaction} est à 1 si tous les signaux de validité et d'acquittement sont à 1.
16\item Le signal {\it interface\_X\_test\_tmp} est à 1 si la simulation systemC indique qu'il y a une transaction et que la simulation vhdl indique également une transaction et que toutes les sorties sont bien les sorties obtenues. Si la simulation systemC n'indique pas de transaction, on vérifie que c'est également le cas pour la simulation VHDL.
17\item Le signal {\it interface\_X\_test} est égal au signal {\it interface\_X\_test\_tmp} quand il n'y a pas de reset. sinon il est positionné à 1.
18\item Le signal {\it test} est un et logique entre tous tous les signaux {\it interface\_X\_test}.
19\item La simulation VHDL ce termine si le signal {\it test} vaut 0 (dans ce cas, le test est un échec), ou que le registre {\it counter} vaut le nombre de cycles requis par la simulation systemC (dans ce cas, le test est un succès).
20\end{itemize}
21
22Nous pouvons remarquer que :
23\begin{itemize}
24\item Nous vérifions la compatibilité au cycle des transactions entre le modèle systemC et le modèle VHDL.
25\item Nous vérifions la compatibilité au bit près des données échangées lors qu'il y a une transaction sur une interface.
26\item Nous ne vérifions pas la compatibilité au bit près des données présentes sur une interface qui ne fait pas de transaction lors d'un cycle.
27\end{itemize}
28
29\lstparam{VHDL}
30\begin{lstlisting}[caption={Execute\_queue\_Testbench.vhdl}]
31library ieee;
32  use ieee.numeric_bit.all;       
33  use ieee.numeric_std.all;       
34  use ieee.std_logic_1164.all;   
35  use ieee.std_logic_arith.all;   
36  use ieee.std_logic_misc.all;   
37--use ieee.std_logic_signed.all; 
38  use ieee.std_logic_unsigned.all;
39--use ieee.std_logic_textio.all; 
40
41library work;
42use work.Execute_queue_0_Pack.all;
43
44entity Execute_queue_0_Testbench is
45end Execute_queue_0_Testbench;
46
47architecture behavioural of Execute_queue_0_Testbench is
48
49  signal  in_CLOCK                              : std_logic := '0';
50  signal  in_NRESET                             : std_logic := '0';
51  signal  in_EXECUTE_QUEUE_IN_VAL               : std_logic;
52  signal out_EXECUTE_QUEUE_IN_ACK               : std_logic;
53  signal out_EXECUTE_QUEUE_IN_ACK_test          : std_logic;
54  signal  in_EXECUTE_QUEUE_IN_PACKET_ID         : std_logic_vector(3 downto 0);
55  signal  in_EXECUTE_QUEUE_IN_FLAGS             : std_logic_vector(1 downto 0);
56  signal  in_EXECUTE_QUEUE_IN_EXCEPTION         : std_logic_vector(4 downto 0);
57  signal  in_EXECUTE_QUEUE_IN_NO_SEQUENCE       : std_logic;
58  signal  in_EXECUTE_QUEUE_IN_ADDRESS           : std_logic_vector(31 downto 0);
59  signal  in_EXECUTE_QUEUE_IN_DATA              : std_logic_vector(31 downto 0);
60  signal out_EXECUTE_QUEUE_OUT_VAL              : std_logic;
61  signal out_EXECUTE_QUEUE_OUT_VAL_test         : std_logic;
62  signal  in_EXECUTE_QUEUE_OUT_ACK              : std_logic;
63  signal out_EXECUTE_QUEUE_OUT_PACKET_ID        : std_logic_vector(3 downto 0);
64  signal out_EXECUTE_QUEUE_OUT_PACKET_ID_test   : std_logic_vector(3 downto 0);
65  signal out_EXECUTE_QUEUE_OUT_FLAGS            : std_logic_vector(1 downto 0);
66  signal out_EXECUTE_QUEUE_OUT_FLAGS_test       : std_logic_vector(1 downto 0);
67  signal out_EXECUTE_QUEUE_OUT_EXCEPTION        : std_logic_vector(4 downto 0);
68  signal out_EXECUTE_QUEUE_OUT_EXCEPTION_test   : std_logic_vector(4 downto 0);
69  signal out_EXECUTE_QUEUE_OUT_NO_SEQUENCE      : std_logic;
70  signal out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test : std_logic;
71  signal out_EXECUTE_QUEUE_OUT_ADDRESS          : std_logic_vector(31 downto 0);
72  signal out_EXECUTE_QUEUE_OUT_ADDRESS_test     : std_logic_vector(31 downto 0);
73  signal out_EXECUTE_QUEUE_OUT_DATA             : std_logic_vector(31 downto 0);
74  signal out_EXECUTE_QUEUE_OUT_DATA_test        : std_logic_vector(31 downto 0);
75
76  signal counter                                      : natural;
77  signal test                                         : std_logic;
78  signal interface_test                               : std_logic;
79  signal interface_test_ok                            : std_logic;
80  signal interface_execute_queue_in_test              : std_logic;
81  signal interface_execute_queue_in_test_ok           : std_logic;
82  signal interface_execute_queue_in_test_transaction  : std_logic;
83  signal interface_execute_queue_in_test_tmp          : std_logic;
84  signal interface_execute_queue_out_test             : std_logic;
85  signal interface_execute_queue_out_test_ok          : std_logic;
86  signal interface_execute_queue_out_test_transaction : std_logic;
87  signal interface_execute_queue_out_test_tmp         : std_logic;
88
89begin
90 
91  ------------------------------------------------------
92  -- Component - Intanciation
93  ------------------------------------------------------
94 
95  instance_Execute_queue_0 : Execute_queue_0
96  port map (
97      in_CLOCK                         =>  in_CLOCK
98    , in_NRESET                        =>  in_NRESET
99    , in_EXECUTE_QUEUE_IN_VAL          =>  in_EXECUTE_QUEUE_IN_VAL
100    ,out_EXECUTE_QUEUE_IN_ACK          => out_EXECUTE_QUEUE_IN_ACK
101    , in_EXECUTE_QUEUE_IN_PACKET_ID    =>  in_EXECUTE_QUEUE_IN_PACKET_ID
102    , in_EXECUTE_QUEUE_IN_FLAGS        =>  in_EXECUTE_QUEUE_IN_FLAGS
103    , in_EXECUTE_QUEUE_IN_EXCEPTION    =>  in_EXECUTE_QUEUE_IN_EXCEPTION
104    , in_EXECUTE_QUEUE_IN_NO_SEQUENCE  =>  in_EXECUTE_QUEUE_IN_NO_SEQUENCE
105    , in_EXECUTE_QUEUE_IN_ADDRESS      =>  in_EXECUTE_QUEUE_IN_ADDRESS
106    , in_EXECUTE_QUEUE_IN_DATA         =>  in_EXECUTE_QUEUE_IN_DATA
107    ,out_EXECUTE_QUEUE_OUT_VAL         => out_EXECUTE_QUEUE_OUT_VAL
108    , in_EXECUTE_QUEUE_OUT_ACK         =>  in_EXECUTE_QUEUE_OUT_ACK
109    ,out_EXECUTE_QUEUE_OUT_PACKET_ID   => out_EXECUTE_QUEUE_OUT_PACKET_ID
110    ,out_EXECUTE_QUEUE_OUT_FLAGS       => out_EXECUTE_QUEUE_OUT_FLAGS
111    ,out_EXECUTE_QUEUE_OUT_EXCEPTION   => out_EXECUTE_QUEUE_OUT_EXCEPTION
112    ,out_EXECUTE_QUEUE_OUT_NO_SEQUENCE => out_EXECUTE_QUEUE_OUT_NO_SEQUENCE
113    ,out_EXECUTE_QUEUE_OUT_ADDRESS     => out_EXECUTE_QUEUE_OUT_ADDRESS
114    ,out_EXECUTE_QUEUE_OUT_DATA        => out_EXECUTE_QUEUE_OUT_DATA
115     );
116  ------------------------------------------------------
117  -- interface ""
118  ------------------------------------------------------
119 
120  -- Test exhaustive
121 
122  interface_test_ok <= '1' when true
123    else '0';
124 
125  interface_test <= '1' when (in_NRESET = '0') else interface_test_ok;
126  ------------------------------------------------------
127  -- interface "execute_queue_in"
128  ------------------------------------------------------
129 
130  with counter select
131    in_EXECUTE_QUEUE_IN_VAL <=
132    '0' when 0,
133    '0' when 1,
134    '0' when 2,
135    '0' when 3,
136    '0' when 4,
137    '1' when 5,
138    '1' when 6,
139    '0' when 7,
140    '0' when 8,
141    '1' when 9,
142    '1' when 10,
143    '1' when 11,
144    '1' when 12,
145    '1' when 13,
146    '1' when 14,
147    '1' when 15,
148    '1' when 16,
149    '0' when 17,
150    '1' when 18,
151    '1' when 19,
152    '1' when 20,
153    '0' when 21,
154    '1' when 22,
155    '1' when 23,
156    '0' when 24,
157    '1' when 25,
158    '0' when 26,
159    '0' when others;
160 
161  with counter select
162    out_EXECUTE_QUEUE_IN_ACK_test <=
163    '0' when 0,
164    '1' when 1,
165    '1' when 2,
166    '1' when 3,
167    '1' when 4,
168    '1' when 5,
169    '1' when 6,
170    '1' when 7,
171    '1' when 8,
172    '1' when 9,
173    '1' when 10,
174    '1' when 11,
175    '1' when 12,
176    '1' when 13,
177    '1' when 14,
178    '1' when 15,
179    '1' when 16,
180    '1' when 17,
181    '1' when 18,
182    '1' when 19,
183    '1' when 20,
184    '1' when 21,
185    '1' when 22,
186    '1' when 23,
187    '1' when 24,
188    '1' when 25,
189    '1' when 26,
190    '0' when others;
191 
192  with counter select
193    in_EXECUTE_QUEUE_IN_PACKET_ID <=
194    "0000" when 0,
195    "0000" when 1,
196    "0000" when 2,
197    "0000" when 3,
198    "0000" when 4,
199    "0000" when 5,
200    "0001" when 6,
201    "0001" when 7,
202    "0001" when 8,
203    "0010" when 9,
204    "0011" when 10,
205    "0100" when 11,
206    "0101" when 12,
207    "0110" when 13,
208    "0111" when 14,
209    "1000" when 15,
210    "1001" when 16,
211    "1001" when 17,
212    "1010" when 18,
213    "1011" when 19,
214    "1100" when 20,
215    "1100" when 21,
216    "1101" when 22,
217    "1110" when 23,
218    "1110" when 24,
219    "1111" when 25,
220    "1111" when 26,
221    (others => '0') when others;
222 
223  with counter select
224    in_EXECUTE_QUEUE_IN_FLAGS <=
225    "00" when 0,
226    "00" when 1,
227    "00" when 2,
228    "00" when 3,
229    "00" when 4,
230    "11" when 5,
231    "11" when 6,
232    "11" when 7,
233    "11" when 8,
234    "00" when 9,
235    "11" when 10,
236    "11" when 11,
237    "11" when 12,
238    "10" when 13,
239    "01" when 14,
240    "01" when 15,
241    "11" when 16,
242    "11" when 17,
243    "10" when 18,
244    "00" when 19,
245    "11" when 20,
246    "11" when 21,
247    "10" when 22,
248    "01" when 23,
249    "01" when 24,
250    "01" when 25,
251    "01" when 26,
252    (others => '0') when others;
253 
254  with counter select
255    in_EXECUTE_QUEUE_IN_EXCEPTION <=
256    "00000" when 0,
257    "00000" when 1,
258    "00000" when 2,
259    "00000" when 3,
260    "00000" when 4,
261    "10001" when 5,
262    "10010" when 6,
263    "10010" when 7,
264    "10010" when 8,
265    "11011" when 9,
266    "10011" when 10,
267    "10001" when 11,
268    "11000" when 12,
269    "11011" when 13,
270    "00001" when 14,
271    "00001" when 15,
272    "01010" when 16,
273    "01010" when 17,
274    "01100" when 18,
275    "01100" when 19,
276    "11011" when 20,
277    "11011" when 21,
278    "00101" when 22,
279    "01001" when 23,
280    "01001" when 24,
281    "10001" when 25,
282    "10001" when 26,
283    (others => '0') when others;
284 
285  with counter select
286    in_EXECUTE_QUEUE_IN_NO_SEQUENCE <=
287    '0' when 0,
288    '0' when 1,
289    '0' when 2,
290    '0' when 3,
291    '0' when 4,
292    '1' when 5,
293    '1' when 6,
294    '1' when 7,
295    '1' when 8,
296    '1' when 9,
297    '1' when 10,
298    '1' when 11,
299    '1' when 12,
300    '1' when 13,
301    '1' when 14,
302    '1' when 15,
303    '1' when 16,
304    '1' when 17,
305    '1' when 18,
306    '1' when 19,
307    '1' when 20,
308    '1' when 21,
309    '1' when 22,
310    '1' when 23,
311    '1' when 24,
312    '1' when 25,
313    '1' when 26,
314    '0' when others;
315 
316  with counter select
317    in_EXECUTE_QUEUE_IN_ADDRESS <=
318    "00000000000000000000000000000000" when 0,
319    "00000000000000000000000000000000" when 1,
320    "00000000000000000000000000000000" when 2,
321    "00000000000000000000000000000000" when 3,
322    "00000000000000000000000000000000" when 4,
323    "00101010111010001001010001001010" when 5,
324    "01111001111000101010100111100011" when 6,
325    "01111001111000101010100111100011" when 7,
326    "01111001111000101010100111100011" when 8,
327    "00010001100100001100110111100111" when 9,
328    "01000001101001111100010011001001" when 10,
329    "00100101011100010011000010100011" when 11,
330    "01100111011000111000010001011110" when 12,
331    "01110001111100110010010001010100" when 13,
332    "01110011011110111000110111011100" when 14,
333    "01000100000010111010110111111100" when 15,
334    "01010001111010101101001101101011" when 16,
335    "01010001111010101101001101101011" when 17,
336    "00011101010011101101010000111011" when 18,
337    "00111000010000110111111111011011" when 19,
338    "01111001101000011101111010101010" when 20,
339    "01111001101000011101111010101010" when 21,
340    "01100100100110111011011101111100" when 22,
341    "00010101101101011010111101011100" when 23,
342    "00010101101101011010111101011100" when 24,
343    "01010111100110111110010011110001" when 25,
344    "01010111100110111110010011110001" when 26,
345    (others => '0') when others;
346 
347  with counter select
348    in_EXECUTE_QUEUE_IN_DATA <=
349    "00000000000000000000000000000000" when 0,
350    "00000000000000000000000000000000" when 1,
351    "00000000000000000000000000000000" when 2,
352    "00000000000000000000000000000000" when 3,
353    "00000000000000000000000000000000" when 4,
354    "01100010010101010101100011101100" when 5,
355    "01110101010001011110000101000110" when 6,
356    "01110101010001011110000101000110" when 7,
357    "01110101010001011110000101000110" when 8,
358    "01100110111011110100001110001101" when 9,
359    "01101011011010000000011110011010" when 10,
360    "01100010101110111101100101011010" when 11,
361    "01110101101000101010100011010100" when 12,
362    "00101100101010001000011000010001" when 13,
363    "01101100111010101111000010000111" when 14,
364    "00000101000001110010001101100111" when 15,
365    "00101101010100010111011110010110" when 16,
366    "00101101010100010111011110010110" when 17,
367    "01110010010110100000011011111011" when 18,
368    "01110110010001001010010001011100" when 19,
369    "01110101110001101100001100111010" when 20,
370    "01110101110001101100001100111010" when 21,
371    "00100111010110101100011110010100" when 22,
372    "01110100000100100010011010111011" when 23,
373    "01110100000100100010011010111011" when 24,
374    "00110001000011000101000010110011" when 25,
375    "00110001000011000101000010110011" when 26,
376    (others => '0') when others;
377 
378  -- Test partial
379 
380  interface_execute_queue_in_test_ok <= '1' when true
381    and out_EXECUTE_QUEUE_IN_ACK = out_EXECUTE_QUEUE_IN_ACK_test
382    else '0';
383 
384  interface_execute_queue_in_test_transaction <= '1'
385    and in_EXECUTE_QUEUE_IN_VAL
386    and out_EXECUTE_QUEUE_IN_ACK
387    ;
388 
389  with counter select
390    interface_execute_queue_in_test_tmp <=
391    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
392      when 5,
393    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
394      when 6,
395    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
396      when 9,
397    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
398      when 10,
399    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
400      when 11,
401    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
402      when 12,
403    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
404      when 13,
405    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
406      when 14,
407    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
408      when 15,
409    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
410      when 16,
411    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
412      when 18,
413    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
414      when 19,
415    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
416      when 20,
417    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
418      when 22,
419    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
420      when 23,
421    interface_execute_queue_in_test_transaction and interface_execute_queue_in_test_ok
422      when 25,
423    not interface_execute_queue_in_test_transaction when others;
424 
425  interface_execute_queue_in_test <= '1' when (in_NRESET = '0') else
426                                     interface_execute_queue_in_test_tmp;
427  ------------------------------------------------------
428  -- interface "execute_queue_out"
429  ------------------------------------------------------
430 
431  with counter select
432    out_EXECUTE_QUEUE_OUT_VAL_test <=
433    '0' when 0,
434    '0' when 1,
435    '0' when 2,
436    '0' when 3,
437    '0' when 4,
438    '0' when 5,
439    '1' when 6,
440    '1' when 7,
441    '0' when 8,
442    '0' when 9,
443    '1' when 10,
444    '1' when 11,
445    '1' when 12,
446    '1' when 13,
447    '1' when 14,
448    '1' when 15,
449    '1' when 16,
450    '1' when 17,
451    '0' when 18,
452    '1' when 19,
453    '1' when 20,
454    '1' when 21,
455    '1' when 22,
456    '1' when 23,
457    '1' when 24,
458    '0' when 25,
459    '1' when 26,
460    '0' when others;
461 
462  with counter select
463    in_EXECUTE_QUEUE_OUT_ACK <=
464    '0' when 0,
465    '0' when 1,
466    '0' when 2,
467    '0' when 3,
468    '0' when 4,
469    '1' when 5,
470    '1' when 6,
471    '1' when 7,
472    '1' when 8,
473    '0' when 9,
474    '1' when 10,
475    '1' when 11,
476    '1' when 12,
477    '1' when 13,
478    '1' when 14,
479    '1' when 15,
480    '1' when 16,
481    '1' when 17,
482    '1' when 18,
483    '1' when 19,
484    '1' when 20,
485    '0' when 21,
486    '1' when 22,
487    '1' when 23,
488    '1' when 24,
489    '1' when 25,
490    '1' when 26,
491    '0' when others;
492 
493  with counter select
494    out_EXECUTE_QUEUE_OUT_PACKET_ID_test <=
495    "0000" when 0,
496    "0000" when 1,
497    "0000" when 2,
498    "0000" when 3,
499    "0000" when 4,
500    "0000" when 5,
501    "0000" when 6,
502    "0001" when 7,
503    "0001" when 8,
504    "0001" when 9,
505    "0010" when 10,
506    "0011" when 11,
507    "0100" when 12,
508    "0101" when 13,
509    "0110" when 14,
510    "0111" when 15,
511    "1000" when 16,
512    "1001" when 17,
513    "1001" when 18,
514    "1010" when 19,
515    "1011" when 20,
516    "1100" when 21,
517    "1100" when 22,
518    "1101" when 23,
519    "1110" when 24,
520    "1110" when 25,
521    "1111" when 26,
522    (others => '0') when others;
523 
524  with counter select
525    out_EXECUTE_QUEUE_OUT_FLAGS_test <=
526    "00" when 0,
527    "00" when 1,
528    "00" when 2,
529    "00" when 3,
530    "00" when 4,
531    "00" when 5,
532    "11" when 6,
533    "11" when 7,
534    "11" when 8,
535    "11" when 9,
536    "00" when 10,
537    "11" when 11,
538    "11" when 12,
539    "11" when 13,
540    "10" when 14,
541    "01" when 15,
542    "01" when 16,
543    "11" when 17,
544    "11" when 18,
545    "10" when 19,
546    "00" when 20,
547    "11" when 21,
548    "11" when 22,
549    "10" when 23,
550    "01" when 24,
551    "01" when 25,
552    "01" when 26,
553    (others => '0') when others;
554 
555  with counter select
556    out_EXECUTE_QUEUE_OUT_EXCEPTION_test <=
557    "00000" when 0,
558    "00000" when 1,
559    "00000" when 2,
560    "00000" when 3,
561    "00000" when 4,
562    "00000" when 5,
563    "10001" when 6,
564    "10010" when 7,
565    "10010" when 8,
566    "10010" when 9,
567    "11011" when 10,
568    "10011" when 11,
569    "10001" when 12,
570    "11000" when 13,
571    "11011" when 14,
572    "00001" when 15,
573    "00001" when 16,
574    "01010" when 17,
575    "01010" when 18,
576    "01100" when 19,
577    "01100" when 20,
578    "11011" when 21,
579    "11011" when 22,
580    "00101" when 23,
581    "01001" when 24,
582    "01001" when 25,
583    "10001" when 26,
584    (others => '0') when others;
585 
586  with counter select
587    out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test <=
588    '0' when 0,
589    '0' when 1,
590    '0' when 2,
591    '0' when 3,
592    '0' when 4,
593    '0' when 5,
594    '1' when 6,
595    '1' when 7,
596    '1' when 8,
597    '1' when 9,
598    '1' when 10,
599    '1' when 11,
600    '1' when 12,
601    '1' when 13,
602    '1' when 14,
603    '1' when 15,
604    '1' when 16,
605    '1' when 17,
606    '1' when 18,
607    '1' when 19,
608    '1' when 20,
609    '1' when 21,
610    '1' when 22,
611    '1' when 23,
612    '1' when 24,
613    '1' when 25,
614    '1' when 26,
615    '0' when others;
616 
617  with counter select
618    out_EXECUTE_QUEUE_OUT_ADDRESS_test <=
619    "00000000000000000000000000000000" when 0,
620    "00000000000000000000000000000000" when 1,
621    "00000000000000000000000000000000" when 2,
622    "00000000000000000000000000000000" when 3,
623    "00000000000000000000000000000000" when 4,
624    "00000000000000000000000000000000" when 5,
625    "00101010111010001001010001001010" when 6,
626    "01111001111000101010100111100011" when 7,
627    "01111001111000101010100111100011" when 8,
628    "01111001111000101010100111100011" when 9,
629    "00010001100100001100110111100111" when 10,
630    "01000001101001111100010011001001" when 11,
631    "00100101011100010011000010100011" when 12,
632    "01100111011000111000010001011110" when 13,
633    "01110001111100110010010001010100" when 14,
634    "01110011011110111000110111011100" when 15,
635    "01000100000010111010110111111100" when 16,
636    "01010001111010101101001101101011" when 17,
637    "01010001111010101101001101101011" when 18,
638    "00011101010011101101010000111011" when 19,
639    "00111000010000110111111111011011" when 20,
640    "01111001101000011101111010101010" when 21,
641    "01111001101000011101111010101010" when 22,
642    "01100100100110111011011101111100" when 23,
643    "00010101101101011010111101011100" when 24,
644    "00010101101101011010111101011100" when 25,
645    "01010111100110111110010011110001" when 26,
646    (others => '0') when others;
647 
648  with counter select
649    out_EXECUTE_QUEUE_OUT_DATA_test <=
650    "00000000000000000000000000000000" when 0,
651    "00000000000000000000000000000000" when 1,
652    "00000000000000000000000000000000" when 2,
653    "00000000000000000000000000000000" when 3,
654    "00000000000000000000000000000000" when 4,
655    "00000000000000000000000000000000" when 5,
656    "01100010010101010101100011101100" when 6,
657    "01110101010001011110000101000110" when 7,
658    "01110101010001011110000101000110" when 8,
659    "01110101010001011110000101000110" when 9,
660    "01100110111011110100001110001101" when 10,
661    "01101011011010000000011110011010" when 11,
662    "01100010101110111101100101011010" when 12,
663    "01110101101000101010100011010100" when 13,
664    "00101100101010001000011000010001" when 14,
665    "01101100111010101111000010000111" when 15,
666    "00000101000001110010001101100111" when 16,
667    "00101101010100010111011110010110" when 17,
668    "00101101010100010111011110010110" when 18,
669    "01110010010110100000011011111011" when 19,
670    "01110110010001001010010001011100" when 20,
671    "01110101110001101100001100111010" when 21,
672    "01110101110001101100001100111010" when 22,
673    "00100111010110101100011110010100" when 23,
674    "01110100000100100010011010111011" when 24,
675    "01110100000100100010011010111011" when 25,
676    "00110001000011000101000010110011" when 26,
677    (others => '0') when others;
678 
679  -- Test partial
680 
681  interface_execute_queue_out_test_ok <= '1' when true
682    and out_EXECUTE_QUEUE_OUT_VAL = out_EXECUTE_QUEUE_OUT_VAL_test
683    and out_EXECUTE_QUEUE_OUT_PACKET_ID = out_EXECUTE_QUEUE_OUT_PACKET_ID_test
684    and out_EXECUTE_QUEUE_OUT_FLAGS = out_EXECUTE_QUEUE_OUT_FLAGS_test
685    and out_EXECUTE_QUEUE_OUT_EXCEPTION = out_EXECUTE_QUEUE_OUT_EXCEPTION_test
686    and out_EXECUTE_QUEUE_OUT_NO_SEQUENCE = out_EXECUTE_QUEUE_OUT_NO_SEQUENCE_test
687    and out_EXECUTE_QUEUE_OUT_ADDRESS = out_EXECUTE_QUEUE_OUT_ADDRESS_test
688    and out_EXECUTE_QUEUE_OUT_DATA = out_EXECUTE_QUEUE_OUT_DATA_test
689    else '0';
690 
691  interface_execute_queue_out_test_transaction <= '1'
692    and out_EXECUTE_QUEUE_OUT_VAL
693    and in_EXECUTE_QUEUE_OUT_ACK
694    ;
695 
696  with counter select
697    interface_execute_queue_out_test_tmp <=
698    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
699      when 6,
700    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
701      when 7,
702    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
703      when 10,
704    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
705      when 11,
706    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
707      when 12,
708    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
709      when 13,
710    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
711      when 14,
712    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
713      when 15,
714    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
715      when 16,
716    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
717      when 17,
718    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
719      when 19,
720    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
721      when 20,
722    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
723      when 22,
724    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
725      when 23,
726    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
727      when 24,
728    interface_execute_queue_out_test_transaction and interface_execute_queue_out_test_ok
729      when 26,
730    not interface_execute_queue_out_test_transaction when others;
731 
732  interface_execute_queue_out_test <= '1' when (in_NRESET = '0') else
733                                      interface_execute_queue_out_test_tmp;
734 
735  ------------------------------------------------------
736  -- Test
737  ------------------------------------------------------
738 
739  test <= '1'
740           and interface_test
741           and interface_execute_queue_in_test
742           and interface_execute_queue_out_test;
743 
744  ------------------------------------------------------
745  -- reset
746  ------------------------------------------------------
747 
748  -- if the systemC simulate have multiple reset, we make the last
749  in_NRESET <= '1' after 150 ns;
750 
751  ------------------------------------------------------
752  -- process clock_name
753  ------------------------------------------------------
754 
755  in_CLOCK <= not in_CLOCK after 50 ns;
756 
757  process (in_CLOCK)
758  begin
759    if (in_CLOCK'event and in_CLOCK = '1') then
760 
761      if (in_NRESET = '0') then
762        counter <= 4;
763      else
764        counter <= counter+1;
765
766        assert not (counter >= 27) report "Test OK" severity FAILURE;
767        assert not (test = '0') report "Test KO" severity FAILURE;
768      end if;
769    end if;
770  end process;
771end behavioural;
772\end{lstlisting}
Note: See TracBrowser for help on using the repository browser.