quartus II 软件做4的位乘法器设计(vhdl 语言)

合集下载

EDA在QuartusII中用原理输入法设计4位加法器

EDA在QuartusII中用原理输入法设计4位加法器

专业班级:学号:姓名:EDA 技术实验报告实验项目名称:在QuartusII中用原理输入法设计4位加法器实验日期:2012.05.14 实验成绩:实验评定标准:1)实验程序是否正确A()B()C()2)实验仿真、结果及分析是否合理A()B()C()3)实验报告是否按照规定格式A()B()C()一、实验目的.熟悉利用Quartus II的原理图输入方法设计简单组合电路,掌握层次化设计的方法,并通过一个4位全加器的设计把握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。

二、实验原理:一个4位全加器可以由4个1位全加器构成,加法器间的进位可以串行方式实现,及将低位加法器的进位输出cout与相邻的高位加法器的最低输入信号cin相接(串行进位加法器)三、实验器材QuartusII软件,ACEX1K系列EP1K30TC等。

四、实验内容(实验过程)实验内容1:按照附录四介绍的方法与流程,完成半加器和全加器的设计,包括原理图,编译,综合,适配,仿真,实验板上的硬件测试,并将此全加器电路设置成一个硬件符号入库。

A.打开Quantus2软件,选择new project wizard 新建项目。

B.在该项目下新建图形文件(block diagram/schematic file),如图调出门电路连接成半加器。

C.进行编译和仿真。

记录实验结果。

仿真前要新建波形文件,file new。

弹出的对话框选择other files选项卡面的vector waveform file。

在新建的波形文件左边空白栏点击鼠标右键,选择insert insert node or bus.在出现的对话框中直接点击node finder。

之后,在出现的对话框中选择list ,当坐标的node find栏中出现设计文件的输入输出端口后,再点击“》”加入右边“selected nodes”栏中,然后就ok。

D.把该半加器生成符号,以备下一环节的全加器使用,选择files create。

quartus_4位二进制加减法计数器

quartus_4位二进制加减法计数器

贵州大学实验报告学院:专业:班级设计原理框图从原理图中可见,需要有1bit装载位(load)、1bit清零位(clr)、方向控制位up_down和4bit数据选择位DIN[3..0]。

装载位我们采用SW0,清零位采用SW1,方向控制位为SW2。

SW3-SW6作为数据输入端,LED1-LED4显示数据的输出,LED5为溢出标志位。

实验内容编写一个带预置输入,清零输入,可加可减计数器的verilog代码或VHDL代码并仿真,编译下载验证module counter4(load,clr,c,DOUT,clk,up_down,DIN);//定义模块input load;//定义输入信号input clk;//wire load;//定义线网型input clr;//wire clr;//input up_down;//wire up_down;//input [3:0]DIN;//定义4位二进制输入信号wire [3:0]DIN;// 定义4位二进制线网型信号output c;//定义输出信号reg c;//定义寄存器类型信号output [3:0]DOUT;//wire [3:0]DOUT;reg [3:0]data_r;assign DOUT=data_r;always@(posedge clk or posedge clr or posedge load)//检测clk,clr,load的上升沿beginif(clr)//当clr=1的时候进行下面的运行程序data_r<=0;//将data_r置零else if(load) //当load=1的时候进行下面的运行程序data_r<=DIN;//将DIN的值赋给data_relse begin if(up_down)//load=0的时候进行下面的操作beginif(data_r==4'b1111)begin///当data_r==4'b1111的时候进行下面的运行程序data_r<=4'b0000;c=1;endelse begin//当data_r不等于4'b1111的时候进行下面的运行程序data_r<=data_r+1;//进行加法计数c=0;endendelsebeginif(data_r==4'b0000)begin//当data_r==4'b0000的时候进行下面的运行程序data_r<=4'b1111;c=1;endelse begin//当data_r不等于4'b1111的时候进行下面的运行程序data_r<=data_r-1;//进行减法计数c=0;endendendendendmodule//结束模块实验数据如图为波形仿真结果,当clr为1的时候,输出结果为0000;当clr为0,load为1时,输出结果为输入数据DIN的值,当up_down为1时,加法进位,进行加1运算,当data_r达到1111时,data_r变为0000,级零信号c为1;当up_down为0时,减法进位,进行减1运算,当data_r达到0000时,data_r变为1111,级零信号c为0。

quartusii编程语法

quartusii编程语法

quartusii编程语法(最新版)目录1.Quartus II 简介2.Quartus II 编程基础3.Quartus II 编程语法特点4.Quartus II 编程实践与应用正文【Quartus II 简介】Quartus II 是一款由 Altera 公司开发的 FPGA 设计软件,它提供了丰富的功能和强大的工具,帮助工程师们快速实现数字逻辑电路设计。

Quartus II 集成了硬件描述语言(HDL)编译器、调试器和仿真器,支持多种 HDL 语言,如 VHDL 和 Verilog。

【Quartus II 编程基础】Quartus II 编程主要包括以下几个步骤:1.创建工程:新建一个工程,导入所需的库文件和 HDL 源文件。

2.编写代码:使用 VHDL 或 Verilog 语言编写数字逻辑电路的描述。

3.编译:将编写的代码编译为二进制文件,以便下载到 FPGA 芯片。

4.下载:将编译好的二进制文件下载到 FPGA 芯片,进行实际运行。

5.调试:使用 Quartus II 的调试器和仿真器对运行的电路进行调试和验证。

【Quartus II 编程语法特点】Quartus II 支持多种 HDL 语言,下面以 Verilog 为例,介绍其编程语法特点:1.模块声明:使用`module`关键字定义一个模块,声明模块所需的输入输出端口和参数。

2.变量声明:使用`wire`、`reg`或`integer`等关键字声明变量,定义其数据类型和作用域。

3.逻辑描述:使用`and`、`or`、`not`等逻辑门实现数字逻辑电路。

4.循环结构:使用`always`关键字定义循环结构,实现时序逻辑电路。

5.条件语句:使用`if`、`else`和`while`等关键字实现条件判断和循环控制。

6.函数和任务:使用`function`和`task`关键字定义函数和任务,实现模块的复用和层次化设计。

【Quartus II 编程实践与应用】以一个简单的半加器电路为例,介绍 Quartus II 编程实践:1.创建工程,导入 VHDL 库文件。

1数电实验6PLD VHDL 四位串行二进制加法器 樊1

1数电实验6PLD  VHDL 四位串行二进制加法器 樊1

用Quartus II 软件原理图与VHDL 混合编程编写:樊伟敏1. 用Quartus II 软件原理图与VHDL 混合编写四位串行全加器四位串行全加器电路图如图1所示。

