- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
How do i create delay for the output in the waveform?
Currently i'm having half a cycle delay, i want to increase it to 1 cycle. (i have circled the area in the picture attatched) And also, how do i make the period of the output to be 3 times the size of 1 clock period? (i have also attatched the expected outcome) This is what i have till now... library ieee; use ieee.std_logic_1164.all; -------------------------------------------------------- ENTITY traffic_light IS PORT(sensor : IN std_logic; clock : IN std_logic; red_light : OUT std_logic; green_light : OUT std_logic; yellow_light : OUT std_logic); END traffic_light; ARCHITECTURE simple OF traffic_light IS TYPE t_state is (red, green, yellow); SIGNAL present_state, next_state : t_state; BEGIN PROCESS(present_state, sensor) BEGIN CASE present_state IS WHEN green => next_state <= yellow; red_light <= '0'; green_light <= '1'; yellow_light <= '0'; WHEN red => red_light <= '1'; green_light <= '0'; yellow_light <= '0'; IF (sensor = '1') THEN next_state <= green; ELSE next_state <= red; END IF; WHEN yellow => red_light <= '0'; green_light <= '0'; yellow_light <= '1'; next_state <= red; END CASE; END PROCESS; PROCESS BEGIN WAIT UNTIL clock'EVENT and clock = '1'; present_state <= next_state; END PROCESS; END simple; Please help!!Link Copied
4 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Usually, the way to extend signals is to add counters, and then inside the state machine wait till that counter gets to the correct value.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
--- Quote Start --- Usually, the way to extend signals is to add counters, and then inside the state machine wait till that counter gets to the correct value. --- Quote End --- So does that mean i have to add counter to extend the output delay? and also the period of the output waveform? i'm sorry don't quite get what u mean... :confused:
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Yes add a counter, then in your state machine do something like this:
WHEN red =>
red_light <= '1';
green_light <= '0';
yellow_light <= '0';
IF (sensor = '1') and counter = 3 THEN
next_state <= green;
ELSE
next_state <= red;
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
i guess i need to declare the "counter" at the top right? thanks i'll try it out
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page