EDA大作业 简易计算器
EDA实验报告——计数器

模323计数器设计实验报告一、实验内容在QuartusII平台上,利用VHDL代码实现学号323计数器的设计,并在三位数码管显示出来。
二、实验步骤与过程分析1、建立工程。
打开Quartus II软件平台,点击File---〉new project wizard建立一个工程xuehao_323,工程所在文件夹名字为xuehao_323,设置顶层实体名称为xuehao_323,点击next设置device,按照实验箱上FPGA的芯片名更改编程芯片的设置。
分析:选择的硬件平台是Altera EPF10K20TI144_4的FPGA试验箱。
2、添加VHDL文件。
在所在工程添加文件cnt10.vhd(十进制计数器),cnt_xuehao.vhd(323进制计数器),scan_led3_vhd.vhd(三位数码管显示),exp_cnt_xuehao323_7seg.vhd(数码管显示323三位学号计数器)四个文件。
这里通过老师给出的代码进行修改且理解:cnt10.vhd如下:分析:这是十进制计数器的VHDL代码设计,因为十进制有十个状态,所以输入数据和输出状态需要四位宽,其中输入端口有aclr 清零端,clock时钟信号,cnt_en使能端,data[3..0]数据输入,sload装载使能,当aclr为高电平有效时,输出清零,从0开始,计数为时钟信号clock的上升沿到来时且使能端cnt_en 为高电平有效时自动加1(sload为低电平时),如果装载使能sload为高电平有效时,则装载数据data[3..0],输出端口有两个,分别为cout(当q[3..0]为9时输出为高电平),q[3..0]变化为0—9循环变化。
cnt_xuehao.vhd分析如下:这里是调用cnt_10十进制计数器的元件例化来设计323(学号)计数器。
输入端口aclr(高电平有效清零端),clock(时钟信号上升沿有效),cnt_en(使能端),sload(装载时能,高电平有效时装在输入的数据),datab[3..0],datas[3..0],datag[3..0](三位学号的数据输入端,每位变化相当于一个十进制计数器);输出端口qb[3..0](百位)qs[3..0](十位)qg [3..0](个位)变化为qb qs qg=000到322共323中状态,当等于322时,输出cout为高电平指示达到一个循环。
EDA论文用程序输入法设计16位二进制加法计算器

用程序输入法设计16位二进制加法计算器班级 xxxx 姓名 xxx 学号 xxxxx内容提要:计数器是数字系统中使用较多的一种时序逻辑器件。
计数器的基本功能是统计时钟脉冲的个数,即对脉冲实现计数操作。
计数器也可以作为分频、定时、脉冲节拍产生器和脉冲序列产生器使用。
计数器的种类很多,按构成计数器中的各触发器是否使用一个时钟脉冲源来分,可分为同步计数器和异步计数器;按进位体制的不同,可分为二进制计数器、十进制计数器和任意进制计数器;按计数过程中数字增减趋势的不同,可分为加法计数器、减法计数器和可逆计数器;还有可预制数和可编计数器等等。
本次课程设计将利用众多集成电路软件软件中的Quartus II软件,使用VHDL语言编程完成论文《用程序输入方法设计一个16位二进制加法计数器》,调试结果表明,所设计的计数器正确实现了计数功能。
关键词:二进制;加法计数器;VHDL语言1问题分析计数器是数字系统中使用较多的一种时序逻辑器件。
计数器的基本功能是统计时钟脉冲的个数,即对脉冲实现计数操作。
其工作原理可概述为:当输入时钟脉冲的一个上升沿(也可以是下降沿)来临时,二进制数据的低一位加1(或减1),并向高位进1(或借1)。
在没有外部约束条件时,计数器可进行与其二进制位数对应的数值的相应进制的自循环计数,如位数为3的计数器可进行8进制的自循环加法或减法计数。
可根据需要来设置计数器的位数,并通过外部约束条件来人为设定计数器的计数模数,来得到计数进制符合需要的N 进制计数器。
所谓N 进制计数器,是指一个计数器的计数过程,在经历时钟脉冲信号的个为N 之后,二进制数据又回到初始状态的计数器。
表1.1计数器的状态表图1.1计数器的状态图2 设计原理本论文所设计的16位二进制加法计数器,其中16位计数器输出Q[15..0]=0000000000000000,时钟CLK 的上升沿到来时,计数器处于预置工作状态,输出Q[15..0]= D[15..0],D[15..0]是16位并行数据输入端,COUT 是进位输入端,当UPDOWN=0(进行加法操作)且输出Q[15..0]=1111111111111111时,COUT=1表示进位输出。
(完整word版)EDA计算器设计大作业

计算器设计专业:电子信息工程设计者:本文介绍了一个简单的计算器的设计,该设计采用了现场可编程逻辑器件FPGA设计,并基于VHDL 语言实现加减乘除功能,并用十进制显示在数码管上.系统由计算部分、输入部分、选择部分、输出部分组成,计算部分为加法器、减法器、乘法器和除法器组成.使用Altera公司的QuartusII开发软件进行功能仿真并给出仿真波形,并下载到试验箱,用实验箱上的按键开关模拟输入,用数码管显示十进制计算结果.通过外部按键可以完成四位二进制数的加、减、乘、除四种运算功能,其结果简单,易于实现.关键字:VHDL,计算器,QuartusII一.实验目的 (4)二、流程图 (5)三.顶层原理图 (5)四、各个模块 (7)(1)加法器模块 (7)1、封装元件 (7)2、加法器程序 (7)3、仿真结果 (8)(2)减法器模块 (9)1、封装元件 (9)2、减法器程序 (10)3、仿真结果 (11)4、硬件运行结果 (11)(3)乘法器模块 (12)1、封装元件 (12)2、乘法器的设计思想 (13)3、乘法器程序 (14)4、仿真结果 (14)5、硬件运行结果 (15)(4)除法器模块 (16)1、封装元件 (16)2、除法器设计思想 (16)3、除法器程序 (16)4、仿真结果 (17)5、硬件运行结果 (17)(5)8位除法器 (18)1、封装元件 (18)2、8位除法器设计思想 (19)3、8位除法器程序 (19)4、仿真结果 (22)(6)数码管七段译码电路 (22)1、封装元件 (22)2、共阴极七段显示码十六进制转换表 (23)3、七段译码器程序 (23)4、仿真结果 (24)(7)选择模块 (24)1、封装元件 (24)2、程序 (25)五、管脚锁定 (26)六、小结与收获 (26)一.实验目的1、熟悉QuartusII软件的相关操作,掌握数字电路设计的基本流程.2、介绍QuartusII 的软件,掌握基本的设计思路,软件环境参数配置,仿真,管脚分配,下载等基本操作。
EDA大作业 课程设计 简易计算器

在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言Verilog HDL、EDA软件Quartus II和硬件平台Cyclone/Cyclone II FPGA进行电路系统的设计。
本次实验我完成的内容是简单计算器的设计,下面我简单的进行一下原理的阐述。
设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。
为了完成要求的效果显示,我先设计了一个简单的四则运算器,为了使其结果能清楚的看到,所以计算器模块和一个7段数码管模块连接。
实验要求,输入分别用两位数码管显示,输出用四位数码管显示,所以用一个3—8译码器和数码管连接,通过开关控制,形成动态显示。
从左向右,依次是第一位数码管显示a的高四位,第二位数码管显示a的低四位;第三位数码管显示b的高四位,第四位数码管显示b的低四位;第五位数码管到第八位数码管显示输出的结果。
通过改变时钟,使其看起来像同时显示在数码管上。
设计流程如下图,分别用两个数码管表示八位二进制数,用一个case 语句表示输入数值采用哪种运算方式,分别用00,01,10,11表示加,减,乘,除。
用3—8译码器选择从哪个数码管输出。
硬件流程图输出结果 A. B 的显示软件流程图LED 灯接线部分显示:中心控制 复位编码 数码管输出输入A 输入B 运算选择C 输出out L E D 8 L E D 7 L E D 6 L E D 5 L E D 4 L E D 3 L E D 2 L E D 1第三章程序简单计算器的程序如下:module jsq9(a,b,c,Dout,count,clk,rst);input[7:0]a,b;input clk,rst;input[1:0]c;output[6:0]Dout;output [2:0]count;reg[6:0]Dout;reg[2:0]count;reg[15:0]out;reg[6:0] LED7S1,LED7S2,LED7S3,LED7S4, LED7S5,LED7S6,LED7S7,LED7S8; DECL7S u1(.A(a[7:4]) , .LED7S(LED7S1));DECL7S u2(.A(a[3:0]) , .LED7S(LED7S2));DECL7S u3(.A(b[7:4]) , .LED7S(LED7S3));DECL7S u4(.A(b[3:0]) , .LED7S(LED7S4));DECL7S u5(.A(out[15:12]) , .LED7S(LED7S5));DECL7S u6(.A(out[11:8]) , .LED7S(LED7S6));DECL7S u7(.A(out[7:4]) , .LED7S(LED7S7));DECL7S u8(.A(out[3:0]) , .LED7S(LED7S8));reg[7:0]out1,out2;always@(a,b,c,Dout,count,clk,rst)case(c)2'b00:out=a+b;2'b01:out=a-b;2'b10:out=a*b;2'b11:beginout1=a/b;out2=a%b;out={out1,out2};enddefault:;endcasealways@(posedge clk or negedge rst)beginif(!rst)count<=3'b000;else if(count==3'b111)count<=3'b000;elsecount<=count+3'b001;endalways@(posedge clk)begincase(count)3'b000: Dout<=LED7S1;3'b001:Dout<=LED7S2;3'b010:Dout<=LED7S3;3'b011:Dout<=LED7S4;3'b100: Dout<=LED7S5;3'b101:Dout<=LED7S6;3'b110:Dout<=LED7S7;3'b111:Dout<=LED7S8;endcaseendendmodulemodule DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111; 4'b0001: LED7S <= 7'b0000110 ; 4'b0010: LED7S <= 7'b1011011; 4'b0011: LED7S <= 7'b1001111; 4'b0100: LED7S <= 7'b1100110 ; 4'b0101: LED7S <= 7'b1101101; 4'b0110: LED7S <= 7'b1111101 ; 4'b0111: LED7S <= 7'b0000111 ; 4'b1000: LED7S <= 7'b1111111 ; 4'b1001: LED7S <= 7'b1101111 ; 4'b1010: LED7S <= 7'b1110111 ; 4'b1011: LED7S <= 7'b1111100 ; 4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ; 4'b1110: LED7S <= 7'b1111001 ; 4'b1111: LED7S <= 7'b1110001 ; endcaseendendmodule第四章模块连接在本程序中,共由三个模块组成,第一个模块是一个四选一多路器其仿真图为:第二个模块是7段数码管显示程序如下module DECL7S (A, LED7S);input [3:0] A;output [6:0] LED7S;reg [6:0] LED7S;always @(A)begincase(A)4'b0000 : LED7S<=7'b0111111;4'b0001: LED7S <= 7'b0000110 ;4'b0010: LED7S <= 7'b1011011;4'b0011: LED7S <= 7'b1001111;4'b0100: LED7S <= 7'b1100110 ;4'b0101: LED7S <= 7'b1101101;4'b0110: LED7S <= 7'b1111101 ;4'b0111: LED7S <= 7'b0000111 ;4'b1000: LED7S <= 7'b1111111 ;4'b1001: LED7S <= 7'b1101111 ;4'b1010: LED7S <= 7'b1110111 ;4'b1011: LED7S <= 7'b1111100 ;4'b1100: LED7S <= 7'b0111001 ;4'b1101: LED7S <= 7'b1011110 ;4'b1110: LED7S <= 7'b1111001 ;4'b1111: LED7S <= 7'b1110001 ;endcaseendendmodule仿真图如下:把这个两个模块用一个3—8译码器进行连接,使其达到实验的要求。
eda课程设计之2位十进制四则运算器电路四则运算器.x

