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

改造不定次数循环

改造不定次数循环

i = 0;
  while ((sum_mag[wm-1-i]==sum_mag[wm-2-i])&& (max_exp>0))
  begin
   sum_mag[wm-1 : 0] = {sum_mag[wm-2 : 0],0}; // signed shift
   max_exp = max_exp-1;
   i = i+1;
  end

比如上面的代码,由于循环次数不确定,不能通过编译

一般是通过设置一个循环上限,用if判断执行的办法转换,可是为了使代码正确,往往把上限社的比较大

这样在无须执行的时候也要处理这多次循环,所以希望大家一起探讨如何优化这个代码?

回复:(caopengly)“这样在无须执行的时候也要处理这...

那LS觉得硬件循环次数该怎么确定,如果是一个变量?
-- File        : p2r_CordicPipe.vhd
function Delta(Arg : signed; Cnt : natural) return signed is
        variable tmp : signed(Arg'range);
        constant lo : integer := Arg'high -cnt +1;
    begin
        for n in Arg'high downto lo loop
            tmp(n) := Arg(Arg'high);
        end loop;
        for n in Arg'high -cnt downto 0 loop
            tmp(n) := Arg(n +cnt);
        end loop;
        return tmp;
    end function Delta;
如上使用function很不错
返回列表