乘法器(EDA)
- 格式:docx
- 大小:115.11 KB
- 文档页数:12
EDA数字系统设计实验——8位二进制乘法电路学院:电子工程学院学号:0210****姓名:***8位二进制乘法电路1.选题目的:通过八位二进制乘法器设计实验,进一步熟悉VHDL语言的电路设计,及数字电路的基本知识,为以后进一步在数字电路学习上奠定基础。
2.设计要求8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下:1 1 0 1 0 1 0 1× 1 0 0 1 0 0 1 11 1 0 1 0 1 0 1 N0与被乘数相乘的部分积,部分积右移一位1 1 0 1 0 1 0 1 N1与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 0 0 1 1 1 1 1 1 11 0 0 1 1 1 1 1 1 1 两个部分积之和,部分积之和右移一位+ 0 0 0 0 0 0 0 0 N2与被乘数相乘的部分积0 1 0 0 1 1 1 1 1 1 10 1 0 0 1 1 1 1 1 1 1 与前面部分积之和相加,部分积之和右移一+ 0 0 0 0 0 0 0 0 N4与被乘数相乘的部分积· · ·· · · N7与被乘数相乘的部分积+ 1 1 0 1 0 1 0 11 1 1 1 0 1 0 0 1 0 0 1 1 1 1 与前面部分积之和相加0 1 1 1 1 0 1 0 0 1 0 0 1 1 1 右移一位得到最后的积为了实现硬件乘法器,根据上面的乘法的计算过程可以得出3点:一是只对两个二进制数进行相加操作,并用寄存器不断累加部分积;而是将累加的部分积左移(复制的被乘数不移动);三是乘数的对应位若为0时,对累加的部分积不产生影响(不操作)。
eda乘法器课程设计一、课程目标知识目标:1. 学生能理解EDA乘法器的基本原理和电路结构;2. 学生掌握数字逻辑设计的基本方法,并能够运用Verilog等硬件描述语言设计简单的乘法器;3. 学生了解不同类型乘法器的特点及其适用场合。
技能目标:1. 学生能够运用所学知识,使用EDA工具进行乘法器的原理图绘制及仿真;2. 学生通过实践操作,掌握乘法器电路的调试和优化方法;3. 学生能够分析和解决乘法器设计中出现的问题,提高问题解决能力。
情感态度价值观目标:1. 学生通过学习,增强对电子技术和数字电路的热爱,培养良好的学习兴趣;2. 学生在团队协作中,学会沟通与交流,培养合作精神和集体荣誉感;3. 学生在探索和创新过程中,形成勇于挑战、积极进取的精神风貌。
本课程针对高年级学生,结合课程性质、学生特点和教学要求,将课程目标分解为具体的学习成果。
旨在帮助学生掌握EDA乘法器的基本知识和设计方法,培养实际操作能力和团队协作精神,提高学生的问题解决能力和创新意识。
二、教学内容本章节教学内容主要包括以下几部分:1. EDA乘法器原理及分类- 按照教材相关章节,介绍乘法器的原理、分类及其优缺点;- 分析不同类型乘法器(如算术乘法器、墙上乘法器、Booth乘法器等)的工作原理及应用场景。
2. 数字逻辑设计基础- 回顾数字逻辑设计的基本概念,如逻辑门、触发器、编码器等;- 引导学生运用Verilog等硬件描述语言进行简单乘法器的设计。
3. EDA工具使用- 介绍EDA工具(如Quartus、Vivado等)的使用方法;- 指导学生绘制乘法器原理图、编写测试代码并进行仿真。
4. 乘法器电路设计与实现- 根据教学大纲,安排乘法器电路设计实践操作;- 引导学生进行电路调试、优化,并解决设计过程中出现的问题。
5. 团队协作与成果展示- 将学生分组,进行团队协作实践;- 组织学生进行成果展示,交流设计心得,提高沟通与表达能力。
实验二高速四位乘法器设计
一、实验目的
1.熟悉利用MAX-plusⅡ的原理图输入方法设计简单的组合电路
2.掌握层次化设计的方法
3.掌握高速乘法器的设计方法
二、实验原理
根据乘法的运算规则,不难得出下图所示的乘法器的原理框图。
4位加法器可以选择74283,b0*a,b1*a, b2*a,b3*a实际就是1位和4位的与运算,如下图所示。
由原理框图不难得出高速四位乘法器电路图。
三、实验内容
按以上原理实现一个高速4位乘法器
四、实验步骤
1.如上图所示,利用MAX-plusⅡ中的图形编辑器设计1-4的二进制乘法器,进行编译、仿真,并将其设置成为一元件(可根据需要对元件符号进行调整)。
注意:编译之前必须将文件设为当前文件。
2.建立一个更高得原理图设计层次,利用前面生成的1-4的二进制乘法器和调用库中的74283元件设计一高速4位乘法器
3.选择器件“Assign”|“Device”|“MAX7000S”|“EPM7128SLC84-6”,并根据下载板上的标识对管脚进行配置。
然后下载,进行硬件测试,检验结果是否正确。
五、实验报告:
先设计一个4位加法器,如下图:
高速4位乘法器元件图如下:
4位乘法器仿真波形:。
实验七综合实验四位移位相加法乘法器一:实验内容用移位相加法设计一个四位(4bit)乘法器二:实验原理4bit 乘法器的电路实现方法有多种,其中典型的电路有两种,其一:用组合电路实现,该电路将用到三个4bit 加法器,16 个两输入与门,该电路的特点:设计电路简单直观,电路运算速度快。
但缺点是使用器件较多,连线较多。
其二:就是本实验中要用的部分积。
移位相加的方法实现的4bit 乘法器。
部分积移分相加乘法器的算法。
下面将一个具体的乘法例题来分析这种算法,题中M4M3M2M1 是被乘数,也可用M 表示,N4N3N2N1 函乘数,也可用N 表示。
从以上算法可以看到,该算法其有四个重复运算周期,每个周期共有三步运算,第一步:求Ni 与M 的乘积;第二步将Ni 与M 乘积与前一个周期右移后的部分之和相加,第三步:将第二步的结果右移一位得到的部分积之和,为下一周期的运算作准备,当做完四次周期物理运算后,得到的最后数就是4bit 相乘器的乘积数。
三:设计理念1)74283级联从上图可以看出每一个运算周期都都是由两个部分积相加得到,然后再右移一位,所以乘法器的主要部分有74283带4位快速进位的全加器组成。
将乘法器打包成如下形式波形图:在时钟的每一个上升沿的时候,乘法器进行运算。
2)将二进制转换为10进制但是由于要在七段LED数码管中显示,所以原始的输出形式不能满足,因为上边的器件输出的是二进制,所以要将输入的乘数被乘数和结果转化为10进制,最大四位二进制即十进制的15,将被乘数A【3..0】和乘数B【3..0】除以10,余数即为个位,同理输出的结果最大为225,连续两次除以10,分别得到个位,十位的数,这样就将二进制的乘数,被乘数和结果转化为了10进制的数,从而方便了数码管的显示。
如图:rl rm rn个位,q4 q5 rh十位,q2百位。
3)选择器下面是将输出结果用7449译码器译码到数码管中,但是一个译码器不能同时译码(最多7个)数据,所以要用时钟信号以及多选器。
实验四、4位乘法器的实现一、实验前准备本实验例子使用独立扩展下载板EP1K10_30_50_100QC208(芯片为EP1K100QC208)。
EDAPRO/240H实验仪主板的VCCINT跳线器右跳设定为3.3V;EDAPRO/240H实验仪主板的VCCIO跳线器组中“VCCIO3.3V”应短接,其余VCCIO均断开;独立扩展下载板“EP1K10_30_50_100QC208”的VCCINT跳线器组设定为 2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的VCCIO跳线器组设定为3.3V。
请参考前面第二章中关于“电源模块”的说明。
二、实验目的1、掌握利用V erilog HDL语言实现乘法器的方法2、掌握利用8位数码显示模块的设计三、实验内容1、用Verilog HDL语言按照移位循环相加方法实现4x4乘法器模块。
2、用Verilog HDL语言实现8位数码显示模块。
三、实验原理乘法运算模块可采用移位相加原理实现,本实验采用乘法器模块和显示模块在顶层模块中例化的方法实现。
四、实验步骤1、按照以下步骤完成每一个模块的设计:新建设计文件夹(不可用中文)-》新建设计文件-》输入设计项目(原理图/Verilog HDL文本代码)-》存盘(注意原理图/文本取名)-》将设计项目设置成Project-》选择目标器件-》启动编译-》(可选:建立仿真波形文件-》仿真测试和波形分析)2、新建顶层原理图文件,调入第1步中设计好的各模块,以原理图方式实现顶层设计-》存盘(注意原理图/文本取名)-》将设计项目设置成Project-》选择目标器件-》启动编译-》建立仿真波形文件-》(可选:建立仿真波形文件-》仿真测试和波形分析)-》引脚锁定并编译-》编程下载/配置-》硬件测试五、硬件测试说明1、乘数与被乘数接8位数字开关A组。
2、结果显示接动态数码管。
六、硬件连线说明如果独立扩展板芯片为EP1K30QC208 PIN分配CLK 79 接GCLK1Rst 71 接按键F12,需要连线到右下角F12的连线插孔Display[6] 93 接数码管段位引线ADisplay[5] 92 接数码管段位引线BDisplay[4] 90 接数码管段位引线CDisplay[3] 89 接数码管段位引线DDisplay[2] 88 接数码管段位引线EDisplay[1] 87 接数码管段位引线FDisplay[0] 86 接数码管段位引线GSel[2] 70 接SS2Sel[1] 69 接SS1Sel[0] 68 接SS0data_a[3] 39 接8位数字开关A SW1data_a[2] 40 接8位数字开关A SW2data_a[1] 41 接8位数字开关A SW3data_a[0] 44 接8位数字开关A SW4data_b[3] 45 接8位数字开关A SW5data_b[2] 46 接8位数字开关A SW6data_b[1] 47 接8位数字开关A SW7data_b[0] 53 接8位数字开关A SW8如果独立扩展板芯片为EP1K 30TC144 PIN分配CLK 55 接CLK(T)-CLOCK(P)Rst 67 接按键F12,需要连线到右下角F12的连线插孔Display[6] 91 接数码管段位引线ADisplay[5] 90 接数码管段位引线BDisplay[4] 88 接数码管段位引线CDisplay[3] 87 接数码管段位引线DDisplay[2] 86 接数码管段位引线EDisplay[1] 83 接数码管段位引线FDisplay[0] 81 接数码管段位引线GSel[2] 70 接SS2Sel[1] 69 接SS1Sel[0] 68 接SS0data_a[3] 37 接8位数字开关A SW1data_a[2] 38 接8位数字开关A SW2data_a[1] 39 接8位数字开关A SW3data_a[0] 41 接8位数字开关A SW4data_b[3] 42 接8位数字开关A SW5data_b[2] 43 接8位数字开关A SW6data_b[1] 44 接8位数字开关A SW7data_b[0] 46 接8位数字开关A SW8程序:module CFQ4梁一一(input clk,input wire [4:1] ain, //输入ainput wire [4:1] bin, //输入binput rest_n,output reg [2:0] sel, //位选output reg [6:0] display);reg [15:0] count_clk; // 分频计数器,最大2^16=64K分频reg [3:0] a; //输入ain寄存器reg [3:0] b; //输入bin寄存器reg [7:0] mul_num; //乘得结果reg [3:0] g_bit; //个位reg [3:0] s_bit; //十位reg [3:0] b_bit; //百位reg [3:0] disp_temp;integer i;//assign a=ain;//assign b=bin;//分频always @ (posedge clk or negedge rest_n) beginif(rest_n ==0) begincount_clk=16'b0;endelse beginif(count_clk==16'hffff) begincount_clk=16'b0;endelse begincount_clk=count_clk+1'b1;endendend//乘法运算always @ (ain or bin ) beginmul_num=8'b0;for (i=1;i<=4;i=i+1) beginif(bin[i]) mul_num=mul_num+(ain<<(i-1));else mul_num=mul_num+1'b0;endb_bit=(mul_num/100)%10;s_bit=(mul_num/10)%10;g_bit=mul_num%10;end// 位选always @ (posedge count_clk[3] or negedge rest_n) begin if(rest_n ==0) beginsel=3'b0;endelse beginif (sel==3'b111) beginsel=3'b0;endelse beginsel=sel+1'b1;endendendalways @ (sel) begincase(sel)3'b000: disp_temp=4'b1010;3'b001: disp_temp=4'b1010;3'b010: disp_temp=4'b1010;3'b011: disp_temp=4'b1010;3'b100: disp_temp=4'b1010;3'b101: disp_temp=b_bit;3'b110: disp_temp=s_bit;3'b111: disp_temp=g_bit;default: disp_temp=4'b1010;endcaseend//显示译码,共阴数码管,a:对应高位,g:对应低位always @ (disp_temp) begincase (disp_temp)4'b0000: display=7'b1111110; //04'b0001: display=7'b0110000; //14'b0010: display=7'b1101101; //24'b0011: display=7'b1111001; //34'b0100: display=7'b0110011; //44'b0101: display=7'b1011011; //54'b0110: display=7'b1011111; //64'b0111: display=7'b1110000; //74'b1000: display=7'b1111111; //84'b1001: display=7'b1111011; //94'b1010: display=7'b0000001; //-default: display=7'b0000000; //全灭endcaseend endmodule。
eda乘法器课程设计一、课程目标知识目标:1. 学生能理解EDA乘法器的基本原理和设计流程;2. 学生能掌握数字逻辑设计的基本方法,并运用Verilog HDL语言实现EDA 乘法器;3. 学生了解不同类型乘法器的优缺点,并能够进行比较和分析。
技能目标:1. 学生能够运用所学知识,独立完成EDA乘法器的原理图设计和代码编写;2. 学生能够利用相关软件工具进行仿真测试,验证乘法器的功能正确性和性能指标;3. 学生能够通过小组合作,共同解决乘法器设计过程中遇到的问题,提高团队协作能力。
情感态度价值观目标:1. 学生培养对数字电路设计的兴趣,增强学习电子信息的积极性;2. 学生在课程学习过程中,培养严谨的科学态度和良好的工程素养;3. 学生通过小组合作,培养团队精神,学会尊重和倾听他人意见,提高沟通表达能力;4. 学生能够认识到电子信息技术在国家发展和社会进步中的重要作用,增强社会责任感和使命感。
二、教学内容1. 数字逻辑设计基础:介绍逻辑门、组合逻辑电路和时序逻辑电路的基本原理,为乘法器设计奠定基础。
2. Verilog HDL语言:讲解Verilog的基本语法、数据类型和常用语句,使学生掌握用Verilog进行数字电路设计的方法。
3. EDA乘法器原理:分析并讲解不同类型的乘法器(如Booth乘法器、Wallace树等)的原理和结构,对比优缺点。
- 教材章节:第三章《数字系统的设计方法》4. 乘法器设计流程:- 设计原理图:指导学生根据乘法器原理绘制原理图;- 编写Verilog代码:指导学生使用Verilog语言实现乘法器功能;- 仿真测试:教授学生使用相关软件工具(如ModelSim)进行仿真测试,验证设计的正确性。
- 教材章节:第四章《数字系统的实现与验证》5. 小组讨论与实践:组织学生进行小组讨论,共同解决设计过程中遇到的问题,提高实际操作能力。
6. 性能分析与优化:指导学生分析乘法器的性能指标(如速度、面积等),探讨优化方案。
目录一、综述 (2)乘法器总体设计 (2)二、设计内容与仿真结果 (2)1. 防抖存数部分 (2)小结 (5)2. 输入模块部分 (6)3. LED显示部分 (6)4. 乘法部分 (7)小结 (9)5. 选择显示部分 (10)6. 数码管显示部分 (10)7. 整体结果 (12)小结 (12)8. 附2进制转BCD码 (13)小结 (14)三、总结 (15)一乘法器总体设计本设计由防抖存数模块,输入模块,乘法模块,LED显示模块,选择显示模块以及数码管显示模块组成。
可实现两个5位数相乘。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次由实验箱上的按键输入,同时在数码管显示分别显示乘数与被乘数。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能,显示采用16进制。
KEY1~KEY5为数A、数B的输入端,KEY6表示乘号,KEY7表示等号。
初始时刻数码管显示“00”,此时可直接输入数A,数码管显示数A,此后按下KEY6,表示数A输入完毕,此后输入为数B,数码管显示数B,数B输入完毕,按下KEY7,对输入的两数进行乘法计算,并由数码管显示结果。
各模块均由VHDL语言编写,例化成元件后采用原理图法进行连接。
可简单清晰地描述各模块之间信号的传递。
实验箱主要由EPM7128SLC84-15及其外围电路组成,箱上LED及数码管均为共阳极接法,按键按下时输出高电平。
乘法器整体设计如下图所示:一、设计内容与仿真结果1.防抖存数部分本设计采用按键输入,所以需对按键进行防抖,同时,由于按键按下后会弹起,不能保持输出高电平,所以须对输入处理,此处曾设计了两种方案:方法一、采用RS触发器搭建而成,R端接地,在时钟上升沿触发下,S端输入高电平(按下按键)时Q端输出为高,此后S端输入低电平(松开按键),Q端保持输出为高。
用RS触发器搭建的实现方式如图:但此方法在输入A时置为高的位,输入B时仍为1,此时需要清零。
《EDA技术与应用》设计报告设计题目流水线乘法器的混合输入设计专业班级学号姓名年月日目录1原理说明 (1)2设计过程 (1)2.1用VHDL设计16位加法器 (1)2.2建立宏功能块FFO和mult8b (2)2.3顶层原理图文件设计 (3)2.4将顶层文件设置成工程 (3)3编译过程 (3)4仿真波形 (4)5结果分析 (4)6设计总结和体会 (5)1原理说明本次实验为8位流水线乘法累加器,运用以VHDL文本描述和宏功能块为原理图元件的混合输入和设计方法。
2设计过程2.1用VHDL设计16位加法器用VHDL设计16位加法器。
作为乘法累加器的元件之一,16位加法器可以用VHDL文本表述:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER16B ISPORT ( CIN : IN STD_LOGIC;A,B : IN STD_LOGIC_VECTOR(15 DOWNTO 0);S : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);COUT : OUT STD_LOGIC );END ADDER16B;ARCHITECTURE behav OF ADDER16B ISSIGNAL SINT : STD_LOGIC_VECTOR(16 DOWNTO 0);SIGNAL AA,BB : STD_LOGIC_VECTOR(16 DOWNTO 0);BEGINAA<='0'&A; BB<='0'& B;SINT <= AA + BB + CIN; S <= SINT(15 DOWNTO 0); COUT <= SINT(4);END behav;首先将此加法器输入QuartusII,然后将其转换为原理图元件,即选择file→create/update →create symbol files for current 命令,即可将当前文件ADDER16B.vhd变成一个元件符号存盘,以待在高层次设计中调用。
乘法器eda课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握乘法器的基本原理和操作方法;技能目标要求学生能够运用乘法器解决实际问题,并进行简单的故障排查;情感态度价值观目标要求学生培养对科学技术的兴趣和好奇心,增强创新意识和团队合作能力。
二、教学内容根据课程目标,本章教学内容主要包括乘法器的基本原理、结构与功能、操作方法、应用案例以及故障排查。
具体安排如下:1.第一节:乘法器的基本原理与结构,介绍乘法器的组成、工作原理和主要性能指标。
2.第二节:乘法器的功能与操作,讲解乘法器的各项功能及其操作方法。
3.第三节:乘法器在实际中的应用,分析乘法器在不同领域的应用案例。
4.第四节:乘法器的故障排查与维护,教授学生如何进行故障排查和日常维护。
三、教学方法本课程采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
讲授法用于讲解基本原理和操作方法;讨论法用于引导学生深入思考和探讨问题;案例分析法用于分析乘法器在实际中的应用;实验法用于让学生亲自动手操作,提高实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于提供理论知识,多媒体资料用于辅助教学,使学生更直观地了解乘法器的工作原理和操作方法。
实验设备则是学生进行实践操作的重要工具,包括各种类型的乘法器及其配件。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面反映学生的学习成果。
平时表现主要考察学生的课堂参与度、提问和回答问题的情况;作业分为课后练习和项目任务,要求学生在规定时间内完成,以巩固所学知识;考试包括期中考试和期末考试,采用闭卷考试形式,覆盖课程所有知识点。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排如下:共计16周,每周2课时。
教学地点为教室,教学进度安排合理、紧凑,确保在有限的时间内完成教学任务。
基于FPGA的乘法器设计课程设计报告
题目名称:基于FPGA的乘法器设计学生姓名:**
学号: **********
专业年级:电子信息工程2011级
指导教师:***
时间: 2014.1.5
基于FPGA的乘法器设计
一、设计任务与要求:
1)有输入端口“读入”接收读入指示信号;“读入”信号为
“1”时开始读数,信号为“0”时停止读数;
2)乘数为位宽16bit的二进制有符号数;
3)两个16bit乘数先后经1bit位宽端口串行输入系统;
4)两个乘数的16bit均输入完成后送交后续模块做乘法运算;
5)乘法运算部分要求利用流水线架构实现;乘法结果保留
24bit;
6)结果输出时,有指定管脚给出指示信号;
7)有“同步复位”端口(1bit),此端口输入“1”后,整
个系统强制回归到初始状态;
二、方案设计与论证:
2.1组合电路乘法器
组合电路乘法器采用了很多的寄存器和加法器进行运算,占用了很大的资源,稳定性也比较低,思路复杂难与设计。
2.2基于时序电路的位移相加型16位硬件乘法器
基于时序电路的位移相加型16位硬件乘法器从工程实际设计上来说,它往往会利用时序逻辑设计的方法来实现,属于时序逻辑范畴。
其思路清析,好理解,稳定性较高,具有很好的工程实际性,因此选用本方案。
三、基于时序电路的位移相加型16位硬件乘法器基本原理:
该乘法器是由16位加法器构成的以时序方式设计的16位乘法器。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,
若为1,则乘数左移后与上一次的和相加;
若为0,左移后以全零相加,直至被乘数的最高位。
从图10-2的逻辑图及其乘法操作时序图图1(示例中的相乘数为C6H和FDH )上可以清楚地看出此乘法器的工作原理。
图2中,START信号的上跳沿及其高电平有两个功能,即32位寄存器清零和被乘数A[15..0]向移位寄存器SREG16B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号。
当被乘数被加载于16位右移寄存器SREG16B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。
当为1时,1位乘法器ANDARITH打开,16位乘数B[15..0]在同一节拍进入16位加法器,与上一次锁存在16位锁存器REG16B 中的高16位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。
而当被乘数的移出位为0时,与门全零输出。
如此往复,直至16个时钟脉冲后,最后乘积完整出现在REG32B端口。
在这里,1位乘法器ANDARITH的功能类似于1个特殊的与门,即当ABIN为‘1’时,DOUT直接输出DIN,而当ABIN为‘0’时,DOUT输出全“0000000000000000”。
图1 16位移位相加乘法器运算逻辑波形图
图2 16位乘法器逻辑原理图
四、FPGA的乘法器各个模块设计:
基于时序电路的位移相加型16位硬件乘法器包括:16位加法器ADDER16、1位乘法器ANDARITH、32位锁存器(右移寄存器)REG32B、16位右移寄存器SREG16B。
4.116位加法器(ADDER16):
LIBRARY IEEE; --16位加法器
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ADDER16 IS
PORT(B, A : IN STD_LOGIC_VECTOR(15 DOWNTO 0);
S : OUT STD_LOGIC_VECTOR(16 DOWNTO
0) );
END ADDER16;
ARCHITECTURE behav OF ADDER16 IS
BEGIN
S <= '0'&A + B ;
END behav;
4.21位乘法器(ANDARITH):
LIBRARY IEEE; --1位乘法器
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY ANDARITH IS -- 选通与门模块PORT ( ABIN : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(15 DOWNTO
0);
DOUT : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );
END ANDARITH;
ARCHITECTURE behav OF ANDARITH IS
BEGIN
PROCESS(ABIN, DIN)
BEGIN
FOR I IN 0 TO 15 LOOP -- 循环,完成8位与1位运算
DOUT(I) <= DIN(I) AND ABIN;
END LOOP;
END PROCESS;
END behav;
4.332位锁存器(REG32B):
LIBRARY IEEE; --32位锁存器/右移寄存器
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT ( CLK,CLR : IN STD_LOGIC;
D : IN STD_LOGIC_VECTOR(16 DOWNTO 0);
Q : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END REG32B;
ARCHITECTURE behav OF REG32B IS
SIGNAL R32S : STD_LOGIC_VECTOR(31 DOWNTO 0);
BEGIN
PROCESS(CLK, CLR)
BEGIN
IF CLR = '1' THEN R32S <= (OTHERS =>'0') ; -- 清零信号
ELSIF CLK'EVENT AND CLK = '1' THEN --时钟到来时,锁存输入值,并右移低8
R32S(14 DOWNTO 0) <= R32S(15 DOWNTO 1); -- 右移低8位
R32S(31 DOWNTO 15) <= D; -- 将输入
锁到高8位
END IF;
END PROCESS;
Q <= R32S;
END behav;
4.416位右移寄存器(SREG16B):
LIBRARY IEEE; -- 16位右移寄存器
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SREG16B IS
PORT ( CLK ,LOAD : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(15 DOWNTO
0);
QB : OUT STD_LOGIC );
END SREG16B;
ARCHITECTURE behav OF SREG16B IS
SIGNAL REG16 : STD_LOGIC_VECTOR(15 DOWNTO 0);
BEGIN
PROCESS (CLK, LOAD)
BEGIN
IF LOAD = '1' THEN REG16 <= DIN;
ELSIF CLK'EVENT AND CLK = '1' THEN
REG16(14 DOWNTO 0) <= REG16(15 DOWNTO
1);
END IF;
END PROCESS;
QB <= REG16(0); -- 输出最低位END behav;
五、仿真结果:
图3仿真结果六、原理图:
图4原理图七、心得体会:
EDA实用教程一门很有些意义的课程。
从最初的一步一步的学习,让我学到更多,对计算机的最底层有了更深一步的了解。
在做这个课程设计时,比想象的更加困难些,虽然通过许多途径找到了相关的资料,但是实现着实不简单。
对于我来说写程序是一个比较困难的事情,所以做这个课程设计确实很纠结。
不过做完这个课程设计,我学到了很多,在编程方面也有了一定的提升。
这门课程设计必须理论和实践相结合。
整个的设计过程中,要充分利用软件工程中的模块化设计思想,这样使设计减少了许多繁杂的问题,使程序看起来更加明了,不易混乱。
任何事情不可能一下子完成,程序的实现更是要一步一步来完成,急于求成,很大程度上会增加软件开发的难度,造成开发过程中不必要的麻烦。
只要坚持去做,努力去做,就会有收获。
我在进步,也会继续进步。
在经过那段设计困难时期后,经过查阅大量的参考书籍,同学之间不断的探讨以及老师的细心讲解,及时的指导后,设计的思路终于有了眉目。
这次课程设计,给了我们将学过的理论知识付诸实践的机会,让我发现,理论和实践其实确实是不一样的。
通过编写程序,增加了学习的积极性和趣味性。
通过课程实践,巩固加深对课堂教学内容的理解,提高我的VHDL设计能力,培养克服困难的毅力和精神。
参考文献:
[1]赵倩.基于流水线重构技术的16×16位乘加器的设计.微计算机信息,2006(2)[2]潘松.黄继业.EDA技术实用教程VHDL版(第四版).科学出版社,2011.11。