首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何写代码减少逻辑单元的使用数量

如何写代码减少逻辑单元的使用数量

以下都是我在编程时发现的问题,总结一下,怕以后忘了,以我目前的水平不明白类似关键路径,组合数目什么高深理论,这都是我从实际中学到的,比看书学的印象深刻得多.慢慢来吧,我想我以后也会明白那些高级的东西了!
一....尽量不要使用"大于""小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.
     例程:always@(posedge clk)
   begin
    count1=count1+1;
   if(count1==10000000)
     feng=1;    //no_ring
    else if(count1==90000000)
     begin
      feng=0;   //ring
      count1=0;
    end
end            //这么写会用107个逻辑单元
// 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元
二.....一定要想尽办法减少reg寄存器的长度
     上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈!
三....case语句里一定要加default    if一定要加else
      如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.
     例如:case({a,b})
                  2'b11 e=b;
                 2'b10   e=a;   
             endcase
            //不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1
           //那么e要保存原来的值,就要在内部生成锁存器了.
四....尽量使用Case语句   而不是if--else语句
      复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延
用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑
五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里
      比如:always@(a or b)
                         begin
                                       out=(a&b&c);
                         end
继承事业,薪火相传
返回列表