|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
全文共分为3个部分:; a% E/ b7 e% H: U0 f
- Verilog HDL 的基本知识: Z! Z; b2 Z3 X% G$ e d) D
- Verilog HDL 从结构语句到门级映射
. M7 c2 ?9 Z2 z! t; \- 模型的优化
. x2 j$ q/ {! T, d. c+ d$ ?, e0 x1 a. ?7 R( {9 k Y; q
什么是综合?
4 `& M T% N: o9 g' T. P* Q5 S2 _●综合是从采用Verilog HDL描述的寄存器传输级(RTL)电路模型构造出门级网表的过程。6 w7 K# a6 Z6 _2 S; _. K; Y
●综合可能有个中间步骤,生成的网表是由一些RTL级功能块连接组成。这时就需要RTL RTL模块构造 模块构造器来针对用户指定的目标工艺从预定义库中构造或获取每一个必 须的RTL功能块的门级网表。 7 Q4 X( E" l! P+ p( ^
●产生门级网表之后,逻辑优化器 逻辑优化器读入网表并以用户指定的面积和定时 面积和定时约束为目标优化网表。这些面积和定时约束 面积和定时约束也可以用来指导RTL RTL模块构造器 构造器适当的选取或生成RTL级功能块。 " p7 B4 |; {9 A( _# d) ?
●这里我们研究Verilog的硬件语义是为了分析以下几个问题: 4 I2 n+ n8 H# |8 a
1)数据类型如何变成硬件?" f. D5 D: g$ t" C1 K* ?
2)常量如何映射成逻辑值?" E& Z0 N: `; F$ u& M
3)语句如何转变成硬件?4 V. ~) e, ~+ I6 y
6 j/ J1 b8 J' E+ p) U; y) I
* N! g8 O+ ?" x# n! A0 `
逻辑值体系& }; W$ H7 ^0 ^
●硬件建模中常用的值有:/ K$ F. Z! G3 d( V5 F
-逻辑 0 + N- x: D1 c; ~) z b% b
-逻辑 1 3 E% a5 T4 B7 R' w( v* U) U e' @
-高阻抗/ s" ^, _: ?* `6 [3 J
-无关值
) c0 ~. W( _6 n. k/ L-不定值4 T# i8 M6 l, B2 ?9 r* t8 P
●Verilog HDL 对于无关值 之外的其它值都作了明确的定义,当值 X 被赋给某个变量时,系统通常把此值视为无关值。 I8 r1 z# X2 E8 I- r0 I
●Verilog HDL 中的值与硬件建模中的值之间的对应关系如下:
4 T/ R0 K# R' ?2 ~+ s& O-0 <--> 逻辑 0 , A0 G( b6 j1 _4 E; a' E
-1 <--> 逻辑 1 6 n) ^) Y+ x2 L6 e
-z <--> 高阻抗! f/ P0 n9 F% g& Q/ x) w
-z <--> 无关值(casez和casex 语句中)
" p/ ?* H5 \: W& m- [, ~: p-x <--> 无关值 -x <--> 不定值
/ n! g+ O1 Y5 W
. A3 \0 }. f7 ]/ \值保持器的硬件建模
3 N& x3 w8 P5 i# y1 s●硬件中有3种基本的值保持器:
9 L! z0 u! ?& S' \0 K ^-连线) e4 c* S+ j& C( C/ {
-触发器(边沿触发) 7 u& _, ?5 z; [; q @
-锁存器(电平触发) + [. }& t! G* A$ ]% _, ]8 L/ b; @! p
●net型变量被映射成硬件连线。 5 K H* l. N+ y, O( ^1 P6 D
●reg型变量则根据上下文被映射成 存储元件。(触发器或锁存器)& T: f6 Y0 e& L/ R
* ^! o* @! F! v; L●从上图中我们发现虽然变量Trq在赋值前就被引用,但同样没有映射出存储元件,因为它没有在任何条件的控制下被赋值。 7 t0 @4 J+ N: }$ Q$ f/ W; H7 i
●如果Trq是在某个电平控制下被赋值,则被映射成锁存器。 6 \$ G+ H, w. d1 B5 |" p
●如果Trq是在某个边沿控制下被赋值,则被映射成触发器。
: K- W5 P& } K, @" t: t# @; s●本文后续部分还将继续说明不同的结构语句对于值保持器硬件建模的影响。" I( {& [! Q! b
1 H) \, s: ?8 \# D
常量与参数
; j0 L$ o: i5 P9 F& o●Verilog HDL 中有3种常量:整 形、实型和字符串型。后两种的常量不能用来综合。
( ?. _. b5 a2 J●整形常量有两种形式:
/ D( A3 N: V& J4 C5 B" ?-简单的十进制(有符号数) ?9 {. }1 g' J( m% w# g
-基数格式 (无符号数) & F3 n3 k. P0 l2 Q
●只有赋值语句中指定了整形常 量的位宽,综合时才使用指定的位宽,否则位宽为32。
3 m& n% Q7 o* X) c6 _! Z●请看以下示例: 30 32位有符号数
+ m b, W$ u9 R& ]-2 二进制补码形式的32位 有符号数& C$ Z; M) G3 C( E4 e( Q7 i
2’b10 位宽为2的无符号数
. D$ \! I3 D6 d0 y& ~+ {- b-6’b4 6位无符号数(-4的补码), E% @9 |5 G* v, c4 ~1 }, B2 o5 i
●参数是命名常量。由于不能指 定位宽,因此其位宽与其对应
& k2 V/ f6 H: B的常量位宽相同。 parameter RED = -1 ;( U$ [) _8 v* Z3 g8 o
parameter READY = 2’b01 ;
6 ?/ u! @$ y; v( D. R1 d●RED 为有符号常量参数, READY为位宽为2的参数。
# i2 `. u' e6 P* J" P●注意: defparam defparam在某些综合器中无效。% {3 |- |0 {+ N5 Z- I6 v' L" U( M
应尽量采用重载模块参数的方 法。如:0 Q0 r% i# I+ Q" v
Mem mem_inst8 K2 x9 o) D# P$ {
# (32,1024)( _1 N, t6 H- q8 o
(clr,rstN,wrN,rdN,din,+ f$ S* {7 }* \1 h; h+ ^% a
dout) ;, R4 X3 C3 U- Y! t( T
......
# n& R. C. f! T! u3 G- _ |
|