四位密码锁设计的有问题,编译没错,但是时序仿真以及...
本帖最后由 愁苦忍着 于 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
你的结果肯定是如果输错一次就输出3次以上的错误;
状态机的转移是clk来转移的,应该使用每次的输入,输入一次转移一次;
现在是clk,那么只要是错误的,马上就到3次以上了; jm2011 发表于 2016-10-23 21:11
你的结果肯定是如果输错一次就输出3次以上的错误;
状态机的转移是clk来转移的,应该使用每次的输入,输入 ...
也就是说我用confirm来做触发了? 这个是时序电路,肯定需要使用时钟来触发,但是在里面用条件语句;
你再好好想想,现在的写法肯定不对; jm2011 发表于 2016-10-24 22:28
这个是时序电路,肯定需要使用时钟来触发,但是在里面用条件语句;
你再好好想想,现在的写法肯定不对; ...
好吧,我再看看 建议先用TTL门电路画好,然后,把这些门电路翻译成HDL语言
心中无电路,就别用描述语言,描述的是什么都没人知道 1ongquan 发表于 2016-10-25 16:07
建议先用TTL门电路画好,然后,把这些门电路翻译成HDL语言
心中无电路,就别用描述语言,描述的是什么都 ...
好吧,这方面确实是薄弱,我们学院主要搞材料,虽然学的是微电子,但是电路方面掌握的真的很不好,所以不是很有思路如何设计,学院只教了verilog,惦记着用状态机但是无奈时间不是很充分,头一次弄这个东西,有点不知道该怎么办。 也可以用状态机来做,关键是要把状态转移图画好,然后才是程序的正确实现问题。 愁苦忍着 发表于 2016-10-25 23:29
好吧,这方面确实是薄弱,我们学院主要搞材料,虽然学的是微电子,但是电路方面掌握的真的很不好,所以不 ...
和学院没关系!!
课程都一样,几乎很多学校老师基本都是照书念。
可以结贴了,特上传此PDF,可以用于参考,感谢各位解答
页:
[1]