0

我正在使用 if else 块编写一个简单的移位寄存器。我注意到当控制信号是control = 2'b00(意味着它保留默认值)时,else 块可以正常工作,但是当我给出控制值control = 2'b11时,它开始向右移动,这不是我想要的。

为什么 else 块有选择性地工作?即使两者都control = 2'b00落在control = 2'b11其他情况下?

代码和截图如下:

module shift(
input clock,
input reset,
input [1:0] control,
input in,
output [7:0] out
);

reg [7:0] r_reg, r_next; //a 7 bit shift register which will be output as is, this can be changed to any size

always @ (posedge clock or posedge reset)
begin
    if(reset)
        r_reg <= 0;
    else
        r_reg <= r_next;
end

always @ (*)

begin

if(control[0]) //shift right
    r_next = {in, r_reg[7:1]};

else if(control[1]) //shift left
    r_next = {r_reg[6:0], in};

else
    r_next = r_reg; //default state stays the same

end

assign out = r_reg;

endmodule

在此处输入图像描述

编辑:

if(right) //shift right
    r_next = {in, r_reg[7:1]};

else if(left) //shift left
    r_next = {r_reg[6:0], in};

else if((~right & ~left) || (right & left))
    r_next = r_reg; //default state stays the same

以上也不起作用..但我用案例修复了它。

case(control)
    2'b01: r_next = {in, r_reg[7:1]};
    2'b10: r_next = {r_reg[6:0], in};
    default: r_next = r_reg;
4

2 回答 2

2

非常简单:它根本不属于 else 情况。

您的第一个条件仅查看低位(匹配 b'd1),因此 b'01 和 b'11 都右移。

于 2013-01-16T19:27:27.847 回答
2

control[0]1你输入的时候11,所以我认为它按预期工作。你需要一个更强的条件才能让它按照你想要的方式工作:

if (control == 2'b01)          // shift right
    r_next = {in, r_reg[7:1]};

else if (control == 2'b10)     // shift left
    r_next = {r_reg[6:0], in};

else                           // default state stays the same
    r_next = r_reg; 
于 2013-01-16T19:27:51.450 回答