Files
risc-v-cpu/pipelined-cpu/srcs/board/cpu21_board_rom_fast.vh
Alpha f50639e90f feat(saolei): 新增纯 C 扫雷(MMIO 显示 + 中断读鼠标),扩展 CPU 外设并清理仓库
## 背景

在原有五级流水 CPU 的基础上,用一颗 RISC-V 工具链把"纯 C 写的扫雷"编译成机器码
固化进片内 ROM 运行,并为此把 MMIO 外设从"只有一个 LED 寄存器"扩展成
显示(VGA 显存)+ 七段数码管 + 鼠标事件(含中断)的完整子系统。
原 LED MMIO 的语义保持不变,原有跑马灯/中断/指令回归不受影响。

## 硬件(pipelined-cpu/srcs)

- cpu21_mmio.v:扩展成 MMIO 中枢,新增
  * 七段数码管寄存器(0x1004,8 位十六进制)
  * 鼠标寄存器组(0x1100+):STATUS/DATA/ACK/CTRL/INPUT/TIME/FRAME/EVCNT/LEVEL/MAGIC
    —— 含 16 项事件 FIFO 与 mouse_irq_o(读空自动回 0,不丢事件)
  * 显示控制器(0x1140+):CTRL(光标可见/背景色)、CURSOR(列、行)
  * 显存窗口(0x2000-0x27FF):写端口输出到板级顶层的双口 RAM,读保持组合读
  * LEVEL(0x1120):软件中断寄存器,写 1 拉起 level_irq_o(用作"关卡入口")
  * 地址译码、字节写合并、读数据 mux 全部按原风格实现
- 新增外设 RTL:cpu21_vga.v(640x480@60 按格子扫描,8x8 字模放大 2 倍)、
  cpu21_seg7.v(8 位数码管动态扫描)、cpu21_pointer.v(5 向按键→鼠标事件,1 ms 去抖
  + 事件排队)、cpu21_ps2_mouse.v(可选真鼠标,PS/2 11 位帧接收 + 3 字节包解析)
- cpu21_riscv_redirect_int_bpb.v:新增外设总线端口(显存写/读回、鼠标事件输入、
  中断输出、数码管数据、帧脉冲),例化扩展后的 cpu21_mmio
- cpu21_board_top.v:接入显存双口 RAM + VGA + 数码管 + 鼠标事件源,中断接线为
  irq_i = {SW2, LEVEL|SW1, 鼠标|SW0};ROM 宏切换(定义 SAOLEI_ROM 加载扫雷程序);
  ROM_WORDS 1024→8192
- cpu21_board_top.xdc:新增按键、SW[3]、8 位数码管、VGA、PS/2 的全部引脚约束
- tb_board_top.v:新端口显式接 0/1,避免悬空影响原跑马灯回归
- create_project.tcl:把 cpu21_saolei_rom.vh 按 Verilog Header 条件加入

## 软件(saolei/)

- sw/mmio.h:全部 MMIO 地址与格子编码(换地址只改这一个文件)
- sw/saolei.c:纯 C 扫雷 —— 背景"伪操作系统" main()(开始界面)+ 关卡 level_main()
  (在 IRQ1 里跑完整局)+ 棋盘位图/布雷(首点安全)/BFS 展开/插旗/胜负判定/逐格绘制
- sw/isr.c:**中断读鼠标的代码**。三个固定地址入口:
  * isr1_entry(.text.isr1=0x100)关卡入口:保存全部调用者保存寄存器 +
    csrrsi 打开 MIE(让鼠标中断可嵌套)→ level_main
  * isr2_entry(.text.isr2=0x200)鼠标读取:只存 ra → 纯 C 主体 isr_body
  * isr3_entry(.text.isr3=0x300)备用:直接 uret
- sw/start.c:设 sp、清 .bss、进 main(只有这一处必要内联汇编)
- sw/linker.ld:复位 0x0、三个中断入口 0x100/0x200/0x300、栈顶 0x0FFC;
  用 ASSERT 禁止 .data/.rodata(这颗核读不到 ROM 里的数据)

## 构建与工具链适配(saolei/tools)

- build.ps1:一键 C → .o → ELF → .hex + cpu21_saolei_rom.vh,任一步失败立刻停止
- check_isa.py:用"指令白名单"逐条检查反汇编,出现本核未实现的指令即报错并给修复提示
- elf2hex.py:裸二进制 → $readmemh hex + ROM 初始化头文件
- 三处针对本核的关键配置(都已写进脚本注释):
  1) -march=rv32im_zicsr(GCC 15 起 rv32im 不含 Zicsr,csrrsi 会报错)
  2) 不能禁链接器松弛:gcc 函数调用默认是 auipc+jalr,靠松弛压成 jal,
     禁掉后 35 条 auipc 会留在代码里(本核没有 auipc);
     用 -msmall-data-limit=0 防止松弛引入 gp 相对寻址
  3) 中断入口地址必须写在段声明上(.text.isr1 0x100 : ...),
     只写 ". = 0x100;" 会被 ld 忽略(实测 isr1 掉到了 0x14)
- 实测结果:text=3368B、data=0、bss=1436B,842 条指令全部通过 ISA 检查,
  入口地址 _start=0x0 / isr1_entry=0x100 / isr2_entry=0x200 / isr3_entry=0x300

## 仓库清理

- 删除被工程取代的 saolei/hw、saolei/constrs(外设已并入 srcs/rtl)
- 删除全部 Vivado 生成物:.xpr、.runs、.sim、.cache、.hw、.ip_user_files、.Xil、
  vivado.jou/log —— 需要工程时用 source create_project.tcl 一键重建(约 0.3 MB 源文件)
