760 likes | 948 Views
第五章 寄存器传送语言. 5.1 微操作和寄存器传送语言 5.2 用 RTL 表示数字系统 5.3 复杂数字系统和 RTL 5.4 实例: VHDL - VHSIC 硬件描述语言. 微操作: 大部分时序数字系统的基础。 是更简单的行为。. 数据从一个寄存器、存储器单元或者 I/O 设备 到另一个的传送 修改存储的值 执行算术或逻辑功能 修改已存储的值. 确定时序数字系统: 确定正确的微操作传送及其条件。 (这些条件保证微操作按正确的顺序执行) 设计时序数字系统:. 首先用微操作表述系统的行为
E N D
第五章 寄存器传送语言 5.1 微操作和寄存器传送语言 5.2 用RTL表示数字系统 5.3 复杂数字系统和RTL 5.4 实例:VHDL-VHSIC硬件描述语言
微操作:大部分时序数字系统的基础。 是更简单的行为。 • 数据从一个寄存器、存储器单元或者I/O设备 • 到另一个的传送 • 修改存储的值 • 执行算术或逻辑功能 • 修改已存储的值
确定时序数字系统:确定正确的微操作传送及其条件。确定时序数字系统:确定正确的微操作传送及其条件。 (这些条件保证微操作按正确的顺序执行) 设计时序数字系统: • 首先用微操作表述系统的行为 • 设计硬件来匹配这些表述 硬件描述语言(hardware description language,HDL) (说明与系统需求对应的微操作的条件和传送) 电路分析和设计(circuit analysis and design,CAD)软件 (可以在用户规定的各种条件下仿真电路的行为)
5.1 微操作和寄存器传送语言 设计时序数字系统: • 首先用微操作表述系统的行为 • 设计硬件来匹配这些表述 一、微操作的格式 考虑有两个1位寄存器X和Y的一个数字系统。 拷贝寄存器Y的内容到寄存器X中的微操作:X←Y (有时也可以表示为Y→X)
两种实现: • 由直接连接实现 • 通过总线连接实现 X
二、传送发生的条件 1.假定传送应发生在输入控制α为高时, 则传送过程可以写为 IF α THEN X←Y 2.表示微操作和它们发生的条件: 条件:微操作 当所有冒号左边的条件满足时,执行微操作 (可以是多个)规定的数据传送。 3.上面的传送可以写为 α:X←Y
X 4.具有控制信号的数据传送α:X←Y的实现 (a) 用直接通路 (b) 用总线
三、提高系统性能的一种方法 同时执行两个或多个微操作。 1.如果某系统在α= 1时执行X←Y和Y←Z的传 送,则这种情况可以表示成 α: X←Y,Y←Z 或者 α: Y←Z,X←Y
2.同时拷贝相同的数据到多个目的地。 考虑 α: X←Y,Z←Y 实现数据传送α: X←Y,Z←Y
3.数字系统不能同时往同一寄存器中写入两个不同的值。3.数字系统不能同时往同一寄存器中写入两个不同的值。 例如: 表示 α: X←Y,X←Z无效 四、传送常量的有效条件和微操作 α: X←0 β: X←1 实现这两个传送的三种不同方法: ◆ 通过两个传送通路装载数据来设置X的值。 ◆ 装载数据与第一个完全相同,但它的数据直接由 信号β产生。 ◆ 为简化硬件可使用寄存器的清除输入功能。
数据传送α: X←0与β: X←1的三种实现: (a) 用一个多路选择器来选择输入的数据 (b) 用β作为数据输入 (c) 用CLR信号
问题:当α和β同时为1时,怎么办? 两种解决方法: ◆ 产生α和β的硬件能保证它们决不会被同时置为1 ◆ 修改条件使它们互斥 αβ’: X←0 α: X←0 αβ’: X←0 β : X←1 α’β: X←1 α’β: X←1 五.寄存器之间的多位数据传送 1.同样大小寄存器对应位之间传送数据 例如:当α=1时,从4位寄存器Y传送数据到4位寄存器X 用符号表示 α: X←Y
4比特数据传送α:X←Y的实现: (a) 用直接连接 (b) 用总线
2.访问一个寄存器的某一位或位组。 表示每一位:如X3或Y2。 3.表示位组(用一个域表示) 如X3、X2和X1可以写成X(3-1)或X(3:1) α: X(3-1)←Y(2-0) β: X3←X2 γ: X(3-0)←X(2-0),X3 (X(2-0,3)或 X3←X2,X2←X1,X1←X0,X0←X3)
操 作 示 例 Add X←X + Y Subtract X←X – Y 或 X←X + Y’ + 1 Increment X←X + 1 Decrement X←X–1 And X←X ∧ Y 或 X←XY OR X←X ∨ Y XOR X←X ⊕ Y NOT X←/X 或 X←X’ 六、执行数据的算术运算、逻辑运算和移位运算的微操 作 1.一些常用的算术运算和逻辑运算的微操作
2.移位微操作 ◆ 线性移位:每一位的值依次向左(或右)移位。 最后1位被丢弃,空位补入0值。 例如:X=1011 左移一位:0110 右移一位:0101 ◆ 循环移位:将在线性移位中被丢弃的位循环回来 替代补入的0值。
例如: X=1011 循环左移:0111 循环右移:1101 ◆ 算术移位:用于带符号数的移位。 运算规则:符号位在移位操作中保持不变,工作原理 与线性移位相似。 例如: X=1011 算术左移:1110 算术右移:1101
◆ 十进制移位:专门用于BCD表示。十进制移位与线性 移位很相似,但它移动1个数字或4位, 而不是移动1位。 例如:X=1001 0111 十进制左移:0111 0000 十进制右移:0000 1001
操 作 示 例 线性左移 shl(X) 线性右移 shr(X) 循环左移 cil(X) 循环右移 cir(X) 算术左移 ashl(X) 算术右移 ashr(X) 十进制左移 dshl(X) 十进制右移 dshr(X) ◆ 移位操作和它们的表示法
例如:X←shl(X)和shl(X)是等价的。 Y←shl(X)两个寄存器均需指定 七、寄存器与存储器之间的数据传送 例如: M[55]←AC和AC←M[55] 寄存器AC与存储器中55号单元之间的数据传送 更好的方法:把地址存入寄存器中,然后由寄存器提供 存储器的访问地址。 (地址寄存器,标示为AR) AR←55 M[AR]←AC或者AC←M[AR]( M←AC和AC←M)
5.2 用RTL表示数字系统 5.2.1 数字元件表示 一、第一个例子( D触发器) 1.用RTL描述: LD:Q←D D触发器:(a)无清0输入端 (b)有清0输入端
2.有一同步清0输入端的D触发器 LD: Q←D CLR: Q←0 ◆ 当D、LD和CLR都等于1时,系统会失败。 解决方法:改变条件使得两者互斥。 CLR’LD: Q←D LD: Q←D CLR: Q←0 LD’CLR: Q←0
二、第二个例子(一个没有CLR输入端的JK触发器)二、第二个例子(一个没有CLR输入端的JK触发器) 用RTL描述: J’K: Q←0 JK’: Q←1 JK : Q←Q’ 三、最后一个例子(一个n位的移位寄存器) ◆Qn-1是最高位,Q0是最低位。 ◆ 当SHL信号为高时,它将其中的数据左移一位。 ◆ 输入Sin移进最低位。 移位寄存器: SHL: Q←Q(n-2:0),Sin
5.2.2 简单系统的表示与实现 例如: 一个有4个1位触发器的系统 ◆ 用RTL代码表示传送 (假设条件j,o,h和n是互斥的) j: M←A o: A←Y h: R←M n: Y←R , M←R ◆ 几种不同的方法实现
1.用直接连接实现系统的数据通路 ◆ 用直接连接实现的该RTL代码的系统的数据通路
◆ 用直接连接实现该RTL代码的系统的完整设计 在合适的时间激励触发器的LD信号来装载数 据,从而完成传送。 ▲ 当j=1(M←A)或n=1(M←R)时,触发器M 装载数据。 ▲ 在满足单个条件o、h和n时,触发器A、R和Y 装载数据。
2.用总线和三态门实现 j: M←A o: A←Y h: R←M n: Y←R ,M←R
3. 用总线和多路选择器实现 j: M←A o: A←Y h: R←M n: Y←R ,M←R
5.3 更复杂数字系统和RTL 5.3.1 模6计数器 目的:设计一个模6计数器 步骤: 模6计数器 : 000→001→010→011→100→101→000→… (0→1→2→3→4→5→0…) • 用RTL表示计数器的功能 • 用数字逻辑实现RTL的代码
假设: 输入端U:控制计数 当U=1时,计数器在时钟的上升沿增加它的值。 当U=0时,不管时钟的值如何,它都保持当前值不变。 输出V2V1V0:计数器的值 进位输出:C 状态:S0→S1→S2→S3→S4→S5→S0→… (两个另外状态S6和S7) 模6计数器的状态表和状态图
当前状态 U 下一状态 C V2V1V0 S0 0 S0 1 000 S0 1 S1 0 001 S1 0 S1 0 001 S1 1 S2 0 010 S2 0 S2 0 010 S2 1 S3 0 011 S3 0 S3 0 011 S3 1 S4 0 100 S4 0 S4 0 100 S4 1 S5 0 101 S5 0 S5 0 101 S5 1 S0 1 000 S6 X S0 1 111 S7 X S0 1 111
一、用RTL表示系统 (S0+S1+S2+S3+S4)U: V←V+1 , C←0 S5U : V←0 ,C←1 S6 + S7: V←0 , C←1 在条件(S0+S1+S2+S3+S4+S5)U’下,计数器保持当 前值与C值不变。 可以用两条RTL语句表示:(S5U和S6 + S7触发相同 的微操作) (S0+S1+S2+S3+S4)U: V←V+1,C←0 S5U+S6+S7: V←0,C←1
二、模6计数器RTL代码的两种实现 ◆ 用一个寄存器 S5U+S6+S7 (S0+S1+S2+S3+S4)U
◆ 用一个计数器(简单) U(V 2 ’+V1 ’V0 ’) V 2 V1 + V 2 V0 U
5.3.2 收费站控制器 ◆ 两个外部传感器 ▲ C显示车辆是否在收费站中 当车在时,C=1,否则C=0。 ▲ 显示硬币是否已经投到收费站的收集篮中以及 硬币的面值。 • 没有硬币投入 I1I0=00 • 投入五分硬币 I1I0=01 • 投入一角硬币 I1I0=10 • 投入25分硬币 I1I0=11
◆ 两个输出指示灯和一个警报灯 ▲ 当一辆汽车驶入收费站时,红灯(R)亮, 直到司机投入35分硬币,此时红灯熄灭,绿灯(G)亮, 绿灯保持亮着直到汽车离开收费站; ▲ 当绿灯灭时,红灯又亮了。 ▲ 如果没有付足够的通行费,汽车离开,红灯一直保 持亮着且警报(A)响。 ▲ 警报维持到另一辆汽车驶入收费站;然后停止。 一、控制器的状态表和状态图
状态 条 件 R G A SNOCAR 车站中无车 1 0 0 S0 站中有车,未付费 1 0 0 S5 站中有车,已付费5分 1 0 0 S10 站中有车,已付费10分 1 0 0 S15 站中有车,已付费15分 1 0 0 S20 站中有车,已付费20分 1 0 0 S25 站中有车,已付费25分 1 0 0 S30 站中有车,已付费30分 1 0 0 SPAID 站中有车,已付足过路费 0 1 0 SCHEAT 未付足过路费就离开车站 1 0 1
当前 状 态 C I1I0 下一状态 R G A 当前状态 C I1I0 下一状态 R G A SNOCAR 1 XX S0 1 0 0 S15 0 XX SCHEAT 1 0 1 SPAID 0 XX SNOCAR 1 0 0 S15 1 01 S20 1 0 0 SCHEAT 1 XX S0 1 0 0 S15 1 10 S25 1 0 0 S0 0 XX SCHEAT 1 0 1 S15 1 11 SPAID 0 1 0 S0 1 01 S5 1 0 0 S20 0 XX SCHEAT 1 0 1 S0 1 10 S10 1 0 0 S20 1 01 S25 1 0 0 S0 1 11 S25 1 0 0 S20 1 10 S30 1 0 0 S5 0 XX SCHEAT 1 0 1 S20 1 11 SPAID 0 1 0 S5 1 01 S10 1 0 0 S25 0 XX SCHEAT 1 0 1
S5 1 10 S15 1 0 0 S25 1 01 S30 1 0 0 S5 1 11 S30 1 0 0 S25 1 10 SPAID 0 1 0 S10 0 XX SCHEAT 1 0 1 S25 1 11 SPAID 0 1 0 S10 1 01 S15 1 0 0 S30 0 XX SCHEAT 1 0 1 S10 1 10 S20 1 0 0 S30 1 01 SPAID 0 1 0 S10 1 11 SPAID 0 1 0 S30 1 10 SPAID 0 1 0 S30 1 11 SPAID 0 1 0
状 态 T R G A SNOCAR 0000 1 0 0 S0 0001 1 0 0 S5 0010 1 0 0 S10 0011 1 0 0 S15 0100 1 0 0 S20 0101 1 0 0 S25 0110 1 0 0 S30 0111 1 0 0 SPAID 1000 0 1 0 SCHEAT 1001 1 0 1 Unused 1010-1111 1 0 0 收费站控制器状态赋值
二、将状态表转换成RTL语句 1.当控制器状态为SNOCAR且C=1,它转换到状态S0, 此状态值为0001。 (假设状态值存于4位寄存器T中) SNOCAR C: T←0001 如果我们想在每次传送后设置输出值,此状 态不得不包含微操作R←1,G←0和A←0。 2.状态SPAID和SCHEAT各仅有一个转移情况。 SPAIDC’: T←0000 SCHEATC : T←0001
3.状态S0在状态表中有四种可能的转移情况。 S0C’ : T←1001 S0CI1’I0 : T←0010 S0CI1I0’ : T←0011 S0CI1I0 : T←0110 4.对于其他状态,可以用同样的方法得到其RTL代码。 5.最终的入口是所有的无用状态均无条件转移到状态 0000。 6.整个控制器除输出之外的代码
SNOCARC:T←0001 S15CI1’I0:T←0101 SPAIDC’:T←0000 S15CI1I0’:T←0110 SCHEATC:T←0001 S15CI1I0:T←1000 S0C’:T←1001 S20C’:T←1001 S0CI1’I0:T←0010 S20CI1’I0:T←0110 S0CI1I0’:T←0011 S20CI1I0’:T←0111 S10CI1I0:T←1000 S30CI1I0:T←1000 S15C’:T←1001 T3(T2+T1):←0000
S0CI1I0:T←0110 S20CI1I0:T←1000 S5C’:T←1001 S25C’:T←1001 S5CI1’I0:T←0011 S25CI1’I0:T←0111 S5CI1I0’:T←0100 S25CI1I0’:T←1000 S5CI1I0:←0111 S25CI1I0:T←1000 S10C’:T←1001 S30C’:T←1001 S10CI1’I0:T←0100 S30CI1’I0:T←1000 S10CI1I0’:T←0101 S30CI1I0’:T←1000
三、扩展RTL代码产生输出 SPAIDC’:R←1,G←0 SCHEATC’:R←1,G←0,A←0 SNOCARC:R←1,G←0,A←0 S0C’:A←1 S5C’:A←1 S10C’:A←1 S10CI1I0:R←0,G←1 S15C’:A←1 S15CI1I0:R←0,G←1 当进入SPAID状态, 输出R : 1→0; 当离开SPAID状态时,输出R:0 → 1。 输出G正好相反,当进入SPAID状态时变成1,离开时变成0。 最后,无论何时进入SCHEAT状态,输出A变成1,离开SCHEAT状态时变成0。
S20C’:A←1 S20CI1I0:R←0,G←1 S25C’:A←1 S25CI1I0’:R←0,G←1 S25CI1I0:R←0,G←1 S30C’:A←1 S30CI1’I0:R←0,G←1 S30CI1I0’:R←0,G←1 S30CI1I0:R←0,G←1 T3(T2+T1):R←1,G←0,A←0