基于IP核的乘法器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于IP核的乘法器设计
一、实验原理
下图给出了16位乘法器的原理图。在设计中,使用了IP核Math Function中的Multiplier 资源。
二、实验步骤
1. 打开ISE软件创建一个新的工程,并选择器件的类型。
2. 用IP核生成一个16位的乘法器multiplier1。
3. 用VHDL语言生成一个16位的乘法器multiplier2。
4. 用例化语句component,port map合成一个顶层文件top.vhd。
5. 调用ISE仿真器进行行为仿真,观察仿真结果。波形文件如下:
三、VHDL源代码
1. 运算符描述的乘法器子模块的VHDL的源代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity multiplier2 is
port (
clk : IN std_logic;
a : IN std_logic_VECTOR(15 downto 0);
b : IN std_logic_VECTOR(15 downto 0);
q : OUT std_logic_VECTOR(31 downto 0)
);
end multiplier2;
architecture Behavioral of multiplier2 is
begin
process(clk)
begin
if rising_edge(clk) then
q<=a*b;
end if;
end process;
end Behavioral;
2. 顶层文件的VHDL的源代码
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity top is
port (
clk : IN std_logic;
a : IN std_logic_VECTOR(15 downto 0);
b : IN std_logic_VECTOR(15 downto 0);
q1 : OUT std_logic_VECTOR(31 downto 0);
q2 : OUT std_logic_VECTOR(31 downto 0)
);
end top;
architecture Behavioral of top is
component multiplier1
port (
clk : IN std_logic;
a : IN std_logic_VECTOR(15 downto 0);
b : IN std_logic_VECTOR(15 downto 0);
q : OUT std_logic_VECTOR(31 downto 0)
);
END component;
component multiplier2
port (
clk : IN std_logic;
a : IN std_logic_VECTOR(15 downto 0);
b : IN std_logic_VECTOR(15 downto 0);
q : OUT std_logic_VECTOR(31 downto 0)
);
END component;
begin
Inst_multiplier1 : multiplier1
port map
(
clk=>clk,
a=>a,
b=>b,
q=>q1
);
Inst_multiplier2 : multiplier2
port map
(
clk=>clk,
a=>a,
b=>b,
q=>q2
);
end Behavioral;