这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » CPLD资源占用问题

共3条 1/1 1 跳转至

CPLD资源占用问题

菜鸟
2013-12-05 09:12:58     打赏

如下是写的一段发脉冲的程序,功能都是可以实现的,只是觉得是不是代码写得不好所以占用的资源较多,比如if判断太多了,希望大大们看看给点建议

module  pulse(sclk, over,DATA, DATA_LAST,diff,dire, AbsErr_flag, rest);
   input sclk;            //10M时钟
   input over;            //一次数据读取(含校验)结束标志,结束后维持一周期(0.4us)高电平
   input [16:0] DATA;     
   input [16:0] DATA_LAST;   
   input [6:0] AbsErr_flag;
   input rest;
   output diff;           
   output dire;          
   
   wire diff;            
   wire sclk;
   reg dire;
   reg [23:0] difcount;      
   reg exclude_flag;
 
    assign diff = ((difcount)&&(~over))?sclk:1'b0;   


 //脉冲输出,输出difcount个sclk(脉冲)
   always @(posedge over or negedge sclk or negedge rest)//(over|sclk))  
   begin
     if(rest == 1'b0)
     begin
        difcount = 24'd0;
     end
     else
     begin
          if(over)                           //上升沿只一次  
          begin 
             if((AbsErr_flag[6:3] == 0)&&exclude_flag) 
             begin
                 if(DATA > DATA_LAST)
                 begin        
                     if((~(DATA_LAST[16]|DATA_LAST[15]))&(DATA[16]&DATA[15]))
                     begin
                         dire =1'b0;
                         difcount = 24'h20000-DATA+DATA_LAST;
                     end
                     else
                     begin
                         dire = 1'b1;               
                         difcount = DATA-DATA_LAST;       
                     end
                 end
                else 
                begin    
                    if((~(DATA[16]|DATA[15]))&(DATA_LAST[16]&DATA_LAST[15])) 
                    begin
                        dire =1'b1;
                        difcount = 24'h20000-DATA_LAST+DATA;
                    end        
                    else
                    begin
                    dire = 1'b0;             
                    difcount = DATA_LAST-DATA;
                    end
                end 
          end           
      end  
    else 
    begin 
           difcount <= (difcount)?(difcount-1'b1):0; //difcount自减至0 
    end    
  end
end

always @(negedge over or negedge rest)
begin
 if(rest == 1'b0)
 begin  
     exclude_flag = 0;
 end
 else
 begin
      exclude_flag = 1;  
 end
end  

endmodule


这段代码加到主工程里多占了200多的逻辑单元,但是拿出来建工程编译后看好像没那么多。另外附上warnings:

Warning (10240): Verilog HDL Always Construct warning at pulse.v(23): inferring latch(es) for variable "dire", which holds its previous value in one or more paths through the always construct

Warning: Node "pulse:inst|dire" is a latch

Info: Assuming node "rest" is a latch enable. Will not compute fmax for this pin.

Info: Detected gated clock "pulse:inst|always0~1" as buffer
Info: Detected ripple clock "pulse:inst|exclude_flag" as buffer
Info: Detected gated clock "pulse:inst|always0~0" as buffer
Info: Detected ripple clock "pulse:inst|difcount[23]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[22]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[21]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[20]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[19]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[18]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[17]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[16]" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~3" as buffer
Info: Detected ripple clock "pulse:inst|difcount[15]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[14]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[13]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[12]" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~2" as buffer
Info: Detected ripple clock "pulse:inst|difcount[11]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[10]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[9]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[8]" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~1" as buffer
Info: Detected ripple clock "pulse:inst|difcount[7]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[6]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[5]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[4]" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~0" as buffer
Info: Detected ripple clock "pulse:inst|difcount[3]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[2]" as buffer
Info: Detected ripple clock "pulse:inst|difcount[1]" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~6" as buffer
Info: Detected gated clock "pulse:inst|WideOr0~5" as buffer
Info: Detected ripple clock "pulse:inst|difcount[0]" as buffer
Info: Detected ripple clock "send:inst12|AbsErr_flag[3]" as buffer
Info: Detected ripple clock "send:inst12|AbsErr_flag[4]" as buffer
Info: Detected ripple clock "send:inst12|AbsErr_flag[5]" as buffer
Info: Detected ripple clock "send:inst12|AbsErr_flag[6]" as buffer
Info: Detected ripple clock "send:inst12|over" as buffer
Info: Detected gated clock "pulse:inst|dire~3" as buffer
Info: Detected gated clock "pulse:inst|diff" as buffer
Warning: Circuit may not operate. Detected 201 non-operational path(s) clocked by clock "sclk" with clock skew larger than data delay. See Compilation Report for details.




关键词: CPLD 资源    

高工
2013-12-05 10:08:48     打赏
2楼
看了看楼主的代码,感觉规范性不太好,阻塞赋值和非阻塞赋值混用,还有触发条件也比较乱,比如这一句,always @(posedge over or negedge sclk or negedge rest),楼主可以在这方面注意下。

高工
2013-12-05 10:41:03     打赏
3楼
看了,觉得好长,完毕

共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]