4线2线译码器.docx
《4线2线译码器.docx》由会员分享,可在线阅读,更多相关《4线2线译码器.docx(10页珍藏版)》请在冰点文库上搜索。
4线2线译码器
4线2线译码器
4线2线优先编码器和十进制加减可逆计数器设计
专业:
自动化学生:
XXXX学号:
XXXXXXXX
1设计目标
A:
掌握可编程逻辑器件的应用开发技术——设计输入、编译、仿真和器件编程;
熟悉一种EDA软件使用与实验系统介绍;
掌握VerilogHDL设计方法;
设计一个4线2线优先编码器,其功能如下表所示:
I3
I2
I1
I0
A1
A0
0
0
0
1
0
0
0
0
1
x
0
1
0
1
x
x
1
0
1
x
x
x
1
1
功能要求:
①满足以上功能表
②在实验板的发光二级管或编译显示电路,显示结果
B:
用verilogHDL语言设计一个模为10的可逆计数器,能自动实现加减可逆计数,也能手动实现加/减计数
用实验板上的译码显示电路,显示结果
2实验装置
586计算机,MAX+plusⅡ10.2软件,专用编程电缆,EDAPro2K数字实验装置等。
3设计步骤和要求
①在MAX+plusⅡ10.2软件中,输入设计的原理图。
B:
十进制加减可逆计数器代码:
1)顶层模块
modulecnt10_top(clk,crl,s,t,out);
inputcrl,s,t;
inputclk;
output[7:
0]out;
wirecp;
wire[3:
0]Q;
wire[7:
0]out;
freqDivU0(clk,cp);//tochangetheclockrate
cnt10U1(crl,s,t,cp,Q);
SEG7_LUTU2(out,Q);//tooutputtheresult
Endmodule
2)十进制可逆计数模块
modulecnt10(nclr,s,t,clk,Q);
inputclk,nclr,s,t;
output[3:
0]Q;
reg[3:
0]Q;
regflag;
initial
begin
flag=1;
end
always@(posedgeclkornegedgenclr)
begin
if(!
nclr)
Q<=4'b0000;//clear
else
casez({s,t})
2'b00:
if(Q==9)
begin
Q<=4'b1000;
flag<=0;
end
elseif(Q==0)
begin
Q<=4'b0001;
flag<=1;
end
elseif(flag==1)
Q<=Q+1;
else
Q<=Q-1;
2'b01:
if(Q==9)
Q<=4'b0000;
else
Q<=Q+1;
2'b1?
:
if(Q==0)
Q<=4'b1001;
else
Q<=Q-1;
endcase
end
endmodule
3)分频模块
modulefreqDiv(in_50MHz,out_1Hz);
inputin_50MHz;
outputout_1Hz;
regout_1Hz;
reg[25:
0]cnt;
always@(posedgein_50MHz)
begin
cnt<=cnt+1'B1;
if(cnt<26'd24999999)
out_1Hz<=0;
else
begin
if(cnt>=26'd50000000)
cnt<=26'b0;
elseout_1Hz<=1;
end
end
endmodule
4)显示模块
moduleSEG7_LUT(oSEG1,iDIG);
input[3:
0]iDIG;
output[7:
0]oSEG1;
reg[7:
0]oSEG;
wire[7:
0]oSEG1;
always@(iDIG)
begin
case(iDIG)
4'h0:
oSEG=8'b00111111;
4'h1:
oSEG=8'b00000110;
4'h2:
oSEG=8'b01011011;
4'h3:
oSEG=8'b01001111;
4'h4:
oSEG=8'b01100110;
4'h5:
oSEG=8'b01101101;
4'h6:
oSEG=8'b01111101;
4'h7:
oSEG=8'b00000111;
4'h8:
oSEG=8'b01111111;
4'h9:
oSEG=8'b01101111;
4'ha:
oSEG=8'b01110111;
4'hb:
oSEG=8'b01111100;
4'hc:
oSEG=8'b00111001;
4'hd:
oSEG=8'b01011110;
4'he:
oSEG=8'b01111001;
4'hf:
oSEG=8'b01110001;
endcase
end
assignoSEG1=~oSEG;
endmodule
4.3电路编译
4.4电路仿真
选择仿真参数
保存波形文件Q_DECODE_38.vwf
点击菜单项Processing->GenerateFunctionalSimulationNetlist,产生功能仿真网表
点击菜单项Processing->StartSimulation启动功能仿真
仿真波形如下:
CLR=0时,清零:
CLR=1,S=0,T=0,自动计数(0-9,9-0,……):
CLR=1,S=0,T=1,手动计数(0-9,0-9,……):
CLR=1,S=1,T=0,手动计数(9-0,9-0,……):
CLR=1,S=1,T=1,手动计数(9-0,9-0,……):
4.5器件的编程下载
下载程序:
在Programmer界面中,将.sof文件列表中Program/Configure属性勾上
再点击Start按钮,开始下载程序。
完成后,下载程序显示100%
最终调试,在DE0实验板上,扳动SW2,SW1和SW0开关,可以看到译码之后的LEDR7-LEDR0红色LED发光输出。
例如:
扳动SW1和SW0时仅有LEDR3亮。
5实验总结
本次实验是对编程语言VerilogHDL的学习和巩固,通过不用做电路图而直接找各个工作点以及门电路之间的关系写出语言描述,再根据语言描述仿真看结果是否符合预期结果,这在一定的程度上节省了画图所浪费的时间,效率较高,另外这是一门重要且比较基础的语言,通过这次实践让自己更加熟悉
同时,学会了对Quartus这个软件的基本操作
另外,本次实验应用层次化的设计输入方法:
“自顶向下”的全新设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计,由于设计的主要仿真和调试过程是在高层次上完成的,这既有利于早期发现结构设计上的错误,避免设计工作的浪费,又减少了逻辑功能仿真的工作量,提高了设计的一次成功率。