FPGA Based Processor Design
Field Programmable Gate Array (FPGA) is a versatile platform for digital design. Processor designing can be conveniently implemented in FPGA and this fact is exploited in the task of implementing a fully automated custom processor in order to down-sample a 256 by 256 image by a factor of 2. This report comprises of Algorithms, Instruction Set Architecture (ISA) and other supplementary resources that were utilized during the designing procedure. Altera Cyclone IV FPGA was used in the implementation and Quartus v17.1 (coding in verilog HDL), MATLAB R2014a and Python Scripts were used
as software packages.

A simplified architecture of a CPU is illustrated above. Central processing unit is the electronic circuitry that performs the instructions of a computer program by performing the basic control, arithmetic, logical and input/output (I/O) operations by the instructions. A microprocessor is a computer processor which incorporates the functions of a computer’s central processing unit (CPU) on a single integrated circuit (IC), or at most a few integrated circuits. The microprocessor is a multipurpose. It is driven by a stores data in registers. Digital input data is fed in the form of binary and processed according to the given instructions; results in the output. These microprocessors comprises of both sequential digital logic and combinational logic. All instructions (numbers and symbols)are converted into binary system in this microprocessors. Microprocessors are vital in the modern day electronic devices. Therefore is it of huge importance to design and implement a successful processor. In this project we are to design such processor which can down sample a given image. High accuracy and speed is the main concern in the implementation.
Methodology
1. Designing the algorithm
2. Simulating the algorithm in MATLAB/Python
3. Determining the Processor Specifications according to the algorithm (Number of Registers, Memory Requirements, Bus Sizes etc)
4. Designing the ISA (What are the instruction building blocks?, What are the micro instructions?, Instruction ROM Allocations, Data-Path, Control LUT etc)
5. Translating the algorithm in to a assembly code using the instructions defined in the above step
6. Testing and Verifying the algorithm using a virtual processor in. MATLAB/Python
7. Implement the modules in Verilog
8. Implement the design on hardware
9. Test and verify the results