1、硬件描述语言上机作业班级:1314011学号:13140110028姓名:梁全振时间:2015 年 10 月 28 号硬件描述语言上机作业报告总体要求:1、 设计仿真基于 Modelsim 工具;2、 提供每一道题目的 Verilog 电路设计代码、仿真测试代码和仿真结果,仿真结果用截图的方式。3、 设计报告封面写上学号和姓名。4、 提交 email: 。第一题:用 Verilog 语言的结构描述和行为描述分别设计下面的电路。A 0 B 0 A 1 B 1 A 2 B 2 Y结构描述:电路设计代码:module jg(A,B,Y); input2:0 A,B; output Y; wire w
2、1,w2,w3; xor U1(w1,A0,B0); xor U2(w2,A1,B1); xor U3(w3,A2,B2); nor U4(Y,w1,w2,w3); endmodule 仿真测试代码:module test_jg;reg2:0 A,B;wire Y;jg U1(A,B,Y);initialbeginA=3b000;B=3b000;#50 A=3b000;B=3b000;#50 A=3b111;B=3b111;#50 A=3b000;B=3b110;#50 A=3b111;B=3b000;#50 A=3b110;B=3b110;#50 A=3b011;B=3b010;#50 A=
3、3b001;B=3b011;#50 A=3b111;B=3b010;#50 $stop;endinitial $monitor($time,“tA=%dtB=%dtY=%d“,A,B,Y);endmodule验证结果:行为描述:电路设计代码:module xw(A,B,Y);input2:0 A,B;output Y;wire Y;assign Y=(A0B0)|(A1B1)|(A2B2);endmodule 仿真测试代码:module test_xw;reg2:0 A,B;wire Y;xw U1(A,B,Y);initialbeginA=3b000;B=3b000;#50 A=3b000;
4、B=3b000;#50 A=3b111;B=3b111;#50 A=3b000;B=3b110;#50 A=3b111;B=3b000;#50 A=3b110;B=3b110;#50 A=3b011;B=3b010;#50 A=3b001;B=3b011;#50 A=3b111;B=3b010;#50 $stop;endinitial $monitor($time,“tA=%btB=%btY=%b“,A,B,Y);endmodule验证结果:第二题:参数化电路设计1. 用行为描述方式实现下图所示的具有 “one-hot”(独热)状态的环形计数器。要求使用参数化的模块。parameter SIZ
5、E =3;input clock, reset;output SIZE-1:0counter;说明:低电平同步复位,此时 counter 最低位为 “1”,其余位均为 “0”。2. 编写测试程序来验证该模块的正确性,要求测试对象是一个 5 位的独热状态环形计数器。 001clkcounter2rest counter1counter0DQDQDQ电路设计代码:module one_hot(counter,clock,reset);parameter SIZE =3;input clock, reset;outputSIZE-1:0counter;regSIZE-1:0counter;alway
6、s(posedge clock)if(reset) counter=1;else counter= counter0,counterSIZE-1:1;endmodule仿真测试代码:module test_one_hot;reg clock,reset;wire counter;one_hot U1(counter,clock,reset);always#50 clock=clock;initialbegin clock=0;#20 reset=1;#40 reset=0;#500 $stop;endinitialbegin$monitor($time,“tclock=%btreset=%bt
7、counter=%b“,clock,reset,counter);endendmodule验证结果:第三题 :计数器设计1 用 DFF 实现二分频;要求:( 1) 画出数字电路原理图;( 2) 采用行为描述方式实现 DFF,其中 DFF 具有异步清零功能;电路原理图:电路设计代码:(行为描述)module dff_ef(Q,clk,reset);output Q;input clk,reset;reg Q;always(posedge clk or reset)if(!reset) Q=1b0;elseQ=Q;endmodule 仿真测试代码:module test_dff_ef;wire Q
8、;reg clk,reset;dff_ef U1(Q,clk,reset);always #50 clk=clk;initialbeginreset=0; clk=0;#10 reset=1;#30 reset=0;#10 reset=1;#500 $finish;endinitial$monitor($time,“treset=%btclk=%btQ=%b“,reset,clk,Q);endmodule验证结果:2 用 VERILOG 写一段代码,实现 10 进制计数器。电路原理图:电路设计代码:module tenbit(count,clk,reset,out);output3:0 count;input clk,reset;reg3:0 count;always (posedge clk or negedge reset)beginif(reset)count=4b0000;else if(count=4b1001)count=1b0;elsecount=count+1;endmodule仿真测试代码:module test_tenbit;wire out;wire3:0 count;