图1 四位串行全加器电路2. 新建原理图文件新建项目add4a ,出现如图2所示的界面。

执行【File\New ...】菜单命令,进入如图3所示的新建文件类型选择对话框。

选择Design Files 中的Block Diagram/Schematic file 项。

点击【OK 】按钮,进入如图4所示的新建原理图窗口。

图2 新建项目add4a 界面图3 新建文件类型选择对话框图4 新建原理图窗口3. 顶层原理图绘制3.1绘制图形块符号点击绘图图形块工具图标,在原理图窗口中拖动鼠标绘制出如图5所示的图形块符号。

3.2 图形块属性设置鼠标右键点击图5所示的图形块,弹出的如图6所示的快捷菜单。

选择Block Properties项,弹出模块属性对话框。

在如图7所示的General标签页中输入自定义的模块名,由于串行四位全加器是由4个一位全加器构成,所以在Name栏中输入自定义的一位全加器的名称,例如:add1a。

然后点击I/Os标签页,在该标签页中设置电路模块的输入输出端口的名称和类型,其中BIDIR为双向端口,INPUT为输入端口,OUTPUT为输出端口。

按如图8所示建立三个输入端a(加数)、b(被加数)、c0(低位进位)和两个输出端s(和)、c1(进位)。

在输入第一个名称和类型后点击【OK】,然后输入下一个名称和类型,直至全部输入以上五个端口的名称和类型后点击【OK】,完成图形块属性设置。

图5 在原理图窗口中绘制图形块符号图6 右键快捷菜单图7 在General标签页中输入自定义的模块名add1a图8 建立五个端口的名称和类型。

3.2 复制自定义的图形块符号在原理图窗口中激活自定义的图形块符号,使用右键快捷菜单中选择复制项,然后选择粘贴项,复制符号块,完成后的原理图编辑窗口的显示如图9所示。

基于VHDL4位加法器的设计

基于VHDL4位加法器的设计

基于VHDL4位加法器的设计实验三基于VHDL 4位加法器的设计⼀、实验⽬的1、进⼀步熟悉QUARTUS II软件的使⽤⽅法和VHDL输⼊的全过程。

2、进⼀步掌握实验系统的使⽤。

⼆、实验原理图 2-1 半加器原理图图 2-2 1位全加器原理图图 2-3 4 位加法器原理图4 位加法器(如图 2-3)是以 1 位全加器作为基本硬件,由 4 个 1 位全加器串⾏构成,1位全加器⼜可以由两个1位的半加器和⼀个或门连接⽽成(如图 2-2),⽽1位半加器可以由若⼲门电路组成(如图 2-1)。

三、实验内容本次实验使⽤ Altera FPGA 的开发⼯具 Quartus Ⅱ,利⽤原理图输⼊设计⽅法设计⼀个 4位加法器,取实验板上的 8 位按键的⾼ 4 位与低 4 位分别作为 4 位加数与被加数,其中 8 个 LED 取 5 位作为结果输出,LED2~LED5 作为 4 位相加之和的输出结果,LED1作为两数⾼ 4 位相加的进位 (LED 亮,表⽰低电平“0”, LED 灭,表⽰⾼电平“1”)四、实验步骤1、打开QUARTUS II软件,新建⼀个⼯程。

2、建完⼯程之后,再新建⼀个VHDL File。

新建⼀个VHDL⽂件的过程如下:1)选择QUARTUS II软件中的File->New命令,出现New对话框。

如图2-1所⽰。

图2-1 新建设计⽂件选择窗⼝2)在New对话框(图2-1)中选择Design Files页下的VHDL File,点击OK按钮,打开VHDL编辑器对话框,如图2-2所⽰。

图2-2 VHDL编辑窗⼝3、按照实验原理和⾃⼰的想法,在VHDL编辑窗⼝编写1位半加器的VHDL程序。

如图2-3所⽰。

图2-3 1位半加器VHDL程序4、编写完半加器VHDL程序后,保存,⽂件名为h_adder.vhd(注意⽂件名要与实体名保持⼀致),再将半加器⽂件设置为顶层⽂件,然后进⾏编译并仿真,对程序的错误进⾏修改。

VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计

VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计

电子设计自动化实验实验名称综合性实验二、硬件描述语言的层次化设计实验设备(1)EDA实验箱(型号 ),(2)计算机,(3)EDA软件(QuartusII)实验目的1、熟悉EDA软件(QuartusII)的硬件描述语言输入设计方法;2、掌握VHDL语言的层次化设计方法和仿真分析方法;3、了解功能仿真、时序仿真和时序参数分析的意义。

实验内容1、用VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计,包括编译、综合、仿真;**2、采用层次化设计的方法,用VHDL语言的元件例化语句写出4位十进制频率计的顶层文件,并分别给出其测频功能和时序仿真分析波形图,并加以分析;**3、用EDA实验箱进行硬件验证,并分析测量结果;建议硬件测试实验电路采用电路结构,待测信号F_IN接clock0;测频控制时钟CLK接clock2;**4、在2基础上将其扩展为8位十进制频率计,或带译码输出的4位十进制频率计。

实验报告要求根据以上实验内容写出实验报告:1、简述4位频率计模块的工作原理及其设计、编译、仿真分析过程;2、给出模块设计文件、仿真测试文件、仿真结果波形图及其分析报告;3、简述硬件验证过程和验证结果。

1、简述4位频率计模块的工作原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。

这3个信号可以由一个测频控制信号发生器产生,即TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

vhdl 四位流水线乘法器

vhdl 四位流水线乘法器

实验二四位流水线乘法器一、实验目的1.了解四位并行乘法器的原理。

2.了解四位并行乘法器的设计思想和流水线的实现方法。

3.掌握用VHDL 语言实现基本二进制运算的方法。

二、实验内容与要求通过开关和键盘输入两组4BIT的二进制数据,按照二进制加法器原理进行加和,求出和及进位,并通过LED显示灯输出显示,完成编译、综合、适配、仿真、实验箱上的硬件测试。

三、实验原理流水线结构的并行乘法器的最大有点就是速度快,尤其实在连续输入的乘法器中,可以达到近乎单周期的运算速度。

流水线乘法器是组合逻辑电路实现无符号数乘法的方法上发展而来的。

其关键是在组合逻辑电路的基础上插入寄存器。

假如有被乘数A 和乘数B,首先用A 与B 的最低位相乘得到S1,然后再把A 左移1 位与B 的第2 位相乘得到S2,再将A 左移3 位与B 的第三位相乘得到S3,依此类推,直到把B 的所有位都乘完为止,然后再把乘得的结果S1、S2、S3……相加即得到相乘的结果。

需要注意的是,具体实现乘法器是,并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。

假如A 左移n 位后与B 的第n 位相乘,如果B 的这位为‘1’,那么相乘的中间结果就是A 左移n 位后的结果,否则如果B 的这位为‘0’,那么就直接让相乘的中间结果为0 即可。

带B 的所有位相乘结束后,把所有的中间结果相加即得到A 与B 相乘的结果。

在此基础上插入寄存器即可实现流水线乘法器。

四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件PIN_AF8 DATAOUT[4] LED4PIN_AE7 DATAOUT[5] LED5PIN_AF7 DATAOUT[6] LED6PIN_AA11 DATAOUT[7] LED7PIN_AE21 BCD[0] 数码管DP4BPIN_AB20 BCD[1]PIN_AC20 BCD[2]PIN_AF20 BCD[3]PIN_AE20 BCD[4] 数码管DP5BPIN_AD19 BCD[5]PIN_AC19 BCD[6]PIN_AA17 BCD[7]PIN_AA18 BCD[8] 数码管DP6BPIN_W17 BCD[9]PIN_V17 BCD[10]PIN_AB18 BCD[11]六、仿真截图七、硬件实现八、程序代码1---clkgen.vhdlibrary IEEE;-- 1HZuse IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clkgen isport (CLK : in std_logic;CLK1HZ: out std_logic);end entity;architecture clk_arch of clkgen issignal COUNT : integer range 0 to 50000000; --50MHZ -->1hz begin -- 50M/1=50000000 PROCESS(CLK)BEGINif clk'event and clk='1' thenIF COUNT= 50000000 thenCOUNT<=0;ELSE COUNT<=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGINIF COUNT= 5000000 THEN -- 1HZCLK1HZ<='1';ELSE CLK1HZ<='0';END IF;END PROCESS;end architecture;2—BCD-- 输出控制模块,把乘法器的输出转换成BCD码在数码管上显示、-- SCKZ.VHDlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity BIN2BCD isport ( DIN: in std_logic_vector(7 downto 0); ---The input 8bit binaryBCDOUT: out std_logic_vector(11 downto 0)--输出显示, 已转换成BCD码);end entity;architecture arch of BIN2BCD issignal data2,data3,data4 :std_logic_vector(9 downto 0);-- 输出数据缓存signal hundred,ten,unit:std_logic_vector(3 downto 0);--signal bcdbuffer:std_logic_vector(11 downto 0);---2'1111_1001_11=999beginBCDOUT<= bcdbuffer;bcdbuffer(11 downto 8)<=hundred;bcdbuffer(7 downto 4)<=ten;bcdbuffer(3 downto 0)<=unit;get_hundred_value:process(data2)beginDA TA2<="00"&DIN;---get hundred valueif data2>=900 thenhundred<="1001";--9data3<=data2-900;elsif data2>=800 thenhundred<="1000";--8data3<=data2-500;elsif data2>=700 thenhundred<="0111";--7data3<=data2-700;elsif data2>=600 thenhundred<="0110";--6data3<=data2-600;elsif data2>=500 thenhundred<="0101";--5data3<=data2-500;elsif data2>=400 thenhundred<="0100";--4data3<=data2-400;elsif data2>=300 thenhundred<="0011";--3data3<=data2-300;elsif data2>=200 thenhundred<="0010";--2data3<=data2-200;elsif data2>=100 thenhundred<="0001";--1data3<=data2-100;else data3<=data2;hundred<="0000";end if;end process; ---get_thousand_valueget_tens_value:process(data3) begin---get tens placeif data3>=90 thenten<="1001";--9data4<=data3-90;elsif data3>=80 thenten<="1000";--8data4<=data3-50;elsif data3>=70 thenten<="0111";--7data4<=data3-70;elsif data3>=60 thenten<="0110";--6data4<=data3-60;elsif data3>=50 thenten<="0101";--5data4<=data3-50;elsif data3>=40 thenten<="0100";--4data4<=data3-40;elsif data3>=30 thenten<="0011";--3data4<=data3-30;elsif data3>=20 thenten<="0010";--2data4<=data3-20;elsif data3>=10 thenten<="0001";--1data4<=data3-10;else data4<=data3;ten<="0000";end if;end process; ---get_ten_valueget_unit_value:process(data4)begin--unit's orderif (data4>0) thenunit<=data4(3 downto 0);else unit<="0000";end if;end process;end arch;3 multi4b --------------------------------------------------------------------------------/ -- DESCRIPTION : Signed mulitplier:-- AIN (A) input width : 4-- BIN (B) input width : 4-- Q (data_out) output width : 8-- 并行流水乘法器--------------------------------------------------------------------------------/--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 1 0 1 0-- 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0--parallel : process all the inputs at the same time--pipeline : use several stages with registers to implement it----关键思想,插入寄存器library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity multi4b isport ( CLK: in STD_LOGIC; ---system clockAIN: in STD_LOGIC_VECTOR (3 downto 0); ---one inputBIN: in STD_LOGIC_VECTOR (3 downto 0);-- the other inputdata_out: out STD_LOGIC_VECTOR (7 downto 0)---the result ---make sure the biggest value ,i,e. 1111x1111=1110_0001 can be held in the register );end multi4b;architecture multi_arch of multi4b issignal A,B :std_logic_vector(3 downto 0); --input register---registers to hold the result of the first processing---registers added to make use of pipeline, the 1st stagesignal A_MULT_B0: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B3: STD_LOGIC_VECTOR (3 downto 0);---register to hold the result of the multipliersignal C_TEMP : STD_LOGIC_VECTOR (7 downto 0);beginPROCESS(CLK,AIN,BIN)beginif CLK'EVENT AND CLK='1' THEN-- multiplier operand inputs are registeredA<= AIN;B<= BIN;-----------------Fist stage of the multiplier------------------here we get the axb(0),axb(1),axb(2),axb(3),i.e.partial products---put them into the responding registersA_MULT_B0(0) <= A (0) and B (0);----- multi 1 , get the a(0) and b(0), & put it into the register A_MULT_B0(0)A_MULT_B0(1) <= A (1) and B (0);A_MULT_B0(2) <= A (2) and B (0);A_MULT_B0(3) <= A (3) and B (0);--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 0 0 0 0 1 0 1 0-- 0 0 0 0 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0A_MULT_B1(0) <= A (0) and B (1);A_MULT_B1(1) <= A (1) and B (1);A_MULT_B1(2) <= A (2) and B (1);A_MULT_B1(3) <= A (3) and B (1);A_MULT_B2(0) <= A (0) and B (2);A_MULT_B2(1) <= A (1) and B (2);A_MULT_B2(2) <= A (2) and B (2);A_MULT_B2(3) <= A (3) and B (2);A_MULT_B3(0) <= A (0) and B (3);A_MULT_B3(1) <= A (1) and B (3);A_MULT_B3(2) <= A (2) and B (3);A_MULT_B3(3) <= A (3) and B (3);end if;end process;--------------------Second stage of the multiplier---------------add the all the partial products ,then get the result of the multiplier C_TEMP<=( "0000" & A_MULT_B0 )+( "000"& A_MULT_B1 &'0' )+( "00" & A_MULT_B2 & "00" )+( '0'&A_MULT_B3 & "000" );--build a signal register output---输出寄存,利于实现流水data_out <= C_TEMP; --output registerend multi_arch;九、实验总结。

