This shows you the differences between two versions of the page.
ac-is:teme-ie:proiect [2023/12/13 21:36] ionut.pascal [Grading] |
ac-is:teme-ie:proiect [2024/01/07 18:47] (current) ionut.pascal old revision restored (2023/12/13 23:58) |
||
---|---|---|---|
Line 4: | Line 4: | ||
* Hard Deadline: **28.12.2023**, **23:59** | * Hard Deadline: **28.12.2023**, **23:59** | ||
* Publish date: **13.12.2023** | * Publish date: **13.12.2023** | ||
- | * Last update: **13.12.2023, 22:00** | + | * Last update: **13.12.2023, 23:50** |
* History: | * History: | ||
- | * 13.12.2023, 22:00 | + | * 13.12.2023, 23:50 |
* Publish the assignment | * Publish the assignment | ||
Line 18: | Line 18: | ||
===== Description and requirements ===== | ===== Description and requirements ===== | ||
+ | Floating point has a long history in the engineering field and in computer science. The promoter was Leonardo Torres Quevedo back in 1914; nowadays, we use IEEE754 Standard Implementation. [[https://en.wikipedia.org/wiki/Floating-point_arithmetic|Wiki]] | ||
+ | The assignment consists in implementing a floating point multiplication algorithm for 2 numbers with the following format (S_EEEE_MMMMMMM): | ||
+ | * 1 sign bit - S | ||
+ | * 4 exponent bits - E | ||
+ | * 7 mantissa bits - M | ||
+ | The implementation can follow the proposed state machine: | ||
+ | {{ :ac-is:teme-ie:untitled_diagram.jpg?nolink |}} | ||
+ | Because we encounter a multiplication of fixed point (mantissa), we should implement a dedicated module responsible for this operation. The Booth algorithm is a suitable option which reduces the complexity but keeps a good understanding behind. The size of the operands is dependent on the size of the mantissa. | ||
+ | |||
+ | Requirements: | ||
+ | - Implement Booth algorithm in the dedicated file for 2 8bit operands: | ||
+ | - Take 2 random 8bit numbers of your choice and demonstrate the algorithm on the paper; | ||
+ | - Implement the Verilog code. | ||
+ | - Implement the floating point multiplication algorithm: | ||
+ | - Take 2 random 12bit numbers of your choice which respects the floating point format and demonstrate the multiplication on the paper; | ||
+ | - Implement the Verilog code. | ||
+ | |||
+ | <note important>Don't forget to follow the TODO's inside the code and check for the errors and messages in the console! Checking is implemented inside the testcase!</note> | ||
+ | |||
===== Implementation ===== | ===== Implementation ===== | ||
Line 81: | Line 100: | ||
===== Notes ===== | ===== Notes ===== | ||
- | * For the floating point implementation, the behavior of the register is the one studied in the lab. | + | * For the floating point implementation, the behavior of the register is the one studied in the [[ac-is:lab-ie:lab02#The Register|lab]]. |
* You can modify the state machine as you like, as long as it respects the requirements. | * You can modify the state machine as you like, as long as it respects the requirements. | ||
+ | * For VIVADO, the top module for simulation is the booth test; when implementing the floating point multiplication, don't forget to change the test | ||
Line 95: | Line 115: | ||
* general presentation of your solution; | * general presentation of your solution; | ||
* description of any complex coding parts that you consider additional explanation is needed and they are too long to be an inline comment; | * description of any complex coding parts that you consider additional explanation is needed and they are too long to be an inline comment; | ||
+ | * Pictures/Scans of your paper demonstrations. | ||
* The archive shall __**not**__ contain any other files from the implementation folder (i.e. test files, project specific files, etc). | * The archive shall __**not**__ contain any other files from the implementation folder (i.e. test files, project specific files, etc). | ||
Line 111: | Line 132: | ||
* -10.0 pts.: using looping instructions with variable steps (i.e. while x > 0); | * -10.0 pts.: using looping instructions with variable steps (i.e. while x > 0); | ||
* -6.0 pts.: using * operator in the booth_mul implementation; | * -6.0 pts.: using * operator in the booth_mul implementation; | ||
- | * -2.0 pts.: not using the ''booth_mul'' module for implementing the FSM | + | * -1.0 pts.: not using the ''booth_mul'' module for implementing the FSM |
* -1.0 pts.: the absence of the README file; | * -1.0 pts.: the absence of the README file; | ||
* -1.0 pts.: bad coding style (chaotic indentation, irregular spacing, strange naming for variables, etc.); | * -1.0 pts.: bad coding style (chaotic indentation, irregular spacing, strange naming for variables, etc.); | ||
Line 130: | Line 151: | ||
* **Booth Multiplication Another Example** - [[https://www.javatpoint.com/booths-multiplication-algorithm-in-coa|Click]] | * **Booth Multiplication Another Example** - [[https://www.javatpoint.com/booths-multiplication-algorithm-in-coa|Click]] | ||
- | ===== Anexă ===== | + | ===== Appendix ===== |