# 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.