工程设计——最大公约数
最大公约数的数学教案设计

最大公约数的数学教案设计一、教学目标:1. 让学生理解最大公约数的意义,掌握求两个数最大公约数的方法。
2. 培养学生运用数学知识解决实际问题的能力。
3. 培养学生合作学习、积极思考的良好学习习惯。
二、教学内容:1. 最大公约数的定义及求法。
2. 应用最大公约数解决实际问题。
三、教学重点与难点:1. 教学重点:最大公约数的定义,求两个数最大公约数的方法。
2. 教学难点:求两个数最大公约数的方法。
四、教学准备:1. 教学课件。
2. 练习题。
3. 学生分组合作学习材料。
五、教学过程:1. 导入新课:通过讲解实际生活中的问题,引入最大公约数的概念。
2. 讲解最大公约数的定义:最大公约数是指两个或多个整数共有的约数中最大的一个。
3. 讲解求两个数最大公约数的方法:欧几里得算法。
4. 示例讲解:通过具体例子,讲解如何运用欧几里得算法求两个数的最大公约数。
5. 练习巩固:学生独立完成练习题,检验对最大公约数的理解和求法。
6. 应用拓展:引导学生运用最大公约数解决实际问题,如分配任务、设计图案等。
7. 总结评价:对学生的学习情况进行总结,给予鼓励和指导。
8. 布置作业:布置有关最大公约数的练习题,巩固所学知识。
9. 课后反思:教师对本节课的教学进行反思,为改进教学方法提供依据。
10. 学生反馈:收集学生的学习反馈,了解学生的学习需求和困惑,为下一步教学提供参考。
六、教学策略与方法:1. 采用问题驱动的教学方法,引导学生通过探索和解决问题来学习最大公约数的概念和求法。
2. 利用多媒体课件辅助教学,通过动画和实例演示,增强学生对最大公约数概念的理解。
3. 采用分组合作学习的方式,鼓励学生相互讨论和交流,培养学生的团队合作能力。
4. 设计具有层次性的练习题,满足不同学生的学习需求,及时给予反馈和指导。
七、教学评价:1. 通过课堂问答、练习题和小组讨论,评估学生对最大公约数概念的理解程度。
2. 观察学生在实际问题中的应用能力,评估学生运用最大公约数解决实际问题的能力。
C语言程序设计课程设计编写函数求取两个整数mn的最大公约数和最小公倍数

C语言程序设计课程设计专业:电气工程及其自动化班级:电气1203姓名:熊董学号: 201209837指导教师:王思华兰州交通大学自动化与电气工程学院2013 年07月 20日1、基础题1.1题目编写函数,求取两个整数m,n的最大公约数和最小公倍数。
1.2题目分析求两个整数的最大公约数和最小公倍数可以用辗转相除法,用两个函数max 和min分别求出最大公约数和最小公倍数。
在主函数中输入两个整数m和n,并传递给函数max,求出最大公约数返回主函数并赋给整型变量h,然后h和两个整数m,n 一起作为实参传递给函数min,从而求出最小公倍数,返回主函数赋给l。
输出最大公约数和最小公倍数。
主函数:N-S图如图一max函数:N-S图如图二min函数:N-S图如图三图三min函数1.3源程序#include<stdio.h>int main(){ int max(int,int);int min(int,int,int);int m,n,h,l;scanf("%d,%d",&m,&n);h=max(m,n);printf("最大公约数是%d\n",h);l=min(m,n,h);printf("最小公倍数是%d\n",l);return 0;}int max(int m,int n){ int t,r;if(n>m);{t=m;m=n;n=t;}while((r=m%n)!=0){m=n;n=r;}return(n);}int min(int m,int n,int h){return(m*n/h);}1.4程序运行结果如图四:图四基础题运行截图2、改错题2.1题目#include <stdio.h> #include <conio.h> void fun(int a, b) {int t;t = b; b = a ; a = t; }main( ) {int a, b; clrscr( );printf("Enter a,b :"); scanf("%d%d", &a, &b); fun(&a, &b);printf("a=%d b=%d\n", a, b); }2.2题目分析该源程序的目的是交换两个数的值,有主函数可以看出该函数是应用指针交换两个数的值。
999和495的最大公约数

