Changeset 72 for PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v1.00/MPI_RMA.vhd
- Timestamp:
- Jan 6, 2014, 3:16:44 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
PROJECT_CORE_MPI/CORE_MPI/BRANCHES/v1.00/MPI_RMA.vhd
r70 r72 33 33 procedure pMPI_Win_start( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; pgroup:MPI_group;asser : natural; Win :MPI_Win); 34 34 procedure pMPI_Win_wait( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; Win :MPI_Win); 35 35 procedure pMPI_Win_post( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; pgroup:MPI_group;asser : natural; Win :MPI_Win); 36 procedure pMPI_Win_complete( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; Win :MPI_Win); 36 37 procedure pMPI_Comm_Spawn(NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; 37 38 command : natural; argv :natural; maxprocs : natural; info : natural; root : natural; comm : natural; … … 61 62 Target_Rank : natural; Target_disp : std_logic_vector; Target_Count : natural; 62 63 Target_Datatype :natural; Win : natural) is 63 variable i,dcount : natural:=0;64 variable i,dcount,wr_state : natural:=0; 64 65 variable adresse :natural; 65 66 variable addr1 :std_logic_vector(Orig_Addr'length-1 downto 0):=Orig_Addr; … … 69 70 constant LeftZero: std_logic_vector(2*Word-ADRLEN to 0):=(others=>'0'); 70 71 begin 71 put_adr:= Std_logic_vector(to_unsigned(Core_put_adr,ADRLEN));72 put_adr:=conv_Std_logic_vector(Core_put_adr,ADRLEN); 72 73 73 74 addr1:=Orig_Addr; … … 79 80 80 81 if rising_edge(clkin) then 81 if dcount>=0 and dcount <=3 then 82 if dcount= 0 then 83 dcount:=dcount+1; 84 Interf.S.Intstate1<=0; 85 elsif dcount>=1 and dcount <=3 then 82 86 if interf.I.ramsel='0' then 83 87 Interf.O.membusy<='0'; … … 85 89 SysRam.O.ena<='1'; 86 90 SysRam.O.enb<='0'; 87 WritePtr (put_adr,dcount,SysRam); 88 if dcount =4 then 91 wr_state:=interf.S.Intstate1; 92 WritePtr (put_adr,wr_state,SysRam); 93 interf.S.Intstate1<=wr_state; 94 if wr_state =4 then 89 95 -- fin de l'écriture du pointeur en mémoire 96 dcount:=4; 90 97 end if; 91 98 end if; … … 97 104 SysRam.O.enb<='0'; 98 105 Interf.O.membusy<='1'; 106 if target_rank <=15 then --limitation de cete version à 16 rang 107 Interf.S.Gstart(Target_rank)<='1'; 108 end if; 99 109 adresse:=core_put_adr; 100 SysRam.O.Data_in<=MPI_PUT & std_logic_vector(to_unsigned(Target_Rank,4)); --code fonction110 SysRam.O.Data_in<=MPI_PUT & conv_std_logic_vector(Target_Rank,4); --code fonction 101 111 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 102 112 dcount:=dcount+1; … … 199 209 if SysRam.I.Data_out(0)='1' then --fin du MPI PUT ici pour l'envoie ! 200 210 dcount:=dcount+1; 201 SysRam.O.addr_rd<= Std_logic_vector(to_unsigned(Core_put_adr+7,Adrlen));211 SysRam.O.addr_rd<=conv_Std_logic_vector(Core_put_adr+7,Adrlen); 202 212 Interf.S.Intstate2<=255; --timer pour la réception 203 213 end if; … … 215 225 Interf.O.membusy<='0'; 216 226 if interf.I.ramsel='0' then 217 SysRam.O.addr_rd<= Std_logic_vector(to_unsigned(Core_put_adr+7,Adrlen));227 SysRam.O.addr_rd<=conv_Std_logic_vector(Core_put_adr+7,Adrlen); 218 228 if SysRam.I.Data_out(5)='1' then --Message du MPI PUT bien reçu ! 219 229 dcount:=dcount+1; 220 SysRam.O.addr_rd<= Std_logic_vector(to_unsigned(Core_put_adr+7,Adrlen));230 SysRam.O.addr_rd<=conv_Std_logic_vector(Core_put_adr+7,Adrlen); 221 231 elsif Interf.S.Intstate2>0 then 222 232 Interf.S.Intstate2<=Interf.S.Intstate2-1; … … 269 279 Interf.S.IntState1<=wcount; 270 280 Interf.O.membusy<='1'; 271 if wcount = 0then281 if wcount =4 then 272 282 dcount:=4; 283 Interf.S.Intstate1<=1; 273 284 end if; 274 285 end if; … … 279 290 SysRam.O.ena<='1'; 280 291 SysRam.O.enb<='0'; 281 292 if target_rank <=15 then --limitation de cete version à 16 rang 293 Interf.S.Gstart(Target_rank)<='1'; 294 end if; 282 295 adresse:=core_get_adr; 283 SysRam.O.Data_in<=MPI_GET & std_logic_vector(to_unsigned(Target_Rank,4)); --code fonction296 SysRam.O.Data_in<=MPI_GET & conv_Std_logic_vector(Target_Rank,4); --code fonction 284 297 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 285 298 Interf.O.membusy<='1'; … … 348 361 SysRam.O.enb<='1'; 349 362 adresse:=core_base_adr+1; 350 SysRam.O.addr_rd<=std_logic_vector(to_unsigned( core_base_adr+1,ADRLEN));363 SysRam.O.addr_rd<=std_logic_vector(to_unsigned(adresse,ADRLEN)); 351 364 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 352 365 SysRam.O.Data_in<=x"01"; --instruction pulse enable via la mémoire; … … 469 482 if interf.I.ramsel='0' then 470 483 Rank<=SysRam.I.Data_out(3 downto 0); 484 Interf.S.Rank<=conv_integer(SysRam.I.Data_out(3 downto 0)); 471 485 NextCtx:=3; 472 486 Interf.O.membusy<='1'; … … 605 619 --cette étape consiste à envoyer le message WINCREATE Sur le réseau et à récupérer 606 620 -- les informations donnant le numéro de la fenêtre 607 W0:=MPI_WIN CREATE & std_logic_vector(to_unsigned(0,4)); --code fonction621 W0:=MPI_WIN_CREATE & std_logic_vector(to_unsigned(0,4)); --code fonction 608 622 count:=Interf.S.IntState1; 609 623 Writemem(count,interf,SysRam,wcreate_adr,w0); … … 693 707 SysRam.O.ena<='1'; 694 708 SysRam.O.enb<='0'; 695 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(core_base_adr+ 4,Adrlen));709 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(core_base_adr+5,Adrlen)); 696 710 SysRam.O.Data_in<=x"01"; --mise à 1 du bit WSTART et remise à zero de tous les autres Bits 697 711 698 712 NextCtx:=NextCtx+1; 699 713 Interf.O.membusy<='1'; 700 714 Interf.S.GStart<=(others=>'0'); 701 715 end if; 702 716 elsif NextCtx=2 then … … 705 719 SysRam.O.ena<='1'; 706 720 SysRam.O.enb<='0'; 707 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(core_base_adr+ 4,Adrlen));721 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(core_base_adr+5,Adrlen)); 708 722 SysRam.O.Data_in<=x"01"; 709 723 NextCtx:=NextCtx+1; … … 718 732 end procedure; 719 733 procedure pMPI_Win_complete( NextCtx : inout natural;signal Interf:inout Core_io;signal SysRam :inout typ_dpram; Win :MPI_Win) is 734 variable adresse :natural; 735 variable wcount: natural range 0 to 255:=0; 736 variable LRam : typ_dpRam; 737 variable SyncDest : natural range 0 to 15; --destination du message de synchronisation 738 variable W0 :std_logic_vector(Word-1 downto 0); 739 variable wcompl_adr : std_logic_vector(adrlen-1 downto 0):=Std_logic_vector(to_unsigned(Core_wcompl_adr,ADRLEN)); 740 720 741 begin 742 -- 743 --pMPI_Win_Wait(NextCtx, Interf, SysRam, Win ); 744 wcompl_adr:=Std_logic_vector(to_unsigned(Core_wcompl_adr,ADRLEN)); 745 LRam:=SysRam; -- nécessaire pour le débogage 746 if NextCtx =0 then 747 748 SysRam.O.we<='1'; 749 SysRam.O.ena<='1'; 750 SysRam.O.enb<='0'; 751 Interf.S.IntState1<=0; 752 NextCtx:=1; 753 adresse:=core_wcompl_adr; 754 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 755 Interf.O.Instr_En<='0'; 756 757 elsif NextCtx=1 then --écriture du ptr d'intruction 758 SysRam.O.we<='1'; 759 SysRam.O.ena<='1'; 760 SysRam.O.enb<='0'; 761 if interf.I.ramsel='0' then 762 763 adresse:=core_wcompl_adr; 764 765 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 766 Interf.O.Instr_En<='0'; 767 Interf.O.membusy<='1'; 768 769 wcount:=Interf.S.IntState1; 770 WritePtr (wcompl_adr,wcount,SysRam); 771 Interf.S.IntState1<=wcount; 772 773 if wcount =4 then 774 NextCtx:=2; 775 Interf.S.IntState1<=0; 776 Interf.S.IntState2<=0; 777 Interf.S.tmem(0)<=Interf.S.GStart(7 downto 0); --cibles impactées 778 Interf.S.tmem(1)<=Interf.S.GStart(15 downto 8); --cibles impactées 779 adresse:=core_wcompl_adr; 780 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 781 end if; 782 end if; 783 elsif NextCtx=2 then 784 SysRam.O.we<='1'; 785 SysRam.O.ena<='1'; 786 SysRam.O.enb<='0'; 787 adresse:=core_wcompl_adr; 788 NextCtx:=9; --aller à la fin de la fonction 789 for i in interf.s.intState2 to 7 loop 790 if interf.s.gstart(i)='1' then 791 SysRam.O.Data_in<=MPI_WIN_SYNC & std_logic_vector(to_unsigned(i,4)); 792 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 793 Interf.S.tmem(0)(i)<='0'; --ce dest a été traité ! 794 NextCtx:=3; 795 Interf.S.IntState2<=i+1; 796 exit; 797 end if; 798 end loop; 799 elsif NextCtx=3 then 800 SysRam.O.we<='1'; 801 SysRam.O.ena<='1'; 802 SysRam.O.enb<='0'; 803 adresse:=core_wcompl_adr+1; 804 SysRam.O.Data_in<= x"04" ; 805 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 806 NextCtx:=NextCtx+1; 807 elsif NextCtx=4 then 808 SysRam.O.we<='1'; 809 SysRam.O.ena<='1'; 810 SysRam.O.enb<='0'; 811 adresse:=core_wcompl_adr+2; 812 Interf.O.Instruction<=x"04";--longueur de l'instruction 813 SysRam.O.Data_in<=x"00" ;-- 814 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 815 NextCtx:=5; 816 elsif NextCtx=5 then 817 SysRam.O.we<='1'; 818 SysRam.O.ena<='1'; 819 SysRam.O.enb<='0'; 820 adresse:=core_wcompl_adr+3; 821 SysRam.O.Data_in<= SYNC_WCOMP & std_logic_vector(to_unsigned(Interf.S.Rank,4)); 822 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 823 NextCtx:=6; 824 elsif NextCtx=6 then 825 SysRam.O.we<='1'; 826 SysRam.O.ena<='1'; 827 SysRam.O.enb<='0'; 828 adresse:=core_wcompl_adr+3; 829 SysRam.O.Data_in<=SYNC_WCOMP & std_logic_vector(to_unsigned(Interf.S.Rank,4)); 830 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 831 NextCtx:=7; 832 833 elsif NextCtx=7 then --fin de la fonction 834 SysRam.O.we<='0'; 835 SysRam.O.ena<='0'; 836 SysRam.O.enb<='1'; 837 --dcount:=0; 838 Interf.O.membusy<='0'; 839 Interf.O.Instr_En<='1'; 840 SysRam.O.Addr_rd<=Std_logic_vector(to_unsigned(Core_base_adr+5,AdrLen)); 841 NextCtx:=8; 842 elsif NextCtx=8 then --acquittement de la copie des données dans le tampon 843 if Interf.I.Instr_ack='1' then 844 Interf.O.Instr_En<='0'; 845 NextCtx:=9; 846 end if; 847 SysRam.O.we<='0'; 848 SysRam.O.ena<='0'; 849 SysRam.O.enb<='1'; 850 851 elsif NextCtx=9 then --lecture de la fin de WComplete 852 SysRam.O.we<='0'; 853 SysRam.O.ena<='0'; 854 SysRam.O.enb<='1'; 855 856 if interf.S.IntState2=0 then --aucune instruction MPI exécutée ? 857 858 elsif Interf.S.tmem(0)/=0 then --plus de message compl à envoyer 859 NextCtx:=2; 860 elsif Interf.S.tmem(0)=0 then 861 if interf.I.ramsel='0' then 862 NextCtx:=10; 863 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(core_base_adr+5,Adrlen)); 864 end if; 865 end if; 866 elsif NextCtx=10 then --test de la fin des transferts 867 if interf.I.ramsel='0' then 868 SysRam.O.we<='0'; 869 SysRam.O.ena<='0'; 870 SysRam.O.enb<='1'; 871 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(core_base_adr+5,Adrlen)); 872 if SysRam.I.Data_out(0)='1' and SysRam.I.Data_out(6)='0' then --si WStart=1 et Wbusy=0 873 --il faut un DSent=1 pour Put ou un DSending pour Get 874 if SysRam.I.Data_out(5)='1' or (SysRam.I.Data_out(4)='1' and SysRam.I.Data_out(1)='1') then 875 NextCtx:=NextCtx+1; 876 end if; 877 end if; 878 879 end if; 880 elsif NextCtx=11 then 881 Interf.S.IntState1<=0; -- initialisation du compteur d'état 882 Interf.S.IntState2<=0; 883 NextCtx:=0; --fin de la fonction 884 end if; 721 885 722 886 end procedure; … … 725 889 -- la source veut communiquer et par la suite envoie un message de synchro sur le réseau à 726 890 --chacune de ces cibles 891 variable W_Ptr : natural range 0 to 65535:=0;--adresse de la fenêtre en mémoire 892 variable dcount : natural range 0 to 255:=0; 893 variable cstatus : std_logic_vector(Word-1 downto 0); 727 894 begin 895 896 -- retour de l'adresse de de la fenêtre dans la structure Win 897 -- initialisation des bits concernant 898 if Win.id =0 then 899 W_ptr:=Core_Base_Adr+4; 900 end if; 901 if NextCtx =0 then 902 NextCtx:=NextCtx+1; 903 if pgroup.grp=0 then --rien à faire 904 nextCtx:=5; 905 Interf.S.GPost<=(others=>'0'); 906 end if; 907 elsif NextCtx=1 then 908 if interf.I.ramsel='0' then 909 SysRam.O.we<='1'; 910 SysRam.O.ena<='1'; 911 SysRam.O.enb<='0'; 912 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(W_ptr+W_status,Adrlen)); 913 SysRam.O.Data_in<=x"48"; --mise à 1 du bit WPOST et WBusy et remise à zero de tous les autres Bits 914 915 NextCtx:=NextCtx+1; 916 Interf.O.membusy<='1'; 917 918 end if; 919 --limitation de cete version à 16 rang 920 Interf.S.GPost<=pgroup.grp; 921 elsif NextCtx=2 then 922 if interf.I.ramsel='0' then 923 SysRam.O.we<='1'; 924 SysRam.O.ena<='1'; 925 SysRam.O.enb<='0'; 926 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(W_ptr+W_status,Adrlen)); 927 SysRam.O.Data_in<=x"48"; --mise à 1 du bit WPOST et WBusy et remise à zero de tous les autres Bits 928 929 NextCtx:=NextCtx+1; 930 Interf.O.membusy<='1'; 931 932 end if; 933 elsif NextCtx=3 then 934 if interf.I.ramsel='0' then 935 SysRam.O.we<='1'; 936 SysRam.O.ena<='1'; 937 SysRam.O.enb<='0'; 938 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(W_Ptr+W_Gpost,Adrlen)); 939 SysRam.O.Data_in<=pgroup.grp(7 downto 0); 940 NextCtx:=NextCtx+1; 941 Interf.O.membusy<='1'; 942 end if; 943 elsif NextCtx=4 then 944 if interf.I.ramsel='0' then 945 SysRam.O.we<='1'; 946 SysRam.O.ena<='1'; 947 SysRam.O.enb<='0'; 948 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(W_ptr+W_Gpost+1,Adrlen)); 949 SysRam.O.Data_in<=pgroup.grp(15 downto 8); 950 NextCtx:=NextCtx+1; 951 Interf.O.membusy<='1'; 952 end if; 953 elsif NextCtx=6 then 954 if interf.I.ramsel='0' then 955 SysRam.O.we<='1'; 956 SysRam.O.ena<='1'; 957 SysRam.O.enb<='0'; 958 SysRam.O.addr_wr<=Std_logic_vector(to_unsigned(W_ptr+W_Gpost+1,Adrlen)); 959 SysRam.O.Data_in<=pgroup.grp(15 downto 8); 960 NextCtx:=NextCtx+1; 961 Interf.O.membusy<='1'; 962 end if; 963 elsif NextCtx=5 then 964 SysRam.O.we<='0'; 965 SysRam.O.ena<='0'; 966 SysRam.O.enb<='0'; 967 NextCtx:=0; 968 Interf.O.membusy<='0'; 969 end if; 970 728 971 729 972 end procedure; … … 733 976 variable dcount : natural range 0 to 255:=0; 734 977 variable cstatus : std_logic_vector(Word-1 downto 0); 735 978 variable W_Ptr : natural range 0 to 65535:=0;--adresse de la fenêtre en mémoire 736 979 begin 737 738 739 980 W_Ptr:=Core_base_adr+4;--adresse du reg status de la première fenêtre 740 981 if NextCtx =0 then 741 982 NextCtx:=NextCtx+1; … … 745 986 SysRam.O.ena<='0'; 746 987 SysRam.O.enb<='1'; 747 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(core_base_adr+4,Adrlen)); 748 if (SysRam.I.Data_out(5)='1' and SysRam.I.Data_out(4)='1') and SysRam.I.Data_out(2)='0' and SysRam.I.Data_out(1)='0' then 749 NextCtx:=NextCtx+1; 750 end if; 988 NextCtx:=NextCtx+1; 751 989 end if; 990 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(core_base_adr+4,Adrlen)); 991 If Interf.S.Gpost=0 then 992 NextCtx:=9; --rien à synchroniser 993 end if; 994 elsif (NextCtx>=2) and (NextCtx <=7) then 995 if interf.I.ramsel='0' then 996 SysRam.O.we<='0'; 997 SysRam.O.ena<='0'; 998 SysRam.O.enb<='1'; 999 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(W_ptr+W_status,Adrlen)); 1000 NextCtx:=NextCtx+1; 1001 else 1002 NextCtx:=1; 1003 end if; 1004 elsif NextCtx=8 then 1005 if interf.I.ramsel='0' then 1006 SysRam.O.we<='0'; 1007 SysRam.O.ena<='0'; 1008 SysRam.O.enb<='1'; 1009 SysRam.O.addr_rd<=Std_logic_vector(to_unsigned(W_ptr+W_status,Adrlen)); 1010 1011 if SysRam.I.Data_out(3)='1' and SysRam.I.Data_out(6)='0' then --si WPost=1 et WBusy=0 1012 --il faut un DSent=1 pour Put ou un DSending pour Get 1013 if SysRam.I.Data_out(4)='1' or (SysRam.I.Data_out(5)='1' and SysRam.I.Data_out(2)='1') then 1014 NextCtx:=NextCtx+1; 1015 Interf.S.GPost<=(others=>'0'); 1016 end if; 1017 elsif SysRam.I.Data_out(3)='0' then 1018 NextCtx:=NextCtx; --pas d'opérations en attente 1019 else 1020 NextCtx:=NextCtx; --on attend 1021 end if; 1022 end if; 752 1023 753 elsif NextCtx=2 then 754 755 NextCtx:=0; 1024 elsif NextCtx=9 then 1025 SysRam.O.we<='0'; 1026 SysRam.O.ena<='0'; 1027 SysRam.O.enb<='0'; 1028 Interf.O.membusy<='0'; 1029 NextCtx:=0; 756 1030 end if; 757 1031 … … 952 1226 end if; 953 1227 elsif NextCtx=2 then 954 SysRam.O.we<='1'; 955 SysRam.O.ena<='1'; 956 SysRam.O.enb<='0'; 957 adresse:=core_init_adr; 958 SysRam.O.Data_in<=MPI_INIT & x"0" ; 959 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 960 NextCtx:=3; 1228 if interf.I.ramsel='0' then 1229 SysRam.O.we<='1'; 1230 SysRam.O.ena<='1'; 1231 SysRam.O.enb<='0'; 1232 adresse:=core_init_adr; 1233 SysRam.O.Data_in<=MPI_INIT & x"0" ; 1234 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 1235 NextCtx:=3; 1236 Interf.O.membusy<='1'; 1237 end if; 961 1238 elsif NextCtx=3 then 962 SysRam.O.we<='1'; 963 SysRam.O.ena<='1'; 964 SysRam.O.enb<='0'; 1239 if Interf.I.ramSel='0' then 1240 SysRam.O.we<='1'; 1241 SysRam.O.ena<='1'; 1242 SysRam.O.enb<='0'; 1243 Interf.O.membusy<='1'; 965 1244 adresse:=core_init_adr+1; 966 1245 SysRam.O.Data_in<= x"04" ; 967 1246 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 968 1247 NextCtx:=NextCtx+1; 1248 end if; 969 1249 elsif NextCtx=4 then 970 SysRam.O.we<='1'; 971 SysRam.O.ena<='1'; 972 SysRam.O.enb<='0'; 973 adresse:=core_init_adr+2; 1250 if Interf.I.ramSel='0' then 1251 SysRam.O.we<='1'; 1252 SysRam.O.ena<='1'; 1253 Interf.O.membusy<='1'; 1254 SysRam.O.enb<='0'; 1255 adresse:=core_init_adr+1; 974 1256 Interf.O.Instruction<=x"04"; 975 SysRam.O.Data_in<=x"0 0" ;--longueur de l'instruction1257 SysRam.O.Data_in<=x"04" ;--longueur de l'instruction 976 1258 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 977 1259 NextCtx:=5; 1260 end if; 978 1261 elsif NextCtx=5 then 979 SysRam.O.we<='1'; 980 SysRam.O.ena<='1'; 981 SysRam.O.enb<='0'; 982 adresse:=core_init_adr+3; 1262 if Interf.I.ramSel='0' then 1263 SysRam.O.we<='1'; 1264 SysRam.O.ena<='1'; 1265 Interf.O.membusy<='1'; 1266 SysRam.O.enb<='0'; 1267 adresse:=core_init_adr+2; 983 1268 SysRam.O.Data_in<= x"00" ; 984 1269 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 985 1270 NextCtx:=6; 1271 end if; 986 1272 elsif NextCtx=6 then 987 SysRam.O.we<='1'; 988 SysRam.O.ena<='1'; 989 SysRam.O.enb<='0'; 1273 if Interf.I.ramSel='0' then 1274 SysRam.O.we<='1'; 1275 SysRam.O.ena<='1'; 1276 SysRam.O.enb<='0'; 1277 Interf.O.membusy<='1'; 990 1278 adresse:=core_init_adr+3; 991 1279 SysRam.O.Data_in<=x"00" ; 992 1280 SysRam.O.Addr_wr<=Std_logic_vector(to_unsigned(adresse,ADRLEN)); 993 1281 NextCtx:=7; 994 1282 end if; 995 1283 elsif NextCtx=7 then --fin de la fonction 996 1284 SysRam.O.we<='0'; 997 1285 SysRam.O.ena<='0'; 998 1286 SysRam.O.enb<='1'; 1287 Interf.O.membusy<='0'; 999 1288 dcount:=0; 1000 1289 Interf.O.membusy<='0';
Note: See TracChangeset
for help on using the changeset viewer.