2016-10-21 3 views
-1

私はこれらの線が何に合成されるのか知りたいですか?私は、直接マップされたキャッシュを設計しており、割り当てを使用してインデックス、オフセット、タグのビットを分けています。デマルチプレクサに合成されますか? assign文がどのように合成されるかを知りたいので、コード全体については言及しませんでした。 8085プログラミングでは、私はそれが混乱だったので、「アドレス分離」などの用語を読んでいた。唯一の割り当てがあるのでassign文はどのように合成されますか?

module cache 
     ( input bit clk, 
      input bit rst, 
      input logic [15:0] address, 
      input logic valid_in, 
      input logic compare, 
      input logic wr, 
      input logic enable, 
      input logic write_through, 
      output logic dirty, 
      output logic [4:0] tag_out, 
      output logic [15:0] data_out, 
      output logic valid_out, 
      output hit 
     ); 

      logic [7:0] index; 
      logic [1:0] offset; 
      logic [4:0] tag_in; 

      assign offset = address[1:0]; 
      assign index = address[9:2]; 
      assign tag_in = address[15:10]; 

    endmodule 

答えて

0

assignのRHSにブール演算子または算術演算子がないため、これらのステートメントは、address入力の一部選択のための便利な名前の参照になります。これは、モジュールをインスタンス化してポートに接続するときと同じことです。信号は名前の変更を行うことができます。実際には、あなたは、このモジュールをインスタンス化するときには、まだaddressポートを接続

input .address({tag_in,index,offset}), 

としてあなたaddress入力ポート宣言を書かれている可能性が持っている可能性がありますが、モジュール内で、それだけでtag_in、インデックスを持っている、とまで利用できるオフセット参照、アドレスではありません。

SystemVerilogにはalias構造があり、別の信号セットを宣言してassignステートメントを使用する代わりに、信号の便利な名前を作成していることがより明白になります。

alias offset = address[1:0]; 
alias index = address[9:2]; 
alias tag_in = address[15:10]; 
1

上記のコードは単に、ワイヤーのように合成されます。 私が何をデわかりませんあなたが作成しようとしている多重化ロジックですが、一般にデマルチプレクサの場合は、どの出力を有効にするべきかをデコードする選択信号が必要です。

1:2デマルチプレクサロジックの例は以下に示す。

module demux_1_2(
    input [3:0] Q, 
    input Sel, 
    output reg [3:0] D1, 
    output reg [3:0] D2 
    ); 

[email protected](*) 
begin 
    if(~Sel) begin 
     D1 = Q; 
     D2 = 0; 
    end else begin 
     D1 = 0; 
     D2 = Q; 
    end 
end 

endmodule 
+0

ここで私の質問は、ハードウェアがアドレス信号の異なるビットを分離するためにどのようなロジックを使用するのでしょうか? –

+0

@ShankhadeepMukerji Harwareは、コードにロジックがないため、ロジックを使用する必要はありません。 2本のワイヤを相互接続するのと同じです。 –

+0

はalways_combを使用しても、割り当てと同じことが推測されましたか? –

関連する問題