您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 电子技术实验大作业实验报告-上海交通大学
电子技术实验大作业实验报告1.实验名称四位二进制数的可控加法/减法2.设计思路本作业主要完成的是四位二进制数的可控加法。实现了附加功能中的在四位数码管上显示和数值溢出的显示功能。本作业主要由两个模块组成,一个是主程序模块,负责较简单的加法运算;另外一个是a_to_g子程序模块,输入一个4位二进制数字,用来把数字显示在数字管上。数值溢出则是看cout位是否为1,为1则溢出。3.程序代码`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Company://Engineer:////CreateDate:05:40:3904/18/2014//DesignName://ModuleName:adder//ProjectName://TargetDevices://Toolversions://Description:////Dependencies:////Revision://Revision0.01-FileCreated//AdditionalComments:////////////////////////////////////////////////////////////////////////////////////moduleadder(input[3:0]sw1,sw2,//inputbutton,inputclk,output[6:0]dp_a_to_g,output[3:0]out0);regcout;reg[3:0]sum;always@(sw1orsw2)begin{cout,sum}=sw1+sw2;enda_to_gATOG(.sw(sum),.clk(clk),.dp_a_to_g(dp_a_to_g),.out0(out0),.cout(cout));endmodulemodulea_to_g(input[3:0]sw,inputclk,inputcout,outputreg[6:0]dp_a_to_g,outputreg[3:0]out0);integernum;integers;integeri;initialbegini=0;endalways@(posedgeclk)begini=i+1;if(i[16:14]3)i=0;s=i[15:14];if(~cout)begincase(s)0:out0=4'b0111;1:out0=4'b1011;2:out0=4'b1101;3:out0=4'b1110;endcasecase(s)0:num=sw[0];1:num=sw[1];2:num=sw[2];3:num=sw[3];endcaseendelsebeginout0=4'b0000;num=2;endendalways@(*)case(num)0:dp_a_to_g=7'b0000001;1:dp_a_to_g=7'b1001111;2:dp_a_to_g=7'b0110000;default:dp_a_to_g=7'b1111111;endcaseendmodule4.实验心得让四位数码管循环显示时,如果设定的循环间隔太短,则因为毛刺等之类的原因,会使整个数码管亮起来,人眼只能看到四个八。而设定的频率太低的话,则无法造成人眼短暂停留视觉的效果,而是一个一个亮。选择正确的频率才能得到正确的结果。做此次试验的最大心得就是编程序得走一步看一步,按模块功能一块一块做。做完一块,检查一块。之前一开始我选的题目是数字时钟,一鼓作气把功能大部分都写出来之后,发现了一堆bug,改了好几个小时都没有办法排除,只能重新做。很可惜浪费了时间。第二个体会是感受到了高级语言和verilog这种硬件描述语言的差异所在。对于一般使用的高级语言来说,有成熟的封装和函数,以及各种各样的数据类型,使用起来比较容易上手。而对verilog来说,因为跟硬件更为靠近,很多时候不能光码代码,还得想想能否实验。而且各种规则也不尽相同,很容易做无用功。需要从低级到高级循序渐进的学习,以为掌握一种语言就可以吃遍天下的想法是幼稚的。学习路上没有捷径,今天在学习verilog的路上真可是又复习了一遍这个人生哲理了!moduleadder(number1,number2,sum,overflow);input[3:0]number1;input[3:0]number2;output[3:0]sum;outputoverflow;wirec1,c2,c3;assignsum[0]=number1[0]^number2[0];assignc1=number1[0]&number2[0];assignsum[1]=number1[1]^number2[1]^c1;assignc2=(number1[1]&number2[1])|(number1[1]&c1)|(number2[1]&c1);assignsum[2]=number1[2]^number2[2]^c2;assignc3=(number1[2]&number2[2])|(number1[2]&c2)|(number2[2]&c2);assignsum[3]=number1[3]^number2[3]^c3;assignoverflow=(number1[3]&number2[3])|(number1[3]&c3)|(number2[3]&c3);endmodule
本文标题:电子技术实验大作业实验报告-上海交通大学
链接地址:https://www.777doc.com/doc-7188176 .html