ASIC系统设计实验报告八位乘法器

合集下载

组成原理实验报告-基于复杂模型机两个8位二进制数乘法的实现

组成原理实验报告-基于复杂模型机两个8位二进制数乘法的实现

计算机组成原理实验报告评语:课中检查完成的题号及题数:课后完成的题号与题数:成绩: 指导教师:实验报告一、实验目的:1. 综合应用所学的计算机组成原理知识,设计并实现较为完整的计算机;2. 深入了解指令系统并会设计简单的指令;3. 学会编写机器程序。

1. 按照书上给出的接线图和机器程序验证其正确性;2. 了解该机器程序的执行过程和原理;3. 通过编写程序实现两个8位二进制乘法运算。

三、项目要求及分析:项目要求编程实现两个8位二进制数乘法,故可沿袭前面验证试验的接线。

8位二 进制数乘法运算结果为16位,而寄存器是8位的,所以应分为高八位和低八位。

我们 组采用的是比较普遍的运算方法,即判断最低位为1或0,若为0,部分积不变;若为1, 则部分积加上乘数左移了 n 次的结果得到新的部分积。

(n 为被乘数当前1所在的位数)四、具体实现:1.画出算法流程图实验名称: 基于复杂模型机两个8位二进制数乘法的实现 日期: 2011/1/10班级:学号: 姓名:、实验内容:;NOP ;PC->AR, PC 力卩 1 ;MEM->IR, P<1> ;RS->B ;A 力卩 B->RD ;RS->B ;A 与 B->RD ;MEM->AR ;IO->RD ;MEM->AR ;NOP ;MEM->RD ;RD->MEM ;A->PC ;NOP, P<3> ;RS->IO ;MEM->RD ;A 力卩 1->RD ;RS->B ;A 左移B 位(低3位)->RD2.根据算法实现,若需修改指令系统,画出修改后的微程序流程图 实验修改了两条指令,其他与指导书上一致。

修改的指令如下: 3 .编写微程序$M 00 000001$M 01 006D43$M 03 107070$M 04 002405$M 05 04B201$M 06 002407$M 07 013201$M 08 106009$M 09 183001$M 0A 106010$M 0B 000001$M 0C 103001$M 0D 200601$M 0E 005341$M 0F 0000CB$M 10 280401$M 11 103001$M 12 06B201$M 13 002414$M 14 033201$M 15 002416 ; RS->B$M 16 01B201 ; A 或B->RD $M 17 002418 ; RS->B$M 18 02B201 ; A 右移B 位->RD$M 1B 005341 ; A->PC$M 1C 10101D ; MEM->A$M 1D 10608C ; MEM->AR, P<2> $M 1E 10601F ; MEM->AR$M 1F 101020 ; MEM->A$M 20 10608C ; MEM->AR, P<2> $M 28 101029 ; MEM->A$M 29 00282A ; RI->B$M 2A 04E22B ; A 力卩B->AR$M 2B 04928C ; A 力卩B->A,P<2>$M 2C 10102D ; MEM->A$M 2D 002C2E ; PC->B$M 2E 04E22F ; A 力卩B->AR$M 2F 04928C ; A 力卩B->A,P<2>$M 30 001604 ; RD->A$M 31 001606 ; RD->A$M 32 006D48 ; PC->AR, PC 加1 $M 33 006D4A ; PC->AR, PC 加1 $M 34 003401 ; RS->RD$M 35 000035 ; NOP$M 36 006D51 ; PC->AR, PC 加1 $M 37 001612 ; RD->A$M 38 001613 ; RD->A$M 39 001615 ; RD->A$M 3A 001617 ; RD->A$M 3B 001613 ; RD->A$M 3C 006D5C ; PC->AR, PC 加1 $M 3D 006D5E ; PC->AR, PC 加1 $M 3E 006D68 ; PC->AR, PC 加1 $M 3F 006D6C ; PC->AR, PC 加1 4.编写机器指令验证$P 00 61 ; LDI R1,28H$P 01 01 ;被乘数是83$P 02 62 ; LDI R2,56H$P 03 01 ; 乘数是33$P 04 D1 ; R1->MEM A0H 单元$P 05 A0 ;$P 04 D2 ; R2->MEM B0H 单元$P 05 B0 ;$P 06 60 ; LDI R0,00H$P 08 DO ; R0->MEM A1H 单元$P 09 A1 ;$P 0A D0 ; R0->MEM AOH 单元$P OB A0 ;$P 0C 63 ; LDI R3,FFH$P 0D FF ;$P 0E 1E ; AND R2,R3 R2 判断是不是 0$P 0F F0 ; FZ=1 ,跳到 输出结果并停机$P 10 1E ;$P 11 63 ; LDI R3,01H$P 12 00 ;$P 13 AE ; SHR R2,R3 右移 0 位$P 14 F0 ; FC 为 1,跳到 60$P 15 60 ;$P 16 D2 ; R2->MEM B0H 单元$P 17 B0 ;$P 18 63 ;$P 19 00 ;$P 1A 8D ; SHL R1,R3 左移 0 位$P 1B 8C ; SHL R0,R3左移 0 位$P 1C E0 ;$P 1D 80 ; ;输出$P 1E C2 ; MEM->R2 A0H$P 1F A0 ;$P 20 C3 ; MEM->R3 A1H$P 21 A1 ;$P 22 50 ; 停机 $P 60 D2 ; R2->MEM B0H $P 61 B0 ;$P 62 C2 ; MEM->R2 A0H $P 63 A0 ;$P 64 C3 ; MEM->R3 A1H $P 65 A1 ;$P 66 06 ; ADD R2,R1$P 67 F0 ; FC 为 1,跳到 70$P 68 74 ;$P 69 03 ; ADD R3,R0$P 6A D3 ; R3->MEM A1H 单元单元部分积低位 单元部分积高位单元单元部分积低位单元部分积高位$P 6C D2 ; R2->MEM A0H 单元$P 6E 63 ;$P 6F 00 ;$P 70 8D ; SHL R1,R3 左移0 位$P 71 8C ; SHL R0,R3 左移0 位$P 72 E0 ; JMP LOOP$P 73 80 ;$P 74 03 ; ADD R3,R0$P 75 73 ; R3+1->R3$P 76 D3 ; R3->MEM A1H 单元$P 77 A1 ;$P 78 D2 ; R2->MEM A0H 单元$P 79 A0 ;$P 7A 63 ;$P 7B 00 ;$P 7C 8D ; SHL R1,R3 左移0 位$P 7D 8C ; SHL R0,R3 左移0 位$P 7E E0 ; JMP LOOP$P 7F 80 ;$P 80 63 ; LDI R3,FFH$P 81 FF ;$P 82 C2 ; MEM->R2 B0H 单元$P 83 B0 ;$P 84 1E ; AND R2,R3 R2 判断是不是0 $P 85 F0 ; FZ=1 ,跳到停机$P 86 1E ;$P 87 63 ; LDI R3,01H$P 88 00 ;$P 89 AE ; RR R2,R3 右移一位$P 8A F0 ; FC 为1,跳到60$P 8B 60 ;$P 8C D2 ; R2->MEM B0H 单元$P 8D B0 ;$P 8E 63 ;$P 8F 00 ;$P 90 8D ; SHL R1,R3 左移0 位$P 91 BC ; SHL R0,R3 左移0 位$P 92 E0 ;$P 93 80 ;联机装入调试五、调试运行结果:①、乘数是83H,被乘数是33H, 结果最后放在R3R2上是1AH 19H:②、乘数FF,被乘数FE:0 B* R1 8* R2 I R3R0= | 貫I = ft2= P3 =| T2 12T2被乘数跟FFH进行与,判断是否为0:1 ' lSR3w|R=*~Tf—F 二结果B控制信号控制总线P匚二六、所遇问题及解决方法:开始时对机器程序不太了解,对微指令与机器指令之间的运行不太明白,后来在同组成员和其他同学的帮助与讨论下明白了它们之间的联系和运行顺序。

