Explorar o código

Roll back picorv32 hacks for unaligned memory support

Let's make things work before trying to optimize...
H. Peter Anvin %!s(int64=3) %!d(string=hai) anos
pai
achega
c78f9d909d
Modificáronse 21 ficheiros con 3411 adicións e 4783 borrados
  1. 3 1
      Makefile
  2. 1 0
      fpga/Makefile
  3. 20 42
      fpga/fast_mem.sv
  4. 192 0
      fpga/ip/fastmem_ip.v
  5. 6 5
      fpga/max80.qsf
  6. 42 29
      fpga/max80.sv
  7. 2548 2555
      fpga/output_files/max80.jam
  8. BIN=BIN
      fpga/output_files/max80.jbc
  9. BIN=BIN
      fpga/output_files/max80.jic
  10. 1 1
      fpga/output_files/max80.map
  11. BIN=BIN
      fpga/output_files/max80.pof
  12. BIN=BIN
      fpga/output_files/max80.sof
  13. 76 103
      fpga/picorv32.v
  14. 5 12
      fw/Makefile
  15. 0 508
      fw/boot.0.mif
  16. 0 508
      fw/boot.1.mif
  17. 0 508
      fw/boot.2.mif
  18. 0 508
      fw/boot.3.mif
  19. 507 0
      fw/boot.mif
  20. 9 0
      riscv-opts.mk
  21. 1 3
      tools/Makefile

+ 3 - 1
Makefile

@@ -1,3 +1,5 @@
+export PATH := $(CURDIR)/tools/gnu:$(PATH)
+
 SUBDIRS = tools fw fpga
 
 all clean spotless :
@@ -14,6 +16,6 @@ fpga: fw
 local.all:
 
 local.clean:
-	rm -f *~ ./\#*
+	rm -f *~ ./\#* \# *.bak
 
 local.spotless: local.clean

+ 1 - 0
fpga/Makefile

@@ -59,6 +59,7 @@ $(outdir)/%.jic:  %jic.cof $(outdir)/%.sof
 
 clean:
 	rm -rf db incremental_db simulation \
+	greybox_tmp */greybox_tmp \
 	$(outdir)/*.rpt $(outdir)/*.rpt \
 	$(outdir)/*.summary $(outdir)/*.smsg \
 	$(outdir)/*.htm $(outdir)/*.htm_files \

+ 20 - 42
fpga/fast_mem.sv

@@ -1,50 +1,28 @@
 //
 // Fast local memory for the internal CPU.
-// This allows unaligned accesses as given by the byte enables.
+// This should be parameterized (again)...
 //
 
-module fast_mem #(
-		  parameter bits = 11, // Power of 2 number of words
-		  parameter string mif
-		  )
+module fast_mem
    (
-    input	      rst_n,
-    input	      clk,
-    input	      read,
-    input	      write,
-    input [7:0]       be,
-    input [bits-1:0]  addr,
-    input [31:0]      wdata,
-    output reg [31:0] rdata
+    input 	  rst_n,
+    input 	  clk,
+    input 	  write,
+    input 	  read,
+    input [3:0]   wstrb,
+    input [11:0]  addr,
+    input [31:0]  wdata,
+    output [31:0] rdata
     );
 
-   localparam words    = 1 << bits;
-
-   // The actual memory arrays
-   (* ramstyle = "no_rw_check", ram_init_file = {mif, ".0.mif"} *)
-   reg [7:0]	      mem0[0:words-1];
-   (* ramstyle = "no_rw_check", ram_init_file = {mif, ".1.mif"} *)
-   reg [7:0]	      mem1[0:words-1];
-   (* ramstyle = "no_rw_check", ram_init_file = {mif, ".2.mif"} *)
-   reg [7:0]	      mem2[0:words-1];
-   (* ramstyle = "no_rw_check", ram_init_file = {mif, ".3.mif"} *)
-   reg [7:0]	      mem3[0:words-1];
-
-   always @(posedge clk)
-     begin
-	// Ignore the write signal if reset is active!
-	if (write & rst_n)
-	  begin
-	     if (be[0] | be[4]) mem0[addr + be[4]] <= wdata[ 7: 0];
-	     if (be[1] | be[5]) mem1[addr + be[5]] <= wdata[15: 8];
-	     if (be[2] | be[6]) mem2[addr + be[6]] <= wdata[23:16];
-	     if (be[3] | be[7]) mem3[addr + be[7]] <= wdata[31:24];
-	  end
-
-	rdata[ 7: 0] <= mem0[addr + be[4]];
-	rdata[15: 8] <= mem1[addr + be[5]];
-	rdata[23:16] <= mem2[addr + be[6]];
-	rdata[31:24] <= mem3[addr + be[7]];
-     end // always_ff @ (posedge clk)
-
+   fastmem_ip ip (
+		  .aclr ( ~rst_n ),
+		  .address ( addr ),
+		  .byteena ( wstrb ),
+		  .clock ( clk ),
+		  .data ( wdata ),
+		  .rden ( read ),
+		  .wren ( write ),
+		  .q ( rdata )
+		  );
 endmodule // fast_mem

+ 192 - 0
fpga/ip/fastmem_ip.v

@@ -0,0 +1,192 @@
+// megafunction wizard: %RAM: 1-PORT%
+// GENERATION: STANDARD
+// VERSION: WM1.0
+// MODULE: altsyncram 
+
+// ============================================================
+// File Name: fastmem_ip.v
+// Megafunction Name(s):
+// 			altsyncram
+//
+// Simulation Library Files(s):
+// 			altera_mf
+// ============================================================
+// ************************************************************
+// THIS IS A WIZARD-GENERATED FILE. DO NOT EDIT THIS FILE!
+//
+// 20.1.1 Build 720 11/11/2020 SJ Lite Edition
+// ************************************************************
+
+
+//Copyright (C) 2020  Intel Corporation. All rights reserved.
+//Your use of Intel Corporation's design tools, logic functions 
+//and other software and tools, and any partner logic 
+//functions, and any output files from any of the foregoing 
+//(including device programming or simulation files), and any 
+//associated documentation or information are expressly subject 
+//to the terms and conditions of the Intel Program License 
+//Subscription Agreement, the Intel Quartus Prime License Agreement,
+//the Intel FPGA IP License Agreement, or other applicable license
+//agreement, including, without limitation, that your use is for
+//the sole purpose of programming logic devices manufactured by
+//Intel and sold by Intel or its authorized distributors.  Please
+//refer to the applicable agreement for further details, at
+//https://fpgasoftware.intel.com/eula.
+
+
+// synopsys translate_off
+`timescale 1 ps / 1 ps
+// synopsys translate_on
+module fastmem_ip (
+	aclr,
+	address,
+	byteena,
+	clock,
+	data,
+	rden,
+	wren,
+	q);
+
+	input	  aclr;
+	input	[10:0]  address;
+	input	[3:0]  byteena;
+	input	  clock;
+	input	[31:0]  data;
+	input	  rden;
+	input	  wren;
+	output	[31:0]  q;
+`ifndef ALTERA_RESERVED_QIS
+// synopsys translate_off
+`endif
+	tri0	  aclr;
+	tri1	[3:0]  byteena;
+	tri1	  clock;
+	tri1	  rden;
+`ifndef ALTERA_RESERVED_QIS
+// synopsys translate_on
+`endif
+
+	wire [31:0] sub_wire0;
+	wire [31:0] q = sub_wire0[31:0];
+
+	altsyncram	altsyncram_component (
+				.aclr0 (aclr),
+				.address_a (address),
+				.byteena_a (byteena),
+				.clock0 (clock),
+				.data_a (data),
+				.rden_a (rden),
+				.wren_a (wren),
+				.q_a (sub_wire0),
+				.aclr1 (1'b0),
+				.address_b (1'b1),
+				.addressstall_a (1'b0),
+				.addressstall_b (1'b0),
+				.byteena_b (1'b1),
+				.clock1 (1'b1),
+				.clocken0 (1'b1),
+				.clocken1 (1'b1),
+				.clocken2 (1'b1),
+				.clocken3 (1'b1),
+				.data_b (1'b1),
+				.eccstatus (),
+				.q_b (),
+				.rden_b (1'b1),
+				.wren_b (1'b0));
+	defparam
+		altsyncram_component.byte_size = 8,
+		altsyncram_component.clock_enable_input_a = "BYPASS",
+		altsyncram_component.clock_enable_output_a = "BYPASS",
+		altsyncram_component.init_file = "../fw/boot.mif",
+		altsyncram_component.intended_device_family = "Cyclone IV E",
+		altsyncram_component.lpm_hint = "ENABLE_RUNTIME_MOD=NO",
+		altsyncram_component.lpm_type = "altsyncram",
+		altsyncram_component.numwords_a = 2048,
+		altsyncram_component.operation_mode = "SINGLE_PORT",
+		altsyncram_component.outdata_aclr_a = "CLEAR0",
+		altsyncram_component.outdata_reg_a = "UNREGISTERED",
+		altsyncram_component.power_up_uninitialized = "FALSE",
+		altsyncram_component.read_during_write_mode_port_a = "DONT_CARE",
+		altsyncram_component.widthad_a = 11,
+		altsyncram_component.width_a = 32,
+		altsyncram_component.width_byteena_a = 4;
+
+
+endmodule
+
+// ============================================================
+// CNX file retrieval info
+// ============================================================
+// Retrieval info: PRIVATE: ADDRESSSTALL_A NUMERIC "0"
+// Retrieval info: PRIVATE: AclrAddr NUMERIC "0"
+// Retrieval info: PRIVATE: AclrByte NUMERIC "0"
+// Retrieval info: PRIVATE: AclrData NUMERIC "0"
+// Retrieval info: PRIVATE: AclrOutput NUMERIC "1"
+// Retrieval info: PRIVATE: BYTE_ENABLE NUMERIC "1"
+// Retrieval info: PRIVATE: BYTE_SIZE NUMERIC "8"
+// Retrieval info: PRIVATE: BlankMemory NUMERIC "0"
+// Retrieval info: PRIVATE: CLOCK_ENABLE_INPUT_A NUMERIC "0"
+// Retrieval info: PRIVATE: CLOCK_ENABLE_OUTPUT_A NUMERIC "0"
+// Retrieval info: PRIVATE: Clken NUMERIC "0"
+// Retrieval info: PRIVATE: DataBusSeparated NUMERIC "1"
+// Retrieval info: PRIVATE: IMPLEMENT_IN_LES NUMERIC "0"
+// Retrieval info: PRIVATE: INIT_FILE_LAYOUT STRING "PORT_A"
+// Retrieval info: PRIVATE: INIT_TO_SIM_X NUMERIC "0"
+// Retrieval info: PRIVATE: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
+// Retrieval info: PRIVATE: JTAG_ENABLED NUMERIC "0"
+// Retrieval info: PRIVATE: JTAG_ID STRING "FAST"
+// Retrieval info: PRIVATE: MAXIMUM_DEPTH NUMERIC "0"
+// Retrieval info: PRIVATE: MIFfilename STRING "../fw/boot.mif"
+// Retrieval info: PRIVATE: NUMWORDS_A NUMERIC "2048"
+// Retrieval info: PRIVATE: RAM_BLOCK_TYPE NUMERIC "0"
+// Retrieval info: PRIVATE: READ_DURING_WRITE_MODE_PORT_A NUMERIC "2"
+// Retrieval info: PRIVATE: RegAddr NUMERIC "1"
+// Retrieval info: PRIVATE: RegData NUMERIC "1"
+// Retrieval info: PRIVATE: RegOutput NUMERIC "0"
+// Retrieval info: PRIVATE: SYNTH_WRAPPER_GEN_POSTFIX STRING "0"
+// Retrieval info: PRIVATE: SingleClock NUMERIC "1"
+// Retrieval info: PRIVATE: UseDQRAM NUMERIC "1"
+// Retrieval info: PRIVATE: WRCONTROL_ACLR_A NUMERIC "0"
+// Retrieval info: PRIVATE: WidthAddr NUMERIC "11"
+// Retrieval info: PRIVATE: WidthData NUMERIC "32"
+// Retrieval info: PRIVATE: rden NUMERIC "1"
+// Retrieval info: LIBRARY: altera_mf altera_mf.altera_mf_components.all
+// Retrieval info: CONSTANT: BYTE_SIZE NUMERIC "8"
+// Retrieval info: CONSTANT: CLOCK_ENABLE_INPUT_A STRING "BYPASS"
+// Retrieval info: CONSTANT: CLOCK_ENABLE_OUTPUT_A STRING "BYPASS"
+// Retrieval info: CONSTANT: INIT_FILE STRING "../fw/boot.mif"
+// Retrieval info: CONSTANT: INTENDED_DEVICE_FAMILY STRING "Cyclone IV E"
+// Retrieval info: CONSTANT: LPM_HINT STRING "ENABLE_RUNTIME_MOD=NO"
+// Retrieval info: CONSTANT: LPM_TYPE STRING "altsyncram"
+// Retrieval info: CONSTANT: NUMWORDS_A NUMERIC "2048"
+// Retrieval info: CONSTANT: OPERATION_MODE STRING "SINGLE_PORT"
+// Retrieval info: CONSTANT: OUTDATA_ACLR_A STRING "CLEAR0"
+// Retrieval info: CONSTANT: OUTDATA_REG_A STRING "UNREGISTERED"
+// Retrieval info: CONSTANT: POWER_UP_UNINITIALIZED STRING "FALSE"
+// Retrieval info: CONSTANT: READ_DURING_WRITE_MODE_PORT_A STRING "DONT_CARE"
+// Retrieval info: CONSTANT: WIDTHAD_A NUMERIC "11"
+// Retrieval info: CONSTANT: WIDTH_A NUMERIC "32"
+// Retrieval info: CONSTANT: WIDTH_BYTEENA_A NUMERIC "4"
+// Retrieval info: USED_PORT: aclr 0 0 0 0 INPUT GND "aclr"
+// Retrieval info: USED_PORT: address 0 0 11 0 INPUT NODEFVAL "address[10..0]"
+// Retrieval info: USED_PORT: byteena 0 0 4 0 INPUT VCC "byteena[3..0]"
+// Retrieval info: USED_PORT: clock 0 0 0 0 INPUT VCC "clock"
+// Retrieval info: USED_PORT: data 0 0 32 0 INPUT NODEFVAL "data[31..0]"
+// Retrieval info: USED_PORT: q 0 0 32 0 OUTPUT NODEFVAL "q[31..0]"
+// Retrieval info: USED_PORT: rden 0 0 0 0 INPUT VCC "rden"
+// Retrieval info: USED_PORT: wren 0 0 0 0 INPUT NODEFVAL "wren"
+// Retrieval info: CONNECT: @aclr0 0 0 0 0 aclr 0 0 0 0
+// Retrieval info: CONNECT: @address_a 0 0 11 0 address 0 0 11 0
+// Retrieval info: CONNECT: @byteena_a 0 0 4 0 byteena 0 0 4 0
+// Retrieval info: CONNECT: @clock0 0 0 0 0 clock 0 0 0 0
+// Retrieval info: CONNECT: @data_a 0 0 32 0 data 0 0 32 0
+// Retrieval info: CONNECT: @rden_a 0 0 0 0 rden 0 0 0 0
+// Retrieval info: CONNECT: @wren_a 0 0 0 0 wren 0 0 0 0
+// Retrieval info: CONNECT: q 0 0 32 0 @q_a 0 0 32 0
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip.v TRUE
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip.inc FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip.cmp FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip.bsf FALSE
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip_inst.v TRUE
+// Retrieval info: GEN_FILE: TYPE_NORMAL fastmem_ip_bb.v TRUE
+// Retrieval info: LIB_FILE: altera_mf

+ 6 - 5
fpga/max80.qsf

@@ -146,6 +146,11 @@ set_global_assignment -name PRE_MAPPING_RESYNTHESIS ON
 set_global_assignment -name ROUTER_CLOCKING_TOPOLOGY_ANALYSIS ON
 set_global_assignment -name QII_AUTO_PACKED_REGISTERS "SPARSE AUTO"
 
+
+set_global_assignment -name SAVE_DISK_SPACE OFF
+set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON
+set_global_assignment -name SMART_RECOMPILE ON
+set_global_assignment -name VERILOG_FILE ip/fastmem_ip.v
 set_global_assignment -name SYSTEMVERILOG_FILE fast_mem.sv
 set_global_assignment -name MIF_FILE ../fw/boot.mif
 set_global_assignment -name VERILOG_FILE picorv32.v
@@ -165,8 +170,4 @@ set_global_assignment -name SDC_FILE max80.sdc
 set_global_assignment -name SYSTEMVERILOG_FILE max80.sv
 set_global_assignment -name SOURCE_FILE max80.pins
 set_global_assignment -name SOURCE_TCL_SCRIPT_FILE scripts/pins.tcl
-set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top
-
-set_global_assignment -name SAVE_DISK_SPACE OFF
-set_global_assignment -name TIMING_ANALYZER_MULTICORNER_ANALYSIS ON
-set_global_assignment -name SMART_RECOMPILE ON
+set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

+ 42 - 29
fpga/max80.sv

@@ -2,7 +2,7 @@
 // Top level module for the FPGA on the MAX80 board by
 // Per Mårtensson and H. Peter Anvin
 //
-// This is for MAX80 as slave.
+// This is for MAX80 as slave on the ABC-bus.
 //
 
 // Sharing JTAG pins (via JTAGEN)
@@ -427,19 +427,21 @@ module max80 (
 
    // Embedded RISC-V CPU
    parameter cpu_fast_mem_bits = 11; /* 2^[this] * 4 bytes */