VHDL硬件描述语言四位加法器实验报告

VHDL硬件描述语言四位加法器实验报告

题目:硬件描述语言实验四:四位加法器姓名:***** 学号: ******地点:主楼402 时间: 3月21日一、实验目的:进一步练习VHDL语言设计工程的建立与仿真的步骤和方法、熟悉VHDL语言基本设计实体的编写方法。

二、实验环境:PC个人计算机、Windows XP操作系统、Quartus II集成开发环境软件。

三、设计要求:采用三种方式设计一个四位加法器,实体名称分别为“adder4”、“adder4_2”、和“adder_3”,四位加法器的引脚与功能如下表。

端口模式端口名数据类型说明in (输入)astd_logic_vector(3 downto 0)加数b 加数ci std_logic 低位进位out (输出)s std_logic_vector(3 downto 0) 和co std_logic 高位进位四、实验步骤:1、采用寄存器传输的描述方式:首先新建一个工程,命名为“adder4”,然后编辑代码。

注意在模块内部(构造体说明部分)需要定义三个连接线,定义语句为:signal c0,c1,c2 : std_logic代码如下:library ieee;use ieee.std_logic_1164.all;entity adder4 isport(a,b : in std_logic_vector (3 downto 0);ci : in std_logic;s : out std_logic_vector (3 downto 0);co : out std_logic);end entity;architecture rtl of adder4 issignal c0,c1,c2 : std_logic;begins(0) <= a(0) xor b(0) xor ci;c0<= (a(0) and b(0)) or (a(0) and ci) or (b(0) and ci);s(1)<= a(1) xor b(1) xor c0;c1<= (a(1) and b(1)) or (a(1) and c0) or (b(1) and c0);s(2)<= a(2) xor b(2) xor c1;c2<= (a(2) and b(2)) or (a(2) and c1) or (b(2) and c1);s(3)<= a(3) xor b(3) xor c2;co<= (a(3) and b(3)) or (a(3) and c2) or (b(3) and c2); end rtl;仿真波形图如下:仿真电路图如下:s~1c0~0c0~1c0~3c0s~3c1~0c1~1c1~3c1s~5c2~0c2~1c2~3c2s~7co~0co~1co~3co~4cicoa[3..0]b[3..0]s[3..0]由上图可知设计是正确的。

存储器、加法器以及乘法器实验

存储器、加法器以及乘法器实验

北京科技大学计算机与通信工程学院实验报告实验名称: 存储器、加法器以及乘法器学生姓名:专业:班级:学号:指导教师:实验成绩:实验地点:实验时间:年月日一、实验目的与实验要求1、实验目的(1)实验一:静态随机存储器实验①掌握静态随机存储器的基本结构。

②掌握静态随机存储器 RAM工作特性及数据的读写方法。

(2)实验二:超前进位加法器设计实验①掌握超前进位加法器的原理及其设计方法。

②熟悉 FPGA 应用设计及 QuartusII 软件的使用。

③理解使用超前进位逻辑设计ALU的方法。

(3)实验三:阵列乘法器设计实验①掌握乘法器的原理及其设计方法。

②熟悉QuartusII 软件的使用及FPGA应用设计。

2、实验要求(1)了解静态随机存储器的工作原理,利用实验箱进行验证性实验,并完成实验箱的写入、读取数据。

(2) 利用QuartusII 软件完成超前进位加法器设计,原理图设计或者程序编程实现其进位加法功能,并且下载到实验箱里完成验证。

(3)用文字描述或者画图方式给出FPGA外围电路接线图,并在QuartusII 软件中完成阵列乘法器的设计,运行观测结果。

二、实验设备(环境)及要求CM3+实验环境、QuartusⅡ8.0环境三、实验内容与步骤1、实验1(1)实验原理本实验所用的静态随机存储器(SRAM)由一片 6116 芯片(2K×8bit)构成(位于 MEM 单元),如图所示。

6116 的容量为 2KB,包含 11 根地址线,即 A10~A0,数据宽度为 8位,除电源和地线外,还有三根控制线:CS (片选线)、OE (读线)、WE (写线),其功能如表3.5 所示,在片选信号有效(CS=0,低电平有效)的前提下,当OE=0 时进行读操作,当WE =0 时进行写操作,本实验平台将CS常接地。

存储器(MEM)最终是要挂接到 CPU 上,所以还需要一个读写控制逻辑,使得 CPU能控制 MEM 的读写,实验中的读写控制逻辑如图所示,图中读信号 RD 和写信号 WR都是高电平有效。

乘法器vhdl课程设计

乘法器vhdl课程设计

乘法器vhdl课程设计一、课程目标知识目标:1. 理解乘法器的原理及其在数字信号处理中的应用。

2. 掌握VHDL语言的基本语法和结构,能够使用VHDL进行简单的程序编写。

3. 学习并掌握利用VHDL设计乘法器的方法,理解其位运算和结构设计。

技能目标:1. 能够运用所学知识,独立设计并实现一个简单的乘法器VHDL程序。

2. 培养学生利用电子设计自动化(EDA)工具进行代码编写、仿真和测试的能力。

3. 提高学生的问题分析能力,学会使用VHDL解决实际的数字电路设计问题。

情感态度价值观目标:1. 培养学生对于电子信息和数字电路设计的兴趣,激发学生创新精神和探索欲望。

2. 增强团队合作意识,通过小组讨论和协作,提高学生之间的沟通能力和协作解决问题的能力。

3. 强化学生的工程伦理观念,了解所学技术在国家经济发展和国防建设中的重要性,树立正确的价值观。

本课程针对高年级电子信息工程及相关专业学生设计,结合学生已具备的基础知识和课程性质,以实践性和应用性为导向,旨在通过具体的乘法器VHDL课程设计,将理论知识与实践技能相结合,提升学生解决实际工程问题的能力。

通过本课程的学习,学生应能够展示出上述具体的学习成果。

