在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: vipjph

[活动] 每日一题0709

[复制链接]
发表于 2012-7-11 00:52:56 | 显示全部楼层
3楼的方法不错,已验证 QQ截图20120711003238.png
发表于 2012-7-11 01:18:53 | 显示全部楼层
VCO
压控振荡器
发表于 2012-7-11 06:49:50 | 显示全部楼层
回复 4# Timme


   一看你称用『FSM做是傻子』就知道你没做过ASIC。
发表于 2012-7-11 08:53:36 | 显示全部楼层
昨天忘记回答了。。。
发表于 2012-7-11 09:32:25 | 显示全部楼层
回复 13# fiysben


    为什么用状态机好,能解释一下不?
发表于 2012-7-11 10:01:08 | 显示全部楼层



因为这个序列较短。
移位寄存器==窗口检测器,你使用了5个寄存器,用到极致也要使用4个。
但是使用状态机的话,逻辑复杂点,可以只用到3个寄存器。
这时可以评估一下面积了。
发表于 2012-7-11 11:25:50 | 显示全部楼层
顶顶顶顶顶顶顶顶顶
发表于 2012-7-11 11:28:19 | 显示全部楼层
[quote]因为这个序列较短。
移位寄存器==窗口检测器,你使用了5个寄存器,用到极致也要使用4个。
但是使用状 ...
newliujian 发表于 2012-7-11 10:01 [url=

你这话放在15年前才有意义。现在除了IP供应商没人会去抠面积,因为往往裸DIE成本还没有封装贵。现在的芯片研发成本才是大头,节省设计时间和验证时间比什么都重要。第三题这个问题用移位寄存器来做,寥寥三行代码30秒内就能完美解决;用状态机的话得为循环判断问题绞尽脑汁,花数十倍的时间才能做完还保不准没BUG。孰优孰劣一目了然。
发表于 2012-7-13 09:29:05 | 显示全部楼层
对于第三题,画出可以检测10010串的状态图,并用verilog实现。
我觉得这个是为了考察大家对状态机的了解程度,要不也就不用画状态图了,以下是我自己写的一段代码,应该没什么问题,如有问题,欢迎大家提出。

module j(clk , rst_b , i , o);
input         clk;
input         rst_b;
input         i;
output         o;

parameter         C1 = 0,
                        C2 = 1,
                        C3 = 2,
                        C4 = 3,
                        C5 = 4,
                        C6 = 5;

reg         [2:0]         CS , NS;

always @(posedge clk or negedge rst_b) begin
        if (!rst_b) begin
                CS         <=        C1;
        end
        else begin
                CS         <=        NS;
        end
end

reg        reg_o;

always @(i or CS) begin
        case (CS)
                C1:        begin
                        if (i) begin
                                NS = C2;
                        end
                        else begin
                                NS = CS;
                        end
                        reg_o = 0;
                end
               
                C2:        begin
                        if (~i) begin
                                NS = C3;
                        end
                        else begin
                                NS = C2;
                        end
                        reg_o = 0;
                end
               
                C3:        begin
                        if (~i) begin
                                NS = C4;
                        end
                        else begin
                                NS = C2;
                        end
                        reg_o = 0;
                end
               
                C4:        begin
                        if (i) begin
                                NS = C5;
                        end
                        else begin
                                NS = C1;
                        end
                        reg_o = 0;
                end
               
                C5:        begin
                        if (~i) begin
                                NS = C6;
                        end
                        else begin
                                NS = C2;
                        end
                        reg_o = 0;
                end
               
                C6:        begin
                        if (i) begin
                                NS = C2;
                        end
                        else begin
                                NS = C4;
                        end
                        reg_o = 1;
                end
               
                default: begin
                                NS = C1;
                                reg_o = 0;
                end
        endcase       
end

assign o=reg_o;

endmodule
发表于 2012-7-13 09:37:22 | 显示全部楼层
回复 1# vipjph


    建议楼主把第三个问题答案修改,上面是我写的代码,您可以验证以下。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 04:20 , Processed in 0.037160 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表