Mojo Board FPGA EP.1 - การต่อ FSM

             การเขียนฮาร์ดแวร์แบบ FSM คือการเขียนโปรแกรมแบบ Finite-state machine  คือ วงจรเชิงลำดับ ซึ่งออกแบบเป็นสถานะการทำงาน (state) ของวงจรออกเป็นหลายๆ สถานะ แต่ละสถานะมีลอจิกการทำงานที่ต่างกัน เพื่อกำเนิดค่าเอาต์พุตและค่าสถานะถัดไป มีสัญญาณสถานะที่กำหนดว่าสถานะปัจจุบันเป็นสถานะไหน สัญญาณของสถานะจะถูกเก็บไว้ใน เรจิสเตอร์ ดังนั้นสถานะจะสามารถเปลี่ยนแปลงได้ที่ขอบขาของ clock เท่านั้น



ตัวอย่าง การเขียน 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;



       

























ความคิดเห็น

บทความที่ได้รับความนิยม