module tlv5618(
input start, //启动转换信号
input clk, //系统时钟,50MHz
input rst_n, //复位信号
input [15:0]data, //12数据输入
output cs, //片选信号
output sclk, //时钟信号
output din, //数据输入
output tran_done //传输完成
);
/*内部变量*/
reg en; //使能位
reg [15:0]shift_reg; //移位寄存器
reg [3:0]bit_cnt; //位计数器
reg sclk_phase; //SCLK 相位(0:低电平,1:高电平)
// 状态机状态定义
typedef enum reg[1:0]{
IDLE = 2'b00, // 空闲状态
SEND = 2'b01, // 数据发送状态
DONE = 2'b10 // 发送完成状态
}state_t;
state_t state; // 当前状态
localparam CLK_DIV = 3'd3; //分频系数,4
reg [1:0]clk_div_cnt; //分频时钟
/*1. 启动逻辑
当开始信号为高电平时,使能位置1;
传输完成信号置1时,使能位恢复为0
*/
always @(posedge clk or negedge rst_n)
if(!rst_n)
en <= 1'b0;
else if(start)
en <= 1'b1;
else if(tran_done)
en <= 1'b0;
else
en <= 1'b0;
/*4. 序列机*/
always @(posedge clk or negedge rst_n) begin
if(!rst_n)begin
//复位状态
cs <= 1'b1;
din <= 1'b0;
state <= IDLE;
bit_cnt <= 4'd0;
sclk <= 1'b0;
en <= 1'b0;
sclk_phase <= 1'b0;
clk_div_cnt <= 2'b0;
end
else begin
case(state)
IDLE:begin
cs <= 1'b1; //空闲状态,片选信号无效
sclk <= 1'b0;
bit_cnt <= 4'd0;
din <= 1'b0;
clk_div_cnt <= 2'b0;
control <= 4'b0000;
tran_done <= 1'b0;
if(en) begin
cs <= 1'b0;
//将数据放入移位寄存器,准备发送
shift_reg <= data;
state <= SEND;
end
end
SEND:begin
if(bit_cnt < 16)begin
if(clk_div_cnt < CLK_DIV)begin
clk_div_cnt <= clk_div_cnt + 1;
end
else begin
clk_div_cnt <= 0;
sclk_phase <= ~sclk_phase;
sclk <= sclk_phase;
if(sclk_phase)begin
//在高电平附近完成数据变换
din <= shift_reg[15 - bit_cnt];
bit_cnt <= bit_cnt + 1;
end
end
end
else
state <= DONE;
end
DONE:begin
cs <= 1'b1;
bit_cnt <= 0;
tran_done <= 1'b1;
sclk <= 1'b0;
state <= IDLE;
end
default:state <= IDLE;
endcase
end
end
endmodule
上述代码编译报错,报错内容为:

我检查之后,发现没有缺少分号,但是一直报错,不知道为什么,各位帮忙看一下