目录
一、3-8译码器
1.简介
3-8译码器,就是把3种输入状态翻译成8种输出状态,译码器是将输入的具有特定含义的二进制代码翻译成输出信号的不同组合,实现电路控制功能的逻辑电路。译码器在数字系统中应用广泛,可用于代码的转换、终端数字的显示、数据的分配等等。
2.实验目的
本次实验主要是为了理解verilog基础语法,掌握组合逻辑的设计方法。
3.设计原理
3-8 译码器有 3 个输入和 8 个输出,所以可以指定当输入为 111 时,译码后为指定的状态,即输出00000001,紧接着依次类推,当输入为 110 时,输出 01111111,当输入为 101 时,输出 11011111,当输入为 100 时,输出 11101111,输入 011 时,输出为 11110111,输入为 010 时,输出 11111011,输入为 001 时,输出 11111101,输入为 000 时,输出为 11111110。
如下图所示:
4.项目代码
module decoder(
input wire [2:0] a,//输入信号,3位
output reg [7:0] b//输出信号,8位
);
//译码器组合逻辑
always@(*)begin
case(a)
3'b000: b=8'b11111110;
3'b001: b=8'b11111101;
3'b010: b=8'b11111011;
3'b011: b=8'b11110111;
3'b100: b=8'b11101111;
3'b101: b=8'b11011111;
3'b110: b=8'b01111111;
3'b111: b=8'b10000000;
default: b=8'b00000000;
endcase
end
endmodule
5.项目仿真
仿真代码
`timescale 1ns/1ns //单位/精度
module decoder_tb();
reg [2:0] a;//输入信号
wire [7:0] b;//输出信号
initial begin
a = 3'b000;
#1 ;//延迟1ns
a = 3'b001;
#1 ;//延迟1ns
a = 3'b010;
#1 ;//延迟1ns
a = 3'b011;
#1 ;//延迟1ns
a = 3'b101;
#1 ;//延迟1ns
a = 3'b110;
#1 ;//延迟1ns
a = 3'b111;
#1 ;//延迟1ns
a = 3'bxxx;
#1 ;//延迟1ns
end
decoder u_decoder(
.a (a),//输入信号,3位
.b (b)//输出信号,8位
);
endmodule
仿真结果
二、点亮LED灯
1.实验任务
每间隔1S实现led灯的亮灭。
2.实验代码
//每间隔1S实现LED的亮灭
module led(
input clk ,
input rst_n ,
output reg [3:0] led
);
//计时1S
//parameter CNT0_2S = 24'd9;//如果要进行仿真的话就使用这个计数器
parameter CNT0_2S = 24'd9_999_999;
reg [23:0] cnt ;//保存时钟上升沿的个数
reg [1:0] state ;
always @(posedge clk or negedge rst_n) begin//对寄存器赋值要使用always
if(!rst_n)begin
cnt <= 24'd0;
end
else if(cnt == CNT0_2S)begin
cnt <= 24'd0;
end
else begin
cnt <= cnt + 1'd1;
end
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)begin
state <= 2'd0;
end
else if(state == 2'd3 && cnt == CNT0_2S)begin
state <= 2'd0;
end
else if(cnt == CNT0_2S)begin
state <= state + 1'd1;
end
end
always @(posedge clk or negedge rst_n) begin
if(!rst_n)begin
led <= 4'b0000;
end
else begin
case (state)
2'd0: led <= 4'b0001;
2'd1: led <= 4'b0010;
2'd2: led <= 4'b0100;
2'd3: led <= 4'b1000;
default:led <= 4'b0000;
endcase
end
end
//0001,0010,0100,1000,0001
// always @(posedge clk or negedge rst_n) begin
// if(!rst_n)begin
// led <= 4'b0001;
// end
// else if