999和495的最大公约数全文共四篇示例,供读者参考第一篇示例:999和495的最大公约数是27。
最大公约数是指两个数中最大的可以同时被整除的数,也就是它们的公约数中最大的一个。
在这里,999和495的最大公约数为27。
接下来,我们将详细解释如何求出这两个数的最大公约数。
我们可以使用辗转相除法来求出999和495的最大公约数。
辗转相除法是一种求最大公约数的算法,它的原理是通过反复地用较小数去除较大数,直到余数为0为止。
具体步骤如下:1. 用较大的数除以较小的数,得到余数;2. 将较小的数和上一步得到的余数作为新的两个数,再次用较小的数去除较大的数,继续得到余数;3. 重复第二步,直到余数为0。
按照上述步骤,我们可以求出999和495的最大公约数:用999除以495,得到余数为9(999÷495=2…9);然后,用495除以9,得到余数为0(495÷9=55),所以最大公约数为9。
可以看到,通过辗转相除法,我们得到的999和495的最大公约数为9,与之前所述的最大公约数27不同。
这是因为在求最大公约数时,我们可以得到不同的结果,取决于选择的算法和方法。
1. 将999分解为3*3*3*37;2. 将495分解为3*3*5*11。
根据上述分解结果,我们可以得到999和495的公因数为3*3=9。
所以,最大公约数为9。
最大公约数在数学中有着重要的应用,它可以帮助我们简化分数、约分以及求解一些数学问题。
在实际生活中,我们也经常会遇到求最大公约数的问题,比如在计算机算法、工程设计等领域。
掌握求最大公约数的方法是很有必要的。
希望通过本文的介绍,读者对999和495的最大公约数有了更深入的了解。
第二篇示例:999和495这两个数字虽然看起来不起眼,但在数学上却是有很深刻的意义的。
今天我们要探讨的是这两个数字的最大公约数是多少。
我们要了解什么是最大公约数。
所谓最大公约数,即是两个或多个整数中共有因数中最大的一个,简称“最大公约数”。
最大公因数在工程中有哪些应用

最大公因数在工程中有哪些应用嘿,咱们今天来聊聊一个挺有意思的数学概念——最大公因数,看看它在工程领域里到底能有啥神奇的应用。
我先给您讲个事儿啊,就前阵子我去一个工地溜达,看到工人们正在铺设地砖。
那是一块挺大的长方形地面,他们手里拿着各种尺寸的地砖,正琢磨怎么铺才能既美观又不浪费材料。
这时候,最大公因数就派上用场啦!比如说,如果地面的长是 12 米,宽是 8 米,而地砖的尺寸有 40 厘米×40 厘米的,还有 60 厘米×60 厘米的。
那咱们就得算一算,用哪种地砖能刚好铺满,而且切割的最少,浪费最小。
这时候就要找出 1200厘米和 800 厘米的最大公因数 400 厘米,所以 40 厘米×40 厘米的地砖就是最佳选择。
在建筑工程中,最大公因数的应用可不少。
像搭建脚手架,钢管的长度得根据建筑的高度和结构来选择。
如果知道了建筑需要的高度和钢管常见的长度规格,通过计算最大公因数,就能选出最合适的钢管长度,既能保证安全稳固,又能节省材料成本。
再比如说电路布线,电线的规格有各种各样的。
如果要给一个房间布线,知道房间的长度和宽度,以及电线的几种可选长度,通过求出最大公因数,就能合理安排电线,避免浪费,还能让线路布局更简洁。
还有桥梁工程,假设要建造一座桥,桥的跨度是一定的,而预制梁的长度有多种选择。
这时候,通过计算最大公因数,就能确定最合适的预制梁长度,让桥梁的结构更稳定,施工更高效。
在制造机械零件的时候,也经常会用到最大公因数。
比如说生产一批齿轮,不同规格的齿轮要相互配合。
如果知道了各个齿轮的齿数范围,找出最大公因数,就能设计出最合理的齿轮组合,保证机器的运转顺畅,减少磨损,延长使用寿命。
在管道铺设工程中也一样。
如果要铺设一条很长的管道,管道的长度规格有几种,而需要铺设的总长度是确定的。
这时候求出最大公因数,就能选择最合适的管道长度,减少接口数量,降低漏水的风险。
甚至在装修工程里,最大公因数都有用武之地。
施工组织设计B

