shiweicl1314 发表于 2012-5-21 11:36:28

FPGA优化结果占用零资源问题

我设计了一个LCD1602的程序,但是优化结果占用零个资源,我查看RTL的确生成了实际复杂的电路出来,包括输入输出端口都存在,就是不占用一个LE,下载到板子中也没反应,求高人指点,小弟不胜感激。



module lcd(clk,LCD_Rs,LCD_Rw,LCD_En,LCD_Data);
input clk;
output LCD_Rs,LCD_Rw,LCD_En;
output LCD_Data;
reg LCD_Rs,LCD_En;
regLCD_Data;


reg DIV_Clk;
regDIV_Cunt;
always@(posedge clk)
begin   
   
   DIV_Cunt =DIV_Cunt +1'b1;
   if(DIV_Cunt==6'b111111)DIV_Clk =~DIV_Clk;
end   


regsetp;
regCtrl;
always@(posedge DIV_Clk)
begin

   case(setp)
   
   8'd0:
          begin
            
             LCD_Rs =1'b0;
             case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h06;
               2'd2: LCD_En =1'b1;
             endcase
          end
         
   8'd1:
          begin
            
             case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h0c;
               2'd2: LCD_En =1'b1;
             endcase
          end
         
   8'd2:
          begin
            
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h14;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd3:
         begin
   
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h38;
               2'd2: LCD_En =1'b1;
            endcase
         end
         
   8'd4:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h80;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd5:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="w" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd6:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h81;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd7:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="w" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end   
         
   8'd8:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h82;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd9:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="w" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end         
                              
   8'd10:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h83;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd11:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="." +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd12:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h84;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd13:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="s" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd14:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h85;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd15:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="h" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end      
         
   8'd16:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h86;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd17:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="i" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd18:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h87;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd19:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="w" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd20:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h88;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd21:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="e" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd22:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h89;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd23:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="i" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd24:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h8a;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd25:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="." +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd26:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h8b;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd27:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="c" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd28:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h8c;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd29:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="o" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd30:
          begin
            LCD_Rs =1'b1;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data =8'h8d;
               2'd2: LCD_En =1'b1;
            endcase
          end
         
   8'd31:
          begin
            LCD_Rs =1'b0;
            case(Ctrl)
         
               2'd0: LCD_En =1'b0;
               2'd1: LCD_Data ="m" +8'h30;
               2'd2: LCD_En =1'b1;
            endcase
          end                                    
   
   endcase
   
   
   
   Ctrl =Ctrl +1'b1;
   
   if(Ctrl==2'd3)
   begin
         setp =setp +1'b1;
         Ctrl =2'd0;
         if(setp >8'd32)setp =8'd32;
   end
   
end

assign LCD_Rw =1'b0;

endmodule

shiweicl1314 发表于 2012-5-21 11:40:58

回复 1# shiweicl1314


      if(Ctrl==2'd3)
   begin
         setp =setp +1'b1;
         Ctrl =2'd0;
         //if(setp >8'd32)setp =8'd32;
   end

   我将最下面那条语句注视掉后,资源占用就正常了,但是这样的结果就不是我想要的了。

shiweicl1314 发表于 2012-5-21 11:50:58

问题已经解决了,
页: [1]
查看完整版本: FPGA优化结果占用零资源问题