Update user_proj_example.v
diff --git a/verilog/rtl/user_proj_example.v b/verilog/rtl/user_proj_example.v
index 26081e9..5ca3035 100644
--- a/verilog/rtl/user_proj_example.v
+++ b/verilog/rtl/user_proj_example.v
@@ -69,6 +69,16 @@
output [2:0] irq
);
wire clk;
+ wire rst_n;
+ wire [2:0] light_highway;
+ wire [2:0] light_farm;
+ wire C;
+
+ wire [`MPRJ_IO_PADS-1:0] io_in;
+ wire [`MPRJ_IO_PADS-1:0] io_out;
+ wire [`MPRJ_IO_PADS-1:0] io_oeb;
+
+ /*wire clk;
wire rst;
wire [`MPRJ_IO_PADS-1:0] io_in;
@@ -87,17 +97,21 @@
assign valid = wbs_cyc_i && wbs_stb_i;
assign wstrb = wbs_sel_i & {4{wbs_we_i}};
assign wbs_dat_o = rdata;
- assign wdata = wbs_dat_i;
+ assign wdata = wbs_dat_i;*/
// IO
- assign io_out = count;
- assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
+ assign io_out[35:33] = light_highway;
+ assign io_out[32:30] = light_farm;
+ assign io_oeb = 0;
+ assign {clk,rst_n,C} = io_in[`MPRJ_IO_PADS-9:`MPRJ_IO_PADS-7];
+ //assign io_out = count;
+ //assign io_oeb = {(`MPRJ_IO_PADS-1){rst}};
// IRQ
assign irq = 3'b000; // Unused
// LA
- assign la_data_out = {{(127-BITS){1'b0}}, count};
+ /* assign la_data_out = {{(127-BITS){1'b0}}, count};
// Assuming LA probes [63:32] are for controlling the count register
assign la_write = ~la_oenb[63:32] & ~{BITS{valid}};
// Assuming LA probes [65:64] are for controlling the count clk & reset
@@ -117,11 +131,94 @@
.la_write(la_write),
.la_input(la_data_in[63:32]),
.count(count)
- );
+ );*/
+
+ iiitb_tlc dut(light_highway, light_farm, C, clk, rst_n);
+
+endmodule
+
+module iiitb_tlc(light_highway, light_farm, C, clk, rst_n);
+
+ parameter HGRE_FRED = 2'b00, // Highway green and farm red
+ HYEL_FRED = 2'b01,// Highway yellow and farm red
+ HRED_FGRE = 2'b10,// Highway red and farm green
+ HRED_FYEL = 2'b11;// Highway red and farm yellow
+ input C, // sensor
+ clk, // clock = 50 MHz
+ rst_n; // reset active low
+
+ output reg[2:0] light_highway, light_farm; // output of lights
+ reg[1:0] RED_count_en, YELLOW_count_en1, YELLOW_count_en2;
+ reg[1:0] state, next_state;
+ integer i;
+// next state
+ always @(posedge clk or negedge rst_n)
+ begin
+ if(~rst_n)
+ begin
+ RED_count_en<=0;YELLOW_count_en1<=0;YELLOW_count_en2<=0;
+ state <= 2'b00;
+ end
+ else
+ state <= next_state;
+ end
+// FSM
+ always @(*)
+ begin
+ case(state)
+ HGRE_FRED:
+ begin // Green on highway and red on farm way
+
+ RED_count_en <= 2'b01;
+ YELLOW_count_en1 <= 2'b00;
+ YELLOW_count_en2 <= 2'b00;
+ light_highway <= 3'b001;
+ light_farm <= 3'b100;
+ if(C) next_state <= HYEL_FRED;
+ // if sensor detects vehicles on farm road,
+
+ else next_state <= HGRE_FRED;
+ end
+ HYEL_FRED:
+ begin// yellow on highway and red on farm way
+
+ RED_count_en <= 2'b00;
+ YELLOW_count_en1 <= 2'b01;
+ YELLOW_count_en2 <= 2'b00;
+ light_highway <= 3'b010;
+ light_farm <= 3'b100;
+ next_state <= HRED_FGRE;
+
+ end
+ HRED_FGRE:
+ begin// red on highway and green on farm way
+
+ RED_count_en <= 2'b01;
+ YELLOW_count_en1 <= 2'b00;
+ YELLOW_count_en2 <= 2'b00;
+ light_highway <= 3'b100;
+ light_farm <= 3'b001;
+ next_state <= HRED_FYEL;
+
+ end
+ HRED_FYEL:
+ begin// red on highway and yellow on farm way
+
+ RED_count_en <= 2'b00;
+ YELLOW_count_en1 <= 2'b00;
+ YELLOW_count_en2 <= 2'b01;
+ light_highway <= 3'b100;
+ light_farm <= 3'b010;
+ next_state <= HGRE_FRED;
+
+ end
+ default: next_state <= HGRE_FRED;
+ endcase
+ end
endmodule
-module counter #(
+/*module counter #(
parameter BITS = 32
)(
input clk,
@@ -161,5 +258,6 @@
end
end
-endmodule
+endmodule*/
+
`default_nettype wire