EPM240问题求助!
小弟最近弄了一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 VTEST_S;
//output
output disp_RGB; //VGA
output reg CPLD_HS;
output reg CPLD_VS;
output CPLD_LED;
wire VTEST_S;
wire CPLD_LED;
assign CPLD_LED= VTEST_S;
// Internal Registers
reg H_Cont;
reg V_Cont;
reg data;
reg h_dat;
reg v_dat;
wiredat_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)
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
单纯看逻辑的话没看出什么来,你把硬件原理和这个程序的那个几个输出端口说明一下,我再看一下 这个要看你硬件电路了, 今天附上电路原理图,请大虾们指教! 电路端口说明:VTEST_S0-VTEST_S2 作为外部输入控引脚,用来选择VGA输出模式!CLED0-CLED2用来显示开控制引脚选通状态。代码中直接用 assign CPLD_LED= VTEST_S; 语句是否妥当?至于HS和VS的输出应该没什么问题。其它引脚就是VGA的电平控制了。
用软件仿真一下,再看一下编译综合后的report,看看有没有警告 quartus不会让CPLD内部程序短接的,LZ最好先检查下外部引脚。
比如:你在程序中赋值VCC然而外部引脚直连GND这样quartus就检查不出来了。
http://shop106094428.taobao.com/index.htm?spm=a1z10.1.w5002-3479751109.2.OjlX0F LZ查看下Quartus 中未使用引脚的配置,一般软件默认接地,这个是很多EDA工程师容易忽视的问题!
http://shop106094428.taobao.com/index.htm?spm=a1z10.1.w5002-3479751109.2.OjlX0F 短路可能性不大吧,
你擦除以后还短不?
页:
[1]