迪士尼樂園

早幾年陳慧琳有首歌叫作《他約我去迪士尼》﹐這次我趁去阿海納姆(Anaheim)開會議﹐便順道約老婆去迪士尼樂園。美國加洲是第一座迪士尼樂園﹐早七八年見樂園陳舊缺乏吸引力﹐把停車場改建為加洲冒險樂園。一個地方兩座主題公園﹐加洲迪士尼躍升為繼佛洲迪士尼世界後﹐第二大的迪士尼樂園。撇除兩天套票要百五美元﹐票價有點昂價不太快樂外﹐迪士尼倒也如其宣傳口號一樣﹐這是世界上最快樂的地方。

這次的會議場地與迪士尼樂園只有一街之隔﹐抵步第一天從機楊駕車去會議酒店時﹐在高速公路上離遠已看見迪士尼的煙花。酒店房間雖不是面向迪士尼﹐每晚九時便會聽到迪士尼轟聾聾在放煙花。會議其中一晚我們的軟件供應商還包起了迪士尼商店街的一間餐廳﹐邀請所有客戶去開派對。周一至周五要開會議辨正經事﹐只好對著迪士尼望門輕嘆。不過日間會議完結後﹐有三天晚上去了迪士尼商店街吃晚餐。晚上迪士尼街十分熱鬧﹐除了迪士尼酒店的住客外﹐還有﹐從樂園過來醫肚和附近酒店區前來購物的人。迪士尼商店街的餐廳價錢與酒店區的其他餐廳相若﹐唯一不便之處不接受預訂留座﹐食客只能乘乘排隊輪候。迪士尼商店街的旗艦店當然是迪士尼專賣店﹐很多特別迪士尼商品只在這裏發售﹐不過價錢並不便宜。精打細算又不介意買上季舊貨的朋友﹐不妨到距離迪士尼十五分鐘車程的迪士尼Outlet店買﹐反正買手信送禮只要有米老鼠標誌便能交差。另一個讓人流連忘返的商店﹐是樂高積木專買店﹐也很有其他地方買不到的獨特商品。最特別是樂高積木砌的印度泰姬陵﹐可惜太貴買不起。不過樂高人仔鎖匙扣﹐價格相宜又可愛﹐是當手信最佳禮物。

白雪公主Precious Moment

迪士尼的交通十分方便﹐洛杉磯機場有穿梭巴士直達阿海納姆酒店區。酒店區內阿海納姆公車局有循環線﹐來往迪士尼和各酒店。如果駕車到迪士尼﹐把車停在新建的多層停車場﹐也有穿梭巴士接送到迪士尼入口。上述所有交通公具也有一個共通點﹐就是車身上畫滿迪士尼的卡通人物。司機與平時的巴士司機也很不同﹐他們會邊駕車邊說笑娛樂乘客﹐把迪士尼歡樂的氣氛帶到整個酒店區。迪士尼樂園內有兩條火車線﹐一條是連接商店街和樂園的單軌列車﹐另一條是圍繞樂園的蒸汽火車。這兩列火車是遊客必坐的景點之一﹐當然樂園面積這麼大﹐坐火車也可以省點腳程。

玩具奇兵巴士

蒸汽火車

我對迪士尼內的伙食有點微言﹐價錢尚算公道﹐不過卻欠缺選擇。最多是美式快餐﹐漢堡包熱狗汽水薯條﹐吃這麼肥膩的食物很不健康。我寧可吃樂園內小食亭賣的煙火雞腿和焗粟米。火雞腿一隻才八美元﹐比普通雞腿巨大三倍﹐吃一隻可以當午飯﹐美味又經濟。加洲天氣熱雪榚特別好賣﹐除了一定要吃在加拿大沒有的Dryers外﹐還吃了個米老鼠雪榚三文治。吃時我先咬掉它的兩隻耳朵﹐沒有耳朵的米老鼠看起來很古怪。星期天是假期的最後一晚﹐我們不想馬馬虎虎吃快餐當晚餐﹐於是便到樂園內的露天餐廳﹐坐下來慢慢享受一頓豐富的晚餐。可能樂園的遊客也在取每一秒遊盡玩遊戲﹐不願意浪費時間在餐廳用膳﹐我們反而不用排隊等位。在迪士尼內吃快餐要十二美元﹐在餐廳吃有人服待才不二十美元﹐當作中場休息也不錯。

機動遊戲一向不是迪士尼的強項﹐樂園那邊的遊戲成年人會覺得小兒科不夠刺激﹐不過勝在以迪士尼人物作主題﹐吸引小朋友。事實上樂園的設施也呈現老態﹐盡管已經把遊戲翻新加入新元素﹐始終還是十幾年前的舊設計。樂園中只有新遊戲Indiana Jones和Splash Mountain比較好玩﹐Space Mountain和Buzz Light Year等出名經典遊戲也不過爾爾﹐至於其他遊戲就只有齋坐得個睇字。Winnie the Pooh和Finding Nemo比較有趣﹐Roger Rabbit和海盜王則有點搵笨。海盜王更是新瓶舊酒﹐在以前舊海盜遊戲中﹐求其放幾個Johnny Deep的機械公仔﹐投射放映Davy Jones的影像便說是海盜王的主題遊戲﹐新與舊的東西完全格格不入感覺很不協調。我差不多玩盡了全部遊戲﹐唯獨沒有玩Autopia和世界真細小。對於一個天天駕車上班的人﹐玩Autopia實在有點無聊。至於世界真細小﹐十年前我去迪士尼留下陰影﹐那首歌好像洗腦一樣﹐在我腦子揮之不去響了足足三天﹐真是恐怖版繞樑三日。我是Star Wars的擁躉﹐很幸運可以玩到Star Tours﹐因為這個遊戲下個月便要拆了。這遊戲差不多有二十年歷史﹐畫面沒有電腦特技﹐只是用微縮模型拍攝﹐很有八十年代正宗星球大戰的味道。大家去迪士尼千萬不要浪費時間去玩Innoventions﹐那根本不是遊戲﹐美其名體驗新科技生活﹐說穿了只是微軟和Samsung的廣告展銷會。

Splash Mountain

海底奇兵潛水艇

海盜船

迪士尼樂園的遊戲適合小朋友﹐加洲冒險樂園的遊戲則緊張刺激很多。一個本來平平無奇的摩天輪﹐也可以玩出新意思。舊式的摩天輪廂座是固定﹐這個新式摩天輪的廂座則懸掛在軌道上﹐隨著摩天輪轉動廂座會前後流動搖晃。看著廂座一邊上升上邊向外衝﹐差點以為會我掉出摩天輪。過山車原來也有新科技﹐舊式的過山車是先例車拉上去﹐經過最高點後例車靠地心引力才開始慢慢衝下去。新式的過山車用電磁軌原理﹐瞬間把例車加速﹐像子彈那像射出去﹐經過最高點府向衡下時﹐便已經在全速前進。荷里活恐怖酒店是以迷離境界為主題包裝的跳樓機﹐掉下去前才忽然打開升降機的門﹐讓玩家看看自己身處多高﹐比舊式跳樓機驚嚇得多。這個遊戲實在太好玩﹐我們白天玩了第一次不夠喉﹐晚上回去再玩多一次更過癮。其他新款的遊戲也好玩﹐激流水泡所有主題公園也有﹐加洲飛行和Bug’s Life很有真實感。Muppets 3D和Monster Inc雖然只是坐著看﹐但新遊戲不論是活動和特技效果﹐也比迪士尼樂園那邊的舊遊戲優勝。其中我最喜愛的遊戲是Toy’s Story Mania﹐那是Buzz Light Year的進化版﹐舊遊戲用紅外線槍﹐射那裏看不清楚﹐新遊戲用3D眼鏡﹐彈波和飛箭真的好像從手中射出來一樣。

荷里活恐怖酒店

電磁軌過山車