《电子设计自动化》课程设计题目: 2位十进制四则运算器电路院(系)信息科学与工程学院专业通信工程届别 2011级班级学号姓名任课老师彭盛亮摘要本设计是利用EDA技术实现的2位十进制四则运算器,是基于QuartusII7.2软件,利用其强大、直观、便捷和操作灵活的原理图输入设计的功能来完成本次设计的。
此设计利用QuartusII7.2中的EP2C5T144C8芯片来控制整个程序的运行,用七段数码管显示各个输入和输出,用LED灯的亮灭来显示运算模式,而软件部分则是由VHDL 语言来编写的,是通过精心的设计和合理的规划而完成的设计。
设计完成后的运算器不仅能实现数据的加减乘除运算,而且还能使数据及其计算结果在数码管上显示出来,能够实现0-99的十进制数字四则运算。
目录第一章系统设计 (1)1.1设计要求 (1)1.2系统设计方案 (1) (2) (3)第二章单元电路设计 (5)2.1 输入模块 (5)2.2加法模块 (5)2.3减法模块 (6)2.4乘法模块 (7)2.5 除法模块 (8)2.6 模式选择模块 (9)2.7输出模块 (9)第三章软件设计 (10)3.1 软件设计平台、开发工具和实现方法 (10)3.2程序的流程方框图 (10)3.3实现的功能及程序清单 (11) (11) (12) (13) (13) (14) (14) (15)第四章系统测试 (16)4.1 功能的测试方法、步骤 (16)4.2 仪器设备 (17)第五章结论 (18)参考文献 (18)附录A 电路图图纸 (18)附录B 软件程序 (22)第一章系统设计1.1设计要求输入两个2位十进制数(0~99),输出它们的四则运算(加减乘除)结果;发光二极管显示运算模式;可调用LPM_MULT及LPM_DIVIDE模块。
1.2系统设计方案通过分析可知,要完成本次课程设计可以分为三个模块来实现相应的功能,分别是输入模块、计算模块以及输出模块。
EDA大作业 简易计算器

EDA大作业简易计算器目录EDA大作业简易计算器 (1)目的 (2)任务 (2)内容及步骤 (3)实验设计及实现过程 (3)设计一个1位全加器 (3)设计四位全加器 (4)(1)设计四位加法器 (5)(2)设计可进行加减运算的四位全加器 (6)(3)实现四位全加器的原码输出 (7)设计四位乘法器 (10)(1)设计八位加法器 (10)(2)设计四位乘法器 (11)(3)将乘积结果转化为十进制数 (13)构成简易计算器 (15)下载到实验箱上验证功能 (17)小结与收获 (18)目的1、学习面向可编程器件的FPGA的简单数字系统的设计流程;2、掌握EDA软件Quartus II的原理图输入方式,以及硬件描述语言描述方式;3、熟悉实验装置——实验箱。
任务在可编程逻辑器件上实现一个简易计算器,可以进行4位二进制数的加法和乘法运算,其中被加(乘)数取值范围0~15,加(乘)数取值范围-15~15。
要求用原理图的输入方式及硬件描述语言的结构描述方式完成。
用实验箱上的按键开关模拟输入,用数码管显示十进制计算结果。
内容及步骤1、设计一个1位全加器。
运用波形仿真检查功能正确后,将其封装成1位全加器模块。
2、以1中已封装的1位全加器模块为基础设计一个4位全加器并将其封装成模块,要求:(1) 加数为正时,实现两个4位二进制数与来自低位进位的加法运算,输出显示和及高位进位。
(2) 加数为负时,实现两个4位二进制数的减法运算,输出显示差的原码和正负数标志。
3、以全加器为基础设计一个4位乘法器并封装成乘法器模块,输出显示乘积和正负数标志。
4、以2、3中生成的器件模块为基础构成一个简易计算器,实现如下图功能。
根据S的输入,分别完成Y=A+B或Y=A×B。
5、下载到实验箱上验证功能。
实验设计及实现过程设计一个1位全加器电路图如下:其中A1、B1分别为两个加数,C1为来自低位的进位,S为输出的全加和,C01为向高位的进位。
eda计数器的课程设计

