无法链接verilog模块

时间:2017-04-05 13:36:38

标签: verilog

我试图编写地址生成单元的代码。代码如下:

module access3x3(clk, addr, dout);

input clk;
output [16:0] addr;
output [7:0] dout;

reg [16:0] addr;

reg clk1;
wire [3:0] count;

wire [16:0] addr_reg [2:0];

wire val;
wire [7:0] val1;

assign val=0;
assign val1=0;
assign addr_reg[0]=0;

initial
begin
    addr=0;
    clk1=1;
end

inputhex image(.clka(clk), .wea(val), .addra(addr), .dina(val1), 
.douta(dout));
counter1 count64516(.clk(clk1), .dout(addr_reg[0]));
counter9 count9(.clk(clk), .dout(count));
adder256 row2(.din(addr_reg[0]), .dout(addr_reg[1]), .clk(clk));
adder256 row3(.din(addr_reg[1]), .dout(addr_reg[2]), .clk(clk));

always@(negedge clk)
begin

case(count)
0: addr=(addr_reg[0]+1'b0); 
1: addr=(addr_reg[0]+2'd1);
2: addr=(addr_reg[0]+2'd2);
3: addr=(addr_reg[1]+1'b0);
4: addr=(addr_reg[1]+2'd1);
5: addr=(addr_reg[1]+2'd2);
6: addr=(addr_reg[2]+1'b0);
7: addr=(addr_reg[2]+2'd1);
8: addr=(addr_reg[2]+2'd2);
endcase


if(count==4'd4)
    clk1=0;
else if(count==4'd8)
    clk1=1;
end
endmodule

这是更新的顶级代码。 Counter1代码如下:

module counter1(clk, dout);

input clk;
output [16:0] dout;
reg [16:0] dout;

always@(posedge clk)
begin
if(dout<17'd64516)
    dout=(dout+17'd1);
else
    dout=17'b0;
end


endmodule

问题是当counter1的dout输出从00000000000000000变为00000000000000001时,addr_reg [0]的值从00000000000000000变为0000000000000000X。可能是什么问题?

1 个答案:

答案 0 :(得分:0)

如果输出某些信号,则应将其声明为wire

wire [7:0] dout;
wire [3:0] count;

第二件事是dout_reg[count]=dout如何将output分配给内部信号?我想这里也可能是一个错误。检查逻辑。
如果你显示inputhex模块的代码,将会更清楚(输入,输出和逻辑在哪里)。