名称:基于FPGA的任意位宽乘法器VHDL代码Quartus仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
任意位宽乘法器
设计一个任意位宽乘法器,通过可调参数N,可以配置为任意位宽,N可以自由修改
可调参数N定义如下:
N : INTEGER := 16--N位乘法器,N可以自由修改,默认为16位
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:文章来源:https://www.toymoban.com/news/detail-832602.html
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; ENTITY Multiplier_nbit IS GENERIC ( N : INTEGER := 16--N位乘法器,N可以自由修改,默认为16位 ); PORT ( mult_A : IN STD_LOGIC_VECTOR(N - 1 DOWNTO 0);--mult_A是乘数,mult_B是被乘数 mult_B : IN STD_LOGIC_VECTOR(N - 1 DOWNTO 0);--mult_A是乘数,mult_B是被乘数 clk : IN STD_LOGIC;--时钟 start : IN STD_LOGIC;--start高电平时输入乘数 Done : OUT STD_LOGIC;--乘积计算完成 mult_product : OUT STD_LOGIC_VECTOR(2 * N - 1 DOWNTO 0)--乘积 ); END Multiplier_nbit; ARCHITECTURE behave OF Multiplier_nbit IS SIGNAL mult_product_buf : STD_LOGIC_VECTOR(2 * N - 1 DOWNTO 0) := "00000000000000000000000000000000"; TYPE State_type IS (INIT, ADD, SHIFT); -- 定义状态 SIGNAL state : State_Type:=INIT; -- 创建信号--初始状态为INIT SIGNAL mult_B_buf : STD_LOGIC_VECTOR(2 * N - 1 DOWNTO 0) := "00000000000000000000000000000000"; --临时变量 SIGNAL Count : INTEGER := 0; BEGIN PROCESS (clk) BEGIN IF (clk'EVENT AND clk = '1') THEN CASE state IS WHEN INIT => IF (start = '1') THEN state <= ADD;--start有效跳转到下一个状态ADD mult_B_buf(N - 1 DOWNTO 0) <= mult_B;--取乘数 mult_B_buf(2 * N - 1 DOWNTO N) <= "0000000000000000";--临时变量的高16位置0 ELSE mult_product_buf <= "00000000000000000000000000000000"; Count <= 0; Done <= '0'; --运算未完成 state <= INIT;--初始状态 END IF;
源代码
扫描文章末尾的公众号二维码文章来源地址https://www.toymoban.com/news/detail-832602.html
到了这里,关于基于FPGA的任意位宽乘法器VHDL代码Quartus仿真的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!