Advertisement
rofl97

Device PPI

Dec 19th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module device(address, GNT, CLK, force_req, addressToContact, RESET, REQ, Frame,AD, C_BE, IReady, TReady, DevSel);
  2.     input GNT, CLK, RESET, force_req;
  3.     input [31:0] address, addressToContact;
  4.    
  5.     output REQ;
  6.    
  7.     inout [31:0] AD;
  8.     input [3:0] C_BE;
  9.     inout Frame, IReady, TReady, DevSel;
  10.  
  11.     reg [31:0] mem [9:0];
  12.     wire [31:0] data [2:0]; //contains AA
  13.    
  14.     integer i = 0;
  15.     integer numberOfTransactions;
  16.    
  17.     wire [1:0]phasesWire;
  18.     reg [1:0]numberOfPhases;
  19.    
  20.     integer posEdge = 0;
  21.    
  22.     assign data[0] = 32'hAA_AA_AA_AA;
  23.     assign data[1] = 32'hBB_BB_BB_BB;
  24.     assign data[2] = 32'hCC_CC_CC_CC;
  25.     assign phasesWire= (address == 0 && addressToContact == 1)? 3 : (address == 0 && addressToContact == 2) ? 2 :(address == 1)? 2:(address==2)? 1 :0;
  26.     reg isData;
  27.    
  28.     reg isMaster;
  29.    
  30.     reg REQ_reg;
  31.     assign REQ = REQ_reg;
  32.  
  33.     reg Frame_reg;
  34.     reg [31:0] AD_reg;
  35.     assign Frame = (isMaster) ? Frame_reg : 1'bz;
  36.     assign AD = (isMaster) ? AD_reg : 1'bz;
  37.    
  38.     always @(CLK)
  39.     begin
  40.     posEdge = ~posEdge;
  41.         if (posEdge)
  42.         begin
  43.             if (!force_req)
  44.             begin
  45.                 i = i+1;
  46.                 REQ_reg = 0;
  47.             end
  48.            
  49.             else if (i != 0)
  50.             begin
  51.                 numberOfTransactions = i; //
  52.                 i = 0;
  53.             end
  54.            
  55.             else
  56.                 i = 0;
  57.            
  58.             if (GNT == 0 && Frame && IReady) //bus granted and bus is idle
  59.             begin
  60.                
  61.                 isMaster = 1;
  62.                 isData=0;
  63.                 numberOfPhases<=phasesWire;
  64.             end
  65.            
  66.             else if (isMaster) // not first cycle
  67.             begin
  68.                
  69.             end
  70.         end
  71.         else
  72.         begin
  73.             if(isMaster)
  74.         begin
  75.             Frame_reg = 0;
  76.             if(!isData)
  77.                 begin
  78.             AD_reg = addressToContact;
  79.             isData=1;
  80.             end
  81.             else
  82.            
  83.             if(numberOfPhases>0)
  84.             begin
  85.                 numberOfPhases = numberOfPhases - 1;
  86.                 AD_reg = data[address];
  87.                 if(numberOfPhases ==0)
  88.                     begin
  89.                         Frame_reg = 1;
  90.                         //isMaster=0;
  91.                     end
  92.             end
  93.             else
  94.                 isMaster=0;
  95.     end
  96.         end        
  97.     end
  98. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement