verilog 语法一 led 翻转

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2020/09/09 14:33:56
// Design Name:
// Module Name: led
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////

module led
(
input sys_clk, // 输入信号,系统时钟
output [1:0] led_state // 输出信号,LED 灯 状态,占用 bit 宽度 2位, 类似 C语言 char 占用 8bit
);

// 寄存器定义 位宽 32位
reg [32:0] time_count;

// 变量赋值,可以跟一个表达式
// 计数器 小于 25000000 led_state=1,否则 =0;
assign led_state = (time_count < 32'd2500_0000) ? 2'b01 : 2'b00;

// 计数器 在 0-5000_0000 之间进行计数
// posedge verilog 语言关键字,表示上升沿
// negedge verilog 语言关键字,表示下降沿
// Always@(posedge clk)表示在 clk 信号的上升沿的时刻, 执行always块内部的语句
always @( posedge sys_clk)
begin
// 阻塞/非阻塞赋值:采用"\<="进行赋值的语句,称为"非阻塞赋值",
// 采用"="进行赋值的语句,称为"阻塞赋值"。
// 在always块中,阻塞式赋值方式语句执行有先后顺序,而非阻塞赋值语句则是同时执行。
// 因此,在 时序逻辑电路中,两种赋值方式可能或综合出不同的电路结构。
if(time_count < 32'd5000_0000)
time_count <= time_count + 32'd01; //小于 5000_0000 累加
else
time_count <= 32'd00; //大于 5000_0000 清零
end

endmodule

 

 

 

 

 

 

posted on 2020-09-10 14:46  所长  阅读(780)  评论(0编辑  收藏  举报

导航