择要摘录
————————————————————————
一、 数字电路设计方法
当前的数字电路设计从层次上分可分成以下几个层次:
1. 算法级设计:利用高级语言如C 语言及其他一些系统分析工具(如MATLAB)对设计从系统的算法级方式进行描述。算法级不需要包含时序信息。
2. RTL 级设计:用数据流在寄存器间传输的模式来对设计进行描述。
3. 门级:用逻辑级的与、或、非门等门级之间的连接对设计进行描述。
4. 开关级:用晶体管和寄存器及他们之间的连线关系来对设计进行描述。
算法级是高级的建模,一般对特大型设计或有较复杂的算法时使用,特别是通讯方面的一些系统,通过算法级的建模来保证设计的系统性能。在算法级通过后,
再把算法级用RTL 级进行描述。门级一般对小型设计可适合。开关级一般是在版图级进行。
二、设计方法学
当前的ASIC设计有多种设计方法,但一般地采用 自顶向下的设计方法。
三、 Verilog HDL简介
1. Verilog HDL 中有两类数据类型:线网数据类型和寄存器数据类型。线网类型表示构件间
的物理连线,而寄存器类型表示抽象的数据存储元件。 2. 可采用三种不同方式或混合方式对设计建模。这些方式包括:
行为描述方式—使用过程化结构建模;
数据流方式—使用连续赋值语句方式建模;
结构化方式—使用门和模块实例语句描述建模。
四、Verilog HDL建模概述
1. 模块(书写语法建议):
一个模块用一个文件;
模块名与文件名要同名;
一行一句语句。
信号方向按输入、输出、双向顺序描述。
设计模块时可尽量考虑采用参数化,提高设计的重用。
2. 三种建模方式
主要有结构化描述方式、数据流描述方式和行为描述方式。
结构化的建模方式:
结构化的建模方式就是通过 对电路结构的描述 来建模,即通过对器件的调用(HDL概念称为例化),并使用线网来连接各器件的描述方式。
这里的器件包括Verilog HDL的内置门如与门and,异或门xor等,也可以是用户的一个设计。结构化的描述方式反映了一个设计的层次结构。
.A (FA[2]) ,其中.A 表示调用器件的管脚A,括号中的信号表示接到该管脚A的电路中的具体信号。
数据流的建模方式:
数据流的建模方式 就是通过 对数据流在设计中的具体行为 的描述的来建模。 最基本的机制就是用连续赋值语句 。在连续赋值语句中,某个值被 赋给某个线网变量(信号),
语法如下:assign [delay] net_name = expression;在数据流描述方式中,还必须借助于HDL提供的一些运算符,
如按位逻辑运算符 :逻辑与 (&),逻辑或(| )等。
行为方式的建模:
行为方式的建模是指采用 对信号行为级的描述 (不是结构级的描述)的方法来建模。在表示方面,类似数据流的建模方式,但一般是 用
initial块语句或always 块语句描述的归为行为建模方式 。行为建模方式通常需要借助一些行为级的运算符如加法运算符(+ ),减法运算符(-)等 。
五、Verilog HDL 基本语法
1. 书写规范建议:
1 、用有意义的有效的名字如 Sum 、CPU_addr等。2 、用下划线区分词。3 、采用一些前缀或后缀,如时钟采用Clk 前缀:Clk_50 ,Clk_CPU ;低电平采用_n 后缀:Enable_n ;4 、统一一定的缩写 如全局复位信号 Rst 。5 、同一信号在不同层次保持一致性,如同一时钟信号必须在各模块保持一致。6 、自定义的标识符不能与保留字同名。7 、参数采用大写,如SIZE 。
8 、一个语句一行。采用空四格的table 键进行缩进。
2. 值集合:
Verilog HDL中规定了四种基本的值类型: 0 :逻辑0 或“假”;1 :逻辑1 或“真”;X:未知 Z:高阻。此外,x 值和z 值都是不分大小写的。
3. 整型的基数表示法,格式为[size ] 'base value。
size 定义以位计的常量的位长;base 为o 或O (表示八进制),b 或B (表示二进制),d 或D(表示十进制),h 或H (表示十六进制)之一;
value 是基于base 的值的数字序列。值x 和z 以及十六进制中的a 到f 不区分大小写。
4. 对数组类型,请按降序方式,如[7 :0] ;
5. 运算符与表达式:
(1)算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作符左端目标长度决定。
(2)表达式中的所有中间结果应取最大操作数的长度(赋值时,此规则也包括左端目标)。
(3)关系运算符有:?>(大于) ?<(小于)?>= (不小于)?<= (不大于)= = (逻辑相等)!= (逻辑不等)
如果操作数中有一位为X 或Z ,那么结果为X 。在逻辑相等与不等的比较中,只要一个操作数含有x 或z ,比较结果为未知(x )。
6. 条件语句:
if---else:
在Verilog HDL 中将else 与最近的没有else 的if 相关联。
书写格式:
(1)条件表达式需用括号括起来。
(2)若为if - if 语句,请使用块语句 begin --- end :
if(C l k)beginif(R e s e t)Q = 0;elseQ = D;end
(3)对if 语句,除非在时序逻辑中,if 语句需要有else 语句。若没有缺省语句,设计将产生一个锁存器,锁存器在ASIC设计中有诸多的弊端(可看同步设计技术所介绍)。
case 语句:case 的缺省项必须写,防止产生锁存器。
7. 对悬空端口的处理:对输入管脚悬空的,则该管脚输入为高阻 Z ,输出管脚被悬空的,该输出管脚废弃不用。
不同端口长度的处理:当端口和局部端口表达式的长度不同时,端口通过无符号数的右对齐或截断方式进行匹配。
六、赋值语句
1. 连续赋值语句:
数据流的描述是采用连续赋值语句(assign ) 语句来实现的。语法如下:assign net_type = 表达式;连续赋值语句用于组合逻辑的建模。
2. 阻塞赋值语句:“= ”用于阻塞的赋值,凡是在组合逻辑(如在assign 语句中)赋值的请用阻塞赋值。
3. 过程赋值语句:
Verilog HDL 中提供两种过程赋值语句 initial 和 always 语句,用这两种语句来实现行为的建模。这两种语句之间的执行是并行的,即语句的执行与位置顺序无关。
这两种语句通常与语句块(begin ....end )相结合,则语句块中的执行是按顺序执行的。
注意以下几点:1 、对组合逻辑的always 语句,敏感变量必须写全,敏感变量是指等式右边出现的所有标识符。2 、对组合逻辑器件的赋值采用阻塞赋值 “= ”3 、时序逻辑器件的赋值语句采用非阻塞赋值 “<=”,如上的 Q 〈= D ;