二、教学内容1. 乘法器原理回顾:包括乘法器的基本工作原理,不同类型的乘法器结构对比,以及乘法器在数字信号处理中的应用。

- 相关教材章节:第三章“数字电路基础”,第5节“算术逻辑单元”。

2. VHDL语言基础:VHDL的基本语法,数据类型,信号与变量,运算符,顺序与并行语句,进程,实体和架构等。

- 相关教材章节:第五章“硬件描述语言VHDL”,第1-3节。

3. 乘法器的VHDL设计方法:- 位运算乘法器设计原理与实现。

- 流水线乘法器设计原理与实现。

- 相关教材章节:第五章“硬件描述语言VHDL”,第4节“VHDL设计实例”;第六章“数字信号处理器的硬件实现”,第2节“乘法器的硬件实现”。

4. EDA工具的应用:利用EDA工具进行VHDL代码的编写、编译、仿真和测试。

VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计

VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计

电子设计自动化实验实验名称综合性实验二、硬件描述语言的层次化设计实验设备(1)EDA实验箱(型号 ),(2)计算机,(3)EDA软件(QuartusII)实验目的1、熟悉EDA软件(QuartusII)的硬件描述语言输入设计方法;2、掌握VHDL语言的层次化设计方法和仿真分析方法;3、了解功能仿真、时序仿真和时序参数分析的意义。

实验容1、用VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计,包括编译、综合、仿真;**2、采用层次化设计的方法,用VHDL语言的元件例化语句写出4位十进制频率计的顶层文件,并分别给出其测频功能和时序仿真分析波形图,并加以分析;**3、用EDA实验箱进行硬件验证,并分析测量结果;建议硬件测试实验电路采用NO.0 电路结构,待测信号F_IN接clock0;测频控制时钟CLK接clock2;**4、在2基础上将其扩展为8位十进制频率计,或带译码输出的4位十进制频率计。

实验报告要求根据以上实验容写出实验报告:1、简述4位频率计模块的工作原理及其设计、编译、仿真分析过程;2、给出模块设计文件、仿真测试文件、仿真结果波形图及其分析报告;3、简述硬件验证过程和验证结果。

1、简述4位频率计模块的工作原理根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。

这3个信号可以由一个测频控制信号发生器产生,即TESTCTL,它的设计要,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。

当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。

在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。

vhdl 四位流水线乘法器

vhdl 四位流水线乘法器

实验二四位流水线乘法器一、实验目的1.了解四位并行乘法器的原理。

2.了解四位并行乘法器的设计思想和流水线的实现方法。

3.掌握用VHDL 语言实现基本二进制运算的方法。

二、实验内容与要求通过开关和键盘输入两组4BIT的二进制数据,按照二进制加法器原理进行加和,求出和及进位,并通过LED显示灯输出显示,完成编译、综合、适配、仿真、实验箱上的硬件测试。

三、实验原理流水线结构的并行乘法器的最大有点就是速度快,尤其实在连续输入的乘法器中,可以达到近乎单周期的运算速度。

流水线乘法器是组合逻辑电路实现无符号数乘法的方法上发展而来的。

其关键是在组合逻辑电路的基础上插入寄存器。

假如有被乘数A 和乘数B,首先用A 与B 的最低位相乘得到S1,然后再把A 左移1 位与B 的第2 位相乘得到S2,再将A 左移3 位与B 的第三位相乘得到S3,依此类推,直到把B 的所有位都乘完为止,然后再把乘得的结果S1、S2、S3……相加即得到相乘的结果。

需要注意的是,具体实现乘法器是,并不是真正的去乘,而是利用简单的判断去实现,举个简单的例子。

假如A 左移n 位后与B 的第n 位相乘,如果B 的这位为‘1’,那么相乘的中间结果就是A 左移n 位后的结果,否则如果B 的这位为‘0’,那么就直接让相乘的中间结果为0 即可。

带B 的所有位相乘结束后,把所有的中间结果相加即得到A 与B 相乘的结果。

在此基础上插入寄存器即可实现流水线乘法器。

