您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > Verilog-HDL-数字设计与综合[夏宇闻]课后习题答案-(2-10章)
1.互连开关(IS)由以下元件组成:一个共享存储器(MEM),一个系统控制器(SC)和一个数据交换开关(Xbar)。a.使用关键字module和endmodule定义模块MEM,SC和Xbar。不需要定义模块的内容,并且假设模块没有端口列表。b.使用关键字module和endmodule定义模块IS。在IS中调用(实例引用)MEM,SC和Xbar模块,并把它们分别命名为mem1,sc1和xbar1。不需要定义模块的内容,并且假设模块没有端口列表。c.使用关键字module和endmodule定义激励块(Top)。在Top模块中调用IS模块,将其命名(或称实例化、具体化)为is1。答:moduleMEM;endmodulemoduleSC;endmodulemoduleXbar;endmodulemoduleIS;MEMmem1;SCsc1;Xbarxbar1;endmodulemoduleTOP;ISis1;endmodule2.一个四位脉动进位加法器由4个一位全加器组成。a.定义模块FA。不需要定义模块内容和端口列表。b.定义模块Ripple_Add,不需要定义模块内容和端口列表。在模块中调用4个FA类型的全加器,把它们分别命名为fa0,fa1,fa2和fa3。答:moduleFA;endmodulemoduleRipple_Add;FAfa0;FAfa1;FAfa2;第5章门级建模41FAfa3;Endmodule1.试写出以下数字:a.将十进制数123用8位二进制数表示出来,使用“_”增加可读性;b.未知的16位十六进制数,各位均为x;c.将十进制数2使用4位二进制数表示出来,并写出结果的2的补码形式;d.一个无位宽说明的十六进制数1234。答:a.8’b0111_1011b.16’hxc.-4’b0010,补码4’b1110d.’h12342.下面的各个字符串是否合法?如果非法,请写出正确答案。a.“Thisisastringdisplayingthe%sign”b.“out=in1+in2”c.“Pleaseringabell\007”d.“Thisisabackslash\character\n”答:a是错误的,应改为“Thisisastringdisplayingthe%%sign”,编译后输出:#Thisisastringdisplayingthe%sign(注意,输出结果前#符号是仿真器输出每行前自带的标志符,在本习题解答中不予去除,下同)b#out=in1+in2c#Pleaseringabelld#Thisisabackslashcharacter#应改为双斜线\\,如“Thisisabackslash\\character\n”(主要考察的是特殊字符的输出,比如a中的输出%需要%%操作。C中的\007在编译器中输出为空,复制到word中输出是一个,有兴趣的同学可以自己试验一下,比如\006输出是,\004输出是,等等。d中的\character在转义操作符\后跟的单词无语法意义,故在输出character,而\n表示换行,仿真后的输出也是如此显示的。)3.下面的各个标识符是否合法?a.system1b.1regc.$latchd.exec$VerilogHDL数字设计与综合(第二版)42答:a是合法的;b、c不能以1和$开头;d是合法的。4.声明下面的Verilog变量:a.一个名为a_in的8位向量线网;b.一个名为address的32位寄存器,第31位为最高有效位;将此寄存器的值设置为十进制数3;c.一个名为count的整数;d.一个名为snap_shot的时间变量;e.一个名为delays的数组,该数组中包含20个integer类型的元素;f.含有256个字的存储器MEM,每个字的字长为64位;g.一个值为512的参数cache_size。答:定义如下:a.wire[7:0]a_in;b.reg[31:0]address='d3;c.integercount;d.timesnap_shot;e.integerdelays[0:19];f.reg[63:0]MEM[0:255];g.parametercache_size=512;5.下面各条语句的输出结果是什么?a.latch=4'd12;$display(“Thecurrentvalueoflatch=%b\n”,latch);b.in_reg=3'd2;$monitor($time,“Inregistervalue=%b\n”,in_reg[2:0]);c.`defineMEM_SIZE1024$display(“Themaximummemorysizeis%h”,`MEM_SIZE);答:仿真输出结果如下:a#Thecurrentvalueoflatch=1100#b#0Inregistervalue=010#c#Themaximummemorysizeis00000400注意:1.本题中的变量默认为长度正好相符,比如latch=4’d12就相当于reg[3:0]latch。2.b中的$time代表时间,根据给in_reg这个寄存器赋值时间而变化,比如在第5秒对in_reg进行赋值,就会显示:#5Inregistervalue=010第5章门级建模43答:模块代码如下modulestimulus();regCLOCK;reg[3:0]REG_IN;wire[3:0]REG_OUT;//*******connectbyname************shift_regsr1(.clock(CLOCK),.reg_in(REG_IN),.reg_out(REG_OUT));endmodule6.写出REG_IN,CLK和REG_OUT的层次名。答:分别是:stimulus.REG_INstimulus.CLKstimulus.REG_OUT7.写出模块实例sr1及其端口clock和reg_in的层次名。答:分别是:stimulus.sr1stimulus.sr1.clockstimulus.sr1.reg_instimulus.sr1.reg_out1.利用双输入端的nand门,用Verilog编写自己的双输入端的与门、或门和非门,把它们分别命名为my_or,my_and和my_not,并通过激励模块验证这些门的功能。答:`timescale1ns/1ns/**************************************my_and***************************************/modulemy_and(in1,in2,out);inputin1,in2;outputout;wireout1;nanda1(out,out1,out1);第5章门级建模41nanda2(out1,in1,in2);endmodule/**************************************my_or****************************************/modulemy_or(in1,in2,out);inputin1,in2;outputout;wireout1,out2;nando1(out,out1,out2);nando2(out1,in1,in1);nando3(out2,in2,in2);endmodule/**************************************my_not***************************************/modulemy_not(in,out);inputin;outputout;nandn1(out,in,in);endmodule/**************************************test***************************************/moduletest;rega,b;wireand_c,or_c,not_c;initialbegina=0;b=0;#10a=0;b=1;#10a=1;b=0;#10a=1;b=1;#10$stop;endmy_andmyand1(a,b,and_c);my_ormyor1(a,b,or_c);my_notmynot1(a,not_c);endmodule2.使用上题中完成的my_or,my_and和my_not门构造一个双输入端的xor门,其功能是计算z=x’y+xy’,其中x和y为输入,z为输出;编写激励模块对x和y的四种输入组合进行测试仿真。答:在上题代码的基础上,添加如下代码:(注意,xor在仿真器中已自备,这里用my_xor)/*************************************my_xor*******************z=x'y+xy'*************************************/第5章门级建模41modulemy_xor(in1,in2,out);inputin1,in2;outputout;wirenot_in1,not_in2,out_a1,out_a2;my_notmynot1(in1,not_in1);my_notmynot2(in2,not_in2);my_andmyand1(in1,not_in2,out_a1);my_andmyand2(in2,not_in1,out_a2);my_ormyor1(out_a1,out_a2,out);endmodulemoduletest52;regx,y;wirez;initialbeginx=0;y=0;#10x=0;y=1;#10x=1;y=0;#10x=1;y=1;#10$stop;endmy_xormyxor(x,y,z);endmodule3.本章中的一位全加器使用乘积项之和的形式可以表示为①:sum=abc_in+a’bc_in’+a’b’c_in+ab’c_in’c_out=ab+bc_in+ac_in其中a,b和c_in为输入,sum和c_out为输出;只使用与门、或门、非门实现一个一位全加器,写出其Verilog描述,限制是每个门最多只能有四个输入端。编写激励模块对其功能进行检查,并对全部的输入组合进行测试。①上面两个习题中原书作者用“’”表示取反操作,用“”表示与操作。——译者注VerilogHDL数字设计与综合(第二版)42答:在前面的课程中已经学习过一位全加器的相关知识,一位全加器的电路如下所示:按此电路图,采用门级描述代码如下:`timescale1ns/1nsmodulefull_add(a,b,c_in,sum,c_out);inputa,b,c_in;outputsum,c_out;wires1,s2,s3,s4,s5,s6,s7;nand(s1,a,b);nand(s2,a,s1);nand(s3,b,s1);nand(s4,s2,s3);nand(s5,s4,c_in);nand(s6,s4,s5);nand(s7,s5,c_in);nand(sum,s6,s7);nand(c_out,s5,s1);endmodulemoduletest53;rega,b,c_in;wiresum,c_out;initialbegina=0;b=0;c_in=0;#10a=0;b=0;c_in=1;#10a=0;b=1;c_in=0;#10a=0;b=1;c_in=1;#10a=1;b=0;c_in=0;第5章门级建模43#10a=1;b=0;c_in=1;#10a=1;b=1;c_in=0;#10a=1;b=1;c_in=1;#10$stop;endinitial$monitor($time,a=%b,b=%b,c_in=%b,su
本文标题:Verilog-HDL-数字设计与综合[夏宇闻]课后习题答案-(2-10章)
链接地址:https://www.777doc.com/doc-5739325 .html