IT系メモ

興味のあったことや、勉強したことなどをメモしていきます。

verilog

(* *)

assign sum = a + (* CLA=1 *) b; Verilog2001からの記述で上のような書き方がある。何をしているかというと属性をつけ、論理合成などのソフトに知らせるため。たとえばALTERAのQuartus IIに色々と記述されている。 (http://www.altera.co.jp/literature/hb…

@(*)

always文のセンシビリティリストの信号を書く時に沢山信号があった場合は大変ですが、Verilog2001にはアスタリスクを書くことですべての信号を指定することができる。センシビリティリスト記述漏れによるラッチを発生するのを避けることができそう。

wireとtri

トライステートバスを使用している回路でwireではなく「tri」を使用しているものがあった。調べてみると文法上の意味に違いはないとのこと。モデリングするときに区別して指定したいときに使用する。 他にもsingle drive, multi driveなどもあるとのこと。こ…

数字の取り扱い

基本的なものでは「2'b00」のような2進数の取り扱いや、「2'h3」にような16進数表記が使える。bやhの前に付いているのはビット幅を表す。ビット幅は省略することができるが明示する方がいい。「444」のように指定がないものは符号付きになるが実装依存な…

localparam

localparam integer Loop_counter_width=16; localparam integer Stop_count = 2**Loop_counter_width -1; ローカル定数を使用することができるみたいだ。parameterと同じようにtimeやdelayを取ることができる。parameterとの違いはparameterは個々のmodule…

group

initial begin : test_loop integer i; for (i=0; ibeginの後に「コロン(:) 名前」が使える。これは内部でローカル変数を使えるようにするためのもの。begin〜end内で、「integer i;」と変数を宣言しているが、これが他のところに影響しないようにローカル変…