1 |
4 |
ayersg |
MIPS32-R1 SoC HOWTO
|
2 |
|
|
-------------------
|
3 |
|
|
|
4 |
|
|
This document is a step-by-step procedure for building the MIPS32 hardware
|
5 |
|
|
and software and running it on the XUPV5-LX110T FPGA development board. With
|
6 |
5 |
ayersg |
minimal changes, other hardware platforms may be used as well (see FAQ).
|
7 |
4 |
ayersg |
|
8 |
|
|
Procedure
|
9 |
|
|
---------
|
10 |
|
|
|
11 |
|
|
1. Build the software toolchain. Instructions for doing this are located
|
12 |
|
|
in the "Software/toolchain" directory.
|
13 |
|
|
|
14 |
|
|
2. Open the project file "MIPS32-Pipelined-Hw.xise" located in the
|
15 |
|
|
"Hardware/XUPV5-LX110T_SoC/MIPS32-Pipelined-Hw" directory. This is
|
16 |
|
|
a Xilinx ISE 14.1 project file.
|
17 |
|
|
|
18 |
|
|
3. Build the hardware project and generate the programming .bit file.
|
19 |
|
|
Send the programming file to the board through Impact (you may need
|
20 |
|
|
to create a new Impact project file for your system, but no options
|
21 |
|
|
are needed other than the configuration .bit file targeted for the
|
22 |
|
|
Virtex-5 device). A default program built into the BRAM will print
|
23 |
|
|
a hello message to the LCD screen.
|
24 |
|
|
|
25 |
6 |
ayersg |
Alternatively, a pre-built .bit file is located in the
|
26 |
4 |
ayersg |
"Hardware/XUPV5-LX110T_SoC" directory.
|
27 |
|
|
|
28 |
|
|
4. Compile any of the software demos located in "Software/demos" using
|
29 |
|
|
the Makefile included with the demo. One of the output files from
|
30 |
6 |
ayersg |
the compilation will have a .xum extension. This is a binary file that
|
31 |
4 |
ayersg |
contains the code and data for the program. Use the XUM Bootloader
|
32 |
|
|
software (Windows) to send the .xum file over a serial port to the
|
33 |
|
|
FPGA. When the program is sent, the CPU will reset and run it.
|
34 |
|
|
|
35 |
8 |
ayersg |
Rebuilding the Block RAM
|
36 |
|
|
------------------------
|
37 |
|
|
If you need to recreate the Block RAM core for any reason, the following
|
38 |
|
|
settings will allow you to do it (assuming Xilinx Block Memory Generator
|
39 |
|
|
version 7.1): True Dual Port RAM, Common Clock, Byte Write Enable of 8
|
40 |
|
|
bits, Write/Read width of 32 bits, Write depth of 151552 (for full
|
41 |
|
|
592 KB), Always Enabled, same options for port B, Register Port A Output
|
42 |
|
|
of Memory Primitives AND Memory Core (for 2R version, this can be
|
43 |
|
|
customized), same settings for Port B, fill remaining locations with
|
44 |
|
|
0x00000000, optionally load a .coe file with initial memory contents,
|
45 |
|
|
use RSTA and RSTB. The file 'Boot.coe' provides the simple hello message
|
46 |
|
|
program.
|
47 |
4 |
ayersg |
|
48 |
|
|
FAQ
|
49 |
|
|
---
|
50 |
|
|
|
51 |
|
|
Q: What if I don't have the XUPV5-LX110T board?
|
52 |
|
|
A: If you have the same Virtex 5 FPGA but a different board, all you need
|
53 |
|
|
to do is update the pin locations in the User Constraints File (.ucf)
|
54 |
|
|
and either make sure your clock input is 100 MHz or adjust the PLL
|
55 |
|
|
in the clocking module of the design accordingly. Note that some
|
56 |
|
|
hardware such as the LCD screen or piezo speaker may not be present
|
57 |
|
|
on your board, in which case you should remove them from the design.
|
58 |
|
|
|
59 |
|
|
Q: What if I don't have a Virtex 5 FPGA?
|
60 |
|
|
A: Any FPGA can implement this design if it has enough logic resources.
|
61 |
|
|
There are only two Xilinx-specific modules in the MIPS32 SoC design;
|
62 |
|
|
the clocking module and BRAM module. Replace these with whatever suits
|
63 |
|
|
your hardware. Note however that the MIPS32 memory interface uses
|
64 |
|
|
byte-width write enables to memory (4 bits per 32-bit word), so if you
|
65 |
|
|
use Block Memory or equivalents they must either support this or
|
66 |
|
|
you must fake it somehow. You must also update the UCF.
|
67 |
|
|
|
68 |
|
|
Q: What if I don't have or use the Xilinx development tools?
|
69 |
|
|
A: If you only care about the MIPS32 processor and not the full SoC, start
|
70 |
|
|
with the "Hardware/MIPS32_Standalone" directory which contains only
|
71 |
|
|
Verilog files. The top-most module is "Processor.v". For the full SoC,
|
72 |
|
|
copy the "Hardware/XUPV5-LX110T_SoC/MIPS32-Pipelined-Hw/src" directory
|
73 |
|
|
to whatever development environment you use. This directory contains
|
74 |
|
|
all of the Verilog files with "Top.v" as the head. The "Clocks" and
|
75 |
|
|
"BRAM" directories will need to be customized for your environment,
|
76 |
|
|
as well as the pin constraints.
|
77 |
|
|
|
78 |
|
|
Q: Is there a non-Windows version of the bootloader?
|
79 |
|
|
A: No, but the boot protocol is simple and can be implemented for any OS.
|
80 |
|
|
See "Hardware/XUPV5-LX110T_SoC/MIPS32-Pipelined-Hw/src/UART/
|
81 |
|
|
uart_bootloader_v2.v" for a description of the protocol. If you
|
82 |
|
|
implement another version of the bootloader, please contribute it back
|
83 |
|
|
to the project.
|
84 |
|
|
|