AutoPilot高层次综合C算法设计技巧-移位寄存器
2010-06-22 17:43
288 查看
// Register-based shift register implementation using C
// for High-Level Synthesis with AutoESL : AutoPilot
#define SIZE 10
typedef int dType;
void shiftReg(dType din, dType *dout)
{
#pragma AUTOPILOT pipeline II=1
static dType regs[SIZE];
int i;
for (i = SIZE-1; i > 0; i--)
regs[i] = regs[i-1];
regs[0] = din;
*dout = regs[SIZE-1];
}
熟悉RTL设计的话,对这种C描述应该比较习惯,如果是纯软件开发人员刚开始接触这样的C代码估计够呛。
会觉得很别扭。
上面的C代码就是一个比较高效的移位寄存器的C语言实现,用高层次综合工具AutoPilot综合可以得到和手写
RTL(verilog和vhdl)效果一样的移位寄存器。
在这里:
1.
#pragma AUTOPILOT pipeline II=1
告诉综合工具让这个模块流水起来,并且达到每一个时钟周期进一个数据的吞吐率。
2.
Regs数组会被partition掉,综合成寄存器。
// for High-Level Synthesis with AutoESL : AutoPilot
#define SIZE 10
typedef int dType;
void shiftReg(dType din, dType *dout)
{
#pragma AUTOPILOT pipeline II=1
static dType regs[SIZE];
int i;
for (i = SIZE-1; i > 0; i--)
regs[i] = regs[i-1];
regs[0] = din;
*dout = regs[SIZE-1];
}
熟悉RTL设计的话,对这种C描述应该比较习惯,如果是纯软件开发人员刚开始接触这样的C代码估计够呛。
会觉得很别扭。
上面的C代码就是一个比较高效的移位寄存器的C语言实现,用高层次综合工具AutoPilot综合可以得到和手写
RTL(verilog和vhdl)效果一样的移位寄存器。
在这里:
1.
#pragma AUTOPILOT pipeline II=1
告诉综合工具让这个模块流水起来,并且达到每一个时钟周期进一个数据的吞吐率。
2.
Regs数组会被partition掉,综合成寄存器。
相关文章推荐
- 设计技巧1:策略模式 Strategy 把整个算法替换掉
- 设计技巧15:模板方法 Template Method 在一个方法中定义一个算法的骨架,而将一些步骤延迟的子类中,实现Ioc
- (算法设计技巧与分析)InsertionSort
- (算法设计技巧与分析)Permutationsi
- (算法设计技巧与分析)BinarySearchrec
- 算法设计技巧
- 算法设计技巧
- 【算法复习三】算法设计技巧与优化----各种背包问题总结
- C++算法设计技巧
- (算法设计技巧与分析)BottomUpSort
- (算法设计技巧与分析)QuickSort
- (算法设计技巧与分析)Dijkstra
- 算法设计技巧--离散暴力将时间将为O(0);
- 【算法复习三】算法设计技巧与优化----各种背包问题总结
- 【算法复习三】算法设计技巧与优化----算法设计技巧之中位数
- 华为FPGA设计高级技巧Xilinx篇---读书笔记之三综合运用
- 算法设计技巧与分析
- 【综合】设计移动App的十大技巧
- 数据结构与算法分析:算法设计技巧
- (算法设计技巧与分析)BubbleSort