《自己动手写CPU》学习笔记 第二章

2.1可编程逻辑器件概述

FPGA是可编程逻辑器件(PLD)的一种。PLD是上世纪70年代发展起来的一种新型器件,它的应用和发展不仅简化了电路设计,降低了开发成本,提高了系统可靠性,而且给数字系统的设计方法带来了革命性的变化。

按照不同的内部结构可以将PLD器件分为如下两类:
1.基于乘积项(Product-Term)结构的PLD器件

任何组合逻辑电路均可以化为“或与”表达式,用“与门-或门”两级电路实现,而任何时序电路又都可以由组合电路加上存储元件(触发器)构成。因此,从原理上说,与或阵列加上触发器的结构就可以实现任意的数字逻辑电路。基于乘积项结构的PLD器件的主要结构就是与或阵列,或灵活配置的互联线,实现任意逻辑功能。

基于乘积项结构的PLD器件由输入缓冲电路、与阵列、或阵列和输出缓冲电路四部分组成。“与阵列”和“或阵列”是主体,主要用来实现各种逻辑函数和逻辑功能;输入缓冲电路用于产生输入信号的原变量和反变量,并增强输入信号的驱动能力;输出缓冲电路主要用来对将要输出的信号进行处理,既能输出组合逻辑的信号也能输出时序逻辑的信号。

2.基于查找表(Look-up Table, LUT)结构的PLD器件

基于与或阵列的PLD器件的规模不容易做得很大,于是设计人员又开发出另外一种可编程逻辑器件,即查找表结构。其原理类似于ROM,物理结构基于静态存储器(MStatic RAM)和数据选择器(MUX),通过查表方式实现函数功能。函数值放在SRAM中,SRAM的地址线即输入变量,不同的输入通过数据选择器找到对应的函数值并输出。N个输入项的逻辑函数可以由一个2的N次方容量的SRAM实现。

图2-3是用2输入查找表实现2输入或门的示意图。2输入查找表中有4个存储单元,用来存储真值表中的四个值,输入变量A、B作为查找表中3个多路选择器的地址选择端,根据A、B值的组合从4个存储单元中选择一个作为查找表的输出,即实现了2输入或们的逻辑功能。

查找表结构的功能非常强,N个输入的查找表可以实现任意N个输入变量的组合逻辑函数。从理论上讲,只要能够增加输入信号线和扩大存储器容量,用查找表就可以实现任意输入变量的函数。但在实际应用中,查找表的规模受技术和成本因素的限制。每增加一个输入变量,查找表SRAM的容量就要扩大一倍,SRAM的容量与输入变量数N的关系是2的N次方倍。8输入变量的查找表需要256b容量的SRAM,而16个输入变量的查找表则需要64kb容量的SRAM,这个规模已经无法忍受。实际上,FPGA器件查找表的输入变量一般不超过5个,多于5个输入变量的逻辑函数可由对个查找表通过组合或级联实现。

2.2基于PLD的数字系统设计流程

PLD不仅是技术的革新,也带来观念的革新。

2.2.1设计输入

设计输入有多种方式,最常用的是原理图方式和HDL文本方式两种。

1.原理图输入

原理图是图形化的表达方式,使用原件符号和连线来描述设计。

2.HDl文本输入

硬件描述语言(HardWare  Description Language, HDL)是一种用文本形式来描述和设计电路的语言。设计者可利用HDL语言来描述自己的设计,然后利用相应的工具进行综合,变为某种目标文件,最后下载到PLD器件,实现具体电路

2.2.2综合

综合是将较高级抽象层次的设计描述自动转化为低层次描述的过程。有以下几种综合形式。

        --将算法表示、行为描述转换到寄存器传输级(RTL),即从行为描述到结构描述

        --将RTL级描述转换到逻辑门级,称为逻辑综合

        --将逻辑门表示转换到PLD器件的配置网表示,有了配置网表就可以完成基于PLD器件的系统实现。

