- module test_ram(
- input clk_100MHz,
- input rst,
- output reg[3:0] R,
- output reg[3:0] G,
- output reg[3:0] B,
- output HS,
- output VS);
- reg[17:0] addra=0;
- wire douta;
- reg[1:0] cnt = 0;
- wire clk_25MHz;
- reg color=0;
- always @(posedge clk_100MHz)
- begin
- if(rst) cnt<=0;
- else cnt<=cnt+1;
- end
- assign clk_25MHz = cnt[1];
-
- //row parameter
- parameter H_CNT_MAX=10'd800;
- parameter H_HS=10'd96;
- parameter H_BP=10'd48;
- parameter H_DISP=10'd640;
- parameter H_FP=10'd16;
- parameter H_Left=H_HS+H_BP;
- parameter H_Right=H_HS+H_BP+H_DISP;
- //colum
- parameter V_CNT_MAX=10'd521;
- parameter V_HS=10'd2;
- parameter V_BP=10'd29;
- parameter V_DISP=10'd480;
- parameter V_FP=10'd10;
- parameter V_Left=V_HS+V_BP;
- parameter V_Right=V_HS+V_BP+V_DISP;
- reg[9:0] h_cnt=0;
- reg[9:0] v_cnt=0;
- wire disp_vaild;
- always @(posedge clk_25MHz or posedge rst)
- begin
- if(rst)
- begin
- h_cnt<=0;
- v_cnt<=0;
- addra<=0;
- end
- else
- begin
- if(h_cnt==(H_CNT_MAX-1))
- begin
- h_cnt<=0;
- if(v_cnt==(V_CNT_MAX-1)) v_cnt<=0;
- else v_cnt<=v_cnt+1;
- end
- else
- begin
- if(h_cnt>H_Left&& h_cnt<H_Left+600 && v_cnt>V_Left && v_cnt<V_Left+400)
- begin
- color = douta;
- if(addra==239999)
- addra<=0;
- else
- addra<=addra+1;
- end
- h_cnt<=h_cnt+1;
-
- end
- end
- end
- //HS
- assign HS=(h_cnt<H_HS)?1'b0:1'b1;
- //VS
- assign VS=(v_cnt<V_HS)?1'b0:1'b1;
- //vaild region for display
- assign disp_vaild=((h_cnt>=H_Left)&(h_cnt<=H_Right)&(v_cnt>=V_Left)&(v_cnt<=V_Right))?1'b1:1'b0;
- //dispaly strips, one color per 32 lines,begin from v_cnt=31
- always@(*)
- begin
- R=0;G=0;B=0; //color black
- if(disp_vaild)
- begin
- if(h_cnt>H_Left && h_cnt<H_Left+600 && v_cnt>V_Left && v_cnt<V_Left+400)
- begin
- case(color)
- 0:begin R=0;G=0;B=0; end
- 1:begin R=4'b1111;G=4'b1111;B=4'b1111; end
- endcase
- end
- end
- end
- blk_mem_gen_0 ram0 (
- .clka(clk_100MHz), // input wire clka
- .ena(1), // input wire ena
- .wea(0), // input wire [0 : 0] wea
- .addra(addra), // input wire [17 : 0] addra
- .dina(0), // input wire [0 : 0] dina
- .douta(douta) // output wire [0 : 0] douta
- );
- endmodule
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>