VHDL.Verilog实现有符号数乘法
时间:10-02
整理:3721RD
点击:
VHDL.Verilog实现有符号数乘法
在数字信号处理(DSP)中,乘加是最基本的运算,以至于很多FPGA厂商以MAC的多少及运算速度做为器件的一个重要指标。下面就乘法实现进行讨论。
在DSP中,大多是有符合数的操作,这里给出有符号数乘法的VHDL和Verilog程序。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_signed.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY signed_mult IS
PORT (clk: IN STD_LOGIC;
a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
result: OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
);
END signed_mult;
ARCHITECTURE rtl OF signed_mult IS
SIGNAL a_int, b_int: SIGNED (7 downto 0);
SIGNAL pdt_int: SIGNED (15 downto 0);
BEGIN
result <= STD_LOGIC_VECTOR(pdt_int);
Process(clk)
Begin
If rising_edge(clk) then
a_int <= SIGNED (a);
b_int <= SIGNED (b);
pdt_int <= a_int * b_int;
end if;
end process
END rtl;
相应的Verilog程序:
module signed_mult (out, clk, a, b)
output [15:0] out;
input clk;
input signed [7:0] a;
input signed [7:0] b;
reg signed [7:0] a_reg;
reg signed [7:0] b_reg;
reg signed [15:0] out;
wire signed [15:0] mult_out;
assign mult_out = a_reg * b_reg;
always@(posedge clk)
begin
a_reg <= a;
b_reg <= b;
out <= mult_out;
end
对于无符号数,只需要将其中的signed换成unsigned即可。
在数字信号处理(DSP)中,乘加是最基本的运算,以至于很多FPGA厂商以MAC的多少及运算速度做为器件的一个重要指标。下面就乘法实现进行讨论。
在DSP中,大多是有符合数的操作,这里给出有符号数乘法的VHDL和Verilog程序。
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_arith.ALL;
USE ieee.std_logic_signed.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY signed_mult IS
PORT (clk: IN STD_LOGIC;
a: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
b: IN STD_LOGIC_VECTOR (7 DOWNTO 0);
result: OUT STD_LOGIC_VECTOR (15 DOWNTO 0)
);
END signed_mult;
ARCHITECTURE rtl OF signed_mult IS
SIGNAL a_int, b_int: SIGNED (7 downto 0);
SIGNAL pdt_int: SIGNED (15 downto 0);
BEGIN
result <= STD_LOGIC_VECTOR(pdt_int);
Process(clk)
Begin
If rising_edge(clk) then
a_int <= SIGNED (a);
b_int <= SIGNED (b);
pdt_int <= a_int * b_int;
end if;
end process
END rtl;
相应的Verilog程序:
module signed_mult (out, clk, a, b)
output [15:0] out;
input clk;
input signed [7:0] a;
input signed [7:0] b;
reg signed [7:0] a_reg;
reg signed [7:0] b_reg;
reg signed [15:0] out;
wire signed [15:0] mult_out;
assign mult_out = a_reg * b_reg;
always@(posedge clk)
begin
a_reg <= a;
b_reg <= b;
out <= mult_out;
end
对于无符号数,只需要将其中的signed换成unsigned即可。
这个...难道可以综合,吗
Verilog程序我看可以综合,没有问题
verilog 2000开始支持了
只不过是在库中有相应的模块而已,也算是IP吧。
用VERLOG真的这么简单吗 而且在一个时钟内能完成乘法运算吗
这个要有IP才行的吧
试试先
先试试看,不知道能不能综合.
这样写也行么
作实现 的话最好用 IPCORE
特别是位宽比较大的时候
有点晕,学习中!
行 ! 但是综合后的器件比较多(是一种并行的结构,没有锁存器),特别是在位数比较高的时候.
乘法中最剩资源的结构是移位加乘法结构.,但执行的时间较长.
还有一种就是加法数结构,这种的时间和资源介于上面两者之间
曾经的大学毕业设计课题,记忆尤新阿,呵呵
新的bill gates产生了
感谢小编,我正要设计乘法,多谢了
FDDDD
如果以后仿真工具发展到设计都可以这样做就好了!
VHDL程序的那个倒是能综合,但仿真结果怎么不对呀,请问那个有符号数的乘法,是怎么进行的?!
很不错的,谢谢小编
shi yi shi ba
就是综合出来信能也一般
有没有更好的方法啊。
Verilog实现有符号数乘法
这个综合出来恐怕很占资源吧?
没ip的话那段代码根本没有意义
有符号乘法的verilog实现呀!
modelsim认识signed吗?
