Conditional assignment lets you choose a value based on a condition in a simple way. It helps decide what signal should be set depending on some test.
Conditional assignment (when-else) in VHDL
signal_name <= value1 when condition else value2;The condition is a boolean expression that decides which value to assign.
The value before when is assigned if the condition is true; otherwise, the value after else is assigned.
output if input is '1', else assigns '0'.output <= '1' when input = '1' else '0';
sel is '0', result gets a, otherwise b.result <= a when sel = '0' else b;
flag to 'T' if count is greater than 10, else 'F'.flag <= 'T' when count > 10 else 'F';
This program assigns result to a if sel is '0'. Otherwise, it assigns b. It shows how to use conditional assignment with when-else.
library ieee; use ieee.std_logic_1164.all; entity conditional_example is port( sel : in std_logic; a, b : in std_logic_vector(3 downto 0); result : out std_logic_vector(3 downto 0) ); end conditional_example; architecture Behavioral of conditional_example is begin -- Assign result based on sel result <= a when sel = '0' else b; end Behavioral;
Conditional assignment is a concurrent statement, so it runs continuously in hardware.
You can chain multiple when-else statements for more conditions, but readability may suffer.
Use this for simple two-choice assignments to keep code clean and easy to read.
Conditional assignment chooses between two values based on a condition.
It uses the syntax: signal <= value1 when condition else value2;
This is useful for simple, clear signal assignments in VHDL.
Practice
when-else statement do?Solution
Step 1: Understand the purpose of when-else
The when-else statement is used to assign values conditionally to signals in VHDL.Step 2: Compare with other options
Loops, signal declarations, and process blocks serve different purposes unrelated to conditional assignment.Final Answer:
Assigns a value to a signal based on a condition -> Option AQuick Check:
when-else = conditional assignment [OK]
- Confusing when-else with loops
- Thinking it declares signals
- Mixing it with process blocks
when-else in VHDL?Solution
Step 1: Recall VHDL assignment operator
In VHDL, signal assignment uses the '<=' operator, not ':=' or '='.Step 2: Check the full syntax
The correct syntax is: signal_name <= value1 when condition else value2;Final Answer:
signal_name <= value1 when condition else value2; -> Option BQuick Check:
Use '<=' for signal assignment with when-else [OK]
- Using ':=' instead of '<=' for signals
- Using '=' which is for variables
- Confusing arrow operators
signal out_signal : std_logic; out_signal <= '1' when input_signal = '1' else '0';
What will be the value of
out_signal if input_signal is '0'?Solution
Step 1: Analyze the condition
The assignment says out_signal is '1' when input_signal = '1', else '0'.Step 2: Apply input value
Since input_signal is '0', the condition is false, so out_signal gets '0'.Final Answer:
'0' -> Option AQuick Check:
Condition false -> else value '0' assigned [OK]
- Assigning '1' when input is '0'
- Confusing high impedance 'Z' with '0'
- Thinking output is undefined
signal result : std_logic; result <= '1' when input = 1 else '0';
Solution
Step 1: Check the condition type
The input signal is likely std_logic, so it should be compared to a character like '1', not integer 1.Step 2: Identify correct comparison
Correct comparison is input = '1' (with single quotes) for std_logic.Final Answer:
Input comparison uses integer instead of character -> Option DQuick Check:
Compare std_logic with character '1' not integer 1 [OK]
- Comparing std_logic to integer without quotes
- Confusing assignment operators
- Assuming signal names are restricted
y based on a 2-bit input sel using conditional assignment. If sel is "00", assign "0001"; if "01", assign "0010"; else assign "0000". Which is the correct VHDL code?Solution
Step 1: Recall syntax for multiple conditions
In VHDL, chain conditional assignments as: value1 when cond1 else value2 when cond2 else value3. No parentheses needed.Step 2: Compare options
y <= "0001" when sel = "00" else "0010" when sel = "01" else "0000"; matches the correct chained syntax.Final Answer:
y <= "0001" when sel = "00" else "0010" when sel = "01" else "0000"; -> Option CQuick Check:
Chained when-else without parentheses [OK]
- Using := for signal assignment
- Adding unnecessary parentheses around conditions
- Using single quotes for std_logic_vector literals
Ready to prove it?
Pass the test and this pattern moves unknown
