进制格式
标识符:用于模块命名
逻辑电平
数据类型
寄存器
线网
参数
运算操作符
移位操作符
逻辑运算符
位运算符
拼接运算符
条件运算符
运算符优先级
注释
关键词
常用关键字
模块
高级语法
结构语句
initial 语句
always 语句
赋值语句
条件语句
if_else语句
case 语句
状态机
例程:分屏器代码
// 分屏器
lmodule divider7 fsm (
//input ports
input sys_clk,
input sys_rst_n,
//output ports
output reg clk_divide_7
);
//reg define
reg [6:0] curr_st ;
reg [6:0] next_st ;
// -----------------------状态空间定义---------------------------
//wire define
//parameter define
parameter WIDTH = 1 ;
//one hotcode desian 独热码
parameter S0 = 7'b0000000;
parameter S1 = 7'b0000001;
parameter S2 = 7'b0000010;
parameter S3 = 7'b0000100;
parameter S4 = 7'b0001000;
parameter S5 = 7'b0010000;
parameter S6 = 7'b0100000;
// -----------------------状态跳转---------------------------
//时钟信号上升沿触发或复位信号下降沿触发 时序逻辑(非阻塞赋值)
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'bO)
curr_st <= 7'b0:
else
curr_st <= next_st;
end
// -----------------------下个状态判断---------------------------
// 组合逻辑(阻塞赋值)
//FSM state logic
always @(*) begin // *表示该always语句都会列到敏感列表里,即该语句里的任意变量发生改变,都会触发该语句
case (curr_st)
S0: begin
next_st = S1;
end
S1: begin
next_st = S2;
end
S2: begin
next_st = S3;
end
S3: begin
next_st = S4;
end
S4: begin
next_st = S5;
end
S5: begin
next_st = S6;
end
S6: begin
next_st = S0;
end
default: next_st = S0;
endcase
end
// 这是一个三段式状态机,没有各状态下动作
// -----------------------结束---------------------------
// action 这是其他状态机的第四部分,仅供参考
wire read_book;
// 条件判断 三目运算
assign read_book = (curretn_state == STUDY) ? 1'b1 : 1'b0;
always @ (curretn_state) begin
if(curretn state == STUDY)
read_book = 1;
else
read_book = 0;
end