搜索
bottom↓
回复: 8

xilinx Vs altera

[复制链接]

出0入0汤圆

发表于 2011-1-21 20:04:30 | 显示全部楼层 |阅读模式
一段变态verilog代码,分别在xilinx和altera的器件上实现。
128bit的One hot码转到7bit的计数码,组合逻辑

//////////////////////////////////////////////////////////////////
module decode(
        input                [127:0]        in,
        output        reg        [6:0]        out
);
        always@(in) begin
                case (in)
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001:        out = 0;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010:        out = 1;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100:        out = 2;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000:        out = 3;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000:        out = 4;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000:        out = 5;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000:        out = 6;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000:        out = 7;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000:        out = 8;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000:        out = 9;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000:        out = 10;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000:        out = 11;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000:        out = 12;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000:        out = 13;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000:        out = 14;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000:        out = 15;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000:        out = 16;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000:        out = 17;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000:        out = 18;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000:        out = 19;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000:        out = 20;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000:        out = 21;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000:        out = 22;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000:        out = 23;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000:        out = 24;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000:        out = 25;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000:        out = 26;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000:        out = 27;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000:        out = 28;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000:        out = 29;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000:        out = 30;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000:        out = 31;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000:        out = 32;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000:        out = 33;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000:        out = 34;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000:        out = 35;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000:        out = 36;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000:        out = 37;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000:        out = 38;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000:        out = 39;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000:        out = 40;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000:        out = 41;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000:        out = 42;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000:        out = 43;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000:        out = 44;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000:        out = 45;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000:        out = 46;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000:        out = 47;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000:        out = 48;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000:        out = 49;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000:        out = 50;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000:        out = 51;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000:        out = 52;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000:        out = 53;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000:        out = 54;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000:        out = 55;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000:        out = 56;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000:        out = 57;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000:        out = 58;
                        128'b00000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000:        out = 59;
                        128'b00000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000:        out = 60;
                        128'b00000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000:        out = 61;
                        128'b00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000:        out = 62;
                        128'b00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000:        out = 63;
                        128'b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000:        out = 64;
                        128'b00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000:        out = 65;
                        128'b00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000:        out = 66;
                        128'b00000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000:        out = 67;
                        128'b00000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000:        out = 68;
                        128'b00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000:        out = 69;
                        128'b00000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000:        out = 70;
                        128'b00000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000:        out = 71;
                        128'b00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000:        out = 72;
                        128'b00000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000:        out = 73;
                        128'b00000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000:        out = 74;
                        128'b00000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 75;
                        128'b00000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 76;
                        128'b00000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 77;
                        128'b00000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 78;
                        128'b00000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 79;
                        128'b00000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 80;
                        128'b00000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 81;
                        128'b00000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 82;
                        128'b00000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 83;
                        128'b00000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 84;
                        128'b00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 85;
                        128'b00000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 86;
                        128'b00000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 87;
                        128'b00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 88;
                        128'b00000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 89;
                        128'b00000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 90;
                        128'b00000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 91;
                        128'b00000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 92;
                        128'b00000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 93;
                        128'b00000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 94;
                        128'b00000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 95;
                        128'b00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 96;
                        128'b00000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 97;
                        128'b00000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 98;
                        128'b00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 99;
                        128'b00000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 100;
                        128'b00000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 101;
                        128'b00000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 102;
                        128'b00000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 103;
                        128'b00000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 104;
                        128'b00000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 105;
                        128'b00000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 106;
                        128'b00000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 107;
                        128'b00000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 108;
                        128'b00000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 109;
                        128'b00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 110;
                        128'b00000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 111;
                        128'b00000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 112;
                        128'b00000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 113;
                        128'b00000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 114;
                        128'b00000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 115;
                        128'b00000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 116;
                        128'b00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 117;
                        128'b00000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 118;
                        128'b00000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 119;
                        128'b00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 120;
                        128'b00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 121;
                        128'b00000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 122;
                        128'b00001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 123;
                        128'b00010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 124;
                        128'b00100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 125;
                        128'b01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 126;
                        128'b10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:        out = 127;
                        default :        out = 0;
                endcase
        end
