首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
FPGA/CPLD可编程逻辑
» 《Reuse methodology manual》读书笔记:RTL编程指导
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
《Reuse methodology manual》读书笔记:RTL编程指导
发短消息
加为好友
pengpengpang
(pengpengpang)
当前离线
UID
1023229
帖子
6106
精华
0
积分
3055
阅读权限
90
来自
中国
在线时间
156 小时
注册时间
2013-12-20
最后登录
2016-7-3
论坛元老
UID
1023229
来自
中国
1
#
打印
字体大小:
t
T
pengpengpang
发表于 2014-11-24 19:10
|
显示全部帖子
《Reuse methodology manual》读书笔记:RTL编程指导
(转)在《Reuse methodology manual》第五章,主要收集了一些HDL代码的规范和指导。遵照这些规范或者指导的目的是让你的代码更加的具有可读性、可修改性、可重用;这个应该是所有语言所追求的;而针对HDL代码,还要使代码适合综合和仿真。
注:下面所说的不是什么金科玉律,但是如果能够遵循的话,一定可以增加编程的效率和提高设计的质量。
1. 一般的命名规范
原则:设计自己的命名规范,并对该规则编写文档;在以后的设计中也需要保持一致。
建议:
用小写字母表示所有的信号(signal),变量(variable)和端口(port)名字;
用大写字母表示常量(constant)和用户自定义的类型(type);
用有意义的名字来表示信号,端口,函数或者参数,例如ram_addr用来表示RAM address bus.
用一致的名字表示时钟信号(clock signal);如CLK;
用一致的名字表示复位信号(reset signal);如RST;
低电平有效的信号,名字末尾添加”_b” 或者”_n”;如复位信号低电平有效,可表示为:rst_n;
参考如下:
用一致的顺序表示总线,如VHDL中统一用(x downto 0),Verilog HDL统一用[x:0];合理的注释,对VHDL来说,在代码中合理描述process,function,type和subtype等为了方便阅读,尽量保持每行不超过72个字母的长度。用缩进的方式改善代码的可读性,谨慎使用TAB键缩进,因为不同的编辑器有不同缩进的定义,4个或8个字符。端口的定义顺序,每行只定义一个端口,先input port,后output port;顺序可以为:clk,rst,enable,other control signals,Date and address signals参考如下:
注:上面的端口定义中请注意各个端口的名称以及常量的名称,当然在这里没有详细对每个端口进行注释;如果端口比较多且容易分组的时候,请对端口进行分组注释,主要的目的还是为了增加可读性。
2. 源文件头信息的内容(Informational Headers)
每个源文件都应该包含该文件的相关信息,以便读者或者将来自己的更新,所以头信息必须包含一下内容:
法律声明:保密性,版权,复制品的限制等文件名作者功能描述和模块的关键属性列表文件创建日期修订的历史:日期,修订者,修改的表述头文件参考如下:
3.时钟和复位信号的设计
尽量在设计中避免同时使用上升沿和下降沿触发器,如果无法避免最好将两种触发器放到不同的模块中;避免手动例化时钟缓冲器,综合工具会自己动添加;避免门控时钟(Gated Clock),意思说:时钟信号通过一个门电路到达触发器的时钟输入端口,这样给时钟带来一些不确定的因素,产生抖动或者延迟;避免内部产生时钟信号,内部产生的时钟信号会限制设计的在线测试;跨时钟域的数据传输,例如:single-bit同步器的设计,见下图;
Multiple-bit 同步器可以用可靠的握手电路或者multibit coding scheme(这个不是很懂)4. 综合
在设计中避免任何锁存器的出现避免组合逻辑中的反馈
定义完整的敏感信号列表,VHDL: process(sensitive list);Verilog:always(sensitive list);5. 模块划分(Partitioning)
一个好的模块划分有以下优点:
更好的综合结果缩短编译运行时间可以用简单的综合策略来满足时序的要求建议:
寄存所有模块的输出
将相关的组合逻辑放到一个单一模块
例如:Bad example:
Good example:
如果两个模块(module)有不同的设计目标,一个要求面积,一个要求速度,最好将这两个模块分开设计,见下图
杜绝在顶层设计中例化一个门级逻辑,例如:Bad example:
Good example:
6.总结
林林总总说了这么多,杂乱无章,内容基本上都是从书中摘录下来,没有很细的地方,只说了点怎么做,但是绝对没有说到为什么这么做。以上都是书中的经验之谈,话说经验还是自己经历了,遇到了,体会才会深刻。边实践边学习,边思考边总结,经验总会有的,体会总会有的,思想深度也会提高的。
收藏
分享
评分
记录学习中的点点滴滴,让每一天过的更加有意义!
回复
引用
订阅
TOP
返回列表
测试测量
嵌入式技术
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议