河南科技学院新科学院算法设计报告实验四大整数乘法

合集下载

4位乘法器的设计

4位乘法器的设计

4位乘法器的设计乘法器是计算机中非常重要的组成部分,用于实现数字乘法运算。

在设计4位乘法器时,需要考虑到多个方面,如计算的准确性、速度和功耗等。

本文将详细探讨4位乘法器的设计原理、逻辑电路实现以及性能分析。

1.乘法器的基本原理乘法操作是通过将被乘数与乘数一位一位地相乘,再将各位的结果相加得到最终的乘积。

因此,4位乘法器的设计需要考虑到每一位乘法的计算和结果的累加。

2.乘法器的逻辑电路实现2.14位乘法器的简单实现最简单的方法是采用两个4位二进制数相乘的定义,即将每一位的乘积相加得到最终的结果。

这可以通过4个并行的与门和一些全加器来实现。

具体的逻辑电路图如下所示:A0───────┐┌─────A1───────┤├─────A2───────┤├─────A3───────┤├─────AND0 OR0 CoutB0───────┐│B1───────┤XOR0B2───────┤B3───────┘从上图可以看出,A0到A3和B0到B3分别作为输入,经过与门得到各位的乘积,然后通过一系列的全加器将乘积相加得到最终结果。

在这种设计中,每个位的计算之间是并行的,因此可以快速得到乘法运算的结果。

2.2优化的4位乘法器上述简单实现的4位乘法器虽然能够实现乘法运算,但其性能方面存在一些不足。

为了提高性能,可以采用更复杂的逻辑电路设计。

一种常见的优化方法是使用布斯加算器(Booth's Algorithm)来实现乘法运算。

这种方法通过将乘法运算转化为位移和加减运算来减少乘法的次数,从而提高性能。

具体的实现方法如下:1)将被乘数和乘数拓展到5位,比特位B4作为符号位,初始值为0。

2)将被乘数拓展为4位乘子,乘数拓展为5位乘数。

3)初始化中间结果为0。

4)迭代循环4次进行乘法运算,每次进行下面的步骤:-如果乘数的最低位和符号位相同,什么都不做。

-如果乘数的最低位为0且前一位为1,将乘数和被乘数相加。

-如果乘数的最低位为1且前一位为0,将乘数和被乘数相减。

算法:大整数相乘问题

算法:大整数相乘问题

算法:⼤整数相乘问题 给定两个数字作为字符串。

这些数字可能⾮常⼤(可能不适合int long int int),或许相乘在计算机可能溢出了,所以任务是找到这两个数字的乘积。

1 Input : num1 = 41542 num2 = 514543 Output : 21373991645 Input : num1 = 6541541541514545454154154546 num2 = 635165615631563165451451465146547 Output : 41549622603955309777243716069997997007620439937711509062916 我们可以基于数学思想来分解两个⼤整数的相乘问题 从输⼊的第⼆个数字的最后⼀位开始乘以输⼊的第⼀个数字。

然后,我们将第⼆个数字的倒数第⼆位数字与第⼀个数字相乘,依此类推。

将所有这些乘法相加。

在相加时,将第 i个乘法移位了。

以下解决⽅案中使⽤的⽅法是仅保留⼀个数组以获取结果。

循环遍历所有数字的第⼀个和第⼆个数字,并将结果添加到适当的位置。

其时间复杂度为 O(m * n),空间复杂度为 O(m+n),m 和 n 分别为两个⼤整数字符串的长度。

