2016-12-02 9 views
0

私は入力ロジックシーケンスを持っており、私はそれを私のプログラムのどこかに追加するためにパラメータに変換したいと思っています。例えばsystemverilogで入力信号をパラメータに変更する方法は?

module myModule(input logic[7:0] SW, output logic[7:0] LEDR); 

    parameter shift = SW; 
    assign LEDR = SW[shift + 1: shift]; 

endmodule 

私はちょうど主要なアイデアを取得したい、それが正しい構文ではありません知っています。

答えて

0

として書き込むことができます。変数をパラメータに変換することはできません。パラメータの値は、精緻化後にロックされます。変数はシミュレーションまで値を持ちません。

Part-select(時にはレンジスライスと呼ばれる)は、必要なものを行う必要があります。詳細については、 Indexing vectors and arrays with +:を参照してください。

得られた値は常にここで0にされるのでSWスライス自体が意味を持たない有するが良い例である:

module myModule(input [8:0] IN, input [2:0] SW, output [1:0] LEDR); 
    assign LEDR = IN[SW +: 2]; 
endmodule 
+0

ありがとう、それは私の問題を解決しました。しかし、これはどのように許可されるのですか?私はインデックスブラケット '$ IN [SW +:2];にあったものは定数でなければならないと考えましたか?また、SWは実行時に変更できます。 – Developer

+0

':'を使用する場合は、両側を定数にする必要があります。 '+:'と ' - :'は異なります。左の場合は変数(開始インデックス)、右辺は依然として定数(幅と方向)でなければなりません。それは、IEEEの文書で引用されており、文書へのリンクは、私が私の答えに入れたリンクにあります。 – Greg

+0

オハイオ州大丈夫ですので、全体的な選択は一定でなければなりません。ありがとうございます。 – Developer

2

パラメータは定義上の時定数です。つまり、時間の経過とともに変化する式に基づいて価値を変えることはできません。

あなたが行うことができる方法は、パラメーターを必要としないようにモデルを変更することです。たとえば、コードを

module myModule(input logic[7:0] SW, output logic[7:0] LEDR); 
    assign LEDR = SW[SW +: 2]; 
endmodule 
+0

構文は '+:'、及び 'SW [SWは、+ 1] 'であります'SW [SW]'と同じ – Greg

+0

私の例を修正しました –

関連する問題