|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-4-25 02:56:12
|
显示全部楼层
module mouse_test(clock,left_btn,right_btn,middle_btn,wr_addr,wr_data,wr_ack,wr_req);
input clock;
input left_btn;
input right_btn;
input middle_btn;
output[18:0] wr_addr;
output[7:0] wr_data;
input wr_ack;
output wr_req;
reg[18:0] wr_addr_r;
reg[7:0] wr_data_r;
reg[2:0] button_r1;
reg[2:0] button_r2;
wire[2:0] button;
wire[2:0] button_edge;
assign wr_data=wr_data_r;
assign wr_addr=wr_addr_r;
assign wr_req =1'b1;
always @(posedge clock)
begin
if(wr_ack)
wr_addr_r<=wr_addr_r+1'b1;
end
assign button={left_btn,middle_btn,right_btn};
always @(posedge clock)
begin
button_r1<=button;
button_r2<=button_r1;
end
assign button_edge=button_r1 & ~button_r2;
endmodule
module vga(
clock,
switch,
disp_RGB,
hsync,
vsync
);
mouse_test mouse_test(.clock(),.left_btn(left_btn),.right_btn(right_btn),
.middle_btn(middle_btn),.wr_addr(middle_btn),
.wr_data(middle_btn),.wr_ack(wr_ack),.wr_req(wr_req));
input [2:0]button_edge;
input clock; //系统输入时钟 50MHz
input [2:0]switch;
output [2:0]disp_RGB; //VGA数据输出
output hsync; //VGA行同步信号
output vsync; //VGA场同步信号
reg [9:0] hcount; //VGA行扫描计数器
reg [9:0] vcount; //VGA场扫描计数器
reg [2:0] data;
reg [2:0] h_dat;
reg [2:0] v_dat;
assign switch=button_edge;
//reg [9:0] timer;
reg flag;
wire hcount_ov;
wire vcount_ov;
wire dat_act;
wire hsync;
wire vsync;
reg vga_clk;
//VGA行、场扫描时序参数表
parameter hsync_end = 10'd95,
hdat_begin = 10'd143,
hdat_end = 10'd783,
hpixel_end = 10'd799,
vsync_end = 10'd1,
vdat_begin = 10'd34,
vdat_end = 10'd514,
vline_end = 10'd524;
always @(posedge clock)
begin
vga_clk = ~vga_clk;
end
//************************VGA驱动部分*******************************
//行扫描
always @(posedge vga_clk)
begin
if (hcount_ov)
hcount <= 10'd0;
else
hcount <= hcount + 10'd1;
end
assign hcount_ov = (hcount == hpixel_end);
//场扫描
always @(posedge vga_clk)
begin
if (hcount_ov)
begin
if (vcount_ov)
vcount <= 10'd0;
else
vcount <= vcount + 10'd1;
end
end
assign vcount_ov = (vcount == vline_end);
//数据、同步信号输
assign dat_act = ((hcount >= hdat_begin) && (hcount < hdat_end))
&& ((vcount >= vdat_begin) && (vcount < vdat_end));
assign hsync = (hcount > hsync_end);
assign vsync = (vcount > vsync_end);
assign disp_RGB = (dat_act) ? data : 3'h00;
//************************显示数据处理部分*******************************
//图片显示延时计数器
/*always @(posedge vga_clk)
begin
flag <= vcount_ov;
if(vcount_ov && ~flag)
timer <= timer + 1'b1;
end
*/
always @(posedge vga_clk)
begin
case(switch[2:0])
3'b000: data <= h_dat; //选择横彩条
3'b100: data <= v_dat; //选择竖彩条
3'b001: data <= (v_dat ^ h_dat); //产生棋盘格
3'b010: data <= (v_dat ~^ h_dat); //产生棋盘格
endcase
end
大家帮忙看下 这样有错吗? |
|