Advertisement
AntonioVillanueva

Una simulacion Strac - unipi

Dec 14th, 2022
728
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.06 KB | None | 0 0
  1. //Simulation UNIPI -STRAC
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #include <unistd.h>
  6. #include <stdlib.h>
  7.  
  8. // IN 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16
  9. //IN UNIPI BLOC 20
  10.  
  11. // OUTS 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14
  12. //OUT UNIPI BLOC 14
  13.  
  14.  
  15. unsigned int bitset;//word
  16. unsigned int wordindex;//word
  17.  
  18. //définit la mémoire d'un système strac
  19. unsigned int inStrac[128] ;//128*16=2048
  20. unsigned int outStrac[128] ;//128*16=2048
  21.  
  22. //définit les IN/OUT  d'Unipi
  23. unsigned int inUnipi[2];//Chaque cellule représente un bit, même si c'est plus.
  24. unsigned int outUnipi[1];//Chaque cellule représente un bit, même si c'est plus.
  25.  
  26. //--------------------------Unipi---------------------------------------
  27. void readUnipi(unsigned int *ptr,int taille){
  28.     //Read in/out unipi like bits !!!
  29.     for (int i=0;i<16*taille;i++){ //bit index inUnipi 20 but 16*2=32
  30.         printf ("%d\t",i);
  31.     }
  32.     printf ("\n");
  33.    
  34.    
  35.     for (int word=0;word<taille;word++){
  36.        
  37.         for (int bit=0;bit<16;bit++){
  38.             printf ("%d \t", (*(ptr) >>bit) & 0x01  );
  39.         }
  40.        
  41.         ptr++;//Next word
  42.     }
  43.     printf ("\n");
  44. }
  45.  
  46. int getMem(unsigned int *ptr,int n_pin){
  47.     //Get Pin in/out value in unipi
  48.     wordindex=n_pin/16; //Block
  49.     bitset = 1<< ( n_pin % 16 );//Bit in block
  50.    
  51.     return ((*(ptr+wordindex) & bitset) >0 ? 1:0);
  52. }
  53.  
  54. void setMem(unsigned int *ptr,int n_pin){
  55.     //Set simulation pin  Unipin
  56.     wordindex=n_pin/16; //Block
  57.     bitset = 1<< ( n_pin % 16 );//Bit in block
  58.    
  59.     (*(ptr+wordindex)) |= bitset;
  60. }
  61.  
  62. void clrMem (unsigned int *ptr,int n_pin){
  63.     //Clear simulation pin Unipin
  64.     wordindex=n_pin/16; //Block
  65.     bitset = 1<< ( n_pin % 16 );//Bit in block
  66.    
  67.     *(ptr+wordindex) &= ~bitset;
  68. }
  69.  
  70. //--------------------------Strac---------------------------------------
  71. void readMem (unsigned int *ptr,int taille,char *name){
  72. //Lecture de la mémoire strac IN/OUT  
  73.  
  74.     printf ("\n------------ %s ------------\n",name);
  75.  
  76.     for (int bloc=0;bloc<taille;bloc++){   
  77.        
  78.         //Print bloc value in HEX
  79.         printf ("\nbloc[%d]= 0x%04X\n\n",bloc,(*ptr));
  80.        
  81.         for (int index=0;index<16;index++){//boucle sur les bits d'un bloc
  82.             printf ("%X ",index);
  83.         }
  84.        
  85.         printf ("\n");
  86.        
  87.        
  88.        
  89.         for (int bit=0;bit<16;bit++){//boucle sur les bits d'un bloc
  90.             //printf ("bloc[%d] bit[%d] = %d \n",bloc,bit,  (( *(ptr) >>bit) & 0x01) );    
  91.             printf ("%d ",(( *(ptr) >>bit) & 0x01) );
  92.         }
  93.        
  94.         printf ("\n");
  95.         ptr--;//Next block
  96.     }
  97. }
  98.  
  99. void stracMem (unsigned int *strac_in ,unsigned int *strac_out,unsigned int *unipi_in,unsigned int *unipi_out,int offset_in ,int offset_out ){ 
  100.    
  101.     //Read unipi in ->write in ->strac in  
  102.     for (int pin=0;pin<20;pin++){//loop unipi INs 20
  103.        
  104.         if ( getMem(unipi_in,pin) >0){setMem (strac_in+offset_in,pin);} //1
  105.         else{ clrMem (strac_in+offset_in,pin);}//0
  106.     }
  107.    
  108.        
  109.     //Write unipi out <-from <-strac out   
  110.     for (int pin=0;pin<14;pin++){//loop unipi OUTs 14
  111.        
  112.         if ( getMem(strac_out,pin) >0){setMem (unipi_out,pin);} //1
  113.         else{ clrMem (unipi_out,pin);}//0      
  114.     }  
  115.    
  116. }
  117.  
  118. //--------------------------Strac---------------------------------------
  119. int main (){
  120.    
  121.     //We give some initial virtual data
  122.    
  123.     inUnipi[0]=0xFF;// IN 1.1 1.2 1.3 1.4 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12
  124.     inUnipi[1]=0x0F;// IN 2.13 2.14 2.15 2.16
  125.    
  126.     //outUnipi[0]=0x01;//OUTS 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14
  127.    
  128.     //unsigned int outStrac[128] ;//128*16=2048
  129.     outStrac[0]=0xEE;//We write some values in the Strac outs
  130.        
  131.     //Read Unipi ins they will be written in the strac memory
  132.     readMem(inUnipi,2,"Unipi in Real input");//Read Unipi's Ins
  133.        
  134.     //Data exchange between strac and virtual unipi
  135.     stracMem (inStrac,outStrac,inUnipi,outUnipi,0,0);//Strac <-> unipi
  136.    
  137.     //Read Strac Ins    
  138.     readMem(inStrac,2,"Strac INs");//Read Strac IN  Memory 2 bank(16) over 128
  139.        
  140.     //Read Strac outs they will be written on unipi
  141.     readMem(outStrac,2,"Strac OUTs");//Read Strac OUT Memory 2 bank(16) over 128   
  142.    
  143.     //Read Unipi outs
  144.     readMem(outUnipi,1,"Unipi OUT real output");//Read Unipi Real OUTs
  145.    
  146. }
  147.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement