新浪博客

verilog语法技巧之caseifelse

2020-03-10 17:41阅读:
1.在verilog当中 case ...... endcaes 通常使用在状态机当中 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)
begin
i <= 0;
casedata <= 0 ;
end
else
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
end
always@(posedge clk or negedge rst_n) //ifdata
begin
if(!rst_n)
begin
j <= 0;
ifdata <= 0 ;
end
else
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
end


always@(posedge clk or negedge rst_n) //ifdata
begin
if(!rst_n)
begin
sameflag <= 0 ;
end
else
begin
if(casedata == ifdata)
sameflag <= 1;
else
sameflag <= 0;
end
end

endmodule
仿真截图如下:
verilog语法技巧之caseifelse

我的更多文章

下载客户端阅读体验更佳

APP专享