76
5.1 微微微微微微微 微微微 5.2 RTL 微微微微微5.3 微微微微微 RTL 5.4 微微VHDL VHSIC 微微微微微微 第第第 第第第 第第第

5.1 微操作和寄存器传送语言 5.2 用 RTL 表示数字系统 5.3 复杂数字系统和 RTL 5.4 实例: VHDL - VHSIC 硬件描述语言

  • Upload
    leoma

  • View
    172

  • Download
    0

Embed Size (px)

DESCRIPTION

第五章 寄存器传送语言. 5.1 微操作和寄存器传送语言 5.2 用 RTL 表示数字系统 5.3 复杂数字系统和 RTL 5.4 实例: VHDL - VHSIC 硬件描述语言. 微操作: 大部分时序数字系统的基础。 是更简单的行为。. 数据从一个寄存器、存储器单元或者 I/O 设备 到另一个的传送 修改存储的值 执行算术或逻辑功能 修改已存储的值. 确定时序数字系统: 确定正确的微操作传送及其条件。 (这些条件保证微操作按正确的顺序执行) 设计时序数字系统:. 首先用微操作表述系统的行为 - PowerPoint PPT Presentation

Citation preview

Page 1: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5.1 微操作和寄存器传送语言

5.2 用RTL表示数字系统

5.3 复杂数字系统和RTL

5.4 实例:VHDL-VHSIC硬件描述语言

第五章 寄存器传送语言

Page 2: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

微操作:大部分时序数字系统的基础。

是更简单的行为。

• 数据从一个寄存器、存储器单元或者 I/O 设备

到另一个的传送

• 修改存储的值

• 执行算术或逻辑功能

• 修改已存储的值

Page 3: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

确定时序数字系统:确定正确的微操作传送及其条件。

(这些条件保证微操作按正确的顺序执行)

设计时序数字系统: 首先用微操作表述系统的行为 设计硬件来匹配这些表述

硬件描述语言( hardware description language , HDL )

(说明与系统需求对应的微操作的条件和传送)

电路分析和设计( circuit analysis and design , CAD )软件

(可以在用户规定的各种条件下仿真电路的行为)

Page 4: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

  设计时序数字系统:

5 . 1  微操作和寄存器传送语言

首先用微操作表述系统的行为 设计硬件来匹配这些表述

一、微操作的格式

考虑有两个 1 位寄存器 X 和 Y 的一个数字系统。

拷贝寄存器 Y 的内容到寄存器 X 中的微操作: X←Y

( 有时也可以表示为 Y→X)

Page 5: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

两种实现: 由直接连接实现 通过总线连接实现

X

Page 6: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

二、传送发生的条件

1. 假定传送应发生在输入控制 α 为高时,

则传送过程可以写为 IF α THEN X←Y

2. 表示微操作和它们发生的条件:

条件:微操作

当所有冒号左边的条件满足时,执行微操作

(可以是多个)规定的数据传送。

3. 上面的传送可以写为

α : X←Y

Page 7: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

4. 具有控制信号的数据传送 α : X←Y 的实现(a) 用直接通路

(b) 用总线

X

Page 8: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

三、提高系统性能的一种方法

同时执行两个或多个微操作。

1. 如果某系统在 α= 1 时执行 X←Y 和 Y←Z 的传

送,则这种情况可以表示成

α: X←Y , Y←Z

或者

α: Y←Z , X←Y

Page 9: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

数据传送 α: X←Y,Y←Z 的实现

Page 10: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

2 .同时拷贝相同的数据到多个目的地。

考虑 α : X←Y , Z←Y

实现数据传送 α: X←Y , Z←Y

Page 11: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

 3 .数字系统不能同时往同一寄存器中写入两个不同的值。

例如: 表示 α: X←Y , X←Z 无效

四、传送常量的有效条件和微操作

α: X←0

β: X←1

实现这两个传送的三种不同方法:

◆ 通过两个传送通路装载数据来设置 X 的值。

◆ 装载数据与第一个完全相同,但它的数据直接由

信号 β 产生。

