FPGA verilog的编程心得---如何写代码减少逻辑单元的使用数量?
2013-03-27 16:08
627 查看
以下都是我在编程时发现的问题,总结一下,怕以后忘了,以我目前的水平不明白类似关键路径,组合数目什么高深理论,这都是我从实际中学到的,比看书学的印象深刻得多.慢慢来吧,我想我以后也会明白那些高级的东西了!
一....尽量不要使用"大于""小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.
例程:always@(posedge clk)
begin
count1=count1+1;
if(count1==10000000)
feng=1; //no_ring
else if(count1==90000000)
begin
feng=0; //ring
count1=0;
end
end //这么写会用107个逻辑单元
// 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元
二.....一定要想尽办法减少reg寄存器的长度
上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈!
三....case语句里一定要加default if一定要加else
如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.
例如:case({a,b})
2'b11 e=b;
2'b10 e=a;
endcase
//不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1
//那么e要保存原来的值,就要在内部生成锁存器了.
四....尽量使用Case语句 而不是if--else语句
复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延
用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑
五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里
比如:always@(a or b)
begin
out=(a&b&c);
end
一....尽量不要使用"大于""小于"这样的判断语句, 这样会明显增加使用的逻辑单元数量 .看一下报告,资源使用差别很大.
例程:always@(posedge clk)
begin
count1=count1+1;
if(count1==10000000)
feng=1; //no_ring
else if(count1==90000000)
begin
feng=0; //ring
count1=0;
end
end //这么写会用107个逻辑单元
// 如果把这句话if(count1==10000000)改成大于小于,报告中用了135个逻辑单元
二.....一定要想尽办法减少reg寄存器的长度
上次把[30:0]改到[50:0],报告里逻辑单元从100多直升到2000多!!!太吓人了,至于为什么我就不知道了哈!
三....case语句里一定要加default if一定要加else
如果是组合逻辑的设计,不加default或else的话,不能保证所有的情况都有赋值,就会在内部形成一个锁存器,不再是一个纯粹的组合逻辑了,电路性能就会下降.
例如:case({a,b})
2'b11 e=b;
2'b10 e=a;
endcase
//不加default,虽然只关心a=1时的结果,但是a=0的时候,e就会保存原来的值,直到a变为1
//那么e要保存原来的值,就要在内部生成锁存器了.
四....尽量使用Case语句 而不是if--else语句
复杂的if--else语句通常会生成优先级译码逻辑,这将会增加这些路径上的组合时延
用来产生复杂逻辑的Case语句通常会生成不会有太多时延的并行逻辑
五...组合逻辑的always块中,要注意所有的输入全部放入敏感变量表里
比如:always@(a or b)
begin
out=(a&b&c);
end
相关文章推荐
- 学习FPGA verilog的心得--编程技巧--如何写代码减少逻辑单元的使用数量
- FPGA verilog的编程心得---如何写代码减少逻辑单元的使用数量?
- CPLD/FPGA/Verilog_如何写代码减少逻辑单元的使用数量
- CPLD/FPGA/Verilog_如何写代码减少逻辑单元的使用数量
- CPLD/FPGA/Verilog_如何写代码减少逻辑单元的使用数量
- Verilog程序如何优化减少逻辑单元的使用数量
- 在动态方法中如何尽量减少定义的 LocalBuilder 数量 (使用.net 中的动态方法编程备忘录8)
- 【续】FPGA电路逻辑的Verilog HDL编程方式设计与验证
- 使用.net 中的动态方法编程备忘录1(如何查看生成的动态方法的代码)
- Android 中 Handler 引起的内存泄露 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用。其实这可能导致内存泄露,代码中哪里可能导致内存泄露,又是如何
- 如何在代码中减少if else语句的使用
- 使用混淆ProGuard压缩代码和资源/减少方法数量
- 写代码的心得,怎么减少编程中的 bug?
- 新手编程入门二:使用“模板模式”减少重复代码
- 如何以编程方式编译使用 C# 编译器代码
- HDL编程使用verilog代码而非逻辑框图的原因--持续更新
- 使用Egret插件压缩代码包体积,减少请求数量的实战教程
- FPGA编程—组合逻辑编码器等verilog实现
- 【码云周刊第 12 期】走过微软20年,埋头并发编程15年,如何减少代码的认知负荷?
- Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!