EDN首页   博客首页 用户登陆  |  注册
aaa
发表于 2008/8/11 19:03:24

2

关于投票

ATM流量控制器IP核的设计和实现

作者:高亮,邱智亮

0 引言
  
ATM异步传递方式是建立在电路交换和分组交换基础上的一种面向连接的快速分组交换技术,它采用定长分组作为传输和交换的单位,并具有端到端QOS保证、完善的流量控制和拥塞控制,以及较好的技术综合能力等优势,这些都是目前的IP技术所不及的。和传统的STM电路相比,ATM技术对数据交换中猝发分组的适应能力和传输线路的利用率都是很高的。虽然,由于灵活性和价格的原因,ATM技术没有获得预期的成功,但其流量控制机制对当前变长分组骨干网的流量控制还是具有重要的参考价值,所以有必要对ATM的流量控制及其实现方式进行深入的研究。
  
IP核是一段具有特定电路功能的硬件描述语言代码,该程序与集成电路工艺无关,因而可以移植到不同的半导体工艺中去生产集成电路芯片。随着CPLD/FPGA的规模越来越大,设计越来越复杂,使用IP核是一个趋势。
  
本文研究了ATM流量控制的原理,并给出了一种IP核的实现方法,该IP核不仅可以用于独立芯片,还可以作为系统的一个子模块直接调用。
  
1 ATM流量特性分析
  
由于ATM支持的业务范围很广,各种业务对网络传输的要求也大不相同,所以需要对不同的业务进行管理。当用户建立连接时都必须与网络达成一个合约,并在通信过程中要受该合约的约束,同时网络按合约提供相应的服务,具体的业务特性参数描述如下:
  
(1)峰值信元速率(PCR)表示用户可以发送信元的最大瞬时速率;
(2)持续信元速率(SCR)表示一段时间内的平均信元速率。但SCR并不是任意一段时间内的平均信元速率。它是一个ATM连接上的平均信元速率的上限值;
(3)最大突发长度(MBS)指的是以峰值信元速率能够连续发送的最大信元数目;
(4)最小信元速率(MCR)则是用户可接受的最小信元传送速率。
  
而后,ATM论坛又按照用户要求的比特率特点将业务划分为以下几种主要的类型:
  
(1)恒定比特率(CBR)
  
用户要求固定带宽的连接,带宽大小由PCR说明。该类服务对CDVT有严格要求,适用于实时应用,如话音和视频信号传输等。
  
(2)变比特率(VBR)
  
在连接期间的带宽要求随时间变化,其带宽值用PCR、SCR、MBS表征,适用于突发的数据传输。
  
(3)不指明比特率(UBR)
  
支持非实时业务,如文件传送和电子邮件。UBR用PCR来表征,但网络只是以“最大努力”来传送这类业务。

(4)可用比特率(ABR)
  
ABR不适用于实时应用,但它要求保持较低的信元丢失率。当连接建立时,系统将以PCR和MCR分别指明最大需求带宽和最小可用带宽。而当连接建立后,系统则将根据网络当前负载情况的反馈信息来调整发送速率,但不能小于MCR。该类常用于信令的传输。具体的流量类型和参数见表1所列。


  
2 ATM流量控制器的原理和设计
  
实际应用中最常见的两种业务模式是CBR和VBR,它们分别对应着当前通信传输的语音和数据业务。针对ATM的流量算法为GCRA(一般信元速率算法)。该算法可采用公式GCRA (I,L)来描述。其中I是时间增量,表示相对当前时刻的下一个信元到达时间间隔的理论值(期望值)。L是信元时延偏差容限,表示相对期望值的下一信元可以提前到达的最大容忍范围。对应于双漏桶算法,它可以表示为第一级漏桶处理PCR,相应模型为GCRA1 (1/PCR,CDVT)。第二级漏桶处理SCR的相应模型为GCRA2 (1/SCR,BT+CDVT),根据ATM论坛规定,PCR是必须的,而SCR是可选的。如果其中的L的值较大,则将增大数据的突发程度。第一级漏桶的监控是针对单个信元的,经过第一级漏桶的平均速率可以得到控制,但是突发性还是没有得到控制。第二级漏桶是以监控若干个信元为目的,它对突发性有良好的监控和抑制作用。对于CBR型的流量,只需要第一级漏桶,因为它没有数据突发的概念,而对于VBR业务类型,第二级漏桶也是需要的,因为它有数据突发可能,所以要对它进行监控。其两级漏桶算法的示意图如图1所示。


  
由此可见,ATM的流量控制技术是较为复杂的,而且也是其精髓之所在。在参考各种资料的基础上,本文提出了一种流控的调度算法。这种调度算法是基于各个UTOPIA的PHY接口实现的。每个PHY的接口上可能存在多种流量类型(如CBR,VBR等)。该算法可根据每个PHY的流量类型来设置相应的多个调度表,每个表代表一种流量类型(如CBR,VBR等)。每个表由多个时隙槽组成,每个时隙槽中有多个要请求发送的ATM连接,每个时隙槽中的连接容量定义为cell per slot(CPS)。每个表由两个指针组成,分别为实时指针RP和服务指针SP,其中RP在每经过CPS个CELL发送时间后将移动到下一个时隙槽,而SP则要等到某个时隙槽没有等待发送的CELL时才能往下移动。如果一个连接在本时隙槽发送完后接着被调度到下个时隙槽发送,那么,此时将达到连接的最大比特速率为:
  
链接的最大速率=PHY端口的线速/CPS
  
同理,某连接的最小速率就表示在每次表的轮询过程中只被调度一次,其可以表示为:
  
最小比特速率=PHY端口的线速/((时隙数-1)×CPS)
  
假设PHY0的调度表的初始状态如图2左上角的图形所示,其中CPS=2,有8个时隙(timeslot),PHY0共有两个流量类型,那么,将有两个优先级的调度表,分别是CBR和UBR业务类型,显然CBR业务类型的优先级高于UBR。调度表中的空白表示该时隙没有连接,连接1、2被安排在时隙B发送,连接3在时隙C,连接4、5、6在时隙D。CBR和UBR都是PCR通信类型,它们可根据参数PCR来进行调度。对于连接1、2,PCR=1/2MaxPCR;对于连接3,PCR=1/3MaxPCR;对于连接4、5、6,PCR=1/4MaxPCR。开始时,服务指针和实时指针都指向时隙A。从图2可以看到PHY0的整个调度过程。第一次调度时,两个调度表的当前时隙(时隙A)均没有CELL;第二次调度时,调度表中仍没有连接,实时指针指向下一个时隙(时隙B);第三次调度时,CBR调度表的时隙B中有连接2和1,先调度2发送,然后为连接2重新安排调度,由于连接2的PCR=1/2MaxPCR,所以将2写入时隙D;第四次调度时,连接1的处理类似;第五次调度时,调度连接3,其下次调度安排在时隙F;第六次调度时。CBR和UBR调度表的当前时隙(时隙C)中都没有连接,实时指针指向时隙D;第七次调度时,CBR和UBR调度表的时隙D中均有连接,由于CBR优先级高.故从CBR调度表中读取连接1;第八次调度时,连接2被调度,实时指针指向时隙E,注意到此时由于UBR的连接未被调度,所以SP的指针就指在了那里:第九次调度时,CBR调度表的时隙E中没有连接,而UBR的时隙D有3个连接要求调度,这时从UBR调度表中调度连接4,调度完后根据流量参数将连接4写入时隙H;第十次调度时,调度连接5,然后将连接5写入时隙H同时实时指针下移,但是,因为还有连接6没有被调度,所以服务指针还在D处。其余的调度可以以此类推。


  
3 功能仿真及验证
  
该ATM流量控制器可采用硬件描述语言Verilog HDL进行描述。图3所示是在ModelSim软件环境中进行功能仿真的相应仿真结果。


  
在图3所示的PHY0调度功能仿真结果中,CLK是工作时钟,reset是复位信号,S_Req是调度请求信号(S_Req有效时进行调度),clr_S是调度请求清除信号,PHY是选中的物理设备的地址(即要进行调度的物理设备地址),chn是调度到的ATM的连接号。APCLC是当前调度到的连接所连接的下一个连接号,PCR是峰值信元速率对应的时隙调度速率,CPS是每个时隙发送的信元数,CPS_CNT是信元计数,ATY是ATM通信类型指示(00表示PCR通信类型)。本设计中的CBR和UBR都是PCR通信类型,所以ATT均为00。从仿真结果可以看出,调度到的连接号依次为0、0、2、1、3、0、1、2、4、5、2、1、3、6、1、2…,可见,与上面调度算法的分析结果一致。
  
4 结束语
  
本文主要研究了在FPGA上利用VerilogHDL实现ATM流量控制的方法,提出了一种较为实用的算法机制,并在此基础上给出了对应的IP核设计。通过对其进行的功能仿真结果表明,该算法运行良好且高效,可以满足实际系统的需要。

系统分类: 资源共享  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(266) | 回复(0)

发表于 2008/7/23 14:34:04

2

关于投票

宽带服务体系结构

宽带服务体系结构

当提到宽带网络环境的不同组成部分时,这是一个经常用到的模型。在这一模型中,用户端的远程DSL服务被称为网络的CPE部分。DSL接入多路复用器(DSLAM)以及其他通常出现在中央机房中的Layer 2设备构成了网络的网络接入供应商(NAP)部分。接入网络本身以及其他的Layer 3设备构成了该体系结构中被称为网络服务供应商(NSP)的那一部分。这一简单的体系结构是大多数宽带部署的基础。

集中设备通常出现在NAP部分。这种设备的物理位置可以是在DSLAM旁,也可以通过WAN桥接连接起来,它为NSP网络(通常是ATM)到中央机房的连接提供隧道或路由选择服务。集中器的任务是将所有的PPP或桥接连接集中在一起,并提供通往NSP网络的隧道和路由选择服务。

IP可以被直接送往ATM,或在被送往ATM之前使用PPP或以太网这样的协议对其进行处理。一种流行的作法是在将数据送往ATM之前同时使用这两种协议对其进行处理,这被称为以太网PPP。

CPE 使用的连接类型,或PPPoE使用的客户机软件,必须与集中器中使用的类型一致,这样连接才能正常工作。因此用户不能选择所使用的连接类型,它必须由服务供应商指定。在ATM中安装TCP/IP的主要选择是:

  1. PPPoA:TCP/IP--PPP--ATM(在RFC2364中定义)
  2. PPPoE:TCP/IP--PPP--以太网--ATM(在Informational RFC2516中定义)
  3. ATM IP:TCP/IP--ATM(通常被称为RFC1483R)
  4. ATM以太网:TCP/IP--以太网--ATM(通常被称为RFC1483B)
  5. 路由器桥接封装(RBE):允许忽略网桥头信息而对RFC1483B帧进行路由选择

PPP经常被用于宽带连接,因为它包含了身份验证(用户名/密码检查)功能,可以确定用户的身份,并允许ISP进行相应的使用计量和收费。

系统分类: 生活点滴  |  用户分类: 学习  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(324) | 回复(1)

发表于 2008/7/7 0:21:28

2

关于投票

QuestaSim安装完毕。环境基本搭建完毕。

QuestaSim安装完毕。环境基本搭建完毕。模块一级的仿真可以进行了。。

 

系统分类: 自由话题  |  用户分类: 学习  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(835) | 回复(1)

发表于 2008/6/12 8:10:37

4

关于投票

英语吵架的一百句--实用[推荐]

英语吵架的一百句--实用[推荐]

1. stop complaining!别发牢骚!
2. you make me sick!你真让我恶心!
3. what's wrong with you?你怎么回事?
4. you shouldn't have done that!你真不应该那样做!
5. you're a jerk!你是个废物/混球!
6. don't talk to me like that!别那样和我说话!
7. who do you think you are?你以为你是谁?
8. what's your problem?你怎么回事啊?
9. i hate you!我讨厌你!
10. i don't want to see your face!我不愿再见到你!
11. you're crazy!你疯了!
12. are you insane/crazy/out of your mind?你疯了吗?(美国人绝对常用!)
13. don't bother me.别烦我。
14. knock it off.少来这一套。
15. get out of my face.从我面前消失!
16. leave me alone.走开。
17. get lost.滚开!
18. take a hike!哪儿凉快哪儿歇着去吧。
19. you piss me off.你气死我了。
20. it's none of your business.关你屁事!
21. what's the meaning of this?这是什么意思?
22. how dare you!你敢!
23. cut it out.省省吧。
24. you stupid jerk!你这蠢猪!
25. you have a lot of nerve.脸皮真厚。
26. i'm fed up.我厌倦了。
27. i can't take it anymore.我受不了了!(李阳老师常用)
28. i've had enough of your garbage.我听腻了你的废话。
29. shut up!闭嘴!
30. what do you want?你想怎么样?
31. do you know what time it is?你知道现在都几点吗?
32. what were you thinking?你脑子进水啊?
33. how can you say that?你怎么可以这样说?
34. who says?谁说的?
35. that's what you think!那才是你脑子里想的!
36. don't look at me like that.别那样看着我。
37. what did you say?你说什么?
38. you are out of your mind.你脑子有*病!
39. you make me so mad.你气死我了啦。
40. drop dead.去死吧!
41. **** off.滚蛋。
42. don't give me your shit.别跟我*扯。
43. don't give me your excuses/ no more excuses.别找借口。
44. you're a pain in the ass.你这讨厌鬼。
45. you're an asshole.你这缺德鬼。
46. you bastard!你这杂种!
47. get over yourself.别自以为是。
48. you're nothing to me.你对我什么都不是。
49. it's not my fault.不是我的错。
50. you look guilty.你看上去心虚。
51. i can't help it.我没办法。
52. that's your problem.那是你的问题。
53. i don't want to hear it.我不想听!
54. get off my back.少跟我罗嗦。
55. give me a break.饶了我吧。
56. who do you think you're talking to?你以为你在跟谁说话?
57. look at this mess!看看这烂摊子!
58. you're so careless.你真粗心。
59. why on earth didn't you tell me the truth?你到底为什么不跟我说实话?
60. i'm about to explode!我肺都快要气炸了!
61. what a stupid idiot!真是白痴一个!
62. i'm not going to put up with this!我再也受不了啦!
63. i never want to see your face again!我再也不要见到你!
64. that's terrible.真糟糕!
65. just look at what you've done!看看你都做了些什么!
66. i wish i had never met you.我真后悔这辈子遇到你!
67. you're a disgrace.你真丢人!
68. i'll never forgive you!我永远都不会饶恕你!
69. don't nag me!别在我面前唠叨!
70. i'm sick of it.我都腻了。
71. you're such a *****!你这个*子!
72. stop screwing/ fooling/ messing around!别鬼混了!
73. mind your own business!管好你自己的事!
74. you're just a good for nothing bum!你真是一个废物!/你一无是处!
75. you've gone too far!你太过分了!
76. i loathe you!我讨厌你!
77. i detest you!我恨你!
78. get the hell out of here!滚开!
79. don't be that way!别那样!
80. can't you do anything right?成事不足,败事有余。
81. you're impossible.你真不可救药。
82. don't touch me!别碰我!
83. get away from me!离我远一点儿!
84. get out of my life.我不愿再见到你。/从我的生活中消失吧。
85. you're a joke!你真是一个小丑!
86. don't give me your attitude.别跟我摆架子。
87. you'll be sorry.你会后悔的。
88. we're through.我们完了!
89. look at the mess you've made!你搞得一团糟!
90. you've ruined everything.全都让你搞砸了。
91. i can't believe your never.你好大的胆子!
92. you're away too far.你太过分了。
93. i can't take you any more!我再也受不了你啦!
94. i'm telling you for the last time!我最后再告诉你一次!
95. i could kill you!我宰了你!
96. that's the stupidest thing i've ever heard!那是我听到的最愚蠢的事!(比尔·盖茨常用)
97. i can't believe a word you say.我才不信你呢!
98. you never tell the truth!你从来就不说实话!
99. don't push me !别逼我!
100. enough is enough!够了够了!