-   
-   wire 		      cpu_mem_read;
-   wire 		      cpu_mem_write;
+
+   wire			      cpu_mem_valid;
+   wire			      cpu_mem_instr;
+   wire [ 3:0]		      cpu_mem_wstrb;
    wire [31:0]                cpu_mem_addr;
    wire [31:0]                cpu_mem_wdata;
-   wire [ 7:0] 		      cpu_mem_be;
-   reg  [31:0] 		      cpu_mem_rdata;
-   wire                       cpu_mem_valid = cpu_mem_read | cpu_mem_write;
-   wire 		      cpu_mem_instr;
+   reg  [31:0]		      cpu_mem_rdata;
+
+   wire			      cpu_mem_read = cpu_mem_valid & ~|cpu_mem_wstrb;
 
    wire                       cpu_la_read;
    wire                       cpu_la_write;
    wire [31:0]                cpu_la_addr;
+   wire [31:0]		      cpu_la_wdata;
+   wire [ 3:0]		      cpu_la_wstrb;
 
    picorv32 #(
 	      .ENABLE_COUNTERS ( 1 ),
@@ -453,7 +455,6 @@ module max80 (
 	      .COMPRESSED_ISA ( 1 ),
 	      .CATCH_MISALIGN ( 1 ),
 	      .CATCH_ILLINSN ( 1 ),
-	      .UNALIGNED_DATA ( 1 ),
 	      .ENABLE_FAST_MUL ( 1 ),
 	      .ENABLE_DIV ( 1 ),
 	      .ENABLE_IRQ ( 1 ),
@@ -466,57 +467,69 @@ module max80 (
 	.clk ( clk ),
 	.resetn ( rst_n ),
 	.trap ( ),
-	
+
 	.mem_instr ( cpu_mem_instr ),
 	.mem_ready ( cpu_mem_ready ),
-	.mem_read  ( cpu_mem_read ),
-	.mem_write ( cpu_mem_write ),
+	.mem_valid ( cpu_mem_valid ),
+	.mem_wstrb ( cpu_mem_wstrb ),
 	.mem_addr  ( cpu_mem_addr ),
 	.mem_wdata ( cpu_mem_wdata ),
-	.mem_be    ( cpu_mem_be ),
 	.mem_rdata ( cpu_mem_rdata ),
 
+	.mem_la_read  ( cpu_la_read ),
+	.mem_la_write ( cpu_la_write ),
+	.mem_la_wdata ( cpu_la_wdata ),
+	.mem_la_addr  ( cpu_la_addr ),
+	.mem_la_wstrb ( cpu_la_wstrb ),
+
 	.irq ( 0 ),
 	.eoi ( )
 	);
 
-   // Address space addressed by CPU
-   wire [3:0] cpu_aspace = 4'b0001 << cpu_mem_addr[31:30];
-
    // cpu_mem_ready is always true for fast memory
    assign cpu_mem_ready = cpu_mem_valid;
 
+   // Memory valid flag by quadrant
+   wire [3:0]		      mem_quad = cpu_mem_valid << cpu_mem_addr[31:30];
+
    //
    // Fast memory. This runs on the SDRAM clock, i.e. 2x the speed
    // of the CPU. The .bits parameter gives the number of dwords
    // as a power of 2, i.e. 11 = 2^11 * 4 = 8K.
    //
    wire [31:0] fast_mem_rdata;
-   
-   fast_mem #(.bits(cpu_fast_mem_bits), .mif("../fw/boot"))
+
+   fast_mem // #(.bits(cpu_fast_mem_bits), .mif("../fw/boot"))
    fast_mem(
 	    .rst_n ( rst_n ),
-	    .clk   ( ~clk ),
-	    .read  ( cpu_aspace[0] & cpu_mem_read ),
-	    .write ( cpu_aspace[0] & cpu_mem_write ),
-	    .be    ( cpu_mem_be ),
-	    .addr  ( cpu_mem_addr[12:2] ),
-	    .wdata ( cpu_mem_wdata ),
+	    .clk   ( clk ),
+	    .read  ( mem_la_read  & cpu_la_addr[31:30] == 2'b00 ),
+	    .write ( mem_la_write & cpu_la_addr[31:30] == 2'b00 ),
+	    .wstrb ( cpu_la_wstrb ),
+	    .addr  ( cpu_la_addr[12:2] ),
+	    .wdata ( cpu_la_wdata ),
 	    .rdata ( fast_mem_rdata )
 	    );
 
-   always @(posedge clk)
-     cpu_mem_rdata <= cpu_aspace[0] ? fast_mem_rdata : 32'hxxxx_xxxx;
+   always @(*)
+     case (cpu_mem_addr[31:30])
+       2'b00: cpu_mem_rdata = fast_mem_rdata;
+       default: cpu_mem_rdata = 32'hxxxx_xxxx;
+     endcase // case (cpu_mem_addr[31:30])
 
-   // Avoid optimizing out the CPU
+   // Decode for small devices; use address space within range of
+   // negative offsets from the zero register [-1K,0)
+   wire [15:0] iodev = mem_quad[3] << cpu_mem_addr[9:6];
+
+   // LED indication from the CPU
    reg [3:1]   led_q;
    always @(negedge rst_n or posedge clk)
      if (~rst_n)
        led_q <= 3'b000;
      else
-       if ( cpu_mem_write & cpu_aspace[3] )
+       if ( iodev[0] & cpu_mem_wstrb[0] )
 	 led_q <= cpu_mem_wdata[2:0];
 
    assign led = led_q;
-   
+
 endmodule

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 2548 - 2555
fpga/output_files/max80.jam


BIN=BIN
fpga/output_files/max80.jbc


BIN=BIN
fpga/output_files/max80.jic


+ 1 - 1
fpga/output_files/max80.map

@@ -10,7 +10,7 @@ Quad-Serial configuration device dummy clock cycle: 8
 
 Notes:
 
-- Data checksum for this conversion is 0xF76F0D00
+- Data checksum for this conversion is 0xF772717A
 
 - All the addresses in this file are byte addresses
 

BIN=BIN
fpga/output_files/max80.pof


BIN=BIN
fpga/output_files/max80.sof


+ 76 - 103
fpga/picorv32.v

@@ -47,31 +47,6 @@
   `define assert(assert_expr) empty_statement
 `endif
 
-// 32-bit left rotate
-function reg [31:0] rol32 (
-		input [31:0] val,
-		input [ 4:0] cnt
-		);
-   reg [63:0] 		     val2;
-
-   val2 = {val, val};
-   val2 <<= cnt;
-   rol32 = val2[63:32];
-endfunction // rol32
-
-// 32-bit right rotate
-function reg [31:0] ror32 (
-		input [31:0] val,
-		input [ 4:0] cnt
-		);
-
-   reg [63:0] 		     val2;
-
-   val2 = {val, val};
-   val2 >>= cnt;
-   ror32 = val2[31:0];
-endfunction // ror32
-
 // uncomment this for register file in extra module
 // `define PICORV32_REGS picorv32_regs
 
@@ -79,6 +54,7 @@ endfunction // ror32
 // design are read in the correct order.
 `define PICORV32_V
 
+
 /***************************************************************
  * picorv32
  ***************************************************************/
@@ -96,7 +72,6 @@ module picorv32 #(
 	parameter [ 0:0] COMPRESSED_ISA = 0,
 	parameter [ 0:0] CATCH_MISALIGN = 1,
 	parameter [ 0:0] CATCH_ILLINSN = 1,
-	parameter [ 0:0] UNALIGNED_DATA = 0,
 	parameter [ 0:0] ENABLE_PCPI = 0,
 	parameter [ 0:0] ENABLE_MUL = 0,
 	parameter [ 0:0] ENABLE_FAST_MUL = 0,
@@ -112,47 +87,46 @@ module picorv32 #(
 	parameter [31:0] PROGADDR_IRQ = 32'h 0000_0010,
 	parameter [31:0] STACKADDR = 32'h ffff_ffff
 ) (
-	input		  clk, resetn,
-	output reg	  trap,
+	input clk, resetn,
+	output reg trap,
 
-	output reg	  mem_instr,
-	input		  mem_ready,
+	output reg        mem_valid,
+	output reg        mem_instr,
+	input             mem_ready,
 
-	output reg	  mem_read,
-	output reg	  mem_write,
 	output reg [31:0] mem_addr,
 	output reg [31:0] mem_wdata,
-	output reg [ 7:0] mem_be,
-	input [31:0]	  mem_rdata,
+	output reg [ 3:0] mem_wstrb,
+	input      [31:0] mem_rdata,
 
 	// Look-Ahead Interface
-	output		  mem_la_read,
-	output		  mem_la_write,
-	output [31:0]	  mem_la_addr,
+	output            mem_la_read,
+	output            mem_la_write,
+	output     [31:0] mem_la_addr,
 	output reg [31:0] mem_la_wdata,
-	output reg [ 7:0] mem_la_be,
+	output reg [ 3:0] mem_la_wstrb,
 
 	// Pico Co-Processor Interface (PCPI)
-	output reg	  pcpi_valid,
+	output reg        pcpi_valid,
 	output reg [31:0] pcpi_insn,
-	output [31:0]	  pcpi_rs1,
-	output [31:0]	  pcpi_rs2,
-	input		  pcpi_wr,
-	input [31:0]	  pcpi_rd,
-	input		  pcpi_wait,
-	input		  pcpi_ready,
+	output     [31:0] pcpi_rs1,
+	output     [31:0] pcpi_rs2,
+	input             pcpi_wr,
+	input      [31:0] pcpi_rd,
+	input             pcpi_wait,
+	input             pcpi_ready,
 
 	// IRQ Interface
-	input [31:0]	  irq,
+	input      [31:0] irq,
 	output reg [31:0] eoi,
 
 `ifdef RISCV_FORMAL
-	output reg	  rvfi_valid,
+	output reg        rvfi_valid,
 	output reg [63:0] rvfi_order,
 	output reg [31:0] rvfi_insn,
-	output reg	  rvfi_trap,
-	output reg	  rvfi_halt,
-	output reg	  rvfi_intr,
+	output reg        rvfi_trap,
+	output reg        rvfi_halt,
+	output reg        rvfi_intr,
 	output reg [ 1:0] rvfi_mode,
 	output reg [ 1:0] rvfi_ixl,
 	output reg [ 4:0] rvfi_rs1_addr,
@@ -181,7 +155,7 @@ module picorv32 #(
 `endif
 
 	// Trace Interface
-	output reg	  trace_valid,
+	output reg        trace_valid,
 	output reg [35:0] trace_data
 );
 	localparam integer irq_timer = 0;
@@ -198,8 +172,6 @@ module picorv32 #(
 	localparam [35:0] TRACE_ADDR   = {4'b 0010, 32'b 0};
 	localparam [35:0] TRACE_IRQ    = {4'b 1000, 32'b 0};
 
-	localparam CATCH_MISALIGN_DATA = CATCH_MISALIGN && !UNALIGNED_DATA;
-
 	reg [63:0] count_cycle, count_instr;
 	reg [31:0] reg_pc, reg_next_pc, reg_op1, reg_op2, reg_out;
 	reg [4:0] reg_sh;
@@ -213,7 +185,7 @@ module picorv32 #(
 	wire dbg_mem_ready = mem_ready;
 	wire [31:0] dbg_mem_addr  = mem_addr;
 	wire [31:0] dbg_mem_wdata = mem_wdata;
-        wire [ 3:0] dbg_mem_wstrb = {4{mem_write}} & (mem_be[3:0]|mem_be[7:4]);
+	wire [ 3:0] dbg_mem_wstrb = mem_wstrb;
 	wire [31:0] dbg_mem_rdata = mem_rdata;
 
 	assign pcpi_rs1 = reg_op1;
@@ -227,8 +199,6 @@ module picorv32 #(
 	reg [31:0] irq_pending;
 	reg [31:0] timer;
 
-   wire mem_valid = mem_read | mem_write;
-   
 `ifndef PICORV32_REGS
 	reg [31:0] cpuregs [0:regfile_size-1];
 
@@ -409,7 +379,7 @@ module picorv32 #(
 	assign mem_la_write = resetn && !mem_state && mem_do_wdata;
 	assign mem_la_read = resetn && ((!mem_la_use_prefetched_high_word && !mem_state && (mem_do_rinst || mem_do_prefetch || mem_do_rdata)) ||
 			(COMPRESSED_ISA && mem_xfer && (!last_mem_valid ? mem_la_firstword : mem_la_firstword_reg) && !mem_la_secondword && &mem_rdata_latched[1:0]));
-	assign mem_la_addr = (mem_do_prefetch || mem_do_rinst) ? {next_pc[31:2] + mem_la_firstword_xfer, mem_la_firstword, 1'b0} : reg_op1;
+	assign mem_la_addr = (mem_do_prefetch || mem_do_rinst) ? {next_pc[31:2] + mem_la_firstword_xfer, 2'b00} : {reg_op1[31:2], 2'b00};
 
 	assign mem_rdata_latched_noshuffle = (mem_xfer || LATCHED_MEM_RDATA) ? mem_rdata : mem_rdata_q;
 
@@ -428,22 +398,33 @@ module picorv32 #(
 		end
 	end
 
-	// The effective low address of a memory reference, adjusted for size
-	// unless UNALIGNED_DATA is supported.
-	wire [1:0] mem_la_lowaddr;
-
 	always @* begin
-	   if (UNALIGNED_DATA)
-	     mem_la_lowaddr = mem_la_addr[1:0];
-	   else
-	     mem_la_lowaddr = mem_la_addr[1:0] & mem_wordsize;
-
-	   mem_la_be = { 4'b0000, {2{~mem_wordsize[1]}},
-			 ~mem_wordsize[0], 1'b1 }
-		       << mem_la_lowaddr;
-
-	   mem_la_wdata   = rol32(reg_op2,   mem_la_lowaddr << 3);
-	   mem_rdata_word = ror32(mem_rdata, mem_la_lowaddr << 3);
+		(* full_case *)
+		case (mem_wordsize)
+			0: begin
+				mem_la_wdata = reg_op2;
+				mem_la_wstrb = 4'b1111;
+				mem_rdata_word = mem_rdata;
+			end
+			1: begin
+				mem_la_wdata = {2{reg_op2[15:0]}};
+				mem_la_wstrb = reg_op1[1] ? 4'b1100 : 4'b0011;
+				case (reg_op1[1])
+					1'b0: mem_rdata_word = {16'b0, mem_rdata[15: 0]};
+					1'b1: mem_rdata_word = {16'b0, mem_rdata[31:16]};
+				endcase
+			end
+			2: begin
+				mem_la_wdata = {4{reg_op2[7:0]}};
+				mem_la_wstrb = 4'b0001 << reg_op1[1:0];
+				case (reg_op1[1:0])
+					2'b00: mem_rdata_word = {24'b0, mem_rdata[ 7: 0]};
+					2'b01: mem_rdata_word = {24'b0, mem_rdata[15: 8]};
+					2'b10: mem_rdata_word = {24'b0, mem_rdata[23:16]};
+					2'b11: mem_rdata_word = {24'b0, mem_rdata[31:24]};
+				endcase
+			end
+		endcase
 	end
 
 	always @(posedge clk) begin