1package algorithm;23/**4 * ⼤整数相乘问题5*/6public class BIgIntMultiply {7/**8 * 以字符串的形式输⼊两个⼤整数做乘法9 *10 * @param num1 整数111 * @param num2 整数212 * @return13*/14private static String multiply(String num1, String num2) {15int len1 = num1.length();16int len2 = num2.length();17if (len1 == 0 || len2 == 0)18return "0";1920/* 将结果数以相反的顺序保存在数组中 */21int[] result = new int[len1 + len2];2223/* 以下两个索引⽤于查找结果中的位置(移位) */24int i_n1 = 0;25int i_n2 = 0;2627/* 在num1中从右到左 */28for (int i = len1 - 1; i >= 0; i--) {29/* 临时保存需要进位的数 */30int carry = 0;31int n1 = num1.charAt(i) - '0';3233/* 在num2中每个数字的乘法运算后向左移动位置 */34 i_n2 = 0;3536/* 在num2中从右向左移动 */37for (int j = len2 - 1; j >= 0; j--) {38/* 取第⼆个数字的当前数字 */39int n2 = num2.charAt(j) - '0';4041/* 将当前数字与第⼀个数字相乘,然后将结果添加到先前存储的结果charAt当前位置 */42int sum = n1 * n2 + result[i_n1 + i_n2] + carry;4344/* ⽤于下⼀个迭代相加 */45 carry = sum / 10;4647/* 存储结果 */48 result[i_n1 + i_n2] = sum % 10;4950 i_n2++;51 }5253/* 到最后还有进位值则移位放上去 */54if (carry > 0)55 result[i_n1 + i_n2] += carry;5657/* 在num1中的每个数字重复后向左移动位置 */58 i_n1++;59 }6061/* 忽略最右边的0 */62int i = result.length - 1;63while (i >= 0 && result[i] == 0)64 i--;6566/* 如果全部为'0', 表⽰num1或num2两者之⼀为'0'或者都为0 */67if (i == -1)68return "0";6970/* ⽣成结果字符串 */71 StringBuilder s = new StringBuilder();72while (i >= 0) {73 s.append(result[i--]);74 }7576return s.toString();77 }7879public static void main(String[] args) {80 String str1 = "-1235421415454545454545454544";81 String str2 = "-1714546546546545454544548544544545";8283// String str1 = "1234";84// String str2 = "5678";8586if (str1.charAt(0) == '-' &&87 str2.charAt(0) != '-')88 {89 str1 = str1.substring(1);90 System.out.println("-");91 }92else if (str1.charAt(0) != '-' &&93 str2.charAt(0) == '-')94 {95 str2 = str2.substring(1);96 System.out.println("-");97 }98else if (str1.charAt(0) == '-' &&99 str2.charAt(0) == '-')100 {101 str1 = str1.substring(1);102 str2 = str2.substring(1);103 }104/*105 result: 2118187521397235888154583183918321221520083884298838480662480 106 copy from console: 2118187521397235888154583183918321221520083884298838480662480 107*/108 System.out.println(multiply(str1, str2));109110 }111 }。

实验报告长整数四则运算

实验报告长整数四则运算

实验报告:长整数四则运算实验者:唐怡04120082 题目:设计一个实现任意长的整数进行加法运算的演示程序一.需求分析1.本演示程序中,长整数为任意长的带符号的长整数的输入及求加法后输出的长整数形式为每四位一组,组间用逗号隔开,输入以“回车符”为结束标志。

2.程度执行的命令包括:1)构造整数1,2)构造整数2,3)做加法运算,4)结束3.测试数据(1)0;0;应输出“0”(2)-2345,6789;-7654,3211;应输出“-1,0000,0000”(3)-9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”(4)1,0001,0001;-1,0001,0001;应输出“0”(5)1,0001,0001;-1,0001,0000;应输出“1”(6)-9999,9999,9999;-9999,9999,9999;应输出“-1,9999,9999,9998”(7)1,0000,9999,9999;1;应输出“1,0001,0000,0000”。

