关于verilog中armcpu实现中的始终块

关于verilog中armcpu实现中的始终块,arm,verilog,cpu,Arm,Verilog,Cpu,我正在尝试在verilog的ARM CPU中实现寄存器文件。 我刚接触verilog,所以遇到了麻烦 我想让寄存器文件在它的第15个寄存器中保存值PC+8,在寄存器编号0中保存开始时的值0,这样寄存器文件能够在输入一个读取寄存器为15时,将PC+8作为输出,依此类推 目前,我已经编写了这样的代码 reg[31:0] register[15:0]; initial begin register[15] = register15;//register15 is the input

我正在尝试在verilog的ARM CPU中实现寄存器文件。 我刚接触verilog,所以遇到了麻烦

我想让寄存器文件在它的第15个寄存器中保存值PC+8,在寄存器编号0中保存开始时的值0,这样寄存器文件能够在输入一个读取寄存器为15时,将PC+8作为输出,依此类推

目前,我已经编写了这样的代码

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
reg[31:0]寄存器[15:0];
首字母
开始
寄存器[15]=寄存器15//寄存器15是保持PC+8为其值的输入
寄存器[0]=32'h00000000;
结束
始终@(posedge clk)
开始

outreg1所以,这看起来像是试图重新映射输入值的寄存器0。。。使用“A1…”作为贴图操纵器,将“寄存器15”设置为一组“outreg1…”

在这种情况下,不能使用
initial
块。初始块在模拟开始时仅运行一次,无法对输入更改作出反应。它们也不能合成。既然您说过“registerN”也是输入,那么最好创建两个不同的always_块

reg[31:0] register[15:0];   

always @* 
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
reg[31:0]寄存器[15:0];
始终@*
开始
寄存器[15]=寄存器15//寄存器15是保持PC+8为其值的输入
寄存器[0]=32'h00000000;
结束
始终@(posedge clk)
开始

outreg1所以,这看起来像是试图重新映射输入值的寄存器0。。。使用“A1…”作为贴图操纵器,将“寄存器15”设置为一组“outreg1…”

在这种情况下,不能使用
initial
块。初始块在模拟开始时仅运行一次,无法对输入更改作出反应。它们也不能合成。既然您说过“registerN”也是输入,那么最好创建两个不同的always_块

reg[31:0] register[15:0];   

always @* 
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
reg[31:0]寄存器[15:0];
始终@*
开始
寄存器[15]=寄存器15//寄存器15是保持PC+8为其值的输入
寄存器[0]=32'h00000000;
结束
始终@(posedge clk)
开始

你能提供一个关于A1,A2,….的提示吗。。。。?这些是变量吗?常数?您是否修改regtister15。。。在模块中?@Serge A1、A2是寄存器文件的输入,用于指定将哪个寄存器的值移交给outreg1和outreg2。如果A1是13,outreg1的值将为$13,因此您可以提供关于A1、A2等的提示吗。。。。?这些是变量吗?常数?您是否修改regtister15。。。在模块中?@Serge A1、A2是寄存器文件的输入,用于指定将哪个寄存器的值移交给outreg1和outreg2。如果A1为13,则outreg1的值为13美元,依此类推