系统分类: 专业英语  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(456) | 回复(0)

发表于 2008/5/20 17:21:27

1

关于投票

工作计划--0807

点击下载

同时欢迎踩我的小站:点击下载点击下载

http://www.eetop.cn/bbs/?fromuid=169192

http://www.edacn.net/bbs/?fromuid=164965 

 

系统分类: 自由话题  |  用户分类: 学习  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(389) | 回复(0)

发表于 2008/4/23 11:58:20

2

关于投票

ATM技术及应用

ATM 技术及应用


一、ATM的产生


  自Alexander Graham Bell于1870年发明电话后,为有效地连接日益增多的电话用户,电话交换网应运而生。它经历了人工交换,机电式自动交换系统以及数字程控系统发展过程,但电路交换的原理一直未变。随着计算机的普及,电话网通过使用Modem来进行计算机数据传输及数据信息交换,随之产生了公用数据网,其典型的代表是X.25分组交换网,它是基干包交换的一种技术,具有信输可靠性高的优点,但由于Modem速率及交换技术本身限制, X.25只能处理中低速数据流。虽然LAN(局域网)技术的发展突飞猛进, 如Ethernet 、Token ring、Token bus等,传输速率已可达千兆,但它局域网的性质本身就大大限制了LAN的大规模的覆盖及应用,目前的LAN一般用于企业内部的数据传送,无法形成广域网的规模。
  由此我们不难看出,传统网络普遍存在以下缺陷:第一,业务的依赖性,一般性网络只能用于专一服务,公用电话网不能用来传送TV信号,X.25不能用来传送高带宽的图像和对实时性要求较高的语言信号;第二,无灵活性,即业务拓展的可能性不大,原有网络的服务质量,很难适应今后出现的新业务;第三,效率低,一个网络的资源很难被其它网络共享。
  随着社会不断发展,网络服务不断多样化,人们可以利用网络干很多事情,如收发信件、家庭办公、Video on demand、网络电话,这对网络的要求越来越高,有人还不禁提出这样一个想法:能否把这些对带宽、实时性、传输质量要求各不相同的网络服务由一个统一的多媒体网络来实现,做到真正的一线通?回答是肯定的,这就是ATM网。幸运的是,现在的半导体和光纤技术为ATM的快速交换和传输提供坚实的保障。目前的CMOS处理能力已达二三百兆,ECL可达5到10G。SDH和SONET技术提供了大容量的可靠传输,目前的STM-I标准为155.52M。


二、ATM技术


  ATM(Asynchronous Transfer Mode)顾名思义就是异步传输模式,就是国际电信联盟ITU-T制定的标准,实际上在80年代中期,人们就已经开始进行快速分组交换的实验,建立了多种命名不相同的模型,欧洲重在图象通信把相应的技术称为异步时分复用(ATD)美国重在高速数据通信把相应的技术称为快速分组交换(FPS),国际电联经过协调研究,于1988年正式命名为Asynchronous Transfer Mode(ATM) 技术,推荐其为宽带综合业务数据网B-ISDN的信息传输模式。
  ATM是一种传输模式,在这一模式中,信息被组织成信元,因包含来自某用户信息的各个信元不需要周期性出现,这种传输模式是异步的。
  ATM信元是固定长度的分组,共有53个字节,分为2个部分。前面5个字节为信头,主要完成寻址的功能;后面的48个字节为信息段,用来装载来自不同用户,不同业务的信息。话音,数据,图象等所有的数字信息都要经过切割,封装成统一格式的信元在网中传递,并在接收端恢复成所需格式。由于ATM技术简化了交换过程,去除了不必要的数据校验,采用易于处理的固定信元格式,所以ATM交换速率大大高于传统的数据网,如x.25,DDN,帧中继等。另外,对于如此高速的数据网,ATM网络采用了一些有效的业务流量监控机制,对网上用户数据进行实时监控,把网络拥塞发生的可能性降到最小。对不同业务赋予不同的"特权",如语音的实时性特权最高,一般数据文件传输的正确性特权最高,网络对不同业务分配不同的网络资源,这样不同的业务在网络中才能做到"和平共处"。

  上图就是ATM的一般入网方式,与网络直接相连的可以是支持ATM协议的路由器或装有ATM卡的主机,也可以是ATM子网。在一条物理链路上,可同时建立多条承载不同业务的虚电路,如语音,图象,文件传输等。


