西安交通大学数字电子技术实验报告Word格式.docx
《西安交通大学数字电子技术实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《西安交通大学数字电子技术实验报告Word格式.docx(39页珍藏版)》请在冰点文库上搜索。
set"
L3"
//SW1
clr"
P11"
//SW0
q"
G1"
//LD7
3.仿真文件
moduletest_D_Flip_Flop;
//Inputs
regclk;
regset;
regD;
regclr;
//Outputs
wireq;
//InstantiatetheUnitUnderTest(UUT)
D_Flip_Flopuut(
.clk(clk),
.set(set),
.D(D),
.clr(clr),
.q(q)
initialbegin
//InitializeInputs
clk=0;
set=1;
D=0;
clr=0;
//Wait100nsforglobalresettofinish
#100;
//Addstimulushere
End
always#10clk=~clk;
always#12D=~D;
always#33clk=~clk;
always#42set=~set;
仿真结果:
实验四、组合逻辑电路实验Ⅰ(2学时)
组合逻辑Ⅰ:
(1)使用VERILOG设计一个新的逻辑功能(比如四输入或门、或非门、与或非门等等),并在开发板上验证,比如:
进实验室前编写好VERILOG源文件、约束文件和仿真文件(见4.1.2,P101
(2))。
(2)设计新的多路选择器(三选一、五选一等等),并在开发板上验证。
实验前编写好VERILOG源文件、用户约束文件和仿真文件,实验报告中要给出仿真波形(见4.3,P111
(2))。
(查看仿真波形、验收逻辑功能)
(3)查看74LS138的Datasheet,用Verilog语言设计一个3-8译码器。
用三个逻辑开关作为输入,8个LED灯作为输出,验证所设计的3-8译码器的逻辑功能。
(选做)
1.VERILOG设计逻辑函数
(1).VERILOG程序
modulegate2(
inputa,
inputb,
inputc,
inputd,
outputz
assignz=~((a&
b)|(c&
d));
(2).约束文件
a"
LOC=P11;
b"
LOC=L3;
c"
LOC=K3;
d"
LOC=B4;
z"
LOC=M5;
(3).仿真程序
//Addstimulushere
a<
b<
c<
d<
#200;
#200;
end
仿真结果
2.四选一多路选择器
(1)VERILOG程序
moduleMUX(
inputwirea,
inputwireb,
inputwirec,
inputwired,
inputwires1,
inputwires2,
outputwirey
assigny=(a&
(~s1)&
(~s2))|(b&
(s2))|(c&
(s1)&
(~s2))|(d&
(s2));
}
(2)约束文件
NET"
s1"
LOC=P11;
s2"
LOC=L3;
LOC=K3;
LOC=B4;
LOC=G3;
LOC=F3;
y"
LOC=M5;
(3)仿真程序
#100
s1<
s2<
#400
(3)仿真结果
3.3-8译码器
moduleyimaqi38(
inputwire[2:
0]a,
outputwire[7:
0]y
assigny[0]=~a[2]&
~a[1]&
~a[0];
assigny[1]=~a[2]&
a[0];
assigny[2]=~a[2]&
a[1]&
assigny[3]=~a[2]&
assigny[4]=a[2]&
assigny[5]=a[2]&
assigny[6]=a[2]&
assigny[7]=a[2]&
endmodule
a[0]"
a[1]"
LOC=E2;
a[2]"
LOC=N3;
y[0]"
y[1]"
LOC=M11;
y[2]"
LOC=P7;
y[3]"
LOC=P6;
y[4]"
LOC=N5;
y[5]"
LOC=N4;
y[6]"
LOC=P4;
y[7]"
LOC=G1;
实验五、组合逻辑电路实验Ⅱ(2学时)
组合逻辑Ⅱ:
(1)完成4位数码管动态显示设计(见P121),实现将8个SW输入的两位十六进制数对应的8421BCD码,显示在数码管上。
数码转换关系表4-2所示(见P115),比如,若在8个开关SW上输入2FH,四个数码管由左到右应显示0215。
实验前编写好VERILOG源文件、用户约束文件等。
(验收逻辑功能)
。
实现将8个SW输入的两位十六进制数对应的十进制数,显示在数码管上。
比如,若在8个开关SW上输入7FH,四个数码管由左到右应显示127。
(2)参考P126,:
用Verilog语言设计一个4位全加器,给出布线后仿真波形,测试加法器的延时(要求在预习报告中完成)。
(查看布线后仿真波形)。
(3)用Verilog语言设计一个4位比较器。
用两组、每组4个逻辑开关作为输入,比较两组逻辑开关输入二进制数的大小,用三个LED灯指示比较结果,三个逻辑指示灯分别指示大于、等于、小于。
1.2位16进制数码管
(1)VERILOG代码
inputwire[7:
0]x,
inputwireclk,
inputwireclr,
outputreg[6:
0]a_to_g,
outputreg[3:
0]an
wires;
reg[3:
0]digit;
reg[19:
0]clkdiv;
assigns=clkdiv[19];
always@(*)
case(s)
0:
if(x[3:
0]>
=4'
b1010)
digit=x[3:
0]-4'
b1010;
else
digit=x[3:
0];
1:
digit=4'
b0001;
digit=4'
b0000;
2:
if(x[7:
4]>
digit=x[7:
4]-4'
digit=x[7:
4];
3:
default:
digit=4'
endcase
case(digit)
a_to_g=7'
b0000001;
1:
b1001111;
2:
b0010010;
3:
b0000110;
4:
b1001100;
5:
b0100100;
6:
b0100000;
7:
b0001111;
8:
b0000000;
9:
b0000100;
'
hA:
b0001000;
hB:
b1100000;
hC:
b0110001;
hD:
b1000010;
hE:
b0110000;
hF:
b0111000;
default:
begin
an=4'
b1111;
an[s]=0;
always@(posedgeclkorposedgeclr)
if(clr==1)
clkdiv<
else
=clkdiv+1;
a_to_g[0]"
LOC=M12;
a_to_g[1]"
LOC=L13;
a_to_g[2]"
LOC=P12;
a_to_g[3]"
LOC=N11;
a_to_g[4]"
LOC=N14;
a_to_g[5]"
LOC=H12;
a_to_g[6]"
LOC=L14;
an[3]"
LOC=K14;
an[2]"
LOC=M13;
an[1]"
LOC=J12;
an[0]"
LOC=F12;
LOC=B8;
LOC=G12;
x[0]"
x[1]"
x[2]"
x[3]"
x[4]"
x[5]"
x[6]"
x[7]"
2.4位全加器
modulejiafaqi(
inputwire[3:
0]a,
0]b,
outputwire[3:
0]s,
outputwirec4
wire[4:
0]c;
assignc[0]=0;
assigns=a^b^c[3:
assignc[4:
1]=a&
b|c[3:
0]&
(a^b);
assignc4=c[4];
a[3]"
b[0]"
LOC=G4;
b[1]"
b[2]"
b[3]"
c4"
LOC="
s<
0>
"
P4"
1>
N4"
2>
N5"
3>
P6"
3.4位比较器
modulebijiaoqi(
inputwire[3:
0]A,
0]B,
outputreg[2:
always@(AorB)
if(A>
B)
y<
=3'
b001;
elseif(A==B)
b010;
else
b100;
A[0]"
A[1]"
A[2]"
A[3]"
B[0]"
B[1]"
B[2]"
B[3]"
实验六、时序逻辑电路实验Ⅰ(2学时)
时序逻辑Ⅰ:
(1)设计一个秒脉冲发生器,用LED指示秒脉冲的发放(P144,(3))。
(检查秒脉冲发生器的精度、能将1秒的脉冲周期改为2秒或3秒等);
(2)
试设计一个带有异步清零和同步置数信号的4位寄存器,并在开发板上验证(P145,
(2))。
将时钟信号改为2Hz或4Hz,观察异步清零和同步置数现象。
(验收逻辑功能)
(3)设计一个具有同步清零、同步置数端的十进制加法计数器。
选1Hz信号作为CLK信号,4个LED灯指示计数状态,一个逻辑开关做清零端,另一个逻辑开关做置数端。
(4)设计一个具有异步清零、同步置数端的4位二进制加法计数器。
实验内容
1.秒脉冲发生器
modulemaichong(
inputclk,clr,
outputreg[0:
0]q
);
reg[26:
0]counter;
always@(posedgeclk)
if(counter==25000000)counter<
=0;
elsecounter<
=counter+1;
regclk_div;
if(counter==25000000)clk_div<
=~clk_div;
always@(posedgeclk_divorposedgeclr)
begin
if(clr==1)
q<
elseif(q==2)
else
=q+1;
end
q[0]"
//LED4
2.异步清零同步置数四位寄存器
modulejicunqi(
inputload,
0]d,
reg[27:
0]q1;
always@(posedgeclkorposedgeclr)
q1<
=q1+1;
assignmclk=q1[27];
always@(posedgemclkorposedgeclr)
q<
elseif(load==1)
=d;
(1)约束文件
load"
d[0]"
K3"
d[1]"
B4"
d[2]"
G3"
d[3]"
F3"
M5"
q[1]"
M11"
q[2]"
P7"
q[3]"
3.同步清零同步置数十进制加法器
实验七、时序逻辑电路实验Ⅱ(2学时)
时序逻辑Ⅱ:
(1)用层次化自顶向下的设计方法设计一个60进制计数器,用动态数码管显示计数值,时钟采用1Hz信号,观察计数效果;
(2)用层次化自顶向下的设计方法设计一个24进制计数器,用动态数码管显示计数值,时钟采用1Hz信号,观察计数效果;
(3)设计一个完整的数字钟,小时和分钟用数码管显示,秒用发光二极管闪烁显示,每秒闪烁一次。
如有可能,请增加校时功能(选做)
1.60进制计数器
moduletop(
inputwireclk0,
inputwireclr1,
outputwire[3:
0]Second_an,
outputwire[6:
0]Second_q
wirejinwei;
//模块间链接定义(注意须是wire)
Secondinstance_Second(
.clk(clk),
.sec(sec)
cnt60instance_cnt60(
.clk(sec),
.clr(clr),
.clk0(clk0),
.cnt60_an(Second_an),
.cnt60_q(Second_q),
.carry(carry)
//这里省去了60进制计数器进位输出变量carry
Endmodule
moduleSecond(
outputregsec
regq1;
always@(posedgeclk)
if(q1==1)
sec<
=~sec;
//得到1Hz信号
modulecnt60(
0]cnt60_an,
0]cnt60_q,
outputregcarry
0]cntl;
0]cnth;
//初始化
cntl=8;
cnth=5;
//60进制计数器
always@(posedgeclk)
carry=0;
cntl=cntl+1;
if(cntl==9)
cntl=0;
cnth=cnth+1;
if(cnth==5&
&
cntl==9)
cntl=0;
cnth=0;
carry=1;
//carry是60进制计数器的进位
reg[3:
0]di=10;
assigns=clkdiv[19];
always@(*)
di=cntl;
di=cnth;
always@(*)
case(di)
cnt60_q=7'
4:
5:
6:
7:
8:
9:
default: