2012-04-02 17 views

答えて

3

always @*は、alwaysブロックの1つである。組合せ論理を推論するために使用されます。

always @(posedge clock)は、順次ロジックを推論するために使用されます。

詳細については、IEEE標準(1800-2009など)を参照してください。

0

これらは異なるです!私は彼らが同じだと思っていました。そうではありません。

常に@(*)は何も意味しませんが、コンパイラは自動的にそれを記入します。それが組み合わせロジックの場合は、それを使用してください!だからあなたは何も忘れずに機能を失敗させません。

常には、常に文章が実行されることを意味します。遅延がなければ、システムはを停止し、シミュレーション結果は得られません!とてもうるさい。

たとえば、FSMの次の状態ロジック部分では、常に@(*)ではなく常に使用すると動作しません。

以下は、私が書いた簡単なシーケンス検出器です。あなたが望むなら、それを実行するためにtbを書くことができます。

`タイムスケール1nsの/ 10PS

モジュールseq_detect3(//順序10110 を検出し、//シーケンス入力 CLK、//クロックの正エッジが RST、//リセット、アクティブハイ同期 一致をtrigged //アウトマッチ、一致する "1" );

input in, clk, rst; 
output match; 
wire in, clk, rst; 
reg match; 
reg [5:0] state, next_state; 
parameter IDLE = 6'b000001;  //no bit matched 
parameter STATE1 = 6'b000010; //first 1 bit matched 
parameter STATE2 = 6'b000100; //first 2 bits matched 
parameter STATE3 = 6'b001000; //first 3 bits matched 
parameter STATE4 = 6'b010000; //first 4 bits matched 
parameter STATE5 = 6'b100000; //all 5 bits matched 

//-----------S.M. & O.F.L.----------- 
always @ (posedge clk) begin 
    if(rst) begin 
     state <= IDLE; 
     match <= #1 0; 
    end 
    else begin 
     state <= next_state; 
     if(state == STATE5) begin 
     match <= #1 1; 
     end 
     else begin 
      match <= #1 0; 
     end 
    end 
end 

//-----------next state logic----------- 
always @(*) begin //Can not replaced by always here!! 
    case(state) 
     IDLE: if(in) next_state = STATE1; //0 keep, 1 next 
         else next_state = IDLE; 
     STATE1: if(in) next_state = STATE1; //0 next, 1 keep 
         else next_state = STATE2; 
     STATE2: if(in) next_state = STATE3; //0 idle, 1 next 
         else next_state = IDLE; 
     STATE3: if(in) next_state = STATE4; //0 s2, 1 next 
         else next_state = STATE2; 
     STATE4: if(in) next_state = STATE1; //0 next, 1 s1 
         else next_state = STATE5; 
     STATE5: if(in) next_state = STATE3; //0 idle, 1 s3 
         else next_state = IDLE; 
     default: next_state = IDLE; 
    endcase 
end 

ENDMODULE