我来我网
https://5come5.cn
您尚未
登录
注册
|
菠菜
|
软件站
|
音乐站
|
邮箱1
|
邮箱2
|
风格选择
|
更多 »
vista
鍙よ壊涔﹂
card
wind
绮夌孩濂抽儙
帮助
统计与排行
无图版
我来我网·5come5 Forum
»
学业有成
»
电子设计·数学建模
»
硬件编程专题——Verilog代码编写规范
交 易
投 票
本页主题:
硬件编程专题——Verilog代码编写规范
显示签名
|
打印
|
加为IE收藏
|
收藏主题
|
上一主题
|
下一主题
gxuan1
∷
性别:
∷
状态:
∷
等级:
荣誉会员
∷
家族:
水族馆
∷
发贴:
5200
∷
威望:
3
∷
浮云:
407
∷
在线等级:
∷
注册时间: 2006-02-20
∷
最后登陆: 2007-12-02
【
复制此帖地址
只看此人回复
】
5come5帮你背单词 [
glory
/'glo:ri/
n. 光荣,荣誉,壮丽,壮观
]
硬件编程专题——Verilog代码编写规范
Verilog代码编写规范,大家可以借鉴一. 强调Verilog代码编写风格的必要性。
强调Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。
每个代码编写者都有自己的编写习惯,而且都喜欢按照自己的习惯去编写代码。与自己编写风格相近的代码,阅读起来容易接受和理解。相反和自己编写风格差别较大的代码,阅读和接受起来就困难一些。
曾有编程大师总结说,一个优秀的程序员,能维护的代码长度大约在1万行数量级。代码的整洁程度,很大程度上影响着代码的维护难度。
遵循代码编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常晦涩、凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。
(实际上英文Coding Style有另一层涵义,更偏重的是,某一个电路,用那一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更合理。本文更偏重的是,编写Verilog代码时的书写习惯。)
二. 强调编写规范的宗旨。
缩小篇幅
提高整洁度
便于跟踪、分析、调试
增强可读性,帮助阅读者理解
便于整理文档
便于交流合作
三. 变量及信号命名规范。
1. 系统级信号的命名。
系统级信号指复位信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以字符串Sys开头。
2. 低电平有效的信号后一律加下划线和字母n。如:SysRst_n;FifoFull_n;
3. 经过锁存器锁存后的信号,后加下划线和字母r,与锁存前的信号区别。如CpuRamRd信号,经锁存后应命名为CpuRamRd_r。
低电平有效的信号经过锁存器锁存后,其命名应在_n后加r。如CpuRamRd_n信号,经锁存后应命名为CpuRamRd_nr
多级锁存的信号,可多加r以标明。如CpuRamRd信号,经两级触发器锁存后,应命名为CpuRamRd_rr。
4. 模块的命名。
在系统设计阶段应该为每个模块进行命名。命名的方法是,将模块英文名称的各个单词首字母组合起来,形成3到5个字符的缩写。若模块的英文名只有一个单词,可取该单词的前3个字母。各模块的命名以3个字母为宜。例如:
Arithmatic Logical Unit模块,命名为ALU。
Data Memory Interface模块,命名为DMI。
Decoder模块,命名为DEC。
5. 模块之间的接口信号的命名。
所有变量命名分为两个部分,第一部分表明数据方向,其中数据发出方在前,数据接收方在后,第二部分为数据名称。
两部分之间用下划线隔离开。
第一部分全部大写,第二部分所有具有明确意义的英文名全部拼写或缩写的第一个字母大写,其余部分小写。
举例:CPUMMU_WrReq,下划线左边是第一部分,代表数据方向是从CPU模块发向存储器管理单元模块(MMU)。下划线右边Wr为Write的缩写,Req是Request的缩写。两个缩写的第一个字母都大写,便于理解。整个变量连起来的意思就是CPU发送给MMU的写请求信号。
模块上下层次间信号的命名也遵循本规定。
若某个信号从一个模块传递到多个模块,其命名应视信号的主要路径而定。
6. 模块内部信号:
模块内部的信号由几个单词连接而成,缩写要求能基本表明本单词的含义;
单词除常用的缩写方法外(如:Clock->Clk, Write->Wr, Read->Rd等),一律取该单词的前几个字母( 如:Frequency->Freq, Variable->Var 等);
每个缩写单词的第一个字母大写;
若遇两个大写字母相邻,中间添加一个下划线(如DivN_Cntr);
举例:SdramWrEn_n;FlashAddrLatchEn;
四. 编码格式规范。
1. 分节书写,各节之间加1到多行空格。如每个always,initial语句都是一节。每节基本上完成一个特定的功能,即用于描述某几个信号的产生。在每节之前有几行注释对该节代码加以描述,至少列出本节中描述的信号的含义。
2. 行首不要使用空格来对齐,而是用Tab键,Tab键的宽度设为4个字符宽度。行尾不要有多余的空格。
3. 注释。
使用//进行的注释行以分号结束;
使用/* */进行的注释,/*和*/各占用一行,并且顶头;
例:
// Edge detector used to synchronize the input signal;
4. 空格的使用:
不同变量,以及变量与符号、变量与括号?涠加Φ北A粢桓隹崭瘛?BR>Verilog关键字与其它任何字符串之间都应当保留一个空格。如:
Always @ (……)
使用大括号和小括号时,前括号的后边和后括号的前边应当留有一个空格。
逻辑运算符、算术运算符、比较运算符等运算符的两侧各留一个空格,与变量分隔开来;单操作数运算符例外,直接位于操作数前,不使用空格。
使用//进行的注释,在//后应当有一个空格;注释行的末尾不要有多余的空格。
例:
assign SramAddrBus = { AddrBus[31:24], AddrBus[7:0] };
assign DivCntr[3:0] = DivCntr[3:0] + 4’b0001;
assign Result = ~Operand;
5. 同一个层次的所有语句左端对齐;Initial、always等语句块的begin关键词跟在本行的末尾,相应的end关键词与Initial、always对齐;这样做的好处是避免因begin独占一行而造成行数太多;
例:
always @ ( posedge SysClk or negedge SysRst ) begin
if( !SysRst ) DataOut <= 4'b0000;
else if( LdEn ) begin
DataOut <= DataIn;
End
else DataOut <= DataOut + 4'b0001;
end
6. 不同层次之间的语句使用Tab键进行缩进,每加深一层缩进一个Tab;
8. 在endmodule,endtask,endcase等标记一个代码块结束的关键词后面要加上一行注释说明这个代码块的名称;
9. 在task名称前加tsk以示标记。在function的名称前加func以示标记。例如:
task tskResetSystem;
……
endtask //of tskResetSystem
五.小结:
以上列出的代码编写规范无法覆盖代码编写的方方面面,还有很多细节问题,需要在实际编写过程中加以考虑。并且有些规定也不是绝对的,需要灵活处理。并不是律条,但是在一个项目组内部、一个项目的进程中,应该有一套类似的代码编写规范来作为约束。
总的方向是,努力写整洁、可读性好的代码。
Posted: 2007-03-19 21:32 |
[楼 主]
demonwar
∷
性别:
∷
状态:
∷
头衔:
头你妹的
∷
等级:
管理员
∷
家族:
存在与虚无
∷
发贴:
52925
∷
威望:
11
∷
浮云:
1406
∷
在线等级:
∷
注册时间: 2006-08-02
∷
最后登陆: 2018-06-18
【
复制此帖地址
只看此人回复
】
5come5帮你背单词 [
infinity
/in'finiti/
v. 无限,无穷(大)
]
我们学了几周了,怎么还在讲芯片呢,verilog都还没接触
Posted: 2007-03-19 21:42 |
[1 楼]
raulqql
∷
性别:
保密
∷
状态:
∷
等级:
希望之光
∷
家族:
EDA耍"家"
∷
发贴:
1572
∷
威望:
0
∷
浮云:
1276
∷
在线等级:
∷
注册时间: 2006-03-16
∷
最后登陆: 2022-05-14
【
复制此帖地址
只看此人回复
】
5come5帮你背单词 [
discover
/dis'k
Λ
v
ə
/
vt. 看出,发现,暴露,显示
]
好东西
Posted: 2007-03-19 21:57 |
[2 楼]
gxuan1
∷
性别:
∷
状态:
∷
等级:
荣誉会员
∷
家族:
水族馆
∷
发贴:
5200
∷
威望:
3
∷
浮云:
407
∷
在线等级:
∷
注册时间: 2006-02-20
∷
最后登陆: 2007-12-02
【
复制此帖地址
只看此人回复
】
5come5帮你背单词 [
poor
/pu
ə
/
a. 贫穷的,(比平时预计)少或糟,可怜的,粗劣的
]
Quote:
引用第1楼demonwar于2007-03-19 21:42发表的
:
我们学了几周了,怎么还在讲芯片呢,verilog都还没接触
好好看吧,早晚要学的……
Posted: 2007-03-19 22:02 |
[3 楼]
快速跳至
|- 站务管理
|- 惩罚,奖励公布区
|- 会员咨询意见区
|- 申请区
|- 已批准申请区
|- 威望和荣誉会员推荐区
|- 5come5名人堂·Hall of Fame
>> 休闲娱乐
|- 灌水乐园 大杂烩
|- 精水区
|- 幽默天地
|- 开怀大笑(精华区)
|- 灵异空间
|- 运动新时空·菠菜交流
|- 动之风.漫之舞
|- 新货上架
|- 古董挖挖
|- 唯美贴图
|- 创意&美化&设计
|- 5COME5头像及签名档图片引用专区
|- 艺术摄影
|- 音乐咖啡屋
|- 音道乐经
>> 热点讨论
|- 工作交流
|- 求职信息
|- 就业精华区
|- 同城联谊
|- 留学专版
|- 情感物语
|- 情感物语精华区
|- 带走一片银杏叶
|- 精华区
|- 新闻直通车
|- 众志成城,抗震救灾
|- 衣食住行
|- 跳蚤市场
|- 旅游出行
>> 学术交流
|- 学业有成
|- 智力考场
|- 考研专版
|- 外语乐园
|- 考试·毕业设计
|- 电子设计·数学建模
|- 学生工作·社团交流·RX
|- 电脑技术
|- 电脑F.A.Q.
|- 软件交流
|- 硬件·数码
|- 程序员之家
|- Linux专区
|- 舞文弄墨
|- 历史&文化
|- 军临天下
|- 军事精华区
|- 财经频道
>> 游戏新干线[电子竞技俱乐部]
|- Blizz@rd游戏特区
|- WarCraft III
|- 魔兽区档案库
|- 魔兽争霸3博彩专区
|- StarCraft(new)
|- 暗黑专区
|- 休闲游戏区
|- PC GAME综合讨论区
|- 实况足球专区
|- Counter-Strike专区
|- TV GAME& 模拟器
|- 网络游戏
>> 资源交流
|- 恋影部落
|- 连续剧天地
|- 综艺开心档
|- 书香小筑
|- 小说发布
|- 资源交流
|- 综艺、体育、游戏资源发布
|- 音乐资源发布区
|- 电影电视剧发布区
|- 字幕园地
我来我网·5come5 Forum
»
电子设计·数学建模
Total 0.015080(s) query 7, Time now is:05-18 03:33, Gzip enabled
Powered by PHPWind v5.3, Localized by
5come5 Tech Team
,
黔ICP备16009856号