Changeset 74 for PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v1.00/EX4_FSM.vhd
- Timestamp:
- Jan 15, 2014, 2:40:01 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v1.00/EX4_FSM.vhd
r72 r74 55 55 Rec_Data : IN Typ_PortIO(0 to 3); 56 56 Snd_data : OUT Typ_PortIO(0 to 3); 57 Snd_Start : OUTstd_logic;57 Snd_Start : buffer std_logic; 58 58 Rec_Ack : OUT std_logic; 59 59 dma_wr_grant : in STD_LOGIC; … … 111 111 type typ_receiv is (r_wait,r_dlen,r_drop,r_glen,r_data,r_pulse,r_end); 112 112 type typ_cmd is (cmdstart,cmdpost,cmdpostidle,cmdread,cmdlen,cmdglen,cmddata,cmdend,cmdtimeout); 113 113 type typ_mem16 is array(natural range <>) of std_logic_vector(15 downto 0);-- 114 114 signal etsnd : typ_send; 115 115 signal etrec:typ_receiv; --pour la machine à état de réception … … 126 126 signal tosend,tosend4 :std_logic_vector(Word-1 downto 0); 127 127 signal PeerStat : std_logic_vector(15 downto 0):=(others=>'0'); --état des autres Lib initialisées 128 signal SpawnReq,SpawnReq_Q : std_logic_vector(15 downto 0):=(others=>'0'); --état des autres HT qui ont appelés le Spawn 129 signal Spawn_grp,Spawn_grp_Q :typ_mem16(0 to 3):=((others=>'0'),(others=>'0'),(others=>'0'),(others=>'0')); --un max de quatre groupes de fils est prévu 130 signal Grp_id,grp_id_i :natural range 0 to 3:=0; --id du groupe des HT fils 128 131 signal selector : std_logic_vector (2 downto 0); -- pour le MUX des signaux vers le port 129 132 --signaux pour les états des MAE … … 136 139 signal SpawnOn,SpawnInit :std_logic:='0'; --indique que le Spawn est activé 137 140 signal SpawnNbReq,SpawnNbAck,SpawnNBAck_i : natural range 0 to 15 :=0; --compte le nombre de requêtes et le nombre d'acquitement 138 signal SpawnCmd :std_logic_vector(Word-1 downto 0); 141 signal SpawnNbReq_Q : natural range 0 to 15 :=0; --compte le nombre de requêtes et le nombre d'acquitement 142 signal SpawnCmd0,SpawnCmd1, SpawnCmd2 :std_logic_vector(Word-1 downto 0):=(others=>'0'); 143 signal SpawnCmd0_Q,SpawnCmd1_Q, SpawnCmd2_Q :std_logic_vector(Word-1 downto 0):=(others=>'0'); 139 144 signal SpawnDest :std_logic_vector(3 downto 0); 145 Signal Ht_Start,Ht_Start_i : natural range 0 to 15:=0; 146 Signal vPeerStat,vPeerStat_i : std_logic_vector(15 downto 0):=(others=>'0'); 140 147 signal IsMain_i,Initialized_i,HCL_init: std_logic:='0'; 141 148 signal DS_RDY ,BCast_Rdy,Send_RDY,CM_RDY:std_logic:='0'; … … 150 157 --Signaux des résultats et de l'état 151 158 signal PortNum_i,MyPort : std_logic_vector(3 downto 0); -- 152 signal NocMax : std_logic_vector(3 downto 0) ; -- Nombre de ports du réseau -1 ?159 signal NocMax : std_logic_vector(3 downto 0):=(others=>'0'); -- Nombre de ports du réseau -1 ? 153 160 signal MyRank : std_logic_vector(3 downto 0) ; --rang du PE 154 161 signal AppSize_i:std_logic_vector(3 downto 0) ;--taille de l'application … … 162 169 signal Datalen : natural range 0 to 7:=0; --indique la longueur des données 163 170 --other outputs 164 signal StatAsked_i,RankAsked_i,EquFlag_i,MainResp_i,RankSent_i,Result_i:std_logic ;165 signal snd_start_i:std_logic ;--version interne des signaux de sortie171 signal StatAsked_i,RankAsked_i,EquFlag_i,MainResp_i,RankSent_i,Result_i:std_logic:='0'; 172 signal snd_start_i:std_logic:='0';--version interne des signaux de sortie 166 173 --signal BCast_Rdy_i : std_logic; 167 174 signal cdlen,dcount : natural range 0 to 255:=0; --longueur du paquet reçu par le process pcmd 168 signal timeout,timeout_i : natural range 0 to 1023:=0;175 signal timeout,timeout_i : natural range 0 to 4095:=0; 169 176 signal PortStat : std_logic_vector(3 downto 0):=(others=>'0'); 170 177 signal PeerPort : natural range 0 to 15:=0; -- désigne le port qui emet une requête … … 219 226 StatAsked<=StatAsked_i; 220 227 n<=n_i; 228 Ht_Start<=Ht_Start_i; 229 Grp_Id<=Grp_Id_i; 230 vPeerStat<=vPeerStat_i; 221 231 SpawnNbAck<=SpawnNbAck_i; 222 232 AppSize<=AppSize_i; 223 233 Ready<=Rdy; 224 234 snd_start<=snd_start_i; 235 SpawnNbReq_q<=SpawnNbReq; 236 SpawnReq_Q<=SpawnReq; 237 SpawnCmd0_Q<=SpawnCmd0; 238 SpawnCmd1_Q<=SpawnCmd1; 239 SpawnCmd2_Q<=SpawnCmd2; 240 Spawn_grp_q<=Spawn_grp; 225 241 end if; 226 242 end process; 227 243 228 Init2_DECODE: process (stinit2, CmdReceived, EquFlag, MyPort, DS_RDY, MainResp, DataReceived, 229 SpawnOn,Ram_NextAdress,PeerRTS,PortSTAT,dma_rd,dma_wr,Send_rdy,I_Send_rdy,rd_ok,wr_ok,Instruction) 244 Init2_DECODE: process (stinit2,n, CmdReceived, EquFlag, MyPort, DS_RDY, MainResp, DataReceived, 245 SpawnOn,Ram_NextAdress,PeerRTS,PortSTAT,dma_rd,dma_wr,Send_rdy,I_Send_rdy,rd_ok,wr_ok,Instruction, 246 MainPort,PeerStat,SpawnCmd0,SpawnCmd1,SpawnCmd2,SpawnInit,BCast_rdy) 230 247 variable nextr,nextadr : natural :=0;--to_integer(unsigned(Ram_NextAdress)); 231 248 variable nport : natural range 0 to 15:=0; … … 466 483 RTS_cmd<='0'; 467 484 RTS_I<='0'; 468 CTR<= '1';485 CTR<=not MainResp; 469 486 ResultOut<=(others=>'0'); 470 487 PortNum_i<=DataReceived(0)(3 downto 0); --adresse du Main Port … … 609 626 DS_ACK<=DS_RDY; 610 627 BCAST<='0'; 611 CTR<=' 1'; --cette mise à 1 permet de ctrler la fin de réception628 CTR<='0'; --cette mise à 1 permet de ctrler la fin de réception 612 629 rdy<='0'; 613 630 ram_wr<=wr_ok; … … 620 637 dma_wr_request <=dma_wr; 621 638 RankAsked_i<='0'; 622 if SpawnInit='1'then623 ResultOut<=("0 1000000");--spawn completed639 if n>=3 then 640 ResultOut<=("00000010");--spawn completed 624 641 else 625 ResultOut<=("000000 10");--spawn message received642 ResultOut<=("00000000");--spawn message received 626 643 end if; 627 644 … … 629 646 RTS_cmd<='0'; 630 647 --RTS_DAT<='1'; --à tester 631 RTS_I<= '1'; -- pour le timing648 RTS_I<=PeerRTS; -- pour le timing 632 649 Result_En<='0'; 633 650 DS_ACK<='0'; … … 637 654 ram_wr<=wr_ok; 638 655 ram_rd<=rd_ok; 639 DataToSend(0)<= MPI_SPAWN & SpawnDest;656 DataToSend(0)<=SpawnCmd0; 640 657 DataToSend(1)<="00000100"; 641 DataToSend(2)<= PeerStat(7 downto 0);642 DataToSend(3)<=SpawnCmd ; -- SPAWN_LOAD & MyPort ;658 DataToSend(2)<=SpawnCmd1; 659 DataToSend(3)<=SpawnCmd2; -- SPAWN_LOAD & MyPort ; 643 660 Send_Ack<=Send_Rdy; 644 661 I_Send_Ack<=I_Send_rdy; 645 662 RankAsked_i<='0'; 646 663 if SpawnInit='1' then 647 ResultOut<=(" 01000000"); --spawn completed664 ResultOut<=("10000000"); --spawn completed 648 665 else 649 ResultOut<=("0 0000010");--spawn message received666 ResultOut<=("01000000");--spawn in progress 650 667 end if; 651 668 When ErrSpawn => … … 705 722 --================== 706 723 NEXT_STInit2_DECODE: process (stInit2,AppReq,Instruction_en, AppAck,PortNumFlag,EquFlag,MainResp,StatAsked,RankAsked,RankSent,CM_RDY, CmdReceived, 707 BCast_Rdy, DS_RDY, DataReceived, Send_RDY, I_Send_RDY,TimeOut,Dma_rd_grant,Dma_wr_grant,cpt,n,clk_cyl,IsMain_i,SpawnOn) 724 BCast_Rdy, DS_RDY, DataReceived,Ht_Start,vPeerStat, Send_RDY, I_Send_RDY,TimeOut,Dma_rd_grant,Dma_wr_grant,cpt,n,clk_cyl,IsMain_i,SpawnOn, 725 Instruction,Hcl_Init,Spawn_done,mainport,PeerStat,PeerRTS,Rec_Data,SpawnInit,grp_id,SpawnNbReq,Ram_data_out,Spawn_grp,MyPort) 708 726 variable InitTimeOut :natural:=0; 709 727 variable LastPort,Ht_hole : std_logic:='0'; 710 variable i, htloc,ht_Start: natural range 0 to 15:=0;711 variable vPeerStat : std_logic_vector(15 downto 0);728 variable i,nbSpawn,htloc,Ht_Id : natural range 0 to 15:=0; 729 --variable vPeerStat : std_logic_vector(15 downto 0); 712 730 variable vPortStat,nulvect : std_logic_vector(3 downto 0):="0000"; 713 731 variable tempval : std_logic_vector(Word-1 downto 0); … … 717 735 --insert statements to decode next_state 718 736 --below is a simple example 737 vPeerStat_i<=vPeerStat; 738 SpawnNbReq<=SpawnNbReq_q; 739 SpawnReq<=SpawnReq_q; 740 Ht_Start_i<=Ht_Start; 741 SpawnCmd0<=SpawnCmd0_Q; 742 SpawnCmd1<=SpawnCmd1_Q; 743 SpawnCmd2<=SpawnCmd2_Q; 744 for i in 0 to 3 loop 745 Spawn_grp(i)<=Spawn_grp_q(i); 746 end loop; 719 747 case (stInit2) is 720 748 … … 736 764 Next_stInit2 <=SendApp; 737 765 end if; 738 elsif portNumFlag='1' and IsMain_i='0' then739 Next_stInit2 <= AskPeerStat; --recevoir les nouvelles données sur l'état d'initialisation766 elsif HCL_Init='1' and IsMain_i='0' then 767 Next_stInit2 <=SendApp; --ignorer ce message simplement 740 768 else 741 769 Next_stInit2 <=GetPortNum; -- initialiser la bibliothèque normalement … … 841 869 Next_stInit2<=GetPeerStat; 842 870 StatAsked_i<='1'; 871 MainResp<='0'; 843 872 n_i<=0; 844 873 End if; … … 857 886 end if; 858 887 859 elsif TimeOut= 800 then888 elsif TimeOut=1800 then 860 889 --essayer de redemander les statistiques 861 890 Timeout_i<=0; … … 927 956 TimeOut_i<=0; -- prépare le traitement de la prochaine requête 928 957 -- d'attente des ports 958 elsif Timeout=800 then 959 assert true report "Impossible d'envoyer le rang" 960 severity failure; 961 timeout_i<=0; 962 else 963 TimeOut_i<=TimeOut+1; 929 964 end if; 930 965 When RegRank => … … 1005 1040 if statAsked='1' then 1006 1041 -- Next_stInit2<=ReadNoc; 1007 -- else1042 1008 1043 Next_stInit2<=SendApp; --terminer l'application 1009 1044 end if; 1010 1045 1011 elsif TimeOut _i=100 then1046 elsif TimeOut=100 then 1012 1047 Next_stInit2 <=EndInit; 1013 1048 else 1014 TimeOut_i<=TimeOut _i+1;1049 TimeOut_i<=TimeOut+1; 1015 1050 end if; 1016 1051 else … … 1026 1061 1027 1062 if n=0 then 1028 SpawnNbReq<=to_integer(unsigned(Instruction(3 downto 0))); -- sauver le nombre de HT à créer 1063 ht_id:=to_integer(unsigned(rec_data(0)(3 downto 0))); 1064 vPeerStat_i<=PeerStat; --récupérer la situation actuelle des tâches créées 1029 1065 if IsMain_i='1' and SpawnInit='0' then 1030 n_i<=1; 1066 SpawnNbReq<=to_integer(unsigned(Instruction(3 downto 0))); -- sauver le nombre de HT à créer 1067 1068 n_i<=1; 1069 SpawnReq(ht_id)<='1'; --Note l'id de HT qui a appelé le Spawn 1031 1070 elsif IsMain_i='1' and SpawnInit='1' then -- il faut envoyer les acquittements 1032 vPeerStat:=PeerStat; --récupérer la situation actuelle des tâches créées 1033 Ht_start:=0; --compte le nombre de tâches chargées 1071 ht_id:=to_integer(unsigned(rec_data(0)(3 downto 0))); 1072 Spawn_grp(grp_id)(ht_id)<='1'; --noter le port du Fils Spawné dans ce groupe 1073 Ht_start_i<=0; --compte le nombre de tâches chargées 1034 1074 n_i<=6; 1075 1035 1076 else 1036 1077 if SpawnOn='1' then --if IsMain_i='0' then -- il faut juste charger puis activer la tâche 1037 1078 n_i<=7; 1038 end if; 1079 end if; 1080 assert true 1081 Report "SpawnLoad : Cas non prévu !" 1082 severity failure; 1039 1083 end if; 1040 1084 elsif n=1 then 1041 ht_hole:='0'; 1042 L1: for i in 0 to 7 loop 1085 if PeerStat=SpawnReq then --tous les Hts ont appelés Spawn ? 1086 ht_hole:='0'; 1087 L1: for i in 0 to 15 loop 1043 1088 if vPeerStat(i)='0' then 1044 1089 SpawnDest<=std_logic_vector(to_unsigned(i,4)); -- le port à activer 1045 vPeerStat(i):='1'; 1046 Ht_Start:=Ht_Start+1; 1090 SpawnCmd0<=MPI_SPAWN & std_logic_vector(to_unsigned(i,4)); 1091 vPeerStat_i(i)<='1'; 1092 Ht_Start_i<=Ht_Start+1; 1047 1093 Ht_Hole:='1'; -- une place a été trouvé 1048 1094 else … … 1053 1099 if Ht_hole='0' then -- toutes les tâches n'ont pas été créés 1054 1100 -- aller à la fin ! en signalant une erreur! 1055 SpawnCMd <=Spawn_Err & "0001"; --erreur pas assez de ports sur le NoC1056 n_i<= 7;1101 SpawnCMd2<=Spawn_Err & "0001"; --erreur pas assez de ports sur le NoC 1102 n_i<=9; 1057 1103 else 1058 1104 n_i<=n+1; 1059 SpawnCmd<=SPAWN_START & MyPort; 1105 SpawnCmd1<=PeerStat(7 downto 0); 1106 SpawnCmd2<=SPAWN_START & MyPort; 1107 end if; 1108 else --Tous les Hts n'ont pas appelé Spawn encore 1109 Next_stInit2<=SendApp; --on termine normalement 1110 n_i<=0; 1060 1111 end if; 1061 1112 elsif n=2 then … … 1069 1120 elsif n=4 then 1070 1121 if SpawnInit='0' then 1071 if Ht_Start =SpawnNbReq then1122 if Ht_Start>=SpawnNbReq then 1072 1123 n_i<=n+1; 1073 1124 else … … 1075 1126 end if; 1076 1127 else 1077 n_i<= 6; -- passer au contact du HT suivant1128 n_i<=7; -- passer au contact du HT suivant 1078 1129 end if; 1079 1130 elsif n=5 then 1080 -- donnerle résultat du Spawn1081 Next_stinit2<=SendApp;1082 n_i<= 0;1131 -- Aller à la fin le résultat du Spawn 1132 1133 n_i<=10; 1083 1134 elsif n=6 then 1135 nbSpawn:=0; 1136 for i in 0 to 15 loop 1137 if Spawn_grp(grp_id)(i)='1' then 1138 nbSpawn:=nbSpawn+1; 1139 end if; 1140 end loop; 1141 if nbSpawn=SpawnNbReq then 1142 n_i<=n+1; --aller renvoyer les réponses 1143 else 1144 n_i<=10; --fin du Spawn 1145 1146 end if; 1147 elsif n=7 then 1084 1148 Ht_hole:='0'; 1085 L2: for i in 0 to 7 loop 1086 if PeerStat(i)='1' then 1149 L2: for i in 0 to 7 loop --for i in Ht_start to 7 loop 1150 if i>=Ht_start then 1151 if vPeerStat(i)='1' and Spawn_grp(grp_id)(i)='0' then --on avertit les membres du groupe parent 1152 --mais pas ceux du groupe Fils ! 1087 1153 SpawnDest<=std_logic_vector(to_unsigned(i,4)); -- le port à avertir 1088 vPeerStat(i):='1'; 1089 Ht_Start:=Ht_Start+1; 1154 SpawnCmd0<=MPI_ACK & std_logic_vector(to_unsigned(i,4)); 1155 vPeerStat_i(i)<='0'; 1156 Ht_Start_i<=i+1; -- le prochain Ht à prévenir 1090 1157 Ht_Hole:='1'; -- Une tâche doit être avertie 1091 n_i<=n+1;1092 1158 else 1093 1159 Ht_hole:='0'; -- 1094 1160 end if; 1161 end if; 1095 1162 exit L2 when ht_hole='1'; 1096 1163 end loop L2; 1164 n_i<=n+1; 1165 elsif n=8 then 1097 1166 if Ht_hole='1' then -- 1098 -- aller à la fin ! en signalant une erreur! 1099 SpawnCMd<=Spawn_COMP & "0001"; -- fin du Spawn 1100 n_i<=2; --envoyer la la donnée sur le réseau 1167 -- un HT existant à prévenir ! 1168 SpawnCmd1<=Spawn_grp(grp_id)(7 downto 0); 1169 SpawnCMd2<=MPI_SPAWN & MyRank; -- fin du Spawn 1170 n_i<=2; --envoyer la donnée sur le réseau 1171 elsif vpeerstat /=spawn_grp(grp_id) then --il ne reste plus de membres à prévenir ? 1172 n_i<=7; --on est sorti mais ce n'est pas la fin 1173 1101 1174 else -- fin du Spawn car tous ont été averti 1102 n_i<=8; 1103 1104 end if; 1105 1106 1107 elsif Ismain_i='1' and SpawnInit='1' then 1108 if SpawnNbAck+1=SpawnNbReq then 1109 -- il faut envoyer un message à tous les noeuds pour avertir de la fin du Spawn 1110 1111 else 1112 SpawnNbAck_i<=SpawnNbAck+1; 1113 Next_stInit2<=SendApp; --on attend le suivant 1114 end if; 1115 end if; 1175 n_i<=10; 1176 SpawnNbReq<=0; 1177 SpawnReq<=(others=>'0'); 1178 vPeerStat_i<=(others=>'0'); 1179 grp_id_i<=grp_id+1; --incrementer le compteur de groupes************ 1180 end if; 1181 elsif n=9 then 1182 assert true report "error in Spawn command" 1183 severity failure; 1184 elsif n=10 then 1185 n_i<=0; 1186 Next_stInit2<=SendApp; 1187 end if; 1116 1188 1117 1189 When SpawnApp=> 1118 1190 --Mise à jour du bit 6 du registre status du COre. 1119 if n <3then1191 if n>=0 and n <4 then 1120 1192 1121 1193 dma_wr<='1'; --demander un accès exclusif au bus … … 1129 1201 if DS_RDY='1' then --- 1130 1202 if Datareceived(3)(7 downto 4)=SPAWN_START then 1203 n_i<=n+1; 1131 1204 else 1132 n_i<=6; --erreur instruction incorrecte 1205 Next_stInit2<=ErrSpawn; 1206 n_i<=0; --erreur instruction incorrecte 1133 1207 end if; 1134 if dma_rd_grant='1' then 1135 n_i<=n+1; 1136 end if; 1208 1137 1209 rd_ok<='1'; 1138 1210 wr_ok<='0'; 1139 1211 end if; 1140 elsif n=1 then1212 elsif n=1 or n=2 then 1141 1213 if dma_rd_grant='1' then 1142 1214 n_i<=n+1; 1143 1215 tempval:=Ram_data_out; 1144 1216 end if; 1145 1217 rd_ok<='1'; 1146 1218 wr_ok<='0'; 1147 1148 elsif n= 2then1219 1220 elsif n=3 then 1149 1221 if dma_rd_grant='1' and dma_wr_grant='1' then 1150 1222 n_i<=n+1; … … 1159 1231 wr_ok<='0'; 1160 1232 end if; 1161 elsif n= 3then1233 elsif n=4 then 1162 1234 if spawninit='0' then 1163 1235 Spawn_done<='1'; 1164 1236 end if; 1237 rd_ok<='0'; 1238 wr_ok<='0'; 1239 n_i<=0; 1165 1240 Next_stInit2<=EndInit; 1166 1241 end if; 1167 1242 1168 1243 When ErrSpawn => 1244 assert true 1245 report "Ex4/stInit2/SpawnApp:Erreur lors de Spawn" 1246 severity failure; 1169 1247 Next_stInit2<=Init; 1170 1248 When EndInit=> 1171 1249 1172 1250 StatAsked_i<='0'; --reset de ces variables 1173 1251 Next_stInit2<=Init; 1174 1252 end case; … … 1232 1310 begin 1233 1311 -- 1234 if rising_edge(clk) then1312 1235 1313 if reset='1' then 1236 1314 etrec<=r_wait; … … 1239 1317 bad_paquet:='0'; 1240 1318 else 1319 if rising_edge(clk) then 1241 1320 case etrec is 1242 1321 when r_wait => … … 1254 1333 bad_paquet:='0'; 1255 1334 SpawnOn<='1'; --le spawn est actif 1335 elsif Instruction_en='0' and CTR='0' and Hcl_init= '0' then 1336 --il faut éliminer ce paquet qui est inoportun ! 1337 Bad_paquet:='1'; 1338 etrec<=r_dlen; --il faut ignorer cette donnée et quitter 1339 dcount:=1; 1256 1340 elsif CTR='1' then 1257 1341 if ptype=MPI_INIT or ptype=INIT_SETRANK or ptype=INIT_SEEKMAIN or ptype=INIT_REGISTER then … … 1356 1440 1357 1441 --rPort_out_rd_en <='0'; 1358 SpawnOn<='0'; -- annuler le signal de Spawn1359 if DS_ACK='1' or rtimeout> 30 or CTR='0'or bad_paquet='1' then1442 1443 if DS_ACK='1' or rtimeout> 30 or (CTR='0' and SpawnOn='0') or bad_paquet='1' then 1360 1444 DS_RDY<='0'; 1445 SpawnOn<='0'; 1361 1446 etrec<=r_wait; 1362 1447 else 1363 1448 DS_RDY<=DS_RDY; 1364 end if; 1365 1366 1367 1449 end if; 1368 1450 end case; 1369 1451 end if;--reset='1' … … 1548 1630 begin 1549 1631 1550 if rising_edge(clk) then1632 1551 1633 if reset='1' then 1552 1634 etcmd<=cmdstart; … … 1554 1636 -- sorigport<=origport; 1555 1637 else 1638 if rising_edge(clk) then 1556 1639 case etcmd is 1557 1640 when cmdstart => … … 1723 1806 i_send_val:process(HCL_Init,Send_RDY,RTS_I,Snd_Ack,I_send_ack,DataToSend,Bcast_rdy,Bcast) 1724 1807 begin 1808 snd_start_i<=snd_start; 1725 1809 if HCL_Init='1' then 1726 if RTS_I='1' and i_send_ack='0' then1810 if RTS_I='1' and snd_ack='0' then 1727 1811 snd_start_i<='1'; 1728 1812 elsif i_send_ack='1' then … … 1741 1825 end if; 1742 1826 i_send_rdy<=send_rdy; 1827 for i in 0 to 3 loop 1828 Snd_data(i)<=(others=>'0'); 1829 end loop; 1743 1830 end if; 1744 1831 end process;
Note: See TracChangeset
for help on using the changeset viewer.