关于if的综合结果,很奇怪
查看( 147 ) /
评论( 17 )
TAG:
-
qingchuyu
发布于2008-07-02 12:38:03
-
回复 1# 的帖子
我想这主要和FPGA的LUT有关系
MAP大的组合逻辑需要更多的LUT
具体形成一个逻辑需要几个LUT,并且这几个LUT该如何连接
我认为做到这些才能真正做到编码时考虑到资源优化
-
david0915发布于2008-07-02 13:31:56
-
我try了test 2。和lz结果一样! 我是用组合逻辑写的。求解!
-
snowboyfly发布于2008-07-02 14:22:29
-
资源的MAP不是很懂。除了和电路所有的输出结果有关系外,还和器件有关系,不知道这个器件里面有几种LUT,有的可能都是4输入,有的可能有三输入,有的还可能有8输入,有的LUT还能拆成两个小的LUT用。而且并不是简单的,如果器件全是4输入的LUT,那么一个8输入的电路,就用两个4输入的LUT来搭。以前用过的FPGA,一个LUT里面除了SRAM,decoder以外,还有MUX, DFF。不知道现在的器件,内部是啥样的了。这些LUT到底怎么连,估计要经常做的人才晓得了。
既然已经综合了,可以把RTL VIEW帖出来,比较能明白得看Quartus怎么构造这两个相同function的电路。
-
onewrong
发布于2008-07-02 14:31:00
-
其实你就if(54 56 58 )else 不就完了嘛,搞那么麻烦,首先要自己将代码优化
-
onewrong
发布于2008-07-02 14:34:29
-
你用的第一种方法还需要你自己考虑优先级吧,所以第二种方法合理些,但判断条件不宜过多,会影响fmax的,你可以将条件语句拿到外面做,时序逻辑与组合逻辑分开更好些
-
xiangyao2007
发布于2008-07-02 14:42:55
-
好多if啊
-
zjxxg发布于2008-07-02 14:51:13
-
我用synplify综合试试
我用synplify综合后 两段代码一样
我想可能是这样的问题 大家探讨一下
if
elseif
.......
else在条件互斥的情况下 可能不会生成优先级树 这要看你的综合工具了
严格地说代码test2更合理,在不同的综合工具中中间部分都不会生成优先级树
为何楼主的test1反而更节省资源呢,我想是因为quartus认为test1无优先级,而test2含优先级
-
zjxxg发布于2008-07-02 14:55:04
-
[quote]原帖由 snowboyfly 于 2008-6-27 13:08 发表
depends on what synthesis tool you use. Generally,the latter one is worse, producing more MUXs, cause the tool is not smart enought to recognize the conditions and assignment can be combined, jsut un ... [/quote
觉得这样的不同是综合工具理解不同所致
-
david0915发布于2008-07-02 14:56:55
-
QUOTE:
原帖由 onewrong 于 2008-7-2 14:31 发表
谢谢你的思路,很启发,先优化自己的逻辑。可能lz这里只是例举2种情况;
其实你就if(54 56 58 )else 不就完了嘛,搞那么麻烦,首先要自己将代码优化
-
zjxxg发布于2008-07-02 15:07:54
-
我用我用synplify综合后 的rtl视图
-
david0915发布于2008-07-02 17:09:42
-
module test_if_3(
input clk,
input rst_n,
output reg out
);
reg [5:0] cnt;
reg se;
//sque logic
always @(posedge clk or negedge rst_n)
if(!rst_n) begin cnt <= 6'd0; out <= 1'd0;end
else
if (se==1)
begin cnt <= cnt + 1'd1; out <= 1'd1; end
else
begin cnt <= 6'd0; out <= 1'd0; end
//comb logic
always @(cnt)
if(cnt<6'd54 || cnt>=6'd59 || cnt == 6'd55 || cnt ==6'd57)
se = 1'd1;
else
se = 0;
endmodule
1. 注释掉红色部分代码,quartus综合结果同test1.否则同test2;
if
elseif
.......
else在条件互斥的情况下 可能不会生成优先级树;应该不对,是在
if
elseif
........
才无优先级?
2.组合/时序分开不会节约资源,可能是方便综合器做时序约束吧,请指教。
-
qingchuyu
发布于2008-07-02 17:25:30
-
回复 11# 的帖子
先谢谢大家的回帖.
首先这两个代码是没多大区别的(当然我也喜欢第2个).
DC,syplify综合结果无差别,这两个综合器的优化能力还真不错
而quartus的综合器结果比较差,难道这就是为什么大多数人不
喜欢用quartus综合,而用synplify综合的原因吧
-
triumphal发布于2008-07-02 17:38:59
-
逻辑单元多用了5个
-
david0915发布于2008-07-02 17:52:21
-
综合器优化能力强是好,但有时候会让人看不清真相。还是写代码做到心中有数,才放心。

-
dianyubaobei
发布于2008-07-02 21:12:49
-
请问的是综合是这个结果,物理上实现后到底会采用何种结果?
-
gdutchen
发布于2008-07-11 07:54:31
-
物理上的最终是三极管了,但一般都是按照生成的RTL view的结构来实现的。所以你的所设计的电路与RTL view的差不多,就可认为达到目标。
-
wanynal发布于2008-07-11 09:18:39
-
初学者 学习中
******


