Verilog case语句返回不正确的值

Verilog case语句返回不正确的值,verilog,fpga,hdl,case-statement,Verilog,Fpga,Hdl,Case Statement,我应该使用case语句编写一个简单的CU,但是输出与我在case语句中指定的不匹配。我想我在这里犯了一些基本的错误,但我不知道是什么 这是我的模块: `timescale 1ns / 1ps module ControlUnit(Opcode, RegDst, Jump, Branch, MemRead, MemtoReg, ALUOp, MemWrite, ALUSrc, RegWrite); /* IO */ // Inp

我应该使用case语句编写一个简单的CU,但是输出与我在case语句中指定的不匹配。我想我在这里犯了一些基本的错误,但我不知道是什么

这是我的模块:

`timescale 1ns / 1ps

module ControlUnit(Opcode,   RegDst, Jump,     Branch, MemRead, 
                   MemtoReg, ALUOp,  MemWrite, ALUSrc, RegWrite);

   /* IO */
   // Inputs
   input  [5:0] Opcode;
   // Outputs
   output [1:0] ALUOp;
   output       RegDst;
   output       Jump;
   output       Branch;
   output       MemRead;
   output       MemtoReg;
   output       MemWrite;
   output       ALUSrc;
   output       RegWrite;

   // Hold output value from case statement.
   reg [9:0] out;

   // Assign outputs based on Opcode recieved. 
   always@( * ) begin
      case( Opcode )
      // out format:
      // RegDst,ALUSrc,MemtoReg,RegWrite,MemRead,MemWrite,Branch,Jump,ALUOp
         6'b00_0000 : out = 1_0_0_1_0_0_0_0_10 ; // R-Type
         6'b10_0011 : out = 0_1_1_1_1_0_0_0_00 ; // lw
         6'b10_1011 : out = 0_1_0_0_0_1_0_0_00 ; // sw
         6'b00_0100 : out = 0_0_0_0_0_0_1_0_01 ; // beq
         6'b00_0010 : out = 0_0_0_0_0_0_0_1_00 ; // j
         default    : out = 0_0_0_0_0_0_0_0_00 ; // Default case. 
      endcase
   end

   // Assign outputs according to result from case statement.   
   assign { RegDst,  ALUSrc,   MemtoReg, RegWrite, 
            MemRead, MemWrite, Branch,   Jump, 
            ALUOp } = out;

endmodule
以下是我得到的结果:

操作码:输出

00_0000:0001001010

10_0011:000100000

10_1 011:0000010000

00_0100:11111 01001

00_0010:00011000

它们都不符合任何案例。对于我的测试台,我只使用Xilinx生成的内容以及以下内容:

    initial begin
      // Initialize Inputs
      Opcode = 0;

      // Add stimulus here
      Opcode = 6'b00_0000;
      #100
      Opcode = 6'b10_0011;
      #100
      Opcode = 6'b10_1011;
      #100
      Opcode = 6'b00_0100;
      #100
      Opcode = 6'b00_0010;
      #100
      Opcode = 6'b00_0010;

    end

分配的限制之一是,我们不应该实现状态机,必须使用这个确切的端口列表,因此使用case语句。我也在网上看到,这可以通过一系列的赋值语句来完成,但老师说可以通过一个案例语句来完成,所以我正在努力弄清楚这一点

您忘了在
out
作业前面加10'b。应该是
out=10'b1001000010

否则它将以十进制格式(不是二进制格式)将其作为整数值