Bird
Raised Fist0
VHDLprogramming~10 mins

Pure vs impure functions in VHDL - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to declare a pure function in VHDL.

VHDL
function add(a : integer; b : integer) return integer is
begin
  return a + b;
end [1];
Drag options to blanks, or click blank then click option'
Aimpure
Bpure
Cprocedure
Dpackage
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'impure' keyword for a function without side effects.
Confusing 'procedure' with 'function'.
2fill in blank
medium

Complete the code to declare an impure function in VHDL.

VHDL
impure function get_random return integer is
begin
  -- returns a random number
  return integer'image(integer(now)); -- dummy example
end [1];
Drag options to blanks, or click blank then click option'
Apure
Bsignal
Cconstant
Dimpure
Attempts:
3 left
💡 Hint
Common Mistakes
Declaring impure functions as pure.
Using 'constant' or 'signal' keywords incorrectly.
3fill in blank
hard

Fix the error in the function declaration to make it pure.

VHDL
pure function multiply(a : integer; b : integer) return integer is
begin
  return a * b;
end [1];
Drag options to blanks, or click blank then click option'
Apure
Bimpure
Cprocedure
Dfunction
Attempts:
3 left
💡 Hint
Common Mistakes
Leaving 'impure' keyword for side-effect-free functions.
Confusing 'procedure' with 'function'.
4fill in blank
hard

Fill both blanks to complete a pure function that calculates the square of a number.

VHDL
pure function square(x : integer) return integer is
begin
  return x [1] x;
end [2];
Drag options to blanks, or click blank then click option'
A*
B+
Cpure
Dimpure
Attempts:
3 left
💡 Hint
Common Mistakes
Using '+' instead of '*' for multiplication.
Declaring the function as impure unnecessarily.
5fill in blank
hard

Fill all three blanks to complete an impure function that returns the current simulation time as an integer.

VHDL
impure function get_time return integer is
begin
  return [1].[2]([3]);
end impure;
Drag options to blanks, or click blank then click option'
Anow
Binteger'image
Dtime'image
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'time'image' which is invalid.
Not using 'now' to get current simulation time.

Practice

(1/5)
1. Which statement best describes a pure function in VHDL?
easy
A. It always returns the same output for the same inputs and does not modify any external signals.
B. It can modify signals outside its scope and may return different outputs for the same inputs.
C. It only reads external signals but does not modify them.
D. It is a function that uses variables inside a process.

Solution

  1. Step 1: Understand pure function behavior

    A pure function in VHDL must always return the same result for the same inputs and cannot change any external signals or variables.
  2. Step 2: Compare options with definition

    It always returns the same output for the same inputs and does not modify any external signals. matches this definition exactly, while others describe impure or unrelated behaviors.
  3. Final Answer:

    It always returns the same output for the same inputs and does not modify any external signals. -> Option A
  4. Quick Check:

    Pure function = consistent output, no side effects [OK]
Hint: Pure means no side effects and consistent output [OK]
Common Mistakes:
  • Confusing pure with impure functions
  • Thinking pure functions can modify signals
  • Assuming pure functions can read external signals
2. Which of the following is the correct way to declare a pure function in VHDL?
easy
A. procedure add(a: in integer; b: in integer);
B. function add(a: integer; b: integer) return integer is pure;
C. function add(a: integer; b: integer) return integer is impure;
D. function add(a: integer; b: integer) return integer;

Solution

  1. Step 1: Recall VHDL function declaration syntax

    In VHDL, to declare a pure function explicitly, you add the keyword pure after the function signature.
  2. Step 2: Identify correct syntax

    function add(a: integer; b: integer) return integer is pure; correctly uses is pure; to declare a pure function. The procedure declaration is not a function, function add(a: integer; b: integer) return integer is impure; declares an impure function, and function add(a: integer; b: integer) return integer; lacks purity specification.
  3. Final Answer:

    function add(a: integer; b: integer) return integer is pure; -> Option B
  4. Quick Check:

    Pure function declaration includes 'is pure;' [OK]
Hint: Pure functions use 'is pure;' in declaration [OK]
Common Mistakes:
  • Omitting 'pure' keyword for pure functions
  • Confusing procedures with functions
  • Using 'impure' when pure is needed
3. Consider this VHDL function:
function get_value(x: integer) return integer is
  variable count: integer := 0;
begin
  count := count + 1;
  return x + count;
end function;

What is true about this function?
medium
A. It is impure because it uses a variable that changes each call.
B. It is impure because it modifies an external signal.
C. It is impure because it uses variables inside a function.
D. It is a pure function because it returns a value based on input only.

Solution

  1. Step 1: Analyze variable usage inside function

    The local variable count is initialized to 0 each time the function is called, incremented to 1, and x + count always returns x + 1 for the same x.
  2. Step 2: Determine purity based on output consistency

    Same inputs always produce the same output with no external modifications, making it pure. The claim about a changing variable ignores reinitialization, using variables inside is allowed, and there are no external signals.
  3. Final Answer:

    It is a pure function because it returns a value based on input only. -> Option D
  4. Quick Check:

    Local variables reinitialized each call = pure [OK]
Hint: Local variables reset each call, pure function [OK]
Common Mistakes:
  • Thinking local variables make function impure
  • Confusing external signals with local variables
  • Believing the function output changes across calls
4. This VHDL function is intended to be pure:
function multiply(a: integer; b: integer) return integer is pure;
begin
  result := a * b;
  return result;
end function;

What is the error in this code?
medium
A. The function cannot have parameters.
B. The function should be declared impure because it modifies result.
C. The function uses an undeclared variable result.
D. The function lacks a return statement.

Solution

  1. Step 1: Check variable declarations inside function

    The function uses result without declaring it as a variable or signal inside the function.
  2. Step 2: Understand VHDL variable scope rules

    All variables must be declared before use. Since result is undeclared, this causes a compilation error.
  3. Final Answer:

    The function uses an undeclared variable result. -> Option C
  4. Quick Check:

    All variables must be declared before use [OK]
Hint: Declare all variables before using them [OK]
Common Mistakes:
  • Assuming implicit variable declaration
  • Confusing pure/impure with variable declaration errors
  • Ignoring missing return statements
5. You want to create a function in VHDL that returns the current value of a global signal clk_count and increments it each call. Which is true about this function?
hard
A. It must be declared impure because it reads and modifies external signals.
B. It can be pure if it only returns the value without incrementing.
C. It can be pure if it uses a local variable to track increments.
D. It must be a procedure, not a function.

Solution

  1. Step 1: Understand function interaction with external signals

    Reading and modifying a global signal clk_count means the function has side effects and depends on external state.
  2. Step 2: Determine purity based on side effects

    Because the function changes external data, it cannot be pure and must be declared impure.
  3. Final Answer:

    It must be declared impure because it reads and modifies external signals. -> Option A
  4. Quick Check:

    Modifying external signals means impure function [OK]
Hint: Modifying external signals requires impure functions [OK]
Common Mistakes:
  • Thinking local variables can replace external signal changes
  • Assuming functions can modify signals without impure keyword
  • Confusing functions with procedures for side effects
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard