OpenCores
URL https://opencores.org/ocsvn/raptor64/raptor64/trunk

Subversion Repositories raptor64

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 20 to Rev 21
    Reverse comparison

Rev 20 → Rev 21

/raptor64/trunk/rtl/verilog/Raptor64mc.v
315,6 → 315,7
`define BAND 5'd12
`define BOR 5'd13
`define BNR 5'd14
`define LOOP 5'd15
`define BLTR 5'd16
`define BGER 5'd17
`define BLER 5'd18
1260,6 → 1261,11
`BFCHG: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? ~b[n] : b[n]; xData[64] = 1'b0; end
default: xData = 65'd0;
endcase
`BTRR:
case(xIR[4:0])
`LOOP: xData = b - 64'd1;
default: xData = 65'd0;
endcase
`SETLO: xData = imm;
`SETHI: xData = {imm[63:32],a[31:0]};
`ADDI: xData = a + imm;
2693,7 → 2699,11
`SETHI: xRt <= {dAXC,dRa};
`RR: xRt <= {dAXC,dIR[24:20]};
`BTRI: xRt <= 9'd0;
`BTRR: xRt <= 9'd0;
`BTRR:
case(dIR[4:0])
`LOOP: xRt <= {dAXC,dRb};
default: xRt <= 9'd0;
endcase
`TRAPcc: xRt <= 9'd0;
`TRAPcci: xRt <= 9'd0;
`JMP: xRt <= 9'd00;
2849,7 → 2859,7
end
`BTRR:
case(insn[4:0])
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR,`LOOP,`BRA:
if (predict_taken) begin
$display("Taking predicted branch: %h",{pc_axc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00});
dbranch_taken <= 1'b1;
2917,7 → 2927,7
`BTRR:
case(xIR[4:0])
// BEQ r1,r2,label
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR,`BRA,`BRN,`LOOP:
if (takb & !xbranch_taken) begin
$display("Taking branch %h",xpc[63:4] + {{42{xIR[24]}},xIR[24:7]});
pc[xAXC][63:4] <= xpc[63:4] + {{42{xIR[24]}},xIR[24:7]};
/raptor64/trunk/rtl/verilog/insn_dumpsc.v
53,6 → 53,8
`BLEU: $display("BLEU r%d,r%d,%h.%h)",insn[34:30],insn[29:25],{{44{insn[24]}},insn[24:7]},insn[6:5]);
`BGTU: $display("BGTU r%d,r%d,%h.%h)",insn[34:30],insn[29:25],{{44{insn[24]}},insn[24:7]},insn[6:5]);
`BGEU: $display("BGEU r%d,r%d,%h.%h)",insn[34:30],insn[29:25],{{44{insn[24]}},insn[24:7]},insn[6:5]);
`BRA: $display("BRA %h.%h)",{{44{insn[24]}},insn[24:7]},insn[6:5]);
`LOOP: $display("LOOP r%d,%h.%h)",insn[29:25],{{44{insn[24]}},insn[24:7]},insn[6:5]);
default: ;
endcase
`SETLO: $display("SETLO r%d,#%h", insn[36:32],{{32{insn[31]}},insn[31:0]});
/raptor64/trunk/rtl/verilog/Raptor64_tb.v
16,9 → 16,15
reg [7:0] cnt;
wire wr_empty = 1'b1;
wire wr_full;
reg [63:0] iromout;
reg [63:0] romout;
wire stk_ack;
wire scr_ack;
wire [63:0] stk_dato;
wire [63:0] scr_dato;
wire [15:0] tc_dato;
wire tc_ack;
 
assign sys_ack = sys_stb;
assign sys_ack = sys_stb|stk_ack|scr_ack|tc_ack;
 
initial begin
clk = 1;
26,93 → 32,525
nmi = 0;
#100 rst = 1;
#100 rst = 0;
#1300 nmi = 1;
#800 nmi = 1;
#100 nmi = 0;
end
 
always #10 clk = ~clk; // 50 MHz
 
rtfTextController tc1
(
.rst_i(rst),
.clk_i(clk),
.cyc_i(sys_cyc),
.stb_i(sys_stb),
.ack_o(tc_ack),
.we_i(sys_we),
.sel_i(sys_sel[1:0]|sys_sel[3:2]|sys_sel[5:4]|sys_sel[7:6]),
.adr_i(sys_adr),
.dat_i(sys_dbo[15:0]),
.dat_o(tc_dato),
.lp(),
.curpos(),
.vclk(),
.eol(),
.eof(),
.blank(),
.border(),
.rgbIn(),
.rgbOut()
);
 
scratchmem u_sc
(
.clk_i(clk),
.cyc_i(sys_cyc),
.stb_i(sys_stb),
.ack_o(scr_ack),
.we_i(sys_we),
.sel_i(sys_sel),
.adr_i(sys_adr),
.dat_i(sys_dbo),
.dat_o(scr_dato)
);
 
stkmem u_stk
(
.clk_i(clk),
.cyc_i(sys_cyc),
.stb_i(sys_stb),
.ack_o(stk_ack),
.we_i(sys_we),
.adr_i(sys_adr),
.dat_i(sys_dbo),
.dat_o(stk_dato)
);
 
reg [63:0] keybdout;
always @(sys_adr)
if (sys_adr==64'hFFFF_FFFF_FFDC_0000) begin
$display ("keyboard=FF");
keybdout <= 64'hFFFF_FFFF_FFFF_FFFF;
end
else
keybdout <= 64'd0;
always @(sys_adr)
case(sys_adr)// | 64'hFFFF_FFFF_FFFF_0000)
64'hFFFFFFFFFFFFF000: iromout <= 64'h00001CA1FFD00000;
64'hFFFFFFFFFFFFF008: iromout <= 64'h0A30000002028800;
64'hFFFFFFFFFFFFF010: iromout <= 64'h0000099046000000;
64'hFFFFFFFFFFFFF018: iromout <= 64'h038840000010A108;
64'hFFFFFFFFFFFFF020: iromout <= 64'h002AA2F881FFFF89;
64'hFFFFFFFFFFFFF028: iromout <= 64'h2F8400001A902008;
64'hFFFFFFFFFFFFF030: iromout <= 64'h0022A4A176543210;
64'hFFFFFFFFFFFFF038: iromout <= 64'h008400009A902100;
64'hFFFFFFFFFFFFF040: iromout <= 64'h0024A4A1FEDCBA98;
64'hFFFFFFFFFFFFF048: iromout <= 64'h00840000A2902100;
64'hFFFFFFFFFFFFF050: iromout <= 64'h004FF6F800000028;
64'hFFFFFFFFFFFFF058: iromout <= 64'h0580400042B16008;
64'hFFFFFFFFFFFFF060: iromout <= 64'hFFFFFC1044500018;
64'hFFFFFFFFFFFFF068: iromout <= 64'h05803D00000FFFFF;
64'hFFFFFFFFFFFFF070: iromout <= 64'h0000505804000032;
64'hFFFFFFFFFFFFF078: iromout <= 64'h1884400000016018;
64'hFFFFFFFFFFFFF080: iromout <= 64'h0000042842000002;
64'hFFFFFFFFFFFFF088: iromout <= 64'h2F8C1FFFFC90C318;
64'hFFFFFFFFFFFFF090: iromout <= 64'h000000C7FFFFFC2C;
64'hFFFFFFFFFFFFF098: iromout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFF0B0: iromout <= 64'h700003FFFFFFFFFF;
64'hFFFFFFFFFFFFF0B8: iromout <= 64'h100440000001600F;
64'hFFFFFFFFFFFFF0C0: iromout <= 64'h000006F881FFFFC1;
64'hFFFFFFFFFFFFF0C8: iromout <= 64'h0D83E00000040100;
64'hFFFFFFFFFFFFF0D0: iromout <= 64'hAAAB541000800009;
64'hFFFFFFFFFFFFF0D8: iromout <= 64'h05802AA5555F5554;
64'hFFFFFFFFFFFFF0E0: iromout <= 64'h0000019A02000000;
64'hFFFFFFFFFFFFF0E8: iromout <= 64'h0104430000646810;
64'hFFFFFFFFFFFFF0F0: iromout <= 64'h000022F8C00000A9;
64'hFFFFFFFFFFFFF0F8: iromout <= 64'h042060000000A840;
64'hFFFFFFFFFFFFF100: iromout <= 64'h800026F8C1FFFF00;
64'hFFFFFFFFFFFFF108: iromout <= 64'h0100080000904802;
64'hFFFFFFFFFFFFF110: iromout <= 64'hA955551A04000000;
64'hFFFFFFFFFFFFF118: iromout <= 64'h2F8C00001091021A;
64'hFFFFFFFFFFFFF120: iromout <= 64'h0000002210000008;
64'hFFFFFFFFFFFFF128: iromout <= 64'h2F8C1FFFF801081C;
64'hFFFFFFFFFFFFF130: iromout <= 64'h000026FA14000329;
64'hFFFFFFFFFFFFF138: iromout <= 64'h3AAAAD5552A04002;
64'hFFFFFFFFFFFFF140: iromout <= 64'h000000580355AAAA;
64'hFFFFFFFFFFFFF148: iromout <= 64'h11A0400000066808;
64'hFFFFFFFFFFFFF150: iromout <= 64'h0003241044300006;
64'hFFFFFFFFFFFFF158: iromout <= 64'h02210000008BE300;
64'hFFFFFFFFFFFFF160: iromout <= 64'hFFFC804207000000;
64'hFFFFFFFFFFFFF168: iromout <= 64'h01200B00009BE307;
64'hFFFFFFFFFFFFF170: iromout <= 64'h0000001000800009;
64'hFFFFFFFFFFFFF178: iromout <= 64'h0408755AAAA46810;
64'hFFFFFFFFFFFFF180: iromout <= 64'h000022F8C00000A9;
64'hFFFFFFFFFFFFF188: iromout <= 64'h0420700000008840;
64'hFFFFFFFFFFFFF190: iromout <= 64'h000222F8C1FFFF20;
64'hFFFFFFFFFFFFF198: iromout <= 64'h01216800014BE858;
64'hFFFFFFFFFFFFF1A0: iromout <= 64'h000052FA14000048;
64'hFFFFFFFFFFFFF1A8: iromout <= 64'h1981000040004852;
64'hFFFFFFFFFFFFF1B0: iromout <= 64'h000080D83E000000;
64'hFFFFFFFFFFFFF1B8: iromout <= 64'h19803FF000000000;
64'hFFFFFFFFFFFFF1C0: iromout <= 64'h0000D19805FF0008;
64'hFFFFFFFFFFFFF1C8: iromout <= 64'h2F84000002902008;
64'hFFFFFFFFFFFFF1D0: iromout <= 64'h0010A00802000228;
64'hFFFFFFFFFFFFF1D8: iromout <= 64'h008800005A902010;
64'hFFFFFFFFFFFFF1E0: iromout <= 64'h40000C1884680001;
64'hFFFFFFFFFFFFF1E8: iromout <= 64'h1184400000004110;
64'hFFFFFFFFFFFFF1F0: iromout <= 64'h0000200880000529;
64'hFFFFFFFFFFFFF1F8: iromout <= 64'h008800005A946110;
64'hFFFFFFFFFFFFF200: iromout <= 64'h0000D40800000034;
64'hFFFFFFFFFFFFF208: iromout <= 64'h11803FF000002000;
64'hFFFFFFFFFFFFF210: iromout <= 64'h0000811805FF0008;
64'hFFFFFFFFFFFFF218: iromout <= 64'h3780000000000000;
64'hFFFFFFFFFFFFFFB0: iromout <= 64'h000000CFFFFFFC6E;
64'hFFFFFFFFFFFFFFB8: iromout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFC0: iromout <= 64'h000000CFFFFFFC6E;
64'hFFFFFFFFFFFFFFC8: iromout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFD0: iromout <= 64'h0000037800000000;
64'hFFFFFFFFFFFFFFD8: iromout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFE0: iromout <= 64'h000000CFFFFFFC6D;
64'hFFFFFFFFFFFFFFE8: iromout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFF0: iromout <= 64'h000000CFFFFFFC00;
64'hFFFFFFFFFFFFFFF8: iromout <= 64'h0000000000000000;
 
64'hFFFFFFFFFFFFF000: romout <= 64'h000030000000000A;
64'hFFFFFFFFFFFFF008: romout <= 64'h0BEFFFFEFF800000;
64'hFFFFFFFFFFFFF010: romout <= 64'h001050A3000000CE;
64'hFFFFFFFFFFFFF018: romout <= 64'h1080600041462018;
64'hFFFFFFFFFFFFF020: romout <= 64'h001058A300000020;
64'hFFFFFFFFFFFFF028: romout <= 64'h1080400041662018;
64'hFFFFFFFFFFFFF030: romout <= 64'h000036F886000048;
64'hFFFFFFFFFFFFF038: romout <= 64'h1080600041400000;
64'hFFFFFFFFFFFFF040: romout <= 64'h001060C7FFFFFCC6;
64'hFFFFFFFFFFFFF048: romout <= 64'h1880000041A62000;
64'hFFFFFFFFFFFFF050: romout <= 64'h001070A100000001;
64'hFFFFFFFFFFFFF058: romout <= 64'h0A1FFFFF0E060008;
64'hFFFFFFFFFFFFF060: romout <= 64'h002AA0C7FFFFFDC1;
64'hFFFFFFFFFFFFF068: romout <= 64'h2F84000018902008;
64'hFFFFFFFFFFFFF070: romout <= 64'h0022A4A176543210;
64'hFFFFFFFFFFFFF078: romout <= 64'h008400009A902100;
64'hFFFFFFFFFFFFF080: romout <= 64'h0024A4A1FEDCBA98;
64'hFFFFFFFFFFFFF088: romout <= 64'h00840000A2902100;
64'hFFFFFFFFFFFFF090: romout <= 64'h000028CFFFFFFE6A;
64'hFFFFFFFFFFFFF098: romout <= 64'h03FBC000018BE000;
64'hFFFFFFFFFFFFF0A0: romout <= 64'hFFC3427F40000003;
64'hFFFFFFFFFFFFF0A8: romout <= 64'h1008200000028BFF;
64'hFFFFFFFFFFFFF0B0: romout <= 64'hFFF132F8400000A8;
64'hFFFFFFFFFFFFF0B8: romout <= 64'h0288400000131FFF;
64'hFFFFFFFFFFFFF0C0: romout <= 64'h00000EF801FFFF4A;
64'hFFFFFFFFFFFFF0C8: romout <= 64'h0DFBFE000039DD00;
64'hFFFFFFFFFFFFF0D0: romout <= 64'h6F57206F6C6C6548;
64'hFFFFFFFFFFFFF0E0: romout <= 64'h3436726F74706152;
64'hFFFFFFFFFFFFF0E8: romout <= 64'h206D657473797320;
64'hFFFFFFFFFFFFF0F0: romout <= 64'h676E697472617473;
64'hFFFFFFFFFFFFF0F8: romout <= 64'h000000002E2E2E2E;
64'hFFFFFFFFFFFFF100: romout <= 64'h0000003FBC000008;
64'hFFFFFFFFFFFFF108: romout <= 64'h0A1FFDC0A0067E18;
64'hFFFFFFFFFFFFF110: romout <= 64'h0000060046000001;
64'hFFFFFFFFFFFFF118: romout <= 64'h2F8C000000814318;
64'hFFFFFFFFFFFFF120: romout <= 64'h0000011F86000000;
64'hFFFFFFFFFFFFF128: romout <= 64'h0DFBFE0000180108;
64'hFFFFFFFFFFFFF130: romout <= 64'h0000203FBC000010;
64'hFFFFFFFFFFFFF138: romout <= 64'h19F8600000067E10;
64'hFFFFFFFFFFFFF140: romout <= 64'h000004A3FFDC0A00;
64'hFFFFFFFFFFFFF148: romout <= 64'h0508400004080310;
64'hFFFFFFFFFFFFF150: romout <= 64'h000002F881FFFFA8;
64'hFFFFFFFFFFFFF158: romout <= 64'h11F8600000090308;
64'hFFFFFFFFFFFFF160: romout <= 64'h8000091F84000008;
64'hFFFFFFFFFFFFF168: romout <= 64'h03FBC00001837EFF;
64'hFFFFFFFFFFFFF170: romout <= 64'h0011427F00000007;
64'hFFFFFFFFFFFFF178: romout <= 64'h0504200000F42008;
64'hFFFFFFFFFFFFF180: romout <= 64'h700000A300000440;
64'hFFFFFFFFFFFFF188: romout <= 64'h18801DC000242017;
64'hFFFFFFFFFFFFF190: romout <= 64'h000005A8C2200030;
64'hFFFFFFFFFFFFF198: romout <= 64'h0504200000F08108;
64'hFFFFFFFFFFFFF1A0: romout <= 64'h0011498802000450;
64'hFFFFFFFFFFFFF1A8: romout <= 64'h2F84400010942010;
64'hFFFFFFFFFFFFF1B0: romout <= 64'h00003C2084000001;
64'hFFFFFFFFFFFFF1B8: romout <= 64'h1880400045214210;
64'hFFFFFFFFFFFFF1C0: romout <= 64'h0000627700000007;
64'hFFFFFFFFFFFFF1C8: romout <= 64'h000000000200BEF0;
64'hFFFFFFFFFFFFF1D0: romout <= 64'h000001800200041C;
64'hFFFFFFFFFFFFF1D8: romout <= 64'h03FBC000010360F8;
64'hFFFFFFFFFFFFF1E0: romout <= 64'h7000027F40000002;
64'hFFFFFFFFFFFFF1E8: romout <= 64'h2008200000028BFF;
64'hFFFFFFFFFFFFF1F0: romout <= 64'h00000AF841FFFFC1;
64'hFFFFFFFFFFFFF1F8: romout <= 64'h050420000FF80200;
64'hFFFFFFFFFFFFF200: romout <= 64'h0002A1000400041C;
64'hFFFFFFFFFFFFF208: romout <= 64'h2C04548000DBE200;
64'hFFFFFFFFFFFFF210: romout <= 64'h000008C7FFFFFD2D;
64'hFFFFFFFFFFFFF218: romout <= 64'h0DFBFE000029DD00;
64'hFFFFFFFFFFFFF220: romout <= 64'h00000C3FBC000010;
64'hFFFFFFFFFFFFF228: romout <= 64'h118020004009FC00;
64'hFFFFFFFFFFFFF230: romout <= 64'h0010002042000001;
64'hFFFFFFFFFFFFF238: romout <= 64'h0A2FFD0000066008;
64'hFFFFFFFFFFFFF240: romout <= 64'h0000050882000066;
64'hFFFFFFFFFFFFF248: romout <= 64'h1888200006608108;
64'hFFFFFFFFFFFFF250: romout <= 64'h0010010801FF0000;
64'hFFFFFFFFFFFFF258: romout <= 64'h0504200007F46008;
64'hFFFFFFFFFFFFF260: romout <= 64'hFFF27AC840080040;
64'hFFFFFFFFFFFFF268: romout <= 64'h2770000000331FFF;
64'hFFFFFFFFFFFFF270: romout <= 64'h0000802FBC000010;
64'hFFFFFFFFFFFFF278: romout <= 64'h03FBC00002000000;
64'hFFFFFFFFFFFFF280: romout <= 64'hFFF4727F40000007;
64'hFFFFFFFFFFFFF288: romout <= 64'h0204201000031FFF;
64'hFFFFFFFFFFFFF290: romout <= 64'h8000110844000000;
64'hFFFFFFFFFFFFF298: romout <= 64'h1884400000006210;
64'hFFFFFFFFFFFFF2A0: romout <= 64'h0003211804000408;
64'hFFFFFFFFFFFFF2A8: romout <= 64'h10806000414BE110;
64'hFFFFFFFFFFFFF2B0: romout <= 64'h0010218886000000;
64'hFFFFFFFFFFFFF2B8: romout <= 64'h2774000000766008;
64'hFFFFFFFFFFFFF2C0: romout <= 64'h004FF4DFBFE00004;
64'hFFFFFFFFFFFFF2C8: romout <= 64'h0580400042B16008;
64'hFFFFFFFFFFFFF2D0: romout <= 64'hFFFFFC1044500018;
64'hFFFFFFFFFFFFF2D8: romout <= 64'h05803D00000FFFFF;
64'hFFFFFFFFFFFFF2E0: romout <= 64'h0000505804000032;
64'hFFFFFFFFFFFFF2E8: romout <= 64'h1884400000016018;
64'hFFFFFFFFFFFFF2F0: romout <= 64'h0000042842000002;
64'hFFFFFFFFFFFFF2F8: romout <= 64'h2F8C1FFFFC90C318;
64'hFFFFFFFFFFFFF300: romout <= 64'h000000C7FFFFFFFE;
64'hFFFFFFFFFFFFF308: romout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFF310: romout <= 64'h0000037800000000;
64'hFFFFFFFFFFFFF318: romout <= 64'h03FBC000028DE000;
64'hFFFFFFFFFFFFF320: romout <= 64'h6800027F4000000F;
64'hFFFFFFFFFFFFF328: romout <= 64'h108C200000028FFF;
64'hFFFFFFFFFFFFF330: romout <= 64'h80006108C4000002;
64'hFFFFFFFFFFFFF338: romout <= 64'h0100440000904110;
64'hFFFFFFFFFFFFF340: romout <= 64'hFFF430A100000020;
64'hFFFFFFFFFFFFF348: romout <= 64'h0A3FFD0000031FFF;
64'hFFFFFFFFFFFFF350: romout <= 64'h00000988C2000000;
64'hFFFFFFFFFFFFF358: romout <= 64'h2F80400000F08318;
64'hFFFFFFFFFFFFF360: romout <= 64'h0010501008200009;
64'hFFFFFFFFFFFFF368: romout <= 64'h0A3FFD1000042008;
64'hFFFFFFFFFFFFF370: romout <= 64'h00000988C2000000;
64'hFFFFFFFFFFFFF378: romout <= 64'h2F80400000F08318;
64'hFFFFFFFFFFFFF380: romout <= 64'h800016774000000F;
64'hFFFFFFFFFFFFF388: romout <= 64'h03FBC00002837EFF;
64'hFFFFFFFFFFFFF390: romout <= 64'h6800027F4000000F;
64'hFFFFFFFFFFFFF398: romout <= 64'h108C200000028FFF;
64'hFFFFFFFFFFFFF3A0: romout <= 64'h80006108C4000002;
64'hFFFFFFFFFFFFF3A8: romout <= 64'h0108220000504110;
64'hFFFFFFFFFFFFF3B0: romout <= 64'h000084A3FFD00000;
64'hFFFFFFFFFFFFF3B8: romout <= 64'h188C80000006A309;
64'hFFFFFFFFFFFFF3C0: romout <= 64'hFFFEBC28C6000002;
64'hFFFFFFFFFFFFF3C8: romout <= 64'h0A3FFDA0000BE017;
64'hFFFFFFFFFFFFF3D0: romout <= 64'h00000508C2000002;
64'hFFFFFFFFFFFFF3D8: romout <= 64'h0C7FFFFFCFA0E108;
64'hFFFFFFFFFFFFF3E0: romout <= 64'h800016774000000F;
64'hFFFFFFFFFFFFF3E8: romout <= 64'h03FBC00001837EFF;
64'hFFFFFFFFFFFFF3F0: romout <= 64'h6800027F00000007;
64'hFFFFFFFFFFFFF3F8: romout <= 64'h108C400000028FFF;
64'hFFFFFFFFFFFFF400: romout <= 64'h2000001082300018;
64'hFFFFFFFFFFFFF408: romout <= 64'h028C7D0000006318;
64'hFFFFFFFFFFFFF410: romout <= 64'h000000A100000020;
64'hFFFFFFFFFFFFF418: romout <= 64'h028C600000262308;
64'hFFFFFFFFFFFFF420: romout <= 64'h00001EF805FFFFAF;
64'hFFFFFFFFFFFFF428: romout <= 64'h0DFBFE000039DC00;
64'hFFFFFFFFFFFFF430: romout <= 64'h80010450420000FF;
64'hFFFFFFFFFFFFF438: romout <= 64'h2B04020005AA8100;
64'hFFFFFFFFFFFFF440: romout <= 64'h400186B84010007A;
64'hFFFFFFFFFFFFF448: romout <= 64'h03042000060A8100;
64'hFFFFFFFFFFFFF450: romout <= 64'h0000005842000100;
64'hFFFFFFFFFFFFF458: romout <= 64'h050420000FF360F8;
64'hFFFFFFFFFFFFF460: romout <= 64'h0000F2B84008001A;
64'hFFFFFFFFFFFFF468: romout <= 64'h0D83E0000000A108;
64'hFFFFFFFFFFFFF470: romout <= 64'h0001FD0802000418;
64'hFFFFFFFFFFFFF478: romout <= 64'h0A3FFDA000014108;
64'hFFFFFFFFFFFFF480: romout <= 64'h80006108C4000000;
64'hFFFFFFFFFFFFF488: romout <= 64'h1080200041A04208;
64'hFFFFFFFFFFFFF490: romout <= 64'h80000C504200007F;
64'hFFFFFFFFFFFFF498: romout <= 64'h0188408000004208;
64'hFFFFFFFFFFFFF4A0: romout <= 64'h40000188C4000016;
64'hFFFFFFFFFFFFF4A8: romout <= 64'h010041000090A217;
64'hFFFFFFFFFFFFF4B0: romout <= 64'h500034D83E000000;
64'hFFFFFFFFFFFFF4B8: romout <= 64'h1880000041AB2100;
64'hFFFFFFFFFFFFF4C0: romout <= 64'hD00244D83E000000;
64'hFFFFFFFFFFFFF4C8: romout <= 64'h03FBC000008B2100;
64'hFFFFFFFFFFFFF4D0: romout <= 64'h0010699F84000000;
64'hFFFFFFFFFFFFF4D8: romout <= 64'h2C08018003842010;
64'hFFFFFFFFFFFFF4E0: romout <= 64'h0010682884000001;
64'hFFFFFFFFFFFFF4E8: romout <= 64'h11F8400000062010;
64'hFFFFFFFFFFFFF4F0: romout <= 64'hC00240DFBFE00001;
64'hFFFFFFFFFFFFF4F8: romout <= 64'h03FBC000008B2100;
64'hFFFFFFFFFFFFF500: romout <= 64'h0010619F84000000;
64'hFFFFFFFFFFFFF508: romout <= 64'h2C0BFE8000042010;
64'hFFFFFFFFFFFFF510: romout <= 64'h0010603884000001;
64'hFFFFFFFFFFFFF518: romout <= 64'h2F801FFFECA62010;
64'hFFFFFFFFFFFFF520: romout <= 64'h000022C840280093;
64'hFFFFFFFFFFFFF528: romout <= 64'h19F840000000FEF0;
64'hFFFFFFFFFFFFF530: romout <= 64'hE00001080400041A;
64'hFFFFFFFFFFFFF538: romout <= 64'h03884000001B02FE;
64'hFFFFFFFFFFFFF540: romout <= 64'hFFF529880400041A;
64'hFFFFFFFFFFFFF548: romout <= 64'h2C840340092BE007;
64'hFFFFFFFFFFFFF550: romout <= 64'h0000003FBC000008;
64'hFFFFFFFFFFFFF558: romout <= 64'h1080400041867E10;
64'hFFFFFFFFFFFFF560: romout <= 64'h000006C0BF88001E;
64'hFFFFFFFFFFFFF568: romout <= 64'h188040004180A210;
64'hFFFFFFFFFFFFF570: romout <= 64'hD00252F801FFFBCA;
64'hFFFFFFFFFFFFF578: romout <= 64'h03FBC000008B2100;
64'hFFFFFFFFFFFFF580: romout <= 64'h0010699F84000000;
64'hFFFFFFFFFFFFF588: romout <= 64'h2F8800000C842010;
64'hFFFFFFFFFFFFF590: romout <= 64'hFFEB29880000041A;
64'hFFFFFFFFFFFFF598: romout <= 64'h18800000418BE007;
64'hFFFFFFFFFFFFF5A0: romout <= 64'h0000C2F801FFFA4A;
64'hFFFFFFFFFFFFF5A8: romout <= 64'h27F4000001F0FEF0;
64'hFFFFFFFFFFFFF5B0: romout <= 64'hFFF472C840180099;
64'hFFFFFFFFFFFFF5B8: romout <= 64'h0100230000931FFF;
64'hFFFFFFFFFFFFF5C0: romout <= 64'h0006A9080200041A;
64'hFFFFFFFFFFFFF5C8: romout <= 64'h2C840680008BE000;
64'hFFFFFFFFFFFFF5D0: romout <= 64'h0012A1080400041A;
64'hFFFFFFFFFFFFF5D8: romout <= 64'h03884000001BE200;
64'hFFFFFFFFFFFFF5E0: romout <= 64'hFFF471880400041A;
64'hFFFFFFFFFFFFF5E8: romout <= 64'h0100230000931FFF;
64'hFFFFFFFFFFFFF5F0: romout <= 64'h000009080200041A;
64'hFFFFFFFFFFFFF5F8: romout <= 64'h188C400000042310;
64'hFFFFFFFFFFFFF600: romout <= 64'h00000428C6000002;
64'hFFFFFFFFFFFFF608: romout <= 64'h0A4FFDA00000A108;
64'hFFFFFFFFFFFFF610: romout <= 64'hFFFC92090A000000;
64'hFFFFFFFFFFFFF618: romout <= 64'h0A200000020BE12F;
64'hFFFFFFFFFFFFF620: romout <= 64'h0008A988C5FFFFFE;
64'hFFFFFFFFFFFFF628: romout <= 64'h2C04040000ABE000;
64'hFFFFFFFFFFFFF630: romout <= 64'hFFF4701002400009;
64'hFFFFFFFFFFFFF638: romout <= 64'h0100230000931FFF;
64'hFFFFFFFFFFFFF640: romout <= 64'hFFF4301008100009;
64'hFFFFFFFFFFFFF648: romout <= 64'h188C200000031FFF;
64'hFFFFFFFFFFFFF650: romout <= 64'h00007CC7FFFFFD9C;
64'hFFFFFFFFFFFFF658: romout <= 64'h0DFBFE000069DD00;
64'hFFFFFFFFFFFFF660: romout <= 64'h00007CC7FFFFFDAC;
64'hFFFFFFFFFFFFF668: romout <= 64'h0DFBFE000069DD00;
64'hFFFFFFFFFFFFF670: romout <= 64'h00001C3FBC000020;
64'hFFFFFFFFFFFFF678: romout <= 64'h0A3FFDA00009FD00;
64'hFFFFFFFFFFFFF680: romout <= 64'h00000608C2000016;
64'hFFFFFFFFFFFFF688: romout <= 64'h248C20000160A108;
64'hFFFFFFFFFFFFF690: romout <= 64'h000005080200041A;
64'hFFFFFFFFFFFFF698: romout <= 64'h1880200041A0A108;
64'hFFFFFFFFFFFFF6A0: romout <= 64'h000B1A08C4000000;
64'hFFFFFFFFFFFFF6A8: romout <= 64'h1880000041ABE110;
64'hFFFFFFFFFFFFF6B0: romout <= 64'h0000050802000418;
64'hFFFFFFFFFFFFF6B8: romout <= 64'h188020004180A108;
64'hFFFFFFFFFFFFF6C0: romout <= 64'h000008A3FFDA0000;
64'hFFFFFFFFFFFFF6C8: romout <= 64'h2F8440001C682310;
64'hFFFFFFFFFFFFF6D0: romout <= 64'h0010603884000001;
64'hFFFFFFFFFFFFF6D8: romout <= 64'h108C400000062010;
64'hFFFFFFFFFFFFF6E0: romout <= 64'h0000581884080000;
64'hFFFFFFFFFFFFF6E8: romout <= 64'h0104410000542308;
64'hFFFFFFFFFFFFF6F0: romout <= 64'hFFF38988C2000016;
64'hFFFFFFFFFFFFF6F8: romout <= 64'h2774000000731FFF;
64'hFFFFFFFFFFFFF700: romout <= 64'h000060DFBFE00004;
64'hFFFFFFFFFFFFF708: romout <= 64'h27F400000030DEF0;
64'hFFFFFFFFFFFFF710: romout <= 64'h0002A12844000000;
64'hFFFFFFFFFFFFF718: romout <= 64'h0C7FFFFFD2DBE200;
64'hFFFFFFFFFFFFF720: romout <= 64'h00000EF801FFFF8A;
64'hFFFFFFFFFFFFF728: romout <= 64'h0DFBFE000039DD00;
64'hFFFFFFFFFFFFF730: romout <= 64'h0000003FBC000008;
64'hFFFFFFFFFFFFF738: romout <= 64'h0C7FFFFFDC167EF8;
64'hFFFFFFFFFFFFF740: romout <= 64'h0000211FBE000000;
64'hFFFFFFFFFFFFF748: romout <= 64'h037BC0000100BEF0;
64'hFFFFFFFFFFFFF750: romout <= 64'h0000219F82000000;
64'hFFFFFFFFFFFFF758: romout <= 64'h0A10000000D67EF8;
64'hFFFFFFFFFFFFF760: romout <= 64'h000028C7FFFFFD2D;
64'hFFFFFFFFFFFFF768: romout <= 64'h0C7FFFFFD2D28400;
64'hFFFFFFFFFFFFF770: romout <= 64'h0000211F82000000;
64'hFFFFFFFFFFFFF778: romout <= 64'h0DFBFE0000247EF8;
64'hFFFFFFFFFFFFF780: romout <= 64'h00002037BC000010;
64'hFFFFFFFFFFFFF788: romout <= 64'h19F8200000067EF8;
64'hFFFFFFFFFFFFF790: romout <= 64'h0000C0504200000F;
64'hFFFFFFFFFFFFF798: romout <= 64'h2B04014003908108;
64'hFFFFFFFFFFFFF7A0: romout <= 64'hFFF4B42042000007;
64'hFFFFFFFFFFFFF7A8: romout <= 64'h11F8200000031FFF;
64'hFFFFFFFFFFFFF7B0: romout <= 64'h8000091FBE000008;
64'hFFFFFFFFFFFFF7B8: romout <= 64'h03FBC00001037EFF;
64'hFFFFFFFFFFFFF7C0: romout <= 64'h8000127F40000001;
64'hFFFFFFFFFFFFF7C8: romout <= 64'h0C7FFFFFDE006108;
64'hFFFFFFFFFFFFF7D0: romout <= 64'hFFF7801842200002;
64'hFFFFFFFFFFFFF7D8: romout <= 64'h2774000000131FFF;
64'hFFFFFFFFFFFFF7E0: romout <= 64'h000060DFBFE00002;
64'hFFFFFFFFFFFFF7E8: romout <= 64'h27F400000050FEF0;
64'hFFFFFFFFFFFFF7F0: romout <= 64'h000008A300000007;
64'hFFFFFFFFFFFFF7F8: romout <= 64'h0C7FFFFFDEE06109;
64'hFFFFFFFFFFFFF800: romout <= 64'h000016F806003FCF;
64'hFFFFFFFFFFFFF808: romout <= 64'h0DFBFE000039DD00;
64'hFFFFFFFFFFFFF810: romout <= 64'hFFF4B4A10000003A;
64'hFFFFFFFFFFFFF818: romout <= 64'h0108010000931FFF;
64'hFFFFFFFFFFFFF820: romout <= 64'h00001CC7FFFFFDF9;
64'hFFFFFFFFFFFFF828: romout <= 64'h0A10000002028C00;
64'hFFFFFFFFFFFFF830: romout <= 64'h000000C7FFFFFD2D;
64'hFFFFFFFFFFFFF838: romout <= 64'h0C7FFFFFDEE40208;
64'hFFFFFFFFFFFFF840: romout <= 64'hFFFD3C2884000001;
64'hFFFFFFFFFFFFF848: romout <= 64'h0CFFFFFFDD2BE01F;
64'hFFFFFFFFFFFFF850: romout <= 64'h0003F03FBC000030;
64'hFFFFFFFFFFFFF858: romout <= 64'h0A20000000A9FC00;
64'hFFFFFFFFFFFFF860: romout <= 64'hC00070A800000013;
64'hFFFFFFFFFFFFF868: romout <= 64'h018C7E0000004110;
64'hFFFFFFFFFFFFF870: romout <= 64'h800004194FE00000;
64'hFFFFFFFFFFFFF878: romout <= 64'h0110E40000906420;
64'hFFFFFFFFFFFFF880: romout <= 64'h400024194A200001;
64'hFFFFFFFFFFFFF888: romout <= 64'h0704200000004519;
64'hFFFFFFFFFFFFF890: romout <= 64'h000006F811FFFEAF;
64'hFFFFFFFFFFFFF898: romout <= 64'h0194C80000006426;
64'hFFFFFFFFFFFFF8A0: romout <= 64'h000004110C400009;
64'hFFFFFFFFFFFFF8A8: romout <= 64'h010081000090652E;
64'hFFFFFFFFFFFFF8B0: romout <= 64'h0003F0100A200009;
64'hFFFFFFFFFFFFF8B8: romout <= 64'h0DFBFE000069DC00;
64'hFFFFFFFFFFFFF8C0: romout <= 64'h0002703FBC000020;
64'hFFFFFFFFFFFFF8C8: romout <= 64'h0A80000000F9FC00;
64'hFFFFFFFFFFFFF8D0: romout <= 64'h0000C0504400000F;
64'hFFFFFFFFFFFFF8D8: romout <= 64'h01885C0000016210;
64'hFFFFFFFFFFFFF8E0: romout <= 64'h0000001908400001;
64'hFFFFFFFFFFFFF8E8: romout <= 64'h0110A4000090632F;
64'hFFFFFFFFFFFFF8F0: romout <= 64'hC0002418C6400001;
64'hFFFFFFFFFFFFF8F8: romout <= 64'h0184220000104310;
64'hFFFFFFFFFFFFF900: romout <= 64'h400026F811FFFE8F;
64'hFFFFFFFFFFFFF908: romout <= 64'h0100620000904020;
64'hFFFFFFFFFFFFF910: romout <= 64'h800012770000009C;
64'hFFFFFFFFFFFFF918: romout <= 64'h03FBC00003837EFF;
64'hFFFFFFFFFFFFF920: romout <= 64'hC000267F400007C4;
64'hFFFFFFFFFFFFF928: romout <= 64'h0C7FFFFFE1404012;
64'hFFFFFFFFFFFFF930: romout <= 64'hFFF8C01004A00009;
64'hFFFFFFFFFFFFF938: romout <= 64'h0A90000000131FFF;
64'hFFFFFFFFFFFFF940: romout <= 64'h600000A800000007;
64'hFFFFFFFFFFFFF948: romout <= 64'h029CE00000006938;
64'hFFFFFFFFFFFFF950: romout <= 64'h0003FC29CE000004;
64'hFFFFFFFFFFFFF958: romout <= 64'h1A9D630003014118;
64'hFFFFFFFFFFFFF960: romout <= 64'hFFFCBC1842400001;
64'hFFFFFFFFFFFFF968: romout <= 64'h01004100009BE047;
64'hFFFFFFFFFFFFF970: romout <= 64'h400026F813FFFE8F;
64'hFFFFFFFFFFFFF978: romout <= 64'h0C7FFFFFE3004050;
64'hFFFFFFFFFFFFF980: romout <= 64'h0003FCA800000003;
64'hFFFFFFFFFFFFF988: romout <= 64'h1AA1630003014118;
64'hFFFFFFFFFFFFF990: romout <= 64'hFFFEBC1842400001;
64'hFFFFFFFFFFFFF998: romout <= 64'h182C0000014BE047;
64'hFFFFFFFFFFFFF9A0: romout <= 64'h80001E77400007C4;
64'hFFFFFFFFFFFFF9A8: romout <= 64'h0C7FFFFFDD237EFF;
64'hFFFFFFFFFFFFF9B0: romout <= 64'hFFF4B4A100000024;
64'hFFFFFFFFFFFFF9B8: romout <= 64'h0C7FFFFFC7631FFF;
64'hFFFFFFFFFFFFF9C0: romout <= 64'hFFF4B6C04010000D;
64'hFFFFFFFFFFFFF9C8: romout <= 64'h2F801FFFFCA31FFF;
64'hFFFFFFFFFFFFF9D0: romout <= 64'hFFF471880000041A;
64'hFFFFFFFFFFFFF9D8: romout <= 64'h0104030000931FFF;
64'hFFFFFFFFFFFFF9E0: romout <= 64'h00000908C2000000;
64'hFFFFFFFFFFFFF9E8: romout <= 64'h0C7FFFFFD160A318;
64'hFFFFFFFFFFFFF9F0: romout <= 64'h000002C840140024;
64'hFFFFFFFFFFFFF9F8: romout <= 64'h028C600000242308;
64'hFFFFFFFFFFFFFA00: romout <= 64'hC000E8C7FFFFFD16;
64'hFFFFFFFFFFFFFA08: romout <= 64'h2C041800044B0104;
64'hFFFFFFFFFFFFFA10: romout <= 64'h50012AC075F00042;
64'hFFFFFFFFFFFFFA18: romout <= 64'h2C045E8004CB0105;
64'hFFFFFFFFFFFFFA20: romout <= 64'h40010EC04044003F;
64'hFFFFFFFFFFFFFA28: romout <= 64'h2F801FFFC4AB0100;
64'hFFFFFFFFFFFFFA30: romout <= 64'h00000908C2000000;
64'hFFFFFFFFFFFFFA38: romout <= 64'h0C7FFFFFD160A318;
64'hFFFFFFFFFFFFFA40: romout <= 64'h000002C87F68004C;
64'hFFFFFFFFFFFFFA48: romout <= 64'h028C600000242308;
64'hFFFFFFFFFFFFFA50: romout <= 64'h60014CC7FFFFFD16;
64'hFFFFFFFFFFFFFA58: romout <= 64'h0C7FFFFFCC6B21FD;
64'hFFFFFFFFFFFFFA60: romout <= 64'hFFE9C2F801FFFA4A;
64'hFFFFFFFFFFFFFA68: romout <= 64'h0C7FFFFFDC1287FF;
64'hFFFFFFFFFFFFFA70: romout <= 64'h70736944203D203F;
64'hFFFFFFFFFFFFFA78: romout <= 64'h706C65682079616C;
64'hFFFFFFFFFFFFFA80: romout <= 64'h203D20534C430A0D;
64'hFFFFFFFFFFFFFA88: romout <= 64'h6373207261656C63;
64'hFFFFFFFFFFFFFA90: romout <= 64'h203A0A0D6E656572;
64'hFFFFFFFFFFFFFA98: romout <= 64'h6D2074696445203D;
64'hFFFFFFFFFFFFFAA0: romout <= 64'h79622079726F6D65;
64'hFFFFFFFFFFFFFAA8: romout <= 64'h3D204C0A0D736574;
64'hFFFFFFFFFFFFFAB0: romout <= 64'h31532064616F4C20;
64'hFFFFFFFFFFFFFAB8: romout <= 64'h0A0D656C69662039;
64'hFFFFFFFFFFFFFAC0: romout <= 64'h706D7544203D2044;
64'hFFFFFFFFFFFFFAC8: romout <= 64'h0D79726F6D656D20;
64'hFFFFFFFFFFFFFAD0: romout <= 64'h617473203D20420A;
64'hFFFFFFFFFFFFFAD8: romout <= 64'h20796E6974207472;
64'hFFFFFFFFFFFFFAE0: romout <= 64'h4A0A0D6369736162;
64'hFFFFFFFFFFFFFAE8: romout <= 64'h20706D754A203D20;
64'hFFFFFFFFFFFFFAF0: romout <= 64'h0D65646F63206F74;
64'hFFFFFFFFFFFFFAF8: romout <= 64'h000000000000000A;
64'hFFFFFFFFFFFFFB00: romout <= 64'h0000003FBC000008;
64'hFFFFFFFFFFFFFB08: romout <= 64'h108C200000067EF8;
64'hFFFFFFFFFFFFFB10: romout <= 64'hFFF45828C6000002;
64'hFFFFFFFFFFFFFB18: romout <= 64'h2C07FF0002031FFF;
64'hFFFFFFFFFFFFFB20: romout <= 64'h00000038C6000002;
64'hFFFFFFFFFFFFFB28: romout <= 64'h0DFBFE0000147EF8;
64'hFFFFFFFFFFFFFB30: romout <= 64'hFFFBC4C7FFFFFEC0;
64'hFFFFFFFFFFFFFB38: romout <= 64'h0104050000931FFF;
64'hFFFFFFFFFFFFFB40: romout <= 64'hFFFB00A400000007;
64'hFFFFFFFFFFFFFB48: romout <= 64'h0C7FFFFFEF131FFF;
64'hFFFFFFFFFFFFFB50: romout <= 64'h0000058142000000;
64'hFFFFFFFFFFFFFB58: romout <= 64'h2F809FFFFAF0A528;
64'hFFFFFFFFFFFFFB60: romout <= 64'hFFFB02F801FFF24A;
64'hFFFFFFFFFFFFFB68: romout <= 64'h0C7FFFFFEF131FFF;
64'hFFFFFFFFFFFFFB70: romout <= 64'h0000001040300009;
64'hFFFFFFFFFFFFFB78: romout <= 64'h2F801FFF1CA343F8;
64'hFFFFFFFFFFFFFB80: romout <= 64'hFFFBC4C7FFFFFEC0;
64'hFFFFFFFFFFFFFB88: romout <= 64'h0104020000931FFF;
64'hFFFFFFFFFFFFFB90: romout <= 64'hFFF810C7FFFFFDD2;
64'hFFFFFFFFFFFFFB98: romout <= 64'h0C7FFFFFE0431FFF;
64'hFFFFFFFFFFFFFBA0: romout <= 64'hFFF810C7FFFFFE04;
64'hFFFFFFFFFFFFFBA8: romout <= 64'h0C7FFFFFE0431FFF;
64'hFFFFFFFFFFFFFBB0: romout <= 64'hFFF810C7FFFFFE04;
64'hFFFFFFFFFFFFFBB8: romout <= 64'h0C7FFFFFE0431FFF;
64'hFFFFFFFFFFFFFBC0: romout <= 64'h000062F801FFEF4A;
64'hFFFFFFFFFFFFFBC8: romout <= 64'h27F4000000A0FEF0;
64'hFFFFFFFFFFFFFBD0: romout <= 64'h00003CA200000000;
64'hFFFFFFFFFFFFFBD8: romout <= 64'h108C200000029000;
64'hFFFFFFFFFFFFFBE0: romout <= 64'hFFF45828C6000002;
64'hFFFFFFFFFFFFFBE8: romout <= 64'h0C7FFFFFF0631FFF;
64'hFFFFFFFFFFFFFBF0: romout <= 64'h800002C0401BFFFF;
64'hFFFFFFFFFFFFFBF8: romout <= 64'h0504200000F06210;
64'hFFFFFFFFFFFFFC00: romout <= 64'hFFFB3C1082200009;
64'hFFFFFFFFFFFFFC08: romout <= 64'h01080100009BE027;
64'hFFFFFFFFFFFFFC10: romout <= 64'h80000E774000000A;
64'hFFFFFFFFFFFFFC18: romout <= 64'h2A04054003037EFF;
64'hFFFFFFFFFFFFFC20: romout <= 64'h0000C2B840100039;
64'hFFFFFFFFFFFFFC28: romout <= 64'h0D83E0000000E108;
64'hFFFFFFFFFFFFFC30: romout <= 64'h60011AA040340041;
64'hFFFFFFFFFFFFFC38: romout <= 64'h03842000041AE100;
64'hFFFFFFFFFFFFFC40: romout <= 64'h000000284200000A;
64'hFFFFFFFFFFFFFC48: romout <= 64'h2A040240061360F8;
64'hFFFFFFFFFFFFFC50: romout <= 64'h000186B840140066;
64'hFFFFFFFFFFFFFC58: romout <= 64'h0284200000A0E108;
64'hFFFFFFFFFFFFFC60: romout <= 64'hFFFFFCD83E000000;
64'hFFFFFFFFFFFFFC68: romout <= 64'h0D83E000000287FF;
64'hFFFFFFFFFFFFFC70: romout <= 64'hAAAB541000800009;
64'hFFFFFFFFFFFFFC78: romout <= 64'h05802AA5555F5554;
64'hFFFFFFFFFFFFFC80: romout <= 64'h0000019A02000000;
64'hFFFFFFFFFFFFFC88: romout <= 64'h0104430000646810;
64'hFFFFFFFFFFFFFC90: romout <= 64'h000022F8C00000A9;
64'hFFFFFFFFFFFFFC98: romout <= 64'h042060000000A840;
64'hFFFFFFFFFFFFFCA0: romout <= 64'h800026F8C1FFFF00;
64'hFFFFFFFFFFFFFCA8: romout <= 64'h0100080000904802;
64'hFFFFFFFFFFFFFCB0: romout <= 64'hA955551A04000000;
64'hFFFFFFFFFFFFFCB8: romout <= 64'h2F8C00001091021A;
64'hFFFFFFFFFFFFFCC0: romout <= 64'h0000002210000008;
64'hFFFFFFFFFFFFFCC8: romout <= 64'h2F8C1FFFF801081C;
64'hFFFFFFFFFFFFFCD0: romout <= 64'h000026FA14000329;
64'hFFFFFFFFFFFFFCD8: romout <= 64'h3AAAAD5552A04002;
64'hFFFFFFFFFFFFFCE0: romout <= 64'h000000580355AAAA;
64'hFFFFFFFFFFFFFCE8: romout <= 64'h11A0400000066808;
64'hFFFFFFFFFFFFFCF0: romout <= 64'h0003241044300006;
64'hFFFFFFFFFFFFFCF8: romout <= 64'h02210000008BE300;
64'hFFFFFFFFFFFFFD00: romout <= 64'hFFFC804207000000;
64'hFFFFFFFFFFFFFD08: romout <= 64'h01200B00009BE307;
64'hFFFFFFFFFFFFFD10: romout <= 64'h0000001000800009;
64'hFFFFFFFFFFFFFD18: romout <= 64'h0408755AAAA46810;
64'hFFFFFFFFFFFFFD20: romout <= 64'h000022F8C00000A9;
64'hFFFFFFFFFFFFFD28: romout <= 64'h0420700000008840;
64'hFFFFFFFFFFFFFD30: romout <= 64'h000222F8C1FFFF20;
64'hFFFFFFFFFFFFFD38: romout <= 64'h01216800014BE858;
64'hFFFFFFFFFFFFFD40: romout <= 64'h000052FA14000048;
64'hFFFFFFFFFFFFFD48: romout <= 64'h1981000040004852;
64'hFFFFFFFFFFFFFD50: romout <= 64'h000080D83E000000;
64'hFFFFFFFFFFFFFD58: romout <= 64'h0000000002000000;
64'hFFFFFFFFFFFFFD60: romout <= 64'hFC00219803FF0000;
64'hFFFFFFFFFFFFFD68: romout <= 64'h0080200003466017;
64'hFFFFFFFFFFFFFD70: romout <= 64'h0008A2F841FFFFC9;
64'hFFFFFFFFFFFFFD78: romout <= 64'h0080400042802008;
64'hFFFFFFFFFFFFFD80: romout <= 64'hA0000408800005A9;
64'hFFFFFFFFFFFFFD88: romout <= 64'h0104410000306211;
64'hFFFFFFFFFFFFFD90: romout <= 64'h8000211844000000;
64'hFFFFFFFFFFFFFD98: romout <= 64'h00880000528FFFF8;
64'hFFFFFFFFFFFFFDA0: romout <= 64'h8000211844000008;
64'hFFFFFFFFFFFFFDA8: romout <= 64'h008800005A8FFFF8;
64'hFFFFFFFFFFFFFDB0: romout <= 64'h0000D40800000034;
64'hFFFFFFFFFFFFFDB8: romout <= 64'h11803FF000002000;
64'hFFFFFFFFFFFFFDC0: romout <= 64'h0000811805FF0008;
64'hFFFFFFFFFFFFFDC8: romout <= 64'h3780000000000000;
64'hFFFFFFFFFFFFFFB0: romout <= 64'h000000CFFFFFFF58;
64'hFFFFFFFFFFFFFFB8: romout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFC0: romout <= 64'h000000CFFFFFFF58;
64'hFFFFFFFFFFFFFFC8: romout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFD0: romout <= 64'h000000CFFFFFFF55;
64'hFFFFFFFFFFFFFFD8: romout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFE0: romout <= 64'h000000CFFFFFFF56;
64'hFFFFFFFFFFFFFFE8: romout <= 64'h37800000000DE000;
64'hFFFFFFFFFFFFFFF0: romout <= 64'h000000CFFFFFFC00;
64'hFFFFFFFFFFFFFFF8: romout <= 64'h37800000000DE000;
default: romout <= 64'd0;
endcase
assign sys_dbi = iromout;
assign sys_dbi = romout|keybdout|stk_dato|scr_dato| {4{tc_dato}};
 
 
Raptor64sc u1
/raptor64/trunk/rtl/verilog/Raptor64sc.v
21,7 → 21,8
//
// ============================================================================
//
//`define RAS_PREDICTION 1
`define ADDRESS_RESERVATION 1
`define RAS_PREDICTION 1
//`define BTB 1
//`define TLB 1
//`define BRANCH_PREDICTION_SIMPLE 1
76,6 → 77,8
`define IRQ 7'd1
`define ICACHE_ON 7'd10
`define ICACHE_OFF 7'd11
`define DCACHE_ON 7'd12
`define DCACHE_OFF 7'd13
`define FIP 7'd20
`define IRET 7'd32
`define ERET 7'd33
91,6 → 94,7
`define NOT 7'd5
`define NEG 7'd6
`define ABS 7'd7
`define MOV 7'd9
`define SWAP 7'd13
`define CTLZ 7'd16
`define CTLO 7'd17
124,11 → 128,14
`define CauseCode 6'd24
`define TBA 6'd25
`define NON_ICACHE_SEG 6'd26
`define FPCR 6'd32
`define IPC 6'd33
`define OMG 7'd50
`define CMG 7'd51
`define OMGI 7'd52
`define CMGI 7'd53
`define EXEC 7'd58
`define MYST 7'd59
`define RR 7'd2
`define ADD 7'd2
`define ADDU 7'd3
188,7 → 195,6
`define BFSET 7'd9
`define BFCLR 7'd10
`define BFCHG 7'd11
 
