verilog中的8位累加器,输出数据类型
这是我的verilog代码,我不断得到错误,我必须将输出(s和进位)连接到结构网络表达式。代码如下: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
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:一点也不,因为你是对的。我不知道我怎么会错过它。