智造工坊verilog代码规范
Verilog 编码原则

/article.php?type=blog&itemid=781规则#1: 建立时序逻辑模型时,采用非阻塞赋值语句。
规则#2: 建立latch模型时,采用非阻塞赋值语句。
规则#3: 在always块中建立组合逻辑模型时,采用阻塞赋值语句。
规则#4: 在一个always块中同时有组合和时序逻辑时时,采用非阻塞赋值语句。
规则#5: 不要在一个always块中同时采用阻塞和非阻塞赋值语句。
规则#6: 同一个变量不要在多个always块中赋值。
规则#7: 调用$strobe系统函数显示用非阻塞赋值语句赋的值。
规则#8: 不要使用#0延时赋值。
组合逻辑1,敏感变量的描述完备性Verilog中,用always块设计组合逻辑电路时,1.1在赋值表达式右端参与赋值的所有信号都必须在always @(敏感电平列表)中列出, 1.2always中if语句的判断表达式必须在敏感电平列表中列出。
1.3**如果在赋值表达式右端引用了敏感电平列表中没有列出的信号,在综合时将会为没有列出的信号隐含地产生一个透明锁存器。
注:这是因为该信号的变化不会立刻引起所赋值的变化,而必须等到敏感电平列表中的某一个信号变化时,它的作用才表现出来即相当于存在一个透明锁存器,把该信号的变化暂存起来,待敏感电平列表中的某一个信号变化时再起作用,纯组合逻辑电路不可能作到这一点。
综合器会发出警告。
Example1:input a,b,c;reg e,d;always @(a or b or c)begine=d&a&b; /*d没有在敏感电平列表中,d变化时e不会立刻变化,直到a,b,c中某一个变化*/d=e |c;endExample2:input a,b,c;reg e,d;always @(a or b or c or d)begine=d&a&b; /*d在敏感电平列表中,d变化时e立刻变化*/d=e |c;end2, 条件的描述完备性如果if语句和case语句的条件描述不完备,也会造成不必要的锁存器。
2024版Verilog编程规范(华为)

实现自动化测试流程,提高测试 效率和准确性。
06
代码审查与质量保证
代码审查流程介绍
提交代码
开发人员将代码提交到代码审查 系统中。
分配审查任务
系统或审查组长将审查任务分配 给审查人员。
代码审查
审查人员对代码进行逐行审查, 检查是否符合编程规范和质量要
求。
审查通过
经过多轮反馈和整改后,代码符 合要求,审查通过。
通过定期的培训、分享和宣传活动,提高开 发人员对Verilog编程规范的认识和重视程度。
引入自动化检查工具
建立持续改进机制
研究和引入自动化检查工具,对Verilog代码 进行静态分析和规范检查,进一步提高代码 质量和开发效率。
建立规范的持续改进机制,收集开发人员的 反馈和建议,及时调整和优化规范内容。
可重用性原则
模块应具有高内聚、低耦 合的特点,便于在不同项 目中重用。
可维护性原则
模块应易于理解、测试和 修改,以降低维护成本。
顶层结构设计方法
自顶向下设计
从系统整体需求出发,逐 步细化到各个模块的设计 和实现。
模块化设计
将系统划分为多个独立的 模块,每个模块承担一定 的功能,便于并行开发和 维护。
减少错误和提高代码质量
02
规范的编程习惯有助于减少编码过程中的错误,提高代码的稳
定性和可靠性。
促进知识共享和传承
03
统一的编程规范有利于知识的积累和传承,降低新人学习成本,
提高团队整体技术水平。
适用范围及对象
适用范围
本规范适用于使用Verilog语言进 行硬件描述和设计的所有场景,包 括但不限于数字电路设计、验证、 仿真等。
端口名应避免与模块内部变量名冲突。
verilog的代码规范和coding风格

verilog的代码规范和coding风格想要成为一名优秀的数字IC设计工程师需要哪些基本的专业知识呢?如下:1.半导体物理学、半导体器件物理学、基本的固体物理、半导体工艺与制造等物理学知识;2.电路分析、模拟电子线路、COMS模拟集成电路、专用集成电路基础等模拟IC知识;3.信号系统、数字信号处理、信道编码、通信原理等通信知识;4.C语言、汇编、C++、脚本(shell、tcl、perl)、Linux(我觉得如果懂kernel那就更好了)、体系结构、组成原理等计算机知识;5.各种EDA和编程调试工具的使用Modelsim、Debussy、quartus ii、Cadence、DC、vim等等(就数字方向而言用的最多的5种左右,模拟另当别论);另外虚拟机什么的总得玩得转吧!6.当然最重要的还是我们亲爱的--verilog,不会verilog(当然VHDL也是一样的)那你会别的也算不上优秀的Digital IC Engineer!verilog语法并不复杂,只是初学者容易犯一些“类C”错误,总会不经意间将verilog写成了C语言,或者是没有使用并行思想,或者就是多处赋值等等问题。
如果我们克服了之前的一些小毛病,在这些之外,我们想更近一步提升自己的写代码水平、研发水平,而不是只做一个码农的话那么我们要做的就是:第一步:提高代码规范性,每个企业、研究所可能都有自己的一套代码书写规范,但是总的来说都有一些共性,而且往往这些共性的地方还特别多,一个没有代码规范的程序员不可能写出非常漂亮和优秀的程序,当然有了规范的代码后也不一定就能写出漂亮和优秀的程序,这是两码事。
代码规范之后的一个境界我觉得是优良的编程风格,编程风格不同于代码规范,编程风格在verilog中特别指代那些逻辑上的风格,同样的功能,使用不同的编程风格,代码综合面积可能是几倍的关系,这一点我深有体会,另外,人们不经意间的编码习惯可能会导致许多冗余代码,在verilog综合之后,这些冗余就会成为实实在在多出来的不必要的电路,他们或者是寄存器或者是没用的组合逻辑,虽然往往DC一类的综合工具会对代码综合进行优化,并且会根据综合脚本进行最大化的优化计算,但是工具毕竟是工具,他不可代替人类,很多冗余电路综合工具并没有办法进行优化,因为工具并不知道你的本意,也不可完全进行语意预测,而不必要的电路意味着更多的流片成本,更低的work效率和更多的功耗消耗,这些都不是我们想看到的,所以一个好的coding风格本身对于企业来说就是非常大的价值!!!当然我认为要培养良好的coding风格并不是一件容易的事,本身 verilog design == 电路设计,透过代码看电路这个能力并不是一蹴而就的,这需要我们的长期的学习和思考总结,就像模拟设计一样,往往这是一种经验!。
Verilog编码规范

ASIAN MICROELECTRONICS CO.LTDVerilog编码规范From:项目管理部文档编号:AM-PMD038本规范规定了Verilog编码规范,即采用Verilog设计时的代码书写规范,本规范适用于逻辑芯片开发中使用Verilog语言作为RTL级设计语言电路描述规则(注释部分)关键词:Verilog HDL、注释摘要:本文档规定了在用Verilog HDL描述电路时注释要求。
一、在使用Verilog HDL描述电路时,为了增加电路的可读性,必须在电路中加入注释。
为了统一和规范设计,制定该规则。
二、Verilog HDL 模块结构:在用Verilog HDL描述电路时,基本结构如下:{注释1}module [模块名(端口名列表)][参数定义] //{注释2}[端口类型说明]//{注释3}[数据类型说明]//{注释4}{注释5}[描述体部]//{注释6}endmodule三、各部分注释具体要求:1. 注释1:在module 语句以前;建立时间和设计人;ASIAN MICROELECTRONICS CO.LTD修改时间和修改人列表;描述模块的功能;仿真文件名;2. 注释2:参数定义以后。
每行只能定义一个参数;参数的含义;正常情况的取值;3. 注释3:端口类型说明以后。
每行只能说明一个端口;端口的信号含义;4. 注释4:数据类型说明以后。
每行只能说明一个数据;数据的具体含义;修改时间和修改人列表;5. 注释5:在每个always前;描述该块语句完成的功能;6. 注释6:关键的判断语句后;简单描述语句的功能;四、说明:1. 不得使用中文注释;2. 需要时使用参数化设计;3. 模块、端口和变量命名尽可能统一,且意义明确;4. 各描述体功能尽可能明确和单一;5. 对任何需存档的修改必须记录在设计文挡中。
ASIAN MICROELECTRONICS CO.LTD 电路描述规则(代码部分) 大类 编号规则要素 1低电平有效的信号,信号名后缀“_n ” 2模块名小写 // 对AM0202不作要求。
Verilog代码书写规范

