diff --git a/labs/2_graphics/2_1_rectangle_ellipse_parabola/gtkwave.tcl b/labs/2_graphics/2_1_rectangle_ellipse_parabola/gtkwave.tcl index f76af035..e9b71182 100644 --- a/labs/2_graphics/2_1_rectangle_ellipse_parabola/gtkwave.tcl +++ b/labs/2_graphics/2_1_rectangle_ellipse_parabola/gtkwave.tcl @@ -2,38 +2,73 @@ set all_signals [list] -lappend all_signals tb.i_display.pixel_00 -lappend all_signals tb.i_display.pixel_01 -lappend all_signals tb.i_display.pixel_02 -lappend all_signals tb.i_display.pixel_03 -lappend all_signals tb.i_display.pixel_04 -lappend all_signals tb.i_display.pixel_05 -lappend all_signals tb.i_display.pixel_06 -lappend all_signals tb.i_display.pixel_07 -lappend all_signals tb.i_display.pixel_08 -lappend all_signals tb.i_display.pixel_09 -lappend all_signals tb.i_display.pixel_10 -lappend all_signals tb.i_display.pixel_11 -lappend all_signals tb.i_display.pixel_12 -lappend all_signals tb.i_display.pixel_13 -lappend all_signals tb.i_display.pixel_14 -lappend all_signals tb.i_display.pixel_15 -lappend all_signals tb.i_display.pixel_16 -lappend all_signals tb.i_display.pixel_17 -lappend all_signals tb.i_display.pixel_18 -lappend all_signals tb.i_display.pixel_19 -lappend all_signals tb.i_display.pixel_20 -lappend all_signals tb.i_display.pixel_21 -lappend all_signals tb.i_display.pixel_22 -lappend all_signals tb.i_display.pixel_23 -lappend all_signals tb.i_display.pixel_24 -lappend all_signals tb.i_display.pixel_25 -lappend all_signals tb.i_display.pixel_26 -lappend all_signals tb.i_display.pixel_27 -lappend all_signals tb.i_display.pixel_28 lappend all_signals tb.i_display.pixel_29 +lappend all_signals tb.i_display.pixel_28 +lappend all_signals tb.i_display.pixel_27 +lappend all_signals tb.i_display.pixel_26 +lappend all_signals tb.i_display.pixel_25 +lappend all_signals tb.i_display.pixel_24 +lappend all_signals tb.i_display.pixel_23 +lappend all_signals tb.i_display.pixel_22 +lappend all_signals tb.i_display.pixel_21 +lappend all_signals tb.i_display.pixel_20 +lappend all_signals tb.i_display.pixel_19 +lappend all_signals tb.i_display.pixel_18 +lappend all_signals tb.i_display.pixel_17 +lappend all_signals tb.i_display.pixel_16 +lappend all_signals tb.i_display.pixel_15 +lappend all_signals tb.i_display.pixel_14 +lappend all_signals tb.i_display.pixel_13 +lappend all_signals tb.i_display.pixel_12 +lappend all_signals tb.i_display.pixel_11 +lappend all_signals tb.i_display.pixel_10 +lappend all_signals tb.i_display.pixel_09 +lappend all_signals tb.i_display.pixel_08 +lappend all_signals tb.i_display.pixel_07 +lappend all_signals tb.i_display.pixel_06 +lappend all_signals tb.i_display.pixel_05 +lappend all_signals tb.i_display.pixel_04 +lappend all_signals tb.i_display.pixel_03 +lappend all_signals tb.i_display.pixel_02 +lappend all_signals tb.i_display.pixel_01 +lappend all_signals tb.i_display.pixel_00 + +lappend all_signals tb.i_lcd.LCD_DE +lappend all_signals tb.i_lcd.LCD_HSYNC +lappend all_signals tb.LCD_R +lappend all_signals tb.LCD_G +lappend all_signals tb.LCD_B +lappend all_signals tb.x +lappend all_signals tb.y set num_added [ gtkwave::addSignalsFromList $all_signals ] +gtkwave::highlightSignalsFromList "tb.LCD_R\[4:0\]" +gtkwave::/Edit/Data_Format/Analog/Step +gtkwave::/Edit/Data_Format/Decimal + +gtkwave::highlightSignalsFromList "tb.LCD_G\[5:0\]" +gtkwave::/Edit/Data_Format/Analog/Step +gtkwave::/Edit/Data_Format/Decimal + +gtkwave::highlightSignalsFromList "tb.LCD_B\[4:0\]" +gtkwave::/Edit/Data_Format/Analog/Step +gtkwave::/Edit/Data_Format/Decimal + +gtkwave::highlightSignalsFromList "tb.x\[8:0\]" +gtkwave::/Edit/Data_Format/Analog/Step +gtkwave::/Edit/Data_Format/Decimal + +gtkwave::highlightSignalsFromList "tb.y\[8:0\]" +gtkwave::/Edit/Data_Format/Analog/Step +gtkwave::/Edit/Data_Format/Decimal + gtkwave::/Time/Zoom/Zoom_Full +gtkwave::/Time/Zoom/Zoom_In +gtkwave::/Time/Zoom/Zoom_In +gtkwave::/Time/Zoom/Zoom_In +gtkwave::/Time/Zoom/Zoom_In +gtkwave::/Time/Zoom/Zoom_In +gtkwave::/Time/Zoom/Zoom_To_End +gtkwave::/Edit/UnHighlight_All diff --git a/labs/2_graphics/2_1_rectangle_ellipse_parabola/surfer.scr b/labs/2_graphics/2_1_rectangle_ellipse_parabola/surfer.scr index e4a740ac..f2613945 100644 --- a/labs/2_graphics/2_1_rectangle_ellipse_parabola/surfer.scr +++ b/labs/2_graphics/2_1_rectangle_ellipse_parabola/surfer.scr @@ -1,2 +1,74 @@ -scope_add tb.i_display +variable_add tb.i_display.pixel_29 +variable_add tb.i_display.pixel_28 +variable_add tb.i_display.pixel_27 +variable_add tb.i_display.pixel_26 +variable_add tb.i_display.pixel_25 +variable_add tb.i_display.pixel_24 +variable_add tb.i_display.pixel_23 +variable_add tb.i_display.pixel_22 +variable_add tb.i_display.pixel_21 +variable_add tb.i_display.pixel_20 +variable_add tb.i_display.pixel_19 +variable_add tb.i_display.pixel_18 +variable_add tb.i_display.pixel_17 +variable_add tb.i_display.pixel_16 +variable_add tb.i_display.pixel_15 +variable_add tb.i_display.pixel_14 +variable_add tb.i_display.pixel_13 +variable_add tb.i_display.pixel_12 +variable_add tb.i_display.pixel_11 +variable_add tb.i_display.pixel_10 +variable_add tb.i_display.pixel_09 +variable_add tb.i_display.pixel_08 +variable_add tb.i_display.pixel_07 +variable_add tb.i_display.pixel_06 +variable_add tb.i_display.pixel_05 +variable_add tb.i_display.pixel_04 +variable_add tb.i_display.pixel_03 +variable_add tb.i_display.pixel_02 +variable_add tb.i_display.pixel_01 +variable_add tb.i_display.pixel_00 +variable_add tb.i_lcd.LCD_DE +variable_add tb.i_lcd.LCD_HSYNC +variable_add tb.LCD_R +variable_add tb.LCD_G +variable_add tb.LCD_B +variable_add tb.x +variable_add tb.y + scope_select tb.i_lcd + +item_focus bo +item_set_format Unsigned +item_set_color Yellow + +item_focus bp +item_set_format Unsigned +item_set_color Gray + +item_focus ca +item_set_format Unsigned +item_set_color Red + +item_focus cb +item_set_format Unsigned +item_set_color Green + +item_focus cc +item_set_format Unsigned +item_set_color Blue + +item_focus cd +item_set_format Unsigned +item_set_color Gray + +item_focus ce +item_set_format Unsigned +item_set_color Gray + +zoom_in +zoom_in +zoom_in +zoom_in +zoom_in +scroll_to_end \ No newline at end of file diff --git a/labs/2_graphics/2_1_rectangle_ellipse_parabola/tb.sv b/labs/2_graphics/2_1_rectangle_ellipse_parabola/tb.sv index 4a847d86..4b7e9e78 100644 --- a/labs/2_graphics/2_1_rectangle_ellipse_parabola/tb.sv +++ b/labs/2_graphics/2_1_rectangle_ellipse_parabola/tb.sv @@ -1,5 +1,7 @@ `include "config.svh" + // Shows the image on the VGA screen using signal lines in Wave Analyzer + module tb; timeunit 1ns; @@ -72,7 +74,9 @@ module tb; ); - assign pixel = |LCD_G; + // We output all the green pixels to signal lines in Wave Analyzer + + assign pixel = |LCD_R; // You can try it |LCD_G or |LCD_B or a mix of them //------------------------------------------------------------------------ @@ -89,6 +93,8 @@ module tb; //------------------------------------------------------------------------ + // We output pixels to signal lines in Wave Analyzer + tb_lcd_display i_display ( .PixelClk ( pixel_clk ), @@ -141,7 +147,7 @@ module tb; // Based on timescale is 1 ns / 1 ps - # 0.0002s + # 0.0001740s // We simulate until the end of the first frame `ifdef MODEL_TECH // Mentor ModelSim and Questa $stop; @@ -152,6 +158,8 @@ module tb; endmodule + // Scan and Sync signal generator for VGA screen + module tb_lcd_480_272 ( input PixelClk, @@ -163,58 +171,59 @@ module tb_lcd_480_272 output [8:0] y ); - // Horizen count to Hsync, then next Horizen line. + // Calculation of visible, invisible pixel fields and synchronization signals parameter H_Pixel_Valid = 16'd480; parameter H_FrontPorch = 16'd50; parameter H_BackPorch = 16'd30; - parameter PixelForHS = H_Pixel_Valid + H_FrontPorch + H_BackPorch; - parameter V_Pixel_Valid = 16'd272; parameter V_FrontPorch = 16'd20; parameter V_BackPorch = 16'd5; - parameter PixelForVS = V_Pixel_Valid + V_FrontPorch + V_BackPorch; - // Horizen pixel count + // Pixel counter - reg [15:0] H_PixelCount; - reg [15:0] V_PixelCount; + logic [15:0] H_PixelCount; + logic [15:0] V_PixelCount; - always @( posedge PixelClk or posedge rst )begin - if( rst ) begin + always_ff @ ( posedge PixelClk or posedge rst )begin + if ( rst ) begin V_PixelCount <= 16'b0; H_PixelCount <= 16'b0; end - else if( H_PixelCount == PixelForHS ) begin - V_PixelCount <= V_PixelCount + 4'd9; + else if ( H_PixelCount == PixelForHS ) begin // We show every 9 lines using + V_PixelCount <= V_PixelCount + 4'd9; // signal lines in Wave Analyzer H_PixelCount <= 16'b0; end - else if( V_PixelCount >= PixelForVS ) begin + else if ( V_PixelCount >= PixelForVS ) begin V_PixelCount <= 16'b0; H_PixelCount <= 16'b0; end else begin - V_PixelCount <= V_PixelCount ; - H_PixelCount <= H_PixelCount + 1'b1; + V_PixelCount <= V_PixelCount ; + H_PixelCount <= H_PixelCount + 1'b1; end end - // SYNC-DE MODE + // Synchronization signals assign LCD_HSYNC = H_PixelCount <= ( PixelForHS - H_FrontPorch ) ? 1'b0 : 1'b1; - assign LCD_VSYNC = V_PixelCount < ( PixelForVS ) ? 1'b0 : 1'b1; + assign LCD_DE = ( H_PixelCount >= H_BackPorch ) && + ( H_PixelCount <= H_Pixel_Valid + H_BackPorch ) && + ( V_PixelCount >= V_BackPorch ) && + ( V_PixelCount <= V_Pixel_Valid + V_BackPorch ) && PixelClk; - assign LCD_DE = ( H_PixelCount >= H_BackPorch ) && ( H_PixelCount <= H_Pixel_Valid + H_BackPorch ) && - ( V_PixelCount >= V_BackPorch ) && ( V_PixelCount <= V_Pixel_Valid + V_BackPorch ) && PixelClk; + // Current pixel position assign x = 9' (H_PixelCount - H_BackPorch); assign y = 9' (V_PixelCount - V_BackPorch); endmodule + // Shows the image on the VGA screen using signal lines in Wave Analyzer + module tb_lcd_display ( input PixelClk,