加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

verilog语法技巧之caseifelse

(2020-03-10 17:41:43)
标签:

verilog

分类: FPGA
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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有