mirror of
				https://github.com/openhwgroup/cvw
				synced 2025-02-11 06:05:49 +00:00 
			
		
		
		
	Added F_SUPPORTED flag to disable floating point unit when not in MISA
This commit is contained in:
		
							parent
							
								
									ac163e091c
								
							
						
					
					
						commit
						5f91b339aa
					
				@ -9,7 +9,8 @@ add wave /testbench/clk
 | 
				
			|||||||
add wave /testbench/reset
 | 
					add wave /testbench/reset
 | 
				
			||||||
add wave -divider
 | 
					add wave -divider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
add wave /testbench/dut/hart/DataStall
 | 
					#add wave /testbench/dut/hart/DataStall
 | 
				
			||||||
 | 
					add wave /testbench/debug
 | 
				
			||||||
add wave /testbench/dut/hart/StallF
 | 
					add wave /testbench/dut/hart/StallF
 | 
				
			||||||
add wave /testbench/dut/hart/StallD
 | 
					add wave /testbench/dut/hart/StallD
 | 
				
			||||||
add wave /testbench/dut/hart/StallE
 | 
					add wave /testbench/dut/hart/StallE
 | 
				
			||||||
 | 
				
			|||||||
@ -44,9 +44,8 @@ module fpu (
 | 
				
			|||||||
  output logic [`XLEN-1:0] FPUResultW);      // FPU result
 | 
					  output logic [`XLEN-1:0] FPUResultW);      // FPU result
 | 
				
			||||||
// *** change FMA to do 16 - 32 - 64 - 128 FEXPBITS 
 | 
					// *** change FMA to do 16 - 32 - 64 - 128 FEXPBITS 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /*generate
 | 
					  generate
 | 
				
			||||||
     if (`F_SUPPORTED) begin */
 | 
					     if (`F_SUPPORTED) begin 
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
      // control logic signal instantiation
 | 
					      // control logic signal instantiation
 | 
				
			||||||
      logic 		   FWriteEnD, FWriteEnE, FWriteEnM, FWriteEnW;              // FP register write enable
 | 
					      logic 		   FWriteEnD, FWriteEnE, FWriteEnM, FWriteEnW;              // FP register write enable
 | 
				
			||||||
      logic [2:0] 	FrmD, FrmE, FrmM;                                  // FP rounding mode
 | 
					      logic [2:0] 	FrmD, FrmE, FrmM;                                  // FP rounding mode
 | 
				
			||||||
