摘要: 以上是有人發現的文章,然後和我討論,建議應該把” default: y=1’bx”換成是” default: y=1’b0”或是default: y=1’b1”。反正就是不應該是1’bx,不然會造成系統不穩,或是合成時,會有問題。” default: y=1’bx”真的會有問題嗎?做為一個數位工程師,邏輯推理能力應該是我們自豪的。原英文描述是說在模擬(simulation)時,會有pre-synthesis simulation和post-synthesis simulation的結果不相同(mismatch),所以如果你是想要它相同的話,你應該是把1’bx換成是固定的值,這樣子,每次模擬時, 阅读全文
posted @ 2014-03-17 10:18 Orchid123 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 有很多剛出社會的工程師,被指派FIFO設計工作時,心裏面一定都會想,這個這麼簡單,有沒有更難的,我可不是來這邊做這種簡單的設計。我是來學更難的東西。其實,一個基本功好的工程師,他的FIFO design也一定是很紮實。FIFO常被用來解決很多的問題,所以FIFO的設計也牽扯到很多的問題,例如:跨clock domain的處理?serial轉parallel問題?兩邊不同的Spec要怎麼溝通?兩個存取速度不同時,要怎麼溝通?這些問題看似不同,但是其實都是同一種的本質—FIFO兩邊的步調不同。既然核心問題只有一個,那解法不就是一種就可以了?那為什麼網路上FIFO的架構有那麼多?(當然,條條道路通羅 阅读全文
posted @ 2014-03-10 10:30 Orchid123 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 上個星期提出如何將binday code 轉換成gray code。今天就講如何將gray code轉換成binary code.module gray2binary(gray, bin);input [4:0] gray;output [4:0] bin;assign bin[4] = gray[4];assign bin[3] = ^gray[4:3];assign bin[2] = ^gray[4:2];assign bin[1] = ^gray[4:1];assign bin[0] = ^gray;endmodule有興趣的人可以試著推看看,是不是這樣子就可以將gray code還原成 阅读全文
posted @ 2014-03-03 10:31 Orchid123 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 今天就不說太硬的概念。說一些比較實際的做法。binary to gray code的verilog做法。gray code是許多人遇過,而且很多人都會做,這裏有一個小小做法,簡單,而且不複雜,可以提供大家參考。module bin2gray( bini,grayo);input [4:0] bini;output [4:0]grayo;assign grayo = bin ^ {1'b0, bin[4:1]};endmodule以下是3-bit binary 和gray code的對照。000 000001 001010 011011 010100 110101 111110 1... 阅读全文
posted @ 2014-02-24 10:08 Orchid123 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 以前設計過power management的FSM。想把它總結出來,但是,每個chip的情形都不相同,要總結出它所有的規則是因難的。但我想把自己的經驗提供出來給大家參考,請大家多多指教!如果有任何更好的方法或是觀念,歡迎留言給我,讓我也能學習到更好的方法。我的想法裏,認為power management有一個大的觀念可以去思考,在此提出來。不見得每個都適用,主要還是要看你自己的系統真實的情形 。Fist-In-Last-Out(FILO),最先關的,最後醒。為什麼要這麼說,以下舉幾個例子來說明。1.降頻節省power :如果你想降頻節省某一塊的power,你會怎麼做?1).降低頻率.2). p 阅读全文
posted @ 2014-02-17 10:21 Orchid123 阅读(170) 评论(0) 推荐(0) 编辑
摘要: 做為一個數位設計的工程師,最常遇到的情形就是訊號需要跨clock domain的處理。能使用的解決方法有很多,每個需要處理的情況也不儘相同,所以我並不就實作方法著眼,只想談談處理它的概念。為什麼要處理跨clock domain的訊號?使用來自其它clock domain的訊號時,容易會遇到metastable的情形,而致使產生錯誤結果。為了避免錯誤的發生,此時就需要同步來自其他clock domain的訊號。但是要怎麼做,才能做好同步處理?如果可以謹記下面的觀念,相信您一定就可以做出自已的同步訊號處理。1. 遵守two-flip-flop的方法。處理metastable的最基本的步驟就是用本身 阅读全文
posted @ 2014-02-10 18:13 Orchid123 阅读(489) 评论(0) 推荐(0) 编辑
摘要: 做為一個數位IC設計初學者,好的coding習慣是很重要的。它能讓你的程式被別人讀懂,而且程式的穩定度也比較高。那什麼是好的coding習慣。1. 只使用positive edge (negative edge) clock來做為取樣的時間點(sampling data time). 在coding時,堅持只使用clock的一邊(edge)來做為你取樣的時間點(sampling data time)。這樣子可以增加程式的易讀外,也能讓你的程式行為(behavior)單純,在synthesis時比較好處理。且在做ATPG時,也比較容易處理。只用單一邊做為你的時間點,它的穩定度比較高。這就像是你在 阅读全文
posted @ 2014-02-10 18:04 Orchid123 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 剛來乍到的工程師,常常會寫一些很炫的技巧,來實現他的硬體設計。我覺得很好,也可以讓我多學學不同的技巧,也是不錯。但是,常常在我問過一些問題後,我就不知道該怎麼說他了。在這兒想分享一些觀念,希望能有所幫助。1.技巧很重要,但是如果你不知道在synthesis階段時,應該要寫什麼樣子的constrain來synthesize你的程式時,建議不要使用,因為你會讓你的整合工程師頭很大。2. balance clock tree的觀念很重要,請不要告訴你的整合工程師說,你的clock tree就是要no balance,timing才會是對的。數位工程師所有的想法都是在balance tree底下設計。 阅读全文
posted @ 2014-02-10 18:03 Orchid123 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 在學校時,老師常說「在寫程式前,請先畫好你的流程圖、方塊圖、波形圖,然後才開始動手寫程式。」我不知道有多少人有這樣子做。不過這真的是好的習慣。我常常遇到剛來的工程師跑來找我說「學長,幫我看看我的程式怎麼了,為什麼出來的不是我想要的結果?」然後他點開他的程式讓我看,我心裏想,這誰會看得懂?在此建議,做為一個初學者,要習慣畫流程圖、方塊圖、波形圖。當你在畫這些圖時,你的腦袋裏面也同時在依循這些圖在思考、推論,幫助你去思考自己的邏輯的盲點。程式並不是人類的語言,是電腦的語言。人類最直觀的語言就是圖畫。如果你把流程圖、方塊圖、波形圖都畫好,當你想跟別人討論時,別人才能從圖畫中快速了解你的想法,這樣子才 阅读全文
posted @ 2014-02-10 17:58 Orchid123 阅读(125) 评论(0) 推荐(0) 编辑