〈〈施工组织设计》试卷B考试时间:120分钟,满分100分考试形式:统一考试,闭卷班级:学号:姓名:绩:一、判断题(每小题1分共10分)1、组织流水施工必须使同一施工过程的专业队组保持连续施工。
()2、工艺参数是指流水步距、流水节拍、技术间歇、搭接时间等。
()3、关键线路上相邻两项工作之间的时间间隔必为零。
()4、网络图中的箭线可以画成直线、折线、斜线、曲线或垂直线。
()5、单代号网络图严禁出现箭线交义,否则容易引起混乱。
()6、单代号网络图与双代号网络图并无本质区别,只是表达方式不同。
(7、计算网络计划时间参数的目的主要是确定总工期,做到工程进度心中有数。
(8、在网络计划中当某项工作使用了全部或部分总时差时,则将引起通过该工作的线路上所有工作总时差重新分配。
()9、由关键工作组成的线路必为关键线路。
()10、若将网络计划中某关键工作的持续时间压缩^,则工期相应缩短(二、单项选择题(每小题1分共15分)1、自由时差是不影响()的机动时间。
word专业资料A、紧前工作最早开始时间B、紧前工作最迟开始时间C、紧后工作最早开始时间D、紧后工作最迟开始时间2、网络计划中一项工作的自由时差和总时差的关系是()。
A、自由时差等丁总时差B、自由时差大丁总时差C、自由时差小丁总时差D、自由时差不超过总时差3、当计划工期等丁计算工期时,以关键节点为完成节点的工作()。
A、总时差等丁自由时差B、最早开始时间等丁最迟开始时间C、一定是关键工作D、自由时差为零4、由建设总承包单位负责编制,用以指导拟建工程项目的技术经济文件是()。
A、分项工程施工组织设计B、单位工程施工组织设计C、施工组织总设计D、分部工程施工组织设计5、编制施工组织总设计,应首先()。
A、拟定施工方案B、编制施工进度计划C、确定施工部署D、估算工程量6、在进行施工总平面图设计时,全工地性行政管理用房宜设置在()。
A、工地与生活区之间B、工人较集中的地方C、距工地500〜1000m 处D、工地人口处7、设计全工地性施工总平面图时,首先应研究()。
编写函数,实现辗转相除法,接收两个整数,返回这两个整数的最大公约数,并使用标准库

编写函数,实现辗转相除法,接收两个整数,返回这两个整数的最大公约数,并使用标准库编写函数,实现辗转相除法,接收两个整数,返回这两个整数的最大公约数,并使用标准库1. 前言在计算机编程中,经常需要实现一些基本的数学算法,比如求两个整数的最大公约数。
而辗转相除法(又称欧几里德算法)是一种常用的求解最大公约数的方法。
本文将通过编写函数来实现辗转相除法,接收两个整数,返回它们的最大公约数,并且我们将会使用标准库提供的一些内置函数来简化这一过程。
2. 辗转相除法的原理辗转相除法的原理非常简单,它是基于如下的定理:两个正整数a和b(a>b)的最大公约数等于a除以b的余数c和b的最大公约数。
具体的算法步骤如下:1) 用a除以b,得到余数c2) 若c=0,则最大公约数为b3) 若c≠0,则令a=b,b=c,然后重复步骤13. 编写函数实现辗转相除法在 Python 中,我们可以很轻松地编写一个函数来实现辗转相除法,以下是一个简单的示例代码:```pythondef gcd(a, b):while b:a, b = b, a % breturn a```在这段代码中,我们定义了一个名为gcd的函数,它接收两个整数a 和b作为参数。
然后我们使用while循环来不断地进行辗转相除,直到b为0为止,然后返回a的值,即为这两个整数的最大公约数。
4. 使用标准库事实上,Python的标准库已经为我们提供了求解最大公约数的内置函数gcd,这样我们就无需自己实现辗转相除法了。
我们可以直接使用标准库中的gcd函数来简化我们的代码,以下是使用标准库gcd函数的示例代码:```pythonimport matha = 24b = 36result = math.gcd(a, b)print("The greatest common divisor of", a, "and", b, "is", result) ```在这段代码中,我们首先导入了Python的math库,然后直接调用math.gcd函数来求解a和b的最大公约数,并将结果存储在变量result中,最后打印出结果。
施工组织设计习题及答案

