蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx

上传人:b****4 文档编号:3126182 上传时间:2022-11-17 格式:DOCX 页数:17 大小:72.88KB
下载 相关 举报
蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx_第1页
第1页 / 共17页
蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx_第2页
第2页 / 共17页
蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx_第3页
第3页 / 共17页
蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx_第4页
第4页 / 共17页
蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx

《蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx》由会员分享,可在线阅读,更多相关《蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx(17页珍藏版)》请在冰豆网上搜索。

蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院.docx

蔡觉平老师西电VerilogHDL上机大作业硬件描述语言微电子学院

《VerilogHDL数字集成电路设计原理与应用》上机作业

班级:

*******

学号:

*******

姓名:

*******

 

题目1:

数字集成电路的verilogHDL描述与仿真。

要求:

(1)学习使用Modelsim设计和仿真软件;

(2)练习教材7.2.1中的例子;

(3)掌握设计代码和测试代码的编写;

(4)掌握测试仿真流程;

(5)掌握Modelsim软件的波形验证方式。

解答:

题目2:

简述begin-end语句块和fork-join语句块的区别,并写出下面信号对应的程序代码

解答:

(1)begin-end语句块和fork-join语句块的区别:

1、执行顺序:

begin-end语句块按照语句顺序执行,fork-join语句块所有语句均在同一时刻执行;

2、语句前面延迟时间的意义:

begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间;

3、起始时间:

begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间;

4、结束时间:

begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间;

5、行为描述的意义:

begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。

fork-join语句块为电路上电后,各电路模块同时开始工作的过程。

(2)程序代码:

Begin-end语句:

moduleinitial_tb1;

regA,B;

initial

begin

A=0;B=1;

#10A=1;B=0;

#10B=1;

#10A=0;

#10B=0;

#10A=1;B=1;

end

endmodule

Frk-join语句:

modulewave_tb2;

regA,B;

parameterT=10;

initial

fork

A=0;B=1;

#TA=1;B=0;

#(2*T)B=1;

#(3*T)A=0;

#(4*T)B=0;

#(5*T)A=1;B=1;

join

endmodule

题目3.分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。

解答:

(1)阻塞赋值语句

moduleblock2(din,clk,out0,out1,out2,out3);

inputdin,clk;

outputout0,out1,out2,out3;

regout0,out1,out2,out3;

always@(posedgeclk)

begin

out0=din;

out1=out0;

out2=out1;

out3=out2;

end

endmodule

(2)非阻塞赋值语句

modulenon_block1(din,clk,out0,out1,out2,out3);

inputdin,clk;

outputout0,out1,out2,out3;

regout0,out1,out2,out3;

always@(posedgeclk)

begin

out0<=din;

out1<=out0;

out2<=out1;

out3<=out2;

end

endmodule

题目4:

设计16位同步计数器

要求:

(1)分析16位同步计数器结构和电路特点;

(2)用硬件描述语言进行设计;

(3)编写测试仿真并进行仿真。

解答:

(1)电路特点:

同步计数器的时间信号是同步的;每当到达最高计数后就会重新计数。

(2)程序代码:

modulecomp_16(count,clk,rst);

output[15:

0]count;

inputclk,rst;

reg[15:

0]count;

always@(posedgeclk)

if(rst)count<=16'b00000;

else

