FPGAの部屋 PlanAhead12.4でCharDispCtler のNSLコードのデバック
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

PlanAhead12.4でCharDispCtler のNSLコードのデバック

今回の目的は、NSLで作ったCharDispCtler.vがきちんと論理合成出来て、インプリメントすることができるか?を確かめることだ。インプリメント出来たら、シミュレーションをしてうまく動いていることを確認してから、ビットファイルをSpartan-3A Starter Kitにダウンロードして動作させてみようと思っている。

さて前回で、プロジェクトが完成したが、UCFファイルは生成しただけで、まだピンの配置や動作周波数を設定してない。PlanAheadのプロジェクトからどうやってConstraints Editorやピン配置用の設定画面(これは、PlanAheadでやるのだが。。。)を出すかが良くわからない?

とりあえず、論理合成はUCFが必要ないので、論理合成をしてみよう。FlowメニューからSynthesis Settings を選択するとSynthesis Settings ダイアログが表示される。
PlanAhead124_13_110212.png

Options の... ボタンをクリックして、オプションを見てみる。
PlanAhead124_14_110212.png

-netlist_hierarchy はrebuiltになっている。
ダイアログをすべて閉じて、Project ManagerのSynthesizeをクリックして、論理合成を行う。
PlanAhead124_15_110211.png

Top Module Nameを尋ねるダイアログがでる。トップモジュールの名前。Top_wDCMを入れて、OKボタンをクリックする。
PlanAhead124_16_110211.png

そうすると、しまった。。。エラーが出てしまった。PlanAheadのチュートリアルのつもりだったのに。。。
PlanAhead124_17_110211.png

エラーを見てみると、temp_colorのレンジを超えているそうだ。temp_colorは、temp_color[3]で宣言している。temp_color[9]は当然ながら、インデックス値がout of rangeだ。Verilogを見ながら直したので、Verilogのこの部分がどうなっているかを見ると、

parameter RED_DOT_POS = 9; // 9ビット目がRED
parameter GREEN_DOT_POS = 8; // 8ビット目がGREEN
parameter BLUE_DOT_POS = 7; // 7ビット目がBLUE

に対して、

reg [RED_DOT_POS:BLUE_DOT_POS] temp_color;


で宣言しているので、reg[9:7] temp_color; で宣言していた。これではエラーですね。
元のNSLの下の部分を

if (char_data_node && display_on_d2) {
  red_node := temp_color[RED_DOT_POS];
  green_node := temp_color[GREEN_DOT_POS];
  blue_node := temp_color[BLUE_DOT_POS];


これに変更した。

if (char_data_node && display_on_d2) {
  red_node := temp_color[2];
  green_node := temp_color[1];
  blue_node := temp_color[0];



これで、もう一度、Project ManagerのSynthesizeをクリックして、論理合成を行ったところ、m_clockでエラー発生。
PlanAhead124_18_110211.png

今回、Top_wDCMがトップモジュールで、Verilog ソースファイルのdcm_inst.vをinterface文で接続して、クロックを入力し、そのクロックを下のモジュールに供給している。
これは、NSLから変換したVerilogファイルを見ると、下のように、u_charDispCtrlerTestのm_clockにm_clockが入っている。これは、clkdvが入っているはずなのだ。
PlanAhead124_19_110211.png

対応するNSLソースを下に示す。

module    Top_wDCM {
    dcm_inst    u_dcm_inst;
    CharDispCtrlerTest    u_charDispCtrlerTest;
    wire    clkdv;
    wire    locked;
    
    u_dcm_inst.clkin = m_clock;
    u_dcm_inst.reset = p_reset;
    clkdv = u_dcm_inst.clkdv;
    locked = u_dcm_inst.locked;
    
    u_charDispCtrlerTest.m_clock = clkdv;
    u_charDispCtrlerTest.p_reset = ~locked;
    VGA_RED = u_charDispCtrlerTest.VGA_RED;
    VGA_GREEN = u_charDispCtrlerTest.VGA_GREEN;
    VGA_BLUE = u_charDispCtrlerTest.VGA_BLUE;
    VGA_HSYNC = u_charDispCtrlerTest.VGA_HSYNC;
    VGA_VSYNC = u_charDispCtrlerTest.VGA_VSYNC;
    
}


u_charDispCtrlerTest.m_clock = clkdv;と書いてあるが、そうなっていない。これはどれが原因かというと、

declare    CharDispCtrlerTest {
    
    // -- CharDispCtrlerTest  --
    output    VGA_RED[4];
    output    VGA_GREEN[4];
    output    VGA_BLUE[4];
    output    VGA_HSYNC;
    output    VGA_VSYNC;
    
}


にinterfaceが入っていないのが問題だと思う。また、m_clock, m_reset入力定義も追加して、下の記述に変更した。

declareCharDispCtrlerTest interface {

inputm_clock;
inputp_reset;

// -- CharDispCtrlerTest --
outputVGA_RED[4];
outputVGA_GREEN[4];
outputVGA_BLUE[4];
outputVGA_HSYNC;
outputVGA_VSYNC;

}


これで、Verilog ソースに変換し、もう一度Project Manager で論理合成してみた。論理合成は正常終了した。これで取り敢えず大丈夫みたいだ。
PlanAhead124_20_110211.png
  1. 2011年02月12日 14:17 |
  2. NSL
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1716-ea489524
この記事にトラックバックする(FC2ブログユーザー)