目次
コメントはありません。 Comments/kondo
FATAL_ERROR:Simulator:Fuse.cpp:164:$Id: Fuse.cpp,v 1.35.4.4.2.1 2008/05/02 FATAL_ERROR:Simulator:Fuse.cpp:164:$Id: Fuse.cpp,v 1.35.4.4.2.1 2008/05/02 17:57:52 jimmyw Exp $ - Failed to link the design Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support.
こうなってしまうと、Clean up Projectをしても、ISEを再起動をしても駄目みたい。
プロジェクトを作り直すのが最良か。
CLKを分周するHDLを書いた。
Div[0]を使っていないという警告が出る。
無視してもいい警告のようだが、消したい。
/* CLKgen 先生からもらったプログラムを参考にした cntの値が何から始まるか分からないので、最初のクロックはいつ立ち上がるか不明(特に問題なし) */ module CLKgen( CLKi , CLKo , Div); input CLKi; //Clock input input [9:0] Div; //10bit => 1024 divider output CLKo; //Clock output reg [8:0] cnt; reg CLKo; wire [8:0] Div2; assign Div2 = Div[9:1] ; //posedgeで動作するため、すでに2分周されている。そのため、Divを2で割っておく always @( posedge CLKi ) begin if( cnt == Div2 ) begin CLKo <= ~CLKo; cnt <= 0; end else begin cnt <= cnt + 1 ; end end endmodule
assign Div_Dummy = Div[0];
これでもDiv_Dummyが出力されていないから、Div_Dummyに警告が出る
これを消すには、Outputで無駄に信号線を出すしかないか。
always @( Div ) begin Div2 = Div >> 1 ; end
ビットシフトするように書いたが、やはりDiv[0]は使われていないという警告消えず。
う〜ん、悩ましい。
とりあえず、警告が出るモジュールだということを記録しておいて、使おう。
これでも動きそうだけど、分からない警告が出る。
module CLKgen( CLKi , CLKo , Div); input CLKi; //Clock input input [9:0] Div; //10bit => 1024 divider output CLKo; //Clock output reg [9:0] cnt; reg CLKo; always @( CLKi ) begin if( cnt == Div ) begin CLKo <= ~CLKo; cnt <= 0; end else begin cnt <= cnt + 1 ; end end endmodule
今度はこの警告が出た。
"top.v" line 36: One or more signals are missing in the sensitivity list of always block. To enable synthesis of FPGA/CPLD hardware, XST will assume that all necessary signals are present in the sensitivity list. Please note that the result of the synthesis may differ from the initial design specification.
センシティビティリストの理解が間違っているのかも。。
今まで警告が多すぎて、ほぼ無視してきた。
だけど、警告を見れば、ビット幅のミスなども無くせるので、
出来る限り警告を減らしていくようにしようと思う。
警告が出る場合は、理解して、しっかりメモしておく。
最悪、理解できなくても、警告を記録する。
(前まで1つのモジュールで作成していた)SDRAMに1バイト書込読込のHDLを、以下のモジュールに分割するHDLを書いた。
ステートマシンの状態遷移もしていない。
CLKだけは正常に生成されている。
いろいろやってみるが、解決できず。
困った。
明日、新しくHDLを書き直してみよう。
1バイト読み書きしていたHDLをモジュール化した。
信号線も多いせいか、なかなか時間がかかった。
完成して、シミュレーションはうまく動く。
ただ、実機では状態遷移すらしない。
何か単純なミスをしている予感orz
今日はここで諦める。
WRITE、READを、同じモジュールに書いていた。
しかし、後々不便になるので、そろそろモジュール分けようという話
これが案外、大変。。
昼からはこれに費やしたが、
あともう少しかかりそう。今日はここまで。
8月6日に、SDRAMに1バイト書込、読込をした。
下2ビットのみの確認だった。
その読み込んだ内容をシリアル通信で確認した。
UARTモジュールは、先生が書いたものを利用させてもらう。
その結果、正しい結果が書込、読込されていることが分かった。
しょうもないミスをしてしまった。
topモジュールから、TXモジュールには、8ビットのDinというデータ列を渡す。
呼び出し元topモジュールで、TXモジュールに渡すデータ列Dinのビット幅を1ビットにしていた・・・
呼び出し先のTXモジュールでは、正しいビット幅にしていたこともあって、
気づくのが遅かった。
あー、昨日の昼から、今日の午前中まで、まる1日これに費やしてしまった。(orz
変数を追加する時には、ビット幅に気をつけよう。。
#ちなみに、View RTL Schematicを見て、気づいた。
READ時、DQの値を、DQinに格納して、
DQinをUARTのTXモジュールを使って、出力しようと思う。
regでDQinを宣言し、READ状態の時、
DQin <= DQ
としている。
ところが、おかしい。
どうもDQの値が、すぐにDQinに入ってくれない。
下の写真のように

オシロで見てみると、
DQin0の波形がなまっているような、かんじか。

何でだろう。
DQinに出力するのはやめるか。
野手さん経由で、UARTモジュールのverilogファイルをもらった。
後々のことを考えて、miniUARTではなく、こちらを使うことにする。
このUARTモジュールの処理内容は、大体、掴めた。
エコーを返してみる。
いろいろ試してみると、連続した文字を送信できないようだ。
2クロックに1ビットを送信するようになっているが、
count=19,ストップビット送信
count=20,終了処理
count=0,送信準備
count=1,スタートビット送信
連続して送ってしまうと、ストップビット送信後、3クロックを要する。
これを解決するためには、4クロックで1ビット送信するように書き換える必要があるのかな。
miniUARTというIPコアを利用したい。
IPコアはVHDLで提供されているようなので、
試しにverilogからVHDLを呼び出してみる。
verilogからVHDLモジュールを呼び出す時に、
ポートリストは必ず.SW(SWi)のようにする必要があるようだ。
LED_test LED_test( SWi , LEDi );
このときには以下のエラーが出る。
ERROR:Xst:1858 - Ordered port connections are not yet supported from verilog to VHDL. Please give explicit names to your port connections for instance led_test.
module top( SWi , LEDi ); input SWi; output LEDi; //LED_test LED_test( SWi , LEDi ); LED_test LED_test( .SW(SWi) , .LED(LEDi) ); endmodule
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity LED_test is port ( SW : in std_logic; LED : out std_logic); end LED_test; architecture Behavioral of LED_test is begin LED <= SW; end Behavioral;
参考:ボード & IP サポート掲示板 [One Topic All View / Re[1]: USB-IPをVerilogデザインの中で使いたい / Page: 0]
http://www.fpga.co.jp/XCM/cbbs/cbbs.cgi?mode=al2&mo=271&namber=269&space=15&rev=1&page=0&no=0&KLOG=1#F
1バイトの下2ビットをロジアナで観測しながら、書込、読込に成功した。
ここまで時間かかったな。。(汗
��(バンク0の0行目の)0番地に、DQ1=1、DQ0=0を書込
��1番地に、DQ1=0、DQ0=1を書込
��0番地をREAD、(CASレイテンシ)2クロック後に、DQ1=1、DQ0=0を読込
��1番地も、DQ1=0、DQ0=1を読込
シミュレーション結果は、正しく出力されているのだが、
波形は1000nsecまでしか表示されていない。
Cleanup project file
をして駄目だったので、プロジェクトを作り直したら、
うまく動いた。
こういう時は、冷静に
ISE WebPACKで、
波形を確認するツールを使うと、
1000nsまでの波形しか見ることができない。
This is a Lite version of ISE Simulator(ISim).
と書いてあるし、機能制限なのだろうか。
テストベンチの、50000行までの制限はあるらしいけど。
どうやら勘違いのようだ。
初期設定では1000nsまでしか見られないが、
以下の所から変更することができた。
(チルダ)が見えなくなる問題†
ISE標準のエディタを使っていると、~(チルダ)がまったく
見えなくなることがあるようだ。
コピーして、他のエディタで見れば、分かるみたい。
印刷しようとしても、印刷できない。
原因不明・・・?
その上、その後プリンタの調子がおかしかった。
他の人まで印刷できなかったり?した。
このソフトが原因かどうかまでは定かではない。
ステートマシンを書き、状態遷移させるHDLを書いた。
その後、状態に応じた制御信号を出力させた。
最初は、うまく出力されなかった。
どうやらデコード方式のステートマシンが、
ワンホット方式のステートマシンへ最適化されたらしい。
そのときに、出力されるはずの制御信号が、消されたらしい。
原因は、よく分からないが、HDLを書き換えたりしていると、
デコード方式の論理合成結果になった。
何だったんだろう。
配置配線のピン配置を決める時に、「PACE」というソフトが使う。
このソフトでピン配置を決めて、後にポートリストを変更後、
再度ピン配置を決めると前のピン配置のデータが残ってしまうようだ。
しかも、ピン配置を変更しても、どこかにデータが残っているらしく、
必ず警告に遭遇してしまう。
top.ucfを直接見ても、何も書いていないはずのピンにエラーが・・・
よく分からない。
秋田先生にコツを教えてもらいチャレンジ
結構時間がかかったけど、コツを掴めば、SDRAMのはんだづけはスムーズに終わった。
が、カメラモジュールの半田付けがうまくいかない。
問題は、ランドの位置と、カメラモジュールにわずかな隙間ができてしまうようだ。
PCBEで設計する時にぴったりにしすぎたせいのようだ。
何か解決方法を考えなければ。。