diff --git a/behavioural/ahb_out.sv b/behavioural/ahb_out.sv
index fbe74259e5cfe8b17d5cd4763df1733bd80f20f5..626ba18eeb14bd5c0e256d3a4948413f3920289f 100644
--- a/behavioural/ahb_out.sv
+++ b/behavioural/ahb_out.sv
@@ -46,7 +46,7 @@ module ahb_out(
   output HREADYOUT,
 
   //Non-AHB Signals
-  output logic [8:0] x1, x2, y1, y2
+  output logic [8:0] x1, x2, y1, y2, x3, y3
 );
 
 timeunit 1ns;
@@ -57,7 +57,7 @@ timeprecision 100ps;
 
   //control signals are stored in registers
   logic write_enable, read_enable;
-  logic [1:0] word_address  ;
+  logic [2:0] word_address  ;
 
  
   logic NextDataValid;
@@ -76,7 +76,7 @@ timeprecision 100ps;
       begin
         write_enable <= HWRITE;
         read_enable <= ! HWRITE;
-        word_address <= HADDR[3:2];
+        word_address <= HADDR[4:2];
 
      end
     else
@@ -94,8 +94,10 @@ timeprecision 100ps;
       begin
         x1 <= '0;
     		x2 <= '0;
+        x3 <= '0;
     		y1 <= '0;
     		y2 <= '0;
+        y3 <= '0;
 
       end
     // x1 write     
@@ -114,6 +116,16 @@ timeprecision 100ps;
     else if ( write_enable && (word_address==3))
       y2 <= HWDATA[15:0];
 
+    // x3 write     
+    else if ( write_enable && (word_address==4))
+      x3 <= HWDATA[15:0];
+
+    // y3 write     
+    else if ( write_enable && (word_address==5))
+      y3 <= HWDATA[15:0];
+
+      
+
 
   //read
   always_comb
