Quantcast
Channel: ウィリアムのいたずらの、まちあるき、たべあるき
Viewing all articles
Browse latest Browse all 7271

今日FPGAで学んだこと(5)

$
0
0
今日FPGAで学んだこと(5)

この前のverilogのプログラムについて、
ちょっと細かく説明




■verilogについて

・シミュレーターでしかうごかないもの
・論理合成できて、シミュレーターでも動くもの

がある。
for、whileは、シミュレーターのみ

■信号について
・wireとregがある
    wire:値を保持しない
    reg:値を保持するか、always,function内の信号

 【書式】
    wire [7:0]    A,B;
    reg [3:0]    C;

・入出力信号(input,output)は、wireを省略している

 【書式】
    input    [2:0]    BUTTON;
    output    LEDG0;    //    []がないと、1ビット


■値・数値
・0,1,Z(ハイインピーダンス),X(不定値)の4種類
・<ビット幅>'<基数><数値>で表現する
  例:1'b1 1ビット2進数で1
 基数:b(2進),o(8進),d(10進),h(16進)
 省略すると、32ビット10進

■演算子
・算術:割り算関係は重い
・シフト
・符号
・関係
・論理
・ビット
  A=4'b0011,B=4'b1100のとき

   A & B = 0000だが、 A&&B = 1

・リダクション
  input [2:0] BUTTON のような、複数ビットに対して、
  いっぺんに&や|をとる

  &BUTTON = BUTTON[2] & BUTTON[1] & BUTTON[0]

  Verilogのみ(VHDLにはない)

・条件(? :)

sel = cond?A:B
 (condは条件)

・連結演算子
 異なる信号を1つにする
   FLAG[2:0]={A,B,C}

■組み合わせ回路
・assign文(継続代入文)
 順序に関係なく評価する

・function文
 ifやcaseがかける
 組み合わせ回路で構成
 ローカル変数はreg
 assignは使わない

【書式】
  function 出力レンジ 名前;
   input 入力信号;
  begin

   いろいろかく
    :
  end
  end function

※出力レンジ1ビットは省略

・if文:function,always内で記述

【書式】
  if(a) begin
    ステートメント1;
    ステートメント2;
  end else begin
    ステートメント3;
    ステートメント4;
  end
begin,endを書かないと、1ステートメントだけ実行

・case(A)
 casex(A)だと、ドントケアが書ける

【書式】
 case(A)
 条件:ステートメント;
    :
 (以下、条件:ステートメント;続く)
    :
 endcase


・always@()構文:組み合わせ回路編

【書式】
  reg out; // 使う変数をreg宣言
  always@(a or b) begin
   if (a)
     out = b;
   else
     out = ~b;
  end

※(a or b)の部分:センシティブリスト
   →変化があるとき


■順序回路
・フリップフロップがはいったもの
  →記憶できる
  →always@()で記述

・always@()構文:順序回路編

【書式】

always(posedge CLK or negedge RESTn) begin
   :
   :
end

※posedge:立ち上がり negedge:立下り
 順序回路のalwaysのセンシビリティリストは
    (posedge,negedgeを使って)orで2つしかつなげられない
 →組み合わせ回路のalways@のセンシビリティリストは、
    a or b or c・・・と、使う分だけ書く(書ける)
 <= ノンブロッキング代入 =ブロッキング代入
  ノンブロッキング代入は、同時に起こる
  ブロッキングは順番に

Viewing all articles
Browse latest Browse all 7271

Trending Articles