2.2.3布局布线

 布局布线可以理解为将综合生成的电路网表映射到具体的目标PLD器件,并产生最终可以下载文件的过程。布局布线将综合后的电路网表针对某一具体的目标PLD进行逻辑映射,把整个设计分为多个适合PLD器件内部逻辑资源实现的逻辑小块,并根据用户的设定在速度和面积之间做出选择或折中。其中布局试讲以分割的逻辑小块放到PLD器件内部逻辑资源的具体位置,并使他们易于连线;布线则是利用PLD器件的布线资源完成各功能块之间、反馈信号之间的连接。

2.5Verilog HDL 基本元素

2.5.1 常量

Verilog的常量有三种:整数、实数、字符串

2.5.2 变量声明与数据类型

1.net型变量

net型相当于硬件电路中的各物理连接,其特点是输出的值紧跟输入值的变化而变化。net型变量包括多种类型。wire型信号可以用作任何表达式的输入,也可以用作assign语句和实例原件的输出。对于综合器而言,wire型变量的取值可为0、1、X、Z,其中0表示低电平、逻辑0;1表示高电平、逻辑1;X表示不确定或未知的逻辑状态;Z表示高阻态。如果没有赋值,默认高阻态Z。

2.variable型变量variable型变量可以保存上次写入数据的数据类型,一遍对应硬件上的触发器或锁存器等存储原件,但并不是绝对的,在综合器综合的时候,会根据其被赋值的情况来具体确定是映射成连线还是映射为存储原件。

2.5.3向量

2.6 Verilog HDL 行为语句

2.6.1过程语句

        Verilog定义的模块一般包括过程语句,过程语句有两种:initial/always.其中initial常用于仿真中的初始化,其中的语句只执行一次,而always中语句则是不断重复执行的.此外,always过程语句是可综合的, initial过程语句是不可综合的.

1.always过程语句

always过程语句通常是带有触发条件的,触发条件写在敏感信号表达式中,敏感信号表达式又称为事件表达式或敏感信号列表,当该表达式中变量的值改变时,就会引发其中语句序列的执行.因此敏感信号表达式应列出影响块内取值的所有信号.

(1)敏感信号表达式的格式

        如果有两个或两个以上的敏感信号时,它们之间使用"or"连接,敏感信号列表中的多个信号可以使用逗号隔开.敏感信号列表也可以使用通配符“*”,表示在该过程中语句中的所有输入信号变量。

(2)组合电路与时序电路

        敏感信号可以分为两种类型:一种是电平敏感型,另一种是边沿敏感型。前一种一般对应组合电路,后一种一般对应时序电路。对于时序电路,敏感信号通常是时钟信号,Verilog HDL提供了posedge、negedge两个关键字来描述时钟信号。posedge表示以时钟信号的上升沿作为触发条件,negedge表示以时钟信号的下降沿作为触发条件。

2.initial过程语句

initial过程语句不带触发条件,并且其中的语句序列只执行一次。initial过程语句通常用于仿真模块中对激励向量的描述,或用于给寄存器赋初值,它是面向模拟仿真的过程语句,通常不能被综合。

2.6.2赋值语句

赋值语句有两种:持续赋值语句、过程赋值语句

1.持续赋值语句

assign为持续赋值语句,主要用于对wire型变量赋值

2.过程赋值语句

在always、initia过程中的赋值语句称为过程赋值语句,多用于对reg型变量进行赋值,分为非阻塞赋值和阻塞赋值两种方式。

(1)非阻塞赋值  <=

           非阻塞赋值在整个过程语句结束时才会完成赋值操作,即b的值并不是立刻改变的

(2)阻塞赋值 =

阻塞赋值在该语句结束后即完成赋值操作,即b的值在这条语句结束后立刻改变

在always过程块中,阻塞赋值可理解为赋值语句是顺序执行的,而非阻塞赋值可以理解位赋值语句是并发执行的。在一个过程块中,阻塞式赋值和非阻塞式赋值只能使用其中一种。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值