`define ADDI 7'd4
`define ADDUI 7'd5
`define SUBI 7'd6
281,6 → 287,9
`define OUTH 7'd74
`define OUTW 7'd75
 
`define LM 7'd78
`define SM 7'd79
 
`define BLTI 7'd80
`define BGEI 7'd81
`define BLEI 7'd82
291,8 → 300,6
`define BGTUI 7'd87
`define BEQI 7'd88
`define BNEI 7'd89
`define BRAI 7'd90
`define BRNI 7'd91
 
`define BTRI 7'd94
`define BLTRI 5'd0
325,6 → 332,7
`define BAND 5'd12
`define BOR 5'd13
`define BNR 5'd14
`define LOOP 5'd15
`define BLTR 5'd16
`define BGER 5'd17
`define BLER 5'd18
417,8 → 425,11
 
reg resetA;
reg im,bu_im; // interrupt mask
reg im1; // temporary interrupt mask for LM/SM
reg [1:0] rm; // fp rounding mode
reg [41:0] dIR;
reg [41:0] ndIR;
wire [6:0] dOpcode = dIR[41:35];
reg [41:0] xIR;
reg [63:0] pc;
reg [63:0] ErrorEPC,EPC,IPC;
440,9 → 451,9
reg [1:0] dhwxtype,xhwxtype,m1hwxtype,m2hwxtype,whwxtype;
reg [3:0] AXC,dAXC,xAXC;
reg dtinit;
reg dcache_on;
reg [63:32] nonICacheSeg;
 
//reg wr_icache;
reg dccyc;
wire [63:0] cdat;
reg [63:0] wr_addr;
602,24 → 613,16
// 8kB
//
//-----------------------------------------------------------------------------
//reg lfdir;
wire lfdir = ((dOpcode==`LM || dOpcode==`SM) && dIR[31:0]!=32'd0) && ndIR[31:0]!=32'd0;
wire ldnop = ((dOpcode==`LM || dOpcode==`SM) && (dIR[31:0]==32'd0 || ndIR[31:0]==32'd0));
reg icaccess;
//wire nonICachedArea;
 
//Raptor64_icache_ram_x32 u1
//(
// .clk(clk),
// .wr(icaccess & ack_i),
// .adr_i(adr_o[12:0]),
// .dat_i(dat_i),
// .pc(pc),
// .insn(insn)
//);
reg ICacheOn;
wire ibufrdy;
reg [63:0] tmpbuf;
wire [127:0] insnbundle;
reg [127:0] insnbuf;
reg [63:4] ibuftag;
reg [127:0] insnbuf0,insnbuf1;
reg [63:4] ibuftag0,ibuftag1;
wire isICached = ppc[63:32]!=nonICacheSeg;
wire ICacheAct = ICacheOn & isICached;
 
630,21 → 633,27
.addra(adr_o[12:3]), // input [9 : 0] addra
.dina(dat_i), // input [63 : 0] dina
.clkb(~clk), // input clkb
.addrb(pc[12:4]), // input [9 : 0] addrb
.doutb(insnbundle) // output [63 : 0] doutb
.addrb(pc[12:4]), // input [8 : 0] addrb
.doutb(insnbundle) // output [127 : 0] doutb
);
 
