module VGA_controller(
// Host Side
iRed,
iGreen,
iBlue,
oAddress,
busy,
// VGA Side
oVGA_R,
oVGA_G,
oVGA_B,
oVGA_H_SYNC,
oVGA_V_SYNC,
oVGA_SYNC,
oVGA_BLANK,
oVGA_CLOCK,
// Control Signal
iCLK,
iRST_N )
// Horizontal Parameter ( Pixel )
parameter H_SYNC_CYC = 120
parameter H_SYNC_BACK = 61+3
parameter H_SYNC_ACT = 800 // 806
parameter H_SYNC_FRONT= 53+3
parameter H_SYNC_TOTAL= 1040
// Virtical Parameter ( Line )
parameter V_SYNC_CYC = 6
parameter V_SYNC_BACK = 21+2
parameter V_SYNC_ACT = 600 // 604
parameter V_SYNC_FRONT= 35+2
parameter V_SYNC_TOTAL= 666
// Start Offset
parameter X_START = H_SYNC_CYC+H_SYNC_BACK
parameter Y_START = V_SYNC_CYC+V_SYNC_BACK
// Host Side
output reg [13:0] oAddress
input [7:0] iRed
input [7:0] iGreen
input [7:0] iBlue
input busy //modify 2011.1.18
// VGA Side
output [9:0] oVGA_R
output [9:0] oVGA_G
output [9:0] oVGA_B
output reg oVGA_H_SYNC
output reg oVGA_V_SYNC
output oVGA_SYNC
output oVGA_BLANK
output oVGA_CLOCK
// Control Signal
input iCLK
input iRST_N
// Internal Registers and Wires
reg [9:0] H_Cont
reg [9:0] V_Cont
reg [7:0] Cur_Color_R
reg [7:0] Cur_Color_G
reg [7:0] Cur_Color_B
assign oVGA_BLANK = oVGA_H_SYNC &oVGA_V_SYNC
assign oVGA_SYNC = 1'b0
assign oVGA_CLOCK = iCLK
//output RGB
assign oVGA_R = (H_Cont>=X_START &&H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START &&V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_R}:0
assign oVGA_G = (H_Cont>=X_START &&H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START &&V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_G}:0
assign oVGA_B = (H_Cont>=X_START &&H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START &&V_Cont<Y_START+V_SYNC_ACT )
?{2'b00,Cur_Color_B}:0
// Pixel Address Generator
wire [9:0] posx
wire [9:0] posy
assign posx=H_Cont-X_START
assign posy=V_Cont-Y_START
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
oAddress <= 0
end
else
begin
if( H_Cont>=X_START &&H_Cont<X_START+H_SYNC_ACT &&
V_Cont>=Y_START &&V_Cont<Y_START+V_SYNC_ACT &&!busy) begin
oAddress <=posy*H_SYNC_ACT+posx
end
else oAddress <= oAddress
end
end
// Cursor Generator
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
Cur_Color_R <= 0
Cur_Color_G <= 0
Cur_Color_B <= 0
end
else
begin
if( H_Cont>=X_START &&H_Cont<X_START+H_SYNC_ACT&&
V_Cont>=Y_START &&V_Cont<Y_START+V_SYNC_ACT )
begin
Cur_Color_R <= iRed
Cur_Color_G <= iGreen
Cur_Color_B <= iBlue
end
else
begin
Cur_Color_R <= Cur_Color_R
Cur_Color_G <= Cur_Color_G
Cur_Color_B <= Cur_Color_B
end
end
end
// H_Sync Generator, Ref. 50 MHz Clock
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
H_Cont <= 0
oVGA_H_SYNC <= 0
end
else
begin
// H_Sync Counter
if( H_Cont <H_SYNC_TOTAL )
H_Cont <= H_Cont+1
else
H_Cont <= 0
// H_Sync Generator
if( H_Cont <H_SYNC_CYC )
oVGA_H_SYNC <= 0
else
oVGA_H_SYNC <= 1
end
end
// V_Sync Generator, Ref. H_Sync
always@(posedge iCLK or negedge iRST_N)
begin
if(!iRST_N)
begin
V_Cont <= 0
oVGA_V_SYNC <= 0
end
else
begin
// When H_Sync Re-start
if(H_Cont==0)
begin
// V_Sync Counter
if( V_Cont <V_SYNC_TOTAL )
V_Cont <= V_Cont+1
else
V_Cont <= 0
// V_Sync Generator
if( V_Cont <V_SYNC_CYC )
oVGA_V_SYNC <= 0
else
oVGA_V_SYNC <= 1
end
end
end
endmodule
你玩过简单的单片机吗?如果是,那就很清楚了。单片机的仿真机,就是由电脑经过下载线下载程序到仿真机上。
而仿真机就能按照你设定的程序的顺序RUN。。
同样的,这种方法,一样适用到任何开发板上的。
所以说,8951,AVR,PIC,CPLD/FPGA,DSP,ARM,MIPS,PPC,只要是开发板,就都是一样的方法。
不对,你的方法不是这样的??我刚没看明白。
你是要把开发板的VGA接口,连接到笔记本的“VGA输出接口”??
然后,在笔记本本身的液晶显示器上,看到自己用FPGA写的程序的现象??
是不是这样??
这样是不对的,笔记本的“VGA接口”是输出型态的。
开发板的VGA接口,是要连接到另一台VGA显示器的“输入接口”。。
VGA显示控制器须提供R、G、B三基色图像信号,HS行同步信号和VS场同步信号。由于VGA接口显示器仅能处理串行模拟信号,因此,VGA控制器所产生的信号经D/A转换器将数字信号转变为模拟信号后发送给显示器使用。VGA显示器正确、完整地显示数字图像包括时序的构建和数字图像信息的模拟化两个方面。据此系统硬件实现框图如图4所示,系统硬件由ADC控制模块、波形稳定控制模块、RAM存储模块、VGA控制模块组成。在ADC控制模块的控制下将A/D转换器转换后的数字信号经波形稳定模块处理后,存入数据缓存器RAM内,而后VGA控制器在驱动显示器的时候,读取数据缓存器中的数据进行显示[5]。通常VGA显示器显示的数据量较大,而FPGA内置的片内存储器资源很难满足存储量的需求,因此,一般都需要通过外接存储器进行扩展,对于图像等大数据量处理系统通常选用SDRAM进行扩展[6],本系统只进行波形的显示,不进行数据处理等 *** 作,故片内存储器足够满足使用要求。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)