数字与电路基础设计 5_第1页
数字与电路基础设计 5_第2页
数字与电路基础设计 5_第3页
数字与电路基础设计 5_第4页
数字与电路基础设计 5_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

第9章电路设计的仿真实现习题1010.1尝试实现三个基本门电路模块,“与”、“或”、“非”门。//1.与门模块moduleand_gate(inputwireA,//输入端口AinputwireB,//输入端口BoutputwireY//输出端口Y);assignY=A&B;//与运算endmodule//2.或门模块moduleor_gate(inputwireA,//输入端口AinputwireB,//输入端口BoutputwireY//输出端口Y);assignY=A|B;//或运算endmodule//3.非门模块modulenot_gate(inputwireA,//输入端口AoutputwireY//输出端口Y);assignY=~A;//非运算endmodule10.2在与或非门基础上,实现一个4-2编码器。//4-2编码器模块moduleencoder_4to2(inputwire[3:0]in,//4个输入信号outputreg[1:0]out//2个输出信号);//编码逻辑always@(*)beginout=2'b00;//默认输出为00if(in[3])beginout=2'b11;//如果in[3]为1,编码为11endelseif(in[2])beginout=2'b10;//如果in[2]为1,编码为10endelseif(in[1])beginout=2'b01;//如果in[1]为1,编码为01endelseif(in[0])beginout=2'b00;//如果in[0]为1,编码为00(优先级最低)endendendmodule10.3编写testbench测试10.1和10.2门电路的功能,观察波形,要求输出波形正确。moduleencoder_4to2_tb;//定义信号reg[3:0]in;//4个输入信号wire[1:0]out;//2个输出信号//实例化4-2编码器encoder_4to2uut(.in(in),.out(out));//测试过程initialbegin//初始化输入in=4'b0000;#10;$display("in=%b,out=%b",in,out);in=4'b0001;#10;$display("in=%b,out=%b",in,out);in=4'b0010;#10;$display("in=%b,out=%b",in,out);in=4'b0011;#10;$display("in=%b,out=%b",in,out);in=4'b0100;#10;$display("in=%b,out=%b",in,out);in=4'b0101;#10;$display("in=%b,out=%b",in,out);in=4'b0110;#10;$display("in=%b,out=%b",in,out);in=4'b0111;#10;$display("in=%b,out=%b",in,out);in=4'b1000;#10;$display("in=%b,out=%b",in,out);in=4'b1001;#10;$display("in=%b,out=%b",in,out);in=4'b1010;#10;$display("in=%b,out=%b",in,out);in=4'b1011;#10;$display("in=%b,out=%b",in,out);in=4'b1100;#10;$display("in=%b,out=%b",in,out);in=4'b1101;#10;$display("in=%b,out=%b",in,out);in=4'b1110;#10;$display("in=%b,out=%b",in,out);in=4'b1111;#10;$display("in=%b,out=%b",in,out);//结束仿真$finish;endendmodule10.4在Modulesim或相关仿真软件上模拟设计一个简单的表决器。要求:7人表决,大于3人通过才认可通过。给出测试波形。表决通过用1`b1表示,不通过用1`b0表示。代码://7人表决器模块modulemajority_vote(inputwire[6:0]votes,//7个输入信号,votes[0]到votes[6]outputregresult//输出信号,1表示通过,0表示不通过);//表决逻辑always@(*)beginresult=(votes[0]+votes[1]+votes[2]+votes[3]+votes[4]+votes[5]+votes[6])>3?1'b1:1'b0;endendmodule测试:modulemajority_vote_tb;//定义信号reg[6:0]votes;//7个输入信号wireresult;//输出信号//实例化表决器模块majority_voteuut(.votes(votes),.result(result));//测试过程initialbegin//初始化输入votes=7'b0000000;#10;//所有人都不同意$display("Votes=%b,Result=%b",votes,result);votes=7'b0000001;#10;//1人同意$display("Votes=%b,Result=%b",votes,result);votes=7'b0000011;#10;//2人同意$display("Votes=%b,Result=%b",votes,result);votes=7'b0000101;#10;//3人同意$display("Votes=%b,Result=%b",votes,result);votes=7'b0001001;#10;//4人同意$display("Votes=%b,Result=%b",votes,result);votes=7'b1111111;#10;//所有人都同意$display("Votes=%b,Result=%b",votes,result);votes=7'b1010101;#10;//随机情况,4人同意$display("Votes=%b,Result=%b",votes,result);//结束仿真$finish;endendmodule10.5设计一个ALU(算术逻辑单元),除完成a+b运算之外,能够完成a-b,a/b,a%b等功能,参考表10-1中的运算功能。要求至少实现至少4种算术运算。moduleALU(inputwire[31:0]a,//操作数ainputwire[31:0]b,//操作数binputwire[2:0]opcode,//操作码,用于选择操作outputreg[31:0]result,//运算结果outputregzero,//零标志位outputregoverflow//溢出标志位);//零标志位逻辑always@(*)beginzero=(result==32'b0);end//ALU操作逻辑always@(*)begincase(opcode)3'b000:result=a+b;//加法3'b001:result=a-b;//减法3'b010:beginif(b==0)beginresult=32'hDEADBEEF;//除数为0,返回特殊值endelsebeginresult=a/b;//除法endend3'b011:beginif(b==0)beginresult=32'hDEADBEEF;//除数为0,返回特殊值endelsebeginresult=a%b;//取模endenddefault:result=32'hDEADBEEF;//默认返回特殊值(非法操作)endcase//溢出标志位逻辑(仅对加法和减法有效)if(opcode==3'b000||opcode==3'b001)beginoverflow=(a[31]==b[31])&&(result[31]!=a[31]);endelsebeginoverflow=1'b0;//其他操作无溢出endendendmodule10.6图10.27是同步时序章节中的内容,对照状态图用Verilog实现模块,并通过测试文件来检验状态正确性。用Logisim完成该电路,对照两者的波形是否相符。10.7例题10.18中给出了上升沿触发的D触发器如何实现。在题目基础上,用这个D触发器模块实现一个3位的移位寄存器。用testbench测试并给出波形图。10.8图10.29是多路选择器和D触发器综合实现的移位寄存器。多路触发器单元采用2选1选择单元,E和L为多路选择器的控制信号,尝试用Verilog实现其中的一个子模块,即含有一个D触发器和两个多路选择器的模块。图10.29习题10.8波形图10.9已知波形图如10.30所示,根据波形图示内容,写出模块代码。图10.30习题10.9波形图10.10旅鼠问题进阶:在例10.27基础上,为旅鼠增加一个功能:旅鼠行走的地板可能会消失。信号ground表示旅鼠所在的地板是否消失当地板消失时,旅鼠发出大叫声“aaah”,直到地板重新出现。旅鼠在地板消失时的行走方向都置为0,在地板重新出现时,恢复到原来的行走方向。在地板消失时,不考虑旅鼠下坠,所以没有任何碰撞。进阶波形见图10.31。图10.31习题10.10的波形图10.11设计一个8位计数器,要求:(1)当时钟上升沿到来时,如果有复位信号,则无条件复位,也就是将计数器清0;(2)当时钟上升沿到来时,如果没有复位信号,则计数器+1;(3)计数器初始值为0;(4)当计数器从0到7(完成8跳)则计数器的值恢复为0,此时输出dout为1。modulecounter_8bit(inputwireclk,

温馨提示

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

评论

0/150

提交评论