基于FPGA的8位硬件乘法器设计

基于FPGA的8位硬件乘法器设计

本科毕业设计基于FPGA的8位硬件乘法器设计摘要VHDL(VHSIC Hardware Description Language)是当今最流行的硬件描述语言之一,能够对最复杂的芯片和最完整的电子系统进行描述。

以硬件描述语言作为设计输入,经过简单的综合与布局,快速烧录至FPGA(Field Programmable Gate Array)上进行测试,是现代IC设计验证的技术主流。

乘法器是处理器进行科学计算和数字信号处理的基本硬件结构,是现代微处理器中的重要部件。

乘法器完成一次乘法操作的周期基本上决定了微处理器的主频。

本文基于FPGA,采用VHDL语言,结合MAX+plusⅡ这个强大的软件平台设计了8位二进制乘法器,并对其进行符号扩展,使其可以统一处理8位带符号数和无符号数。

高速乘法器设计通常分为三个关键步骤:部分积产生、部分积累加和最终结果获得。

本文对部分积产生过程采用改进Booth算法,有效减少部分积加法项;为了统一带符号和无符号数,对部分积进行符号扩展;而对部分积的累加则采取3-2压缩器和4-2压缩器进行压缩;最终结果的获得则以一个根据部分积累加结果到达时间的不同进行延迟优化的选择进位加法器将累加结果和累加进位相加而得。

关键词:乘法器改进Booth算法压缩器选择进位加法器The Circuit Design of 8-bit Hardware Multiplier Based on FPGAKe Xiuyan(College of Engineering, South China Agricultural University, Guangzhou 510642, China) Abstract: VHSIC Hardware Description Language, one of today's most popular hardware description languages, is used to describe the most complex chip and most complete electronic systems.The multiplier is not only the basic hardware structure of the processor for scientific computing and digital signal processing but also an important component of modern microprocessors. This design for 8-bit binary multiplier is based on FPGA, using VHDL language, and proved by the MAX+plusⅡsoftware platform. The multiplicand has an extended sign bit so that the multiplier can unify 8-bit signed and unsigned.High-speed multiplier design is usually divided into three key steps: partial product generation circuit, accumulator and adder. In this paper, the partial product generation process uses the modified Booth algorithm, so that the partial product addition terms can be effectively reduced. The accumulation of partial products takes 3-2 compressor and 4-2 compressor to compress. The final result is obtained with select carry adder.Key words: multiplier the modified Booth algorithm compressor select carry adder目录1 前言 (1)1.1 乘法器的研究背景和意义 (1)1.2 乘法器的研究发展状况 (1)2 总体方案确定 (2)2.1 乘法器设计方案 (2)2.2 硬件描述语言VHDL (3)2.2.1 硬件描述语言 (3)2.2.2 VHDL语言简介 (3)2.2.3 VHDL的基本结构 (4)2.2.4 VHDL的优点 (4)2.3 实验工具MAX+plusⅡ (5)2.3.1 MAX+plusⅡ简介 (5)2.3.2 MAX+plusⅡ的设计流程 (6)2.3.3 MAX+plusⅡ的特点 (6)2.4 现场可编辑门阵列(FPGA) (7)2.4.1 FPGA简介 (7)2.4.2 FPGA的基本结构 (7)2.4.3 FPGA的特点 (8)3 理论分析及设计 (9)3.1 乘法器的数据格式 (9)3.1.1 二进制的表示 (9)3.1.2 无符号数的运算 (9)3.1.3 带符号数的运算 (9)3.1.4 带符号数的符号扩展表示 (9)3.2 乘法器算法 (10)3.2.1 移位相加算法 (10)3.2.2 Booth算法 (11)3.2.3 改进型Booth算法 (12)3.3 加法器 (15)3.3.1 半加器 (15)3.3.2 全加器 (16)3.3.3 串行进位加法器 (16)3.3.4 超前进位加法器 (17)3.3.5 选择进位加法器 (18)3.4 压缩器 (19)4 测试与试验分析 (22)4.1 乘法器的总体结构 (22)4.2 乘法器各个模块的仿真 (23)4.2.1 Booth编码器 (23)4.2.2 Booth译码器 (23)4.2.3 部分积产生电路 (24)4.2.4 压缩器 (25)4.2.5 加法器 (26)4.2.6 顶层文件 (27)5 结论 (28)参考文献 (29)附录 (30)致谢 (33)毕业设计成绩评定表1 前言1.1 乘法器的研究背景和意义微电子技术的迅猛发展,计算机技术的不断进步,带动了集成电路工艺的不断增进,数字芯片的集成度不断提高。

8位乘法器的设计

8位乘法器的设计

本科生毕业论文(设计)8位乘法器的设计姓名:指导教师:院系:信息工程学院专业:计算机科学与技术提交日期: 2010/4/30目录中文摘要 (2)外文摘要 (3)1.绪论 (4)1.1概述 (4)1.2 VHDL和MAX+PIUS简介 (5)1.3 实验平台 (6)2.乘法器初步设计 (7)2.1 设计思想 (7)2.2乘法器原理 (7)2.3乘法器设计流程 (8)3. 乘法器具体设计 (9)3.1右移寄存器的设计 (9)3.2 加法器模块的设计 (10)3.2.1 4位加法器的设计 (10)3.2.2 8位加法器的设计 (11)3.3 乘1模块设计 (13)3.4锁存器模块设计 (14)4. 乘法器仿真 (17)4.1 8位加法器仿真 (17)4.2 乘1模块仿真 (17)4.3 锁存器模块仿真 (18)4.4 8位乘法器仿真 (18)结束语 (19)参考文献 (20)致谢 (21)8位乘法器的设计摘要:在微处理器芯片中,乘法器是进行数字信号处理的核心,同时也是微处理器中进行数据处理的关键部件,它已经是现代计算机必不可少的一部分。

本文主要是在于如何运用标准硬件描述语言(VHDL)完成八位乘法器,以及如何做二进制位相乘的运算过程。

该乘法器是由八位加法器构成的以时序方式设计八位乘法器,通过逐项移位相加来实现乘法功能,并以MAX+Plus II 软件工具进行模拟,仿真并予以显示。

