请帮我给这段代码加上完整注释always @(negedge clock or negedge reset)// status_change process, status machine begin if(reset==1'b0) status=3'b000;// valid reset signal is 0 else if(clock==1'b0)// descend edge of clock case (status) 3'b000: begin status=1; MAR=PC; case(Ry) 2'b00: A=R0; 2'b01: A=R1; 2'b10: A=R2;//补充完整 2'b11: A=R3; endcase end 3'b001: begin if(OP==sto) status=1; else if ((OP==swa)|| (OP==Jmp)|| (OP == jz) || (OP == rea) || (OP == wri))//补充完整 status=2; else status=0; end 3'b010: begin if(OP==swa) status=0; else if ((OP==Jmp)||(OP==rea)||(OP==wri)) begin MAR = IR[11:0]; status=3; end else if((OP==jz)&& (R0[7:0] == 8'b0000_0000))//条件转移 begin MAR = IR[11:0]; status=3; end else begin MAR = PC; status=3; end end 3'b011: begin if(OP == Jmp) status=0; else if(OP == jz||(R0[7:0] == 8'b0000_0000)) status=0; else if(OP == wri||OP == rea) begin MAR = PC; status=4; end end 3'b100: status=0; endcase end
时间: 2023-08-22 07:07:58 浏览: 150
Verilog.rar_VHDL/FPGA/Verilog_Visual_C++_
// 这里定义了一个时序逻辑,当时钟下降沿或复位信号下降沿触发时执行
always @(negedge clock or negedge reset)
// 状态变化处理,状态机开始
begin
// 如果复位信号为 1,将状态设置为 000
if(reset==1'b0)
status=3'b000;// valid reset signal is 0
// 如果为时钟下降沿触发
else if(clock==1'b0)// descend edge of clock
// 根据当前状态进行不同的处理
case (status)
// 如果当前状态为 000
3'b000:
begin
// 将状态设置为 1
status=1;
// 将 MAR 寄存器设置为 PC 寄存器的值
MAR=PC;
// 根据 Ry 寄存器的值,将 A 寄存器设置为 R0-R3 寄存器中的值
case(Ry)
2'b00: A=R0;
2'b01: A=R1;
2'b10: A=R2;//补充完整
2'b11: A=R3;
endcase
end
// 如果当前状态为 001
3'b001:
begin
// 如果操作码为 sto,将状态设置为 1
if(OP==sto)
status=1;
// 如果操作码为 swa、Jmp、jz、rea、wri 中的任意一个,将状态设置为 2
else if ((OP==swa)|| (OP==Jmp)|| (OP == jz) || (OP == rea) || (OP == wri))//补充完整
status=2;
// 否则状态设置为 0
else
status=0;
end
// 如果当前状态为 010
3'b010:
begin
// 如果操作码为 swa,将状态设置为 0
if(OP==swa)
status=0;
// 如果操作码为 Jmp、rea、wri 中的任意一个,将 MAR 寄存器设置为 IR 寄存器的低 12 位,并将状态设置为 3
else if ((OP==Jmp)||(OP==rea)||(OP==wri))
begin
MAR = IR[11:0];
status=3;
end
// 如果操作码为 jz,并且 R0 寄存器的低 8 位为 0,将 MAR 寄存器设置为 IR 寄存器的低 12 位,并将状态设置为 3
else if((OP==jz)&& (R0[7:0] == 8'b0000_0000))//条件转移
begin
MAR = IR[11:0];
status=3;
end
// 否则将 MAR 寄存器设置为 PC 寄存器的值,并将状态设置为 3
else
begin
MAR = PC;
status=3;
end
end
// 如果当前状态为 011
3'b011:
begin
// 如果操作码为 Jmp,将状态设置为 0
if(OP == Jmp)
status=0;
// 如果操作码为 jz,并且 R0 寄存器的低 8 位为 0,或者操作码为 rea 或 wri,将 MAR 寄存器设置为 PC 寄存器的值,并将状态设置为 4
else if(OP == jz||(R0[7:0] == 8'b0000_0000))
status=0;
else if(OP == wri||OP == rea)
begin
MAR = PC;
status=4;
end
end
// 如果当前状态为 100,将状态设置为 0
3'b100:
status=0;
endcase
end
阅读全文