搜索
bottom↓
回复: 7

关于一段式状态机的比较,欢迎各位讨论各自代码风格。

[复制链接]

出0入0汤圆

发表于 2013-9-26 10:45:40 | 显示全部楼层 |阅读模式
最近在学习状态机,从我入门的特权同学和黑金开发板入手,对比了一下两种代码风格。。。。
特权同学的一段式状态机:
module state_machine(
                clk,
                rst_n,
                cmd,
                wr_req,
                rd_req
                );

input clk;
input rst_n;
output [3:0] cmd;
input rd_req;
input wr_req;

reg [3:0] cmd;
reg [3:0] cstate;
parameter IDLE = 0,
                         WR_S1 = 1,
                         WR_S2 = 2,
                         RD_S1 = 3,
                         RD_S2 = 4;
always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
                cstate <= IDLE;
                cmd <= 3'b111;
                end
        else
                case(cstate)
                        IDLE:
                        if(wr_req) begin
                                cstate <= WR_S1;
                                cmd <= 3'b011;
                                end
                        else if(rd_req)begin
                                cstate <= RD_S1;
                                cmd <= 3'b011;
                                end
                        else begin
                                cstate <= IDLE;
                                cmd <= 3'b111;
                                end
                        WR_S1:begin
                                cstate <= WR_S2;
                                cmd <= 3'b101;
                                end
                        WR_S2:begin
                                cstate <= IDLE;
                                cmd <= 3'b111;
                                end
                        RD_S1:
                        if(wr_req) begin
                                cstate <= WR_S2;
                                cmd <= 3'b101;
                                end
                        else begin
                                cstate <= RD_S2;
                                cmd <= 3'b110;
                                end
                        RD_S2:
                        if(wr_req) begin
                                cstate <= WR_S1;
                                cmd <= 3'b011;
                        end
                        else begin
                                cstate <= IDLE;
                                cmd <= 3'b111;
                                end
                        default: cstate <= IDLE;
                        endcase
                        end                       
endmodule
                       
下面是黑金开发板提供的类状态机写法:                               
module state_machine(
                clk,
                rst_n,
                cmd,
                wr_req,
                rd_req
                );

input clk;
input rst_n;
output [3:0] cmd;
input rd_req;
input wr_req;

reg [3:0] cmd;
reg [3:0] i;
always@(posedge clk or negedge rst_n) begin
        if(!rst_n) begin
                i <= 4'd0;
                cmd <= 3'b111;
                end
        else
                case(i)
                        4'd0:
                        if(wr_req) begin
                                i <= i + 1'd1;
                                cmd <= 3'b011;
                                end
                        else if(rd_req)begin
                                i <= 4'd3;
                                cmd <= 3'b011;
                                end
                        else begin
                                i <= 4'd0;
                                cmd <= 3'b111;
                                end
                        4'd1:begin
                                i <= i + 1'd1;
                                cmd <= 3'b101;
                                end
                        4'd2:begin
                                i <= 4'd0;
                                cmd <= 3'b111;
                                end
                        4'd3:
                        if(wr_req) begin
                                i <= 4'd1;
                                cmd <= 3'b101;
                                end
                        else begin
                                i <= i +1'd1;
                                cmd <= 3'b110;
                                end
                        4'd4:
                        if(wr_req) begin
                                i <= 4'd1;
                                cmd <= 3'b011;
                        end
                        else begin
                                i <= 4'd0;
                                cmd <= 3'b111;
                                end
                        default: i <= 4'd0;
                        endcase
                        end                       
endmodule

下面是占用的资源对比:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-9-26 14:43:07 | 显示全部楼层
这两段代码的差异无非就是一个状态机的参数使用parameter,另一个直接用数值

猜测的结果可能是使用parameter时,综合的时候可能parameter指定的值有综合器重新优化指定(完全是猜想)

另外,黑金的代码风格简直就是一坨屎

出0入0汤圆

 楼主| 发表于 2013-9-26 23:13:29 | 显示全部楼层
wangjun403 发表于 2013-9-26 14:43
这两段代码的差异无非就是一个状态机的参数使用parameter,另一个直接用数值

猜测的结果可能是使用paramet ...

我前期收黑金的影响甚大,现在正在一点点修正。。。。。。。。

出0入0汤圆

发表于 2013-9-27 08:54:35 | 显示全部楼层
深海烟花 发表于 2013-9-26 23:13
我前期收黑金的影响甚大,现在正在一点点修正。。。。。。。。

我现在也在通过黑金学习FPGA的一些基础代码,请问关于这个“影响”到底是好是坏? 前期的代码风格对后来的项目研发应该会影响很大,请指点一二应该通过哪些教程去入门FPGA的学习?

出0入0汤圆

发表于 2013-9-27 09:22:24 | 显示全部楼层
代码风格要有自己的特色  一看就是你写的  同时也能吸收别人的长处  让别人看你的代码也能看到别人的影子
我会告诉你我是来秀头像的吗?

出0入0汤圆

 楼主| 发表于 2013-9-28 13:03:11 | 显示全部楼层
ALTERA_WLB 发表于 2013-9-27 08:54
我现在也在通过黑金学习FPGA的一些基础代码,请问关于这个“影响”到底是好是坏? 前期的代码风格对后来 ...

我前段时间接触了官网的一些示例代码,非常工整。。。。。

出0入0汤圆

发表于 2013-9-28 13:24:10 | 显示全部楼层
开发板的代码能写的很好,还真没见过,大部分就是应付。

要想写的好,就得多学习了。

出0入0汤圆

发表于 2013-9-29 20:19:38 | 显示全部楼层
这两段代码都不怎样
没见过黑金的代码不好评论
建议用二段式状态机,逻辑与时序分开
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表