日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA 之 VGA的IP核编写

發布時間:2025/6/15 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA 之 VGA的IP核编写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

做一個簡單的VGA 640*480 ? 超了一天半, 整整七天才搞定,不過也很開心了! ?加油努力.....

?

主要分成三個文件:?

VGA.v 主文件, 同時調用FIFO

vga_timing.v VGA時序控制文件

vga_sdram.v 讀取SDRAM內存文件

?

?

?

1. VGA.v?

?


module VGA(
input wire clk,
input wire reset,

// 控制寄存器讀寫
input wire slave_chipselect,
input wire[1:0] slave_address, //
input wire slave_write, //寫請求
input wire[31:0] slave_writedata, //寫數據
input wire slave_read, //讀請求
output wire[31:0] slave_readdata, //讀數據
input wire[3:0] slave_byteenable, //數據有效標志


// 讀寫SDRAM數據
output wire[31:0] master_address, //數據地址
output wire master_read, //主端口讀請求
output wire master_byteenable,
input wire master_waitrequest, //迫使主端口等待
input wire master_readdatavalid, //指示已經提供有效數據
input wire[7:0] master_readdata, //讀入數據值

// VGA 時序
input wire vga_clk,
output wire vga_line_sync,
output wire vga_field_sync,
output wire [2:0] vga_r,
output wire [2:0] vga_g,
output wire [1:0] vga_b
);


wire vga_pixel_flag;

wire [7:0] fifo_data;
wire [7:0] tmp_data0;
reg [7:0] tmp_data1;

wire vga_frame_o;

?


/
// VGA輸出 /
/

assign vga_b = vga_pixel_flag ? fifo_data[1:0]:8'b00000000;
assign vga_g = vga_pixel_flag ? fifo_data[4:2]:8'b00000000;
assign vga_r = vga_pixel_flag ? fifo_data[7:5]:8'b00000000;


/
// VGA 時序 /
/
vga_timing vga_l1(
.clk(vga_clk),
.reset_i(reset),
.pixel_flag(vga_pixel_flag),
.hsync(vga_line_sync),
.vsync(vga_field_sync),
.frame_o(vga_frame_o),
.vga_rgb(tmp_data0)
);

?


/
// VGA 寄存器操作 /
/

//register 操作寄存器
wire vga_go; //VGA 啟動標志
wire [31:0] vga_base_address; //vga 數據基地址

vga_register vga_slave(
.clk(clk),
.reset_n(reset),

// 控制寄存器讀寫
.slave_chipselect(slave_chipselect),
.slave_address(slave_address), //
.slave_write(slave_write), //寫請求
.slave_writedata(slave_writedata), //寫數據
.slave_read(slave_read), //讀請求
.slave_readdata(slave_readdata), //讀數據
.slave_byteenable(slave_byteenable), //數據有效標志

.vga_base_address(vga_base_address),
.vga_go(vga_go)
);

?


/
// VGA SDRAM 讀取像素 /
/

?

?

?

?


wire [11:0] fifo_count;

vga_sdram vga_sdram_11(
.clk(clk),
.reset_n(reset),

.master_address(master_address), //數據地址
.master_read(master_read), //主端口讀請求
.master_byteenable(master_byteenable),
.master_waitrequest(master_waitrequest), //迫使主端口等待
.master_readdatavalid(master_readdatavalid),//指示已經提供有效數據
.master_readdata(master_readdata), //讀入數據值

.vga_base_addr(vga_base_address), //VGA基地址
.vga_go(vga_go), //VGA 啟動標記
.frame_start_flag(vga_frame_o), //幀開始標記
.fifo_count(fifo_count)
);

?

?

?

/
// VGA FIFO 做數據緩沖 以匹配不同速度的外設//
/

?

vga_fifo fifo_l2(
.aclr(vga_frame_o),
.data(master_readdata),
// .data(8'b00001000),
.rdclk(~vga_clk),
.rdreq(vga_pixel_flag),
.wrclk(clk),
.wrreq(master_readdatavalid),
.q(fifo_data),
.wrusedw(fifo_count)
);

?

?

endmodule

?

2. vga_timing.v?

?

?

//640*480
module vga_timing( clk,reset_i,pixel_flag,
hsync,
vsync,
frame_o,
vga_rgb);



// VGA

input clk;
input reset_i;
output hsync; //VGA行同步信號
output vsync; //VGA場同步信號
output pixel_flag;
output frame_o;
output[7:0] vga_rgb;


reg [10:0] hcount; //VGA行掃描計數器
reg [9:0] vcount; //VGA場掃描計數器
reg [8:0] data; //VGA數據
reg vga_clk;

wire h_end;
wire v_end;

wire dat_act;

?


// VGA

always @(posedge clk)
begin
vga_clk = ~vga_clk;
end
// 豎向....
always @(posedge clk)
begin
if(h_end)
hcount <= 10'd0;
else
hcount <= hcount + 10'd1;
end

assign h_end = (hcount == 799);

// 橫向....
always @(posedge clk)
begin
if(h_end)
begin
if(v_end)
vcount <= 10'd0;
else
vcount <= vcount + 10'd1;
end
end
assign v_end = (vcount == 524);


//使能信號
assign pixel_flag = ((hcount >= 144) && (hcount < 784))&& ((vcount >= 34) && (vcount < 514));

?

assign hsync = (hcount > 95);//水平同步
assign vsync = (vcount > 2);//垂直同步

?

reg frame_o_t;
always @(posedge clk)
begin
if( vcount < 3)
frame_o_t <= 1;
else
frame_o_t <= 0;
end

assign frame_o = frame_o_t;//垂直同步


