數位電路設計系列 - 下線流程概述
接續我們上一篇的前言
,今天我們就先來看看整個下線流程概述,
這篇文的目標是讓大家對下線流程有一定的了解,後面的文章才好懂。
本來計劃是前言打完就趕快發這篇,但我想在 11 月下線的晶片回來,確定下線成功符合當初設計再來繼寫後面的文,
這樣底氣才夠講話才能大聲……沒錯一定是這樣,絕對不是我下班之後回家都在耍廢的關係。
接續我們上一篇的前言
,今天我們就先來看看整個下線流程概述,
這篇文的目標是讓大家對下線流程有一定的了解,後面的文章才好懂。
本來計劃是前言打完就趕快發這篇,但我想在 11 月下線的晶片回來,確定下線成功符合當初設計再來繼寫後面的文,
這樣底氣才夠講話才能大聲……沒錯一定是這樣,絕對不是我下班之後回家都在耍廢的關係。
書名 | 和平的代價:貨幣、民主與凱因斯的一生 |
原書名 | The Price of Peace: Money, Democracy, and the Life of John Maynard Keynes |
作者 | Zachary D. Carter |
譯者 | 賴盈滿 |
出版商 | 春山出版 |
出版日 | 2022-11-22 |
ISBN | 9786267236024 |
故事是這樣子的,最近工作之餘頻繁地遇到 NTT 這個東西,但這個東西不是很好懂,所以想說來筆記一下, 順便用一個簡單的例子來說明 NTT/INTT 的流程與結果。
簡而言之呢,NTT 就是 Nippon Telegraph and Telephone 日本電信電話…欸不是這個 NTT ,這邊要講的是 number-theoretic transform,中文是翻數論轉換。
可以把它看成離散傅立葉轉換 DFT 的一個通用的形式,把一個數或一個多項式分解成多個選定的因子的向量;
反向的 Inverse NTT 則可以反過來從分解開來的向量再轉回去本來的元素。
為什麼要用 NTT 呢?
就像傅立葉轉換把時域的訊號轉到頻域上,讓時域的 convolution 轉成頻域直接相乘;
本來 Finite field 的 convolution ,在 NTT 轉換後可以變直接乘,對整數或多項式的乘法來說很有用。
故事是這樣子的,在睽違多年之後,最近又回頭去摸了數位電路設計與 tapeout,一個我已經疏遠許久的領域,在 11/13 的時候, 以壓線之姿送出人生第一顆數位電路晶片,寫這篇序文用來記錄未來相關的發文。
...故事是這樣子的,自從四年前寫了第一次教召就上手 , 依照兩年一召的頻率,隨後在 2021 年六月本來要二召,但因為武漢肺炎本島爆發就全部取消,但該來的逃不過, 今年第三召,因為跟第一次召訓的差別有點大,值得再寫一篇來討論。
...這次開發 RSA 256 ,整體來說我覺得比 2010 年那時候順多了。
2010 年因為第一次接觸 verilog 和 FPGA,在兩個月內要衝出 RSA 256,自然也不會懂什麼 valid/ready,
現在回去看介面都是用 start 配 ready,相當於只有 i_valid 跟 o_valid,除此之外都是簡單暴力的狀態機,
放一下那時候報告畫的 state diagram 給大家笑一下,根本大雜燴什麼都攪在一起。
上一回設定好 testbench 之後,終於可以來寫 verilog 了,這回就來看看我們怎麼用我們這套 Testbench, 搭配 verilog 的 pipeline 設計來實作 RSA256。
...準備好 C model 和 SystemC 之後,我們的主角 verilator 終於帥氣登場啦。
verilator 會做什麼呢?它的使用流程是這樣子的,它會先分析你寫的 verilog/system verilog 檔案,
然後把它轉成一個 C++ 的標頭檔與實作,裡面的 class 會模擬你寫的 verilog 的行為。
接著你寫另一個 C++ 程式,初始化 verilator 產生出來的 class,餵它 clock 和其他你想要測試的信號,
就能模擬 verilog module 在接收這些信號時的行為,詳細的使用方式,一樣請參考強者我同學 johnjohnlin 的 blog
。
COSCUP 2023
又到了一年一度大拜拜的時候了,經過去年全員戴口罩的第一次實體
,
今年完全解封感受得出氣氛輕鬆很多,外國人也來了不少。
自從 COSCUP 免費之後可以看出規模有一年比一年大的感覺,今年研揚已經開到六樓都全滿了,再來不會要開另一棟大樓吧。
今年也推坑沒參加過 COSCUP 的人來參加一下,幫 COSCUP 增加一些生力軍,他主力在語言相關的議程還有 k8s 等等;現在正在推坑他明年也來投稿一下XD。
在去年五月上一回的文章
中,我們做到了 OS 版的 hello world,
讓 user process 呼叫 print 的 syscall,並由 OS 處理該 syscall 印出 hello world。
在這之後我花了一段時間(好長的一段)思考到底要做什麼,後面 xv6 依序初始化的東西包括幾個:
後來發現 1,2,3 都相依於 4,沒有 virtio 讀不了磁碟那還管什麼 file, inode; User process 在沒有 4 的狀況下,寫起來也是綁手綁腳,於是就決定先挑戰 qemu 的 virtio。
...