错误加载设计ModelSim 10.1

问题描述 投票:-1回答: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

如何解决这些错误?

verilog modelsim
1个回答
0
投票

一个模块的输出必须驱动一个 wire 不是 reg. 你不应该分配 qcounter.

Flipflap_TN,顺序逻辑应该使用非阻塞性赋值(<=),而不是阻挡(=)

菊花链计数器(其中一个翻牌的q是另一个翻牌时钟的函数)不推荐用于实际设计。它们的时序性不好,而且可能会有故障输出。这对于学习来说是可以的,但最好是所有的flop都由完全相同的时钟驱动。

© www.soinside.com 2019 - 2024. All rights reserved.