Verilog程序设计期末试卷(含详细答案)_第1页
Verilog程序设计期末试卷(含详细答案)_第2页
Verilog程序设计期末试卷(含详细答案)_第3页
Verilog程序设计期末试卷(含详细答案)_第4页
Verilog程序设计期末试卷(含详细答案)_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

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

文档简介

Verilog程序设计期末试卷(含详细答案)适用专业:电子信息、微电子、自动化等考试时长:90分钟满分:100分考试说明:闭卷考试,禁止携带资料,题型包含客观题、简答题、代码改错、编程设计题,所有答案书写规范、逻辑清晰。一、单项选择题(每题2分,共20分)1.VerilogHDL中,下列不属于可综合数据类型的是()A.wireB.regC.integerD.real2.下列关于always块的说法,正确的是()A.时序逻辑必须用always@(*)触发B.always@(posedgeclk)仅能描述时序逻辑电路C.always块内部可以直接调用module模块D.组合逻辑电路必须使用reg型变量输出3.Verilog中阻塞赋值和非阻塞赋值的符号分别是()A.=、<=B.<=、=C.:=、=D.=、:=4.下列语句中,适合用于时序逻辑电路赋值的是()A.a=b+c;B.out=in1&in2;C.q<=d;D.y=x^z;5.4位二进制数,wire[3:0]dat,该变量最低位是()A.dat[3]B.dat[0]C.dat[1]D.dat[4]6.下列循环语句中,可综合用于硬件电路设计的是()A.whileB.repeatC.forD.forever7.模块实例化时,下列端口关联方式最规范、不易出错的是()A.位置关联B.名称关联C.顺序关联D.随机关联8.时序电路中,同步复位指的是()A.复位信号不受时钟控制,随时生效B.复位信号仅在时钟有效沿生效C.复位信号高电平有效D.复位信号低电平有效9.下列运算符优先级最高的是()A.逻辑与&&B.按位取反~C.加法+D.赋值=10.状态机设计中,为避免锁存器产生,组合逻辑状态输出需要()A.变量初始赋值B.使用非阻塞赋值C.去掉case默认项D.不使用always块二、填空题(每空2分,共20分)1.Verilog中组合逻辑电路无时钟、无记忆功能,常用________触发always块;时序逻辑电路有时钟、有记忆功能,常用________触发always块。2.阻塞赋值________执行,非阻塞赋值________执行,时序电路必须使用________赋值。3.完整的Verilog模块由模块声明、________、________、________、模块结束五部分组成。4.三段式状态机分别为________、________、________,是工业界标准的状态机写法。5.wire变量默认值为________,reg变量默认值为________。6.实现4选1数据选择器,最少需要________个选择信号端口。7.异步复位的D触发器,复位信号优先级________(高于/低于)时钟信号。8.Verilog中case、casex、casez三个语句中,可匹配任意未知态、高阻态的是________和________。三、简答题(每题6分,共18分)1.简述Verilog中阻塞赋值与非阻塞赋值的使用场景,为什么时序电路禁止使用阻塞赋值?2.简述组合逻辑电路产生锁存器的原因,以及规避锁存器的常用方法。3.简述一段式、二段式、三段式状态机的优缺点。四、代码改错題(每题8分,共16分)找出下列代码中的所有错误,标注错误位置并写出修正后的完整代码(语法错误、逻辑错误、综合错误均需修正)。1.同步复位D触发器错误代码verilog

moduledff(

inputclk,

inputrst,

inputd,

outputregq

);

always@(posedgeclk)begin

if(rst)

q=0;

else

q=d;

end

endmodule2.4选1数据选择器错误代码verilog

modulemux4_1(

input[3:0]din,

input[1:0]sel,

outputregdout

);

always@(*)begin

case(sel)

2'b00:dout=din[0];

2'b01:dout=din[1];

2'b10:dout=din[2];

2'b11:dout=din[3];

endcase

end

