フラット表示 | 前のトピック | 次のトピック |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2008-9-18 22:49 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3088 |
RTL: FREQUENCY COUNTER いよいよ各ブロック内部のRTL設計を行う。
FIN入力は1/8プリスケーラーを経て5桁分の同期BCDカウンタのクロックとして供給される。 1/8プリスケーラーはCEがアサートされている場合のみ動作する。 同期BCDカウンタのキャリー出力はそれぞれ一つ上の桁の同期BCDカウンタのイネーブルに入力されキャリーが伝搬される。 RESETがアサートされると1/8プリスケーラーとその出力はリセットされる。 PRESETがアサートされると5桁の同期BCDカウンタに対する非同期データセットが行われる。設定されるデータはBCDで455の二の補数表現である。 LOADの立ち上がりエッジで現在の同期BCDカウンタ出力値で出力レジスタ値を更新する。 同期BCDアップカウンターをサブモジュールとして新たに作成しfcモジュールでインスタンス化して使用するようにした。 sbuc.v: 同期BCDアップカウンターモジュール module sbuc ( input clk, ci, preset, input [WIDTH-1:0] data, output reg [WIDTH-1:0] count, output reg co ); parameter WIDTH=4, LIMIT=4'h9; always @ (posedge clk or posedge preset) begin if (preset) count <= data; else if (ci) begin if(count == LIMIT) count <= {WIDTH{1'b0}}; else count <= count + 1'b1; end end always @ (count or ci) begin if(count == LIMIT && ci) co <= 1'b1; else co <= 1'b0; end endmodule fc.v: FREQUENCY COUNTERモジュールRTLインプリメンテーション module fc(ac, fin, ce, reset, preset, load, fcounter); // Input Port(s) input ac, fin, ce, reset, preset, load; // Output Port(s) output reg [19:0] fcounter; // Inout Port(s) // Parameter Declaration(s) parameter [19:0] iv=(~20'h455)+1'b1; // Additional Module Item(s) reg [4:0] ps_cnt; wire [3:0] c1, c10, c100, c1000, c10000; wire co1,co10,co100,co1000,co10000; // Basic module instantiation sbuc fc1(ps_cnt[4], 1'b1, preset, iv[3:0], c1, co1); sbuc fc10(ps_cnt[4], co1, preset, iv[7:4], c10, co10); sbuc fc100(ps_cnt[4], co10, preset, iv[11:8], c100, co100); sbuc fc1000(ps_cnt[4], co100, preset, iv[15:12], c1000, co1000); sbuc fc10000(ps_cnt[4], co1000, preset, iv[19:16], c10000, co10000); always@(posedge fin or posedge reset or negedge ac) begin if(!ac || reset) ps_cnt <= 0; else if(fin && ce) ps_cnt <= ps_cnt + 1'b1; end always@(posedge load or negedge ac) begin if(!ac) fcounter <= 0; else if(load) fcounter <= {c10000, c1000, c100, c10, c1}; end endmodule これをコンパイルしてRTL Viewerで見るとだいたい期待していた通りのロジックが出来上がっている。 |
フラット表示 | 前のトピック | 次のトピック |
投稿するにはまず登録を | |