VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx

上传人:b****7 文档编号:9887904 上传时间:2023-02-07 格式:DOCX 页数:10 大小:71.79KB
下载 相关 举报
VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx_第1页
第1页 / 共10页
VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx_第2页
第2页 / 共10页
VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx_第3页
第3页 / 共10页
VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx_第4页
第4页 / 共10页
VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx

《VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx》由会员分享,可在线阅读,更多相关《VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx(10页珍藏版)》请在冰豆网上搜索。

VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理.docx

VerilogHDL数字设计与综合第二版第七章课后习题答案最新整理

1.声明一个名为oscillate的寄存器变量并将它初始化为0。

使其每30个时间单位进行一次取反操作。

不要使用always语句。

提示:

使用forever循环。

答:

代码如下:

regoscillate;

initialbegin

oscillate<=0;

forever#30oscillate<=~oscillate;end

2.设计一个周期为40个时间单位的时钟信号,其占空比为25%。

使用always和initial块进行

设计。

将其在仿真0时刻的值初始化为0。

答:

代码如下:

regclock;initialclock<=0;

alwaysbegin

#30clock<=1;

#10clock<=0;end

3.给定下面含有阻塞过程赋值语句的initial块。

每条语句在什么仿真时刻开始执行?

a,b,c

4.

和d在仿真过程中的中间值和仿真结束时的值是什么?

答:

仿真输出结果:

5.在第3题中,如果initial块中包括的是非阻塞过程赋值语句,那么各个问题的答案是什么?

答:

最终d没有输出,因为d<=#20{a,b,c};语句执行的是先将a,b,c取值存储,在20个时间单位后将存储的值赋给d,因为b,c在初始时刻没有值,所以d值也是不确定的。

6.指出在下面的Verilog代码中各条语句的执行顺序。

其中是否含有不确定的执行顺序?

a,b,c

7.

和d的最终值是什么?

答:

先执行a=1’b0,b=1’b1,然后执行#0c=b,#0d=a,执行顺序不确定,最终输出结果a=0,b=1,c=1,d=0.

8.

在下面的例子中,d的最终值是什么?

答:

仿真输出波形如下,最终输出结果d=1。

0时刻b|c的值是1,在25个时间刻度后赋给d。

9.使用带有同步清零端的D触发器(清零端高电平有效,在时钟下降沿执行清零操作)设计一个下降沿触发的D触发器,只能使用行为语句。

提示:

D触发器的输出q应当声明为寄存器变量。

使用设计出的D触发器输出一个周期为10个时间单位的时钟信号。

答:

第七题和第八题参见chapter7.v

10.使用带有异步清零端的D触发器设计第7题中要求的D触发器(在清零端变为高电平后立即执行清零操作,无需等待下一个时钟下降沿),并对这个D触发器进行测试。

答:

第七题和第八题参见chapter7.v

11.使用wait语句设计一个电平敏感的锁存器,该锁存器的输入信号为d和clock,输出为q。

其功能是当clock=1时q=d。

答:

代码及输出波形如下:

modulemy_latch(d,clock,q);inputd,clock;

outputq;regq;always

wait(clock)begin

#1q<=d;//注意,这里的赋值语句前必须要加上#延迟,否则无法仿真。

endendmodule

moduletest79;

regd,clock;wireq;

initial

clock<=0;always

#10clock<=~clock;initial

begind<=1'b0;

#15d<=1'b1;

#50d<=1'b0;

#20$stop;end

my_latchmy_latch1(d,clock,q);endmodule

 

12.使用条件语句设计例7.19中的四选一多路选择器。

外部端口必须保持不变。

答:

代码如下(标注行可以去掉)

modulemux_41(out,i0,i1,i2,i3,s1,s0);inputi0,i1,i2,i3;

inputs0,s1;outputout;regout;

always@(*)if(s1==0&&s0==0)

out<=i0;

elseif(s1==0&&s0==1)

out<=i1;

elseif(s1==1&&s0==0)

out<=i2;

elseif(s1==1&&s0==1)

out<=i3;else

$display("Invalidcontrolsignals");//可去

endmodule11.使用条件语句对本章中的交通信号灯控制器进行重新设计。

答:

部分代码如下,其余代码与书中相同。

always@(state)begin

hwy=GREEN;cntry=RED;if(state==S1)

hwy=YELLOW;

elseif(state==S2)

hwy=RED;

elseif(state==S3)begin

hwy=RED;cntry=GREEN;

end

elseif(state==S4)begin

hwy=RED;cntry=YELLOW;

end

elsebegin

hwy=GREEN;cntry=RED;

end

end

always@(stateorX)begin

if(state==S0)begin

if(X)

next_state=S1;else

next_state=S0;

end

elseif(state==S1)begin

repeat(`Y2RDELAY)@(posedgeclock);next_state=S2;

end

elseif(state==S2)begin

repeat(`R2GDELAY)@(posedgeclock);next_state=S3;