二.概要设计为实现上述程序功能,应以有序表实现长整数的存储,为此,需要抽象数据类型:有序表1.有序表的抽象数据类型定义为:ADT Dulinklist{数据对象:D={ai|ai为带符号整数,1,2,…,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai属于集合D,ai-1<ai,i=2,…..,n}基本操作:InitDulinklist(&)操作结果:构造一个空的有序表LDestroyDulinklist(&)初始条件:有序表L已存在操作结果:销毁有序表LDulinklistLength(L)初始条件:有序表L已存在操作结果:返回有序表L的长度DulinklistEmpty(L)初始条件:有序表L已存在操作结果:若有序表L为空表,则返回TUER,否则返回FALSEGetElem(L,pos)初始条件:有序表L已存在操作结果:若干1〈=POS〈=LENGTH(L),则返回有序表L中第POS个数据元素。

基于FFT的大整数乘法

基于FFT的大整数乘法

基于FFT 的大整数乘法1背景对于两个长度为n 的大整数,普通的大整数乘法的时间复杂度是()2n O ,而采用一种精心构造的分治算法,则可以将时间复杂度降低为()()585.13log 2n O n O ≈。

此处则是受到快速傅立叶变换算法的启发,提出一种新的大整数乘法,该算法基于模-p 的有限域运算,采用类似于FFT 的算法,可以将大整数乘法的时间复杂度降低为()5.1n O ,甚至,从某种意义上说,可以达到()n n O log 。

2 基础2.1 FFT (可以参考《算法导论》及《算法概论》相关内容)对于两个n-1次多项式3 基于FFT 的大整数乘法3.1大整数的表示方法为简便起见,这里只考虑10进制大整数,但是这样并不会失去其一般性。

对于一个10进制整数,可以将其表示为:()01221110101010a a a a A n n n n +⨯++⨯+⨯=----这样,就可以将一个大整数对应到一个n-1次多项式上去:()012211a x a x a x a x A N n n n n A ++++=---- ,其中{}9,8,7,6,5,4,3,2,1,0∈i a3.2大整数的乘法对于两个十进制大整数A N 和B N ,设A N 各个位上的数字如下:0121a a a a n n --而B N 各个位上的数字如下:0121b b b b n n --另外记多项式()012211a x a x a x a x A n n n n ++++=---- ,()012211b x b x b x b x B n n n n ++++=----于是有()10A N A =,()10B N B =。

记大整数B A C N N N ⨯=,多项式()()()x B x A x C ∙=则有:()()()101010C B A N N N B A C =⨯=⨯=于是已知A N 和B N ,要得到C N ,可以采用如下方法:于是,关键的问题是找到一个有效的算法以计算()()()x B x A x C ∙=。

大数乘法算法

大数乘法算法

大数乘法算法引言在计算机科学领域的算法中,大数乘法是一个经典且重要的问题。

它涉及到将两个较大的数相乘,可能超出常规数据类型的表示范围。

因此,需要设计一种高效的算法来处理这个问题。

本文将深入探讨大数乘法算法及其相关概念。

传统乘法算法传统的乘法算法是我们从小学时就学习的算法。

它将两个数的每一位相乘,然后将乘积逐位相加。

以下是一个简单的例子:123× 45-----615 (5 × 123)492 (4 × 123,向左移一位,相当于乘以10)-----5535 (615 + 492)我们可以看到,传统乘法算法需要逐位相乘,并进行进位操作。

对于较大的数,这种算法会变得非常耗时。

大数乘法算法大数乘法算法是专门用来解决大数相乘问题的算法。

下面将介绍两种常见的大数乘法算法:分治法和Karatsuba算法。

分治法分治法是一种将问题分解成子问题并分别解决的算法。

对于大数乘法,可以将两个数分成两半,然后将每个子问题的解相加得到最终的结果。

以下是分治法的步骤:1.将两个数分别拆分成两个子数。

例如,将123和45分别拆分成12、3和4,5。

2.对每个子问题递归地应用大数乘法算法。

例如,计算12 × 4、3 × 5。

3.将每个子问题的结果相加。

例如,计算12 × 4 + 3 × 5。

4.合并子问题的结果并返回最终的乘积。

使用分治法可以显著减少计算量,因为子问题的规模较小。

然而,分治法仍然需要进行递归操作,因此对于非常大的数,仍然存在一定的效率问题。

Karatsuba算法Karatsuba算法是一种改进的大数乘法算法,它比传统的乘法算法更高效。

Karatsuba算法的核心思想是利用数的二进制表示将乘法问题转化为更小的子问题。

以下是Karatsuba算法的步骤:1.将两个数用二进制表示,并找到二进制表示中位数相同的位置。

例如,对于10和11(二进制表示为1010和1011),找到相同的中位数为第2位。

课程设计实验报告长整型数四则运算.

课程设计实验报告长整型数四则运算.

数据结构实验报告题目:长整型数四则运算学院计算机学院专业软件工程年级班别2010级1班成绩____________________2012年7月1日目录课程设计实验报告 (1)一、实验概要..................................................................................................................................... - 1 -二、实验目的..................................................................................................................................... - 1 -三、实验环境..................................................................................................................................... - 1 -四、抽象数据类型的定义................................................................................................................. - 1 -五、存储结构的定义......................................................................................................................... - 1 -六、算法设计..................................................................................................................................... - 2 -六、程序运行情况........................................................................................................................... - 33 -七、实验总结................................................................................................................................... - 36 -实验中遇到的问题: (36)实验总结: (36)八、思考题............................................................................................................ 错误!未定义书签。

算法设计实验报告

实验报告院部:计算机信息与科学专业班级:计科1703学号:学生姓名:学期: 2019-2020-2}printf("\n\n");bubble(a, n);printf("冒泡递增排列为:\n");for (i = 0; i < n; i++) {printf("%d ", a[i]);}printf("\n");printf("\n");printf("99乘法表如下:\n");chengfa(1, 1);system("pause");return 0;}图1-1 运行结果printf("您输入的字符串超过最大长度,请重新输入!");scanf("%s", X);}printf("请输入字符串Y:");scanf("%s", Y);while (strlen(Y) > 200){printf("您输入的字符串超过最大长度,请重新输入!");scanf("%s", Y);}s = LCS(X, Y);printf("X和Y的LCS数: %d \n", s);printf("----------------分割线----------------\n"); printf("投资最大利润问题:\n");profit();}图2-1 运行结果图3-1 运行结果五实验小节通过本次实验,充分理解了动态规划的基本思想和程序的执行过程,并且能熟练编写相应的程序;同时,在编程的过程中,进一步加深理解动态规划算法的两个基本要素最优子结构性质和子问题的重叠性质,对上一次实验所学到的知识进行了进一步的巩固加强,学会了规避一些逻辑上的错误;熟练地掌握了典型的动态规划问题,能够运用动态规划思想分析问题的一般方法,对较简单的问题能够正确分析,设计出动态规划算法,并且能快速编程实现。

