Project 2: Verilog Behavioral Modeling (10%) : 1. Purpose
Project 2: Verilog Behavioral Modeling (10%) : 1. Purpose
1. Purpose
The purpose of this assignment is to learn the rudiments of the Verilog hardware description lan-
guage in the context of sequential circuits: you are going to build a simple state machine. Some of
the most important concepts you will learn are those of non-blocking assignments and concur-
rency. Non-blocking assignments are specific to the Verilog language; concurrency is a powerful
concept that shows up at all levels of digital circuit and digital system design. Your example will
be a simple finite state machine that produces the nth Fibonacci number given n as an input.
1
ENEE 359a: Digital VLSI Design — Project 2: Verilog Behavioral Modeling (10%)
Additional details:
1. Your Fibonacci state machine must calculate the nth Fibonacci number. Using a ROM with
stored Fibonacci numbers, or a state machine with approximately 23 states, or similar
approach is not permitted.
2. A couple of software-oriented approaches to stay away from since they are not synthesizable
(you will later synthesize your design): There is no hardware analog to the Verilog initial
block construct. The loop limit for a for loop or a while loop cannot be variable. In general,
functions are synthesizable, but recursion is not synthesizable.
3. Some of the main hardware of a typical fibonacci calculator design include a controller (state
machine), two registers to hold the (n-1) and (n-2) fibonacci numbers, an adder, and a counter
to count up to the input_number.
4. The only type of register permitted in the design is rising-edge-triggered.
5. In a clocked always block you should use the nonblocking assignment operator, <=, when
assigning to a signal that is synthesized as a register.