# Synthesizable(可合成) Code ###### tags: `Digital IC Design` [回到主頁面](https://hackmd.io/@derek8955/BkK2Nb5Jo/https%3A%2F%2Fhackmd.io%2FdpcBlBL8TlShpQ-wSi9Quw) - behavioral modeling 只用 always 語法(不用 initial ) - sensitivity list 中不可同時含有 clock 負緣觸發和正緣觸發(沒有 cell 可以做這樣的功能) ```verilog= // violate always @( posedge clk or negedge clk ) ``` - 同一個 variable 只能定義在一個 procedural block 中。會產生 unknown ```verilog= // violate always @( * ) a = b; always @( * ) a = c; ```  - 必須使用同種 procedural assignment ```verilog= // violate always @( posedge clk or negedge rst_n ) begin if( !rst_n ) a = 0; else a <= 0; end ``` - for loop 裡的 start, stop, step 都必須要是常數,design compiler 才知道要 copy 幾次你的電路 ```verilog= always @( * ) begin for( idx=0 ; idx<r ; idx=idx+1 ) // violate end ``` - 所有的 [operator](https://hackmd.io/O_VRJLHkTJ2ZxghlaY3q5A) 幾乎都可以合成,除了 Equality 中的 !== 、 === :::warning 很多在初學階段的同學,都很執著一個問題,某某某語法能不能合成? 基本上只要有良好的 [coding style](https://hackmd.io/sXEzB8SGRzWQ4v0ib5cFuA),design compiler 都是看得懂的。 ::: > 把 desing 丟入 design compiler 就可以知道所撰寫的電路是否為 synthesizable code
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up