加载设计 ModelSim 10.1 时出错
Error loading design ModelSim 10.1
我正在尝试使用 D 触发器异步重置创建一个计数器。
它编译成功,但这是我在 ModelSim 中模拟期间遇到的错误:
'error loading design'
在上面,我发现了另外四个错误:
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(48): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(49): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(50): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(51): Illegal output port connection for "'q' (1st connection)".
这是程序:
module Flipflap_TN(q,t,clk,reset);
input t,clk,reset;
output q;
reg q;
reg temp=0;
always@(negedge clk,negedge reset)
begin
if(reset)
begin
if(t==0)
temp=temp;
else
temp=~temp;
q=temp;
end
else
q=0;
end
endmodule
module counter(q,t,clk,m,reset);
input t,clk,m,reset;
output [3:0]q;
reg [3:0]q;
wire h0,h1,h2,h3;
xor(h0,clk,m);
xor(h1,q[0],m);
xor(h2,q[1],m);
xor(h3,q[2],m);
Flipflap_TN FTN1(q[0],t,h0,reset);
Flipflap_TN FTN2(q[1],t,h1,reset);
Flipflap_TN FTN3(q[2],t,h2,reset);
Flipflap_TN FTN4(q[3],t,h3,reset);
initial
begin
if(m==1 & q==4'b1111)
q=4'b0;
else if(m==0 & q==4'b1010)
q=4'b0;
end
endmodule
如何修复这些错误?
模块的输出必须驱动 wire
而不是 reg
。您不应该在 counter
.
内分配 q
在Flipflap_TN
中,顺序逻辑应该使用非阻塞赋值(<=
),而不是阻塞(=
)
不建议将菊花链计数器(其中一个触发器的 q 是另一个触发器的时钟的函数)用于实际设计。他们的时机不好,输出可能会出现故障。这对学习来说很好,但最好是所有触发器都由完全相同的时钟驱动。
我正在尝试使用 D 触发器异步重置创建一个计数器。 它编译成功,但这是我在 ModelSim 中模拟期间遇到的错误:
'error loading design'
在上面,我发现了另外四个错误:
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(48): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(49): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(50): Illegal output port connection for "'q' (1st connection)".
#
# ** Error: (vopt-3053) C:/modeltech64_10.1c/examples/project3.v(51): Illegal output port connection for "'q' (1st connection)".
这是程序:
module Flipflap_TN(q,t,clk,reset);
input t,clk,reset;
output q;
reg q;
reg temp=0;
always@(negedge clk,negedge reset)
begin
if(reset)
begin
if(t==0)
temp=temp;
else
temp=~temp;
q=temp;
end
else
q=0;
end
endmodule
module counter(q,t,clk,m,reset);
input t,clk,m,reset;
output [3:0]q;
reg [3:0]q;
wire h0,h1,h2,h3;
xor(h0,clk,m);
xor(h1,q[0],m);
xor(h2,q[1],m);
xor(h3,q[2],m);
Flipflap_TN FTN1(q[0],t,h0,reset);
Flipflap_TN FTN2(q[1],t,h1,reset);
Flipflap_TN FTN3(q[2],t,h2,reset);
Flipflap_TN FTN4(q[3],t,h3,reset);
initial
begin
if(m==1 & q==4'b1111)
q=4'b0;
else if(m==0 & q==4'b1010)
q=4'b0;
end
endmodule
如何修复这些错误?
模块的输出必须驱动 wire
而不是 reg
。您不应该在 counter
.
q
在Flipflap_TN
中,顺序逻辑应该使用非阻塞赋值(<=
),而不是阻塞(=
)
不建议将菊花链计数器(其中一个触发器的 q 是另一个触发器的时钟的函数)用于实际设计。他们的时机不好,输出可能会出现故障。这对学习来说很好,但最好是所有触发器都由完全相同的时钟驱动。