龍語言應該如何設計?
最近在學習《數字設計和計算機體系結構》深受Verilog、VHDL等硬體描述語言影響
龍 Language?github.com純學術研究目的重新造輪子,先可能集中在Clang前端、LLVM中端邏輯門、C2V、V2C等PASS的研發,雖然可以當作通用領域編程語言使:
#ifdef DEBUG
#include &
#endifhmodule silly {
public:
silly(input a,
input b,
input c,
output y) {
#ifndef DEBUG
__assign(y = ~a ~b ~c |
a ~b ~c |
a ~b c);
#endif
}#ifdef DEBUG
public:
static void sillyfunction() {
std::cout &<&< "Hello world by Loong" &<&< std::endl; } #endif }; void t(bool b) { silly s(1, 1, 1, 0) } #ifdef DEBUG int main(int argc, char *argv[]) { silly::sillyfunction(); return 0; } #endif clang++ -std=c++17 -DDEBUG sillyfunction.loong ./a.out Hello world by Loong但學術研究重點重點重點在中端pass研發,歡迎大大們拍磚。
有DragonEgg遷移經驗,熟悉GCC前端 -&> GIMPLE -&> LLVM IR
xiangzhai/dragonegg?github.com還有量子計算語言ScaffCC遷移經驗,熟悉量子門變換成QASM等PASS原理
ScaffCC?github.com開始用龍語言重新實現E203作為最大的測試用例
Loong-Language/e200_opensource?github.com
你自己的東西還要問別人怎麼設計,就說明你不應該自己設計。
我第一次見到自己想要發明個東西,卻要問別人怎麼設計的。
如彼築室於道謀,是用不潰於成。
散了吧散了吧,題主就是來顯擺一下讓大家去膜拜他的。
沒有任何文檔,沒有形式語義,不談目標,不談原則,讓別人怎麼提建議?自己連設計都沒有,跑出來問別人怎麼設計,被問設計文檔在哪,反來教育別人要謙虛?自問自答帖幾張《Digital Design and Computer Architecture》書本的截圖,不知道想幹嘛?
請教幾個問題…
語法上基本保留C/C++?
IR的優化是針對生成的電路嗎?因為是source to source,生成的verilog怎麼樣判斷哪種代碼生成的電路更優?
語法上的改進是為了表達力更強? 寫代碼更短更快?還是為了降低軟體工程師學習硬體設的門檻?
同類的chisel 和 sv,對比起來有什麼優勢嗎?
參考 golang 吧。
中國人做語言,我覺得應該有一些附加的功能。
比如源代碼必須固定編碼,而且必須顯式聲明這個源代碼的編碼。雖然 utf-8 已經成了事實標準,但是真的很難說會不會出現意外問題。
用於輸出的字元串,全自動的剝離源代碼生成的程序文件而強制變成外掛式的語言文件。這樣翻譯程序的時候,直接翻譯外掛的語言文件就行了,不用修改源代碼。並且程序可以自動適應字元串的長度變化。
程序源代碼支持直接調用外掛式的數據文件,程序編譯的時候,自動把外掛的數據文件嵌入到程序中。而且支持模版生成源代碼,並且調用外掛式的數據文件生成針對性的批量程序源代碼。
禁止嵌入式彙編,只允許使用這個語言的函數,直接和硬體關係完全剝離。優化完全靠編譯器實現。
- 語言規範《數字設計和計算機體系結構》第四章 硬體描述語言。根據4.3章節 Structural Modeling 結構化需求,將龍語言定義為「類C++」、「類Verilog」硬體描述語言:
$ cat mux2.loong
hmodule mux2 {
mux2(input d0[3],
input d1[3],
input s,
output y[3]) {
for (auto i = 0; i &< 3; i++) {
y[i] = s ? d1[i] : d0[i];
}
}
};
$ cat smux4.loong
#include "mux2.loong"
hmodule mux4 {
mux4(input d0[3],
input d1[3],
input d2[3],
input d3[3],
input s[1],
output y[3]) {
wire low[3], high[3];
mux2 lowmux(d0, d1, s[0], low); // &<--- 復用mux2模塊
mux2 highmux(d2, d3, s[0], high); // &<--- 復用mux2模塊
mux2 finalmux(low, high, s[1], y); // &<--- 復用mux2模塊
}
};
- 2001年大學計算機科學與技術本科教育《電工學(下冊)》組合邏輯電路。
- 以及時序邏輯電路。
- 微體系結構以MIPS為例子,介紹了單時鐘、多時鐘、流水線處理器設計,重點提到:深度流水線、分支預測、超標量處理器、亂序處理器、寄存器別名、SIMD、多線程等高級微體系結構。
- 體系結構的總體概括,依然以MIPS為例子,並推薦另一本書《See MIPS Run》
https://book.douban.com/subject/1873923/?book.douban.com
- 學術研究的重點:流水線優化,希望通過研發Loong PASS解決:數據、控制、結構衝突。
學徒敬禮!
以上持續補充,請大大們拍磚。
乍一看標題我以為你想搞龍語魔法……
推薦閱讀:
※內存映射IO (MMIO) 簡介
※【預告】《大話計算機》內容你點我貼
TAG:編程語言 | LLVM | 計算機體系架構 | 數字IC設計 | veriloghdl |