FC2カウンター FPGAの部屋 soc-lm32のその後6(DDR SDRAM上でのソフトの動作)
FC2ブログ

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

FPGAの部屋

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

soc-lm32のその後6(DDR SDRAM上でのソフトの動作)

DDR SDRAM上にbootloader と大体同じプログラムを40000000番地からld でリロケートして、DDR SDRAM用にした。それをbootloader のu コマンドでアップロードして(改造して.ram をアップロードできるように改造していある)動かしてみた。
そうすると、文字が化け化けになってしまった。どうやらuart_putstr(char *str) で書いたときだけだめなようだ。uart_putchar(c) は大丈夫みたい。試しに v コマンドをuart_putchar(c) で実装すると大丈夫。
soc-lm32_12_081027.png
上の図で
1.u コマンドでDDR SDRAMのアドレス、40000000番地にロード
2.TeraTerm のファイル転送でファイルを転送。
3.g40000000 でDDR SDRAMのアドレス、40000000番地にジャンプ
その後のオープニングメッセージが化けている。その後のv コマンドの表示結果は普通。。。これはuart_putchar(c) で書き換えてある。
理由はまた、DDR SDRAMモジュールに入れるアドレスをミスっていたからだった。
前回の”soc-lm32のその後3”で、WishBoneバスのアドレスをDDR SDRAMコントローラに入れるところの非同期FIFOの入力を下のようにしたが、

async_fifo_addr async_fifo_addr_inst (
 .din({wb_r_w, 1'b0, wb_adr_i[31:1]}),


これは、4バイトごとなので、

async_fifo_addr async_fifo_addr_inst (
 .din({wb_r_w, 1'b0, wb_adr_i[31:2], 1'b0}),


でした。またまたミスっていました。
これで、DDR SDRAMでのプログラム動作もよさそう。
soc-lm32_13_081027.png

DDR SDRAMのインターフェースのWishBoneバスにはバイト・イネーブルがないと思っていたが、wb_sel_i がそうだった。これを反転してDDR SDRAMコントローラのinput_mask に入れて、wb_sel_i にビットが立っていないバイトレーンは書き込みをマスクするようにした。でも今のところ、全部のバイトレーン書き込んでいても大丈夫そうだ。WORD幅に足りない変数はパッディングしているのかな?

  1. 2008年10月27日 20:32 |
  2. Spartan3E Starter Kit でマイコンを作る
  3. | トラックバック:0
  4. | コメント:2

コメント

こんばんわ。
>WORD幅に足りない変数はパッディングしているのかな?
 うーんと、soc-lm32って、sb とか sh とか、バイト、ハーフ・ワード命令持ってましたよね? パッディングとかはしないと思いますが。スタックとかは引数の受け渡しで、バイトでも豪勢にワード分使ったりしますが。
  1. 2008/10/29(水) 00:40:09 |
  2. URL |
  3. くり #mQop/nM.
  4. [ 編集 ]

くりさん、こんにちは。

書いてから、そう思いました。putchar(c) はレジスタで受け渡しなので、32ビット幅で受けて0xff でマスクしているようです。
一方、putstr(*str) はアドレスを+1 しているようなので、おかしくなってしまったようです。
  1. 2008/10/29(水) 05:30:29 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

コメントの投稿


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

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