Pipeline 架構的範例 1

Verilog

基本語法

型態

全域變數

基本元件

多樣的寫法

指定

assign

always

initial

運算式

分枝

迴圈

模組

函數

Task

陣列

輸出入

觀察

真值表

測試程式

訊息顯示

注意事項

模擬程序

硬體工程

程式範例

Xor

Xor3

全加器

加法器

加減器

快速加法器

乘法器

ALU

閂鎖器

脈衝偵測

計數器

多工器

暫存器群

記憶體

延遲問題

浮點數

狀態機

程式計數器

CPU0-Mini

CPU0

pipeline

工具

QuartusII

Icarus

Veritek

訊息

相關網站

參考文獻

最新修改

簡體版

English

程式:pipeline.v

`define IDLE     1'b0     // 閒置中
`define WAIT_ACK 2'b1     // 等待回應

module timer(input clock);
reg [7:0] count=0;
    always @(posedge clock) begin
        count = count + 1;
        $display("%d:count=%d", $stime, count);
    end
endmodule

module pipe(input clock, iReady, output myAck, output oReady, input nextAck, input [3:0] id);
reg oReady=0, myAck=0, state=`IDLE;
    always @(posedge clock) begin
        case (state) 
            `IDLE: begin
                if (iReady) begin
                    $display("%-8d:p%x iReady", $stime, id);
                    #20;
                    state <= `WAIT_ACK;
                    myAck <= 1;
                    oReady <= 1;
                    $display("%-8d:p%x ack, oReady", $stime, id);
                    #10;
                end
            end
            `WAIT_ACK:begin
                if (nextAck) begin
                    $display("%-8d:p%x nextAck", $stime, id);
                    #20;
                    oReady <= 0;
                    state <= `IDLE;
                    #10;
                end
                myAck <= 0;
            end
        endcase
    end
endmodule

module pipeline;
reg clock;
wire p1Ack, p2Ack, p3Ack, p1oReady, p2oReady, p3oReady;

pipe p1(clock, 1,          p1Ack, p1oReady, p2Ack,    1);
pipe p2(clock, p1oReady, p2Ack, p2oReady, p3Ack,     2);
pipe p3(clock, p2oReady, p3Ack, p3oReady, 1,         3);

initial begin
  clock = 0;
  #1000 $finish;
end

always #10 begin
  clock=clock+1;
end

endmodule

執行結果

D:\oc\cpu0p>iverilog pipeline.v -o pipeline

D:\oc\cpu0p>vvp pipeline
10      :p1 iReady
30      :p1 ack, oReady
50      :p2 iReady
70      :p2 ack, oReady
90      :p1 nextAck
90      :p3 iReady
110     :p3 ack, oReady
130     :p3 nextAck
130     :p1 iReady
130     :p2 nextAck
150     :p1 ack, oReady
170     :p2 iReady
190     :p2 ack, oReady
210     :p1 nextAck
210     :p3 iReady
230     :p3 ack, oReady
250     :p3 nextAck
250     :p1 iReady
250     :p2 nextAck
270     :p1 ack, oReady
290     :p2 iReady
310     :p2 ack, oReady
330     :p1 nextAck
330     :p3 iReady
350     :p3 ack, oReady
370     :p3 nextAck
370     :p1 iReady
370     :p2 nextAck
390     :p1 ack, oReady
410     :p2 iReady
430     :p2 ack, oReady
450     :p1 nextAck
450     :p3 iReady
470     :p3 ack, oReady
490     :p3 nextAck
490     :p1 iReady
490     :p2 nextAck
510     :p1 ack, oReady
530     :p2 iReady
550     :p2 ack, oReady
570     :p1 nextAck
570     :p3 iReady
590     :p3 ack, oReady
610     :p3 nextAck
610     :p1 iReady
610     :p2 nextAck
630     :p1 ack, oReady
650     :p2 iReady
670     :p2 ack, oReady
690     :p1 nextAck
690     :p3 iReady
710     :p3 ack, oReady
730     :p3 nextAck
730     :p1 iReady
730     :p2 nextAck
750     :p1 ack, oReady
770     :p2 iReady
790     :p2 ack, oReady
810     :p1 nextAck
810     :p3 iReady
830     :p3 ack, oReady
850     :p3 nextAck
850     :p1 iReady
850     :p2 nextAck
870     :p1 ack, oReady
890     :p2 iReady
910     :p2 ack, oReady
930     :p1 nextAck
930     :p3 iReady
950     :p3 ack, oReady
970     :p3 nextAck
970     :p1 iReady
970     :p2 nextAck
990     :p1 ack, oReady

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License