FPGA实习报告

在过去的十天里,我参加了FPGA的实习,学习了一系列关于FPGA开发的内容。在这段时间里,我掌握了数码管、呼吸灯、按键消抖、LED流水灯等基本概念,并学会了编写测试文件和顶层文件。以下是我对这些内容的总结和归纳:

呼吸灯

呼吸灯是一种能够呈现渐变效果的灯光,类似于人类的呼吸。在FPGA开发中,我们可以使用PWM(脉宽调制)技术来实现呼吸灯的效果。PWM是一种通过调整高电平和低电平的占空比来控制信号的技术。通过改变灯光的亮度和周期,可以让灯光呈现渐变效果。在FPGA中,我们可以使用计数器和比较器(控制占空比)来生成PWM信号,并将其作为控制信号来控制LED的亮度。

module pwm_led(
    input clk,
    input rst_n,

    output reg[3:0] led
);

parameter TIME_US = 6'd49;//微秒
parameter TIME_MS = 10'd999;//毫秒(每50*20微秒=一毫秒)
parameter TIME_S =  10'd999;//秒(每1000毫秒=一秒)

reg [5:0]cnt_us;
reg [9:0]cnt_ms;
reg [9:0]cnt_s;
reg flag;

wire add_cnt_us;//us计数器开始信号
wire end_cnt_us;//us计数器结束信号

wire add_cnt_ms;//ms计数器开始信号
wire end_cnt_ms;//ms计数器结束信号

wire add_cnt_s;//s计数器开始信号
wire end_cnt_s;//s计数器结束信号

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt_us <= 6'd0;
    end
    else if(add_cnt_us) begin
      if (end_cnt_us) begin
          cnt_us <= 6'd0;
      end
      else begin
          cnt_us <= cnt_us + 1'd1;
      end

    end   
    else begin
        cnt_us <= cnt_us;
    end
end

assign add_cnt_us = 1'b1;//开始计数条件
assign end_cnt_us = (add_cnt_us) && (cnt_us == TIME_US);//结束计数条件(当cnt_us计满50次(50*20ns=1ms)时,归零并重新计数)

always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt_ms <= 10'd0;
    end
	 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值