好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

ASIC系统设计实验报告.docx

7页
  • 卖家[上传人]:鲁**
  • 文档编号:538402638
  • 上传时间:2024-02-09
  • 文档格式:DOCX
  • 文档大小:385.74KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 八位乘法器的设计汪明 2080130204 信号与信息处理乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法由于 乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元 乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候 应尽量少的应用乘法运算随着DSP技术的逐步发展,目前大多数高性能的处理器中都包含 了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速 度快、性能稳定的乘法器模块仍然很有意义本实验的目的是选用一种设计方案设计一个八 位乘法器,利用XINLINX ISE软件进行VHDL程序的编写,然后对程序进行仿真验证,并对 所设计的乘法器进行评价1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟 器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘 法本实验利用 FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并 行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输 出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式, 通常情况下计算性能比串行的好。

      图 1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计下面以 4 位二进制数的乘法为例, 对二进制乘法运算的过程(图 2示)进行说明由图2 可知,如果对中间部分一行一行的处 理,则乘法部分由一个个的 2 输入与门与二输入全加器组成,将这些结构联合在一起组成如 图3 所示的结构b3b2b1b0a 3a 2 ala 0 xa 0 • b3 a 0 • b 2 a 0 • bl a 0 • b 0al • b3 al • b 2 al • bl al • b0 +a 2 • b3 a 2 • b 2 a 2 • bl a 2 • b 0 +a3 • b3 a3 • b2 a3 • bl a3 • b0 +pro(7) pro(6) pro(5) pro(4) pro(3) pro(2) pro(l) pro(0)图 2 四位二进制乘法过程从图3三个层结构完全相同在设计的时候,首先设计二位与门与二位全加器,然后构成组成上述 结构的三种不同的模块,进而构造三种层的结构,用模块设计的方法完成乘法器的设计上 图指的是4 位乘法器的结构模型,根据乘法运算规则,很容易推广到八位的情况本实验将 采用这种方法来进行八位乘法器的设计。

      2 模块分析与 VHDL 程序的编写本设计采用元件(component)的设计方法,将二输入与门、二输入全加器、图3中三种 不同的方框结构以及三种不同的层结构设计为元件,存储在元件库中,然后在设计乘法器的 过程中直接调用这些模块实现乘法的功能2.1 二输入与门与二输入全加器从上面的结构图中可以看出,二输入的与门是该结构中用的最频繁的一个元件之一,二 输入与门的VHDL语言非常简单,其源代码如图4示二输入全加器full_adder即以带进位 的加法器,通过全加的准则,也很容易写出全加器的VHDL代码,代码如图5示设置适 当的波形,对这两个模块进行仿真验证,很容易证明元件设计的正确性,由于这两个元件都 很简单,故不再描述仿真结果在完成仿真后,将这两个元件添加进元件库 my_compopnents 中,以便以后其它结构进行调用c oiTLp on ent at_Ld_ 2 project: 8-b it一一cojTLponent full_adder project: 8-bit maclibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE. STD_LOGIC_^:ITH. ALL :use IEEE. STD_LOGIC_UNSIGtIED. ALL ;ent it27 :md_2 isport (.aj b: in st d_logic ;y:out std_logic);end 日nd_2;architecture Behavioral of :di_Ld_2 is begin:md b :end Bel_Lavioral;图 4 二输入与门的 VHDL 代码2.2 元件包library IEEE:use IEEE.STD_LOGIC_1164.ALL:use IEEE. STD_LOGIC_ARITH. ALL: use IEEE. STD_LOGIC_UNSIGNED. ALL::ent full_adder isport i:bj cin: in st d_logic ;Sj cout:out st d_logic);end full_adder;architecture Eehavioral of full_adder is begins<=a zor b zor cin;cout <= (a :di_Ld b) or (a 注门己 cin) or (b ^nd cin); end Eehavioral;图5 二输入全加器的 VHDL 代码此次乘法器的设计采用的是component的方法,故像上面的两个元件等要添加到元件包 中,所以需要一个存放元件的元件包。

      在这里,我们通过设计package文件的方法将所有可 能用到的元件放入元件包 my_components 中,其源代码如图 6 所示从图中可以看出,其 包含二输入与门、二输入全加器、top_row、mid_row、low_row共5个元件library IEEE;use IEEE.STD_L0GIC_1164. all package my_components iscomponent and_2 isport ( Sj b: in std_logic ; y: out std_logic): end component;component full_adder isport(aj bj cin:in std_logic;cout:out std_logic) end component;component top_row isport(a:in std_logic:b:in std_logic_vector(7 dournto 0);soutj cout:out st d_logic_vect or(6 doimto 0) p:out std_logic);end component;component mid_row isport(a:in std_logic:b:in std_logic_vector(7 downto 0):sin, cin: in st d_logic_vect or (6 doimt o 0) soutj cout:out st d_logic_vect or(6 doimto 0) p:out std_logic);end component;component low_row isport (sirij cin: in st d_logic_vect or (6 doimt o 0):p:out std_logic_vector(7 doimto 0));end component;end my_components;图 6 元件包 my_components2.3 顶层、中间层及底层模块从结构图中可以看出,乘法器的结构中包含三个大的模块,即顶层结构(top_row)、中间层结构(mid_row)和底层结构(low_row)。

      在上一节的元件包中,已将这三种模块的接口写进了元件包my_components这三种模块的结构都不一样,顶层图中主要包含的是二输入与门、中间层中则二输入与门和二输入全加器、底层则只有全加器,对这三种结构分library IEEE;别进行 VHDL 程序的编写(注意程序中需用到二输入与门与二输入全加器,故在头文件库 中应该添加语句:use work.my_components.ALL;),代码如图7、8、9示同样,每完成一 种结构后,应进行仿真验证,由于这一部分的描述方法很固定,只要综合没有问题基本上不 会出错,所以在这里,也不给出仿真所设置的波形经仿真验证这三种结构的设计都是正确 性,可以实现预定的功能,放入元件包中后同样可以被其他的程序所引用IEEE.STD_L0GIC_1164.ALL;IEEE. STD_LOGIC_ARITH. ALL;IEEE. STD_LOGIC_UNSIGNED.ALL work.my_component s. ALL;entity top_row isport(a:in std_logic:b:in std_logic_vector(7 doimto 0):soutcout:out std_logic_vector(6 doimto 0): p:out std_logic):end top_row;architecture structural ofegmU1: componentU2: componentU3: componentU4: componentU5: componentU6: componentU7: componentU8: componentP,0?,0?,0?end structural:cout ⑹ < cout ⑸ < cout ⑷ < cout ⑶ < cout (2)< cout (1)< cout (0)

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.