wire[10:0] x_pos;
wire[10:0] y_pos;
assign x_pos = hcount - 144;//垂直同步
assign y_pos = vcount - 34;//垂直同步


reg[7:0] vga_rgb_t;

always @(posedge clk)
begin

if( x_pos<500 && y_pos > 80)
vga_rgb_t <= 8'b01101111;
else
vga_rgb_t <= 8'b00000000;
end


assign vga_rgb = vga_rgb_t;


endmodule

?

?

3. vga_sdram.v

?

?


module vga_sdram(input wire clk,
input wire reset_n,

output wire[31:0] master_address, //數據地址
output wire master_read, //主端口讀請求
output wire master_byteenable,
input wire master_waitrequest, //迫使主端口等待
input wire master_readdatavalid, //指示已經提供有效數據
input wire[7:0] master_readdata, //讀入數據值

input wire[31:0] vga_base_addr, //VGA基地址
input wire vga_go, //VGA 啟動標記
input wire frame_start_flag, //幀開始標記
input wire[11:0] fifo_count
);

?

reg [19:0] input_data_count;
reg vga_read;

assign master_read = vga_read;
assign master_byteenable = 1'd1; //位使能
assign master_address = vga_base_addr + input_data_count;

//統計FIFO已經讀了多少數據
always @ (posedge clk or negedge reset_n)
begin
if (!reset_n)
begin
//vga_read <= 1'b0; //SDRAM 停止讀
end

// 一幀數據開始時,清除FIFO
else if (!master_waitrequest ) //地址計數 : // 1. 數據有效
begin

if (frame_start_flag)
begin
vga_read <= 1'b0;
end
else if( (fifo_count < 500) && (input_data_count < 307200) )
begin
vga_read <= 1'b1; // 向FIFO讀數據
end
else if(fifo_count > 2000)
begin
vga_read <= 1'b0; // 向FIFO讀數據
end


end

end


always @ (posedge clk or negedge reset_n)
begin
if (!reset_n)
begin
//input_data_count <= 0;
end

// 一幀數據開始時,清除FIFO
else if (!master_waitrequest ) //地址計數 : // 1. 數據有效
begin

if (frame_start_flag)
begin
input_data_count <= 0;
end
else if( input_data_count < 307200)
begin
if(vga_read == 1'b1)
input_data_count <= input_data_count + 1;
end

end

end

?

endmodule

?

?

?

?

?

轉載于:https://www.cnblogs.com/signal/archive/2012/07/31/2616745.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的FPGA 之 VGA的IP核编写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久草a视频 | 很黄很污的视频 | 啪啪网站免费看 | 久久网免费视频 | 天堂久久久久 | 午夜寂寞福利 | 国产夫绿帽单男3p精品视频 | 小妹色播 | 最新地址在线观看 | 波多野结衣黄色网址 | 日韩av地址 | 国产精品久久久久久久久久 | 黄瓜污视频| 粉嫩av国产一区二区三区 | 黄污视频在线播放 | 5月婷婷6月丁香 | 四虎午夜影院 | 伊人久久大香线蕉综合网站 | 日韩av无码一区二区三区不卡 | 国产一区二区三区www | 中文字幕乱码一区二区三区 | 日韩精品一区二区三区视频 | 午夜寂寞少妇 | 午夜一级视频 | 91久久精品日日躁夜夜躁国产 | 精品国产一区二区三区在线 | 亚洲AV无码精品一区二区三区 | 婷婷成人av | 嫩草影院一区二区三区 | 91视频播放 | 极品尤物在线观看 | 午夜精品在线视频 | 好吊操这里只有精品 | 人妻激情偷乱视频一区二区三区 | 丰满人妻一区二区三区53视频 | 中文字幕精品在线 | 久久久18禁一区二区三区精品 | 日本电影大尺度免费观看 | 黄色网址在线视频 | 欧美日韩a | 欧美一区二区三区久久久 | 日日夜夜草 | 国产高潮失禁喷水爽到抽搐 | 91欧美日韩麻豆精品 | 爱情岛论坛亚洲入口 | 337p粉嫩大胆色噜噜狠狠图片 | 精品视频999 | yy1111111| 理论片中文字幕 | 国产成人黄色av | 性高潮久久久久 | 黑人干亚洲女人 | 亚洲天堂女人 | 欧美一区二区在线观看视频 | 欧美性猛交xxxx黑人 | 亚洲毛片一区二区 | 国产91丝袜在线播放九色 | 成人动漫免费在线观看 | 99re6这里有精品热视频 | 久久综合资源 | 国产片在线播放 | 快色网站 | 日韩人妻无码精品久久久不卡 | av2018| 亚洲自拍p | 欧美性猛交xxxx免费看久久久 | 外国黄色录像 | 伊人久久九 | 影音先锋亚洲精品 | youjizz亚洲女人 | 国产精品久久久久久久久久辛辛 | 少妇激情偷人爽爽91嫩草 | 久久黄页| 8x8x国产精品一区二区 | 亚洲熟妇毛茸茸 | 国产成人亚洲欧洲在线 | 亚洲黄色在线看 | 熟妇人妻精品一区二区三区视频 | 成人在线免费观看视频 | 国产精品正在播放 | 成人免费一区二区三区在线观看 | 成人午夜在线 | 午夜激情在线视频 | 日本涩涩视频 | 午夜高潮视频 | 夜间福利视频 | 97人妻精品一区二区三区视频 | 国产又粗又硬又长又爽的演员 | 一区二区三区啪啪啪 | 国产欧美日韩成人 | 欧美日韩理论 | 国产精品丝袜 | 色综合啪啪 | 在线观看日韩一区 | 小视频在线看 | www.亚洲人| 日韩你懂的 | 久久久美女 | 成人国产三级 |