endmodule

////////////////////////////////////////////////////////////////////////////////////////////

symplify 9.6 综合后的资源使用量xilinx约是altera的5倍

Design view:work.decode(verilog)
Selecting part EP1C12F324C6

I/O ATOMs:       135

Total LUTs:  712 of 12060 ( 5%)
Logic resources:  712 ATOMs of 12060 ( 5%)

Number of I/O registers
                        Output DDRs   :0

ATOM count by mode:
  normal:       712
  arithmetic:   0

ShiftTap:       0  (0 registers)
Total ESB:      0 bits   (0% of 239616)

ATOMs using regout pin: 0
  also using enable pin: 0
  also using combout pin: 0
ATOMs using combout pin: 712
Number of Inputs on ATOMs: 2571
Number of Nets:   830450

Resource Usage Report for decode </a>


//////////////////////////////////////////
Mapping to part: xc3s700afg400-4
Cell usage:
BUF             2 uses
GND             1 use
MUXCY           134 uses
MUXCY_L         4042 uses
MUXF5           1 use
VCC             1 use
LUT1            2860 uses
LUT2            96 uses
LUT3            1147 uses
LUT4            277 uses

I/O ports: 135
I/O primitives: 135
IBUF           128 uses
OBUF           7 uses

I/O Register bits:                  0
Register bits not including I/Os:   0 (0%)
Total load per clock:

Mapping Summary:
Total  LUTs: 4380 (37%)


/////////////////////////////////////////////////////

若使用各自自身的综合器,资源使用量xilinx约是altera的10倍.

是量级上的差距啊!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-1-21 21:11:04 | 显示全部楼层
优化策略的问题。

还有就是xilinx与altera的结构不一样。

altera是以LE为单位,xilinx是以slice为单位。

因此,在资源充分的情况下,xilinx会占更多的面积。

你应该具体在布线后,看下xilinx的LUT的资源具体占用情况。

xilinx占用一个slice并不等于把这个slice里面的几个LUT都用了,所以,即使slice资源已经用到100%,再加点逻辑都还能布下。
而altera一个LE里面就一个LUT,两者是有区别的。
尤其是在楼主这个以组合逻辑为主的电路上,区别尤其显著。

出0入0汤圆

发表于 2011-1-21 23:33:38 | 显示全部楼层
对啊 结构不一样,占用的东西不一样,余下的东西也不一样
应该"辩证"的看待这个问题

出0入0汤圆

发表于 2011-1-22 00:04:51 | 显示全部楼层
两家器件不同,综合策略也不同,某个特定代码综合出来差异较大是很正常的,这并不能反映两家器件的优劣
不信你可以试试综合一个100K位的移位寄存器,Altera资源使用量比Xilinx高10倍以上

出0入0汤圆

 楼主| 发表于 2011-1-22 10:44:01 | 显示全部楼层
回复【3楼】h2feo4  无机酸
-----------------------------------------------------------------------

哈,just for fun,for fun

出0入0汤圆

 楼主| 发表于 2011-1-22 10:51:02 | 显示全部楼层
回复【1楼】linuxpro  
-----------------------------------------------------------------------

选的两个器件在LUT的总量上是相当的。只看四输入LUT
symplify的分别综合LUT的使用量是约5倍。
ISE_12.2和quartusII_10分别使用自家的编译器综合、布局布线,LUT的使用量的对比是约10倍。

各有所长吧,O(∩_∩)O哈哈~

出0入0汤圆

发表于 2011-1-22 12:38:24 | 显示全部楼层
回复【3楼】h2feo4 无机酸
两家器件不同,综合策略也不同,某个特定代码综合出来差异较大是很正常的,这并不能反映两家器件的优劣
不信你可以试试综合一个100k位的移位寄存器,altera资源使用量比xilinx高10倍以上
-----------------------------------------------------------------------

那是,xilinx的一个LUT就可以16bit的移位,呵呵

出0入0汤圆

发表于 2011-5-2 14:25:45 | 显示全部楼层
这独热码看得我眼都花了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 15:27

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表