◆ 为简化硬件可使用寄存器的清除输入功能。

Page 12: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

  数据传送 α: X←0 与 β: X←1 的三种实现:

(a) 用一个多路选择器来选择输入的数据

(b) 用 β 作为数据输入

(c) 用 CLR 信号

Page 13: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

问题:当 α 和 β 同时为 1 时,怎么办?

两种解决方法:

◆ 产生 α 和 β 的硬件能保证它们决不会被同时置为 1

◆ 修改条件使它们互斥

αβ’: X←0 α: X←0 αβ’: X←0

β : X←1 α’β: X←1 α’β: X←1

五 . 寄存器之间的多位数据传送

1. 同样大小寄存器对应位之间传送数据

例如 : 当 α = 1 时,从 4 位寄存器 Y 传送数据到 4 位寄存器 X

用符号表示 α : X←Y

Page 14: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

4 比特数据传送 α : X←Y 的实现:

(a) 用直接连接

(b) 用总线

Page 15: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

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

Page 16: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

六、执行数据的算术运算、逻辑运算和移位运算的微操

1 .一些常用的算术运算和逻辑运算的微操作    操 作     示 例

   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’ 

Page 17: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

2 .移位微操作

    ◆  线性移位:每一位的值依次向左(或右)移位。

最后 1 位被丢弃,空位补入 0 值。

例如: X = 1011

左移一位: 0110

右移一位: 0101

    ◆ 循环移位:将在线性移位中被丢弃的位循环回来

替代补入的 0 值。

          

Page 18: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

例如: X = 1011

循环左移: 0111

循环右移: 1101

◆  算术移位:用于带符号数的移位。

运算规则:符号位在移位操作中保持不变,工作原理

与线性移位相似。

例如: X = 1011

算术左移: 1110

算术右移: 1101

Page 19: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆ 十进制移位:专门用于 BCD表示。十进制移位与线性

移位很相似,但它移动 1 个数字或 4 位,

而不是移动 1 位。

例如: X = 1001 0111

十进制左移: 0111 0000

十进制右移: 0000 1001

Page 20: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

      操 作 示 例

      线性左移      shl(X)

      线性右移      shr(X)

      循环左移      cil(X)

      循环右移      cir(X)

      算术左移      ashl(X)

      算术右移      ashr(X)

      十进制左移      dshl(X)

      十进制右移      dshr(X)

◆  移位操作和它们的表示法

Page 21: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

       例如: 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)

Page 22: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5.2.1   数字元件表示      一、第一个例子( D触发器)

1. 用 RTL 描述: LD : Q←D

D触发器: (a) 无清 0 输入端 (b) 有清 0 输入端

5 . 2   用 RTL 表示数字系统

Page 23: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

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

Page 24: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