@@ -586,49 +567,44 @@ module picorv32 #(
 			if (!resetn)
 				mem_state <= 0;
 			if (!resetn || mem_ready)
-			  begin
-			     mem_read <= 0;
-			     mem_write <= 0;
-			  end
+				mem_valid <= 0;
 			mem_la_secondword <= 0;
 			prefetched_high_word <= 0;
 		end else begin
 			if (mem_la_read || mem_la_write) begin
-				mem_addr  <= mem_la_addr;
-				mem_be    <= mem_la_be;
+				mem_addr <= mem_la_addr;
+				mem_wstrb <= mem_la_wstrb & {4{mem_la_write}};
 			end
 			if (mem_la_write) begin
 				mem_wdata <= mem_la_wdata;
 			end
 			case (mem_state)
 				0: begin
-					mem_write <= 0;
-					mem_read  <= 0;
 					if (mem_do_prefetch || mem_do_rinst || mem_do_rdata) begin
-						mem_read  <= !mem_la_use_prefetched_high_word;
+						mem_valid <= !mem_la_use_prefetched_high_word;
 						mem_instr <= mem_do_prefetch || mem_do_rinst;
+						mem_wstrb <= 0;
 						mem_state <= 1;
-						mem_read  <= 1;
 					end
 					if (mem_do_wdata) begin
+						mem_valid <= 1;
 						mem_instr <= 0;
 						mem_state <= 2;
-						mem_write <= 1;
 					end
 				end
 				1: begin
-					`assert(!mem_write);
+					`assert(mem_wstrb == 0);
 					`assert(mem_do_prefetch || mem_do_rinst || mem_do_rdata);
 					`assert(mem_valid == !mem_la_use_prefetched_high_word);
 					`assert(mem_instr == (mem_do_prefetch || mem_do_rinst));
 					if (mem_xfer) begin
 						if (COMPRESSED_ISA && mem_la_read) begin
-							mem_read <= 1;
+							mem_valid <= 1;
 							mem_la_secondword <= 1;
 							if (!mem_la_use_prefetched_high_word)
 								mem_16bit_buffer <= mem_rdata[31:16];
 						end else begin
-							mem_read <= 0;
+							mem_valid <= 0;
 							mem_la_secondword <= 0;
 							if (COMPRESSED_ISA && !mem_do_rdata) begin
 								if (~&mem_rdata[1:0] || mem_la_secondword) begin
@@ -643,16 +619,15 @@ module picorv32 #(
 					end
 				end
 				2: begin
-					`assert(mem_write);
-					`assert(!mem_read);
+					`assert(mem_wstrb != 0);
 					`assert(mem_do_wdata);
 					if (mem_xfer) begin
-						mem_write <= 0;
+						mem_valid <= 0;
 						mem_state <= 0;
 					end
 				end
 				3: begin
-					`assert(!mem_write);
+					`assert(mem_wstrb == 0);
 					`assert(mem_do_prefetch);
 					if (mem_do_rinst) begin
 						mem_state <= 0;