三、ATM业务介绍


  我们先来看一下ATM简化的协议分层示意图
 
  ATM采用了AAL1、AAL2、AAL3/4、AAL5、多种适配层,以适应A级、B级、C级、D级四种不同的用户业务,业务描述如下:
   A 级 - 固定比特率(CBR)业务:ATM适配层1(AAL1),支持面向连接的
      业务,其比特率固定,常见业务为64Kbit/s话音业务,固定码率
       非压缩的视频通信及专用数据网的租用电路。
   B 级 - 可变比特率(VBR)业务:ATM适配层2(AAL2)。支持面向连接的
      业务,其 比特率是可变的。常见业务为压缩的分组语音通信
      和压缩的视频传输。该业务具有传递介面延迟物性,其原因是
      接收器需要重新组装原来的非压缩语音和视频信息。
   C 级 - 面向连接的数据服务:AAL3/4。该业务为面向连接的业务,适
      用于文件传递和数据网业务,其连接是在数据被传送以前建立
      的。它是可变比特率的,但是没是介面传递延迟。
   D 级 - 无连接数据业务:常见业务为数据报业务和数据网业务。在
      传递数据前, 其连接不会建立。AAL3/4或AAL5均支持此业务。
注: ⑴. 由于AAL3/4协议技术复杂,于是提出AAL5用来支持C级业务。
  ⑵. 对于每级的业务,我们还可细分, 这里不一一赘述。


四、ATM应用举例-LANE


  LANE指的是LAN Emulation Over ATM, 即在ATM网上进行LAN局域网的模拟。
  大多数数据目前都是LAN上传送,例如Ethernet网等。在ATM网上应用LANE技术, 我们就可以把分布在不同区域网互联起来,在广域网上实现局域网的功能,对于用户来讲, 他们所接触到仍然是传统的局域网的范畴, 根本感觉不到LANE的存在。
  LANE技术主要用到了LANE Server, 它可以存在于一个或多个交换机内, 也可以放在一台单独的工作站中, LANE Server可简写为LES, 主要功能就是进行MAC-to-ATM的地址转换,因为Ethernet用的是MAC地址,ATM用的自己的地址方案,通过LES地址转换可以把分布在ATM边缘的LANE Client之间连接起来。
下图就是LANE的工作方式

  1、LAN Switch从Ethernet终端接收到一个帧, 这个帧的目的地址是ATM网络另一端的一台Ethernet终端。LEC即LANEClient(它驻留在LAN Switch中)于是就发送一个MAC-to- ATM地址转换请求到LES(LES驻留在ATM Switch中)。
  2、LES发送多点组播至网络上的其它LEC。 LANE的工作方式
  3、在地址表中含有被叫MAC地址的LEC向LEC作出响应。
  4、LEC接着便向其它LEC广播这个响应。
  5、发送地址转换请求的LEC认知这个响应, 并得到目的地的ATM 地址, 接着便通过ATM网建立一条SVC至目的LEC, 用ATM信 元传送数据。


五、上海ATM骨干网节点介绍


  全国ATM骨干网上海节点建于1997年4月, 开通后网络运行稳定。目前已与北京、南京、广州、杭州、西安、沈阳、武汉各大局之间直接开通了155M电路,另外还有若干大容量电路开至其它省会城市,全网业已全部联通,规模覆盖全国,具有带宽高、延迟小、无瓶颈等特点,是网络多媒体应用的最佳选择。
  目前网络提供交换型虚电路(SVC)和永久型虚电路业务,接口类型支持BNC电口和单、多模光纤, 物理接入速率有2M、34M、155M, 能满足任何业务的需求。

系统分类: 自由话题  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(506) | 回复(0)

发表于 2008/4/6 22:36:14

2

关于投票

搭建Fedora 7的VCS设计平台

点击下载

开始搭建Fedora 7的VCS设计平台。。。。。。。。。。。

同时欢迎踩我的小站:

http://www.eetop.cn/bbs/?fromuid=169192

http://www.edacn.net/bbs/?fromuid=164965 

 

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 无标签  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(699) | 回复(4)

