2012-01-24 11 views
0

初心者を許して、私はこの質問を正しく聞く方法も知らない:Verilogでファイルを4つの部分に分割することはできますか?

私は現在メモリバンクにロードされているファイルを持っており、4つの異なるメモリバンクに分割したいと思っています。

私は非常にこのような行を使用して、いくつかのシステムVerilogコードがありますいくつかのメモリに(それは65536バイト長だと言う)hexファイルを読み込むこと

$readmemh(mem_file, memories.ram); 

を。

今、私はこれを行うには

1つの明白な方法はにある...など、4つの部分にメモリを分割し、別のものに、ブロックに第二四半期の第一四半期(16384バイト)を入れたいですヘッドを使用したhexファイルを分割し、尾など、それを作るビルドプロセスの一環として、その後、シミュレーション時に、すべての新しいファイル名を渡し、そして

$readmemh(mem_file_1stbit, memories.ram1); 
$readmemh(mem_file_2ndbit, memories.ram2); 
$readmemh(mem_file_3rdbit, memories.ram3); 
$readmemh(mem_file_4thbit, memories.ram4); 

のようなステートメントを持っているしかし、それはカップルに思えますファームウェアのビルドプロセス、シミュレーションスクリプト、およびVerilogの設計は、私の好みにはあまりにも多すぎます。 (私の意見では)

A非常に優れたソリューションは、言うことのverilogコードを変更することと何かのように:

$readmemh(mem_file, memories.ram1, 0,  (1<<14)-1); 
$readmemh(mem_file, memories.ram2, (1<<14), (2<<14)-1); 
$readmemh(mem_file, memories.ram3, (2<<14), (3<<14)-1); 
$readmemh(mem_file, memories.ram4, (3<<14), (4<<14)-1); 

しかし、それは、私はこの種のものをやらせますVerilogのようには見えません。

誰もが同じ結果を達成するきちんとした構造を考え出すことができますか?

+0

4つのファイルを使用する場合、 'split' unixユーティリティは' head'と 'tail'よりもクリーンかもしれません。 – toolic

+1

あなたの優先権は実際には特定のプログラムで動作します。私はザイリンクスISEが(データファイルがあなたが書き込んでいるRAMよりも多くの行を持っている場合は)不平を言いますが、Icarus Verilogではうまくいくはずです。 – Darhuuk

答えて

0

この小さなスニペットはビジネスを行うようです。それは私がむしろ合成されることに終わらないことを望む、物質の中間負荷を導入する。

私はこのようなことをします。実際に自分が何をしているかを知っている人が、なぜこれが悪い考えであるのか教えたいと思ったら、私は最も感謝しています。

reg [8:0] data [0:15]; 
    reg [8:0] data1 [0:7]; 
    reg [8:0] data2 [0:7]; 

    integer i; 

    initial begin 
     $readmemh("data.hex", data); 
     for(i=0; i<16; i=i+1) 
     $display("%d:%h",i,data[i]); 
     for(i=0; i<8; i=i+1) 
     begin 
      data1[i]=data[i]; 
      data2[i]=data[i+8]; 
     end 
    end