ws's profileBad TimingPhotosBlogLists Tools Help

Bad Timing

so fix it

ws tu

Photo 1 of 2
November 23

多快可以寫一個bug

我的印象中曾經有一開起來網路就卡,接下來不知按了什麼。後來不小心又砍了備份,結果接下來一週一直build失敗的經驗。

April 22

iclab 6

從lab3之後都是 FSM,太晚進入狀況真的有點糟。

這次的題目是在某個 8 bit port讀入 ASCII表示的羅馬數字,同時讀取 op code。在輸入資料結束時開始計時20個 cycle之內要把運算結果用 ASCII表示的羅馬數字表示出來。像是 VII 的平方是 IVIX,MXXIV的平方根是XXXII。輸入的值和輸出的值都限制在1~3999之內。每個cycle限時5ns。看面積比輸贏。

只用單純的想法做下去的話,在input的地方設計一個FSM,一邊讀一邊算出輸入的真實值是多少;之後再經過運算後,把結果分成4位數。再用個FSM把這4位數連續的輸出。

這次遇到幾個問題:

design compiler在 datapath長過 cycle time constraint太多的時候會自爆 fatal errorblue-screen-of-death-t-shirt ,還印出一堆stack pointer叫你抄下來打 OneCall通知 Synopsys。真糟糕,大家好似都寫的十分完美,不曾試出這個問題。這一切果然都是我的錯。You fatal synopsys。這次我遇到這事情是因為在把10進位的4位數的各位數值拆開時, (X/100)%10 會花掉太多時間。所以可以用的方法就是拆成2半,先算Y=X/100 再算 Z=Y%10。

再來就是這種有很多表的電路,如果不是用程式產生verilog,很容易因為手殘打錯字,像是把VIII打成VII之類的。

最後就是iclab名物:潛規則。有些東西助教不講,同學不提,完全沒有人問,但大家卻似乎都做的出來,看來我也該努力了解他們用的語言才是。畢竟如果之後去EDA公司的話總還是要聽的懂的。

最後再來一張該死的 fatal error,紀念一下這個拖住我20小時的非錯誤訊息。

steve jobs fatal error

March 30

firefox 3.0.8 is a lemon

如果說 firefox 3.0.5是讓我從 firefox跳IE的時間點的話,在IE8推出之後的firefox 更新版 3.0.8可以說是 firefox團隊說服我不要再用firefox的最佳証據。3.0.5一天也才 crash 3次而已,3.0.8可以讓我連 gmail都開不出來。難怪會有人說等 firefox 4.x.x出現在看情況,不知道有沒有人能和那些寫firefox的傢伙說一下,extension再多,一直crash的瀏覽器就是不能用的瀏覽器啊。

March 16

ic lab 2

I'm on a BOAT ( Bad Organized ambiguous TA'smouthandhisstrangeslide)

 

我決定用中文把題目講一次。給你6個數字,A,B,C,D,X1,X2。A,B,C,D是5 bit整數;X1,X2是6bit,但他的值要除以32 (也就是說,如果 X1= 1,它表示的其實是1/32)。現在要計算出某個式子的值,題目要求是要使用一個13bit整數來表示結果(同樣的,值也要除以32),在某個時間要求以及誤差要求之下,平均誤差平方*面積越小的拿到越高分。所有的數字都是用2's compliment表示負值。

只要看懂了題目會用assign XX = {YY[3:1]} 和道 assign X = Y*Z 要 Y Z都為signed才會進行有號運算就差不多做的出來了。

再來就是要注意小數點在哪裡,其實扣掉我一開始以為要手工打造IEEE 754 compitable FPU的3天的話,這東西做的還滿快的。

 

--無關解法--

 

如果再給我一次機會,我要拜託助教就算作業用中文出也好,題目還是清楚一點比較能節省大家的時間。

如果不知道什麼叫小數的話可以問同學,也可以上網查。小數點不能跑的東西就不會叫floating number,floating number是floating point number的懶人寫法,如果真的很堅持不讓小數點動來動去,還有一種字叫fixed point number。如果要說小數的話用binary fraction大家就算要上網查一下這是什麼字也好過被奇怪的floating number誤導。到底有誰看到

trickypart

這樣的描述 不會疑惑的呢?當然不仔細看-1~(1-2**-5)是我慧根不夠,不過我真的沒在課本上看過有人寫 (6,5) floating number的。

March 10

IC Lab 1

搞不好會是12次作業中最輕鬆的一次。寫寫gate level verilog就結束了。

待查証:


  1. wire a,b,c;
    wire [3:0] test;
    assign test={a,b,c};
    adder(output, test,{a,b,c})
    test的值會是xxx
  2. unknown 可以 == 任何值
  3. verilog裡的$random會傳回一個32bit值
  4. 沒有特別指明的話,$display("%d",num)會印出有號整數
  5. verilog裡的$random和C的rand()一樣不亂。
  6. 如果覺得ncverilog個性很差不講理,可以把 INCA_libs 砍掉試試看。
  7. ncverilog跑的比我自己的verilog* simulator快3個數量級

--

前人的文章,不過他那一年好像是作shifter

* 只支援subset