liu168lin 发表于 2013-10-20 17:04:48

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

smallwind1 发表于 2013-10-20 19:48:55

单纯看逻辑的话没看出什么来,你把硬件原理和这个程序的那个几个输出端口说明一下,我再看一下

yuyu87 发表于 2013-10-20 20:55:24

这个要看你硬件电路了,

liu168lin 发表于 2013-10-22 13:24:05

今天附上电路原理图,请大虾们指教!

liu168lin 发表于 2013-10-22 13:35:37

电路端口说明:VTEST_S0-VTEST_S2 作为外部输入控引脚,用来选择VGA输出模式!CLED0-CLED2用来显示开控制引脚选通状态。代码中直接用 assign   CPLD_LED=    VTEST_S; 语句是否妥当?至于HS和VS的输出应该没什么问题。其它引脚就是VGA的电平控制了。


wuq_cody 发表于 2013-10-22 22:45:46

用软件仿真一下,再看一下编译综合后的report,看看有没有警告

huchl 发表于 2013-10-23 11:30:21

quartus不会让CPLD内部程序短接的,LZ最好先检查下外部引脚。
比如:你在程序中赋值VCC然而外部引脚直连GND这样quartus就检查不出来了。





http://shop106094428.taobao.com/index.htm?spm=a1z10.1.w5002-3479751109.2.OjlX0F

huchl 发表于 2013-10-23 13:59:55

LZ查看下Quartus 中未使用引脚的配置,一般软件默认接地,这个是很多EDA工程师容易忽视的问题!







http://shop106094428.taobao.com/index.htm?spm=a1z10.1.w5002-3479751109.2.OjlX0F

thzbigone 发表于 2013-10-23 14:31:33

短路可能性不大吧,
你擦除以后还短不?
页: [1]
查看完整版本: EPM240问题求助!