16乘16乘法器电路_第1页
16乘16乘法器电路_第2页
16乘16乘法器电路_第3页
16乘16乘法器电路_第4页
16乘16乘法器电路_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 摘 要 随着现代数字技术的高速发展,乘法器在高速实时信号处理中特别是在数字信号处理和数字图像处理系统中起到了重要的作用。乘法器已经是现代计算机中必不可少的一部分。随着乘数和被乘数位数的增加,乘法器电路中的加法器位树也要相应的增加。通过研究CLA电路的特性,也可以在乘法器中开发出更快的加法阵列。纯组合逻辑构成的乘法器虽然工作速度比较快,但过于占用硬件资源,难以实现宽位乘法器。这里介绍由十六位加法器构成的以时序逻辑方式设计的十六位乘法器,具有一定的实用价值,而且由FPGACPLD构成实验系统后,可以很容易的用ASIC大型集成芯片来完成,性价比高,可操作性强。其运算速度是决定逻辑运算单元(ALU)

2、工作频率的关键,并在很大程度上决定了系统的性能。由于DSP芯片是串行执行,速度慢、功耗大,所以现在高速实时信号处理中一般采用FPGACPLD来进行并行处理。现在很多系统设计中,要求速度越来越快,功耗越来越小,因此研究高速低功率的乘法器相当重要。在此次课设中我将在modelsim的环境下完成十六位的乘法器的设计。 关键词 FPGA;加法器;Modelsim;锁存器,;移位寄存器 目 录引言11总体电路结构设计2 1.1电路功能与性能2 1.2关键功能电路设计3 1.3电路接口3 1.4电路功能框图5 1.5验证方案62模块的设计7 2.1 输入信号处理模块设计8 2.2 16位移位寄存器模块9

3、2.3 16位计数器模块9 2.4 输出信号处理模块103 设计仿真与测试11 3.1仿真与测试的功能列表11 3.2 仿真平台构建和仿真结果11 3.2.1 顶层仿真平台与激励11 3.2.2 电路功能仿真结果12 3.2.3 电路后仿真结果14 3.3 测试环境的搭建与测试结果15 3.3.1 测试环境模拟15 3.3.2 电路测试结果154 电路约束与综合实现16 4.1 时序约束16 4.2 引脚锁定约束17 4.3 电路综合报告18 4.4 设计实现与下载19结 论20参考文献21引言随着数字电子技术的高速发展,EDA技术日益普及,可编程器件FPGACPLD也得到了广泛的应用。本次课

4、程设计要完成十六位乘法器的电路仿真。硬件乘法器,其基础就是加法器结构,其模型就是基于“移位和相加”的算法。在该算法中,乘数与被乘数都是16位,所以输出应为一个32位的数。所需器件,乘法运算控制电路控制乘法运算;16位加法计数器的输出值控制移位次数;16位移位寄存器控制被乘数右移;32位加法器进行乘数与锁存器中的数相加。采用时序逻辑设计方法,电路将部分已经得到的乘积结果右移,然后与乘积项相加并保存和值,反复迭代上述步骤直到计算出最终乘积。乘法运算控制电路的START信号的上升沿与高电平有两个功能,即32位寄存器清零和将被乘数ain加载至移位寄存器中;它的低电平则作为乘法使能信号1。乘法时钟信号从

5、乘法运算控制电路的CLK输入。与此同时一16位加法计数器的输出值控制移位次数及何时将结果输出。当被乘数加载至16位右移寄存器后,随着每个时钟节拍,由低位至高位逐位移出。当被乘数移出位为1时,与门打开16位乘数bin在同一节拍进入16位加法器与上一次锁存在32位的寄存器的高16位进行相加,其和在下一时钟节拍的上升沿向右移一位锁进此锁存器中;当被乘数移出位为0时,与门全零输出,此时锁存器中的值在下一时钟节拍的上升沿向右移一位锁进此锁存器中。如此往复,直至16个时钟脉冲后,由乘法运算控制电路控制乘法运算过程自动中止,乘法控制电路输出高电平,点亮发光管,以示乘法结束。此时32位锁存器中的输出值即为最后

