题解 | #自动贩售机1#

自动贩售机1

http://www.nowcoder.com/practice/dcf59e6c51f6489093495acb1bc34dd8

不想那么麻烦,用个计数器即可


`timescale 1ns/1ns
module seller1(
	input wire clk  ,
	input wire rst  ,
	input wire d1 ,
	input wire d2 ,
	input wire d3 ,
	
	output reg out1,
	output reg [1:0]out2
);
//*************code***********//
reg [3:0] cnt;
    always@(posedge clk or negedge rst)begin
        if(!rst)begin
            cnt <= 0;
            out1 <= 0;
            out2 <= 0;
        end
        else begin
            if(d1) cnt <= cnt + 1;
            else if(d2) cnt <= cnt + 2;
            else if(d3) cnt <= cnt + 4;
            else if(cnt >= 3)begin
                out1 <= 1;
                out2 <= cnt - 3;
                cnt <= 0;
            end
            else begin
                out1 <= 0;
                out2 <= 0;
            end
        end
    end

//*************code***********//
endmodule

全部评论
感觉有点奇怪,if的条件居然可以在posegde clk时检测出来,里面的事件不都是基于上升的吗,d1,d2,d3都只有半个周期
8 回复 分享
发布于 2022-04-09 22:10
这个写法是有问题的,d1,d2,d3是需要用 negedge 下降沿去检测,直接上升沿可能亚稳态,或者出现无法探测的情况
3 回复 分享
发布于 2023-03-23 19:48 江苏
从modelsim仿真看,out应该用上升沿检测,cnt用下降沿检测
1 回复 分享
发布于 2022-08-03 10:27
实际会因保持时间不够,可能出现亚稳态,投币这三个根线是异步信号
1 回复 分享
发布于 2023-02-19 17:27 陕西
太强了
点赞 回复 分享
发布于 2022-06-01 11:16
这个代码只有时钟上升沿能检测到投币,不推荐使用。
点赞 回复 分享
发布于 2023-01-04 23:23 四川
说实话这种代码还有很大进步空间
点赞 回复 分享
发布于 2023-07-07 14:38 四川
这个代码太软件思维了,这是Verilog题
点赞 回复 分享
发布于 03-06 12:03 新加坡

相关推荐

不愿透露姓名的神秘牛友
09-30 19:49
起名星人:蛮离谱的,直接要求转投销售
投递汇川技术等公司10个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
42 2 评论
分享
牛客网
牛客企业服务