首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | 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判断执行的办法转换,可是为了使代码正确,往往把上限社的比较大

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

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

这个是hdl不是c或其他上位机语言,一旦综合完成,生成固定的硬件电路后就不会因为你是几重循环来变化了。

使用while循环不是说在这里循环,而主要是简化书写便于理解。

你加if来判断也可以,你可以在是否加运行循环加条件。

[此贴子已经被作者于2007-10-15 11:29:27编辑过]

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm

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

那LS觉得硬件循环次数该怎么确定,如果是一个变量?

对于一个要使用类似与c语言的循环功能的数字电路时,你可以使用状态机啊!使用状态间循环的思路,然后再判断跳出。

使用的for循环只是一个表达,表达和实现是不同的,所以综合不了。

这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
-- 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很不错
呵呵,当你调用Delta时,自然可以编译了,关键是看能不能写出肯定的表达式,综合器才能认识得到。
这个版主不太冷 =========================== 我的中电网博客:http://blog.chinaecnet.com/u/20/index.htm
返回列表