をシミュレーションする最後の16ビットRISCプロセッサを検索しました。それはドキュメンテーションを少し支援する必要がありましたが、欠けているファイルを持っていましたが、私はそれをEDA遊び場と呼ばれるインターネットツールで無料でシミュレートすることができました。今回は、コードの詳細とシミュレーションの実行方法を説明します。

すでにチェックアウトしていない場合は、前の公開を参照してください。このポストで説明しているファイルを理解するのに役立つ高レベルの概要を示す図である。

本物のFPGAでこれを本当にプログラムしたい場合は、やるべきことが少し働いています。メモリとレジスタ初期化は、シミュレーションには問題ない方法で行われますが、本物のFPGAでは機能しません。とにかく、始めましょう!

ファイルごとのファイル

各データを個別に連れて行った場合、それらのどれも理解するのが非常に困難です。これがクイックランダウンです(私はインターネットシミュレーションで私のデータを利用するデータ名を利用しています)。

Parameter.v – これは他のすべてのファイルに対していくつかの基本的な定義を設定するデータの含めるデータです。

PROG.V – これは方向メモリです。単純なモジュール、それはそのアドレスのデータを提示するのと同様にアドレスを取ります。 $ READMEMBディレクティブはデータ(test.prog)からデータを読み取ります。

register.v – レジスタファイル。これはDirection Memoryのようなものですが、2つのチェックアウトポートも作成できます。

data.v – RAMメモリ。これはほとんどレジスタのようなものですが、1つのチェックアウトポートと同様に大きくなります。データを開くとメモリコメントを印刷するシミュレーションコードがいくつかありますが、デバッグ用のものとして削除しました。暫定的なコンテンツはtest.dataファイルから来ています。

ALU.V – これは複雑になると思いますが、そうではありません。出力を生成するためだけでなく、2つの入力を取ります。追加または差し引くような単純なもの。 always @(*)は、このためにクロックドロジックを作成しないようにVerilogに指示します。それは単純なゲートとマルチプレートに変わります。

datapath_unit.v – これはより複雑なファイルの1つですが、それを掘ると、それが主に大量であることがわかります。このデータは、すべてのリソースを作成します(メモリと同様にメモリと同様に)すべてのリソースを生成します。

CONTROL_UNIT.V – もう1つの長いモジュール、これは方向テーブルを実装し、現在の命令に基づいて制御線を設定します。

ALUCONTROL.V – このデータはALUの指示を復号します。元の投稿に欠けていました。奇妙なことに、ALUCONTROLファイルを持つすべての同じサイトには、もう1つのCPUがありますが、異なる方向セットの場合は明らかです。ただし、そのデータを開始してもスタイルテーブルを利用して、再作成することができました。 [FPGA4STUDENTS]がこれを修正した場合、ファイルは非常に異なる可能性があります。

design.sv – このデータは私が使用しているedaplaygroundシミュレータに必要です。最上位要素(データパスとコントロールユニットと同様に)が含まれています。 edaplaygroundはこのファイルのみを処理するため、上記の他のファイルを含める必要があります。これにより、各々がタイムスケール指令を持っているため、いくつかの警告が発生しますが、これは無害です。

TestBench.SV – テストベンチは本物の設計の一部ではありませんが、シミュレーションを設定したり、結果を収集したりします。私はそれをedaplaygroundと仕事をするためにそれを修正しなければなりませんでしたが、操作は同じです。それはCPUを作成し、時計をフィードし、しばらく実行します。テストプログラムとメモリの内容はtest.progだけでなくTest.Dataです。

シミュレーション

あなたは二つのことのうちの1つをすることができます。あなたはすぐに行くスタイルのコピーを開くことができますが、それはあなたの最高級のオプションではないかもしれません。 edaplaygroundに行き、新しいVerilogプロジェクトを作成するだけです。その後、元の投稿からファイルの移動を開始します。ファイルがないファイルだけでなくエラーに遭遇するでしょう。あなたが修正することができるものを正確に見てください。あなたが急降下するならば、あなたは私のコピーを利用してあなたが急降下するならあなたを助けることができます。あなたはより多くのことを発見するでしょう。

あなたがそれを試してみることを選ぶならば、ここにedaplaygroundについていくつかのヒントがあります。 UVM / OVMが選択されている必要もなく、他のタイプの他のライブラリも必要でもありません。私はIcarus Verilog 0.9.7を利用しましたが、利用可能なVerilogツールの種類を利用する可能性が高いかもしれません。あなたはEpwaveチェックボックスを調べたいと思います。

イニシャル
始める
$ dumpfile( “dump.vcd”);
$ dumpvars;
[データ名]タブの横にある+表示を使用して新しいファイルを作成します。 edaplaygroundにはペインごとに10個のファイルが制限されています。覚えておいてください。他のファイルは間接的にそれらを利用してからデータファイルを含める必要はありません。

走る!

すべてのエラーが発生したら、Runを押すだけでなく、波形ビューア、Epwaveが表示されます。あなたはhav.e興味の速度の信号を追加するので、作業中のCPUを見ることができます。一部の入出力装置をメモリまたはデバッグポートに追加するのが楽しいです。私は通常、プログラムカウンターと登録を登録することで、内部の何が起こっているのかという概念を得るためにポートを作成します。

元のコードには、多大な指示を行使したプログラムがありました。私はそれをこれに置き換えただけでなくそれをコメントしました:

0000_0100_0000_0000 // 0000:トンR0 <-MEM(R2 + 0)R2 = 0以降、R0で1 0000_0100_0100_0000 // 0002:トンR1ではまったく同じ(R1には常に1が含まれます) // 8(バイト)、4(ワード): 0010_0000_0101_0000 // 0004:R2 = R0 + R1 0001_0010_1000_0000 // 0006:MEM [R1] = R2(すなわちMEM [1] = R2 0000_0010_0000_0000 //0008:R0 = MEM [R1] 1101_0000_0000_0011 // 000A:#4の場所へジャンプ#4(CPUは2を掛けます) //方向000cでの方向性がない、しかしPCはジャンプを処理しながらそこに掛かるでしょう メモリに合った増分値に準拠できるはずです。プログラムカウンタサイクルを各ループで4つの場所に戻すのを見ることができるはずです。これが典型的なセッションです。 私は多大なインテリア信号を省きましたが、ループの最初の2回の反復で、メモリアドレス1が2に設定されていることを確認できます。 終了ゲーム これは素晴らしい学術的なCPUですか?わからない。しかし、いくつかの単純なCPUが存在しているが、それらは難しいので頻繁にはほとんどないか、またはそれらは非常に実用的ではない。これよりも挑戦的なものは、初心者にとって噛むことが最も多くの可能性が高いです。私はあなたがこのようなものに取り組む前に、あなたがこのようなものに取り組む前にあなたが基本的なVerilogを把握する必要があると思いますが、ドキュメンテーションはいくつかの分野で少しまばらでした(そして混乱しています)。明らかに、それはそれが働いているのでそれは素晴らしかったです、しかしあなたが始まったばかりであるならば、あなたはほとんどの場合、そして説明だけでなくもう少し助けを与えるでしょう。 あなたは優先学術的なVerilog CPUを持っていますか?私はまだ「ちょうどいい」という人を探しています。

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *