CTF/0ctf/EzLogic/readme.md

51 lines
2.5 KiB
Markdown

# EzLogic
## Problem
Our task is to reverse engineer a flag checker implemented on an **FPGA**.The hardware system is constructed from a **netlist** synthesized by Xilinx Vivado, where the netlist serves a role similar to assembly language in the software domain, representing a lower-level, more hardware-specific description. The netlist is described using **Verilog**, enabling convenient simulation of the system.
## Knowledge
If you find yourself new to Verilog or digital integrated circuit design, that's completely fine. We're here to help with a recommended Verilog syntax tutorial and an official manual covering all the foundational components used in the netlist.
- Verilog Syntax: https://www.chipverify.com/tutorials/verilog
- FPGA Design Elements: https://docs.amd.com/r/en-US/ug953-vivado-7series-libraries/Design-Elements
## Simulation
For system simulation, you can choose one of the following tools:
- [Xilinx Vivado](https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/vivado-design-tools.html) (free version is enough)
- [Icarus Verilog](https://github.com/steveicarus/iverilog) and [gtkwave](http://gtkwave.sourceforge.net/) (open-source software)
### Using Vivado
1. Install Vivado HL WebPACK version (must select Zynq 7000 series boards support)
2. Create a project (just click "next" to the end, nothing is needed to configure)
3. In "sources" window, add the Verilog files (*.v) to **simulation sources**
4. Run simulation (run until stops)
5. Watch the value of signal `success` or check the output message in "Tcl Console"
### Using Icarus Verilog
1. Installing iverilog and gtkwave
```
sudo apt-get install iverilog gtkwave
```
2. Compilation
Note: Zynq 7000 FPGA primitives (FDCE, LUT, ...) are not supported by iverilog, so behavioral models for these components are provided for simulation purposes.
```
iverilog -s EzLogic_tb -o EzLogic.vvp ./problem/EzLogic_top_synth.v ./problem/EzLogic_tb.v ./behavioral\ models/*.v
```
If successful, you can see `EzLogic.vvp` file in the folder.
3. Running the Simulation
```
vvp EzLogic.vvp
```
The results of the check are printed on the terminal.
4. Viewing in Graph Form
If you want to check internal signals, just use gtkwave.
```
gtkwave EzLogic.vcd
```
## Hints
- A schematic printout is included in `schematic` folder, which can greatly assist you in understanding the data pathways and program logic. (Only for EzLogic)
- Variable names are auto-generated by Vivado Synthesizer and don't necessarily mean anything; don't be confused by the names.