20 |
色変換回路 (4) |
試行錯誤した結果、always_readyは解決しました。WireでなくDWireを用いるとうまく消えることがわかりました。ソースにおいて修正点のみを示すと、
(* synthesize, always_enabled = "setInputs", always_ready = "getRO, getGO, getBO" *)
及び
Wire#(Bit#(1)) r_reg <- mkDWire(?); Wire#(Bit#(1)) g_reg <- mkDWire(?); Wire#(Bit#(1)) b_reg <- mkDWire(?);
の2か所を修正するだけです。生成されたverilogはかなりスッキリしてきており、後は未使用のCLK及びRST_Nを削除する方法だけですが、(* no_default_clock, no_default_reset *) とすれば良いようです。
module mkColorConverter(CLK, RST_N, RI, GI, BI, RO, GO, BO); input CLK; input RST_N; // action method setInputs input RI; input GI; input BI; // value method getRO output [3 : 0] RO; // value method getGO output [3 : 0] GO; // value method getBO output [3 : 0] BO; // signals for module outputs reg [3 : 0] BO, GO, RO; // remaining internal signals wire [2 : 0] x__h322; // value method getRO always@(x__h322) begin case (x__h322) 3'b0: RO = 4'h9; 3'b001: RO = 4'hD; 3'b010: RO = 4'h5; default: RO = 4'hC; endcase end // value method getGO always@(x__h322) begin case (x__h322) 3'b0: GO = 4'h4; 3'b001: GO = 4'h8; 3'b010: GO = 4'hB; default: GO = 4'hC; endcase end // value method getBO always@(x__h322) begin case (x__h322) 3'b0: BO = 4'h1; 3'b001: BO = 4'h4; 3'b010: BO = 4'h5; default: BO = 4'hC; endcase end // remaining internal signals assign x__h322 = { RI, GI, BI } ; endmodule // mkColorConverter