@@ -1690,7 +1665,7 @@ module picorv32 #(
 						latched_branch <= 1;
 						latched_store <= 1;
 						`debug($display("LD_RS1: %2d 0x%08x", decoded_rs1, cpuregs_rs1);)
-						reg_out <= CATCH_MISALIGN_DATA ? (cpuregs_rs1 & 32'h fffffffe) : cpuregs_rs1;
+						reg_out <= CATCH_MISALIGN ? (cpuregs_rs1 & 32'h fffffffe) : cpuregs_rs1;
 						dbg_rs1val <= cpuregs_rs1;
 						dbg_rs1val_valid <= 1;
 						cpu_state <= cpu_state_fetch;
@@ -1878,7 +1853,7 @@ module picorv32 #(
 					if (!mem_do_wdata) begin
 						(* parallel_case, full_case *)
 						case (1'b1)
-							instr_sb: mem_wordsize <= 3;
+							instr_sb: mem_wordsize <= 2;
 							instr_sh: mem_wordsize <= 1;
 							instr_sw: mem_wordsize <= 0;
 						endcase
@@ -1903,13 +1878,13 @@ module picorv32 #(
 					if (!mem_do_rdata) begin
 						(* parallel_case, full_case *)
 						case (1'b1)
-							instr_lb || instr_lbu: mem_wordsize <= 3;
+							instr_lb || instr_lbu: mem_wordsize <= 2;
 							instr_lh || instr_lhu: mem_wordsize <= 1;
 							instr_lw: mem_wordsize <= 0;
 						endcase
 						latched_is_lu <= is_lbu_lhu_lw;
-					        latched_is_lh <= instr_lh | instr_lhu;
-						latched_is_lb <= instr_lb | instr_lbu;
+						latched_is_lh <= instr_lh;
+						latched_is_lb <= instr_lb;
 						if (ENABLE_TRACE) begin
 							trace_valid <= 1;
 							trace_data <= (irq_active ? TRACE_IRQ : 0) | TRACE_ADDR | ((reg_op1 + decoded_imm) & 32'hffffffff);
@@ -1918,13 +1893,11 @@ module picorv32 #(
 						set_mem_do_rdata = 1;
 					end
 					if (!mem_do_prefetch && mem_done) begin
-						(* full_case *)
-						case ( {latched_is_lu, latched_is_lh, latched_is_lb} )
-						  3'b100: reg_out <= mem_rdata_word;
-						  3'b010: reg_out <= $signed(mem_rdata_word[15:0]);
-						  3'b110: reg_out <= {16'b0, mem_rdata_word[15:0]};
-						  3'b001: reg_out <= $signed(mem_rdata_word[7:0]);
-						  3'b101: reg_out <= {24'b0, mem_rdata_word[7:0]};
+						(* parallel_case, full_case *)
+						case (1'b1)
+							latched_is_lu: reg_out <= mem_rdata_word;
+							latched_is_lh: reg_out <= $signed(mem_rdata_word[15:0]);
+							latched_is_lb: reg_out <= $signed(mem_rdata_word[7:0]);
 						endcase
 						decoder_trigger <= 1;
 						decoder_pseudo_trigger <= 1;
@@ -1941,7 +1914,7 @@ module picorv32 #(
 					next_irq_pending[irq_timer] = 1;
 		end
 
-		if (CATCH_MISALIGN_DATA && resetn && (mem_do_rdata || mem_do_wdata)) begin
+		if (CATCH_MISALIGN && resetn && (mem_do_rdata || mem_do_wdata)) begin
 			if (mem_wordsize == 0 && reg_op1[1:0] != 0) begin
 				`debug($display("MISALIGNED WORD: 0x%08x", reg_op1);)
 				if (ENABLE_IRQ && !irq_mask[irq_buserror] && !irq_active) begin

+ 5 - 12
fw/Makefile

@@ -1,4 +1,3 @@
-MAKEFLAGS += -R -r
 export PATH := $(CURDIR)/tools/gnu/bin:$(PATH)
 
 CROSS	  = riscv32-unknown-elf-
@@ -7,14 +6,8 @@ LD	  = $(CROSS)ld
 OBJCOPY   = $(CROSS)objcopy
 PERL      = perl
 INCLUDE   = -I. -I./include
-CPPFLAGS  = $(INCLUDE) \
-	     -march=rv32imc -mabi=ilp32 -mdiv -Os -ggdb3 \
-	     -fwrapv -fvisibility=hidden -fno-strict-aliasing \
-	     -fno-pic -mno-plt -msmall-data-limit=8192 \
-	     -frename-registers \
-	     -mshorten-memrefs -mno-strict-align
-# These require newlib to be built with the same options; would be nice
-CPPFLAGS_NOT = -fshort-enums -fshort-wchar
+include ../riscv-opts.mk
+CPPFLAGS  = $(INCLUDE) $(riscv_flags)
 CFLAGS    = $(CPPFLAGS)
 SFLAGS    = $(CPPFLAGS) -D__ASSEMBLY__
 LDFLAGS   = $(CFLAGS) \
@@ -29,10 +22,10 @@ LDFLAGS   = $(CFLAGS) \
 
 all: boot.mif
 
-# Generate MIF files for 4 8×2K RAMs
+# Generate MIF file for 2Kx32 RAM
 boot_depth  := 2048
-boot_width  := 8
-boot_stride := 4
+boot_width  := 32
+boot_stride := 1
 
 boot.elf: head.o hello.o
 

+ 0 - 508
fw/boot.0.mif

@@ -1,508 +0,0 @@
--- generated from boot.bin
--- array 1/4 (hex 0 of [0..3])
-DEPTH = 2048;
-WIDTH = 8;
-ADDRESS_RADIX = HEX;
-DATA_RADIX = HEX;
-CONTENT BEGIN
-000 : 6F;
-001 : 00;
-002 : 00;
-003 : 00;
-004 : 6F;
-005 : 93;
-006 : B7;
-007 : 03;
-008 : 11;
-009 : 23;
-00A : 85;
-00B : 93;
-00C : 81;
-00D : 20;
-00E : 82;
-00F : 00;
-010 : 61;
-011 : C0;
-012 : 80;
-013 : 81;
-014 : 17;
-015 : 13;
-016 : 11;
-017 : 00;
-018 : 85;
-019 : B5;
-01A : 4C;
-01B : 65;
-01C : 41;
-01D : 83;
-01E : 06;
-01F : 93;
-020 : 99;
-021 : 40;
-022 : 00;
-023 : 00;
-024 : 23;
-025 : B2;
-026 : 41;
-027 : 93;
-028 : 89;
-029 : 00;
-02A : 40;
-02B : 00;
-02C : 00;
-02D : 01;
-02E : 81;
-02F : 06;
-030 : 29;
-031 : 00;
-032 : 91;
-033 : 22;
-034 : 41;
-035 : 4A;
-036 : 80;
-037 : 80;
-038 : F9;
-039 : 26;
-03A : 29;
-03B : 09;
-03C : 80;
-03D : 1C;
-03E : 11;
-03F : E3;
-040 : 93;
-041 : 13;
-042 : 33;
-043 : 13;
-044 : 63;
-045 : 13;
-046 : 81;
-047 : 85;
-048 : 82;
-049 : 99;
-04A : 22;
-04B : 02;
-04C : 82;
-04D : 2A;
-04E : C3;
-04F : F7;
-050 : AD;
-051 : 06;
-052 : BA;
-053 : 4C;
-054 : 4C;
-055 : E3;
-056 : 11;
-057 : B3;
-058 : 8A;
-059 : 00;
-05A : 67;
-05B : 23;
-05C : A3;
-05D : 23;
-05E : A3;
-05F : 23;
-060 : A3;
-061 : 23;
-062 : A3;
-063 : 23;
-064 : A3;
-065 : 23;
-066 : A3;
-067 : 23;
-068 : A3;
-069 : 23;
-06A : 82;
-06B : F5;
-06C : 85;
-06D : 93;
-06E : D5;
-06F : 93;
-070 : 97;
-071 : 96;
-072 : E7;
-073 : 96;
-074 : 1D;
-075 : E3;
-076 : A5;
-077 : 52;
-078 : 00;
-079 : 06;
-07A : 8A;
-07B : 26;
-07C : 56;
-07D : 5E;
-07E : 63;
-07F : 2A;
-080 : 85;
-081 : 83;
-082 : 13;
-083 : 63;
-084 : 8A;
-085 : 63;
-086 : 83;
-087 : 63;
-088 : 7D;
-089 : E3;
-08A : B2;
-08B : 92;
-08C : F2;
-08D : D2;
-08E : B2;
-08F : 45;
-090 : 83;
-091 : D4;
-092 : 63;
-093 : 23;
-094 : E1;
-095 : 89;
-096 : 8A;
-097 : 49;
-098 : 89;
-099 : 03;
-09A : 83;
-09B : 63;
-09C : E3;
-09D : D5;
-09E : 71;
-09F : C9;
-0A0 : 44;
-0A1 : 19;
-0A2 : 82;
-0A3 : 23;
-0A4 : C1;
-0A5 : 82;
-0A6 : AA;
-0A7 : 01;
-0A8 : 0D;
-0A9 : 22;
-0AA : 00;
-0AB : 40;
-0AC : 26;
-0AD : 93;
-0AE : 81;
-0AF : 3E;
-0B0 : FD;
-0B1 : 82;
-0B2 : B2;
-0B3 : 92;
-0B4 : 82;
-0B5 : 00;
-0B6 : 87;
-0B7 : D8;
-0B8 : 63;
-0B9 : 13;
-0BA : 1D;
-0BB : 07;
-0BC : C3;
-0BD : 87;
-0BE : 33;
-0BF : B3;
-0C0 : 23;
-0C1 : 23;
-0C2 : 89;
-0C3 : D5;
-0C4 : D8;
-0C5 : 8C;
-0C6 : 82;
-0C7 : C7;
-0C8 : F7;
-0C9 : 83;
-0CA : 05;
-0CB : D1;
-0CC : D7;
-0CD : 8C;
-0CE : 82;
-0CF : 82;
-0D0 : D0;
-0D1 : 00;
-0D2 : 05;
-0D3 : 41;
-0D4 : 2A;
-0D5 : 33;
-0D6 : 19;
-0D7 : 01;
-0D8 : 80;
-0D9 : 00;
-0DA : 00;
-0DB : 00;
-0DC : 00;
-0DD : 00;
-0DE : 2C;
-0DF : 9C;
-0E0 : 70;
-0E1 : 00;
-0E2 : 00;
-0E3 : 74;
-0E4 : DC;
-0E5 : 44;
-0E6 : 00;
-0E7 : 00;
-0E8 : 00;
-0E9 : 00;
-0EA : 00;
-0EB : 00;
-0EC : 00;
-0ED : 00;
-0EE : 00;
-0EF : 00;
-0F0 : 00;
-0F1 : 00;
-0F2 : 00;
-0F3 : 00;
-0F4 : 00;
-0F5 : 00;
-0F6 : 00;
-0F7 : 00;
-0F8 : 00;
-0F9 : 00;
-0FA : 00;
-0FB : 00;
-0FC : 00;
-0FD : 00;
-0FE : 00;
-0FF : 00;
-100 : 00;
-101 : 00;
-102 : 00;
-103 : 00;
-104 : 00;
-105 : 00;
-106 : 00;
-107 : 00;
-108 : 00;
-109 : 00;
-10A : 00;
-10B : 00;
-10C : 01;
-10D : 00;
-10E : 0E;
-10F : 34;
-110 : EC;
-111 : 0B;
-112 : 00;
-113 : 00;
-114 : 00;
-115 : 00;
-116 : 00;
-117 : 00;
-118 : 00;
-119 : 00;
-11A : 00;
-11B : 00;
-11C : 00;
-11D : 00;
-11E : 00;
-11F : 00;
-120 : 00;
-121 : 00;
-122 : 00;
-123 : 00;
-124 : 00;
-125 : 00;
-126 : 00;
-127 : 00;
-128 : 00;
-129 : 00;
-12A : 00;
-12B : 00;
-12C : 00;
-12D : 00;
-12E : 00;
-12F : 00;
-130 : 00;
-131 : 00;
-132 : 00;
-133 : 00;
-134 : 00;
-135 : 00;
-136 : 00;
-137 : 00;
-138 : 00;
-139 : 00;
-13A : 00;
-13B : 00;
-13C : 00;
-13D : 00;
-13E : 00;
-13F : 00;
-140 : 00;
-141 : 00;
-142 : 00;
-143 : 00;
-144 : 00;
-145 : 00;
-146 : 00;
-147 : 00;
-148 : 00;
-149 : 00;
-14A : 00;
-14B : 00;
-14C : 00;
-14D : 00;
-14E : 00;
-14F : 00;
-150 : 00;
-151 : 00;
-152 : 00;
-153 : 00;
-154 : 00;
-155 : 00;
-156 : 00;
-157 : 00;
-158 : 00;
-159 : 00;
-15A : 00;
-15B : 00;
-15C : 00;
-15D : 00;
-15E : 00;
-15F : 00;
-160 : 00;
-161 : 00;
-162 : 00;
-163 : 00;
-164 : 00;
-165 : 00;
-166 : 00;
-167 : 00;
-168 : 00;
-169 : 00;
-16A : 00;
-16B : 00;
-16C : 00;
-16D : 00;
-16E : 00;
-16F : 00;
-170 : 00;
-171 : 00;
-172 : 00;
-173 : 00;
-174 : 00;
-175 : 00;
-176 : 00;
-177 : 00;
-178 : 00;
-179 : 00;
-17A : 00;
-17B : 00;
-17C : 00;
-17D : 00;
-17E : 00;
-17F : 00;
-180 : 00;
-181 : 00;
-182 : 00;
-183 : 00;
-184 : 00;
-185 : 00;
-186 : 00;
-187 : 00;
-188 : 00;
-189 : 00;
-18A : 00;
-18B : 00;
-18C : 00;
-18D : 00;
-18E : 00;
-18F : 00;
-190 : 00;
-191 : 00;
-192 : 00;
-193 : 00;
-194 : 00;
-195 : 00;
-196 : 00;
-197 : 00;
-198 : 00;
-199 : 00;
-19A : 00;
-19B : 00;
-19C : 00;
-19D : 00;
-19E : 00;
-19F : 00;
-1A0 : 00;
-1A1 : 00;
-1A2 : 00;
-1A3 : 00;
-1A4 : 00;
-1A5 : 00;
-1A6 : 00;
-1A7 : 00;
-1A8 : 00;
-1A9 : 00;
-1AA : 00;
-1AB : 00;
-1AC : 00;
-1AD : 00;
-1AE : 00;
-1AF : 00;
-1B0 : 00;
-1B1 : 00;
-1B2 : 00;
-1B3 : 00;
-1B4 : 00;
-1B5 : 00;
-1B6 : 00;
-1B7 : 00;
-1B8 : 00;
-1B9 : 00;
-1BA : 00;
-1BB : 00;
-1BC : 00;
-1BD : 00;
-1BE : 00;
-1BF : 00;
-1C0 : 00;
-1C1 : 00;
-1C2 : 00;
-1C3 : 00;
-1C4 : 00;
-1C5 : 00;
-1C6 : 00;
-1C7 : 00;
-1C8 : 00;
-1C9 : 00;
-1CA : 00;
-1CB : 00;
-1CC : 00;
-1CD : 00;
-1CE : 00;
-1CF : 00;
-1D0 : 00;
-1D1 : 00;
-1D2 : 00;
-1D3 : 00;
-1D4 : 00;
-1D5 : 00;
-1D6 : 00;
-1D7 : 00;
-1D8 : 00;
-1D9 : 00;
-1DA : 00;
-1DB : 00;
-1DC : 00;
-1DD : 00;
-1DE : 00;
-1DF : 00;
-1E0 : 00;
-1E1 : 00;
-1E2 : 00;
-1E3 : 00;
-1E4 : 00;
-1E5 : 00;
-1E6 : 00;
-1E7 : 00;
-1E8 : 00;
-1E9 : 00;
-1EA : 00;
-1EB : 00;
-1EC : 48;
-1ED : 6F;
-1EE : 6F;
-1EF : 21;
-1F0 : 88;
-1F1 : 00;
-1F2 : 88;
-[1F3..7FF] : 00;
-END;

