About Cosense
Help
Log in
uchan
C
o
m
P
r
o
c
Related
Sort by
Related
Modified
Created
Last visited
Most linked
Page rank
Title
Links
自作CPU向けメッセージングプロトコル
ComProc PC
自作CPUとベースボードのバージョン管理
ComProcのハーバードアーキテクチャ化
#ComProc CPUは、2024年8月時点では[ノイマンアーキテクチャ]命令長は固定16ビット幅必然的に即値は16ビットより小さくなるPUSH uimm15CALL simm12
ComProc MCUでサーボモータ自作
アセンブラ内インタプリタ
アセンブラを高機能化すると、アセンブラ内にインタプリタが欲しくなるアセンブラ内で計算式を処理するため`char *p = "012"+1;`において、`p`に定数を初期値として与えたいコンパイル時点で文字列のアドレスは不明なので、単一の値としてのアドレス値を算出することはできない`STR_LABEL + 1`のように、文字列の先頭アドレスをラベルとして残さざるを得ない
ComProc CPUのアドレス空間拡大
現在 #ComProc CPU が扱えるプログラムメモリは4KiB即値付き分岐命令の即値幅がsimm12なのでだから、正確には±2KiBということになるデータメモリは64KiBのアドレス空間があるが、効率的に扱えるのは1KiB即値付きロード・ストア命令の即値幅がsimm10なので
ComProc MCUのIPL
やりたいこと#ComProc MCUにIPL([Initial Program Loader])を追加フラッシュメモリにユーザープログラムを格納し、IPLから呼び出して実行2024/03/21時点の設計readmemhで、RAMの初期値としてIPLを配置
ComProcのUART通信プロトコルの改良
SystemVerilogでLED表示を変えるだけで挙動が変わる謎
ComProcの代入式に対する最適化
#ComProc コンパイラの代入式を効率化したい`int main() {``int i;``i = 2;``return 0;`
ComProcコンパイラの最適化機能
#ComProc コンパイラに最適化機能を搭載したい。現状のコンパイラの出力`void delay_ms(int ms) {``int *t = 2;``*t = ms;`
ComProcに即値付きメモリアクセス命令のバイトバージョンを追加する
#ComProc に`LD.1 X+simm10`と`ST.1 X+simm10`を追加するI/Oにはバイトアクセスする物があるし、charの配列を読み書きするようなときにもバイトアクセス命令が欲しい。命令空間が余っているので、バイトアクセス命令を増やすことにした。`JZ simm12 |0001 simm11 0| stack から値をポップし、0 なら pc+simm12 にジャンプ`
コード生成後の命令列ではなく、コード生成時に最適化を行う
#ComProc コンパイラの最適化ロジックをコード生成時に移動した話対応するコミット https://github.com/uchan-nos/comproc/commit/67ea58a24c628d27d0aab1984e140c06703df7c3モチベーション以下のようなコードを最適化したい`PUSH cstack+N`
ComProcのメモリ読み書き命令の即値幅
#ComProc のメモリ読み書き命令の即値幅について考察2023年5月末時点(コミット 0e80005)の仕様`mnemonic 15 87 0 説明``------------------------------------``LD X+simm10 |0010xx simm9 0| mem[X+simm10] から読んだ値を stack にプッシュ`
ComProcコンパイラとXC8の出力比較
#ComProc コンパイラと #XC8 コンパイラが出力するコードを比較する#ComProc コンパイラは [ComProcコンパイラの最適化機能#64740149d1e8c10000921c0b] を実装したバージョンXC8 は -O2 オプションを有効化した実験コード`void led_out(int val) {`
コンパイラのラベル生成のやり方
#ComProc コンパイラのラベル生成手法各アドレスに高々1つだけラベルを許容する方法`label: opcode operand`を尊重これを達成するのはかなり面倒ifやforなどの制御構文の出口ラベルを上位の制御構文の処理時に生成し、Generateの引数として指定せねばならないため
命令セットの改良
#ComProc の2023/04/11時点の命令セット(旧ISA)から、新しいデータパスを利用した命令セット(新ISA)への進化フレームポインタ管理`int delay_ms() {``int *t = 0;``*t = 2;`
ComProcWorkshop
四則演算が出来る程度のCPUと、C言語風の式を解釈できるコンパイラを作ろうというワークショップ#ComProcテキスト:[CPUコンパイラ自作ワークショップのテキスト]
Created
a few seconds ago
by
Kota Uchida
Updated
a few seconds ago
by
Kota Uchida
Views: 1
Page rank: 0
Copy link
Copy readable link
ComProc