Menu
Coddy logo textTech

復習 - 演算子チャレンジ

CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 29/90。

challenge icon

チャレンジ

各タスクに対して正しい式を記述し、コードを完成させてください。このチャレンジでは、この章で学んだすべての演算子を扱います。

作業内容:

  1. 論理演算: value1value2 の両方が 0 以外であるかを確認し、結果を logic_out に格納してください。
  2. リダクション演算: vector のすべてのビットが 1 であるかを確認し、結果を reduction_out に格納してください。
  3. シフト演算: data を左に 2 ビットシフトし、結果を shift_out に格納してください。
  4. 連結演算: highlow を組み合わせて 8 ビットの値にし、結果を concat_out に格納してください。
  5. 条件演算: `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

基礎のすべてのレッスン