forked from Github_Repos/cvw
		
	Merge branch 'main' of https://github.com/davidharrishmc/riscv-wally into main
This commit is contained in:
		
						commit
						d4ea8c6ac1
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -51,4 +51,5 @@ fpga/generator/*.jou
 | 
			
		||||
examples/asm/sumtest/sumtest
 | 
			
		||||
examples/asm/example/example
 | 
			
		||||
examples/C/sum/sum
 | 
			
		||||
examples/C/fir/fir
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@ -20,3 +20,6 @@
 | 
			
		||||
[submodule "addins/sky130_osu_sc_t18"]
 | 
			
		||||
	path = addins/sky130_osu_sc_t18
 | 
			
		||||
	url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t18
 | 
			
		||||
[submodule "addins/soc_flow"]
 | 
			
		||||
	path = addins/soc_flow
 | 
			
		||||
	url = https://github.com/stineje/soc_flow
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								addins/soc_flow
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
							
						
						
									
										1
									
								
								addins/soc_flow
									
									
									
									
									
										Submodule
									
								
							@ -0,0 +1 @@
 | 
			
		||||
Subproject commit ba0cbc1d90e0aec296aed42fa87b20b9a575b5cf
 | 
			
		||||
@ -5,7 +5,7 @@ $(TARGET).objdump: $(TARGET)
 | 
			
		||||
	spike $(TARGET)
 | 
			
		||||
    
 | 
			
		||||
$(TARGET): $(TARGET).c Makefile
 | 
			
		||||
	riscv64-unknown-elf-gcc -o $(TARGET) -g -O\
 | 
			
		||||
	riscv64-unknown-elf-gcc -o $(TARGET) -g -O2\
 | 
			
		||||
	  -march=rv64gc -mabi=lp64d -mcmodel=medany \
 | 
			
		||||
	  -nostdlib -static -lm -fno-tree-loop-distribute-patterns \
 | 
			
		||||
	  -T../common/test.ld -I../common \
 | 
			
		||||
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							@ -86,10 +86,10 @@
 | 
			
		||||
// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
 | 
			
		||||
`define BOOTROM_SUPPORTED 1'b1
 | 
			
		||||
`define BOOTROM_BASE   34'h00001000 
 | 
			
		||||
`define BOOTROM_RANGE  34'h00000FFF
 | 
			
		||||
`define BOOTROM_RANGE  34'h000000FF
 | 
			
		||||
`define RAM_SUPPORTED 1'b1
 | 
			
		||||
`define RAM_BASE       34'h80000000
 | 
			
		||||
`define RAM_RANGE      34'h0000FFFF
 | 
			
		||||
`define RAM_RANGE      34'h000003FF
 | 
			
		||||
`define EXT_MEM_SUPPORTED 1'b0
 | 
			
		||||
`define EXT_MEM_BASE       34'h80000000
 | 
			
		||||
`define EXT_MEM_RANGE      34'h07FFFFFF
 | 
			
		||||
@ -129,6 +129,6 @@
 | 
			
		||||
 | 
			
		||||
`define TWO_BIT_PRELOAD "../config/rv32ic/twoBitPredictor.txt"
 | 
			
		||||
`define BTB_PRELOAD "../config/rv32ic/BTBPredictor.txt"
 | 
			
		||||
`define BPRED_ENABLED 1
 | 
			
		||||
`define BPRED_ENABLED 0
 | 
			
		||||
`define BPTYPE "BPGSHARE" // BPLOCALPAg or BPGLOBAL or BPTWOBIT or BPGSHARE
 | 
			
		||||
`define TESTSBP 0
 | 
			
		||||
 | 
			
		||||
@ -129,11 +129,11 @@ assign FmtE = 1'b1;
 | 
			
		||||
 | 
			
		||||
    assign BiasE = 13'h3ff;
 | 
			
		||||
 | 
			
		||||
assign	wnan = FmtE ? &FMAResM[`FLEN-2:`NF] && |FMAResM[`NF-1:0] : &FMAResM[30:23] && |FMAResM[22:0]; 
 | 
			
		||||
// assign	XNaNE = FmtE ? &X[62:52] && |X[51:0] : &X[62:55] && |X[54:32]; 
 | 
			
		||||
// assign	YNaNE = FmtE ? &Y[62:52] && |Y[51:0] : &Y[62:55] && |Y[54:32]; 
 | 
			
		||||
// assign	ZNaNE = FmtE ? &Z[62:52] && |Z[51:0] : &Z[62:55] && |Z[54:32]; 
 | 
			
		||||
assign	ansnan = FmtE ? &ans[`FLEN-2:`NF] && |ans[`NF-1:0] : &ans[30:23] && |ans[22:0]; 
 | 
			
		||||
assign	wnan = FmtE ? &FMAResM[`FLEN-2:`NF] & |FMAResM[`NF-1:0] : &FMAResM[30:23] & |FMAResM[22:0]; 
 | 
			
		||||
// assign	XNaNE = FmtE ? &X[62:52] & |X[51:0] : &X[62:55] & |X[54:32]; 
 | 
			
		||||
// assign	YNaNE = FmtE ? &Y[62:52] & |Y[51:0] : &Y[62:55] & |Y[54:32]; 
 | 
			
		||||
// assign	ZNaNE = FmtE ? &Z[62:52] & |Z[51:0] : &Z[62:55] & |Z[54:32]; 
 | 
			
		||||
assign	ansnan = FmtE ? &ans[`FLEN-2:`NF] & |ans[`NF-1:0] : &ans[30:23] & |ans[22:0]; 
 | 
			
		||||
 // instantiate device under test
 | 
			
		||||
 | 
			
		||||
    logic [3*`NF+5:0]	SumE, SumM;       
 | 
			
		||||
@ -179,9 +179,9 @@ always @(posedge clk)
 | 
			
		||||
 // check results on falling edge of clk
 | 
			
		||||
  always @(negedge clk) begin
 | 
			
		||||
 
 | 
			
		||||
	if((FmtE==1'b1) & (FMAFlgM != flags[4:0] || (!wnan && (FMAResM != ans)) || (wnan && ansnan && ~((XNaNE && (FMAResM[`FLEN-2:0] == {XExpE,1'b1,X[`NF-2:0]})) || (YNaNE && (FMAResM[`FLEN-2:0] == {YExpE,1'b1,Y[`NF-2:0]}))  || (ZNaNE && (FMAResM[`FLEN-2:0] == {ZExpE,1'b1,Z[`NF-2:0]})) || (FMAResM[`FLEN-2:0] == ans[`FLEN-2:0]))))) begin
 | 
			
		||||
	if((FmtE==1'b1) & (FMAFlgM != flags[4:0] | (!wnan & (FMAResM != ans)) | (wnan & ansnan & ~((XNaNE & (FMAResM[`FLEN-2:0] == {XExpE,1'b1,X[`NF-2:0]})) | (YNaNE & (FMAResM[`FLEN-2:0] == {YExpE,1'b1,Y[`NF-2:0]}))  | (ZNaNE & (FMAResM[`FLEN-2:0] == {ZExpE,1'b1,Z[`NF-2:0]})) | (FMAResM[`FLEN-2:0] == ans[`FLEN-2:0]))))) begin
 | 
			
		||||
  //  fp = $fopen("/home/kparry/riscv-wally/pipelined/src/fpu/FMA/tbgen/results.dat","w");
 | 
			
		||||
	// if((FmtE==1'b1) & (FMAFlgM != flags[4:0] || (FMAResM != ans))) begin
 | 
			
		||||
	// if((FmtE==1'b1) & (FMAFlgM != flags[4:0] | (FMAResM != ans))) begin
 | 
			
		||||
        $display( "%h %h %h %h %h %h %h  Wrong ",X,Y, Z, FMAResM, ans, FMAFlgM, flags);
 | 
			
		||||
		if(FMAResM == 64'h8000000000000000) $display( "FMAResM=-zero ");
 | 
			
		||||
		if(XDenormE) $display( "xdenorm ");
 | 
			
		||||
@ -190,35 +190,35 @@ always @(posedge clk)
 | 
			
		||||
		if(FMAFlgM[4] != 0) $display( "invld ");
 | 
			
		||||
		if(FMAFlgM[2] != 0) $display( "ovrflw ");
 | 
			
		||||
		if(FMAFlgM[1] != 0) $display( "unflw ");
 | 
			
		||||
		if(FMAResM[`FLEN] && FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} && FMAResM[`NF-1:0] == 0) $display( "FMAResM=-inf ");
 | 
			
		||||
		if(~FMAResM[`FLEN] && FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} && FMAResM[`NF-1:0] == 0) $display( "FMAResM=+inf ");
 | 
			
		||||
		if(FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} && FMAResM[`NF-1:0] != 0 && ~FMAResM[`NF-1]) $display( "FMAResM=sigNaN ");
 | 
			
		||||
		if(FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} && FMAResM[`NF-1:0] != 0 && FMAResM[`NF-1]) $display( "FMAResM=qutNaN ");
 | 
			
		||||
		if(ans[`FLEN] && ans[`FLEN-2:`NF] == {`NE{1'b1}} && ans[`NF-1:0] == 0) $display( "ans=-inf ");
 | 
			
		||||
		if(~ans[`FLEN] && ans[`FLEN-2:`NF] == {`NE{1'b1}} && ans[`NF-1:0] == 0) $display( "ans=+inf ");
 | 
			
		||||
		if(ans[`FLEN-2:`NF] == {`NE{1'b1}} && ans[`NF-1:0] != 0 && ~ans[`NF-1]) $display( "ans=sigNaN ");
 | 
			
		||||
		if(ans[`FLEN-2:`NF] == {`NE{1'b1}} && ans[`NF-1:0] != 0 && ans[`NF-1]) $display( "ans=qutNaN ");
 | 
			
		||||
		if(FMAResM[`FLEN] & FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} & FMAResM[`NF-1:0] == 0) $display( "FMAResM=-inf ");
 | 
			
		||||
		if(~FMAResM[`FLEN] & FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} & FMAResM[`NF-1:0] == 0) $display( "FMAResM=+inf ");
 | 
			
		||||
		if(FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} & FMAResM[`NF-1:0] != 0 & ~FMAResM[`NF-1]) $display( "FMAResM=sigNaN ");
 | 
			
		||||
		if(FMAResM[`FLEN-2:`NF] == {`NE{1'b1}} & FMAResM[`NF-1:0] != 0 & FMAResM[`NF-1]) $display( "FMAResM=qutNaN ");
 | 
			
		||||
		if(ans[`FLEN] & ans[`FLEN-2:`NF] == {`NE{1'b1}} & ans[`NF-1:0] == 0) $display( "ans=-inf ");
 | 
			
		||||
		if(~ans[`FLEN] & ans[`FLEN-2:`NF] == {`NE{1'b1}} & ans[`NF-1:0] == 0) $display( "ans=+inf ");
 | 
			
		||||
		if(ans[`FLEN-2:`NF] == {`NE{1'b1}} & ans[`NF-1:0] != 0 & ~ans[`NF-1]) $display( "ans=sigNaN ");
 | 
			
		||||
		if(ans[`FLEN-2:`NF] == {`NE{1'b1}} & ans[`NF-1:0] != 0 & ans[`NF-1]) $display( "ans=qutNaN ");
 | 
			
		||||
        errors = errors + 1;
 | 
			
		||||
	  //if (errors == 10)
 | 
			
		||||
		$stop;
 | 
			
		||||
    end
 | 
			
		||||
    if((FmtE==1'b0)&(FMAFlgM != flags[4:0] || (!wnan && (FMAResM != ans)) || (wnan && ansnan && ~(((XNaNE && (FMAResM[30:0] == {X[30:23],1'b1,X[21:0]})) || (YNaNE && (FMAResM[30:0] == {Y[30:23],1'b1,Y[21:0]}))  || (ZNaNE && (FMAResM[30:0] == {Z[30:23],1'b1,Z[21:0]})) || (FMAResM[30:0] == ans[30:0]))) ))) begin
 | 
			
		||||
    if((FmtE==1'b0)&(FMAFlgM != flags[4:0] | (!wnan & (FMAResM != ans)) | (wnan & ansnan & ~(((XNaNE & (FMAResM[30:0] == {X[30:23],1'b1,X[21:0]})) | (YNaNE & (FMAResM[30:0] == {Y[30:23],1'b1,Y[21:0]}))  | (ZNaNE & (FMAResM[30:0] == {Z[30:23],1'b1,Z[21:0]})) | (FMAResM[30:0] == ans[30:0]))) ))) begin
 | 
			
		||||
        $display( "%h %h %h %h %h %h %h  Wrong ",X,Y, Z, FMAResM, ans, FMAFlgM, flags);
 | 
			
		||||
		if(FMAResM == 64'h8000000000000000) $display( "FMAResM=-zero ");
 | 
			
		||||
		if(~(|X[30:23]) && |X[22:0]) $display( "xdenorm ");
 | 
			
		||||
		if(~(|Y[30:23]) && |Y[22:0]) $display( "ydenorm ");
 | 
			
		||||
		if(~(|Z[30:23]) && |Z[22:0]) $display( "zdenorm ");
 | 
			
		||||
		if(~(|X[30:23]) & |X[22:0]) $display( "xdenorm ");
 | 
			
		||||
		if(~(|Y[30:23]) & |Y[22:0]) $display( "ydenorm ");
 | 
			
		||||
		if(~(|Z[30:23]) & |Z[22:0]) $display( "zdenorm ");
 | 
			
		||||
		if(FMAFlgM[4] != 0) $display( "invld ");
 | 
			
		||||
		if(FMAFlgM[2] != 0) $display( "ovrflw ");
 | 
			
		||||
		if(FMAFlgM[1] != 0) $display( "unflw ");
 | 
			
		||||
		if(FMAResM == 64'hFF80000000000000) $display( "FMAResM=-inf ");
 | 
			
		||||
		if(FMAResM == 64'h7F80000000000000) $display( "FMAResM=+inf ");
 | 
			
		||||
		if(&FMAResM[30:23] && |FMAResM[22:0] && ~FMAResM[22]) $display( "FMAResM=sigNaN ");
 | 
			
		||||
		if(&FMAResM[30:23] && |FMAResM[22:0] && FMAResM[22] ) $display( "FMAResM=qutNaN ");
 | 
			
		||||
		if(&FMAResM[30:23] & |FMAResM[22:0] & ~FMAResM[22]) $display( "FMAResM=sigNaN ");
 | 
			
		||||
		if(&FMAResM[30:23] & |FMAResM[22:0] & FMAResM[22] ) $display( "FMAResM=qutNaN ");
 | 
			
		||||
		if(ans == 64'hFF80000000000000) $display( "ans=-inf ");
 | 
			
		||||
		if(ans == 64'h7F80000000000000) $display( "ans=+inf ");
 | 
			
		||||
		if(&ans[30:23] && |ans[22:0] && ~ans[22] ) $display( "ans=sigNaN ");
 | 
			
		||||
		if(&ans[30:23] && |ans[22:0] && ans[22]) $display( "ans=qutNaN ");
 | 
			
		||||
		if(&ans[30:23] & |ans[22:0] & ~ans[22] ) $display( "ans=sigNaN ");
 | 
			
		||||
		if(&ans[30:23] & |ans[22:0] & ans[22]) $display( "ans=qutNaN ");
 | 
			
		||||
        errors = errors + 1;
 | 
			
		||||
	  if (errors == 10)
 | 
			
		||||
		$stop;
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@ module cvtfp (
 | 
			
		||||
	logic [8:0]	i,NormCnt;
 | 
			
		||||
	always_comb begin
 | 
			
		||||
			i = 0;
 | 
			
		||||
			while (~XManE[52-i] && i <= 52) i = i+1;  // search for leading one 
 | 
			
		||||
			while (~XManE[52-i] & i <= 52) i = i+1;  // search for leading one 
 | 
			
		||||
			NormCnt = i;
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -187,12 +187,12 @@ module fpuaddcvt1 (
 | 
			
		||||
   logic [8:0] j;
 | 
			
		||||
    always_comb begin
 | 
			
		||||
            i = 0;
 | 
			
		||||
            while (~mantissaA[52-i] && $unsigned(i) <= $unsigned(52)) i = i+1;  // search for leading one
 | 
			
		||||
            while (~mantissaA[52-i] & $unsigned(i) <= $unsigned(52)) i = i+1;  // search for leading one
 | 
			
		||||
            ZP_mantissaA = i;
 | 
			
		||||
    end
 | 
			
		||||
    always_comb begin
 | 
			
		||||
            j = 0;
 | 
			
		||||
            while (~mantissaB[52-j] && $unsigned(j) <= $unsigned(52)) j = j+1;  // search for leading one
 | 
			
		||||
            while (~mantissaB[52-j] & $unsigned(j) <= $unsigned(52)) j = j+1;  // search for leading one
 | 
			
		||||
            ZP_mantissaB = j;
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -85,7 +85,7 @@ module fcvt (
 | 
			
		||||
	logic [8:0]	i;
 | 
			
		||||
	always_comb begin
 | 
			
		||||
			i = 0;
 | 
			
		||||
			while (~PosInt[64-1-i] && i < `XLEN) i = i+1;  // search for leading one 
 | 
			
		||||
			while (~PosInt[64-1-i] & i < `XLEN) i = i+1;  // search for leading one 
 | 
			
		||||
			LZResP = i[5:0]+1;    // compute shift count
 | 
			
		||||
	end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -396,7 +396,7 @@ module lzc(
 | 
			
		||||
    logic [8:0] i;
 | 
			
		||||
    always_comb begin
 | 
			
		||||
        i = 0;
 | 
			
		||||
        while (~f[3*`NF+6-i] && $unsigned(i) <= $unsigned(9'd3*9'd`NF+9'd6)) i = i+1;  // search for leading one
 | 
			
		||||
        while (~f[3*`NF+6-i] & $unsigned(i) <= $unsigned(9'd3*9'd`NF+9'd6)) i = i+1;  // search for leading one
 | 
			
		||||
        NormCntE = i;
 | 
			
		||||
    end
 | 
			
		||||
endmodule
 | 
			
		||||
@ -768,7 +768,7 @@ module fmaflags(
 | 
			
		||||
    //   3) 0 * Inf
 | 
			
		||||
 | 
			
		||||
    assign SigNaN = XSNaNM | YSNaNM | ZSNaNM;
 | 
			
		||||
    assign Invalid = SigNaN | ((XInfM || YInfM) & ZInfM & (PSgnM ^ ZSgnEffM) & ~XNaNM & ~YNaNM) | (XZeroM & YInfM) | (YZeroM & XInfM);  
 | 
			
		||||
    assign Invalid = SigNaN | ((XInfM | YInfM) & ZInfM & (PSgnM ^ ZSgnEffM) & ~XNaNM & ~YNaNM) | (XZeroM & YInfM) | (YZeroM & XInfM);  
 | 
			
		||||
   
 | 
			
		||||
    // Set Overflow flag if the number is too big to be represented
 | 
			
		||||
    //      - Don't set the overflow flag if an overflowed result isn't outputed
 | 
			
		||||
 | 
			
		||||
@ -129,7 +129,7 @@ module fsm_fpdiv_pipe (
 | 
			
		||||
	    end // if (start==1'b0)
 | 
			
		||||
	  S65:
 | 
			
		||||
	    begin
 | 
			
		||||
	       if (op_type==1'b0 && P==1'b0) 
 | 
			
		||||
	       if (op_type==1'b0 & P==1'b0) 
 | 
			
		||||
		 begin
 | 
			
		||||
		    done = 1'b0;
 | 
			
		||||
		    divBusy = 1'b1;
 | 
			
		||||
@ -146,7 +146,7 @@ module fsm_fpdiv_pipe (
 | 
			
		||||
		    sel_muxr = 1'b0;
 | 
			
		||||
		    next_state = S1;
 | 
			
		||||
		 end 
 | 
			
		||||
	       else if (op_type==1'b0 && P==1'b1) 
 | 
			
		||||
	       else if (op_type==1'b0 & P==1'b1) 
 | 
			
		||||
		 begin
 | 
			
		||||
		    done = 1'b0;
 | 
			
		||||
		    divBusy = 1'b1;
 | 
			
		||||
@ -163,7 +163,7 @@ module fsm_fpdiv_pipe (
 | 
			
		||||
		    sel_muxr = 1'b0;
 | 
			
		||||
		    next_state = S36;
 | 
			
		||||
		 end 
 | 
			
		||||
	       else if (op_type==1'b1 && P==1'b0) 
 | 
			
		||||
	       else if (op_type==1'b1 & P==1'b0) 
 | 
			
		||||
		 begin
 | 
			
		||||
		    done = 1'b0;
 | 
			
		||||
		    divBusy = 1'b1;
 | 
			
		||||
@ -180,7 +180,7 @@ module fsm_fpdiv_pipe (
 | 
			
		||||
		    sel_muxr = 1'b0;
 | 
			
		||||
		    next_state = S15;
 | 
			
		||||
		 end 
 | 
			
		||||
	       else if (op_type==1'b1 && P==1'b1) 
 | 
			
		||||
	       else if (op_type==1'b1 & P==1'b1) 
 | 
			
		||||
		 begin
 | 
			
		||||
		    done = 1'b0;
 | 
			
		||||
		    divBusy = 1'b1;
 | 
			
		||||
 | 
			
		||||
@ -86,7 +86,7 @@ module csrc #(parameter
 | 
			
		||||
    
 | 
			
		||||
    // Determine when to increment each counter
 | 
			
		||||
    assign CounterEvent[0] = 1'b1;  // MCYCLE always increments
 | 
			
		||||
    assign CounterEvent[1] = 1'b0;  // Counter 0 doesn't exist
 | 
			
		||||
    assign CounterEvent[1] = 1'b0;  // Counter 1 doesn't exist
 | 
			
		||||
    assign CounterEvent[2] = InstrValidNotFlushedM;
 | 
			
		||||
    if(`QEMU) begin: cevent // No other performance counters in QEMU
 | 
			
		||||
      assign CounterEvent[`COUNTERS-1:3] = 0;
 | 
			
		||||
 | 
			
		||||
@ -361,7 +361,7 @@ module    sdModel
 | 
			
		||||
	       next_state =  READ_CMD; 
 | 
			
		||||
	  end
 | 
			
		||||
	  ANALYZE_CMD: begin
 | 
			
		||||
	     if ((ValidCmd  )   && (outDelayCnt >= `outDelay )) // outDelayCnt >= 4 (NCR)
 | 
			
		||||
	     if ((ValidCmd  )   & (outDelayCnt >= `outDelay )) // outDelayCnt >= 4 (NCR)
 | 
			
		||||
	       next_state = SEND_CMD;
 | 
			
		||||
	     else if (inValidCmd)
 | 
			
		||||
	       next_state =  IDLE; 
 | 
			
		||||
@ -387,7 +387,7 @@ module    sdModel
 | 
			
		||||
	  DATA_IDLE: begin
 | 
			
		||||
	     if ((CardStatus[12:9]==`RCV) |  (mult_write == 1'b1) )  
 | 
			
		||||
	       next_datastate = READ_WAITS;
 | 
			
		||||
	     else if ((CardStatus[12:9]==`DATAS )||  (mult_read == 1'b1) ) 
 | 
			
		||||
	     else if ((CardStatus[12:9]==`DATAS )|  (mult_read == 1'b1) ) 
 | 
			
		||||
	       next_datastate = WRITE_DATA;
 | 
			
		||||
	     else
 | 
			
		||||
	       next_datastate = DATA_IDLE; 
 | 
			
		||||
@ -551,7 +551,7 @@ module    sdModel
 | 
			
		||||
		   ResetCard;
 | 
			
		||||
		end    
 | 
			
		||||
		2 : begin //ALL_SEND_CARD_ID (CID)
 | 
			
		||||
		   if (lastCMD != 41 && outDelayCnt==0) begin
 | 
			
		||||
		   if (lastCMD != 41 & outDelayCnt==0) begin
 | 
			
		||||
		      $fdisplay(sdModel_file_desc, "**Error in sequence, ACMD 41 should precede 2 in Start-up state") ;
 | 
			
		||||
		      //$display(sdModel_file_desc, "**Error in sequence, ACMD 41 should precede 2 in Start-up state") ;
 | 
			
		||||
		      CardStatus[3]<=1; // AKE_SEQ_ERROR = ERROR in sequence of authentication process
 | 
			
		||||
@ -561,7 +561,7 @@ module    sdModel
 | 
			
		||||
		   CardStatus[12:9] <=2;
 | 
			
		||||
		end
 | 
			
		||||
		3 :  begin //SEND_RELATIVE_CARD_ADDRESS (RCA)
 | 
			
		||||
		   if (lastCMD != 2 && outDelayCnt==0 ) begin
 | 
			
		||||
		   if (lastCMD != 2 & outDelayCnt==0 ) begin
 | 
			
		||||
		      $fdisplay(sdModel_file_desc, "**Error in sequence, CMD 2 should precede 3 in Start-up state") ;
 | 
			
		||||
		      //$display(sdModel_file_desc, "**Error in sequence, CMD 2 should precede 3 in Start-up state") ;
 | 
			
		||||
		      CardStatus[3]<=1; // AKE_SEQ_ERROR = ERROR in sequence of authentication process
 | 
			
		||||
@ -573,7 +573,7 @@ module    sdModel
 | 
			
		||||
		   cardIdentificationState<=0;
 | 
			
		||||
		end
 | 
			
		||||
		6 : begin         
 | 
			
		||||
		   if (lastCMD == 55 && outDelayCnt==0) begin //ACMD6 - SET_BUS_WIDTH
 | 
			
		||||
		   if (lastCMD == 55 & outDelayCnt==0) begin //ACMD6 - SET_BUS_WIDTH
 | 
			
		||||
		      if (inCmd[9:8] == 2'b10) begin
 | 
			
		||||
			 BusWidth <=4;      
 | 
			
		||||
			 $display(sdModel_file_desc, "**BUS WIDTH 4 ") ;
 | 
			
		||||
@ -627,7 +627,7 @@ module    sdModel
 | 
			
		||||
		end
 | 
			
		||||
		
 | 
			
		||||
		9 : begin // SEND_CARD_SPECIFIC_DATA (CSD)
 | 
			
		||||
		   if (lastCMD != 41 && outDelayCnt==0) begin
 | 
			
		||||
		   if (lastCMD != 41 & outDelayCnt==0) begin
 | 
			
		||||
		      $fdisplay(sdModel_file_desc, "**Error in sequence, ACMD 41 should precede 9 in Start-up state") ;
 | 
			
		||||
		      //$display(sdModel_file_desc, "**Error in sequence, ACMD 41 should precede 9 in Start-up state") ;
 | 
			
		||||
		      CardStatus[3]<=1; // AKE_SEQ_ERROR = ERROR in sequence of authentication process
 | 
			
		||||
@ -743,7 +743,7 @@ module    sdModel
 | 
			
		||||
		41 : // CMD41 - SD_SEND_OCR
 | 
			
		||||
		  begin  
 | 
			
		||||
		     if (cardIdentificationState) begin
 | 
			
		||||
			if (lastCMD != 55 && outDelayCnt==0) begin // CMD41 - Reserved/Invalid
 | 
			
		||||
			if (lastCMD != 55 & outDelayCnt==0) begin // CMD41 - Reserved/Invalid
 | 
			
		||||
			   $fdisplay(sdModel_file_desc, "**Error in sequence, CMD 55 should precede 41 in Start-up state") ;
 | 
			
		||||
			   $display( "**Error in sequence, CMD 55 should precede 41 in Start-up state") ;
 | 
			
		||||
			   CardStatus[3]<=1; // AKE_SEQ_ERROR = ERROR in sequence of authentication process
 | 
			
		||||
@ -755,7 +755,7 @@ module    sdModel
 | 
			
		||||
			   CardStatus[5] <=0;  // not expecting next command to be ACMD
 | 
			
		||||
			   if (Busy==1)
 | 
			
		||||
			     CardStatus[12:9] <=1; // READY
 | 
			
		||||
			end // else: !if(lastCMD != 55 && outDelayCnt==0)
 | 
			
		||||
			end // else: !if(lastCMD != 55 & outDelayCnt==0)
 | 
			
		||||
		     end // if (cardIdentificationState)
 | 
			
		||||
		  end // case: 41
 | 
			
		||||
	      endcase // case (inCmd[45:40])
 | 
			
		||||
@ -799,7 +799,7 @@ module    sdModel
 | 
			
		||||
	   else
 | 
			
		||||
	     cmdOut<=1;  
 | 
			
		||||
	   
 | 
			
		||||
	   if ((cmdWrite>0) &&  (cmdWrite < response_S-8)) begin
 | 
			
		||||
	   if ((cmdWrite>0) &  (cmdWrite < response_S-8)) begin
 | 
			
		||||
	      cmdOut<=response_CMD[135-cmdWrite];
 | 
			
		||||
	      crcIn<=response_CMD[134-cmdWrite];
 | 
			
		||||
	      if (cmdWrite >= response_S-9)
 | 
			
		||||
@ -948,7 +948,7 @@ module    sdModel
 | 
			
		||||
              data_send_index<=1; // Next nibble is lower nibble
 | 
			
		||||
           end
 | 
			
		||||
	   
 | 
			
		||||
           else if ( (transf_cnt>=2) && (transf_cnt<=BLOCK_WIDTH -`CRC_OFF )) begin  // if (2 <= transf_cnt <= 1025)
 | 
			
		||||
           else if ( (transf_cnt>=2) & (transf_cnt<=BLOCK_WIDTH -`CRC_OFF )) begin  // if (2 <= transf_cnt <= 1025)
 | 
			
		||||
              data_send_index<=~data_send_index; //toggle
 | 
			
		||||
              if (!data_send_index) begin //upper nibble
 | 
			
		||||
		 if (BLOCK_WIDTH == 11'd1044) begin
 | 
			
		||||
@ -987,7 +987,7 @@ module    sdModel
 | 
			
		||||
              if ( transf_cnt >=BLOCK_WIDTH-`CRC_OFF ) begin // if (trans_cnt >= 1025)
 | 
			
		||||
		 crcDat_en<=0;                              // Disable CRC16 Generators     
 | 
			
		||||
              end   
 | 
			
		||||
	   end // if ( (transf_cnt>=2) && (transf_cnt<=`BIT_BLOCK-`CRC_OFF ))
 | 
			
		||||
	   end // if ( (transf_cnt>=2) & (transf_cnt<=`BIT_BLOCK-`CRC_OFF ))
 | 
			
		||||
	   
 | 
			
		||||
	   else if (transf_cnt>BLOCK_WIDTH-`CRC_OFF & crc_c!=0) begin // if ((transf_cnt > 1025) and (crc_c /= 0))
 | 
			
		||||
              datOut<= last_din; // if sent all data bitsbut not crc16 bits yet
 | 
			
		||||
@ -1004,7 +1004,7 @@ module    sdModel
 | 
			
		||||
	   else if (transf_cnt==BLOCK_WIDTH-2) begin     // if (transf_cnt = 1042) Last CRC16 bit is 1041
 | 
			
		||||
              datOut<=4'b1111;          // send end bits
 | 
			
		||||
	   end
 | 
			
		||||
	   else if ((transf_cnt !=0) && (crc_c == 0 ))begin // if sent data bits and crc_c points past last bit of CRC
 | 
			
		||||
	   else if ((transf_cnt !=0) & (crc_c == 0 ))begin // if sent data bits and crc_c points past last bit of CRC
 | 
			
		||||
              oeDat<=0; // disable output on DAT bus
 | 
			
		||||
              CardStatus[12:9] <= `TRAN; // put card in transfer state
 | 
			
		||||
           end
 | 
			
		||||
@ -1026,14 +1026,14 @@ module    sdModel
 | 
			
		||||
	   else if(flash_write_cnt == 2)
 | 
			
		||||
	     datOut[0]<=0;
 | 
			
		||||
	   
 | 
			
		||||
	   else if ((flash_write_cnt > 2) && (flash_write_cnt < 7)) begin
 | 
			
		||||
	   else if ((flash_write_cnt > 2) & (flash_write_cnt < 7)) begin
 | 
			
		||||
	      if (crc_ok) 
 | 
			
		||||
		datOut[0] <=okcrctoken[6-flash_write_cnt];
 | 
			
		||||
	      else
 | 
			
		||||
		datOut[0] <= invalidcrctoken[6-flash_write_cnt];
 | 
			
		||||
	      
 | 
			
		||||
	   end
 | 
			
		||||
	   else if  ((flash_write_cnt >= 7) && (flash_write_cnt < 264)) begin
 | 
			
		||||
	   else if  ((flash_write_cnt >= 7) & (flash_write_cnt < 264)) begin
 | 
			
		||||
	      datOut[0]<=0;
 | 
			
		||||
	      
 | 
			
		||||
	      flash_blockwrite_cnt<=flash_blockwrite_cnt+2;
 | 
			
		||||
@ -1045,7 +1045,7 @@ module    sdModel
 | 
			
		||||
	      datOut<=1;      
 | 
			
		||||
	      InbuffStatus<=0;
 | 
			
		||||
	      CardStatus[12:9] <= `TRAN;
 | 
			
		||||
	   end // else: !if((flash_write_cnt >= 7) && (flash_write_cnt < 264))   
 | 
			
		||||
	   end // else: !if((flash_write_cnt >= 7) & (flash_write_cnt < 264))   
 | 
			
		||||
	end // case: WRITE_FLASH
 | 
			
		||||
      endcase // case (dataState)
 | 
			
		||||
   end // always @ (negedge sdClk)
 | 
			
		||||
 | 
			
		||||
@ -379,7 +379,7 @@ module testbench;
 | 
			
		||||
      //$display("len = %d", line``STAGE.len()); \
 | 
			
		||||
      for(index``STAGE = 0; index``STAGE < line``STAGE.len(); index``STAGE++) begin \
 | 
			
		||||
        //$display("char = %s", line``STAGE[index]); \
 | 
			
		||||
        if (line``STAGE[index``STAGE] == " " || line``STAGE[index``STAGE] == "\n") begin \
 | 
			
		||||
        if (line``STAGE[index``STAGE] == " " | line``STAGE[index``STAGE] == "\n") begin \
 | 
			
		||||
          EndIndex``STAGE = index``STAGE; \
 | 
			
		||||
          ExpectedTokens``STAGE[TokenIndex``STAGE] = line``STAGE.substr(StartIndex``STAGE, EndIndex``STAGE-1); \
 | 
			
		||||
          //$display("In Tokenizer %s", line``STAGE.substr(StartIndex, EndIndex-1)); \
 | 
			
		||||
@ -412,7 +412,7 @@ module testbench;
 | 
			
		||||
        // parse CSRs, because there are 1 or more CSRs after the CSR token \
 | 
			
		||||
        // we check if the CSR token or the number of CSRs is greater than 0. \
 | 
			
		||||
        // if so then we want to parse for a CSR. \
 | 
			
		||||
        end else if(ExpectedTokens``STAGE[MarkerIndex``STAGE] == "CSR" || NumCSR``STAGE > 0) begin \
 | 
			
		||||
        end else if(ExpectedTokens``STAGE[MarkerIndex``STAGE] == "CSR" | NumCSR``STAGE > 0) begin \
 | 
			
		||||
          if(ExpectedTokens``STAGE[MarkerIndex``STAGE] == "CSR") begin \
 | 
			
		||||
            // all additional CSR's won't have this token. \
 | 
			
		||||
            MarkerIndex``STAGE++; \
 | 
			
		||||
@ -467,7 +467,7 @@ module testbench;
 | 
			
		||||
      // $display("%tns: ExpectedPCM %x",$time,ExpectedPCM);
 | 
			
		||||
      // $display("%tns: ExpectedPCE %x",$time,ExpectedPCE);
 | 
			
		||||
      // $display("%tns: ExpectedPCW %x",$time,ExpectedPCW);
 | 
			
		||||
      if((ExpectedPCE != MepcExpected) & ((MepcExpected - ExpectedPCE) * (MepcExpected - ExpectedPCE) <= 200) || ~dut.core.ieu.c.InstrValidM) begin
 | 
			
		||||
      if((ExpectedPCE != MepcExpected) & ((MepcExpected - ExpectedPCE) * (MepcExpected - ExpectedPCE) <= 200) | ~dut.core.ieu.c.InstrValidM) begin
 | 
			
		||||
        RequestDelayedMIP <= 1;
 | 
			
		||||
        $display("%tns: Requesting Delayed MIP. Current MEPC value is %x",$time,MepcExpected);
 | 
			
		||||
      end else begin // update MIP immediately
 | 
			
		||||
@ -584,10 +584,10 @@ module testbench;
 | 
			
		||||
        if (MemOpW.substr(0,2) == "Mem") begin
 | 
			
		||||
          if(`DEBUG_TRACE >= 4) $display("\tIEUAdrW: %016x ? expected: %016x", IEUAdrW, ExpectedIEUAdrW);
 | 
			
		||||
          `checkEQ("IEUAdrW",IEUAdrW,ExpectedIEUAdrW)
 | 
			
		||||
          if(MemOpW == "MemR" || MemOpW == "MemRW") begin
 | 
			
		||||
          if(MemOpW == "MemR" | MemOpW == "MemRW") begin
 | 
			
		||||
            if(`DEBUG_TRACE >= 4) $display("\tReadDataW: %016x ? expected: %016x", dut.core.ieu.dp.ReadDataW, ExpectedMemReadDataW);
 | 
			
		||||
            `checkEQ("ReadDataW",dut.core.ieu.dp.ReadDataW,ExpectedMemReadDataW)
 | 
			
		||||
          end else if(MemOpW == "MemW" || MemOpW == "MemRW") begin
 | 
			
		||||
          end else if(MemOpW == "MemW" | MemOpW == "MemRW") begin
 | 
			
		||||
            if(`DEBUG_TRACE >= 4) $display("\tWriteDataW: %016x ? expected: %016x", WriteDataW, ExpectedMemWriteDataW);
 | 
			
		||||
            `checkEQ("WriteDataW",ExpectedMemWriteDataW,ExpectedMemWriteDataW)
 | 
			
		||||
          end
 | 
			
		||||
@ -680,7 +680,7 @@ module testbench;
 | 
			
		||||
          PTE = dut.uncore.ram.ram.RAM[PAdr >> 3];
 | 
			
		||||
          PTE_R = PTE[1];
 | 
			
		||||
          PTE_X = PTE[3];
 | 
			
		||||
          if (PTE_R || PTE_X) begin
 | 
			
		||||
          if (PTE_R | PTE_X) begin
 | 
			
		||||
            // Leaf page found
 | 
			
		||||
            break;
 | 
			
		||||
          end else begin
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user