4位数字乘法器设计

4位数字乘法器设计
设计一个4位数字乘法器需要考虑多个方面,包括硬件设计和
算法实现。

首先,在硬件设计方面,可以使用逻辑门、寄存器和加法器等
元件来实现。

可以将两个4位的输入数分别存储在两个寄存器中,
然后使用逻辑门和加法器来实现乘法运算。

具体来说,可以使用乘
法器的部分积计算方法,将被乘数的每一位与乘数的每一位相乘,
并将结果相加得到最终的乘积。

另外,还需要考虑溢出和进位的处理。

在乘法过程中,可能会
产生进位,需要确保算法能够正确处理进位。

同时,乘法的结果可
能会超出4位的表示范围,因此需要考虑如何处理溢出的情况。

在算法实现方面,可以采用乘法的基本原理,逐位相乘并累加
的方法来实现4位数字的乘法运算。

可以使用循环结构来逐位相乘
并累加,同时考虑进位和溢出的情况,确保算法的正确性和稳定性。

总的来说,设计一个4位数字乘法器需要综合考虑硬件设计和
算法实现两个方面,确保乘法器能够正确高效地进行4位数字的乘法运算。

任意长整数的乘法数据结构课程设计报告样本

课程设计说明书 NO.1任意长整数的乘法1、课程设计目的( 1) 较熟练地掌握数据结构( C语言) 课程的基本内容, 程序设计的基本方法与编程技巧。

( 2) 较熟练地掌握C语言程序编辑、编译、连接和运行的方法。

( 3) 经过运行C程序, 了解C语言的特点, 培养学生应用计算机解决和处理实际问题的思维方法与基本能力。

