赞
踩
本实验旨在通过Verilog编程设计和仿真一个3-8译码器电路,并对其进行功能验证。实验中使用了Quartus 18.1进行设计和仿真。
3-8译码器是一种常见的数字逻辑电路,用于将3个输入信号转换为8个输出信号。根据输入信号的不同组合,只有一个输出信号会处于逻辑高电平状态,其余输出信号均处于逻辑低电平状态。
首先,在Logsim软件中绘制了3-8译码器的电路图,如下所示:
根据电路图设计的3-8译码器,列出了其逻辑真值表,如下所示:
A | B | C | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
根据3-8译码器的电路图和逻辑真值表,采用Verilog编程设计了3-8译码器模块。
module decoder3_8 ( input wire in1 , //输入信号in1 input wire in2 , //输入信号in2 input wire in3 , //输入信号in3 6 output reg [7:0] out //输出信号out ); //out:根据3个输入信号选择输出对应的8bit out信号 always@(*) //使用"{}"位拼接符将3个1bit数据按照顺序拼成一个3bit数据 if({in1, in2, in3} == 3'b000) out = 8'b0000_0001; else if({in1, in2, in3} == 3'b001) out = 8'b0000_0010; else if({in1, in2, in3} == 3'b010) out = 8'b0000_0100; else if({in1, in2, in3} == 3'b011) out = 8'b0000_1000; else if({in1, in2, in3} == 3'b100) out = 8'b0001_0000; else if({in1, in2, in3} == 3'b101) out = 8'b0010_0000; else if({in1, in2, in3} == 3'b110) out = 8'b0100_0000; else if({in1, in2, in3} == 3'b111) out = 8'b1000_0000; else out = 8'b0000_0001; endmodule
使用Quartus Prime软件对设计的3-8译码器进行了仿真测试。设置了输入信号A、B、C的时序波形,并观察输出信号的变化。
通过Quartus Prime综合生成的RTL原理图与之前设计的电路图基本一致。
经过仿真测试,输出信号O的变化与逻辑真值表相符合,验证了设计的3-8译码器的正确性。
对于3-8译码器的输出信号,我们需要在每个时钟周期中更新其值。因此,将输出信号定义为reg
类型是合适的选择,因为它允许我们在always
块中使用阻塞赋值语句(=
)或非阻塞赋值语句(<=
)来更新输出信号的值。
编译错误:wire类型的信号不能在
always`块中进行赋值操作,因此编译器会报错。
功能错误:由于wire
类型的信号无法在always
块中赋值,输出信号的值将无法更新,从而导致无法正确实现3-8译码器的功能。
本实验成功设计和仿真了一个3-8译码器电路,并验证了其功能的正确性。通过实验,加深了对数字逻辑电路设计和Verilog编程的掌握。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。