verilog语法技巧之caseifelse

标签:
verilog |
分类: FPGA |
1.在verilog当中 case ...... endcaes 通常使用在状态机当中
begin
i <= 0;
casedata <= 0 ;
end
begin
case(i)
8'd0:
begin
i <= 8'd1;
casedata <= casedata +
1;
end
8'd1:
begin
i <= 8'd2;
casedata <= casedata +
2;
end
8'd2:
begin
i <= 8'd3;
casedata <= casedata +
100;
end
8'd3:
begin
i <= 8'd0;
end
endcase
end
begin
j <= 0;
ifdata <= 0 ;
end
begin
if(j == 0)
begin
ifdata <= ifdata +1;
j <= 1;
end
else if(j == 1)
begin
ifdata <= ifdata +2;
j <= 2;
end
else if(j == 2)
begin
ifdata <= ifdata
+100;
j <= 3;
end
else if(j == 3)
begin
j <= 0;
end
end
begin
sameflag <= 0 ;
end
begin
if(casedata == ifdata)
sameflag
<= 1;
else
sameflag
<= 0;
end
2.现在使用if .. else if ... else 语句来实现状态机
3.在状态机中:
状态1 :让data数据加1
状态2:让data数据加2
状态3:让data数据加100
在case 语法中是reg casedata这个变量
在if语句中是 reg ifdata这个变量
利用一个sameflag来指示,两个语法语句实现同一功能的结果,如果sameflag==1表示每时每刻都有casedata==ifdata
verilog .v如下:
module case_if(clk,rst_n,casedata,ifdata,sameflag);
//the case and the if works the same code
input clk;
input rst_n;
output reg [31:0] casedata;
output reg [31:0] ifdata;
output reg sameflag;
reg [7:0] i;
reg [7:0] j;
always@(posedge clk or negedge rst_n)
//casedata
begin
if(!rst_n)
else
end
always@(posedge clk or negedge rst_n)
//ifdata
begin
if(!rst_n)
else
end
always@(posedge clk or negedge rst_n)
//ifdata
begin
if(!rst_n)
else
end
endmodule
仿真截图如下:
前一篇:UDP的最大传输长度