+ 0 - 508
fw/boot.1.mif

@@ -1,508 +0,0 @@
--- generated from boot.bin
--- array 2/4 (hex 1 of [0..3])
-DEPTH = 2048;
-WIDTH = 8;
-ADDRESS_RADIX = HEX;
-DATA_RADIX = HEX;
-CONTENT BEGIN
-000 : 00;
-001 : 00;
-002 : 00;
-003 : 00;
-004 : 00;
-005 : 02;
-006 : 06;
-007 : C7;
-008 : E3;
-009 : 80;
-00A : 02;
-00B : 07;
-00C : C7;
-00D : 2A;
-00E : 80;
-00F : 00;
-010 : F7;
-011 : 7C;
-012 : 7E;
-013 : 45;
-014 : 05;
-015 : 05;
-016 : C5;
-017 : 00;
-018 : 24;
-019 : 20;
-01A : 00;
-01B : 37;
-01C : 11;
-01D : 47;
-01E : C6;
-01F : 07;
-020 : C7;
-021 : 37;
-022 : 00;
-023 : 00;
-024 : 06;
-025 : 40;
-026 : 01;
-027 : 07;
-028 : CB;
-029 : 7D;
-02A : 37;
-02B : 00;
-02C : 00;
-02D : A0;
-02E : 45;
-02F : C6;
-030 : 2A;
-031 : 7C;
-032 : C3;
-033 : 85;
-034 : 11;
-035 : C0;
-036 : 37;
-037 : 37;
-038 : 40;
-039 : C2;
-03A : 40;
-03B : 00;
-03C : 37;
-03D : 40;
-03E : 04;
-03F : 1C;
-040 : 07;
-041 : 09;
-042 : 09;
-043 : 59;
-044 : 0B;
-045 : 04;
-046 : 44;
-047 : 04;
-048 : 97;
-049 : FE;
-04A : 44;
-04B : 49;
-04C : 80;
-04D : 87;
-04E : 02;
-04F : 00;
-050 : E5;
-051 : FF;
-052 : 96;
-053 : C3;
-054 : C7;
-055 : 6B;
-056 : E2;
-057 : 06;
-058 : 06;
-059 : 00;
-05A : 80;
-05B : 07;
-05C : 06;
-05D : 06;
-05E : 05;
-05F : 05;
-060 : 04;
-061 : 04;
-062 : 03;
-063 : 03;
-064 : 02;
-065 : 02;
-066 : 01;
-067 : 01;
-068 : 00;
-069 : 00;
-06A : 80;
-06B : 0F;
-06C : 00;
-06D : 96;
-06E : 8D;
-06F : 96;
-070 : 02;
-071 : 96;
-072 : 80;
-073 : 80;
-074 : 8F;
-075 : 74;
-076 : B7;
-077 : CC;
-078 : 7C;
-079 : D6;
-07A : 14;
-07B : D2;
-07C : CA;
-07D : C6;
-07E : 08;
-07F : 8B;
-080 : 4A;
-081 : 24;
-082 : 84;
-083 : 4E;
-084 : 04;
-085 : 86;
-086 : A7;
-087 : 82;
-088 : 14;
-089 : 18;
-08A : 50;
-08B : 54;
-08C : 49;
-08D : 4A;
-08E : 4B;
-08F : 61;
-090 : 27;
-091 : 40;
-092 : 82;
-093 : A2;
-094 : DA;
-095 : 18;
-096 : 00;
-097 : 00;
-098 : EF;
-099 : 27;
-09A : 27;
-09B : 14;
-09C : 88;
-09D : DB;
-09E : B7;
-09F : 18;
-0A0 : 08;
-0A1 : E7;
-0A2 : 96;
-0A3 : 22;
-0A4 : B7;
-0A5 : 96;
-0A6 : 85;
-0A7 : 46;
-0A8 : A8;
-0A9 : C4;
-0AA : 38;
-0AB : 38;
-0AC : C2;
-0AD : 54;
-0AE : C8;
-0AF : 94;
-0B0 : 14;
-0B1 : 97;
-0B2 : 40;
-0B3 : 44;
-0B4 : 80;
-0B5 : 7C;
-0B6 : 14;
-0B7 : 43;
-0B8 : 4D;
-0B9 : 18;
-0BA : C1;
-0BB : 01;
-0BC : 08;
-0BD : 18;
-0BE : 16;
-0BF : E8;
-0C0 : A4;
-0C1 : 24;
-0C2 : 46;
-0C3 : 00;
-0C4 : C3;
-0C5 : C7;
-0C6 : 80;
-0C7 : 14;
-0C8 : 14;
-0C9 : A6;
-0CA : 07;
-0CB : 8E;
-0CC : 18;
-0CD : C7;
-0CE : 80;
-0CF : 80;
-0D0 : 05;
-0D1 : 00;
-0D2 : 00;
-0D3 : 11;
-0D4 : 84;
-0D5 : 04;
-0D6 : 20;
-0D7 : A0;
-0D8 : 7C;
-0D9 : 00;
-0DA : 00;
-0DB : 00;
-0DC : 00;
-0DD : 00;
-0DE : 00;
-0DF : 00;
-0E0 : 00;
-0E1 : 00;
-0E2 : 00;
-0E3 : 06;
-0E4 : 06;
-0E5 : 07;
-0E6 : 00;
-0E7 : 00;
-0E8 : 00;
-0E9 : 00;
-0EA : 00;
-0EB : 00;
-0EC : 00;
-0ED : 00;
-0EE : 00;
-0EF : 00;
-0F0 : 00;
-0F1 : 00;
-0F2 : 00;
-0F3 : 00;
-0F4 : 00;
-0F5 : 00;
-0F6 : 00;
-0F7 : 00;
-0F8 : 00;
-0F9 : 00;
-0FA : 00;
-0FB : 00;
-0FC : 00;
-0FD : 00;
-0FE : 00;
-0FF : 00;
-100 : 00;
-101 : 00;
-102 : 00;
-103 : 00;
-104 : 00;
-105 : 00;
-106 : 00;
-107 : 00;
-108 : 00;
-109 : 00;
-10A : 00;
-10B : 00;
-10C : 00;
-10D : 00;
-10E : 33;
-10F : 12;
-110 : DE;
-111 : 00;
-112 : 00;
-113 : 00;
-114 : 00;
-115 : 00;
-116 : 00;
-117 : 00;
-118 : 00;
-119 : 00;
-11A : 00;
-11B : 00;
-11C : 00;
-11D : 00;
-11E : 00;
-11F : 00;
-120 : 00;
-121 : 00;
-122 : 00;
-123 : 00;
-124 : 00;
-125 : 00;
-126 : 00;
-127 : 00;
-128 : 00;
-129 : 00;
-12A : 00;
-12B : 00;
-12C : 00;
-12D : 00;
-12E : 00;
-12F : 00;
-130 : 00;
-131 : 00;
-132 : 00;
-133 : 00;
-134 : 00;
-135 : 00;
-136 : 00;
-137 : 00;
-138 : 00;
-139 : 00;
-13A : 00;
-13B : 00;
-13C : 00;
-13D : 00;
-13E : 00;
-13F : 00;
-140 : 00;
-141 : 00;
-142 : 00;
-143 : 00;
-144 : 00;
-145 : 00;
-146 : 00;
-147 : 00;
-148 : 00;
-149 : 00;
-14A : 00;
-14B : 00;
-14C : 00;
-14D : 00;
-14E : 00;
-14F : 00;
-150 : 00;
-151 : 00;
-152 : 00;
-153 : 00;
-154 : 00;
-155 : 00;
-156 : 00;
-157 : 00;
-158 : 00;
-159 : 00;
-15A : 00;
-15B : 00;
-15C : 00;
-15D : 00;
-15E : 00;
-15F : 00;
-160 : 00;
-161 : 00;
-162 : 00;
-163 : 00;
-164 : 00;
-165 : 00;
-166 : 00;
-167 : 00;
-168 : 00;
-169 : 00;
-16A : 00;
-16B : 00;
-16C : 00;
-16D : 00;
-16E : 00;
-16F : 00;
-170 : 00;
-171 : 00;
-172 : 00;
-173 : 00;
-174 : 00;
-175 : 00;
-176 : 00;
-177 : 00;
-178 : 00;
-179 : 00;
-17A : 00;
-17B : 00;
-17C : 00;
-17D : 00;
-17E : 00;
-17F : 00;
-180 : 00;
-181 : 00;
-182 : 00;
-183 : 00;
-184 : 00;
-185 : 00;
-186 : 00;
-187 : 00;
-188 : 00;
-189 : 00;
-18A : 00;
-18B : 00;
-18C : 00;
-18D : 00;
-18E : 00;
-18F : 00;
-190 : 00;
-191 : 00;
-192 : 00;
-193 : 00;
-194 : 00;
-195 : 00;
-196 : 00;
-197 : 00;
-198 : 00;
-199 : 00;
-19A : 00;
-19B : 00;
-19C : 00;
-19D : 00;
-19E : 00;
-19F : 00;
-1A0 : 00;
-1A1 : 00;
-1A2 : 00;
-1A3 : 00;
-1A4 : 00;
-1A5 : 00;
-1A6 : 00;
-1A7 : 00;
-1A8 : 00;
-1A9 : 00;
-1AA : 00;
-1AB : 00;
-1AC : 00;
-1AD : 00;
-1AE : 00;
-1AF : 00;
-1B0 : 00;
-1B1 : 00;
-1B2 : 00;
-1B3 : 00;
-1B4 : 00;
-1B5 : 00;
-1B6 : 00;
-1B7 : 00;
-1B8 : 00;
-1B9 : 00;
-1BA : 00;
-1BB : 00;
-1BC : 00;
-1BD : 00;
-1BE : 00;
-1BF : 00;
-1C0 : 00;
-1C1 : 00;
-1C2 : 00;
-1C3 : 00;
-1C4 : 00;
-1C5 : 00;
-1C6 : 00;
-1C7 : 00;
-1C8 : 00;
-1C9 : 00;
-1CA : 00;
-1CB : 00;
-1CC : 00;
-1CD : 00;
-1CE : 00;
-1CF : 00;
-1D0 : 00;
-1D1 : 00;
-1D2 : 00;
-1D3 : 00;
-1D4 : 00;
-1D5 : 00;
-1D6 : 00;
-1D7 : 00;
-1D8 : 00;
-1D9 : 00;
-1DA : 00;
-1DB : 00;
-1DC : 00;
-1DD : 00;
-1DE : 00;
-1DF : 00;
-1E0 : 00;
-1E1 : 00;
-1E2 : 00;
-1E3 : 00;
-1E4 : 00;
-1E5 : 00;
-1E6 : 00;
-1E7 : 00;
-1E8 : 00;
-1E9 : 00;
-1EA : 00;
-1EB : 00;
-1EC : 65;
-1ED : 2C;
-1EE : 72;
-1EF : 0D;
-1F0 : 03;
-1F1 : 00;
-1F2 : 03;
-[1F3..7FF] : 00;
-END;

