FPGA从入门倒入坟-第一个基础实例蜂鸣器
声明
本小白使用的是***Xilinx Spartan6***系列的开发板,教程是特权同学提供的PDF文档教程,因此会有所错误。对于软件的安装真卷,,,,表示不想进行第二次安装。
本人小白,大佬轻锤。
代码
逻辑代码(.V文件)
module BuzzerTest( //定义蜂鸣器测试模块
input ext_clk_25m, //设置输入变量(系统时钟变量)
input ext_rst_n, //设置复位变量(系统复位变量)
output reg buzzer //设置输出变量(寄存器类型)
);
reg [19:0] count; //设置寄存器类型变量,设置类型为20位,可以计数最大数值位2^20
//创造一个系统时钟,即对25m系统时钟进行1 000 000分频,即一个计数器count对应25 000 000 / 1 000 000 = 25hz
always @ (posedge ext_clk_25m or negedge ext_rst_n) //始终等待系统时钟的上升沿或者复位时钟的下降沿
if(!ext_rst_n) count <= 20'd0; //如果系统复位信号为低电平,即电路板未上电,则将20位寄存器类型的变量count置为0,即低电平
else if(count < 20'd999_999) count <= count + 1'b1; //如果20位寄存器变量计数到十进制的999_999实际上是计数到1_000_000,则20位计数器以二进制的形式加一
else count <= 20'd0; //否则将寄存器归零
always @ (posedge ext_clk_25m or negedge ext_rst_n) //始终等待系统时钟的上升沿或者复位时钟的下降沿
if(!ext_rst_n) buzzer <= 1'b0; //如果系统复位端电平位低电平,即电路板未上电,则将buzzer端电平置低,即buzzer不使能。
else if(count < 20'd500_000) buzzer <= 1'b1; //如果计数器计数时间小于十进制500_000,则将buzzer使能
else buzzer <= 1'b0; //否则buzzer不使能
endmodule
端口约束文件(.UCF文件)
NET "ext_clk_25m" LOC = P23 | IOSTANDARD = LVCMOS33;
NET "ext_rst_n" LOC = P24 | IOSTANDARD = LVCMOS33;
NET "buzzer" LOC = P27 | IOSTANDARD = LVCMOS33;
相关程序关键字解释
input:定义输入端口
output:定义输出端口
reg :寄存器类型定义,wire输入直接导致输出的变化;reg一般得有时序触发,输入端口的值不一定立刻反应到输出上,因此一般可以理解为锁存器的工作类型。wire只能被assign连续赋值,reg只能在initial和always中赋值。
reg [19:0] count;设置寄存器类型变量,设置类型为20位,可以计数最大数值位2^20,寄存器从0到19为20位寄存器。
NET “IOname” LOC = P23 | IOSTANDARD = LVCMOS33;定义变量的逻辑接口和电平标准