qianhng 发表于 2010-12-13 21:44:10

看看我学习CPLD做乘法器的方法对不对

A(8bit)*B(8bit)=Q(16bit)的乘法器
方法:
A*B0+A*b1>>1+......+A*b7>>7
用原理图的方式画的,用了大量的EOR和AND2,功消耗了125LE,在EPM1270T144C5下模拟,大约需要23nS才能得出稳定的结果。

有什么方法又快,占用资源又少的吗?

cfqxdgr 发表于 2010-12-13 22:10:26

找个带硬乘法器的FPGA

qianhng 发表于 2010-12-13 22:21:50

是阿,太慢了,我认真看了下,编译时它说:
“Info: Longest tpd from source pin "mul_b" to destination pin "mul_q" is 36.880 ns
        Info: 1: + IC(0.000 ns) + CELL(1.132 ns) = 1.132 ns; Loc. = PIN_53; Fanout = 9; PIN Node = 'mul_b'
        Info: 2: + IC(2.389 ns) + CELL(0.511 ns) = 4.032 ns; Loc. = LC_X8_Y5_N5; Fanout = 3; COMB Node = 'inst21'
        Info: 3: + IC(0.793 ns) + CELL(0.511 ns) = 5.336 ns; Loc. = LC_X8_Y5_N1; Fanout = 2; COMB Node = 'inst242~1'
        Info: 4: + IC(0.715 ns) + CELL(0.200 ns) = 6.251 ns; Loc. = LC_X8_Y5_N6; Fanout = 2; COMB Node = 'inst248~1'
        Info: 5: + IC(1.254 ns) + CELL(0.511 ns) = 8.016 ns; Loc. = LC_X9_Y5_N4; Fanout = 2; COMB Node = 'inst251'
        Info: 6: + IC(0.769 ns) + CELL(0.511 ns) = 9.296 ns; Loc. = LC_X9_Y5_N5; Fanout = 2; COMB Node = 'inst278~1'
        Info: 7: + IC(0.772 ns) + CELL(0.511 ns) = 10.579 ns; Loc. = LC_X9_Y5_N1; Fanout = 2; COMB Node = 'inst283~1'
        Info: 8: + IC(2.037 ns) + CELL(0.511 ns) = 13.127 ns; Loc. = LC_X9_Y6_N8; Fanout = 2; COMB Node = 'inst288~1'
        Info: 9: + IC(0.733 ns) + CELL(0.200 ns) = 14.060 ns; Loc. = LC_X9_Y6_N1; Fanout = 2; COMB Node = 'inst291'
        Info: 10: + IC(1.203 ns) + CELL(0.511 ns) = 15.774 ns; Loc. = LC_X10_Y6_N5; Fanout = 2; COMB Node = 'inst321~1'
        Info: 11: + IC(1.931 ns) + CELL(0.511 ns) = 18.216 ns; Loc. = LC_X8_Y6_N1; Fanout = 2; COMB Node = 'inst326~1'
        Info: 12: + IC(0.725 ns) + CELL(0.200 ns) = 19.141 ns; Loc. = LC_X8_Y6_N7; Fanout = 2; COMB Node = 'inst331~1'
        Info: 13: + IC(1.148 ns) + CELL(0.200 ns) = 20.489 ns; Loc. = LC_X7_Y6_N3; Fanout = 2; COMB Node = 'inst334~12'
        Info: 14: + IC(1.216 ns) + CELL(0.511 ns) = 22.216 ns; Loc. = LC_X6_Y6_N0; Fanout = 2; COMB Node = 'inst362'
        Info: 15: + IC(1.126 ns) + CELL(0.914 ns) = 24.256 ns; Loc. = LC_X7_Y6_N7; Fanout = 2; COMB Node = 'inst392~1'
        Info: 16: + IC(0.801 ns) + CELL(0.511 ns) = 25.568 ns; Loc. = LC_X7_Y6_N1; Fanout = 2; COMB Node = 'inst395'
        Info: 17: + IC(2.028 ns) + CELL(0.511 ns) = 28.107 ns; Loc. = LC_X6_Y5_N3; Fanout = 2; COMB Node = 'inst423'
        Info: 18: + IC(0.722 ns) + CELL(0.200 ns) = 29.029 ns; Loc. = LC_X6_Y5_N8; Fanout = 2; COMB Node = 'inst453~1'
        Info: 19: + IC(0.702 ns) + CELL(0.914 ns) = 30.645 ns; Loc. = LC_X6_Y5_N4; Fanout = 2; COMB Node = 'inst458~1'
        Info: 20: + IC(0.768 ns) + CELL(0.511 ns) = 31.924 ns; Loc. = LC_X6_Y5_N7; Fanout = 2; COMB Node = 'inst463~1'
        Info: 21: + IC(1.828 ns) + CELL(0.200 ns) = 33.952 ns; Loc. = LC_X5_Y4_N8; Fanout = 1; COMB Node = 'inst468~1'
        Info: 22: + IC(0.606 ns) + CELL(2.322 ns) = 36.880 ns; Loc. = PIN_43; Fanout = 0; PIN Node = 'mul_q'
        Info: Total cell delay = 12.614 ns ( 34.20 % )
        Info: Total interconnect delay = 24.266 ns ( 65.80 % )”

seemrain 发表于 2010-12-14 09:52:41

直接Q=A*B不就行了吗。。。剩下的交给编译器了。

qianhng 发表于 2010-12-14 10:04:41

这个......我是在摸索学习中......
晚上后来看了LPM_MULT,比我自己做得要快,但LE多了几个。
其实我真正想用CPLD做的是在里面做几个并行的数据处理,即使只有200MHz.但我现在还没那个本事呢....本来想用DSP,但DSP的并行处理也不是什么代码都可以并行阿。
也不知道我的理解有没有错误。
页: [1]
查看完整版本: 看看我学习CPLD做乘法器的方法对不对