+ 0 - 508
fw/boot.2.mif

@@ -1,508 +0,0 @@
--- generated from boot.bin
--- array 3/4 (hex 2 of [0..3])
-DEPTH = 2048;
-WIDTH = 8;
-ADDRESS_RADIX = HEX;
-DATA_RADIX = HEX;
-CONTENT BEGIN
-000 : A0;
-001 : 00;
-002 : 00;
-003 : 00;
-004 : 40;
-005 : 00;
-006 : 00;
-007 : 02;
-008 : 01;
-009 : E6;
-00A : CD;
-00B : 00;
-00C : 13;
-00D : 8D;
-00E : 97;
-00F : 93;
-010 : 13;
-011 : 13;
-012 : 09;
-013 : D5;
-014 : 00;
-015 : 85;
-016 : 17;
-017 : 13;
-018 : 1D;
-019 : 02;
-01A : 01;
-01B : A1;
-01C : 22;
-01D : C0;
-01E : 89;
-01F : 00;
-020 : 13;
-021 : 97;
-022 : E7;
-023 : 85;
-024 : F0;
-025 : 22;
-026 : 82;
-027 : 00;
-028 : 93;
-029 : 13;
-02A : 17;
-02B : 67;
-02C : 82;
-02D : 41;
-02E : 22;
-02F : 2A;
-030 : 03;
-031 : 5C;
-032 : 82;
-033 : 85;
-034 : 22;
-035 : 93;
-036 : 13;
-037 : 33;
-038 : 06;
-039 : 13;
-03A : 63;
-03B : 13;
-03C : 81;
-03D : 85;
-03E : 82;
-03F : 99;
-040 : 80;
-041 : 00;
-042 : F9;
-043 : 29;
-044 : 09;
-045 : 80;
-046 : 1C;
-047 : 11;
-048 : E3;
-049 : B2;
-04A : 92;
-04B : 41;
-04C : 3D;
-04D : 63;
-04E : 93;
-04F : BD;
-050 : 93;
-051 : 3D;
-052 : 0C;
-053 : 0C;
-054 : 41;
-055 : D7;
-056 : 82;
-057 : C3;
-058 : 97;
-059 : 96;
-05A : A6;
-05B : B7;
-05C : B7;
-05D : B7;
-05E : B7;
-05F : B7;
-060 : B7;
-061 : B7;
-062 : B7;
-063 : B7;
-064 : B7;
-065 : B7;
-066 : B7;
-067 : B7;
-068 : B7;
-069 : B7;
-06A : 93;
-06B : 93;
-06C : D5;
-06D : 05;
-06E : 61;
-06F : 27;
-070 : 00;
-071 : 86;
-072 : 86;
-073 : C1;
-074 : 3E;
-075 : C3;
-076 : 79;
-077 : 03;
-078 : 4A;
-079 : 03;
-07A : 22;
-07B : 4E;
-07C : 5A;
-07D : 62;
-07E : 09;
-07F : AE;
-080 : FD;
-081 : 49;
-082 : F4;
-083 : 04;
-084 : CA;
-085 : 0B;
-086 : 44;
-087 : 77;
-088 : F1;
-089 : 34;
-08A : 22;
-08B : 02;
-08C : 62;
-08D : 42;
-08E : 22;
-08F : 82;
-090 : 49;
-091 : FD;
-092 : 87;
-093 : 04;
-094 : 83;
-095 : 33;
-096 : 03;
-097 : F9;
-098 : 82;
-099 : 49;
-09A : 8A;
-09B : 87;
-09C : 27;
-09D : 3E;
-09E : 83;
-09F : 83;
-0A0 : 7D;
-0A1 : 5A;
-0A2 : E9;
-0A3 : 89;
-0A4 : 2E;
-0A5 : F9;
-0A6 : 81;
-0A7 : 01;
-0A8 : 41;
-0A9 : 93;
-0AA : 13;
-0AB : 1D;
-0AC : 06;
-0AD : 24;
-0AE : 71;
-0AF : 1C;
-0B0 : 71;
-0B1 : E5;
-0B2 : 22;
-0B3 : 41;
-0B4 : 03;
-0B5 : 83;
-0B6 : A1;
-0B7 : 7D;
-0B8 : E8;
-0B9 : 27;
-0BA : 33;
-0BB : 23;
-0BC : 83;
-0BD : 05;
-0BE : E6;
-0BF : C8;
-0C0 : 17;
-0C1 : D3;
-0C2 : 63;
-0C3 : 05;
-0C4 : C2;
-0C5 : 01;
-0C6 : 93;
-0C7 : 23;
-0C8 : 6D;
-0C9 : C7;
-0CA : D8;
-0CB : 23;
-0CC : C2;
-0CD : 01;
-0CE : 7D;
-0CF : 93;
-0D0 : 73;
-0D1 : 63;
-0D2 : 01;
-0D3 : 22;
-0D4 : 06;
-0D5 : 80;
-0D6 : 00;
-0D7 : 03;
-0D8 : 82;
-0D9 : 00;
-0DA : 00;
-0DB : 00;
-0DC : 00;
-0DD : 00;
-0DE : 00;
-0DF : 00;
-0E0 : 00;
-0E1 : 00;
-0E2 : 00;
-0E3 : 00;
-0E4 : 00;
-0E5 : 00;
-0E6 : 00;
-0E7 : 00;
-0E8 : 00;
-0E9 : 00;
-0EA : 00;
-0EB : 00;
-0EC : 00;
-0ED : 00;
-0EE : 00;
-0EF : 00;
-0F0 : 00;
-0F1 : 00;
-0F2 : 00;
-0F3 : 00;
-0F4 : 00;
-0F5 : 00;
-0F6 : 00;
-0F7 : 00;
-0F8 : 00;
-0F9 : 00;
-0FA : 00;
-0FB : 00;
-0FC : 00;
-0FD : 00;
-0FE : 00;
-0FF : 00;
-100 : 00;
-101 : 00;
-102 : 00;
-103 : 00;
-104 : 00;
-105 : 00;
-106 : 00;
-107 : 00;
-108 : 00;
-109 : 00;
-10A : 00;
-10B : 00;
-10C : 00;
-10D : 00;
-10E : CD;
-10F : 6D;
-110 : 05;
-111 : 00;
-112 : 00;
-113 : 00;
-114 : 00;
-115 : 00;
-116 : 00;
-117 : 00;
-118 : 00;
-119 : 00;
-11A : 00;
-11B : 00;
-11C : 00;
-11D : 00;
-11E : 00;
-11F : 00;
-120 : 00;
-121 : 00;
-122 : 00;
-123 : 00;
-124 : 00;
-125 : 00;
-126 : 00;
-127 : 00;
-128 : 00;
-129 : 00;
-12A : 00;
-12B : 00;
-12C : 00;
-12D : 00;
-12E : 00;
-12F : 00;
-130 : 00;
-131 : 00;
-132 : 00;
-133 : 00;
-134 : 00;
-135 : 00;
-136 : 00;
-137 : 00;
-138 : 00;
-139 : 00;
-13A : 00;
-13B : 00;
-13C : 00;
-13D : 00;
-13E : 00;
-13F : 00;
-140 : 00;
-141 : 00;
-142 : 00;
-143 : 00;
-144 : 00;
-145 : 00;
-146 : 00;
-147 : 00;
-148 : 00;
-149 : 00;
-14A : 00;
-14B : 00;
-14C : 00;
-14D : 00;
-14E : 00;
-14F : 00;
-150 : 00;
-151 : 00;
-152 : 00;
-153 : 00;
-154 : 00;
-155 : 00;
-156 : 00;
-157 : 00;
-158 : 00;
-159 : 00;
-15A : 00;
-15B : 00;
-15C : 00;
-15D : 00;
-15E : 00;
-15F : 00;
-160 : 00;
-161 : 00;
-162 : 00;
-163 : 00;
-164 : 00;
-165 : 00;
-166 : 00;
-167 : 00;
-168 : 00;
-169 : 00;
-16A : 00;
-16B : 00;
-16C : 00;
-16D : 00;
-16E : 00;
-16F : 00;
-170 : 00;
-171 : 00;
-172 : 00;
-173 : 00;
-174 : 00;
-175 : 00;
-176 : 00;
-177 : 00;
-178 : 00;
-179 : 00;
-17A : 00;
-17B : 00;
-17C : 00;
-17D : 00;
-17E : 00;
-17F : 00;
-180 : 00;
-181 : 00;
-182 : 00;
-183 : 00;
-184 : 00;
-185 : 00;
-186 : 00;
-187 : 00;
-188 : 00;
-189 : 00;
-18A : 00;
-18B : 00;
-18C : 00;
-18D : 00;
-18E : 00;
-18F : 00;
-190 : 00;
-191 : 00;
-192 : 00;
-193 : 00;
-194 : 00;
-195 : 00;
-196 : 00;
-197 : 00;
-198 : 00;
-199 : 00;
-19A : 00;
-19B : 00;
-19C : 00;
-19D : 00;
-19E : 00;
-19F : 00;
-1A0 : 00;
-1A1 : 00;
-1A2 : 00;
-1A3 : 00;
-1A4 : 00;
-1A5 : 00;
-1A6 : 00;
-1A7 : 00;
-1A8 : 00;
-1A9 : 00;
-1AA : 00;
-1AB : 00;
-1AC : 00;
-1AD : 00;
-1AE : 00;
-1AF : 00;
-1B0 : 00;
-1B1 : 00;
-1B2 : 00;
-1B3 : 00;
-1B4 : 00;
-1B5 : 00;
-1B6 : 00;
-1B7 : 00;
-1B8 : 00;
-1B9 : 00;
-1BA : 00;
-1BB : 00;
-1BC : 00;
-1BD : 00;
-1BE : 00;
-1BF : 00;
-1C0 : 00;
-1C1 : 00;
-1C2 : 00;
-1C3 : 00;
-1C4 : 00;
-1C5 : 00;
-1C6 : 00;
-1C7 : 00;
-1C8 : 00;
-1C9 : 00;
-1CA : 00;
-1CB : 00;
-1CC : 00;
-1CD : 00;
-1CE : 00;
-1CF : 00;
-1D0 : 00;
-1D1 : 00;
-1D2 : 00;
-1D3 : 00;
-1D4 : 00;
-1D5 : 00;
-1D6 : 00;
-1D7 : 00;
-1D8 : 00;
-1D9 : 00;
-1DA : 00;
-1DB : 00;
-1DC : 00;
-1DD : 00;
-1DE : 00;
-1DF : 00;
-1E0 : 00;
-1E1 : 00;
-1E2 : 00;
-1E3 : 00;
-1E4 : 00;
-1E5 : 00;
-1E6 : 00;
-1E7 : 00;
-1E8 : 00;
-1E9 : 00;
-1EA : 00;
-1EB : 00;
-1EC : 6C;
-1ED : 20;
-1EE : 6C;
-1EF : 0A;
-1F0 : 00;
-1F1 : 00;
-1F2 : 00;
-[1F3..7FF] : 00;
-END;

+ 0 - 508
fw/boot.3.mif