关键字:乘法器;标准硬件描述语言(VHDL);移位相加;MAX+Plu s II8-bit multiplier designAbstract:In the microprocessor chip, the multiplier is a digital signal processing core microprocessor is also a key component of data processing, it is already an essential part of the modern computer. This article is on how to use standard hardware description language (VHDL) to complete eight multipliers, as well as how to make the process of a binary bit multiplication operation. The multiplier is composed of eight adder to timing approach in designing eight multiplier, achieved by adding the multiplication-by-shift function, and in MAX + Plus II software tools for simulation, emulation and be displayed.Keywords: multiplier; standard hardware description language (VHDL); shift sum; MAX + Plus II1.绪论1.1概述本课题的设计来源是基于标准硬件描述语言(Very High Speed Integrated Circuit Hardware Description Language,VHDL)及MAX + Plus II(Multiple Array Matrix Programmable Logic User System)软件开发工具的进行模拟仿真的8位乘法器,用于实现8位移位相加乘法器的乘法运算功能。

八位乘法器VHDL及功能模块说明

八位乘法器VHDL及功能模块说明

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、综合。

将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。

4、行为仿真和功能仿真。

利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。

8位乘法器的程序

8位乘法器的程序

8位乘法器的程序8--------- 发表时间2002-5-11-20:53:38 - 来自218.70.61.5 - 佚名的人环境:xilinx ise 4.1+modelsim,我很菜,请多指教entity mult8x8 isPort ( DIN1 : in std_logic_vector(7 downto 0);DIN2 : in std_logic_vector(7 downto 0);CLK : in std_logic;RESET : in std_logic;DONE : out std_logic;DOUT : out std_logic_vector(15 downto 0));end mult8x8;architecture Behavioral of mult8x8 issignal temp,result1,result2 : std_logic_vector(15 downto 0);signal lb,thend : std_logic;beginprocess(CLK,RESET)variable i : integer range 0 to 7;beginif CLK='1' and CLK'event thenif RESET='1' theni:=0;thend<='0';temp<="00000000"&DIN1;lb<=DIN2(0);elsetemp<=temp(14 downto 0)&'0';if i<7 then i:=i+1;lb<=DIN2(i);else i:=0;lb<='0';thend<='1';end if;end if;end if;end process;process(temp)beginif lb='1' then result1<=temp;else result1<="0000000000000000";end if;end process;process(RESET,result1)beginif RESET='1' then result2<="0000000000000000";elseresult2<=result2+result1;end if;end process;process(thend)beginif thend='1' then DOUT<=result2;DONE<='1';else DONE<='0';DOUT<="0000000000000000";end if;end process;end Behavioral;佚名的人的Email: 个人主页: <-回应|<-返回|正确程序如下:--------- 发表时间2002-5-13-15:19:13 - 来自218.17.88.139 - Dick Houlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity mult8x8 isPort ( DIN1 : in std_logic_vector(7 downto 0);DIN2 : in std_logic_vector(7 downto 0);CLK : in std_logic;RESET : in std_logic;DONE : out std_logic;DOUT : out std_logic_vector(15 downto 0));end mult8x8;architecture Behavioral of mult8x8 issignal temp,result1,result2 : std_logic_vector(16 downto 0);signal lb,thend : std_logic;beginprocess(CLK,RESET)variable i : integer range 0 to 8;beginif CLK='1' and CLK'event thenif RESET='1' theni:=0;thend<='0';temp<="000000000"&DIN1;lb<=DIN2(0);elsetemp<=temp(15 downto 0)&'0';if i<=7 thenlb<=DIN2(i);i:=i+1;elsei:=0;lb<='0';thend<='1';end if;end if;end if;end process;process(temp)beginif lb='1' thenresult1<=temp;elseresult1<="00000000000000000";end if;end process;process(CLK,RESET,result1,thend)beginif CLK'event and CLK='0' thenif RESET='1' thenresult2<="00000000000000000";elsif thend='0' thenresult2<=result2+result1;end if;end if;end process;process(thend)beginif thend='1' thenDOUT<=result2(16 downto 1);DONE<='1';elseDONE<='0';DOUT<="0000000000000000";end if;end process;end Behavioral;请仔细对比我的程序和你的不同之处,找出你的程序有哪些错误。

8位乘法器

8位乘法器

8位乘法器一:8位乘法器的源程序:module mult8( p, a, b);parameter size = 8;input [size:1] a, b;output [2* size:1] p;reg [2* size:1] p;always @( a or b)Begin:multinteger index;p = 0;for(index=1; index<=size; index=index+1)if (b[index]==1)p = p + (a<<(index));endendmodule二:8位乘法器的测试代码:`timescale 1ns/1ns`include "mult8.v"module tb_mult8;reg[8:1] ina,inb;wire[16:1] p;mult8 tb_mult8(p,ina,inb);initialbegin#10 ina={$random}%255;inb={$random}%255;#10 ina={$random}%255;inb={$random}%255;#10 ina={$random}%255;inb={$random}%255;#10 $finish;endinitial $monitor($time,,,"%d*%d=%d",ina,inb,p);endmodule三:Transcript显示结果:# Reading D:/altera/91/modelsim_ase/tcl/vsim/pref.tcl# Loading project adder# reading D:\altera\91\modelsim_ase\win32aloem/../modelsim.ini# Loading project mult# reading D:\altera\91\modelsim_ase\win32aloem/../modelsim.ini# Loading project mult# Compile of mult8.v was successful.# Compile of tb_mult8.v failed with 1 errors.# 2 compiles, 1 failed with 1 error.# Compile of tb_mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(11): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(11): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Error: (vsim-3033) E:/mult/tb_mult8.v(12): Instantiation of 'initial$monitor' failed. The design unit was not found.# Region: /tb_mult8# Searched libraries:# E:\mult\work# Error loading design# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# ** Note: $finish : E:/mult/tb_mult8.v(10)# Time: 20 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 10quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# ** Note: $finish : E:/mult/tb_mult8.v(10)# Time: 20 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 10quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'a'.# Region: /tb_mult8/tb_mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (8 or 8) does not match connection size (4) for port 'b'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 0*10= x# 20 8*12= x# 30 8*13= x# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 0# 20 232* 92= 96# 30 72* 77=168# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8# ** Warning: (vsim-3015) E:/mult/tb_mult8.v(6): [PCDPC] - Port size (16 or 16) does not match connection size (8) for port 'p'.# Region: /tb_mult8/tb_mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 0# 20 232* 92= 96# 30 72* 77=168# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12quit -sim# Compile of mult8.v was successful.# Compile of mult8.v was successful.# Compile of tb_mult8.v was successful.# 2 compiles, 0 failed with no errors.vsim work.tb_mult8# Loading work.tb_mult8# Loading work.mult8add wave sim:/tb_mult8/*run -all# 0 x* x= x# 10 128* 42= 5376# 20 232* 92=21344# 30 72* 77= 5544# ** Note: $finish : E:/mult/tb_mult8.v(12)# Time: 40 ns Iteration: 0 Instance: /tb_mult8# 1# Break in Module tb_mult8 at E:/mult/tb_mult8.v line 12四:测试波形如下图所示:。

ASIC系统设计实验报告八位乘法器

ASIC系统设计实验报告八位乘法器

八位乘法器的设计汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。

由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。

随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。

本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。

1 原理分析与方案选择乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。

本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。

图1 四位串行乘法器结构本文采用并行输入/输出方式来进行乘法器的设计。

下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。

由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。

)0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程图3 四位二进制乘法结构图从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。

