名称:基于FPGA的任意位宽乘法器VHDL代码Quartus仿真
软件:Quartus
语言:VHDL
代码功能:
任意位宽乘法器
设计一个任意位宽乘法器,通过可调参数N,可以配置为任意位宽,N可以自由修改。
可调参数N定义如下:
N : INTEGER := 16--N位乘法器,N可以自由修改,默认为16位。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1. 工程文件
2. 程序文件
3. 程序编译
4. RTL图
5. Testbench
6. 仿真图
部分代码展示:
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;
点击链接获取代码文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=676
阅读全文
191