eda计数器的课程设计一、课程目标知识目标:1. 让学生理解EDA(电子设计自动化)计数器的基本原理和功能;2. 使学生掌握计数器的种类、工作方式及应用场景;3. 帮助学生掌握使用EDA工具进行计数器设计的方法。
技能目标:1. 培养学生运用EDA工具设计简单计数器的能力;2. 培养学生分析计数器电路、调试和优化电路的技能;3. 提高学生团队协作和沟通表达的能力。
情感态度价值观目标:1. 培养学生对EDA技术及电子设计的兴趣和热情;2. 培养学生严谨、细致、勇于探索的科学态度;3. 增强学生的国家认同感和自豪感,认识到我国在EDA技术领域的发展。
课程性质分析:本课程为电子技术专业课程,以实践为主,理论联系实际。
结合学生特点和教学要求,注重培养学生的实际操作能力和团队合作精神。
学生特点分析:学生为高中生,具有一定的电子技术基础和动手能力,对新鲜事物充满好奇心,喜欢探索和实践。
教学要求:1. 理论与实践相结合,注重培养学生的实际操作能力;2. 激发学生的创新意识,提高学生的设计能力;3. 引导学生关注我国EDA技术领域的发展,培养学生的国家认同感。
二、教学内容1. 计数器原理:讲解计数器的基本概念、分类(同步、异步计数器)、工作原理和功能;教材章节:第二章第二节《计数器的基本概念与分类》2. EDA工具使用:介绍常见的EDA工具(如Multisim、Proteus等),学习如何使用这些工具进行计数器设计;教材章节:第三章第一节《电子设计自动化工具介绍》3. 计数器设计:分析简单计数器电路原理,学习使用EDA工具进行设计,包括电路图绘制、仿真测试等;教材章节:第三章第三节《计数器的设计与仿真》4. 电路调试与优化:学习如何对计数器电路进行调试、优化,提高电路性能;教材章节:第四章第二节《电路调试与优化方法》5. 实践操作:分组进行计数器设计实践,培养团队协作能力和实际操作技能;教材章节:第五章《实践操作》6. 总结与拓展:总结计数器设计与实践过程中的经验教训,探讨计数器在其他领域的应用;教材章节:第六章《课程总结与拓展》教学内容安排与进度:1. 计数器原理(1课时)2. EDA工具使用(1课时)3. 计数器设计(2课时)4. 电路调试与优化(1课时)5. 实践操作(3课时)6. 总结与拓展(1课时)总计8课时,确保学生在掌握理论知识的基础上,充分进行实践操作,提高综合运用能力。
基于EDA的简易计算器的设计