4FPGA实验报告8位乘法器—徐艺萍

4FPGA实验报告8位乘法器—徐艺萍

实验四8位乘法器实验一、实验原理8位乘法器,输入为两个8位信号,输出结果为16位。

module mult8(out, a, b); //8位乘法器源代码parameter size=8;input[size-1:0] a,b; //两个操作数output[2*size-1:0] out; //结果assign out=a*b; //乘法运算符endmodule本实验采用Chipscope-Pro生成VIO/ICON核,并插入到8位乘法器设计中,在线进行观测和调试。

二、实验目的1. 熟悉ISE9.1 开发环境,掌握工程的生成方法;2. 熟悉SEED-XDTK XUPV2Pro 实验环境;3. 了解Verilog HDL语言在FPGA 中的使用;4. 通过掌握8位乘法器的Verilog HDL设计,了解数字电路的设计。

三、实验内容1. 用Verilog HDL语言设计8位乘法器,进行功能仿真验证。

2. 使用chipscope-Pro 生成VIO/ICON 核,在线观测调试。

四、实验准备1. 将USB 下载电缆与计算机及XUPV2Pro 板的J8 连接好;2. 将RS232 串口线一端与计算机连接好,另一端与板卡的J11 相连接;3. 启动计算机,当计算机启动后,将XUPV2Pro 板的电源开关SW11 打开到ON 上。

观察XUPV2Pro 板上的+2.5V,+3.3V,+1.5V 的电源指示灯是否均亮。

若有不亮的,请断开电源,检查电源。

五、实验步骤⑴创建工程及设计输入①在E:\project\目录下,新建名为mult8的新工程;器件族类型(Device Family)选择“Virtex2P”,器件型号(Device)选“XC2VP30 ff896 -7”,综合工具(Synthesis Tool)选“XST (VHDL/Verilog)”,仿真器(Simulator)选“ISE Simulator”②设计输入并保存。

移位相加8位硬件乘法器电路设计

移位相加8位硬件乘法器电路设计

南昌航空大学实验报告年月日一、实验目的1、学习移位相加8位硬件乘法器电路设计;2、进一步提高学生应用EDA技术进行项目设计的能力。

二、实验原理纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器;基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

本实验由8位加法器构成的以时序逻辑方式设计的8位乘法器,具有一定的实用价值。

其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

原理框图如图5-1所示图5-1原理框图三、实验内容移位相加8位硬件乘法器电路原理图如图5-2所示;系统由8位右移寄存器(SREG8B)、8位加法器(ADDER8)、选通与门模块(ANDARITH)和16位锁存器(REG16)组成。

START信号的上跳沿及其高电平有两个功能,即16位寄存器清零和被乘数A[7..0]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号。

CLK为乘法时钟信号。

当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。

当为1时,与门ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。

而当被乘数的移出位为0时,与门全零输出。

如此往复,直至8个时钟脉冲后,乘法运算过程中止。

此时REG16B的输出值即为最后的乘积。

此乘法器的优点是节省芯片资源,它的核心元件只是一个8位加法器,其运算速度取决于输入的时钟频率。

图5-2移位相加8位硬件乘法器电路原理图1、8位右移寄存器模块的设计:输入为CLK,LOAD和DIN,输出为QB;其流程图如图5-3所示图5-38位右移寄存器流程图VUDL语言描述为;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC;LOAD:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7DOWNTO0);QB:OUT STD_LOGIC);END SREG8B;ARCHITECTURE behav OF SREG8B ISSIGNAL REG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK,LOAD)BEGINIF LOAD='1'THEN REG8<=DIN;ELSIF CLK'EVENT AND CLK='1'THENREG8(6DOWNTO0)<=REG8(7DOWNTO1);END IF;END PROCESS;QB<=REG8(0);END behav;8位右移寄存器波形仿真图如图5-4所示;图5-48位右移寄存器波形仿真图2、8位加法寄存器模块的设计:输入为B,A,输出为S,模块的主要功能是实现两个8位数的加法运算;其流程图如图5-5所示图5-58位加法寄存器流程图VHDL语言描述为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8ISPORT(B,A:IN STD_LOGIC_VECTOR(7DOWNTO0);S:OUT STD_LOGIC_VECTOR(8DOWNTO0));END ADDER8;ARCHITECTURE behav OF ADDER8ISBEGINS<='0'&A+B;END behav;8位加法器波形仿真图如图5-6所示;图5-68位加法器波形仿真图3、选通与门模块设计:输入为ABIN和DIN,输出为DOUT流程图如图5-7所示:图5-7选通与门流程图VHDL语言描述为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7DOWNTO0);DOUT:OUT STD_LOGIC_VECTOR(7DOWNTO0)); END ANDARITH;ARCHITECTURE behav OF ANDARITH ISBEGINPROCESS(ABIN,DIN)BEGINFOR I IN0TO7LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END behav;波形仿真图为如图5-8所示:图5-8选通与门波形仿真图4、16位锁存器设计,输入为CLK,CLR和D,输出为Q流程图如图5-9所示:图5-916位锁存器流程图VHDL语言描述为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT(CLK,CLR:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(8DOWNTO0);Q:OUT STD_LOGIC_VECTOR(15DOWNTO0)); END REG16B;ARCHITECTURE behav OF REG16B ISSIGNAL R16S:STD_LOGIC_VECTOR(15DOWNTO0); BEGINPROCESS(CLK,CLR)BEGINIF CLR='1'THEN R16S<=(OTHERS=>'0');ELSIF CLK'EVENT AND CLK='1'THENR16S(6DOWNTO0)<=R16S(7DOWNTO1);R16S(15DOWNTO7)<=D;END IF;END PROCESS;Q<=R16S;END behav;波形仿真图如图5-10所示:图5-1016位锁存器波形仿真图5、移位相加8位硬件乘法器仿真波形如图5-11所示图5-118位硬件乘法器时序仿真图四、实验小结通过本次实验,学会了移位相加8位硬件乘法器电路的设计,同时学会了器内部模块的设计,进一步提高了自己的设计能力。

8位乘法器的设计

8位乘法器的设计

8位乘法器的设计1.实验目的1)学习MAX+plus II软件的基本使用方法。

2)了解VHDL程序的基本逻辑电路的综合设计。

2.实验内容设计并调试好一个8位乘法器,并用MAX+plus II实验开发系统进行系统仿真。

这里的设计思路是由8位加法器构成的以时序逻辑方式设计的8位乘法器。

乘法通过逐位相加原理来实现,从被乘数的最低为开始,若为1,则被乘数左移后与上一次和相加;若为0,左移后与全零相加,直至被乘数的最高位。

8为乘法器有乘法运算控制电路ARICTL、8位右移寄存器SREG8B、16为锁存器REG16B、选通与门ANDARITH、和8位加法器的ADDER8B逻辑构成。

3.实验条件1)开发软件:MAX+plus II。

2)实验设备:装有VISTA系统电脑一台。

