题解 | #自动贩售机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 新加坡

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
42 2 评论
分享
牛客网
牛客企业服务