forked from Github_Repos/cvw
		
	Temporary exe2memfile0.pl script to support starting addresses of 0.
This commit is contained in:
		
							parent
							
								
									e1842c8da6
								
							
						
					
					
						commit
						2b0f7cdd42
					
				@ -58,7 +58,7 @@ for(my $i=0; $i<=$#ARGV; $i++) {
 | 
				
			|||||||
                    for (my $i=0; $i<$len/2; $i++) {
 | 
					                    for (my $i=0; $i<$len/2; $i++) {
 | 
				
			||||||
                        $memfilebytes[$address+$i] = substr($instr, $len-2-2*$i, 2);
 | 
					                        $memfilebytes[$address+$i] = substr($instr, $len-2-2*$i, 2);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    print ("address $address $instr\n");
 | 
					#                    print ("address $address $instr\n");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if (/Disassembly of section .data:/) { $mode = 1;}
 | 
							if (/Disassembly of section .data:/) { $mode = 1;}
 | 
				
			||||||
            } elsif ($mode == 1) { # Parse data segment
 | 
					            } elsif ($mode == 1) { # Parse data segment
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										144
									
								
								wally-pipelined/bin/exe2memfile0.pl
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										144
									
								
								wally-pipelined/bin/exe2memfile0.pl
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,144 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/perl -w
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# exe2memfile.pl
 | 
				
			||||||
 | 
					# David_Harris@hmc.edu 26 November 2020
 | 
				
			||||||
 | 
					# Converts an executable file to a series of 32-bit hex instructions
 | 
				
			||||||
 | 
					# to read into a Verilog simulation with $readmemh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use File::stat;
 | 
				
			||||||
 | 
					use IO::Handle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if ($#ARGV == -1) {
 | 
				
			||||||
 | 
					    die("Usage: $0 executable_file");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# array to hold contents of memory file
 | 
				
			||||||
 | 
					my @memfilebytes = (0)*16384*4;
 | 
				
			||||||
 | 
					my $maxaddress = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					STDOUT->autoflush(1);
 | 
				
			||||||
 | 
					# *** Ross Thompson I think there is a bug here needs to be +1
 | 
				
			||||||
 | 
					print ("Processing $#ARGV memfiles: ");
 | 
				
			||||||
 | 
					my $frac = $#ARGV/10;
 | 
				
			||||||
 | 
					for(my $i=0; $i<=$#ARGV; $i++) {
 | 
				
			||||||
 | 
					    if ($i < 10 || $i % $frac == 0) { print ("$i ") };
 | 
				
			||||||
 | 
					    my $fname = $ARGV[$i];
 | 
				
			||||||
 | 
					#    print "fname = $fname";
 | 
				
			||||||
 | 
					    my $ofile = $fname.".objdump";
 | 
				
			||||||
 | 
					    my $memfile = $fname.".memfile";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $needsprocessing = 0;
 | 
				
			||||||
 | 
					    if (!-e $memfile) { $needsprocessing = 1; } # create memfile if it doesn't exist
 | 
				
			||||||
 | 
					    else {
 | 
				
			||||||
 | 
					        my $osb = stat($ofile) || die("Can't stat $ofile");
 | 
				
			||||||
 | 
					        my $msb = stat($memfile) || die("Can't stat $memfile");
 | 
				
			||||||
 | 
					        my $otime = $osb->mtime;
 | 
				
			||||||
 | 
					        my $mtime = $msb->mtime;
 | 
				
			||||||
 | 
					        if ($otime > $mtime) { $needsprocessing = 1; } # is memfile out of date?
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if ($needsprocessing == 1) {
 | 
				
			||||||
 | 
					        open(FILE, $ofile) || die("Can't read $ofile");
 | 
				
			||||||
 | 
					        my $mode = 0; # parse for code
 | 
				
			||||||
 | 
					        my $address;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # initialize to all zeros;
 | 
				
			||||||
 | 
						# *** need to fix the zeroing range.  Not always 64K
 | 
				
			||||||
 | 
					        for (my $i=0; $i < 65536*4; $i++) {
 | 
				
			||||||
 | 
					            $memfilebytes[$i] = "00";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while(<FILE>) {
 | 
				
			||||||
 | 
					            if ($mode == 0) { # Parse code
 | 
				
			||||||
 | 
					#	    print("Examining $_\n");
 | 
				
			||||||
 | 
							if (/^\s*(\S{1,16}):\s+(\S+)\s+/) {
 | 
				
			||||||
 | 
					                    $address = &fixadr($1);
 | 
				
			||||||
 | 
					                    my $instr = $2;
 | 
				
			||||||
 | 
					                    my $len = length($instr);
 | 
				
			||||||
 | 
					                    for (my $i=0; $i<$len/2; $i++) {
 | 
				
			||||||
 | 
					                        $memfilebytes[$address+$i] = substr($instr, $len-2-2*$i, 2);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					#                    print ("address $address $instr\n");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (/Disassembly of section .data:/) { $mode = 1;}
 | 
				
			||||||
 | 
					            } elsif ($mode == 1) { # Parse data segment
 | 
				
			||||||
 | 
					                if (/^\s*(\S{1,16}):\s+(.*)/) {
 | 
				
			||||||
 | 
					                    $address = &fixadr($1);
 | 
				
			||||||
 | 
					#		        print "addresss $address maxaddress $maxaddress\n";
 | 
				
			||||||
 | 
							    if ($address > $maxaddress) { $maxaddress = $address; }
 | 
				
			||||||
 | 
					                    my $line = $2;
 | 
				
			||||||
 | 
					                    # merge chunks with spaces
 | 
				
			||||||
 | 
							    # *** might need to change
 | 
				
			||||||
 | 
					                    $line =~ s/(\S)\s(\S)/$1$2/g;
 | 
				
			||||||
 | 
					                    # strip off comments
 | 
				
			||||||
 | 
					                    $line =~ /^(\S*)/;
 | 
				
			||||||
 | 
					                    $payload = $1;
 | 
				
			||||||
 | 
					                    &emitData($address, $payload);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (/Disassembly of section .comment:/) { $mode = 2; }
 | 
				
			||||||
 | 
						    } elsif ($mode == 2) { # parse the comment section
 | 
				
			||||||
 | 
					                if (/Disassembly of section .riscv.attributes:/) { $mode = 3; }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        close(FILE);
 | 
				
			||||||
 | 
					        $maxaddress += 32; # pad some zeros at the end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # print to memory file
 | 
				
			||||||
 | 
						# *** this is a problem
 | 
				
			||||||
 | 
					        if ($fname =~ /rv32/) {
 | 
				
			||||||
 | 
					        open(MEMFILE, ">$memfile") || die("Can't write $memfile");
 | 
				
			||||||
 | 
					        for (my $i=0; $i<= $maxaddress; $i = $i + 4) {
 | 
				
			||||||
 | 
					            for ($j=3; $j>=0; $j--) {
 | 
				
			||||||
 | 
					            print MEMFILE "$memfilebytes[$i+$j]";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            print MEMFILE "\n";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        close(MEMFILE);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					        open(MEMFILE, ">$memfile") || die("Can't write $memfile");
 | 
				
			||||||
 | 
					        for (my $i=0; $i<= $maxaddress; $i = $i + 8) {
 | 
				
			||||||
 | 
					            for ($j=7; $j>=0; $j--) {
 | 
				
			||||||
 | 
					            print MEMFILE "$memfilebytes[$i+$j]";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            print MEMFILE "\n";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        close(MEMFILE);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					print("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub emitData {
 | 
				
			||||||
 | 
					    # print the data portion of the ELF into a memroy file, including 0s for empty stuff
 | 
				
			||||||
 | 
					    # deal with endianness
 | 
				
			||||||
 | 
					    my $address = shift;
 | 
				
			||||||
 | 
					    my $payload = shift;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#    print("Emitting data.  address = $address payload = $payload\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    my $len = length($payload);
 | 
				
			||||||
 | 
					    if ($len <= 8) { 
 | 
				
			||||||
 | 
					        # print word or halfword
 | 
				
			||||||
 | 
					        for(my $i=0; $i<$len/2; $i++) {
 | 
				
			||||||
 | 
					            my $adr = $address+$i;
 | 
				
			||||||
 | 
					            my $b = substr($payload, $len-2-2*$i, 2);
 | 
				
			||||||
 | 
					            $memfilebytes[$adr] = $b;
 | 
				
			||||||
 | 
					#            print(" $adr $b\n");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }  elsif ($len == 12) {
 | 
				
			||||||
 | 
					        # weird case of three halfwords on line
 | 
				
			||||||
 | 
					        &emitData($address, substr($payload, 0, 4));
 | 
				
			||||||
 | 
					        &emitData($address+2, substr($payload, 4, 4));
 | 
				
			||||||
 | 
					        &emitData($address+4, substr($payload, 8, 4));
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        &emitData($address, substr($payload, 0, 8));
 | 
				
			||||||
 | 
					        &emitData($address+4, substr($payload, 8, $len-8));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					sub fixadr {
 | 
				
			||||||
 | 
					    # strip off leading 8 from address and convert to decimal
 | 
				
			||||||
 | 
					    # if the leading 8 is not present don't remove.
 | 
				
			||||||
 | 
					    my $adr = shift;
 | 
				
			||||||
 | 
					    return hex($adr);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1024
									
								
								wally-pipelined/config/rv64BP/BTBPredictor.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1024
									
								
								wally-pipelined/config/rv64BP/BTBPredictor.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1024
									
								
								wally-pipelined/config/rv64BP/twoBitPredictor.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1024
									
								
								wally-pipelined/config/rv64BP/twoBitPredictor.txt
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										99
									
								
								wally-pipelined/config/rv64BP/wally-config.vh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								wally-pipelined/config/rv64BP/wally-config.vh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					//////////////////////////////////////////
 | 
				
			||||||
 | 
					// wally-config.vh
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Written: David_Harris@hmc.edu 4 January 2021
 | 
				
			||||||
 | 
					// Modified: Brett Mathis
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Purpose: Specify which features are configured
 | 
				
			||||||
 | 
					//          Macros to determine which modes are supported based on MISA
 | 
				
			||||||
 | 
					// 
 | 
				
			||||||
 | 
					// A component of the Wally configurable RISC-V project.
 | 
				
			||||||
 | 
					// 
 | 
				
			||||||
 | 
					// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 
 | 
				
			||||||
 | 
					// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software 
 | 
				
			||||||
 | 
					// is furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
 | 
				
			||||||
 | 
					// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 
 | 
				
			||||||
 | 
					// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT 
 | 
				
			||||||
 | 
					// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// RV32 or RV64: XLEN = 32 or 64
 | 
				
			||||||
 | 
					`define XLEN 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//`define MISA (32'h00000104)
 | 
				
			||||||
 | 
					`define MISA (32'h00000104 | 1<<5 | 1<<18 | 1 << 20)
 | 
				
			||||||
 | 
					`define A_SUPPORTED ((`MISA >> 0) % 2 == 1)
 | 
				
			||||||
 | 
					`define C_SUPPORTED ((`MISA >> 2) % 2 == 1)
 | 
				
			||||||
 | 
					`define D_SUPPORTED ((`MISA >> 3) % 2 == 1)
 | 
				
			||||||
 | 
					`define F_SUPPORTED ((`MISA >> 5) % 2 == 1)
 | 
				
			||||||
 | 
					`define M_SUPPORTED ((`MISA >> 12) % 2 == 1)
 | 
				
			||||||
 | 
					`define S_SUPPORTED ((`MISA >> 18) % 2 == 1)
 | 
				
			||||||
 | 
					`define U_SUPPORTED ((`MISA >> 20) % 2 == 1)
 | 
				
			||||||
 | 
					`define ZCSR_SUPPORTED 1
 | 
				
			||||||
 | 
					`define COUNTERS 31
 | 
				
			||||||
 | 
					`define ZCOUNTERS_SUPPORTED 1
 | 
				
			||||||
 | 
					// N-mode user-level interrupts are depricated per Andrew Waterman 1/13/21
 | 
				
			||||||
 | 
					//`define N_SUPPORTED ((MISA >> 13) % 2 == 1)
 | 
				
			||||||
 | 
					`define N_SUPPORTED 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`define M_MODE (2'b11)
 | 
				
			||||||
 | 
					`define S_MODE (2'b01)
 | 
				
			||||||
 | 
					`define U_MODE (2'b00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Microarchitectural Features
 | 
				
			||||||
 | 
					`define UARCH_PIPELINED 1
 | 
				
			||||||
 | 
					`define UARCH_SUPERSCALR 0
 | 
				
			||||||
 | 
					`define UARCH_SINGLECYCLE 0
 | 
				
			||||||
 | 
					`define MEM_DCACHE 0
 | 
				
			||||||
 | 
					`define MEM_DTIM 1
 | 
				
			||||||
 | 
					`define MEM_ICACHE 0
 | 
				
			||||||
 | 
					`define MEM_VIRTMEM 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Address space
 | 
				
			||||||
 | 
					`define RESET_VECTOR 64'h0000000000000000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Bus Interface width
 | 
				
			||||||
 | 
					`define AHBW 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Peripheral Addresses
 | 
				
			||||||
 | 
					// Peripheral memory space extends from BASE to BASE+RANGE
 | 
				
			||||||
 | 
					// Range should be a thermometer code with 0's in the upper bits and 1s in the lower bits
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`define BOOTTIMBASE   32'h00080000
 | 
				
			||||||
 | 
					`define BOOTTIMRANGE  32'h00003FFF
 | 
				
			||||||
 | 
					`define TIMBASE       32'h00000000
 | 
				
			||||||
 | 
					`define TIMRANGE      32'h0007FFFF
 | 
				
			||||||
 | 
					`define CLINTBASE  32'h02000000
 | 
				
			||||||
 | 
					`define CLINTRANGE 32'h0000FFFF
 | 
				
			||||||
 | 
					`define GPIOBASE   32'h10012000
 | 
				
			||||||
 | 
					`define GPIORANGE  32'h000000FF
 | 
				
			||||||
 | 
					`define UARTBASE   32'h10000000
 | 
				
			||||||
 | 
					`define UARTRANGE  32'h00000007
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Test modes
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Tie GPIO outputs back to inputs
 | 
				
			||||||
 | 
					`define GPIO_LOOPBACK_TEST 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Busybear special CSR config to match OVPSim
 | 
				
			||||||
 | 
					`define OVPSIM_CSR_CONFIG 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Hardware configuration
 | 
				
			||||||
 | 
					`define UART_PRESCALE 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* verilator lint_off STMTDLY */
 | 
				
			||||||
 | 
					/* verilator lint_off WIDTH */
 | 
				
			||||||
 | 
					/* verilator lint_off ASSIGNDLY */
 | 
				
			||||||
 | 
					/* verilator lint_off PINCONNECTEMPTY */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`define TWO_BIT_PRELOAD "../config/rv64icfd/twoBitPredictor.txt"
 | 
				
			||||||
 | 
					`define BTB_PRELOAD "../config/rv64icfd/BTBPredictor.txt"
 | 
				
			||||||
 | 
					`define BPTYPE "BPGSHARE" // BPGLOBAL or BPTWOBIT or BPGSHARE
 | 
				
			||||||
 | 
					`define TESTSBP 1
 | 
				
			||||||
							
								
								
									
										31
									
								
								wally-pipelined/config/rv64BP/wally-constants.vh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								wally-pipelined/config/rv64BP/wally-constants.vh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					//////////////////////////////////////////
 | 
				
			||||||
 | 
					// wally-constants.vh
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Written: tfleming@hmc.edu 4 March 2021
 | 
				
			||||||
 | 
					// Modified:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Purpose: Specify certain constants defined in the RISC-V 64-bit architecture.
 | 
				
			||||||
 | 
					//          These macros should not be changed, except in the event of an
 | 
				
			||||||
 | 
					//          update to the architecture or particularly special circumstances.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// A component of the Wally configurable RISC-V project.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Copyright (C) 2021 Harvey Mudd College & Oklahoma State University
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
 | 
				
			||||||
 | 
					// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
 | 
				
			||||||
 | 
					// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
 | 
				
			||||||
 | 
					// is furnished to do so, subject to the following conditions:
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 | 
				
			||||||
 | 
					// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 | 
				
			||||||
 | 
					// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
 | 
				
			||||||
 | 
					// OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 | 
				
			||||||
 | 
					///////////////////////////////////////////
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Virtual Memory Constants (sv39)
 | 
				
			||||||
 | 
					`define VPN_BITS 27
 | 
				
			||||||
 | 
					`define PPN_BITS 44
 | 
				
			||||||
 | 
					`define PA_BITS  56
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user