@@ -1,508 +0,0 @@
--- generated from boot.bin
--- array 4/4 (hex 3 of [0..3])
-DEPTH = 2048;
-WIDTH = 8;
-ADDRESS_RADIX = HEX;
-DATA_RADIX = HEX;
-CONTENT BEGIN
-000 : 03;
-001 : 00;
-002 : 00;
-003 : 00;
-004 : 0A;
-005 : 7B;
-006 : C0;
-007 : 00;
-008 : A0;
-009 : 00;
-00A : BF;
-00B : 00;
-00C : 05;
-00D : A4;
-00E : 11;
-00F : 81;
-010 : 05;
-011 : 06;
-012 : 8E;
-013 : 20;
-014 : 00;
-015 : 24;
-016 : 05;
-017 : 05;
-018 : 2C;
-019 : 45;
-01A : 46;
-01B : A0;
-01C : C4;
-01D : 7C;
-01E : EF;
-01F : 00;
-020 : 05;
-021 : 00;
-022 : 00;
-023 : 47;
-024 : 7C;
-025 : 44;
-026 : 80;
-027 : 00;
-028 : 05;
-029 : 05;
-02A : 03;
-02B : 00;
-02C : 80;
-02D : 11;
-02E : C4;
-02F : 84;
-030 : 25;
-031 : 5D;
-032 : 97;
-033 : 2C;
-034 : C4;
-035 : 07;
-036 : 09;
-037 : 09;
-038 : C6;
-039 : 59;
-03A : 0B;
-03B : 04;
-03C : 44;
-03D : 04;
-03E : 97;
-03F : FE;
-040 : 37;
-041 : 38;
-042 : 40;
-043 : 40;
-044 : 00;
-045 : 37;
-046 : 40;
-047 : 04;
-048 : 1C;
-049 : 40;
-04A : 44;
-04B : 01;
-04C : 43;
-04D : 73;
-04E : 77;
-04F : EF;
-050 : 76;
-051 : 8A;
-052 : C3;
-053 : C7;
-054 : 07;
-055 : FE;
-056 : 80;
-057 : 40;
-058 : 02;
-059 : 96;
-05A : 00;
-05B : 00;
-05C : 00;
-05D : 00;
-05E : 00;
-05F : 00;
-060 : 00;
-061 : 00;
-062 : 00;
-063 : 00;
-064 : 00;
-065 : 00;
-066 : 00;
-067 : 00;
-068 : 00;
-069 : 00;
-06A : F5;
-06B : 96;
-06C : 8D;
-06D : 01;
-06E : B7;
-06F : 00;
-070 : 00;
-071 : 82;
-072 : FA;
-073 : 17;
-074 : 96;
-075 : F8;
-076 : 71;
-077 : 2A;
-078 : D0;
-079 : 29;
-07A : D4;
-07B : CE;
-07C : C8;
-07D : C4;
-07E : 02;
-07F : 8B;
-080 : 59;
-081 : 00;
-082 : FF;
-083 : 00;
-084 : 94;
-085 : 02;
-086 : 10;
-087 : 03;
-088 : 14;
-089 : FF;
-08A : 54;
-08B : 59;
-08C : 4A;
-08D : 4B;
-08E : 4C;
-08F : 80;
-090 : 00;
-091 : 17;
-092 : 04;
-093 : 00;
-094 : 27;
-095 : 97;
-096 : 2C;
-097 : 8F;
-098 : 96;
-099 : 00;
-09A : 14;
-09B : 01;
-09C : FB;
-09D : 89;
-09E : 27;
-09F : A5;
-0A0 : 8F;
-0A1 : 85;
-0A2 : BF;
-0A3 : 00;
-0A4 : 85;
-0A5 : B7;
-0A6 : 46;
-0A7 : 45;
-0A8 : 11;
-0A9 : 07;
-0AA : 04;
-0AB : 8C;
-0AC : C6;
-0AD : 40;
-0AE : 14;
-0AF : 40;
-0B0 : 14;
-0B1 : FC;
-0B2 : 44;
-0B3 : 01;
-0B4 : 27;
-0B5 : 27;
-0B6 : C3;
-0B7 : 48;
-0B8 : 04;
-0B9 : 00;
-0BA : 83;
-0BB : 24;
-0BC : A8;
-0BD : 46;
-0BE : 00;
-0BF : 00;
-0C0 : 19;
-0C1 : 10;
-0C2 : 0D;
-0C3 : 07;
-0C4 : 97;
-0C5 : 45;
-0C6 : 07;
-0C7 : 24;
-0C8 : BF;
-0C9 : 18;
-0CA : C3;
-0CB : A6;
-0CC : 97;
-0CD : 45;
-0CE : 55;
-0CF : 08;
-0D0 : 00;
-0D1 : 43;
-0D2 : A0;
-0D3 : C4;
-0D4 : C6;
-0D5 : 40;
-0D6 : C1;
-0D7 : 25;
-0D8 : 80;
-0D9 : 00;
-0DA : 00;
-0DB : 00;
-0DC : 00;
-0DD : 00;
-0DE : 00;
-0DF : 00;
-0E0 : 00;
-0E1 : 00;
-0E2 : 00;
-0E3 : 00;
-0E4 : 00;
-0E5 : 00;
-0E6 : 00;
-0E7 : 00;
-0E8 : 00;
-0E9 : 00;
-0EA : 00;
-0EB : 00;
-0EC : 00;
-0ED : 00;
-0EE : 00;
-0EF : 00;
-0F0 : 00;
-0F1 : 00;
-0F2 : 00;
-0F3 : 00;
-0F4 : 00;
-0F5 : 00;
-0F6 : 00;
-0F7 : 00;
-0F8 : 00;
-0F9 : 00;
-0FA : 00;
-0FB : 00;
-0FC : 00;
-0FD : 00;
-0FE : 00;
-0FF : 00;
-100 : 00;
-101 : 00;
-102 : 00;
-103 : 00;
-104 : 00;
-105 : 00;
-106 : 00;
-107 : 00;
-108 : 00;
-109 : 00;
-10A : 00;
-10B : 00;
-10C : 00;
-10D : 00;
-10E : AB;
-10F : E6;
-110 : 00;
-111 : 00;
-112 : 00;
-113 : 00;
-114 : 00;
-115 : 00;
-116 : 00;
-117 : 00;
-118 : 00;
-119 : 00;
-11A : 00;
-11B : 00;
-11C : 00;
-11D : 00;
-11E : 00;
-11F : 00;
-120 : 00;
-121 : 00;
-122 : 00;
-123 : 00;
-124 : 00;
-125 : 00;
-126 : 00;
-127 : 00;
-128 : 00;
-129 : 00;
-12A : 00;
-12B : 00;
-12C : 00;
-12D : 00;
-12E : 00;
-12F : 00;
-130 : 00;
-131 : 00;
-132 : 00;
-133 : 00;
-134 : 00;
-135 : 00;
-136 : 00;
-137 : 00;
-138 : 00;
-139 : 00;
-13A : 00;
-13B : 00;
-13C : 00;
-13D : 00;
-13E : 00;
-13F : 00;
-140 : 00;
-141 : 00;
-142 : 00;
-143 : 00;
-144 : 00;
-145 : 00;
-146 : 00;
-147 : 00;
-148 : 00;
-149 : 00;
-14A : 00;
-14B : 00;
-14C : 00;
-14D : 00;
-14E : 00;
-14F : 00;
-150 : 00;
-151 : 00;
-152 : 00;
-153 : 00;
-154 : 00;
-155 : 00;
-156 : 00;
-157 : 00;
-158 : 00;
-159 : 00;
-15A : 00;
-15B : 00;
-15C : 00;
-15D : 00;
-15E : 00;
-15F : 00;
-160 : 00;
-161 : 00;
-162 : 00;
-163 : 00;
-164 : 00;
-165 : 00;
-166 : 00;
-167 : 00;
-168 : 00;
-169 : 00;
-16A : 00;
-16B : 00;
-16C : 00;
-16D : 00;
-16E : 00;
-16F : 00;
-170 : 00;
-171 : 00;
-172 : 00;
-173 : 00;
-174 : 00;
-175 : 00;
-176 : 00;
-177 : 00;
-178 : 00;
-179 : 00;
-17A : 00;
-17B : 00;
-17C : 00;
-17D : 00;
-17E : 00;
-17F : 00;
-180 : 00;
-181 : 00;
-182 : 00;
-183 : 00;
-184 : 00;
-185 : 00;
-186 : 00;
-187 : 00;
-188 : 00;
-189 : 00;
-18A : 00;
-18B : 00;
-18C : 00;
-18D : 00;
-18E : 00;
-18F : 00;
-190 : 00;
-191 : 00;
-192 : 00;
-193 : 00;
-194 : 00;
-195 : 00;
-196 : 00;
-197 : 00;
-198 : 00;
-199 : 00;
-19A : 00;
-19B : 00;
-19C : 00;
-19D : 00;
-19E : 00;
-19F : 00;
-1A0 : 00;
-1A1 : 00;
-1A2 : 00;
-1A3 : 00;
-1A4 : 00;
-1A5 : 00;
-1A6 : 00;
-1A7 : 00;
-1A8 : 00;
-1A9 : 00;
-1AA : 00;
-1AB : 00;
-1AC : 00;
-1AD : 00;
-1AE : 00;
-1AF : 00;
-1B0 : 00;
-1B1 : 00;
-1B2 : 00;
-1B3 : 00;
-1B4 : 00;
-1B5 : 00;
-1B6 : 00;
-1B7 : 00;
-1B8 : 00;
-1B9 : 00;
-1BA : 00;
-1BB : 00;
-1BC : 00;
-1BD : 00;
-1BE : 00;
-1BF : 00;
-1C0 : 00;
-1C1 : 00;
-1C2 : 00;
-1C3 : 00;
-1C4 : 00;
-1C5 : 00;
-1C6 : 00;
-1C7 : 00;
-1C8 : 00;
-1C9 : 00;
-1CA : 00;
-1CB : 00;
-1CC : 00;
-1CD : 00;
-1CE : 00;
-1CF : 00;
-1D0 : 00;
-1D1 : 00;
-1D2 : 00;
-1D3 : 00;
-1D4 : 00;
-1D5 : 00;
-1D6 : 00;
-1D7 : 00;
-1D8 : 00;
-1D9 : 00;
-1DA : 00;
-1DB : 00;
-1DC : 00;
-1DD : 00;
-1DE : 00;
-1DF : 00;
-1E0 : 00;
-1E1 : 00;
-1E2 : 00;
-1E3 : 00;
-1E4 : 00;
-1E5 : 00;
-1E6 : 00;
-1E7 : 00;
-1E8 : 00;
-1E9 : 00;
-1EA : 00;
-1EB : 00;
-1EC : 6C;
-1ED : 57;
-1EE : 64;
-1EF : 00;
-1F0 : 00;
-1F1 : 00;
-1F2 : 00;
-[1F3..7FF] : 00;
-END;

+ 507 - 0
fw/boot.mif

