标题: 改造不定次数循环 [打印本页]
作者: graduate 时间: 2007-10-13 23:13 标题: 改造不定次数循环
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 时间: 2007-10-15 10:50
“这样在无须执行的时候也要处理这多次循环,所以希望大家一起探讨如何优化这个代码?”
这个是hdl不是c或其他上位机语言,一旦综合完成,生成固定的硬件电路后就不会因为你是几重循环来变化了。
使用while循环不是说在这里循环,而主要是简化书写便于理解。
你加if来判断也可以,你可以在是否加运行循环加条件。
[此贴子已经被作者于2007-10-15 11:29:27编辑过]
作者: graduate 时间: 2007-10-16 01:23 标题: 回复:(caopengly)“这样在无须执行的时候也要处理这...
那LS觉得硬件循环次数该怎么确定,如果是一个变量?
作者: caopengly 时间: 2007-10-16 22:16
对于一个要使用类似与c语言的循环功能的数字电路时,你可以使用状态机啊!使用状态间循环的思路,然后再判断跳出。
使用的for循环只是一个表达,表达和实现是不同的,所以综合不了。
作者: graduate 时间: 2007-10-30 02:10
-- 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很不错
作者: caopengly 时间: 2007-10-30 11:48
呵呵,当你调用Delta时,自然可以编译了,关键是看能不能写出肯定的表达式,综合器才能认识得到。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) |
Powered by Discuz! 7.0.0 |