4.实验设计1)系统的原理框图2)VHDL源程序--选通与门模块的源程序ANDARITH.VHDLIBRARY 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 ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;--4位二进制并行加法器的源程序ADDER4B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5: STD_LOGIC_VECTOR(4 DOWNTO 0); SIGNAL A5,B5: STD_LOGIC_VECTOR(4 DOWNTO 0); BEGINA5<='0'&A4;B5<='0'&B4;S5<=A5+B5+C4;S4<=S5(3 DOWNTO 0);CO4<=S5(4);END ARCHITECTURE ART;--8位二进制加法器的源程序ADDER8B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B ISPORT(C4: IN STD_LOGIC;A4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4: OUT STD_LOGIC);END COMPONENT ADDER4B;SIGNAL SC: STD_LOGIC;BEGINU1: ADDER4BPORT MAP(C4=>CIN,A4=>A(3 DOWNTO 0),B4=>B(3 DOWNTO 0), S4=>S(3 DOWNTO 0),CO4=>SC);U2: ADDER4BPORT MAP(C4=>SC,A4=>A(7 DOWNTO 4),B4=>B(7 DOWNTO 4), S4=>S(7 DOWNTO 4),CO4=>COUT);END ARCHITECTURE ART;--6位锁存器的源程序REG16B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (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 ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(CLK,CLR)ISBEGINIF 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 ARCHITECTURE ART;--8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B: STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK,LOAD)ISBEGINIF CLK'EVENT AND CLK='1' THENIF LOAD='1' THEN REG8B<=DIN;ELSE REG8B(6 downto 0)<=REG8B(7 DOWNTO 1);END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;--乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC;ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF 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)ISBEGINIF 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 ART;--8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;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 ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC;ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (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 COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8),B=>S5,S=>S6(7 DOWNTO 0),COUT=>S6(8));U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.实验结果及总结1)系统仿真情况输入值A=0AH、B=0CH,结果DOUT=0078H;输入值A=0CH、B=0AH,结果DOUT=0078H;输入值A=02H、B=03H,结果DOUT=0006H;仿真图如下:2)仿真分析当START输入信号为“1”,REG16B清零和被乘数A[7..0]向移位寄存器加载。

8位乘法器实验报告

8位乘法器实验报告

6.2 8位乘法器的设计1.实验目的(1)熟悉isEXPERT/MAX+plusisEXPERT/MAX+plus II/Foudation Series 软件的基本使用方法。

(2)熟悉GW48-CK EDA实验开发系统的基本使用方法。

(3)学习VHDL基本逻辑电路的综合设计。

2.实验内容设计并调试好由8位加法器构成的以时序逻辑方式设计的8位乘法器。

此乘法器通过判断被乘数的位值为1还是零,并通过乘数的左移与上一次和相加的方法,实现了8位乘法的运算,并用GW48-CK EDA实验开发系统进行硬件验证。

3.实验条件(1)开发设备:Lattice ispEXPERT。

(2)实验设备:GW48-CK EDA实验开发系统。

(3)拟用芯片:ispLSI1032E PLCC-84或EPF10K10LC84-3或XCS05/XL PLCC84以及运算控制电路和外部时钟。

4.实验设计1)系统的原理框图2)VHDL源程序(1)选通与门模块的源程序ANDARITH.VHDLIBRARY 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 ENTITY ANDARITH;ARCHITECTURE ART OF ANDARITH ISBEGINPROCESS(ABIN,DIN)ISBEGINFOR I IN 0 TO 7 LOOPDOUT(I)<=DIN(I)AND ABIN;END LOOP;END PROCESS;END ARCHITECTURE ART;(2)16位锁存器的源程序REG16B.VHD LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY REG16B ISPORT (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 ENTITY REG16B;ARCHITECTURE ART OF REG16B ISSIGNAL R16S: STD_LOGIC_VECTOR(15 DOWNTO 0); BEGINPROCESS(CLK,CLR)ISBEGINIF 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 ARCHITECTURE ART;(3)8位右移寄存器的源程序SREG8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SREG8B ISPORT(CLK:IN STD_LOGIC; LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0); QB: OUT STD_LOGIC);END ENTITY SREG8B;ARCHITECTURE ART OF SREG8B ISSIGNAL REG8B :STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(CLK, LOAD)ISBEGINIF CLK'EVENT AND CLK='1'THENIF LOAD='1'THEN REG8B<=DIN;ELSE REG8B(6 DOWNTO 0)<=REG8B(7 DOWNTO 1); END IF;END IF;END PROCESS;QB<=REG8B(0);END ARCHITECTURE ART;(4)乘法运算控制器的源程序ARICTL.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARICTL ISPORT(CLK:IN STD_LOGIC; START:IN STD_LOGIC; ARIEND:OUT STD_LOGIC;CLKOUT: OUT STD_LOGIC;RSTALL: OUT STD_LOGIC);END ENTITY ARICTL;ARCHITECTURE ART OF ARICTL ISSIGNAL CNT4B: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINRSTALL<=START;PROCESS(CLK,START)ISBEGINIF 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)ISBEGINIF 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 ART;(5)8位乘法器的源程序MULTI8X8.VHDLIBRARY IEEE;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 ENTITY MULTI8X8;ARCHITECTURE ART OF MULTI8X8 ISCOMPONENT ARICTL ISPORT(CLK:IN STD_LOGIC;START:IN STD_LOGIC;CLKOUT:OUT STD_LOGIC; RSTALL:OUT STD_LOGIC; ARIEND: OUT STD_LOGIC);END COMPONENT ARICTL;COMPONENT ANDARITH ISPORT(ABIN:IN STD_LOGIC;DIN:IN STD_LOGIC_VECTOR(7 DOWNTO 0);DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT ANDARITH;COMPONENT ADDER8B ISPORT(CIN: IN STD_LOGIC;A: IN STD_LOGIC_VECTOR(7 DOWNTO 0);B: IN STD_LOGIC_VECTOR(7 DOWNTO 0);S: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);COUT: OUT STD_LOGIC);END COMPONENT ADDER8B ;COMPONENT SREG8B ISPORT(CLK: IN STD_LOGIC;LOAD: IN STD_LOGIC;DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);QB: OUT STD_LOGIC);END COMPONENT SREG8B ;COMPONENT REG16B ISPORT (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 COMPONENT REG16B ;SIGNAL S1: STD_LOGIC;SIGNAL S2: STD_LOGIC;SIGNAL S3: STD_LOGIC;SIGNAL S4: STD_LOGIC;SIGNAL S5: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL S6: STD_LOGIC_VECTOR(8 DOWNTO 0);SIGNAL S7: STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINDOUT<=S7; S1<='0';U1:ARICTL PORT MAP(CLK=>CLK,START=>START,CLKOUT=>S2,RSTALL=>S3,ARIEND=>ARIEND);U2:SREG8B PORT MAP(CLK=>S2,LOAD=>S3,DIN=>A,QB=>S4);U3:ANDARITH PORT MAP(ABIN=>S4,DIN=>B,DOUT=>S5);U4:ADDER8B PORT MAP(CIN=>S1,A=>S7(15 DOWNTO 8)),B=>S5(7 DOWNTO 0),S=>S6(7 DOWNTO 0),COUT=>S6(8); U5:REG16B PORT MAP(CLK=>S2,CLR=>S3,D=>S6(8 DOWNTO 0),Q=>S7(7 DOWNTO 0));END ARCHITECTURE ART;5.系统仿真文件当ATRRT为高电平时,将16位寄存器清零,当START为低电平时,在CLK为1时进行乘法运算,通过8次移位和加法操作,运算进行8个CLK为1的时钟,之后得到输出结果,且ARIEND为1,乘法运算结束。

8位乘法器设计

8位乘法器设计

8位乘法器设计8位乘法器设计一、摘要纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器,基于PLD器件外接ROM九九表的乘法器则无法构成单片系统,也不实用。

这里介绍由八位加法器构成的以时序逻辑方式设计的八位乘法器,具有一定的实用价值,而且由FPGA 构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。

其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始,若为1,则乘数左移后与上一次的和相加;若为0,左移后以全零相加,直至被乘数的最高位。

此设计是由八位加法器构成的以时序逻辑方式设计的八位乘法器,它的核心器件是八加法器,所以关键是设计好八位加法器。

二、综述ARICTL是乘法运算控制电路,它的START信号上的上跳沿与高电平有2个功能,即16位寄存器清零和被乘数A[7...0]]向移位寄存器SREG8B加载;它的低电平则作为乘法使能信号,乘法时钟信号从ARICTL的CLK输入。

当被乘数被加载于8位右移寄存器SREG8B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。

当为1时,一位乘法器ANDARITH打开,8位乘数B[7..0]在同一节拍进入8位加法器,与上一次锁存在16位锁存器REG16B中的高8位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。

而当被乘数的移出位为0时,一位乘法器全零输出。

如此往复,直至8个时钟脉冲后,由ARICTL的控制,乘法运算过程自动中止,ARIEND输出高电平,乘法结束。

此时REG16B的输出即为最后的乘积。

三、方案设计与分析方案一:八位直接宽位加法器,它的速度较快,但十分耗费硬件资源,对于工业化设计是不合理的。

方案二:由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度等方面较好,综合各方面的考虑,决定采用第二种方案。

3.1程序清单1.library ieee; ----四位二进制并行加法器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b isport( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end;architecture one of add4b issignal sint,aa,bb:std_logic_vector(4 downto 0);beginaa<='0' & a;bb<='0' & b;sint<=aa+bb+cin;s<=sint(3 downto 0);cout<=sint(4);end;2.library ieee; --由两个四位二进制并行加法器级联而成的八位二进制加法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0);cout:out std_logic);end;architecture one of adder8b iscomponent add4b --对要调用的元件add4b的端口进行说明port( cin:in std_logic;a,b:in std_logic_vector(3 downto 0);s:out std_logic_vector(3 downto 0);cout:out std_logic);end component;signal carryout: std_logic;beginu1:add4b port map(cin,a(3 downto 0),b(3 downto 0),s(3 downto 0),carryout);u2:add4b port map(carryout,a(7 downto 4),b(7 downto 4),s(7 downto 4),cout);end;3.library ieee; --一位乘法器;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.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;architecture one of andarith isbeginprocess(abin,din)beginfor i in 0 to 7 loopdout(i)<=din(i) and abin;end loop;end process;end;4.library ieee; --乘法运算控制器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end;architecture one 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 then --小于8则计数,等于8则表明乘法运算已经结束cnt4b<=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;5.library ieee; --16位锁存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end; architecture one 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;6.library ieee; --8位右移寄存器use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end;architecture one of sreg8b issignal reg8:std_logic_vector(7 downto 0); beginprocess(clk,load)beginif clk'event and clk='1' thenif load='1' then reg8<=din;else reg8(6 downto 0)<=reg8(7 downto 1); end if;end if;end process;qb<=reg8(0);end;7.library ieee;--8位乘法器顶层设计use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity mult8x8 isport( clk:in std_logic;start:in std_logic;a,b:in std_logic_vector(7 downto 0); dout:out std_logic_vector(15 downto 0); ariend:out std_logic);end;architecture struc of mult8x8 is component adder8b isport( cin:in std_logic;a,b:in std_logic_vector(7 downto 0);s:out std_logic_vector(7 downto 0); cout:out std_logic);end component;component andarith isport( abin:in std_logic;din:in std_logic_vector(7 downto 0);dout:out std_logic_vector(7 downto 0)); end component; component arictl isport( clk,start:in std_logic;clkout,rstall,ariend:out std_logic);end component;component reg16b isport( clk,clr:in std_logic;d:in std_logic_vector(8 downto 0);q:out std_logic_vector(15 downto 0)); end component; component sreg8b isport( clk,load:in std_logic;din:in std_logic_vector(7 downto 0);qb:out std_logic);end component;signal gndint :std_logic;signal intclk :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,start,intclk,rstall,ariend);u2:sreg8b port map(intclk,rstall,b,qb);u3:andarith port map(qb,a,andsd);u4:adder8b port map(gndint,dtbout(15 downto 8),andsd,dtbin(7 downto 0),dtbin(8));u5:reg16b port map(intclk,rstall,dtbin,dtbout);end;3.2仿真结果(1)输入波形图(2)输出波形图3.3工作原理图cin a[7..0]b[7..0]s[7..0]coutadder8binst1abin din[7..0]dout[7..0]andarithinst2clkstart clkout rstallariend arictl inst3clk clr d[8..0]q[15..0]reg16b inst5clk loaddin[7..0]qbsreg8b inst6dout[15..0]OUTPUTVCCB[7..0]INPUT VCCA[7..0]INPUT dout5[15..0]OUTPUT二、方案综合评价与结论它由两个四位加法器组合八位加法器,其中四位加法器是四位二进制并行加法器,它的原理简单,资源利用率和进位速度方面都比较好,电路原理简单,连线很少,制作起来方便易行,总体来说还是很成功的。

八位串 并行乘法器设计

八位串 并行乘法器设计

八位串并行乘法器设计作品功能如下:1、输入方式:通过八位拨码开关输入相乘的八位二进制数,按键1和按键2控制乘法器锁存输入的八位二进制数,通过按键3来启动乘法运算。

2、LCD直接显示之前运算的结果。

3、系统时钟采用实验板上提供的50MHz时钟信号源提供时钟的测频基准时间信号。

4、设计成同步电路模式。

一、设计目的:1)熟悉EDA环境下的复杂逻辑模块的设计方法、设计过程及其注意事项;2)学习EDA软件Quartus-II的使用;3)学习硬件描述语言VHDL/Verilog HDL并进行编程;4)学习串并-行乘法器的基本原理和LCD显示的基本原理、控制流程。

二、设计要求:1、采用硬件描述语言VHDL/Verilog HDL设计八位串并行乘法器模块及LCD显示控制模块,并在Quartus-II环境下编译;2、在Quartus-II环境下编辑仿真激励波形,并模拟;3、在MAX-II实验板下载调试;4、撰写设计报告。

三、设计方案:VerilogHDL设计流程:注:1.总体方案是芯片级的2.软件仿真用来检测程序上的逻辑错误3.硬件仿真要根据需要搭成硬件电路,检查逻辑和时序上的错误设计八位串-并行乘法器分为以下三个模块:锁存(按键控制),乘法器(移位相加),LCD显示模块。

拨码开关控制输入数据,key1和key2键进行输入锁存,key1键锁存数据data1,key2键锁存数据data2,等待执行乘法运算,key3键实现乘法的开始运算,结果锁存到数据overcome。

最后,将data1,data2,overcome结果显示到LCD屏幕上。

