合成の問題(?)について
C to Verilogを試していると、メモリの制御信号がDon't Careになってしまうことがあると分かった。いろいろ入力となるCプログラムを変えてみたら、どうやらforループの中にcontinueがあるとうまくいかないらしい、ということが分かった。ひょっとしたらbreakもだめなのかな?

メモリ(RAM)の使用について
C to Verilogでは、ポインタはRAMとして生成され、テストベンチの中にはRAMの宣言もある。このRAMはポート数は可変のようだが、タイミングは固定されてしまっている。つまり、同期書き込み、非同期読み出しのメモリでないと、期待したタイミングとずれてしまう。そして、Xilinxの場合、BRAMは同期読み出しである。したがって、C to Verilogで生成されたプログラムを使用する場合は、BRAMは使用できない。その代わりに、分散RAMを使用する。これであればdual-portメモリもOK。でも、dual-port設定時にC to Verilogで生成されるRAMのモジュールは、Write Enable信号が2つある。分散RAMは、書き込みは1ポートだけしか使えない。それで、片方のWrite Enable信号は除く必要がある。

しかも、C to Verilogで生成されるxramの定義にはバグがある。メモリは配列として宣言されるが、配列の要素数の括弧が無いので、本来の要素数を持つ配列が定義されない。明示的に括弧をつける必要がある。

Comments