From 33f5de0f5cc9564f07bf20c7a032c496691b2011 Mon Sep 17 00:00:00 2001 From: koooo142857 Date: Wed, 27 Oct 2021 12:43:55 -0700 Subject: [PATCH] aligned all files in ifu folder --- wally-pipelined/src/ifu/BTBPredictor.sv | 60 ++--- wally-pipelined/src/ifu/CodeAligner.py | 98 ++++++++ wally-pipelined/src/ifu/RAsPredictor.sv | 28 +-- wally-pipelined/src/ifu/SRAM2P1R1W.sv | 56 ++--- wally-pipelined/src/ifu/bpred.sv | 216 +++++++++--------- wally-pipelined/src/ifu/decompress.sv | 18 +- .../src/ifu/globalHistoryPredictor.sv | 70 +++--- wally-pipelined/src/ifu/gsharePredictor.sv | 70 +++--- wally-pipelined/src/ifu/ifu.sv | 214 ++++++++--------- .../src/ifu/localHistoryPredictor.sv | 72 +++--- wally-pipelined/src/ifu/satCounter2.sv | 20 +- wally-pipelined/src/ifu/twoBitPredictor.sv | 48 ++-- 12 files changed, 534 insertions(+), 436 deletions(-) create mode 100644 wally-pipelined/src/ifu/CodeAligner.py diff --git a/wally-pipelined/src/ifu/BTBPredictor.sv b/wally-pipelined/src/ifu/BTBPredictor.sv index 07a39c162..ad94b6ff6 100644 --- a/wally-pipelined/src/ifu/BTBPredictor.sv +++ b/wally-pipelined/src/ifu/BTBPredictor.sv @@ -31,25 +31,25 @@ module BTBPredictor #(parameter int Depth = 10 ) - (input logic clk, - input logic reset, - input logic StallF, StallE, + (input logic clk, + input logic reset, + input logic StallF, StallE, input logic [`XLEN-1:0] LookUpPC, output logic [`XLEN-1:0] TargetPC, - output logic [4:0] InstrClass, - output logic Valid, + output logic [4:0] InstrClass, + output logic Valid, // update - input logic UpdateEN, + input logic UpdateEN, input logic [`XLEN-1:0] UpdatePC, input logic [`XLEN-1:0] UpdateTarget, - input logic [4:0] UpdateInstrClass, - input logic UpdateInvalid + input logic [4:0] UpdateInstrClass, + input logic UpdateInvalid ); localparam TotalDepth = 2 ** Depth; logic [TotalDepth-1:0] ValidBits; - logic [Depth-1:0] LookUpPCIndex, UpdatePCIndex, LookUpPCIndexQ, UpdatePCIndexQ; - logic UpdateENQ; + logic [Depth-1:0] LookUpPCIndex, UpdatePCIndex, LookUpPCIndexQ, UpdatePCIndexQ; + logic UpdateENQ; // hashing function for indexing the PC @@ -61,10 +61,10 @@ module BTBPredictor flopenr #(Depth) UpdatePCIndexReg(.clk(clk), - .reset(reset), - .en(~StallE), - .d(UpdatePCIndex), - .q(UpdatePCIndexQ)); + .reset(reset), + .en(~StallE), + .d(UpdatePCIndex), + .q(UpdatePCIndexQ)); // The valid bit must be resetable. always_ff @ (posedge clk) begin @@ -79,17 +79,17 @@ module BTBPredictor flopenr #(1) UpdateENReg(.clk(clk), - .reset(reset), - .en(~StallF), - .d(UpdateEN), - .q(UpdateENQ)); + .reset(reset), + .en(~StallF), + .d(UpdateEN), + .q(UpdateENQ)); flopenr #(Depth) LookupPCIndexReg(.clk(clk), - .reset(reset), - .en(~StallF), - .d(LookUpPCIndex), - .q(LookUpPCIndexQ)); + .reset(reset), + .en(~StallF), + .d(LookUpPCIndex), + .q(LookUpPCIndexQ)); @@ -98,14 +98,14 @@ module BTBPredictor // *** need to add forwarding. SRAM2P1R1W #(Depth, `XLEN+5) memory(.clk(clk), - .reset(reset), - .RA1(LookUpPCIndex), - .RD1({{InstrClass, TargetPC}}), - .REN1(~StallF), - .WA1(UpdatePCIndex), - .WD1({UpdateInstrClass, UpdateTarget}), - .WEN1(UpdateEN), - .BitWEN1({5'h1F, {`XLEN{1'b1}}})); // *** definitely not right. + .reset(reset), + .RA1(LookUpPCIndex), + .RD1({{InstrClass, TargetPC}}), + .REN1(~StallF), + .WA1(UpdatePCIndex), + .WD1({UpdateInstrClass, UpdateTarget}), + .WEN1(UpdateEN), + .BitWEN1({5'h1F, {`XLEN{1'b1}}})); // *** definitely not right. endmodule diff --git a/wally-pipelined/src/ifu/CodeAligner.py b/wally-pipelined/src/ifu/CodeAligner.py new file mode 100644 index 000000000..59f9de4e8 --- /dev/null +++ b/wally-pipelined/src/ifu/CodeAligner.py @@ -0,0 +1,98 @@ +import os + +# Kevin Wan kewan@hmc.edu 10/27/2021 +def read_input(filename): #1 + """Takes in a string filename and outputs the parsed verilog code by line into a list + such that each element of the list is one line of verilog code as a string.""" + lineOfCode = [] + input_file = open(filename, 'r') + for line in input_file: + lineOfCode.append(line) + return lineOfCode +################################################################################### +def ID_start(GiantString):#2 + """takes in the list of sv file lines, outputs the location that variable names should start""" + VarLoc = 0 + VarLineNum = None + for lines in GiantString: + if ' logic ' in lines and (lines.find("//") == -1 or lines.find("//") > lines.find(' logic ')): # // logic does not proceed. logic proceeds. logic // proceeds. + if "[" in lines and "]" in lines:# need to account for these space + NowLoc = lines.find(']') + 3# column number in sv code when 1st char of the var name should appear. + if NowLoc>VarLoc: + VarLoc = NowLoc + VarLineNum = GiantString.index(lines) # Update this number if new record is made. + else: + NowLoc = lines.find('logic') + 7 # same as before. + if NowLoc>VarLoc: + VarLoc = NowLoc + VarLineNum = GiantString.index(lines) + #print("Furthest variable appears on line", VarLineNum + 1,VarLoc) # Disable this line after debugging. + return VarLoc +################################################################################## +def modified_logNew(GS,SOV): #3 + Ind = SOV - 1 # SOV is for human readability, Ind is the character's index in computer, since computers count from 0's we need to correct it. + Out = [] + for l in GS: + lines = l.replace('\t',' ') + + if ' logic ' in lines and (lines.find("//") == -1 or lines.find("//") > lines.find(' logic ')): # // logic does not proceed. logic proceeds. logic // proceeds. + if "[" in lines and "]" in lines: # the line is an extended declaration. + EditLoc = lines.find("]") # Re-finds the string index number of ]. + VarLoc = FindCharRel(lines[EditLoc+1::]) + EditLoc + 1 # Checks where variable declaration currently is at. + #print(VarLoc,lines[VarLoc])# VERIFIED + NewLine = Mod_Space_at(lines,VarLoc,VarLoc-Ind) + Out.append(NewLine)# Verified0957 10272021 + else: + EditLoc1 = lines.find('c') # Hopefully sees the c in 'logic' + + VarLoc1 = FindCharRel(lines[EditLoc1+1::]) + EditLoc1 + 1 + NewLine1 = Mod_Space_at(lines,VarLoc1,VarLoc1-Ind) + + Out.append(NewLine1)# Verified 1005 10272021 + else: + Out.append(lines) + return Out +################################################################################ +def write_to_output(filename,GiantString,OW=True,Lines_editted=None): #4 + """Filename is preferrably passed from the early function calls""" + """GiantString has all the corrected features in the code, each line is a good verilog code line""" + newname = filename + if not OW or OW =='f': #which means no overwrite (create a new file) + Decomposed=filename.split('.') + newname = Decomposed[0] + "_AL." + Decomposed[1] # AL for aligned. + + OutFile = open(newname,'w') # This step should create a new file. + OutFile.writelines(GiantString) + OutFile.close() + print("Success! " + newname + " Now contains an aligned file!") + return newname +################################################################################# + +def FindCharRel(Ln): + #returns the computer location of a character's first occurence + for num in range(len(Ln)): + if Ln[num] != " ": + return num + + +def Mod_Space_at(Ln,loc,diff): + #loc is the varLoc from mln, diff is varLoc - Ind + if diff > 0: # to delete + NewString = Ln[:(loc-diff)] + Ln[loc:] + + if diff < 0: # to add + NewString = Ln[:loc] + (-diff)*" " + Ln[loc:] + if diff == 0: + NewString = Ln + + return NewString + +def main_filehandler(overwrite=False): + for filename in os.listdir(): + if ".py" not in filename: + GiantString = read_input(filename) + SOV = ID_start(GiantString) + ModifiedGS = modified_logNew(GiantString,SOV) + Newname = write_to_output(filename,ModifiedGS,overwrite) + +main_filehandler(True) \ No newline at end of file diff --git a/wally-pipelined/src/ifu/RAsPredictor.sv b/wally-pipelined/src/ifu/RAsPredictor.sv index 44929e3c7..31f4568d0 100644 --- a/wally-pipelined/src/ifu/RAsPredictor.sv +++ b/wally-pipelined/src/ifu/RAsPredictor.sv @@ -30,21 +30,21 @@ module RASPredictor #(parameter int StackSize = 16 ) - (input logic clk, - input logic reset, - input logic pop, + (input logic clk, + input logic reset, + input logic pop, output logic [`XLEN-1:0] popPC, - input logic push, - input logic incr, + input logic push, + input logic incr, input logic [`XLEN-1:0] pushPC ); - logic CounterEn; + logic CounterEn; localparam Depth = $clog2(StackSize); - logic [Depth-1:0] PtrD, PtrQ, PtrP1, PtrM1; - logic [StackSize-1:0] [`XLEN-1:0] memory; - integer index; + logic [Depth-1:0] PtrD, PtrQ, PtrP1, PtrM1; + logic [StackSize-1:0] [`XLEN-1:0] memory; + integer index; assign CounterEn = pop | push | incr; @@ -56,16 +56,16 @@ module RASPredictor // *** what happens if jal is executing and there is a return being flushed in Decode? flopenr #(Depth) PTR(.clk(clk), - .reset(reset), - .en(CounterEn), - .d(PtrD), - .q(PtrQ)); + .reset(reset), + .en(CounterEn), + .d(PtrD), + .q(PtrQ)); // RAS must be reset. always_ff @ (posedge clk) begin if(reset) begin for(index=0; index