verilog课程实验报告.docx

上传人:b****5 文档编号:3573522 上传时间:2022-11-24 格式:DOCX 页数:12 大小:78.55KB
下载 相关 举报
verilog课程实验报告.docx_第1页
第1页 / 共12页
verilog课程实验报告.docx_第2页
第2页 / 共12页
verilog课程实验报告.docx_第3页
第3页 / 共12页
verilog课程实验报告.docx_第4页
第4页 / 共12页
verilog课程实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

verilog课程实验报告.docx

《verilog课程实验报告.docx》由会员分享,可在线阅读,更多相关《verilog课程实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

verilog课程实验报告.docx

verilog课程实验报告

西安邮电学院

verilog课程实验报告

 

院系:

电子工程学院

专业班级:

电路1002班

学号:

05106065

姓名:

李瑶君

 

2012年10月30日

verilog课程实验报告

1.实验内容

(1)用Verilog语言写一程序,同时实现全加器和全减器的共能;

(2)用Verilog程序代码在一32位二进制数中,找出第一个1前0的个数。

2.实验目的

(1)熟练掌握Verilog的语法知识,学会用Verilog程序进行编程;

(2)熟练ModelSim软件的应用,学会用激励块检验所写的程序的正确性并熟练掌握显示波形的操作。

3.实验步骤

(1)全加器全减器程序:

半加器:

moduleHalf_adder(a,b,c,s);

inputa,b;

outputc,s;

assigns=a^b;

assignc=a&b;

endmodule

半加器检测程序:

moduleHalf_addertest;

rega;

regb;

wirec;

wires;

Half_adderH1(.a(a),

.b(b),

.s(s),

.c(c));

initial

begin

a=1'b0;

#10a=1'b1;

end

initial

begin

b=1'b1;

#20b=1'b0;

end

endmodule

全加器:

moduleFull_adder(a,b,cin,s,c);

inputa,b,cin;

outputc,s;

wires0,c0,c1;

Half_adderH1(.a(a),

.b(b),

.s(s0),

.c(c0));

Half_adderH2(.a(s0),

.b(cin),

.s(s),

.c(c1));

or(c,c0,c1);

endmodule

全加器检测程序:

moduleFull_addertest;

rega;

regb;

regcin;

wirec;

wires;

Full_adderF1(.a(a),

.b(b),

.cin(cin),

.c(c),

.s(s));

initial

a=0;

always

#5a=~a;

initial

b=1;

always

#5b=~b;

initial

begin

cin=0;

#100cin=1;

end

endmodule

4位全加全减器

moduleFull_a_d_4(a,b,cin,c,s,con);

input[3:

0]a,b;

inputcin,con;

output[3:

0]s;

outputc;

wire[2:

0]n;

Full_adderF1(.cin(cin),

.a(a[0]),

.b(b[0]^con),

.s(s[0]),

.c(n[0]));

Full_adderF2(.cin(n[0]),

.a(a[1]),

.b(b[1]^con),

.s(s[1]),

.c(n[1]));

Full_adderF3(.cin(n[1]),

.a(a[2]),

.b(b[2]^con),

.s(s[2]),

.c(n[2]));

Full_adderF4(.cin(n[2]),

.a(a[3]),

.b(b[3]^con),

.s(s[3]),

.c(c));

endmodule

4位全加全减器检测

moduleFull_a_d_4test;

regcin;

reg[3:

0]a;

reg[3:

0]b;

regcon;

wire[3:

0]s;

wirec;

Full_a_d_4Full(.cin(cin),

.a(a),

.b(b),

.c(c),

.s(s),

.con(con));

initial

begin

cin=0;

#50cin=1;

#50cin=0;

#50cin=1;

end

initial

a=4'b0000;

always

#5a=a+1;

initial

b=4'b0010;

always

#5b=b+1;

initial

begin

con=0;

#100con=1;

end

endmodule

(2)找0011序列:

D触发器:

moduledff(d,clk,rst,q);

inputd,clk,rst;

outputregq;

always@(posedgeclkornegedgerst)

if(~rst)

q<=1'b0;

else

q<=d;

endmodule

D触发器检测:

moduledfftest;

regd,

clk,

rst;

wireq;

dffd1(.rst(rst),

.clk(clk),

.d(d),

.q(q));

initial

begin

rst=0;

#10rst=1;

end

initial

clk=0;

always

#5clk=~clk;

initial

d=0;

always

#8d=~d;

Endmodule

找0011程序:

modulefind0011(d,clk,reset,f);

inputd,clk,reset;

outputf;

wiren2,n3,q0,q1,q2,q3;

dffdff1(.d(d),

.q(q0),

.clk(clk),

.rst(reset));

dffdff2(.d(q0),

.q(q1),

.clk(clk),

.rst(reset));

dffdff3(.d(q1),

.q(q2),

.clk(clk),

.rst(reset));

dffdff4(.d(q2),

.q(q3),

.clk(clk),

.rst(reset));

not(n3,q3);

not(n2,q2);

and(f,n3,n2,q1,q0);

endmodule

找0011检测程序:

modulefind0011test;

regd;

regclk;

regreset;

wiref;

find0011f1(.clk(clk),

.reset(reset),

.f(f),

.d(d));

initial

clk=0;

always

#1clk=~clk;

initial

begin

reset=0;

#10reset=1;

end

initial

begin

d=0;

#3d=0;

#3d=0;

#3d=1;

#3d=0;

#3d=1;

#3d=0;

#3d=0;

#3d=1;

#3d=1;

#3d=0;

#3d=1;

end

endmodule

(3)找1前的0的个数:

modulecounter0;

reg[31:

0]x;

integeri;

regcontinue;

initial

begin

x=32'd16;

i=0;

continue=1;

while((i<32)&continue)

begin

if(x[i])

begin

$display("encountera1bitatelementnumber%d",i);

continue=0;

end

i=i+1;

end

end

endmodule

其结果显示:

4.实验中遇到的问题及解决方法

(1)由于初次接触ModelSim软件,一些操作相当生疏,在实验室跟同学一块学了几天,才能够基本上掌握其操作,并用该软件完成相应的功能。

(2)Verilog语法掌握的不够,以致在写程序时总是犯一些很低级的错误,比如将initial跟always嵌套使用、initial下给两个量赋值时,总是忘了begin-end的使用等。

通过不断的学习及上机练习,现在已基本上可以编写一定的程序。

5.心得体会

Verilog是一门实践性很强的课程,我们所掌握的书本的知识若不经过上机练习是远远不够的,比如”;”是否添加,单纯的从书上我们无法知道漏掉一个分号程序是调不通的;还有延时具体体现,以及在什么情况下会输出高阻和未知数等。

在这么一个实践性如此强的社会中我们必须学会将知识运用到生活中,所以,注重实践是很重要的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1