打印

求助!!!编译,下载都可以,但程序就是不运行,连顶层

[复制链接]
2727|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jlrhw|  楼主 | 2015-1-30 00:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大家好,我写了一段CPLD程序(EPM240T100I5N),编译,下载都可以,但程序就是不运行,连顶层模块里置个灯都不亮,想了一晚上百思不得其解
程序附件和原理图我已上传
顶层模块功能有两个:1.将需要的电机圈位数据通过串口上传到电脑;2.通过计数器采集电机编码器脉冲,并通过比较器与目标圈位做比较

原理图和程序.rar

1.78 MB

相关帖子

沙发
YingziSeek| | 2015-1-30 08:41 | 只看该作者
不了解,顶

使用特权

评论回复
板凳
ococ| | 2015-1-30 09:04 | 只看该作者
1.量一下复位信号和时钟有没有输入到FPGA。
2.检测管脚约束与板卡上的时钟和复位是否对应。
3.看一下LED灯是高电平亮还是低电平亮,对比代码中的赋值。

使用特权

评论回复
地板
jlrhw|  楼主 | 2015-1-30 15:03 | 只看该作者
管脚都和原理图对应一一做了约束
当引脚输出设置低电平的时候灯亮,我在顶层模块的这里
  always @ (posedge Clkin)
        if(!Resetb)
            begin
            DataIN<=16'd0;
                //StartM<=0;
                //CodeOUT<=16'd0;
                //ROUT<=0;
                //POUT<=0;
                //YOUT<=3'd0;
                LED1<=0;
                LED2<=0;
                LED3<=0;
                LED4<=0;
                LED5<=0;
                LED6<=0;
                SETCode<=16'd0;
                MRun<=0;
                Cnt1<=2'b0;
                end
            else
            begin
            SETCode<=16'd30000;
            case(Cnt1)
            2'b00:
                begin
                if(!StartM)
                  begin
                  Cnt1<=2'b01;
                  end
                else
                  begin
                  Cnt1<=2'b0;
                  end
                end
            2'b01:
                                begin
                MRun<=1;
                if(YOUT==3'b001)
                  begin
                  Cnt1<=2'b10;
                  end
                else
                  begin
                  Cnt1<=2'b01;
                  end
                end
            2'b10:
                begin
                MRun<=0;
                Cnt1<=2'b0;
                end
          endcase
          end
写了置灯亮的语句,正常情况下,应该一上电复位后,灯就亮,可是片子一上电灯不亮,所以我觉得是片子没有跑起来

另外找了一个以前的程序,也在复位的时候写了管脚置低让灯亮的语句,结果一上电,灯就亮了

使用特权

评论回复
5
jlrhw|  楼主 | 2015-1-30 15:07 | 只看该作者
本帖最后由 jlrhw 于 2015-1-30 15:09 编辑

这个是管脚配置,我都按原理图做了配置,另一个程序复位置灯管脚低的也是按图做的配置

11.bmp (832.01 KB )

11.bmp

使用特权

评论回复
6
ococ| | 2015-1-30 16:04 | 只看该作者
jlrhw 发表于 2015-1-30 15:03
管脚都和原理图对应一一做了约束
当引脚输出设置低电平的时候灯亮,我在顶层模块的这里
  always @ (posedg ...

量一下时钟有没有。

或者你试试 always里面用异步复位不要用同步。
用同步的话如果你时钟没有输入那灯就不会亮。

使用特权

评论回复
7
jlrhw|  楼主 | 2015-1-30 16:33 | 只看该作者
我刚才将程序改成了异步复位

    always @ (posedge Clkin,negedge Resetb)
        if(!Resetb)
            begin
            DataIN<=16'd0;
                //StartM<=0;
                //CodeOUT<=16'd0;
                //ROUT<=0;
                //POUT<=0;
                //YOUT<=3'd0;
                LED1<=0;
                LED2<=0;
                LED3<=0;
                LED4<=0;
                LED5<=0;
                LED6<=0;
                SETCode<=16'd0;
                MRun<=0;
                Cnt1<=2'b0;
                end
            else
            begin
            SETCode<=16'd30000;
            case(Cnt1)
            2'b00:
                begin
                if(!StartM)
                  begin
                  Cnt1<=2'b01;
                  end
                else
                  begin
                  Cnt1<=2'b0;
                  end
                 end
            2'b01:
                                begin
                MRun<=1;
                if(YOUT==3'b001)
                  begin
                  Cnt1<=2'b10;
                  end
                else
                  begin
                  Cnt1<=2'b01;
                  end
                end
            2'b10:
                begin
                MRun<=0;
                Cnt1<=2'b0;
                end
          endcase
          end
又用万用表测试了一下复位信号,在按下复位开关时,电平由3.29V变为0。01V,复位信号应该是有了,可是板子还是没反应,CPLD好任性啊

使用特权

评论回复
8
jlrhw|  楼主 | 2015-1-30 16:36 | 只看该作者
大哥如果方便的话,能否下一次,找个板子把引脚改一下,就OK了.看看灯点的亮不,总觉得是QUARTUS II哪个地方设置的不对导致片子不工作啊

我在家调试,有万用表,就是没有示波器,悲催啊,但我分析时钟应该是有的,之前我下载了一个这样的程序,运行是正常的

`include "gen_divd.v"
`include "uart_x.v"

module uart_x_top(
                                        Resetb,
                                        Clkin,
                                        Txd
                                        /*
                                        //test
                                        TxFinishTS,
                                        XmitPlus,
                                        TxClkTS,
                                        Cnt,
                                        TxData
                                        */
                                );
        input Resetb,Clkin;
        output Txd;
        /*
        //test
        output TxFinishTS;
        output XmitPlus;
        output TxClkTS;
        output [1:0] Cnt;
        output [7:0] TxData;
        */
        reg XmitPlus;
        reg [7:0] TxData;
        reg [3:0] ByteCnt;
        reg [1:0] Cnt;
       
        wire TxFinish;
        wire TxClk;
       
        defparam Gen_TxClk.divdFACTOR=174,Gen_TxClk.divdWIDTH=7;//分频出115200的波特率
        gen_divd Gen_TxClk(.reset(Resetb),.clkin(Clkin),.clkout(TxClk));//端口名称关联

        uart_x UartTx(.Bclk(TxClk),.Resett(Resetb),.Txd(Txd),
                                .XmitCmdp(XmitPlus),.TxdBuf(TxData),.TxDone(TxFinish));

        always @ (posedge Resetb or posedge TxClk )
                if(Resetb)
                        begin
                        ByteCnt<=4'd0;
                        Cnt<=2'b0;
                        XmitPlus<=0;
                        end
                else//循环发送a-j,共10个字母
                        begin
                        Cnt<=Cnt+1'b1;
                        case(Cnt)
                        2'b00:
                                begin
                                XmitPlus<=1;
                                TxData<=8'h61+ByteCnt;
                                end
                        2'b01:
                                XmitPlus<=0;
                        2'b10:
                                begin
                                if(TxFinish)
                                        begin
                                        Cnt<=2'b0;
                                        ByteCnt<=ByteCnt+1'b1;
                                        if(ByteCnt>=9)
                                                ByteCnt<=4'b0;
                                        end
                                else
                                        Cnt<=2'b10;
                                end
                        endcase
                        end
        /*               
        assign TxFinishTS=TxFinish;
        assign TxClkTS=TxClk;
        */
endmodule

使用特权

评论回复
9
jlrhw|  楼主 | 2015-1-30 16:38 | 只看该作者
板子可以正常的给电脑串口发送数据

使用特权

评论回复
10
jlrhw|  楼主 | 2015-1-30 19:06 | 只看该作者
问题解决了,谢谢楼上的朋友,我重新建了一个工程,把所有的文件都复制进去,然后编译下载后,就可以正常运行了,我怀疑之前是做了一个MODELSIM的前级仿真,估计是把QUARTUS的某个设置给改了,导致出现问题的,但究竟是哪个设置现在还搞不清楚,如果大家知道的话还请指点下,谢谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

91

帖子

0

粉丝