发表于 2008/3/27 18:19:36

1

关于投票

[VHDL+Verilog]良好的代码编写风格(二十五条)(转贴自ACTEL论坛)

良好代码编写风格可以满足信、达、雅的要求。在满足功能和性能目标的前提下,增强代码的可读性、可移植性,首要的工作是在项目开发之前为整个设计团队建立一个命名约定和缩略语清单,以文档的形式记录下来,并要求每位设计人员在代码编写过程中都要严格遵守。良好代码编写风格的通则概括如下:
(1) 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;
(2) 使用有意义的信号名、端口名、函数名和参数名;
(3) 信号名长度不要太长;
(4) 对于时钟信号使用clk 作为信号名,如果设计中存在多个时钟,使用clk 作为时钟信号的前缀;
(5) 对来自同一驱动源的信号在不同的子模块中采用相同的名字,这要求在芯片总体设计时就定义好顶层子模块间连线的名字,端口和连接端口的信号尽可能采用相同的名字;
(6) 对于低电平有效的信号,应该以一个下划线跟一个小写字母b 或n 表示。注意在同一个设计中要使用同一个小写字母表示低电平有效;
(7) 对于复位信号使用rst 作为信号名,如果复位信号是低电平有效,建议使用rst_n;
(8) 当描述多比特总线时,使用一致的定义顺序,对于verilog 建议采用bus_signal[x:0]的表示;
(9) 尽量遵循业界已经习惯的一些约定。如*_r 表示寄存器输出,*_a 表示异步信号,*_pn 表示多周期路径第n 个周期使用的信号,*_nxt 表示锁存前的信号,*_z 表示三态信号等;
(10)在源文件、批处理文件的开始应该包含一个文件头、文件头一般包含的内容如下例所示:文件名,作者,模块的实现功能概述和关键特性描述,文件创建和修改的记录,包括修改时间,修改的内容等;
(11)使用适当的注释来解释所有的always 进程、函数、端口定义、信号含义、变量含义或信号组、变量组的意义等。注释应该放在它所注释的代码附近,要求简明扼要,只要足够说明设计意图即可,避免过于复杂;
(12)每一行语句独立成行。尽管VHDL 和Verilog 都允许一行可以写多个语句,当时每个语句独立成行可以增加可读性和可维护性。同时保持每行小于或等于72 个字符,这样做都是为了提高代码得可读性;
(13)建议采用缩进提高续行和嵌套语句得可读性。缩进一般采用两个空格,如西安交通大学SOC 设计中心2 如果空格太多则在深层嵌套时限制行长。同时缩进避免使用TAB 键,这样可以避免不同机器TAB 键得设置不同限制代码得可移植能力;
(14)在RTL 源码的设计中任何元素包括端口、信号、变量、函数、任务、模块等的命名都不能取Verilog 和VHDL 语言的关键字;
(15)在进行模块的端口申明时,每行只申明一个端口,并建议采用以下顺序:
输入信号的clk、rst、enables other control signals、data and address signals。然后再申明输出信号的clk、rst、enalbes other control signals、data signals;

(16)在例化模块时,使用名字相关的显式映射而不要采用位置相关的映射,这样可以提高代码的可读性和方便debug 连线错误;
(17)如果同一段代码需要重复多次,尽可能使用函数,如果有可能,可以将函数通用化,以使得它可以复用。注意,内部函数的定义一般要添加注释,这样可以提高代码的可读性;
(18)尽可能使用循环语句和寄存器组来提高源代码的可读性,这样可以有效地减少代码行数;
(19)对一些重要的always 语句块定义一个有意义的标号,这样有助于调试。注意标号名不要与信号名、变量名重复;
(20)代码编写时的数据类型只使用IEEE 定义的标准类型,在VHDL 语言中,设计者可以定义新的类型和子类型,但是所有这些都必须基于IEEE 的标准;
(21)在设计中不要直接使用数字,作为例外,可以使用0 和1。建议采用参数定义代替直接的数字。同时,在定义常量时,如果一个常量依赖于另一个常量,建议在定义该常量时用表达式表示出这种关系;
(22)不要在源代码中使用嵌入式的dc_shell 综合命令。这是因为其他的综合工具并不认得这些隐含命令,从而导致错误的或较差的综合结果。即使使用Design Compiler,当综合策略改变时,嵌入式的综合命令也不如放到批处理综合文件中易于维护。这个规则有一个例外的综合命令,即编译开关的打开和关闭可以嵌入到代码中;
(23)在设计中避免实例化具体的门级电路。门级电路可读性差,且难于理解和维护,如果使用特定工艺的门电路,设计将变得不可移植。如果必须实例化门电路,我们建议采用独立于工艺库的门电路,如SYNOPSYS 公司提供的GTECH 库包含了高质量的常用的门级电路;
(24)避免冗长的逻辑和子表达式;
(25)避免采用内部三态电路,建议用多路选择电路代替内部三态电路。


