Created
May 26, 2015 20:15
-
-
Save objmagic/2d12c0d2abe61d8e1e51 to your computer and use it in GitHub Desktop.
project4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| module Cars_in_a_row { | |
| input wire clk, | |
| output [9:0] width, // width, spacing and pos | |
| output [9:0] spacing, | |
| output [9:0] posy | |
| }; | |
| reg [9:0] posy_ = 0; | |
| reg [9:0] spacing_ = 300; | |
| reg [9:0] width_ = 200; | |
| always @ (posedge clk) | |
| posy_ <= posy_ + 1; | |
| assign posy = posy_; | |
| assign spacing = spacing_; | |
| assign width = width_; | |
| endmodule |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| `timescale 1ns / 1ps | |
| ////////////////////////////////////////////////////////////////////////////////// | |
| // Company: | |
| // Engineer: | |
| // | |
| // Create Date: 12:38:37 05/03/2015 | |
| // Design Name: | |
| // Module Name: Clock | |
| // Project Name: | |
| // Target Devices: | |
| // Tool versions: | |
| // Description: | |
| // | |
| // Dependencies: | |
| // | |
| // Revision: | |
| // Revision 0.01 - File Created | |
| // Additional Comments: | |
| // | |
| ////////////////////////////////////////////////////////////////////////////////// | |
| module Clock( | |
| input clk, | |
| output buttons, | |
| output animate_objects, | |
| ); | |
| integer counter = 0; | |
| reg buttons_ = 0; | |
| reg animate_object_ = 0; | |
| always @ (posedge clk or posedge reset) | |
| begin | |
| counter = counter + 1; | |
| if(counter%8333333==0) | |
| begin | |
| animate_object_ = ~animate_object_; | |
| counter = 0; | |
| end | |
| end | |
| assign buttons = buttons_; | |
| assign animate_objects = animate_object_; | |
| endmodule |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| `timescale 1ns / 1ps | |
| ////////////////////////////////////////////////////////////////////////////////// | |
| // Company: | |
| // Engineer: | |
| // | |
| // Create Date: 13:16:52 05/19/2015 | |
| // Design Name: | |
| // Module Name: Main | |
| // Project Name: | |
| // Target Devices: | |
| // Tool versions: | |
| // Description: | |
| // | |
| // Dependencies: | |
| // | |
| // Revision: | |
| // Revision 0.01 - File Created | |
| // Additional Comments: | |
| // | |
| ////////////////////////////////////////////////////////////////////////////////// | |
| module Main( | |
| input wire clk,reset, | |
| input [3:0] button, // UDLR | |
| output wire hsync,vsync, | |
| output [2:0] red, // three bit signal to drive color red | |
| output [2:0] green, // three bit signal to drive color green | |
| output [1:0] blue // two bit signal to drive color blue (human eye is less sensitive to color blue) | |
| ); | |
| // defining constants | |
| localparam HD = 1280; // horizontal display area | |
| localparam HF = 48; // front porch (right border) | |
| localparam HB = 248; //right porch (left border) | |
| localparam HR = 112; // horizontal retrace | |
| localparam VD = 1024; // vertical display area | |
| localparam VF = 1; // front porch (bottom border) | |
| localparam VB = 38; // back porch (top border) | |
| localparam VR = 3; // vertical retrace | |
| localparam h_end = 1688; // total horizontal timing | |
| localparam v_end = 1066; // total vertical timing | |
| //localparam sq_size = 20; // size of square | |
| localparam sq_x_l = 500; // left coordinate of square | |
| localparam sq_x_r = 510; // right coord | |
| localparam sq_y_t = 500; // top | |
| localparam sq_y_b = 510; | |
| // Instantiation of clock | |
| reg buttons; | |
| reg animate_objects; | |
| Clock clock( .clk(clk), .buttons(buttons), .animate_objects(animate_objects)); | |
| //horizontal and vertical counter | |
| reg [10:0] h_count_reg,v_count_reg ; // registers for sequential horizontal and vertical counters | |
| reg[10:0] h_count_next , v_count_next; | |
| //reg v_sync_reg , h_sync_reg ; | |
| //wire v_sync_next , h_sync_next ; | |
| reg v_sync_next , h_sync_next = 0 ; | |
| always @ ( posedge clk , posedge reset) | |
| if (reset) | |
| begin | |
| v_count_reg <= 0; | |
| h_count_reg <= 0 ; | |
| //v_sync_reg <= 1'b0; | |
| //h_sync_reg <= 1'b0; | |
| end | |
| else | |
| begin | |
| v_count_reg <= v_count_next; | |
| h_count_reg <= h_count_next; | |
| //v_sync_reg <= v_sync_next ; | |
| //h_sync_reg <= h_sync_next ; | |
| end | |
| // horizontal and vertical counters | |
| always @(posedge clk) | |
| begin | |
| if(h_count_next < h_end-1) | |
| begin | |
| h_count_next <= h_count_next + 1; | |
| end else | |
| begin | |
| h_count_next <= 0; | |
| if(v_count_next < v_end-1) | |
| v_count_next <= v_count_next + 1; | |
| else | |
| v_count_next <= 0; | |
| end | |
| end | |
| // horizontal and vertical synchronization signals | |
| always @(posedge clk) | |
| if(h_count_reg < HR) | |
| h_sync_next <= 1; | |
| else | |
| h_sync_next <= 0; | |
| //VSync logic | |
| always @(posedge clk) | |
| if(v_count_reg < VR) | |
| v_sync_next <= 1; | |
| else | |
| v_sync_next <= 0; | |
| assign hsync = h_sync_next; | |
| assign vsync = v_sync_next; | |
| reg h_video_on,v_video_on; // these registers ensure that the display signals are sent only | |
| //when the pixels are within the display region of the monitor. | |
| //horizontal logic | |
| always @(posedge clk) | |
| if((h_count_reg >= HR + HF) && (h_count_reg< HR + HF + HD)) | |
| h_video_on <= 1; | |
| else | |
| h_video_on <= 0; | |
| //Vertical logic | |
| always @(posedge clk) | |
| if((v_count_reg >= VR + VF) && (v_count_reg < VR + VF+ VD)) | |
| v_video_on <= 1; | |
| else | |
| v_video_on <= 0; | |
| reg video_on; | |
| always @(posedge clk) | |
| if(h_video_on && v_video_on) | |
| video_on <= 1; | |
| else | |
| video_on <= 0; | |
| reg [9:0] pixel_x,pixel_y; // registers to describe current position of pixel within display area. | |
| always @(posedge clk) | |
| if(h_video_on) | |
| pixel_x <= h_count_reg - HR - HF; | |
| else | |
| pixel_x <= 0; | |
| always @(posedge clk) | |
| if(v_video_on) | |
| pixel_y <= v_count_reg - VR - VF; | |
| else | |
| pixel_y <= 0; | |
| //color output | |
| reg [7:0] coloroutput; // 8 bit register which describes which color has to be displayed but only when video_on signal is turned on. | |
| always @(posedge clk) | |
| if(~video_on) | |
| coloroutput <= 0; | |
| else | |
| begin | |
| if((pixel_x > sq_x_l && pixel_x < sq_x_r) && (pixel_y > sq_y_t && pixel_y < sq_y_b )) | |
| coloroutput[7:0] <= 8'b11100000; | |
| else | |
| begin | |
| coloroutput [7:0] <= 8'b00000011; | |
| end | |
| end | |
| assign red = coloroutput[7:5]; | |
| assign green = coloroutput[4:2] ; | |
| assign blue = coloroutput[1:0] ; | |
| endmodule |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment