龍語言應該如何設計?

最近在學習《數字設計和計算機體系結構》深受Verilog、VHDL等硬體描述語言影響

龍 Language?

github.com圖標

純學術研究目的重新造輪子,先可能集中在Clang前端、LLVM中端邏輯門、C2V、V2C等PASS的研發,雖然可以當作通用領域編程語言使:

#ifdef DEBUG
#include &
#endif

hmodule 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 |