您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > verilog-hdl答案
第1章简介1.VerilogHDL是在哪一年首次被IEEE标准化的?VerilogHDL是在1995年首次被IEEE标准化的。2.VerilogHDL支持哪三种基本描述方式VerilogHDL可采用三种不同方式或混合方式对设计建模。这些方式包括:行为描述方式—使用过程化结构建模;数据流方式—使用连续赋值语句方式建模;结构化方式—使用门和模块实例语句描述建模3.可以使用VerilogHDL描述一个设计的时序吗?VerilogHDL可以清晰的建立时序模型,故可以使用VerilogHDL描述一个设计的时序。4.语言中的什么特性能够用于描述参数化设计?在行为级描述中,VerilogHDL不仅能够在RTL级上进行设计描述,而且能够在体系结构级描述及其算法级行为上进行设计描述,而且能够使用门和模块实例化语句在结构级进行结构描述,这种特性可用于描述参数化设计。5.能够使用VerilogHDL编写测试验证程序吗?能,可以编写testbench来对编写的程序进行验证。6.VerilogHDL是由哪个公司最先开发的?VerilogHDL是由GatewayDesignAutomation公司最先开发的7.VerilogHDL中的两类主要数据类型是什么?线网数据类型和寄存器数据类型。线网类型表示构件间的物理连线,而寄存器类型表示抽象的数据存储元件。8.UDP代表什么?UDP代表用户定义原语9.写出两个开关级基本门的名称。pmosnmos10.写出两个基本逻辑门的名称。andor第2章HDL指南1.在数据流描述方式中使用什么语句描述一个设计?设计的数据流行为使用连续赋值语句进行描述2.使用`timescale编译器指令的目的是什么?举出一个实例。使用编译指令将时间单位与物理时间相关联。例如`timescale1ns/100ps此语句说明时延时间单位为1ns并且时间精度为100ps(时间精度是指所有的时延必须被限定在0.1ns内)3.在过程赋值语句中可以定义哪两种时延?请举例详细说明。1)语句间时延:这是时延语句执行的时延。例:Sum=(A^B)^Cin;#4T1=A&Cin;在第二条语句中的时延规定赋值延迟4个时间单位执行2)语句内时延:这是右边表达式数值计算与左边表达式赋值间的时延。例:Sum=#3(A^B)^Cin;这个赋值中的时延意味着首先计算右边表达式的值,等待3个时间单位,然后赋值给Sum。4.采用数据流描述方式描述图2-4中所示的1位全加器。moduleFA_Seq(A,B,Cin,Sum,Cout);inputA,B,Cin;outputSum,Cout;wireT1,T2,T3,S1;assignT1=A&Cin;assignT2=B&Cin;assignT3=A&B;assignS1=A^B;assignSum=S1^Cin;assignCout=(T1|T2)|T3;endmodule4.initial语句与always语句的关键区别是什么?1)initial语句:此语句只执行一次。2)always语句:此语句总是循环执行,或者说此语句重复执行。6.写出产生图2-10所示波形的变量BullsEye的初始化语句。`timescale1ns/1nsmoduleTest(BullsEye);outputBullsEye;regBullsEye;initialbeginBullsEye=0;BullsEye=#21;BullsEye=#10;BullsEye=#91;BullsEye=#100;BullsEye=#21;BullsEye=#30;BullsEye=#51;endendmodule7.采用结构描述方式描写图2-2中所示的2-4译码器。moduleDecoder2x4(A,B,EN,Z);inputA,B,EN;output[0:3]Z;wireAbar,Bbar;notv0(Abar,A),v1(Bbar,B);nandN0(Z[0],Abar,Bbar,EN),N1(Z[1],Abar,B,EN),N2(Z[2],A,Bbar,EN),N3(Z[3],A,B,EN);endmodule8.为2.3节中描述的模块Decode2X4编写一个测试验证程序。moduleTes;regTA,TB,TEN;wire[0:3]TZ;Decoder2x4DT2x4(TA,TB,TEN,TZ);initialbegin$monitor($time,A=%b,B=%b,EN=%b,Z=%b,TA,TB,TEN,TZ);endinitialbeginTA=0;TB=0;TEN=0;#5TA=1;TB=1;#5TEN=1;#5TA=0;TB=0;#5TA=0;TB=1;#5TA=1;TB=0;endendmodule9.列出你在VerilogHDL模型中使用的两类赋值语句。连续赋值语句assign,阻塞赋值语句=10.在顺序过程中何时需要定义标记?顺序过程内有局部声明的变量时,初始化语句中的顺序过程必须标记。11.使用数据流描述方式编写图2-11所示的异或逻辑的VerilogHDL描述,并使用规定的时延。moduleXORL(A,B,Z);inputA,B;outputZ;wireAbar,Bbar,Z1,Z2;assign#1Bbar=~B;assign#1Abar=~A;assign#5Z1=A&Bbar;assign#5Z2=B&Abar;assign#4Z=Z1|Z2;endmodule12.找出下面连续赋值语句的错误。assignReset=#2^WriteBus;不符合连续赋值语句的语法,应该为:assign#2Reset=^WriteBus;第3章Verilog语言要素1.下列标识符哪些合法,哪些非法?COunT,1_2Many,\**1,Real?,\wait,Initial答:COunT合法,1_2Many非法,\**1,Real?非法,\wait合法,Initial合法2.系统任务和系统函数的第一个字符标识是什么?答:$3.举例说明文本替换编译指令?答:`define指令用于文本替换,它很像C语言中的#define指令,如:`defineMAX_BUS_SIZE32...reg[`MAX_BUS_SIZE-1:0]AddReg;4.在VerilogHDL中是否有布尔类型?答:没有5.下列表达式的位模式是什么?7'o44位八进制数,'Bx0位二进制数,5'bx110位二进制数,'hA0位十六进制数,10'd2位十进制数,'hzF位十六进制数6.赋值后存储在Qpr中的位模式是什么?reg[1:8*2]Qpr;...Qpr=ME;答:变量需要8*2位7.如果线网类型变量说明后未赋值,其缺省值为多少?答:z8.VerilogHDL允许没有显示说明的线网类型。如果是这样,怎样决定线网类型?答:在VerilogHDL中,有可能不必声明某种线网类型。在这样的情况下,缺省线网类型为1位线网。可以使用`default_nettype编译器指令改变这一隐式线网说明方式。使用方法如下:`default_nettypenet_kind例如,带有下列编译器指令:`default_nettypewand任何未被说明的网缺省为1位线与网。9.下面的说明错在哪里?integer[0:3]Ripple;答:应该是integerRipple[0:3]10.编写一个系统任务从数据文件“memA.data”中加载32×64字存储器。答:reg[15:0]RomB[0:2047];$readmemb(memA.data,RomB);11.写出在编译时覆盖参数值的两种方法。答:以使用参数定义语句或通过在模块初始化语句中定义参数值。第4章表达式1.说明参数GATE_DELAY,参数值为5。parameterGATE_DELAY=52.假定长度为64个字的存储器,每个字8位,编写Verilog代码,按逆序交换存储器的内容。即将第0个字与第63个字交换,第1个字与第62个字交换,以此类推。reg[7:0]mem[63:0];integeri=0;reg[7:0]temp;while(i32)begintemp=mem[i];mem[i]=mem[63-i];mem[63-i]=temp;i=i+1;end3.假定32位总线Address_Bus,编写一个表达式,计算从第11位到底20位的归约与非。~&addressBus[20:11]4.假定一条总线Control_Bus[15:0],编写赋值语句将总线分为两条总线:Abus[0:9]和Bbus[6:1]。Abus=ControlBus[9:0];Bbus=ControlBus[15:10];5.编写一个表达式,执行算术移位,将Qparity中包含的8位有符号数算术移位。{Qparity[7-i:0],Qparity[7:8-i]}//左移,i表示移的位数{Qparity[i-1:0],Qparity[7:i]}//右移,i表示移的位数6.使用条件操作符,编写赋值语句选择NextState的值。如果CurrentState的值为RESET,那么NextState的值为GO;如果CurrentState的值为GO,则NextState的值为BUSY;如果CurrentState的值为BUSY,则NextState的值为RESET。NextState=(CurrentState==RESET)?Go:(CurrentState==Go?BUSY:RESET)7.使用单一连续赋值语句为图2-2所示的2-4解码器电路的行为建模。【提示:使用移位操作符、条件操作符和连接操作符。】assignZ=EN?{~(A&B),~(A&~B),~(~A&B),~(~A&~B)}:4b'1111;8.如何从标量变量A、B、C和D中产生总线BusQ[3:0]?如何从两条总线BusA[3:0]和BusY[20:15]形成新的总线BusR[10:1]?BusQ[3:0]={D,C,B,A}BusR[10:1]={BusY[20:15],BusA[3:0]}第5章门电平模型化1.用基本门描述图5-11显示的电路模型。编写一个测试验证程序用于测试电路的输出。使用所有可能的输入值对电路进行测试。modulecompare(A,B,Q);input[3:0]A;input[3:0]B;outputQ;xor(E0,A[0],B[0]),(E1,A[1],B[1]),(E2,A[2],B[2]),(E3,A[3],B[3]);or(Q,E0,E1,E2,E3);endmodule测试:modulecomparetest;parameterCLK_PERIOD=20;//20ns50MHZreg[7:0]p;reg[3:0]A;reg[3:0]B;regclock;reg[7:0]p1;initialclock=0;always#(CLK_PERIOD/2)clock=~clock;initialp=8'b00000000;always@(posedgeclock)beginp1=p;p=p1+1;A[0]=p[0];A[1]=p[1];A[2]=p[2];A[3]=p[3];B[0]=p[4];B[1]=p[5];B[2]=p[6];B[3]=p[7];endcompareinst_compare(.A(A),.B(B));endmodule2.使用基本门描述如图5-12所示的优先编码器电路模型。当所有输入为0时,输出Valid为0,否则输出为1。并且为验证优先编码器的模型行为编写测试验证程序。modulepriority(Data,Encode,valid);input[3:0]Data;output[1:0]Encode;outputvalid;not(Data2bar,Data[2]);and(out1,Data2bar,Data[1]);or(out2,Data[1],Data[0]),(Encode[0],Data[3],out1),(E
本文标题:verilog-hdl答案
链接地址:https://www.777doc.com/doc-4845075 .html