五、实验步骤与实验结果
法一:基于附件一代码实现74138功能
1、用VHDL设计38译码器。打开QuarterII新建一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:\dianlu\ecp1文件夹中,新建一个Verilog HDL文件,将附件一代码写入,运行无错误,进行引脚锁定(图1-1),重新运行,无误后,进行“Creat symbol files for current file”操作,将decoder38.bsf和decoder38.v文件复制到ecp2文件夹中。
图1-1 引脚锁定图
2、验证38译码器逻辑功能。在电脑安装好usb blaster驱动的前提下,下载到FPGA开发板上进行测试,测试结果如图1-2,注意:LED灯是是Y输出为0时才亮
表2-1
输入 |
输出 |
||||||||||||
E1 |
E2+E3 |
A2 |
A1 |
A0 |
Y0 |
Y1 |
Y2 |
Y3 |
Y4 |
Y5 |
Y6 |
Y7 |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
|
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
|
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
|
0 |
X |
X |
X |
X |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
X |
1 |
X |
X |
X |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
3、用38译码器实现逻辑函数。再创建一个一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:\dianlu\ecp2文件夹中,通过自己设计的74138(decoder38)元件进行的逻辑电路设计,连接完毕后进行引脚锁定,如图3-1。
图3-1 逻辑电路图
将Z的逻辑函数进行仿真,仿真图如图3-2,仿真图解读:由于Z=m0+m2+m4+m7,所以在使能的情况下只有当ABC为000,010,100或111的时候Z才输出1否则输出0,在不使能的情况下,ABC不论输入什么Z输出都为0。
图3-2 仿真图
可以将ecp2的逻辑功能下载到下载到FPGA开发板上进行测试,测试结果可由仿真图或开发板验证,结果如图3-3,注意:LED灯是是Z输出为0时才亮
表3-3
输入 |
输出 |
||||
E1 |
E2+E3 |
A |
B |
C |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
法二:基于附件一代码实现74138功能
1、用VHDL设计38译码器。打开QuarterII新建一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:\dianlu\ecp3文件夹中,新建一个Verilog HDL文件,将附件二代码写入,运行无错误,进行引脚锁定(图1-1),重新运行,无误后,进行“Creat symbol files for current file”操作,将decoder38.bsf和decoder38.v文件复制到ecp4文件夹中。
图1-1 引脚锁定图
2、验证38译码器逻辑功能。在电脑安装好usb blaster驱动的前提下,下载到FPGA开发板上进行测试,测试结果如图1-2,注意:LED灯是是Y输出为0时才亮
表2-1
输入 |
输出 |
||||||||||||
E1 |
E2+E3 |
A2 |
A1 |
A0 |
Y0 |
Y1 |
Y2 |
Y3 |
Y4 |
Y5 |
Y6 |
Y7 |
|
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
|
1 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
|
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
|
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
|
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
|
0 |
X |
X |
X |
X |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
X |
1 |
X |
X |
X |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
3、用38译码器实现逻辑函数。再创建一个一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:\dianlu\ecp4文件夹中,通过自己设计的74138(decoder38)元件进行的逻辑电路设计,连接完毕后进行引脚锁定,如图3-1。
图3-1 逻辑电路图
将Z的逻辑函数进行仿真,仿真图如图3-2,仿真图解读:由于Z=m0+m2+m4+m7,所以在使能的情况下只有当ABC为000,010,100或111的时候Z才输出1否则输出0,在不使能的情况下,ABC不论输入什么Z输出都为0。
图3-2 仿真图
可以将ecp2的逻辑功能下载到FPGA开发板上进行测试,测试结果可由仿真图或开发板验证,结果如图3-3,注意:LED灯是是Z输出为0时才亮
表3-3
输入 |
输出 |
||||
E1 |
E2+E3 |
A |
B |
C |
|
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
六、实验讨论与总结
1.准备工作,Quattus II7.2的安装和基本使用,EDA设计大致分三步,设计、仿真和下载验证
2. 附件一和附件二代码的区别主要在于输出Y的不同,前者端口非常明确,方便连接电路,但是后者在连接电路的时候要用总线连接出来一根线,并修改“Properties”接出来的总线为Y[7..0],其余端口的根据自己的需求设置“Properties”为Y[i],i=1,2…7
3. 引脚锁定的时候一定要注意逻辑顺序,方便下载到开发板上验证,注意仿真的时候“Simulation”要设置成“Functional”,设置好模拟的信号后,一定要先点一下“Generate Functional Simulation Netlist”不然会报错。
4. LED灯是逻辑0才亮,好处在于解决了器件供能不足的情况,一定注意,灯亮不一定就是逻辑1,要根据实际的情况。
6.138代码书写的时候endmodule后是没有分号的,输入不定义成reg类型,138的输出一定要定义成reg类型
7.往开发板下载验证的时候一定要有驱动,“Mode”要选择“JTAG”,说明可以连线操作
附件一:74138Verilog代码1
module decoder38(A2,A1,A0,E1,E2N,E3N,Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0);
input A2,A1,A0,E1,E2N,E3N;
output Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0;
reg Y7,Y6,Y5,Y4,Y3,Y2,Y1,Y0 ;
wire E = E1 & (!E2N) & (!E3N);
wire [2:0] A ={A2,A1,A0};
always @(E,A)
begin
if(E)
case(A)
3'b000:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b0;end
3'b001:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b0; Y0=1'b1;end
3'b010:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b0; Y1=1'b1; Y0=1'b1;end
3'b011:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b0; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
3'b100:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b0; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
3'b101:begin Y7=1'b1; Y6=1'b1; Y5=1'b0; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
3'b110:begin Y7=1'b1; Y6=1'b0; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
3'b111:begin Y7=1'b0; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
default:begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
endcase
else begin Y7=1'b1; Y6=1'b1; Y5=1'b1; Y4=1'b1; Y3=1'b1; Y2=1'b1; Y1=1'b1; Y0=1'b1;end
end
endmodule
附件二:74138Verilog代码2文章来源:https://www.toymoban.com/news/detail-415775.html
基于总线式的文章来源地址https://www.toymoban.com/news/detail-415775.html
module decoder38(A2,A1,A0,E1,E2N,E3N,Y);
input A2,A1,A0,E1,E2N,E3N;
output reg [7:0] Y;
wire [2:0] A={A2,A1,A0};
wire E=E1&(!E2N)&(!E3N);
always @(E,A)
begin
if(E)
case(A)
3'b000:Y=8'b1111_1110;
3'b001:Y=8'b1111_1101;
3'b010:Y=8'b1111_1011;
3'b011:Y=8'b1111_0111;
3'b100:Y=8'b1110_1111;
3'b101:Y=8'b1101_1111;
3'b110:Y=8'b1011_1111;
3'b111:Y=8'b0111_1111;
default
Y=8'b1111_1111;
endcase
else
Y=8'b1111_1111;
end
endmodule
到了这里,关于实验二 译码器及其应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!