2016-05-10 12 views
-1

元々はバイナリでデータを読み込む必要があります。私は$ readmembがこのために使うことができ、合成可能にする方法さえあるということを読んでいます。

私はRAM_IN(テストベンチモジュールではない)という別のモジュールを作成し、トップモジュールに "接続"しました。

module RAM_IN (pix_val, indx); 


input [0:5] indx; 
output [31:0] pix_val; 


reg [31:0] pix_val; 
reg [31:0] in_ram [0:4]; 

always @ (indx) 
pix_val = in_ram [indx]; 

initial 
begin 
$readmemb("in_ram.txt", in_ram); 
end 

:私は、このようにこのようなので、実装の$ readmembを100個の数字を書くことのために

initial 
begin 
in_ram [0] <= 32'b11111111_000000000000000000000000; 
in_ram [1] <= 32'b10010111_000000000000000000000000; 
in_ram [2] <= 32'b00110110_000000000000000000000000; 
in_ram [3] <= 32'b00111110_000000000000000000000000; 
in_ram [4] <= 32'b00111111_000000000000000000000000; 
in_ram [5] <= 32'b00111110_000000000000000000000000; 
end 

しかし、そのあまりにも疲れる:

の$ readmembについて知る前に、私はこのコードを使用していましたこのファイルを読み込む目的は、最初にトップモジュールに1つずつ100バイナリ値(10x10画像のピクセル強度をシミュレートする)をロードすることです(後で処理して結果を吐き出す...)

私はxxxxxxxxxxxxxxxxxでいっぱいのModelSimを見せてメモリ(気にしない)、私がシミュレートすると、まさにこの

11111111000000000000000000000000 
10010111000000000000000000000000 
00110110000000000000000000000000 
00111110000000000000000000000000 
00111111000000000000000000000000 

のような内容になります.txtファイルを作成し、それがメモリには何もロードされていないように見えます。

私は何が間違っているのか分かりません。おそらく、.txtファイル内の数字の削除はありません。テストベンチではない別のモジュールで$ readmembを使ってファイルを読み込もうとしているからでしょうか?

PD:私が実際に行っているメモリを埋めるこのプロセスのシミュレーション、最終的な意図は、QSYSを使って行うと思われる完全なSoCにTopモジュールデザインを置くことです。しかし、私はこれでとても新しいので、私はまだ勉強しています。どんな助けでも大歓迎です!

+1

それは私には大丈夫だとうまくいきます。 [http://www.edaplayground.com/x/5kxx](http://www.edaplayground.com/x/5kxx) –

+3

@hexafraction私はこのようなメモリ番号を付けることはかなり普通のことだと言っていたでしょう: 'reg [31 :0] in_ram [0:4]; '。 –

答えて

0

。問題は、ModelSimが.txtファイルを見つけることができなかったことです。どこの場所にファイルがあるのか​​分かりませんが、インターネットを見て、私はRamモジュールで、正確なパスを宣言できますこの

initial 
begin 
$readmemb("C:/altera/15.0/Prueba5/in_ram.txt", in_ram); 
end 

ここでmodelsimは正しいデータをロードしています。みんなありがとう。

3

シミュレーションを実行してもよろしいですか? TBと

あなたのコード:同じin_ram.txtで

module RAM_IN (pix_val, indx); 

input [0:5] indx; 
output [31:0] pix_val; 

reg [31:0] pix_val; 
reg [31:0] in_ram [0:4]; 

always @ (indx) 
    pix_val = in_ram [indx]; 

initial 
begin 
    $readmemb("in_ram.txt", in_ram); 
end 

endmodule 

module tb; 
reg [0:5] indx; 
wire [31:0] pix_val; 

RAM_IN ram_in(pix_val, indx); 

initial 
begin 
    indx = 'b0; 
    $monitor ($realtime, " Read Data = %0b" ,pix_val); 
    repeat(4) 
    begin 
    #10; 
    indx = indx + 1'd1; 
    end 
    $finish; 
end 
endmodule 

Questasim:

QuestaSim-64 qverilog 10.4 Compiler 2014.12 Dec 2 2014 
Start time: 18:27:01 on May 10,2016 
qverilog me.v 
-- Compiling module RAM_IN 
-- Compiling module tb 

Top level modules: 
    tb 
Reading pref.tcl 

# 10.4 

# vsim -lib work tb -c -do "run -all; quit -f" -appendlog -l qverilog.log -vopt 
# ** Note: (vsim-3812) Design is being optimized... 
# // Questa Sim-64 
# // Version 10.4 linux_x86_64 Dec 2 2014 
# // 
# // Copyright 1991-2014 Mentor Graphics Corporation 
# // All Rights Reserved. 
# // 
# // THIS WORK CONTAINS TRADE SECRET AND PROPRIETARY INFORMATION 
# // WHICH IS THE PROPERTY OF MENTOR GRAPHICS CORPORATION OR ITS 
# // LICENSORS AND IS SUBJECT TO LICENSE TERMS. 
# // THIS DOCUMENT CONTAINS TRADE SECRETS AND COMMERCIAL OR FINANCIAL 
# // INFORMATION THAT ARE PRIVILEGED, CONFIDENTIAL, AND EXEMPT FROM 
# // DISCLOSURE UNDER THE FREEDOM OF INFORMATION ACT, 5 U.S.C. SECTION 552. 
# // FURTHERMORE, THIS INFORMATION IS PROHIBITED FROM DISCLOSURE UNDER 
# // THE TRADE SECRETS ACT, 18 U.S.C. SECTION 1905. 
# // 
# Loading work.tb(fast) 
# run -all 
# 0 Read Data = 11111111000000000000000000000000 
# 10 Read Data = 10010111000000000000000000000000 
# 20 Read Data = 110110000000000000000000000000 
# 30 Read Data = 111110000000000000000000000000 
# ** Note: $finish : me.v(34) 
# Time: 40 ns Iteration: 0 Instance: /tb 
# End time: 18:27:02 on May 10,2016, Elapsed time: 0:00:01 
# Errors: 0, Warnings: 0 

とシミュレーション:私はすでにこれを固定

enter image description here

+0

友人は、$ readmembファイルをトップモジュールとしてテストベンチを適用しています。問題は、私の$ readmembファイルがトップモジュールではなく、レジスタ "indx"によって制御され、テストベンチがトップモジュールに移動することです。何らかの理由で、1つずつロードすると動作しますが、$ readmemb命令を使用すると、xxxxxxxxxxxxxxxxがロードされます。私はコード全体を投稿すれば、これに手を差し伸べることができると思いますか?ありがとうございました – sujeto1

+0

はい、アップロードしてください! –

+0

はい、TBはトップモジュールでも、$ readmembを含むモジュールでもありません。 –

関連する問題