- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我正在尝试使用 GAUT 工具综合以下 C 代码: #define N 16 int main (const int tab[N], int* out) { // static const int
我是一名优秀的程序员,十分优秀!