遇到的問題:
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