用verilog、Modelsim制作计数器
我想用verilog制作循环计数器用verilog、Modelsim制作计数器,verilog,counter,modelsim,Verilog,Counter,Modelsim,我想用verilog制作循环计数器 module rr_arbiter ( clk, // positive edge trigger reset, // negative edge trigger req0, req1, req2, req3, grant0, grant1, grant2, grant3, priority, priority_req); input clk, reset; input req0, req1, req2, req3; input priority; in
module rr_arbiter (
clk, // positive edge trigger
reset, // negative edge trigger
req0, req1, req2, req3,
grant0, grant1, grant2, grant3,
priority, priority_req);
input clk, reset;
input req0, req1, req2, req3;
input priority;
input [1:0] priority_req;
output grant0, grant1, grant2, grant3;
reg x
always(posedge clk or negedge reset) begin
pirority_req = priority;
if (reset) begin
grant0 <= 1'b0;
grant1 <= 1'b0;
grant2 <= 1'b0;
grant3 <= 1'b0;
end
else
begin
if(priority == 1)
if (priority req == 2b'00)
begin
x=1;
grant0 <= (grant0*(~x))+(grant1*x);
x=0;
grant0 <= (grant0*(~x))+(grant1*x);
grant1 <= grant2;
grant2 <= grant3;
grant3 <= grant1;
// counter 0012300123
end
else if (priority req == 2b'01)
begin
grant0 <= grant1;
x=1;
grant1 <= (grant1*(~x))+(grant2*x);
x=0;
grant1 <= (grant1*(~x))+(grant2*x);
grant2 <= grant3;
grant3 <= grant1;
// counter 0112301123
end
else if (priority req == 2b'10)
begin
grant0 <= grant1;
grant1 <= grant2;
x=1;
grant2 <= (grant2*(~x))+(grant3*x);
x=0;
grant2 <= (grant2*(~x))+(grant3*x);
grant3 <= grant1;
// counter 0122301223
end
else if (priority req == 2b'11)
begin
grant0 <= grant1;
grant1 <= grant2;
grant2 <= grant3;
x=1;
grant3 <= (grant3*(~x))+(grant1*x);
x=0;
grant3 <= (grant3*(~x))+(grant1*x);
// counter 0123301233
end
end
else
begin
grant0 <= ~grant2 * grant3;
grant1 <= grant0;
grant2 <= grant1;
grant3 <= grant2;
//counter 01230123
end
end
end
end
endmodule
模块rr\U仲裁器(
clk,//正边缘触发器
复位,//负边缘触发器
需求0,需求1,需求2,需求3,
grant0,grant1,grant2,grant3,
优先级,优先级(req);
输入时钟,复位;
输入req0、req1、req2、req3;
输入优先级;
输入[1:0]优先级要求;
输出grant0、grant1、grant2、grant3;
注册号x
始终(posedge clk或negedge重置)开始
优先级=优先级;
如果(重置)开始
grant0第17行的错误消息是不言自明的。它期待一个“;”。你少了一个“;”第15行
如果错误消息看起来毫无意义,请始终注视屏幕,查看问题是否出在前一行。第17行的错误消息是不言自明的。它期待一个“;”。你少了一个“;”第15行
如果错误消息似乎没有任何意义,请始终向上看屏幕,看看问题是否出在前一行。Thx。我找到并修复了它,但我真正想做的是一个RR计数器,它根本不工作。你能帮我吗?应该是这样的:当重置=1时,所有授权=0优先级==0计数器:01 2 3 0 1 2 3…优先级==1和优先级需求==0计数器:01 2 3 0 1 2 3…优先级==1和优先级需求==1计数器:01 1 2 0 1 2 3…优先级=1和优先级需求==2计数器:01 2 3 0 1 2 2 2 3…优先级=1和优先级=3计数器:01 2 3 3 0 1 2 3 3 3…我如何才能使该计数器系统。。!你需要把问题分解开来,想想你需要什么样的障碍。具有两个状态以跟踪重复计数的FSM;计数0-3但与FSM交互以进行重复计数的计数器;一个4-2编码器,用于将req0-req3转换为两位二进制数,以便与计数器输出进行比较(您需要考虑如果多个req为1,该怎么办);2-4解码器,用于将计数器输出转换为grant0-grant3。如果你像这样把问题分解,你可能会发现你的头脑比试图在一个巨大的始终block.Thx中编码要容易得多。我找到并修复了它,但我真正想做的是一个RR计数器,它根本不工作。你能帮我吗?应该是这样的:当重置=1时,所有授权=0优先级==0计数器:01 2 3 0 1 2 3…优先级==1和优先级需求==0计数器:01 2 3 0 1 2 3…优先级==1和优先级需求==1计数器:01 1 2 0 1 2 3…优先级=1和优先级需求==2计数器:01 2 3 0 1 2 2 2 3…优先级=1和优先级=3计数器:01 2 3 3 0 1 2 3 3 3…我如何才能使该计数器系统。。!你需要把问题分解开来,想想你需要什么样的障碍。具有两个状态以跟踪重复计数的FSM;计数0-3但与FSM交互以进行重复计数的计数器;一个4-2编码器,用于将req0-req3转换为两位二进制数,以便与计数器输出进行比较(您需要考虑如果多个req为1,该怎么办);2-4解码器,用于将计数器输出转换为grant0-grant3。如果你像这样把问题分解,你可能会发现,比起试图在一个巨大的始终块中编码,你更容易把问题解决。