J'exécute un code écrit par quelqu'un d'autre, et cela fonctionne, mais je ne comprends pas ce qui se passe!SystemVerilog Tâche à l'intérieur de la fourche
initial begin: running_test
fork
task1();
task2();
join
task3();
end: running_test
Quand je suis par le débogueur dans la simulation, je vois que lorsque Task1() frappe une déclaration d'horloge, le débogueur saute à task2(), et une fois task2() frappe de même une déclaration d'horloge, alors le débogueur saute à task3() !!!!!
Et c'est là que je suis confus, parce que tâche2() est une longue tâche, alors pourquoi se déplace-t-elle (jointures) à tâche3() avant de le terminer.
Et quand je continue d'exécuter le débogueur, je vois constamment que le débogueur continue de sauter entre task1(), task2() et task3() !!!! Cela va complètement à l'encontre de ma compréhension de Fork/Join. Je m'attendais à voir que le débogueur ne passera pas à task3(), à moins qu'il ne soit fait avec task1() et task2(), mais apparemment chaque fois qu'il frappe une instruction d'horloge (à l'intérieur de l'une des tâches), à une tâche différente !!!
Quelqu'un peut-il expliquer ce qui se passe?
comprennent un extrait de –
Task1 et task2 Avez-vous des 'fork..join_none' ou quelque chose comme ça dans' Task1() 'et' task2() '? Comme la tâche 1 et la tâche sont simultanées, le simulateur va sauter d'un côté à l'autre. Veuillez inclure task1 et task2 dans le code. – sharvil111
Faites attention à 'join'. assurez-vous que ce n'est pas 'join_any' ou' join_none' Et la seule façon pour que task3 puisse être exécutée à plusieurs reprises est s'il y a une boucle que vous ne montrez pas ou qu'il y a plusieurs instances du module contenant le bloc initial. –