Posts Tagged with "FPGA"

既に発行済みのブログであっても適宜修正・追加することがあります。
We may make changes and additions to blogs already published.
posted by sakurai on September 9, 2022 #505

OneStageソース

前稿で述べたルールの前後にインタフェース、レジスタ宣言、メソッド宣言を加えてソースが完成しました。

interface Fifo_ifc;
(* prefix="" *)
   method Action if_write_enable((* port="wr_en" *)Bool wen);
(* prefix="rd" *)
   method Action if_read_enable0(Bool en0);
(* prefix="rd" *)
   method Action if_read_enable1(Bool en1);
(* prefix="rd" *)
   method Action if_read_enable2(Bool en2);
(* prefix="rd" *)
   method Action if_read_enable3(Bool en3);
(* result="empty" *)
   method Bool if_empty();
endinterface

(* synthesize, always_ready, always_enabled *)
module mkOneStage(Fifo_ifc);

   Reg#(Bool) in_wen <- mkReg(False);
   Reg#(Bool) in_ren0 <- mkReg(False);
   Reg#(Bool) in_ren1 <- mkReg(False);
   Reg#(Bool) in_ren2 <- mkReg(False);
   Reg#(Bool) in_ren3 <- mkReg(False);
   Reg#(Bool) in_empty <- mkReg(True);

   rule rule_write (in_wen && in_empty);
     in_empty <= False;
   endrule
   rule rule_read ((in_ren0 || in_ren1 || in_ren2 || in_ren3) && !in_empty);
     in_empty <= True;
   endrule

   method Action if_write_enable(Bool wen);
      in_wen <= wen;
   endmethod
   method Action if_read_enable0(Bool en0);
      in_ren0 <= en0;
   endmethod
   method Action if_read_enable1(Bool en1);
      in_ren1 <= en1;
   endmethod
   method Action if_read_enable2(Bool en2);
      in_ren2 <= en2;
   endmethod
   method Action if_read_enable3(Bool en3);
      in_ren3 <= en3;
   endmethod
   method Bool if_empty();
      return in_empty;
   endmethod

endmodule: mkOneStage

左矢前のブログ 次のブログ右矢


ページ: