• [笔记]VGA建模之二(Display a photo pika.bmp)


    一、RTL视图

    二、

    sync_module

    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 )
    				);
    
    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)
    				);
    				
    wire[63:0] Rom_Data;
    wire[5:0] Rom_Addr;
    rom_module u4(
    				.clock(VGA_CLK),
    				.address(Rom_Addr),
    				.q(Rom_Data)
    				);
    				
    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),
    						.Rom_Addr(Rom_Addr),
    						.Rom_Data(Rom_Data)
    						);
    endmodule
    

    vga_control_module

    module vga_control_module(
    input VGA_CLK,
    input RST_N,
    input[10:0] X,Y,
    input valid,
    input[63:0] Rom_Data,
    output[5:0] Rom_Addr,
    output[7:0] VGA_R,VGA_G,VGA_B
    );
    
    reg[5:0] m;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		m<=6'b0;
    	else if(valid && Y<64)
    		m<=Y[5:0];
    		
    reg[5:0] n;
    always@(posedge VGA_CLK or negedge RST_N)
    	if(!RST_N)
    		n<=6'b0;
    	else if(valid && X<64)
    		n<=X[5:0];
    
    assign Rom_Addr=m;
    
    assign VGA_R=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
    assign VGA_G=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
    assign VGA_B=valid ? {Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n],Rom_Data[6'd63-n]} : 8'b0;
    		
    endmodule
    
    vga_module
    //* Display a photo pika.bmp(64x64)
    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 )
    				);
    
    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)
    				);
    				
    wire[63:0] Rom_Data;
    wire[5:0] Rom_Addr;
    rom_module u4(
    				.clock(VGA_CLK),
    				.address(Rom_Addr),
    				.q(Rom_Data)
    				);
    				
    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),
    						.Rom_Addr(Rom_Addr),
    						.Rom_Data(Rom_Data)
    						);
    endmodule
    

  • 相关阅读:
    多线程编程学习笔记——异步操作数据库
    多线程编程学习笔记——编写一个异步的HTTP服务器和客户端
    一个屌丝程序猿的人生(八十九)
    一个屌丝程序猿的人生(八十八)
    一个屌丝程序猿的人生(八十七)
    2018——而立之年
    《简历吐槽大会》——活动相关事宜
    一个屌丝程序猿的人生(八十六)
    程序员买房指南——LZ的三次买房和一次卖房经历
    微服务领域是不是要变天了?Spring Cloud Alibaba正式入驻Spring Cloud官方孵化器!
  • 原文地址:https://www.cnblogs.com/spartan/p/2141502.html
Copyright © 2020-2023  润新知