嵌入式系统与SOC设计第4讲定制单用途处理器

Download Report

Transcript 嵌入式系统与SOC设计第4讲定制单用途处理器

第4课
定制单用途处理器
定制单用途处理器设计优化
RTL级定制单用途处理器设计
1
1.定制单用途处理器设计优化
算法程序的优化
FSMD图的 优化
Datapath数据通道的优化
FSM的优化
2
可能的优化环节
算法程序的优化
FSMD图的 优化
Datapath数据通道的优化
FSM的优化
3
算法程序的优化
通过分析程序寻找可能改善的方面

计算的数目

变量的大小

时间空间复杂度

所采用的操作
 乘法与除法运算非常耗时
4
算法程序的优化(续)
优化后的算法程序
初始算法程序
0: int x, y;
1: while (1) {
2: while (!go_i);
3: x = x_i;
4: y = y_i;
5: while (x != y) {
6:
if (x < y)
7:
y = y - x;
else
8:
x = x - y;
}
9: d_o = x;
}
用取模操作代替
减法运算来加速
程序
GCD(42, 8) - 9 次遍历完成循环
x and y 求值顺序如下 : (42, 8), (34,
8), (26,8), (18,8), (10, 8), (2,8), (2,6),
(2,4), (2,2).
0: int x, y, r;
1: while (1) {
2: while (!go_i);
// x must be the larger number
3: if (x_i >= y_i) {
4:
x=x_i;
5:
y=y_i;
}
6: else {
7:
x=y_i;
8:
y=x_i;
}
9: while (y != 0) {
10:
r = x % y;
11:
x = y;
12:
y = r;
}
13: d_o = x;
}
GCD(42,8) - 3 次遍历完成循环
x and y 求值顺序如下 : (42, 8),
(8,2), (2,0)
5
FSMD的优化
int x, y;
!1
1:
1
2:
original FSMD
optimized FSMD
int x, y;
!(!go_i)
2:
!go_i
2-J:
go_i
3:
x = x_i
4:
y = y_i
3:
!(x!=y)
5:
!go_i
x = x_i
y = y_i
5:
x!=y
6:
x<y
x<y
7: y = y -x
!(x<y
8: x =) x - y
7: y = y -x
x>y
8: x = x - y
6-J:
9:
d_o = x
5-J:
9:
1-J:
d_o = x
6
FSMD最优化 (续)
optimized FSMD
int x, y;
!1
1:
1
!(!go_i)
2:
original FSMD
int x, y;
消除 state 1 – 交易是一个常数值
2:
go_i
!go_i
合并状态 2和 2J – 之间没有循环操作
2-J:
3:
4:
y = y_i
!(x!=y)
x!=y
7:
x>y
y = y -x
8:
x=x-y
9:
d_o = x
!(x<y)
8: x = x - y
消除状态 5J、 6J – 其完成的交易分别
6-J:
已被state 7 和 state 8完成
5-J:
消除 state 1-J – 已在状态9中完成
9:
x<y
合并 5和 6 – 状态6的交易可以在状态5
完成
x<y
5:
合并状态 3和 4 – 赋值操作互相独立
6:
y = y -x
x = x_i
y = y_i
x = x_i
5:
7:
3:
!go_i
d_o = x
1-J:
7
数据通道的优化
功能单元的共享

1对1的映射没有必要

如果相同的操作发生在不同状态,可以共享一个单
独的功能单元
多功能单元

ALUs 支持不同的运算操作,可以在不同状态的操
作中共享
8
优化FSM
状态编码 State encoding



分配唯一位模式给FSM中每个状态
不同的状态编码会导致不同的状态寄存器,
且组合逻辑尺寸也会变化
状态编码可看成一个排序问题
状态最小化

将等价状态合并为单个状态
9
2.RTL级定制单用途处理器设计
基于时序的FSMD设计
总线桥设计举例
10
从RTL开始定制单用途处理器设计
C语言无法逐周期描述系统,但是FSMD模
型却可以描述系统逐周期时序,因此往
往设计着手点从FSMD开始。
很多情况下,设计重点在于系统的逐周期
时序。
11
举例: 4位总线到8位总线的总线桥设计
问题规范
发送
端
rdy_in
clock
data_in(4)
桥
为单用途处理器,可将两个4位输入转换
一个8位输出。其中每个4位数据通过
data_in进行输入,8位数据通过data_out
进行输出,rdy_in上的脉冲表示一个4位
数据的到来,rdy_out上的脉冲表示完成
转换.
rdy_in=0
rdy_out
接收
端
data_out(8)
Bridge
rdy_in=1
RecFirst4Start
data_lo=data_in
RecFirst4End
rdy_in=1
WaitFirst4
FSMD
rdy_in=0
WaitSecond4
rdy_in=0
rdy_in=1
RecSecond4Start
data_hi=data_in
rdy_in=0
Send8Start
data_out=data_hi &
data_lo
rdy_out=1
Send8End
rdy_out=0
rdy_in=1
RecSecond4End
Inputs
rdy_in: bit; data_in: bit[4];
Outputs
rdy_out: bit; data_out:bit[8]
Variables
data_lo, data_hi: bit[4];
12
RTL级定制单用途处理器设计(续)
Bridge
(a) Controller
rdy_in=0
WaitFirst4
rdy_in=1
rdy_in=1
RecFirst4Start
data_lo_ld=1
rdy_in=0
WaitSecond4
Send8Start
data_out_ld=1
rdy_out=1
rdy_in=0
rdy_in=1
RecSecond4Start
data_hi_ld=1
RecFirst4End
rdy_in=1
RecSecond4End
Send8End
rdy_out=0
rdy_in
rdy_out
clk
data_out
(b) Datapath
data_hi
data_lo
data_out
data_lo_ld
data_hi_ld
data_out_ld
to all
registers
data_in(4)
13
小结
定制单用途处理器任务




直接设计技术
可以用来执行某一算法
RTL级设计从FSMD开始
CAD 工具会带来极大的帮助
14