关于verilog中armcpu实现中的始终块
我正在尝试在verilog的ARM CPU中实现寄存器文件。 我刚接触verilog,所以遇到了麻烦 我想让寄存器文件在它的第15个寄存器中保存值PC+8,在寄存器编号0中保存开始时的值0,这样寄存器文件能够在输入一个读取寄存器为15时,将PC+8作为输出,依此类推 目前,我已经编写了这样的代码关于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
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美元,依此类推