Hardware if-else的else块对不同条件的作用不同

Hardware if-else的else块对不同条件的作用不同,hardware,verilog,fpga,hdl,Hardware,Verilog,Fpga,Hdl,我正在用if-else块编写一个简单的移位寄存器。我注意到,当控制信号为control=2'b00(意味着它保留默认值)时,else块正常工作,但当我给出控制值control=2'b11时,它开始向右移动,这不是我想要的 为什么else块有选择性地工作?即使在else情况下control=2'b00和control=2'b11都落下 代码和屏幕截图如下: module shift( input clock, input reset, input [1:0] control, input in,

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

为什么else块有选择性地工作?即使在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
上述措施也不起作用。。但我用箱子把它修好了

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;

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


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

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


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

控件[0]
在您输入
11
时是
1
,因此我认为它工作正常。你需要一个更强大的条件来让它按照你想要的方式工作:

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; 

当您输入
11
时,
控件[0]
1
,因此我认为它工作正常。你需要一个更强大的条件来让它按照你想要的方式工作:

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; 

谢谢我通过使用上面编辑中的代码添加了进一步的控制,但这也不起作用,但现在我用case修复了它。编辑中的代码也有完全相同的问题。。。很高兴听到你修好了。谢谢。。我通过使用上面编辑中的代码添加了进一步的控制,但这也不起作用,但现在我用case修复了它。编辑中的代码也有完全相同的问题。。。很高兴听到你修好了,谢谢。我设法用case添加了更多控件。。虽然我仍然想知道为什么在我的原始帖子中添加了if else的编辑后,它不起作用?@I惩罚:你没有显示你的
右侧
左侧
,但在我看来,你犯了与开始时完全相同的错误。我的意思是,如果设置了
right
,您的逻辑设置为向右移动,而不关心
left
的值是多少。hmmm。我假设您谈论的是关于if-else的编辑,而不是案例。。这就是你的意思:
if(right&&&left)//shift right
?如果不是,请举例说明你的意思“不关心
值。感谢you@ipunished:是的,
right&~left
是您需要使用的条件。谢谢。我设法用case添加了更多控件。。虽然我仍然想知道为什么在我的原始帖子中添加了if else的编辑后,它不起作用?@I惩罚:你没有显示你的
右侧
左侧
,但在我看来,你犯了与开始时完全相同的错误。我的意思是,如果设置了
right
,您的逻辑设置为向右移动,而不关心
left
的值是多少。hmmm。我假设您谈论的是关于if-else的编辑,而不是案例。。这就是你的意思:
if(right&&&left)//shift right
?如果没有,请举例说明“不关心
值”的含义。谢谢you@ipunished:是的,
right&~left
是您需要使用的条件。