当前位置:文档之家› verilog硬件描述语言 上机

verilog硬件描述语言 上机

《硬件描述语言》上机作业西电微电子\第一题:用Verilog语言的结构描述和行为描述分别设计下面的电路。

A[0] Array B[0]A[1]B[1]A[2]B[2]结构描述:电路设计:module hw1(A,B,Y); input[2:0] A,B;output Y;wire w1,w2,w3;xor U1(w1,A[0],B[0]);xor U2(w2,A[1],B[1]);xor U3(w3,A[2],B[2]);nor U4(Y,w1,w2,w3);endmodule仿真测试:module test_hw1;reg[2:0] A,B;wire Y;hw1 U1(A,B,Y);initialbeginA=3'b000;B=3'b000;#50 A=3'b000;B=3'b000;#50 A=3'b111;B=3'b111;#50 A=3'b000;B=3'b110;#50 A=3'b111;B=3'b000;#50 A=3'b110;B=3'b110;#50 A=3'b011;B=3'b010;#50 A=3'b001;B=3'b011;#50 A=3'b111;B=3'b010;#50 $stop;endinitial $monitor($time,"\tA=%d\tB=%d\tY=%d",A,B,Y); Endmodule行为描述:电路设计:module hw2(A,B,Y);input[2:0] A,B;output Y;wire Y;assign Y=~((A[0]^B[0])||(A[1]^B[1])||(A[2]^B[2])); endmodule仿真测试:module test_hw2;reg[2:0] A,B;wire Y;hw2 U1(A,B,Y);initialbeginA=3'b000;B=3'b000;#50 A=3'b000;B=3'b000;#50 A=3'b111;B=3'b111;#50 A=3'b000;B=3'b110;#50 A=3'b111;B=3'b000;#50 A=3'b110;B=3'b110;#50 A=3'b011;B=3'b010;#50 A=3'b001;B=3'b011;#50 A=3'b111;B=3'b010;#50 $stop;endinitial $monitor($time,"\tA=%b\tB=%b\tY=%b",A,B,Y); endmodule第二题:参数化电路设计1. 用行为描述方式实现下图所示的具有“one -hot”(独热)状态的环形计数器。

要求使用参数化的模块。

parameter SIZE =3; input clock, reset;output [SIZE -1:0]counter;说明:低电平同步复位,此时counter 最低位为“1”,其余位均为“0”。

clk ]res et]]2. 编写测试程序来验证该模块的正确性,要求测试对象是一个5位的独热状态环形计数器。

电路设计:module hw3(counter,clock,reset); parameter SIZE =3; input clock,reset; output[SIZE-1:0]counter; reg[SIZE-1:0]counter;always@(posedge clock)if(reset)counter<=1;elsecounter<={ counter[0],counter[SIZE-1:1]};endmodule仿真测试代码:module test_hw3;reg clock,reset;wire counter;hw3 U1(counter,clock,reset);always#50 clock=~clock;initialbeginclock=0;#20 reset=1;#40 reset=0;#500 $stop;endinitialbegin$monitor($time,"\tclock=%b\treset=%b\tcounter=%b",clock,reset,counter );endendmodule第三题:计数器设计1.用DFF实现二分频;要求:(1)画出数字电路原理图;(2)采用行为描述方式实现DFF,其中DFF具有异步清零功能;电路设计:module hw4(Q,clk,reset);output Q;input clk,reset;reg Q;always@(posedge clk or reset)if(!reset)Q<=1'b0;elseQ=~Q;endmodule仿真测试:module test_hw4;wire Q;reg clk,reset;hw4 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=%b\tclk=%b\tQ=%b",reset,clk,Q); endmodule2.用VERILOG写一段代码,实现10进制计数器。

电路设计:module hw5 (clk,rst,counter_1,counter_10);input clk,rst;output[3:0]counter_1,counter_10;reg[3:0]counter_1,counter_10;always @(posedge clk or negedge rst)if(!rst)begincounter_1<=4'b0000;counter_10<=4'b0000;endelse if(counter_1!=4'b1001)counter_1<=counter_1+4'b0001;else if(counter_10!=4'b1001)begincounter_1<=4'b0000;counter_10=counter_10+4'b0001;endelsebegincounter_1<=4'b0000;counter_10<=4'b0000;endendmodule仿真测试:module hw5_test;reg clk;reg rst;wire[3:0]counter_1,counter_10;hw5 U1 (clk,rst,counter_1,counter_10);initialbeginclk=0;rst=1;#30 rst=0;#90 rst=1;endalways#50 clk=~clk;endmodule第四题:组合电路设计1.A,B,C,D,E进行投票,多数服从少数,输出是F(也就是如果A,B,C,D,E中1的个数比0多,那么F输出为1,否则F为0),用与非门实现,输入数目没有限制。

电路设计:module hw6(a,b,c,d,e,f);input a,b,c,d,e;output f;wire f;wire w0,w1,w2,w3,w4,w5,w6,w7,w8,w9;nand n0(w0,a,b,c),n1(w1,a,b,d),n2(w2,a,b,e),n3(w3,a,c,d),n4(w4,a,c,e),n5(w5,a,d,e),n6(w6,b,c,d),n7(w7,b,c,e),n8(w8,b,d,e),n9(w9,c,d,e);nand(f,w0,w1,w2,w3,w4,w5,w6,w7,w8,w9);endmodule仿真测试:module hw6_test;reg a,b,c,d,e;wire y;hw6 test(.f(y),.a(a),.b(b),.c(c),.d(d),.e(e));initialbegin{a,b,c,d,e}=5'b01011;#10 {a,b,c,d,e}=5'b00100;#10 {a,b,c,d,e}=5'b01101;#10 {a,b,c,d,e}=5'b00000;#10 {a,b,c,d,e}=5'b01001;#10 {a,b,c,d,e}=5'b11111;#10 {a,b,c,d,e}=5'b11110;endinitial $monitor($time,"abcde:%b f:%b",{a,b,c,d,e},y);endmodule2.设a,b,c,d四个数,按从小到大的顺序重新排列并输出到ra,rb,rc,rd中。

需在Verilog HDL描述中使用任务(task)。

电路设计:module hw7(a,b,c,d,ra,rb,rc,rd);input [3:0]a,b,c,d;output [3:0]ra,rb,rc,rd;reg[3:0] ra,rb,rc,rd;reg [3:0] b1,b2,s1,s2,m1,m2;always @(a,b,c,d)begincompare(a,b,b1,s1);compare(c,d,b2,s2);compare(b1,b2,rd,m1);compare(s1,s2,m2,ra);compare(m1,m2,rc,rb);endtask compare;input [3:0]x,y;output [3:0]b,s;if(x>y)beginb=x;s=y;endelsebeginb=y;s=x;endendtaskendmodule仿真测试:module hw7_test;reg [3:0]a,b,c,d;wire [3:0]ra,rb,rc,rd;hw7 U1(a,b,c,d,ra,rb,rc,rd);initialbegina<=1;b<=5;c<=10;d<=3;#100 a<=8;b<=5;c<=6;d<=9;#100 a<=5;b<=9;c<=6;d<=3;#100 a<=10;b<=3;c<=3;d<=5;endinitial $monitor("a:%d b:%d c:%d d:%d ra:%d rb:%d rc:%d rd:%d",a,b,c,d,ra,rb,rc,rd);endmodule第五题:状态机设计1.设计一个接受1,2,5分钱的卖报机,每份报纸5分钱,并考虑找零。

相关主题