2、课程设计方案论证2.1 设计思路( 1) 输入的形式和输入值的范围:用户从键盘输入2个任意长度的长整数, 输入的时候是按4个为一段输入的, 即一段一段输入的, 求它们的乘积的大小, 并将结果在屏幕上显示; 2个长整数的输入没有大小的限制, 要输入多大的数据,就能够输入多大的数据。

( 2) 输出的形式:输出直接在屏幕上显示2个任意长度的长整数的乘积大小。

( 3) 程序所能达到的功能:对于用户输入的任意长度的2个的长整数, 能够正确没有错误的显示结果, 和电脑附件中的计算器的计算值要一致; 能够准确无误地显示结果。

( 4) 测试数据:如输入1000 1000 和1111 2个长整数后, 显示0111 1111 1111 1000的话, 就是正确的结果形式。

如输入1111 1111 1111和1111 2个长整数后, 结果显示0123 4444 4444 4322就不是正确结果, 因为这2个长整数的积为0123 4444 4444 43212.2概要设计( 1) 抽象数据类型的定义为了实现任意长整数的乘法, 因为这种运算存在进位和位移等操作, 因此选择双链表的结构体( 如图2.2.1和图2.2.2) , 它有一个data, left, right; 考虑到data表示的数据的范围, 使它只接受4个数字的整数, 这样一个长整数就分为若干段, 每一段为4个数沈阳大学课程设计说明书 NO2字, 便于进位和借位以及位移的操作, 用户在输入时就是每次输入4个数字。

( 2) 主程序的流程主程序是首先调用初始化2个长整数的函数, 用户4个数字一段一段地输入2个长整数, 用双链表的形式和头插法的形式建立, 返回2个长整数的头节点; 建立完2个长整数后,就开始进行2个长整数的乘积的运算了;首先将第一个长整数的全部去乘第2个长整数的最后一段, 这样得到一个长整数; 接着将第一个长整数的全部去乘第2个长整数的倒数第2段; 这样得到一个长整数, 可是要向左位移4位; 这次得到的长整数要和上一次相加, 得到一个新的长整数; 接着接着将第一个长整数的全部去乘第2个长整数的倒数第3段, 得到一个长整数, 再和前面相加;依次进行, 一直到已经到第一个长整数的全部乘于了第2个长整数的最高1段, 那么乘法就结束了; 这时将得到的长整数从高位到低位一段一段, 4个4个数字显示在屏幕上, 程序就运行结束了。

计组-4位乘法器实验报告

实验4位乘‎法器实验报‎告姓名:X XX 学号:X XX 专业:计算机科学‎与技术课程名称:计算机组成‎同组学生姓‎名:无实验时间:实验地点:指导老师:XXX一、实验目的和‎要求1.熟练掌握乘‎法器的工作‎原理和逻辑‎功能二、实验内容和‎原理实验内容:根据课本上‎例3-7的原理,来实现4位‎移位乘法器‎的设计。

具体要求:1. 乘数和被乘‎数都是4位‎2. 生成的乘积‎是8位的3. 计算中涉及‎的所有数都‎是无符号数‎4.需要设计重‎置功能5.需要分步计‎算出结果(4位乘数的‎运算,需要四步算‎出结果)实验原理:1.乘法器原理‎图2.本实验的要‎求:1.需要设计按‎钮和相应开‎关,来增加乘数‎和被乘数2.每按一下M‎13,给一个时钟‎,数码管的左‎边两位显示‎每一步的乘‎积3.4步计算出‎最终结果后‎,LED灯亮‎,按RESE‎T重新开始‎计算三、主要仪器设‎备1.Spart‎a n-III开发‎板1套2.装有ISE‎的PC机1台四、操作方法与‎实验步骤实验步骤:1.创建新的工‎程和新的源‎文件2.编写ver‎ilog代‎码(top模块‎、d ispl‎a y模块、乘法运算模‎块、去抖动模块‎以及UCF‎引脚)3.进行编译4.进行Deb‎u g 工作,通过编译。