欢迎访问我的小空间:http://www.edacn.net/bbs/?fromuid=164965

系统分类: 自由话题  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(748) | 回复(0)

发表于 2008/2/25 20:41:32

4

关于投票

基于FPGA的并行CRC的研究

  相信在的系统中CRC校验已经是个司空见惯的设计。

本文总结了CRC的常规设计思路,并提供给各位同僚一个绝佳的并行CRC在线生成的工具。方便生成任意的CRC校验的Verilog 和VHDL源代码。http://www.easics.com/webtools/crctool

在这里CRC的原理就不再赘述了。不同于软件上的CRC校验,软件上一般采用查表的方法来进行CRC的校验。硬件上当然可以采用查表的方法来实现CRC的校验,缺点有两个:1占用大量的逻辑资源,2速度没有办法保障。

基于硬件的串行CRC,占用较少的资源即可实现最基本的CRC校验,基本的表达式为  移位和反馈:CRC[N-2:0] <= CRC[N-1:1];  CRC[N] <= f(x)*CRC;其中f(x)为本原多项式。跟M序列的发生逻辑很类似,是一个线形的系统。数据由高位向地位 逐级进入该线形系统,CRC为最低位数据进入系统后的CRC表达式的输出值。由此可以知道,生成一个CRC32_D32的数据需要32个时钟周期。在应用层面上来讲是不能忍受的。

于是下面我们引出并行的CRC校验的逻辑。根据串行的基本表达式 我们联立求解,我们知道他是一个的N*N的一个线形方程,很容易求解得到CRC当前值与上次迭代值的表达式:(表达式不好编辑--见源代码)。由表达式可以很容易实现但周期并行的CRC校验。前面提到了一个在线的并行CRC校验的小工具。目前的工程上应用,很大一部分代来自这个在线的小工具。只要设定一定的参数,就可以生成想要的代码。--未完待续//08-02-25

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 并行CRC FPGA Verilog VHDL 源代码  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(3208) | 回复(4)

发表于 2008/2/15 9:58:04

4

关于投票

写给想做IC设计的本科生

写给想做IC设计的本科生

我4年前本科毕业, 第一家公司是做车载系统的, 用fujitsu的单片机, 那时嵌入式系统还没有铺天盖地.
2年后, 我比较幸运的进入一家做IC的公司, ... 现在在公司SoC部门做系统设计
我的经验是, 要想在IC行业有好的发展, 自己的知识结构要有足够的广度和深度, 而这些东西只靠在
学校读书是无法获全的.
本科生的基础,只要你是电子专业的,并且大学期间没有专注于泡妞, 做IC设计应该没有任何问题.
IC领域的发展速度是所有行业里最快的, 这依赖于工艺和材料技术的发展, 新的材料和工艺, 可能随时
刷新这个领域的理论和方法论... 比如深亚微米工艺引出的功耗设计理论; 比如超大规模SoC导致新的
验证学方法.....等这些东西变成大学教材的时候, 相信我们又正在面临工艺带来的新问题.
所以, 作为一个IC工程师, 更重要应该是超强的学习能力,理解能力,应用能力,对新技术的敏感和耐心.

如果你要领导IC领域的发展, 那本科那点东西是绝对不够的;
如果你要做IC理论的应用工程师, 那本科应该是够的;

说IC行业太泛泛了, 谁也不能一个人贯穿整个行业.
IC行业就目前而言, 公司的结构是这样的:
1. 验证部门, 以前只是做模拟(NPW),和数字部分的FPGA验证, 现在又多了一个专注于功能验证的新分类
           这个新分类使用新的验证理论和验证工具(vera, systemverilog, systemc, e...)
2. 数字前端, 专注于功能模块,算法设计以及功能级别的仿真
3. 数字后端, 专注于数字部分RTL综合,静态时序分析,形式验证以及数字部分版图
4. 数字系统, 专注于数字系统的设计,构架, 功耗分析,以及全芯片的版图的布局设计和全芯片仿真;
                      这个部门就是做系统设计的, 负责协调其他所有部门的工作, 项目所有的spec从这里产生.
5. 模拟前端, 专注模拟电路设计,仿真
6. 模拟后端, 这个就是传说中的版图, 负责模拟电路的版图设计,全手工布线. 和画PCB板相似,比较挑战的
           还是高频/射频.
7. 软件部-底层驱动, 有些也叫firmware部门, 与验证部门协作. 负责底层驱动. 如果芯片里含有ROM,
                     编码和调试工作也是这个部门完成
8. 软件部-系统软件, 与应用有关, 负责操作系统设计/移植,系统软件的编写以及调试
9. 技术支持部门, --- 你可以不擅长设计, 但你一定要懂设计
10. 市场部门, --- 你可以不懂设计, 但你一定要会吹产品

