本节将使用VHDL和Verilog HDL描述有符号和无符号整数的乘法运算。整数乘法运算块的符号描述如图3.7所示。
图3.7 整数乘法运算块的符号描述
4位无符号的整数(1011) 2 =(11) 10 和(1001) 2 =(9) 10 乘法的实现原理如图3.8所示。本质上,乘法运算就是加法和移位操作的组合。本小节将使用HDL语言描述无符号数的乘法运算。
图3.8 无符号数乘法运算的实现原理
本部分给出了无符号数乘法运算的VHDL描述,如代码清单3-9所示。
代码清单3-9 top.vhd
注 :读者可以定位到本书所提供资料的\intel_dsp_example\example_3_9路径中,用Quartus P rime P ro 2019.4集成开发环境打开该设计。
本部分给出了无符号数乘法运算的Verilog HDL描述,如代码清单3-10所示。
代码清单3-10 top.v
注 :读者可以定位到本书所提供资料的\intel_dsp_example\example_3_10路径中,用Quartus P rime P ro 2019.4集成开发环境打开该设计。
使用ModelSim-INTEL FPGA STARTER EDITION 2019.2仿真工具对无符号数的乘法运算进行仿真,其结果如图3.9所示。
图3.9 无符号数乘法运算的仿真结果(反色显示)
思考与练习3-9 :对无符号数乘法运算的仿真结果进行分析。
思考与练习3-10 :在Quartus Prime Pro 2019.4集成开发环境下,分别对无符号数乘法运算的VHDL和Verilog HDL设计进行Analysis Synthesis,然后用Technology Map Viewer(Post-Mapping)打开所生成的网表结构,并对该结构进行分析(提示,乘法运算使用了FPGA内的乘法器硬核资源)。
对于有符号数的乘法运算而言,情况比较复杂,下面分别进行讨论。
一个正数和一个负数的乘法运算如图3.10所示。对于一个正数和一个负数相乘的情况而言,只需要进行符号扩展。
图3.10 一个正数和一个负数的乘法运算
两个负数的乘法运算如图3.11所示。从图中可知,减去最后一部分积。在具体实现时,可以将最后一个部分积转成补码,然后进行相加运算。
注 :(1)很明显,两个操作数都为负数时,本质上它等效于两个无符号数的乘法运算。
(2)在使用HDL描述有符号数的乘法运算时并不需要考虑上面的实现细节。
图3.11 两个负数的乘法运算
本小节将使用HDL描述有符号数乘法运算的实现过程。
本部分给出了有符号数乘法运算的VHDL描述,如代码清单3-11所示。
代码清单3-11 top.vhd
注 :读者可以定位到本书所提供资料的\intel_dsp_example\example_3_11路径中,用Quartus P rime P ro 19.4集成开发环境打开该设计。
本部分给出了有符号数乘法运算的Verilog HDL描述,如代码清单3-12所示。
代码清单3-12 top.v
注 :读者可以定位到本书所提供资料的\intel_dsp_example\example_3_12路径中,用Quartus P rime P ro 2019.4集成开发环境打开该设计。
使用ModelSim-INTEL FPGA STARTER EDITION 2019.2仿真工具对有符号数的乘法运算进行仿真,其结果如图3.12所示。
图3.12 有符号数乘法运算的仿真结果(反色显示)
思考与练习3-11 :对有符号数乘法运算的仿真结果进行分析。
思考与练习3-12 :在Quartus Prime Pro 2019.4集成开发环境下,分别对有符号数乘法运算的VHDL和Verilog HDL设计进行Analysis Synthesis,然后用Technology Map Viewer(Post-Mapping)打开所生成的网表结构,并对该结构进行分析(提示,乘法运算使用了FPGA内的乘法器硬核资源)。