gpt4 book ai didi

syntax-error - 为什么在赋值语句的左值中出现语法错误?

转载 作者:行者123 更新时间:2023-12-03 08:24:56 25 4
gpt4 key购买 nike

我在MIPS解码器的此代码中找不到语法错误。我目前在default case中,它给了我错误

Decoder.v:104: syntax error.


Decoder.v:106: Syntax in assignment statement l-value


这是代码:
module Decoder(
input [31:0] instr, // Instruktionswort
input zero, // Liefert aktuelle Operation im Datenpfad 0 als Ergebnis?
output reg memtoreg, // Verwende ein geladenes Wort anstatt des ALU-Ergebis als Resultat
output reg memwrite, // Schreibe in den Datenspeicher
output reg dobranch, // Führe einen relativen Sprung aus
output reg alusrcbimm, // Verwende den immediate-Wert als zweiten Operanden
output reg [4:0] destreg, // Nummer des (möglicherweise) zu schreibenden Zielregisters
output reg regwrite, // Schreibe ein Zielregister
output reg dojump, // Führe einen absoluten Sprung aus
output reg [2:0] alucontrol // ALU-Kontroll-Bits
);
// Extrahiere primären und sekundären Operationcode
wire [5:0] op = instr[31:26];
wire [5:0] funct = instr[5:0];

always @*
begin
case (op)
6'b000000: // Rtype Instruktion
begin
regwrite = 1;
destreg = instr[15:11];
alusrcbimm = 0;
dobranch = 0;
memwrite = 0;
memtoreg = 0;
dojump = 0;
case (funct)
6'b100001: alucontrol = 101; // TODO // Addition unsigned
6'b100011: alucontrol = 001; // TODO // Subtraktion unsigned
6'b100100: alucontrol = 111; // TODO // and
6'b100101: alucontrol = 110; // TODO // or
6'b101011: alucontrol = 000; // TODO // set-less-than unsigned
default: alucontrol = 011; // TODO // undefiniert
endcase
end
6'b100011, // Lade Datenwort aus Speicher
6'b101011: // Speichere Datenwort
begin
regwrite = ~op[3];
destreg = instr[20:16];
alusrcbimm = 1;
dobranch = 0;
memwrite = op[3];
memtoreg = 1;
dojump = 0;
alucontrol = 011; // TODO // Addition effektive Adresse: Basisregister + Offset
end
6'b000100: // Branch Equal
begin
regwrite = 0;
destreg = 5'bx;
alusrcbimm = 0;
dobranch = zero; // Gleichheitstest
memwrite = 0;
memtoreg = 0;
dojump = 0;
alucontrol = 001; // TODO // Subtraktion
end
6'b001001: // Addition immediate unsigned
begin
regwrite = 1;
destreg = instr[20:16];
alusrcbimm = 1;
dobranch = 0;
memwrite = 0;
memtoreg = 0;
dojump = 0;
alucontrol = 101; // TODO // Addition
end
6'b000010: // Jump immediate
begin
regwrite = 0;
destreg = 5'bx;
alusrcbimm = 0;
dobranch = 0;
memwrite = 0;
memtoreg = 0;
dojump = 1;
alucontrol = 011; // TODO
end
6'b001111: //Load upper immediate
begin
regwrite = 1;
destres = intsr[20:16];
alusrcbimm = 1;
dobranch = 0;
memwrite = 1;
memtoreg = 0;
dojump = 0;
alucontrol = 011; // Bitshift.
end
6'b001101: //Bitwise or immediate
begin
regwrite = 1;
destreg = instr[20:16];
alusrcbimm = 1;
dobranch = 0;
memwrite = 0;
memtoreg = 0;
dojump = 0;
alucontrol = 110; //Bitwise or.
default: // Default Fall
begin
regwrite = 1'bx;
destreg = 5'bx;
alusrcbimm = 1'bx;
dobranch = 1'bx;
memwrite = 1'bx;
memtoreg = 1'bx;
dojump = 1'bx;
alucontrol = 011; // TODO
end
endcase
end
endmodule

最佳答案

我收到2个编译错误。
第一种是由于end之前缺少default语句:

        6'b001101: //Bitwise or immediate
begin
regwrite = 1;
destreg = instr[20:16];
alusrcbimm = 1;
dobranch = 0;
memwrite = 0;
memtoreg = 0;
dojump = 0;
alucontrol = 110; //Bitwise or.
end // <-------- This was missing.
default: // Default Fall
通过更改以下内容可修复第二个编译错误:
                destres = intsr[20:16];
// ^ ^
至:
                destreg = instr[20:16];

关于syntax-error - 为什么在赋值语句的左值中出现语法错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62681456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com