Memory 如何修复此语法错误:意外的整数?
我尝试构建一个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代码: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:/
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
谢谢你的回答!但这里仍然有一些问题