System verilog &引用;“非法引用网络”;systemverilog中出错-尝试设计简单仲裁器
下面是我为simpleArbiterSystem verilog &引用;“非法引用网络”;systemverilog中出错-尝试设计简单仲裁器,system-verilog,System Verilog,下面是我为simpleArbiter module arbiter(clk,rst,req,grnt,req_val); input clk; input rst; input [3:0] req; input [3:0] req_val; output [3:0] grnt; int j; int i; parameter A = 2'd0; parameter B = 2'd1; paramet
module arbiter(clk,rst,req,grnt,req_val);
input clk;
input rst;
input [3:0] req;
input [3:0] req_val;
output [3:0] grnt;
int j;
int i;
parameter A = 2'd0;
parameter B = 2'd1;
parameter C = 2'd2;
parameter D = 2'd3;
logic [1:0] current_state;
logic [1:0] next_state;
always_comb
begin
case (current_state)
D:
begin
grnt = 4'b1000;
j = 0;
for (i = 0; i<4;i++) begin
if (req[(j+i) % 4 ] == 1)
break;
end
case (i)
0: next_state = A;
1: next_state = B;
2: next_state = C;
3: next_state = D;
endcase
end
A:
begin
j = 1;
grnt = 4'b001;
for (i = 0; i<4;i++) begin
if (req[(i+j) % 4] == 1)
break;
end
case (i)
0: next_state = A;
1: next_state = B;
2: next_state = C;
3: next_state = D;
endcase
end
B:
begin
j = 2;
grnt = 4'b0010;
for (i = 0; i<4;i++ ) begin
if (req[(i+j) % 4] == 1)
break;
end
case (i)
0: next_state = A;
1: next_state = B;
2: next_state = C;
3: next_state = D;
endcase
end
C:
begin
j = 3;
grnt = 4'b0100;
for (i = 0; i<4;i++ ) begin
if (req[(i+j)% 4] == 1)
break;
end
case (i)
0: next_state = A;
1: next_state = B;
2: next_state = C;
3: next_state = D;
endcase
end
endcase
end
endmodule
always_ff@(posedge clk)
begin
current_state <= next_state;
end
endmodule
模块仲裁器(时钟、rst、请求、grnt、请求值);
输入时钟;
输入rst;
输入[3:0]请求;
输入[3:0]请求值;
输出[3:0]grnt;
int j;
int i;
参数A=2'd0;
参数B=2'd1;
参数C=2'd2;
参数D=2'd3;
逻辑[1:0]当前_状态;
逻辑[1:0]下一个_状态;
总是用梳子
开始
案例(当前状态)
D:
开始
grnt=4'b1000;
j=0;
对于(i=0;i,您的代码有两个问题
您已经在代码中使用了两次endmodule
语句。只需在第86行注释掉一条即可
您没有为grnt
变量定义数据类型,因此默认情况下它是wire
,并且wire
不能在always块中使用,因此将其声明为reg
/逻辑
您的代码有两个问题
您已经在代码中使用了两次endmodule
语句。只需在第86行注释掉一条即可
您没有为grnt
变量定义数据类型,因此默认情况下它是wire
,并且wire
不能在always块中使用,因此将其声明为reg
/逻辑
thnx很多,它已编译,但功能不好-它没有改变状态-你能看到问题所在吗?初始当前状态值是多少?重置时它的值是多少?这可能会发生,因为你的设计中没有重置逻辑。thnx很多,它已编译,但它功能不好-它没有改变状态-你能看到问题?初始当前状态值是多少?重置时的值是多少?这可能会发生,因为您的设计中没有重置逻辑。