[资料] VIVADO implementation 时闪退,求解!!急

[复制链接]

等待验证会员

发表于 2017-3-4 11:25:41   260 查看 1 回复 显示全部楼层 倒序浏览
分享
如题,synthesis时是可以正常通过的但是implementation就直接闪退了,没有出错提示,完全不知道该往哪个方向修改,求大神指点。
以下是代码,实现的功能是用串口接收数据,作为计数初值,再用计数器计数到零并在数码管上显示计数值,计数结束后led灯灭。
工程文件超过2M,受限没法上传,抱歉了。
顶层代码:
  1. module uart_top(
  2.     input clk,
  3.     input reset,
  4.     output [6:0]seg7,
  5.     output [3:0]an,
  6.     input rxd,            
  7.     output led
  8.     );
  9.    
  10.      
  11.    
  12.         reg [7:0]delaysec;
  13.         wire RxClk;//接收时钟为波特率9600的16倍
  14.         wire RxDone;
  15.         wire [7:0]RevData;
  16.         wire [7:0]countnum1;
  17.         
  18.         
  19.         defparam U0.divdFACTOR=5208,U0.divdWIDTH=13;//分频出9600的波特率
  20.         gen_divd U0(
  21.         .reset(reset),
  22.         .clkin(clk),
  23.         .clkout(TxClk)
  24.         );
  25.         
  26.                  
  27.                   defparam U6.divdFACTOR=325,U6.divdWIDTH=9;//波特率9600的16倍
  28.                         gen_divd2 U6(
  29.                         .reset(reset),
  30.                         .clkin(clk),
  31.                         .clkout(RxClk)
  32.                         );
  33.                         
  34.                         rxd_ip U7(
  35.                         .clk(RxClk),
  36.                         .reset(reset),
  37.                         .rxd(rxd),
  38.                         .rxdready(RxDone),
  39.                         .rxddata(RevData)
  40.                         );  
  41.                         
  42.                    counter100 countrev(
  43.                            .clk(RxClk),
  44.                            .totalcount(delaysec),
  45.                             .reset(reset),
  46.                            .led(led),
  47.                           .rxdone(RxDone),
  48.                           .countnum(countnum1)
  49.                            );  
  50.                            
  51.                             displaycount disp(.count(countnum1),.reset(reset),.seg(seg7),.an(an),.clk(clk));
  52.                            
  53.                     always@(posedge RxClk or negedge reset)
  54.                     begin
  55.                     if(!reset)delaysec<=0;
  56.                     else
  57.                     begin
  58.                     delaysec<=RevData-8'd48;
  59.                     end
  60.                     end         
  61.             
  62. endmodule
