저는 5,10,25 센트를 입력으로 받아서 소다 또는 다이어트를 출력하고 적절한 변경 사항을 출력하는 자동 판매기의 경우 Verilog로 유한 상태 시스템을 구축하려고합니다.). 현재 오류 : HDLCompiler : 806 - "D :/Xilinx Stuff/FSM/FSM.v"오류 메시지가 나타납니다. 줄 128 : "endmodule"근처에 구문 오류가 있습니다. 저는 Verilog에 상당히 익숙하며 세미콜론이나 무언가를 잊어 버리는 것과 같은 어리석은 오류 일뿐입니다. 나는 그것을 발견 할 수 없습니다. 내 코드는 다음과 같습니다 :Verilog 자동 판매기 FSM
always @(current_state or quarter or nickel or dime)
을의 Verilog 2001 또는 시스템으로 :
always @(current_state | ((quarter^nickel)^dime))
표준 코딩 스타일을 사용하는 것입니다 :
module FSM(quarter, nickel, dime, soda, diet,clk, reset, change_count, give_soda,give_diet);
input quarter, nickel, dime, soda, diet,clk, reset,give_soda,give_diet;
output change_count;
reg[3:0] current_state, next_state;
parameter cent0 = 0, cent5= 1, cent10 = 2, cent15=3, cent20 =4, cent25 =5, cent30=6,cent35=7,cent40=8;
always @(posedge clock or posedge reset)
begin
if(reset)
begin
current_state = cent0;
end
else
current_state = next_state;
end
always @(current_state | ((quarter^nickel)^dime))
begin
case(current_state)
cent0: begin
if(nickel)
next_state = cent5;
else if(dime)
next_state = cent10;
else if(quarter)
next_state = cent25;
end
cent5: begin
if(nickel)
next_state = cent10;
else if(dime)
next_state = cent15;
else if(quarter)
next_state = cent30;
end
cent10: begin
if(nickel)
next_state = cent15;
else if(dime)
next_state = cent20;
else if(quarter)
next_state = cent35;
end
cent15: begin
if(nickel)
next_state = cent20;
else if(dime)
next_state = cent25;
else if(quarter)
next_state = cent40;
end
cent20: begin
if(nickel)
next_state = cent25;
else if(dime)
next_state = cent30;
else if(quarter)
next_state = cent0;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
end
cent25: begin
if(nickel)
next_state = cent30;
else if(dime)
next_state = cent35;
else if(quarter)
next_state = cent0;
change_count = 1;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
end
cent30: begin
if(nickel)
next_state = cent35;
else if(dime)
next_state = cent40;
else if(quarter)
next_state = cent0;
change_count = 2;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
end
cent35: begin
if(nickel)
next_state = cent40;
else if(dime)
next_state = cent40;
else if(quarter)
next_state = cent0;
change_count = 2;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
end
cent40: begin
if(nickel)
next_state = cent0;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
else if(dime)
next_state = cent0;
change_count = 1;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
else if(quarter)
next_state = cent0;
change_count = 4;
if(soda)
give_soda = 1;
else if(diet)
give_diet = 1;
end
default: next_state = current_state;
endcase
endmodule
그것의'begin'에 대한 일치하는'end'이없는 항상 두 번째 것 같습니다. – BlamKiwi
감사합니다. 문제가 해결되었습니다. – Antoninus
다른 조언은 출력 논리와 다음 상태 논리를 분리해야한다는 것입니다. Xilinix (일부 HDL 컴파일러는주의를 기울임)가 도움이되지는 않지만 읽기 쉽도록 톤을 돕습니다. – BlamKiwi