• [笔记]VGA建模之一(Display a rectangle)


    一、RTL视图:

    二、

    sync_module

    module sync_module(
    input VGA_CLK,	//800x600
    input RST_N,
    output VGA_HS,VGA_VS,valid,
    output[10:0] X,Y	//column and row addr signal
    );
    
    reg[10:0] Count_H;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		Count_H<=11'd0;
    	else if(Count_H==11'd1056)
    		Count_H<=11'd0;
    	else
    		Count_H<=Count_H+1'b1;
    
    reg[10:0] Count_V;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		Count_V<=11'd0;
    	else if(Count_V==11'd628)
    		Count_V<=11'd0;
    	else if(Count_H==11'd1056)
    		Count_V<=Count_V+1'b1;
    		
    reg valid_r;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		valid_r<=1'b0;
    	else if((Count_H>216&&Count_H<1017)&&(Count_V>11'd27&&Count_V<11'd627))
    		valid_r<=1'b1;
    	else
    		valid_r<=1'b0;
    		
    assign VGA_HS=(Count_H<=11'd128) ? 1'b0 : 1'b1;
    assign VGA_VS=(Count_V<=11'd4) ? 1'b0 : 1'b1;
    assign valid=valid_r;
    
    assign X=valid_r ? Count_H-11'd217 : 11'd0;
    assign Y=valid_r ? Count_V-11'd28 : 11'd0;
    
    endmodule
    

    vga_control_module

    module vga_control_module(
    input VGA_CLK,
    input RST_N,
    input[10:0] X,Y,
    input valid,
    output[7:0] VGA_R,VGA_G,VGA_B
    );
    
    reg rectangle;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		rectangle<=1'b0;
    	//else if(X>11'd0&&Y<11'd100)
    	else if((X>11'd0&&X<11'd100)||(X>11'd700&&X<11'd800)||(Y>11'd0&&Y<11'd100)||(Y>11'd500&&Y<11'd600))
    		rectangle<=1'b1;
    	else
    		rectangle<=1'b0;
    
    assign VGA_R=valid&&rectangle ? 8'b1111_1111 : 8'b0;
    assign VGA_G=valid&&rectangle ? 8'b1111_1111 : 8'b0;
    assign VGA_B=valid&&rectangle ? 8'b1111_1111 : 8'b0;
    
    endmodule
    
    vga_module
    //* Display a rectangle
    module vga_module(
    input CLOCK_50,
    input[3:0] KEY,
    output VGA_CLK,
    output[7:0] VGA_R,VGA_G,VGA_B,
    output VGA_HS,VGA_VS,
    output VGA_BLANK_N,
    output VGA_SYNC_N
    );
    
    assign VGA_SYNC_N=1'b0;	//If not SOG,Sync input should be tied to 0;
    assign VGA_BLANK_N=VGA_HS&&VGA_VS;
    
    pll_module u1(
    				.inclk0 ( CLOCK_50 ),
    				.c0 ( VGA_CLK )	//VGA_CLK=CLK_40=1056x628x60;
    				);
    
    wire[10:0] X,Y;
    wire valid;
    
    wire RST_N;
    assign RST_N=KEY[0];
    sync_module u2(
    				.VGA_CLK(VGA_CLK),
    				.RST_N(RST_N),
    				.VGA_HS(VGA_HS),
    				.VGA_VS(VGA_VS),
    				.X(X),
    				.Y(Y),
    				.valid(valid)
    				);
    vga_control_module u3(
    						.VGA_CLK(VGA_CLK),
    						.RST_N(RST_N),
    						.VGA_R(VGA_R),
    						.VGA_G(VGA_G),
    						.VGA_B(VGA_B),
    						.X(X),
    						.Y(Y),
    						.valid(valid)
    						);
    endmodule
    

  • 相关阅读:
    【BZOJ2243】染色-树链剖分+线段树复杂操作
    【BZOJ2243】染色-树链剖分+线段树复杂操作
    【HDU4193】Non-negative Partial Sums-单调队列
    【HDU4193】Non-negative Partial Sums-单调队列
    【POJ3417】Network-LCA算法+树上差分
    【POJ3417】Network-LCA算法+树上差分
    【BZOJ1984】月下“毛景树”-树链剖分
    perl 读取cookie
    perl 面向对象 new方法
    perl 面向对象 new方法
  • 原文地址:https://www.cnblogs.com/spartan/p/2141475.html
Copyright © 2020-2023  润新知