if else ブロックを使用して単純なシフト レジスタをコーディングしています。control = 2'b00
制御信号が(デフォルト値を保持することを意味する)場合は、else ブロックが正常に機能することに気付きましたが、制御値を指定control = 2'b11
すると、右にシフトし始めます。これは、私が望むものではありません。
else ブロックが選択的に機能するのはなぜですか? control = 2'b00
との両方control = 2'b11
が else の場合でも?
以下のコードとスクリーンショット:
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;