乘法器(EDA)
EDA实验--8位二进制乘法电路

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乘法器课程设计

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. 团队协作与成果展示- 将学生分组,进行团队协作实践;- 组织学生进行成果展示,交流设计心得,提高沟通与表达能力。
EDA技术之高速四位乘法器设计

实验二高速四位乘法器设计
一、实验目的
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位乘法器仿真波形:。
EDA乘法器实验报告

实验七综合实验四位移位相加法乘法器一:实验内容用移位相加法设计一个四位(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个)数据,所以要用时钟信号以及多选器。
EDA4位乘法器的程序

实验四、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综合实验报告-8位硬件乘法器设计

在实验老师的指导下,我圆满完成了实验任务,有了不少收获,其中了解到了移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的电路优势,并且在加深了如何通过VerilogHDL生成原理图器件并进行相应仿真,最后学习了应用移位相加原理设计8位乘法器。
3、ADDER8BT的仿真图及分析
如图所示,红色剪头表示8+11=19,绿色剪头表示8+9=17,紫色剪头表示8+9+1=18,这说明S=A+B+CIN。
4、完整乘法器的仿真图及分析
如图所示,红色剪头表示外部按键START按下(给SREG8BT的LOAD高电平)时给ARIEND一个高电平输出,绿色剪头处的Q为31104,而31104<<1结果为0xF300,此处最高位为0xF3,即相乘的结果为0xF3,这里表示B的数值0xF3乘以A的数值0xC8第4位再加上前3位的结果,因为前3位相乘后的结果为0,因此这里相乘的结果为0xF3,紫色剪头也是同理。
如图所示,在第一个2,此时输出Q=1536,其二进制表示为0000 0110 0000 0000,由VerilogHDL代码可知R16S[6:0]<=R16S[7:1]即R16S[6:0] = 0,R16S[15:7] = 12,此结果与Q输出结果一致绿色剪头与紫色剪头也是同理。
学生实验报告
系别
电子信息学院
课程名称
《EDA综合实验》
班级
实验名称
8位硬件乘法器设计
姓名
实验时间
学号
指导教师
成绩
批改时间
报告内容
一、实验目的和任务
1、学习应用移位相加原理设计8位乘法器。
2、了解移位相加原理构成乘法器与用组合逻辑电路直接设计的同样功能的
eda乘法器课程设计

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. 性能分析与优化:指导学生分析乘法器的性能指标(如速度、面积等),探讨优化方案。
EDA课程设计论文——乘法器解读

