Memory 如何修复此语法错误:意外的整数?

Memory 如何修复此语法错误:意外的整数?,memory,verilog,Memory,Verilog,我尝试构建一个4位CPU,它可以实现ADD(000)、AND(001)、OR(010)、NOT(011)、SLT(100)、SM(101)、LM(110)和LI(111),我得到以下错误: 错误:(vlog-13069)D:/modelsim/examples/cpu.v(48):接近“=”:语法 错误,意外的“=”,应为++或-- 错误:(vlog-13069)D:/modelsim/examples/cpu.v(53):接近“3”:语法 错误,意外的整数 错误:(vlog-13069)D:/

我尝试构建一个4位CPU,它可以实现ADD(000)、AND(001)、OR(010)、NOT(011)、SLT(100)、SM(101)、LM(110)和LI(111),我得到以下错误:

错误:(vlog-13069)D:/modelsim/examples/cpu.v(48):接近“=”:语法 错误,意外的“=”,应为++或--

错误:(vlog-13069)D:/modelsim/examples/cpu.v(53):接近“3”:语法 错误,意外的整数

错误:(vlog-13069)D:/modelsim/examples/cpu.v(56):接近“and”:语法 错误、意外和错误

我怎样才能修好它

以下是我的Verilog代码:

module cpu(instruction, register0, register1, register2, register3,
            memory0, memory1, memory2, memory3, memory4, memory5, memory6, memory7,
            memory8, memory9, memory10, memory11, memory12, memory13, memory14, memory15, overflow);
input [8:0] instruction;
output [3:0] register0; output [3:0] register1; output [3:0] register2; output [3:0] register3;
output [3:0] memory0; output [3:0] memory1; output [3:0] memory2; output [3:0] memory3;
output [3:0] memory4; output [3:0] memory5; output [3:0] memory6; output [3:0] memory7;
output [3:0] memory8; output [3:0] memory9; output [3:0] memory10; output [3:0] memory11;
output [3:0] memory12; output [3:0] memory13; output [3:0] memory14; output [3:0] memory15;
output overflow;
//there are 8 kinds of op code for u to choose.
//u can save four nums in register, or save 16 nums in memory. there's also a num for u to check it's overflow or not

reg overflow;
reg [3:0] register [3:0];
reg [3:0] memory [15:0];
reg [1:0] rs, rt, rd;
reg [2:0] op;
//create four 4-bits registers, and sixteen 4-bits memories.
//rs, rt, rd are the addresses of the register or memory

reg [3:0] c, a, b, address;
reg [4:0] sum;
//a, b used to calculate the num stored in register or memory
//address is the address of memory
//for checking out the overflowing, we need 'sum' to be 5-bits

integer i;
initial
begin
    for (i = 0; i < 4; i = i + 1)
    register [i] = 4'b0000;
    for (i = 0; i < 16; i = i + 1)
    memory[i] = 4'b0000;
end
//initialize all the register and memory

//your code~
always@(*)begin
op = instruction[8:6];
rs = instruction[5:4];
rt = instruction[3:2];
rd = instruction[1:0];

case(op)
    3'b000:
    a = register[rs];
    b = register[rt];
    sum = a + b;
    overflow = sum[4];//if overflow is 1, then it does.
    register[rd] = sum;

    3'b001:
    a = register[rs];
    b = register[rt];
    and f0(c[0], a[0], b[0]);
    and f1(c[1], a[1], b[1]);
    and f2(c[2], a[2], b[2]);
    and f3(c[3], a[3], b[3]);
    register[rd] = c;

    3'b010:
    a = register[rs];
    b = register[rt];
    or f0(c[0], a[0], b[0]);
    or f1(c[1], a[1], b[1]);
    or f2(c[2], a[2], b[2]);
    or f3(c[3], a[3], b[3]);
    register[rd] = c;

    3'b011:
    a = register[rs];
    b = register[rt];
    not f0(c[0], a[0], b[0]);
    not f1(c[1], a[1], b[1]);
    not f2(c[2], a[2], b[2]);
    not f3(c[3], a[3], b[3]);
    register[rd] = c;

    3'b100:
    a = register[rs];
    b = register[rt];
    if(a < b) begin
    register[rd] = 4'b0001;end
    else begin
    register[rd] = 4'b0000;end

    3'b101:
    address = instruction[3:0];
    memory[address] = register[rs];//can i really write like this?

    3'b110:
    address = instruction[5:2];
    register[rd] = memory[address];//can i really write like this?

    3'b111:
    a = instruction[5:2];
    register[rd] = a;

