Verilog HDL 期末考试试题及详细参考答案_第1页
Verilog HDL 期末考试试题及详细参考答案_第2页
Verilog HDL 期末考试试题及详细参考答案_第3页
Verilog HDL 期末考试试题及详细参考答案_第4页
Verilog HDL 期末考试试题及详细参考答案_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

VerilogHDL期末考试试题及详细参考答案考试时长:120分钟满分:100分适用专业:电子信息、微电子、通信工程等考试说明:闭卷考试,独立完成,代码书写规范,逻辑描述清晰即可得分一、单项选择题(每题2分,共20分)1.下列选项中,属于VerilogHDL合法标识符的是()A.3dataB.data_3C.data-3D.@data2.VerilogHDL中,基本数据类型wire的默认值为()A.0B.1C.xD.z3.下列语句中,属于时序逻辑电路描述的是()A.assigny=a&b;B.always@(*)y=a|b;C.always@(posedgeclk)q=d;D.以上都不是4.Verilog中,阻塞赋值和非阻塞赋值的符号分别是()A.=、<=B.<=、=C.==、=D.=、:=5.下列关于case语句的说法,错误的是()A.case语句是并行分支语句B.case语句默认存在优先级C.casez可忽略高阻态zD.casex可忽略不定态x和高阻态z6.16位二进制数wire[15:0]dat;其最高位是()A.dat[0]B.dat[15]C.dat[16]D.dat[7]7.下列循环语句中,可用于可综合电路设计的是()A.foreverB.repeatC.forD.while8.模块实例化时,端口关联方式中,位置关联的特点是()A.必须严格按照模块定义的端口顺序连接B.无需对应端口顺序C.可以任意省略端口D.优先级高于命名关联9.时序电路中,同步复位的含义是()A.复位信号随时有效,无需等待时钟B.仅在时钟有效沿到来时,复位信号生效C.复位信号与时钟信号无关D.高电平复位10.下列代码中,能够生成锁存器的是()A.always@(*)if(en)y=a;B.always@(*)y=a&b;C.always@(posedgeclk)y=a;D.assigny=a|b;二、填空题(每空1分,共15分)1.VerilogHDL的建模方式分为三种,分别是__________、__________、__________。2.组合逻辑电路的always敏感列表为__________,时序逻辑电路常用敏感列表为__________。3.非阻塞赋值用于__________逻辑电路建模,阻塞赋值用于__________逻辑电路建模。4.Verilog中四值逻辑电平分别是0、1、__________、__________。5.模块调用的过程称为__________,被调用的模块称为__________,调用模块称为顶层模块。6.实现2选1数据选择器,当sel=0时输出a,sel=1时输出b,连续赋值语句为__________。7.异步复位时序电路,复位信号不依赖__________,即时生效。8.完整的Verilog程序基本单元是__________,所有电路功能均在该单元内实现。三、简答题(每题5分,共20分)1.简述阻塞赋值(=)和非阻塞赋值(<=)的核心区别及各自适用场景。2.简述组合逻辑电路和时序逻辑电路的本质区别,以及各自的设计注意事项。3.简述case、casez、casex三条分支语句的区别,以及实际工程中的使用原则。4.简述锁存器产生的原因,以及工程设计中避免产生锁存器的方法。四、编程设计题(每题10分,共30分)1.用Verilog代码实现3-8译码器,使能端高电平有效,输入3位二进制信号,输出8位译码信号,要求代码可综合、格式规范。2.设计一个带同步高电平复位的D触发器,时钟上升沿触发,复位时输出清零。3.设计一个4位二进制加法计数器,带异步低电平复位、时钟上升沿计数,计数范围0~15,计满溢出归零。五、综合分析题(15分)分析如下Verilog代码,指出代码中存在的问题、会产生的电路缺陷,修改代码使其可综合并实现正确功能(功能:2选1时序数据选择器,时钟上升沿更新数据)。PlainText

modulemux2_1(

inputclk,

inputsel,

inputa,b,

outputregy

);

always@(posedgeclk)

begin

if(sel==1)

y=b;

end

