(タイトル)
概要
(詳細記述予定)
動作確認
ツール |
バージョン |
結果 |
NC-Verilog |
|
未確認 |
VCS-MX |
|
未確認 |
ModelSim |
|
未確認 |
Cver |
|
未確認 |
テストコード
(概要を記述予定)
(実行方法を記述予定)
カウンタの使われ方によってはカウンタをM系列の周期性を利用する回路にしちゃうと
か。
条件がさっぱり意味不明になってコードの読みやすさは最悪かもしれないけど、軽いか
も。
【エッジ検出】
下段の立ち下がりエッジ検出で反転、それ以外でホールド。
でもこれだとクリティカルパスが改善されてない気がするので、だめか?
ALL1からALL0にいく瞬間がクリティカルパスな筈
always@(posedge CLK or negedge RST)begin
if(!RST)begin
r_cnt <= 0;
end else begin
if(w_cnt_clr)begin
r_cnt <= 0;
end else begin
r_cnt <= w_cnt;
end
end
end
assign w_cnt[0] =~r_cnt[0];
assign w_cnt[1] = r_cnt[0] & ~w_cnt[0] ? ~r_cnt[1] : r_cnt[1];
assign w_cnt[2] = r_cnt[1] & ~w_cnt[1] ? ~r_cnt[2] : r_cnt[2];
assign w_cnt[3] = r_cnt[2] & ~w_cnt[2] ? ~r_cnt[3] : r_cnt[3];
assign w_cnt[4] = r_cnt[3] & ~w_cnt[3] ? ~r_cnt[4] : r_cnt[4];
assign w_cnt[5] = r_cnt[4] & ~w_cnt[4] ? ~r_cnt[5] : r_cnt[5];
assign w_cnt[6] = r_cnt[5] & ~w_cnt[5] ? ~r_cnt[6] : r_cnt[6];
assign w_cnt[7] = r_cnt[6] & ~w_cnt[6] ? ~r_cnt[7] : r_cnt[7];
【NAND+NOT】
ifのところにn入力NANDを期待。
NAND,NORはTr.数が少ない→高速 、てことで。
always@(posedge CLK or negedge RST)begin
if(!RST)begin
r_cnt <= 0;
end else begin
if(w_cnt_clr)begin
r_cnt <= 0;
end else begin
r_cnt[0] <= w_cnt[0];
if(!w_cnt[ 0]) r_cnt[1] <= w_cnt[1];
if(!w_cnt[1:0]) r_cnt[2] <= w_cnt[2];
if(!w_cnt[2:0]) r_cnt[3] <= w_cnt[3];
if(!w_cnt[3:0]) r_cnt[4] <= w_cnt[4];
if(!w_cnt[4:0]) r_cnt[5] <= w_cnt[5];
if(!w_cnt[5:0]) r_cnt[6] <= w_cnt[6];
if(!w_cnt[6:0]) r_cnt[7] <= w_cnt[7];
end
end
end
assign w_cnt = ~r_cnt;
【最強最速カウンタ】
- 組み合わせ回路なし!よってプロセスでの最高性能をお約束。
ただしFPGAはLUTなので恩恵は薄いかも。
always@(posedge CLK or negedge RESETN)begin
if(RESETN==1'b1)begin
r_cnt0[ 1:0] <= #P_DELAY {{ 1{1'b1}},{ 1{1'b0}}};
r_cnt1[ 3:0] <= #P_DELAY {{ 2{1'b1}},{ 2{1'b0}}};
r_cnt2[ 7:0] <= #P_DELAY {{ 4{1'b1}},{ 4{1'b0}}};
r_cnt3[ 15:0] <= #P_DELAY {{ 8{1'b1}},{ 8{1'b0}}};
r_cnt4[ 31:0] <= #P_DELAY {{ 16{1'b1}},{ 16{1'b0}}};
r_cnt5[ 63:0] <= #P_DELAY {{ 32{1'b1}},{ 32{1'b0}}};
r_cnt6[127:0] <= #P_DELAY {{ 64{1'b1}},{ 64{1'b0}}};
r_cnt7[255:0] <= #P_DELAY {{128{1'b1}},{128{1'b0}}};
end
else begin
if(w_cnt_clr == 1'b1)begin
r_cnt0[ 1:0] <= #P_DELAY {{ 1{1'b1}},{ 1{1'b0}}};
r_cnt1[ 3:0] <= #P_DELAY {{ 2{1'b1}},{ 2{1'b0}}};
r_cnt2[ 7:0] <= #P_DELAY {{ 4{1'b1}},{ 4{1'b0}}};
r_cnt3[ 15:0] <= #P_DELAY {{ 8{1'b1}},{ 8{1'b0}}};
r_cnt4[ 31:0] <= #P_DELAY {{ 16{1'b1}},{ 16{1'b0}}};
r_cnt5[ 63:0] <= #P_DELAY {{ 32{1'b1}},{ 32{1'b0}}};
r_cnt6[127:0] <= #P_DELAY {{ 64{1'b1}},{ 64{1'b0}}};
r_cnt7[255:0] <= #P_DELAY {{128{1'b1}},{128{1'b0}}};
end
else begin
r_cnt0[ 1:0] <= #P_DELAY {r_cnt0[0],r_cnt0[ 1:1]};
r_cnt1[ 3:0] <= #P_DELAY {r_cnt1[0],r_cnt1[ 3:1]};
r_cnt2[ 7:0] <= #P_DELAY {r_cnt2[0],r_cnt2[ 7:1]};
r_cnt3[ 15:0] <= #P_DELAY {r_cnt3[0],r_cnt3[ 15:1]};
r_cnt4[ 31:0] <= #P_DELAY {r_cnt4[0],r_cnt4[ 31:1]};
r_cnt5[ 63:0] <= #P_DELAY {r_cnt5[0],r_cnt5[ 63:1]};
r_cnt6[127:0] <= #P_DELAY {r_cnt6[0],r_cnt6[127:1]};
r_cnt7[255:0] <= #P_DELAY {r_cnt7[0],r_cnt7[255:1]};
end
end
end
assign w_cnt[7:0] = { r_cnt7[0]
, r_cnt6[0]
, r_cnt5[0]
, r_cnt4[0]
, r_cnt3[0]
, r_cnt2[0]
, r_cnt1[0]
, r_cnt0[0]
};
パタン1
(パタン内容を記述予定)
initial begin
//verilogテストパタン1
end
(実行結果1)
ソースコード
ファイル1
(概要を記述予定)
ファイル2
(概要を記述予定)
最終更新:2008年12月12日 21:58