end

elseif(state==S3)begin

if(X)

 

end

else

next_state=S3;next_state=S4;

elseif(state==S4)begin

repeat(`Y2RDELAY)@(posedgeclock);next_state=S0;

endelse

next_state=S0;

end

12.

使用case语句设计八功能的算术运算单元(ALU),其输入信号a和b均为4位,功能选择信号select为3位,输出信号out为5位。

算术运算单元ALU所执行的操作与select信号有关,具体关系见下表。

忽略输出结果中的上溢和下溢的位。

select信号功能

3'b000out=a

3'b001out=a+b

3'b010out=a-b

3'b011out=a/b

3'b100out=a%b(余数)

3'b101out=a<<1

3'b110out=a>>1

out=a>b(大小幅值比

答:

代码如下

3'b111较)

modulemy_ALU(a,b,select,out);input[3:

0]a,b;

input[2:

0]select;

output[4:

0]out;

reg[4:

0]out;

always@(*)case(select)

3'b000:

out=a;

3'b001:

out=a+b;

3'b010:

out=a-b;

3'b011:

out=a/b;

3'b100:

out=a%b;

3'b101:

out=a<<1;

3'b110:

out=a>>1;

3'b111:

out=a>b;

default:

out=5'b00000;endcase

endmodule

输出波形

13.使用while循环设计一个时钟信号发生器。

时钟信号的初值为0,周期为10个时间单位。

答:

代码如下

modules13;regclock;initial

begin

clock<=0;while

(1)

#5clock<=~clock;

#1000$stop;endendmodule

14.使用for循环对一个长度为1024(地址从0到1023)、位宽为4的寄存器类型数组cache_var

进行初始化,把所有单元都设置为0。

答:

简单的for语句

modules14;

reg[3:

0]cache_var[0:

1023];integercount;

initialfor(count=0;count<1024;count=count+1)

cache_var[count]=0;

endmodule

15.使用forever循环设计一个时钟信号,周期为10,占空比为40%,初值为0。

答:

modules15;regclock;initial

begin

clock<=0;foreverbegin

#6clock<=1;

#4clock<=0;end

endendmodule

16.使用repeat将语句a=a+1延迟20个时钟上升沿之后再执行。

答:

initialbegin

repeat(delay)@(posedgeclock)i<=i+1;a<=a+1;

end

17.下面是一个内嵌顺序块和并行块的块语句。

该块的执行结束时间是多少?

事件的执行顺序是怎样的?

每条语句的仿真结束时间是多少?

答:

仿真器输出如下,作为参考

#

0x=0,y=x,a=x,b=x,p=x,m=x

//x=1’b0

#

5x=0,y=1,a=x,b=x,p=x,m=x

//y=1’b1

#

20x=0,y=1,a=x,b=1,p=x,m=x

//b=y

#

25x=0,y=1,a=0,b=1,p=x,m=x

//a=x

#

65x=1,y=1,a=0,b=1,p=x,m=x

//x=1’b1

#

70x=1,y=1,a=0,b=1,p=x,m=1

//m=y

#

75x=1,y=1,a=1,b=1,p=1,m=1

//p=x

在时间75之后,还有#10a=y;#30b=x;语句,由于ab原有值是11,没有变化,故仿真器没有记录。

在#85执行a=y,在#105执行b=x。

全部结束的时间为#105

18.用forever循环语句、命名块和禁用命名块来设计一个八位计数器。

这个计数器从count=5

开始计数,到count=67结束计数。

每个时钟正跳变沿计数器加1。

时钟的周期为10。

计数

器的计数只用了一次循环,然后就被禁用了(提示:

使用disable语句)。

答:

参考代码如下。

modules18;regclock;

reg[7:

0]count;regflag;

initialbegin

count<=5;clock<=0;flag<=0;forever#5clock<=~clock;

end

always@(posedgeclock)begin

begin:

s18

count<=count+1;

end

if(count==8'b1000010)begin

flag<=1;disables18;

$display("Theend");#10$stop;

end

endendmodule

Attheend,XiaoBiangivesyouapassage.Minandoncesaid,"peoplewholearntolearnareveryhappypeople.".Ineverywonderfullife,learningisaneternaltheme.Asaprofessionalclericalandteachingposition,Iunderstandtheimportanceofcontinuouslearning,"lifeisdiligent,nothingcanbegained",onlycontinuouslearningcanachievebetterself.Onlybyconstantlylearningandmasteringthelatestrelevantknowledge,canemployeesfromallwalksoflifekeepupwiththepaceofenterprisedevelopmentandinnovatetomeettheneedsofthemarket.Thisdocumentisalsoeditedbymystudioprofessionals,theremaybeerrorsinthedocument,ifthereareerrors,pleasecorrect,thankyou!

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

当前位置:首页 > 表格模板 > 合同协议

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

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