Mojo Board FPGA EP.1 - การต่อ FSM
การเขียนฮาร์ดแวร์แบบ FSM คือการเขียนโปรแกรมแบบ Finite-state machine คือ วงจรเชิงลำดับ ซึ่งออกแบบเป็นสถานะการทำงาน (state) ของวงจรออกเป็นหลายๆ สถานะ แต่ละสถานะมีลอจิกการทำงานที่ต่างกัน เพื่อกำเนิดค่าเอาต์พุตและค่าสถานะถัดไป มีสัญญาณสถานะที่กำหนดว่าสถานะปัจจุบันเป็นสถานะไหน สัญญาณของสถานะจะถูกเก็บไว้ใน เรจิสเตอร์ ดังนั้นสถานะจะสามารถเปลี่ยนแปลงได้ที่ขอบขาของ clock เท่านั้น
ตัวอย่าง การเขียน Schematic
ต่อไปคือวงจร fsm
module fsm (Clk, Reset, Input_X, Output_HK);
NET "xReset" LOC = P51 | IOSTANDARD = LVTTL;
ตัวอย่าง การเขียน Schematic
ต่อไปคือวงจร Clk_1Hz
module Clk_1Hz( input Clk_In, output Clk_Out );
reg rClk_Out = 1'b0;
reg [27:0] Counter;
always@(posedge Clk_In) begin
Counter <= Counter + 1'b1;
if ( Counter == 25_000_000) begin
Counter <= 0;
rClk_Out <= ~rClk_Out;
end
end
assign Clk_Out = rClk_Out;
endmodule
ต่อไปคือวงจร fsm
module fsm (Clk, Reset, Input_X, Output_HK);
input Clk, Reset, Input_X;
output [1:0] Output_HK;
reg [1:0] Output_HK;
reg [1:0] state;
parameter s1 = 2'b00; parameter s2 = 2'b10;
parameter s3 = 2'b01; parameter s4 = 2'b11;
always@(posedge Clk or posedge Reset)
begin
if (Reset)
begin
state = s1; Output_HK = 2'b00;
end
else
begin
case (state)
s1: begin
if (Input_X==1'b1) state = s2;
else state = s3;
Output_HK = 2'b00;
end
s2: begin
state = s4; Output_HK = 2'b10;
end
s3: begin
state = s4; Output_HK = 2'b01;
end
s4: begin
state = s1; Output_HK = 2'b11;
end
endcase
end
end
endmodule
ต่อไปคือ UCF file ของบอร์ด โมโจ
NET "xReset" LOC = P51 | IOSTANDARD = LVTTL;
NET "Input_SWx" LOC = P38 | IOSTANDARD = LVTTL;
NET "Clk_50MHz" LOC = P56 | IOSTANDARD = LVTTL;
NET "Output_LED<0>" LOC = P134 | IOSTANDARD = LVTTL;
NET "Output_LED<1>" LOC = P133 | IOSTANDARD = LVTTL;
NET "Monitor_LED" LOC = P131 | IOSTANDARD = LVTTL;
ความคิดเห็น
แสดงความคิดเห็น