always @(pc or insnbundle or ICacheAct or insnbuf)
always @(ppc or insnbundle or ICacheAct or insnbuf0 or insnbuf1 or ndIR or lfdir or ldnop)
begin
case({ICacheAct,pc[3:2]})
3'd0: insn <= insnbuf[ 41: 0];
3'd1: insn <= insnbuf[ 83:42];
3'd2: insn <= insnbuf[125:84];
3'd3: insn <= 42'h37800000000;
3'd4: insn <= insnbundle[ 41: 0];
3'd5: insn <= insnbundle[ 83:42];
3'd6: insn <= insnbundle[125:84];
3'd7: insn <= 42'h37800000000; // NOP instruction
casex({ldnop,lfdir,ICacheAct,ibuftag1==ppc[63:4],pc[3:2]})
6'b1xxxxx: insn <= 42'h37800000000;
6'b01xxxx: insn <= ndIR;
6'b001x00: insn <= insnbundle[ 41: 0];
6'b001x01: insn <= insnbundle[ 83:42];
6'b001x10: insn <= insnbundle[125:84];
6'b001x11: insn <= 42'h37800000000; // NOP instruction
6'b000000: insn <= insnbuf0[ 41: 0];
6'b000001: insn <= insnbuf0[ 83:42];
6'b000010: insn <= insnbuf0[125:84];
6'b000011: insn <= 42'h37800000000;
6'b000100: insn <= insnbuf1[ 41: 0];
6'b000101: insn <= insnbuf1[ 83:42];
6'b000110: insn <= insnbuf1[125:84];
6'b000111: insn <= 42'h37800000000;
endcase
end
 
662,7 → 671,7
wire [64:13] tgout;
assign tgout = {tvalid[pc[12:6]],tmem[pc[12:6]]};
assign ihit = (tgout=={1'b1,ppc[63:13]});
assign ibufrdy = ibuftag==ppc[63:4];
assign ibufrdy = ibuftag0==ppc[63:4] || ibuftag1==ppc[63:4];
 
//-----------------------------------------------------------------------------
// Data Cache
677,18 → 686,7
reg [31:0] ddat;
reg wr_dcache;
 
// cache RAM 16Kb
/*Raptor64_dcache_ram u10
(
.clk(clk),
.wr(dcaccess ? wr_dcache : wrhit ? (dram_bus ? wr_en: we_o): 1'b0),
.sel(dcaccess ? 4'b1111 : wrhit ? ~wr_mask : 4'b0000),
.wadr(dcaccess ? dadr_o[13:2] : wr_addr[13:2]),
.i(dcaccess ? ddat : wr_data),
.radr(pea[13:3]),
.o(cdat)
);
*/
// cache RAM 32Kb
Raptor64_dcache_ram u10
(
.clka(clk), // input clka
698,7 → 696,7
.dina(dcaccess ? dat_i : dat_o), // input [63 : 0] dina
 
.clkb(~clk), // input clkb
.addrb(adr_o[14:3]), // input [11 : 0] addrb
.addrb(pea[14:3]), // input [11 : 0] addrb
.doutb(cdat) // output [63 : 0] doutb
);
 
715,23 → 713,6
.addrb({1'b0,pea[14:6]}), // input [9 : 0] addrb
.doutb(dtgout) // output [48 : 0] doutb
);
// tag ram
//syncRam512x64_1rw1r u11
//(
// .wrst(1'b0),
// .wclk(clk),
// .wce(adr_o[4:2]==3'b111),
// .we(ack_i),
// .wadr(adr_o[14:5]),
// .i({14'h3FFF,dadr_o[63:14]}),
// .wo(),
//
// .rrst(1'b0),
// .rclk(~clk),
// .rce(1'b1),
// .radr(pea[13:5]),
// .ro({dtign,dtgout})
//);
 
assign dhit = (dtgout=={1'b1,pea[63:15]});
 
739,7 → 720,7
//-----------------------------------------------------------------------------
 
reg [64:0] xData;
wire xisCacheElement = xData[63:52] != 12'hFFD && xData[63:52]!=12'hFFF;
wire xisCacheElement = (xData[63:52] != 12'hFFD && xData[63:52]!=12'hFFF) && dcache_on;
reg m1IsCacheElement;
 
reg nopI;
748,7 → 729,6
wire [6:0] xFunc = xIR[6:0];
wire [6:0] iOpcode = insn[41:35];
wire [6:0] xOpcode = xIR[41:35];
wire [6:0] dOpcode = dIR[41:35];
reg [6:0] m1Opcode,m2Opcode;
reg [6:0] m1Func,m2Func;
reg [63:0] m1Data,m2Data,wData,tData;
932,13 → 912,26
end
endfunction
 
function [5:0] popcnt36;
input [35:0] a;
begin
popcnt36 = popcnt6(a[5:0]) +
popcnt6(a[11:6]) +
popcnt6(a[17:12]) +
popcnt6(a[23:18]) +
popcnt6(a[29:24]) +
popcnt6(a[35:30]);
end
endfunction
 
wire [63:0] jmp_tgt = dOpcode[6:4]==`IMM ? {dIR[26:0],insn[34:0],2'b00} : {pc[63:37],insn[34:0],2'b00};
 
//-----------------------------------------------------------------------------
// Stack for return address predictor
//-----------------------------------------------------------------------------
`ifdef RAS_PREDICTION
reg [63:0] ras [63:0]; // return address stack, return predictions
reg [5:0] ras_sp;
reg [5:0] ras_sp; // stack pointer
`endif
`ifdef BTB
reg [63:0] btb [63:0]; // branch target buffer
979,7 → 972,7
wire [1:0] bht_ibits = branch_history_table[bht_ra2];
wire predict_taken = bht_ibits==2'd0 || bht_ibits==2'd1;
 
wire isxBranchI = (xOpcode==`BRAI || xOpcode==`BRNI || xOpcode==`BEQI || xOpcode==`BNEI ||
wire isxBranchI = (xOpcode==`BEQI || xOpcode==`BNEI ||
xOpcode==`BLTI || xOpcode==`BLEI || xOpcode==`BGTI || xOpcode==`BGEI ||
xOpcode==`BLTUI || xOpcode==`BLEUI || xOpcode==`BGTUI || xOpcode==`BGEUI)
;
1044,6 → 1037,7
`BOR: takb = !aeqz || !beqz;
`BAND: takb = !aeqz && !beqz;
`BNR: takb = !rsf;
`LOOP: takb = !beqz;
`BEQR: takb = eq;
`BNER: takb = !eq;
`BLTR: takb = lt;
1056,8 → 1050,6
`BGEUR: takb = !ltu;
default: takb = 1'b0;
endcase
`BRAI: takb = 1'b1;
`BRNI: takb = 1'b0;
`BEQI: takb = eqi;
`BNEI: takb = !eqi;
`BLTI: takb = lti;
1157,8 → 1149,9
shfto or masko or bcdaddo or bcdsubo or fpLooOut or fpZLOut
`ifdef TLB
or Wired or Index or Random or TLBPhysPage0 or TLBPhysPage1 or TLBVirtPage or TLBASID or
PageTableAddr or BadVAddr or ASID or TLBPageMask
PageTableAddr or BadVAddr or ASID or TLBPageMask
`endif
or ASID or EPC or mutex_gate or IPC or CauseCode or TBA or xAXC or nonICacheSeg or rm
)
casex(xOpcode)
`R:
1167,6 → 1160,7
`NOT: xData = ~|a;
`NEG: xData = -a;
`ABS: xData = a[63] ? -a : a;
`MOV: xData = a;
`SQRT: xData = sqrt_out;
`SWAP: xData = {a[31:0],a[63:32]};
1214,10 → 1208,12
`ASID: xData = ASID;
`Tick: xData = tick;
`EPC: xData = EPC;
`IPC: xData = IPC;
`CauseCode: xData = CauseCode;
`TBA: xData = TBA;
`AXC: xData = xAXC;
`NON_ICACHE_SEG: xData = nonICacheSeg;
`FPCR: xData = {rm,30'd0};
default: xData = 65'd0;
endcase
`OMG: xData = mutex_gate[a[5:0]];
1291,6 → 1287,11
`BFCHG: begin for (n = 0; n < 64; n = n + 1) xData[n] = masko[n] ? ~b[n] : b[n]; xData[64] = 1'b0; end
default: xData = 65'd0;
endcase
`BTRR:
case(xIR[4:0])
`LOOP: xData = b - 64'd1;
default: xData = 64'd0;
endcase
`SETLO: xData = {{32{xIR[31]}},xIR[31:0]};
`SETHI: xData = {xIR[31:0],a[31:0]};
`ADDI: xData = a + imm;
1320,19 → 1321,19
xData = a + imm;
`OUTB,`OUTC,`OUTH,`OUTW:
xData = a + imm;
`LW,`LH,`LC,`LB,`LHU,`LCU,`LBU,`LWR:
`LW,`LH,`LC,`LB,`LHU,`LCU,`LBU,`LWR,`LF,`LFD:
xData = a + imm;
`SW,`SH,`SC,`SB,`SWC:
`SW,`SH,`SC,`SB,`SWC,`SF,`SFD:
xData = a + imm;
`MEMNDX:
xData = a + b + imm;
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BOR,`BAND:
xData = 64'd0;
`SM: xData = a + {popcnt36(xIR[31:0]),3'b000};
`LM: xData = a + {popcnt36(xIR[31:0]),3'b000};
`TRAPcc: xData = fnIncPC(xpc);
`TRAPcci: xData = fnIncPC(xpc);
`CALL: xData = fnIncPC(xpc);
`JAL: xData = xpc + {xIR[29:25],2'b00};
`RET: xData = a + {imm,2'b00};
`RET: xData = a + imm;
`FPLOO: xData = fpLooOut;
`FPZL: xData = fpZLOut;
default: xData = 65'd0;
1357,11 → 1358,12
wire xIsLoad =
xOpcode==`LW || xOpcode==`LH || xOpcode==`LB || xOpcode==`LWR ||
xOpcode==`LHU || xOpcode==`LBU ||
xOpcode==`LC || xOpcode==`LCU ||
xOpcode==`INW || xOpcode==`INB || xOpcode==`INH || xOpcode==`INCH
xOpcode==`LC || xOpcode==`LCU || xOpcode==`LM ||
xOpcode==`LF || xOpcode==`LFD
;
wire xIsStore =
xOpcode==`SW || xOpcode==`SH || xOpcode==`SB || xOpcode==`SC || xOpcode==`SWC ||
xOpcode==`SW || xOpcode==`SH || xOpcode==`SB || xOpcode==`SC || xOpcode==`SWC || xOpcode==`SM ||
xOpcode==`SF || xOpcode==`SFD ||
xOpcode==`OUTW || xOpcode==`OUTH || xOpcode==`OUTB || xOpcode==`OUTC
;
wire xIsSWC = xOpcode==`SWC;
1377,15 → 1379,17
// ;
wire m1IsLoad =
m1Opcode==`LW || m1Opcode==`LH || m1Opcode==`LB || m1Opcode==`LC || m1Opcode==`LWR ||
m1Opcode==`LHU || m1Opcode==`LBU || m1Opcode==`LCU
m1Opcode==`LHU || m1Opcode==`LBU || m1Opcode==`LCU || m1Opcode==`LM ||
m1Opcode==`LF || m1Opcode==`LFD
;
wire m1IsIn =
m1Opcode==`INW || m1Opcode==`INH || m1Opcode==`INCH || m1Opcode==`INB
;
wire m2IsInW = m2Opcode==`INW;
wire m1IsStore =
m1Opcode==`SW || m1Opcode==`SH || m1Opcode==`SB || m1Opcode==`SC || m1Opcode==`SWC
;
wire m1IsStore = m1Opcode==`SW || m1Opcode==`SH || m1Opcode==`SB || m1Opcode==`SC || m1Opcode==`SWC || m1Opcode==`SM ||
m1Opcode==`SF || m1Opcode==`SFD;
wire m2IsStore = m2Opcode==`SW || m2Opcode==`SWC || m2Opcode==`SH || m2Opcode==`SC || m2Opcode==`SB || m2Opcode==`SM ||
m2Opcode==`SF || m2Opcode==`SFD;
wire xIsIO =
xIsIn ||
xOpcode==`OUTW || xOpcode==`OUTH || xOpcode==`OUTC || xOpcode==`OUTB
1396,10 → 1400,9
;
wire m2IsLoad =
m2Opcode==`LW || m2Opcode==`LH || m2Opcode==`LB || m2Opcode==`LC || m2Opcode==`LWR ||
m2Opcode==`LHU || m2Opcode==`LBU || m2Opcode==`LCU
m2Opcode==`LHU || m2Opcode==`LBU || m2Opcode==`LCU || m2Opcode==`LM ||
m2Opcode==`LF || m2Opcode==`LFD
;
wire m2IsStore =
m2Opcode==`SW || m2Opcode==`SWC || m2Opcode==`SH || m2Opcode==`SC || m2Opcode==`SB;
 
wire xIsFPLoo = xOpcode==`FPLOO;
 
1414,7 → 1417,9
(((m2IsLoad) && ((m2Rt==dRa)||(m2Rt==dRb)||(m2Rt==dRt))))
;
wire StallX = xneedBus & (m1needBus|m2needBus|icaccess|dcaccess);
wire StallM1 = m1needBus & (m2needBus|icaccess|dcaccess);
wire StallM1 = (m1needBus & (m2needBus|icaccess|dcaccess)) ||
( m1IsLoad & m1IsCacheElement & m2IsStore) // wait for a preceding store to complete
;
wire StallM2 = icaccess|dcaccess;
 
wire advanceT = !resetA;
1443,7 → 1448,7
m2Opcode==`NOPI // and the pipeline is free of memory-ops
;
// Since IMM is "sticky" we have to check for it.
wire triggerICacheLoad = (ICacheAct ? !ihit : !ibufrdy) && !triggerDCacheLoad && // There is a miss
wire triggerICacheLoad1 = ICacheAct && !ihit && !triggerDCacheLoad && // There is a miss
!(icaccess | dcaccess) && // caches are not active
(dOpcode==`NOPI || dOpcode[6:4]==`IMM) && // and the pipeline is flushed
(xOpcode==`NOPI || xOpcode[6:4]==`IMM) &&
1450,6 → 1455,11
m1Opcode==`NOPI &&
m2Opcode==`NOPI
;
wire triggerICacheLoad2 = (!ICacheAct && !ibufrdy) && !triggerDCacheLoad && // There is a miss
!(icaccess | dcaccess) // caches are not active
;
wire triggerICacheLoad = triggerICacheLoad1 | triggerICacheLoad2;
 
wire EXexception_pending = ovr_error || dbz_error || priv_violation || xOpcode==`TRAPcci || xOpcode==`TRAPcc;
`ifdef TLB
wire M1exception_pending = advanceM1 & (m1IsLoad|m1IsStore) & DTLBMiss;
1458,11 → 1468,79
`endif
wire exception_pending = EXexception_pending | M1exception_pending;
 
wire xWillLoadStore = (xIsLoad||xIsStore) & advanceX;
wire stallCacheLoad = xWillLoadStore;
 
reg prev_nmi,nmi_edge;
 
always @(dOpcode or dIR)
begin
ndIR <= dIR;
if ((dOpcode==`LM || dOpcode==`SM) && dIR[31:0]!=32'd0) begin
$display("LM/SM %h",dIR[31:0]);
if (dIR[0])
ndIR[0] <= 1'b0;
else if (dIR[1])
ndIR[1] <= 1'b0;
else if (dIR[2])
ndIR[2] <= 1'b0;
else if (dIR[3])
ndIR[3] <= 1'b0;
else if (dIR[4])
ndIR[4] <= 1'b0;
else if (dIR[5])
ndIR[5] <= 1'b0;
else if (dIR[6])
ndIR[6] <= 1'b0;
else if (dIR[7])
ndIR[7] <= 1'b0;
else if (dIR[8])
ndIR[8] <= 1'b0;
else if (dIR[9])
ndIR[9] <= 1'b0;
else if (dIR[10])
ndIR[10] <= 1'b0;
else if (dIR[11])
ndIR[11] <= 1'b0;
else if (dIR[12])
ndIR[12] <= 1'b0;
else if (dIR[13])
ndIR[13] <= 1'b0;
else if (dIR[14])
ndIR[14] <= 1'b0;
else if (dIR[15])
ndIR[15] <= 1'b0;
else if (dIR[16])
ndIR[16] <= 1'b0;
else if (dIR[17])
ndIR[17] <= 1'b0;
else if (dIR[18])
ndIR[18] <= 1'b0;
else if (dIR[19])
ndIR[19] <= 1'b0;
else if (dIR[20])
ndIR[20] <= 1'b0;
else if (dIR[21])
ndIR[21] <= 1'b0;
else if (dIR[22])
ndIR[22] <= 1'b0;
else if (dIR[23])
ndIR[23] <= 1'b0;
else if (dIR[24])
ndIR[24] <= 1'b0;
else if (dIR[25])
ndIR[25] <= 1'b0;
else if (dIR[26])
ndIR[26] <= 1'b0;
else if (dIR[27])
ndIR[27] <= 1'b0;
else if (dIR[28])
ndIR[28] <= 1'b0;
else if (dIR[29])
ndIR[29] <= 1'b0;
else if (dIR[30])
ndIR[30] <= 1'b0;
else
ndIR[31] <= 1'b0;
end
end
 
//---------------------------------------------------------
// Register file.
1500,7 → 1578,20
 
reg m1clkoff,m2clkoff,m3clkoff,m4clkoff,wclkoff;
reg dFip,xFip,m1Fip,m2Fip,m3Fip,m4Fip,wFip;
reg cyc1;
 
reg [63:0] nxt_c;
always @(dRc or xData or m1Data or m2Data or wData or tData or rfoc)
casex(dRc)
9'bxxxx00000: nxt_c <= 64'd0;
xRt: nxt_c <= xData;
m1Rt: nxt_c <= m1Data;
m2Rt: nxt_c <= m2Data;
wRt: nxt_c <= wData;
tRt: nxt_c <= tData;
default: nxt_c <= rfoc;
endcase
 
always @(posedge clk)
if (rst_i) begin
bte_o <= 2'b00;
1573,13 → 1664,17
`ifndef BRANCH_PREDICTION_SIMPLE
gbl_branch_hist <= 3'b000;
`endif
dcache_on <= 1'b0;
ICacheOn <= 1'b0;
ibuftag <= 64'h0;
ibuftag0 <= 64'h0;
ibuftag1 <= 64'h0;
m1IsCacheElement <= 1'b0;
dtinit <= 1'b1;
`ifdef RAS_PREDICTION
ras_sp <= 6'd63;
`endif
im <= 1'b1;
im1 <= 1'b1;
end
else begin
 
1610,11 → 1705,13
nmi_edge <= 1'b1;
 
 
`ifdef ADDRESS_RESERVATION
// A store by any device in the system to a reserved address blcok
// clears the reservation.
 
if (sys_adv && sys_adr[63:5]==resv_address)
resv_address <= 59'd0;
`endif
 
//---------------------------------------------------------
// TRAILER:
1686,7 → 1783,7
m2extype <= `EX_NON;
if (m2extype==`EX_NON) begin
case(m2Opcode)
`SH,`SC,`SB,`SW,`SWC:
`SH,`SC,`SB,`SW,`SWC,`SM,`SF,`SFD:
begin
cyc_o <= 1'b0;
stb_o <= 1'b0;
1693,7 → 1790,7
we_o <= 1'b0;
sel_o <= 4'h0;
end
`LH:
`LH,`LF:
begin
cyc_o <= 1'b0;
stb_o <= 1'b0;
1700,7 → 1797,7
sel_o <= 8'h00;
wData <= sel_o[7] ? {{32{dat_i[63]}},dat_i[63:32]}:{{32{dat_i[31]}},dat_i[31: 0]};
end
`LW,`LWR:
`LW,`LWR,`LM,`LFD:
begin
cyc_o <= 1'b0;
stb_o <= 1'b0;
1942,7 → 2039,7
m2Opcode <= `NOPI;
end
 
`LW:
`LW,`LM,`LFD:
if (!m1IsCacheElement) begin
cyc_o <= 1'b1;
stb_o <= 1'b1;
1954,7 → 2051,7
m2Opcode <= `NOPI;
m2Data <= cdat;
end
 
`ifdef ADDRESS_RESERVATION
`LWR:
if (!m1IsCacheElement) begin
rsv_o <= 1'b1;
1971,8 → 2068,8
rsv_o <= 1'b1;
resv_address <= pea[63:5];
end
 
`LH:
`endif
`LH,`LF:
if (!m1IsCacheElement) begin
cyc_o <= 1'b1;
stb_o <= 1'b1;
2018,6 → 2115,7
m2Addr <= {pea[63:1],1'b0};
end
else if (dhit) begin
$display("dhit=1, cdat=%h",cdat);
m2Opcode <= `NOPI;
case(pea[2:1])
2'd0: m2Data <= {{48{cdat[15]}},cdat[15:0]};
2113,8 → 2211,9
endcase
end
 
`SW:
`SW,`SM,`SFD:
begin
$display("SW/SM");
m2Addr <= {pea[63:3],3'b000};
wrhit <= dhit;
`ifdef TLB
2121,8 → 2220,10
if (!m1UnmappedDataArea & !q[3])
ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
`endif
`ifdef ADDRESS_RESERVATION
if (resv_address==pea[63:5])
resv_address <= 59'd0;
`endif
cyc_o <= 1'b1;
stb_o <= 1'b1;
we_o <= 1'b1;
2131,7 → 2232,7
dat_o <= m1Data;
end
 
`SH:
`SH,`SF:
begin
wrhit <= dhit;
m2Addr <= {pea[63:2],2'b00};
2139,8 → 2240,10
if (!m1UnmappedDataArea & !q[3])
ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
`endif
`ifdef ADDRESS_RESERVATION
if (resv_address==pea[63:5])
resv_address <= 59'd0;
`endif
cyc_o <= 1'b1;
stb_o <= 1'b1;
we_o <= 1'b1;
2158,8 → 2261,10
if (!m1UnmappedDataArea & !q[3])
ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
`endif
`ifdef ADDRESS_RESERVATION
if (resv_address==pea[63:5])
resv_address <= 59'd0;
`endif
cyc_o <= 1'b1;
stb_o <= 1'b1;
we_o <= 1'b1;
2177,8 → 2282,10
begin
wrhit <= dhit;
m2Addr <= {pea[63:2],2'b00};
`ifdef ADDRESS_RESERVATION
if (resv_address==pea[63:5])
resv_address <= 59'd0;
`endif
`ifdef TLB
if (!m1UnmappedDataArea & !q[3])
ITLBD[{q[2:0],pea[15:13]}] <= 1'b1;
2200,6 → 2307,7
dat_o <= {8{m1Data[7:0]}};
end
 
`ifdef ADDRESS_RESERVATION
`SWC:
begin
rsf <= 1'b0;
2222,6 → 2330,7
else
m2Opcode <= `NOPI;
end
`endif
endcase
end
end
2265,6 → 2374,8
`WAIT: m1clkoff <= 1'b1;
`ICACHE_ON: ICacheOn <= 1'b1;
`ICACHE_OFF: ICacheOn <= 1'b0;
`DCACHE_ON: dcache_on <= 1'b1;
`DCACHE_OFF: dcache_on <= 1'b0;
`ifdef TLB
`TLBP: ea <= TLBVirtPage;
`TLBR,`TLBWI:
2303,6 → 2414,8
`TBA: TBA <= {a[63:12],12'h000};
`AXC: AXC <= a[3:0];
`NON_ICACHE_SEG: nonICacheSeg <= a[63:32];
`FPCR: rm <= a[31:30];
`IPC: IPC <= a;
default: ;
endcase
`OMG: mutex_gate[a[5:0]] <= 1'b1;
2404,7 → 2517,8
adr_o <= xData;
dat_o <= {8{b[7:0]}};
end
`LB,`LBU,`LC,`LCU,`LH,`LHU,`LW,`LWR,`SW,`SH,`SC,`SB,`SWC:
`LB,`LBU,`LC,`LCU,`LH,`LHU,`LW,`LWR,`LF,`LFD,`LM,
`SW,`SH,`SC,`SB,`SWC,`SF,`SFD,`SM:
begin
m1Data <= b;
ea <= xData;
2439,13 → 2553,16
xhwxtype <= dhwxtype;
xFip <= dFip;
xextype <= dextype;
xIR <= dIR;
if (dOpcode==`R && dFunc==`MYST)
xIR <= nxt_c;
else
xIR <= dIR;
xpc <= dpc;
xpcv <= dpcv;
xbranch_taken <= dbranch_taken;
dbranch_taken <= 1'b0;
dextype <= `EX_NON;
if (dOpcode[6:4]!=`IMM) // IMM is "sticky"
if (dOpcode[6:4]!=`IMM && dOpcode!=`LM && dOpcode!=`SM) // IMM is "sticky"
dIR <= `NOP_INSN;
dRa <= 9'd0;
dRb <= 9'd0;
2474,23 → 2591,24
`RORI: b <= {58'd0,~dIR[24:19]+6'd1};
default: b <= {58'd0,dIR[24:19]};
endcase
casex(dRc)
9'bxxxx00000: c <= 64'd0;
xRt: c <= xData;
m1Rt: c <= m1Data;
m2Rt: c <= m2Data;
wRt: c <= wData;
tRt: c <= tData;
default: c <= rfoc;
endcase
c <= nxt_c;
 
// Set the target register
casex(dOpcode)
`R:
case(dFunc)
`MYST: xRt <= {dAXC,dIR[19:15]};
default: xRt <= {dAXC,dIR[29:25]};
endcase
`SETLO: xRt <= {dAXC,dIR[36:32]};
`SETHI: xRt <= {dAXC,dIR[36:32]};
`RR: xRt <= {dAXC,dIR[24:20]};
`BTRI: xRt <= 9'd0;
`BTRR: xRt <= 9'd0;
`BTRR:
case(dIR[4:0])
`LOOP: xRt <= {AXC,dIR[29:25]};
default: xRt <= 9'd0;
endcase
`TRAPcc: xRt <= 9'd0;
`TRAPcci: xRt <= 9'd0;
`JMP: xRt <= 9'd00;
2498,15 → 2616,54
`RET: xRt <= {dAXC,dIR[24:20]};
`MEMNDX:
case(dFunc)
`SW,`SH,`SC,`SB,`OUTW,`OUTH,`OUTC,`OUTB:
`SW,`SH,`SC,`SB,`SF,`SFD,
`OUTW,`OUTH,`OUTC,`OUTB:
xRt <= 9'd0;
default: xRt <= {dAXC,dIR[24:20]};
endcase
`SW,`SH,`SC,`SB,`OUTW,`OUTH,`OUTC,`OUTB:
`SW,`SH,`SC,`SB,`SF,`SFD, // but not SWC!
`OUTW,`OUTH,`OUTC,`OUTB:
xRt <= 9'd0;
`NOPI: xRt <= 9'd0;
`BEQI,`BNEI,`BLTI,`BLEI,`BGTI,`BGEI,`BLTUI,`BLEUI,`BGTUI,`BGEUI:
xRt <= 9'd0;
`SM: xRt <= 9'd0;
`LM:
casex(dIR[30:0])
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1: xRt <= {AXC,5'd1};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxx10: xRt <= {AXC,5'd2};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxx100: xRt <= {AXC,5'd3};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxx1000: xRt <= {AXC,5'd4};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxx10000: xRt <= {AXC,5'd5};
31'bxxxxxxxxxxxxxxxxxxxxxxxxx100000: xRt <= {AXC,5'd6};
31'bxxxxxxxxxxxxxxxxxxxxxxxx1000000: xRt <= {AXC,5'd7};
31'bxxxxxxxxxxxxxxxxxxxxxxx10000000: xRt <= {AXC,5'd8};
31'bxxxxxxxxxxxxxxxxxxxxxx100000000: xRt <= {AXC,5'd9};
31'bxxxxxxxxxxxxxxxxxxxxx1000000000: xRt <= {AXC,5'd10};
31'bxxxxxxxxxxxxxxxxxxxx10000000000: xRt <= {AXC,5'd11};
31'bxxxxxxxxxxxxxxxxxxx100000000000: xRt <= {AXC,5'd12};
31'bxxxxxxxxxxxxxxxxxx1000000000000: xRt <= {AXC,5'd13};
31'bxxxxxxxxxxxxxxxxx10000000000000: xRt <= {AXC,5'd14};
31'bxxxxxxxxxxxxxxxx100000000000000: xRt <= {AXC,5'd15};
31'bxxxxxxxxxxxxxxx1000000000000000: xRt <= {AXC,5'd16};
31'bxxxxxxxxxxxxxx10000000000000000: xRt <= {AXC,5'd17};
31'bxxxxxxxxxxxxx100000000000000000: xRt <= {AXC,5'd18};
31'bxxxxxxxxxxxx1000000000000000000: xRt <= {AXC,5'd19};
31'bxxxxxxxxxxx10000000000000000000: xRt <= {AXC,5'd20};
31'bxxxxxxxxxx100000000000000000000: xRt <= {AXC,5'd21};
31'bxxxxxxxxx1000000000000000000000: xRt <= {AXC,5'd22};
31'bxxxxxxxx10000000000000000000000: xRt <= {AXC,5'd23};
31'bxxxxxxx100000000000000000000000: xRt <= {AXC,5'd24};
31'bxxxxxx1000000000000000000000000: xRt <= {AXC,5'd25};
31'bxxxxx10000000000000000000000000: xRt <= {AXC,5'd26};
31'bxxxx100000000000000000000000000: xRt <= {AXC,5'd27};
31'bxxx1000000000000000000000000000: xRt <= {AXC,5'd28};
31'bxx10000000000000000000000000000: xRt <= {AXC,5'd29};
31'bx100000000000000000000000000000: xRt <= {AXC,5'd30};
31'b1000000000000000000000000000000: xRt <= {AXC,5'd31};
default: xRt <= 9'h000;
endcase
 
