初级会员
- 积分
- 74
- 金钱
- 74
- 注册时间
- 2020-4-3
- 在线时间
- 12 小时
|
1金钱
驱动模块代码如下:
module vga_driver(
input vga_clk, //vga驱动时钟
input sys_rst_n, //复位信号
//VGA端口
output vga_hs, //行同步信号
output vga_vs, //场同步信号
output [15:0] vga_rgb, //三原色输出
input [15:0] pixel_data, //像素点数据
output [9:0] pixel_xpos, //像素点横坐标
output [9:0] pixel_ypos //像素点纵坐标
);
parameter h_sync = 10'd96; // 行同步
parameter h_back = 10'd48; //行显示后沿
parameter h_disp = 10'd640; //行有效数据
parameter h_front = 10'd16; //行显示前沿
parameter h_total = 10'd800; //行扫描周期
parameter v_sync = 10'd2; //场同步
parameter v_back = 10'd33; //场显示后沿
parameter v_disp = 10'd480; //场有效数据
parameter v_front = 10'd10; //场显示前沿
parameter v_total = 10'd525; //场扫描周期
//rgb define
reg [9:0] cnt_h;
reg [9:0] cnt_v;
//wire define
wire vga_en;
wire data_req;
//vga场同步信号
assign vga_hs = (cnt_h <= h_sync - 1'b1) ? 1'b0 : 1'b1;
assign vga_vs = (cnt_v <= v_sync - 1'b1) ? 1'b0 : 1'b1;
//使能565输出
assign vga_en = (((cnt_h >= h_sync+h_back) && (cnt_h < h_sync+h_back+h_disp))&&
((cnt_v >= v_sync+v_back) && (cnt_v < v_sync+v_back+v_disp)))
? 1'b1 : 1'b0;
//565数据输出
assign vga_rgb = vga_en ? pixel_data : 16'd0;
//请求像素点数据输入
assign data_req = (((cnt_h >= h_sync+h_back-1'b1) && (cnt_h < h_sync+h_back+h_disp-1'b1))&&
((cnt_v >= v_sync+v_back) && (cnt_v < v_sync+h_back+v_disp)))
? 1'b1 : 1'b0;
//像素点坐标
assign pixel_xpos = data_req ? (cnt_h-(h_sync+h_back-1'b1)) : 10'd0;
assign pixel_ypos = data_req ? (cnt_v-(v_sync+v_back-1'b1)) : 10'd0;
//行计数器对像素点计数
always @(posedge vga_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
cnt_h<=10'd0;
else begin
if (cnt_h<h_total-1'b1)
cnt_h<=cnt_h+1'b1;
else
cnt_h <= 10'd0;
end
end
//场计数器对行计数
always @(posedge vga_clk or negedge sys_rst_n) begin
if (!sys_rst_n)
cnt_v<=10'd0;
else if (cnt_h==h_total-1'b1) begin
if (cnt_v<v_total-1'b1)
cnt_v<=cnt_v+1'b1;
else
cnt_v <= 10'd0;
end
end
endmodule
|
-
-
行场信号为什么都是0
最佳答案
查看完整内容[请看2#楼]
图片里的仿真波形都是刚复位后的数据,可以把仿真的时间设置长一点,就能看到数据了。另外可以把cnt_h和 cnt_v加进来看一下有没有变化
|