去迪士尼除了玩機動戲遊外﹐重要節目是欣賞花車巡遊和煙花。迪士尼巡遊載歌載舞很熱鬧﹐每天下午也有大巡遊﹐其他特定時間也有表演節目。迪士尼樂園的巡遊以前看過﹐十年如一日有點老土﹐反而加洲冒險樂園的Pixar人物巡遊有趣很多。這次我們把善用時間﹐欣賞全部三個晚間大型節目。煙花是迪士尼的標誌﹐在藥園內看以城堡為背景看煙花﹐卡通人物飛天穿插其中﹐配合動聽的迪士尼音樂﹐用煙花編織出一個故事。平時新年或國慶時的煙火﹐相比之下只是狂燒銀紙亂放一通。Fantasic和World of Colour有點相似﹐也是用水銀幕和噴火﹐分別是前者配上真人演出﹐後者則配上花款噴水和幻彩燈光。與卡通人物合照也是重要節目﹐我們差不多見到有卡通人物前去影相。我和跳跳虎拍照時﹐我刻特扮跳跳虎在狂跳﹐要卡通人物和我一起跳。扮演跳跳虎的演員大慨心中咒罵我﹐要他穿著十多磅的化粧戲服﹐在加洲的烈日不停地跳﹐不辛苦得累死才怪。可是他要在遊客面扮前真的跳跳虎﹐在卡通中跳跳虎終日跳過不停﹐他只好勉為其難跟著我跳。誰叫他們在我排隊時﹐躲懶回後台休息﹐害我白等了十分鐘。第一天見到白雪公主﹐我覺得和迪士尼公主影相是女仔的事﹐所以我沒有和她拍照。第二天我想到了一個好點子﹐特地帶了個蘋果去扮引誘白雪公主「請咬一口」的合照﹐可惜卻遇不到白雪公主。

玩具奇兵綠色膠兵

反斗車王

其實我一向不是太喜歡迪士尼卡通人物﹐畢竟我是喝日本動畫奶水長大﹐總視美國動畫太過低能幻稚﹐王子與公主故事老土過時。最叫人受不了是動畫中忽然唱歌﹐不知道的還以為是在看印度波里活電影。一直到Pixar電腦動畫的出現﹐小朋友開心到看表面的歡樂﹐大人看到深一層的寓意﹐才改變我對迪士尼動畫的看法。很多人對迪士尼樂園趨之若鶩﹐對米老鼠十分著迷﹐可是我身在樂園之中﹐總是有一份抽離現實的違和感﹐對人工營做出來的歡樂抱著懷疑態度。我反而好奇迪士尼的魔法背後﹐令瘋魔千萬大人小朋友的市場規律。

DAC Technical Review (Day 4,5)

The exhibition floor is over in day 4 and 5. In day 4, I attended user track presentation on verification and a technical session on What input language for HLS. In day 5, I attended a workshop on Software Engineering using Agile Software Development technics

User track presentation on verification

In the presentation Migrating HW/SW co-verification platforms from simulator to emulators, it outlines a few challenges in the flow: 1. compile ASIC/IP vendor simulation model to the emulator. 2. generate the primary clock in emulation. 3. Use transaction based VIP or use emulator specific transactor IP.

In the presentation A Methodology for automatic generation of register bank RTL, related verification environment and firmware headers, it outlines a flow similar to our RDA flow. The difference between RDA and their flow is they support IP-XACT as the register definition flow and using tcl/Java to generate the files. The register XML files is translated into Java class, then registers are read from the Java class to generate the register RTL, vr_ad register files and firmware headers files. Their flow does not support auto-generation of backdoor path in vr_ad, neither does our RDA flow.

In the presentation Utilizing assertion synthesis to achieve an automated assertion-based verification methodology for a complex graphics chip designs, nVidia demonstrate the use of the Nextop tool to generate properties representing design functionality. The flow is pretty much the same as what’s outlined in Nextop’s booth. The presentation has introduced a few new concepts, first is the notation of assertion density, which measures the number of assertion properties required to define the functionality of the design. Then there is the difference between synthesized properties and synthesable properties. The first one refers to the properties auto-generated using Nextop’s flow, the later one refers to the assertion is able to run inside the emulation box. However the specification mining is only as good as the simulation traces feed into tool.

In the presentation A smart debugging strategy for billion-gate SOCs, Samsung present a solution to a common problem we have in verification. When a simulation fails, we need the waveform to debug. On one hand, takes time to rerun the simulation and dump all the waveform. On the other hand, it takes up disk space and slow the simulation down if we start dumping all the waveform in all simulation runs. An approach to solve this problem is save check points in the simulation, then rerun the simulation and dump the waveform from the closest check point to where the simulation fails. We attempted to implement a home grown solution using ncsim’s native save/reload function, but save/reload function has been very buggy and very inefficient in term of snapshot size. The presentation introduces a tool from System Centroid called SSi-1 to automate the flow. It worth to evaluate SSi-1 to see how well it solves the problem of dumping waveform in re-simulation. The only concern is System Centroid is a Korean company and most information in its website is written in Korean.

