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。
数电EDA大作业一报告
将3个CP1串行级联,并将第一个的进位输入端接符号位。
实现功能:求补码
5.简易3-1选择器(3_1selector):
输入:选择端S2S1S0,数位I2I1I0输出:Y
约束条件:
实现功能:选通一个输入端。
6.简易2-4译码器(2_4decoder):
实现功能:通过拨码开关或者接入两列方波序列让加数和结果分别显示在数码管上。
二、设计思路
1.注意到两个带符号位的四位二进制数时,需要先把二进制数的补数相加再取补数,所以做三个补码器和一个全加器组合,进而完成运算器。
2.对于带符号位的三位二进制数,可以扩展成四位,即把M, N扩展成A3A2A1A0形式,其中,A3为符号位,A2补0,A1A0与原M、N的最后两位相同。
2.全加器和运算器的设计基本没有遇到设计上的问题,因为电子技术实验三组合电路有设计过类似电路。
3.设计分频器时,遇到的问题是在quartus ii中不能直接添加时钟,最后查看FPGA使用说明才知道用晶振产生时钟信号。
4.分频器接入电路后出现错位重影的问题,分析是竞争冒险的问题,所以继续分频,直到能准确显示为止(31.25Hz)。
8.同步十进制加法器(SDAC):
实现功能:产生占空比为1/10的方波。
9.降200k分频器(FD200k):
用5个SDAC串联,最后接上一个T触发器,并使T为1或T与CLK相接。
实现功能:将频率降低200k,如将50MHz降为250Hz。
10.扫描显示电路(show):
用2-4译码器、3-1选择器、运算器、7447译码器等组合成扫描显示电路。
A模块:
分别输出31.25Hz和5Hz的时钟信号。
EDA计数器实验
计数器一、实验目的1、设计一个带使能输入、进位输出及同步清0的增1十进制计数器2、设计一个带计数使能、同步清0、同步加载的4位计数器3、设计一个带使能、同步清0控制和进位输出的增14位二进制计数器,计数结果由一位7段码管显示。
4、设计一个带使能和同步清0控制的增1减18位二进制计数器,计数结果由7段数码管显示。
二、实验内容1、带使能、同步清0控制和进位输出的增14位二进制计数器VHDL源代码library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter2 isPort ( clk : in STD_LOGIC;clr : in STD_LOGIC;en : in STD_LOGIC;co : out STD_LOGIC;y : out STD_LOGIC_VECTOR (6 downto 0));end counter2;architecture Behavioral of counter2 issignal cnt:STD_LOGIC_VECTOR(3 downto 0);signal led:STD_LOGIC_VECTOR(6 downto 0);beginprocess(clk)beginif(clk'event and clk='1')thenif clr='1' thencnt<=(others=>'0');elsif en='1' thenif cnt="1111" thencnt<="0000";elsecnt<=cnt+'1';end if;end if;end if;end process;co<='1' when cnt="1111" else '0';y<=not led;with cnt selectled<="1111001"when"0001","0100100"when"0010","0110000"when"0011","0011001"when"0100","0010010"when"0101","0000010"when"0110","1111000"when"0111","0000000"when"1000","0010000"when"1001","0001000"when"1010","0000011"when"1011","1000110"when"1100","0100001"when"1101","0000110"when"1110","0001110"when"1111","1000000"when others;end Behavioral;激励文件源代码LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;USE ieee.numeric_std.ALL;ENTITY counter_2_tbw_vhd ISEND counter_2_tbw_vhd;ARCHITECTURE behavior OF counter_2_tbw_vhd IS-- Component Declaration for the Unit Under Test (UUT) COMPONENT counter2PORT(clk : IN std_logic;clr : IN std_logic;en : IN std_logic;co : OUT std_logic;y : OUT std_logic_vector(6 downto 0));END COMPONENT;--InputsSIGNAL clk : std_logic := '0';SIGNAL clr : std_logic := '0';SIGNAL en : std_logic := '0';--OutputsSIGNAL co : std_logic;SIGNAL y : std_logic_vector(6 downto 0);BEGIN-- Instantiate the Unit Under Test (UUT)uut: counter2 PORT MAP(clk => clk,clr => clr,en => en,co => co,y => y);clk<=not clk after 20 ns;tb : PROCESSBEGINclr<='1','0' after 30 ns;en<='0','1' after 20 ns;-- Wait 100 ns for global reset to finish--wait for 100 ns;-- Place stimulus herewait; -- will wait foreverEND PROCESS;END;功能仿真时序仿真管脚设置NET "clk" LOC = "E10" ;NET "clr" LOC = "L13" ;NET "co" LOC = "F12" ;NET "en" LOC = "L14" ;NET "y<0>" LOC = "B4" ;NET "y<1>" LOC = "A4" ;NET "y<2>" LOC = "D5" ;NET "y<3>" LOC = "C5" ;NET "y<4>" LOC = "A6" ;NET "y<5>" LOC = "B6" ;NET "y<6>" LOC = "E7" ;实验现象七段数码管显示0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F,每次循环完成co所接led灯亮一下,表示进位。
EDA计算器课程设计
EDA计算器课程设计一、课程目标知识目标:1. 学生能理解EDA计算器的基本原理和功能,掌握其操作方法。
2. 学生能够运用EDA计算器进行简单的数据分析和解决实际问题。
3. 学生掌握EDA计算器在工程和数据领域的应用场景。
技能目标:1. 学生能够熟练使用EDA计算器的各项功能,如数据处理、图表生成等。
2. 学生能够运用EDA计算器解决实际问题时,具备分析和解决的能力。
3. 学生能够通过EDA计算器,提高自己的逻辑思维和创新能力。
情感态度价值观目标:1. 学生通过学习EDA计算器,培养对工程和数据科学的兴趣,激发学习的内驱力。
2. 学生在学习过程中,养成合作、探究的学习习惯,形成良好的团队协作意识。
3. 学生能够认识到科技发展对社会进步的重要性,增强社会责任感和使命感。
课程性质分析:本课程为实践性较强的课程,以学生动手操作和实际应用为主,注重培养学生的实际操作能力和解决问题的能力。
学生特点分析:学生处于好奇心强、求知欲旺盛的阶段,对新鲜事物有较高的兴趣。
他们具备一定的计算机操作基础,但EDA计算器的使用还需进一步学习。
教学要求:1. 教师需注重理论与实践相结合,引导学生学以致用。
2. 教师应关注学生的个体差异,提供有针对性的指导。
3. 教学过程中要充分调动学生的积极性,鼓励学生主动探索和解决问题。
二、教学内容1. EDA计算器概述- 计算器的发展历程- EDA计算器的定义与特点2. EDA计算器的功能与操作- 数据处理功能:数据录入、排序、筛选等- 图表生成:柱状图、折线图、饼图等- 基本运算:加减乘除、百分比、求和等3. EDA计算器在实际应用案例- 工程领域:数据分析、项目管理等- 数据科学:数据挖掘、预测分析等4. 教学内容的安排与进度- 第一课时:EDA计算器概述及基本功能介绍- 第二课时:数据处理功能的操作与实践- 第三课时:图表生成功能的操作与实践- 第四课时:基本运算操作及实际应用案例5. 教材章节及内容列举- 第一章:计算器概述- 第一节:计算器发展历程- 第二节:EDA计算器定义与特点- 第二章:EDA计算器功能与操作- 第一节:数据处理功能- 第二节:图表生成功能- 第三节:基本运算操作- 第三章:EDA计算器在实际应用案例- 第一节:工程领域应用- 第二节:数据科学应用教学内容确保科学性和系统性,以培养学生的实际操作能力和解决问题的能力为核心,注重理论与实践相结合。
eda24进制计数器设计
EDA24进制计数器设计1. 任务背景计数器是计算机系统中常见的一种电路,用来实现对数字进行计数的功能。
传统的计数器一般是采用二进制表示数字,然而在某些特定的应用场景中,使用其他进制的计数器能够更方便和高效。
EDA24进制计数器是指使用24进制来表示数字的计数器。
24进制是一种特殊的进制,它由24个数字符号(0-23)组成,分别对应于十进制的0-9、字母A-J、字母K-T和字母U-Y。
使用24进制计数器可以更精确地表示某些特定范围内的数字,而且减少了数字的位数和转换过程中的计算复杂度。
本文将介绍如何设计一个EDA24进制计数器,包括计数器的原理、硬件设计和功能实现等方面的内容。
2. 原理介绍EDA24进制计数器的工作原理与传统的计数器类似,主要分为三个部分:计数器状态存储、计数器状态更新和计数器输出。
2.1 计数器状态存储EDA24进制计数器需要使用存储器来保存当前的计数器状态。
由于EDA24进制有24个数字符号,每个符号对应一个存储单元,因此需要一个24位的存储器来存储计数器的状态。
存储器的结构可以采用RAM或者寄存器等形式。
当计数器进行更新时,计数器状态存储器会读取新的计数器状态。
2.2 计数器状态更新EDA24进制计数器的计数逻辑与二进制计数器类似,但需要对进位的处理进行特殊处理。
在24进制下,当某一位达到23时,需要进行进位操作,并将低位的符号进行进位。
例如,当计数器达到23时,进位得到的数字为10(对应K),并将低位的数字进行滚动。
以一个4位的EDA24进制计数器为例,计数范围为0000~2323。
初始状态为0000,当计数值增加时,每一位的变化规律如下:•当个位(最低位)从0~2变化时,直接递增;•当个位达到3时,个位变为0,十位(倒数第二位)递增;•当十位从0~2变化时,直接递增;•当十位达到3时,十位变为0,百位(倒数第三位)递增;•当百位从0~2变化时,直接递增;•当百位达到3时,百位变为0,千位(最高位)递增;•当千位从0~2变化时,直接递增;•当千位达到3时,计数器归零。
简单计算器eda设计最终打印版
目录第一章设计原理 (1)1.1 课程设计依据 (1)1.2 课程设计内容及原理 (1)1.3 课程设计要求 (1)第二章设计流程 (2)2.1设计流程图 (2)2.2 LED灯接线部分显示 (3)第三章模块连接 (4)3.1 四选一多路器 (4)3.1.1多路器程序设计 (4)3.1.2四选一多路器仿真图 (5)3.1.3四选一多路器仿真波形分析 (5)3.2 7段数码管显示 (5)3.2.1数码管程序设计 (5)3.2.2数码管仿真图 (6)3.2.2数码管仿真图分析 (6)3.3 循环扫描模块 (7)3.3.1循环扫描程序 (7)3.3.2循环扫描仿真图 (8)3.3.3 循环扫描模块分析 (8)3.4 简易计算器总体程序设计 (8)3.4.1简单计算器程序设计 (8)3.4.2简单计算器总体仿真图 (11)3.4.3简单计算器仿真图设计分析 (11)第四章设计体会 (12)参考文献 (13)第一章设计原理1.1 课程设计依据在掌握常用数字电路功能和原理的基础上,根据EDA技术课程所学知识,利用硬件描述语言Verilog HDL、EDA软件Quartus II和硬件平台Cyclone/Cyclone II FPGA进行电路系统的设计。
1.2 课程设计内容及原理设计一个简单计算器,采用简单4*4计算器键盘,输入2位十进制数进行+、-、 *、/ 四种运算,输入数据分别用两位数码管显示,输出用四位数码管显示4位10进制数,其中除法的结果显示分为商和余数两部分,要求采用时序逻辑设计实现计算器功能。
为了完成要求的效果显示,我先设计了一个简单的四则运算器,为了使其结果能清楚的看到,所以计算器模块和一个7段数码管模块连接。
实验要求,输入分别用两位数码管显示,输出用四位数码管显示,所以用一个3—8译码器和数码管连接,通过开关控制,形成动态显示。
从左向右,依次是第一位数码管显示a的高四位,第二位数码管显示a的低四位;第三位数码管显示b的高四位,第四位数码管显示b的低四位;第五位数码管到第八位数码管显示输出的结果。
EDA大作业
EDA技术课程大作业目录1. 设计背景2. 设计方案2.1 计时模块功能2.2 计时模块系统组成框图2.3 设计思路3. 数字秒表计时模块的VHDL源程序3.1 十进制计数器的VHDL源程序(CDU10.VHD)3.2 六进制计数器的VHDL源程序(CDU6.VHD)3.3 计时器的VHDL源程序(COUNT.VHD)4. 源程序总体描述5. 波形仿真图6. 总结1、设计背景在当今社会,数字电路产品的应用在我们的实际生活中显得越来越重要,与我们的生活联系愈加紧密,例如计算机、仪表、电子钟等等,使我们的生活工作较以前的方式更加方便、完善,带来了很多的益处。
在此次EDA课程,我的设计课题是数字秒表——计时模块,根据要求使用平时所学VHDL语言进行编程完成。
报告书主要由设计背景、设计方案、模块介绍、设计源程序、仿真波形图和管脚锁定及硬件连线四部分组成。
设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。
数字电路主要是基于两个信号,用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。
EDA技术,就是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方式设计的电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至完成对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。
2、设计方案数字秒表的计时模块,其总体功能如下:数字秒表的计时范围是0秒到59分59.59秒,显示的最长时间为59分59。
数字秒表的计时精度是10ms。
复位开关可以在任何情况下使用,即便在计时过程中,只要按一下复位开关,计时器就清零,并做好下次计时的准备。
eda计数器课程设计
eda计数器课程设计一、课程目标知识目标:1. 让学生理解EDA计数器的基本概念,掌握计数器的工作原理;2. 学会使用EDA工具进行计数器的设计、仿真和验证;3. 了解计数器在不同领域中的应用,如数字信号处理、通信系统等。
技能目标:1. 培养学生运用所学知识,独立设计简单的EDA计数器电路;2. 提高学生分析、解决计数器设计过程中遇到问题的能力;3. 培养学生运用EDA工具进行电路仿真和验证的能力。
情感态度价值观目标:1. 激发学生对电子设计自动化(EDA)技术的兴趣,培养其主动学习的积极性;2. 培养学生团队合作精神,学会与他人共同解决问题;3. 增强学生的创新意识,鼓励他们勇于尝试、不断探索。
课程性质:本课程为电子技术专业课程,旨在让学生掌握EDA计数器的设计与应用。
学生特点:学生具备一定的电子技术基础知识,对EDA技术有一定了解,但实际操作能力有待提高。
教学要求:结合学生特点和课程性质,注重理论与实践相结合,强化实践操作,提高学生的实际动手能力。
通过本课程的学习,使学生能够将所学知识应用于实际电路设计中,培养具备创新精神和实践能力的电子技术人才。
教学过程中,注重分解课程目标为具体学习成果,以便进行教学设计和评估。
二、教学内容1. 计数器原理及分类:介绍计数器的基本概念、工作原理,以及同步、异步计数器等不同类型的计数器;教材章节:第二章第二节2. EDA工具使用:讲解如何使用EDA工具(如Multisim、Proteus等)进行计数器的设计、仿真和验证;教材章节:第三章第一节3. 计数器设计方法:介绍基于触发器和门电路的计数器设计方法,以及如何优化计数器设计;教材章节:第四章4. 计数器应用案例分析:分析计数器在数字信号处理、通信系统等领域的应用案例;教材章节:第五章5. 实践操作:指导学生进行EDA计数器的设计、仿真和验证,培养学生的实际操作能力;教材章节:第六章6. 课程总结与拓展:对本章内容进行总结,引导学生思考计数器的未来发展及其在新兴领域的应用。
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位补码全加器模块。
EDA五位乘法器
1.课程设计的性质、目的和任务创新精神和实践能力二者之中,实践能力是基础和根本。
这是由于创新基于实践、源于实践,实践出真知,实践检验真理。
实践活动是创新的源泉,也是人才成长的必由之路。
通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。
2.题目要求设计一个两个5位数相乘的乘法器。
用发光二极管显示输入数值,用7段显示器显示十进制结果。
乘数和被乘数分两次输入。
在输入乘数和被乘数时,要求显示十进制输入数据。
输入显示和计算结果显示,采用分时显示方式进行,可参见计算器的显示功能。
3.基本原理利用单独按键通过高低信号控制输入乘数,被乘数以及显示结果。
与此同时将符号位分离并单独运算得出输出结果的符号,而乘数和被乘数数值部分通过乘法运算得出8位二进制数,再通过二进制转十进制运算将个十百位分别传给数码管前的译码器,控制数码管显示数字,而且将符号位也通过专用数码译码器编译,从而显示出乘法的各个数据。
4.电路设计4.1整体电路图24.2输入选择模块VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;entity shuruxuanze isPORT(a: in std_logic_vector(4 downto 0);chengshu: in std_logic;beichengshu: in std_logic;X,Y: out std_logic_vector(3 downto 0);fx,fy:out std_logic);end shuruxuanze;architecture a of shuruxuanze isbeginprocess(chengshu,a,beichengshu)beginif(chengshu='1' and beichengshu='0' ) then X(3 downto 0)<=a(3 downto 0);fx<=a(4);end if;if(chengshu='0' and beichengshu='1') then Y(3 downto 0)<=a(3 downto 0);fy<=a(4);end if;end process;end a;波形仿真结果如下34.3乘法模块(实现两个4位二进制数的乘法运算)VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;entity mul4 isPORT(x,y:in std_logic_vector(3 downto 0);p :out std_logic_vector(7 downto 0)); end mul4;architecture a of mul4 issignal temp1: std_logic_vector(3 downto 0);signal temp2: std_logic_vector(4 downto 0);signal temp3: std_logic_vector(5 downto 0);signal temp4: std_logic_vector(6 downto 0);begintemp1<=x when y(0)='1' else "0000";temp2<=(x & '0') when y(1)='1' else "00000";temp3<=(x & "00") when y(2)='1' else "000000";temp4<=(x & "000") when y(3)='1' else "0000000";p<=temp1+temp2+temp3+temp4;end;波形仿真如下44.4输入位数转换(将输入数值的4位二进制转换成等值的8位)VHDL语言如下LIBRARY ieee;use ieee.std_logic_1164.all;entity shuru1 isPORT(a: in std_logic_vector(3 downto 0);x: out std_logic_vector(7 downto 0));end shuru1;architecture act of shuru1 isbeginx<= "0000"&a(3 downto 0);end act;波形仿真如下54.5符号位运算模块VHDL语言如下LIBRARY ieee;USE ieee.std_logic_1164.all;entity fuhaowei isPORT(a,b:in std_logic;s: out std_logic);end fuhaowei;architecture a of fuhaowei isbeginprocess(a,b)begins<=a XOR b;end process;end a;波形仿真如下4.6显示选择模块(对乘数、被乘数、结果分别选择,并将其传送到数码管的译码器中)6VHDL语言如下LIBRARY ieee;use ieee.std_logic_1164.all;entity xianshixz isPORT(k1,k2,k3:in std_logic_vector(7 downto 0); rst,chenghao,denghao: in std_logic;out1: out std_logic_vector(7 downto 0);clk: in std_logic);end xianshixz;architecture act of xianshixz isbeginprocess(rst,chenghao,clk,denghao)beginif(clk'event and clk='1') thenif(rst='1') thenout1<="00000000";elseif(chenghao='1' and denghao='0') thenout1<=k1;elsif(denghao='1' and chenghao ='0') then out1<=k2;else out1<=k3;end if;end if;end if;end process;end act;波形仿真如下74.7二进制转十进制模块(将传送来的8位二进制转换成3位十进制数,并将每位传送给数码管的译码器)verielog语言如下module zhuanzhi(clk,DB,Q1,Q2,Q3);input clk;input[7:0] DB;output [3:0] Q1,Q2,Q3;reg [3:0] A1,A2,A3,Q1,Q2,Q3;reg [7:0] LDB;reg [2:0] step;always@(posedge clk)begincase(step)0:beginLDB[7:0]<=DB;step<=1;A1<=0;A2<=0;A3<=0;end1:beginif(LDB>=100)beginA3<=A3+1;LDB<=LDB-100;8Endelse if((LDB>=10)&&(LDB<100)) beginA2<=A2+1;LDB<=LDB-10;endelse if((LDB>=1)&&(LDB<10)) beginA1<=LDB;LDB<=0;endelsebeginstep<=2;endend2:beginQ1<=A1;Q2<=A2;Q3<=A3;step<=0;enddefault:step<=0;endcaseendendmodule波形仿真结果如下所示94.8数值部分数码管译码模块VHDL语言如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bianyi isport(op: in std_logic_vector(3 downto 0);LED1: out std_logic_vector(6 downto 0));end bianyi;architecture behv of bianyi issignal H: std_logic_vector(3 downto 0);beginprocess (op)beginH <=op;case H iswhen "0000" => LED1 <="1000000";when "0001" => LED1 <="1111001";when "0010" => LED1 <="0100100";when "0011" => LED1 <="0110000";when "0100" => LED1 <="0011001";when "0101" => LED1 <="0010010";when "0110" => LED1 <="0000010";when "0111" => LED1 <="1111000";when "1000" => LED1 <="0000000";when "1001" => LED1 <="0010000";when "1111" => LED1 <="0111111";when others => LED1 <="1111111";end case;end process;end behv;波形仿真结果如下图104.9 符号部分的数码管译码模块VHDL语言LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fuhaoxs isPORT(a:in std_logic;y: out std_logic_vector(6 downto 0)); end fuhaoxs;architecture act of fuhaoxs issignal op: std_logic;beginprocess(a)beginop<=a;case op iswhen'1' =>y<="0111111";when'0' =>y<="1111111";when others => null;end case;end process;end act;波形仿真结果如下图。
- 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。
通过这个问题的解决,我认识到在进行波形仿真时,每个工程的波形文件名称应该与其工程名称一致,这样才能得到正确的仿真结果,因此,在每个工程下每次只能存在一个波形文件,在建立新的波形文件时,应该将原来的波形文件覆盖。