default: xRt <= {dAXC,dIR[29:25]};
endcase
if (dOpcode[6:4]==`IMM)
2524,7 → 2681,7
`ANDI: imm <= {39'h7FFFFFFFFF,dIR[24:0]};
`ORI: imm <= {39'h0000000000,dIR[24:0]};
`XORI: imm <= {39'h0000000000,dIR[24:0]};
`RET: imm <= {44'h00000000000,dIR[19:0]};
`RET: imm <= {41'h00000000,dIR[19:0],3'b000};
`MEMNDX: imm <= {{51{dIR[19]}},dIR[19:7]};
default: imm <= {{39{dIR[24]}},dIR[24:0]};
endcase
2536,7 → 2693,9
`CLI: im <= 1'b0;
endcase
endcase
 
if ((dOpcode==`SM || dOpcode==`LM) && dIR[31:0]!=32'd0)
dIR <= ndIR;
end
 
//---------------------------------------------------------
2549,7 → 2708,7
if (advanceI) begin
dAXC <= AXC;
dextype <= `EX_NON;
if (nmi_edge & !StatusHWI) begin
if (nmi_edge & !StatusHWI & !im1) begin
$display("*****************");
$display("NMI edge detected");
$display("*****************");
2559,7 → 2718,7
dIR <= `NOP_INSN;
dextype <= `EX_NMI;
end
else if (irq_i & !im & !StatusHWI) begin
else if (irq_i & !im & !StatusHWI & !im1) begin
im <= 1'b1;
StatusHWI <= 1'b1;
dhwxtype <= 2'b10;
2576,7 → 2735,16
dIR <= `NOP_INSN;
`endif
else begin
dIR <= insn;
if ((iOpcode==`SM || iOpcode==`LM) && insn[31:0]!=32'd0)
im1 <= 1'b1;
else
im1 <= 1'b0;
if ((iOpcode==`SM || iOpcode==`LM) && insn[31:0]==32'd0) begin
dIR <= `NOP_INSN;
pc <= fnIncPC(pc);
end
else
dIR <= insn;
`include "insn_dumpsc.v"
end
nopI <= 1'b0;
2584,13 → 2752,51
dpc <= pc;
dpcv <= 1'b1;
end
dRb <= {AXC,insn[29:25]};
dRc <= {AXC,insn[24:20]};
casex(iOpcode)
`SETLO: dRa <= {AXC,insn[36:32]};
`SETHI: dRa <= {AXC,insn[36:32]};
`SM,`LM:
begin
dRa <= {AXC,1'b1,insn[34:31]};
casex(insn[30:0])
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1: dRb <= {AXC,5'd1};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxxx10: dRb <= {AXC,5'd2};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxxx100: dRb <= {AXC,5'd3};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxxx1000: dRb <= {AXC,5'd4};
31'bxxxxxxxxxxxxxxxxxxxxxxxxxx10000: dRb <= {AXC,5'd5};
31'bxxxxxxxxxxxxxxxxxxxxxxxxx100000: dRb <= {AXC,5'd6};
31'bxxxxxxxxxxxxxxxxxxxxxxxx1000000: dRb <= {AXC,5'd7};
31'bxxxxxxxxxxxxxxxxxxxxxxx10000000: dRb <= {AXC,5'd8};
31'bxxxxxxxxxxxxxxxxxxxxxx100000000: dRb <= {AXC,5'd9};
31'bxxxxxxxxxxxxxxxxxxxxx1000000000: dRb <= {AXC,5'd10};
31'bxxxxxxxxxxxxxxxxxxxx10000000000: dRb <= {AXC,5'd11};
31'bxxxxxxxxxxxxxxxxxxx100000000000: dRb <= {AXC,5'd12};
31'bxxxxxxxxxxxxxxxxxx1000000000000: dRb <= {AXC,5'd13};
31'bxxxxxxxxxxxxxxxxx10000000000000: dRb <= {AXC,5'd14};
31'bxxxxxxxxxxxxxxxx100000000000000: dRb <= {AXC,5'd15};
31'bxxxxxxxxxxxxxxx1000000000000000: dRb <= {AXC,5'd16};
31'bxxxxxxxxxxxxxx10000000000000000: dRb <= {AXC,5'd17};
31'bxxxxxxxxxxxxx100000000000000000: dRb <= {AXC,5'd18};
31'bxxxxxxxxxxxx1000000000000000000: dRb <= {AXC,5'd19};
31'bxxxxxxxxxxx10000000000000000000: dRb <= {AXC,5'd20};
31'bxxxxxxxxxx100000000000000000000: dRb <= {AXC,5'd21};
31'bxxxxxxxxx1000000000000000000000: dRb <= {AXC,5'd22};
31'bxxxxxxxx10000000000000000000000: dRb <= {AXC,5'd23};
31'bxxxxxxx100000000000000000000000: dRb <= {AXC,5'd24};
31'bxxxxxx1000000000000000000000000: dRb <= {AXC,5'd25};
31'bxxxxx10000000000000000000000000: dRb <= {AXC,5'd26};
31'bxxxx100000000000000000000000000: dRb <= {AXC,5'd27};
31'bxxx1000000000000000000000000000: dRb <= {AXC,5'd28};
31'bxx10000000000000000000000000000: dRb <= {AXC,5'd29};
31'bx100000000000000000000000000000: dRb <= {AXC,5'd30};
31'b1000000000000000000000000000000: dRb <= {AXC,5'd31};
default: dRb <= {AXC,5'd0};
endcase
end
default: dRa <= {AXC,insn[34:30]};
endcase
dRb <= {AXC,insn[29:25]};
dRc <= {AXC,insn[24:20]};
`ifdef TLB
if (ITLBMiss) begin
$display("TLB miss on instruction fetch.");
2604,7 → 2810,11
`endif
begin
dbranch_taken <= 1'b0;
pc <= fnIncPC(pc);
if ((iOpcode==`LM || iOpcode==`SM) && insn[31:0]!=32'd0)
;
else begin
pc <= fnIncPC(pc);
end
case(iOpcode)
`MISC:
case(iFunc)
2639,7 → 2849,7
end
`BTRR:
case(insn[4:0])
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BRA,`BNR,`BRN,`LOOP:
if (predict_taken) begin
// $display("Taking predicted branch: %h",{pc[63:4] + {{42{insn[24]}},insn[24:7]},insn[6:5],2'b00});
dbranch_taken <= 1'b1;
2708,6 → 2918,9
`EXEC:
begin
pc <= fnIncPC(xpc);
dRa <= b[34:30];
dRb <= b[29:25];
dRc <= b[24:20];
dIR <= b;
xIR <= `NOP_INSN;
xRt <= 9'd0;
2719,7 → 2932,7
`BTRR:
case(xIR[4:0])
// BEQ r1,r2,label
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR:
`BEQ,`BNE,`BLT,`BLE,`BGT,`BGE,`BLTU,`BLEU,`BGTU,`BGEU,`BAND,`BOR,`BNR,`LOOP,`BRA,`BRN:
if (!takb & xbranch_taken) begin
$display("Taking mispredicted branch %h",fnIncPC(xpc));
pc <= fnIncPC(xpc);
3072,12 → 3285,18
tmpbuf <= dat_i;
end
else begin
insnbuf <= {dat_i,tmpbuf};
if (tick[0]) begin
insnbuf0 <= {dat_i,tmpbuf};
ibuftag0 <= adr_o[63:4];
end
else begin
insnbuf1 <= {dat_i,tmpbuf};
ibuftag1 <= adr_o[63:4];
end
cti_o <= 3'b000; // back to non-burst mode
cyc_o <= 1'b0;
stb_o <= 1'b0;
icaccess <= 1'b0;
ibuftag <= adr_o[63:4];
cstate <= IDLE;
end
end
/raptor64/trunk/doc/Opcode Chart.docx Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.