兰州理工EDA实验指导书第一次实验实验12.docx
《兰州理工EDA实验指导书第一次实验实验12.docx》由会员分享,可在线阅读,更多相关《兰州理工EDA实验指导书第一次实验实验12.docx(12页珍藏版)》请在冰豆网上搜索。
兰州理工EDA实验指导书第一次实验实验12
目录
实验一、QUARTUSII的基本应用及简单组合逻辑设计1
实验二、计数器设计3
实验一、QUARTUSII的基本应用及简单组合逻辑设计
一、实验前准备
本实验例子使用独立扩展下载板EP1K10_30_50_100QC208(芯片为EP1K100QC208)或者(芯片为EP1K30TC144)。
EDAPRO/240H实验仪主板的VCCINT跳线器右跳设定为3.3V;EDAPRO/240H实验仪主板的VCCIO跳线器组中“VCCIO3.3V”应短接,其余VCCIO均断开;独立扩展下载板“EP1K10_30_50_100QC208”的VCCINT跳线器组设定为2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的VCCIO跳线器组设定为3.3V。
请参考前面第二章中关于“电源模块”的说明。
二、实验目的
1、熟悉QuartusII的菜单、元件库、功能模块及基本应用操作;
2、熟悉QuartusII的VerilogHDL文本方式及原理图方式设计实现流程。
3、学习使用JTAG接口下载逻辑电路到可编程逻辑器件并能调试到正常工作。
4、熟悉数字电路集成设计的过程。
三、实验内容
1、用VerilogHDL文本方式设计带使能控制的3-8译码器;
三、实验原理
1、3-8译码器:
译码器是把输入的数码解出其对应的数码,译码器有N个二进制选择线,那么最多可译码转换成2N个数据。
当一个译码器有N条输入线及M条输出线时,则称为N×M的译码器。
3×8译码器是依此而来。
3×8译码器真值表如下表所示:
A2A1A0
Y7Y6Y5Y4Y3Y2Y1Y0
000
00000001
001
00000010
010
00000100
011
00001000
100
00010000
101
00100000
110
01000000
111
10000000
四、实验步骤
新建设计文件夹(不可用中文)-》新建设计文件-》输入设计项目(原理图/VerilogHDL文本代码)-》存盘(注意原理图/文本取名)-》将设计项目设置成Project-》选择目标器件-》启动编译-》建立仿真波形文件-》仿真测试和波形分析-》引脚锁定并编译-》编程下载/配置-》硬件测试
五、硬件测试说明
1、把译码器的输入接到拨码开关,使能控制端接按键,输出端接8个LED灯,通过拨码开关改变输入的逻辑电平变化来观察LED输出情况,验证3×8译码器的工作状态。
通过按键按下/释放观测使能控制端对输出的影响。
(引脚锁定可参考:
独立扩展板为EP1K10_30_50_100QC208,A0、A1、A2:
锁定为独立扩展下载板上第53、47、46脚,内部已连接,无需连线,对应拨码开关SW8、SW7、SW6。
Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7:
锁定为独立扩展下载板上的第12、13、14、15、17、18、19、24脚,内部已连接至“红色信号指示灯L1-8”的“L1~L8”。
EN:
为使能输入信号脚,定义在独立扩展下载板上第68脚,应接“多功能复用按键F1-F12”信号接线组“F1_12(T)”的F12~F9中任意一个引线插孔,即高电平有效。
若独立扩展板为EP1K10_30_50_50TC144,A0、A1、A2:
锁定为独立扩展下载板上第46、44、43脚,内部已连接,无需连线,对应拨码开关SW8、SW7、SW6。
Y0、Y1、Y2、Y3、Y4、Y5、Y6、Y7:
锁定为独立扩展下载板上的第13、14、17、18、19、20、21、22脚)
六、实验要求
1.认真阅读实验任务书,明确实验内容;
2.按步骤进行设计输入、检查及引脚的锁定;
3.正确连接硬件电路,验证设计的正确性。
4.分析实验结果,书写实验报告。
附录1:
波形分析举例
输入信号:
EN:
使能信号高电平下工作,通过多功能复位按键F9~F12中任意一键来控制。
A2、A1、A0:
三个数字状态输入端口,决定八个状态输出情况,由8位数字开关组SW6、SW7、SW8分别对应A2、A1、A0来实现对Y0至Y7的译码输出。
输出信号:
Y0~Y7:
8个状态输出,输出点亮红色指示灯组L1~L8。
波形结果分析:
当A2、A1、A0对应于:
“100”时,Y(八位)输出“00010000”,当输入信号跳变为“000”时Y(八位)输出“00000001”。
满足设计要求。
实验二、计数器设计
一、实验前准备
本实验例子使用独立扩展下载板EP1K10_30_50_100QC208(芯片为EP1K100QC208)或者(芯片为EP1K30TC144)。
EDAPRO/240H实验仪主板的VCCINT跳线器右跳设定为3.3V;EDAPRO/240H实验仪主板的VCCIO跳线器组中“VCCIO3.3V”应短接,其余VCCIO均断开;独立扩展下载板“EP1K10_30_50_100QC208”的VCCINT跳线器组设定为2.5V;独立扩展下载板“EP1K10_30_50_100QC208”的VCCIO跳线器组设定为3.3V。
请参考前面第二章中关于“电源模块”的说明。
二、实验目的
1、了解各种进制计数器设计方法
2、制作一个数码管显示的7段译码电路,以备以后调用
3、理解动态扫描的概念及实现方法
三、实验内容
1、用VerilogHDL设计60进制计数器的数码管动态扫描电路。
2、用VerilogHDL设计7段显示译码电路。
3、利用上面生成的模块在设计顶层以模块例化的方式实现动态显示的60进制计数器。
三、实验原理
1、七段显示译码器:
BCD至7段显示器执行的动作就是把一个四位的BCD码转换成7个码的输出,以便在7段显示器上显示这个十进制数。
2、60进制计数器:
原理为数电中所讲用小模数计数器构成大模数计数器的设计方法,可采用串行进位法或并行进位法,具体实现时可用(同步/异步)置数法或(同步/异步)清零法。
3、数码管动态扫描控制电路
在扫描控制脉冲作用下,使指定位置的数码管使能工作,其余数码管禁止工作,同时在数据线上送出该位置的数码管上要显示的数据,使数码管显示出对应位的数值。
由于扫描脉冲频率很高,而数码管的显示有余辉,这样就可以利用若干根数码管位控制线和同一组数据线,实现一组数据在动态数码管上的稳定清晰显示。
该模块的VerilogHDL程序设计可分为两个子模块,一个模块在扫描脉冲的驱动产生顺序循环的动态数码管中各位的选通信号,另一模块根据所选通道号选择对应输入数据到数据输出通道上。
四、实验步骤
1、按照以下步骤完成每一个模块的设计:
新建设计文件夹(不可用中文)-》新建设计文件-》输入设计项目(原理图/VerilogHDL文本代码)-》存盘(注意原理图/文本取名)-》将设计项目设置成Project-》选择目标器件-》启动编译-》建立仿真波形文件-》仿真测试和波形分析
2、新建顶层模块文件-》输入设计项目(原理图/VerilogHDL文本代码)-》存盘(注意原理图/文本取名)-》将设计项目设置成Project-》选择目标器件-》启动编译-》建立仿真波形文件-》仿真测试和波形分析-》引脚锁定并编译-》编程下载/配置-》硬件测试
五、硬件测试说明
1、按照引脚锁定的位置,把计数脉冲输入端接到时钟信号频率组的一个频率较低的信号上。
2、把脉冲扫描信号接到时钟信号频率组的一个频率较高的信号上。
3、应将计数脉冲输入信号分配到可编程逻辑器件的全局时钟信号(globalclk)引脚上,这样实验效果会较好。
4、动态扫描数码管为实验箱左下角处的数码管,其数码管得段信号A-G和位选择信号在数码管得近旁。
附录:
1.硬件连线说明
EP1K100QC208PIN分配
CLK79接GCLK1-CLOCK(T)9
Display[6]93接数码管段位引线A
Display[5]92接数码管段位引线B
Display[4]90接数码管段位引线C
Display[3]89接数码管段位引线D
Display[2]88接数码管段位引线E
Display[1]87接数码管段位引线F
Display[0]86接数码管段位引线G
Rst71接按键F12
Sel[2]70接SS2
Sel[1]69接SS1
Sel[0]68接SS0
EP1K30TC114PIN分配
CLK55接CLK(T)-CLOCK(T)9
Display[6]91接数码管段位引线A
Display[5]90接数码管段位引线B
Display[4]88接数码管段位引线C
Display[3]87接数码管段位引线D
Display[2]86接数码管段位引线E
Display[1]83接数码管段位引线F
Display[0]81接数码管段位引线G
Rst67接按键F12
Sel[2]70接SS2
Sel[1]69接SS1
Sel[0]68接SS0
2.硬件仿真说明
(1)显示译码器仿真结果
(2)60进制计数器
仿真结果
(3)数码管动态扫描控制电路VerilogHDL语言
波形仿真结果
设计顶层仿真结果
3线8线译码器程序:
moduleMUX1(
input[2:
0]B_data,
outputA,
outputB,
outputC,
outputD,
outputE,
outputF,
outputG,
outputH
);
reg[7:
0]dataMUX1;
always@(B_data[0]orB_data[1]orB_data[2])
begin
case({B_data[0],B_data[1],B_data[2]})
3'b000:
dataMUX1=8'b00000001;
3'b001:
dataMUX1=8'b00000010;
3'b010:
dataMUX1=8'b00000100;
3'b011:
dataMUX1=8'b00001000;
3'b100:
dataMUX1=8'b00010000;
3'b101:
dataMUX1=8'b00100000;
3'b110:
dataMUX1=8'b01000000;
3'b111:
dataMUX1=8'b10000000;
endcase
end
assignA=dataMUX1[0];
assignB=dataMUX1[1];
assignC=dataMUX1[2];
assignD=dataMUX1[3];
assignE=dataMUX1[4];
assignF=dataMUX1[5];
assignG=dataMUX1[6];
assignH=dataMUX1[7];
endmodule
60进制程序:
modulec60(CLK,sel,display,rst);
inputCLK;
inputrst;
output[2:
0]sel;
output[6:
0]display;
reg[2:
0]sel;
reg[6:
0]display;
regClk_1HZ;
reg[3:
0]q;
reg[3:
0]Disp_Temp;
reg[100:
0]Clk_Count1;
reg[3:
0]c;
always@(posedgeCLK)
begin
if(Clk_Count1==999)
begin
Clk_Count1<=0;
Clk_1HZ<=~Clk_1HZ;
end
elseClk_Count1<=Clk_Count1+1;
end
always@(posedgeClk_1HZ)
begin
if(q==9)
begin
q<=0;
if(c==5)
begin
c<=0;
end
else
c<=c+1;
end
else
q<=q+1;
end
always@(posedgeCLK)
begin
sel<=sel+1;
end
always@(sel)
begin
case(sel)
3'b000:
Disp_Temp=4'b1010;
3'b001:
Disp_Temp=4'b1010;
3'b010:
Disp_Temp=4'b1010;
3'b011:
Disp_Temp=4'b1010;
3'b100:
Disp_Temp=4'b1010;
3'b101:
Disp_Temp=4'b1010;
3'b110:
Disp_Temp=c;
3'b111:
Disp_Temp=q;
endcase
end
always@(Disp_Temp)//显示转换
begin
case(Disp_Temp)
4'b0000:
display=7'b1111110;//0
4'b0001:
display=7'b0110000;//1
4'b0010:
display=7'b1101101;//2
4'b0011:
display=7'b1111001;//3
4'b0100:
display=7'b0110011;//4
4'b0101:
display=7'b1011011;//5
4'b0110:
display=7'b1011111;//6
4'b0111:
display=7'b1110000;//7
4'b1000:
display=7'b1111111;//8
4'b1001:
display=7'b1111011;//9
4'b1010:
display=7'b1000000;//-
default:
display=7'b0000000;//全灭
endcase
end
endmodule