一、习题1.某工程有一分部工程由A、B、C、D四个施工工序组成,划分两个施工层组织流水施工,流水节拍为tA=2,tB=4,tC=4,tD=2要求层间间歇2天,试按成倍节拍流水组织施工。
要求工作队连续工作,确定流水步距K,施工段数m,计算总工期T,并绘制流水指示图表。
解:1)确定流水步距K=最大公约数[2,4,4,2]=2d2)确定分项工程专业工作队数目b A=2/2=1个b B=4/2=2个b C=4/2=2个b D=2/2=13)专业工作队总数目N=1+2+2+1=6个4)求施工段数m=N+Z/K=6+2/2=7段5)计算工期T=(m×r+N-1)×K=(7×2+6-1)×2=38d6)绘制流水指示图表工期施工过程施工进度(d)2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38A①②③④⑤⑥⑦①②③④⑤⑥⑦BB1 ①③⑤⑦②④⑥B2 ②④⑥①③⑤⑦CC1①③⑤⑦②④⑥C2②④⑥①③⑤⑦D ①②③④⑤⑥⑦①②③④⑤⑥⑦2.某工程项目由9项工作组成,各项工作之间网络逻辑关系如表所示。
试绘制成双代号网络图,计算六个时间参数,并确定关键线路。
工作名称紧前工作紧后工作持续时间(天)A B C D E F G H I——————ABA BB CCE、F、GD、FE、F、GG、H——III————45512684146答案:3. 某工程有一分部工程由A 、B 、C 三个施工工序组成,划分两个施工层组织流水施工,流水节拍为tA=4,tB=4,tC=2,要求层间技术间歇2天,试按成倍节拍流水组织施工。
要求工作队连续工作,确定流水步距K ,施工段数m ,计算总工期T ,并绘制流水指示图表。
答案:1)确定流水步距K =最大公约数[4,4,2]=2d2)确定分项工程专业工作队数目b A =4/2=2个b B =4/2=2个 b C =2/2=1个3)专业工作队总数目N =2+2+1=5个4)求施工段数m =N +Z/K =5+2/2=6段5)计算工期T =(m ×r +N -1)×K =(6×2+5-1)×2=32d6)绘制流水指示图表1 31 21 41 51617181A F I D H G E BC45512614 86 4 0 5 0 0 05 0 5 1 1 04 05 0 0 0 5 5 13 0 5 0 13 5 13 2 7 2 11 5 13 4 9 4 9 5 19 05 0 19 13 19 013 019 4 19 37 3164.某现浇钢混凝土工程,由支模、绑扎钢筋、浇砼、拆模板和回填土五个分项工程组成,在平面上划分四个施工段,各分项工程在各个施工段上的施工持续时间分别为:支模2、3、2、3天,绑扎钢筋3、3、4、4天,浇砼2、1、2、2天,拆模板1、2、1、1天,回填土2、3、2、2天,支模与绑扎钢筋可以搭接1天,在砼浇筑后至拆模板必须有2天的养护时间,试编制该工程流水施工方案。
施工组织设计习题及答案(供参考)

第一章施工组织概论1、公路建设的内容和特点是什么? 其资金来源有哪些?答:公路建设的内容:公路的小修、保养;公路工程的大中修与技术改造;公路工程基本建设。
公路建筑产品的特点:产品的固定性、产品的多样性、产品形体的庞大性、产品部分结构的易损性。
公路施工的技术经济特点:施工流动性大,施工协作性高,施工周期长,受外界干扰及自然因素影响大。
资金来源是:凡属于固定资产的维修、固定资产的更新和技术改造资金由交通经费即养路费开支;而扩大再生产中的新建公路和新建大中桥等基本建设投资开支。
2、公路基本建设通过哪些形式实现固定资产扩大再生产?答:公路基本建设通过新建、改建、扩建和重建四种形式实现固定资产的扩大再生产。
凡属于固定资产的维修、固定资产的更新和技术改造资金,由交通经费即养路费开支。
而扩大再生产中的新建公路和新建独立大桥等由基本建设投资开支。
3、公路基本建设的定义,内容及其组成项目是什么?答:公路基本建设:指公路运输业有关固定资产的建筑、购置、安装活动以及与其相关的如勘察设计、征用土地等工作。
内容:建筑安装工程,设备、工具、器具的购置,其它基本建设工作。
组成项目:基本建设项目,单项工程,单位工程,分部工程,分项工程。
4、公路基本建设程序的定义及内容是什么?答:公路基本建设程序:基本建设项目在整个建设过程中各项工作的先后顺序,称基本建设程序。
坚持基本建设程序的意义:基本建设涉及面广,它受到地质、气候、水文等自然条件和资源供应、技术水平等物质技术条件的严格制约,需要内外各个环节的密切配合,并且要求按照既定需要和有科学根据的总体设计进行建设。
内容:项目建议书,可行性研究,设计文件,列入年度基建计划,施工准备,组织施工,竣工验收、交付使用。
5、公路基本建设项目通常有几种设计,包括哪些设计文件,各适用什么工程? 答:公路基本建设项目通常有一阶段设计、两阶段设计、三阶段设计三种设计。
包括一阶段施工图设计,适用于方案明确的简单小型项目,两阶段初步设计和施工图设计,适用于一般工程项目,三阶段初步设计、三阶段技术设计、三阶段施工图设计,适用于技术复杂的大型项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告题目:用硬件设计一个最大公约数计算的算法电路班级:姓名:学号:合作者:摘要:本文论述的是采用二元的最大公约数算法,即欧基理德算法(Eucldean GCD Algorithm)设计一个计算两个 32位整数最大公约数(GCD)的处理器。
首先给出了欧几里得算法的描述,阐述了欧几里得算法原理;接着阐述了基本功能单元的选取和实现;随后详细的描述了设计过程和软硬件代码并对设计结果进行了分析、验证以及用QUARTUS 软件对该程序进行仿真综合得出电路图。
要求设计一种的 VLSI实现方案,该方案须使用 Altera 公司的FPGA 设计流程实现,技术和功能上总体要求低功耗优先。
具体指标取下:DC Astro工艺SMIC.13 tt 1.2V SMIC.13 tt 1.2V单元库SIMIC13IO_line_02_tt SMIC13STDLIBM6关键路径 2.79ns(约 358MHz) 4.32ns(约 230MHz)静态功耗 1.86uw动态功耗 3.99mwarea 39087 um2236um*236um=55696 um2利用率N/A 82%一、设计要求1、目标:设计一个计算两个 32位整数最大公约数(GCD)的处理器。
2、输入:OPA:32-bit,操作数一;OPB:32-bit,操作数二;START:启动信号;RESET:复位信号;CLK:系统时钟。
3、输出:DONE:指示输出。
RESULT:32-bit,最大公约数(GCD);4、要求:(1)采用二元的最大公约数算法,即欧基理德算法(Eucldean GCD Algorithm);(2)设计一种的 VLSI实现方案,该方案须使用 Altera公司的FPGA 设计流程实现。
二、欧几里得算法描述欧几里得算法的基础是下面这个定理:设a,b,c为3 个正整数,且a=bq+c ,其中q为整数,则(a,b)=(b,c)。
另外,(b,0)=b。
给定两个正整数 a,b,假设a≥b ,求其最大公约数(gcd),使用欧几里得算法,先计算a mod b得到 c,再计算b mod c 得到d,再计算c mod d 得到e,……直到模的结果为0,那么0之前的那个数就是所求的最大公约数。
例如,求 174 和136的最大公约数,174→136→38→22→16→6→4→2→0最大公约数是 2。
在实现上,求模的方法就是做除法,保留余数。
如果细看一般求余数的方法,就是做减法,比如求 a mod b 的过程(假设 a>=b),从a 中减去b的尽量大的倍数就得到模的结果。
但是,在实际中,这个“尽量大的倍数”(就是商)比较难找,所以,一般拿 b 的( (8)倍、4 倍、2 倍、1 倍)去试,每次减掉尽量大的一个,这样从大到小试,试完一遍就可以得到结果。
三、基本功能单元1、基本功能单元的选取基于这个理解,我们选取的基本单元完成的功能是:从大数中减去小数尽量大的倍数(1 倍、2 倍、4 倍、8 倍……)。
我们不妨把这个操作叫做“贪婪减法”。
除此之外,对减法的结果,如果小于 b,要和 b 交换位置,以保证每次运算都在a≥b 前提下开始。
运算数a 和b 被模块读取后,先排序,使得 a>=b,然后,a 和b 被基本功能单元反复运算,直到 b 变为0。
这时的a 就是最大公约数。
图 1 基本功能单元我们的方案使用一个基本单元,在控制电路控制下,反复计算,经过几个周期得到一个计算结果。
2、基本功能单元的实现前面已经介绍了基本功能单元实现的功能,即“贪婪减法并排序”。
这可以通过组合逻辑实现。
最直观的想法是,a 和b、2b、4b、8b、……(即 b 左移0 位、1 位、2 位、3 位、……后的结果)分别比较,找到满足b*2k≤a<b*2k+1的b*2k,然后将 a 减去b*2k,结果和b 排序,送到下一级。
但是,如果采用 32 个比较器并行地比较,消耗的硬件资源将很大。
为了节省硬件,可以先检测 a 和b 前导 0 的数目,相减得到b 需要左移的位数,然后移位b 到和 a对齐的位置。
比较一次,就能找到需要的b*2k(记为 b k)。
图 2 寻找尽量大的b k如果b align≤a,则b k=b align ;否则,b align >a,这时b k=b align_sub。
基本功能单元的结构图(图 3),头 0 编码和对数移位器用于找出和 a 第一个 1 对齐的b align,这个值和 a 比较,找到需要的b k(=b*2k),做减法得到a-b k,这个结果还需要和 b 比较进行排序。
也就是说,还要做a-b k-b的运算。
数据流如图 4。
为了缩短流水线的长度,把可能需要的结果提前运算,然后根据需要选择相应的数据。
也就是,提前计算a-b align 、a-b align_sub 、a-b align-b、a-b align_sub-b 。
这样改进后,组合逻辑的延时缩短了,代价是使用了更多的减法器。
最终的结构就是图 3 的形式。
图 3 基本功能单元(贪婪减法并排序)的硬件结构图 4 初始的设计,太长的延时四、设计过程描述1、总体结构使用一个“贪婪减法并排序”的基本功能单元,加上附加的控制,构建出我们的方案(图5)。
更加具体的内部结构如图 6,图中的“预处理”是对 OPA 和 OPB 排序,保证进入寄存器 a、b 的值满足a≥b ,通过简单的比较和选择逻辑就能实现。
图5 方案模块图图6 方案的具体内部结构图2、工作流程在该方案中,完成一次运算需要多个周期。
运算数 a 和b 被基本功能单元反复运算,直到 b==0,运算完成,输出结果。
该方案的操作时序如图 7,GCD 模块作为一个对象受到MASTER 的控制,START 信号拉高后,GCD 模块读取操作数OPA 和OPB并开始运算,经过多次迭代运算,到 b==0 后,运算完成,DONE信号被置 1,MASTER 读取结果,然后撤销START,接着 GCD 模块撤销 DONE 信号。
图 7 方案的操作时序图 8 方案的状态转换图五、软硬件代码描述1、求最大公约数的C语言算法首先编写程序,用以描述所要实现的计算任务。
图9所示为求最大公因数(GreatestCommonDivisor,GCD)的系统框图,其输入为go_i 、 x_i和y_i,输出为d_o。
其中go_i为控制信号, x_i和y_i为两个输入的正整数, d_o为两个输入正整数的公因数。
图 9 最大公因数系统框图求最大公约数的C语言算法如下:int x,y,r;while(1){while(!go_i);if (x_i ≥y_i) {x=x_i;y=y_i;}else{x=y_i;y=x_i;}while (y!= 0) {r=x%y;x=y;y=r;}d_o=x;}程序说明:(1)该算法的功能很简单:求两个输入数的最大公因数,并输出。
如果输入是12和9,则输出应该是3;如果输入是13和3,则输出应该为1。
可以利用C语言的集成开发环境(如VC++6.0)验证算法的正确性。
(2) 程序中,go_i、x_i、y_i均为输入,d_o为输出,与图9框图中的输入输出一致。
go_为控制信号,只有该信号为有效电平(即高电平)时,才启动求最大公约数的进程,若为无效电平,则程序暂停直到该信号有效。
2、求最大公约数的Verilog代码(简稿,更加详细优化的Verilog代码见附件)module gcd(clk,x_i,y_i,go_i,d_o);parameter N=6; //用于定义输入数的范围,最大为2**N-1input[N-1:0]x_i,y_i;input clk,go_i;output reg[N-1:0]d_o;parameter s0=3'b111,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101, s6=3'b110;reg[2:0]current_state,next_state;reg[N-1:0]x,y,r;always@(posedge clk)//状态寄存器current_state=next_state;always@(current_state,x_i,y_i,go_i,x,y,r)//产生下一个状态的组合逻辑case(current_state)s0:if(go_i) next_state=s1;else next_state=s0;s1:if(x_i>=y_i) next_state=s2;else next_state=s3;s2: next_state=s4;s3: next_state=s4;s4:if(y>0) next_state=s5;else next_state=s6;s5: next_state=s4;s6: next_state=s0;default:next_state=s0;endcasealways@(negedge clk) //产生输出和中间变量的组合逻辑case (current_state)s2: beginx=x_i;y=y_i;ends3: beginx=y_i;y=x_i;ends5: beginr=x%y;x=y;y=r;ends6: d_o=x;defaultendcaseendmodule程序说明:(1)部分注释见程序的旁注。
(2)本程序中的状态与图13(b)(见八、设计过程中遇到的问题与解决办法)中的状态一一对应关系如下:s0—>2,s1—>3,s2—>4,s1—>6,s1—>8,s1—>9, s1—>12。
对照状态图阅读程序,一目了然。
六、设计结果的分析、验证及设计电路图1、仿真波形图如图10所示。
图10 QUARTUS仿真波形图(1)从仿真波形可以看出,33和55的最大公约数为11,33和9的最大公约数为3,9和10的最大公约数为1,18和32的最大公约数为2,18和17的最大公约数为1,结果均正确。
(2)从仿真波形可以看出,得出最大公约数有一个延迟时间,这个延迟时间跟状态机有关,因为一个时钟周期状态机转换一次状态,而得到最大公约数需要完成一个完整的状态图,所以需要若干个时钟周期。
可以分析得出最大公约数与延迟两者之间的关系,并从仿真波形中得到验证。
(3)在仿真波形中,也将程序中用到的一些信号(比如状态机、中间信号x和y等)加了进去,这些信号用于分析状态机的运行过程非常有效。
(4)这里采用多进程的方式来描述状态机,每个进程功能明确。
另外,需要特别说明的是,在程序中既用到clk的上升沿,又用到了clk的下降沿,这样是为了使状态转换及输出的时序关系更清晰。