电子技术大作业实验报告_第1页
电子技术大作业实验报告_第2页
电子技术大作业实验报告_第3页
电子技术大作业实验报告_第4页
全文预览已结束

下载本文档

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

文档简介

实验名称

电子技术实验大作业实验报告

F

四位二进制数的可控加法/减法

设计思路

本作业主要完成的是四位二进制数的可控加法。实现了附加功能中的在四位数码管上显示和数值溢出的显示功能。

本作业主要由两个模块组成,一个是主程序模块,负责较简单的加法运算;另外一个是a_to_g子程序模块,输入一个4位二进制数字,用来把数字显示在数字管上。数值溢出则是看cout位是否为1,为1则溢出。

程序代码

`timescale1ns/1ps

//////////////////////////////////////////////////////////////////////////////////

//:

//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;end

a_to_gATOG(.sw(sum),.clk(clk),.dp_a_to_g(dp_a_to_g),.out0(out0),.cout(cout));endmodule

modulea_to_g(

input[3:0]sw,inputclk,inputcout,

outputreg[6:0]dp_a_to_g,outputreg[3:0]out0

);

integernum;integers;integeri;

initialbegini=0;

end

always@(posedgeclk)begin

i=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;

endcase

case(s)

0:num=sw[0];

1:num=sw[1];

2:num=sw[2];

3:num=sw[3];endcase

end

elsebegin

out0=4'b0000;num=2;

end

end

always@(*)

case(num)

0:dp_a_to_g=7'b ;

1:dp_a_to_g=7'b ;

2:dp_a_to_g=7'b ;

default:dp_a_to_g=7'b ;endcase

endmodule

实验心得

让四位数码管循环显示时,如果设定的循环间隔太短,则因为毛刺等之类的原因,会使整个数码管亮起来,人眼只能看到四个八。而设定的频率太低的话,则无法造成人眼短暂停留视觉的效果,而是一个一个亮。选择正确的频率才能得到正确的结果。

做此次试验的最大心得就是编程序得走一步看一步,按模块功能一块一块做。做完一块,检查一块。之前一开始我选的题目是数字时钟,一鼓作气把功能大部分都写出来之后,发现了一堆bug,改了好几个小时都没有办法排除,只能重新做。很可惜浪费了时间。

第二会是感受到了高级语言和verilog这种硬件描述语言的差异所在。对于一般使用的高级语言来说,有成封装和函数,以及各种各样的数据类型,使用起来比较容易上手。而对verilog来说,因为跟硬件更为靠近,很多时候不能光码代码,还得想

想能否实验。而且各种规则也不尽相同,很容易做无用功。需要从低级到高级循序渐进的学习,以为掌握一种语言就可以吃遍天下的想法是幼稚的。

学习没有捷径,今天在学习verilog的真可是又复习了一遍这个人生哲理

了!

c1);

c2);

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]&

assignsum[2]=number1[2]^number2[2]^c2;

assignc3=(number1[2]&number2[2])|(number1[2]&c2)|(number2[2]&

assigns

温馨提示

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

评论

0/150

提交评论