FPGA毕业实习-实践项目学习记录

一、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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值