if(count==16'b1111111111111111)

count<=16'b00000;

else

count<=count+1;

endmodule

(3)仿真代码:

modulecomp_16_tb;

wire[15:

0]count;

regclk,rst;

comp_16U1(count,clk,rst);

always#1clk=~clk;

initial

begin

clk=0;rst=0;

#1rst=1;

#10rst=0;

#10rst=1;

#10rst=0;

#99999$finish;

end

endmodule

题目5.试用VerilogHDL门级描述方式描述如下图所示的电路。

解答:

modulezy(D0,D1,D2,D3,S1,S2,T0,T1,T2,T3,Z);

outputZ;

inputD0,D1,D2,D3,S1,S2;

wireT0,T1,T2,T3,wire1,wire2;

notU1(wire1,S1),

U2(wire2,S2);

andU3(T0,D0,wire2,wire1),

U4(T1,D1,S1,wire1),

U5(T2,D2,S1,wire2),

U6(T3,D3,S1,S2);

orU7(Z,T0,T1,T2,T3,);

endmodule

题目6.试用查找真值表的方式实现真值表中的加法器,写出VerilogHDL代码:

Cin

ain

bin

sum

Cout

0

0

0

0

0

0

0

1

1

0

0

1

0

1

0

0

1

1

0

1

1

0

0

1

0

1

0

1

0

1

1

1

0

0

1

1

1

1

1

1

解答:

modulehomework6(SUM,COUT,A,B,CIN);

outputSUM,COUT;

inputA,B,CIN;

regSUM,COUT;

always@(AorBorCIN)

case({A,B,CIN})

3'b000:

SUM<=0;

3'b000:

COUT<=0;

3'b001:

SUM<=1;

3'b001:

COUT<=0;

3'b010:

SUM<=1;

3'b010:

COUT<=0;

3'b011:

SUM<=0;

3'b011:

COUT<=1;

3'b100:

SUM<=1;

3'b100:

COUT<=0;

3'b101:

SUM<=0;

3'b101:

COUT<=1;

3'b110:

SUM<=0;

3'b110:

COUT<=1;

3'b111:

SUM<=1;

3'b111:

COUT<=1;

endcase

endmodule

题目7:

设计16位同步加法器和乘法器

要求:

(1)分析16位同步加法器和乘法器结构和电路特点;

(2)用硬件描述语言进行设计;

(3)编写测试仿真并进行仿真。

解答:

(1)16位同步加法器和乘法器结构和电路特点:

加法器的进位只用考虑一位,但是乘法器的进位要考虑到32位才行。

(2)程序代码:

16位同步加法器:

moduleadder(a,b,c,sum,cout);

output[15:

0]sum;

outputcout;

input[15:

0]a,b;

inputc;

assign{cout,sum}=a+b+c;

endmodule

16位同步乘法器:

modulemultiplier(a,b,mul);

input[15:

0]a,b;

output[31:

0]mul;

assignmul=a*b;

endmodule

(3)仿真代码:

16位同步加法器:

moduleadder_tb;

reg[15:

0]a,b;

regc;

wire[15:

0]sum;

wirecout;

initial

begin

a=8;b=8;c=1;

end

initial

begin

#10a=16'b1111111111111111;#10b=1;

end

adderU2(.a(a),.b(b),.c(c),.cout(cout),.sum(sum));

endmodule

16位同步乘法器:

modulemultiplier_tb;

reg[15:

0]a,b;

wire[31:

0]mul;

initial

begin

a=3;b=8;

end

initial

begin

#10a=100;

#15b=100;

end

multiplierU1(.a(a),.b(b),.mul(mul));

endmodule

仿真截图:

加法器:

乘法器:

题目8.将下面的状态转移图用VerilogHDL描述。

在图中,状态机的输入只与状态的跳转有关,与状态机的输出无关,因此该状态机为摩尔型状态机。

下面为三段式描述方式。

解答:

程序代码:

modulehomework8(clk,out,step,clr);

output[2:

0]out;

inputstep,clk,clr;

reg[2:

0]out;

reg[1:

0]state,next_state;

always@(posedgeclk)

state<=next_state;

always@(stateorclr)

if(clr)

next_state<=0;

else

case(state)

2'b00:

case(step)

1'b0:

beginnext_state<=2'b00;out<=3'b001;end

1'b1:

beginnext_state<=2'b01;out<=3'b001;end

endcase

2'b01:

begin

out<=3'b010;

next_state<=2'b10;

end

2'b10:

case(step)

1'b0:

beginnext_state<=2'b00;out<=3'b100;end

1'b1:

beginnext_state<=2'b11;out<=3'b100;end

endcase

2'b11:

case(step)

1'b0:

beginnext_state<=2'b11;out<=3'b111;end

1'b1:

beginnext_state<=2'b00;out<=3'b111;end

endcase

endcase

endmodule

仿真代码:

modulehomework8_tb;

regclk,step,clr;

wire[3:

0]out;

always

#5clk=~clk;

initial

beginclk=0;

clr=1;

step=1;

end

initial

begin

#5c

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

当前位置:首页 > 解决方案 > 商业计划

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

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