让心去旅行!

关于verilog综合

上一篇 / 下一篇  2006-09-08 09:35:31 / 天气: 晴朗 / 心情: 高兴

一:基本EDA中国门户网站SGF[@T&H
Verilog中的变量有线网类型和寄存器类型。线网型变量综合成wire,而寄存器可能综合成WIRE,锁存器和触发器。EDA中国门户网站[_8d;V/F/jv

U*zg%U_2h0二:verilog语句结构到门级的映射
-z K}MzEL ?H/G,[({01、连续性赋值:assign
BK BGe J V0连续性赋值语句逻辑结构上就是将等式右边的驱动左边的结点。因些连续性赋值的目标结点总是综合成由组合逻辑驱动的结点。Assign语句中的延时综合时都将忽视。EDA中国门户网站3ERBi;H C)Fv1H

)k1z*C3a[J02、过程性赋值:
$M\5k`.J0过程性赋值只出现在always语句中。EDA中国门户网站3^Od+O6m

~'IN)R)|,_J3M9{wV0阻塞赋值和非阻塞赋值就该赋值本身是没有区别的,只是对后面的语句有不同的影响。EDA中国门户网站vHyu6B^'z

E~U Oye0建议设计组合逻辑电路时用阻塞赋值,设计时序电路时用非阻塞赋值。
,I"S'm `3E ^0EDA中国门户网站%U/qXX4^1G{V-vm
过程性赋值的赋值对象有可能综合成wire,latch,和flip-flop,取决于具体状况。如,时钟控制下的非阻塞赋值综合成flip-flop。EDA中国门户网站 H @.T {0ir\
EDA中国门户网站 h-Vx;X5}l{4A0sR
过程性赋值语句中的任何延时在综合时都将忽略。
C*a Q!c]0
8S+B%`PX.dL0建议同一个变量单一地使用阻塞或者非阻塞赋值。EDA中国门户网站W)Vw&l_i6T0h e

kSn7Idd03、逻辑操作符:
9xv t Z o0J/R0逻辑操作符对应于硬件中已有的逻辑门
;tA0|;oO;qS?0
o:l!Z0S R:d04、算术操作符:
L:RGN9Q;e'H-w h)ID0Verilog中将reg视为有符号数,而integer视为有符号数。因此,进行有符号操作时使用integer,使用无符号操作时使用reg。
*L;u*R$X/d e:W0Ml0EDA中国门户网站M Xb8j5X4f X
5、进位:
4Zg3{1~"mO"W fE N,T X0通常会将进行运算操作的结果比原操作数扩展一位,用来存放进位或者借位。如:EDA中国门户网站&Gj9OF[,R,L}&e
Wire [3:0] A,B;EDA中国门户网站k8p SI9W'N.p
Wire [4:0] C;
~a0W A C8rgX0Assign C=A+B;EDA中国门户网站vMQq$ND0P$b
C的最高位用来存放进位。
5` jS7f9`3l5h0EDA中国门户网站 J2J["p+FpQ
6、关系运算符:EDA中国门户网站d,lP\!s'p9I
关系运算符:<,>,<=,>=
:TF zJ^ Y4i_h0和算术操作符一样,可以进行有符号和无符号运算,取决于数据类型是reg ,net还是integer。
5I{i$f@/Z0
qUJD(`tc07、相等运算符:==,!=EDA中国门户网站2ugH/]6r$N$b$y
注意:===和!==是不可综合的。EDA中国门户网站%Mk1}l}&ta"DZ
可以进行有符号或无符号操作,取决于数据类型
g+V/H&l K0KL3a s0EDA中国门户网站0rP3f f&E9K.A N
8、移位运算符:EDA中国门户网站 paQ9`)~o f
左移,右移,右边操作数可以是常数或者是变量,二者综合出来的结果不同。
8D V| B8Ns w3D1j0
&cS:Hb[P09、部分选择:EDA中国门户网站-r6W)Hq?4I
部分选择索引必须是常量。EDA中国门户网站 g0__6x*Pz] g
EDA中国门户网站X(b.oAK"m ^0u-i
10、BIT选择:
!|5?.a/R8I:UZO*~2~0BIT选择中的索引可以用变量,这样将综合成多路(复用)器。EDA中国门户网站!v8n ~t(H/y
11、敏感表:EDA中国门户网站 faTRL mx
Always过程中,所有被读取的数据,即等号右边的变量都要应放在敏感表中,不然,综合时不能正确地映射到所用的门。
"lP o!H h T-t |6l{n0EDA中国门户网站G/v"o^`K@Ml5H
12、IF:EDA中国门户网站@-Zo3O4Q Q+_
如果变量没有在IF语句的每个分支中进行赋值,将会产生latch。如果IF语句中产生了latch,则IF的条件中最好不要用到算术操作。Case语句类似。Case的条款可以是变量。
Z'h.WU:tNo0
cbosUh0如果一个变量在同一个IF条件分支中先赎值然后读取,则不会产生latch。如果先读取,后赎值,则会产生latch。
*h3wy5q@0EDA中国门户网站!J&_9L^$K
13、循环:EDA中国门户网站pd:J8{EQ1P%~u
只有for-loop语句是可以综合的。
E1}\ kp)[G#ga0r0
q~4aC7e9O*Sk x;H014、设计时序电路时,建议变量在always语句中赋值,而在该always语句外使用,使综合时能准确地匹配。建议不要使用局部变量。
5aK3B)i.y0
kCf,Zb015、不能在多个always块中对同一个变量赎值
I O5M1Ft0EDA中国门户网站 BG{;EpP!F
16、函数EDA中国门户网站N;|6MQ#o
函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。EDA中国门户网站(N1jAs5l!d {+U0w5T
EDA中国门户网站~G!jBW~x
17、任务:
,lt4g4X)c Aw#o0任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务。
]}k4V]#h,j2d8jF0EDA中国门户网站"L8faP3~
18、Z:
FW cKY2AO0Z会综合成一个三态门,必须在条件语句中赋值
/P!F)@9u4D{3V:r0
[aG4j8nr8g5pw019、参数化设计:EDA中国门户网站Te2l)Bp*^9]
优点:参数可重载,不需要多次定义模块
G+h)V%r(Ni6x0EDA中国门户网站$\c0QPT%x
四:模块优化
1wLxy W(z D01、资源共享:EDA中国门户网站W8e&yJ ~;UR(F
当进程涉及到共用ALU时,要考虑资源分配问题。可以共享的操作符主要有:关系操作符、加减乘除操作符。通常乘和加不共用ALU,乘除通常在其内部共用。
6w5sL`9R~.B8d0EDA中国门户网站[%HAK!]7{
2、共用表达式:EDA中国门户网站*M(WT7c1y9G"pXk8v
如:C=A+B;
]C5jU l\ ^f0D=G+(A+B);
M5p_Y9F p0两者虽然有共用的A+B,但是有些综合工具不能识别.可以将第二句改为:D=G+C;这样只需两个加法器.EDA中国门户网站6B3U jdJva

JEx.YO/R03、转移代码:
hWp}5CL Npj0如循环语句中没有发生变化的语句移出循环.EDA中国门户网站4ZN ^[Be&F;x

A:@2Q ~qudQ SI04、避免latch:EDA中国门户网站(CI$rm*j_.Y
两种方法:1、在每一个IF分支中对变量赋值。2、在每一个IF语句中都对变量赋初值。
B{1P0[ f4n0EDA中国门户网站Sn8vy0F&O
5:模块:EDA中国门户网站7A M-z8[7d}mb
综合生成的存储器如ROM或RAM不是一种好方法。最好用库自带的存储器模块。
y v,mOT0
!Xf#g2a!U pQ3P0五、验证
$L Bm5MAD+?Y"|01、敏感表:EDA中国门户网站,n)s&~Lz ?KHl
在always语句中,如果敏感表不含时钟,最好将所有的被读取的信号都放在敏感表中。EDA中国门户网站V8W"K7uR L
EDA中国门户网站!~Brx,k!MF2Xo
2、异步复位:EDA中国门户网站w$y0}e(|*v}
建议不要在异步时对变量读取,即异步复位时,对信号赎以常数值。
FPGA/CPLD器件价格查询

TAG:

引用 删除 linch8247   /   2006-09-10 13:31:41
很详细,谢谢
引用 删除 Armoric   /   2006-09-10 12:10:31
3
受益了。
Matthew的工作小站 引用 删除 Matthew_S   /   2006-09-09 14:09:13
谢谢了
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-11-21  
      1
2345678
9101112131415
16171819202122
23242526272829
30      

数据统计

  • 访问量: 14539
  • 日志数: 106
  • 图片数: 9
  • 文件数: 4
  • 建立时间: 2006-05-07
  • 更新时间: 2008-06-17

RSS订阅

Open Toolbar