Verilog代码书写规范2.5.1 信号命名规则信号命名规则在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员代码的查错和验证。
比较著名的信号命名规则当推Microsoft 公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。
例如所有的字符变量均以ch为前缀,若是常数变量则追加前缀c。
信号命名的整体要求为:命名字符具有一定的意义,直白易懂,且项目命名规则唯一。
对于HDL设计,设计人员还需要注意以下命名规则。
1.系统级信号的命名系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号。
系统信号以字符串sys或syn开头;时钟信号以clk开头,并在后面添加相应的频率值;复位信号一般以rst或reset开头;置位信号为st或set开头。
典型的信号命名方式如下所示:wire [7:0] sys_dout, sys_din;wire clk_32p768MHz;wire reset;wire st_counter;2.低电平有效的信号命名低电平有效的信号后一律加下划线和字母n。
如:wire SysRst_n;wire FifoFull_n;3.过锁存器锁存后的信号经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。
如:信号CpuRamRd信号,经锁存后应命名为CpuRamRd_r。
低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。
如:CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr多级锁存的信号,可多加r以标明。
如:CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。
2.5.2 模块命名规则HDL语言的模块类似于C语言中的函数,可采用C语言函数的大多数规则。
模块的命名应该尽量用英文表达出其完成的功能。
遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度一般不少于2个字母。
经典Verilog代码标准

一、工程建立规范:1、工程的组成:(1)一个顶层文件夹(2)顶层文件夹下,至少包括以下四个子文件夹a)project文件夹:存放ISE工程文件,包括ise、bit、mac等文件b)source文件夹:存放verilog源文件c)explain文件件:存放注释说明文档d)test文件夹:存放测试程序代码,可进一步分为软件调试程序、硬件调试程序2、工程的命令:(3)定层文件夹命令为top_xxx,xxx为工程的识别名称(4)顶层文件夹的子文件夹分别命名为:project、source、explain、test二、RTL CODE 规范1.标准的文件头在每一个版块的开头一定要使用统一的文件头,其中包括作者名,模块名,创建日期,概要,更改记录,版权等必要信息。
统一使用以下的文件头:// **************************************************************// COPYRIGHT(c)2005, Hislicon Technologies Co, Ltd// All rights reserved.//// IP LIB INDEX : IP lib index just sa UTOPIA_B// IP Name : the top module_name of this ip, usually, is same// as the small ip classified name just as UTOPIA// File name : file_name of the file just as “tx_fifo.v”// Module name : module_name of this file just as “TX_FIFO”// Full name : complete Emglish nme of this abbreviated//// Author : Athor/ID// Email : Author‟s email// Data :// Version : V 1.0////Abstract :// Called by : Father Module//// Modification history// ------------------------------------------------------------------------------------------------------// //// $Log$//// *********************************************************************2. 标准的module 格式(module 整体结构)对于模块的书写采用统一的格式便于项目内部成员的理解和维护,我们用批处理建立了一个MODULE模块,其内容解释如下:●端口定义按照输入,输出,双向的顺序:●模块名、模块例化名统一,例化名前加大写U_以区分(多次例化另加标识),三者关系:文件名:xxx .v (小写)模块名:Xxx (首字母大写)例化名:U1_xxx (首字母大写)IP 内部所有的模块名都要加IP名或者IP名简称作前缀,如USB_CTRL、USB_TX_FIFO。
Verilog编码要求规范

