verilog代码的一些经验和小结
来源:互联网 发布:javascript日历源码 编辑:程序博客网 时间:2024/05/21 15:00
下面是自己写verilog代码的一些经验和小结,和大家分享下。
1、对于高速的逻辑操作(如:判断,取反等),为了保证逻辑正确和结果的稳定(不抖动),需要用 always的 case语句来实现,而不要使用 if…else…,或者assign 语句的()?… :…形式。也即,对于高速数据的判断选择性操作,用case比用if…else…可以满足更高的时钟要求,但占用较多的slice;同一种逻辑操作,用同步赋值语句always比用assign可以满足更高的时钟要求。所需要的代价就是需要多增加一些触发器,因为只有触发器可以用 always赋值。
2、时钟周期约束使用最多的一种约束,增加时钟约束可以提高芯片的时钟速率。增加约束后,综合、布局、布线,查看place and route报告。如果报告中约束不满足,则需要改动程序使其满足时钟约束;如果约束满足了,后仿结果还可能不正确,还需要进一步调整时序。
3、对于加减操作,最好使用IP CORE的加法器。相比直接使用符号”+”或“-”,IP CORE可以在资源相同的情况下,达到更高的速率。
4、后仿时,为了观察程序模块中的内部信号(出去模块的输入和输出),需要将内部信号也通过模块的输出引出。当引出的内部信号过多时(FPGA的输入输出管脚数量是有限的),约束将更加难以满足,后仿可能会出现一些不可预料的问题。所以不要引出过多的内部信号。
5、采用流水线操作可以大大提高系统时钟,也即将复杂的操作分成许多简单操作级联的形式,这样每级简单操作都可以达到较高速率。代价就是用资源去换速度(每级流水线都需要额外的reg型变量),同时有一个固定的初始时延。
6、一般不要同时使用上升沿触发和下降沿触发,这样会降低系统稳定工作的时钟速率。
7、不可以在一个always模块的敏感变量区同时使用沿触发和电平触发。
8、用ram(block ram或distributed ram)存储比用触发器存储节约slice资源。
1、对于高速的逻辑操作(如:判断,取反等),为了保证逻辑正确和结果的稳定(不抖动),需要用 always的 case语句来实现,而不要使用 if…else…,或者assign 语句的()?… :…形式。也即,对于高速数据的判断选择性操作,用case比用if…else…可以满足更高的时钟要求,但占用较多的slice;同一种逻辑操作,用同步赋值语句always比用assign可以满足更高的时钟要求。所需要的代价就是需要多增加一些触发器,因为只有触发器可以用 always赋值。
2、时钟周期约束使用最多的一种约束,增加时钟约束可以提高芯片的时钟速率。增加约束后,综合、布局、布线,查看place and route报告。如果报告中约束不满足,则需要改动程序使其满足时钟约束;如果约束满足了,后仿结果还可能不正确,还需要进一步调整时序。
3、对于加减操作,最好使用IP CORE的加法器。相比直接使用符号”+”或“-”,IP CORE可以在资源相同的情况下,达到更高的速率。
4、后仿时,为了观察程序模块中的内部信号(出去模块的输入和输出),需要将内部信号也通过模块的输出引出。当引出的内部信号过多时(FPGA的输入输出管脚数量是有限的),约束将更加难以满足,后仿可能会出现一些不可预料的问题。所以不要引出过多的内部信号。
5、采用流水线操作可以大大提高系统时钟,也即将复杂的操作分成许多简单操作级联的形式,这样每级简单操作都可以达到较高速率。代价就是用资源去换速度(每级流水线都需要额外的reg型变量),同时有一个固定的初始时延。
6、一般不要同时使用上升沿触发和下降沿触发,这样会降低系统稳定工作的时钟速率。
7、不可以在一个always模块的敏感变量区同时使用沿触发和电平触发。
8、用ram(block ram或distributed ram)存储比用触发器存储节约slice资源。
0 0
- verilog代码的一些经验和小结
- django 部署遇到的一些小问题和经验小结
- Verilog代码编写规范小结
- 手写代码的一些经验
- verilog第一篇-verilog的一些概念
- vc2010一些经验小结:error LNK2028和LNK2019
- FIFO的verilog代码
- 代码重构的个人一些经验
- 写java代码的一些真实经验!
- 对DEDECMS搬家的一些经验小结(含s…
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- MongoDB使用小结:一些不常见的经验分享
- 一些代码经验
- jquery中的call和apply方法
- Android 内存溢出解决方案(OOM) 整理总结
- 怎样让网站优化顺利进行?
- 集成测试的“面子”和“里子”
- android用广播接收器判断网络改变状态
- verilog代码的一些经验和小结
- 高效编辑器vim之标签使用
- 在linux下查看CPU的信息
- Learn Python The Hard Way-Ecercise36~40
- using namespace std(2)
- WinForm TreeView的使用
- 【深入浅出Objective-C】4.5分类(category)
- JSON数据格式
- 二分法 POJ-3104 Drying