西北工业大学数字电子技术基础实验报告实验3.docx
《西北工业大学数字电子技术基础实验报告实验3.docx》由会员分享,可在线阅读,更多相关《西北工业大学数字电子技术基础实验报告实验3.docx(12页珍藏版)》请在冰豆网上搜索。
西北工业大学数字电子技术基础实验报告实验3
数字电子技术基础第三次实验报告
、描述QuartusII软件基本使用步骤
①编写Verilog代码,用文本编辑器正确编写源文件,并经modelsim仿真确认该电路
设计正确。
②打开QuartusII软件,新建工程Newproject(注意工程名和设计文件的module名保持一致),选择和开发板一致的FPGA器件型号。
④编译,StartCompilation,编译源文件(如有错误修改后,重新编译)。
题目代码以及波形分析
a)
编写模块源码
moduleflipflop(D,Clock,Q);
inputD,Clock;
outputregQ;
always@(posedgeClock)
Q=D;
endmodule
b)测试模块
`timescale1ns/1psmoduletb_flipflop;
regClock_test;
regD_test;
wireQ_test;
initial
Clock_test=0;
always#20Clock_test=~Clock_test;initial
D_test=0;
always#77D_test=~D_test;
flipflopUUT_flipflop(.Clock(Clock_test),.D(D_test),.Q(Q_test));
endmodule
c)
仿真后的波形截图inputD0,D1,Sel,Clock;
2.设计一款4bBit具有并行加载功能的移位寄存器编写模块源码
a)编写模块源码
modulemuxdff(D0,D1,Sel,Clock,Q);
outputregQ;
wireD;
assignD=Sel?
D1:
D0;
always@(posedgeClock)
Q<=D;
endmodule
moduleshift4(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]);endmodule
b)测试模块
`timescale1ns/1psmoduletb_shift4;
regClock_test;
regL_test;
regw_test;
reg[3:
0]R_test;
wire[3:
0]Q_test;
initial
Clock_test=0;
always#10Clock_test=~Clock_test;
initial
begin
L_test=1;
#14
L_test=0;
//always#14L_test=~L_test;end
initial
w_test=0;
always#13w_test=~w_test;
initial
R_test=4'b1010;
shift4UUT_shift4(.Clock(Clock_test),.L(L_test),.w(w_test),.R(R_test),.Q(Q_test));
endmodule
c)仿真后的波形截图
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;
endmodule
b)测试模块
`timescale1ns/1ps
moduletb_upcount;
regReset_test;
regClock_test;
regE_test;
wire[3:
0]Q_test;
initial
Clock_test=0;
always#5Clock_test=~Clock_test;
initial
begin
Reset_test=1;
E_test=0;
#2
Reset_test=0;
#8
E_test=1;
#184
Reset_test=1;
#2
Reset_test=0;
#32
E_test=0;
end
upcountUUT_upcount(.Reset(Reset_test),.Clock(Clock_test),.E(E_test),.Q(Q_test));
endmodule
c)仿真后的波形截图
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)
begin
if(Q<20000000)
beginQ<=Q+1;Sign=0;endelseif(Q>=20000000)
begin
Sign=1;
Q<=0;
end
end
endmodule
b)测试模块
`timescale1ns/1psmoduletb_timer;
regReset_test;
regClock_test;
regE_test;
wire[24:
0]Q_test;
wireSign_test;
initial
Clock_test=0;
always#25Clock_test=~Clock_test;
initial
beginReset_test=1;
E_test=0;
#1
Reset_test=0;
E_test=1;
end
timer
UUT_timer(.Reset(Reset_test),.Clock(Clock_test),.E(E_test),.Q(Q_test),.Sign(Sign_test));
endmodule
c)仿真后的波形截图
当根据时钟信号计数到一秒时,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;
initial
begin
L_test=1;
#14
L_test=0;
//always#14L_test=~L_test;end
initial
w_test=0;
always#13w_test=~w_test;
initial
R_test=4'b1010;
shift4UUT_shift4(.Clock(Clock_test),.L(L_test),.w(w_test),.R(R_test),.Q(Q_test));endmodule
c)仿真后的波形截图
L为0时并行加载,数组R为加载时的输入。
L为1时移位,数组Q右移一位,左端补当前变量w的值。
当串行输入达到四个时即可并行输出,所以串并转换器本质是一个移位寄存器。
只是最后用一个D触发器存储数据再并行输出。
d)综合后的RTL图形
以及利用计数器实现还学会了QuartusII
三、本次实验收获和心得通过第三次数字电路实验,我对移位寄存器和计数器有了深刻的了解,计时器和利用移位寄存器实现串并转换器,提高了Verilog编码能力,软件的基本使用方法,以及如何对自己设计出的电路进行综合。