トップ 一覧 Farm 検索 ヘルプ RSS ログイン

Diary/2010-8-1の変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!気づいたら
8月...

!Bluespec
Bluespecのラインセンスをもらった(?)のでライセンス設定の確認がてら遊んでみた.
Bluepsecデザインコンテストのときは,
シミュレーションばっかりでFPGA上での動作を確認しなかったので,
まずはカウンタを作ってFPGA上で動作させてみるところから.
Bluespec的には次のようなソースを書く.
 interface Test_ifc;
    method Bit#(26) result();
 endinterface
 
 module mkTest(Test_ifc);
    Reg#(Bit#(26)) counter <- mkReg(0);
 
    rule r0;
       counter <= counter + 1;
    endrule
 
    method Bit#(26) result();
       return readReg(counter);
    endmethod
 
 endmodule
で,
 bsc -verilog -g mkTest test.bsv
としてVerilogコードを生成すると,
 module mkTest(CLK,
               RST_N,
 
               result,
               RDY_result);
   input  CLK;
   input  RST_N;
 
   // value method result
   output [25 : 0] result;
   output RDY_result;
 /* snip */
   always@(posedge CLK)
   begin
     if (!RST_N)
       begin
         counter <= `BSV_ASSIGNMENT_DELAY 26'd0;
       end
     else
       begin
         if (counter$EN) counter <= `BSV_ASSIGNMENT_DELAY counter$D_IN;
       end
   end
 /* snip */
 endmodule  // mkTest
という何とも素直なコードが.
手書きのコードと最終的な回路規模を比較するまでもありません.
トップモジュールを,
 `default_nettype none
 module top(USER_CLOCK, CPU_RESET, GPIO_LED);
     input  wire USER_CLOCK;
     input  wire CPU_RESET;
     output wire [7 : 0] GPIO_LED;
 
     wire rst_x;
     wire [25:0] result;
 
     assign rst_x = ~CPU_RESET;
     assign GPIO_LED = result[25:18];
 
     mkTest U0(.CLK(USER_CLOCK), .RST_N(rst_x), .result(result), .RDY_result());
 
 endmodule
と書いて合成,配置配線でbitファイルができるので書き込めばよい.