四、设计过程:1、锁存器模块设计:(参见文件中的reg_bbit.v)module reg_bbit(clk,rst,dain,en,data_reg);input clk,rst,en;input[8:1]dain;output[8:1]data_reg;reg[8:1]data_reg=0;always@(posedge clk or negedge rst)if(!rst)data_reg=8'b 00000000;else if(!en)data_reg=dain;else data_reg=data_reg;endmodule逻辑关系表:仿真图如下:(参见文件中的reg_bbit.vwf)电路图实现:2、乘法运算模块:(参见文件中的mult_8gate.v)module mult_8gate(clk,rst,en,a,b,overcome);parameter size=8;input clk,rst,en;input[8:1]a,b;output[16:1]overcome;reg[16:1]overcome=0;reg[16:1]overcome1=0;integer i=1;always@(posedge clk or negedge rst)begin if(~rst)begin i=1;overcome1=16'b 0000000000000000;end else begin if(i==1)overcome1=16'b 0000000000000000;if(b[i]&&i=8&&!en)begin overcome1=overcome1+(a(i-1));i=i+1;end if(~b[i]&&!en&&i=8)begin overcome1=overcome1;i=i+1;end if(i=8&&en)begin i=1;end if(i 8&&!en)begin overcome1=overcome1;end if(en)begin i=1;overcome1=overcome1;end end end always@(posedge en) begin overcome=overcome1;i=1;end/*always@(negedge en)begin overcome1=0;for(i=1;i=size;i=i+1)if(b[i])overcome1=overcome1+(a(i-1));else overcome1=overcome1;end always@(posedge en)overcome=overcome1;*/endmodule仿真图如下:(参见文件中的mult_8gate.vwf)3、乘法运算和锁存器综合模块:(参见文件中的mul.v)电路实现图Verilog HDL语言编程:module mul(clk,rst,start,en1,en2,daina,dainb,overcome,a,b);input clk,rst;input en1,en2,start;output[8:1]a,b;wire[8:1]a,b;input[8:1]daina,dainb;output[16:1]overcome;reg_bbit u0(clk,rst,daina,en1,a);reg_bbit u1(clk,rst,dainb,en2,b);mult_8gate u2(clk,rst,start,a,b,overcome);endmodule仿真图如下:(参见文件中的mul.vwf)en1是key1键,en2是key2键,start是key3键。

EDA_8位乘法器_实验报告

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,左移后以全零相加,直至被乘数的最高位。

8位二进制乘法器设计报告

8位二进制乘法器设计报告

EDA课程设计报告------8位二进制乘法器设计班级:学号:姓名:目录一.八位乘法器的设计要求与设计思路••2.1 设计目的••2.2 设计要求••二.八位乘法器的综合设计••3.1 八位乘法器功能••3.2 八位乘法器设计方案••3.3 八位乘法器各功能模块VHDL描述及仿真图形••3.4 八位乘法器顶层模块VHDL设计及下载验证••心得体会••参考文献••一、八位乘法器的设计要求与设计思路1.1实验目的学习并掌握应用8位二进制乘法器的原理、设计、分析和测试方法1.2实验内容利用移位相加原理设计一个8位二进制乘法器。

1.3实验要求用VHDL编写代码,下载验证,并用8段数码管显示乘数和乘积。

二、八位乘法器的综合设计2.1 八位乘法器功能通过调节实验板,输入8位二进制的A和B,八位乘法器能实现其乘积,并在数码管上面显示出来其结果。

2.2乘法器设计方案该乘法器是有由8 位加法器构成的以时序方式设计的8 位乘法器,采用逐项移位相加的方法来实现相乘。

用乘数的各位数码,从低位开始依次与被乘数相乘,每相乘一次得到的积称为部分积,将第一次(由乘数最低位与被乘数相乘)得到的部分积右移一位并与第二次得到的部分积相加,将加得的和右移一位再与第三次得到的部分积相加,再将相加的结果右移一位与第四次得到的部分积相加。

直到所有的部分积都被加过一次。

例如:被乘数(M7M6M5M4M3M2M1M0)和乘数(N7N6N5N4N3N2N1N0)分别为11010101和10010011,其计算过程如下图(a)下面分解8 位乘法器的层次结构,分为以下4 个模块:①右移寄存器模块:这是一个8 位右移寄存器,可将乘法运算中的被乘数加载于其中,同时进行乘法运算的移位操作。

②加法器模块:这是一个8 位加法器,进行操作数的加法运算。

③1 位乘法器模块:完成8 位与1 位的乘法运算。

④锁存器模块:这是一个16 位锁存器,同时也是一个右移寄存器,在时钟信号的控制下完成输入数值的锁存与移位。

ASIC实验报告(8位CPU的设计)

ASIC实验报告(8位CPU的设计)

ASIC设计实验报告学院:电子工程学院学号:2014*******姓名:***指导老师:***2014年11月13日一、实验目的:通过对ASIC实验课的学习,应当学会以下几点:1.熟悉Linux操作系统的应用环境,基本命令行的应用,以及对vi编辑器熟练应用。

2.熟练掌握Verilog编程语言,包括基本组合逻辑电路的实现方法,基本时序逻辑电路的实现方法,怎样使用预定义的库文件,利用always块实现组合逻辑电路的方法已经着重了解assign与always 两种组合逻辑电路实现方法之间的区别,深入了解阻塞赋值与非阻塞赋值的概念以及应用的差别,有限状态机(FSM)实现复杂时序逻辑的方法,以及学会在Linux 系统环境当中应用Synopsys工具VCS进行仿真。

3.熟悉电路设计当中的层次化、结构化的设计方法。

4.熟悉CPU当中有哪些模块组成,模块之间的关系,以及其基本的工作原理。

5.学会利用汇编语言设计程序,注意代码规范性要求。

二、实验要求:按照实验指导书上的要求即:CPU各个模块的Verilog语言代码的编写、编译及仿真正确,并在规定的时间内完成。

要求对CPU进行语言级系统仿真结果正确之后,利用该实验当中采用的八个汇编关键字,编写一个能够实现某种功能的小程序。

然后对其中的控制器电路进行综合,并检查Timing 和Power,进行门级仿真。

三、实验内容:设计一个8位RISC_CPU 系统。

(RISC: Reduced Instruction Set Computer),它是一种八十年代才出现的CPU,与一般的CPU相比,不仅只是简化了指令系统,而且通过简化指令系统使计算机的结构更加简单合理,从而提高了运算速度。

从实现的方法上,它的时序控制信号部件使用了硬布线逻辑,而不是采用微程序控制方式,故产生控制序列的速度要快的多,因为省去了读取微指令的时间。

此CPU所具有的功能有:(1)取指令:当程序已在存储器中时,首先根据程序入口地址取出一条程序,为此要发出指令地址及控制信号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

八位乘法器的设计
汪明 2080130204 信号与信息处理 乘法是算术运算中经常用到的一个运算单元,所以在算法实现中会经常用到乘法。

由于乘法器具有一定的复杂性,考虑到面积等因素,很多传统的处理器中都不包含乘法器单元,乘法则是通过算法换算成加法和移位在处理器中进行实现,针对这些处理器编写程序的时候应尽量少的应用乘法运算。