目录一、综述 (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课程设计流水线乘法器设计报告

《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课程设计

乘法器eda课程设计一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握乘法器的基本原理和操作方法;技能目标要求学生能够运用乘法器解决实际问题,并进行简单的故障排查;情感态度价值观目标要求学生培养对科学技术的兴趣和好奇心,增强创新意识和团队合作能力。
二、教学内容根据课程目标,本章教学内容主要包括乘法器的基本原理、结构与功能、操作方法、应用案例以及故障排查。
具体安排如下:1.第一节:乘法器的基本原理与结构,介绍乘法器的组成、工作原理和主要性能指标。
2.第二节:乘法器的功能与操作,讲解乘法器的各项功能及其操作方法。
3.第三节:乘法器在实际中的应用,分析乘法器在不同领域的应用案例。
4.第四节:乘法器的故障排查与维护,教授学生如何进行故障排查和日常维护。
三、教学方法本课程采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
讲授法用于讲解基本原理和操作方法;讨论法用于引导学生深入思考和探讨问题;案例分析法用于分析乘法器在实际中的应用;实验法用于让学生亲自动手操作,提高实践能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
教材和参考书用于提供理论知识,多媒体资料用于辅助教学,使学生更直观地了解乘法器的工作原理和操作方法。
实验设备则是学生进行实践操作的重要工具,包括各种类型的乘法器及其配件。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面反映学生的学习成果。
平时表现主要考察学生的课堂参与度、提问和回答问题的情况;作业分为课后练习和项目任务,要求学生在规定时间内完成,以巩固所学知识;考试包括期中考试和期末考试,采用闭卷考试形式,覆盖课程所有知识点。
评估方式应客观、公正,能够全面反映学生的学习成果。
六、教学安排本课程的教学安排如下:共计16周,每周2课时。
教学地点为教室,教学进度安排合理、紧凑,确保在有限的时间内完成教学任务。
乘法器设计EDA技术即电子设计自动化技术

乘法器设计EDA技术即电子设计自动化技术乘法器是数字电路设计中常用的基本组件之一,它能够实现两个数的乘法操作。
随着技术的不断发展和进步,传统的手工设计方法已经无法满足设计需求,因此乘法器的设计越来越多地依赖于EDA技术,即电子设计自动化技术。
本文将介绍乘法器设计中常用的EDA技术,包括综合、布局、布线和时序分析。
综合是乘法器设计中的第一步,它将高级语言描述的设计代码转换为低级语言的逻辑网表。
综合工具根据指定的设计约束和目标,自动优化和优化电路,实现设计功能的同时满足面积、功耗、时序等性能要求。
综合技术能够快速生成电路实现,方便设计工程师进行设计验证和后续的布局与布线。
布局是乘法器设计的第二步,它将逻辑网表映射到物理空间中。
通过布局,可以确定各个逻辑元素的位置关系,包括互连线的布线、存储单元的布局、输入输出端口的位置等。
布局的目标是尽可能地减小布线长度和面积,从而提高电路的运行速度和性能。
布局工具根据设计规则和约束,自动完成电路元素的排列和布线,生成初始的布局结果,供后续步骤使用。
布线是乘法器设计的第三步,它将布局结果中的逻辑元素通过连线连接起来。
布线的目标是满足时序要求,尽可能地减小延迟和路径冲突,并保证信号传输的可靠性和稳定性。
布线工具根据设计规则和约束,自动完成连线的路径选择和布线优化,生成最终的布线结果。
布线过程中需要考虑电路的时序约束、功耗、噪声和电磁干扰等因素,以保证电路的正常运行和性能优化。
时序分析是乘法器设计的最后一步,它通过对电路的延迟、时钟边界、时钟间隔等进行分析和仿真,以验证电路的时序正确性。
时序分析工具可以对设计中的时序约束进行验证,检测是否存在不满足时序要求的路径,并提供时序优化的建议和指导。
时序分析还可以进行时序异常检测和优化,帮助设计工程师提高电路的性能和可靠性。
总之,乘法器设计借助EDA技术的发展,实现了从高级语言描述到低级语言实现,再到布局和布线,最后到时序验证的自动化过程。
eda乘法器设计

实验四乘法器设计一、实验目的1、掌握利用移位相加方法实现乘法运算的基本原理;2、通过一个4×4的二进制乘法器的设计,学习利用VHDL语言来描述简单的算法,3、熟悉VHDL语言的变量数据对象在描述算法中的作用;二、实验原理实现乘法运算的算法很多,比较常见的有以下几种方法:移位相加、查询表、逻辑树等。
这里主要介绍移位相加的方法。
这种方法实现起来相对简单,目前大多数的单片机和微处理器都采用这种方法。
但是这种方法的最大缺点是速度慢,8位乘法需要8个时钟周期才能得到结果。
根据运算过程中左移或者右移对象的不同,采用移位相加实现乘法运算又有两种算法:(1)部分和固定、部分积左移法(算法1)(2)部分和右移、部分积固定法(算法2)无论是从用时方面还是占用硬件资源方面看,算法2都要优于算法1。
在算法2中,部分积各位是固定的,部分和逐步右移。
下面以4位乘法运算为例,说明其工作原理。
假设4位被乘数X为X3X2X1X0, 乘数Y为Y3Y2Y1Y0, 4×4位结果得到8位的乘积S,将它存放在一个9位累加寄存器中。
累加器初始值为全零,即“000000000”。
算法2的运算过程如下:(1)移出乘数的最低位Y0乘以被乘数X得到第1个部分积S0;(2)第1个部分积S0与累加器S中高4位相加,结果仍然存放在累加器中,即S<=S+S0; (3)将累加器中内容向右移1位,结果仍然存放在累加器中;(4)移出乘数的次低位Y1, 乘以被乘数X得到第2个部分积S0;(5)第2个部分积S0 再与累加器S中高4位相加,结果仍然存放在累加器中,即S<=S+S0;……如此反复直到乘数中所有的位都被移出,第4个部分和与累加器中的值相加后右移,得到的和就是乘积。
算法2的流程图如下图4.1所示:在本实验中将设计一个如下图4.2所示的4位乘法器,输入信号X和Y分别是4位乘数和被乘数Y,CLK为输入时钟信号,START 是乘法启动信号。
EDA五位乘法器

1.课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。
这是由于创新基于实践、源于实践,实践出真知,实践检验真理。
实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
2.题目要求设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能。
3.基本原理利用单独按键通过高低信号控制输入乘数,被乘数以及显示结果。
与此同时将符号位分离并单独运算得出输出结果的符号,而乘数和被乘数数值部分通过乘法运算得出8位二进制数,再通过二进制转十进制运算将个十百位分别传给数码管前的译码器,控制数码管显示数字,而且将符号位也通过专用数码译码器编译,从而显示出乘法的各个数据。
4.电路设计4.1整体电路图24.2输入选择模块VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;entity shuruxuanze isPORT(a: in std_logic_vector(4 downto 0);chengshu: in std_logic;beichengshu: in std_logic;X,Y: out std_logic_vector(3 downto 0);fx,fy:out std_logic);end shuruxuanze;architecture a of shuruxuanze isbeginprocess(chengshu,a,beichengshu)beginif(chengshu='1' and beichengshu='0' ) then X(3 downto 0)<=a(3 downto 0);fx<=a(4);end if;if(chengshu='0' and beichengshu='1') then Y(3 downto 0)<=a(3 downto 0);fy<=a(4);end if;end process;end a;波形仿真结果如下34.3乘法模块(实现两个4位二进制数的乘法运算)VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;entity mul4 isPORT(x,y:in std_logic_vector(3 downto 0);p :out std_logic_vector(7 downto 0)); end mul4;architecture a of mul4 issignal temp1: std_logic_vector(3 downto 0);signal temp2: std_logic_vector(4 downto 0);signal temp3: std_logic_vector(5 downto 0);signal temp4: std_logic_vector(6 downto 0);begintemp1<=x when y(0)='1' else "0000";temp2<=(x & '0') when y(1)='1' else "00000";temp3<=(x & "00") when y(2)='1' else "000000";temp4<=(x & "000") when y(3)='1' else "0000000";p<=temp1+temp2+temp3+temp4;end;波形仿真如下44.4输入位数转换(将输入数值的4位二进制转换成等值的8位)VHDL语言如下LIBRARY ieee;use ieee.std_logic_1164.all;entity shuru1 isPORT(a: in std_logic_vector(3 downto 0);x: out std_logic_vector(7 downto 0));end shuru1;architecture act of shuru1 isbeginx<= "0000"&a(3 downto 0);end act;波形仿真如下54.5符号位运算模块VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;entity fuhaowei isPORT(a,b:in std_logic;s: out std_logic);end fuhaowei;architecture a of fuhaowei isbeginprocess(a,b)begins<=a XOR b;end process;end a;波形仿真如下4.6显示选择模块(对乘数、被乘数、结果分别选择,并将其传送到数码管的译码器中)6VHDL语言如下LIBRARY ieee;use ieee.std_logic_1164.all;entity xianshixz isPORT(k1,k2,k3:in std_logic_vector(7 downto 0); rst,chenghao,denghao: in std_logic;out1: out std_logic_vector(7 downto 0);clk: in std_logic);end xianshixz;architecture act of xianshixz isbeginprocess(rst,chenghao,clk,denghao)beginif(clk'event and clk='1') thenif(rst='1') thenout1<="00000000";elseif(chenghao='1' and denghao='0') thenout1<=k1;elsif(denghao='1' and chenghao ='0') then out1<=k2;else out1<=k3;end if;end if;end if;end process;end act;波形仿真如下74.7二进制转十进制模块(将传送来的8位二进制转换成3位十进制数,并将每位传送给数码管的译码器)verielog语言如下module zhuanzhi(clk,DB,Q1,Q2,Q3);input clk;input[7:0] DB;output [3:0] Q1,Q2,Q3;reg [3:0] A1,A2,A3,Q1,Q2,Q3;reg [7:0] LDB;reg [2:0] step;always@(posedge clk)begincase(step)0:beginLDB[7:0]<=DB;step<=1;A1<=0;A2<=0;A3<=0;end1:beginif(LDB>=100)beginA3<=A3+1;LDB<=LDB-100;8Endelse if((LDB>=10)&&(LDB<100)) beginA2<=A2+1;LDB<=LDB-10;endelse if((LDB>=1)&&(LDB<10)) beginA1<=LDB;LDB<=0;endelsebeginstep<=2;endend2:beginQ1<=A1;Q2<=A2;Q3<=A3;step<=0;enddefault:step<=0;endcaseendendmodule波形仿真结果如下所示94.8数值部分数码管译码模块VHDL语言如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bianyi isport(op: in std_logic_vector(3 downto 0);LED1: out std_logic_vector(6 downto 0));end bianyi;architecture behv of bianyi issignal H: std_logic_vector(3 downto 0);beginprocess (op)beginH <=op;case H iswhen "0000" => LED1 <="1000000";when "0001" => LED1 <="1111001";when "0010" => LED1 <="0100100";when "0011" => LED1 <="0110000";when "0100" => LED1 <="0011001";when "0101" => LED1 <="0010010";when "0110" => LED1 <="0000010";when "0111" => LED1 <="1111000";when "1000" => LED1 <="0000000";when "1001" => LED1 <="0010000";when "1111" => LED1 <="0111111";when others => LED1 <="1111111";end case;end process;end behv;波形仿真结果如下图104.9 符号部分的数码管译码模块VHDL语言LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fuhaoxs isPORT(a:in std_logic;y: out std_logic_vector(6 downto 0)); end fuhaoxs;architecture act of fuhaoxs issignal op: std_logic;beginprocess(a)beginop<=a;case op iswhen'1' =>y<="0111111";when'0' =>y<="1111111";when others => null;end case;end process;end act;波形仿真结果如下图。
EDA课程设计八位乘法器

EDA课程设计报告实验名称:八位乘法器实验地点:@@@@班级:@@@@@学号:@@@@@姓名:@@@@目录一.引言1.1 EDA技术的概念••1.2 EDA技术的特点••1.3 EDA设计流程••1.4 VHDL介绍••二.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••三.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器实体设计••3.4 八位乘法器VHDL设计••3. 5八位乘法器仿真图形••心得体会••参考文献••一、引言1.1 EDA技术的概念EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
1.2 EDA技术的特点利用EDA技术进行电子系统的设计,具有以下几个特点:①用软件的方式设计硬件;②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;③设计过程中可用有关软件进行各种仿真;④系统可现场编程,在线升级;⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.3 EDA设计流程典型的EDA设计流程如下:1、文本/原理图编辑与修改。
首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。
完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
EDA--八位二进制乘法器

EDA课设:选题名称:八位二进制乘法电路(一)设计要求:分拍输入两个八位二进制数字,并四个数码管显示当前输入数字的十进制形式,通过使能端的控制,分拍输出这两位二进制数字的乘积并通过四个数码管显示成十进制。
(二)基本算法:8位二进制乘法采用移位相加的方法。
即用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。
直到所有的部分积都被加过一次。
按照这种算法,可以得到下图所示之框图和简单流程图。
图中Y寄存器存放被乘数M,B寄存器存放乘数N,A累加器存放部分积。
A和Y中的数据在加法器中相加后送入A中,而A和B相级联又构成了一个16bit的移位寄存器,当它工作于移位模式时,可以实现数据的右移。
由于乘数的每一位不是0就是1 ,对应的部分积不是0就是被乘数本身,所以实际作部分积相加这一步时,只要根据乘数的对应位判断:如该位为 1 ,则将累加器中的数据加上被乘数再移位;如该位为0时,就不加被乘数而直接移位。
运算时首先将累加器A 清零,并将被乘数M和乘数N分别存入寄存器Y和B,然后依据寄存器B中最右一位B0(数据N0)确定第一个部分积。
将此部分积送入A累加器以后,将A连同寄存器B右移一位,部分积的最低位被移进寄存器B的最左位,乘数的最低位N0被移出寄存器B,而乘数的次低位N1被移至寄存器B的B0位。
第二次仍然依据B0位的数据(N1)来确定第二个部分积,将部分积与累加器中的数据相加后右移一位,N1又被移出寄存器,数据N2被移到B0位置……这样,经过8次部分积相加位的操作,完成1次乘法运算,乘数N恰好被移出寄存器B,寄存器B中保存的就是运算积的低8位数据。
移位相加的次数应用一个计数器来控制,每移位一次,计数器计一个数。
当计数器计得8个数时,发出一个信号,使电路停止操作,并输出运算结果(流程图是按减法计数器设计的,也可使用加法计数器)。
EDA课设八位硬件乘法器

8位硬件乘法器一、设计目的①学习移位相加时序式乘法器的设计方法②学习层次化设计方法③学习原理图调用VHDL模块方法④熟悉EDA仿真分析方法二、设计原理(1)设计原理由加法器构成的时序逻辑方式的乘法器的原理是,通过逐项移位相加原理来实现,从被乘数的最低位开始,若为,若为1,则乘数左移与上一次和相加;若为0,左移后以全零相加,直至被乘数的最高位。
在下图中。
ARICTL是乘法运算控制电路,它的START信号的上升沿与高电平有两个功能,即16位寄存器清0和被乘数A向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。
CLK为乘法时钟信号,当被乘数加载于8位右移寄存器SEG8B后,在时钟同步下由低位至高位逐位移出,当其为1时,与门ANDARITH打开,8位乘数B在同一节拍进入8位加法器,与上一节拍锁存在16位锁存器REG26B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁存进此锁存器;而当被乘数的移出位为0时,与门全0输出。
如此往复,直至8个时钟脉冲后,乘法运算过程中止,此时REG16B的输出值即为最后乘积。
原理图如下:(2)乘法器中各模块(电路的总体框图)说明:此电路由五部分组成它们,分别是控制器,锁存器,寄存器,乘法器,加法器。
1控制器是一个乘法器的控制模块,用来接受实验系统上的连续脉冲。
2锁存器起锁存的作用,它可以锁存8位乘数。
3移位寄存器起移位的作用,便于被乘数可以逐位移出。
4乘法器功能类似一个特殊的与非门。
5加法器用于8位乘数和高8位相加。
三、选择器件与功能模块选择器件:SREG8B(移位寄存器)REG16B(16位琐存器)ARICTL(运算控制器)ANDARITH(1位乘法器)ADDER8B(8位加法器)数码管(显示结果)功能模块:1.8位右移寄存器SREG8BLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8 IS PORT ( CLK : IN STD_LOGIC; LOAD : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);EN:IN STD_LOGIC;QB : OUT STD_LOGIC );END SREG8;ARCHITECTURE behave OF SREG8 ISSIGNAL REG8 : STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS (CLK,LOAD,EN)BEGINIF EN='1' THENIF LOAD = '1' THEN REG8 <= DIN;ELSIF CLK'EVENT AND CLK = '1' THENREG8(6 DOWNTO 0) <= REG8(7 DOWNTO 1);END IF;END IF;END PROCESS;QB <= REG8(0);END behave;时序仿真图:2. 8为加法器ADDER8BLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY adder8 ISPORT(B, A : IN STD_LOGIC_VECTOR(7 DOWNTO 0); S : OUT STD_LOGIC_VECTOR(8 DOWNTO 0));END adder8;ARCHITECTURE behave OF adder8 ISBEGINS <= '0'&A + B ;END behave;时序仿真图:3. 选通与门模块:ANDARITHLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY andarith ISPORT ( ABIN : IN STD_LOGIC;DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END andarith;ARCHITECTURE behave OF andarith ISBEGINPROCESS(ABIN, DIN)BEGINFOR I IN 0 TO 7 LOOPDOUT(I) <= DIN(I) AND ABIN;END LOOP;END PROCESS;END behave;时序仿真图:4. 16为锁存寄存器REG16LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16 IS PORT ( CLK,CLR,EN : IN STD_LOGIC;D : IN STD_LOGIC_VECTOR(8 DOWNTO 0);Q : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) );END REG16;ARCHITECTURE behave OF REG16 ISSIGNAL R16S : STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK, CLR,EN)BEGINIF EN='1' THENIF CLR = '1' THEN R16S <= (OTHERS =>'0') ;ELSIF CLK'EVENT AND CLK='1' THENR16S(6 DOWNTO 0) <= R16S(7 DOWNTO 1); R16S(15 DOWNTO 7) <= D;END IF;END IF;END PROCESS;Q <= R16S;END behave;时序仿真图:5.运算控制器ARICTLLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY arictl ISPORT ( CLK:IN STD_LOGIC; START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC;ARIEND:OUT STD_LOGIC);END ENTITY arictl;ARCHITECTURE ART5 OF arictl ISSIGNAL CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS (CLK,START)BEGINIF START = '1'THEN CNT4B<="0000";ELSIF CLK'EVENT AND CLK='1' THENIF CNT4B<8 THENCNT4B<=CNT4B+1;END IF;END IF;END PROCESS;PROCESS (CLK,CNT4B,START)BEGINIF START = '0' THENIF CNT4B<8 THENCLKOUT <=CLK; ARIEND<= '0';ELSE CLKOUT<='0';ARIEND<= '1';END IF;ELSE CLKOUT<=CLK; ARIEND<= '0'; END IF;END PROCESS;END ARCHITECTURE ART5;时序仿真图:四、实验数据记录及结果实验电路图:引脚分布图:仿真结果:进行仿真时,先分别将A,B置数,之后将置入的数据锁存,摁下控制CLK的按钮进行计算,当最左边灯亮起时则为运算结束,左边灯为结果。
EDA_8位乘法器_实验报告

南华大学船山学院实验报告(2009 ~2010 学年度第二学期)课程名称EDA实验名称8位乘法器姓名学号专业计算机科学与班级01技术地点8-212 教师一、实验目的:学习和了解八位乘法的原理和过程二、设计思路:纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD 器件外接ROM 九九表的乘法器则无法构成单片系统,也不实用。
这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC 大型集成芯片来完成,性价比高,可操作性强。
其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
三、实验逻辑图:四、实验代码:1) 选通与门模块的源程序ANDARITH.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY ANDARITH IS PORT (ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR (7 DOWNTO 0) DOUT:OUT STD_LOGIC_VECTOR (7 DOWNTO 0)); END ANDARITH;ARCHITECTURE ART OF ANDARITH IS BEGINPROCESS (ABIN ,DIN) BEGINFOR I IN 0 TO 7 LOOPDOUT (I)<=DIN (I)AND ABIN; END LOOP;ARICTLCLKEND PROCESS;END ART;2) 16位锁存器的源程序REG16B.VHDLIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B IS PORT (CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR (8 DOWNTO 0)Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGIN PROCESS (CLK,CLR)BEGINIF CLR = '1' THEN R16S<= "0000000000000000";ELSIF CLK'EVENT AND CLK = '1'THENR16S(6 DOWNTO 0)<=R16S(7 DOWNTO 1);R16S(15 DOWNTO 7)<=D;END IF;END PROCESS;Q<=R16S;END ART;3) 8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT (CLK:IN STD_LOGIC; LOAD :IN STD _LOGIC; BIN:IN STD_LOGIC_VECTOR(7DOWNTO 0);QB:OUT STD_LOGIC );END SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS (CLK,LOAD)BEGINIF CLK'EVENT AND CLK= '1' THENIF LOAD = '1' THEN REG8<=DIN;ELSE REG8(6 DOWNTO0)<=REG8(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<= REG8 (0);END ART;4) 乘法运算控制器的源程序ARICTL.VHD LIBRARYUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT ( CLK:IN STD_LOGIC; START:INSTD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUTSTD_LOGIC;ARIEND:OUT STD_LOGIC );END ARICTL;ARCHITECTURE ART OF ARICTL IS SIGNAL CNT4B:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS (CLK,START)BEGINIF START = '1' THEN CNT4B<= "0000";ELSIF CLK'EVENT AND CLK = '1' THENIF CNT4B<8 THENCNT4B=CNT4B+1;END IF;END IF;END PROCESS;PROCESS (CLK,CNT4B,START)BEGINIF START = '0' THENIF CNT4B<8 THENCLKOUT <=CLK; ARIEND<= '0';ELSE CLKOUT <= '0'; ARIEND<= '1';END IF;ELSE CLKOUT <=CLK; ARIEND<= '0';END IF;END PROCESS;END ART;5) 8位乘法器的源程序MULTI8X8.VHDLIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI8X8 ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;A:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);ARIEND:OUT STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0)); END MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTLPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC; CLKOUT:OUT STD_LOGIC;RSTALL:OUT STD_LOGIC; ARIEND:OUT STD_LOGIC);END COMPONENT;COMPONENT ANDARITHPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT_STD_LOGIC_VECTOR( 7 DOWNTO 0) ); END COMPONENT;COMPONENT ADDER8B...COMPONENT SREG8B...COMPONENT REG16B...SIGNAL GNDINT:STD_LOGIC;SIGNALINTCLK:STD_LOGIC;SIGNAL RSTALL:STD_LOGIC;SIGNAL QB:STD_LOGIC;SIGNAL ANDSD:STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL DTBIN:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL DTBOUT:STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINDOUT<=DTBOUT;GNDINT<= '0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>INTCLK,RSTALL=>RSTALL,ARIEND=>ARIEND); U2:SREG8B PORT MAP(CLK=>INTCLK,LOAD=>RSTALL.DIN=>B,QB=>QB);U3:ANDARITH PORT MAP(ABIN=>QB,DIN=>A,DOUT=>ANDSD);U4:ADDER8B PORTMAP(CIN=>GNDINT,A=>DTBOUT(15 DOWNTO 8),B=>ANDSD,S=>DTBIN(7 DOWNTO 0),COUT=>DTBIN(8));U5:REG16B PORT MAP(CLK =>INTCLK,CLR=>RSTALL,D=>DTBIN,Q=>DTBOUT);END ART;五、实验结果:六、实验心得:通过本实验基本上了解了八位乘法的工作原理:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。
EDA课程设计--三位乘法器的设计

