意外的高阻抗输出

问题描述

我正在为我正在设计的处理器(第一个 RTL 项目)编写 ALU,当我运行我的测试平台时,我在 ALU_out 上获得了高阻抗输出,即使标志确实被设置并且输出正确。

       module alu(
        input clk,input reset,input [7:0] A,B,input [3:0] Op_Sel,output [7:0] ALU_out,output C,V,N,Z
    );
    
    reg [8:0] Result = 0;
    reg [8:0] cn_temp = 0;
    reg [7:0] v_temp = 0;
    reg carry = 0;
    reg overflow = 0;
    reg negative = 0; 
    reg zero = 0;

    assign ALU_Out = Result[7:0];
    assign C = carry;
    assign V = overflow;
    assign N = negative;
    assign Z = zero;
    
    always @*
     begin
       if (reset)
        begin
           Result = 0;
           cn_temp = 0;
           v_temp = 0;
           carry = 0;
           overflow = 0;
           negative = 0;
           zero = 0;
        end
     end
    
    always @(posedge clk)
     begin
          case(Op_Sel)
          4'b0000: // Addition
      begin
           Result = A + B; 
       negative = Result[7];
       zero = (Result[7:0] == 8'b00000000);
       carry = Result[8];
       v_temp = A[6:0] + B[6:0];
       overflow = v_temp[7] ^ carry;
      end
      .
      .
      //The rest of the instructions
      .
      .
      .
         endcase

      
       end


   endmodule

//My testbench

module alu_testbench();

reg clk;
reg reset;
reg [7:0] A;
reg [7:0] B;
reg [3:0] Op_Sel;
wire [7:0] ALU_out;
wire C,Z;

always begin
#1
clk = ~clk;
end

initial begin
clk = 0;
reset = 0;
#1
reset = 1;
#1
reset = 0;
end

initial begin
#10
A=2;
B=3;
Op_Sel = 4'b0000;
#10
A=1;

end


alu alu (
    .clk(clk),.A(A),.B(B),.Op_Sel(Op_Sel),.ALU_out(ALU_out),.C(C),.V(V),.N(N),.Z(Z));

endmodule

我相信我将模块连接到测试台(通过电线),那么为什么我在 ALU_out 上出现高阻抗?

解决方法

这是一个棘手的错字。您错误地在 ALU_Out 信号名称中使用了大写的“O”。由于 Verilog 区分大小写,因此这是与 ALU_out 不同的信号。在 Verilog 中声明所有信号不是强制性的。但是,您可以在代码中使用以下编译器指令来帮助捕获此类常见问题:

`default_nettype none

您的模拟器应该会产生错误。

要修复它,请更改:

assign ALU_Out = Result[7:0];

到:

assign ALU_out = Result[7:0];

我的模拟器还生成了一条警告消息,因为您没有驱动 resetalu 输入。这是修复:

alu alu (
    .clk(clk),.reset(reset),/// <------ add this
    .A(A),.B(B),.Op_Sel(Op_Sel),.ALU_out(ALU_out),.C(C),.V(V),.N(N),.Z(Z));

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...