ROCCHI THE ROCK!|

Yamada_Ryo

园龄:1年4个月粉丝:3关注:5

# FPGA入门笔记002——译码器

设计一个38译码器

项目文件编写:

module my3_8(
a,
b,
c,
out
);
input a; //输入端口A
input b; //输入端口B
input c; //输入端口C
output reg[7:0]out; //输出端口
/*
always块:
'()'内部为敏感信号,当a、b、c有一个信号发生变化时,执行always块中的语句
凡是在always块中赋值的信号,必须将其定义为reg型
*/
always@(a,b,c)begin
case({a,b,c}) //'{}'为多位拼接,将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
endmodule

语法知识:

1、always块

1、'()'内部为敏感信号,当a、b、c有一个信号发生变化时,执行always块中的语句

2、凡是在always块中赋值的信号,必须将其定义为reg型

2、多位拼接

'{}'为多位拼接,将a、b、c三个信号拼接成一个三位的信号

仿真文件编写:

`timescale 1ns/1ps
module my3_8_tb();
reg a;
reg b;
reg c;
wire [7:0]out;
my3_8 u1(
.a(a),
.b(b),
.c(c),
.out(out)
);
initial begin
a = 0;b = 0;c = 0;
#200;
a = 0;b = 0;c = 1;
#200;
a = 0;b = 1;c = 0;
#200;
a = 0;b = 1;c = 1;
#200;
a = 1;b = 0;c = 0;
#200;
a = 1;b = 0;c = 1;
#200;
a = 1;b = 1;c = 0;
#200;
a = 1;b = 1;c = 1;
#200;
$stop;
end
endmodule

本文作者:Yamada_Ryo

本文链接:https://www.cnblogs.com/little55/p/17837418.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Yamada_Ryo  阅读(48)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起