2017-08-08 15 views
0

さまざまな入出力パスに対して異なる遅延を持つブロックをモデル化するのには助けが必要ですか? posedgeのA(立ち上がり遅延)及び5us negedge A(立下り遅延)組み合わせロジックのスキュー遅延のモデル化

B,C - > Y遅延が1USある10USのA->Y遅れて

input A; 
input [3:0] B, C; 
output [3:0] Y; 

Y = B xor C if A = 1 else Y = 0

(場合にのみ適用A = 1)

私の場合は、手続き的な方法を使用する必要があり、代入文が適合しない可能性があります。

+1

'specify'ブロックを使用してください。 – toolic

+0

は合成可能なモデルですか? – Serge

+0

@Sergeいいえ、これは合成可能なモデルではありません –

答えて

0

合成不可能なモデルの場合、#delay構造体と `timescaleとモデル遅延を組み合わせて使用​​できます。次のコードのようなもの

`timescale 1us/1us 

module delayModule(A,B,C,Y); 
    input A; 
    input [3:0] B, C; // this should probably be output 
    output [3:0] Y; 

    reg [3:0] tmpb, tmpy; 

    always @(posedge A) 
     #10us tmpb <= 1; 
    always @(negedge A) 
     #5us tmpb <= 0; 

    always @* begin 
    if (A == 1) 
     #1us tmpy =(B^C); 
    end 
    assign B = tmpb; 
    assign Y = tmpy; 

endmodule // delayModule 
+0

私はassign B = ...のようなステートメントはBが入力であるので合法だとは思わない?タイプミスはありますか? –

+0

@VinayakBhatそうですね、私はそれが 'output'でなければならないと思うし、おそらくOPのタイプミスですが、** **合法です。 – Serge

0

ここは私にとってうまくいくものです。

`timescale 1us/1ns 

module xor_w_enabled(input A, input B, input C, output Y); 
wire A_delayed; 
wire B_xor_C_delayed; 

assign #1 B_xor_C_delayed = B^C; 
assign #(10,5) A_delayed = A; 

assign Y = (A_delayed == 1) ? B_xor_C_delayed : 0; 

endmodule 

私に何かが不足している場合は教えてください。

+0

上記の作業はhttp://www.edaplayground.com/x/3q8bで見ることができます –

関連する問題