@@ -0,0 +1,507 @@
+-- generated from boot.bin
+DEPTH = 2048;
+WIDTH = 32;
+ADDRESS_RADIX = HEX;
+DATA_RADIX = HEX;
+CONTENT BEGIN
+000 : 03A0006F;
+001 : 00000000;
+002 : 00000000;
+003 : 00000000;
+004 : 0A40006F;
+005 : 36400293;
+006 : C00006B7;
+007 : 0002C703;
+008 : A001E311;
+009 : 00E68023;
+00A : BFCD0285;
+00B : 00000793;
+00C : 0513C781;
+00D : A48D2A20;
+00E : 11978082;
+00F : 81930000;
+010 : 0513F861;
+011 : 06137CC0;
+012 : 8E097E80;
+013 : 20D54581;
+014 : 00000517;
+015 : 24850513;
+016 : 0517C511;
+017 : 05130000;
+018 : 2C1D2485;
+019 : 450220B5;
+01A : 4601004C;
+01B : A0A13765;
+01C : C4221141;
+01D : 7CC04783;
+01E : EF89C606;
+01F : 00000793;
+020 : 0513C799;
+021 : 00973840;
+022 : 00E70000;
+023 : 47850000;
+024 : 7CF00623;
+025 : 442240B2;
+026 : 80820141;
+027 : 00000793;
+028 : 0593CB89;
+029 : 05137D00;
+02A : 03173840;
+02B : 00670000;
+02C : 80820000;
+02D : 1141A001;
+02E : C4224581;
+02F : 842AC606;
+030 : 25032A29;
+031 : 5D5C7C00;
+032 : 9782C391;
+033 : 2C858522;
+034 : C4221141;
+035 : 0793C04A;
+036 : 09133880;
+037 : 09333880;
+038 : C60640F9;
+039 : 5913C226;
+03A : 0B634029;
+03B : 04130009;
+03C : 44813880;
+03D : 0485401C;
+03E : 97820411;
+03F : FE991CE3;
+040 : 38800793;
+041 : 39000913;
+042 : 40F90933;
+043 : 40295913;
+044 : 00090B63;
+045 : 38800413;
+046 : 401C4481;
+047 : 04110485;
+048 : 1CE39782;
+049 : 40B2FE99;
+04A : 44924422;
+04B : 01414902;
+04C : 433D8082;
+04D : 7363872A;
+04E : 779302C3;
+04F : EFBD00F7;
+050 : 7693E5AD;
+051 : 8A3DFF06;
+052 : C30C96BA;
+053 : C70CC34C;
+054 : 0741C74C;
+055 : FED76BE3;
+056 : 8082E211;
+057 : 40C306B3;
+058 : 0297068A;
+059 : 96960000;
+05A : 00A68067;
+05B : 00B70723;
+05C : 00B706A3;
+05D : 00B70623;
+05E : 00B705A3;
+05F : 00B70523;
+060 : 00B704A3;
+061 : 00B70423;
+062 : 00B703A3;
+063 : 00B70323;
+064 : 00B702A3;
+065 : 00B70223;
+066 : 00B701A3;
+067 : 00B70123;
+068 : 00B700A3;
+069 : 00B70023;
+06A : F5938082;
+06B : 96930FF5;
+06C : 8DD50085;
+06D : 01059693;
+06E : B7618DD5;
+06F : 00279693;
+070 : 00000297;
+071 : 82869696;
+072 : FA8680E7;
+073 : 17C18096;
+074 : 963E8F1D;
+075 : F8C374E3;
+076 : 7179B7A5;
+077 : 2A03CC52;
+078 : D04A7C00;
+079 : 2903D606;
+07A : D422148A;
+07B : CE4ED226;
+07C : C85ACA56;
+07D : C462C65E;
+07E : 02090863;
+07F : 8BAE8B2A;
+080 : 59FD4A85;
+081 : 00492483;
+082 : FFF48413;
+083 : 00044E63;
+084 : 94CA048A;
+085 : 020B8663;
+086 : 1044A783;
+087 : 03778263;
+088 : 14F1147D;
+089 : FF3418E3;
+08A : 542250B2;
+08B : 59025492;
+08C : 4A6249F2;
+08D : 4B424AD2;
+08E : 4C224BB2;
+08F : 80826145;
+090 : 00492783;
+091 : 17FD40D4;
+092 : 04878263;
+093 : 0004A223;
+094 : 2783DAE1;
+095 : 97331889;
+096 : 2C03008A;
+097 : 8FF90049;
+098 : 9682EF89;
+099 : 00492703;
+09A : 148A2783;
+09B : 01871463;
+09C : FB2788E3;
+09D : 893EDBD5;
+09E : 2783B771;
+09F : A58318C9;
+0A0 : 8F7D0844;
+0A1 : 855AE719;
+0A2 : BFE99682;
+0A3 : 00892223;
+0A4 : 852EB7C1;
+0A5 : B7F99682;
+0A6 : 468185AA;
+0A7 : 45014601;
+0A8 : 1141A80D;
+0A9 : 0793C422;
+0AA : 04133900;
+0AB : 8C1D3940;
+0AC : C606C226;
+0AD : 40245493;
+0AE : 1471C881;
+0AF : 401C943E;
+0B0 : 147114FD;
+0B1 : FCE59782;
+0B2 : 442240B2;
+0B3 : 01414492;
+0B4 : 27038082;
+0B5 : 27837C00;
+0B6 : C3A11487;
+0B7 : 487D43D8;
+0B8 : 04E84D63;
+0B9 : 00271813;
+0BA : 8333C11D;
+0BB : 24230107;
+0BC : A88308C3;
+0BD : 46051887;
+0BE : 00E61633;
+0BF : 00C8E8B3;
+0C0 : 1917A423;
+0C1 : 10D32423;
+0C2 : 0D634689;
+0C3 : 070500D5;
+0C4 : 97C2C3D8;
+0C5 : 4501C78C;
+0C6 : 07938082;
+0C7 : 242314C7;
+0C8 : BF6D14F7;
+0C9 : 18C7A683;
+0CA : C3D80705;
+0CB : A6238ED1;
+0CC : 97C218D7;
+0CD : 4501C78C;
+0CE : 557D8082;
+0CF : 08938082;
+0D0 : 007305D0;
+0D1 : 43630000;
+0D2 : A0010005;
+0D3 : C4221141;
+0D4 : C606842A;
+0D5 : 40800433;
+0D6 : C1002019;
+0D7 : 2503A001;
+0D8 : 80827C80;
+0D9 : 6C6C6548;
+0DA : 57202C6F;
+0DB : 646C726F;
+0DC : 000A0D21;
+0DD : 00000000;
+0DE : 00000000;
+0DF : 00000000;
+0E0 : 00000000;
+0E1 : 00000000;
+0E2 : 0000002C;
+0E3 : 0000009C;
+0E4 : 00000070;
+0E5 : 00000000;
+0E6 : 00000000;
+0E7 : 00000684;
+0E8 : 000006EC;
+0E9 : 00000754;
+0EA : 00000000;
+0EB : 00000000;
+0EC : 00000000;
+0ED : 00000000;
+0EE : 00000000;
+0EF : 00000000;
+0F0 : 00000000;
+0F1 : 00000000;
+0F2 : 00000000;
+0F3 : 00000000;
+0F4 : 00000000;
+0F5 : 00000000;
+0F6 : 00000000;
+0F7 : 00000000;
+0F8 : 00000000;
+0F9 : 00000000;
+0FA : 00000000;
+0FB : 00000000;
+0FC : 00000000;
+0FD : 00000000;
+0FE : 00000000;
+0FF : 00000000;
+100 : 00000000;
+101 : 00000000;
+102 : 00000000;
+103 : 00000000;
+104 : 00000000;
+105 : 00000000;
+106 : 00000000;
+107 : 00000000;
+108 : 00000000;
+109 : 00000000;
+10A : 00000000;
+10B : 00000000;
+10C : 00000000;
+10D : 00000000;
+10E : 00000000;
+10F : 00000000;
+110 : 00000001;
+111 : 00000000;
+112 : ABCD330E;
+113 : E66D1234;
+114 : 0005DEEC;
+115 : 0000000B;
+116 : 00000000;
+117 : 00000000;
+118 : 00000000;
+119 : 00000000;
+11A : 00000000;
+11B : 00000000;
+11C : 00000000;
+11D : 00000000;
+11E : 00000000;
+11F : 00000000;
+120 : 00000000;
+121 : 00000000;
+122 : 00000000;
+123 : 00000000;
+124 : 00000000;
+125 : 00000000;
+126 : 00000000;
+127 : 00000000;
+128 : 00000000;
+129 : 00000000;
+12A : 00000000;
+12B : 00000000;
+12C : 00000000;
+12D : 00000000;
+12E : 00000000;
+12F : 00000000;
+130 : 00000000;
+131 : 00000000;
+132 : 00000000;
+133 : 00000000;
+134 : 00000000;
+135 : 00000000;
+136 : 00000000;
+137 : 00000000;
+138 : 00000000;
+139 : 00000000;
+13A : 00000000;
+13B : 00000000;
+13C : 00000000;
+13D : 00000000;
+13E : 00000000;
+13F : 00000000;
+140 : 00000000;
+141 : 00000000;
+142 : 00000000;
+143 : 00000000;
+144 : 00000000;
+145 : 00000000;
+146 : 00000000;
+147 : 00000000;
+148 : 00000000;
+149 : 00000000;
+14A : 00000000;
+14B : 00000000;
+14C : 00000000;
+14D : 00000000;
+14E : 00000000;
+14F : 00000000;
+150 : 00000000;
+151 : 00000000;
+152 : 00000000;
+153 : 00000000;
+154 : 00000000;
+155 : 00000000;
+156 : 00000000;
+157 : 00000000;
+158 : 00000000;
+159 : 00000000;
+15A : 00000000;
+15B : 00000000;
+15C : 00000000;
+15D : 00000000;
+15E : 00000000;
+15F : 00000000;
+160 : 00000000;
+161 : 00000000;
+162 : 00000000;
+163 : 00000000;
+164 : 00000000;
+165 : 00000000;
+166 : 00000000;
+167 : 00000000;
+168 : 00000000;
+169 : 00000000;
+16A : 00000000;
+16B : 00000000;
+16C : 00000000;
+16D : 00000000;
+16E : 00000000;
+16F : 00000000;
+170 : 00000000;
+171 : 00000000;
+172 : 00000000;
+173 : 00000000;
+174 : 00000000;
+175 : 00000000;
+176 : 00000000;
+177 : 00000000;
+178 : 00000000;
+179 : 00000000;
+17A : 00000000;
+17B : 00000000;
+17C : 00000000;
+17D : 00000000;
+17E : 00000000;
+17F : 00000000;
+180 : 00000000;
+181 : 00000000;
+182 : 00000000;
+183 : 00000000;
+184 : 00000000;
+185 : 00000000;
+186 : 00000000;
+187 : 00000000;
+188 : 00000000;
+189 : 00000000;
+18A : 00000000;
+18B : 00000000;
+18C : 00000000;
+18D : 00000000;
+18E : 00000000;
+18F : 00000000;
+190 : 00000000;
+191 : 00000000;
+192 : 00000000;
+193 : 00000000;
+194 : 00000000;
+195 : 00000000;
+196 : 00000000;
+197 : 00000000;
+198 : 00000000;
+199 : 00000000;
+19A : 00000000;
+19B : 00000000;
+19C : 00000000;
+19D : 00000000;
+19E : 00000000;
+19F : 00000000;
+1A0 : 00000000;
+1A1 : 00000000;
+1A2 : 00000000;
+1A3 : 00000000;
+1A4 : 00000000;
+1A5 : 00000000;
+1A6 : 00000000;
+1A7 : 00000000;
+1A8 : 00000000;
+1A9 : 00000000;
+1AA : 00000000;
+1AB : 00000000;
+1AC : 00000000;
+1AD : 00000000;
+1AE : 00000000;
+1AF : 00000000;
+1B0 : 00000000;
+1B1 : 00000000;
+1B2 : 00000000;
+1B3 : 00000000;
+1B4 : 00000000;
+1B5 : 00000000;
+1B6 : 00000000;
+1B7 : 00000000;
+1B8 : 00000000;
+1B9 : 00000000;
+1BA : 00000000;
+1BB : 00000000;
+1BC : 00000000;
+1BD : 00000000;
+1BE : 00000000;
+1BF : 00000000;
+1C0 : 00000000;
+1C1 : 00000000;
+1C2 : 00000000;
+1C3 : 00000000;
+1C4 : 00000000;
+1C5 : 00000000;
+1C6 : 00000000;
+1C7 : 00000000;
+1C8 : 00000000;
+1C9 : 00000000;
+1CA : 00000000;
+1CB : 00000000;
+1CC : 00000000;
+1CD : 00000000;
+1CE : 00000000;
+1CF : 00000000;
+1D0 : 00000000;
+1D1 : 00000000;
+1D2 : 00000000;
+1D3 : 00000000;
+1D4 : 00000000;
+1D5 : 00000000;
+1D6 : 00000000;
+1D7 : 00000000;
+1D8 : 00000000;
+1D9 : 00000000;
+1DA : 00000000;
+1DB : 00000000;
+1DC : 00000000;
+1DD : 00000000;
+1DE : 00000000;
+1DF : 00000000;
+1E0 : 00000000;
+1E1 : 00000000;
+1E2 : 00000000;
+1E3 : 00000000;
+1E4 : 00000000;
+1E5 : 00000000;
+1E6 : 00000000;
+1E7 : 00000000;
+1E8 : 00000000;
+1E9 : 00000000;
+1EA : 00000000;
+1EB : 00000000;
+1EC : 00000000;
+1ED : 00000000;
+1EE : 00000000;
+1EF : 00000000;
+1F0 : 00000398;
+1F1 : 00000000;
+1F2 : 00000398;
+[1F3..7FF] : 00;
+END;

+ 9 - 0
riscv-opts.mk

@@ -0,0 +1,9 @@
+# Extra flags during tools build
+riscv_target_flags =	-fvisibility=hidden -fno-pic \
+			-frename-registers -fshort-enums -fshort-wchar \
+			-ffunction-sections -fdata-sections \
+			-mshorten-memrefs -mdiv -mstrict-align
+
+# Additional flags during application build
+riscv_flags = $(riscv_target_flags) \
+			-Os -ggdb3 -fwrapv -fno-strict-aliasing

+ 1 - 3
tools/Makefile

@@ -13,9 +13,7 @@ all_config = --prefix=$(prefix)/gnu --with-system-zlib
 z80_config = $(all_config) \
 	   --target=z80-none-elf
 
-riscv_target_flags = -fvisibility=hidden -fno-pic -mshorten-memrefs \
-		     -frename-registers -mdiv -mno-strict-align \
-		     -ffunction-sections -fdata-sections
+include ../riscv-opts.mk
 
 riscv_config = $(all_config) \
 	    --with-arch=rv32imc --with-abi=ilp32 \

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio