遇到的问题:
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