您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > verilog实验报告---程超
西安邮电學院基于Verilog的数字电路模拟实验系部名称:通信与信息工程学院学生姓名:张宏扬专业名称:通信工程班级:通工0809学号:03081469(01)时间:2010年12月20号实验题目门级建模仿真实验一、实验内容设计的一个带有清零的顺序输出结果的计数器,q从0计数到15二、技术规范1、输入引脚:reset,clk;输出引脚:q。2、功能:这时也个具有清零的计数器,从0到15输出的。在其中用到了T触发器和D触发器来实现它的功能。三、实验步骤1、在modulesim软件中对设计模块和验证模块进行书写和编译;2、对编译好的模块进行仿真。四、源代码://脉动进位计数器顶层模块moduleripple_carry_counter(q,clk,reset);output[3:0]q;inputclk,reset;//生成了4个T触发器(T_FF)的实例,每个都有自己的名字T_FFtff0(q[0],clk,reset);T_FFtff1(q[1],q[0],reset);T_FFtff2(q[2],q[1],reset);T_FFtff3(q[3],q[2],reset);endmodule//触发器T_FFmoduleT_FF(q,clk,reset);outputq;inputclk,reset;wired;D_FFdff0(q,d,clk,reset);notn1(d,q);//非门(not)是Verilog语言的内置原语部件(primitive)endmodule//D触发器(D_FF)//带异步复位的D触发器(D_FF)moduleD_FF(q,d,clk,reset);outputq;inputd,clk,reset;regq;//可以有许多种新结构,不考虑这些结构的功能,只需要注意设计块是如何以自顶向下的方式编写的always@(posedgeresetornegedgeclk)if(reset)q=1'b0;elseq=d;endmodulemodulestimulus;regclk;regreset;wire[3:0]q;//引用已经设计好的模块实例ripple_carry_counterr1(q,clk,reset);//控制驱动设计块的时钟信号,时钟周期为10个时间单位initialclk=1'b0;//把clk设置为0always#5clk=~clk;//每5个时间单位时钟翻转一次//控制驱动设计块的reset信号initialbeginreset=1'b1;#15reset=1'b0;#180reset=1'b1;#10reset=1'b0;#20$finish;//终止仿真end//监视输出initial$monitor($time,Outputq=%d,q);endmodule五、仿真结果及分析仿真输出结果:实验题目RS锁存器一、实验内容带有延迟的RS锁存器,写出其带有延迟的Verilog门级描述。编写其激励模块,根据下面的输入-输出关系表对其功能进行验证。ClkReset013241501201q[3:0]0Outputq=020Outputq=130Outputq=240Outputq=350Outputq=460Outputq=570Outputq=680Outputq=790Outputq=8100Outputq=9110Outputq=10120Outputq=11130Outputq=12140Outputq=13150Outputq=14160Outputq=15170Outputq=0180Outputq=1190Outputq=2195Outputq=0210Outputq=1220Outputq=2setresetQn+100Qn01010111?在设计完成后,写出激励模块对其进行仿真。二、技术规范1、输入引脚:reset,set;输出引脚:q,qbar,out。2、功能:这是具有延迟的RS锁存器。Reset为置位端,set为置零端。三、实验步骤1、在modulesim软件中对设计模块和验证模块进行书写和编译;2、对编译好的模块进行仿真。四、源代码:RS锁存器1.设计模块:moduleSR_lach(q,qbar,reset,set);outputq,qbar;inputreset,set;nand#1(q,reset,qbar);nand#1(qbar,set,q);endmodule2.验证模块:moduleTop;wireQ,Qbar;regReset,Set;SR_latch(.reset(Reset),.q(Q),.qbar(Qbar),.set(Set));initialbegin$monitor($time,Set=%b,Reset=%b,Q=%b\n,Set,Reset,Q);Set=0;Reset=0;#5Reset=1;#5Reset=0;#5Set=1;#5$finish;endendmodule五、仿真结果及分析RS锁存器实验题目:两个四位二进制的比较器一、实验内容大小比较器的功能是比较两个数之间的关系:大于、小于或等于。一个四位大小比较器的输入是两个四位数A和B。我们可以将它们写成下面的形式,最左边的位为最高有效位:A=A(3)A(2)A(1)A(0)B=B(3)B(2)B(1)B(0)两个数的比较可以从最高有效位开始,逐位进行。如果两个位不相等,则该位值为0的数为较小的数。为了用逻辑等式实现这个功能,我们需要定义一个中间变量x。注意下面实现的是同或(xnor)的功能。x(i)=A(i)B(i)+A(i)’B(i)’大小比较器的三个输出为:A_gt_B,A_lt_B和A_eq_B。其计算公式为:A_gt_B=A(3)B(3)’+x(3)A(2)B(2)’+x(3)x(2)A(1)B(1)’+x(3)x(2)x(1)A(0)B(0)’A_lt_B=A(3)’B(3)+x(3)A(2)’B(2)+x(3)x(2)A(1)’B(1)+x(3)x(2)x(1)A(0)’B(0)A_eq_B=x(3)x(2)x(1)x(0)写出模块magnitude_comparator的Verilog描述。写出激励模块并在模块中实例引用magnitude_comparator模块。选择A和B的几种组合,对模块的功能进行测试。二、实验步骤1、在modulesim软件中对设计模块和验证模块进行书写和编译;2、对编译好的模块进行仿真。三、源代码:modulestimulus;reg[3:0]A_out,B_out;wireF1,F2,F3;magnitude_comparatorsti(A_out,B_out,F1,F2,F3);initialbegin#0A_out=4'd0;B_out=4'd1;#10A_out=4'd2;B_out=4'd2;#10A_out=4'd5;B_out=4'd1;#10A_out=4'd15;B_out=4'd10;#10A_out=4'd10;B_out=4'd3;#10A_out=4'd6;B_out=4'd6;#10A_out=4'd8;B_out=4'd14;#10A_out=4'd12;B_out=4'd12;#20$finish;endinitialbegin$monitor($time,A=%b,B=%b,A_gt_B=%d,A_it_B=%d,A_eq_B=%d,A_out,B_out,F1,F2,F3);endendmodule激励块:modulemagnitude_comparator(A,B,A_gt_B,A_it_B,A_eq_B);input[3:0]A,B;outputA_gt_B,A_it_B,A_eq_B;wire[3:0]X;assignX[0]=(A[0]&B[0])|(~A[0]&~B[0]),X[1]=(A[1]&B[1])|(~A[1]&~B[1]),X[2]=(A[2]&B[2])|(~A[2]&~B[2]),X[3]=(A[3]&B[3])|(~A[3]&~B[3]);assignA_gt_B=(A[3]&~B[3])|(X[3]&A[2]&~B[2])|(X[3]&X[2]&A[1]&~B[1])|(X[3]&X[2]&X[1]&A[0]&~B[0]),A_it_B=(~A[3]&B[3])|(X[3]&~A[2]&B[2])|(X[3]&X[2]&~A[1]&B[1])|(X[3]&X[2]&X[1]&~A[0]&B[0]),A_eq_B=X[3]&X[2]&X[1]&X[0];endmodule四、仿真结果及分析实验题目:使用JK触发器设计一个计数器一、实验内容:一个同步计数器可以使用主从JK触发器来设计。设计一个同步计数器,其逻辑图和JK触发器的逻辑图如书中图所示。清零信号clear低电平有效,输入数据在时钟信号clock的上升沿被锁存,触发器在clock的下降沿输出;当count_enable信号为低电平时停止计数。写出同步计数器的Verilog描述和激励模块,在激励模块中使用clear和count_enable对计数器进行测试,并显示输出计数Q[3:0]。二、技术规范:本次试验中共有三个模块,分别是JK主从触发器设计模块,计数器设计模块及激励模块。对于JK触发器,共有四个输入端(j,k,clear,clock),两个输出端(q,qbar),根据其实际电路结构做出相应的设计;对于计数器模块,有三个输入端(clear,clock,counter_clock),四个输出(Q[3:0]),使用的是四个JK触发器和门电路组合,采用同步清零和同步脉冲构成四位同步计数器;激励模块中根据技术模块输入端口进行相关赋值以便进行仿真观察;三、实验步骤:1.在modulesim软件中使用数据流建模进行四位计数器设计及输入;2.进行编译及仿真。四、源代码:JK触发器模块:modulem_c_jkff(q,qbar,J,K,clear,clock);outputq,qbar;inputJ,K,clear,clock;wirea,b,c,d,y,ybar,cbar;assigncbar=~clock;assign#1a=~(J&qbar&clock&clear),b=~(K&q&clock),y=~(a&ybar),ybar=~(y&b&clear),c=~(y&cbar),d=~(ybar&cbar);assign#1q=~(c&qbar);assign#1qbar=~(d&clear&q);endmodule计数器模块:modulefour_count_ff(Q,clear,clock,count_enable);output[3:0]Q;inputclear,clock,count_enable;wirea1,a2,a3;assigna1=count_enable&Q[0],a2=a1&Q[1],a3=a2&Q[2];m_c_jkffm1(Q[0],,count_enable,count_enable,clear,clock);m_c_jkffm2(Q[1],,a1,a1,clear,clock);m_c_jkffm3(Q[2],,a2,a2,clear,clock);m_c_jkffm4(Q[3],,a3,a3,clear,clock);endmodule激励模块:modulestimulus;regclock,clear,count_enable;wire[3:0]Q;initial$monitor($time,CountQ=%bClear=%b,Q[3:0],clear);four_count_fff1(Q,clear,clock,count_enable);initialbeginclear=1'b0;count_enable=1'b1;#10clear=1'b1;//#1count_enable=1'b1;//#50cle
本文标题:verilog实验报告---程超
链接地址:https://www.777doc.com/doc-2342779 .html