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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章