让心去旅行!

VHDL.Verilog实现有符号数乘法(转载)

上一篇 / 下一篇  2006-09-08 09:58:39 / 天气: 晴朗 / 心情: 高兴

VHDL.Verilog实现有符号数乘法EDA中国门户网站3K;Y5J0BnTC/X k Sfr
EDA中国门户网站P(X/]$pb t NJ]G
在数字信号处理(DSP)中,乘加是最基本的运算,以至于很多FPGA厂商以MAC的多少及运算速度做为器件的一个重要指标。下面就乘法实现进行讨论。
N%TStq L dM0在DSP中,大多是有符合数的操作,这里给出有符号数乘法的VHDL和Verilog程序。EDA中国门户网站H,k\5}:jb q
LIBRARY ieee;
o*G4}"sbL!hy0USE ieee.std_logic_1164.ALL;
/`Q:?#dV0USE ieee.std_logic_arith.ALL;
zI Sd_-Mu ]~0Q0USE ieee.std_logic_signed.ALL;
a0`!I#ZZ.yx:vDr0USE ieee.std_logic_unsigned.ALL;
*mk!r.jUjvM0
W)?l-H ]0ENTITY signed_mult ISEDA中国门户网站:U5lM a?
        PORT (clk: IN STD_LOGIC;
Js$m X$l6eF {-s0                a:                 IN STD_LOGIC_VECTOR (7 DOWNTO 0);
$i\Q:i0Oo0                b:                 IN STD_LOGIC_VECTOR (7 DOWNTO 0);
:D"Z)c;@?'w:UY0                result:                 OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
"OBFl9M4m+Q:f h0        );
:qMg*^Q^0END signed_mult;EDA中国门户网站-G O~)H:IJe

(lZ#b9n2kA%M8D6S0ARCHITECTURE rtl OF signed_mult ISEDA中国门户网站!pEeq@7R
        SIGNAL a_int, b_int:                                 SIGNED (7 downto 0);EDA中国门户网站Eb#m4k [jZa(_
        SIGNAL pdt_int:                                 SIGNED (15 downto 0);EDA中国门户网站"zD;E v!o-Y
BEGINEDA中国门户网站kI"qLD.U
result <= STD_LOGIC_VECTOR(pdt_int);EDA中国门户网站,HM-z Z h:n:G
Process(clk)EDA中国门户网站5GU;rj'b#Y"N
BeginEDA中国门户网站lQ`5sU Z
If rising_edge(clk)  thenEDA中国门户网站 wW%kh-HQ"W*tP
       
-UsGvl \"q)q&y t0a_int <= SIGNED (a);
W$| G)h7d)mg0        b_int <= SIGNED (b);EDA中国门户网站/[G2M7Ql8tJ [,}
        pdt_int <= a_int * b_int;
2j4uA K&R/`i0        end if;EDA中国门户网站m+pzn0r
end process
#iXi{*Lw&]J~0END rtl;
'La r;az(DL`2^0相应的Verilog程序:EDA中国门户网站[-c%Wu I:p P
module signed_mult (out, clk, a, b)
K2D4xCV8zo0        output                 [15:0]        out;EDA中国门户网站\ bK Im8WJ
        input                        clk;EDA中国门户网站`;g&Hb F6VY O!~
        input         signed        [7:0]         a;EDA中国门户网站%n7|KF"vYM
        input         signed        [7:0]         b;EDA中国门户网站 ]]&RSl+hjEO
        reg        signed        [7:0]         a_reg;EDA中国门户网站8q/Hm8YC!|
        reg        signed        [7:0]         b_reg;EDA中国门户网站3\ T&E{(H$gI
        reg        signed        [15:0]        out;
a8Gvr.V,Av2IG"AX0        wire         signed        [15:0]        mult_out;EDA中国门户网站9Q t-[ _ x$D jr6X
        assign mult_out = a_reg * b_reg;EDA中国门户网站%I$rW^n-R-SAMf
        always@(posedge clk)EDA中国门户网站 M-I B D0i;M
        beginEDA中国门户网站xFy0A^:^%k*~ZE
                a_reg <= a;
(ox+p VTh%~E(k0                b_reg <= b;EDA中国门户网站9O.ZV%kl Z1F
                out <= mult_out;
(z X&s2_Sji;@u0        endEDA中国门户网站e*S f @*@ S
对于无符号数,只需要将其中的signed换成unsigned即可。

TAG:

fengpangpang的个人空间 引用 删除 fengpangpang   /   2006-09-10 22:23:26
还以为是具体的乘法器的设计呢,原来是自动综合生成的。没有什么参考价值。
hwei的个人空间 引用 删除 hwei   /   2006-09-09 23:50:55
这样真的可以?那为啥altera还在quartus里面放着乘法器的设计呢?而且似乎占用的资源还不少。能不能再具体说一下?
Mi Chen@NCRL 引用 删除 chenmi1999   /   2006-09-09 19:31:21
原来是这样实现的乘法啊,没学到什么东西嘛~~
xiaomei2的温馨之家 引用 删除 xiaomei2   /   2006-09-09 00:05:10
我也有同样的疑问呀,虽然同样可以综合出一个乘法器,但是这样做好不好呀?希望回答。哈哈
puppet0411的个人空间 引用 删除 puppet0411   /   2006-09-08 21:07:20
不明白,有符号这样assign mult_out = a_reg * b_reg;直接赋值就可以了???请指教一下,谢谢
 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-09-30  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 13327
  • 日志数: 106
  • 图片数: 9
  • 文件数: 4
  • 建立时间: 2006-05-07
  • 更新时间: 2008-06-17

RSS订阅

Open Toolbar