前进律动者———PC计数器 介绍 我们要写的程序在编译器便后成为了一串串cpu指令集存在ram中,我们需要一个计数器产生地址数据给ram寄存器从而取出指令,这个计数器就是PC(program counter)寄存器,简称程序计数器。
引脚介绍
clk 时钟信号线,决定了cpu的频率
reset 复位信号,高脉冲后计数器归零
model_sel 0为步进模式1为擦写模式
load_alue 擦写模式时载入的值
pc 向ram输出地址
功能介绍 PC计数器有两个模式,步进模式和擦写模式,步进模式下,PC计数器在时钟上升沿时加一,擦写模式下,PC计数器在时钟上升沿时被载入load_value。向ram输出地址值
代码实现 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 module pc_counter( input reg clk, input reg reset, input reg model_sel, input reg [7 :0 ] load_value, output reg [7 :0 ] pc ); always @(posedge clk or posedge reset) begin if (reset) begin pc <= 8'b0 ; end else if (model_sel) begin pc <= load_value; end else begin pc <= pc + 1 ; end end endmodule
测试代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 `timescale 1ns / 1ps module pc_counter_tb;reg clk;reg reset;reg model_sel;reg [7 :0 ] load_value;wire [7 :0 ] pc;initial begin clk = 0 ; reset = 0 ; model_sel = 0 ; load_value = 0 ; #10 reset = 1 ; #10 reset = 0 ; #20 model_sel = 0 ; #100 ; #10 model_sel = 1 ; load_value = 8'd55 ; #10 model_sel = 0 ; #100 ; #10 $finish ; end always #5 clk = !clk;endmodule pc_counter uut ( .clk (clk), .reset (reset), .model_sel (model_sel), .load_value (load_value), .pc (pc) );
结语 PC计数器的频率决定了整个cpu的频率,并且与判决器相连实现的跳转功能。
整点二次元