四、实验平台(1)硬件:计算机、GX-SOC/SOPC-DEV-LABCycloneII EP2C35F672C8核心板(2)软件:Quartus II软件PIN_AF8 DATAOUT[4] LED4PIN_AE7 DATAOUT[5] LED5PIN_AF7 DATAOUT[6] LED6PIN_AA11 DATAOUT[7] LED7PIN_AE21 BCD[0] 数码管DP4BPIN_AB20 BCD[1]PIN_AC20 BCD[2]PIN_AF20 BCD[3]PIN_AE20 BCD[4] 数码管DP5BPIN_AD19 BCD[5]PIN_AC19 BCD[6]PIN_AA17 BCD[7]PIN_AA18 BCD[8] 数码管DP6BPIN_W17 BCD[9]PIN_V17 BCD[10]PIN_AB18 BCD[11]六、仿真截图七、硬件实现八、程序代码1---clkgen.vhdlibrary IEEE;-- 1HZuse IEEE.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clkgen isport (CLK : in std_logic;CLK1HZ: out std_logic);end entity;architecture clk_arch of clkgen issignal COUNT : integer range 0 to 50000000; --50MHZ -->1hz begin -- 50M/1=50000000 PROCESS(CLK)BEGINif clk'event and clk='1' thenIF COUNT= 50000000 thenCOUNT<=0;ELSE COUNT<=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGINIF COUNT= 5000000 THEN -- 1HZCLK1HZ<='1';ELSE CLK1HZ<='0';END IF;END PROCESS;end architecture;2—BCD-- 输出控制模块,把乘法器的输出转换成BCD码在数码管上显示、-- SCKZ.VHDlibrary IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity BIN2BCD isport ( DIN: in std_logic_vector(7 downto 0); ---The input 8bit binaryBCDOUT: out std_logic_vector(11 downto 0)--输出显示, 已转换成BCD码);end entity;architecture arch of BIN2BCD issignal data2,data3,data4 :std_logic_vector(9 downto 0);-- 输出数据缓存signal hundred,ten,unit:std_logic_vector(3 downto 0);--signal bcdbuffer:std_logic_vector(11 downto 0);---2'1111_1001_11=999beginBCDOUT<= bcdbuffer;bcdbuffer(11 downto 8)<=hundred;bcdbuffer(7 downto 4)<=ten;bcdbuffer(3 downto 0)<=unit;get_hundred_value:process(data2)beginDA TA2<="00"&DIN;---get hundred valueif data2>=900 thenhundred<="1001";--9data3<=data2-900;elsif data2>=800 thenhundred<="1000";--8data3<=data2-500;elsif data2>=700 thenhundred<="0111";--7data3<=data2-700;elsif data2>=600 thenhundred<="0110";--6data3<=data2-600;elsif data2>=500 thenhundred<="0101";--5data3<=data2-500;elsif data2>=400 thenhundred<="0100";--4data3<=data2-400;elsif data2>=300 thenhundred<="0011";--3data3<=data2-300;elsif data2>=200 thenhundred<="0010";--2data3<=data2-200;elsif data2>=100 thenhundred<="0001";--1data3<=data2-100;else data3<=data2;hundred<="0000";end if;end process; ---get_thousand_valueget_tens_value:process(data3) begin---get tens placeif data3>=90 thenten<="1001";--9data4<=data3-90;elsif data3>=80 thenten<="1000";--8data4<=data3-50;elsif data3>=70 thenten<="0111";--7data4<=data3-70;elsif data3>=60 thenten<="0110";--6data4<=data3-60;elsif data3>=50 thenten<="0101";--5data4<=data3-50;elsif data3>=40 thenten<="0100";--4data4<=data3-40;elsif data3>=30 thenten<="0011";--3data4<=data3-30;elsif data3>=20 thenten<="0010";--2data4<=data3-20;elsif data3>=10 thenten<="0001";--1data4<=data3-10;else data4<=data3;ten<="0000";end if;end process; ---get_ten_valueget_unit_value:process(data4)begin--unit's orderif (data4>0) thenunit<=data4(3 downto 0);else unit<="0000";end if;end process;end arch;3 multi4b --------------------------------------------------------------------------------/ -- DESCRIPTION : Signed mulitplier:-- AIN (A) input width : 4-- BIN (B) input width : 4-- Q (data_out) output width : 8-- 并行流水乘法器--------------------------------------------------------------------------------/--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 1 0 1 0-- 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0--parallel : process all the inputs at the same time--pipeline : use several stages with registers to implement it----关键思想,插入寄存器library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity multi4b isport ( CLK: in STD_LOGIC; ---system clockAIN: in STD_LOGIC_VECTOR (3 downto 0); ---one inputBIN: in STD_LOGIC_VECTOR (3 downto 0);-- the other inputdata_out: out STD_LOGIC_VECTOR (7 downto 0)---the result ---make sure the biggest value ,i,e. 1111x1111=1110_0001 can be held in the register );end multi4b;architecture multi_arch of multi4b issignal A,B :std_logic_vector(3 downto 0); --input register---registers to hold the result of the first processing---registers added to make use of pipeline, the 1st stagesignal A_MULT_B0: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B1: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B2: STD_LOGIC_VECTOR (3 downto 0);signal A_MULT_B3: STD_LOGIC_VECTOR (3 downto 0);---register to hold the result of the multipliersignal C_TEMP : STD_LOGIC_VECTOR (7 downto 0);beginPROCESS(CLK,AIN,BIN)beginif CLK'EVENT AND CLK='1' THEN-- multiplier operand inputs are registeredA<= AIN;B<= BIN;-----------------Fist stage of the multiplier------------------here we get the axb(0),axb(1),axb(2),axb(3),i.e.partial products---put them into the responding registersA_MULT_B0(0) <= A (0) and B (0);----- multi 1 , get the a(0) and b(0), & put it into the register A_MULT_B0(0)A_MULT_B0(1) <= A (1) and B (0);A_MULT_B0(2) <= A (2) and B (0);A_MULT_B0(3) <= A (3) and B (0);--10 × 9 = 90-- 1 0 1 0-- 1 0 0 1 =-- --------------- 0 0 0 0 1 0 1 0-- 0 0 0 0 0 0 0 0 --partial products-- 0 0 0 0-- 1 0 1 0-- -------------------- 1 0 1 1 0 1 0A_MULT_B1(0) <= A (0) and B (1);A_MULT_B1(1) <= A (1) and B (1);A_MULT_B1(2) <= A (2) and B (1);A_MULT_B1(3) <= A (3) and B (1);A_MULT_B2(0) <= A (0) and B (2);A_MULT_B2(1) <= A (1) and B (2);A_MULT_B2(2) <= A (2) and B (2);A_MULT_B2(3) <= A (3) and B (2);A_MULT_B3(0) <= A (0) and B (3);A_MULT_B3(1) <= A (1) and B (3);A_MULT_B3(2) <= A (2) and B (3);A_MULT_B3(3) <= A (3) and B (3);end if;end process;--------------------Second stage of the multiplier---------------add the all the partial products ,then get the result of the multiplier C_TEMP<=( "0000" & A_MULT_B0 )+( "000"& A_MULT_B1 &'0' )+( "00" & A_MULT_B2 & "00" )+( '0'&A_MULT_B3 & "000" );--build a signal register output---输出寄存,利于实现流水data_out <= C_TEMP; --output registerend multi_arch;九、实验总结。

实验1 基于ROM实现4位×4位的无符号数乘法器

实验1  基于ROM实现4位×4位的无符号数乘法器

实验一基于ROM实现4位×4位的无符号数乘法器一、实验目的1.通过乘法器的设计,掌握QuartusII软件的使用方法。

2.掌握宏功能模块的设计方法。

3.初步了解可编程器件设计的全过程。

二、实验原理:利用Quartus II提供的参数化ROM构成一个4位×4位的无符号数乘法器,利用查表方法完成乘法功能。

(详细)三、试验步骤:1.打开QuartusII软件。

2.选择路径。

选择File/New Project Wizard,指定工作目录,指定工程和顶层设计文件模块名称;注意:工作目录名不能有中文。

3.添加设计文件。

将设计文件加入工程中。

单击“Next”,如果有已经建立好的Verilog或者原理图等文件可以在File name中选择路径然后添加,或者选择Add All添加所有可以添加的设计文件(.VHDL, .Verilog原理图等)。

如果没有直接点击“Next”,等建立好工程后再添加也可以,这里我们暂时不添加。

4.选择FPGA器件。

Family选择Cyclone,Available device选择EP1C12Q240C8, Package选择Any QFP, Pin Count 选择240,Speed grade选择8;点击“Next”。

5.选择外部综合器、仿真器和时序分析器。

Quartus II支持外部工具,可通过选中来指定工具的路径。

这里我们不做选择,默认使用Quartus II自带的工具。

6.结束设置。

单击“Next”,弹出“工程设置系统”窗口,上面列出了工程的相关设置情况。

最后单击“Finish”,结束工程设置。

7.建立原理图文件。

如果在建立工程时没有添加设计文件,这时可以新建文件再添加。

也可通过选择Project/Add/Remove Files In Project来添加外部文件。

8.添加文件到工程中。

