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

时间:2014-03-01 21:51:30

标签: verilog

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

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

1 个答案:

答案 0 :(得分:2)

你的编译器可能会说:

  

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

这意味着scarry都应该定义为电线,而不是regs。

顺便说一下,我建议你稍微更改accumulator代码:

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

@Filipe:可以定义没有驱动程序的输出端口。但是在这种情况下(就像这里),所有逻辑都可能被合成,因为根据每个输入信号不会有输出。