endmodule详细参考答案一、单项选择题答案及解析1.B解析:Verilog标识符不能以数字开头、不能包含短横线、不能使用特殊符号,仅字母、数字、下划线且首字符为字母/下划线合法。2.C解析:wire线型变量默认值为不定态x,reg寄存器变量默认值也为x。3.C解析:只有带时钟边沿敏感的always块描述时序逻辑,其余均为组合逻辑。4.A解析:=为阻塞赋值,<=为非阻塞赋值,是Verilog核心语法规范。5.B解析:case语句无优先级,if语句存在优先级;casez忽略z,casex忽略x、z。6.B解析:向量定义[高位:低位],[15:0]中15为最高位,0为最低位。7.C解析:for循环可综合,forever、repeat、while仅用于仿真测试,不可综合为硬件电路。8.A解析:位置关联严格匹配模块端口定义顺序,命名关联无需对应顺序,工程优先使用命名关联。9.B解析:同步复位必须等待时钟有效沿才能生效,异步复位随时生效。10.A解析:组合逻辑always块中,if语句未写全分支,默认保持原值,会生成锁存器。二、填空题答案1.行为级建模、数据流级建模、结构级建模2.*、posedgeclk(或negedgeclk)3.时序、组合4.x(不定态)、z(高阻态)5.模块实例化、底层模块6.assigny=sel?b:a;7.时钟8.模块(module)三、简答题参考答案1.阻塞赋值与非阻塞赋值区别及场景(1)执行机制:阻塞赋值顺序执行,当前语句执行完成后才执行下一条语句,会阻塞后续代码;非阻塞赋值并行执行,语句同时计算、同时更新,不阻塞后续代码。(2)适用场景:阻塞赋值(=)专门用于组合逻辑电路建模;非阻塞赋值(<=)专门用于时序逻辑电路建模。(3)工程原则:严禁时序逻辑用阻塞赋值、组合逻辑用非阻塞赋值,避免电路时序错乱、综合报错。2.组合逻辑与时序逻辑区别及设计注意事项(1)核心区别:组合逻辑无记忆功能,输出仅由当前输入决定,无时钟、无存储单元;时序逻辑具备记忆功能,输出由当前输入和历史状态共同决定,依赖时钟、包含寄存器等存储单元。(2)设计注意事项:组合逻辑必须写全分支、避免缺省状态,防止生成锁存器;时序逻辑需规范使用时钟边沿、复位信号,区分同步/异步复位,统一赋值方式。3.case、casez、casex语句区别与使用原则(1)case:严格匹配,仅0、1完全匹配,x、z无法匹配,分支判断最严谨。(2)casez:忽略高阻态z,仅对0、1、x进行匹配判断。(3)casex:忽略不定态x和高阻态z,仅识别有效电平0、1,匹配范围最广。(4)使用原则:工程优先使用标准case保证电路稳定性;仅在端口存在高阻态匹配场景下使用casez;casex容错性过高,易产生逻辑漏洞,实际设计中尽量避免使用。4.锁存器产生原因及规避方法(1)产生原因:组合逻辑电路中,if、case等分支语句未覆盖所有输入情况,部分条件下输出无赋值,编译器默认保持输出原值,从而生成锁存器。锁存器属于不期望的时序单元,会导致时序紊乱、仿真与综合结果不一致。(2)规避方法:组合逻辑分支语句必须补全所有分支;if语句搭配else默认分支,case语句添加default默认分支;提前给输出变量赋初始默认值。四、编程设计题参考答案(可综合标准代码)1.3-8译码器代码PlainText

moduledecode3_8(

inputwireen,

inputwire[2:0]din,

outputreg[7:0]dout

);

always@(*)begin

if(!en)

dout=8'b00000000;

elsebegin

case(din)

3'b000:dout=8'b00000001;

3'b001:dout=8'b00000010;

3'b010:dout=8'b00000100;

3'b011:dout=8'b00001000;

3'b100:dout=8'b00010000;

3'b101:dout=8'b00100000;

3'b110:dout=8'b01000000;

3'b111:dout=8'b10000000;

default:dout=8'b00000000;

endcase

end

end

endmodule2.同步高电平复位D触发器代码PlainText

moduledff_sync_rst(

inputwireclk,

inputwirerst_n,//高电平复位

inputwired,

outputregq

);

always@(posedgeclk)begin

if(rst_n)

q<=1'b0;

else

q<=d;

end

endmodule3.4位异步低电平复位加法计数器代码PlainText

modulecnt4_bit(

inputwireclk,

inputwirerst_n,//异步低电平复位

outputreg[3:0]cnt

);

always@(posedgeclkornegedgerst_n)begin

if(!rst_n)

cnt<=4'b0000;

else

cnt<=cnt+1'b1;

end

endmodule五、综合分析题参考答案1.代码存在的问题(1)语法错误:时序逻辑电路中使用了阻塞赋值=,不符合时序电路设计规范,易导致时序仿真错误。(2)逻辑缺陷:if语句缺少else分支,虽然是时序逻辑,但分支不完整会导致电路逻辑不严谨,且无法实现sel=0时选择输入a的功能,电路功能缺失。(3)功能问题:原代码仅实现sel=1时赋值b,sel=0时输出保持不变,未实现2选1选择器的完整功能。2.修改后的正确可综合代码PlainText

modulemux2_1(

inputclk,

inputsel,

inputa,b,

outputregy

);

//时钟上升沿触发,时序逻辑使用非阻塞赋值

always@(posedgeclk)

begin

if(sel==1'b1)

y<=b;

else

y<=a;

end

endmodule3.

温馨提示

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

评论

0/150

提交评论