From 22851efc7175b7c00dbaec2e63e98d71f003837e Mon Sep 17 00:00:00 2001 From: Imants Pulkstenis Date: Sun, 23 Feb 2020 23:58:12 +0200 Subject: [PATCH] VHDL Problem set 3 --- README.md | 2 +- ps3/{ps02q => ps03q}/fsm_training_traffic.vhd | 0 ps3/{ps02q => ps03q}/tlc_tb.v | 0 .../traffic_light_controler.v | 25 +++--- .../traffic_light_controler.vhdl | 83 +++++++++++++------ 5 files changed, 70 insertions(+), 40 deletions(-) rename ps3/{ps02q => ps03q}/fsm_training_traffic.vhd (100%) rename ps3/{ps02q => ps03q}/tlc_tb.v (100%) rename ps3/{ps02q => ps03q}/traffic_light_controler.v (92%) rename ps3/{ps02q => ps03q}/traffic_light_controler.vhdl (69%) diff --git a/README.md b/README.md index 658c9d7..6c1157d 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ![GitHub](https://img.shields.io/github/license/clockfix/RTR532?style=plastic) ![GitHub last commit](https://img.shields.io/github/last-commit/clockfix/RTR532?style=plastic) -![GitHub language count](https://img.shields.io/github/languages/count/clockfix/RTR532) +![GitHub language count](https://img.shields.io/github/languages/count/clockfix/RTR532?style=plastic) ![GitHub top language](https://img.shields.io/github/languages/top/clockfix/RTR532?style=plastic) Rīgas Tehniskā Universitāte kurss RTR532 19/20 pavasaris diff --git a/ps3/ps02q/fsm_training_traffic.vhd b/ps3/ps03q/fsm_training_traffic.vhd similarity index 100% rename from ps3/ps02q/fsm_training_traffic.vhd rename to ps3/ps03q/fsm_training_traffic.vhd diff --git a/ps3/ps02q/tlc_tb.v b/ps3/ps03q/tlc_tb.v similarity index 100% rename from ps3/ps02q/tlc_tb.v rename to ps3/ps03q/tlc_tb.v diff --git a/ps3/ps02q/traffic_light_controler.v b/ps3/ps03q/traffic_light_controler.v similarity index 92% rename from ps3/ps02q/traffic_light_controler.v rename to ps3/ps03q/traffic_light_controler.v index 42f2eaa..4eef371 100644 --- a/ps3/ps02q/traffic_light_controler.v +++ b/ps3/ps03q/traffic_light_controler.v @@ -60,15 +60,14 @@ module smart_tl_ctl #( parameter //-------------Internal Constants--------------------------- localparam [2:0] IDLE = 'h0, - MR_GREEN_A = 'h1, - MR_GREEN_B = 'h2, + MR_GREEN_1 = 'h1, + MR_GREEN_2 = 'h2, MR_YELLOW = 'h3, SR_GREEN = 'h4, SR_YELLOW = 'h5; //-------------Internal signals and components-------------- -reg [2:0] r_state = IDLE, - r_next = MR_GREEN_A; +reg [2:0] r_state = IDLE; reg [4:0] r_cnt = 'b0; reg [1:0] r_MR_ctl = 'b0, r_SR_ctl = 'b0; @@ -85,20 +84,20 @@ always@(posedge clk) begin IDLE: begin r_MR_ctl <= 'b00; r_SR_ctl <= 'b00; - r_state <= MR_GREEN_A; + r_state <= MR_GREEN_1; r_cnt <= 'd0; end - MR_GREEN_A: begin + MR_GREEN_1: begin r_MR_ctl <= 'b11; r_SR_ctl <= 'b01; if (r_cnt >= MR_GREEN_TIME) begin if (MR_cars == 0) begin r_cnt <= 0; - r_state <= MR_GREEN_A; + r_state <= MR_GREEN_1; end else if (MR_cars < PARAMETER) begin r_cnt <= 0; - r_state <= MR_GREEN_B; + r_state <= MR_GREEN_2; end else if (MR_cars >= PARAMETER) begin r_cnt <= 0; @@ -106,11 +105,11 @@ always@(posedge clk) begin end end else begin - r_state <= MR_GREEN_A; + r_state <= MR_GREEN_1; r_cnt <= r_cnt + 1; end end - MR_GREEN_B: begin + MR_GREEN_2: begin r_MR_ctl <= 'b11; r_SR_ctl <= 'b01; if (r_cnt >= MR_GREEN_TIME) begin @@ -119,7 +118,7 @@ always@(posedge clk) begin end else begin r_cnt <= r_cnt + 1; - r_state <= MR_GREEN_B; + r_state <= MR_GREEN_2; end end MR_YELLOW: begin @@ -132,7 +131,6 @@ always@(posedge clk) begin else begin r_cnt <= r_cnt + 1; r_state <= MR_YELLOW; - end end SR_GREEN: begin @@ -152,7 +150,7 @@ always@(posedge clk) begin r_SR_ctl <= 'b10; if (r_cnt >= YELLOW_TIME) begin r_cnt = 0; - r_state <= MR_GREEN_A; + r_state <= MR_GREEN_1; end else begin r_cnt <= r_cnt + 1; @@ -164,7 +162,6 @@ always@(posedge clk) begin end else begin r_state <= IDLE; - r_MR_ctl <= 'b00; r_SR_ctl <= 'b00; r_cnt <= 0; diff --git a/ps3/ps02q/traffic_light_controler.vhdl b/ps3/ps03q/traffic_light_controler.vhdl similarity index 69% rename from ps3/ps02q/traffic_light_controler.vhdl rename to ps3/ps03q/traffic_light_controler.vhdl index 3566274..b7fedd4 100644 --- a/ps3/ps02q/traffic_light_controler.vhdl +++ b/ps3/ps03q/traffic_light_controler.vhdl @@ -80,45 +80,78 @@ begin process(clk) begin if rising_edge(clk) then - if rst = '1' then + if rst = '0' then state <= "000"; cnt <= x"00"; else case state is when "000" => -- lights off secs - state <= "001"; cnt <= 0; state <= "001"; - when "001" => -- MR green light 30 secs - if cnt < 5 then - cnt <= cnt + 1; - state <= "001"; - else - cnt <= 0; - state <= "010"; + MR_ctl <= "00"; + SR_ctl <= "00"; + when "001" => -- MR green light 30 ns + MR_ctl <= "11"; + SR_ctl <= "01"; + if cnt >= 30 then + if MR_cars == 0 then + cnt <= 0; + state <= "001"; + else if MR_cars < PARAMETER then + cnt <= 0; + state <= "010"; + else + cnt <= 0; + state <= "011"; + end if; + end if; + else + cnt <= cnt + 1; + state <= "001"; end if; - - when "010" => -- MR green light 30 secs + when "010" => -- MR green light 30 ns + MR_ctl <= "11"; + SR_ctl <= "01"; if cnt < 30 then - cnt <= cnt + 1; - state <= "10"; + cnt <= cnt + 1; + state <= "010"; + else + cnt <= 0; + state <= "011"; + end if; + when "011" => -- MR yellow light 3 ns + MR_ctl <= "10"; + SR_ctl <= "10"; + if cnt < 3 then + cnt <= cnt + 1; + state <= "011"; else - cnt <= 0; - state <= "11"; + cnt <= 0; + state <= "100"; end if; - - when "11" => --yellow light 5 secs - if cnt < 5 then - cnt <= cnt + 1; - state <= "11"; + when "100" => -- SR green light 10 ns + MR_ctl <= "01"; + SR_ctl <= "11"; + if cnt < 10 then + cnt <= cnt + 1; + state <= "100"; else - cnt <= 0; - state <= "00"; - end if; - + cnt <= 0; + state <= "101"; + end if; + when "101" => -- SR yellow light 3 ns + MR_ctl <= "10"; + SR_ctl <= "10"; + if cnt < 3 then + cnt <= cnt + 1; + state <= "101"; + else + cnt <= 0; + state <= "001"; + end if; when others => cnt <= 0; - state <= "00"; + state <= "000"; end case; end if;