数字电子技术基础第三次实验报告一、描述QuartusII软件基本使用步骤①编写Verilog代码,用文本编辑器正确编写源文件,并经modelsim仿真确认该电路设计正确。②打开QuartusII软件,新建工程Newproject(注意工程名和设计文件的module名保持一致),选择和开发板一致的FPGA器件型号。③添加文件,点击file-open,之后选择要添加的文件,并勾选Addfiletocurrentproject.④编译,StartCompilation,编译源文件(如有错误修改后,重新编译)。⑤查看电路结构,使用Tool-RTLviewer工具查看电路图结构,是否和预期设计一致。二、题目代码以及波形分析1.设计一款时钟上升沿触发的D寄存器a)编写模块源码moduleflipflop(D,Clock,Q);inputD,Clock;outputregQ;always@(posedgeClock)Q=D;endmoduleb)测试模块`timescale1ns/1psmoduletb_flipflop;regClock_test;regD_test;wireQ_test;initialClock_test=0;always#20Clock_test=~Clock_test;initialD_test=0;always#77D_test=~D_test;flipflopUUT_flipflop(.Clock(Clock_test),.D(D_test),.Q(Q_test));endmodulec)仿真后的波形截图每当时钟上升沿到来时,触发器把D的信号传给Qd)综合后的RTL图形2.设计一款4bBit具有并行加载功能的移位寄存器编写模块源码a)编写模块源码modulemuxdff(D0,D1,Sel,Clock,Q);inputD0,D1,Sel,Clock;outputregQ;wireD;assignD=Sel?D1:D0;always@(posedgeClock)Q=D;endmodulemoduleshift4(R,L,w,Clock,Q);input[3:0]R;inputL,w,Clock;outputwire[3:0]Q;muxdffStage3(w,R[3],L,Clock,Q[3]);muxdffStage2(Q[3],R[2],L,Clock,Q[2]);muxdffStage1(Q[2],R[1],L,Clock,Q[1]);muxdffStage0(Q[1],R[0],L,Clock,Q[0]);endmoduleb)测试模块`timescale1ns/1psmoduletb_shift4;regClock_test;regL_test;regw_test;reg[3:0]R_test;wire[3:0]Q_test;initialClock_test=0;always#10Clock_test=~Clock_test;initialbeginL_test=1;#14L_test=0;//always#14L_test=~L_test;endinitialw_test=0;always#13w_test=~w_test;initialR_test=4'b1010;shift4UUT_shift4(.Clock(Clock_test),.L(L_test),.w(w_test),.R(R_test),.Q(Q_test));endmodulec)仿真后的波形截图L为0时并行加载,数组R为加载时的输入。L为1时移位,数组Q右移一位,左端补当前变量w的值。d)综合后的RTL图形3.设计一款4bit带复位功能的计数器a)编写模块源码moduleupcount(Reset,Clock,E,Q);inputReset,Clock,E;outputreg[3:0]Q;always@(posedgeReset,posedgeClock)if(Reset)Q=0;elseif(E)Q=Q+1;endmoduleb)测试模块`timescale1ns/1psmoduletb_upcount;regReset_test;regClock_test;regE_test;wire[3:0]Q_test;initialClock_test=0;always#5Clock_test=~Clock_test;initialbeginReset_test=1;E_test=0;#2Reset_test=0;#8E_test=1;#184Reset_test=1;#2Reset_test=0;#32E_test=0;endupcountUUT_upcount(.Reset(Reset_test),.Clock(Clock_test),.E(E_test),.Q(Q_test));endmodulec)仿真后的波形截图Reset信号为1时重置。使能信号E为1时计数器工作,每当时钟上升沿到来时,输出Q加1.d)综合后的RTL图形4.设计一款定时器,(如:时钟频率20M,定时为1秒)。a)编写模块源码moduletimer(Reset,Clock,E,Q,Sign);inputReset,Clock,E;outputreg[24:0]Q=25'b000000000000000;outputregSign;always@(posedgeReset,posedgeClock)if(Reset)Q=0;elseif(E)beginif(Q20000000)beginQ=Q+1;Sign=0;endelseif(Q=20000000)beginSign=1;Q=0;endendendmoduleb)测试模块`timescale1ns/1psmoduletb_timer;regReset_test;regClock_test;regE_test;wire[24:0]Q_test;wireSign_test;initialClock_test=0;always#25Clock_test=~Clock_test;initialbeginReset_test=1;E_test=0;#1Reset_test=0;E_test=1;endtimerUUT_timer(.Reset(Reset_test),.Clock(Clock_test),.E(E_test),.Q(Q_test),.Sign(Sign_test));endmodulec)仿真后的波形截图当根据时钟信号计数到一秒时,Sign信号由零变为1,从而实现计时。d)综合后的RTL图形5.串并转换器a)编写模块源码b)测试模块`timescale1ns/1psmoduletb_shared;regClock_test;regL_test;regw_test;reg[3:0]R_test;wire[3:0]Q_test;initialClock_test=0;always#10Clock_test=~Clock_test;initialbeginL_test=1;#14L_test=0;//always#14L_test=~L_test;endinitialw_test=0;always#13w_test=~w_test;initialR_test=4'b1010;shift4UUT_shift4(.Clock(Clock_test),.L(L_test),.w(w_test),.R(R_test),.Q(Q_test));endmodulec)仿真后的波形截图L为0时并行加载,数组R为加载时的输入。L为1时移位,数组Q右移一位,左端补当前变量w的值。当串行输入达到四个时即可并行输出,所以串并转换器本质是一个移位寄存器。只是最后用一个D触发器存储数据再并行输出。d)综合后的RTL图形三、本次实验收获和心得通过第三次数字电路实验,我对移位寄存器和计数器有了深刻的了解,以及利用计数器实现计时器和利用移位寄存器实现串并转换器,提高了Verilog编码能力,还学会了QuartusII软件的基本使用方法,以及如何对自己设计出的电路进行综合。