西安交通大学数字电子技术实验报告.docx
- 文档编号:11565795
- 上传时间:2023-03-19
- 格式:DOCX
- 页数:39
- 大小:145.75KB
西安交通大学数字电子技术实验报告.docx
《西安交通大学数字电子技术实验报告.docx》由会员分享,可在线阅读,更多相关《西安交通大学数字电子技术实验报告.docx(39页珍藏版)》请在冰豆网上搜索。
西安交通大学数字电子技术实验报告
西安交通大学数字电子技术实验报告
实验三、ISE基础
实验预习:
(1)安装ISE13.4软件。
(2)按照视频文件“Verilog语言输入法D_Flip_Flop.exe”进行演练。
实验内容和步骤:
下载开发板相关器件的Datasheet,了解其性能。
按照P249附录A“FPGA实验预习报告模板”中的内容和步骤,完成D触发器的设计、综合、实现、仿真和下载全过程,熟悉ISE编程环境和用Adept下载编程文件的方法。
1.在G盘用自己的学号建立文件夹,进入用自己学号建立的文件夹后,再建立本次实验的文件夹,及本次实验所建工程的文件夹,文件夹名可以起名为:
D_Flip_Flop、My_FirstISE、或Experiment_1、或Test_1,等等。
2.建立工程文件。
3.输入D触发器的Verilog程序。
4.编写D触发器的约束文件。
5.综合、实现及生成编程文件。
6.基于ISim的行为仿真。
7.采用Adept软件下载*.bit程序到开发板。
8.测试D触发器的逻辑功能。
通过D触发器设计熟悉ISE软件后,自己设计一个门电路,例如与非门,重复以上ISE软件的使用步骤。
验收:
1.按照老师布置的逻辑门电路设计Verilog语言程序、约束文件、下载、仿真。
要能说明任一时刻输入输出的逻辑关系。
2.能够用开发板演示所设计的逻辑功能。
实验程序
1.VERILOG工程文件
moduleD_Flip_Flop(
inputclk,
inputset,
inputD,
inputclr,
outputregq//注意:
always模块中的输出必须是寄存器型变量
);
always@(posedgeclkorposedgeclrorposedgeset)
begin
if(clr)q<=0;
elseif(set)q<=1;
elseq<=D;
end
endmodule
2.约束文件
NET"clk"LOC="B8";//时钟
NET"D"LOC="N3";//SW7
NET"set"LOC="L3";//SW1
NET"clr"LOC="P11";//SW0
NET"q"LOC="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;
endmodule
仿真结果:
实验四、组合逻辑电路实验Ⅰ(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));
endmodule
(2).约束文件
NET"a"LOC=P11;
NET"b"LOC=L3;
NET"c"LOC=K3;
NET"d"LOC=B4;
NET"z"LOC=M5;
(3).仿真程序
#100;
//Addstimulushere
#100;a<=0;b<=0;c<=0;d<=1;
#200;a<=0;b<=0;c<=1;d<=0;
#200;a<=0;b<=0;c<=1;d<=1;
#200;a<=0;b<=1;c<=0;d<=0;
#200;a<=0;b<=1;c<=0;d<=1;
#200;a<=0;b<=1;c<=1;d<=0;
#200;a<=0;b<=1;c<=1;d<=1;
#200;a<=1;b<=0;c<=0;d<=0;
#200;a<=1;b<=0;c<=0;d<=1;
#200;a<=1;b<=0;c<=1;d<=0;
#200;a<=1;b<=0;c<=1;d<=1;
#200;a<=1;b<=1;c<=0;d<=0;
#200;a<=1;b<=1;c<=0;d<=1;
#200;a<=1;b<=1;c<=1;d<=0;
#200;a<=1;b<=1;c<=1;d<=1;
#200;
end
仿真结果
2.四选一多路选择器
(1)VERILOG程序
moduleMUX(
inputwirea,
inputwireb,
inputwirec,
inputwired,
inputwires1,
inputwires2,
outputwirey
);
assigny=(a&(~s1)&(~s2))|(b&(~s1)&(s2))|(c&(s1)&(~s2))|(d&(s1)&(s2));
endmodule
}
(2)约束文件
NET"s1"LOC=P11;
NET"s2"LOC=L3;
NET"a"LOC=K3;
NET"b"LOC=B4;
NET"c"LOC=G3;
NET"d"LOC=F3;
NET"y"LOC=M5;
(3)仿真程序
#100
a<=1;
b<=0;
c<=0;
d<=0;
s1<=0;
s2<=0;
#400
a<=0;
b<=1;
c<=0;
d<=0;
s1<=0;
s2<=1;
#400
a<=0;
b<=0;
c<=1;
d<=0;
s1<=1;
s2<=0;
#400
a<=0;
b<=0;
c<=0;
d<=1;
s1<=1;
s2<=1;
end
(3)仿真结果
3.3-8译码器
(1)VERILOG程序
moduleyimaqi38(
inputwire[2:
0]a,
outputwire[7:
0]y
);
assigny[0]=~a[2]&~a[1]&~a[0];
assigny[1]=~a[2]&~a[1]&a[0];
assigny[2]=~a[2]&a[1]&~a[0];
assigny[3]=~a[2]&a[1]&a[0];
assigny[4]=a[2]&~a[1]&~a[0];
assigny[5]=a[2]&~a[1]&a[0];
assigny[6]=a[2]&a[1]&~a[0];
assigny[7]=a[2]&a[1]&a[0];
endmodule
(2)约束文件
NET"a[0]"LOC=F3;
NET"a[1]"LOC=E2;
NET"a[2]"LOC=N3;
NET"y[0]"LOC=M5;
NET"y[1]"LOC=M11;
NET"y[2]"LOC=P7;
NET"y[3]"LOC=P6;
NET"y[4]"LOC=N5;
NET"y[5]"LOC=N4;
NET"y[6]"LOC=P4;
NET"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。
实验前编写好VERILOG源文件、用户约束文件等。
(验收逻辑功能) 。
(选做)
(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:
if(x[3:
0]>=4'b1010)
digit=4'b0001;
else
digit=4'b0000;
2:
if(x[7:
4]>=4'b1010)
digit=x[7:
4]-4'b1010;
else
digit=x[7:
4];
3:
if(x[7:
4]>=4'b1010)
digit=4'b0001;
else
digit=4'b0000;
default:
digit=4'b0000;
endcase
always@(*)
case(digit)
0:
a_to_g=7'b0000001;
1:
a_to_g=7'b1001111;
2:
a_to_g=7'b0010010;
3:
a_to_g=7'b0000110;
4:
a_to_g=7'b1001100;
5:
a_to_g=7'b0100100;
6:
a_to_g=7'b0100000;
7:
a_to_g=7'b0001111;
8:
a_to_g=7'b0000000;
9:
a_to_g=7'b0000100;
'hA:
a_to_g=7'b0001000;
'hB:
a_to_g=7'b1100000;
'hC:
a_to_g=7'b0110001;
'hD:
a_to_g=7'b1000010;
'hE:
a_to_g=7'b0110000;
'hF:
a_to_g=7'b0111000;
default:
a_to_g=7'b0000001;
endcase
always@(*)
begin
an=4'b1111;
an[s]=0;
end
always@(posedgeclkorposedgeclr)
begin
if(clr==1)
clkdiv<=0;
else
clkdiv<=clkdiv+1;
end
endmodule
(2)约束文件
NET"a_to_g[0]"LOC=M12;
NET"a_to_g[1]"LOC=L13;
NET"a_to_g[2]"LOC=P12;
NET"a_to_g[3]"LOC=N11;
NET"a_to_g[4]"LOC=N14;
NET"a_to_g[5]"LOC=H12;
NET"a_to_g[6]"LOC=L14;
NET"an[3]"LOC=K14;
NET"an[2]"LOC=M13;
NET"an[1]"LOC=J12;
NET"an[0]"LOC=F12;
NET"clk"LOC=B8;
NET"clr"LOC=G12;
NET"x[0]"LOC=P11;
NET"x[1]"LOC=L3;
NET"x[2]"LOC=K3;
NET"x[3]"LOC=B4;
NET"x[4]"LOC=G3;
NET"x[5]"LOC=F3;
NET"x[6]"LOC=E2;
NET"x[7]"LOC=N3;
2.4位全加器
(1)VERILOG代码
modulejiafaqi(
inputwire[3:
0]a,
inputwire[3:
0]b,
outputwire[3:
0]s,
outputwirec4
);
wire[4:
0]c;
assignc[0]=0;
assigns=a^b^c[3:
0];
assignc[4:
1]=a&b|c[3:
0]&(a^b);
assignc4=c[4];
endmodule
(2)约束文件
NET"a[0]"LOC=P11;
NET"a[1]"LOC=L3;
NET"a[2]"LOC=K3;
NET"a[3]"LOC=B4;
NET"b[0]"LOC=G4;
NET"b[1]"LOC=F3;
NET"b[2]"LOC=E2;
NET"b[3]"LOC=N3;
NET"c4"LOC="G1";
NET"s<0>"LOC="P4";
NET"s<1>"LOC="N4";
NET"s<2>"LOC="N5";
NET"s<3>"LOC="P6";
3.4位比较器
(1)VERILOG代码
modulebijiaoqi(
inputwire[3:
0]A,
inputwire[3:
0]B,
outputreg[2:
0]y
);
always@(AorB)
begin
if(A>B)
y<=3'b001;
elseif(A==B)
y<=3'b010;
else
y<=3'b100;
end
endmodule
2.约束文件
NET"A[0]"LOC=P11;
NET"A[1]"LOC=L3;
NET"A[2]"LOC=K3;
NET"A[3]"LOC=B4;
NET"B[0]"LOC=G3;
NET"B[1]"LOC=F3;
NET"B[2]"LOC=E2;
NET"B[3]"LOC=N3;
NET"y[0]"LOC=M5;
NET"y[1]"LOC=M11;
NET"y[2]"LOC=P7;
实验六、时序逻辑电路实验Ⅰ(2学时)
时序逻辑Ⅰ:
(1)设计一个秒脉冲发生器,用LED指示秒脉冲的发放(P144,(3))。
(检查秒脉冲发生器的精度、能将1秒的脉冲周期改为2秒或3秒等);
(2) 试设计一个带有异步清零和同步置数信号的4位寄存器,并在开发板上验证(P145,
(2))。
将时钟信号改为2Hz或4Hz,观察异步清零和同步置数现象。
(验收逻辑功能)
(3)设计一个具有同步清零、同步置数端的十进制加法计数器。
选1Hz信号作为CLK信号,4个LED灯指示计数状态,一个逻辑开关做清零端,另一个逻辑开关做置数端。
(选做)
(4)设计一个具有异步清零、同步置数端的4位二进制加法计数器。
选1Hz信号作为CLK信号,4个LED灯指示计数状态,一个逻辑开关做清零端,另一个逻辑开关做置数端。
(选做)
实验内容
1.秒脉冲发生器
(1)VERILOG程序
modulemaichong(
inputclk,clr,
outputreg[0:
0]q
);
reg[26:
0]counter;
always@(posedgeclk)
if(counter==25000000)counter<=0;
elsecounter<=counter+1;
regclk_div;
always@(posedgeclk)
if(counter==25000000)clk_div<=~clk_div;
always@(posedgeclk_divorposedgeclr)
begin
if(clr==1)
q<=0;
elseif(q==2)
q<=0;
else
q<=q+1;
end
endmodule
(2)约束文件
NET"clk"LOC=B8;
NET"clr"LOC=P11;
NET"q[0]"LOC=N5;//LED4
2.异步清零同步置数四位寄存器
(1)VERILOG程序
modulejicunqi(
inputload,
inputclk,
inputclr,
inputwire[3:
0]d,
outputreg[3:
0]q
);
reg[27:
0]q1;
always@(posedgeclkorposedgeclr)
begin
if(clr==1)
q1<=0;
else
q1<=q1+1;
end
assignmclk=q1[27];
always@(posedgemclkorposedgeclr)
begin
if(clr==1)
q<=0;
elseif(load==1)
q<=d;
end
endmodule
(1)约束文件
NET"clk"LOC="B8";
NET"clr"LOC="P11";
NET"load"LOC="L3";
NET"d[0]"LOC="K3";
NET"d[1]"LOC="B4";
NET"d[2]"LOC="G3";
NET"d[3]"LOC="F3";
NET"q[0]"LOC="M5";
NET"q[1]"LOC="M11";
NET"q[2]"LOC="P7";
NET"q[3]"LOC="P6";
3.同步清零同步置数十进制加法器
实验七、时序逻辑电路实验Ⅱ(2学时)
时序逻辑Ⅱ:
(1)用层次化自顶向下的设计方法设计一个60进制计数器,用动态数码管显示计数值,时钟采用1Hz信号,观察计数效果;
(2)用层次化自顶向下的设计方法设计一个24进制计数器,用动态数码管显示计数值,时钟采用1Hz信号,观察计数效果;
(3)设计一个完整的数字钟,小时和分钟用数码管显示,秒用发光二极管闪烁显示,每秒闪烁一次。
如有可能,请增加校时功能(选做)
实验内容
1.60进制计数器
(1)VERILOG程序
moduletop(
inputwireclk,
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(
inputwireclk,
outputregsec
);
regq1;
always@(posedgeclk)
begin
if(q1==1)
begin
q1<=0;
sec<=~sec;//得到1Hz信号
end
else
q1<=q1+1;
end
endmodule
modulecnt60(
inputwireclk,
inputwireclr,
inputwireclk0,
outputreg[3:
0]cnt60_an,
outputreg[6:
0]cnt60_q,
outputregcarry
);
reg[3:
0]cntl;
reg[3:
0]cnth;
reg[19:
0]clkdiv;
//初始化
initialbegin
cntl=8;
cnth=5;
end
//60进制计数器
always@(posedgeclk)
begin
carry=0;
cntl=cntl+1;
if(cntl==9)
begin
cntl=0;
cnth=cnth+1;
end
if(cnth==5&&cntl==9)
begin
cntl=0;
cnth=0;
carry=1;//carry是60进制计数器的进位
end
end
wires;
reg[3:
0]di=10;
assigns=clkdiv[19];
always@(*)
case(s)
0:
di=cntl;
1:
di=cnth;
endcase
always@(*)
case(di)
0:
cnt60_q=7'b0000001;
1:
cnt60_q=7'b1001111;
2:
cnt60_q=7'b0010010;
3:
cnt60_q=7'b0000110;
4:
cnt60_q=7'b1001100;
5:
cnt60_q=7'b0100100;
6:
cnt60_q=7'b0100000;
7:
cnt60_q=7'b0001111;
8:
cnt60_q=7'b0000000;
9:
cnt60_q=7'b0000100;
default:
begin
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 西安交通大学 数字 电子技术 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)