Concept Flow - Register (multi-bit) design
Input Data (multi-bit)
Clock Edge Detected?
No→Wait
Yes
Store Input in Register
Output Register Value
The register waits for a clock edge, then stores the multi-bit input data and outputs the stored value.
process(clk) begin if rising_edge(clk) then reg <= data_in; end if; end process;
| Step | clk | rising_edge(clk)? | data_in | reg (before) | Action | reg (after) |
|---|---|---|---|---|---|---|
| 1 | 0 | No | 1010 | 0000 | No store | 0000 |
| 2 | 1 | Yes | 1010 | 0000 | Store data_in | 1010 |
| 3 | 1 | No | 1100 | 1010 | No store | 1010 |
| 4 | 0 | No | 1100 | 1010 | No store | 1010 |
| 5 | 1 | Yes | 1100 | 1010 | Store data_in | 1100 |
| Variable | Start | After 1 | After 2 | After 3 | After 4 | After 5 |
|---|---|---|---|---|---|---|
| clk | 0 | 1 | 1 | 1 | 0 | 1 |
| data_in | 1010 | 1010 | 1100 | 1100 | 1100 | 1100 |
| reg | 0000 | 0000 | 1010 | 1010 | 1010 | 1100 |
VHDL multi-bit register stores input data on rising clock edge. Syntax: process(clk) begin if rising_edge(clk) then reg <= data_in; end if; end process; Register updates only on clock rising edge. Data input changes alone do not update register. Output is stored value until next clock edge.
reg?process(clk, reset)
begin
if reset = '1' then
reg <= "000";
elsif rising_edge(clk) then
reg <= data_in;
end if;
end process;reset is '0', clk rises, and data_in is "101", what will be the value of reg after the clock edge?process(clk)
begin
if rising_edge(clk) then
if reset = '1' then
reg <= "00";
else
reg <= data_in;
end if;
end if;
end process;Pass the test and this pattern moves unknown