endmodule五、编程设计题(共26分)1.设计一个异步低电平复位的8位寄存器,时钟上升沿触发,输入8位数据din,输出8位数据dout。(12分)2.设计一个简单两段式状态机,实现101序列检测,连续检测到101序列时输出高电平,否则输出低电平。(14分)参考答案及详细解析一、单项选择题答案及解析1.D解析:real为实数型变量,仅用于仿真,不可综合;wire、reg、integer均可综合生成硬件电路。2.B解析:always@(posedgeclk)为时钟沿触发,只能描述时序逻辑;组合逻辑必须用always@(*),时序逻辑不能用*触发。3.A解析:=为阻塞赋值,<=为非阻塞赋值,是Verilog标准赋值符号。4.C解析:时序逻辑电路必须使用非阻塞赋值<=,其余选项均为阻塞赋值,仅适用于组合逻辑。5.B解析:Verilog向量定义[3:0],高位在前、低位在后,最低位为第0位。6.C解析:for循环可综合,用于硬件迭代设计;while、repeat、forever仅用于仿真,无法综合。7.B解析:名称关联不受端口顺序影响,可读性强、不易出错,是工程通用写法;位置关联易因端口顺序错乱出错。8.B解析:同步复位依赖时钟,仅在时钟有效沿生效;异步复位随时生效,与时钟无关。9.B解析:按位取反为单目运算符,优先级高于算术运算、逻辑运算、赋值运算。10.A解析:组合逻辑case语句若未覆盖所有分支、无default项,且变量未初始赋值,会生成锁存器;提前初始赋值可规避锁存器。二、填空题答案1.always@(*);时钟边沿(posedge/negedgeclk)2.顺序立即;并行延时;非阻塞3.端口定义;变量声明;逻辑功能描述4.时序逻辑跳转;组合逻辑译码;时序逻辑输出5.Z(高阻);X(未知态)6.27.高于8.casex;casez三、简答题参考答案1.赋值规则及时序电路禁止阻塞赋值原因使用场景:阻塞赋值(=)仅用于组合逻辑电路,代码顺序执行、立即生效;非阻塞赋值(<=)仅用于时序逻辑电路,时钟沿统一更新、并行执行。禁止原因:时序电路依赖时钟边沿触发更新,阻塞赋值顺序执行的特性会导致寄存器输出时序混乱,产生竞争冒险、时序偏移问题,无法保证电路时序稳定性,不符合硬件并行工作原理。2.锁存器产生原因及规避方法产生原因:组合逻辑电路中,使用always块、case、if语句时,存在未覆盖的分支场景,编译器为保持变量值不变,会自动生成锁存器,导致组合逻辑带有记忆功能,违背设计初衷。规避方法:①所有分支完整覆盖,if语句必须搭配else,case语句添加default项;②always块内变量提前统一初始赋值;③纯组合逻辑尽量使用assign连续赋值语句。3.三种状态机优缺点一段式:将状态跳转、译码、输出全部写在一个always块中。优点:代码简短、入门简单;缺点:时序、逻辑混杂,易产生时序错误、不利于时序约束,仅适用于简单电路。二段式:分为时序跳转、组合输出两部分。优点:结构清晰,区分时序与组合逻辑;缺点:组合逻辑输出易产生毛刺、易生成锁存器,稳定性一般。三段式:时序跳转、组合译码、时序输出完全分离。优点:逻辑分层清晰、无毛刺、无时序冲突、易于时序优化,适配复杂状态机;缺点:代码篇幅稍长,是工业标准最优写法。四、改错题答案1.同步复位D触发器错误修正错误点:①时序电路使用阻塞赋值,会造成时序紊乱;②未标注复位有效电平,代码不规范。默认复位高电平有效,时序电路必须使用非阻塞赋值。verilog

moduledff(

inputclk,

inputrst,

inputd,

outputregq

);

//同步高电平复位,时钟上升沿触发

always@(posedgeclk)begin

if(rst)

q<=1'b0;//修正:时序逻辑使用非阻塞赋值

else

q<=d;

end

endmodule2.4选1数据选择器错误修正错误点:①未添加case默认项,综合会生成锁存器;②变量无初始值,存在逻辑漏洞。verilog

modulemux4_1(

input[3:0]din,

input[1:0]sel,

outputregdout

);

always@(*)begin

case(sel)

2'b00:dout=din[0];

2'b01:dout=din[1];

2'b10:dout=din[2];

2'b11:dout=din[3];

default:dout=1'b0;//修正:添加默认分支,规避锁存器

endcase

end

endmodule五、编程设计题参考答案1.异步低电平复位8位寄存器设计说明:时钟上升沿触发,复位信号低电平有效、异步复位(不受时钟控制),复位时输出清零,正常工作时跟随输入数据。verilog

modulereg8bit(

inputclk,

inputrst_n,//低电平异步复位

input[7:0]din,//8位输入数据

outputreg[7:0]dout//8位输出数据

);

//异步复位:posedgeclk或negedgerst_n

always@(posedgeclkornegedgerst_n)begin

if(!rst_n)

dout<=8'd0;

else

dout<=din;

end

endmodule2.101序列检测器(两段式状态机)设计说明:检测连续输入序列1-0-1,检测成功输出高电平1,其余时刻输出0;定义三个状态:S0(初始状态)、S1(检测到1)、S2(检测到10)。verilog

moduleseq_101(

inputclk,

inputrst_n,

inputdin,

outputregflag

);

//状态定义

parameterS0=2'b00;

parameterS1=2'b01;

parameterS2=2'b10;

reg[1:0]curr_state;

reg[1:0]next_state;

//第一段:时序逻辑,状态跳转

always@(posedgeclkornegedgerst_n)begin

if(!rst_n)

curr_state<=S0;

else

curr_state<=next_state;

end

//第二段:组合逻辑,状态译码+输出

always@(*)begin

next_state=curr_state;

flag=1'b0;

case(curr_state)

S0:begin

if(din)

next_state=S1;

else

next_state=S0;

end

S1:begin

if(!din)

next_state=S2;

else

next_state=S1;

end

S2:begin

if(din)begin

next_state=S1;

flag=1'b1;//检测到101,输出高电平

温馨提示

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

最新文档

评论

0/150

提交评论