点击“OK”,并选择File/Save As,选择和工程相同的文件名。

QuartusII使用入门及FPGA设计流程

QuartusII使用入门及FPGA设计流程

第3章Quartus II使用入门及FPGA设计流程Quartus II可编程逻辑开发软件是Altera公司为其FPGA/CPLD芯片设计推出的专用开发工具,是Altera公司最新一代功能更强的EDA开发软件,可完成从设计输入,综合适配,仿真到下载的整个设计过程。

Quartus II提供了一个完整的多平台开发环境,它包含FPGA和CPLD整个设计阶段的解决方案。

Quartus II集成环境包括以下内容:系统级设计,嵌入式软件开发,可编程逻辑器件设计、综合、布局和布线,验证和仿真。

Quartus II也可以直接调用Synplify Pro、ModelSim等第三方EDA 工具来完成设计任务的综合与仿真。

Quartus II与MATLAB和DSP Builder结合可以进行基于FPGA的DSP系统开发,方便快捷。

Quartus II还内嵌SOPC Builder,可实现SOPC系统的开发。

Quartus II 9.0主界面如图3.1示。

图 3.1 Quartus II 9.0界面3.1 Quartus II 基本设计流程Quartus II 设计的主要流程包括创建工程、设计输入、分析综合、编译、仿真验证、编程下载等,其一般流程如图 3.2所示。

下面以硬件描述语言输入法设计计数器为例,说明Quartus II 的设计流程。

3.1.1 创建工程使用Quartus II 设计电路被称作工程。

Quartus II 每次只进行一个工程,并将该工程的全部信息保存在同一个文件夹中。

开始一项新的电路设计,首先要创建一个文件夹,用以保存该工程的所有文件。

之后便可通过Quartus II 的文本编辑器编辑Verilog 源文件并存盘。

3.1.2 设计输入Quartus II 中包含原理图输入和硬件描述语言输入两种方法。

(1)原理图输入原理图输入的优点是,设计者不必具有诸如编译技术、硬件描述语言等新知识就能迅速入门,完成较大规模的电路系统的设计,且具有直观,易于理解的特点,适合于初学者使用。

4位乘法器设计

4位乘法器设计
U1:and4aport map(a=>op2,en=>op1(3),r=>sa);
U2:ls283 port map(o1=>sb(4 downto 1),o2=>sa,res=>result(7 downto 3));
U3:and4aport map(a=>op2,en=>op1(2),r=>sc);
signal sf:std_logic_vector(3 downto 0);
signal sg:std_logic_vector(3 downto 0);
--signal tmpl:std_logic;
begin
sg<=('0'&sf(3 downto 1));
--tmpl<=op1(1);
u0:and4aport map(a=>op2,en=>op1(1),r=>se);
(3)在芯片引脚设计时,每个脚多对应的时钟脉冲不一样,要看清要求。
(4)了解并行乘法器的设计原理,在给输入引脚输出引脚时钟脉冲时,要符合时钟脉冲的要求。
成绩:指导教师签名:
result(1)<=sd(0);
result(2)<=sb(0);
--result(7 downto 0)<='00000000'
end count;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity and4ais
signal sb:std_logic_vector(4 downto 0);

4位二进制计数器实验

4位二进制计数器实验

计算机组成原理实验报告院系:专业:班级:学号:姓名:指导老师:2014年11月20日实验一 4位二进制计数器实验一、实验环境1. Windows 2000 或 Windows XP2. QuartusII9.1 sp2、DE2-115计算机组成原理教学实验系统一台,排线若干。

二、实验目的1、熟悉VHDL 语言的编写。

2、验证计数器的计数功能。

三、实验要求本实验要求设计一个4位二进制计数器。

要求在时钟脉冲的作用下,完成计数功能,能在输出端看到0-9,A-F 的数据显示。

(其次要求下载到实验版实现显示)四、实验原理计数器是一种用来实现计数功能的时序部件,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。

计数器由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS 触发器、T 触发器、D 触发器及JK 触发器等。

计数器在数字系统中应用广泛,如在电子计算机的控制器中对指令地址进行计数,以便顺序取出下一条指令,在运算器中作乘法、除法运算时记下加法、减法次数,又如在数字仪器中对脉冲的计数等等。

计数器按计数进制不同,可分为二进制计数器、十进制计数器、其他进制计数器和可变进制计数器,若按计数单元中各触发器所接收计数脉冲和翻转顺序或计数功能来划分,则有异步计数器和同步计数器两大类,以及加法计数器、减法计数器、加/减计数器等,如按预置和清除方式来分,则有并行预置、直接预置、异步清除和同步清除等差别,按权码来分,则有“8421”码,“5421”码、余“3”码等计数器,按集成度来分,有单、双位计数器等等,其最基本的分类如下:计数器的种类⎪⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎪⎨⎧⎪⎩⎪⎨⎧⎪⎩⎪⎨⎧⎩⎨⎧进制计数器十进制计数器二进制计数器进制可逆计数器减法计数器加法计数器功能异步计数器同步计数器结构N 、、、321下面对同步二进制加法计数器做一些介绍。

EDA大作业_Quartus II_简易计算器_实验报告

EDA大作业_Quartus II_简易计算器_实验报告

实验报告——简易计算器目录:一、实验目的 (1)二、实验任务 (1)三、电路设计及仿真 (2)1. 结构设计图示如下: (2)2. 设计描述 (2)3. 一位全加器: (2)4. 四位全加器: (2)5. 补码器 (3)6. 四位加减器 (4)7. 八位全加器 (5)8. 乘法器 (5)9. 整体电路: (6)四、实验总结 (7)1. 实验收获: (8)2. 实验中出现的问题及解决: (8)一、实验目的1. 学习面向可编程器件(FPGA)的简单数字系统的设计流程。

2. 熟练掌握EDA设计软件Quartus II的原理图输入方式和层次化设计模式。

3. 熟悉实验装置——实验箱。

二、实验任务1. 设计1位全加器,并将其封装成1位全加器模块,仿真验证运算结果;2. 设计4位加/减运算器。

用封装好的1位全加器模块组成成4位加/减运算器。

仿真验证运算结果;3. 以全加器为基础设计一个4位乘法器并封装成乘法器模块,输出显示乘积和正负数标志。

仿真验证运算结果;4. 使用已生成的器件模块为基础设计一个简易计算器,根据控制端的状态,完成加、减、乘法运算,用十进制显示运算结果;用发光二极管显示负数标志。

