第五章 寄存器传送语言
This presentation is the property of its rightful owner.
Sponsored Links
1 / 76

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


  • 75 Views
  • Uploaded on
  • Presentation posted in: General

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

第五章 寄存器传送语言

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

5.2 用RTL表示数字系统

5.3 复杂数字系统和RTL

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

是更简单的行为。

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

  • 到另一个的传送

  • 修改存储的值

  • 执行算术或逻辑功能

  • 修改已存储的值


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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

设计时序数字系统:

  • 首先用微操作表述系统的行为

  • 设计硬件来匹配这些表述

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

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

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

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

设计时序数字系统:

  • 首先用微操作表述系统的行为

  • 设计硬件来匹配这些表述

一、微操作的格式

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

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

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

  • 两种实现:

  • 由直接连接实现

  • 通过总线连接实现

X


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

二、传送发生的条件

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

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

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

条件:微操作

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

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

3.上面的传送可以写为

α:X←Y


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

X

4.具有控制信号的数据传送α:X←Y的实现

(a) 用直接通路

(b) 用总线


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

考虑 α: X←Y,Z←Y

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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

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

α: X←0

β: X←1

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

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

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

信号β产生。

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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

(b) 用β作为数据输入

(c) 用CLR信号


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

(a) 用直接连接

(b) 用总线


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)


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

操 作

示 例

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.一些常用的算术运算和逻辑运算的微操作


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

2.移位微操作

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

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

例如:X=1011

左移一位:0110

右移一位:0101

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

替代补入的0值。


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

例如: X=1011

循环左移:0111

循环右移:1101

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

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

与线性移位相似。

例如: X=1011

算术左移:1110

算术右移:1101


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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

而不是移动1位。

例如:X=1001 0111

十进制左移:0111 0000

十进制右移:0000 1001


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)

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


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)


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

5.2 用RTL表示数字系统

5.2.1 数字元件表示

一、第一个例子( D触发器)

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

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


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


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


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

◆ 几种不同的方法实现


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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


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

装载数据。


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


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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的代码


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计数器的状态表和状态图


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


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

◆ 用一个寄存器

S5U+S6+S7

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

◆ 用一个计数器(简单)

U(V 2 ’+V1 ’V0 ’)

V 2 V1 + V 2 V0 U


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

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

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

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

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

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

持亮着且警报(A)响。

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

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


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


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

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


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

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


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

收费站控制器状态赋值


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


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.整个控制器除输出之外的代码


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

S0CI1I0:T←0110S20CI1I0:T←1000

S5C’:T←1001 S25C’:T←1001

S5CI1’I0:T←0011 S25CI1’I0:T←0111

S5CI1I0’:T←0100 S25CI1I0’:T←1000

S5CI1I0:←0111S25CI1I0:T←1000

S10C’:T←1001 S30C’:T←1001

S10CI1’I0:T←0100S30CI1’I0:T←1000

S10CI1I0’:T←0101S30CI1I0’:T←1000


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。


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


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


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


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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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

5.4.1 VHDL语法

超高速集成电路硬件描述语言

(VHSIC hardware description language,VHDL)

用途:

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

  • 设计专用集成电路

  • (application-specific IC,ASIC)

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

  • (programmable logic device,PLD)


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

优点:

  • 可移植性

  • 设备独立

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

  • 的性能

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

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

缺点:

  • 源代码很长且难于调试

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

  • 效的设计结果。


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设计文件中。


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;


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;


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);


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)和结构体中的新信号)


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;


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。)


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;


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:指示计数器的下一状态。


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;

◆ 两个进程

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

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

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


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 ;


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 ;


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;


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;


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

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


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

5.4.3 低层抽象的VHDL设计

一、模6计数器的数字逻辑设计


5 1 5 2 rtl 5 3 rtl 5 4 vhdl vhsic

二、系统的完

整VHDL代码


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.仿真


  • Login