FPGA矩阵讲义.docx
文本预览下载声明
选题 3 实验讲义实验名称:实验名称:基于 FPGA 的计算器设计 1 基于 VHDL 的运算系统设计原理分析本设计是基于 VHDL 的运算系统设计,目的是为了实现 4 位 BCD 码的加、减、乘、除的运算功能。运算时能够通过键盘输入运算类型和运算所需要的数据,然后通过 BCD 码转二进制电路将数据转化成运算所需要的二进制数,再将数据和运算类型反馈到相应的运算电路得到运算结果,最后将运算结果通过译码电路传送给数码管将结果显示出来。整个设计过程是在QuartusⅡ的环境中进行的,采用自顶向下的设计方法,系统的结构框图如图 2-1 所示。图2-1 系统结构框图2加法器设计为了能够实现 4 位 BCD 码的加法运算,设计中被加数和加数都为 16 位二进制数,由于 2 个 16 位二进制数相加可能会产生进位,同时为了方便数码管显示,和采用了 20 位二进制。此外还有清零信号rst和加法使能信号 add,当rst=’1’时对和进行清零,否则当 add=‘1’时进行加法运算。3减法器设计为了实现 4 位 BCD 码的减法运算,设计中被减数和减数为 16 位二进制数,差为 20 位二进制数。输入的信号有清零信号rst、减法使能信号 sub、被减数 a、减数 b,输出的信号有差 cha 和借位 co。由于两个数相减的差有可能为正数也有可能为负数,当差为负数时表现为补码的形式,必须要将负数的补码进行修正,修正时对差的低 16 位求补码运算,而差的正负用借位 co 来表示,co=‘1’表示差为负,否则为正。44.1乘法器设计乘法器设计的原理分析乘法运算的方法可以通过以下实例来说明:设被乘数A=1110,乘数B=1101,求A×B。1由以上实际例子可以看出,16 位二进制乘法运算可以使用移位相加的方法来实现,被乘数左移 16 次,乘数右移 16 次,当时钟上升沿到来时都对乘数的最低位进行判断,如果乘数的最低位为 1 则乘积加上已经移位的被乘数,否则加 0。4.2乘法器电路结构框图根据乘法原理,采用移位相加的办法来实现乘法运算,如图 5-1。图 5-1 乘法器设计结构框图乘法器控制电路设计由于此次设计的是 16 位二进制乘法器电路,被乘数和乘数必须要移动 16 次,因此必须要使时钟信号只有 16 个脉冲。控制电路采用计数的办法,当乘法运算使能信号mul=‘1’时,将计数值 cnt16b 清零,否则当 cnt16b 小于 16 时,cnt16b 加 1 且cp等于clk;否则cp等于 0,这样就保证了cp输出只有 16 个脉冲。关键的 VHDL 程序如下: process(clk,mul)--描述了一个移位脉冲计数器,产生移位脉冲 begin if mul=1 then cnt16b=00000; elsifclkevent and clk=1 then if cnt16b16 then cnt16b=cnt16b+1; end if; end if; end process; process(clk,cnt16b,mul) begin if mul=0 then if cnt16b16 then cp=clk; else cp=0; end if; else cp=clk; end if; 4.2.12end process; 乘数右移电路设计乘数右移的目的是为了判断乘数的最低位是 0 还是 1,如果为 0 则乘机加上移位后的被乘数,否则加上 0。关键的 VHDL 程序如下: process(clk,mul) begin if clkevent and clk=1 then if mul=1 then shifter16=multiplier;--当mul=1装载入乘数 else shifter16(14 downto 0)=shifter16(15 downto 1);--将乘数右移一位 end if; end if; qb=shifter16(0); end process; 4.2.2 4.2.3 被乘数左移电路设计被乘数左移在乘法运算中是必须的,根据乘法运算的原理,当乘数的最低位为‘1’时左移后的被乘数作为加法电路的一个加数。当乘法运算使能信号mul为‘1’时,在被乘数前添加 16 个 0,之后当脉冲到来的时候左移一位。关键的 VHDL 程序如下: process(mul,clk) begin if mul=1 then seg8=0000000000000000multiplicand;--当mul=1在被乘数前添加 16 个 0 elsifclkevent and clk=1 then seg8(31 downto 1)=seg8(30 downto 0); seg8(0)=0; end if; end process; 4.2.4加法电
显示全部