【发布时间】:2019-04-24 00:06:44
【问题描述】:
我正在尝试在 Verilog 中的 ARM CPU 中实现寄存器文件。 我对verilog很陌生,所以遇到了麻烦。
我想让寄存器文件在它的第 15 个寄存器中保存值 PC+8,在寄存器号 0 中保存值 0,以便寄存器文件在输入时能够将 PC+8 作为输出其中一个读寄存器是 15,依此类推。
目前,我已经编写了这样的代码
reg[31:0] register[15:0];
initial
begin
register[15] = register15;//register15 is the input holding PC+8 as it's value
register[0] = 32'h00000000;
end
always @(posedge clk)
begin
outreg1 <= register[A1];// outreg1,2 are outputs (values of register A1, A2)
outreg2 <= register[A2];
end
但是,当“注册读取”发生时,我想让这一切都发生在 clk 的 posedge 中。但是,如果我这样做,我是否必须将 always @(posedge clk) 中的所有语句都设为阻塞赋值 '=' 以使其按顺序进行并首先分配 15 和 0?
我对阻塞和解除阻塞分配的理解不是很清楚,所以我不确定这是否可行。
【问题讨论】:
-
您能否提供有关 A1、A2、...的提示?那些变量?常数?你修改了模块中的regtister15, ...的值吗?
-
@Serge A1, A2 是寄存器文件的输入,用于指定将哪个寄存器的值移交给 outreg1 和 outreg2。如果 A1 为 13,则 outreg1 的值为 13 美元,依此类推