FPGA矩阵讲义.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FPGA矩阵讲义

选题 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加法电

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档