- .gitignore 增加 saolei/build/(构建产物可一键重建)

## 文档

- README:更新目录结构、仓库约定(不放生成物)、MMIO 地址表、文件与模块划分表、
  上板说明,新增"扫雷程序(saolei/)"章节
- saolei/README.md:重写 —— 程序结构(背景/关卡/鼠标 + 三个中断入口)、
  本核指令子集与对应写法、构建步骤与实测数据、MMIO 地址表、上板/仿真步骤、
  操作说明、验证状态与已知可改进项

## 验证状态(如实说明)

- 已实测:C 工具链链路(编译/链接/ISA 检查/hex 生成/入口地址逐条核对)
- 未验证:所有 RTL 未经综合与仿真(本机无 Vivado),C 程序也未在仿真器/硬件上运行过;
  建议先跑 tools/run_regress.ps1 确认原回归仍全 PASS,再用 SAOLEI_ROM 宏做行为仿真
2026-09-16 20:11:00 +08:00

1027 lines
29 KiB
Systemverilog

// generated by tools/hex2vh.py - do not edit by hand
// source: _tmp/board_demo_fast.hex (13 words, remaining entries filled with NOP)
rom[0] = 32'h000012B7;
rom[1] = 32'h00100313;
rom[2] = 32'h0062A023;
rom[3] = 32'h00131313;
rom[4] = 32'h00008EB7;
rom[5] = 32'h006EE463;
rom[6] = 32'h0080006F;
rom[7] = 32'h00100313;
rom[8] = 32'h04000393;
rom[9] = 32'h00100E13;
rom[10] = 32'h41C383B3;
rom[11] = 32'hFE039EE3;
rom[12] = 32'hFD9FF06F;
rom[13] = 32'h00000013;
rom[14] = 32'h00000013;
rom[15] = 32'h00000013;
rom[16] = 32'h00000013;
rom[17] = 32'h00000013;
rom[18] = 32'h00000013;
rom[19] = 32'h00000013;
rom[20] = 32'h00000013;
rom[21] = 32'h00000013;
rom[22] = 32'h00000013;
rom[23] = 32'h00000013;
rom[24] = 32'h00000013;
rom[25] = 32'h00000013;
rom[26] = 32'h00000013;
rom[27] = 32'h00000013;
rom[28] = 32'h00000013;
rom[29] = 32'h00000013;
rom[30] = 32'h00000013;
rom[31] = 32'h00000013;
rom[32] = 32'h00000013;
rom[33] = 32'h00000013;
rom[34] = 32'h00000013;
rom[35] = 32'h00000013;
rom[36] = 32'h00000013;
rom[37] = 32'h00000013;
rom[38] = 32'h00000013;
rom[39] = 32'h00000013;
rom[40] = 32'h00000013;
rom[41] = 32'h00000013;
rom[42] = 32'h00000013;
rom[43] = 32'h00000013;
rom[44] = 32'h00000013;
rom[45] = 32'h00000013;
rom[46] = 32'h00000013;
rom[47] = 32'h00000013;
rom[48] = 32'h00000013;
rom[49] = 32'h00000013;
rom[50] = 32'h00000013;
rom[51] = 32'h00000013;
rom[52] = 32'h00000013;
rom[53] = 32'h00000013;
rom[54] = 32'h00000013;
rom[55] = 32'h00000013;
rom[56] = 32'h00000013;
rom[57] = 32'h00000013;
rom[58] = 32'h00000013;
rom[59] = 32'h00000013;
rom[60] = 32'h00000013;
rom[61] = 32'h00000013;
rom[62] = 32'h00000013;
rom[63] = 32'h00000013;
rom[64] = 32'h00000013;
rom[65] = 32'h00000013;
rom[66] = 32'h00000013;
rom[67] = 32'h00000013;
rom[68] = 32'h00000013;
rom[69] = 32'h00000013;
rom[70] = 32'h00000013;
rom[71] = 32'h00000013;
rom[72] = 32'h00000013;
rom[73] = 32'h00000013;
rom[74] = 32'h00000013;
rom[75] = 32'h00000013;
rom[76] = 32'h00000013;
rom[77] = 32'h00000013;
rom[78] = 32'h00000013;
rom[79] = 32'h00000013;
rom[80] = 32'h00000013;
rom[81] = 32'h00000013;
rom[82] = 32'h00000013;
rom[83] = 32'h00000013;
rom[84] = 32'h00000013;
rom[85] = 32'h00000013;
rom[86] = 32'h00000013;
rom[87] = 32'h00000013;
rom[88] = 32'h00000013;
rom[89] = 32'h00000013;
rom[90] = 32'h00000013;
rom[91] = 32'h00000013;
rom[92] = 32'h00000013;
rom[93] = 32'h00000013;
rom[94] = 32'h00000013;
rom[95] = 32'h00000013;
rom[96] = 32'h00000013;
rom[97] = 32'h00000013;
rom[98] = 32'h00000013;
rom[99] = 32'h00000013;
rom[100] = 32'h00000013;
rom[101] = 32'h00000013;
rom[102] = 32'h00000013;
rom[103] = 32'h00000013;
rom[104] = 32'h00000013;
rom[105] = 32'h00000013;
rom[106] = 32'h00000013;
rom[107] = 32'h00000013;
rom[108] = 32'h00000013;
rom[109] = 32'h00000013;
rom[110] = 32'h00000013;
rom[111] = 32'h00000013;
rom[112] = 32'h00000013;
rom[113] = 32'h00000013;
rom[114] = 32'h00000013;
rom[115] = 32'h00000013;
rom[116] = 32'h00000013;
rom[117] = 32'h00000013;
rom[118] = 32'h00000013;
rom[119] = 32'h00000013;
rom[120] = 32'h00000013;
rom[121] = 32'h00000013;
rom[122] = 32'h00000013;
rom[123] = 32'h00000013;
rom[124] = 32'h00000013;
rom[125] = 32'h00000013;
rom[126] = 32'h00000013;
rom[127] = 32'h00000013;
rom[128] = 32'h00000013;
rom[129] = 32'h00000013;
rom[130] = 32'h00000013;
rom[131] = 32'h00000013;
rom[132] = 32'h00000013;
rom[133] = 32'h00000013;
rom[134] = 32'h00000013;
rom[135] = 32'h00000013;
rom[136] = 32'h00000013;
rom[137] = 32'h00000013;
rom[138] = 32'h00000013;
rom[139] = 32'h00000013;
rom[140] = 32'h00000013;
rom[141] = 32'h00000013;
rom[142] = 32'h00000013;
rom[143] = 32'h00000013;
rom[144] = 32'h00000013;
rom[145] = 32'h00000013;
rom[146] = 32'h00000013;
rom[147] = 32'h00000013;
rom[148] = 32'h00000013;
rom[149] = 32'h00000013;
rom[150] = 32'h00000013;
rom[151] = 32'h00000013;
rom[152] = 32'h00000013;
rom[153] = 32'h00000013;
rom[154] = 32'h00000013;
rom[155] = 32'h00000013;
rom[156] = 32'h00000013;
rom[157] = 32'h00000013;
rom[158] = 32'h00000013;
rom[159] = 32'h00000013;
rom[160] = 32'h00000013;
rom[161] = 32'h00000013;
rom[162] = 32'h00000013;
rom[163] = 32'h00000013;
rom[164] = 32'h00000013;
rom[165] = 32'h00000013;
rom[166] = 32'h00000013;
rom[167] = 32'h00000013;
rom[168] = 32'h00000013;
rom[169] = 32'h00000013;
rom[170] = 32'h00000013;
rom[171] = 32'h00000013;
rom[172] = 32'h00000013;
rom[173] = 32'h00000013;
rom[174] = 32'h00000013;
rom[175] = 32'h00000013;
rom[176] = 32'h00000013;
rom[177] = 32'h00000013;
rom[178] = 32'h00000013;
rom[179] = 32'h00000013;
rom[180] = 32'h00000013;
rom[181] = 32'h00000013;
rom[182] = 32'h00000013;
rom[183] = 32'h00000013;
rom[184] = 32'h00000013;
rom[185] = 32'h00000013;
rom[186] = 32'h00000013;
rom[187] = 32'h00000013;
rom[188] = 32'h00000013;
rom[189] = 32'h00000013;
rom[190] = 32'h00000013;
rom[191] = 32'h00000013;
rom[192] = 32'h00000013;
rom[193] = 32'h00000013;
rom[194] = 32'h00000013;
rom[195] = 32'h00000013;
rom[196] = 32'h00000013;
rom[197] = 32'h00000013;
rom[198] = 32'h00000013;
rom[199] = 32'h00000013;
rom[200] = 32'h00000013;
rom[201] = 32'h00000013;
rom[202] = 32'h00000013;
rom[203] = 32'h00000013;
rom[204] = 32'h00000013;
rom[205] = 32'h00000013;
rom[206] = 32'h00000013;
rom[207] = 32'h00000013;
rom[208] = 32'h00000013;
rom[209] = 32'h00000013;
rom[210] = 32'h00000013;
rom[211] = 32'h00000013;
rom[212] = 32'h00000013;
rom[213] = 32'h00000013;
rom[214] = 32'h00000013;
rom[215] = 32'h00000013;
rom[216] = 32'h00000013;
rom[217] = 32'h00000013;
rom[218] = 32'h00000013;
rom[219] = 32'h00000013;
rom[220] = 32'h00000013;
rom[221] = 32'h00000013;
rom[222] = 32'h00000013;
rom[223] = 32'h00000013;
rom[224] = 32'h00000013;
rom[225] = 32'h00000013;
rom[226] = 32'h00000013;
rom[227] = 32'h00000013;
rom[228] = 32'h00000013;
rom[229] = 32'h00000013;
rom[230] = 32'h00000013;
rom[231] = 32'h00000013;
rom[232] = 32'h00000013;
rom[233] = 32'h00000013;
rom[234] = 32'h00000013;
rom[235] = 32'h00000013;
rom[236] = 32'h00000013;
rom[237] = 32'h00000013;
rom[238] = 32'h00000013;
rom[239] = 32'h00000013;
rom[240] = 32'h00000013;
rom[241] = 32'h00000013;
rom[242] = 32'h00000013;
rom[243] = 32'h00000013;
rom[244] = 32'h00000013;
rom[245] = 32'h00000013;
rom[246] = 32'h00000013;
rom[247] = 32'h00000013;
rom[248] = 32'h00000013;
rom[249] = 32'h00000013;
rom[250] = 32'h00000013;
rom[251] = 32'h00000013;
rom[252] = 32'h00000013;
rom[253] = 32'h00000013;
rom[254] = 32'h00000013;
rom[255] = 32'h00000013;
rom[256] = 32'h00000013;
rom[257] = 32'h00000013;
rom[258] = 32'h00000013;
rom[259] = 32'h00000013;
rom[260] = 32'h00000013;
rom[261] = 32'h00000013;
rom[262] = 32'h00000013;
rom[263] = 32'h00000013;
rom[264] = 32'h00000013;
rom[265] = 32'h00000013;
rom[266] = 32'h00000013;
rom[267] = 32'h00000013;
rom[268] = 32'h00000013;
rom[269] = 32'h00000013;
rom[270] = 32'h00000013;
rom[271] = 32'h00000013;
rom[272] = 32'h00000013;
rom[273] = 32'h00000013;
rom[274] = 32'h00000013;
rom[275] = 32'h00000013;
rom[276] = 32'h00000013;
rom[277] = 32'h00000013;
rom[278] = 32'h00000013;
rom[279] = 32'h00000013;
rom[280] = 32'h00000013;
rom[281] = 32'h00000013;
rom[282] = 32'h00000013;
rom[283] = 32'h00000013;
rom[284] = 32'h00000013;
rom[285] = 32'h00000013;
rom[286] = 32'h00000013;
rom[287] = 32'h00000013;
rom[288] = 32'h00000013;
rom[289] = 32'h00000013;
rom[290] = 32'h00000013;
rom[291] = 32'h00000013;
rom[292] = 32'h00000013;
rom[293] = 32'h00000013;
rom[294] = 32'h00000013;
rom[295] = 32'h00000013;
rom[296] = 32'h00000013;
rom[297] = 32'h00000013;
rom[298] = 32'h00000013;
rom[299] = 32'h00000013;
rom[300] = 32'h00000013;
rom[301] = 32'h00000013;
rom[302] = 32'h00000013;
rom[303] = 32'h00000013;
rom[304] = 32'h00000013;
rom[305] = 32'h00000013;
rom[306] = 32'h00000013;
rom[307] = 32'h00000013;
rom[308] = 32'h00000013;
rom[309] = 32'h00000013;
rom[310] = 32'h00000013;
rom[311] = 32'h00000013;
rom[312] = 32'h00000013;
rom[313] = 32'h00000013;
rom[314] = 32'h00000013;
rom[315] = 32'h00000013;
rom[316] = 32'h00000013;
rom[317] = 32'h00000013;
rom[318] = 32'h00000013;
rom[319] = 32'h00000013;
rom[320] = 32'h00000013;
rom[321] = 32'h00000013;
rom[322] = 32'h00000013;
rom[323] = 32'h00000013;
rom[324] = 32'h00000013;
rom[325] = 32'h00000013;
rom[326] = 32'h00000013;
rom[327] = 32'h00000013;
rom[328] = 32'h00000013;
rom[329] = 32'h00000013;
rom[330] = 32'h00000013;
rom[331] = 32'h00000013;
rom[332] = 32'h00000013;
rom[333] = 32'h00000013;
rom[334] = 32'h00000013;
rom[335] = 32'h00000013;
rom[336] = 32'h00000013;
rom[337] = 32'h00000013;
rom[338] = 32'h00000013;
rom[339] = 32'h00000013;
rom[340] = 32'h00000013;
rom[341] = 32'h00000013;
rom[342] = 32'h00000013;
rom[343] = 32'h00000013;
rom[344] = 32'h00000013;
rom[345] = 32'h00000013;
rom[346] = 32'h00000013;
rom[347] = 32'h00000013;
rom[348] = 32'h00000013;
rom[349] = 32'h00000013;
rom[350] = 32'h00000013;
rom[351] = 32'h00000013;
rom[352] = 32'h00000013;
rom[353] = 32'h00000013;
rom[354] = 32'h00000013;
rom[355] = 32'h00000013;
rom[356] = 32'h00000013;
rom[357] = 32'h00000013;
rom[358] = 32'h00000013;
rom[359] = 32'h00000013;
rom[360] = 32'h00000013;
rom[361] = 32'h00000013;
rom[362] = 32'h00000013;
rom[363] = 32'h00000013;
rom[364] = 32'h00000013;
rom[365] = 32'h00000013;
rom[366] = 32'h00000013;
rom[367] = 32'h00000013;
rom[368] = 32'h00000013;
rom[369] = 32'h00000013;
rom[370] = 32'h00000013;
rom[371] = 32'h00000013;
rom[372] = 32'h00000013;
rom[373] = 32'h00000013;
rom[374] = 32'h00000013;
rom[375] = 32'h00000013;
rom[376] = 32'h00000013;
rom[377] = 32'h00000013;
rom[378] = 32'h00000013;
rom[379] = 32'h00000013;
rom[380] = 32'h00000013;
rom[381] = 32'h00000013;
rom[382] = 32'h00000013;
rom[383] = 32'h00000013;
rom[384] = 32'h00000013;
rom[385] = 32'h00000013;
rom[386] = 32'h00000013;
rom[387] = 32'h00000013;
rom[388] = 32'h00000013;
rom[389] = 32'h00000013;
rom[390] = 32'h00000013;
rom[391] = 32'h00000013;
rom[392] = 32'h00000013;
rom[393] = 32'h00000013;
rom[394] = 32'h00000013;
rom[395] = 32'h00000013;
rom[396] = 32'h00000013;
rom[397] = 32'h00000013;
rom[398] = 32'h00000013;
rom[399] = 32'h00000013;
rom[400] = 32'h00000013;
rom[401] = 32'h00000013;
rom[402] = 32'h00000013;
rom[403] = 32'h00000013;
rom[404] = 32'h00000013;
rom[405] = 32'h00000013;
rom[406] = 32'h00000013;
rom[407] = 32'h00000013;
rom[408] = 32'h00000013;
rom[409] = 32'h00000013;
rom[410] = 32'h00000013;
rom[411] = 32'h00000013;
rom[412] = 32'h00000013;
rom[413] = 32'h00000013;
rom[414] = 32'h00000013;
rom[415] = 32'h00000013;
rom[416] = 32'h00000013;
rom[417] = 32'h00000013;
rom[418] = 32'h00000013;
rom[419] = 32'h00000013;
rom[420] = 32'h00000013;
rom[421] = 32'h00000013;
rom[422] = 32'h00000013;
rom[423] = 32'h00000013;
rom[424] = 32'h00000013;
rom[425] = 32'h00000013;
rom[426] = 32'h00000013;
rom[427] = 32'h00000013;
rom[428] = 32'h00000013;
rom[429] = 32'h00000013;
rom[430] = 32'h00000013;
rom[431] = 32'h00000013;
rom[432] = 32'h00000013;
rom[433] = 32'h00000013;
rom[434] = 32'h00000013;
rom[435] = 32'h00000013;
rom[436] = 32'h00000013;
rom[437] = 32'h00000013;
rom[438] = 32'h00000013;
rom[439] = 32'h00000013;
rom[440] = 32'h00000013;
rom[441] = 32'h00000013;
rom[442] = 32'h00000013;
rom[443] = 32'h00000013;
rom[444] = 32'h00000013;
rom[445] = 32'h00000013;
rom[446] = 32'h00000013;
rom[447] = 32'h00000013;
rom[448] = 32'h00000013;
rom[449] = 32'h00000013;
rom[450] = 32'h00000013;
rom[451] = 32'h00000013;
rom[452] = 32'h00000013;
rom[453] = 32'h00000013;
rom[454] = 32'h00000013;
rom[455] = 32'h00000013;
rom[456] = 32'h00000013;
rom[457] = 32'h00000013;
rom[458] = 32'h00000013;
rom[459] = 32'h00000013;
rom[460] = 32'h00000013;
rom[461] = 32'h00000013;
rom[462] = 32'h00000013;
rom[463] = 32'h00000013;
rom[464] = 32'h00000013;
rom[465] = 32'h00000013;
rom[466] = 32'h00000013;
rom[467] = 32'h00000013;
rom[468] = 32'h00000013;
rom[469] = 32'h00000013;
rom[470] = 32'h00000013;
rom[471] = 32'h00000013;
rom[472] = 32'h00000013;
rom[473] = 32'h00000013;
rom[474] = 32'h00000013;
rom[475] = 32'h00000013;
rom[476] = 32'h00000013;
rom[477] = 32'h00000013;
rom[478] = 32'h00000013;
rom[479] = 32'h00000013;
rom[480] = 32'h00000013;
rom[481] = 32'h00000013;
rom[482] = 32'h00000013;
rom[483] = 32'h00000013;
rom[484] = 32'h00000013;
rom[485] = 32'h00000013;
rom[486] = 32'h00000013;
rom[487] = 32'h00000013;
rom[488] = 32'h00000013;
rom[489] = 32'h00000013;
rom[490] = 32'h00000013;
rom[491] = 32'h00000013;
rom[492] = 32'h00000013;
rom[493] = 32'h00000013;
rom[494] = 32'h00000013;
rom[495] = 32'h00000013;
rom[496] = 32'h00000013;
rom[497] = 32'h00000013;
rom[498] = 32'h00000013;
rom[499] = 32'h00000013;
rom[500] = 32'h00000013;
rom[501] = 32'h00000013;
rom[502] = 32'h00000013;
rom[503] = 32'h00000013;
rom[504] = 32'h00000013;
rom[505] = 32'h00000013;
rom[506] = 32'h00000013;
rom[507] = 32'h00000013;
rom[508] = 32'h00000013;
rom[509] = 32'h00000013;
rom[510] = 32'h00000013;
rom[511] = 32'h00000013;
rom[512] = 32'h00000013;
rom[513] = 32'h00000013;
rom[514] = 32'h00000013;
rom[515] = 32'h00000013;
rom[516] = 32'h00000013;
rom[517] = 32'h00000013;
rom[518] = 32'h00000013;
rom[519] = 32'h00000013;
rom[520] = 32'h00000013;
rom[521] = 32'h00000013;
rom[522] = 32'h00000013;
rom[523] = 32'h00000013;
rom[524] = 32'h00000013;
rom[525] = 32'h00000013;
rom[526] = 32'h00000013;
rom[527] = 32'h00000013;
rom[528] = 32'h00000013;
rom[529] = 32'h00000013;
rom[530] = 32'h00000013;
rom[531] = 32'h00000013;
rom[532] = 32'h00000013;
rom[533] = 32'h00000013;
rom[534] = 32'h00000013;
rom[535] = 32'h00000013;
rom[536] = 32'h00000013;
rom[537] = 32'h00000013;
rom[538] = 32'h00000013;
rom[539] = 32'h00000013;
rom[540] = 32'h00000013;
rom[541] = 32'h00000013;
rom[542] = 32'h00000013;
rom[543] = 32'h00000013;
rom[544] = 32'h00000013;
rom[545] = 32'h00000013;
rom[546] = 32'h00000013;
rom[547] = 32'h00000013;
rom[548] = 32'h00000013;
rom[549] = 32'h00000013;
rom[550] = 32'h00000013;
rom[551] = 32'h00000013;
rom[552] = 32'h00000013;
rom[553] = 32'h00000013;
rom[554] = 32'h00000013;
rom[555] = 32'h00000013;
rom[556] = 32'h00000013;
rom[557] = 32'h00000013;
rom[558] = 32'h00000013;
rom[559] = 32'h00000013;
rom[560] = 32'h00000013;
rom[561] = 32'h00000013;
rom[562] = 32'h00000013;
rom[563] = 32'h00000013;
rom[564] = 32'h00000013;
rom[565] = 32'h00000013;
rom[566] = 32'h00000013;
rom[567] = 32'h00000013;
rom[568] = 32'h00000013;
rom[569] = 32'h00000013;
rom[570] = 32'h00000013;
rom[571] = 32'h00000013;
rom[572] = 32'h00000013;
rom[573] = 32'h00000013;
rom[574] = 32'h00000013;
rom[575] = 32'h00000013;
rom[576] = 32'h00000013;
rom[577] = 32'h00000013;
rom[578] = 32'h00000013;
rom[579] = 32'h00000013;
rom[580] = 32'h00000013;
rom[581] = 32'h00000013;
rom[582] = 32'h00000013;
rom[583] = 32'h00000013;
rom[584] = 32'h00000013;
rom[585] = 32'h00000013;
rom[586] = 32'h00000013;
rom[587] = 32'h00000013;
rom[588] = 32'h00000013;
rom[589] = 32'h00000013;
rom[590] = 32'h00000013;
rom[591] = 32'h00000013;
rom[592] = 32'h00000013;
rom[593] = 32'h00000013;
rom[594] = 32'h00000013;
rom[595] = 32'h00000013;
rom[596] = 32'h00000013;
rom[597] = 32'h00000013;
rom[598] = 32'h00000013;
rom[599] = 32'h00000013;
rom[600] = 32'h00000013;
rom[601] = 32'h00000013;
rom[602] = 32'h00000013;
rom[603] = 32'h00000013;
rom[604] = 32'h00000013;
rom[605] = 32'h00000013;
rom[606] = 32'h00000013;
rom[607] = 32'h00000013;
rom[608] = 32'h00000013;
rom[609] = 32'h00000013;
rom[610] = 32'h00000013;
rom[611] = 32'h00000013;
rom[612] = 32'h00000013;
rom[613] = 32'h00000013;
rom[614] = 32'h00000013;
rom[615] = 32'h00000013;
rom[616] = 32'h00000013;
rom[617] = 32'h00000013;
rom[618] = 32'h00000013;
rom[619] = 32'h00000013;
rom[620] = 32'h00000013;
rom[621] = 32'h00000013;
rom[622] = 32'h00000013;
rom[623] = 32'h00000013;
rom[624] = 32'h00000013;
rom[625] = 32'h00000013;
rom[626] = 32'h00000013;
rom[627] = 32'h00000013;
rom[628] = 32'h00000013;
rom[629] = 32'h00000013;
rom[630] = 32'h00000013;
rom[631] = 32'h00000013;
rom[632] = 32'h00000013;
rom[633] = 32'h00000013;
rom[634] = 32'h00000013;
rom[635] = 32'h00000013;
rom[636] = 32'h00000013;
rom[637] = 32'h00000013;
rom[638] = 32'h00000013;
rom[639] = 32'h00000013;
rom[640] = 32'h00000013;
rom[641] = 32'h00000013;
rom[642] = 32'h00000013;
rom[643] = 32'h00000013;
rom[644] = 32'h00000013;
rom[645] = 32'h00000013;
rom[646] = 32'h00000013;
rom[647] = 32'h00000013;
rom[648] = 32'h00000013;
rom[649] = 32'h00000013;
rom[650] = 32'h00000013;
rom[651] = 32'h00000013;
rom[652] = 32'h00000013;
rom[653] = 32'h00000013;
rom[654] = 32'h00000013;
rom[655] = 32'h00000013;
rom[656] = 32'h00000013;
rom[657] = 32'h00000013;
rom[658] = 32'h00000013;
rom[659] = 32'h00000013;
rom[660] = 32'h00000013;
rom[661] = 32'h00000013;
rom[662] = 32'h00000013;
rom[663] = 32'h00000013;
rom[664] = 32'h00000013;
rom[665] = 32'h00000013;
rom[666] = 32'h00000013;
rom[667] = 32'h00000013;
rom[668] = 32'h00000013;
rom[669] = 32'h00000013;
rom[670] = 32'h00000013;
rom[671] = 32'h00000013;
rom[672] = 32'h00000013;
rom[673] = 32'h00000013;
rom[674] = 32'h00000013;
rom[675] = 32'h00000013;
rom[676] = 32'h00000013;
rom[677] = 32'h00000013;
rom[678] = 32'h00000013;
rom[679] = 32'h00000013;
rom[680] = 32'h00000013;
rom[681] = 32'h00000013;
rom[682] = 32'h00000013;
rom[683] = 32'h00000013;
rom[684] = 32'h00000013;
rom[685] = 32'h00000013;
rom[686] = 32'h00000013;
rom[687] = 32'h00000013;
rom[688] = 32'h00000013;
rom[689] = 32'h00000013;
rom[690] = 32'h00000013;
rom[691] = 32'h00000013;
rom[692] = 32'h00000013;
rom[693] = 32'h00000013;
rom[694] = 32'h00000013;
rom[695] = 32'h00000013;
rom[696] = 32'h00000013;
rom[697] = 32'h00000013;
rom[698] = 32'h00000013;
rom[699] = 32'h00000013;
rom[700] = 32'h00000013;
rom[701] = 32'h00000013;
rom[702] = 32'h00000013;
rom[703] = 32'h00000013;
rom[704] = 32'h00000013;
rom[705] = 32'h00000013;
rom[706] = 32'h00000013;
rom[707] = 32'h00000013;
rom[708] = 32'h00000013;
rom[709] = 32'h00000013;
rom[710] = 32'h00000013;
rom[711] = 32'h00000013;
rom[712] = 32'h00000013;
rom[713] = 32'h00000013;
rom[714] = 32'h00000013;
rom[715] = 32'h00000013;
rom[716] = 32'h00000013;
rom[717] = 32'h00000013;
rom[718] = 32'h00000013;
rom[719] = 32'h00000013;
rom[720] = 32'h00000013;
rom[721] = 32'h00000013;
rom[722] = 32'h00000013;
rom[723] = 32'h00000013;
rom[724] = 32'h00000013;
rom[725] = 32'h00000013;
rom[726] = 32'h00000013;
rom[727] = 32'h00000013;
rom[728] = 32'h00000013;
rom[729] = 32'h00000013;
rom[730] = 32'h00000013;
rom[731] = 32'h00000013;
rom[732] = 32'h00000013;
rom[733] = 32'h00000013;
rom[734] = 32'h00000013;
rom[735] = 32'h00000013;
rom[736] = 32'h00000013;
rom[737] = 32'h00000013;
rom[738] = 32'h00000013;
rom[739] = 32'h00000013;
rom[740] = 32'h00000013;
rom[741] = 32'h00000013;
rom[742] = 32'h00000013;
rom[743] = 32'h00000013;
rom[744] = 32'h00000013;
rom[745] = 32'h00000013;
rom[746] = 32'h00000013;
rom[747] = 32'h00000013;
rom[748] = 32'h00000013;
rom[749] = 32'h00000013;
rom[750] = 32'h00000013;
rom[751] = 32'h00000013;
rom[752] = 32'h00000013;
rom[753] = 32'h00000013;
rom[754] = 32'h00000013;
rom[755] = 32'h00000013;
rom[756] = 32'h00000013;
rom[757] = 32'h00000013;
rom[758] = 32'h00000013;
rom[759] = 32'h00000013;
rom[760] = 32'h00000013;
rom[761] = 32'h00000013;
rom[762] = 32'h00000013;
rom[763] = 32'h00000013;
rom[764] = 32'h00000013;
rom[765] = 32'h00000013;
rom[766] = 32'h00000013;
rom[767] = 32'h00000013;
rom[768] = 32'h00000013;
rom[769] = 32'h00000013;
rom[770] = 32'h00000013;
rom[771] = 32'h00000013;
rom[772] = 32'h00000013;
rom[773] = 32'h00000013;
rom[774] = 32'h00000013;
rom[775] = 32'h00000013;
rom[776] = 32'h00000013;
rom[777] = 32'h00000013;
rom[778] = 32'h00000013;
rom[779] = 32'h00000013;
rom[780] = 32'h00000013;
rom[781] = 32'h00000013;
rom[782] = 32'h00000013;
rom[783] = 32'h00000013;
rom[784] = 32'h00000013;
rom[785] = 32'h00000013;
rom[786] = 32'h00000013;
rom[787] = 32'h00000013;
rom[788] = 32'h00000013;
rom[789] = 32'h00000013;
rom[790] = 32'h00000013;
rom[791] = 32'h00000013;
rom[792] = 32'h00000013;
rom[793] = 32'h00000013;
rom[794] = 32'h00000013;
rom[795] = 32'h00000013;
rom[796] = 32'h00000013;
rom[797] = 32'h00000013;
rom[798] = 32'h00000013;
rom[799] = 32'h00000013;
rom[800] = 32'h00000013;
rom[801] = 32'h00000013;
rom[802] = 32'h00000013;
rom[803] = 32'h00000013;
rom[804] = 32'h00000013;
rom[805] = 32'h00000013;
rom[806] = 32'h00000013;
rom[807] = 32'h00000013;
rom[808] = 32'h00000013;
rom[809] = 32'h00000013;
rom[810] = 32'h00000013;
rom[811] = 32'h00000013;
rom[812] = 32'h00000013;
rom[813] = 32'h00000013;
rom[814] = 32'h00000013;
rom[815] = 32'h00000013;
rom[816] = 32'h00000013;
rom[817] = 32'h00000013;
rom[818] = 32'h00000013;
rom[819] = 32'h00000013;
rom[820] = 32'h00000013;
rom[821] = 32'h00000013;
rom[822] = 32'h00000013;
rom[823] = 32'h00000013;
rom[824] = 32'h00000013;
rom[825] = 32'h00000013;
rom[826] = 32'h00000013;
rom[827] = 32'h00000013;
rom[828] = 32'h00000013;
rom[829] = 32'h00000013;
rom[830] = 32'h00000013;
rom[831] = 32'h00000013;
rom[832] = 32'h00000013;
rom[833] = 32'h00000013;
rom[834] = 32'h00000013;
rom[835] = 32'h00000013;
rom[836] = 32'h00000013;
rom[837] = 32'h00000013;
rom[838] = 32'h00000013;
rom[839] = 32'h00000013;
rom[840] = 32'h00000013;
rom[841] = 32'h00000013;
rom[842] = 32'h00000013;
rom[843] = 32'h00000013;
rom[844] = 32'h00000013;
rom[845] = 32'h00000013;
rom[846] = 32'h00000013;
rom[847] = 32'h00000013;
rom[848] = 32'h00000013;
rom[849] = 32'h00000013;
rom[850] = 32'h00000013;
rom[851] = 32'h00000013;
rom[852] = 32'h00000013;
rom[853] = 32'h00000013;
rom[854] = 32'h00000013;
rom[855] = 32'h00000013;
rom[856] = 32'h00000013;
rom[857] = 32'h00000013;
rom[858] = 32'h00000013;
rom[859] = 32'h00000013;
rom[860] = 32'h00000013;
rom[861] = 32'h00000013;
rom[862] = 32'h00000013;
rom[863] = 32'h00000013;
rom[864] = 32'h00000013;
rom[865] = 32'h00000013;
rom[866] = 32'h00000013;
rom[867] = 32'h00000013;
rom[868] = 32'h00000013;
rom[869] = 32'h00000013;
rom[870] = 32'h00000013;
rom[871] = 32'h00000013;
rom[872] = 32'h00000013;
rom[873] = 32'h00000013;
rom[874] = 32'h00000013;
rom[875] = 32'h00000013;
rom[876] = 32'h00000013;
rom[877] = 32'h00000013;
rom[878] = 32'h00000013;
rom[879] = 32'h00000013;
rom[880] = 32'h00000013;
rom[881] = 32'h00000013;
rom[882] = 32'h00000013;
rom[883] = 32'h00000013;
rom[884] = 32'h00000013;
rom[885] = 32'h00000013;
rom[886] = 32'h00000013;
rom[887] = 32'h00000013;
rom[888] = 32'h00000013;
rom[889] = 32'h00000013;
rom[890] = 32'h00000013;
rom[891] = 32'h00000013;
rom[892] = 32'h00000013;
rom[893] = 32'h00000013;
rom[894] = 32'h00000013;
rom[895] = 32'h00000013;
rom[896] = 32'h00000013;
rom[897] = 32'h00000013;
rom[898] = 32'h00000013;
rom[899] = 32'h00000013;
rom[900] = 32'h00000013;
rom[901] = 32'h00000013;
rom[902] = 32'h00000013;
rom[903] = 32'h00000013;
rom[904] = 32'h00000013;
rom[905] = 32'h00000013;
rom[906] = 32'h00000013;
rom[907] = 32'h00000013;
rom[908] = 32'h00000013;
rom[909] = 32'h00000013;
rom[910] = 32'h00000013;
rom[911] = 32'h00000013;
rom[912] = 32'h00000013;
rom[913] = 32'h00000013;
rom[914] = 32'h00000013;
rom[915] = 32'h00000013;
rom[916] = 32'h00000013;
rom[917] = 32'h00000013;
rom[918] = 32'h00000013;
rom[919] = 32'h00000013;
rom[920] = 32'h00000013;
rom[921] = 32'h00000013;
rom[922] = 32'h00000013;
rom[923] = 32'h00000013;
rom[924] = 32'h00000013;
rom[925] = 32'h00000013;
rom[926] = 32'h00000013;
rom[927] = 32'h00000013;
rom[928] = 32'h00000013;
rom[929] = 32'h00000013;
rom[930] = 32'h00000013;
rom[931] = 32'h00000013;
rom[932] = 32'h00000013;
rom[933] = 32'h00000013;
rom[934] = 32'h00000013;
rom[935] = 32'h00000013;
rom[936] = 32'h00000013;
rom[937] = 32'h00000013;
rom[938] = 32'h00000013;
rom[939] = 32'h00000013;
rom[940] = 32'h00000013;
rom[941] = 32'h00000013;
rom[942] = 32'h00000013;
rom[943] = 32'h00000013;
rom[944] = 32'h00000013;
rom[945] = 32'h00000013;
rom[946] = 32'h00000013;
rom[947] = 32'h00000013;
rom[948] = 32'h00000013;
rom[949] = 32'h00000013;
rom[950] = 32'h00000013;
rom[951] = 32'h00000013;
rom[952] = 32'h00000013;
rom[953] = 32'h00000013;
rom[954] = 32'h00000013;
rom[955] = 32'h00000013;
rom[956] = 32'h00000013;
rom[957] = 32'h00000013;
rom[958] = 32'h00000013;
rom[959] = 32'h00000013;
rom[960] = 32'h00000013;
rom[961] = 32'h00000013;
rom[962] = 32'h00000013;
rom[963] = 32'h00000013;
rom[964] = 32'h00000013;
rom[965] = 32'h00000013;
rom[966] = 32'h00000013;
rom[967] = 32'h00000013;
rom[968] = 32'h00000013;
rom[969] = 32'h00000013;
rom[970] = 32'h00000013;
rom[971] = 32'h00000013;
rom[972] = 32'h00000013;
rom[973] = 32'h00000013;
rom[974] = 32'h00000013;
rom[975] = 32'h00000013;
rom[976] = 32'h00000013;
rom[977] = 32'h00000013;
rom[978] = 32'h00000013;
rom[979] = 32'h00000013;
rom[980] = 32'h00000013;
rom[981] = 32'h00000013;
rom[982] = 32'h00000013;
rom[983] = 32'h00000013;
rom[984] = 32'h00000013;
rom[985] = 32'h00000013;
rom[986] = 32'h00000013;
rom[987] = 32'h00000013;
rom[988] = 32'h00000013;
rom[989] = 32'h00000013;
rom[990] = 32'h00000013;
rom[991] = 32'h00000013;
rom[992] = 32'h00000013;
rom[993] = 32'h00000013;
rom[994] = 32'h00000013;
rom[995] = 32'h00000013;
rom[996] = 32'h00000013;
rom[997] = 32'h00000013;
rom[998] = 32'h00000013;
rom[999] = 32'h00000013;
rom[1000] = 32'h00000013;
rom[1001] = 32'h00000013;
rom[1002] = 32'h00000013;
rom[1003] = 32'h00000013;
rom[1004] = 32'h00000013;
rom[1005] = 32'h00000013;
rom[1006] = 32'h00000013;
rom[1007] = 32'h00000013;
rom[1008] = 32'h00000013;
rom[1009] = 32'h00000013;
rom[1010] = 32'h00000013;
rom[1011] = 32'h00000013;
rom[1012] = 32'h00000013;
rom[1013] = 32'h00000013;
rom[1014] = 32'h00000013;
rom[1015] = 32'h00000013;
rom[1016] = 32'h00000013;
rom[1017] = 32'h00000013;
rom[1018] = 32'h00000013;
rom[1019] = 32'h00000013;
rom[1020] = 32'h00000013;
rom[1021] = 32'h00000013;
rom[1022] = 32'h00000013;
rom[1023] = 32'h00000013;