二、第二个例子(一个没有 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

Page 25: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5.2.2  简单系统的表示与实现      例如: 一个有 4 个 1 位触发器的系统

                ◆   用 RTL代码表示传送

(假设条件 j , o , h 和 n 是互斥的)

j: M←A

o: A←Y

h: R←M

n: Y←R , M←R

         ◆   几种不同的方法实现

Page 26: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

1 .用直接连接实现系统的数据通路

      ◆  用直接连接实现的该 RTL代码的系统的数据通路 

Page 27: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆  用直接连接实现该 RTL代码的系统的完整设计

在合适的时间激励触发器的 LD 信号来装载数

据,从而完成传送。

▲   当 j=1 ( M←A )或 n=1(M←R) 时,触发器M

装载数据。

▲   在满足单个条件 o 、 h 和 n 时,触发器 A 、 R和 Y

装载数据。 

Page 28: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言
Page 29: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

2 .用总线和三态门实现 

j: M←A

o: A←Y

h: R←M

n: Y←R ,M←R

         

Page 30: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

3. 用总线和多路选择器实现 

j: M←A

o: A←Y

h: R←M

n: Y←R ,M←R

Page 31: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5 . 3 . 1   模 6 计数器 目的 : 设计一个模 6 计数器

步骤:

模 6 计数器 :

000→001→010→011→100→101→000→…

(0→1→2→3→4→5→0…)

5 . 3  更复杂数字系统和 RTL

• 用 RTL 表示计数器的功能

• 用数字逻辑实现 RTL 的代码

Page 32: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

假设:

输入端 U :控制计数

当 U = 1 时,计数器在时钟的上升沿增加它的值。

当 U = 0 时,不管时钟的值如何,它都保持当前值不变。

输出 V2V1V0 :计数器的值

进位输出: C

状态: S0→S1→S2→S3→S4→S5→S0→…

(两个另外状态 S6 和 S7 )模 6 计数器的状态表和状态图

Page 33: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

当前状态 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

Page 34: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言
Page 35: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

一、用 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

Page 36: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

二、模 6 计数器 RTL代码的两种实现

    ◆  用一个寄存器

( S0+S1+S2+S3+S4 ) U

S5U+ S6+ S7

Page 37: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆  用一个计数器(简单)

U(V 2 ’ + V1 ’ V0 ’)

V 2 V1 + V 2 V0 U

Page 38: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5 . 3 . 2   收费站控制器    ◆   两个外部传感器

       ▲ C显示车辆是否在收费站中

当车在时, C = 1 ,否则 C = 0 。

       ▲ 显示硬币是否已经投到收费站的收集篮中以及

硬币的面值。• 没有硬币投入 I1I0 = 00

• 投入五分硬币 I1I0 = 01

• 投入一角硬币 I1I0 = 10

• 投入 25 分硬币 I1I0 = 11

Page 39: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆  两个输出指示灯和一个警报灯

    ▲  当一辆汽车驶入收费站时,红灯( R )亮,

直到司机投入 35 分硬币,此时红灯熄灭,绿灯 (G)亮,

绿灯保持亮着直到汽车离开收费站;

    ▲  当绿灯灭时,红灯又亮了。

    ▲  如果没有付足够的通行费,汽车离开,红灯一直保

持亮着且警报( A )响。

    ▲ 警报维持到另一辆汽车驶入收费站;然后停止。

一、控制器的状态表和状态图

Page 40: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

状态 条 件 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

Page 41: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

当 前 状 态

C I1I0 下 一状态

R

G

A

  当 前状态

C I1I0 下 一状态

R

G

A

SNOCAR 1 XX S0 1 0 0   S15 0 XX SCHEA

T

1 0 1

SPAID 0 XX SNOCA

R

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 SCHEA

T

1 0 1   S15 1 11 SPAID 0 1 0

S0 1 01 S5 1 0 0   S20 0 XX SCHEA

T

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 SCHEA

T

1 0 1   S20 1 11 SPAID 0 1 0

S5 1 01 S10 1 0 0   S25 0 XX SCHEA

T

1 0 1

Page 42: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

S5 1 10 S15 1 0 0   S25 1 01 S30 1 0 0

S5 1 11 S30 1 0 0   S25 1 10 SPAI

D

0 1 0

S10 0 XX

SCH

EAT

1 0 1   S25 1 11 SPAI

D

0 1 0

S10 1 01 S15 1 0 0   S30 0 XX SCH

EAT

1 0 1

S10 1 10 S20 1 0 0   S30 1 01 SPAI

D

0 1 0

S10 1 11 SPAI

D

0 1 0   S30 1 10 SPAI

D

0 1 0

                S30 1 11 SPAI

D

0 1 0

Page 43: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言
Page 44: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

  状 态 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

收费站控制器状态赋值

Page 45: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

二、将状态表转换成 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

Page 46: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

3. 状态 S0 在状态表中有四种可能的转移情况。

S0C’ : T←1001

S0CI1’I0 : T←0010

S0CI1I0’ : T←0011

S0CI1I0 : T←0110

4. 对于其他状态,可以用同样的方法得到其 RTL代码。

5. 最终的入口是所有的无用状态均无条件转移到状态

0000 。

6. 整个控制器除输出之外的代码

Page 47: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

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

Page 48: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

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

Page 49: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

三、扩展 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 。

Page 50: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

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

Page 51: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

四、收费站控制器的完整 RTL代码

 (S0+S5+S10+S15+S20+S25+S30)C’ : T←1001

SPAIDC’ : T←0000

(SNOCAR+SCHEAT)C : T←0001

S0CI1’I0 : T←0010

S0CI1IO’ : T←0011

S0CI1I0 : T←0110

S5CI1’I0 : T←0011

S5CI1IO’ : T←0100

S5CI1I0 : T←0111

Page 52: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

S10CI1’I0 : T←0100

S10CI1IO’ : T←0101

S10CI1I0 : T←1000

S15CI1’I0 : T←0101

S15CI1IO’ : T←0110

S15CI1I0 : T←1000

S20CI1’I0 : T←0110

S20CI1IO’ : T←0111

S20CI1I0 : T←1000

S25CI1’I0 : T←0111

S25CI1 : T←1000

Page 53: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

S30C(I1+I0) : T←100

T3(T2+T1) : T←0000

SPAIDC’ : R←1 , G←0

(SNOCAR+SCHEAT)C : R←1 , G←0 , A←0

(S0+S5+S10+S15+S20+S25+S30)C’ : A←1

(S10+S15+S20+S25+S30)CI1I0 : R←0 , G←1

(S25+S30)CI1I0’ : R←0 , G←1

S30CI1’I0 : R←0 , G←1

T3(T2+T1) : R←1 , G←0 , A←0

Page 54: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5 . 4 . 1 VHDL 语法 超高速集成电路硬件描述语言

( VHSIC hardware description language , VHDL )

用途:

5.4  实例: VHDL - VHSIC 硬件描述语言

• 设计通用集成电路( IC )

• 设计专用集成电路

( application-specific IC , ASIC )

• 调整设计以适合现有的可编程逻辑电路

( programmable logic device , PLD )

Page 55: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

优点:• 可移植性

• 设备独立

• 允许设计者在程序下载到硬件上之前检验设计

的性能

• 提供了很好的系统设计的文档支持

• 允许设计者在不同的层次表示系统

• 源代码很长且难于调试

• 对同一系统,不同的工具会产生不同的、但均有

效的设计结果。

缺点:

Page 56: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

VHDL代码主要有三部分:

1 .库说明( library declaration )

由说明需访问的库和库中要用到模块的语句构成。

最常用到的库: IEEE库

最常用的模块: std_logic_1164模块

(描述了设计者需用的输入、输出的说明)

库、模块说明可写成如下代码:

library IEEE;

use IEEE.std_logic_1164.all;

所有用到的库与模块都列在 VHDL 设计文件中。

Page 57: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

2 .实体部分( entity section )

在实体部分,设计者指定实体的名称和它的输

入、输出。

实体部分的基本格式如下:

entity module_name is

port(

input1 , input2 ,… inputp : in std_logic;

output1 , output2 ,… outputo : out std_logic;

inout1 , inout2 , ..inoutn : inout std_logic;

Page 58: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

buffer1 , buffer2 ,… bufferm : buffer std_logic;

invec1 , invec2 ,… invecl : in std_logic_vector(range);

outvec1 , outvec2 , ..outveck : out std_logic_vector(range);

iovec1 , iovec2 ,… iovecj : inout std_logic_vector(range);

bufvec1 , bufvec2 ,… bufveci : buffer std_logic_vector(range);

);

end module_name;

Page 59: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

in std_logic类型:表明设计的输入。

out std_logic类型: 定义设计的输出信号。

inout std_logic类型: 定义双向信号,它既可以输入也

可以输出数据。

buffer std_logic类型:定义设计中的内部信号。

范围( range ):(每个范围可用独立的语句定义)

invector1 : in std_logic_vector(3 downto 0);

invector2 : in std_logic_vector(4 downto 2);

invector3 : in std_logic_vector(1 to 8);

Page 60: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

3. 结构体部分( architecture section )

指定系统的行为以及内部逻辑。

基本形式如下:

architecture arch_name of module_name is

(指定结构体名称及它所属的实体)

type and additional signal declarations;

(指定新的类型( type )和结构体中的新信号)

Page 61: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

begin

process1 : process(signal list)

begin

statements defining behavior/logic;

end process process1;

.

.

.

processn : process(signal list)

begin

statement defining behavior/logic;

end process processn;

end arch_name;

Page 62: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5.4.2   高层抽象的 VHDL 设计 在不同抽象层次设计时序系统。

• 高层抽象:描述系统的有限状态机。• 低层抽象:数字逻辑设计。

1 .模 6 计数器的库说明与实体部分• 两个输入端• U端和系统时钟端 clk

• 1 位输出 C

• 3 位输出 V

(定义 V 为一个 3 位向量,下标为 2 , 1 ,和0 。)

Page 63: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

该设计的库说明与实体部分如下:

library IEEE;

use IEEE.std_logic_1164.all;

entity mod6 is

port(

U , clk : in std_logic;

C : out std_logic;

V : out std_logic_vector(2 downto 0)

);

end mod6;

Page 64: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

2. 扩展模 6 计数器的结构体部分 ◆ 结构体描述了一个新的枚举类型 : 状态( state )

这种类型有 8 个可能值 S0 到 S7 ,对应于计数器 的 6 个有 效状态和两个无效状态。 ◆ 申明了两个这种类型的信号

present_state :指示模 6 计数器的当前状态是 S0 到S7

中的哪一个; next_state :指示计数器的下一状态。  

Page 65: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆  用下列 VHDL代码实现  architecture amod6 of mod6 is

type states is (s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7);

signal present_state , next_state : states;

◆  两个进程

• 第一个着眼于计数器的当前状态和它的输入值,

并产生期望的输出和下一状态值。

• 第二个进程执行从当前状态到下一状态的转移。

Page 66: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆ 过程 state_mod6 的 VHDL代码

state_mod6 : process(present_state , u)

begin

case present_state is

when S0 => V<=”000”; C<=’1’;

if (U=’1’) then next_state <= S1;

else next_state <= S0;

end if ;

when S1 => V<=”001”; C<=’0’;

if (U=’1’) then next_state <=S2;

else next_state <= S1;

end if ;

Page 67: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

when S2 => V<=”010”; C<=’0’;

if (U=’1’) then next_state <=S3;

else next_state <= S2;

end if ;

when S3 => V<=”011”; C<=’0’;

if (U=’1’) then next_state <=S4;

else next_state <= S3;

end if ;

when S4 => V<=”100”; C<=’0’;

if (U=’1’) then next_state <= S5;

else next_state <= S4;

end if ;

Page 68: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

when S5 => V<=”101”; C<=’0’;

if (U=’1’) then next_state <= S0;

else next_state <= S5;

End if ;

when S6 => V<=”111”;C<=’0’;

next_state <= S0;

when S7 => V<=”111”;C<=’0’;

next_state <= S0;

end case;

end process state_mod6;

Page 69: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

◆ state_transition模块的源代码

在时钟的上升沿,它将进程 state_mod6 产生的

next_state 的值拷贝给 present_state 。

 state_transition : process(clk)

begin

if rising_edge(clk) then present_state <= next_state;

end if;

end process state_transition;

Page 70: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

3. 用高层抽象设计的模 6 计数器的完整 VHDL代码

 

Page 71: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言
Page 72: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言
Page 73: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

5 . 4 . 3   低层抽象的 VHDL 设计 一、模 6 计数器的数字逻辑设计

Page 74: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

二、系统的完

整 VHDL 代码

Page 75: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言

实践视角: VHDL 的一些高级性能

1 .元件

例如:模 6 计数器可作为一个元件用于数

字时钟中,来计算几十秒和几十分。

2 .定时

用 after子句指定传送延时。

C <= not(q2 or q1 or q0) after 5ns;

3 .仿真

Page 76: 5.1  微操作和寄存器传送语言 5.2  用 RTL 表示数字系统 5.3  复杂数字系统和 RTL 5.4  实例: VHDL - VHSIC 硬件描述语言