復習 - 演算子チャレンジ
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 29/90。
チャレンジ
各タスクに対して正しい式を記述し、コードを完成させてください。このチャレンジでは、この章で学んだすべての演算子を扱います。
作業内容:
- 論理演算:
value1とvalue2の両方が 0 以外であるかを確認し、結果をlogic_outに格納してください。 - リダクション演算:
vectorのすべてのビットが 1 であるかを確認し、結果をreduction_outに格納してください。 - シフト演算:
dataを左に 2 ビットシフトし、結果をshift_outに格納してください。 - 連結演算:
highとlowを組み合わせて 8 ビットの値にし、結果をconcat_outに格納してください。 - 条件演算: `a` と `b` のうち、大きい方の値を
cond_outに格納してください。
自分で試してみよう
module operator_challenge;
reg [3:0] value1, value2;
reg logic_out;
reg [3:0] vector;
reg reduction_out;
reg [7:0] data;
reg [7:0] shift_out;
reg [3:0] high, low;
reg [7:0] concat_out;
reg [3:0] a, b;
reg [3:0] cond_out;
initial begin
// 論理演算
value1 = 4'd6;
value2 = 4'd0;
logic_out = ______; // value1 と value2 の両方が 0 以外であるかを確認する
// リダクション演算
vector = 4'b1111;
reduction_out = ______; // Check if all bits of vector are 1
// Shift
data = 8'b00001111;
shift_out = ______; // data を左に 2 ビットシフトする
// 連結演算
high = 4'b1010;
low = 4'b1100;
concat_out = ______; // high と low を結合して 8 ビットの値にする
// 条件演算
a = 4'd7;
b = 4'd12;
cond_out = ______; // `a` と `b` のうち、大きい方を格納する
$display("6 && 0 = %d", logic_out);
$display("&4'b1111 = %d", reduction_out);
$display("00001111 << 2 = %b", shift_out);
$display("{1010, 1100} = %b", concat_out);
$display("max(7, 12) = %d", cond_out);
$finish;
end
endmodule