Verilog编码规(仅供部使用)拟制: xxx 日期:xxx审核: 审核者日期:yyyy-mm-dd 批准: 批准者日期:yyyy-mm-dd所有侵权必究修订记录目录1命名规 (8)2代码编写规 (11)2.1 版面 (11)2.2 编写代码规 (12)3电路设计规则 (26)3.1 时钟 (26)3.2 复位 (27)3.3 避免LATCH (28)3.4 避免组合反馈 (29)3.5 赋值语句 (29)3.6 case语句和if-then-else语句 (29)3.7 状态机 (30)3.8 异步逻辑 (33)4模块划分 (33)5提高可移植性的编码风格 (34)5.1 采用参数化设计 (34)5.2 采用独立于工具平台和工艺库的设计 (35)5.3 尽量使用已经得到验证的IP (36)6其他一些设计建议 (36)7附件 (39)8参考文档: (46)基本原则:简单,一致,可重用。
●简单指尽量使用简单的语句,尽量使用简单的设计,尽量使用简单的时钟,尽量使用简单的复位。
●一致指尽量保持代码风格一致,尽量保持命名一致。
●可重用指有成熟的IP尽量使用IP,设计的代码要尽量可重用。
1命名规给信号命名就像给孩子取名字一样,有区别,有根源,有深度,还有一点,要简单,别冗长。
有区别指取名字不要一样,假如大家只有一个手机,那这个还能有什么用处?有根源指取名字要能象姓氏一样,让人一看就直到是家的后代而不是家的。
有深度就是取名字要有涵义,一,二,三虽然也是名字,但是请考虑一下被取名字人的感受。
简单点,几十个字母长的名字,打字的和看字的都累。
♦大小写规则:只有parameter,`define和module名称才能享受大写。
♦Module 名应与文件名保持一致(文件名是小写),假如不想在设计后面遇到麻烦的话。
♦不要尝试使用任何保留字,因为他们已经被保留了。
♦不要重复使用同样的名字去命名不同的数据。
♦(建议)对module名加”_LVx”的后缀,增强module名称的结构层次含义如:设计顶层为TOP LEVEL,即LEVEL1,命名为QTRxxxx_LV1;时钟模块,IO_PAD,CORE,为LEVEL2,命名为CLK_PROC_LV2等等;CORE子模块为LEVEL3,然后以此类推。
Verilog代码书写规范

Verilog代码书写规范2.5.1 信号命名规则信号命名规则在团队开发中占据着重要地位,统一、有序的命名能大幅减少设计人员之间的冗余工作,还可便于团队成员代码的查错和验证。
比较著名的信号命名规则当推Microsoft 公司的“匈牙利”法,该命名规则的主要思想是“在变量和函数名中加入前缀以增进人们对程序的理解”。
例如所有的字符变量均以ch为前缀,若是常数变量则追加前缀c。
信号命名的整体要求为:命名字符具有一定的意义,直白易懂,且项目命名规则唯一。
对于HDL设计,设计人员还需要注意以下命名规则。
1.系统级信号的命名系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号。
系统信号以字符串sys或syn开头;时钟信号以clk开头,并在后面添加相应的频率值;复位信号一般以rst或reset开头;置位信号为st或set开头。
典型的信号命名方式如下所示:wire [7:0] sys_dout, sys_din;wire clk_32p768MHz;wire reset;wire st_counter;2.低电平有效的信号命名低电平有效的信号后一律加下划线和字母n。
如:wire SysRst_n;wire FifoFull_n;3.过锁存器锁存后的信号经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。
如:信号CpuRamRd信号,经锁存后应命名为CpuRamRd_r。
低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。
如:CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr多级锁存的信号,可多加r以标明。
如:CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。
2.5.2 模块命名规则HDL语言的模块类似于C语言中的函数,可采用C语言函数的大多数规则。
模块的命名应该尽量用英文表达出其完成的功能。
遵循动宾结构的命名法则,函数名中动词在前,并在命名前加入函数的前缀,函数名的长度一般不少于2个字母。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初级(注释)
更改
逻辑修改的地方必须注明修改者,日期,修改内容等信息
初级(注释)
Timing&数据结构 对重要的接口Timing和数据结果做相应的注释
初级(端口定义)
端口定义
1)端口信号必须采用下图的格式定义 2)每行只定义一个信号 3)每行缩进4个空格 4)定义信号,注释必须列对齐 5)端口定义注释必须标明信号方向,信号位宽,信号含义 6)多位宽端口必须以[n:0]格式定义,n可以是参数 7)信号名缩写必须符合缩写规范(见信号定义部分)
Timer Trigger
LoopBack 2
Ethernet MAC
LoopBack 1
Ethernet PCS/PMA
GTX
BUFG
ui_clk (150MHz)
200MHz
MMCM
BUFG
PCIE(125MHz)
DDR3(150MHz)
Ethernet CLK (125MHz/12.5MHz/1.25MHz)
规范后:
期望结果
BUS_CLK BUS_DATA
实际结果
D0
D1
D2
D3
Dn
ODDR,OFF到引脚上延时是相对固定的,时序模型可控
IBUFGDS
IBUFGDS_GTE2
XC7K160T
Local(100MHz)
IBUFGDS_GTE2
AFDX DDR3 Write Ctrl
AFDX DDR3 Read Ctrl
顶层要求
1)顶层模块只允许例化子模块,不允许在顶层模块描述组合或时序逻辑 2)顶层模块只允许定义wire型变量,用以模块互联 3)顶层模块例化子模块需按照数据流顺序例化并加以编号
中级规范
组合逻辑 赋值 Case语句
状态机 时钟复位 异步处理
中级(组合逻辑)
组合逻辑 尽可能使用 assign语句设计组合逻辑
Channel 4
Ethernet CLK(125MHz/12.5MHz/1.25MHz)
100MHz
CLK & Reset
MIG
AFDX DDR3 Write Ctrl
AFDX DDR3 Read Ctrl
LoopBack 4
Error Check Error Insert
LoopBack 3
Timer Mark
初级(注释)
文件头 文件头包含公司信息,文件名,模块名,模块功能,描述类型,版本,日期,作者,注释等信息
初级(注释)
模块分段 模块段包括 模块头,参数定义,信号定义,模块描述主体
初级(注释)
功能分段 根据不同的逻辑功能,把逻辑主体分成小段描述,更易理清逻辑思路
初级(注释)
寄存器
注释寄存器每bit的功能,读写属性,地址等信息
中级(时钟输出)
时钟输出 时钟输出尽量用ODDR输出
规范前:
期望结果
BUS_CLK
BUS_DATA
D0
D1
D2
D3
Dn
实际结果
时钟延时不固定
D0
D1
D2
D3
Dn
• BUS信号为外部输出信号,设计者本意是时钟输出的上升沿在数据总线窗口的中间 • 由于时钟布线延时,时钟上升沿窗口不可预测 • 接收端很可能出现采样亚稳态现象,造成数据不稳定 • 由于综合布局布线的变化,可能出现每次布线后接收端采样结果不同 • 如果r_BUS_DATA_OFF没有放入IOB寄存器,数据采样更加混乱
Channel 3
Ethernet CLK(125MHz/12.5MHz/1.25MHz)
PCIE EndPoint
PCIE Control
125MHz
PCIE DDR3 Write Control
PCIE DDR3 Read Control
AXI Interconnect
AFDX DDR3 Write Ctrl
初级(注释)
注释
注释包含如下几部分: 1)文件头 2)段注释,将代码按不同的功能区间注释清楚 3)信号注释,用以说明端口信号,参数,变量的位宽,方向,类型,含义 4)重要接口Timing,寄存器需重点注释 5)复杂逻辑需重点注释
理念:优秀的逻辑架构 + 合理规范的信号命名 = 最好的注释 不合理的混乱的逻辑架构,杂乱无章的信号名,再好的注释也难以理解
Verilog 代码规范
陈永/Jon chen 2015.12.16
FPGA项目规范体系
智造工坊FPGA项目的执行需要严格按照完整的规范体系完成,代码规范只是一个组成部分。
智造工坊FPGA项目规范
流
工
文
代
实
仿
测
验
维
程
程
档
码
现
真
试
收
护
规பைடு நூலகம்
规
规
规
规
规
规
规
规
范
范
范
范
范
范
范
范
范
代码规范声明
本课程所述的Verilog代码规范是根据本公司近20年来数百个FPGA项目经验总结出的规范,旨在 提高内部工程师工作效率和工作质量。
初级(缩进与对齐)
缩进与对齐 1) 所有缩进采用4空格形式,不允许出现tap字符(可用工具将tap转为空格) 2) 端口定义,参数定义,信号定义,赋值语句都需要做到行列对齐
初级(输出)
输出
模块所有输出端口在单独段内说明
初级(always块)
Always块
1) always块的begin end 采用如下方式 2) 一个always块内建议只对一个信号赋值(总线,解码等特例除外) 3)复位信号为单独层级进行描述
初级(基本要求)
基本要求
1) 代码中必须全部是英文格式字符 2) 代码中不允许出现多余空行 3) 代码中不允许行后出现多余空格 4) 代码中不允许出现tap字符,全部用4个空格替代 5) 每行代码尽量保证行列对齐 6)代码中不允许出现错误注释或前后矛盾的注释
初级(基本要求)
基本要求 不规范:
规范:
对齐方式 缩进方式
模块例化 顶层要求
初级(文件名,模块名)
文件名,模块名
1) 文件名和模块名保持一致 2) 文件以小写.v为后缀名 3) 文件名和模块名由小写字母a-z,数字0-9,下划线组成 4) 文件名和模块名长度不超过16个字符 5) 文件名和模块名中的几个词组以下划线隔开 6) 文件名和模块名要有一定含义,和模块功能保持一致 7) Altera公司的Ipcore以ALT开头,Xilinx芯片的Ipcore以XIL开头(一个项目多家芯片) 8) 时钟复位控制模块统一用clk_rst,寄存器模块统一用reg_ctrl 9) 单芯片项目FPGA顶层模块名统一用fpga_top 10) 多板卡多芯片项目FPGA顶层模块名用xx_fpgan_top命名(xx:板卡名,n:FPGA编号)
初级规范 (外在形式,基本规范,风格统一即可) 增加代码可读性,复用性,统一性,维护性
中级规范 (基本保障,建议统一执行) 提升编码效率,降低语法出错率和逻辑出错率
高级规范 (经验总结,建议在项目中体会) 提高代码实现效率,优化FPGA逻辑资源,提高设计可靠性和稳定性
初级规范
文件名与模块名定义 文件头 注释 模块内部结构 端口定义 参数定义 信号定义
初级(信号名缩写)
信号名缩写
以下为部分缩写:
名称 request acknowledge adress valid control clock delay
缩写 req ack addr vld ctrl clk dly
名称 enable error disable posedge negedge frame input
AFDX DDR3 Read Ctrl
LoopBack 4
Error Check Error Insert
LoopBack 3
Timer Mark
Timer Trigger
LoopBack 2
Ethernet MAC
LoopBack 1
Ethernet PCS/PMA
GTX
Register Timer Sync
初级(信号定义)
信号定义
1)变量信号必须采用下图的格式统一定义,并用段注释标注 2)寄存器变量以小写r_开头,后面全部大写 3)线性变量以小写s_开头,后面全部大写 4)每行缩进4个空格 5)信号定义,信号名,注释必须列对齐 6)信号类型,位宽,含义必须注释清楚 7)多位宽信号必须以[n:0]格式定义,n可以是参数 8)信号名缩写必须符合缩写规范(见信号定义部分)
初级(模块结构)
模块结构
1) 所有参数必须在参数定义区统一定义 2) 所有信号变量必须在信号定义区按使用顺序统一定义 3) 所有输出信号必须在输出列表中统一描述 4) 逻辑描述区根据功能分段描述并加以分段注释 5)一个文件内只允许有一个模块
文件头 模块名 端口定义 参数定义 信号定义 输出列表 逻辑描述区 模块结束
缩写 en err dis pos neg frm in
名称 output ready receive transmit write read length
缩写 out rdy rx tx wr rd len
名称 count arbiter config decode encode
缩写 cnt arb cfg dec enc
PCIE_RESET_OUT
PCIE Control
PCIE DDR3 Write Control
PCIE DDR3 Read Control