我需要创建一个 Verilog 模块,它接受时钟、复位、指令字的立即值(最低有效字节)和 ALU 的零输出作为输入,并为输出。分配说要注意,在这个架构中,当我们有一个分支时,下一个 PC 值应该是当前 PC 值加上从分支指令中提取的偏移量。偏移量用二进制补码表示,因此分支目标的范围是从 PC - 128 到 PC + 127。注意 PC 的值不应超过 0xFF,因为我们有一个 256 深的指令存储器。您无需在硬件中检查这种情况。
这是我到目前为止所拥有的,但我知道这是不完整的,我不确定如何处理立即数或者我是否需要为分支指令添加一些东西。有什么帮助/建议吗?
module pc(input clk,
input rst,
input [7:0] immediate,
input alu_output,
output [7:0] pc)
reg [7:0] pc;
always@(posedge clk)
begin
if(rst)
begin
pc <= 0;
end
else
begin
pc <= pc + 1;
end
end
endmodule