endcase
end

assign register0 = register[0]; assign register1 = register[1];
assign register2 = register[2]; assign register3 = register[3];
assign memory0 = memory[0]; assign memory1 = memory[1];
assign memory2 = memory[2]; assign memory3 = memory[3];
assign memory4 = memory[4]; assign memory5 = memory[5];
assign memory6 = memory[6]; assign memory7 = memory[7];
assign memory8 = memory[8]; assign memory9 = memory[9];
assign memory10 = memory[10]; assign memory11 = memory[11];
assign memory12 = memory[12]; assign memory13 = memory[13];
assign memory14 = memory[14]; assign memory15 = memory[15];

endmodule

模块cpu(指令、寄存器0、寄存器1、寄存器2、寄存器3、,
记忆0,记忆1,记忆2,记忆3,记忆4,记忆5,记忆6,记忆7,
内存8、内存9、内存10、内存11、内存12、内存13、内存14、内存15、溢出);
输入[8:0]指令;
输出[3:0]寄存器0;输出[3:0]寄存器1;输出[3:0]寄存器2;输出[3:0]寄存器3;
输出[3:0]存储器0;输出[3:0]存储器1;输出[3:0]存储器2;输出[3:0]存储器3;
输出[3:0]存储器4;输出[3:0]存储器5;输出[3:0]存储器6;输出[3:0]存储器7;
输出[3:0]存储器8;输出[3:0]存储器9;输出[3:0]存储器10;输出[3:0]存储器11;
输出[3:0]存储器12;输出[3:0]存储器13;输出[3:0]存储器14;输出[3:0]存储器15;
输出溢出;
//有8种操作码供你选择。
//u可以在寄存器中保存四个NUM,或在内存中保存16个NUM。还有一个num供u检查是否溢出
reg溢出;
寄存器[3:0]寄存器[3:0];
reg[3:0]内存[15:0];
注册[1:0]rs、rt、rd;
reg[2:0]op;
//创建四个4位寄存器和十六个4位存储器。
//rs、rt、rd是寄存器或内存的地址
注册号[3:0]c、a、b、地址;
reg[4:0]总和;
//a、 b用于计算存储在寄存器或内存中的num
//地址是内存的地址
//为了检查溢出,我们需要'sum'为5位
整数i;
最初的
开始
对于(i=0;i<4;i=i+1)
寄存器[i]=4'b0000;
对于(i=0;i<16;i=i+1)
存储器[i]=4'b0000;
结束
//初始化所有寄存器和内存
//你的代码~
始终@(*)开始
op=指令[8:6];
rs=指令[5:4];
rt=指令[3:2];
rd=指令[1:0];
个案(op)
3'b000:
a=寄存器[rs];
b=寄存器[rt];
总和=a+b;
溢出=总和[4]//如果溢出为1,则为。
寄存器[rd]=总和;
3'b001:
a=寄存器[rs];
b=寄存器[rt];
f0(c[0],a[0],b[0]);
和f1(c[1],a[1],b[1]);
f2(c[2],a[2],b[2]);
和f3(c[3],a[3],b[3]);
寄存器[rd]=c;
3'b010:
a=寄存器[rs];
b=寄存器[rt];
或f0(c[0],a[0],b[0]);
或f1(c[1],a[1],b[1]);
或f2(c[2],a[2],b[2]);
或f3(c[3],a[3],b[3]);
寄存器[rd]=c;
3'b011:
a=寄存器[rs];
b=寄存器[rt];
不是f0(c[0],a[0],b[0]);
不是f1(c[1],a[1],b[1]);
不是f2(c[2],a[2],b[2]);
不是f3(c[3],a[3],b[3]);
寄存器[rd]=c;
3'b100:
a=寄存器[rs];
b=寄存器[rt];
如果(a
一个
案例中的多行
语句分支必须包含在
开始
结束
之间,例如

3'b000:
begin
  a = register[rs];
  b = register[rt];
  sum = a + b;
  overflow = sum[4];//if overflow is 1, then it does.
  register[rd] = sum;
end

谢谢你的回答!但这里仍然有一些问题