FPGAの部屋 openMSP430のシミュレーション3(ISimでシミュレーションを試みる2)
FC2ブログ

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

FPGAの部屋

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

openMSP430のシミュレーション3(ISimでシミュレーションを試みる2)

openMSP430のシミュレーション2(ISimでシミュレーションを試みる1)”の続き。

1.前回は、バイト・イネーブル付きのRAMをSpartan-3でインプリメントしたら、SLICEMが使用されてしまった。よって、バイト・イネーブル無しの下のVerilogコードに変更した。

//
// 16ビット幅、2048ワードRAM
//

module  rom_16x2k  (clk, we,  en, addr,  din,  dout);
   parameter DATA_WIDTH = 16;
   parameter ADDR_WIDTH = 11;

   input    wire [DATA_WIDTH-1:0] din;
   input    wire [ADDR_WIDTH-1:0] addr;
   input    wire we;
   input    wire clk;
    input wire en;
   output    reg [DATA_WIDTH-1:0] dout;

   (* RAM_STYLE="BLOCK" *) reg [DATA_WIDTH-1:0] ram [2**ADDR_WIDTH-1:0];

   initial
      $readmemh("rom_16x2k.data", ram, 0, 2047);

   always @(posedge clk)
      if (en) begin
         dout  <= ram[addr];
         if (we)
            ram[addr] <= din;
      end
endmodule


2.上のrom_16x2k.v を使うために、openmsp430\trunk\fpga\xilinx_diligent_s3board\rtl\verilog\openMSP430_fpga.v の801行目からの”// Program Memory”をrom_8x2k_hi, rom_8x2k_lo からrom_16x2k.v にインスタンスを切り替えた。Verilogコードを下に示す。

// Program Memory
// rom_8x2k_hi rom_8x2k_hi_0 (
    // .addr         (pmem_addr),
    // .clk          (clk_sys),
    // .din          (pmem_din[15:8]),
    // .dout         (pmem_dout[15:8]),
    // .en           (pmem_cen),
    // .we           (pmem_wen[1])
// );

// rom_8x2k_lo rom_8x2k_lo_0 (
    // .addr         (pmem_addr),
    // .clk          (clk_sys),
    // .din          (pmem_din[7:0]),
    // .dout         (pmem_dout[7:0]),
    // .en           (pmem_cen),
    // .we           (pmem_wen[0])
// );

assign we_node = ~(pmem_wen[1] & pmem_wen[0]);
rom_16x2k rom_16x2k_inst (
    .addr         (pmem_addr),
    .clk          (clk_sys),
    .din          (pmem_din),
    .dout         (pmem_dout),
    .en           (~pmem_cen),
    .we           (we_node)
);


3.ISEのプロジェクトのあるopenmsp430\trunk\fpga\xilinx_diligent_s3board\synthesis\Synth131にrom_16x2k の初期化データファイルrom_16x2k.dataをコピーした。

4.openmsp430\trunk\fpga\xilinx_diligent_s3board\bench\verilog\tb_openMSP430_fpga.v を以下のように変更した。

4.1 126行目から137行目までの元のROMの初期化データをコメントアウトした。

//initial
// begin
//    // Read memory file
//    #10 $readmemh("./pmem.mem", pmem);
//
//    // Update Xilinx memory banks
//    for (i=0; i<2048; i=i+1)
//    begin
//       dut.rom_8x2k_hi_0.inst.mem[i] = pmem[i][15:8];
//       dut.rom_8x2k_lo_0.inst.mem[i] = pmem[i][7:0];
//    end
//end


4.2 シミュレーションが100psで止まってしまうので、357行目から377行目までをコメントアウトした。

// initial // Normal end of test
  // begin
     // @(inst_pc===16'hffff)
     // $display(" ===============================================");
     // if (error!=0)
       // begin
      // $display("|               SIMULATION FAILED               |");
      // $display("|     (some verilog stimulus checks failed)     |");
       // end
     // else if (~stimulus_done)
       // begin
      // $display("|               SIMULATION FAILED               |");
      // $display("|     (the verilog stimulus didn't complete)    |");
       // end
     // else 
       // begin
      // $display("|               SIMULATION PASSED               |");
       // end
     // $display(" ===============================================");
     // $finish;
  // end


5.openmsp430\trunk\fpga\xilinx_diligent_s3board\bench\verilogのtb_openMSP430_fpga.v とmsp_debug.v をシミュレーション用ファイルとして、プロジェクトに追加した。
openMSP430_26_110624.png

6.ISimのプロパティの-i(インクルード)に、K:\HDL\FndtnISEWork\openmsp430\trunk\fpga\xilinx_diligent_s3board\rtl\verilog\openmsp430|K:\HDL\FndtnISEWork\openmsp430\trunk\fpga\xilinx_diligent_s3board\rtl\verilog\openmsp430\periph|K:\cygwin\home\Masaaki\xilinx_diligent_s3board\sim\rtl_sim\run を設定した。
openMSP430_27_110624.png

7.3us シミュレーションを行うと、openMSP430が動作しているのが見えた。
openMSP430_28_110624.png

これでシミュレーションはできそうだ。この方法で行くと、data2memを実行しなくても、ソフトウェアをロードすることができる。

(2011/06/27:追記)
data2memを実行しない状態での実機での動作を確認しました。
しかし、これだとソフトウェアを修正後にインプリメントが必要なので、data2memにもメリットがあると思う。
  1. 2011年06月24日 21:03 |
  2. FPGA内蔵マイクロコントローラ
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


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

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