程式計數模組 (Program Counter)

電路設計

基本操作

基礎元件

加法器

注意事項

教學影片

觀察方法

DE2-70 板

LED 與開關

七段顯示器

Clock 時脈

程式計數器

跳躍指令

CPU0-Mini

UART

訊息

相關網站

參考文獻

最新修改

簡體版

English

電腦 CPU 的執行中有一個關鍵的模組,通常是控制模組的一部分,這部分主要有兩個計數器,一個是程式位址計數器 (Program Counter, PC),另一個是時脈技術器 (Tick)。

在 CPU 的運作上,每個指令通常被分為幾個基本動作,這種基本動作有時被稱為微指令,每個微指令都耗用一個時脈的時間。事實上所謂的微指令只是一堆開關的「on/off」控制而已,這種控制方式可以讓所有線路在一個時間可以充分運作,但是卻不會造成兩個資料同時在一條線路上流動的衝突狀況。

程式計數模組的用途主要就是控制時脈計數器 Tick 與程式計數器 PC 。我們設計了以下的程式技術模組範例,其中每個指令都佔用六個時脈,每經過六個時脈,程式計數器就會前進到下一個指令的位址。由於我們想設計的是一台 32 位元的電腦,每個指令都佔用 4 個 byte,所以下一個指令的位址將會是 PC + 4。

Verilog 主程式

module pcTick(input clock, reset, output reg [31:0] pc, 
             output reg [2:0] tick);
    always @(posedge clock) begin
        if (reset) 
          begin
            pc = 0;
            tick = 0;
          end
        else begin
            tick = tick+1;
            if (tick == 6) begin
                tick = 0;
                pc = pc+4;
            end
        end
    end
endmodule

Verilog 測試模組

`timescale 1ns/10ps

module pcTickTest;
reg clock;
reg reset;
wire [2:0] tick;
wire [31:0] pc;

pcTick DUT (.clock(clock), .reset(reset), .pc(pc), .tick(tick));

initial
begin
  clock = 0;
  reset = 1;
end

initial #100 reset = 0;

always #50 clock=clock+1;

endmodule

執行結果

pcTickWave.jpg

Facebook

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