5.. 生成FPG‎A代码,下载到实验‎板上并调试‎,看是否与实‎现了预期功‎能操作方法:TOP:modul‎e alu_t‎o p(clk, switc‎h, o_seg‎, o_sel‎);input‎wire clk;input‎wire[4:0] switc‎h;outpu‎t wire [7:0] o_seg‎;// 只需七段显‎示数字,不用小数点‎outpu‎t wire [3:0] o_sel‎;// 4个数码管‎的位选wire[15:0] disp_‎n um;reg [15:0] i_r, i_s;wire [15:0] disp_‎c ode;wire o_zf; //zero detec‎t oriniti‎a lbegin‎i_r <= 16'h1122‎;//0x112‎2i_s <= 16'h3344‎;//0x334‎4endalu M1(i_r, i_s, switc‎h[4:2], o_zf, disp_‎c ode);displ‎a y M3(clk, disp_‎n um, o_seg‎, o_sel‎);assig‎n disp_‎n um = switc‎h[0]?disp_‎c ode:(switc‎h[1] ? i_s : i_r);endmo‎d uleDISPL‎A Y:modul‎e displ‎a y(clk, disp_‎n um, o_seg‎, o_sel‎);input‎wire clk;input‎wire [15:0] disp_‎n um; //显示的数据‎outpu‎t reg [ 7:0] o_seg‎;//七段,不需要小数‎点outpu‎t reg [ 3:0] o_sel‎;//4个数码管‎的位选reg [3:0] code = 4'b0;reg [15:0] count‎= 15'b0;alway‎s @(posed‎g e clk)begin‎case (count‎[15:14])2'b00 :begin‎o_sel‎<= 4'b1110‎;code <= disp_‎n um[3:0];end2'b01 :begin‎o_sel‎<= 4'b1101‎;code <= disp_‎n um[7:4];end2'b10 :begin‎o_sel‎<= 4'b1011‎;code <= disp_‎n um[11:8];end2'b11 :begin‎o_sel‎<= 4'b0111‎;code <= disp_‎n um[15:12];endendca‎s ecase (code)4'b0000‎: o_seg‎<= 8'b1100‎0000;4'b0001‎: o_seg‎<= 8'b1111‎1001;4'b0010‎: o_seg‎<= 8'b1010‎0100;4'b0011‎: o_seg‎<= 8'b1011‎0000;4'b0100‎: o_seg‎<= 8'b1001‎1001;4'b0101‎: o_seg‎<= 8'b1001‎0010;4'b0110‎: o_seg‎<= 8'b1000‎0010;4'b0111‎: o_seg‎<= 8'b1111‎1000;4'b1000‎: o_seg‎<= 8'b1000‎0000;4'b1001‎: o_seg‎<= 8'b1001‎0000;4'b1010‎: o_seg‎<= 8'b1000‎1000;4'b1011‎: o_seg‎<= 8'b1000‎0011;4'b1100‎: o_seg‎<= 8'b1100‎0110;4'b1101‎: o_seg‎<= 8'b1010‎0001;4'b1110‎: o_seg‎<= 8'b1000‎0110;4'b1111‎: o_seg‎<= 8'b1000‎1110;defau‎l t: o_seg‎<= 8'b1000‎0000; endca‎s ec ount‎<= count‎+ 1;endendmo‎d uleUCF:Net “clk”loc=”T9”;Net “o_seg‎[0]” loc=”E14”;Net “o_seg‎[1]” loc=”G13”;Net “o_seg‎[2]” loc=”N15”;Net “o_seg‎[3]” loc=”P15”;Net “o_seg‎[4]” loc=”R16”;Net “o_seg‎[5]” loc=”F13”;Net “o_seg‎[6]” loc=”N16”;Net “o_seg‎[7]” loc=”P16”;Net “o_sel‎[0]” loc=”D14”;Net “o_sel‎[1]” loc=”G14”;Net “o_sel‎[2]” loc=”F14”;Net “o_sel‎[3]” loc=”E13”;Net “switc‎h[0]” loc=”M10”;Net “switc‎h[1]” loc=”F3”;Net “switc‎h[2]” loc=”G4”;Net “switc‎h[3]” loc=”E3”;Net “switc‎h[4]” loc=”F4”;2.ALU控制‎器的实现:输入用2 + 6 = 8 个拨动开关‎ALUop‎控制模式:2个拨动开‎关功能域Fu‎n ct控制‎模式:6个拨动开‎关 输出用3 个LED显‎示TOP:modul‎e aluc_‎t op(clk, switc‎h, o_seg‎, o_sel‎);input‎wire clk;input‎wire[7:0] switc‎h;outpu‎t wire [7:0] o_seg‎;// 只需七段显‎示数字,不用小数点‎outpu‎t wire [3:0] o_sel‎;// 4个数码管‎的位选wire[15:0] disp_‎n um;reg [15:0] i_r, i_s;wire [15:0] disp_‎c ode;wire [2:0] alu;initi‎a lbegin‎i_r <= 16'h1122‎;//0x112‎2i_s <= 16'h3344‎;//0x334‎4endaluc M1(switc‎h[7:2],alu);alu M2(i_r,i_s,alu,disp_‎c ode);displ‎a y M3(clk, disp_‎n um, o_seg‎,o_sel‎);assig‎n disp_‎n um = switc‎h[0]?disp_‎c ode:(switc‎h[1] ? i_r: i_s); endmo‎d uleinput‎wire clk;input‎wire [15:0] disp_‎n um; //显示的数据‎outpu‎t reg [ 7:0] o_seg‎;//七段,不需要小数‎点outpu‎t reg [ 3:0] o_sel‎;//4个数码管‎的位选reg [3:0] code = 4'b0;reg [15:0] count‎= 15'b0;alway‎s @(posed‎g e clk)begin‎case (count‎[15:14])2'b00 :begin‎o_sel‎<= 4'b1110‎;code <= disp_‎n um[3:0];end2'b01 :begin‎o_sel‎<= 4'b1101‎;code <= disp_‎n um[7:4];end2'b10 :begin‎o_sel‎<= 4'b1011‎;code <= disp_‎n um[11:8];end2'b11 :begin‎o_sel‎<= 4'b0111‎;code <= disp_‎n um[15:12];endendca‎s ecase (code)4'b0000‎: o_seg‎<= 8'b1100‎0000;4'b0001‎: o_seg‎<= 8'b1111‎1001;4'b0010‎: o_seg‎<= 8'b1010‎0100;4'b0011‎: o_seg‎<= 8'b1011‎0000;4'b0100‎: o_seg‎<= 8'b1001‎1001;4'b0101‎: o_seg‎<= 8'b1001‎0010;4'b0110‎: o_seg‎<= 8'b1000‎0010;4'b0111‎: o_seg‎<= 8'b1111‎1000;4'b1000‎: o_seg‎<= 8'b1000‎0000;4'b1001‎: o_seg‎<= 8'b1001‎0000;ALUC:modul‎e aluc(input‎wire[7:2] switc‎h,outpu‎t reg[2:0] alu);alway‎s@(switc‎h)begin‎if(switc‎h[2]==0&&switc‎h[3]==0)alu=3’b010;else if(switc‎h[2]==0&&switc‎h[3]==1)alu=3’b110;else if(switc‎h[2]==1&&switc‎h[4]==0&&switc‎h[5]==0&&switc‎h[6]==0&&switc‎h[7]==0)alu=3’b010;elseif(switc‎h[2]==1&&switc‎h[4]==0&&switc‎h[5]==0&&switc‎h[6]==1&&switc‎h[7]==0) alu=3’b110;elseif(switc‎h[2]==1&&switc‎h[4]==0&&switc‎h[5]==1&&switc‎h[6]=0&&switc‎h[7]==0) alu=3’b000;elseif(switc‎h[2]==1&&switc‎h[4]==0&&switc‎h[5]==1&&switc‎h[6]=0&&switc‎h[7]==1) alu=3’b001;elseif(switc‎h[2]==1&&switc‎h[4]==1&&switc‎h[5]==0&&switc‎h[6]=1&&switc‎h[7]==1) alu=3’b111;endendmo‎dule五、实验结果与‎分析程序运行成‎功后,将代码下载‎到实验板s‎parta‎n3上验证‎。

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