《可编程逻辑器件设计及应用》实验报告.docx
《《可编程逻辑器件设计及应用》实验报告.docx》由会员分享,可在线阅读,更多相关《《可编程逻辑器件设计及应用》实验报告.docx(42页珍藏版)》请在冰豆网上搜索。
《可编程逻辑器件设计及应用》实验报告
HarbinInstituteofTechnology
可编程逻辑器件
设计及应用
实验报告
姓名:
同组人:
学号:
班级:
1105201
指导教师:
张新潮
院系:
电子与信息工程学院
实验一异步16分频
1、实验内容
1、学习SIE安装过程
2、建立一个新的工程(cpld9500系列)
3、输入电路图
4、建立测试波形方法仿真激励图形
5、功能仿真
6、建立引脚约束文件
NET"CLK"LOC="P6";
NET"CLR"LOC="P7";
NET"O1"LOC="P42";
NET"O2"LOC="P37";
NET"O3"LOC="P40";
NET"O4"LOC="P39";
7、形成下载文件
二实验结果
三实验结果讨论分析
实验当中采用了四个分频器,将发送的脉冲信号进行分频,并实现十六分频。
从仿真可以看出,实验结果和预期相符地很好。
指导教师签字:
实验二:
电路图方法分层设计:
全加器
1、实验内容
1、建立一个新的工程(cpld9500系列)
2、建立一个独立的电路图(All_ADD)
3、输入电路图一位全加器
4、建立测试波形方法仿真激励图形
5、功能仿真
见实验结果。
8、生成电路模块
9、利用电路模块设计8位全加器,(新电路图或者顶层电路图)
10、建立测试波形方法仿真激励图形
11、功能仿真
仿真图见实验结果。
二实验结果
2.1一位全加器仿真结果
2.2八位全加器功能仿真结果
三实验结果讨论分析
按照实验步骤依次建立相关模块,并进行仿真。
从波形图中可以看出,对于单个全加器可以实现全加,对于八个全加器能够实现八位全加。
实验结果符合要求。
指导教师签字:
3实验三:
Verilog语言方法设计:
8位全加器
2、实验内容
1、建立一个新的工程(cpld9500系列)
2、建立一个Verilog模块(All_ADD8)
3、输入全加器
moduleALL_Addr8(A,B,CI,SUM,CY);
input[7:
0]A;
input[7:
0]B;
inputCI;
output[7:
0]SUM;
outputCY;
assign{CY,SUM}=A+B+CI;
endmodule
4、建立测试波形方法仿真激励图形
5、功能仿真
见实验结果。
6、建立Verilog测试模块
自动建立后,添加
//Wait100nsforglobalresettofinish
#100;
A=5;B=4;CI=1;
#100;
A=15;B=14;CI=0;
#100;
A=15;B=114;CI=1;
#100;
A=25;B=124;CI=0;
#100;
A=35;B=134;CI=1;
#100;
A=45;B=144;CI=0;
#100;
A=55;B=154;CI=1;
#100;
A=65;B=164;CI=0;
#100;
A=75;B=174;CI=1;
#100;
A=85;B=184;CI=0;//******分析结果******
#100;
A=215;B=194;CI=1;//******分析结果******
#100;
A=225;B=30;CI=0;//******分析结果******
#100;
A=235;B=20;CI=1;//******分析结果******
//Addstimulushere
7、功能仿真
仿真结果见实验结果。
8、8位可预置计数器(实验拓展)
9、建立一个Verilog模块(Counter8)(学习原理,说明功能)
moduleCounter8(D,CLK,PR,CLR,Q);
input[7:
0]D;
inputCLK;
inputPR;
inputCLR;
output[7:
0]Q;
reg[7:
0]Q=0;
always@(posedgeCLK)
begin
if(PR==1)Q<=D;
elseif(CLR==1)Q<=0;
elseQ<=Q+1;
end
endmodule
10、自己建立仿真过程(波形+Verilog测试)
1)波形仿真图见实验结果。
2)verilog测试代码见图:
二实验结果
2.1A=85;B=184;CI=0
2.2A=215;B=194;CI=1
2.3A=225;B=30;CI=0
2.3Verilog测试仿真图结果
实验程序:
moduleALL_ADD8(A,B,CI,SUM,CY);
input[7:
0]A;
input[7:
0]B;
inputCI;
output[7:
0]SUM;
outputCY;
assign{CY,SUM}=A+B+CI;
endmodule
modulecounter8(D,CLK,PR,CLR,Q);
input[7:
0]D;
inputCLK;
inputPR;
inputCLR;
output[7:
0]Q;
reg[7:
0]Q=0;
always@(posedgeCLK)
begin
if(PR==1)Q<=D;
elseif(CLR==1)Q<=0;
elseQ<=Q+1;
end
endmodule
三实验结果讨论分析
依次按照A=85;B=184;CI=0;A=215;B=194;CI=1;A=225;B=30;CI=0;对建立好的模块进行仿真,从仿真图可以看出,实现了八位全加器的仿真以及可预置八位全加仿真,并且建立了Verilog进行仿真。
实验结果与实验要求符合地很好。
指导教师签字:
实验四LED显示模块设计
一、实验内容
1.1实验任务
1、进一步学习FPGA工程及实际应用
2、学习自顶向下的模块化设计过程
3、学习LED数码管的显示机理
4、实现4位数码管显示及控制设计;
1.2实验过程
1、在上一工程基础上继续做
a、工程名称:
MyProject1
b、选择器件:
Spartan3E
2、建立LED显示模块(verilog)
图4、LED显示模块
●功能说明:
a、数据输入:
4bits;
b、数据输出;8bits;
c、功能:
翻译16进制到7段LED显示(参照显示16进制数对照表)
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
3、建立显示数据锁存分配模块(verilog)
图5、数据所存模块
●功能说明:
a、数据输入:
8bits。
b、CK:
锁存信号,上升沿锁存输入数据
c、数据输出:
锁存输出最后输入的两字节数据,分别对应4位输出
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
d、建立电路图方式顶层模块显示模块
e、联合验证;
二实验结果
建立了如图所示的模块
实验程序:
LED显示部分:
moduleledshow(in,out);
input[3:
0]in;
outputreg[7:
0]out;
always@(*)
case(in)
4'h0:
out=8'h3f;
4'h1:
out=8'h06;
4'h2:
out=8'h5b;
4'h3:
out=8'h4f;
4'h4:
out=8'h66;
4'h5:
out=8'h6d;
4'h6:
out=8'h7d;
4'h7:
out=8'h07;
4'h8:
out=8'h7f;
4'h9:
out=8'h6f;
4'ha:
out=8'h77;
4'hb:
out=8'h7c;
4'hc:
out=8'h39;
4'hd:
out=8'h5e;
4'he:
out=8'h79;
4'hf:
out=8'h47;
endcase
endmodule
整体木块:
modulefgf(ck,datain,a,b,c,d);
inputck;
input[7:
0]datain;
outputreg[3:
0]a=0;
outputreg[3:
0]b=0;
outputreg[3:
0]c=0;
outputreg[3:
0]d=0;
always@(posedgeck)
begin
a<=c;
b<=d;
c<=datain[7:
4];
d<=datain[3:
0];
end
endmodule
三实验结果讨论分析
建立相关模块,输入相应程序,编译运行。
在输入端输入模拟信号,对LED显示模块的功能分析比较。
我们发现在输入端输入四位信号,每当CK处于上升沿时,将会使输出端相应的低四位输出LED显示的对应二进制数,并且当输入端输入新的信号时,原先LED低四位二进制数将转移到高四位,并将低四位的二进制数转变为对应的新信号。
实验结果表明,LED显示模块符合实验要求。
指导教师签字:
实验五串行口设计
一、实验内容
1、建立一个新的工程
a、工程名称:
MyProject1
b、选择器件:
Spartan3E
2、建立模式控制模块(verilog)
图1模式控制模块
●功能说明:
a、DataIn:
控制数据输入、8bits;低4位用于选择波特率模式,最高位用于选择奇、偶校验是否有效;
b、WR:
控制数据写入,1bit;上升沿锁存输入数据;
c、FreOut:
波特率模式选择输出,DataIn低4位,由WR上升沿锁存保持;0—9变化;大于9不变化。
d、ModOut:
奇、偶校验模式选择;DataIn最高位,由WR上升沿锁存保持;
e、默认值:
FreOut=6;ModOu=1;
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
3、建立波特率发生器模块(verilog)
图2波特率发生模块
●功能说明:
a、FreSel:
波特率控制数据输入、4bits;0—9变化,对应选择波特率300、600、1200、1800、2400、4800、9600、14.4K、19.2K、28.8Kbps共10种变化。
b、CLK:
时钟射入,频率为22.1184MHz;
c、CLK_S:
对应波特率分频输出,根据FreSel输入控制数据进行对应分频,对应模式有300、600、1200、1800、2400、4800、9600、14.4K、19.2K、28.8Kbps
d、CLK_S16:
对应波特率16倍分频输出;
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
d、建立电路图方式顶层模块Serial
e、连接波特率发生器模块和模式控制模块进行联合验证;
4、建立发送数据模块(verilog)
图3发送数据模块
●功能说明:
a、DataIn:
发送数据输入、8bits;
b、WR:
控制数据写入,1bit;上升沿锁存输入数据;写入后下一个CLK上升沿开始立即发送数据
c、CLK:
时钟射入,对应波特率时钟;
d、Mod:
模式输入,0对应无奇偶校验;1对应有奇偶校验;
e、TX:
串行数据输出,平时高电平,当有数据输入后,下一个CLK上升沿开始立即发送数据;
f、BUSY:
空闲指示,当TX输出时为高,其它时间为低;
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
d、加入顶层模块Serial
e、进行联合验证;
5、建立接收数据模块(verilog)
图4接收数据模块
●功能说明:
a、RX:
串行数据输入、1bits;
b、CLK:
时钟输入,对应16倍波特率时钟。
目的:
提高采样率,在第一时刻发现起始脉冲;同时对每一位进行3次采样(时间平均),已剔出干扰;
c、Mod:
模式输入,0对应无奇偶校验;1对应有奇偶校验;
d、TX:
串行数据输出,平时高电平,当有数据输入后,下一个CLK上升沿开始立即发送数据;
e、DataOut:
接收转换后数据;
f、EN:
接收完成使能,平时为第电平,接收完成后保持一个波特率周期高电平。
g、ERR:
奇偶校验错误指示,平时为第电平,接收完成后保持一个波特率周期高电平。
●过程说明:
a、建立Verilog模块;
b、建立Verilog仿真;
c、验证模块正确性;
d、加入顶层模块Serial
进行联合验证;
二实验结果
1、建立一个新的工程
c、工程名称:
MyProject1
d、选择器件:
Spartan3E
2、建立模式控制模块(verilog)
图5模式控制模块
(1)功能说明:
d、DataIn:
控制数据输入、8bits;低4位用于选择波特率模式,最高位用于选择奇、偶校验是否有效;
e、WR:
控制数据写入,1bit;上升沿锁存输入数据;
f、FreOut:
波特率模式选择输出,DataIn低4位,由WR上升沿锁存保持;0—9变化;大于9不变化。
g、ModOut:
奇、偶校验模式选择;DataIn最高位,由WR上升沿锁存保持;
h、默认值:
FreOut=6;ModOu=1;
(2)过程说明:
d、建立Verilog模块;
e、建立Verilog仿真;
f、验证模块正确性;
(3)程序:
moduleCtr(DataIn,WR,FreOut,ModOut);
input[7:
0]DataIn;
inputWR;
output[3:
0]FreOut;
outputModOut;
reg[3:
0]FreOut=6;
regModOut=1;
always@(posedgeWR)
begin
if(DataIn[3:
0]<=9)
FreOut<=DataIn[3:
0];
ModOut<=DataIn[7];
end
endmodule
(4)仿真结果:
3、建立波特率发生器模块(verilog)
图6波特率发生模块
(1)功能说明:
a、FreSel:
波特率控制数据输入、4bits;0—9变化,对应选择波特率300、600、1200、1800、2400、4800、9600、14.4K、19.2K、28.8Kbps共10种变化。
b、CLK:
时钟射入,频率为22.1184MHz;
c、CLK_S:
对应波特率分频输出,根据FreSel输入控制数据进行对应分频,对应模式有300、600、1200、1800、2400、4800、9600、14.4K、19.2K、28.8Kbps
d、CLK_S16:
对应波特率16倍分频输出;
(2)过程说明:
f、建立Verilog模块;
g、建立Verilog仿真;
h、验证模块正确性;
i、建立电路图方式顶层模块Serial
j、连接波特率发生器模块和模式控制模块进行联合验证;
(3)程序:
moduleBot(FreSel,CLK,CLK_S16,CLK_S);
input[3:
0]FreSel;
inputCLK;
outputCLK_S16;
outputCLK_S;
regCLK_S16=0;
regCLK_S=0;
reg[11:
0]Counter=0;
reg[4:
0]Counter1=0;
always@(posedgeCLK)
begin
Counter<=Counter+1;
if(FreSel==0&&Counter==2303)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==1&&Counter==1151)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==2&&Counter==575)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==3&&Counter==383)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==4&&Counter==287)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==5&&Counter==143)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==6&&Counter==71)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==7&&Counter==47)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==8&&Counter==35)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
elseif(FreSel==9&&Counter==23)begin
Counter<=0;
CLK_S16<=~CLK_S16;
end
end
always@(posedgeCLK_S16)
begin
Counter1<=Counter1+1;
if(Counter1==7)
begin
Counter1<=0;
CLK_S<=~CLK_S;
end
end
endmodule
(4)仿真结果:
4、建立发送数据模块(verilog)
图7发送数据模块
(1)功能说明:
g、DataIn:
发送数据输入、8bits;
h、WR:
控制数据写入,1bit;上升沿锁存输入数据;写入后下一个CLK上升沿开始立即发送数据
i、CLK:
时钟射入,对应波特率时钟;
j、Mod:
模式输入,0对应无奇偶校验;1对应有奇偶校验;
k、TX:
串行数据输出,平时高电平,当有数据输入后,下一个CLK上升沿开始立即发送数据;
l、BUSY:
空闲指示,当TX输出时为高,其它时间为低;
(2)过程说明:
f、建立Verilog模块;
g、建立Verilog仿真;
h、验证模块正确性;
i、加入顶层模块Serial
j、进行联合验证;
(3)程序:
moduleTx(DataIn,WR,CLK,XMod,TX,BUSY);
input[7:
0]DataIn;
input[3:
0]WR;
inputCLK;
inputXMod;
outputTX;
outputBUSY;
regREADY=0;
regTX=1;
regBUSY=0;
regData_Ready=0;
reg[4:
0]Counter=0;
regSUM=0;
always@(posedgeCLK)
begin
if(WR==0&&READY==0)
begin
READY<=1;
TX<=0;
Counter<=0;
end
elseif(Counter<8)
begin
READY<=1;
BUSY<=1;
TX<=DataIn[Counter];
SUM=SUM+DataIn[Counter];
Counter<=Counter+1;
end
elseif(Counter==8&&XMod==0)
begin
TX<=1;
BUSY<=1;
READY<=1;
Counter<=Counter+1;
end
elseif(Counter==9&&XMod==0)
begin
Counter<=0;
BUSY<=0;
READY<=0;
end
elseif(Counter==8&&XMod==1)
begin
TX<=SUM;
Counter<=Counter+1;
end
elseif(Counter==9&&XMod==1)
begin
TX<=1;
BUSY<=1;
READY<=1;
Counter<=Counter+1;
end
elseif(Counter==10&&XMod==1)
begin
Counter<=0;
BUSY<=0;
READY<=0;
end
end
endmodule
(4)仿真结果:
5、建立接收数据模块(verilog)
图8接收数据模块
(1)功能说明:
h、RX:
串行数据输入、1bits;
i、CLK:
时钟输入,对应16倍波特率时钟。
目的:
提高采样率,在第一时刻发现起始脉冲;同时对每一位进行3次采样(时间平均),已剔出干扰;
j、Mod:
模式输入,0对应无奇偶校验;1对应有奇偶校验;
k、TX:
串行数据输出,平时高电平,当有数据输入后,下一个CLK上升沿开始立即发送数据;
l、DataOut:
接收转换后数据;
m、EN:
接收完成使能,平时为第电平,接收完成后保持一个波特率周期高电平。
n、ERR:
奇偶校验错误指示,平时为第电平,接收完成后保持一个波