FPGA学习笔记(一)------流水灯

遇到的问题:

1、Error: Top-level design entity “simulate” is undefined
verilog文件(.v)里的模块名和顶层实体名(Top-level design entity,一般就是.v文件的文件名)不一致。
2、中文 !和 英文 ! 的区别。
3、always语句—加时钟—并行语句—非阻塞赋值— “<=”
always语句—不加时钟—串行语句—阻塞赋值—“=”
4、注意符号(,;)的使用。

//***********Copyright (c)************//
//-------------------------------------
// File name:           my_flow_led
// Last modified Date:  2020/6/8 22:30
// Last Version:        V1.1
// Descriptions:        流水灯
//-------------------------------------
// LED流水灯引脚分配,高电平点亮
// LED0        D11
// LED1        C11
// LED2        E10
// LED3        F9
// sys_clk     E1
// sys_rst_n   M1
//-------------------------------------
//*************************************//

module my_flow_led
(
input sys_clk,     					//系统时钟50MHZ
input sys_rst_n,  					//复位,低电平有效

output  reg  [3:0]  led      	   //4个LED灯
);

//reg define
reg [23:0] counter ;					 //50MHZ(周期20ns),定时200ms,需要24位。

//计数器对系统时钟计数,计时0.2秒。0.2s/20ns=1000_0000(d)
always @(posedge sys_clk or negedge sys_rst_n) //时钟上升沿,复位下降沿
begin
	if (!sys_rst_n)         		  //如果复位sys_rst_n=0(默认为高) *注意!!区别		   
		counter <=24'd0;				  //计数器清0,重新开始计时
	else 						           //if嵌套
		if (counter<24'd1000_0000)	  //没有计时到0.2s
			counter<=counter+1'b1;	  //计数器加1
		else
			counter<=24'd0;			  //到0.2s,计数器清0
end

//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态
always @(posedge sys_clk or negedge sys_rst_n)
 begin
 if (!sys_rst_n)						        //如果复位
        led <= 4'b0001;			           //0001 LED0点亮		
    else 
		if(counter == 24'd1000_0000)       //计时到0.2s
			led[3:0] <= {led[2:0],led[3]};  //拼接运算符{a,b}
		else
			led <= led;							  //保持	
end

endmodule

你可能感兴趣的:(FPGA)