您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > verilog复习卷
二○一○~二○一一学年第二学期(A)卷课程名称Verilog硬件描述语言填空题(共26分,每空2分)1.Verilog的基本设计单元是模块。它是由两部分组成,一部分描述接口;另一部分描述逻辑功能,即定义输入是如何影响输出的。2.用assign描述的语句我们一般称之为组合逻辑,并且它们是属于并行语句,即于语句的书写次序无关。而用always描述的语句我们一般称之为组合逻辑或时序逻辑,并且它们是属于串行语句,即于语句的书写有关。1.在case语句中至少要有一条default语句二、简答题(共15分,每小题5分)1.怎样理解在进程语句中,阻塞语句没有延迟这句话?答:这是因为,在进程语句中,有阻塞语句和非阻塞语句这两种,非阻塞语句是有延迟的,而阻塞语句它也是有延迟的,这是因为因果系统都有延迟的,只是阻塞语句的延迟比非阻塞语句的延迟小若干个数量级,因此可视为没有延迟。2.在进程中什么情况下综合为时序电路?什么情况下综合为组合电路?答:在进程中只有当敏感信号是沿触发(即上升沿或下降沿)时,此时综合为时序电路;而在进程中只有当敏感信号是电平沿触发时,此时综合为组合电路。3.为什么在Verilog语言中,其综合只支持次数确定的循环,而不支持次数不确定的循环?答:这是因为,在Verilog语言中,它是为电路设计而设计的一门语言,它如高级语言不同,若循环的次数不确定,则会带来不确定的延迟,而这在电路中是不允许存在的,故综合只支持次数确定的循环,即对于一个具体的芯片,其延迟是一个定值。三、改错(15分)//下述是一个实现四位数的BCD码加法的程序modulebcdadd(clk,a,b,c,d,a1,b1,c1,d1,q1,q2,q3,q4,cout);inputclk;input[3:0]a,b,c,d,a1,b1,c21,d21;output[3:0]q1,q2,q3,q4;outputcout;//输出进位reg[3:0]q1,q2,q3,q4;always@(clk,oraorborcordora1orb1orc1ord1)beginq1=a+a1;if(q19){cout,q1}=q1+6;q2=b+b1+cout;if(q29){cout,q2}=q2+6;q3=c+c1+cout;if(q39){cout,q3}=q3+6;q4=d+d1+cout;if(q49){cout,q4}=q4+6;endmodule四、编程(15分)编程实现带异步清0、异步置1的D触发器。moduleDFF1(q,qn,d,clk,set,reset);inputd,clk,set,reset;outputq,qn;regq,qn;always@(posedgeclkornegedgesetornegedgereset)beginif(!reset)beginq=0;//异步清0,低电平有效qn=1;endelseif(!set)beginq=1;//异步置1,低电平有效qn=0;endelsebeginq=d;qn=~d;endendendmodule五、编程(15分)编程实现求补码的程序,输入是带符号的8位二进制数。moduletest12(clk,din,dout);inputclk;input[7:0]din;output[7:0]dout;reg[7:0]dout;regx;reg[6:0]y;always@(clkordin)beginx=din[7];//符号位赋给xif(x==1)//当符号位为1,即负数beginy=din[6:0];//除符号位之外的7位赋值给ydout[6:0]=~y;//对其取反dout[7]=x;//符号位不变endelsedout=din;//若符号位不为1,即为0,正数,补码为其本身endendmodule六、编程(14分)编程实现一个并行加载串行输出的程序,输入是一个8位的二进制数。moduletest12(clk,en,d_in,s_out);inputclk;inputen;input[9:0]d_in;outputs_out;regs_out;reg[3:0]I;always@(posedgeclk)beginif(en==1'b1)beginif(I==4'b0000)begins_out=d_in[9];endif(I==4'b0001)begins_out=d_in[8];endif(I==4'b0010)begins_out=d_in[7];endif(I==4'b0011)begins_out=d_in[6];endif(I==4'b0100)begins_out=d_in[5];endif(I==4'b0101)begins_out=d_in[4];endif(I==4'b0110)begins_out=d_in[3];endif(I==4'b0111)begins_out=d_in[2];endif(I==4'b1000)begins_out=d_in[1];endif(I==4'b1001)begins_out=d_in[0];endI=I+1;if(I4'b1001)beginI=4'b0000;endendendendmodule二○一○~二○一一学年第二学期(B)卷参考答案及评分标准课程名称Verilog硬件描述语言一、填空题(共10分,每空2分)1.已知x=4’b1001,y=4’0110,则x的4位补码为4’b1111,而y的4位的补码为4’b01102.在case语句中至少要有一条default语句。3.两个进程之间是并行语句。而在Always中的语句则是顺序语句。二、简答题(共20分,每小题5分)1.进程语句的启动条件是怎样?答:进程语句的启动条件是敏感信号发生变化,则进程语句启动,并且从上到下执行一次,然后就处于等待状态,当敏感信号再发生变化,再从复上述过程。2.为什么在Verilog语言中,其综合只支持次数确定的循环,而不支持次数不确定的循环?答:这是因为,在Verilog语言中,它是为电路设计而设计的一门语言,它如高级语言不同,若循环的次数不确定,则会带来不确定的延迟,而这在电路中是不允许存在的,故综合只支持次数确定的循环,即对于一个具体的芯片,其延迟是一个定值。3.Reg型和wire型信号有什么本质的区别?Reg型信号的初始值一般是什么?答:Reg型信号用于进程语句中,并且其语句是顺序语句;而wire型信号则用于模块中,并且其语句是并发语句;Reg型信号的初始值一般为左边值,即0。4.在Verilog语言中什么情况下必需使用复合语句?表达一个复合语句的的语法是怎样的?答:在进程语句中,其条件和循环语句中,只能执行一条语句,当多于一条语句时,则要采用复合语句,复合语句以begin开头,以end作为结束。三、改错(15分)//下述是一个实现计数器,并用数码管显示:modulealpher(choice,data,clk);inputclk;output[6:0]choice,data;reg[3:0]count;always@(posedgeclkorchoice)begincount=count+1;case(count)4'b0000:data=8'b11111100;//(共阴的数字0)4'b0001:data=8'b01100000;4'b0010:data=8'b11011010;4'b0011:data=8'b11110010;4'b0100:data=8'b01100110;4'b0101:data=8'b10110110;4'b0110:data=8'b10111110;4'b0111:data=8'b11100000;4'b1000:data=8'b11111110;4'b1001:data=8'b11110110;4'b1010:data=8'b11101110;4'b1011:data=8'b00111110;4'b1100:data=8'b10011100;4'b1101:data=8'b01111010;4'b1110:data=8'b10011110;endcasechoice=8'b1000000;//(点亮第1位数码管)endmodule四、编程(15分)编程实现带同步清0、同步置1的D触发器。moduleDFF2(q,qn,d,clk,set,reset);inputd,clk,set,reset;outputq,qn;regq,qn;always@(posedgeclk)beginif(reset)beginq=0;qn=1;//同步清0,高电平有效endelseif(set)beginq=1;qn=0;//同步置1,高电平有效endelsebeginq=d;qn=~d;endendendmodule五、编程(15分)编程实现两个4位二进制数相减的程序。moduleupdown_count(a,d,clk,sub);input[3:0]a,d;inputclk;output[3:0]sub;reg[3:0]sub;always@(clkoraord)beginif(a=d)sub=a-d;elsesub=d-a;endendmodule六、编程(10分)编程实现一个并行加载串行输出的程序,输入是一个8位的二进制数。moduletest12(clk,en,d_in,s_out);inputclk;inputen;input[9:0]d_in;outputs_out;regs_out;reg[3:0]I;always@(posedgeclk)beginif(en==1'b1)beginif(I==4'b0000)begins_out=d_in[9];endif(I==4'b0001)begins_out=d_in[8];endif(I==4'b0010)begins_out=d_in[7];endif(I==4'b0011)begins_out=d_in[6];endif(I==4'b0100)begins_out=d_in[5];endif(I==4'b0101)begins_out=d_in[4];endif(I==4'b0110)begins_out=d_in[3];endif(I==4'b0111)begins_out=d_in[2];endif(I==4'b1000)begins_out=d_in[1];endif(I==4'b1001)begins_out=d_in[0];endI=I+1;if(I4'b1001)beginI=4'b0000;endendendendmodule七、编程(15分)用阻塞赋值方式编程实现二选一功能。modulesel(d0,d1,sel,q);outputq;inputd0,d1,sel;regq;always@(d0ord1orsel)beginif(sel==1)q=d0;elseq=d1;endendmoduleassign(sel==0)?d0:d1
本文标题:verilog复习卷
链接地址:https://www.777doc.com/doc-5277485 .html