2007年11月29日 星期四

給轉型的新鮮人

我們有好幾位 從C-Model 轉到HW
最難理解大概是HW 中 Simulator 跟 C++ 有什麼不同了
原本一開始就做HW的人 反而不會轉不過來
學長就在此給一些講解 如果再不懂
只好再靠碰多一點BUG來想像囉

舉上面的圖例:
請把黑線都想成BUS

I1 , I2 是Input BUS
C1 C2 C3 是 Combinational Block
D1 D2 D3 是 Sequential Block

Process/ always
C1/C2/C3 D1/D2 在VHDL是用 Process 包起來 在Verilog 中是用 always 包起來
如果沒用 process or always包起來 放在外面 視為 Combinational Block

Sensitive List
C1 /C2/C2 是用 全部等號的右半邊
D1/D2 只有 Reset 跟 Clock (但是在SIS有很多人也全寫了)

Simulator 2-Value
VHDL : singal 的值是2-Value, variable 用1-Vaule
Verilog : <= 用2-Value, = 用1-Vaule
所謂 1-value 跟 C 一樣 當場Update
2-value 是有新舊 Value 第一輪都更新到舊(暫存)的Value
等第一輪都沒有 Event 時 第二輪再把全部的舊的Value Copy 到新的
這個方式 是在模擬現實世界的電路
等所有的 Combinational Block 都穩定了
Sequential Block (D F/F) 再去接起來 做為下一CLOCK的值

Simulation 排程
以上面的例子以及我們的Platform來想
首先是CLOCK先動 根據Sensitive List 來排程
Step 1. I1, I2 D1, D2, D3 排進Schedule (I1, I2 是VPI 弄進去)
==>Schedule Queue: I1,I2,D1,D2,D3
Step 2. I1 trigger C2, I2 trigger C1, D1 trigger C2, D2 trigger C3,C1
==>Schedule Queue: C2, C1,C2,C3,C1 (注意 C2, C1 Trigger 二次)
Step 3. No more event
==>D1, D2, D3 Update 2-Value 中的新值 (D1/D2/D3 要用<= 來寫)
Step 4. CLOCK 再動 回到STEP1

3 則留言:

新力胖狐狸 提到...

這個昨天有聽說了,聽說cmodel轉hw三人組目前改code都已經遇到瓶頸,想說可以叫人去問問看教育訓練有沒有想要為這些新人開個課,講講coding stype、synthesis、sta...一些有的沒的,沒有想到得到的答案竟然是:『看錄影帶』...不過也不錯啦...記得不要放錯帶子...

匿名 提到...

學長, 我記得之前有留一份許馥疇的coding guide在SiS, 這份文件失傳啦??

wylin 提到...

不是不懂 Coding Guide
而是還沒深入了解 同步設計

這一T抓資料 跟下一T抓資料
這對之前寫C++的人 會弄不清楚
也有不知 把 Control 訊號Pipeline 下去
也有不知 寫出 Combinational Loop
把 Simulator 弄死 生不出 Waveform
也有不知 生出 Latch 的.....

總之 靠時間磨了