- 前ページ
- 次ページ
そろそろ秋ですねー秋刀魚が食いたいです(^q^)
最近、私のブログでは規格書の紹介しかしてない気がします。が、今回はSystem Verilogの規格書の紹介です。
・SystemVerilog 3.1a Language Reference Manual Accellera’s Extensions to Verilog®
http://www.eda.org/sv/SystemVerilog_3.1a.pdf
・SystemVerilog 3.1 Accellera’s Extensions to Verilog®
http://www.vhdl.org/sv/SystemVerilog_3.1_final.pdf
最近、私のブログでは規格書の紹介しかしてない気がします。が、今回はSystem Verilogの規格書の紹介です。
・SystemVerilog 3.1a Language Reference Manual Accellera’s Extensions to Verilog®
http://www.eda.org/sv/SystemVerilog_3.1a.pdf
・SystemVerilog 3.1 Accellera’s Extensions to Verilog®
http://www.vhdl.org/sv/SystemVerilog_3.1_final.pdf
Verilog HDLの規格書です。
あんまり種類見つけられなかったですけど、見つけたのだけ紹介します。
ちゃんとしたのが欲しい人はIEEEから入手して下さい。
・IEEE Standard for Verilog ®Register Transfer Level Synthesis
http://staff.ustc.edu.cn/~songch/download/IEEE.1364-2005.pdf
・Draft Standard for Verilog ®Hardware Description Language
http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCsQFjAA&url=http%3A%2F%2Fwww.boyd.com%2F1364%2F1364-2005-d2.pdf.gz&ei=GQqaUpTVKsyvkgWeg4CIDQ&usg=AFQjCNEXeVXJ-fo3YjCnmKnk6EwiinB__w&bvm=bv.57155469,d.dGI
あんまり種類見つけられなかったですけど、見つけたのだけ紹介します。
ちゃんとしたのが欲しい人はIEEEから入手して下さい。
・IEEE Standard for Verilog ®Register Transfer Level Synthesis
http://staff.ustc.edu.cn/~songch/download/IEEE.1364-2005.pdf
・Draft Standard for Verilog ®Hardware Description Language
http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCsQFjAA&url=http%3A%2F%2Fwww.boyd.com%2F1364%2F1364-2005-d2.pdf.gz&ei=GQqaUpTVKsyvkgWeg4CIDQ&usg=AFQjCNEXeVXJ-fo3YjCnmKnk6EwiinB__w&bvm=bv.57155469,d.dGI
わんちゅうさんの、わんちゅう日記と
EmEditor (テキストエディタ) - FAQの参考に
サクラエディタから
コマンドプロンプトを起動して、
C言語/C++のコンパイルを行う
VBScriptのマクロを書きました。
■使い方
C言語のファイルをサクラエディタで開いた状態で、下記マクロを実行すれば
コンパイル/実行され、結果がコマンドプロンプト上に表示されます。
■注意
※1,コンパイラはVisual StudioのVisual C++を使用しているので、
Visual Studio C++をインストールしていない方は使えません。
※2,人によって"vcvars32.bat"のある場所が異なります。
(Visual Studioのバージョン、OSのbit等)
下の赤字のファイルパスをたどって、正しいパスに修正して下さい。
■コード
'''''''''''''''''''↓ここから↓'''''''''''''''''''
' ファイルのフルパス
Dim szFullPath
Dim szFilename
Dim szvcvars32
'【修正箇所】下記ファイルパスを、vcvars32.batがあるパスに変更して下さい!
szvcvars32 = """C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"""
' フルパスを取得
szFullPath = Editor.GetFilename()
szFilename = Editor.GetFileName(szFullPath)
szFilename = Mid( szFilename, 1, Len(Editor.GetFileName(szFullPath)) - 2 )
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
'/k 実行後にコマンドプロンプトを終了しない。 &:連接 "&"改行 _:改行
CreateObject("WScript.Shell").Run"cmd.exe /k"&_
szvcvars32&"&"&_
"cl "&szFullPath&"&"&_
szFilename&".exe&"&_
"del "&szFilename&".obj&"
'''''''''''''''''''↑ここまで↑'''''''''''''''''''
EmEditor (テキストエディタ) - FAQの参考に
サクラエディタから
コマンドプロンプトを起動して、
C言語/C++のコンパイルを行う
VBScriptのマクロを書きました。
■使い方
C言語のファイルをサクラエディタで開いた状態で、下記マクロを実行すれば
コンパイル/実行され、結果がコマンドプロンプト上に表示されます。
■注意
※1,コンパイラはVisual StudioのVisual C++を使用しているので、
Visual Studio C++をインストールしていない方は使えません。
※2,人によって"vcvars32.bat"のある場所が異なります。
(Visual Studioのバージョン、OSのbit等)
下の赤字のファイルパスをたどって、正しいパスに修正して下さい。
■コード
'''''''''''''''''''↓ここから↓'''''''''''''''''''
' ファイルのフルパス
Dim szFullPath
Dim szFilename
Dim szvcvars32
'【修正箇所】下記ファイルパスを、vcvars32.batがあるパスに変更して下さい!
szvcvars32 = """C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"""
' フルパスを取得
szFullPath = Editor.GetFilename()
szFilename = Editor.GetFileName(szFullPath)
szFilename = Mid( szFilename, 1, Len(Editor.GetFileName(szFullPath)) - 2 )
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
'/k 実行後にコマンドプロンプトを終了しない。 &:連接 "&"改行 _:改行
CreateObject("WScript.Shell").Run"cmd.exe /k"&_
szvcvars32&"&"&_
"cl "&szFullPath&"&"&_
szFilename&".exe&"&_
"del "&szFilename&".obj&"
'''''''''''''''''''↑ここまで↑'''''''''''''''''''
■LINとは
Local Interconnect Networkの略。自動車機器で使用される通信規格。
3本(電源/信号線/GND)で通信できるから、製品コストを抑えられるのが売り。クロックは信号に一緒に乗せて送信して通信を行う。でもあんまり早い通信は出来ない。そのため、窓とかサイドミラー、ワイパーとかの制御に使う。
■用語一覧
http://www.kumikomi.net/archives/2006/01/01lin1.php?page=11
■各バージョンの規格書
・LIN Specification Package Revision 1.3
http://lniv.fe.uni-lj.si/courses/ndes/LIN_Spec_1_3.pdf
・LIN Specification Package Revision 2.0
http://www7.informatik.uni-erlangen.de/~dulz/fkom/06/Material/3/LIN%20Specification%20Package.pdf
・LIN Specification Package Revision 2.1
http://tge.cmaisonneuve.qc.ca/barbaud/R%C3%A9f%C3%A9rences%20techniques/Bus%20LIN/LIN-Spec_Pac2_1.pdf
・LIN Specification Package Revision 2.2A
http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.cse.dmu.ac.uk%2F~eg%2Ftele%2FLIN-Spec_2-2A.pdf&ei=u_wyUvLRIc2alQXdroDYDg&usg=AFQjCNFzU6X6SiWGruz9woCZrnAhrJdc8A&bvm=bv.52164340,d.dGI
Local Interconnect Networkの略。自動車機器で使用される通信規格。
3本(電源/信号線/GND)で通信できるから、製品コストを抑えられるのが売り。クロックは信号に一緒に乗せて送信して通信を行う。でもあんまり早い通信は出来ない。そのため、窓とかサイドミラー、ワイパーとかの制御に使う。
■用語一覧
http://www.kumikomi.net/archives/2006/01/01lin1.php?page=11
■各バージョンの規格書
・LIN Specification Package Revision 1.3
http://lniv.fe.uni-lj.si/courses/ndes/LIN_Spec_1_3.pdf
・LIN Specification Package Revision 2.0
http://www7.informatik.uni-erlangen.de/~dulz/fkom/06/Material/3/LIN%20Specification%20Package.pdf
・LIN Specification Package Revision 2.1
http://tge.cmaisonneuve.qc.ca/barbaud/R%C3%A9f%C3%A9rences%20techniques/Bus%20LIN/LIN-Spec_Pac2_1.pdf
・LIN Specification Package Revision 2.2A
http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.cse.dmu.ac.uk%2F~eg%2Ftele%2FLIN-Spec_2-2A.pdf&ei=u_wyUvLRIc2alQXdroDYDg&usg=AFQjCNFzU6X6SiWGruz9woCZrnAhrJdc8A&bvm=bv.52164340,d.dGI
わんちゅうさんの、わんちゅう日記を参考に
サクラエディタから
コマンドプロンプトを起動して、
VHDL/Verilog/SystemVerilogのコンパイルを行う
VBScriptのマクロを書いてみました。
下記のコードから必要な部分を抜粋して使用して下さい。
※ModelSIMのコンパイラを利用してコンパイルするので、
ModelSIMをインストールしていないPCではこのマクロは利用できません。
※コンパイル時に「w@o@r@k_T@r@a@s@h@」ディレクトリが生成され、
コンパイル終了後に、「w@o@r@k_T@r@a@s@h@」ディレクトリを
削除するか確認されます。
自分で作ったディレクトリでなければ、"Y"を選択して削除して下さい。
バグはない予定ですΣ(゚д゚) エッ!?
'■VHDLの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vcom -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
'■Verilogの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vlog -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
'■SystemVerilogの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vlog -sv -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
サクラエディタから
コマンドプロンプトを起動して、
VHDL/Verilog/SystemVerilogのコンパイルを行う
VBScriptのマクロを書いてみました。
下記のコードから必要な部分を抜粋して使用して下さい。
※ModelSIMのコンパイラを利用してコンパイルするので、
ModelSIMをインストールしていないPCではこのマクロは利用できません。
※コンパイル時に「w@o@r@k_T@r@a@s@h@」ディレクトリが生成され、
コンパイル終了後に、「w@o@r@k_T@r@a@s@h@」ディレクトリを
削除するか確認されます。
自分で作ったディレクトリでなければ、"Y"を選択して削除して下さい。
バグはない予定ですΣ(゚д゚) エッ!?
'■VHDLの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vcom -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
'■Verilogの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
'コマンドプロンプトを起動し、ModelSimのCompilerでコンパイル
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vlog -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
'■SystemVerilogの場合
'↓↓↓↓↓↓↓↓↓↓↓ここから↓↓↓↓↓↓↓↓↓↓↓
' ファイルのフルパス
Dim szFullPath
' フルパスを取得
szFullPath = Editor.GetFilename()
CreateObject(_
"WScript.Shell").Run"cmd.exe /k "&_
"vlib w@o@r@k_T@r@a@s@h@ & "&_
"vmap w@o@r@k_T@r@a@s@h@ & "&_
"vlog -sv -work w@o@r@k_T@r@a@s@h@ -lint """ & szFullPath & """ & "&_
"rd /s w@o@r@k_T@r@a@s@h@ & "&_
"exit"
'↑↑↑↑↑↑↑↑↑↑↑ここまで↑↑↑↑↑↑↑↑↑↑↑
SystemVerilog(システムベリログ) 3.1a 予約語一覧です。
エディタの強調キーワードに登録する時にご活用下さい。
alias
always
always_comb
always_ff
always_latch
and
assert
assert_strobe
assign
assume
automatic
before
begin
bind
bins
binsof
bit
break
buf
bufif0
bufif1
byte
case
casex
casez
cell
chandle
changed
char
class
clocking
cmos
config
const
constraint
context
continue
cover
covergroup
coverpoint
cross
deassign
default
defparam
design
disable
dist
do
edge
else
end
endcase
endclass
endclocking
endconfig
endfunction
endgenerate
endgroup
endinterface
endmodule
endpackage
endprimitive
endprogram
endproperty
endsequence
endspecify
endtable
endtask
endtransition
enum
event
expect
export
extends
extern
final
first_match
for
force
foreach
forever
fork
forkjoin
function
generate
genvar
highz0
highz1
if
iff
ifnone
ignore_bins
illegal_bins
import
incdir
include
initial
inout
input
inside
instance
int
integer
interface
intersect
join
join_any
join_none
large
liblist
library
local
localparam
logic
longint
longreal
macromodule
matches
medium
modport
module
nand
negedge
new
nmos
nor
noshowcancelled
not
notif0
notif1
null
or
output
package
packed
parameter
pmos
posedge
primitive
priority
process
program
property
protected
pull0
pull1
pulldown
pullup
pulsestyle_ondetect
pulsestyle_onevent
pure
rand
randc
randcase
randsequence
rcmos
real
realtime
ref
reg
release
repeat
return
rnmos
rpmos
rtran
rtranif0
rtranif1
scalared
sequence
shortint
shortreal
showcancelled
signed
small
solve
specify
specparam
static
string
strong0
strong1
struct
super
supply0
supply1
table
tagged
task
this
throughout
time
timeprecision
timeunit
tran
tranif0
tranif1
transition
tri
tri0
tri1
triand
trior
trireg
type
typedef
union
unique
unsigned
use
var
vectored
virtual
void
wait
wait_order
wand
weak0
weak1
while
wildcard
wire
with
within
wor
xnor
xor
エディタの強調キーワードに登録する時にご活用下さい。
alias
always
always_comb
always_ff
always_latch
and
assert
assert_strobe
assign
assume
automatic
before
begin
bind
bins
binsof
bit
break
buf
bufif0
bufif1
byte
case
casex
casez
cell
chandle
changed
char
class
clocking
cmos
config
const
constraint
context
continue
cover
covergroup
coverpoint
cross
deassign
default
defparam
design
disable
dist
do
edge
else
end
endcase
endclass
endclocking
endconfig
endfunction
endgenerate
endgroup
endinterface
endmodule
endpackage
endprimitive
endprogram
endproperty
endsequence
endspecify
endtable
endtask
endtransition
enum
event
expect
export
extends
extern
final
first_match
for
force
foreach
forever
fork
forkjoin
function
generate
genvar
highz0
highz1
if
iff
ifnone
ignore_bins
illegal_bins
import
incdir
include
initial
inout
input
inside
instance
int
integer
interface
intersect
join
join_any
join_none
large
liblist
library
local
localparam
logic
longint
longreal
macromodule
matches
medium
modport
module
nand
negedge
new
nmos
nor
noshowcancelled
not
notif0
notif1
null
or
output
package
packed
parameter
pmos
posedge
primitive
priority
process
program
property
protected
pull0
pull1
pulldown
pullup
pulsestyle_ondetect
pulsestyle_onevent
pure
rand
randc
randcase
randsequence
rcmos
real
realtime
ref
reg
release
repeat
return
rnmos
rpmos
rtran
rtranif0
rtranif1
scalared
sequence
shortint
shortreal
showcancelled
signed
small
solve
specify
specparam
static
string
strong0
strong1
struct
super
supply0
supply1
table
tagged
task
this
throughout
time
timeprecision
timeunit
tran
tranif0
tranif1
transition
tri
tri0
tri1
triand
trior
trireg
type
typedef
union
unique
unsigned
use
var
vectored
virtual
void
wait
wait_order
wand
weak0
weak1
while
wildcard
wire
with
within
wor
xnor
xor
最近、他人のプログラムを解読する仕事をしています。
他人のプログラムを見ていると
「あ~こういう考え方もあるのかー」とか
「ここはこっちの方がいいんじゃない?」とか
「何してるんだか、さっぱり意味がわからない」とか
いろいろあります。
他人が自分と違う考え方を持っていることは、当たり前です。
加えて、知識が単純に不足している、という問題もあると思います。
でも一つ言えるのは、いいプログラマというのは、
アクロバティックなプログラムをスラスラ書ける人
ではなく
複雑な解法を、単純な解法に置き換えて
誰でも理解できるプログラムに書き起こせる人
だと思います。
確かにアクロバティックで芸術的なプログラムを書いている時、
本人はちょー楽しいです。
もしかしたら画期的なプログラムなのかもしれません。
でも、後々そのプログラムを見る人は、十中八九理解できません、
なので、流用開発(トレーサアビリティー)に利用することは難しくなります。
自分がせっかく書いたプログラムが誰からも理解されず、
利用してもらえないのは悲しいですよね?
なので、誰でも理解できるようにプログラムを書きましょう。
それでも、
どうしてもアクロバティックなプログラムを書かなきゃいけない時は、
誰が見てもわかるコメントを入れましょう。
コメントを入れすぎて困ることはありません。
プログラムの動作を一番理解できているのは、
プログラムを書いている時です。
後で書こうとか思わないで下さい!
後々そのプログラムを見た人が、絶望します。。。。
さて、明日も仕事頑張るか。
他人のプログラムを見ていると
「あ~こういう考え方もあるのかー」とか
「ここはこっちの方がいいんじゃない?」とか
「何してるんだか、さっぱり意味がわからない」とか
いろいろあります。
他人が自分と違う考え方を持っていることは、当たり前です。
加えて、知識が単純に不足している、という問題もあると思います。
でも一つ言えるのは、いいプログラマというのは、
アクロバティックなプログラムをスラスラ書ける人
ではなく
複雑な解法を、単純な解法に置き換えて
誰でも理解できるプログラムに書き起こせる人
だと思います。
確かにアクロバティックで芸術的なプログラムを書いている時、
本人はちょー楽しいです。
もしかしたら画期的なプログラムなのかもしれません。
でも、後々そのプログラムを見る人は、十中八九理解できません、
なので、流用開発(トレーサアビリティー)に利用することは難しくなります。
自分がせっかく書いたプログラムが誰からも理解されず、
利用してもらえないのは悲しいですよね?
なので、誰でも理解できるようにプログラムを書きましょう。
それでも、
どうしてもアクロバティックなプログラムを書かなきゃいけない時は、
誰が見てもわかるコメントを入れましょう。
コメントを入れすぎて困ることはありません。
プログラムの動作を一番理解できているのは、
プログラムを書いている時です。
後で書こうとか思わないで下さい!
後々そのプログラムを見た人が、絶望します。。。。
さて、明日も仕事頑張るか。








