一.CPLD和FPGA的主要区别
1. 结构上的不同:CPLD-乘积项 FPGA-基于查找表(LUT) 2. 集成度的不同
CPLD:500 - 50000门;FPGA:1K – 几千万门 3 应用范围的不同
CPLD逻辑能力强而寄存器少(1K左右), 适用于控制密集型系统;FPGA逻辑能力较弱但寄存器多,适于数据密集型系 CPLD CPLD逻辑密集型----适于简单逻辑功能 逻辑密集型----适于简单逻辑功能2、中小规模(1000 ~ 50000) 2、中小规模(1000 ~ 50000)3、布线延迟固定,时序特性稳定 3、布线延迟固定,时序特性稳定4、编程数据不丢失,电路简单 4、编程数据不丢失,电路简单5、保密性好 5、保密性好 HDL功能: HDL功能 数字系统设计、综合(部分语法支持)
二.Verilog HDL适用的描述层次:
1、系统级(System) 部分可物理实现,主要用于仿真 2、算法级(Alogrthem) 部分可物理实现,主要用于仿真 3、寄存器传输级(RTL)可完全物理实现,用于电路设计 4、逻辑级(Logic) 可完全物理实现,用于电路设计 5、门级(Gate) 可完全物理实现,用于电路设计
6、电路开关级(Switch)软件中不涉及,用于芯片设计
三.电路的两种基本计算机输入方式——原理图输入和硬件描述语言输入 四.语言输入与原理图输入方式相比的优点: 1、容易把设计移植到不同厂家的不同芯片中去;
2、信号位数容易修改,可以很方便的适应不同规模的应用; 3、与实现工艺无关;Verilog HDL综合器生成标准的电子设计互换格式(EDIF)文件,方便文档交换与保存;
FPGA 1、数据密集型——适于复杂的时序逻辑 2、大规模设计(5000 ~ 数百万门) 3、布线灵活,但时序特性不稳定 4、需用专用的 ROM 进行数据配置 5、保密性较差 数字系统仿真、验证(全部语法支持) 五.软核、固核、硬核的概念 软核(Soft Core):功能经过验证的、可综合的、实现后电路结构总门数在5000门以上
的Verilog HDL模型。由软核构成的器件称为虚拟器件。三者中灵活性最高。 固核(Firm Core):指在某一种现场可编程门阵列(FPGA)器件上实现的、经验证是正确的、总门数在5000门以上电路结构编码文件。 硬核(Hard Core):指在某一种专用集成电路(ASIC)工艺的器件上实现的、经验证是正确的、总门数在5000门以上的电路结构版图掩膜
六.Verilog的两种描述——如果只从行为和功能的角度来描述某一电路模块,就称为行为模块;如果从电路结构的角度来描述该电路模块,就称为结构模块。 七.综合的概念——Verilog模块(程序)通过计算机上运行的综合软件工具(属EDA软件)把行为描述通过逻辑表达式的中间形式自动转换为结构描述的模块,这个过程叫做综合(Synthesis)。
八.元件例化(层次设计方法)——这种引用现成元件或模块的方法叫做实例化或实例引用,是表示电路构造的一种常用语法现象。 例子
module trist1(sout,sin,ena);
output sout; input sin,ena;
mytri tri_inst(.out(sout), .in(sin), .enable(ena)); endmodule
module mytri(out,in,enable); output out; input in,enable;
assign out=enable ? in: ‘bz; Endmodule
九.在模块中产生逻辑的3种方法
用“assign”连续赋值语句
用元件例化方法(即元件调用)
用“always”块
用input定义的端口信号没有类型说明,只有output定义的信号和内部信号具有wire、reg类型声明要求。信号定义为output类型时默认隐含为wire型。
十.常量
1.整型常量有4种进制表示形式: 二进制整数(b或B),
十进制整数(d或D),
十六进制整数(h或H), 八进制整数(o或O)。
2.数字表达方式有以下3种:1) <位宽><进制><数字> 这是一种全面的描述方式。 2) <进制><数字> 数字的位宽采用缺省位宽(这由具体的机器系统决定,但至少32位)。
3) <数字>采用缺省进制(十进制),位宽采用缺省位宽。 3.位宽始终表示的是二进制位数,与进制符号无关。
4.在一个模块中改变另一个模块的参数时,使用defparam命令。
十一.变量
1.Wire型
说明:(1)wire网络数据类型表示结构实体(例如门)之间的物理连接。
(2)网络类型的变量不能储存值,而且它必须受到驱动器的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是高阻的,即其值为z。
(3)wire型数据常用来表示以assign关键字指定的组合逻辑信号。
(4)Verilog程序模块中输出信号类型默认时自动定义为wire型。wire型信号可以用做任何方程式的输入,也可以用做“assign”语句或实例元件的输出。
2.reg型
说明:(1)reg型是寄存器数据类型。
(2)reg类型数据的默认初始值为不定值x。
(3)reg型数据常用来表示“always”模块内的指定信号,常代表触发器。(4)在\”块内被赋值的每一个信号都必须定义成reg型。
(4)reg型信号并不一定是寄存器或触发器的输出,它只表示被定义的信号将用在“always”块内。而当reg型信号确实是寄存器或触发器的输出时,只有always块或initial块可以操作该类型信号
3.memory型
说明:(1)Memory型即存储器类型; (2)Verilog HDL通过对reg型变量建立数组来对存储器建模,可以描述RAM型存储器,ROM存储器和reg文件。
(3)数组中的每一个单元通过一个数组索引进行寻址。 (4)在Verilog语言中没有多维数组存在。
(5)memory型数据的格式如下:
reg [n-1:0] 存储器名 [m-1:0] 或 reg [n-1:0] 存储器名 [m:1]
说明:reg [n-1:0]定义了存储器中每一个存储单元的大小,即该存储单元是一个n位的寄存器,存储器名后的[m-1:0]或[m:1]则定义了该存储器中有多少个这样的寄存器,最后用分号结束定义语句。
(6)一个由n个1位寄存器构成的存储器组是不同于一个n位的寄存器的,一个n位的寄存器可以在一条赋值语句里进行赋值,而一个完整的存储器则不行,如果想对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。
十二.运算符及表达式
1. 基本的算术运算符
规则:(1)在进行整数除法运算时,结果值要略去小数部分,只取整数部分;
(2)进行取模运算时,结果值的符号位采用模运算式里第一个操作数的符号位。 (3)在进行算术运算操作时,如果某一个操作数有不确定的值x,则整个结果也为不定值x。
2. 位运算符
1) 取反(~) 2)按位与(& )
3)按位或(|) 4)按位异或( ^ )
5)按位同或( ^ ~)
注意:不同长度的数据进行位运算;系统自动的将两者按右端对齐。位数少的操作数会在相应的高位用0填满,以使两个操作数按位进行操作。
十三.运算符、赋值语句和结构说明语句
1.逻辑运算符
(1) &&逻辑与; (2) ||逻辑或; (3) !逻辑非。
2.关系运算符
关系运算符共有以下4种:(1) ab —a大于b(3) a<=b—a小于或等于b (4) a>=b —a大于或等于b
关系为假(flase),则返回值是0;关系为真(true),则返回值是1;如果某个操作数的值不定,则关系是模糊的,返回值是不定值x 3.等式运算符
(1) ==(等于); (2) !=(不等于); (3) ===(等于); (4) !==(不等于)。
注意:(1)“==”和“!=”又称为逻辑等式运算符,其结果由两个操作数的值决定。由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。
(2)“===”和“!==”运算符在对操作数进行比较时对不定值x和高阻值z也进行比较,两个操作数必须完全一致,其结果才是1,否则为0。“===”和“!==”运算符常用于case表达式的判别,所以又称为“case等式运算符”。关键点:结果不会出现x,只能是1或0。
if(A==1’bx) $display(“A is X”); (当A等于x时,这个语句不执行) if(A===1’bx) $display(“A is X”); (当A等于X时,这个语句执行)
4.移位运算符
“<<”(左移位运算符)和“>>”(右移位运算符)。 左移位宽增加,右移位宽不变 5.位拼接运算符
用这个运算符可以把两个或多个信号的某些位拼接起来进行运算操作。其使用方法如下: {信号1的某几位,信号2的某几位,??信号n的某几位}
即把某些信号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。
6.缩减运算符
缩减运算是对单个操作数进行与、或、异或、同或等的递推运算,最后的运算结果是1位的二进制数。