@ -401,8 +400,7 @@ module fpu (
 | 
				
			|||||||
         //*** put into mem stage
 | 
					         //*** put into mem stage
 | 
				
			||||||
         SetFflagsM = FPUFlagsW;      
 | 
					         SetFflagsM = FPUFlagsW;      
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					   end else begin // no F_SUPPORTED; tie outputs low
 | 
				
			||||||
   /* end else begin
 | 
					 | 
				
			||||||
     assign FStallD = 0;
 | 
					     assign FStallD = 0;
 | 
				
			||||||
     assign FWriteIntE = 0; 
 | 
					     assign FWriteIntE = 0; 
 | 
				
			||||||
     assign FWriteIntM = 0;
 | 
					     assign FWriteIntM = 0;
 | 
				
			||||||
@ -410,11 +408,11 @@ module fpu (
 | 
				
			|||||||
     assign FWriteDataE = 0;
 | 
					     assign FWriteDataE = 0;
 | 
				
			||||||
     assign FIntResM = 0;
 | 
					     assign FIntResM = 0;
 | 
				
			||||||
     assign FDivBusyE = 0;
 | 
					     assign FDivBusyE = 0;
 | 
				
			||||||
     assign IllegalFPUInstrD = 0;
 | 
					     assign IllegalFPUInstrD = 1;
 | 
				
			||||||
     assign SetFflagsM = 0;
 | 
					     assign SetFflagsM = 0;
 | 
				
			||||||
     assign FPUResultW = 0;
 | 
					     assign FPUResultW = 0;
 | 
				
			||||||
   end
 | 
					   end
 | 
				
			||||||
  endgenerate*/
 | 
					  endgenerate 
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
endmodule // fpu
 | 
					endmodule // fpu
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -515,6 +515,9 @@ string tests32f[] = '{
 | 
				
			|||||||
  logic             HCLK, HRESETn;
 | 
					  logic             HCLK, HRESETn;
 | 
				
			||||||
  logic [`XLEN-1:0] PCW;
 | 
					  logic [`XLEN-1:0] PCW;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  logic [`XLEN-1:0] debug;
 | 
				
			||||||
 | 
					  assign debug = dut.uncore.dtim.RAM[536872960];
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  flopenr #(`XLEN) PCWReg(clk, reset, ~dut.hart.ieu.dp.StallW, dut.hart.ifu.PCM, PCW);
 | 
					  flopenr #(`XLEN) PCWReg(clk, reset, ~dut.hart.ieu.dp.StallW, dut.hart.ifu.PCM, PCW);
 | 
				
			||||||
  flopenr  #(32)   InstrWReg(clk, reset, ~dut.hart.ieu.dp.StallW,  dut.hart.ifu.InstrM, InstrW);
 | 
					  flopenr  #(32)   InstrWReg(clk, reset, ~dut.hart.ieu.dp.StallW,  dut.hart.ifu.InstrM, InstrW);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -656,10 +659,7 @@ string tests32f[] = '{
 | 
				
			|||||||
        // Check errors
 | 
					        // Check errors
 | 
				
			||||||
        errors = (i == SIGNATURESIZE+1); // error if file is empty
 | 
					        errors = (i == SIGNATURESIZE+1); // error if file is empty
 | 
				
			||||||
        i = 0;
 | 
					        i = 0;
 | 
				
			||||||
        if (`XLEN == 32)
 | 
					        testadr = (`TIM_BASE+tests[test+1].atohex())/(`XLEN/8);
 | 
				
			||||||
          testadr = (`TIM_BASE+tests[test+1].atohex())/4;
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
          testadr = (`TIM_BASE+tests[test+1].atohex())/8;
 | 
					 | 
				
			||||||
        /* verilator lint_off INFINITELOOP */
 | 
					        /* verilator lint_off INFINITELOOP */
 | 
				
			||||||
        while (signature[i] !== 'bx) begin
 | 
					        while (signature[i] !== 'bx) begin
 | 
				
			||||||
          //$display("signature[%h] = %h", i, signature[i]);
 | 
					          //$display("signature[%h] = %h", i, signature[i]);
 | 
				
			||||||
@ -669,14 +669,16 @@ string tests32f[] = '{
 | 
				
			|||||||
              // kind of hacky test for garbage right now
 | 
					              // kind of hacky test for garbage right now
 | 
				
			||||||
              errors = errors+1;
 | 
					              errors = errors+1;
 | 
				
			||||||
              $display("  Error on test %s result %d: adr = %h sim = %h, signature = %h", 
 | 
					              $display("  Error on test %s result %d: adr = %h sim = %h, signature = %h", 
 | 
				
			||||||
                    tests[test], i, (testadr+i)*`XLEN/8, dut.uncore.dtim.RAM[testadr+i], signature[i]);
 | 
					                    tests[test], i, (testadr+i)*(`XLEN/8), dut.uncore.dtim.RAM[testadr+i], signature[i]);
 | 
				
			||||||
              $stop;//***debug
 | 
					              $stop;//***debug
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
          i = i + 1;
 | 
					          i = i + 1;
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
        /* verilator lint_on INFINITELOOP */
 | 
					        /* verilator lint_on INFINITELOOP */
 | 
				
			||||||
        if (errors == 0) $display("%s succeeded.  Brilliant!!!", tests[test]);
 | 
					        if (errors == 0) begin
 | 
				
			||||||
 | 
					          $display("%s succeeded.  Brilliant!!!", tests[test]);
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
        else begin
 | 
					        else begin
 | 
				
			||||||
          $display("%s failed with %d errors. :(", tests[test], errors);
 | 
					          $display("%s failed with %d errors. :(", tests[test], errors);
 | 
				
			||||||
          totalerrors = totalerrors+1;
 | 
					          totalerrors = totalerrors+1;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user