코드를 이렇게 짯는데 도무지 돌아가질 않네요..ㅠㅠㅠ
어디가 잘못되었는지 봐주실수있을까요??
module password (btn, sw, Led, seg, an);
input [0:3] btn;
input [0:1] sw;
output [6:0] Led;
output reg [3:0] an;
output [8:0] seg;
reg [0:3] num_cnt;
reg [0:3] save_password [0:3]; // 설정암호
reg [0:3] password_flag;
reg [0:3] setting_password [0:3]; // 사용자 입력 암호
reg [0:3] check_sum;
reg [0:7] temp_Led;
assign Led = temp_Led;
initial begin
an <= 4'b0000;
num_cnt <= 4'd000;
password_flag <= 1'b0;
check_sum <= 4'd0;
temp_Led <= 8'b0000_0000;
end
always@(posedge btn[1]) // 자리수 이동
begin
if( (sw[0] == 0) && (sw[1] == 0)) // 자리수 이동
begin
an[0] <= an[1]; an[1] <= an[2]; an[2] <= an[3]; an[3] <= an[0];
end
else if( (sw[0] == 0) && (sw[1] == 1)) // 숫자 count 및 저장
begin
num_cnt <= num_cnt + 4'b0001;
if(num_cnt == 4'b1111) num_cnt <= 4'd0000;
if(an == 4'b1110) save_password[0] <= num_cnt;
else if(an == 4'b1101) save_password[1] <= num_cnt;
else if(an == 4'b1011) save_password[2] <= num_cnt;
else if(an == 4'b0111) save_password[3] <= num_cnt;
else num_cnt <= 4'd0;
end
else if(sw[0] == 1) // 사용자가 비밀번호 입력
begin // 숫자 count 및 저장
password_flag <= 1;
num_cnt <= num_cnt + 4'd1;
if(num_cnt == 4'd9) num_cnt <=4'd0;
if(an == 4'b1110) setting_password[0] <= num_cnt;
else if(an == 4'b1101) setting_password[1] <= num_cnt;
else if(an == 4'b1011) setting_password[2] <= num_cnt;
else if(an == 4'b0111) setting_password[3] <= num_cnt;
else num_cnt <= 4'd0;
end
else
an<= 4'b1110;
end
always@(posedge btn[2]) // 설정된 암호와 사용자가 입력한 암호 일치 여부 판별
begin
if(sw[1] == 1)
begin
check_sum = (save_password[0] - setting_password[0]) + (save_password[1] - setting_password[1]) + (save_password[2] - setting_password[2]) + (save_password[3] - setting_password[3]);
if (check_sum == 0)
begin
temp_Led = 8'b1111_1111;
end
else temp_Led = 8'b0000_1111;
end
end
assign seg = ((an == 4'b1110) && (save_password[0] == 4'd0) ) ? 8'b1111_1100:
((an == 4'b1110) && (save_password[0] == 4'd1)) ? 8'b0110_0000:
((an == 4'b1110) && (save_password[0] == 4'd2)) ? 8'b1101_1010:
((an == 4'b1110) && (save_password[0] == 4'd3)) ? 8'b1111_0010:
((an == 4'b1110) && (save_password[0] == 4'd4)) ? 8'b0110_0110:
((an == 4'b1110) && (save_password[0] == 4'd5)) ? 8'b1011_0110:
((an == 4'b1110) && (save_password[0] == 4'd6)) ? 8'b1011_1110:
((an == 4'b1110) && (save_password[0] == 4'd7)) ? 8'b1110_0000:
((an == 4'b1110) && (save_password[0] == 4'd8)) ? 8'b1111_1110:
((an == 4'b1110) && (save_password[0] == 4'd9)) ? 8'b1111_0110:
((an == 4'b1101) && (save_password[1] == 4'd0)) ? 8'b1111_1100:
((an == 4'b1101) && (save_password[1] == 4'd1)) ? 8'b0110_0000:
((an == 4'b1101) && (save_password[1] == 4'd2)) ? 8'b1101_1010:
((an == 4'b1101) && (save_password[1] == 4'd3)) ? 8'b1111_0010:
((an == 4'b1101) && (save_password[1] == 4'd4)) ? 8'b0110_0110:
((an == 4'b1101) && (save_password[1] == 4'd5)) ? 8'b1011_0110:
((an == 4'b1101) && (save_password[1] == 4'd6)) ? 8'b1011_1110:
((an == 4'b1101) && (save_password[1] == 4'd8)) ? 8'b1110_0000:
((an == 4'b1101) && (save_password[1] == 4'd8)) ? 8'b1111_1110:
((an == 4'b1101) && (save_password[1] == 4'd9)) ? 8'b1111_0110:
((an == 4'b1011) && (save_password[2] == 4'd0)) ? 8'b1111_1100:
((an == 4'b1011) && (save_password[2] == 4'd1)) ? 8'b0110_0000:
((an == 4'b1011) && (save_password[2] == 4'd2)) ? 8'b1101_1010:
((an == 4'b1011) && (save_password[2] == 4'd3)) ? 8'b1111_0010:
((an == 4'b1011) && (save_password[2] == 4'd4)) ? 8'b0110_0110:
((an == 4'b1011) && (save_password[2] == 4'd5)) ? 8'b1011_0110:
((an == 4'b1011) && (save_password[2] == 4'd6)) ? 8'b1011_1110:
((an == 4'b1011) && (save_password[2] == 4'd8)) ? 8'b1110_0000:
((an == 4'b1011) && (save_password[2] == 4'd8)) ? 8'b1111_1110:
((an == 4'b1011) && (save_password[2] == 4'd9)) ? 8'b1111_0110:
((an == 4'b0111) && (save_password[3] == 4'd0)) ? 8'b1111_1100:
((an == 4'b0111) && (save_password[3] == 4'd1)) ? 8'b0110_0000:
((an == 4'b0111) && (save_password[3] == 4'd2)) ? 8'b1101_1010:
((an == 4'b0111) && (save_password[3] == 4'd3)) ? 8'b1111_0010:
((an == 4'b0111) && (save_password[3] == 4'd4)) ? 8'b0110_0110:
((an == 4'b0111) && (save_password[3] == 4'd5)) ? 8'b1011_0110:
((an == 4'b0111) && (save_password[3] == 4'd6)) ? 8'b1011_1110:
((an == 4'b0111) && (save_password[3] == 4'd8)) ? 8'b1110_0000:
((an == 4'b0111) && (save_password[3] == 4'd8)) ? 8'b1111_1110:
((an == 4'b0111) && (save_password[3] == 4'd9)) ? 8'b1111_0110:
8'b1111_1111;
endmodule
첫댓글
big-endian 입력 포트에 유의
always@(posedge btn[1] or posedge btn[0]) // 자리수 이동
begin
if(btn[0])
num_cnt<=0;
~~~~~~~~~~
else if((sw[0] == 1) && (sw[1] == 1)) // 사용자가 비밀번호 입력