In the presentation Bug hunting methodology using semi-formal verification techniques, ST Microelectronics introduce a way to combine the formal verification with simulation. The idea is invoke the formal engine in pre-defined search point during the simulation to limit the scope of formal search space. The formal engine can be triggered when a certain RTL condition is met, on interval, on FSM or on coverage.

What Input Language is the best choice for High-Level Synthesis (HLS)?
This is the most heated debate session in DAC. The panel invited speakers from Cadence, Mentor, Synfora, Bluespec, Forte and AutoESL for this show down on their HLS methodology. In this a three way debate, the languages of choices are C/C++, System C and System Verilog. All the speakers are biased one way or another because they are representing their company which invested millions of dollar in a certain language, so they really advocate their choice of language is better than others.

The benefit of using System Verilog over C++ or System C is SV allow the designer specify hardware architecture. The weakness of System C or C++ follows sequential models as it lacks ways to specify concurrent models. Architecture decision cannot be made by the synthesis tool since it is the first order optimization. C++ or System C HLS tool has to use compile directives to specify the hardware architecture.

The benefit of C/C++ is the only language used by both HW/SW developers. Algorithm are modeled in C/C++, so it makes C/C++ the most native input to HLS tool. Modeler or SW developer does not need to learn a new language and there is no need to translation the code in C/C++ to another language. Using C/C++ can postpone defining the architecture by separate the layer of abstraction or even making decision on the HW/SW boundary.

System C is kinda half way between C/C++ and System Verilog. The advocate thinks it has the best of both world, but others thinks it got the worst of the both world. It provides limited language construct to define timing related information and concurrency statements. It can define more accurate hardware architecture than C/C++, but it also carries the burden of a 40 years old programming language that is not design to describe hardware implementation in the first place. However, System C is supported by Cadence, Mentor, Forte and NEC CyberWorkBench, the four biggest HLS tool vendors.

Agile Programming Techniques
I signed up a full day workshop on How to Write Better Software in day 5. The workspace is conducted by IBM internal software training consultants. IBM is huge on agile software development. Agile project focus on four elements, stable, time-boxed short iterations, stakeholder feedback, self-directed teams and sustainable pace. The workspace introduced two agile methodologies, eXtrememe programming (XP) and Scrum.

In XP, there are 12 programming practices, the instructor did not go over all of them in the workspace. The major practices they had mentioned are: 1. Lean-software development, 2. test-driven development (TDD), 3. automation, 4. continuous integration/build and 5. pair programming. Lean-software development apply value stream map to eliminate waste. TDD focus on the idea unit test and re-factoring.

In scrum, the project is divided into 2-4 week sprints. In the beginning of sprint, there is a sprint planning meeting. The product owner determine the priority of all the user stories in the product backlog. Then scrum team will pick the sprint backlog and commit to the sprint goal. Scrum master remove road blocks of the scrum team. A user story describes functional that will be useful to a stakeholder of the system. Within a sprint period, the team should get everything done, (coded, tested, documented) of the picked user stories. The scrum team will conduct short 15 minutes daily scrum meeting to report the progress from yesterday, the plan for tomorrow and road blocks need to resolve. At the end of the sprint period, there is a sprint review meeting and demo of the sprint goal. Unfinished user stories should put back to the product backlog and re-evaluate its priority.

Verification is a huge software project on its own as we already created more lines of code than the RTL design. I think applying Agile programming techniques will help us to improve the quality of work. The workshop is just an introduction to Agile, it outlines what Agile is and its potential benefits, but it leaves out details on the know-how. It would be nice to learn more on how to apply Agile in verification setting as our work is not exactly the same as software development projects in IBM. Moreover, knowing the principles of Agile is one thing, avoiding pit-falls during the execution is another thing. There are many real-life problems need to be sorted out to make an Agile project successful. The workshop did not talk about how to estimate schedule with Agile given that the planning is only done within each sprint, how to manage people within a Agile team, how to deal with free riders or how to deal with difference in skill levels or how to deal some tasks that no one want to work.

Given the workshop is a 3 days IBM internal training squeezed into 1 day, it is understandable that a lot of information is left out. However I am leaving the workspace unsatisfied, I expected to learn more about Agile from the workshop.