项目:三位乘法器的设计专业班级:学号:学生姓名:一、创建一个新的文本文件。
(1)启动MAX+PLUS II,选择菜单命令File│new,弹出new对话框,如图所示。
选中Text Editor file单选按钮,再单击OK按钮,打开文本编辑窗口。
(2)选择菜单命令File│save As,弹出save As对话框,如图所示。
在FileName文本框中输入文件名xxxxx,并选择好文件的保存目录。
(注意文件的保存目录字符不能包含中文字符,保存的文件名必须与设计实体名一致,并且选择.vhd)二、输入设计项目并将其设为当前项目(1)根据设计思路和预备知识,在文本编辑窗口设计三位乘法的VHDL代码并实时保存。
代码如下,Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.allEneity mu13 isPore (a.b:in std_logic_vector(2 downto 0)Y:out std_logic_vector(5 downto 0));End mu13Arch1 tecture benave of mu13 isSignal temp1:std_logic_vector(2 down to 0);Signa2 temp1:std_logic_vector(3 down to 0);Signa3 temp1:std_logic_vector(4 down to 0);BeginTemp1<=a when b(0)=’1’else “000”;Temp2<=(a&’0’)when b(1)=’1’ else “0000”;Temp3<=(a&’00’)when b(2)=’1’else “00000”;End behave;(2) 选择菜单命令File│projectset│ projiect to current File,将当前的设计文件指定为当前项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于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。