P4 组合逻辑38译码器实现与相关语法基础
1.![](https://i-blog.csdnimg.cn/blog_migrate/7a5127f2d59ed0120697b0aab0e08e76.png)
module decoder_3_8(
a,
b,
c,
out
);
input a;
input b;
input c;
//表示多位宽的数据
output reg[7:0]out;
// output [7:0]out;
// reg [7:0]out;
//以always块描述的信号赋值,被赋值对象必须定义为reg类型
//{a,b,c}变成了一个三位的信号,这种操作叫做位拼接
//*符号表示通配符,可以代替任何符号
//用来描述一段逻辑块
// wire [3:0]d;
// assign d = {a,1'b0,b,c};
always@(*)
begin
case({a,b,c})
3'b000: out = 8'b0000_0001;
3'b001: out = 8'b0000_0010;
3'b010: out = 8'b0000_0100;
3'b011: out = 8'b0000_1000;
3'b100: out = 8'b0001_0000;
3'b101: out = 8'b0010_0000;
3'b110: out = 8'b0100_0000;
3'b111: out = 8'b1000_0000;
endcase
end
// always@(*)
// begin
// case({a,b,c})
// //3'd0: out = 8'd1;
// 3'd0: out = 8'b0000_0001;
// 3'd1: out = 8'b0000_0010;
// 3'd2: out = 8'b0000_0100;
// 3'd3: out = 8'b0000_1000;
// 3'd4: out = 8'b0001_0000;
// 3'd5: out = 8'b0010_0000;
// 3'd6: out = 8'b0100_0000;
// 3'd7: out = 8'b1000_0000;
// endcase
// end
// b 二进制 3'b101 8'b0000_1010
// o 八进制
// d 十进制 3'd5; 8'd10
// h 十六进制 8'ha
endmodule
2.分析综合![](https://i-blog.csdnimg.cn/blog_migrate/9b7245c8b77a0c944e1db7593a4339ce.png)
3.功能仿真(需要test bench测试平台)
//前面是步进,后面是精度
`timescale 1ns/1ns
module decoder_3_8_tb;
reg s_a;
reg s_b;
reg c;
wire [7:0]out;
decoder_3_8 decoder_3_8
(
.a(s_a),
.b(s_b),
.c(c),
.out(out)
);
initial begin
s_a=0;s_b=0;c=0;
#200;
s_a=0;s_b=0;c=1;
#200;
s_a=0;s_b=1;c=0;
#200;
s_a=0;s_b=1;c=1;
#200;
s_a=1;s_b=0;c=0;
#200;
s_a=1;s_b=0;c=1;
#200;
s_a=1;s_b=1;c=0;
#200;
s_a=1;s_b=1;c=1;
#200;
$stop;
end
endmodule
4.tb写完后,再进行分析综合
5.进行功能仿真
6.最后进行板级调试
先进行引脚分配,生成.xdc的文件