愁苦忍着 发表于 2016-10-23 20:41:22

四位密码锁设计的有问题,编译没错,但是时序仿真以及...

本帖最后由 愁苦忍着 于 2016-10-23 21:27 编辑

其实是一个课程设计的内容
简单数字密码锁
设计一个数字密码锁,假设预设密码为4位数:0000,当输入正确时输出为1,输入错误时输出为0。当输入值发生3次以上输入错误时,输出一个告警信号,即使第四、五次输入正确也输出告警信号。
自己是个新手。。。是在是找不出问题在哪,求大神花一点时间帮忙解决一下,非常感谢
module password(in,out,confirm,beep,rst,clk);
input in;                                 // 四位密码输入
input confirm;                                  //密码确认
input rst,clk;                                  //时钟,复位
output out;                                     //输出
output beep;                                    //警告输出
reg beep=1;
reg out=0;                                        //输出临时变量
reg errortime=4'b0000;                                    //判断错误
reg select;
parameter key   =4'b0000;
parameter Idle=3'b000;
parameter start =3'b001;
parameter stt   =3'b010;
always@(posedge clk)
if (!rst)
begin
   select    <=Idle;
          out      <=0;
          beep   <=1;
          errortime<=4'b0000;
        end
        else
           if(!confirm)
                begin
                case(select)
                Idle :begin
                      if(in==key)
                      begin
                           select<=start;
                           out   <=1;
                           beep<=1;
                           end
                           else
                           begin
                           select<=stt;
                           out   <=0;
                           beep<=1;
                           end
                                end
                start:begin
                      if(errortime>=4'b0011)
                                begin
                                select<=Idle;
                                beep<=0;
                                end
                                else
                                begin
                                select<=Idle;
                                beep<=1;
                                end
                                end
                stt:begin
                      if(errortime>=4'b0011)
                                begin
                                select<=Idle;
                                beep<=0;
                                end
                                else
                                begin
                                select<=Idle;
                                errortime<=errortime+4'b0001;
                                beep<=1;
                                end
                                end
                default:select<=3'bx;
                endcase
                end
endmodule

jm2011 发表于 2016-10-23 21:11:48

你的结果肯定是如果输错一次就输出3次以上的错误;

状态机的转移是clk来转移的,应该使用每次的输入,输入一次转移一次;
现在是clk,那么只要是错误的,马上就到3次以上了;

愁苦忍着 发表于 2016-10-23 21:27:54

jm2011 发表于 2016-10-23 21:11
你的结果肯定是如果输错一次就输出3次以上的错误;

状态机的转移是clk来转移的,应该使用每次的输入,输入 ...

也就是说我用confirm来做触发了?

jm2011 发表于 2016-10-24 22:28:08

这个是时序电路,肯定需要使用时钟来触发,但是在里面用条件语句;

你再好好想想,现在的写法肯定不对;

愁苦忍着 发表于 2016-10-25 16:00:49

jm2011 发表于 2016-10-24 22:28
这个是时序电路,肯定需要使用时钟来触发,但是在里面用条件语句;

你再好好想想,现在的写法肯定不对; ...

好吧,我再看看

1ongquan 发表于 2016-10-25 16:07:14

建议先用TTL门电路画好,然后,把这些门电路翻译成HDL语言

心中无电路,就别用描述语言,描述的是什么都没人知道

愁苦忍着 发表于 2016-10-25 23:29:16

1ongquan 发表于 2016-10-25 16:07
建议先用TTL门电路画好,然后,把这些门电路翻译成HDL语言

心中无电路,就别用描述语言,描述的是什么都 ...

好吧,这方面确实是薄弱,我们学院主要搞材料,虽然学的是微电子,但是电路方面掌握的真的很不好,所以不是很有思路如何设计,学院只教了verilog,惦记着用状态机但是无奈时间不是很充分,头一次弄这个东西,有点不知道该怎么办。

wiser803 发表于 2016-10-26 08:54:57

也可以用状态机来做,关键是要把状态转移图画好,然后才是程序的正确实现问题。

AlertTao 发表于 2016-10-26 08:58:07

愁苦忍着 发表于 2016-10-25 23:29
好吧,这方面确实是薄弱,我们学院主要搞材料,虽然学的是微电子,但是电路方面掌握的真的很不好,所以不 ...

和学院没关系!!
课程都一样,几乎很多学校老师基本都是照书念。

愁苦忍着 发表于 2016-10-28 09:18:29

可以结贴了,特上传此PDF,可以用于参考,感谢各位解答
页: [1]
查看完整版本: 四位密码锁设计的有问题,编译没错,但是时序仿真以及...