当然, 一个公司不可能有那么多部门, 其中很多通常是合并在一起.
我想, 除了系统设计这个部门, 本科生应该有信心进入其他任何一个部门吧?
其中,我们会感觉数字后端和模拟是本科生的一个门槛, 其实并不是, 如果说有
门槛的话, 我相信这个门槛对硕士生也是一样的高度. 因为这两个部门往往都是要求
丰富的设计经验, 没有经过流片的考验, 理论再扎实也是虚的.
一个公司要吸收应届生到这两个部门的话, 本科生和硕士生都是可以考虑的.
虽然微电子的理论在很多大学是研究生的课程,但就本科的理论基础, 也很容易看懂.
只要你有钻研的耐心和学习的能力,并且又不急着结婚生子, 其他的都不会是障碍.

说了那么多, 这些都不可能直接帮助你进入一个IC公司.
毕竟, 现在本科生的整体素质在下降, 所以也不要怪企业在意识形态抬高人才流入的门槛.
但是, 我们也应该看到, ...研究生的整体素质也在急速下降.....

我不建议本科毕业后就接着读研究生, 这个道理大家都应该清楚吧?
摸黑读了十几年书, 都不知道以后要用它干什么!! 即使给自己描绘了一个美好的蓝图, 也不知
自己能不能胜任....现在好不容易告一段落, 你是想立刻实践一下, 还是继续摸黑前行呢?

....结论:
如果你想以后从事IC行业的话, 即使毕业后不能立刻进入IC设计公司, 也没什么.
你只要在心里牢记这个目标, 并计划好这两年应该获得哪些积累就足够了.
等到你某天幸运的进入一家IC设计公司, 知识结构的广度和深度一定能帮助你走的更顺利!

系统分类: 自由话题  |  用户分类: 学习  |  标签: 写给想做IC设计的本科生  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1541) | 回复(3)

发表于 2008/2/15 8:20:24

2

关于投票

Quartus 7.2 sp2 CRACK 需要的拿走!

rarQuartus 7.2 sp2 CRACK

http://www.edacn.net/bbs/?fromuid=164965    Dsp-Builder 7.2 SP2的破解  大家自己下载吧

系统分类: 生活点滴  |  用户分类: 学习  |  标签: 无标签  |  来源: 整理  | 

点击查看原文

发表评论 阅读全文(2313) | 回复(0)

发表于 2008/2/15 8:06:07

3

关于投票

视频解码之RGB转YUV模块(verilog)

rar仿真正确。不足请提出

http://www.edacn.net/bbs/?fromuid=164965    摘自--详细请看链接

 

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(1192) | 回复(1)

发表于 2008/2/4 8:30:42

2

关于投票

概念:毛刺、竞争、冒险

概念:毛刺、竞争、冒险

     当一个门的输入有两个或两个以上的变量发生改变时,由于这些变量是经过不同路径产生的,使得它们状态改变的时刻有先有后,这种时差引起的现象称为竞争(Race)。竞争的结果若导致冒险或险象(Hazard)发生(例如毛刺),并造成错误的后果,那么就称这种竞争为临界竞争。若竞争的结果没有导致冒险发生,或虽有冒险发生,但不影响系统的工作,那么就称这种竞争为非临界竞争。
  组合逻辑电路的险象仅在信号状态改变的时刻出现毛刺,这种冒险是过渡性的,它不会使稳态值偏离正常值,但在时序电路中,冒险是本质的,可导致电路的输出值永远偏离正常值或者发生振荡。
  组合逻辑电路的冒险是过渡性冒险,从冒险的波形上,可分为静态冒险和动态冒险。
  输入信号变化前后,输出的稳态值是一样的,但在输入信号变化时,输出信号产生了毛刺,这种冒险是静态冒险。若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静态1冒险。
  输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺,称为动态险象(冒险)。
  从引起冒险的具体原因上,冒险可以分为函数冒险和逻辑冒险。函数冒险是逻辑函数本身固有的,当多个输入变量发生变化时,常常会发生逻辑冒险。避免函数冒险的最简单的方法是同一时刻只允许单个输入变量发生变化,或者采用取样的办法。
  单个输入变量改变时,不会发生函数冒险,但电路设计不合适时,仍会出现逻辑冒险。通过精心设计,修改电路的结构,可以消除逻辑冒险。

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 概念:毛刺、竞争、冒险  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(2378) | 回复(0)

发表于 2008/2/1 10:20:58

2

关于投票

精确到微秒的万年历 FPGA verilog代码

rarcode   testbench

代码仅仅实现了计时,定时还有起闹,自己设计吧。

代一个朋友写的,与大家分享。。呵呵。。

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 生当作人杰  |  来源: 原创  | 

点击查看原文

发表评论 阅读全文(1860) | 回复(5)

发表于 2008/1/28 16:47:38

1

关于投票

不错的FPGA设计论坛

http://www.edacn.net/bbs/?fromuid=164965不错的FPGA设计论坛 含金量很高

系统分类: CPLD/FPGA  |  用户分类: 学习  |  标签: 无标签  |  来源: 转贴  | 

点击查看原文

发表评论 阅读全文(5656) | 回复(6)

2Next >Total , Page /