EDA 课程设计报告书课题名称 基于EDA 的简易计算器的设计 姓 名学 号 院 系 专 业 指导教师年 月 日※※※※※※※※※ ※※ ※※ ※※※※※※※※※※※****级学生EDA 课程设计基于EDA的简易计算器的设计1 设计目的(1)学习面向可编程器件的FPGA的简单数字系统的设计流程;(2)掌握EDA软件Quartus II的原理图输入方式,以及硬件描述语言描述方式;(3)熟悉EDA编辑软件。
2设计的主要内容和要求1、设计一个1位全加器。
运用波形仿真检查功能正确后,将其封装成1位全加器模块。
2、以1中已封装的1位全加器模块为基础设计一个4位全加器并将其封装成模块。
3、以全加器为基础设计一个4位乘法器并封装成乘法器模块,输出显示乘积和正负数标志。
4、以2、3中生成的器件模块为基础构成一个简易计算器,实现如图2.1所示。
根据S的输入,分别完成Y=A+B或Y=A×B。
要求:(1) 加数为正时,实现两个4位二进制数与来自低位进位的加法运算,输出显示和及高位进位。
(2) 加数为负时,实现两个4位二进制数的减法运算,输出显示差的原码和正负数标志。
图2.1 简易计算器框图3 整体设计方案根据设计要求和系统所具有功能,并参考相关的文献资料经行方案,先设计一个全加器,再四位全加器,四位乘法器,然后构成简易计算器。
4 硬件电路的设计4.1 设计一位全加器一位全加器电路如图4.1所示。
其中A1、B1分别为两个加数,C1为来自低位的进位,S为输出的全加和,C01为向高位的进位。
图4.1 一位全加器检查正确无误后,进行全编译,然后将其封装成一位全加器模块,如图4..2所示。
图4.2 一位全加器模块4.2 设计四位全加器要实现一个四位全加器,能进行加减法且以原码方式输出结果,分三步进行,流程如图4.3所示。
图4.3 四位全加器流程图(1)设计四位加法器用四个一位全加器的串行接法,即可得到四位串行加法器,实现四位二进制数的加法,用原理图的方式在Quartus II中构建原理图如图4.4。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA大作业简易计算器目录EDA大作业简易计算器 (1)目的 (2)任务 (2)内容及步骤 (3)实验设计及实现过程 (3)设计一个1位全加器 (3)设计四位全加器 (4)(1)设计四位加法器 (5)(2)设计可进行加减运算的四位全加器 (6)(3)实现四位全加器的原码输出 (7)设计四位乘法器 (10)(1)设计八位加法器 (10)(2)设计四位乘法器 (11)(3)将乘积结果转化为十进制数 (13)构成简易计算器 (15)下载到实验箱上验证功能 (17)小结与收获 (18)目的1、学习面向可编程器件的FPGA的简单数字系统的设计流程;2、掌握EDA软件Quartus II的原理图输入方式,以及硬件描述语言描述方式;3、熟悉实验装置——实验箱。
任务在可编程逻辑器件上实现一个简易计算器,可以进行4位二进制数的加法和乘法运算,其中被加(乘)数取值范围0~15,加(乘)数取值范围-15~15。
要求用原理图的输入方式及硬件描述语言的结构描述方式完成。
用实验箱上的按键开关模拟输入,用数码管显示十进制计算结果。
内容及步骤1、设计一个1位全加器。
运用波形仿真检查功能正确后,将其封装成1位全加器模块。
2、以1中已封装的1位全加器模块为基础设计一个4位全加器并将其封装成模块,要求:(1) 加数为正时,实现两个4位二进制数与来自低位进位的加法运算,输出显示和及高位进位。
(2) 加数为负时,实现两个4位二进制数的减法运算,输出显示差的原码和正负数标志。
3、以全加器为基础设计一个4位乘法器并封装成乘法器模块,输出显示乘积和正负数标志。
4、以2、3中生成的器件模块为基础构成一个简易计算器,实现如下图功能。
根据S的输入,分别完成Y=A+B或Y=A×B。
5、下载到实验箱上验证功能。
实验设计及实现过程设计一个1位全加器电路图如下:其中A1、B1分别为两个加数,C1为来自低位的进位,S为输出的全加和,C01为向高位的进位。
在Quartus II中构建原理图如下:进行编译后,建立波形文件,功能仿真如下图检查正确无误后,进行全编译,然后将其封装成一位全加器模块,如下图:封装后的一位全加器模块A1、B1分别为两个加数,C1为来自低位的进位,S 为输出的全加和,C01为向高位的进位。
设计四位全加器要实现一个四位全加器,能进行加减法且以原码方式输出结果,分三步进行,流程如下。
具体实现过程如下。
译码(1)设计四位加法器用四个一位全加器的串行接法,即可得到四位串行加法器,实现四位二进制数的加法,用原理图的方式在Quartus II中构建原理图如下:图中A3A2A1A0、B3B2B1B0为两个加数,CO1为来自低位的进位,S3S2S1S0为全加和,CO2为向高位的进位。
先进行半编译,然后建立波形文件,进行功能仿真,结果如下检查正确无误后,进行全编译,然后将其封装成四位加法器模块,如下图:图中A3A2A1A0、B3B2B1B0为两个加数,CO1为来自低位的进位,S3S2S1S0为全加和,CO2为向高位的进位。
(2)设计可进行加减运算的四位全加器在四位全加器电路中增设控制端k,当k=0时,对输入的两数进行加法运算,当k=1时,对输入的两数进行减法运算,并以原码形式输出差值。
思路:将控制端k与加数和低位进位进行异或运算,这样k=1时,异或后得到原加数的反码,低位进位为1,此时被加数和加数的补码相加,得到差的补码,再将补码取反加1后得到差的原码;k=0时,异或后原加数不变,此时被加数和加数相加,进行的是加法运算。
主要通过控制端k的各种异或运算实现,具体电路图如下:其中A3A2A1A0为被加数,B3B2B1B0为加数,k为控制端,当k=0时,进行加法运算,CO1为来自低位的进位,和为Y3Y2Y1Y0,CO为和向高位的进位;当k=1时,进行减法运算,即A3A2A1A0−B3B2B1B0,CO为差的符号,CO=0表示差为正数,差值为Y3Y2Y1Y0,CO=1表示差为负数,差的原码为Y3Y2Y1Y0。
通过半编译后,建立波形文件,进行功能仿真如下图:检查正确无误后,进行全编译,然后将其封装成四位全加器模块,如下图封装后的四位全加器模块其中A3A2A1A0为被加数,B3B2B1B0为加数,k 为控制端,其功能如下:当k=0时,进行加法运算,CO1为来自低位的进位,和为Y3Y2Y1Y0,CO 为和向高位的进位;当k=1时,进行减法运算,即A3A2A1A0− B3B2B1B0, CO 为差的符号,CO=0表示差为正数,差值为Y3Y2Y1Y0,CO=1表示差为负数,差的原码为Y3Y2Y1Y0。
(3)实现四位全加器的原码输出(2)中得到的四位全加器模块,其输出和是二进制原码,要想用数码管显示,需要将其转换成对应的十进制数。
该全加器模块的最大和为30,需用两个数码管显示结果,因此需要将(2)中结果Y3Y2Y1Y0表示成两个十进制的数,符号位CO 接到发光二极管上,用于指示和的正负。
具体思路及实现过程如下。
用Q3Q2Q1Q0、P3P2P1P0分别表示个位和十位的数码管的输入端,SF 为符号位,现在需要找出Q3Q2Q1Q0、P3P2P1P0与Y3Y2Y1Y0及CO 的关系。
首先只考虑将二进制数转化成十进制数,即先不考虑正负数,通过列真值表发现,当CO1Y3Y2Y1Y0表示的十进制数为0~9时,P3P2P1P0=0000,Q3Q2Q1Q0= Y3Y2Y1Y0;当CO1Y3Y2Y1Y0表示的十进制数为10~19时,P3P2P1P0=0001,Q3Q2Q1Q0=Y3Y2Y1Y0+0110;当CO1Y3Y2Y1Y0表示的十进制数为20~29时,P3P2P1P0=0010,Q3Q2Q1Q0=Y3Y2Y1Y0+1100;当CO1Y3Y2Y1Y0表示的十进制数为30~39时,P3P2P1P0=0011,Q3Q2Q1Q0=Y3Y2Y1Y0+0010。
其中CO1、SF与k及CO的关系如下表:因此,CO1= K’ CO,SF= KCO。
由上述知,可以通过一个四位加法器来实现CO1Y3Y2Y1Y0到Q3Q2Q1Q0的变换。
四位全加器的输入端为A3A2A1A0和B3B2B1B0。
将Y3Y2Y1Y0接到B3B2B1B0端,现在求A3A2A1A0与CO1Y3Y2Y1Y0的关系。
通过真值表、卡诺图化简得到:A3= (Y3⨁Y2+ Y3Y1’) CO1A2= CO1(Y3Y2Y1)’+ CO1’ Y3 (Y2+Y1)A1= CO1’ Y3 (Y2+Y1)+ CO1(Y3’Y2’+ Y3Y2 Y1Y0’)A0=0按照此关系连接好电路后,四位加法器的输出端S3S2S1S0即是Q3Q2Q1Q0。
P3P2P1P0与CO1Y3Y2Y1Y0的关系也可类似得到:P3=P2=0P1= CO1(Y3⨁Y2+ Y3(Y1’+Y0’))P0= A1.这样就得到了Q3Q2Q1Q0、P3P2P1P0、SF与Y3Y2Y1Y0及CO的关系。
连接电路图如下:半编译后,建立波形文件,进行功能仿真,波形如下检查正确无误后,进行全编译,然后将其封装成四位译码全加器模块,如下图封装后的四位译码全加器模块其中A3A2A1A0为被加数,B3B2B1B0为加数,k为控制端,CO1为来自低位的进位,k=0时,进行加法运算,k=1时,进行减法运算。
SF为符号位,SF=0表示结果为正数,SF=1表示结果为负数,将Q3Q2Q1Q0、P3P2P1P0分别连到表示个位和十位的数码管上,则数码管既可以显示结果。
如,结果为-13时,SF=1,Q3Q2Q1Q0=0011,P3P2P1P0=0001设计四位乘法器要实现两个四位二进制数的乘法运算,即是实现相乘、移位、相加的功能,为此分三步进行,过程如下。
具体实现过程如下。
(1)设计八位加法器利用2(1)中的四位加法器实现一个八位的串行加法器电路,如下图半编译后,建立波形文件,进行功能仿真结果如下检查正确无误后,进行全编译,然后将其封装成八位加法器模块,如下图封装后的八位加法器模块其中A7A6A5A4A3A2A1A0、B7B6B5B4B3B2B1B0为两个加数,CO1为来自低位的进位,S7S6S5S4S3S2S1S0为和,CO2为向高位的进位。
(2)设计四位乘法器A3A2A1A0为被乘数,B3B2B1B0为乘数,BSF 为乘数的符号位。
思路:将A3A2A1A0分别与B3、B2、B1、B0相乘,得到四个八位二进制数,将这四个八位二进制数相加即得到乘积的结果。
S7S6S5S4S3S2S1S0表示乘积,SF表示乘积的符号。
原理图如下:半编译后,建立波形文件,进行功能仿真,结果如下:检查正确无误后,进行全编译,然后将其封装成四位乘法器模块,如下图全加器的输入端,将A3A2A1A0、B3B2B1B0分别与S ’进行与运算后接到四位乘法器的输入端,最后将加法器和乘法器的对应输出做或运算,作为最终的输出。
这样,S=0时,加法器输出0,乘法器输出两个数的乘积,最终得到的是乘积,即进行了乘法运算;S=1时,乘法器输出0,加法器输出两个数的和,最终得到的是和,即进行了加法运算。
原理图如下半编译后,建立波形文件,进行功能仿真,结果如下:检查正确无误后,进行全编译,然后将其封装成简易计算器模块,如下图A3A2A1A0为被加数(被乘数),B3B2B1B0为加数(乘数),BSF为B3B2B1B0的符号,S 为控制端,将P11P10P9P8、P7P6P5P4、P3P2P1P0分别接到数码管ABC上,SF接到发光二极管上,功能如下:S=0时,ABC显示两个输入的数的乘积,二极管显示符号,发光表示负数,不发光表示正数;S=1时,ABC显示两个输入的数的和,二极管显示符号,发光表示负数,不发光表示正数。
下载到实验箱上验证功能按照上述过程最终得到了简易计算器,在实验室对简易计算器进行管脚锁定后下载到实验箱上,得到了预期的结果,验证过程进行得十分顺利。
验证功能完毕后,助教老师要求我在calculator工程下,新建一个波形文件,只进行7-15的运算(不记得当时要求的是什么运算了,以7-15为例),由于我之前已经建立过波形文件,因此在建立新的波形文件时,我用了默认的文件名Waveform1.vwf,结果仿真出来的波形却不符合要求。
后来我发现了这个错误,将新建的波形名改为calculator.vwf,结果就正确了,如下图所示:从图中看出,A3A2A1A0=0111, B3B2B1B0=1111,BSF=1, S=1,结果为SF=1,P11P10P9P8=0000,P7P6P5P4=0000, P3P2P1P0=1000,即7-15=-8。
通过这个问题的解决,我认识到在进行波形仿真时,每个工程的波形文件名称应该与其工程名称一致,这样才能得到正确的仿真结果,因此,在每个工程下每次只能存在一个波形文件,在建立新的波形文件时,应该将原来的波形文件覆盖。