gpt4 book ai didi

c - GAUT HLS工具错误: "No alternatives to process, unable to select best one"

转载 作者:行者123 更新时间:2023-11-30 18:58:41 25 4
gpt4 key购买 nike

我正在尝试使用 GAUT 工具综合以下 C 代码:

#define N 16


int main (const int tab[N], int* out)
{

// static const int tab[N] = {98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98};


int k = 0, i=1;

for( i = 1; i < N; i++)
{

// invariant : k est l'indice du plus petit
// élément de x[0..i-1]
if(tab[i] < tab[k])
k = i;
}

*out = tab[k];
return 0;
}

查找数组中最小值的简单程序。它成功编译,生成一个看起来很诚实的 DFG。但是,当我尝试合成时,出现以下错误:“没有替代方案,无法选择最佳方案”因此无法继续执行流程。

有谁知道问题出在哪里吗?我也面临着其他这样的小型测试程序。希望有专业人士解答。

谢谢。

最佳答案

由于它被标记为 VHDL,因此也许值得查看直接 VHDL 端口,完全绕过该工具。这只花了几分钟,分为三个部分:

1) VHDL 有一个怪癖,即要使用数组作为端口参数,它必须是命名类型 (int_array)。 (C 在传递数组方面有一个不同的怪癖:它没有,而是传递一个指针)

package Types is
type int_array is array (natural range <>) of integer;
end Types;

package body Types is
end Types;

2) 完成工作的部分:我将 C 代码作为注释保留下来,以说明它们的对应程度:

use Work.Types.all;

-- int main (const int tab[N], int* out)
entity MinArray is
Generic ( N : Natural);
Port ( Tab : in int_array;
Output : out integer );
end MinArray;

architecture Behavioral of MinArray is
-- int k = 0, i=1;
-- for( i = 1; i < N; i++)
-- {
-- if(tab[i] < tab[k])
-- k = i;
-- }
-- *out = tab[k];
-- return 0;
--}
begin
Process(Tab) is
variable k : natural;
begin
k := 1;
for i in tab'range loop
if tab(i) < tab(k) then
k := i;
end if;
end loop;
Output <= tab(k);
end process;
end Behavioral;

3)测试工具:

  use Work.Types.all;

ENTITY tester IS
Port ( Minimum : out integer );
END tester;

ARCHITECTURE behavior OF tester IS

--#define N 16
-- static const int tab[N] = {98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98};

constant N : natural := 16;
constant tab : int_array (1 to N) := (98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98 );

BEGIN
uut: entity work.MinArray
Generic Map (N => N)
PORT MAP(
Tab => Tab,
Output => Minimum );

END;

请注意,这一切都可以在 Xilinx XST 中综合,

Advanced HDL Synthesis Report

Macro Statistics
# RAMs : 1
32x32-bit single-port distributed Read Only RAM : 1
# Comparators : 15
32-bit comparator greater : 15
# Multiplexers : 32
1-bit 2-to-1 multiplexer : 24
2-bit 2-to-1 multiplexer : 1
3-bit 2-to-1 multiplexer : 4
4-bit 2-to-1 multiplexer : 3

但是(因为输入表是一个常量数组)上述所有硬件在优化阶段都消失了。

现在,高级综合中重要的事情之一是探索不同的数据类型,例如不同的字宽;例如存储测试数据所需的15位字。为了探索这一点,我们只需修改“Types”包,如下所示:

type small_int is range -16384 to 16383;
type int_array is array (natural range <>) of small_int;

我还将输出端口类型更改为small_int。从综合报告中我们可以看到,硬件使用量也相应减少了。

Macro Statistics
# RAMs : 1
32x15-bit single-port distributed Read Only RAM : 1
# Comparators : 15
15-bit comparator greater : 15
# Multiplexers : 32
1-bit 2-to-1 multiplexer : 24
2-bit 2-to-1 multiplexer : 1
3-bit 2-to-1 multiplexer : 4
4-bit 2-to-1 multiplexer : 3

所以也许一个问题是:C 工具使探索设计空间(如自定义字宽)变得容易多少?

关于c - GAUT HLS工具错误: "No alternatives to process, unable to select best one",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15204541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com