程式計數模組 PcTick -- Verilog + Icarus

Verilog

基本語法

型態

全域變數

基本元件

多樣的寫法

指定

assign

always

initial

運算式

分枝

迴圈

模組

函數

Task

陣列

輸出入

觀察

真值表

測試程式

訊息顯示

注意事項

模擬程序

硬體工程

程式範例

Xor

Xor3

全加器

加法器

加減器

快速加法器

乘法器

ALU

閂鎖器

脈衝偵測

計數器

多工器

暫存器群

記憶體

延遲問題

浮點數

狀態機

程式計數器

CPU0-Mini

CPU0

pipeline

工具

QuartusII

Icarus

Veritek

訊息

相關網站

參考文獻

最新修改

簡體版

English

Verilog 程式碼:pcTick.v

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
            $monitor("%4dns %8x %1x", $stime, pc, tick);
        end
    end
endmodule

module main;
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;
  #100 reset=0;
  #2000 $finish;
end

always #50 clock=clock+1;
endmodule

Icarus 執行結果

D:\oc\cpu0m>iverilog pcTick.v -o pcTick

D:\oc\cpu0m>vvp pcTick
 150ns 00000000 1
 250ns 00000000 2
 350ns 00000000 3
 450ns 00000000 4
 550ns 00000000 5
 650ns 00000004 0
 750ns 00000004 1
 850ns 00000004 2
 950ns 00000004 3
1050ns 00000004 4
1150ns 00000004 5
1250ns 00000008 0
1350ns 00000008 1
1450ns 00000008 2
1550ns 00000008 3
1650ns 00000008 4
1750ns 00000008 5
1850ns 0000000c 0
1950ns 0000000c 1
2050ns 0000000c 2

Facebook

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