2017-11-24 18 views
-2

私は多くのグーグルとスタックオーバーフローをしました。私は正しく私が推測する質問を語るように見えることはできません。私はVerilogを学ぼうとしており、マイクロプロセッサを構築しているチュートリアルが見つかりました。私は今、命令デコーダです。Verilogでは、16ビット入力をどのようにして4,6,6ビットに分解しますか?

  • 最初の4ビット(例:MOV、ADDI、SUB、NOT、AND、ORなど、ADD)
  • 最終12命令に対応するフラグを立てる16ビット入力を受け取りビットは、ホルダーが操作を行うために6と6に分解されます。

Here's a crappy diagram,私はそれが意味をなさないと説明すれば、 これは初心者レベルのプロジェクトなので、私は頭がおかしくなってしまいます。私はちょうど3つの異なる入力を持っていますが、私は信号が一度に4,6,6に送られたとは思いません。

私は標準もあなたの質問にいくつかのコードを持っていることを知っていますが、私は文字通りどこから始めるべきかわかりません。

+0

必要な用語は 'ビットスライスfromベクトル'です –

答えて

1

私はこのチュートリアルを使用することが初心者のための神であるとは確信していません。最初に「こんにちは世界」を印刷するなど、はるかに簡単なものから始めてください。あなたは16ビット幅で、命令取得している

1):あなたの図に従って

module decoder(input [15:0] instruction, input clk, ...); 

2)(通常のビット「0」はるかに上ですが、ここで、この1のための出発点でありますビット[15:0]は2番目のパラメータに、ビット[11:6]は2番目に、ビット[15:12]はコードに属しているように見えます。だから、あなたは次のようなものを書くことができます:

reg [3:0] opcode; 
reg [5:0] param1; 
reg [5:0] param2; 

always @* begin 
    opcode = instruction[15:12]; 
    param1 = instruction[11:6]; 
    param2 = instruction[5:0]; 
end 

これはあなたに出発点を与えるでしょう。モジュールのために、必要な出力とクロックを把握する必要があります。クロックは、ハードウェアで操作を同期させ、状態マシンを作成するために使用されます。 opcodeとparamsを取得したら、それらの処理方法を理解する必要があります。

今、あなたは、いくつかのデコーディング・ロジックを持つことができます。

always @(posedge clk) 
    case (opcode) 
    4'b0100: op <= mov; 
    4'b0101: op <= add; 
    ... 
    endcase 

私はそれが助けを願っています。

+0

これは役に立ちました!あなたの声明の最初の部分に対処してください。私はverilogのHello Worldを過ぎています。これが最後のレッスンです。 –

関連する問題