|
小弟最近弄了一VGA显示的代码,发现一奇怪问题,烧写到芯片中后,芯片内部会短路,已经有好几块板子出现这样的问题了,我检查过好多次,没有烧程序前芯片供电正常,把代码烧进去后,VCC与GND短路,请大虾们帮忙愁一愁!
/*Horizontal :
______________ _____________
| | |
_______________| VIDEO |_______________| VIDEO (next line)
___________ _____________________ ______________________
|_| |_|
B C <------D-----><-E->
<----------A---------->
Vertical :
______________ _____________
| | |
_______________| VIDEO |_______________| VIDEO (next frame)
___________ _____________________ ______________________
|_| |_|
P Q <------R-----><-S->
<----------O---------->
For VESA 1024*768 @ 60Hz:
Fh (kHz) :48.54
A (us) :20.6
B (us) :2.09
C (us) :2.46
D (us) :15.7
E (us) :0.37
Fv (Hz) :60.32
O (ms) :16.6
P (ms) :0.12
Q (ms) :0.599
R (ms) :15.87
S (ms) :0.062
*/
`timescale 1 ns/100ps
module EPM240_VGA(pclk,VTEST_S,disp_RGB,CPLD_HS,CPLD_VS,CPLD_LED);
//input
input pclk; //48MHZ(20.833ns)
input [2:0] VTEST_S;
//output
output [8:0] disp_RGB; //VGA
output reg CPLD_HS;
output reg CPLD_VS;
output [2:0] CPLD_LED;
wire [2:0] VTEST_S;
wire [2:0] CPLD_LED;
assign CPLD_LED = VTEST_S;
// Internal Registers
reg [10:0] H_Cont;
reg [10:0] V_Cont;
reg [8:0] data;
reg [8:0] h_dat;
reg [8:0] v_dat;
wire dat_act;
always@(posedge pclk)
begin
if(H_Cont==988)
H_Cont<=0;
else
H_Cont<=H_Cont+1;
end
always@(posedge pclk)
begin
if(V_Cont==806) V_Cont<=0;
else if(H_Cont==988) V_Cont<=V_Cont+1;
end
always@(posedge pclk)
begin
if(H_Cont==0) CPLD_HS<=0;
else if(H_Cont==100) CPLD_HS<=1;
if(V_Cont==0) CPLD_VS<=0;
else if(V_Cont==6) CPLD_VS<=1;
end
//
assign dat_act = ((H_Cont >= 218) && (H_Cont < 971))
&& ((V_Cont >= 34) && (V_Cont < 802));
assign disp_RGB = (dat_act) ? data : 9'b000000000;
always @(posedge pclk)
begin
case(VTEST_S[2:0])
3'd7:
begin
data <= 9'b000000000;
end
3'd6: data <= (~v_dat ^ h_dat); //???????
3'd5: data <= (v_dat ^ h_dat); //???????
3'd2: data <= 9'b111000000; //???????
3'd3: data <= 9'b000111000; //??????
3'd4: data <= 9'b000000111; //??????
3'd1: data <= 9'b000000000; //???????
3'd0: data <= 9'b111111111; //???
endcase
end
always @(posedge pclk) //???????
begin
if(H_Cont < 400)
v_dat <= 9'b000000000; //?
else if(H_Cont < 788)
v_dat <= 9'b111111111; //?
else
v_dat <= 9'b000000000; //?
end
always @(posedge pclk) //???????
begin
if(V_Cont < 226)
h_dat <= 9'b111111111; //?
else if(V_Cont < 606)
h_dat <= 9'b000000000; //?
else
h_dat <= 9'b111111111; //?
end
endmodule
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|