verilog中的8位累加器,输出数据类型

verilog中的8位累加器,输出数据类型,verilog,Verilog,这是我的verilog代码,我不断得到错误,我必须将输出(s和进位)连接到结构网络表达式。代码如下: module p2(SW,KEY0,KEY1,LEDR,HEX0,HEX1,HEX2); input [7:0] SW; input [7:0] LEDR; input KEY1,KEY0; output[6:0] HEX0,HEX1,HEX2; reg[7:0] s; reg carry; accumulator acm (SW[7:0],s,carry,KEY0,KEY1

这是我的verilog代码,我不断得到错误,我必须将输出(s和进位)连接到结构网络表达式。代码如下:

module p2(SW,KEY0,KEY1,LEDR,HEX0,HEX1,HEX2);
 input [7:0] SW;
 input [7:0] LEDR;
 input KEY1,KEY0;

 output[6:0] HEX0,HEX1,HEX2;

 reg[7:0] s;
 reg carry;

 accumulator acm (SW[7:0],s,carry,KEY0,KEY1);

endmodule 

module accumulator (A, accum,overflow, clk, clr);

 input [7:0] A;
 input clk, clr;
 output [7:0] accum;
 output reg overflow;

 reg [7:0] accum;

 always@(clk) begin
    if(clk) begin
        {overflow,accum} <= accum + A;
    end
    else if(~clr) begin
        accum = 8'b00000000;
    end
end

endmodule
模块p2(SW、KEY0、KEY1、LEDR、HEX0、HEX1、HEX2);
输入[7:0]SW;
输入[7:0]发光二极管;
输入键1,键0;
输出[6:0]HEX0、HEX1、HEX2;
reg[7:0]s;
注册携带;
蓄能器acm(开关[7:0],s,进位,键0,键1);
端模
模块累加器(A、accum、溢流、clk、clr);
输入[7:0]A;
输入时钟,clr;
输出[7:0]累计;
输出寄存器溢出;
注册[7:0]累计;
始终@(clk)开始
如果(时钟)开始

{overflow,acum}您的编译器可能会这样说:

输出或输入端口“accum”/“overflow”必须连接到结构网络表达式

这意味着
s
carry
都应该定义为导线,而不是regs

顺便说一句,我建议您稍微更改一下
累加器
代码:

always@(posedge clk or negedge clr) begin
    if(~clr) begin
        accum <= 'b0;
        overflow <= 'b0;
    end else begin
        {overflow,accum} <= accum + A;
    end
end
始终@(posedge clk或negedge clr)开始
如果(~clr)开始

accum你能显示最上面的模块代码吗?!嗨,这是我所有的密码。顶部模块代码是p2Oh,好的。所以你错过了HEX0,HEX1,HEX2的输出。它们必须连接到某个东西。(我也是Verilog的新手,但我认为一切都必须连接到某个东西上)。请粘贴实际错误。现在,您对问题的描述有点模糊(即:它抱怨的是哪种输出?)我们不需要也不知道如何使用testbench,我们通常使用modelsim或在电路板上进行测试,但我需要将其添加到S上,我无法使用wirep2作为主模块,它传入值,然后显示它感谢您的启发,就像我说的,仍然是新手和学习者。@邱,希望您不介意,但我将代码改进为您的
累加器
推荐<代码>溢出
还需要异步重置。异步重置应该使用非阻塞(
@Greg:一点也不,因为你是对的。我不知道我怎么会错过它。