P2 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计
层次化结构设计既是一种设计方法,
更是一种设计思想。
设计的层次可以从两个不同的角度来表示:系统的结构层次和系统的性能层次。
一般来说,一个数字系统可以分为这样的 6个层次:
系统级、芯片级、寄存器级、门级、
电路级和硅片级。
P3 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计表 9,1 设计的层次系统层次 性能描述 结构模块系统 系统功能描述(文字) 计算机、交换机等芯片 算法描述 处理器,R A M,R O M,并行接口等寄存器 数据流描述 寄存器,A L U,计数器、多路选择器等门 布尔方程 与门、或门、异或门、基本触发器等电路 微分方程 由晶体管、电阻、电容等组成的电路硅片 电子 / 空穴运动方程 硅片上不同形状的区域
P4 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计
系统结构的分解
由于系统结构是分层次的,这意味着在系统设计过程中,必然伴随着对于系统的分解 。
整个系统就是由不同层次上的各种模块的连接而组成的。
P5 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计
在这样的树形结构中,应该包括两种基本的描述。
一种是表示模块之间连接的,结构描述,,另一种是表示模块性能的性能描述。
由于每一个上层模块都是由若干下层模块的连接构成的,所以性能描述一般只用于对树形结构中的叶子模块的描述,而不论这个叶子本身是处于哪一个层次。
P6 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计
对于这样的树形结构的系统,存在着两种设计思想,或者说设计方法,那就是,自顶向下,( Top –down)设计和,自底向上,( Bottom-up)设计。
自顶向下的设计,强调的是在进行每一次的分解时,都是要从保证系统性能指标的实现,而不是考虑现在已经存在什么基本的模块。
自底向上的设计仍然是从系统的,根,
出发,仍然是要满足整体的功能。但是,
在考虑系统分解的时候,要选择那些可用的模块或部件。
P7 北京邮电大学 huimin@bupt.edu.cn2009-8-21
层次化结构设计
自顶向下的设计强调是性能的最佳,
自底向上强调的是设计的经济性。实际的设计往往是这两种设计方法的结合。也就是性能要求和经济要求的结合。
在使用大规模集成电路时,特别是使用可编程逻辑器件进行设计时,自顶向下的设计就会有更多的优点。
P8 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
自顶向下设计方法的基本设计过程
自顶向下设计方法的基本设计过程。可以分为:系统性能描述、
系统结构分解、产生系统结构模型、描述叶子模块、逻辑综合产生门级实现。
P9 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
系统性能描述
设计从系统的功能和性能要求开始。
首先要将系统的功能要求转换为用
VHDL对系统进行的性能描述。然后,
对这个描述进行模拟。
这个过程有可能要反复进行:可以修改对系统的性能描述,也可能是修改对于系统要求的文字叙述。
P10 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
系统结构分解
下一步,则是对系统进行分解,将系统分解为若干子系统,子系统又可以再分解为若干模块。这样的分解可以一层一层的进行下去,直到树形结构的末端,即叶子模块。
这时,可以用 VHDL的结构描述能力,
完成系统和子系统的结构描述。
P11 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
对叶子模块进行数据流描述
叶子模块,也是构成系统的最基本的模块。对于这样的模块,应该用数据流进行描述。因为数据流的描述更加接近模块的物理实现,更加能体现设计者的设计能力和运用设计者的设计经验。用数据流描述的模块,经过逻辑综合工具软件的处理后,会有较好的设计效果。
也可以使用系统提供的基本模块作为叶子模块。
P12 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
逻辑综合
经过以上步骤所得到的 VHDL描述,可以直接由逻辑综合工具来产生门级的描述。
有经验的设计人员,可以看到设计结果在逻辑器件中的分布,甚至进行适当的调整。
P13 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
数字系统的基本划分
对于一般的数字系统,往往可以将系统划分为两个部分:控制部分和处理部分。
控制部分是数字系统的核心,控制部分一般就是一个时序机,或者象许多资料上所说的是一种有限状态机。
P14 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
时序机也可以使用数据流描述。使用数据流描述的时序机的模型如下图所示,即可以将时序计划分为
,记忆部件,和,组合逻辑部件,。
P15 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
例 9.1 对以下的时序机用数据流进行描述:
时序机有两个输入 x和 y,一个输出 z。
如果在 x输入检测到 110序列,则输出
z就等于 y输入的非,否则,输出 z等于 0。
这个时序机只需要 3个状态:
状态 a:既是起始状态,也是 x端收到
110序列后,回到的状态;
状态 b:收到一个有效的输入,1”;
状态 c:收到两个有效输入,11”。
P16 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
例 9.1的状态表和状态转移表x
S
0 1
a a / 0 b / 0
b a / 0 c / 0
c a / y c / 0
x
10 QQ
0 1
00 0 0 / 0 0 1 / 0
01 0 0 / 0 1 0 / 0
10 0 0 / y 1 0 / 0
由状态转移表,可以写出时序机的状态方程和输出方程:
1n
1Q
=x n
0Q
n
1Q
1n
0Q
=x n
0Q +x
n
1Q
z = x y n0Q
这些方程时,就是对于时序机进行数据流描述的基础。
P17 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
这个时序机的模型也是两层结构:
上层是时序机的结构描述,下层的描述有两个:对组合电路的描述以及对记忆部件的描述。
时序机、组合电路、记忆部件要分别定义各自的 ENTITY部分。
P18 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
时序机的结构描述:
ENTITY fsm IS
PORT ( x,y,clk,IN BIT; z,OUT BIT);
END fsm
ARCHITECTURE structural OF fsm IS
COMPONENT logical_part
PORT(in0,in1,q0,q1:IN BIT; d0,d1,OUT BIT);
END COMONENT;
COMPONENT memory_part
PORT(d_in0,d_in1,clk:IN BIT;d_out0,d_out1,OUT
BIT);
END COMONENT;
SIGNAL IS1,IS2,IS3,IS4,BIT ;
BEGIN
c1:logical_part PORT MAP (x,y,IS2,IS3,IS4 z );
c2:memory_part PORT MAP (IS3,IS4,clk,IS1,IS2) ;
END structural ;
P19 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
组合逻辑部分的数据流描述:
ENTITY logical_part IS
PORT (in0,in1,q0,q1,IN BIT; d0,d1,
OUT BIT);
END logical_part;
ARCHITECTURE dataflow OF logical_part IS
BEGIN
do <= (in0 AND q0) OR (x AND q1) ;
d1 <= (NOT q0) AND (NOT q1) AND in_0 ;
out1 <= (NOT in_0) AND (NOT in_1) AND q0 ;
END dataflow;
P20 北京邮电大学 huimin@bupt.edu.cn2009-8-21
自顶向下设计方法
记忆部件的数据流描述,实际上就是两个 D触发器的数据流描述:
ENTITY memory_part IS
PORT(d_in0,d_in1,clk,IN BIT; d_out0,
d_out1,OUT BIT);
END memory_part;
ARCHITECTURE dataflow OF memory_part IS
BEGIN
BLOCK (clk ='1' AND clk'EVENT)
BEGIN
d_out0 <= GUARDED d_in0 ;
d_out1 <= GUARDED d_in1 ;
END BLOCK;
END dataflow;
P21 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
设计要求
复数运算器应能完成 3种运算复数运算:复数加法、复数减法、复数乘法。
操作数的位数是 8位。即复数的实数和虚数都是 8位。
设两个复数的实部和虚部分别是 A,B和 C,D,
3种复数运算的操作是:
复数加法,(A+Bi)+(C+Di)=(A+C)+(B+D)i
复数减法,(A+Bi)-(C+Di)=(A-C)+(B-D)i
复数乘法,(A+Bi)(C+Di)=(AC-BD)+(AD+BC)i
P22 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
确定系统接口
首先要决定系统的输入和输出需要哪些信号,分别是什么类型。完成系统整体接口的设计。
复数运算器采用并行和串行相结合的方式。
运算的具体操作采用并行方式,也就是加法器、减法器本身采用并行结构。
但是整个的运算过程,采用串行方式。
例如复数加法,实部加实部,虚部加虚部是按串行的方式来进行。
P23 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
输入的数据线是 8位。输入数据命名为 Din。
两个复数共有 4个 8位数据需要输入,
也就需要控制 4个数据输入的使能信号,控制 4个数据的依次输入。这 4个使能信号分别命名为,latchar,
latchai,latchbr,latchbi。
输出的结果也包括复数的实部和虚部,
这两部分数据也采用串行的输出方式,
这样,还需要一个输出选择的控制信号 resultse。
P24 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
其他需要的输入控制信号包括:
startop:启动信号;
opcode:操作选择,因为有 3种运算,所以
opcode是两位输入;
clk:系统时钟;
clr:系统复位;
输出信号包括:
Dout,16位数据输出;
dong:输出状态,运算正常结束;
busy:输出状态,系统忙;
errors:输出状态,运算错误;
operror:状态,操作码错误,只允许 3种有效的操作码。
P25 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
复数运算器的接口
P26 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
系统划分
将复数运算器划分为控制部分和运算部分。
控制部分的有限状态机不再进行进一步的划分,直接采用性能描述来处理。
数据运算部分,由于是并-串结合的操作方式,只采用一个 8位乘法器和一个 16位加法 /减法器。但是还需要一些数据锁存器和数据选择器。
P27 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
运算部分的框图
4个 8位锁存器,分别用来存放两个复数的实部和虚部
2个 8位的 2选 1数据选择器用来选择乘法操作的操作数两个 16位的锁存器存放乘法的结果两个 16位的 4选 1数据选择器,选择加
/减的数据来源两个 16位的锁存器存放加法 /减法的结果 (实部和虚部 )
串行输出运算结果:
实部和虚部
P28 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
系统的控制部分和数据处理部分之间的连接
P29 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
整个系统分解的结果
P30 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
系统的顶层描述
顶层描述一方面定义了系统的接口。
具体的描述只是将两个自定义的部件
( COMPONENT),ialuctrl和
ialudata安装和连接在一起。
P31 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
--系统接口
ENTITY ialu2 IS
PORT (
startop,in std_logic;
opcode,in std_logic_vector(1 downto 0);
clk,clr,in std_logic;
Din,in std_logic_vector (7 downto 0);
latchar,latchai,latchbr,latchbi,in
std_logic;
Dout,out std_logic_vector (15 downto 0);
resultsel,in std_logic;
errors,out std_logic;
done,busy,out std_logic;
operr,out std_logic
);
END ialu2;
P32 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
ARCHITECTURE system of ialu2 IS
SIGNAL mmuxsel1,mmuxsel2,std_logic;
SIGNAL amuxsel,std_logic_vector(1 downto 0);
SIGNAL add_sub,std_logic;
SIGNAL latchr1,latchr2,std_logic;
SIGNAL latchrr,latchri,std_logic;
COMPONENT ialuctrl IS --控制部件说明
PORT (
startop,in std_logic;
opcode,in std_logic_vector(1 downto 0);
mmuxsel1,mmuxsel2,out std_logic;
amuxsel,out std_logic_vector(1 downto 0);
add_sub,out std_logic;
latchr1,latchr2,out std_logic;
latchrr,latchri,out std_logic;
clk,clr,in std_logic;
done,busy,out std_logic;
operr,out std_logic
);
END COMPONENT;
P33 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
COMPONENT ialudata IS --运算部件说明
PORT (
latchar,latchai,latchbr,latchbi,in
std_logic;
Din,in std_logic_vector(7 downto 0);
Dout,out std_logic_vector (15 downto 0);
mmuxsel1,mmuxsel2,in std_logic;
amuxsel,in std_logic_vector(1 downto 0);
ti_r1,out std_logic_vector(15 downto 0);
add_sub,in std_logic;
latchr1,latchr2,in std_logic;
latchrr,latchri,in std_logic;
resultsel,in std_logic;
clk,clr,in std_logic;
errors,out std_logic
);
END COMPONENT;
P34 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
BEGIN
IALUControlPath,COMPONENT ialuctrl
PORT map ( startop => startop,
opcode => opcode,
mmuxsel1 => mmuxsel1,
mmuxsel2 => mmuxsel2,
amuxsel => amuxsel,
add_sub => add_sub,
latchr1 => latchr1,
latchr2 => latchr2,
latchrr => latchrr,
latchri => latchri,
clk => clk,
clr => clr,
done => done,
busy => busy,
operr => operr
); --控制部件安装
P35 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
IALUDataPath,COMPONENT ialudata
PORT map ( latchar => latchar,
latchai => latchai,
latchbr => latchbr,
latchbi => latchbi,
Din => Din,
Dout => Dout,
mmuxsel1 => mmuxsel1,
mmuxsel2 => mmuxsel2,
amuxsel => amuxsel,
add_sub => add_sub,
latchr1 => latchr1,
latchr2 => latchr2,
latchrr => latchrr,
latchri => latchri,
resultsel => resultsel,
clk => clk,
clr => clr,
errors => errors
); --运算部件安装
END system;
P36 北京邮电大学 huimin@bupt.edu.cn2009-8-21
复数运算器的设计
控制部分的描述