随着DSP 技术的逐步发展,目前大多数高性能的处理器中都包含了乘法器运算单元,但仍有很多小型的控制型处理器不包含这一单元,所以设计面积小、速度快、性能稳定的乘法器模块仍然很有意义。

本实验的目的是选用一种设计方案设计一个八位乘法器,利用XINLINX ISE 软件进行VHDL 程序的编写,然后对程序进行仿真验证,并对所设计的乘法器进行评价。

1 原理分析与方案选择
乘法器的设计有多种方案,有模拟乘法器、数字乘法器两种类型,前者主要是利用模拟器件对模拟信号进行乘法的设计,复杂度较高,后者则是通过数字器件来实现数字信号的乘法。

本实验利用FPGA 设计数字乘法器件,根据数字信号的乘法运算准则,又有串行和并行两种设计方法,串行设计时被乘数从低位到高位串行输入,乘法结果从低位到高位串行输出,其常用的结构(四位乘法器)如下图(1)所示;并行乘法器的输入/输出采用并行的方式,通常情况下计算性能比串行的好。

图1 四位串行乘法器结构
本文采用并行输入/输出方式来进行乘法器的设计。

下面以4位二进制数的乘法为例,对二进制乘法运算的过程(图2示)进行说明。

由图2可知,如果对中间部分一行一行的处理,则乘法部分由一个个的2输入与门与二输入全加器组成,将这些结构联合在一起组成如图3所示的结构。

)
0()1()2()3()4()5()6()7(0313233302122232011121310010203001230123pro pro pro pro pro pro pro pro b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a b a a a a a b b b b ----------------------------------------+••••+••••+••••••••⨯K K K K K K K K K K K K K K K K K K K K K K K K K K K K K K 图2 四位二进制乘法过程
图3 四位二进制乘法结构图
从图3可以看出,上述结构中顶层、底层、中间层分别采用不同的结构,而且中间层的三个层结构完全相同。

在设计的时候,首先设计二位与门与二位全加器,然后构成组成上述结构的三种不同的模块,进而构造三种层的结构,用模块设计的方法完成乘法器的设计。

上图指的是4位乘法器的结构模型,根据乘法运算规则,很容易推广到八位的情况。

本实验将采用这种方法来进行八位乘法器的设计。

2 模块分析与VHDL程序的编写
本设计采用元件(component)的设计方法,将二输入与门、二输入全加器、图3中三种不同的方框结构以及三种不同的层结构设计为元件,存储在元件库中,然后在设计乘法器的过程中直接调用这些模块实现乘法的功能。

2.1 二输入与门与二输入全加器
从上面的结构图中可以看出,二输入的与门是该结构中用的最频繁的一个元件之一,二输入与门的VHDL语言非常简单,其源代码如图4示。

二输入全加器full_adder即以带进位的加法器,通过全加的准则,也很容易写出全加器的VHDL代码,代码如图5示。

设置适当的波形,对这两个模块进行仿真验证,很容易证明元件设计的正确性,由于这两个元件都很简单,故不再描述仿真结果。

在完成仿真后,将这两个元件添加进元件库my_compopnents 中,以便以后其它结构进行调用。

图4 二输入与门的VHDL代码图5 二输入全加器的VHDL代码
2.2 元件包
此次乘法器的设计采用的是component的方法,故像上面的两个元件等要添加到元件包中,所以需要一个存放元件的元件包。

在这里,我们通过设计package文件的方法将所有可能用到的元件放入元件包my_components中,其源代码如图6所示。

从图中可以看出,其包含二输入与门、二输入全加器、top_row、mid_row、low_row共5个元件。

图6 元件包my_components
2.3 顶层、中间层及底层模块
从结构图中可以看出,乘法器的结构中包含三个大的模块,即顶层结构(top_row)、中间层结构(mid_row)和底层结构(low_row)。

在上一节的元件包中,已将这三种模块的接口写进了元件包my_components。

这三种模块的结构都不一样,顶层图中主要包含的是二输入与门、中间层中则二输入与门和二输入全加器、底层则只有全加器,对这三种结构分
别进行VHDL程序的编写(注意程序中需用到二输入与门与二输入全加器,故在头文件库中应该添加语句:use work.my_components.ALL;),代码如图7、8、9示。

同样,每完成一种结构后,应进行仿真验证,由于这一部分的描述方法很固定,只要综合没有问题基本上不会出错,所以在这里,也不给出仿真所设置的波形。

经仿真验证这三种结构的设计都是正确性,可以实现预定的功能,放入元件包中后同样可以被其他的程序所引用。

图7 顶层模块的VHDL程序
图8 底层模块的VHDL程序
图9 中间层模块的VHDL程序
2.4 乘法器的顶层设计
设计好上面所有的元件后,便可以利用元件库中的这些元件来进行乘法器的设计了,按照图3所示的结构来编写乘法器的VHDL语言。

同样,由于利用到了自己设计的元件库,故在程序的library区,应添加代码:use work.my_components.ALL。

编写好的VHDL如下图10所示。

图10 乘法器的顶层VHDL设计
3 仿真实现
在上一节,完成了各元件的VHDL设计与仿真验证,并最终完成了乘法器的顶层VHDL 设计。

现设计适当的波形文件,对完成的乘法器进行仿真验证,波形文件mac_88.tbw如图11所示,以及其仿真结果则为图12。

图11 仿真波形设置图
图12 仿真结果波形图
从仿真的结果来看,第一组相乘的数据为4、7,结果因为28(111000)(括号中均为2进制),从图12中可以看出,prob的结果正确,同理可以验证144×4=576(10,01000000)、24×128=3072(1100,00000000)、152×20=3040(1011,11100000)这几组数据的仿真结果均正确,这样,我们可以证明设计的正确性。

通过综合与仿真,可以得到乘法器的封装图与顶层电路图,如图13示。

图13 乘法器的顶层电路图与封装图
4 总结
通过了解乘法器的设计方案与设计流程,比较了串行、并行输入/输出两种不同的设计方案,并最终选择并行方式来进行设计8位数字乘法器。

通过二进制乘法运算的准则,画出实现四位二进制乘法的功能结构图(图3),并最终推广至8位。

利用元件component的设计理念,对图3所示的结构进行VHDL硬件描述语言的实现。

并最终完成8位数字乘法器的设计,对设计的综合仿真表明,设计结果正确。

通过这一设计,使我掌握了VHDL语言元件设计的方法。

总的来说,有以下两点收获。

1)乘法器的设计有多种方案可供选择,从模拟乘法器到数字乘法器,不同的方案选择将对
应着不同的设计方案。

掌握了串行、并行数字乘法器的结构与流程,并通过VHDL描述语言实现了乘法器。

2)对XILINX ISE软件的使用更加熟练,掌握了元件component的设计方法,在本次设计
中,首次将所有模块设计为元件,存储在元件库my_components中。

在设计乘法器的过程中利用头文件调用语句use work.my_components.ALL来实现对元件的包含。

通过元件的设计方法,可以将经常用到的模块封装起来,存放在ISE库中,供以后所有的工程调用。

所以,作为FPGA设计的一个元件的积累,设计一个好的元件有着非常重要的意义,大量的优化的、可用的元件库可以简化FPGA的设计周期,提高设计人员的工作效率。

相关文档
最新文档