6、乘积。此乘法器的优点是节省芯片资源,它的核心元件只有一个16位加法器,其运算速度取决于输出时钟频率。 1总体电路结构设计1.1电路功能与性能16位乘法器的功能主要体现7个部分进行16*16的乘法计算但其设计原理可用来计算更多位的乘法计算。电路的具体功能可罗列如下:(1)乘法运算控制电路ARICTL输入一信号START,与其同步时钟。START信号的上升沿将32位锁存器清零,其高电平与CLK上升沿将被乘数加载至16位移位寄存器中,低电平作为乘法运算的使能信号。(2)将START与CLK输出信号接入16位移位寄存器的LOAD与CLK输入接口,将乘数进行从高位到低位依次移出,其输出信号作为ANDAR

7、ITH的一信号输入,控制把0还是乘数送入加法器。(3)ANDARITH电路控制将0还是被乘数送到加法器中,若乘数移出位为1,则其把被乘数送到加法器;若乘数移出位为0,则其把0送到加法器。(4)加法运算,在计数器计数值小于15时, 32位锁存器的值的高16位就会送到加法器中,若此时ANDARITH送来被乘数则其与被乘数相加,若为0则其与0相加。(5)32位移位寄存器,把加法器送来的值向右移一位,左端添零补齐,并将移位后的结果送到32位锁存器中。(6)将START与CLK输出信号接入32位锁存器的CLR片选接口与CLK时钟输入接口,其用来将32位移位寄存器送来的数据进行锁存,并控制是将其值的高16

8、位送进加法器还是输出运算结果:当计数器计数值小于15时,则将其值的高16位送到加法器,若计数器计数值等于15,则输出运算结果。(7)将CLK信号接入16位计数器的时钟输入接口,通过计数来控制移位寄存器的移位次数,以及运算完成输出指示:计数器计数值为16时,done输出高电平,其接口LED灯将被点亮,即乘法运算结束;计数器计数值为15时,32位锁存器的输出值即为最后乘积;计数器计数值小于15时,32位锁存器将其值高16位送到加法器中。1.2关键功能电路设计 本电路设计的主要难点在于如何将两个16位的二进制数相乘,经过功能分析,决定采用加法器的方式来实现乘法运算。先将被乘数加载到移位寄存器中,锁存

9、器清零。当被乘数移出位为1时则ANDARITH打开将乘数加载到锁存器,与锁存器中值的高16位相加,并将结果向右移一位;当被乘数移出位为0,则ANDARITH把0加载到锁存器,即锁存器中的数向右移一位,其高16位不与乘数相加,只是向右移一位,当乘数最后一位移出后,最后锁存器中的值即是乘积结果。当输入信号输入时其相应的状态如表1.1表1.1各器件状态控制表 输入信号当前状态乘法控制器移位寄存器加法器锁存器计数器rstn清零清零清零清零清零STARTSTART上升沿将锁存器清零;高电平将乘数送到移位寄存器中;低电平作为乘法运算的使能端乘数加载到移位寄存器中清零清零清零,开始计数1.3电路接口 整个设

10、计接口可以分为4部分,分别是线路START信号时钟,数据输入数据和时钟,接收使能与完成指示信号,数据显示接口。需要注意的是这里所有的信号(所有的输入,输出,START信号,及完成指示信号2)都来自开关或按键。注意拨档开关设定两个输入数据,当输入第一个数据时,完成拨档开关设定后,由一个控制信号控制完成设定值的输入,该信号由按键完成。具体接口如下表1.2。表1.2接口功能表名称IO属性 描述备注clkin 输入时钟,2M频率rstnin 异步清零信号,低电平清零,高电平进行运算低电平有效STARTin上升沿将32位锁存器清零;其高电平与CLK上升沿将被乘数加载至16位移位寄存器中;低电平作为乘法运

11、算的使能信号S0in为0输入乘数,为1输入被乘数S1in与s2结合控制输入乘数或被乘数的哪位:若为00输入ain3:0(或bin3:0),为01输入ain7:4(或bin7:4),为10输入ain11:8(或bin11:8),为11输入ain15:12(或bin15:12)S2in同s1S3in在s1,s2结合的情况下,输入乘数与被乘数的相应位数S4in在s1,s2结合的情况下,输入乘数与被乘数的相应位数S5in在s1,s2结合的情况下,输入乘数与被乘数的相应位数S6in在s1,s2结合的情况下,输入乘数与被乘数的相应位数S7out控制输出相乘结果是高位还是低位,s7为1输出低位,s7为0输出

12、高位doneout输出乘法运算结束信号1.4电路功能框图依照功能路分为7个功能模块:加法器模块ADD_16,用于乘数与锁存器中值的高16位做加法;乘法运算控制模块ARICTL,用于控制锁存器清零,将被乘数送到移位寄存器;16位移位寄存器模块Shift_16,用于被乘数向右移位输出;16位计数器模块Cnt_16,用于控制移位次数及何时将结果输出;ANDARITH模块,用于控制乘数是否与锁存器值的高16位相加;32位锁存器模块Data_Latch,用于锁存32位移位寄存器中的值;32位移位寄存器模块Shift_32,用于将进行加法后的值右移一位;最后乘法运算结束后输出最后值。电路的功能框图如下图1

13、所示。图1设计电路图 在图1中,模块Shift_16用来将乘数移位移出,在START信号高电平与CLK上升沿将被乘数加载至16位移位寄存器中,并在每个CLK时钟上升沿将乘数从高位到低位依次移出,并将移出位送至ANDARITH模块。模块ANDARITH用于控制乘数是否与锁存器值的高16位相加,当被乘数移出位为1时,ANDARITH电路打开16位乘数bin在同一节拍进入加法器中,与32位的锁存器送来其值的高16位进行相加;当被乘数移出位为0时,ANDARITH电路全零输出,及此时锁存器中的值与0相加,及在下一时钟节拍的上升沿向右移一位锁进此锁存器中。Data_Latch模块用于锁存32位移位寄存器

14、中的值,当计数器计数小于16时,将上一次锁存结果送到加法器中与乘数或者与0相加;当计数器计数等于15时,将锁存结果输出,及最后的相加结果。ADD_16模块用于乘数与锁存器中值的高16位做加法,在时钟上升沿将ANDARITH模块送来的值与32位锁存器模块Data_Latch送来的值进行相加,并将结果送到32位移位寄存器模块Shift_32。Shift_32模块用于将进行加法后的值右移一位,在时钟上升沿将ADD_16加法器模块送来的值向右移一位,并将结果送到32位锁存器模块Data_Latch中。Cnt_16模块用来进行计数来控制16位移位寄存器的移位次数及32位锁存器何时将结果输出。当计数值小于

15、15时,16位移位寄存器依次输出,32位锁存器将值送到加法器中进行加法计算;当计数值等于15时,16位移位寄存器清零,32位锁存器将结果输出,且指示灯被点亮。其流程图如下图2所示。1.5验证方案课程设计的验证主要有两个方面的内容:一是在Modelsim环境下进行运行:按照电路图将其写为EDA语言,需要注意的是没有语法错误且将所有的功能编入相应的代码,并加入相应的激励;二是硬件验证在电路箱上完成下载验证。激励的构造:首先要对CLK时钟及rstn置零信号进行设计,CLK时钟刚开始为0,以后每10个延时取反;rstn信号刚开始为0,把器件都清零,500个延时后取为1。然后对输入乘数与被乘数进行第一定

16、义,随后500个延时后将START信号为0,于是进行运算,再500个延时后,START信号变为1,及乘法运算结束;随后在1000个延时后对乘数与被乘数进行第二次定义,500个延时后将START信号为0,于是进行运算,在500个延时后,START信号变为1,及乘法运算结束;在1000个延时后对乘数与被乘数进行第三次定义,500个延时后将START信号为0,于是进行运算,在500个延时后,START信号变为1,及乘法运算结束这样循环就可以进行多次乘法运算3。最后对激励编译结束。另一方面是硬件验证在电路箱上完成下载验证:将源代码送入QuartusII软件中运行,编译正确后,对其进行引脚的锁定,将s0

17、-s6与实验箱上的开关进行锁定,实现16位乘数与被乘数的输入:s0为0输入乘数,为1输入被乘数,s1与s2结合控制输入乘数或被乘数的哪位:若为00输入ain3:0(或bin3:0), 为01输入ain7:4 (或bin7:4),为10输入ain11:8(或bin11:8),为11输入图2设计流程图ain15:12(或bin15:12);s3-s6在s1,s2结合的情况下,输入乘数与被乘数的相应位数。s7控制输出相乘结果是高位还是低位,s7为1输出低位,s7为0输出高位,并将输出与LED灯连接,用来显示成绩结果,灯亮为0,灯灭为1。然后再编译,编译正确后运行;当START信号为1时把乘数与被乘数

18、的相应开关置到相应的数值后,将START信号置为0进行乘法运算,则LED灯就会两次输出相应的结果。2模块的设计设计共有4个功能模块,分别是:数据输入信号处理模块,16位移位寄存器模块,16位计数器模块,输出信号处理模块。2.1 输入信号处理模块设计输入接口如表2.1所示表2.1输入信号接口名称IO属性 描述备注clkin 输入时钟,2M频率rstnin 异步清零信号,低电平清零,高电平进行运算低电平有效STARTin上升沿将32位锁存器清零;其高电平与CLK上升沿将被乘数加载至16位移位寄存器中;低电平作为乘法运算的使能信号S0in为0输入乘数,为1输入被乘数S1in与s2结合控制输入乘数或被

19、乘数的哪位:若为00输入ain3:0(或bin3:0),为01输入ain7:4(或bin7:4),为10输入ain11:8(或bin11:8),为11输入ain15:12(或bin15:12)S2in同s1S3in在s1,s2结合的情况下,输入乘数与被乘数的相应位数S4in同s3S5in同s3S6in同s3输入信号处理模块abc主要完成16位二进制乘数与16位二进制乘数的输入,要用7个开关来完成其输入:开关s0-s6s0为0输入乘数,为1输入被乘数;s1与s2结合控制输入乘数或被乘数的哪位; s6-s3在s1,s2结合的情况下,输入乘数与被乘数的相应位数。例如s0为0(为1)时,在s1s2为0

20、0时s6,s5,s4,s3分别输入ain3:0(或bin3:0); 在s1s2为01时s6,s5,s4,s3分别输入ain7:4(或bin7:4);在s1s2为10时s6,s5,s4,s3分别输入ain11:8(或bin11:8);在s1s2为11时s6,s5,s4,s3分别输入ain15:12(或bin15:12)。输入信号处理模块abc的接口信号有clk,rstn,start,s0,s1,s2,s3,s4,s5,s6具体如上表2.1所示。2.2 16位移位寄存器模块16位移位寄存器模块用于被乘数向右移位,主要功能如下。在START信号低电平且CLK时钟信号的上升沿被乘数将向右移一位输出,左

21、端添零补齐。其波形如下图3。图3 16位移位寄存器波形图2.3 16位计数器模块计数器模块用于计数从而控制16位移位寄存器的移位次数以及结束标志的显示。具体功能如下,其功能流程图如图4所示。(1)在START信号低电平的作用下且CLK时钟信号处于上升沿时当计数值小于15时进行加1运算。(2)当计数值小于15时每记一个数16位移位寄存器中的被乘数将会向右移一位输出,从而来控制移位次数。(3)当计数值等于16时则done将输出低电平与其相连的LED灯就会被点亮,从而提醒乘法运算结束。Srstn?CLKKi=0STARTi=15i=0i=i+1i=0图4 计数器的流程图2.4 输出信号处理模块因为是

22、16位二进制乘数与16位二进制被乘数进行乘法运算,所以输出应为32位。在电路板上用16个LED灯两次显示,一个开关控制:当开关s7为0时输出结果的低16位;当开关s7为0时输出结果的高16位。灯亮输出为1,灯灭输出为0 。当乘法运算结束后,及当计数器计数为16时输出一个指示信号。其接口如下表5。表5输出信号接口名称IO属性 描述备注S7out控制输出相乘结果是高位还是低位,s7为1输出低位,s7为0输出高位doneout乘法运算完成指示信号,3 设计仿真与测试功能验证分为两部分,一部分是电路功能与时序的软件仿真,采用Moldsim完成;另一部分是将配置文件下载后在开发板上对设计进行测试,通过开

23、关、按键、LED灯等方式进行。3.1仿真与测试的功能列表功能仿真与测试要针对每一条设计需要实现的功能进行。设计中要求实现的、需要仿真与测试功能列表如下4:(1)置零功能当rstn信号低有效时,电路应处于置零状态:运行控制信号处于无效(低电平)、任何输入没有响应;当置零信号变为高电平时,电路正常工作。(2)时钟信号当有时钟时电路正常工作;没有时钟信号时,除复位外所有的输入没有响应,所有的输出没有变化。(3)乘法运算控制功能信号STARTSTART信号的上升沿将32位寄存器清零;START信号高电平有两个将被乘数ain加载至移位寄存器中;它的低电平则作为乘法使能信号。(4)s0-s6的锁定s0为0

24、输入乘数,为1输入被乘数;s1与s2结合控制输入乘数或被乘数的哪位: s6-s3在s1,s2结合的情况下,输入乘数与被乘数的相应位数。例如s0为0(为1)时,在s1s2为00时s6,s5,s4,s3分别输入ain3:0(或bin3:0); 在s1s2为01时s6,s5,s4,s3分别输入ain7:4(或bin7:4);在s1s2为10时s6,s5,s4,s3分别输入ain11:8(或bin11:8);在s1s2为11时s6,s5,s4,s3分别输入ain15:12(或bin15:12)。如若开关控制输入乘数为89,16,15;控制被乘数输入为33,16,20。(5)乘积输出控制信号s7则s7控

25、制LED灯两次输出结果分别为2937,256,3003.2 仿真平台构建和仿真结果3.2.1 顶层仿真平台与激励START与CLK输出信号接入16位移位寄存器的LOAD与CLK输入接口,当START信号为0时将计数器清零,其高电平时与CLK时钟上升沿结合来控制计数。16位移位寄存器的输出值作为其输出信号作为ANDARITH的一信号输入,当其为0时,则ANDARITH把0送到加法器中;当其为1时,则ANDARITH把被乘数送到加法器中。计数器的计数值作为32位锁存器的一个控制信号,当计数值小于15时,锁存器将其值的高16位送到加法器中;当计数值等于15时将锁存的结果输出。加法器把ANDARITH

26、送来的值与32位锁存器送来的值进行相加;当计数器值为16时输出乘法运算结束指示信号。输入产生的方法:s0先置为0,对乘数进行输入,s1s2为00,输入ain3:0;s1s2为01,输入ain7:4; s1s2为10,输入ain11:8; s1s2为11,输入ain15:12,s6,s5,s4,s3在上述情况下依次输入1111,0000,0000,0000. 再将s0置为1,对被乘数进行输入,s1s2为00,输入bin3:0;s1s2为01,输入bin7:4; s1s2为10,输入bin11:8; s1s2为11,输入bin15:12,s6,s5,s4,s3在上述情况下依次输入0100,1000

27、,0000,0000.然后循环可输入多组数据。3.2.2 电路功能仿真结果图5输出为2937的波形图在仿真时输入了3组16位二进制乘数与被乘数,输出应为32位,图5 为乘数输入为89,被乘数输入为33时,输出成绩结果为2937的波形,其为输出yout每位值的波形;图6为乘数输入为16与被乘数输入为16,输出成绩结果为256时的波形,其为输出yout每位值的波形;图7为乘数输入为15与被乘数输入为20,输出成绩结果为300时的波形,其为输出yout每位值的波形;Clk为时钟信号每10个延时取反,rstn信号刚开始为0,把器件都清零,500个延时后取为1。START信号为高电平时运算,ain为乘数

28、输入,bin为被乘数的输入,yout为乘法结果的输出,done在运算结束时输出高电平,在运算时输出低电平。如上图输入为三组数据,则在每经过1000个延时后输出一个乘法结果。结果显示为十进制输入,十进制输出。图6输出为256的波形图3.2.3 电路后仿真结果图8为三组乘数与被乘数输出的仿真波形,仿真开始时CLK时钟刚开始为0,以后每10个延时取反;rstn信号刚开始为0,把器件都清零,500个延时后取为1。然后对输入乘数与被乘数进行第一定义,随后500个延时后将START信号为0,于是进行运算,再500个延时后,START信号变为1,及乘法运算结束;随后在1000个延时后对乘数与被乘数进行第二次

29、定义,500个延时后将START信号为0,于是进行运算,在500个延时后,START信号变为1,及乘法运算结束;在1000个延时后对乘数与被乘数进行第三次定义,500个延时后将图7输出为300的波形图START信号为0,于是进行运算,在500个延时后,START信号变为1,及乘法运算结束这样循环就可以进行多次乘法运算。最后对激励编译结束。图8 3组输入仿真波形3.3 测试环境的搭建与测试结果3.3.1 测试环境模拟此次设计要输入16位二进制的乘数和16位二进制的被乘数,在乘数与被乘数相乘以后输出一个32位的成绩结果。可以用7个开关来完成16位的乘数与被乘数的输入,设定开关s0s6,s0控制乘数

30、还是被乘数的输入,s0为0输入乘数,为1输入被乘数;s1与s2结合控制输入乘数或被乘数的哪位:若为00时s6s3输入ain3:0(或bin3:0),为01时s6s3输入ain7:4(或bin7:4),为10时s6s3输入ain11:8(或bin11:8),为11时s6s3输入ain15:12(或bin15:12);s6-s3在s1,s2结合的情况下,输入乘数与被乘数的相应位数。输出通过s7来控制,是高位输出,还是低位输出,并将其与LED灯连接,用来显示输出结果。当s7为0时,LED灯输出结果的低16位;当s7为1时,LED灯输出结果的低16位。当乘法运算结束后,输出指示信号。3.3.2 电路测

31、试结果输入信号的输入:(1)当s0为0时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入1100,1010,0000,0000,把s0置为1时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入1000,0100,0000,0000;(2)当s0为0时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入0000,1000,0000,0000,把s0置为1时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入0000,

32、1000,0000,0000;(3)当s0为0时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入1111,0000,0000,0000,把s0置为1时在s1s2为00,s1s2为01,s1s2为10,s1s2为11,s6,s5,s4,s3依次输入0100,1000,0000,0000;输出信号的输出:(1)s7为0时输出11001,s7为1时输出00000;(2)s7为0时输出00000,s7为1时输出00000;(3)s7为0时输出01100,s7为1时输出00000。4 电路约束与综合实现 FPGA/CPLD设计中的约束主要可以分为两个方面,

33、一是时序约束,另一个是管脚约束,而一般不考虑面积约束、设计规则约束和工作环境约束。综合工具直接采用ISE的XST进行。4.1 时序约束时序约束主要分为输入/输出延时约束、时钟约束以及异步时钟数据间的约束等内容。本设计中由于是同步设计,而且没有纯组合逻辑的输入与输出,时钟约束变得简单。设计中仅需要对输入延时、输出延时、触发器间的延时进行约束即可。根据实际的工作环境,设计电路工作时钟设定为20ns就够用了,实际上,这样的时钟约束相对于Virtex II的器件和XST默认的工作频率而言,是没有必要添加的。但是实现中为了设计的完整性,添加了时钟约束,与输入约束。其时钟约束,set input dela

34、y, set output delay,creat clk,以及时序约束语句分别如下图图时序约束,图12clk的约束,图13 set input delay,图14 create clock,图15时序语句。图时序约束4.2 引脚锁定约束由于开发板上的电源、时钟、复位以及其它功能键等的连接已经固定5,管脚约束所要完成的只要锁定即可,要锁定开关s0到s7,16个LED灯,具体管脚锁定如图16所示。 图12clk的约束图13set input delay图14 create clock图15时序语句4.3 电路综合报告在电路板上用7个开关实现16位二进制乘数与16位二进制被乘数的输入, s0为0输

35、入乘数,为1输入被乘数;s1与s2结合控制输入乘数或被乘数的哪位:若为00时s6s3输入ain3:0(或bin3:0),为01时s6s3输入ain7:4(或bin7:4),为10时s6s3输入ain11:8(或bin11:8),为11时s6s3输入ain15:12(或bin15:12);s6-s3在s1,s2结合的情况下,输入乘数与被乘数的相应位数。用16个LED灯两次输出32位运算结果。输出通过s7来控制,是高位输出,还是低位输出,并将其与LED灯连接,用来显示输出结果。LED灯亮则相应位的值为1,LED灯灭则相应位的值为0。图16管脚锁定图4.4 设计实现与下载将程序加载到QuartusI

36、I中,编译正确后将相应的管脚锁定,再编译一次,正确后,把电路箱与计算机相连,接通电源,在电路板上用7个开关实现16位二进制乘数与16位二进制被乘数的输入,用16个LED灯两次输出32位运算结果。则16个LED灯会通过亮灭两次来实现32位运算结果的输出,当s7为0时输出结果的低16位,当s7为1时输出结果的高16位。 结 论这次课程设计应该是上大学以来做的所有课设里学到东西最多的一次。虽然过程有点小纠结,但还是学到了很多有关EDA的知识,心里还是非常高兴。这次课设与期末考试距离很近,这样在做课设的过程中学到的知识也对期末复习有很大的帮助。在本次课程设计的过程中,在前几次课里的电路图的设计,及代码

37、的描述的方面进行的比较顺利。再查阅资料后,通过比较还是移位相加算乘法最容易理解,电路连接虽然有点繁琐,但是代码描述比较清楚。在课设过程中,由于没有对电路实验箱深入了解,以导致在最后下载验证时出了问题。在实验开始,老师推荐我们用键盘输入来实现16位乘数,被乘数的输入,用数码管来显示最后32结果的输出。但是通过实验以及代码的修改,对用键盘输入乘数,被乘数,乘号以及等于号的定义,对各段数码管各个管显示的约束,没有办法实现。由于在课上对键盘输入及数码管的定义 花费了大量的时间以至于距离最后验收没有时间再进行修改。在通过询问老师后,决定利用开关来完成乘数与被乘数的输入,用LED显示灯来实现最后结果的实现

38、。但是仍没有在指定的时间内完成最后的验证。对此心里有点惭愧。通过此次课设学到了很多东西,对代码的编写的技巧有了更深刻的认识,编写代码更加熟练;学会了电路的设计,以前设计电路没有思路,在此课设过程中对电路的设计以及各个电路器件有了更深的认识,对其更能有了更深的了解;以前不会写激励,在课设的过程中学会了激励的编写,以前做作业的时候对代码的仿真也不是很熟练,通过这次课设对代码的仿真更加熟练由于没有对电路的下载验证深刻理解,以及对Quaturs软件功能的完全的认识,导致没有在规定的时间内完成最后的验收。以后会吸取教训在课设前做好充足的准备,做好课设。在这次课设过程中,同学们互相帮助,共同进步,老师也给

39、予了很大的帮助和知道,使我们都有了不小的收获。以后会更加努力,争取做的更好。参考文献 1 Mivheal .D.cihette,Advanced Digital With the Verilog HDL M. 电子工业出版社 2004.72高福祥 接口技术 东北大学出版社 1999.123 杜慧敏 基于Verilog的FPGA设计基础 西安电子科技大学出版社,2006,24夏宇闻 Verilog HDL数字系统设计教程 北京航空航天大学出版社,2003.75 G. David Ripley.DVI-A Digital Multimedia Technology. Communication o

40、f the 附录A 设计源代码module mux_16(clk,rstn,start,s0,s1,s2,s3,s4,s5,s6,s7,lout,done);input clk,rstn,start;input s0,s1,s2,s3,s4,s5,s6,s7;output 15:0lout;reg31:0yout;reg15:0lout;output done;reg15:0ain,bin;reg15:0areg,breg;reg31:0yreg;reg done_r;reg4:0i;wire s0,s1,s2,s3,s4,s5,s6; always(posedge clk or negedge rstn)if(!rstn)i=5d0;else if (start & i5d17)i=i+1b1;else if(!start) i=5d0;always(posedge clk or negedge rstn)if(!rstn)done_r=1d0;else if(i=5d16)done_r=1b1;else if(i=5d0)done_r=1b0;assign done=done_r;always(posedge clk ) if(!s0)begin if (s1=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论