复制代码
底层
  1. module counter100(
  2.     input clk,
  3.     input [7:0]totalcount,
  4.     input reset,
  5.     input rxdone,
  6.     output led,
  7.     output reg [7:0]countnum
  8.     );
  9.    
  10.    parameter load=2'b01;
  11.    parameter change=2'b11;
  12.   
  13.     reg [26:0]count1s=0;
  14.     wire count1s_en;
  15.     parameter div1s=9600;
  16.     reg [1:0]state;
  17.    
  18.    
  19.     always@(posedge clk or negedge reset)
  20.   begin
  21.     if(!reset)
  22.     count1s<=27'b0;
  23.     else
  24.      begin
  25.       if(count1s==div1s)
  26.       begin
  27.       count1s<=27'b0;
  28.       end
  29.       else
  30.         count1s<=count1s+1'b1;
  31.       end  
  32.     end
  33.    
  34. assign count1s_en=count1s==0;

  35. always@(posedge clk or negedge reset)
  36. begin
  37. if(!reset)
  38. begin
  39. countnum<=8'd0;
  40. state<=load;
  41. end
  42. else
  43.    case(state)
  44.         load:
  45.            begin
  46.            if(rxdone==1)
  47.            begin
  48.            state<=change;
  49.            countnum<=totalcount;
  50.            end
  51.            else state<=load;
  52.            end
  53.      
  54.         change:
  55.             begin
  56.               if(count1s_en)
  57.               begin
  58.               if(countnum==0)
  59.               begin
  60.               countnum<=1'b0;
  61.               state<=load;
  62.               end
  63.               else
  64.               begin
  65.               countnum<=countnum-1'b1;
  66.               state<=change;
  67.               end
  68.               end
  69.             end
  70.          default:state<=load;   
  71.     endcase   
  72. end

  73. assign led=~(countnum==1'b0);

  74. endmodule
复制代码
  1. module rxd_ip(
  2.     input clk,//16倍的波特率
  3.     input reset,
  4.     input rxd,
  5.     output reg rxdready,//接收一字节完毕信号
  6.     output reg [7:0] rxddata
  7.     );
  8.    
  9.     reg RxdIner;
  10.     reg [3:0]cnt16;//每周期采样16次
  11.     reg [3:0]cnt8;//接收数据的位数计算
  12.     reg [3:0]nState,cState;
  13.     reg [7:0]RxDataBuf;
  14.    
  15.     parameter        Idel=4'b0000,
  16.                RevStartBit=4'b0001,
  17.                RevDataBit=4'b0010,
  18.                RevStopBit= 4'b0100,
  19.                RevDone   = 4'b1000;
  20.         //D触发器,去除数据线上的干扰              
  21. always @(posedge clk or negedge reset)begin
  22.     if(!reset)
  23.         RxdIner<=1'b1;
  24.     else RxdIner<=rxd;
  25. end  

  26. /*以下为三段式状态机*/
  27. //状态转移
  28. always @(posedge clk or negedge reset)begin
  29.     if(!reset)
  30.         cState<=Idel;
  31.     else
  32.         cState<=nState;
  33. end

  34. //状态转移条件判断
  35. always @(reset or cState or RxdIner or cnt16 or cnt8)begin
  36.     if(!reset)
  37.      nState=Idel;
  38.     else
  39.         case(cState)
  40.         Idel:
  41.             begin
  42.                 if(RxdIner==0)
  43.                     nState=RevStartBit;
  44.                 else nState=Idel;
  45.             end   
  46.         RevStartBit:
  47.             begin
  48.                 if(cnt16<15)//只要有输入为高,立即跳到Idle状态
  49.                     begin
  50.                     if(RxdIner==1'b0)
  51.                         nState=RevStartBit;
  52.                     else
  53.                         nState=Idel;
  54.                     end
  55.                  else nState=RevDataBit;
  56.             end
  57.         RevDataBit:
  58.             begin
  59.                 if(cnt8==4'd8 && cnt16==4'd15)//若接收完8个bits后停止
  60.                     nState=RevStopBit;
  61.                 else nState=RevDataBit;   
  62.             end
  63.         RevStopBit:
  64.             begin     
  65.                if(cnt16==15)
  66.                     nState=RevDone;
  67.                else
  68.                     nState=RevStopBit;
  69.             end
  70.         RevDone:
  71.             begin
  72.                 if(cnt16==15)
  73.                     nState=Idel;
  74.                 else
  75.                      nState=RevDone;
  76.             end
  77.        default:nState=4'dx;     
  78.      
  79.     endcase
  80. end

  81. //各个状态的时序控制
  82. always @(posedge clk or negedge reset)begin
  83.     if(!reset)
  84.      begin
  85.            cnt8<=4'b0;
  86.            cnt16<=4'b0;
  87.            rxdready<=0;
  88.             RxDataBuf<=8'b0;
  89.             rxddata<=8'b0;
  90.      end
  91.     else
  92.         case(nState)
  93.             Idel:
  94.                 begin
  95.                     cnt8<=4'b0;
  96.                     cnt16<=4'b0;
  97.                     rxdready<=0;
  98.                 end  
  99.             RevStartBit:
  100.                 begin
  101.                     cnt16<=cnt16+1;
  102.                     if(cnt16>=15)
  103.                         cnt16<=0;
  104.                 end
  105.             RevDataBit:
  106.                 begin
  107.                     cnt16<=cnt16+1;
  108.                     if(cnt16==7)//在中间采样
  109.                        begin
  110.                             RxDataBuf[cnt8]<=RxdIner;
  111.                             cnt8<=cnt8+4'd1;
  112.                        end
  113.                      else
  114.                         begin
  115.                         if(cnt16>=4'd15)
  116.                             cnt16<=4'd0;
  117.                         end
  118.                 end
  119.             RevStopBit:
  120.                 begin
  121.                     cnt8<=4'd0;
  122.                     rxdready<=1'b1;
  123.                     cnt16<=cnt16+4'b1;
  124.                     if(cnt16>=4'd15)
  125.                       cnt16<=4'd0;   
  126.                 end
  127.             RevDone:
  128.                 begin
  129.                     rxdready<=1'b0;
  130.                     rxddata<=RxDataBuf;
  131.                     cnt16<=cnt16+4'b1;
  132.                     if(cnt16>=4'd15)
  133.                         cnt16<=4'd0;   
  134.                 end     
  135.         endcase
  136. end

  137. endmodule
复制代码
  1. module displaycount(
  2.     input [7:0]count,
  3.     input reset,
  4.     input clk,
  5.     output reg [6:0]seg,
  6.     output reg [3:0]an
  7.     );
  8.         parameter        zero        =        7'b100_0000;
  9.         parameter    one   =    7'b111_1001;
  10.         parameter    two     =    7'b010_0100;
  11.         parameter    three   =    7'b011_0000;
  12.         parameter    four    =    7'b001_1001;
  13.         parameter    five    =    7'b001_0010;
  14.         parameter    six     =    7'b000_0010;
  15.         parameter    seven   =    7'b111_1000;
  16.         parameter    eight   =    7'b000_0000;
  17.         parameter    nine    =    7'b001_0000;
  18.         
  19.         parameter TIMES=5000;
  20.         reg [26:0]count_times=27'b0;
  21.         
  22.         reg [3:0]segbuf0,segbuf1,segbuf2;
  23.         reg [6:0]seg0,seg1,seg2;
  24.         reg [1:0]dspcom=2'b0;
  25.       always@(posedge clk or negedge reset)
  26.        if(!reset)
  27.         begin
  28.         segbuf0<=7'b0;
  29.         segbuf1<=7'b0;
  30.         segbuf2<=7'b0;
  31.         end
  32.        else
  33.         begin
  34.         segbuf0<=count%10;
  35.         segbuf1<=count/10%10;
  36.         segbuf2<=count/100;
  37.         end
  38.         
  39.         always@(posedge clk)
  40.                 case(segbuf0)
  41.                     0:seg0 = zero    ;
  42.                     1:seg0 = one    ;
  43.                     2:seg0 = two   ;
  44.                     3:seg0 = three ;
  45.                     4:seg0 = four  ;
  46.                     5:seg0 = five  ;
  47.                     6:seg0 = six   ;
  48.                     7:seg0 = seven ;
  49.                     8:seg0 = eight ;
  50.                     9:seg0 = nine  ;
  51.                     default:seg0 = zero;
  52.                 endcase
  53.                
  54.           always@(posedge clk)
  55.           begin
  56.                   case(segbuf1)
  57.                                   0:seg1 = zero   ;
  58.                                   1:seg1 = one    ;
  59.                                   2:seg1 = two   ;
  60.                                   3:seg1 = three ;
  61.                                   4:seg1 = four  ;
  62.                                   5:seg1 = five  ;
  63.                                   6:seg1 = six   ;
  64.                                   7:seg1 = seven ;
  65.                                   8:seg1 = eight ;
  66.                                   9:seg1 = nine  ;
  67.                                   default:seg1 = zero;
  68.                    endcase
  69.             end   
  70.          
  71.            always@(posedge clk)
  72.             begin
  73.                       case(segbuf2)
  74.                                       0:seg2 = zero   ;
  75.                                       1:seg2 = one    ;
  76.                                       2:seg2 = two   ;
  77.                                       3:seg2 = three ;
  78.                                       4:seg2 = four  ;
  79.                                       5:seg2 = five  ;
  80.                                       6:seg2 = six   ;
  81.                                       7:seg2 = seven ;
  82.                                       8:seg2 = eight ;
  83.                                       9:seg2 = nine  ;
  84.                                       default:seg2 = zero;
  85.                        endcase
  86.               end
  87.               
  88.               always@(posedge clk)
  89.               begin
  90.               case(dspcom)
  91.                0:begin
  92.                  an=4'b1110;
  93.                  seg=seg0;
  94.                  end
  95.                1: begin
  96.                  an=4'b1101;
  97.                  seg=seg1;
  98.                   end
  99.                2:begin
  100.                 an=4'b1011;
  101.                 seg=seg2;
  102.                 end
  103.                default:begin
  104.                an=4'b1111;
  105.                seg=7'b0;
  106.                end
  107.              endcase  
  108.               end   
  109.               
  110.             always@(posedge clk)
  111.               begin
  112.               count_times=count_times+1'b1;
  113.               if(count_times==TIMES)
  114.                 begin
  115.                 count_times<=27'b0;
  116.                 dspcom<=dspcom+1'b1;
  117.                   if(dspcom==2'd2)dspcom<=2'b0;
  118.                 end
  119.             end         
  120. endmodule
复制代码


奖励2积分

实习生

发表于 2017-3-7 12:30:40  

PCB在线计价下单

板子大小:

cm
X
cm

层数:

2

板子数量:

10

厚度:

1.6
换另外一个工程试一下,如果所有的工程都闪退,那就是软件自身的问题了,检查一下license
回复

点赞

高级模式
您需要登录后才可以回帖 登录 | 注册

专家问答 查看更多>>
关闭

站长推荐 上一条 /7 下一条

小黑屋|手机版|Archiver| 电子发烧友 ( 粤ICP备14022951号-2 )     

GMT+8, 2017-5-26 00:04 , Processed in 0.191763 second(s), 15 queries , Memcache On.

微信扫描
快速回复 返回顶部 返回列表
-

推荐专区

技术干货集中营

专家问答

用户帮助┃咨询与建议┃版主议事

我的提问

工程师杂谈

工程师创意

工程师职场

论坛电子赛事

社区活动专版

发烧友活动

-

嵌入式论坛

单片机/MCU论坛

FPGA|CPLD|ASIC论坛

DSP论坛

嵌入式系统论坛

-

电源技术论坛

电源技术论坛

-

硬件设计论坛

电路设计论坛

电子元器件论坛

控制|传感

总线技术|接口技术

-

测试测量论坛

LabVIEW论坛

Matlab论坛

测试测量技术专区

仪器仪表技术专区

-

EDA设计论坛

multisim论坛

PCB设计论坛

proteus论坛|仿真论坛

EasyEDA-中国人自已的EDA工具

-

综合技术与应用

电机控制

智能电网

光电及显示

参考设计中心

汽车电子技术论坛

医疗电子论坛

-

开源硬件

树莓派论坛

智能硬件论坛

开发快智能硬件开发平台

Intel物联网开发者专区

Waveshare

乐美客SBC专区

Arduino论坛

BeagleBone论坛

机器人论坛

创客神器NanoPi

小钢炮CANNON

比派科技banana pi专区

-

无线通信论坛

无线通信技术专区

天线|RF射频|微波|雷达技术

-

IC设计论坛

芯片测试与失效分析

Mixed Signal/SOC[数模混合芯片设计]

Analog/RF IC设计

设计与制造封装测试

-

个人版区

阿东Verilog技术专版

直流马达驱动电路设计

LabVIEW英雄联盟

特权同学FPGA专区

-

厂商专区

灵动微电子 MM32

盈鹏飞嵌入式

TI论坛

TI Deyisupport社区

芯灵思嵌入式论坛

Tisan

米尔科技

庆科社区

WIZnet技术专区

Cypress技术论坛

飞凌嵌入式

Qualcomm技术论坛

英创嵌入式

机智云GoKit论坛

-

检测技术与质量

电磁兼容(EMC)设计与整改

安规知识论坛

检测与认证

-

消费电子论坛

手机技术论坛

平板电脑/mid论坛

音视/视频/机顶盒论坛

-

电子论坛综合区

聚丰众筹官方社区

新人报道区

聚丰供应链

-

论坛服务区

-

供求信息发布

供需广告

招聘┃求职发布区

电子展览展会专区