@@ -127,7 +139,9 @@ timeprecision 100ps;
         0 : HRDATA = { 23'd0, x1 };
         1 : HRDATA = { 23'd0, y1 };
         2 : HRDATA = { 23'd0, x2 };
-        3 : HRDATA = { 23'd0, y2 };                
+        3 : HRDATA = { 23'd0, y2 };   
+        4 : HRDATA = { 23'd0, x3 };
+        5 : HRDATA = { 23'd0, y3 };                        
         // unused address - returns zero
         default : HRDATA = '0;
       endcase
diff --git a/behavioural/razzle.sv b/behavioural/razzle.sv
index 03ab0d5951b31562ee1f466d016213407a125af3..a3391fca83e476dd6d8a26c0fbddcaa9e48f76c6 100644
--- a/behavioural/razzle.sv
+++ b/behavioural/razzle.sv
@@ -1,31 +1,142 @@
-module razzle (
+// Description:
+// This code generates a VGA output for ARM SoC based 
+// on razzle code modified by Iain Mcnally <ECS, University of Soutampton>
+// Maintainer: Karthik Sathyanarayanan <ks6n19@soton.ac.uk>
+// Revision : $Revision$
 
-        input logic CLOCK_50,
-        input logic [3:0] KEY,
-        input logic [10:0] x1, x2, y1, y2,
-        output logic [9:0] LEDR ;
-)
+ 
+module razzle ( 
+ 
+	input logic CLOCK_50, 
+	input logic [3:0] KEY,
+	input logic  pixel,
+    	output logic [7:0] VGA_R,VGA_G,VGA_B, 
+	output logic [9:0] pixel_x,
+	output logic [8:0] pixel_y ,
+    	output logic VGA_HS,VGA_VS, VGA_CLK, VGA_BLANK_N); 
+       		 
+// Video Display Signals    
+logic [10:0] H_count,V_count; 
+
+logic video_on, video_on_H, video_on_V, clock_enable; 
+
+timeunit 1ns;
+timeprecision 100ps;
+
+// Map internal signals to external busses
 
 logic nReset;
-logic [9:0] L1_detT ;
-logic [9:0] L2_detT ;
-logic [9:0] detT ;
-logic [9:0] L1_positive;
-logic [9:0] L2_positive,
-logic [9:0] L3_positive ;
+logic Red,Green,Blue; 
 
 assign nReset=KEY[2]; // Keys are active low?
 
-always_comb
+assign VGA_R = Red ? 255 : 0;
+assign VGA_G = Green ? 255 : 0;
+assign VGA_B = Blue ? 255 : 0;
+
+assign VGA_CLK = clock_enable;
+assign VGA_BLANK_N = video_on;
+
+
+// Colors for pixel data on video signal 
+//assign Red_Data = 0 ; 
+assign Green_Data = 0; 
+assign Blue_Data = 0; 
+
+// turn off color (black) at screen edges and during retrace with video_on 
+assign Red =   pixel && video_on; 
+assign Green = Green_Data && video_on; 
+assign Blue =  Blue_Data && video_on; 
+
+// video_on turns off pixel color data when not in the pixel view area 
+assign video_on = video_on_H && video_on_V; 
+
+assign pixel_x =video_on_H ? H_count : '0 ;
+assign pixel_y = video_on_V ? V_count : '0 ;
+
+    
+// Generate Horizontal and Vertical Timing Signals for Video Signal 
+//VIDEO_DISPLAY 
+
+always @(posedge CLOCK_50, negedge nReset)
+  if ( ! nReset) 
+    begin
+		clock_enable = 0; 
+		H_count = 0; 
+		V_count = 0; 
+		video_on_H = 0; 
+		video_on_V = 0; 
+    end
+	
+	else
+	
+	begin : VIDEO_DISPLAY
+	    // Clock enable used for a 24Mhz video clock rate 
+	    // 640 by 480 display mode needs close to a 25Mhz pixel clock 
+	    // 24Mhz should work on most new monitors 
+
+	    clock_enable = ! clock_enable; 
+
+	    // H_count counts pixels (640 + extra time for sync signals) 
+	    // 
+	    //   <-Clock out RGB Pixel Row Data ->   <-H Sync-> 
+	    //   ------------------------------------__________-------- 
+	    //   0                           640   659       755    799 
+	    // 
 
-          L1_detT   =   ((y2-y3) *  (x-x3)) + ((x3-x2) *  (y-y3)) ;
-          L2_detT   =   ((y3-y1) *  (x-x3)) + ((x1-x3) *  (y-y3)) ;
-          detT      =   ((y2-y3) * (x1-x3)) + ((x3-x2) * (y1-y3)) ;
-          L1_positive = ((L1_detT >= 0) == (detT >= 0)) ;
-          L2_positive = ((L2_detT >= 0) == (detT >= 0)) ;
-          L3_positive = (((L1_detT + L2_detT) <= detT) == (detT >= 0)) ;
-          if(L1_positive && L2_positive && L3_positive)
-                write_pix(x,y,1);
+	      if ( clock_enable )
+	      begin
 
 
+		      if (H_count >= 799)
+			      H_count = 0; 
+		      else 
+			      H_count = H_count + 1; 
+
+		// Generate Horizontal Sync Signal 
+
+		      if ((H_count <= 755) && (H_count >= 659))
+	                      VGA_HS = 0; 
+		      else 
+	                      VGA_HS = 1; 
+
+		// V_count counts rows of pixels (480 + extra time for sync signals) 
+		// 
+		//  <---- 480 Horizontal Syncs (pixel rows) -->  ->V Sync<- 
+		//  -----------------------------------------------_______------------ 
+		//  0                                       480    493-494          524 
+		// 
+		      if ((V_count >= 524) && (H_count >= 699))
+			      V_count = 0; 
+		      else if (H_count == 699)
+			      V_count = V_count + 1; 
+
+
+		// Generate Vertical Sync Signal 
+		      if ((V_count <= 494) && (V_count >= 493))
+			      VGA_VS = 0; 
+		      else 
+			      VGA_VS = 1; 
+
+
+		// Generate Video on Screen Signals for Pixel Data 
+		      if (H_count <= 639) 
+			      video_on_H = 1; 
+		      else 
+			      video_on_H = 0; 
+
+
+		      if (V_count <= 479)
+			      video_on_V = 1; 
+		      else 
+			      video_on_V = 0; 
+
+	      end 
+
+	end : VIDEO_DISPLAY
+
 endmodule
+ 
+ 
+
+