FPGA学习-第一个例程LED点灯

所用开发板为高云(Gowin)的Tang prime 20K开发板,这次我使用的是LED4,根据原理图对应端口为L14,此开发板的晶振为27MHz,位置为H11。

1.创建工程(路径别含中文)

2.编写v文件

3.编译Debug

4.综合

5布局布线

6.烧录到SRAM快速验证

7.烧录到flash

源文件.v文件为

module led(
    input  Clock,
    output IO_voltage
);

/**********计时部分**********/
//parameter Clock_frequency = 27_000_000; // 时钟频率为27Mhz
parameter count_value       = 13_499_999; // 计时 0.5S 所需要的计数次数

reg [23:0]  count_value_reg ; // 计数器
reg         count_value_flag; // IO 电平翻转标志

always @(posedge Clock) begin
    if ( count_value_reg <= count_value ) begin //没有计数到 0.5S
        count_value_reg  <= count_value_reg + 1'b1; // 继续计数
        count_value_flag <= 1'b0 ; // 不产生翻转标志
    end
    else begin //计数到 0.5S 了
        count_value_reg  <= 23'b0; // 清零计数器,为重新计数最准备
        count_value_flag <= 1'b1 ; // 产生翻转标志
    end
end
reg IO_voltage_reg = 1'b0; // 声明 IO 电平状态用于达到计时时间后的翻转,并赋予一个低电平初始态

/**********电平翻转部分**********/
always @(posedge Clock) begin
    if ( count_value_flag )  //  电平翻转标志有效
        IO_voltage_reg <= ~IO_voltage_reg; // IO 电平翻转
    else //  电平翻转标志无效
        IO_voltage_reg <= IO_voltage_reg; // IO 电平不变
end


/**********补充一行代码**********/
assign IO_voltage = IO_voltage_reg;

endmodule

在使用GoWin(一款针对低功耗、高性能MCU的开源固件框架)编写流水灯程序时,你需要先了解几个关键步骤: 1. **安装依赖**:确保你已经安装了GoWin库及其相关的驱动支持,通常可以从其GitHub仓库获取并按照文档说明安装。 2. **硬件连接**:将LED灯串接到GoWin控制的微控制器上,一般通过I/O口(如GPIO)进行数据传输。 3. **基础代码结构**:创建一个新的GoWin项目,并在其中初始化硬件资源,例如设置GPIO模式为输出。 4. **定时器管理**:使用GoWin提供的定时器功能,定期改变GPIO的状态来驱动LED灯的变化。可以设置循环,每一步改变一盏灯的状态。 5. **编写循环函数**:在一个无限循环中,遍历LED灯的数量,依次改变它们的电平状态(高电平点亮,低电平熄灭),实现流水灯的效果。 ```go package main import ( "github.com/gowin-mcu/go-gowin" ) func main() { // 初始化GoWin设备 devices, err := gowin.Discover() if err != nil { panic(err) } if len(devices) == 0 { panic("No GoWin device found") } // 选择一个GPIO端口作为LED灯的驱动 gpio, err := devices[0].GetIO(gowin.GPIO) if err != nil { panic(err) } // 设置GPIO为输出模式 gpio.SetMode(gowin.GPIO_OUT) // 定义LED灯的数量和初始状态 numLeds := 8 // 假设我们有8个LED灯 for i := 0; i < numLeds; i++ { gpio.WritePin(i, false) // 初始状态为关闭 } // 流水灯循环 for { for i := 0; i < numLeds; i++ { gpio.WritePin(i, !gpio.ReadPin(i)) // 交换当前LED的状态 time.Sleep(time.Second / numLeds) // 每盏灯停留一段时间 } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linzaii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值