仿真验证运算结果;即实现如下设计:三、电路设计及仿真1.结构设计图示如下:2.设计描述①利用门电路组合成1位全加器,封装;②调用1位全加器组合4位全加器和4位补码全加器(实现补码和相加),分别封装;③利用门电路实现补码器,封装;(可改进——使用4位全加器实现,见下);④调用4位补码全加器和补码器实现4位加减器;⑤调用4位全加器实现8位全加器,封装;⑥调用8位全加器实现乘法器;⑦译码(二进制码——BCD码);⑧组合4位加减器和乘法器成简易计算器;3.一位全加器:①利用门电路组合而成4位全加器;电路图如下:②将其封装成1位全加器模块。

4.四位全加器:①利用1位全加器模块搭建4位补码全加器(实现补码后相加),电路如下:② 将其封装成4位补码全加器模块。

quartusII软件做4的位乘法器设计(vhdl语言)

quartusII软件做4的位乘法器设计(vhdl语言)

quartusII软件做4的位乘法器设计(vhdl语⾔)⽤quartus II 软件设计4位乘法器1. 并⾏乘法的算法:下⾯根据乘法例题来分析这种算法,题中M4,M3,M2,M1是被乘数,⽤M表⽰。

N4,N3,N2,N1是乘数,⽤N表⽰2.乘法模块Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity and4a isPort(a:in std_logic_vector(3 downto 0);en:in std_logic;r:out std_logic_vector(3 downto 0));End and4a;Architecture behave of and4a isBeginProcess(en,a(3 downto 0))Beginr<=a;Elser<="0000";End if;End process;End behave;3.加法模块Library ieee;Use ieee.std_logic_1164.all;Entity ls283 isPort (o1,o2:in std_logic_vector(3 downto 0); res:out std_logic_vector(4 downto 0));Architecture behave of ls283 isBeginProcess(o1,o2)Beginres<=('0'&o1)+('0'&o2);End process;End behave;4.主程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity mul4p isPort (op1,op2:in std_logic_vector(3 downto 0);result:out std_logic_vector(7 downto 0));End mul4p;Architecture count of mul4p iscomponent and4a port (a:in std_logic_vector(3 downto 0); en:in std_logic;r:out std_logic_vector(3 downto 0)); End component; Component ls283 port (o1,o2:in std_logic_vector(3 downto 0); res:out std_logic_vector(4 downto 0)); End component; Signal sa:std_logic_vector(3 downto 0);Signal sb:std_logic_vector(4 downto 0);Signal sc:std_logic_vector(3 downto 0);Signal sd:std_logic_vector(4 downto 0);Signal se:std_logic_vector(3 downto 0);Signal sf:std_logic_vector(3 downto 0);Signal sg:std_logic_vector(3 downto 0);--signal tmp1:std_logic;Beginsg<=('0'&sf (3 downto 1));--tmp1<=op1(1);u0:and4a port map(a=>op2,en=>op1(1),r=>se);U1:and4a port map(a=>op2,en=>op1(3),r=>sa);U2:ls283 port map(o1=>sb(4 downto 1),o2=>sa,res=>result(7 downto 3)); U3:and4a port map(a=>op2,en=>op1(2),r=>sc);U4:ls283 port map(o1=>sc,o2=>sd(4 downto 1),res=>sb);u5:ls283 port map(o1=>sg,o2=>se,res=>sd);u6:and4a port map(a=>op2,en=>op1(0),r=>sf);result(0)<=sf(0);result(1)<=sd(0);result(2)<=sb(0);--result(7 downto 0)<="00000000";End count;5.仿真波形图6.引脚分配图7.硬件下载编程与硬件实现在实现硬件测试时,选择8个按键作为4个数据的输⼊信号,⽤8个LED灯作为运算结果数据输出指⽰,每4个数作为⼀个⼆进制数值,通过LED灯的亮灭来显⽰乘法的运算结果。

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

用quartus II 软件设计4位乘法器
1. 并行乘法的算法:
下面根据乘法例题来分析这种算法,题中M4,M3,M2,M1是被乘数,用M表示。

N4,N3,N2,N1是乘数,用N表示
2.乘法模块
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity and4a is
Port(a:in std_logic_vector(3 downto 0);
en:in std_logic;
r:out std_logic_vector(3 downto 0));
End and4a;
Architecture behave of and4a is
Begin
Process(en,a(3 downto 0))
Begin
If (en='1') then
r<=a;
Else
r<="0000";
End if;
End process;
End behave;
3.加法模块
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity ls283 is
Port (o1,o2:in std_logic_vector(3 downto 0);
res:out std_logic_vector(4 downto 0)); End ls283;
Architecture behave of ls283 is
Begin
Process(o1,o2)
Begin
res<=('0'&o1)+('0'&o2);
End process;
End behave;
4.主程序
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity mul4p is
Port (op1,op2:in std_logic_vector(3 downto 0);
result:out std_logic_vector(7 downto 0));
End mul4p;
Architecture count of mul4p is
component and4a port (a:in std_logic_vector(3 downto 0);
en:in std_logic;
r:out std_logic_vector(3 downto 0)); End component;
Component ls283 port (o1,o2:in std_logic_vector(3 downto 0);
res:out std_logic_vector(4 downto 0)); End component;
Signal sa:std_logic_vector(3 downto 0);
Signal sb:std_logic_vector(4 downto 0);
Signal sc:std_logic_vector(3 downto 0);
Signal sd:std_logic_vector(4 downto 0);
Signal se:std_logic_vector(3 downto 0);
Signal sf:std_logic_vector(3 downto 0);
Signal sg:std_logic_vector(3 downto 0);
--signal tmp1:std_logic;
Begin
sg<=('0'&sf (3 downto 1));
--tmp1<=op1(1);
u0:and4a port map(a=>op2,en=>op1(1),r=>se);
U1:and4a port map(a=>op2,en=>op1(3),r=>sa);
U2:ls283 port map(o1=>sb(4 downto 1),o2=>sa,res=>result(7 downto 3));
U3:and4a port map(a=>op2,en=>op1(2),r=>sc);
U4:ls283 port map(o1=>sc,o2=>sd(4 downto 1),res=>sb);
u5:ls283 port map(o1=>sg,o2=>se,res=>sd);
u6:and4a port map(a=>op2,en=>op1(0),r=>sf);
result(0)<=sf(0);
result(1)<=sd(0);
result(2)<=sb(0);
--result(7 downto 0)<="00000000";
End count;
5.仿真波形图
6.引脚分配图
7.硬件下载编程与硬件实现
在实现硬件测试时,选择8个按键作为4个数据的输入信号,用8个LED灯作为运算结果数据输出指示,每4个数作为一个二进制数值,通过LED灯的亮灭来显示乘法的运算结果。

加油哦!开心每一天!(*^__^*) ……。

相关文档
最新文档